Every social step in this game (writing to someone, asking them for an item, becoming their disciple, marrying them, taking them on the road) is gated by the same pair of numbers, and there are only six gates in the whole system. It is also the same ladder for almost every person in the world: there is no romance roster, no per-character requirement, and no story flag on the marriage option. One row in a data table turns it on for everybody at once.
These are one table's worth of rows, all attached to the pseudo-character id 1, which the game merges
into every character's interaction menu (NpcInteract.GetNpcInteractsByNpcID). The game prints the
requirement itself on the greyed-out button when you hover it, which is how the wording below is
verified rather than inferred.
| Step | 好感 | 情分 | Offered on |
|---|---|---|---|
| 交谈 / 交互 / 赠礼 | — | — | everyone |
| 谈论 / 诋毁 / 探听 | — | — | everyone |
| 飞鸽传书 (letters) | 5 | 150 | everyone |
| 请教 (be taught) | 5 | 150 | everyone |
| 索要 (ask for an item) | 20 | — | everyone |
| 拜师 (become their disciple) | 50 | 1500 | random characters only |
| 结缘 (marry) | 75 | 3500 | everyone, opposite sex, not a child |
| 结义 (sworn siblings) | 75 | 3500 | everyone, same sex |
| 邀请同行 (recruit) | 75 | 3500 | random characters only |
Two of those rows carry a flag that restricts them to procedurally generated characters, the blue dots on the map. 拜师 and the generic recruit option never appear on a named story character, however high you push the numbers. Named characters who can be recruited each have their own row instead, and none of those rows asks for 好感 or 情分 at all (see Recruiting).
A handful of things narrow the list further:
The assembly also contains a hardcoded version of this check, asking 40 for 拜师 and 70
for 结缘 and 结义 (RelationShipManager.IsReachNpcHaoGan). It is dead. Its only two call sites are inside
InteractOnChat.InitData, which nothing in the assembly calls. The data conditions above are what run.
The phrase the game prints beside a name is a band. RelationShipManager.GetHaoGanDescriptionByValue
treats −5 to 5 as a neutral middle and everything outside it as ceil(|好感| / 25), with the sign
choosing which of the two ladders to read:
| 好感 | Tier |
|---|---|
| 6–25 | 互通名姓 |
| 26–50 | 相交意气 |
| 51–75 | 莫逆之交 |
| 76–100 | 生死与共 |
生死与共 is the last rung: nothing sits above it, and 好感 itself caps at 100.
This one was checked in play. Three characters read back what the formula predicts: 张玄素 at 好感 70 shows 莫逆之交, 真熠 at 8 shows 互通名姓, and 宁玉成 at 0 shows 陌路不识, the neutral band.
That top boundary is the same wall the 情分 drip runs into, seen from the other side. The drip is clamped at 好感 75, the last point of 莫逆之交, so 生死与共 begins one point past everything gifting can reach.
This is the mechanic the community has been arguing about for two years, and it is eight lines of code.
Every time your 情分 with someone goes up, the game divides your lifetime 情分 total with that person
by 1000, and for each new thousand you have crossed it adds +1 好感, then clamps that award so it can
never take you past 好感 75 (RelationShipManager.ModifyQingFenValue). Crossings that would push you
over 75 are consumed, not banked.
So:
The two numbers are also stored twice each. m_QingFen is the spendable pool that you burn on
请教 and 索要. m_QingFenRecord is a lifetime total that only ever increases. The ladder conditions
read the record (the condition rows end in |1, which selects it), so spending 情分 never costs you a
rung. Learn a 12,500-情分 secret technique and your 结缘 eligibility is untouched.
Two things can silently kill the drip: it only runs when 情分 increases, and it needs the character to be a loaded entity; the conversion rate is looked up through their personality, and an unloaded character has none.
Everything below is read out of the assembly. Nothing in this table was measured in play.
| Action | 好感 | 情分 | Cost | Where |
|---|---|---|---|---|
| 谈论 — discuss a third person | +30 on success, ~51% | — | 20 精力 | RelationPanelNew.HaoGanHandle |
| 诋毁 — badmouth a third person | +30 on success, −30 on failure | — | 20 精力 | same |
| 委托 — finish a commission | +5 / 7 / 9 / 11 / 13 / 16 / 20 by tier | 150 / 180 / 220 / 270 / 330 / 405 / 495 | the errand | EntrustManager.DoFinisedEntrustAction |
| 赠礼 — a liked gift, 七阶 | +9 to +16 by their taste, +32 for a hand-listed favourite | 420–1150 by their taste | the item | see Gifts |
| 切磋 — win a spar | +8 | — | 精力, and the option has to be offered (see above) | CommonTipView.OnQieCuoOver |
| 论道 — win the card duel | +5 | — | 精力, random characters only | LunDaoMainView.GameOver |
| 誓好 letter | +5 | — | — | MailManager |
| 切磋 — lose | +1 | — | — | |
| 论道 — lose | +1 | — | — | |
| 巧取 — pickpocket them | −5 | — | 精力 | ShowItemView |
| 劫杀 — rob someone | their friends and spouse set to −50; their enemies +5 | — | RelationShipManager.OnRobNpcCompleted |
谈论 is the best rate in the game, and the only fast one that works on named
characters. It costs 20 精力, rolls just over half (Random.Range(0,100) <= 50), and pays 30 to both
characters involved plus 30 between them. Expected value is about 15 好感 per cast, against 8 for a won
spar you can only get from a random character. On failure 谈论 pays nothing and costs nothing but
the 精力; 诋毁 on failure costs you 30, so there is no reason to pick it unless you want the two
of them to fall out.
Its one requirement is a target: you pick a third person from either that character's relationship list or your own, so someone with no listed relations gives you nothing to talk about.
委托 is the best source of 情分, paying 495 per tier-7 commission against a gift's few hundred, and it pays 20 好感 on top. Both figures are hardcoded arrays in the assembly, not data. The generic commission option is another random-characters-only row, but roughly 700 characters carry a commission row of their own, so it is not the restriction it looks like.
容貌 adds a flat bonus to every positive 好感 gain the player makes
(RelationShipManager.CheckRongmaoAddHaogan), on a step function:
| 容貌 | bonus |
|---|---|
| ≤ 10 | 0 |
| 11–35 | +1 |
| 36–100 | +2 |
| 101–180 | +3 |
| 181–250 | +4 |
| 251–290 | +5 |
| 291+ | +6 |
It is added before the multipliers below, and it applies per gift, per spar, per commission, which is why it matters more than a flat six points sounds. On a base-3 gift it is a doubling.
琴艺 and 酒量 are the two multipliers, and they only exist through equipment-slot 特技:
1 + min(1.0, 琴艺/1000). At the 450 that unlocks it that is +45%; it caps at +100% at 琴艺 1000.Both must be equipped, not merely owned; only equipped stunts contribute
(StuntManager.RefreshPrototypes), and only one stunt per slot is active. Without the stunt the lookup
returns zero and the attribute does nothing at all. There is a third slot for a commission-好感 bonus in
the enum with no stunt in the data, so it is currently inert.
RelationShipManager.GetHaoganValue, the function every gate reads, adds ceil(sect_standing / 20) × 5
to the raw number, using your standing with that character's sect. At sect standing 100 that is a flat
+25 好感 with every member of that sect, and it counts toward the 75 needed for 结缘 and recruitment.
It is applied on read, so it does not persist into the stored value and it evaporates the moment you
leave the sect. Negative standing subtracts the same way, up to −25.
That means the cheapest route to 结缘 with a sect member is often sect bounties, not gifts.
Two separate conversions run on the same item, and the panel previews both before you confirm
(RelationShipManager.ModifyHaoganValue(…, Item, …)).
好感 = base + floor(base/2) × item_level
情分 = base × (1 + quality × 0.15 + item_level × 0.4 + enhancement × 0.01)
Item level and quality are stored zero-based, so a 七阶 item is level 6 and quality runs 0–4. So a 七阶 gift multiplies the 好感 term by 6 and adds 2.4 to the 情分 multiplier.
The two bases come from the recipient's strongest personality attribute, which the game picks fresh
each time from the eight on their sheet (Gift.GetNpcTendencyAttri; ties go to the earliest in the list
below). Their info page shows the resulting taste as 兴趣.
| Their strongest stat | 好感 base | 情分 base | Likes | Dislikes |
|---|---|---|---|---|
| 福气 | 3 | 105 | 礼品, 食物, 酒, 画卷 | 技艺书, 丹药 |
| 容貌 | 4 | 288 | 戒指, 项链, 挂坠, 画卷 | 酒, 技艺书 |
| 口才 | 3 | 105 | 丹药, 技艺书, 食物, 画卷 | 戒指, 挂坠 |
| 商道 | 3 | 105 | 技艺书, 酒, 礼品, 画卷 | 食物, 丹药 |
| 胆识 | 3 | 105 | 酒, 食物, 丹药, 画卷 | 戒指, 礼品 |
| 修养 | 4 | 196 | 技艺书, 挂坠, 礼品, 画卷 | 食物, 丹药 |
| 坚韧 | 4 | 196 | 丹药, 酒, 戒指, 画卷 | 项链 |
| 豪爽 | 3 | 105 | 食物, 礼品, 丹药, 画卷 | 项链, 挂坠 |
画卷 is liked by all eight. Thirty-six items in the game carry that classification, and a painting is the only gift that never needs you to know anything about the recipient. It is also the one gift class you can manufacture: the 画道 life skill produces them.
A 容貌-led character is worth nearly three times as much 情分 per gift as a 福气-led one, for the same item. A 七阶 quality-4 painting is 1152 情分 to the first and 420 to the second, and 1152 is more than a full point of 好感 through the drip.
The 坚韧 row lists 酒 as both liked and disliked; the code checks liked first, so the dislike is dead.
Only four characters in the entire game have a hand-picked favourite item, worth 8 base instead of 3 or 4, yielding 32 好感 for a 七阶 one:
| Character | Item |
|---|---|
| 六婶, 村长夫人 | 绢花, 墨条 |
| 霖虹 | 荷包, 阳江香 |
| 李三问 | 元正酒 |
Three more rows list a specifically hated item (狗皮膏药, 醒脑丸/养气散, 百灵丹, for 霖虹, 霖虹/王铁 and 张蓉榕), and five characters start the game with 好感 already on the clock: 张蓉榕, 霖虹, 王铁 and 村长 at 10, 灵均 at 25.
Two things about the gift panel worth knowing:
ItemStorage.GetPresentItems filters on exactly that), so
you cannot hand someone a disliked gift in person. The disliked path — which pays negative 好感, no
情分, and clamps your floor at −39 so it can never itself start a feud — is only reachable through
the letter system.RelationShipManager.CanPresentNpc).The roster caps at 9 and you can field 3. TeamManager.MAX_TEAM_COUNT is 10 and
MAX_DEPLOY_COUNT is 4, but both are tested as count >= MAX − 1, so the real limits are nine recruited
and three deployed (TeamManager.AddTeamMember, DeployMember). The cap is on the main team only;
story-scripted followers and temporary companions ride in separate lists that GetAllPlayerTeam() folds
in on top.
Random characters take the standard 75 / 3500 and nothing else.
Named characters need a row of their own, and not one of the 33 such rows reads 好感 or 情分. They are gated on a quest, a dialogue, or a fight instead, and the requirement is printed on the locked button:
| Requirement | Who |
|---|---|
| Beat them in a fight | 求败, 诗仙, 胖子, 七公, 岳靖魔, 萧盖世, 段风流, 雄八 |
| Finish a specific conversation or quest | 高枫芸, 云烟, 六婶, 江雪晴, 幽影, 白霜茗, 柳如烟, 空慧, 东方不败, 蓉儿, 陆可儿, 阿贞, 潘金莲, 小龙女, 灵儿, 上官淑, 司青寒, 花如是 |
| 完成杨家霸王枪 | 杨铁心 (two rows) |
| 玉沙告急, or become 丐门掌门 | 郭大侠 |
| 等待小妙游历结束 (a letter completes) | 小妙, and her grown-up version via a bounty |
| Nothing at all | 猹猹 |
| Quest chain, then beat her | 镜无双 |
猹猹 is the outlier: its recruit row carries no conditions in either the show filter or the lock, so it joins on request.
Note what is not on that list. 灵均 has no recruit row; the community reports 灵均 joining after the true ending, which would be a script call rather than a menu option, and that is consistent with the data. And no amount of 情分 will ever recruit 镜无双; the reports of 7,000, 20,000 and 50,000 failing are correct, because her row does not read 情分 at all.
Almost everyone is romanceable. The 结缘 option comes from the global row, so the eligibility test is short: opposite sex, not a child, not a pet, and 好感 75 with 情分 3500 lifetime. The community's reports of marrying the village chief's wife, an elderly aunt, and a quest character by misclick are not bugs. They are the design.
Four characters (all 绝影楼密探) carry their own 结缘 rows with no conditions whatsoever.
Gender is enforced in the menu, not the data. InteractTip.onInteractClick filters the expanded
submenu with player.IsFemale() != target.IsFemale() for 结缘 and == for 结义. Sex comes from a bit on
the character's base record — bit 4 male, bit 8 female — and 291 base records in the game carry neither,
which the game's own error log calls out as missing data; those read as male.
There is a second, older filter in the same method that tests a different field entirely (the character's flag mask, which holds boss and elite bits and is zero for every named character). It sits on the branch that runs when the interaction has no group, and it would hide 结缘 on everyone. It is worth knowing it exists if the option ever fails to appear where the numbers say it should.
Asking is a coin flip you can retake. 结缘, 结义 and 拜师 all roll against a single shared constant,
Tools.NPC_INTERACT_RATE = 0.6, a 60% success rate, with no penalty for failure beyond a refusal
line. Ask again. Nothing in the code tracks refusals, so the community's "月兰 refuses the first time,
accepts on the second or third" is this roll and not a scripted rejection.
Marriage is exclusive, and the game enforces it silently. RelationShipManager.AddJieYuan looks for
an existing active bond on the player, marks it inactive, and writes a "bond dissolved" record, so
marrying someone new automatically divorces whoever you were with. There is no divorce command; taking a
new spouse is the divorce. Before it happens you get a message box naming your current spouse, but the
confirm button on that box goes straight through to the roll. It is a warning, not a veto.
Marriage does almost nothing. What AddJieYuan writes is a relationship record, a line in
your 生平, and a flag on both characters that stops the world simulation from pairing them off with
anyone else. Nothing in the assembly reads the married state to change dialogue, unlock a shop, grant a
buff, or make a spouse follow you. The two-year community consensus that 结缘 is "纯摆设" is a fair
reading of the code.
There is a second, guaranteed route. An NPC can write to you proposing marriage, and accepting that
letter calls RelationShipManager.CreateMarryRelation, which has no success roll. It just happens.
The proposal is generated by SendMailHandle, which requires the same 75 / 3500 (it literally looks up
the same interaction row and evaluates its condition), plus: opposite sex, they must be alive, and they
must be a 飞鸽 correspondent, meaning at least one completed letter exchange and 好感 above 5. Six such
letters go out per batch, drawn at random from everyone who qualifies. The equivalent letter for 结义
requires the same sex.
Learning a secret technique from your master is priced in 情分 and gated on the 好感 tier, from
qingjiao_prototype:
| What | 好感 tier needed | 情分 |
|---|---|---|
| A life-skill consultation | 互通名姓 / 相交意气 / 莫逆之交 by tier | 80 / 350 / 800 |
| 秘技, common (quality 0–1) | 相交意气 (≥26) | 3400 |
| 秘技, rare (quality 2–3) | 莫逆之交 (≥51) | 6500 |
| 秘技, gold (quality 4) | 生死与共 (≥76) | 12500 |
That last row is why 75 matters so much: the drip stops at exactly 75, and the gold technique needs 76.
Except the check is cosmetic. In QingJiaoView.SetContentPrefab, the life-skill buttons only get a
click handler when the tier is unlocked, but the 秘技 buttons get theirs unconditionally. The row
still draws a padlock on its header, and clicking it still works. The only thing actually verified on
click is that you hold enough 情分. That matches the player report of buying a gold technique without
unlocking the tier, and it means the practical requirements for a gold passive are 拜师 (50 / 1500) and
12,500 情分, nothing more.
ModifyHaoganValue returns immediately if the target is dead, so nothing can be repaired
afterwards. Killing someone you meant to learn from is unrecoverable.Checked against the TapTap 江湖2攻略组 new-player guide, its companion piece on NPC development, 秋枫笙陌's beginner guide, 游侠网's relationship-system article, the sect guide, and a large number of 百度贴吧 threads.
| Claim | Verdict |
|---|---|
| 飞鸽 5/150, 请教 5/150, 索要 20, 结义·结缘 75/3500, recruit 75/3500 | All correct, and the game prints them on the locked buttons |
| 拜师 needs 情分 3500 | Wrong — 1500. The one guide that says both numbers in consecutive sentences has 1500 right the first time; the reprints picked the wrong one |
| "情分 to a threshold raises 好感; each character has a different threshold; ~10,000 maxes an ordinary one" | Half right. The conversion is real. The threshold is a flat 1000 per point, identical for all eight personality types — 10,000 情分 is +10 好感, not a full bar — and it is hard-clamped at 好感 75 |
| "无限送礼,情分30000+,好感只在75不动了" | Exactly right, and now explained. The clamp is 75 − current好感 |
| "显示+0,但是一直送还是能加好感" | Right. The +0 is the direct term; the drip is doing the work |
| "50以上送三次才加一次,一次约2点" | Not reproducible in this build. Nothing in the code changes the gift rate at 50. The per-character 好感 ceiling mechanism (Npc_HaoGan) does exist, is wired into every gain, and ships with a table of zero rows — and even if it had rows it is keyed by row id rather than character id, so it would only bind by coincidence. A 2024 build with that table populated would behave exactly as reported |
| 生死与共 is unreachable | Unreachable by gifting. Reachable by 谈论, spars, commissions and 论道, none of which touch the clamp |
| 容貌 raises gift gains; "长得帅再+1" | Right, and it is a flat step from 0 to 6 on every positive gain, not a percentage |
| 修养 raises 情分 gain; 豪爽 cheapens 索要; 胆识 affects 切磋 | Not in the code. 修养 and 豪爽 appear only as the recipient's taste category. What actually multiplies 情分 is 酒量, through an equipped stunt. 豪爽 is a stat you gain from giving gifts, not one that spends |
| "亲和 and 酒量 do not exist in this game" | Wrong on both counts, and the confusion is a mistranslation. The internal name QinYi is 琴艺, not 亲和 — and 琴艺 and 酒量 are precisely the two attributes that scale 好感 and 情分 gain, each through a dedicated equippable 特技 (短歌微吟, 一醉累月) unlocking at 450 and capping at +100% at 1000 |
| Sect standing and personal 好感 are separate systems | Wrong. Sect standing adds ceil(standing/20) × 5 to your effective 好感 with every member of that sect, and it counts toward the 75 gate |
| "3 deployed"; "可以带9个的" | Both right, and both are the code's numbers — 9 on the roster, 3 in the field |
| Random characters recruit at 75/3500; named ones need identity quests | Right, and the code is stricter than stated: not one of the 33 named recruit rows reads 好感 or 情分 at all |
| Gold passive costs ~12,000–13,500 情分; green ~4,000, blue ~7,000 | 3400 / 6500 / 12500, from qingjiao_prototype |
| "那个不用解锁就能学" (the tier lock on 秘技 does nothing) | Right. The 秘技 buttons are wired unconditionally; only the 情分 is checked |
| 结缘 is exclusive, no divorce, "结缘另外一个自动斩断" | Right, and the severing is automatic and silent |
| 结缘 is inert — "毛用没有,纯摆设" | Right. Nothing reads the married state except the world's own pairing logic |
| Any opposite-sex character can be married, including a dog | Right — it is one global row. The dog is presumably a base record with no gender bit, which reads as male |
| "结缘 needs a special location at sea" for main heroines | No. No character-specific 结缘 condition exists except four 绝影楼密探 rows, which have none |
| 切磋 gives +2 | +8 for a win, +1 for a loss — but only a plain spar. Sect, prison and 侠谷 spars are explicitly excluded, and the option is offered on procedurally generated characters plus the 142 named ones carrying their own row |
| Killing a character's enemy raises their 好感 (developer statement) | Confirmed for 劫杀, at +5 to everyone the victim was hostile to. It comes bundled with −50 to everyone the victim liked. A plain kill outside the 劫杀 flow was not traced |
| A commission can give +17 in one shot | Close — the array is 5 / 7 / 9 / 11 / 13 / 16 / 20 by tier, before 容貌 and the 琴艺 multiplier |
| 索要 costs 情分 "determined by the item" | Right. The price is a per-item-category base (15 for a common herb, 5760 for a main-quest item) scaled by 1 + quality×0.15 + level×0.4 + enhancement×0.01, then discounted by 4% per point of 好感 above 50 — so the maximum 20% is reached at 好感 55 |
| 情分 can go negative | Consistent with the code — nothing floors it |
| 收徒 does not exist | Right. There is no such interaction type |
Nothing in the community material mentions 谈论 at all, the fastest source of 好感 in the game, available on every character, at four times the rate of a spar.
RelationShipManager in full (ModifyHaoganValue both overloads, ModifyQingFenValue,
GetHaoganValue, CheckMenPaiHaoGanChange, CheckRongmaoAddHaogan, SetHaoGanValue,
GetHaoGanDescriptionByValue, AddJieYuan, AddShiTu, CreateMarryRelation, CheckPlayerExpWithNpc,
CanPresentNpc, IsArchiveHaoGanLevel, SendMailHandle, OnRobNpcCompleted); Gift in full;
NpcInteract.GetNpcInteractsByNpcID; RoleInteract.GetNpcInteracts; InteractSlot
(Handle_IT_JIEYUAN, Handle_IT_PRESENT, Handle_IT_TanLunNpc, OnPresent);
InteractTip.onInteractClick; RelationPanelNew.HaoGanHandle; InteractOther.GetQingYiPrice /
QingYiBuyJudge; QingJiaoView; TeamManager; StuntManager.GetStuntEffectValue /
RefreshPrototypes; EntrustManager.DoFinisedEntrustAction; LunDaoMainView.GameOver;
ItemStorage.GetPresentItems; MailManager (ExchangeHandle, NpcPresentHandle, MarryHadle);
AnswerViewNew.CheckFriendshipValue / CheckEmotionValue.
Tables: npc_interact (the ladder), gift (all 115 rows), qingjiao_prototype, npc_haogan (empty),
base_probability (which fixes item level and quality as zero-based), stunt_proto,
npc_prototype / npc_prototype_base (names, sex bit, child bit), item_base.
The rates here were not measured in play. What has been read off a running game is the tier table, confirmed on three characters at 好感 70, 8 and 0, and the ladder itself, which renders with the exact wording quoted above. Given that this project's last measurement pass overturned a published attribute table wholesale, treat every rate here as what the code says rather than what the game does until it is checked.
The four things most worth measuring, in order: