The game shows you a 战力 number and eight attribute points to spend and explains neither. This is what each point does, what the damage formula reads, and which of the stats on your character sheet are decoration.
The game ships two different conversion tables and picks one by game mode, and no community guide mentions it.
AttributeAdditionInfo.GetTableName()
=> "attribute_addition" + (AppGame.Instance.IsZhenShiJiangHu ? "_zhenshijianghu" : "");
It is a binary switch. 真实江湖 reads the variant; 爽文江湖, 险恶江湖 and 暗黑江湖 all read the default. The two tables feed different stats from the same 点. 专注 is the accuracy stat in one and a health stat in the other.
Read whichever table matches your save. Everything below says which.
Measured on a live character, one 资质 at a time, each raised alone, the eleven combat stats and four pool ceilings read back, reverted, revert confirmed, repeated at +1000 and +300. Every measurement matches its table row exactly.
| 资质 | Gives | Per point |
|---|---|---|
| 元气 | 气血上限 / 闪避 | 12 / 0.2 |
| 根骨 | 气血上限 / 闪避 | 12 / 0.2 |
| 精神 | 气血上限 / 闪避 | 12 / 0.2 |
| 专注 | 气血上限 / 闪避 | 12 / 0.2 |
| 力道 | 外攻 / 命中 | 1.25 / 0.2 |
| 内力 | 内攻 / 命中 | 1.25 / 0.2 |
| 体魄 | 外防 / 内防 | 1.0 / 1.0 |
| 身法 | 命中 / 闪避 | 0.8 / 0.6 |
Nothing else moves. 要害, 诛心, 御心, 会心 and 真气上限 have no rows at all in this table and the
one 化解 row that exists is written 0. So on a 真实江湖 save, no attribute point can ever raise crit
chance, crit damage, crit resistance or 真气.
Not measured. This is the table read straight, and it is what every community guide is describing.
| 资质 | Gives | Per point |
|---|---|---|
| 根骨 | 气血上限 / 外防 | 40 / 2 |
| 体魄 | 外防 / 气血上限 | 7 / 5 |
| 力道 | 外攻 / 要害 | 5 / 1.5 |
| 内力 | 内攻 / 化解 | 5 / 1.5 |
| 元气 | 真气上限 / 内防 / 化解 | 9 / 2 / 1.5 |
| 精神 | 内防 / 真气上限 | 7 / 1.5 |
| 专注 | 命中 / 要害 | 4 / 1.5 |
| 身法 | 闪避 / 轻功点 | 4 / 1.5 |
The community's "42 气血, 9 真气, 7 外防, 5 外攻, 4 命中" are these numbers. They are correct — for these three modes. The published figures were never invented; they were read off the table the default save uses, and repeated without the mode qualifier.
The table's last column is hundredths and the conversion is recomputed on demand rather than stored:
其他 = Σ over rows where influenceAtt == this stat: source_stat × additionValue / 100
Two consequences worth knowing.
The conversion reads the stat after its own percentage bonuses. A character carrying +10% 内力 converts as though every 内力 point were 1.1 points, and both of 内力's outputs scale together. That was visible in the measurement run: writing +1000 raw 内力 moved the displayed value by +1100, and 内攻 and 命中 both came in 10% above the table rate. So your effective rates are the table's times whatever percentage modifiers sit on the feeding stat.
Point-spend lands in 基础 and shows up as 其他 on the target. The game stores every attribute as a set of source channels (基础, 装备, 状态, 秘籍, 境界, 经脉, 词条, 特技, 连招) and 基础 is the only one the character owns outright. That is where a spent point goes. The converted result is not stored in any channel: it is appended to the target stat's breakdown as 其他, recomputed each time the tooltip is drawn. So a 资质 tooltip showing a large 基础 and a 命中 tooltip showing a large 其他 are the same points seen from both ends.
元气, 根骨, 精神 and 专注 each give 12 气血上限 and 0.2 闪避, and nothing else. Their rows in the table are identical. Half of your spendable points feed one pair of outputs, and which of the four you pick changes nothing at all.
The two conversions the names most strongly imply are the two that do not exist here, and both of them do exist in the default table, which is exactly why the community advice misleads on this mode.
体魄 is pure defence, 1.0 外防 and 1.0 内防 with zero 气血. It is the only feeder either defence has.
专注 does not touch 命中. It is a 气血 and 闪避 stat, indistinguishable from 根骨, while 命中 comes from 身法 at 0.8, with 0.2 each from 力道 and 内力.
0.8 命中 and 0.6 闪避, the only meaningful source of either. Both are threshold stats (see below), so a point of 身法 is worth the distance it closes against what you fight and nothing more: your hit against their dodge, and their hit against yours. Against enemies you already never miss and who already rarely hit you, it is worth nothing.
元气, 精神 and 专注 do not appear on the character sheet in 真实江湖, because the game keeps a list
of exactly these three (AppGame.zhenShiJiangHuHideAttriType) and deactivates their rows on every
refresh of the panel whenever the save is a 真实江湖 one. The rows exist and are wired; the mode
turns them off.
It matters because it hides three of the four interchangeable stats, and a 真实江湖 player reading their own sheet sees 根骨 with no way to discover that 元气, 精神 and 专注 do exactly the same thing.
The trainer puts all three back; see the operating guide.
The 命中 breakdown at rest, on a realm-4 character. The first five are read off the tooltip; 其他 is
the table's own sum, ⌊235×0.2⌋ + ⌊290×0.2⌋ + ⌊116×0.8⌋ from 力道, 内力 and 身法:
基础+26, 装备+42, 境界+104, 词条+31, 连招+23, 其他+197 = 423
423 is what the live character reports, so the decomposition closes. 基础 is 26 of it. 境界 alone
is 104, and that figure is itself mode-dependent. The realm grant tables are split four ways (formula_baseattri, _xianejianghu, _zhenshijianghu, _dangmojianghu). Points are the small
lever; realm, gear, 词条 and 连招 are the large ones.
SpellCalculate.CalculateFormulaDamage, and every real attack effect in the game goes through it:
外功 part = 外攻 × waiDamage% × (1 − 外防_target / (外防_target + 2000))
内功 part = 内攻 × neiDamage% × (1 − 内防_target / (内防_target + 2000))
相合 part = 相合 × extraDamage% (only when your 偏向 matches the move's)
damage = (外功 + 内功 + 相合) × crit × combo × the various ± modifiers
Of 783 attack effects that carry a meaningful 外功 percentage, 717 scale from 外攻 and nothing
else; of 826 with an 内功 percentage, 783 scale from 内攻. The move's own waiDamage /
neiDamage percentage is the multiplier (median 65% and 75%, top decile 235% and 280%).
A move is 外功 or 内功 by which of those two percentages it carries, and your two attack stats are fed by two different 资质 (力道 and 内力). Splitting points between them halves both halves of your damage. Pick the one your martial arts actually use.
威力 stats stack additively into that same percentage before it multiplies: 法术威力 goes into both sides, 外功威力 into the outer, 内功威力 into the inner. They are percentage points on the move, so they are worth most on the moves that already have the largest percentage.
reduction = defence / (defence + 2000)
2000 defence halves incoming damage of that kind. 4000 takes off two thirds. 6000 takes off three quarters. It never reaches 1, so nothing is ever immune, and each 2000 you add is worth less than the last — the first 2000 buys 50%, the second buys 17%, the third 8%.
Measured. 体魄 was stepped 232 → 2232 → 6232 — 1.0 外防 a point, so 外防 888 → 2888 → 6888 — while the same enemy kept landing the same two attacks, each hit recording the defence it was calculated against. Damage with the combo counter divided out, against what the curve predicts from the 888 baseline:
| 外防 | damage, attack A | damage, attack B | curve says | observed |
|---|---|---|---|---|
| 888 | 258.0 | 390.0 | 1.0000 | 1.0000 |
| 2888 | 152.0 | 230.0 | 0.5908 | 0.5891 / 0.5897 |
| 6888 | 83.0 | 126.0 | 0.3249 | 0.3217 / 0.3231 |
Both attacks track the curve to within 0.6%, and the residual is rounding on damage numbers this small. Just under eight times the defence still left 32% of the damage getting through; nothing approached immunity.
Hits taken during a stretch where a buff on the player had lapsed are left out. They read 外防 821, but the same lapse changed other things about how the damage resolved, so they are a different condition rather than a fourth step.
There is no armour penetration attribute that a point buys; the only things that cut a target's
defence are equipment affixes read as WORD_TARGET_WAI_FANG / WORD_TARGET_NEI_FANG and subtracted
before the curve.
The miss check is the first thing that runs and it short-circuits:
if (命中 − 闪避 >= 0) → never misses
otherwise, with d = 闪避 − 命中:
hit chance = 1 − d / (命中 + 30 + 1.35 d), floored at 1%
So 命中 is a threshold stat, not a curve: every point up to the enemy's 闪避 matters and every point past it does nothing at all.
Which stat clears the bar depends on your mode, and this is where the split above bites hardest. On 爽文 / 险恶 / 暗黑 it is 专注, at 4 命中 a point. On 真实江湖 专注 gives none at all and the work is done by 身法, at 0.8. The same asymmetry runs the other way: buying 闪避 forces the enemy below their own threshold, and their hit chance then falls on the curve above — 身法 at 4 a point in the first three modes, 0.6 in 真实江湖.
Whether you crit is your 要害 against their 化解, plus 会心 as a flat percentage:
crit% = 会心 + 100 × 要害 / (1.25 × 化解_target + 2.5 × 要害^0.877)
会心 goes in as a straight percentage. 会心 30 is 30 percentage points of crit chance. The 要害 term is self-limiting: against 化解 0 it is worth about 94 points at 要害 1000, but the exponent means doubling 要害 from there adds only a few points. Against a target with real 化解 it collapses. At 化解 500 the same 要害 1000 is worth 59.
How hard the crit lands is your 诛心 against their 御心:
multiplier = max(1.0, 0.5 + 诛心^1.32 / (2.5 × 诛心 + 御心_target))
The max(1.0, …) is the trap. With no 诛心, a crit multiplies damage by exactly 1 — the game
plays the crit animation and the number is identical. Against a target with 御心 200 you need roughly
诛心 45 before a crit does anything at all, and past that it scales hard: 诛心 100 is about ×1.47,
诛心 500 about ×3.02, 诛心 1000 about ×3.87. Against a softer 御心 100 the same three are ×1.75,
×3.21 and ×4.01 — the divisor is the target's, so the same 诛心 is worth more against some enemies
than others.
Measured, and it is exactly that. 诛心 was written to 0 and the same target hit repeatedly with the same moves, so some swings crit and some did not. Taking only the pairs where the buffs standing on both sides were unchanged between the two hits:
| move | buffs, attacker / target | normal | crit |
|---|---|---|---|
| 142 | 32 / 11 | 1251 | 1251 |
| 144 | 29 / 11 | 1069 | 1069 |
| 144 | 32 / 12 | 1097 | 1097 |
Not a ratio near one — the same integer. The crit fires, the animation plays, the number does not move. A fourth move drifted about 2% across its hits in both directions, tracking the buffs going on and off rather than whether the hit crit, which is why the comparison is made against matched pairs.
The multiplier itself was confirmed away from the floor the same way: at 诛心 181 against 御心 278 the formula gives 1.8077, and two independent crit-against-normal pairings on one move came back at 1.8077 and 1.8077. Three more at 诛心 77 against 御心 278 gave 1.1564, 1.1583 and 1.1553 against a predicted 1.1571.
Stacking 要害 and 会心 without 诛心 buys you a light show, and crit chance and crit damage are not interchangeable here: the one you cannot buy with attribute points is the one with the floor.
The 气盾 damage path (CalculateFormulaQidunDamage) uses its own crit line:
crit = 会心 / 1000 + 要害 / (化解 + 2000)
Both terms of the second fraction are integers, so C# does integer division — it is 0 until 要害 exceeds 化解 + 2000, and then jumps to 1 (100%). And 会心 is divided by 1000 rather than 100, so it is worth a tenth of what it is worth everywhere else. On this one attack path, crit investment does almost nothing.
Every one of the 95 entries in AttriType was swept for a real read (any use that is not the enum
declaration or a bare case label, plus numeric (AttriType)n casts). Eight come back with nothing
at all, and two are read in one place only — a spell effect's scaling — and nowhere else:
| id | Shown on the sheet? | ||
|---|---|---|---|
| 38 | 暗器 | yes | nothing reads it |
| 40 | 医道 | yes | one spell effect scales off it |
| 41 | 毒技 | yes | nothing reads it |
| 64 | 打猎 | yes | nothing reads it |
| 65 | 种植 | yes | nothing reads it |
| 71 | 正邪 | yes | nothing reads it |
| 77 | 反击 | no row anywhere | nothing reads it |
| 78 | 连击 | no row anywhere | nothing reads it |
| 79 | 追击 | no row anywhere | nothing reads it |
| 80 | 连战 | no row anywhere | two spell effects scale off it |
None of the ten is referenced by an ECT_NPCATTRI condition either, across npc_interact,
entrust_event_prototype and mailcondition, so no quest, sect requirement or letter gates on
them.
Six of them are on your character sheet and go up when you train them. 暗器, 医道, 毒技, 打猎, 种植 and 正邪 are displayed and raisable; five of the six are read by nothing whatsoever, and 医道 only by the one spell effect that scales off it. Training them is time spent on a number.
The other four have no display at all and exist only in the enum, which matters because equipment affixes and 经脉 nodes can still roll 反击, 连击, 追击 and 连战. Those rolls are stored and never consulted. Reroll them.
The two exceptions are thin but real: 医道 and 连战 each appear as the scaling attribute on one or two spell effects, so a specific move can read them even though nothing else does.
阴, 阳, 刚, 柔 and 毒 do not add damage. They do exactly two things.
They pick your 偏向. GetMaxPianXiangState takes whichever of the five is highest, and that is the
偏向 you fight as. Nothing else about the raw values matters for this. Only which is largest.
They set the 相合 bonus, which is the third damage term and a subtraction:
相合(X) = X − (the element after X) − (the element before X)
in the ring 阳 → 阴 → 柔 → 刚 → 毒 → 阳. So:
| Your 偏向 | 相合 |
|---|---|
| 阳 | 阳 − 阴 − 毒 |
| 阴 | 阴 − 柔 − 阳 |
| 柔 | 柔 − 刚 − 阴 |
| 刚 | 刚 − 毒 − 柔 |
| 毒 | 毒 − 阳 − 刚 |
Spread the five evenly and 相合 is negative. The bonus only exists once your chosen element exceeds its two neighbours added together, and it applies only on moves whose own 偏向 matches yours.
An affix or 经脉 node that adds a neighbouring element is a downgrade, not a small upgrade, and adding 阴 to a 阳 build subtracts from the only term the elements feed.
NpcEntity.GetZhanLi, in full:
战力 = 气血上限
+ 真气上限 × 3
+ (外攻 + 内攻) × 8
+ (外防 + 内防) × 7.2
+ (命中 + 闪避) × 10
+ (诛心 + 御心 + 要害 + 化解) × 10
+ (阴 + 阳 + 刚 + 柔 + 毒) × 4
+ 轻功上限 × 10
Read that against the damage formula and three things fall out:
Use 战力 to compare two NPCs, which is what it is for. Do not use it to judge your own build.
刀法, 剑术, 搏击 and 枪棍 appear on the 武学 tab, they gate sect entry, and no damage formula reads
them. Their only mechanical effect in the whole assembly is one branch in ReCalAttriEquip:
weapon base attributes × (1 + min(1.0, skill / 1000))
It applies only if the matching 特技 is equipped, because GetStuntEffectValue returns 0 when
the stunt is absent. One stunt per weapon class, each requiring that skill at 700:
| 特技 | Weapon | Needs | Clue the game gives |
|---|---|---|---|
| 鹿门翠微 | 刀 | 刀法 ≥ 700 | a 刀绝 seen at (1552, 393) |
| 平明寻羽 | 剑 | 剑术 ≥ 700 | a 剑圣 at (901, 1400) |
| 气吞山河 | 拳/搏击 | 搏击 ≥ 700 | a 千金王 at (200, 644) |
| 空翠嶙峋 | 长兵/枪棍 | 枪棍 ≥ 700 | a 飞槊 at (1517, 1044) |
At the 700 needed to get it that is +70% to everything the weapon grants; it caps at +100% at skill 1000. Below 700 or without the stunt, the skill is a sect requirement and nothing else.
Not by fighting. AddSkillProficiency, the use-it-and-it-rises system with the per-grade ceiling, is
called for 垂钓, 农学 and the craft skills, and never for a weapon. The weapon skills come from the
ArtistrySystem — the same machinery behind 读书, 请教, 比试, 传授, 领悟, 作画 and 题字 — and one
function grants all of it:
public void GetAttriPoint(AttriType attri, int point) // Tools.CalculateArtistryValue, then ModAttriField
public static int GetPoint(bool success) => success ? Random.Range(3, 6) : 1;
3 to 5 points on a success, 1 on a failure. That is the unit the whole skill is built out of.
| Interaction | What decides the gain |
|---|---|
| 请教 | your skill ÷ theirs. You gain when Random.value beats that ratio, so a teacher far above you nearly always pays and one barely above you rarely does. At a ratio of 1 or more the branch is skipped: someone no better than you teaches you nothing |
| 比试 | 3 to 5 for a good showing, 1 otherwise. Even conceding pays 1 |
| 传授 | 3 to 5 for a right answer, 1 for a wrong one |
Everything is then multiplied by 1 + floor(奇术 ÷ 100 × 4), read off the hidden 奇术 word entry, so
奇术 is the one stat that makes every point of study worth more.
Books are the fourth route, and the word "book" covers two unrelated things. Keep them apart or the shelves lie to you:
Only the second kind is what follows, and it comes in two lines:
| line | shape | who has one |
|---|---|---|
| the tiered library | 道学·玄朴经·凡阶, and up through the tiers | 70 books each for 道学, 佛学, 儒学, 墨学, 魔法学, 农学; 42 each for 琴艺, 棋艺, 书法, 画道, 酒量, 垂钓 |
| fragments | 残篇, 残页, 断章 | 14 each, for the five weapon skills, the craft skills, and 兵道 and 诡辞 |
So yes, 佛学 and its siblings have been readable all along, on a 70-volume line, and reading is the main way they climb. The weapon skills have no tiered library either, which is why they lean on 请教 and 比试 instead — but they at least own hundreds of manuals that make a character stronger by another route.
兵道 and 诡辞 get the worst of both. Fourteen fragments, no tiered library, and no moveset of their own to learn either. That is the structural reason those two sit near zero on most saves while 儒学 or 农学 climb into the hundreds.
奇术, 医道 and 毒技 have neither line. Nothing raises them by reading.
The grades are {100, 250, 450, 700, 1000}, and 700 is the top boundary — the weapon 特技 asks you
to finish the fourth grade. From a typical mid-run 126 that is 574 points, or something like 140
successful 请教 at 4 points apiece. That is the real reason the four weapon skills sit where they do
on most saves, and why a source that pays in the hundreds rather than the singles changes the picture.
道学, 佛学, 儒学, 兵学, 墨学, 鬼学, 魔法学 and 农学 sit between the weapon skills and the life skills on the sheet, and none of them is read for anything on its own. Each carries a ladder of five 特技, gated at 100, 250, 450, 700 and 900, and every one of those 特技 carries the same sentence: 装备后根据 对应属性点数占最大值比例 — equip it and the effect scales by how close that school sits to its own maximum. The school is the key; the 特技 is the lock it opens; equipping is what makes either matter.
| school | 100 | 250 | 450 | 700 | 900 |
|---|---|---|---|---|---|
| 道学 | 真气上限 | 福气 | 元气 | 内攻 | better chance of a high-grade drop |
| 佛学 | 生命上限 | 坚韧 | 根骨 | 内防 and 外防 | chance of a second drop |
| 儒学 | 精力上限 | 修养 | 筋骨 | 外攻 | chance to be paid 感悟 and 修为 twice |
| 兵学 | 阴 | 阳 | 刚 | 柔 | 毒 |
| 墨学 | 轻功 recovery | 内息 | 轻功 cost | 轻功 ceiling | chance to spend no 精力 |
| 鬼学 | life-skill 精力 cost | life-skill materials | 诡辞 | egg items from 炼丹, 酿酒, 烹饪 | output quality from 锻造, 缝纫, 巧手 |
| 魔法学 | 经脉 success rate | 体魄 | chance to open a 经脉 point free | better 词条 when opening one | 经脉 fixed attributes scale on the school |
| 农学 | gathering speed | 精神 | gathering 精力 cost | high-grade gathering | chance to gather twice |
This is the part the panel never says. Crossing a threshold grants the 特技; the school's value then decides how much that 特技 is worth, every frame, forever. The rungs that raise an attribute compute:
ratio = value1% × your base school value / 1000 // capped at value1%
change = ceil( your base value of the target × ratio )
ModAttri(NST_TEJI, target, change)
So it is a percentage of the target's own base value, and the percentage is the school divided by
1000. 兵道's five rungs each carry value1 = 20, meaning up to +20% to one element apiece, reached
only at 兵道 1000.
| your 兵道 | what 兵无常势 gives |
|---|---|
| 18 | 20% × 18/1000 = 0.36% of your base 阴 |
| 250 | 5% |
| 700 | 14% |
| 1000 | 20%, the cap |
Two consequences. At 18 and 22, both of these are worth nothing at all — that is not a bug, it is the formula. And because it multiplies the target's base, a rung is worth zero if you have not built the thing it multiplies: 兵无常势 on a character with no 阴 gives nothing however high 兵道 climbs.
诡辞 is only half built this way. Its first, second, fourth and fifth rungs run through a different
hook entirely — the life-skill discounts and crafting rolls in the table above — and only its third,
秋毫之末, uses the percentage mechanism, at value1 = 50. Its data reads 47|87: source 诡辞,
target 内功威力, up to +50%. The game's own description for it says 提升诡辞, naming the source
instead of the target, and it is the one rung in either ladder with no flavour text at all.
Because each line owns its own equip slot, a 兵道 rung and a life-skill rung that raise the same element both apply at once. And the life-skill side is stronger, in one case five times over:
| element | 兵道 rung | needs | the other one | needs | max |
|---|---|---|---|---|---|
| 阴 | 兵无常势 | 100 | 书法 落纸云烟 | 700 | 50% |
| 阳 | 水无常形 | 250 | 画道 丹青画骨 | 700 | 50% |
| 刚 | 不动如山 | 450 | 酒量 劫邀酒星 | 700 | 100% |
| 柔 | 侵掠如火 | 700 | 垂钓 无机秋水 | 700 | 100% |
| 毒 | 军无百疾 | 900 | 缝纫 蒲苇时纫 | 700 | 50% |
兵道 caps at 20% on every rung. Every one of its counterparts beats it, and 书法, 画道, 酒量 and 垂钓 each carry a 42-volume tiered library while 兵道 has fourteen fragments. So the cheapest route to a stronger element is not the school that looks like the combat one: drink, fish, paint or practise calligraphy.
The pairing also runs backwards on 兵道. Its rungs are ordered 阴, 阳, 刚, 柔, 毒 at 100 through 900, so the element you fight as decides what the school costs you — a 阴 build needs 兵道 100, a 毒 build needs 900 for the same 20%.
Three of those rows are worth pulling out.
兵学 is the elements, one per rung: 阴, 阳, 刚, 柔, 毒. Given that the elements are specialise-or-lose, that makes it the school with the sharpest combat consequence, and its own tooltip says the opposite — 兵道并不能直接提升个人作战能力 is true of the attribute and false of the ladder hanging off it.
墨学 is the 轻功 school. Four of its five rungs are recovery, cost, ceiling and 内息, which is why it is the one school the assembly reads outside its own 特技: the 轻功 cost reduction is computed from it directly.
鬼学 and 农学 are the crafting and gathering schools, and neither touches combat at any rung. 鬼学 buys cheaper life skills and better output; 农学 buys faster, cheaper, richer gathering.
Holding a weapon gives you a set of moves that is listed nowhere: not in your 武学 tab, not in any
秘籍, not on an enemy's 属性 page. npc_spell_container holds 79 of these, one per weapon class and
the rest for specials:
| Weapon | What the container gives |
|---|---|
| 剑 | 江湖剑法 ×5, 胁生双翼, 疾风三击, 固念守, 蓄日破, 追魂 |
| 刀 | 江湖刀法-二连击, 云消雾散, 烘云托月, 怀中抱月, 碎日, 破釜沉舟 |
| 拳 | 江湖拳法-二连击, 疾风骤雨, 截拳, 冲拳, 猛虎裂石, 雷音 |
| 枪 | 百转, 飞云击, 风平浪静, 千军倒, 银蛇刺喉 |
Measured, from a logged spar: the player cast 141–145, 剑招一式 through 五式, which is the 剑 container, alongside the two 武学 actually equipped, 雁云式 and 蚀骨剑. Roughly two thirds of the swings thrown in that fight came from the container.
On an enemy the container is named on the 信息 tab, in the slot beside the 天赋 row: 万相搏击 is the 枪 set. On your own sheet the same thing has no name anywhere.
风平浪静 deals no damage. It raises a guard for one second, and the guard names the move it answers with:
effect 130180000 effectType 1 (aura), effectSubType 32 (SpellAuraDefense)
duration 1000 one second
odds 10000 100%
miscValue 13019 ← the spell it fires back: 千军倒
The trigger is your own attack. Inside damage application:
if (target.HasFlag(20) && target.IsFacing(attacker, 180f))
target.FightBack(attacker);
FightBack rolls against odds, which is 10000, so it always fires; casts miscValue at whoever
hit; and then strips the guard, so one guard buys one counter. The enemy does not have to be
attacking, does not have to react, and does not have to time anything. You supply the trigger.
The counter is an ordinary attack. 千军倒 and 银蛇刺喉 carry waiDamage 40, neiDamage 40, which
is 40% of the caster's 外攻 and 40% of their 内攻. Measured: 千军倒 came back at exactly
3378 on two separate occasions, after quite different player damage in between, which nothing scaled
off your own hits could do.
Two ways past it, both from that same line. Stop attacking for a second and the guard expires
unused. Or strike from outside the front 180°, where FightBack is never called at all.
The tell is a buff, and it is the only one you get. The guard puts 反击 on the enemy's buff bar, described in the game's own string table as 在受到攻击时会释放反击技能, for the second it lasts.
A true damage reflect does exist and is a different mechanism: an aura carrying flag 4,
SpellAuraDamageReflect, which returns miscValue% of the damage you just dealt, on a baseValue
chance, and can additionally blunt the incoming hit by baseValue2%. Nothing in the weapon
containers uses it.
ShowNpcSpell reads two different places depending on the character:
if (IsRandomNpc() || IsChongWu() || IsNotRandomNpcRandomSpellAndNoNpcFight())
→ m_SpellManager.GetEquipSpell(type, curTaoluType) // what the tab draws
else
→ NpcFight.GetNpcSpell(npcFight, type) // the authored fight list
and a named character with no fight record hits an early return, so the page draws nothing at all.
Both halves get cast. Across 168 logged hits, 163 came from authored spells and 5 from runtime-generated ones, with one enemy drawing on both inside a single fight. So the tab is accurate about what it lists and silent about the container half, which is where the guard and the counter live. Reading an enemy's page tells you some of what they will throw at you.
A generated move's name means nothing. Its name field is a recipe of string ids,
0|-2234|1500045879|-2271|-2277, which the interface stitches together for display. The prefix pool
is keyed to the character's dominant element: spellName_Yin_1 is 寂韵, _4 寒潜, _5 隐梦, _7
影密, _8 遁玄. A character whose 阴 is 87 against 24, 26, 22 and 22 gets 阴 prefixes on everything.
So a displayed name can never be matched against an authored move, and says nothing about what the
move does.
The moves underneath are real. npc_spell_dynamic names a protoSpellId on every row and varies it
by 偏向, 境界 tier, shape, range and hit count. Existing moves with parameters, given assembled names.
云别月沉 is not a spell. It is a lianzhao_node:
id 1001, nextid 1002, taoluType 101, groupId 1, level 1
neigongValue 15, waigongValue 15, formulaAttri 331
33 nodes across 28 graphs, against 3,392 spells. neigongValue and waigongValue are the same two
percentages the damage formula multiplies 内攻 and 外攻 by, which is why the tooltip prints them in
the same words a move's tooltip does.
The reason it matters for a build is the second half. 连招 is one of the nine source channels every
attribute is assembled from, and it is visible in the 命中 decomposition above: 基础+26, 装备+42,
境界+104, 词条+31, 连招+23, 其他+197. So the 万宗 tree drives the combo and feeds the panel at the
same time, and 洗练 on a node is rerolling an attribute source, not only a move.
Every 招式 carries four 窍穴 — 入门, 熟练, 精通, 化境 — and 领悟-ing one grants two different things that reach you by two different routes.
The 强化效果 is written onto the move itself at the moment you 领悟 it
(UpGradeNodeAddEffect calls AddSpellEffectId(spellId, …)) and stays there. It changes what that
move does when it lands, so it asks nothing of you beyond casting the move.
The 词条 — the block reading 内攻攻击+30, 化解+11, 阴+8, 外攻攻击+35 — are character-wide attributes, and every recompute collects them from exactly one list:
foreach (long id in m_MiJiMgr.m_graphMgr.GetPlayerCurUseSpellNodeIdList()) // ReCalWordEntry
That list is built from the spells equipped in the 套路 you are using, and from nothing else:
GetEquipSpell(ST_ZHAOSHI, curTaoluType) // 4 slots
GetEquipSpell(ST_AOYI, curTaoluType) // 3
GetEquipSpell(ST_GONGTI, curTaoluType) // 1
So 领悟 is necessary and not sufficient. A move sitting unequipped in your 秘籍 pays nothing, however many of its 窍穴 are open, and the panel that shows you the block does not say so.
The 套路 follows the weapon in your hand. curTaoluType is assigned from the item in equipment
slot 0: 剑, 刀, 枪 and 棍, 拳, 暗器. Sheathing a 棍 for a 剑 swaps the whole equipped set, and with it
every 窍穴 词条 that was paying. A move's bonuses are live only while you carry the weapon class the
move belongs to.
A 心法 is the same rule with a narrower slot. ReCalAttrMiJi reads its attribute block from
GetEquipSpell(ST_GONGTI, curTaoluType)[0], the first of the one 功体 slot there is, and returns
early when that slot is empty. A 心法 you own and have not slotted is inert.
The four are four separate node groups, chained but independent, and
GetPlayerCurUseSpellNodeIdList adds every active one it finds for the spell. Nothing there
prefers the last. 飞虹击涧, spell 120300, is four groups of one node each:
| 窍穴 | node | 感悟 to open | 感悟 to reroll | 词条 groups | 特技 |
|---|---|---|---|---|---|
| 入门 | 12030000 | 875 | 292 | 8221 & 8400 & 8400 & 8400 | |
| 熟练 | 12030010 | 1,575 | 525 | 8222 & 8400 & 8400 & 8400 | |
| 精通 | 12030020 | 2,835 | 945 | 8223 & 8400 & 8400 & 8400 | |
| 化境 | 12030030 | 5,103 | 1,701 | 8224 & 8400 & 8400 & 8400 | 406 |
Read across that table twice. Every node carries four 词条 groups, not one. The first is the node's own and differs per acupoint; the other three are the same common pool, and they are the three material slots on the panel — 道具, 丹药, 密卷, in that order. A node you open and feed nothing gives you one 词条 where it could have given four. Sixteen across a fully opened move.
The one thing 化境 alone carries is the 特技. Only 12030030 has a tejiValue, which is the
AddSpellEffectId that 强化属性 on the left page is waiting for. The other three grant 词条 and no
enhancement. So the last acupoint is where the move's behaviour changes, and all four are where your
attributes come from.
The two rolls are separate, which is what makes materials on an early acupoint safe:
CreateOrWashWordEntry replaces list[0]
and leaves the rest of the list standing, so the three you paid materials for survive.An item rolls its slot one of two ways, by its own mijiNodeWordEntryWash: reroll from the node's
common pool carrying the current entry forward, or roll from the item's own table. A 密卷 of item
type 3 subtype 19 rolls against the node's controlPianXiang, which is how a scroll biases the
result toward one element rather than handing you whatever the pool had.
SpellManager.LearnSpell does three things: it adds the id to your learnt list, it registers a
listener if that spell declares one, and it fires the UI event that pops the name on screen. No
attribute, no proficiency, no counter. The listener clause reaches almost nothing — listener_spell
holds five rows for the whole game, each naming one specific condition.
So every channel a move could pay you through is gated on the same thing:
| Channel | Gate |
|---|---|
| 窍穴 词条 | equipped in the current 套路 |
| 心法 attribute block | in the one 功体 slot of the current 套路 |
| 连招 nodes (万宗) | ReCalAttrLianZhao reads GetEquipLianZhao(curTaoluType) — equipped, current 套路 |
| the move's own damage | you have to cast it, so equipped |
And the four weapon skills run the other way round from the guess. Nothing in the assembly writes 刀法, 剑术, 搏击 or 枪棍 by name; all thirteen references are reads. They are raised the way any other attribute is, by books, rewards and allocation, never by learning a move or by swinging one. The game's own tooltip says what they are for: 刀法养成,学习高级刀法的条件,同时可以获得一定的 特技 — the condition for learning the higher-tier moves, and the gate on the 特技 at 700. Proficiency lets you learn; learning does not build proficiency.
The practical read: open 窍穴 on what you intend to carry. A move in the book you never slot is a move you paid 感悟 to look at.
There are five proficiencies, not four — 剑术, 刀法, 枪棍, 搏击 and 暗器 — and all five behave the same way. The trainer's A move you learn raises its weapon skill switch, on by default, is the answer to the design: a learnt 招式 or 奥义 pays its own tier back into its weapon's skill. It counts what you know rather than writing when you learn, so everything already in your 秘籍 counts and switching it off puts the numbers back.
It carries no cap, because the moves are the cap. Counting every one that has a 秘籍 graph, learning all of them pays:
| weapon | moves that can be cultivated | paid if you learn every one |
|---|---|---|
| 搏击 | 130 | 372 |
| 剑 | 126 | 280 |
| 刀 | 61 | 147 |
| 枪棍 | 56 | 132 |
| 暗器 | 38 | 110 |
Against the 700 the 特技 asks for, a lifetime of collecting one weapon's manuals is worth roughly half of it at best, and the spread between weapons is simply how much material each art has written for it. 暗器 has the fewest books, so it pays the least.
Checked against 切游's 加点 guide and the summary that 星界云 and 多多云 circulate.
The headline verdict changed once the mode split was found. These guides are not describing a build that no longer exists. They are describing 爽文江湖, accurately, without saying so.
| Claim | Verdict |
|---|---|
| Every "N per point" figure — 42 气血, 9 真气, 7 外防, 5 外攻, 4 命中 | Right for 爽文 / 险恶 / 暗黑, wrong for 真实江湖. They are attribute_addition's numbers divided by 100, and that is genuinely the table those three modes read. A 真实江湖 save reads attribute_addition_zhenshijianghu, where the same eight points feed different stats entirely |
| No mention anywhere that the table depends on game mode | The gap that makes the rest misleading. One switch, IsZhenShiJiangHu, picks between two tables. Nothing in the community material acknowledges it |
| 元气 as a core 内功 stat | Right in 爽文 (9 真气, 2 内防, 1.5 化解). In 真实江湖 it does nothing for 内功 — it is a 气血 stat identical to 根骨 |
| 专注 as the accuracy stat | Right in 爽文 (4 命中). In 真实江湖 it gives 0 命中 — accuracy is 身法 at 0.8 |
| 体魄 as a health stat | Right in 爽文 (5 气血 as well as 7 外防). In 真实江湖 it gives 0 气血 |
| 力道 and 专注 as the way to raise 要害 | Right in 爽文 (1.5 each). In 真实江湖 要害 has no row at all, so nothing you spend can raise it |
| "筋骨" and "内息" as stat names | Outdated. This build calls them 力道 and 内力 |
| 诛心 = crit damage, 要害 = crit rate, 化解 = enemy crit rate down | Right, all three, and 御心 is the fourth they omit — it is what divides your 诛心 |
| "经脉洗练建议使用阳+身法" | There is no 经脉洗练 in 真实江湖. That mode's meridian screen offers 激活 and attribute points and nothing else; the developer's own note on the change reads 去除繁琐的经脉词条洗炼,改为加点模式. In the modes that still have it, 阳 does nothing unless it is your highest element and your moves are 阳; adding it to any other build subtracts |
| 防具词条 must have 闪避+4%, 身法+5%, 诛心+要害+4% | Sound, and the reasoning is better than stated: 闪避 works on a threshold, and 诛心 is the stat with the ×1.0 floor |
| 外功 build → "筋骨" and 根骨; 内功 → 元气 and "内息"; tank → 体魄 and 精神 | Holds in 爽文. In 真实江湖 only the attack halves survive — 元气 does nothing for a 内功 build beyond 气血, and a tank wants 体魄 for defence with any of the four interchangeables for 气血 |
What no community source mentions at any difficulty: the mode split itself, that four of the eight 资质 are interchangeable in 真实江湖, 身法's numbers, the ten dead attributes, the 相合 subtraction, the 诛心 floor, or that 战力 omits 会心.
AttriManager.ReCalAttri / ReCalAttriEquip / GetAttriResultDes,
AttributeAdditionInfo.LoadCSV / GetTableName, Tools.TransfromAttriDic,
SpellCalculate.CalculateFormulaDamage / CalculateFormulaQidunDamage / CaculateDefenceRate,
UnitController.GetXiangHe, NpcEntity.GetMaxPianXiangState / GetZhanLi,
StuntManager.GetStuntEffectValue, AttriPart.GetAttriTip / RefreshZhenShiJiangHuAttri,
UnitController.Defense / FightBack, SpellCalculate.DoEffectDamage,
NpcInformationView.ShowNpcSpell, NpcFight.GetSpellList / GetNpcSpell, and the tables
attribute_addition, attribute_addition_zhenshijianghu, spelleffect, spellprotype,
npc_spell_container, npc_spell_dynamic, lianzhao_node, pianxiang, stunt_proto.
Column order in those tables is extracted from each loader rather than counted by hand —
tools/gamedb.py, which reads a row by field name. Every figure quoted from a data table on this
page was read through it.
What was measured. The 真实江湖 rates were taken on a running character, one 资质 at a time:
raised alone, the eleven combat stats and four pool ceilings read back once two consecutive reads
agreed, then reverted with the revert confirmed before the next stat. Run at +1000 and again at +300,
identical per-point rates. Every measured figure then matched its row in
attribute_addition_zhenshijianghu to the unit, including the one apparent discrepancy, which
turned out to be a +10% 内力 modifier on the test character inflating both of 内力's outputs by
exactly 10%. Harness: tools/zizhi_sweep.py, re-runnable against any character.
The 爽文 / 险恶 / 暗黑 rates were not measured. They are attribute_addition read directly. Given
that the 真实江湖 table predicted its own measurements exactly, the default table is likely just as
reliable, but it has not been checked on a running save of those modes.
The damage formula was measured whole. A hook on CalculateFormulaDamage recorded every input
the game read, the damage it returned, and an independent recomputation of the formula above from
those same inputs, over 405 calculations of ordinary play. On the 162 where no aura was active on
either side — the one path the recomputation deliberately does not repeat, because it runs through
methods that take the value by reference — the formula reproduced the game's own damage exactly,
162 times out of 162. The same integer, not a close fit, across many attackers, targets and moves,
with crit multipliers spanning 1.0000 to 3.2140 and 126 distinct defence values from 0 to 12,188.
That makes the two claims in the sections above measured rather than read: the defence curve and the
crit multiplier are both inside the computation that matched, and both were then demonstrated
directly on their own. Harness: tools/damage_probe.py, against the trainer's /damage endpoint.
Note that the same function serves healing and 真气 regeneration, which is most of what it computes outside a fight; rows are marked and the regeneration ones excluded.
The weapon containers were measured; the guard is a code reading. That the container half is
really cast, and that both halves are cast by the same character, comes from the same log: 168
landed attacks, 163 from authored spells and 5 from runtime-generated ones. The counter's 3378
appearing twice against different preceding damage is measured too. What is read rather than
measured is the mechanism — the guard aura's one-second duration, the 100% odds, the front-180°
condition and the single-use consumption are all from Defense / FightBack and the effect row,
not observed directly. Confirming them would need a hook on aura application, which does not exist.
Still code readings, not measured: the 相合 ring, 战力, the ten dead attributes and the weapon 特技. The 命中 ≥ 闪避 threshold is also unmeasured, and needs an enemy whose 闪避 already exceeds your 命中 — points only go up, so it cannot be forced. Read those as what the code says rather than as what the game does until each is checked the same way.