/* 建除12神 建满平收黑,除危定执黄; 成开皆可用,闭破不可当。 */ import { getBranchValue } from '../../../utils' export const duty12GodNames = [ '建', '除', '滿', '平', '定', '執', '破', '危', '成', '收', '開', '閉' ] as const const duty12GodData: { [key in (typeof duty12GodNames)[number]]: [ string[] | null, string[] | null, GodDictItemExtra | null, number ] } = { 建: [ '施恩封拜 詔命公卿 招賢 舉正直 行幸 遣使 上官赴任 臨政親民 訓兵 出師'.split(' '), ['結姻親', '開倉庫'], null, -1 ], 除: [ '解除 沐浴 整容 剃頭 整手足甲 求醫療病 掃舍宇 施恩封拜 舉正直 行幸 遣使 上官赴任 臨政親民 安撫邊境 選將訓兵 出師'.split( ' ' ), null, null, 1 ], 滿: [ ( '進人口 裁製 修倉庫 經絡 開市 立券 交易 納財 開倉庫 出貨財 補垣塞穴 ' + '祭祀 祈福 上冊進表章 慶賜 賞賀 宴會 修宮室 繕城郭 ' ).split(' '), '施恩封拜 詔命公卿 招賢 舉正直 上官赴任 臨政親民 結婚姻 納采問名 求醫療病'.split(' '), { actsFilter: (lsr: lunisolar.Lunisolar, gods: Set) => { const mbValue = getBranchValue(lsr, 'month') if ( ([2, 8].includes(mbValue) && gods.has('守日')) || ([0, 3, 6, 9].includes(mbValue) && gods.has('相日')) || ['月德', '天德合', '月德合', '月恩', '四相'].some(item => gods.has(item)) ) { return { replace: { bad: [] } } } return null } }, -1 ], // 平日 又為死神 平: [ ['修飾垣墻', '平治道涂'], ( '祈福 求嗣 上冊進表章 頒詔 施恩封拜 詔命公卿 ' + '招賢 舉正直 宣政事 布政事 慶賜 賞賀 宴會 行幸 遣使 ' + '安撫邊境 選將訓兵 出師 上官赴任 臨政親民 結婚姻 納采問名 嫁娶 進人口 般移 安床 解除 ' + '求醫療病 裁製 營建宮室 修宮室 繕城郭 興造動土 豎柱上梁 修倉庫 ' + '鼓鑄 經絡 醞釀 開市 立券 交易 納財 開倉庫 出貨財 修置產室 開渠穿井 栽種 收養 納畜 破土 安葬 啟攢' ).split(' '), null, -1 ], 定: [ ['冠帶', '運謀算', '畫計策'], ['上表章', '陳詞訟', '戰鬥', '征伐', '求醫療病', '安置產室', '經營', '栽種'], null, 1 ], 執: [['捕捉'], null, null, 1], 破: [['求醫療病', '破屋壞垣'], null, null, -1], 危: [['安撫邊境', '選將訓兵', '安床'], null, null, 1], 成: [ ( '入學 安撫邊境 般移 筑堤防 開市 施恩封拜 舉正直 慶賜 賞賀 宴會 行幸 遣使 ' + '上官赴任 臨政親民 結婚姻 納采問名 嫁娶 求醫療病' ).split(' '), null, null, 1 ], 收: [ ['進人口', '納財', '捕捉', '納畜'], ( '祈福 求嗣 上冊進表章 頒詔 施恩封拜 詔命公卿 ' + '招賢 舉正直 宣政事 布政事 慶賜 賞賀 宴會 冠帶 行幸 遣使 ' + '安撫邊境 選將訓兵 出師 上官赴任 臨政親民 結婚姻 納采問名 嫁娶 般移 安床 解除 ' + '求醫療病 裁製 營建宮室 修宮室 繕城郭 興造動土 豎柱上梁 修倉庫 ' + '鼓鑄 經絡 醞釀 開市 立券 交易 開倉庫 出貨財 修置產室 開渠穿井 破土 安葬 啟攢' ).split(' '), { actsFilter: (lsr: lunisolar.Lunisolar, gods: Set) => { if (['月恩', '四相', '時德'].some(i => gods.has(i))) { return { add: { good: ['修倉庫'] } } } return null } }, -1 ], 開: [ ( '祭祀 祈福 求嗣 上冊進表章 頒詔 覃恩 肆赦 施恩封拜 詔命公卿 ' + '招賢 舉正直 施恩惠 恤孤煢 宣政事 行惠愛 雪冤枉 緩刑獄 慶賜 賞賀 宴會 入學 行幸 遣使 ' + '上官赴任 臨政親民 般移 解除 ' + '求醫療病 裁製 修宮室 繕城郭 興造動土 豎柱上梁 ' + '開市 修置產室 開渠穿井 安碓磑 栽種 牧養' ).split(' '), ['伐木', '畋獵', '取魚', '破土', '安葬', '啟攢'], null, 1 ], // 閉日又名血支 閉: [ ['筑堤防', '補垣塞穴'], ( '上冊進表章 頒詔 施恩封拜 詔命公卿 ' + '招賢 舉正直 宣政事 布政事 慶賜 賞賀 宴會 冠帶 行幸 遣使 ' + '出師 上官赴任 臨政親民 結婚姻 納采問名 嫁娶 進人口 般移 安床 ' + '求醫療病 營建宮室 修宮室 興造動土 豎柱上梁 ' + '開市 開倉庫 出貨財 修置產室 開渠穿井 針刺 療目' ).split(' '), null, -1 ] } export const getDuty12GodDataBykey = (key: string) => { return duty12GodData.hasOwnProperty(key) ? duty12GodData[key as (typeof duty12GodNames)[number]] : null } export const getDuty12GodIndexAndKey = function ( lsr: lunisolar.Lunisolar ): [number, (typeof duty12GodNames)[number]] { const godIdx = (getBranchValue(lsr, 'day') + 12 - getBranchValue(lsr, 'month')) % 12 const key = duty12GodNames[godIdx] return [godIdx, key] } /** * @param lsr The instance of Lunisolar * @returns [建除12神索引, 名稱,宜[], 忌[]] */ export const getDuty12God = function ( lsr: lunisolar.Lunisolar ): [number, string, string[] | null, string[] | null, GodDictItemExtra | null, number] { const [godIdx, key] = getDuty12GodIndexAndKey(lsr) const extraDefault = { showGB: false } const [goodAct, badAct, extra, luckLevel] = duty12GodData[key] return [godIdx, key, goodAct, badAct, Object.assign({}, extraDefault, extra), luckLevel] }