dsh-metaphysics 0.46.5 → 0.50.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +100 -0
- package/README.md +11 -6
- package/client.js +571 -54
- package/engine/almanac.js +7 -6
- package/engine/bazi.js +62 -0
- package/engine/classics.js +40 -3
- package/engine/crosscheck.js +29 -3
- package/engine/geju.js +49 -5
- package/engine/index.js +24 -6
- package/engine/interpret-knowledge.js +17 -8
- package/engine/interpret-plain.js +15 -2
- package/engine/interpret.js +41 -4
- package/engine/liuyao.js +100 -0
- package/package.json +2 -2
- package//345/221/275/347/220/206/346/216/222/347/233/230.html +522 -76
package/engine/almanac.js
CHANGED
|
@@ -3,9 +3,10 @@
|
|
|
3
3
|
// 提供:农历日期、年/月/日干支(年按立春界,另列春节界生肖)、节气、建除十二神、
|
|
4
4
|
// 冲煞(冲什么生肖 / 煞在何方)、财神与喜神方位、建除简表宜忌、每日一卦。
|
|
5
5
|
//
|
|
6
|
-
// 诚实边界:本插件不依赖 lunar-javascript
|
|
7
|
-
//
|
|
8
|
-
//
|
|
6
|
+
// 诚实边界:本插件不依赖 lunar-javascript;逐日全量吉神凶煞与彭祖百忌未收录——
|
|
7
|
+
// 输出里如实标注「未收录」,不臆造。值日十二神、二十八宿、胎神、吉神方位按通行表收录
|
|
8
|
+
// (见返回值的 scope)。宜忌只按「建除十二神」通行简表给出(传统择日的第一层判据),
|
|
9
|
+
// 不是逐日全量黄历。
|
|
9
10
|
import { solarToLunar } from './lunar.js';
|
|
10
11
|
import { nayinOf } from './nayin.js';
|
|
11
12
|
import {
|
|
@@ -110,7 +111,7 @@ export function tianShenOf(branch, anchorBranch) {
|
|
|
110
111
|
return { name, type, luck: type === '黄道' ? '吉' : '凶' };
|
|
111
112
|
}
|
|
112
113
|
|
|
113
|
-
/** 二十八宿:值日宿按「日支 +
|
|
114
|
+
/** 二十八宿:值日宿按「日支 + 星期」轮转(四组各七宿)。宿名按通行「宿·五行·动物」写法(壁水貐、胃土雉)。 */
|
|
114
115
|
export const MANSIONS = {
|
|
115
116
|
角: { luck: '吉', zheng: '木', animal: '蛟', gong: '东' }, 亢: { luck: '凶', zheng: '金', animal: '龙', gong: '东' },
|
|
116
117
|
氐: { luck: '凶', zheng: '土', animal: '貉', gong: '东' }, 房: { luck: '吉', zheng: '日', animal: '兔', gong: '东' },
|
|
@@ -118,9 +119,9 @@ export const MANSIONS = {
|
|
|
118
119
|
箕: { luck: '吉', zheng: '水', animal: '豹', gong: '东' }, 斗: { luck: '吉', zheng: '木', animal: '獬', gong: '北' },
|
|
119
120
|
牛: { luck: '凶', zheng: '金', animal: '牛', gong: '北' }, 女: { luck: '凶', zheng: '土', animal: '蝠', gong: '北' },
|
|
120
121
|
虚: { luck: '凶', zheng: '日', animal: '鼠', gong: '北' }, 危: { luck: '凶', zheng: '月', animal: '燕', gong: '北' },
|
|
121
|
-
室: { luck: '吉', zheng: '火', animal: '猪', gong: '北' }, 壁: { luck: '吉', zheng: '水', animal: '
|
|
122
|
+
室: { luck: '吉', zheng: '火', animal: '猪', gong: '北' }, 壁: { luck: '吉', zheng: '水', animal: '貐', gong: '北' },
|
|
122
123
|
奎: { luck: '凶', zheng: '木', animal: '狼', gong: '西' }, 娄: { luck: '吉', zheng: '金', animal: '狗', gong: '西' },
|
|
123
|
-
胃: { luck: '吉', zheng: '土', animal: '
|
|
124
|
+
胃: { luck: '吉', zheng: '土', animal: '雉', gong: '西' }, 昴: { luck: '凶', zheng: '日', animal: '鸡', gong: '西' },
|
|
124
125
|
毕: { luck: '吉', zheng: '月', animal: '乌', gong: '西' }, 觜: { luck: '凶', zheng: '火', animal: '猴', gong: '西' },
|
|
125
126
|
参: { luck: '吉', zheng: '水', animal: '猿', gong: '西' }, 井: { luck: '吉', zheng: '木', animal: '犴', gong: '南' },
|
|
126
127
|
鬼: { luck: '凶', zheng: '金', animal: '羊', gong: '南' }, 柳: { luck: '凶', zheng: '土', animal: '獐', gong: '南' },
|
package/engine/bazi.js
CHANGED
|
@@ -28,6 +28,24 @@ export const HIDDEN_STEMS = {
|
|
|
28
28
|
亥: ['壬', '甲'],
|
|
29
29
|
};
|
|
30
30
|
|
|
31
|
+
// 人元司权的 30 日表:余气 → 中气 → 本气,按「节」当日起算。
|
|
32
|
+
// 各家对日数分法不一(另有 7/7/16、9/3/18 等),这里固定通行 30 日表;
|
|
33
|
+
// 只作解释层的一层细节,不参与取格。亥月的余气戊不在本柱藏干表中,两表各照原样。
|
|
34
|
+
export const RENYUAN_TABLE = {
|
|
35
|
+
寅: [['戊', 7], ['丙', 7], ['甲', 16]],
|
|
36
|
+
卯: [['甲', 10], ['乙', 20]],
|
|
37
|
+
辰: [['乙', 9], ['癸', 3], ['戊', 18]],
|
|
38
|
+
巳: [['戊', 5], ['庚', 9], ['丙', 16]],
|
|
39
|
+
午: [['丙', 10], ['己', 9], ['丁', 11]],
|
|
40
|
+
未: [['丁', 9], ['乙', 3], ['己', 18]],
|
|
41
|
+
申: [['戊', 7], ['壬', 3], ['庚', 20]],
|
|
42
|
+
酉: [['庚', 10], ['辛', 20]],
|
|
43
|
+
戌: [['辛', 9], ['丁', 3], ['戊', 18]],
|
|
44
|
+
亥: [['戊', 7], ['甲', 5], ['壬', 18]],
|
|
45
|
+
子: [['壬', 10], ['癸', 20]],
|
|
46
|
+
丑: [['癸', 9], ['辛', 3], ['己', 18]],
|
|
47
|
+
};
|
|
48
|
+
|
|
31
49
|
export const STEM_ELEMENT = {
|
|
32
50
|
甲: '木', 乙: '木', 丙: '火', 丁: '火', 戊: '土',
|
|
33
51
|
己: '土', 庚: '金', 辛: '金', 壬: '水', 癸: '水',
|
|
@@ -204,6 +222,45 @@ export function applyTrueSolar(jd, longitude) {
|
|
|
204
222
|
};
|
|
205
223
|
}
|
|
206
224
|
|
|
225
|
+
/**
|
|
226
|
+
* 人元司权:生在本月第几日、哪一藏干当权。
|
|
227
|
+
* 日数按「节令日」与出生日的日差计,节当日为第 1 日;固定 30 日表,
|
|
228
|
+
* 第 31 日以后不再硬分摊,按本气算并标 beyond。
|
|
229
|
+
* @param {string} monthBranch 月支(寅…丑)
|
|
230
|
+
* @param {number} birthJdn 出生日的儒略日数(含真太阳时修正后的日)
|
|
231
|
+
* @param {number} termJd 本月「节」的儒略日
|
|
232
|
+
*/
|
|
233
|
+
export function renyuanOf(monthBranch, birthJdn, termJd) {
|
|
234
|
+
const table = RENYUAN_TABLE[monthBranch];
|
|
235
|
+
if (!table) return null;
|
|
236
|
+
const segments = [];
|
|
237
|
+
let from = 1;
|
|
238
|
+
for (const [stem, days] of table) {
|
|
239
|
+
segments.push({ stem, element: STEM_ELEMENT[stem], from, to: from + days - 1 });
|
|
240
|
+
from += days;
|
|
241
|
+
}
|
|
242
|
+
const tableDays = from - 1;
|
|
243
|
+
const day = Math.max(1, Math.floor(birthJdn) - Math.floor(termJd + 0.5) + 1);
|
|
244
|
+
const beyond = day > tableDays;
|
|
245
|
+
const idx = beyond ? segments.length - 1 : segments.findIndex((s) => day >= s.from && day <= s.to);
|
|
246
|
+
const seg = segments[idx] || segments[segments.length - 1];
|
|
247
|
+
const next = segments[idx + 1] || null;
|
|
248
|
+
return {
|
|
249
|
+
month: monthBranch,
|
|
250
|
+
day,
|
|
251
|
+
tableDays,
|
|
252
|
+
segments,
|
|
253
|
+
active: seg.stem,
|
|
254
|
+
activeElement: seg.element,
|
|
255
|
+
segment: { from: seg.from, to: seg.to },
|
|
256
|
+
next: next ? { stem: next.stem, element: next.element, from: next.from, inDays: next.from - day } : null,
|
|
257
|
+
// 司权表与本柱藏干表口径不同:亥月的余气戊只出现在司权表里
|
|
258
|
+
inHidden: (HIDDEN_STEMS[monthBranch] || []).includes(seg.stem),
|
|
259
|
+
beyond,
|
|
260
|
+
note: '人元司权按「节」当日起算,节当日为第 1 日,日差用本盘所用时刻(含真太阳时)所在日计;本插件固定 30 日表(余气 → 中气 → 本气),第 31 日以后按本气算。只作解释层的一层细节,不改取格。',
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
|
|
207
264
|
/**
|
|
208
265
|
* 排四柱八字
|
|
209
266
|
* @param {object} input { year,month,day,hour,minute, gender:'male'|'female', longitude?, lateZi?:boolean, trueSolar?:boolean }
|
|
@@ -526,6 +583,10 @@ export function buildBazi(input) {
|
|
|
526
583
|
const bodyStemIdx = (yinStem + ((bodyIdx - 2 + 12) % 12)) % 10;
|
|
527
584
|
const shengong = ganzhiName(sexagenaryIndex(bodyStemIdx, bodyIdx));
|
|
528
585
|
|
|
586
|
+
// 人元司权:按节令到出生日的日差定当权藏干(节当日为第 1 日)
|
|
587
|
+
const renyuan = renyuanOf(BRANCHES[monthBranchIdx], jdnBase, prevJieTerm.jd);
|
|
588
|
+
if (renyuan) renyuan.term = { name: prevJieTerm.name, time: formatJd(prevJieTerm.jd) };
|
|
589
|
+
|
|
529
590
|
return {
|
|
530
591
|
system: 'bazi',
|
|
531
592
|
relations: buildRelations(pillars),
|
|
@@ -558,6 +619,7 @@ export function buildBazi(input) {
|
|
|
558
619
|
// 与 NAOJ 历要项对拍实测节气最多偏 13.5 分钟,20 分钟留出余量。
|
|
559
620
|
nearBoundaryMinutes: Math.round(Math.min(jd - prevJieTerm.jd, nextJieTerm.jd - jd) * 1440),
|
|
560
621
|
},
|
|
622
|
+
renyuan,
|
|
561
623
|
pillars,
|
|
562
624
|
dayMaster: { stem: dayStem, element: STEM_ELEMENT[dayStem], yinYang: isYangStem(dayStem) ? '阳' : '阴' },
|
|
563
625
|
wuxing,
|
package/engine/classics.js
CHANGED
|
@@ -121,6 +121,16 @@ export const CLASSICS = [
|
|
|
121
121
|
plain: '成格不等于一路顺:成中带忌(官逢财又逢伤、官被合之类)就打了折;败格也未必无救——印来解伤、合来清煞,败中还能转成。',
|
|
122
122
|
url: 'https://www.diancang.xyz/xuanxuewushu/zipingzhenquan/53629.html',
|
|
123
123
|
},
|
|
124
|
+
{
|
|
125
|
+
id: 'zp-zaji',
|
|
126
|
+
book: 'ziping',
|
|
127
|
+
chapter: '十六、论杂气如何取用',
|
|
128
|
+
scene: '用神',
|
|
129
|
+
tags: [],
|
|
130
|
+
quote: '何谓透干?如甲生辰月,透戊则用偏财,透癸则用正印,透乙则用月劫是也。何谓会支?如甲生辰月,逢申与子会局,则用水印是也。一透则一用,兼透则兼用,透而又会,则透与会并用。',
|
|
131
|
+
plain: '四墓(辰戌丑未)所藏不止一气,所以叫杂气:取用先看哪一藏干透到天干,透一个用一个;没有透干,再看地支有没有与月支会成三合局,会成什么局就取局中那一气。透干与会支同时成立时两样并用。原文对「兼透」只给原则,没有给取舍次序。',
|
|
132
|
+
url: 'https://www.diancang.xyz/xuanxuewushu/zipingzhenquan/53636.html',
|
|
133
|
+
},
|
|
124
134
|
{
|
|
125
135
|
id: 'zp-bianhua',
|
|
126
136
|
book: 'ziping',
|
|
@@ -397,6 +407,20 @@ export const CLASSICS = [
|
|
|
397
407
|
plain: '从财格要财会成局、日干无气;一见根气就破格,原文用「命损无猜」这种重话写明。以丁生酉月、柱多庚辛为例:只能弃命相从,行北方财官旺地为入格,南行则灾。',
|
|
398
408
|
url: 'https://www.diancang.xyz/xuanxuewushu/sanmingtonghui/7652.html',
|
|
399
409
|
},
|
|
410
|
+
// —— 三命通会 · 总论岁运:岁运提示一节的原文出处。
|
|
411
|
+
// 原文的「返吟 / 伏吟」按「岁运与日柱相对 / 岁运压日」说,与本插件「干支相同为伏吟、天克地冲为反吟」
|
|
412
|
+
// 不是同一套定义;口径照本插件,原文照录不改写,两者在 plain 里并列说明。
|
|
413
|
+
// 这一条不进五条上限的取条表:它只在盘面有岁运信号时随「岁运提示」一起出现。
|
|
414
|
+
{
|
|
415
|
+
id: 'smt-suiyun',
|
|
416
|
+
book: 'sanming',
|
|
417
|
+
chapter: '卷二·总论岁运',
|
|
418
|
+
scene: '岁运',
|
|
419
|
+
tags: [],
|
|
420
|
+
quote: '行运以生月为运元,最怕行运与太岁冲克,若岁运冲月必祸;若岁运与日相对,谓之返吟,岁运压日,谓之伏吟,二者不利六亲,非横破财,不为吉兆。',
|
|
421
|
+
plain: '大运以生月为起点,最怕与流年(太岁)冲克:原文说岁运冲月为祸,又把「岁运与日柱相对」叫返吟、「岁运压日」叫伏吟。这两句是按「对日柱」说的,与本插件「干支相同为伏吟、天克地冲为反吟」不是同一套定义(本插件取后者);末句「不利六亲、破财」是旧说的重话,只作变动提示,不作断语。',
|
|
422
|
+
url: 'https://www.diancang.xyz/xuanxuewushu/sanmingtonghui/7539.html',
|
|
423
|
+
},
|
|
400
424
|
];
|
|
401
425
|
|
|
402
426
|
const BY_ID = CLASSICS.reduce((m, e) => { m[e.id] = e; return m; }, {});
|
|
@@ -433,6 +457,14 @@ export function classicOf(id) {
|
|
|
433
457
|
return BY_ID[id] || null;
|
|
434
458
|
}
|
|
435
459
|
|
|
460
|
+
// 岁运提示的原文:盘面出现岁运并临 / 运年反吟 / 流年伏吟反吟时随该节给出,不占五条上限。
|
|
461
|
+
// 没有信号就不给——这段原文讲的正是冲克,没冲没克时挂出来只会误导。
|
|
462
|
+
export function suiyunClassicOf(r) {
|
|
463
|
+
const liunian = r && Array.isArray(r.liunian) ? r.liunian : [];
|
|
464
|
+
const hit = liunian.some((l) => l && l.suiyun && Array.isArray(l.suiyun.signals) && l.suiyun.signals.length);
|
|
465
|
+
return hit ? classicOf('smt-suiyun') : null;
|
|
466
|
+
}
|
|
467
|
+
|
|
436
468
|
function tagOf(gejuName) {
|
|
437
469
|
const name = String(gejuName || '');
|
|
438
470
|
if (GEJU_KEY[name]) return GEJU_KEY[name];
|
|
@@ -451,7 +483,8 @@ function chapterTitle(e) {
|
|
|
451
483
|
}
|
|
452
484
|
|
|
453
485
|
// 根据一张八字结果挑原文:特殊结构(专旺/从格)先取单章,再月令格(子平真诠 + 三命通会对照),
|
|
454
|
-
//
|
|
486
|
+
// 再调候(寒暖/燥湿),最后「用神总纲」一位按盘四选一:有化气格取论用神变化、辰戌丑未月取论杂气如何取用、
|
|
487
|
+
// 见组合取论用神成败救应、其余取通用总纲;去重、限量。
|
|
455
488
|
export function classicsFor(r, limit = 5) {
|
|
456
489
|
if (!r) return [];
|
|
457
490
|
const out = [];
|
|
@@ -489,12 +522,16 @@ export function classicsFor(r, limit = 5) {
|
|
|
489
522
|
if (tgEntry) {
|
|
490
523
|
push(tgEntry, `本盘忌${tg.foe}克用${tg.use},局中${tg.bridge}${tg.weight}分可作通关,故取${CLASSIC_BOOKS.ditian.name}「通关」一条`);
|
|
491
524
|
}
|
|
492
|
-
//
|
|
493
|
-
//
|
|
525
|
+
// 用神总纲位只放一条,按盘四选一:化气看「变化」、四墓杂气看「杂气取用」、有组合看「成败救应」,
|
|
526
|
+
// 都没有才回到四吉四凶总纲。不另加位次,是因为格局两条 + 气候两条正好占满 5 条上限。
|
|
494
527
|
const huagi = gejuList.find((g) => g && g.kind === '化气格');
|
|
495
528
|
const combo = gejuList.find((g) => g && g.kind === '组合');
|
|
529
|
+
const monthBranch = r.monthBranch || (r.frame && r.frame.monthBranch) || (r.pillars && r.pillars.month && r.pillars.month.branch);
|
|
530
|
+
const zaMonth = ['辰', '未', '戌', '丑'].includes(monthBranch);
|
|
496
531
|
if (huagi) {
|
|
497
532
|
push(classicOf('zp-bianhua'), `本盘列有「${huagi.name}」:用神由月令合化而变,总纲一位改取${CLASSIC_BOOKS.ziping.name}论用神变化`);
|
|
533
|
+
} else if (zaMonth) {
|
|
534
|
+
push(classicOf('zp-zaji'), `月令${monthBranch}属四墓杂气,取用先看透干、再看会支,总纲一位取${CLASSIC_BOOKS.ziping.name}论杂气如何取用`);
|
|
498
535
|
} else if (combo) {
|
|
499
536
|
push(classicOf('zp-chengbai'), `本盘另有「${combo.name}」组合:成格还要看带忌与救应,总纲一位改取${CLASSIC_BOOKS.ziping.name}论用神成败救应`);
|
|
500
537
|
} else {
|
package/engine/crosscheck.js
CHANGED
|
@@ -106,16 +106,33 @@ export function crossCheck(bazi, zw) {
|
|
|
106
106
|
const bad = ['忌', '大忌'];
|
|
107
107
|
const baziGood = good.includes(t);
|
|
108
108
|
const baziBad = bad.includes(t);
|
|
109
|
+
const baziKnown = t !== '—';
|
|
109
110
|
const ziweiHeavy = sha >= 2;
|
|
111
|
+
const ziweiKnown = !!d;
|
|
110
112
|
let stance = '有张力';
|
|
111
|
-
let note = '
|
|
112
|
-
if (
|
|
113
|
+
let note = '';
|
|
114
|
+
if (!baziKnown || !ziweiKnown) {
|
|
115
|
+
// 一边没取到就谈不上「同向 / 有张力」——只并列现有的一侧,并写清缺的是哪边
|
|
116
|
+
stance = '互补';
|
|
117
|
+
const missing = !baziKnown && !ziweiKnown
|
|
118
|
+
? '八字当前大运与紫微当前大限都没取到'
|
|
119
|
+
: !baziKnown
|
|
120
|
+
? `八字当前大运未取到(${t}),只有紫微一侧可参考`
|
|
121
|
+
: '紫微当前大限未取到,只有八字一侧可参考';
|
|
122
|
+
note = `${missing}:这一项只作提醒,不下两边对照的结论`;
|
|
123
|
+
} else if (baziGood && ziweiHeavy) {
|
|
124
|
+
note = '八字这边顺、紫微大限煞星偏多:大方向可参考八字,具体动作按紫微标出的位置收一收';
|
|
125
|
+
} else if (baziBad && !ziweiHeavy) {
|
|
126
|
+
note = '八字这边偏紧、紫微大限没见到明显煞星:先按八字收着走,紫微一侧的平静不等于没有压力';
|
|
127
|
+
} else if (!baziGood && !baziBad && ziweiHeavy) {
|
|
128
|
+
note = '八字大运为平、紫微大限煞星偏多:只把紫微这一侧当作提醒,不据此判断阶段好坏';
|
|
129
|
+
} else {
|
|
113
130
|
stance = '同向';
|
|
114
131
|
note = '两边对当前阶段的松紧判断接近';
|
|
115
132
|
}
|
|
116
133
|
push('rhythm', '当前节奏',
|
|
117
134
|
`大运档位 ${t}`,
|
|
118
|
-
|
|
135
|
+
d ? `大限在${d.palace}${sha ? `;煞星 ${sha} 颗` : ';无煞星'}` : '大限未取到',
|
|
119
136
|
stance, note);
|
|
120
137
|
}
|
|
121
138
|
|
|
@@ -131,3 +148,12 @@ export function crossText(cross) {
|
|
|
131
148
|
.map((i) => `· ${i.label}:八字——${i.bazi};紫微——${i.ziwei};判断:${i.stance}(${i.note})`)
|
|
132
149
|
.join('\n');
|
|
133
150
|
}
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* 交叉验证分节。文本给 Markdown/工具输出,items 给面板画对照卡——
|
|
154
|
+
* 同一份数据两个去处,免得面板再去拆文本。
|
|
155
|
+
*/
|
|
156
|
+
export function crossSection(cross) {
|
|
157
|
+
const items = cross && Array.isArray(cross.items) ? cross.items : [];
|
|
158
|
+
return { key: 'crossSystem', label: '八字 × 紫微 交叉验证', text: crossText(cross), items };
|
|
159
|
+
}
|
package/engine/geju.js
CHANGED
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
|
|
10
10
|
import { judgeClimate, arbitrate } from './tiaohou.js';
|
|
11
11
|
import { qtOf } from './qiongtong.js';
|
|
12
|
+
import { sanheGroupOf } from './sanhe.js';
|
|
12
13
|
|
|
13
14
|
const STEMS = ['甲', '乙', '丙', '丁', '戊', '己', '庚', '辛', '壬', '癸'];
|
|
14
15
|
const BRANCHES = ['子', '丑', '寅', '卯', '辰', '巳', '午', '未', '申', '酉', '戌', '亥'];
|
|
@@ -87,6 +88,25 @@ export function elementRoles(dayStem) {
|
|
|
87
88
|
|
|
88
89
|
// ── 月令格 ───────────────────────────────────────────────────
|
|
89
90
|
|
|
91
|
+
// 四墓(杂气)月:辰戌丑未所藏多、用神不一,取用先看透干,再看会支。
|
|
92
|
+
// 会支只认三合局——子平真诠十六「逢申与子会局」的例子即三合,三会方与兼透兼用仍不纳入。
|
|
93
|
+
const ZA_MONTHS = ['辰', '未', '戌', '丑'];
|
|
94
|
+
|
|
95
|
+
function huiCandidate(pillars, monthBranch, cands) {
|
|
96
|
+
if (!ZA_MONTHS.includes(monthBranch)) return null;
|
|
97
|
+
const group = sanheGroupOf(monthBranch);
|
|
98
|
+
if (!group) return null;
|
|
99
|
+
const others = ['year', 'day', 'hour'];
|
|
100
|
+
const need = group.branches.filter((b) => b !== monthBranch);
|
|
101
|
+
if (!need.every((b) => others.some((k) => pillars[k].branch === b))) return null;
|
|
102
|
+
const cand = cands.find((c) => STEM_ELEMENT[c.stem] === group.element);
|
|
103
|
+
if (!cand) return null;
|
|
104
|
+
const where = others
|
|
105
|
+
.filter((k) => need.includes(pillars[k].branch))
|
|
106
|
+
.map((k) => `${({ year: '年', day: '日', hour: '时' })[k]}支${pillars[k].branch}`);
|
|
107
|
+
return { ...cand, group, where };
|
|
108
|
+
}
|
|
109
|
+
|
|
90
110
|
function monthPattern(pillars, dayStem, monthBranch) {
|
|
91
111
|
const hidden = HIDDEN[monthBranch] || [];
|
|
92
112
|
const cands = hidden.map((stem, i) => ({
|
|
@@ -98,10 +118,13 @@ function monthPattern(pillars, dayStem, monthBranch) {
|
|
|
98
118
|
const others = ['year', 'month', 'hour'];
|
|
99
119
|
const exposedKey = others.find((k) => cands.some((c) => c.stem === pillars[k].stem));
|
|
100
120
|
const base = cands[0];
|
|
101
|
-
const
|
|
121
|
+
const hui = exposedKey ? null : huiCandidate(pillars, monthBranch, cands);
|
|
122
|
+
const use = exposedKey ? cands.find((c) => c.stem === pillars[exposedKey].stem) : (hui || base);
|
|
123
|
+
const usedBy = exposedKey ? '透干' : (hui ? '会支' : '本气');
|
|
102
124
|
const exposedPos = exposedKey ? { year: '年', month: '月', hour: '时' }[exposedKey] : null;
|
|
103
125
|
|
|
104
|
-
|
|
126
|
+
// 建禄只认日干的禄位;戊土辰月、己土未月这类「本气比肩但不在禄位」的杂气月不再冒称建禄
|
|
127
|
+
if (base.god === '比肩' && LUSHEN_BRANCH[dayStem] === monthBranch) {
|
|
105
128
|
return {
|
|
106
129
|
name: '建禄格',
|
|
107
130
|
kind: '月令格',
|
|
@@ -118,10 +141,31 @@ function monthPattern(pillars, dayStem, monthBranch) {
|
|
|
118
141
|
}
|
|
119
142
|
return { name: '月劫格', kind: '月令格', evidence: `月令${monthBranch}本气${base.stem}为劫财` };
|
|
120
143
|
}
|
|
144
|
+
if (usedBy === '本气' && base.god === '比肩') {
|
|
145
|
+
return {
|
|
146
|
+
name: '比肩格',
|
|
147
|
+
kind: '月令格',
|
|
148
|
+
evidence: `月令${monthBranch}藏${hidden.join('')},本气${base.stem}为比肩,但${dayStem}禄在${LUSHEN_BRANCH[dayStem]}、不在${monthBranch},属杂气月比肩当权`,
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
// 子平十六:「透乙则用月劫」——杂气月由透干或会支取到劫财时,仍作月劫论
|
|
152
|
+
if (usedBy !== '本气' && use.god === '劫财') {
|
|
153
|
+
const via = exposedKey ? `透于${exposedPos}干` : `${hui.where.join('、')}会成${hui.group.element}局`;
|
|
154
|
+
return {
|
|
155
|
+
name: '月劫格',
|
|
156
|
+
kind: '月令格',
|
|
157
|
+
evidence: `月令${monthBranch}藏${hidden.join('')},${use.pos}${use.stem}(劫财)${via},劫财为用,作月劫论`,
|
|
158
|
+
};
|
|
159
|
+
}
|
|
121
160
|
const name = `${use.god}格`;
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
161
|
+
let ex;
|
|
162
|
+
if (exposedKey) {
|
|
163
|
+
ex = `月令${monthBranch}藏${hidden.join('')},${use.pos}${use.stem}(${use.god})透于${exposedPos}干`;
|
|
164
|
+
} else if (hui) {
|
|
165
|
+
ex = `月令${monthBranch}藏${hidden.join('')},本气${base.stem}(${base.god})未透干,而${hui.where.join('、')}会成${hui.group.element}局,取${use.pos}${use.stem}(${use.god})为用`;
|
|
166
|
+
} else {
|
|
167
|
+
ex = `月令${monthBranch}藏${hidden.join('')},本气${base.stem}(${base.god})未透干,以月令本气取格`;
|
|
168
|
+
}
|
|
125
169
|
return { name, kind: '月令格', evidence: ex };
|
|
126
170
|
}
|
|
127
171
|
|
package/engine/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// 统一入口:解析参数、分派到各体系、生成可读摘要
|
|
2
2
|
import { buildBazi } from './bazi.js';
|
|
3
|
-
import { buildLiuyao, tossLines, bodyLabels, yongshenOf, yongshenStrength, fushenAccess, hexagramStrength, jinTuiPower } from './liuyao.js';
|
|
3
|
+
import { buildLiuyao, tossLines, bodyLabels, yongshenOf, yongshenStrength, fushenAccess, hexagramStrength, jinTuiPower, yingqiWindow } from './liuyao.js';
|
|
4
4
|
import { buildZiwei, BRIGHTNESS, flowOf, asOfParts, ZIWEI_SCHOOL_DEFAULTS } from './ziwei.js';
|
|
5
5
|
import { drawTarot } from './tarot.js';
|
|
6
6
|
import { buildMeihua } from './meihua.js';
|
|
@@ -13,7 +13,7 @@ import { toJDN, ganzhiName, dayGanzhiIndex } from './calendar.js';
|
|
|
13
13
|
import { randomOf, isSeed } from './random.js';
|
|
14
14
|
import { interpret, DIRECTIONS, DIRECTION_DEFAULT } from './interpret.js';
|
|
15
15
|
import { followup, askPrompt } from './followup.js';
|
|
16
|
-
import { crossCheck, crossText } from './crosscheck.js';
|
|
16
|
+
import { crossCheck, crossText, crossSection } from './crosscheck.js';
|
|
17
17
|
import { pastSignals, verifyFit } from './verify.js';
|
|
18
18
|
import { rectifyBirth } from './rectify.js';
|
|
19
19
|
import { buildAlmanac } from './almanac.js';
|
|
@@ -24,7 +24,7 @@ import { buildStar } from './star.js';
|
|
|
24
24
|
import { buildNumerology } from './numerology.js';
|
|
25
25
|
import { buildMbti, mbtiPaper } from './mbti.js';
|
|
26
26
|
import { buildConvert } from './convert.js';
|
|
27
|
-
import { classicsFor, classicsText } from './classics.js';
|
|
27
|
+
import { classicsFor, classicsText, suiyunClassicOf, CLASSIC_BOOKS } from './classics.js';
|
|
28
28
|
import { buildTrend } from './trend.js';
|
|
29
29
|
import { buildFengshui } from './fengshui.js';
|
|
30
30
|
import { buildName } from './name.js';
|
|
@@ -126,6 +126,10 @@ function baziText(r) {
|
|
|
126
126
|
? `神煞(${r.shensha.count} 见):` + r.shensha.groups.map((g) =>
|
|
127
127
|
`${g.cat}|` + g.items.map((i) => `${i.name}(${i.pillars.map((k) => SHORT[k]).join('')})`).join('、')).join(';')
|
|
128
128
|
: '神煞:—';
|
|
129
|
+
const ry = r.renyuan;
|
|
130
|
+
const renyuanLine = ry
|
|
131
|
+
? `人元:${ry.month}月第${ry.day}日,${ry.active}${ry.activeElement}司权(${ry.segments.map((s) => `${s.stem}${s.from}–${s.to}`).join(' ')})${ry.beyond ? ';已过 30 日表,按本气算' : ''}`
|
|
132
|
+
: '';
|
|
129
133
|
const gejuLine = r.frame ? [
|
|
130
134
|
`格局:${r.frame.primary ? `${r.frame.primary.name}(${r.frame.primary.evidence})` : '—'}`,
|
|
131
135
|
` ${r.frame.geju.map((g) => `${g.name}[${g.kind}]`).join(' ')}`,
|
|
@@ -148,6 +152,7 @@ function baziText(r) {
|
|
|
148
152
|
shenshaLine,
|
|
149
153
|
`真太阳时:${r.solarTime.trueSolarText}(${r.input.geo ? r.input.geo.note + ';' : ''}${r.solarTime.note}) 晚子时:${r.input.lateZi ? '23:00 后算次日' : '23:00 后仍算当日'}`,
|
|
150
154
|
`节气:上一节 ${r.jieqi.previous.name} ${r.jieqi.previous.time} 下一节 ${r.jieqi.next.name} ${r.jieqi.next.time}`,
|
|
155
|
+
...(renyuanLine ? [renyuanLine] : []),
|
|
151
156
|
`大运:${r.dayun.rule}(${r.dayun.direction}),${r.dayun.startAge.years}岁${r.dayun.startAge.months}个月起运${jiao}`,
|
|
152
157
|
` ${dayun}`,
|
|
153
158
|
`流年:${r.liunian.slice(0, 10).map((l) => `${l.year}${l.ganzhi}(${l.stemTenGod})${l.luck ? `·${l.luck.tier}` : ''}`).join(' ')}`,
|
|
@@ -155,8 +160,10 @@ function baziText(r) {
|
|
|
155
160
|
const hits = r.liunian.filter((l) => l.suiyun && l.suiyun.signals && l.suiyun.signals.length);
|
|
156
161
|
if (!hits.length) return '岁运提示:近十年无岁运并临、运年反吟或流年伏吟/反吟(只标干支,不判吉凶)';
|
|
157
162
|
const label = (s) => `${s.type}${s.type.startsWith('流年') && s.target ? `(${s.target})` : ''}`;
|
|
163
|
+
const e = suiyunClassicOf(r);
|
|
164
|
+
const src = e ? `|古籍见《${CLASSIC_BOOKS[e.book].name}·${e.chapter}》` : '';
|
|
158
165
|
return '岁运提示(只标干支变动,不判吉凶):' + hits
|
|
159
|
-
.map((l) => `${l.year}${l.ganzhi} ${l.suiyun.signals.map(label).join('/')}`).join(';');
|
|
166
|
+
.map((l) => `${l.year}${l.ganzhi} ${l.suiyun.signals.map(label).join('/')}`).join(';') + src;
|
|
160
167
|
})(),
|
|
161
168
|
'(格局、用神、行运吉凶为扶抑+简化调候的量化提示,非断语。)',
|
|
162
169
|
].join('\n') + near;
|
|
@@ -408,6 +415,11 @@ function liuyaoText(r) {
|
|
|
408
415
|
if (jt && Array.isArray(jt.lines) && jt.lines.length) {
|
|
409
416
|
out.push(`进退力重:${jt.lines.map((l) => `${l.position}爻${l.from}→${l.to}${l.type}·${l.verdict}`).join(' · ')}`);
|
|
410
417
|
}
|
|
418
|
+
// 应期线索:只列地支与快慢,不给日期
|
|
419
|
+
const yq = r.yingqi;
|
|
420
|
+
if (yq && Array.isArray(yq.triggers) && yq.triggers.length) {
|
|
421
|
+
out.push(`应期线索:${yq.tempo} · ${yq.triggers.map((t) => `${t.labels.join('/')}${t.branch}`).join(' · ')}(只列地支,不出日期)`);
|
|
422
|
+
}
|
|
411
423
|
return out.filter(Boolean).join('\n');
|
|
412
424
|
}
|
|
413
425
|
|
|
@@ -428,6 +440,9 @@ export function compute(args = {}) {
|
|
|
428
440
|
r.classics = classicsFor(r);
|
|
429
441
|
const ct = classicsText(r.classics);
|
|
430
442
|
if (ct) r.summary = `${r.summary}\n【古籍】\n${ct}`;
|
|
443
|
+
// 岁运提示的原文不占五条上限:只在盘面真有岁运信号时挂到结果上,摘要、解析层与面板各自取用
|
|
444
|
+
const syc = suiyunClassicOf(r);
|
|
445
|
+
if (syc) r.suiyunClassic = { ...syc, bookName: CLASSIC_BOOKS[syc.book].name };
|
|
431
446
|
}
|
|
432
447
|
// 超出 ΔT 覆盖范围时把精度提示顶到摘要最前,别让远期盘悄悄出错
|
|
433
448
|
if (r && r.precision && r.precision.level === 'approx' && r.summary) {
|
|
@@ -462,7 +477,7 @@ export function compute(args = {}) {
|
|
|
462
477
|
: buildBazi({ ...common, lateZi: args.lateZi !== false, nowYear: asOf ? asOf.year : undefined });
|
|
463
478
|
r.cross = crossCheck(r.system === 'bazi' ? r : other, r.system === 'ziwei' ? r : other);
|
|
464
479
|
if (r.interpret) {
|
|
465
|
-
r.interpret.sections.push(
|
|
480
|
+
r.interpret.sections.push(crossSection(r.cross));
|
|
466
481
|
}
|
|
467
482
|
}
|
|
468
483
|
// 验前事:把过去若干年的流年信号摊开(只读,不改盘)
|
|
@@ -745,6 +760,9 @@ function computeRaw(args = {}) {
|
|
|
745
760
|
// 伏神出伏条件:飞伏生克叠月建日辰,只判条件、不出应期
|
|
746
761
|
const chufu = fushenAccess(result, ug, { monthBranch, dayBranch: result.dayGanZhi.branch });
|
|
747
762
|
if (chufu) result.fushenAccess = chufu;
|
|
763
|
+
// 应期线索:只列逢值/逢冲/逢合与旬空的出空/冲空,再给快慢方向,不换算日期
|
|
764
|
+
const yq = yingqiWindow(result, ug, { monthBranch });
|
|
765
|
+
if (yq) result.yingqi = yq;
|
|
748
766
|
}
|
|
749
767
|
if (args.seed !== undefined && args.seed !== null && args.seed !== '') result.seed = Number(args.seed);
|
|
750
768
|
return { ...result, ...(asOf ? { asOf } : {}), summary: liuyaoText(result) };
|
|
@@ -1196,7 +1214,7 @@ export { geocodeAddress, resolveAddress };
|
|
|
1196
1214
|
export { buildBazi, buildLiuyao, tossLines };
|
|
1197
1215
|
export { followup, askPrompt };
|
|
1198
1216
|
export { pastSignals, verifyFit, rectifyBirth };
|
|
1199
|
-
export { crossCheck, crossText };
|
|
1217
|
+
export { crossCheck, crossText, crossSection };
|
|
1200
1218
|
export { buildAlmanac, buildZeri, buildChenggu, buildXiaoliuren, buildStar, buildNumerology, buildConvert };
|
|
1201
1219
|
export { buildTrend, buildFengshui, buildName };
|
|
1202
1220
|
|
|
@@ -15,10 +15,10 @@ export const KNOWLEDGE = [
|
|
|
15
15
|
id: 'bazi-yueling-siquan',
|
|
16
16
|
system: 'bazi', dims: ['overall', 'career'],
|
|
17
17
|
gist: '月令不是「一个月」,是当月最有权的那一个字。',
|
|
18
|
-
detail: '
|
|
18
|
+
detail: '月令藏干按本气、中气、余气分日用事,本气当权的时间最长。所以判旺衰先看日主在月令是得令还是失令——得令者未看全局,已有三分底气。本插件按 30 日表算出「生在本月第几日、哪一干当权」,给的是月内轮值这一层细节;旺衰与取格仍以月令本气、透干与会支为主,不随轮值改判。',
|
|
19
19
|
source: '《子平真诠》论用神;人元司权分日之说见《渊海子平》',
|
|
20
20
|
status: 'variant',
|
|
21
|
-
note: '各家对中气、余气各主几日分法不同(有 7/7/16、9/3/18
|
|
21
|
+
note: '各家对中气、余气各主几日分法不同(有 7/7/16、9/3/18 等多说);本插件固定通行 30 日表(如寅月戊7丙7甲16),节当日为第 1 日,第 31 日以后按本气算、不硬分摊。司权表与本柱藏干表口径不同(子月壬、卯月甲、午月丙、酉月庚、亥月戊只出现在司权表里),两表各照原样;取格不随轮值改判。',
|
|
22
22
|
},
|
|
23
23
|
{
|
|
24
24
|
id: 'bazi-tonggen-tougan',
|
|
@@ -66,8 +66,8 @@ export const KNOWLEDGE = [
|
|
|
66
66
|
id: 'bazi-suiyun',
|
|
67
67
|
system: 'bazi', dims: ['overall', 'career'],
|
|
68
68
|
gist: '大运管十年基调,流年管当年触发。',
|
|
69
|
-
detail: '
|
|
70
|
-
source: '
|
|
69
|
+
detail: '大运像换了条路,流年像这条路上某一段的天气。岁运并临(当值大运与流年干支相同)、运年反吟(大运与流年天克地冲)、流年伏吟(流年与原局某柱干支相同)与流年反吟(流年与原局某柱天克地冲),是传统上标记「变动较大」的年份,属于提示而非断语。本插件逐年标出四类信号:当值大运按该年立春到次年立春的区间取,交运落在年内时前后两步并列;只标干支重复与对冲,不折分数。原文里「返吟」指岁运与日柱相对、「伏吟」指岁运压日,与本插件「干支相同为伏吟、天克地冲为反吟」不是同一套定义,两者并列、不合并。',
|
|
70
|
+
source: '《三命通会》卷二·总论岁运(https://www.diancang.xyz/xuanxuewushu/sanmingtonghui/7539.html);岁运并临之说出自《渊海子平》',
|
|
71
71
|
status: 'variant',
|
|
72
72
|
note: '「岁运并临主大凶」是流传最广也最被滥用的说法,本插件只作变动提示,不断吉凶;大运与原局之间的伏吟反吟未逐年标注,四柱十神层面的引化也未叠入。',
|
|
73
73
|
},
|
|
@@ -125,6 +125,15 @@ export const KNOWLEDGE = [
|
|
|
125
125
|
status: 'variant',
|
|
126
126
|
note: '化气格成立条件各家宽严不一(是否要求月令为化神、日主是否允许有根),本插件只列条件、附原文,不据此断定化气已成。',
|
|
127
127
|
},
|
|
128
|
+
{
|
|
129
|
+
id: 'bazi-zaji-quyong',
|
|
130
|
+
system: 'bazi', dims: ['overall', 'career'],
|
|
131
|
+
gist: '辰戌丑未是杂气月:先看透干,再看会支。',
|
|
132
|
+
detail: '四墓(辰戌丑未)每个字都藏着不止一气,用神不一,所以叫杂气。子平真诠的取法是:藏干透到天干的先用(甲生辰月,透戊用偏财、透癸用正印、透乙用月劫);没有透干,再看地支有没有与月支会成三合局(辰月逢申子会水,就取水印)。本插件按「透干 → 三合会支 → 本气」的次序取格,依据里写明走的是哪一条,并把《论杂气如何取用》附在结果里。',
|
|
133
|
+
source: '《子平真诠》十六、论杂气如何取用',
|
|
134
|
+
status: 'variant',
|
|
135
|
+
note: '原文说「兼透则兼用」,但只给一个格名时总要落到一个藏干;本插件只取最先透出的那一干,会支也只认三合、不认三会方,且不判原文所说的「有情 / 无情」,取舍次序各家另有说法。',
|
|
136
|
+
},
|
|
128
137
|
{
|
|
129
138
|
id: 'bazi-zhuanwang-yuanwen',
|
|
130
139
|
system: 'bazi', dims: ['overall', 'career'],
|
|
@@ -290,10 +299,10 @@ export const KNOWLEDGE = [
|
|
|
290
299
|
id: 'liuyao-yingqi',
|
|
291
300
|
system: 'liuyao', dims: ['overall', 'career'],
|
|
292
301
|
gist: '应期是「什么时候见分晓」,不是「哪天」。',
|
|
293
|
-
detail: '
|
|
302
|
+
detail: '近事以日计、远事以月计;常见取法是等用神逢值、逢冲、逢合之期,或等忌神受制之期。本插件只做前一半:把用神(不上卦则取伏神)的逢值、逢冲、逢合三支列出,旬空另标出空与冲空,再按月建五态给「偏速 / 偏缓 / 待解 / 未定」一个快慢方向;忌神受制与具体日期仍未做。应期法各家互有出入,同一卦不同取法可以差出很远,所以只作时间窗口的提示。',
|
|
294
303
|
source: '《卜筮正宗》应期章;《增删卜易》',
|
|
295
304
|
status: 'variant',
|
|
296
|
-
note: '
|
|
305
|
+
note: '应期取法(值日、冲、合、填实、旬空出空)各家优先级不同,本插件只并列触发支、不排先后,也不换算日期;近事以日计、远事以月计,用哪把尺由事情远近决定,不代选。',
|
|
297
306
|
},
|
|
298
307
|
{
|
|
299
308
|
id: 'liuyao-liushen',
|
|
@@ -450,10 +459,10 @@ export const KNOWLEDGE = [
|
|
|
450
459
|
id: 'liuyao-yingqi-exact',
|
|
451
460
|
system: 'liuyao', dims: [],
|
|
452
461
|
gist: '具体应期(哪一天应验)本插件尚未推算。',
|
|
453
|
-
detail: '
|
|
462
|
+
detail: '应期需要综合用神旺衰、动变、旬空出空、日月冲合多层条件,且各家取法不同。当前只给时间窗口的方向性提示(逢值 / 逢冲 / 逢合的触发支,加一个快慢方向),不给具体日期——与其给一个看起来精确、实则拍脑袋的日子,不如留白。',
|
|
454
463
|
source: '待补:《卜筮正宗》应期章逐条实现 + 已录 128 条卦例对拍(源 138 条)',
|
|
455
464
|
status: 'todo',
|
|
456
|
-
note: '扩展方向:用《卜筮正宗》卦例里有明确应验日期的条目做回归,先验证再输出。',
|
|
465
|
+
note: '扩展方向:用《卜筮正宗》卦例里有明确应验日期的条目做回归,先验证再输出。0.50.0 已给出触发支与快慢方向,仍不输出日期。',
|
|
457
466
|
},
|
|
458
467
|
];
|
|
459
468
|
|
|
@@ -90,6 +90,19 @@ function jinTuiPlain(r) {
|
|
|
90
90
|
return `动爻的进退还要看时令:${jp.lines.map((l) => `${l.position}爻${l.from}→${l.to}${l.type},${sayOf(l)}`).join(';')}。`;
|
|
91
91
|
}
|
|
92
92
|
|
|
93
|
+
// 应期线索 → 一句白话:只给快慢与可留意的支,不换算日期
|
|
94
|
+
function yingqiPlain(r) {
|
|
95
|
+
const yq = r && r.yingqi;
|
|
96
|
+
if (!yq || !Array.isArray(yq.triggers) || !yq.triggers.length) return '';
|
|
97
|
+
const when = yq.tempo === '偏速' ? '大体偏近,近事更容易先见分晓'
|
|
98
|
+
: yq.tempo === '偏缓' ? '大体偏远,别指望立刻见分晓'
|
|
99
|
+
: yq.tempo === '待解' ? '眼下还有月破或旬空,得先等条件解除'
|
|
100
|
+
: '缺月建,快慢暂不定';
|
|
101
|
+
const branches = yq.triggers.map((t) => t.branch).join('、');
|
|
102
|
+
const fu = yq.viaFushen ? '(用神是伏神,先要出得来)' : '';
|
|
103
|
+
return `应期上${when};传统会留意${branches}这几个地支${fu}——这只是提示,不换算成具体哪天。`;
|
|
104
|
+
}
|
|
105
|
+
|
|
93
106
|
// 全卦逐爻旺衰 → 一句白话:整张卦的气偏在哪一头(与用神那一句分开说)
|
|
94
107
|
function hexStrengthPlain(hs) {
|
|
95
108
|
if (!hs || !hs.counts) return '';
|
|
@@ -200,7 +213,7 @@ export function buildAnswer(r, ask, ctx = {}) {
|
|
|
200
213
|
head + `先说结论:本卦是${s(ben.name, '—')}` +
|
|
201
214
|
`${ben.palace ? `(${ben.palace})` : ''}` +
|
|
202
215
|
`${moving.length ? `,第 ${moving.join('、')} 爻动,变为${s(bian.name, '—')}` : ',六爻安静没有动爻'}。` +
|
|
203
|
-
`${plainBody}${usePlainOf(r.useGod, r.fushenAccess)}${useStrengthPlain(r.useGodStrength)}${jinTuiPlain(r)}${hexStrengthPlain(r.hexStrength)}`,
|
|
216
|
+
`${plainBody}${usePlainOf(r.useGod, r.fushenAccess)}${useStrengthPlain(r.useGodStrength)}${jinTuiPlain(r)}${yingqiPlain(r)}${hexStrengthPlain(r.hexStrength)}`,
|
|
204
217
|
'断卦的落点在「世爻」(代表你)和「动爻」(事情的推动点),下面「看盘顺序」就按这个次序展开。',
|
|
205
218
|
].join('');
|
|
206
219
|
}
|
|
@@ -268,7 +281,7 @@ export function buildPlain(r, ask, ctx = {}) {
|
|
|
268
281
|
const plainBody = bodyPlainOf(labels);
|
|
269
282
|
return `${s(ben.name, '这一卦')}讲的是一个「${moving.length ? '正在动、还会变' : '暂时不动、先看清'}」的局面——` +
|
|
270
283
|
`${moving.length ? '有动爻,说明事情还有转圜空间,不是死局。' : '六爻安静,说明当下更该观察而不是硬推。'}` +
|
|
271
|
-
`${plainBody}${usePlainOf(r.useGod, r.fushenAccess)}${useStrengthPlain(r.useGodStrength)}${jinTuiPlain(r)}${hexStrengthPlain(r.hexStrength)}`;
|
|
284
|
+
`${plainBody}${usePlainOf(r.useGod, r.fushenAccess)}${useStrengthPlain(r.useGodStrength)}${jinTuiPlain(r)}${yingqiPlain(r)}${hexStrengthPlain(r.hexStrength)}`;
|
|
272
285
|
}
|
|
273
286
|
return '';
|
|
274
287
|
}
|