lunisolar
Version:
专业农历库,支持公历阴历互转,支持各类黄历数据查询,如八字四柱、阴历、神煞宜忌、时辰吉凶、建除十二神、胎神占方、五行纳音等。支持自定义插件。
178 lines (172 loc) • 5.87 kB
text/typescript
/*
建除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<string>) => {
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<string>) => {
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]
}