package dnfbridge import ( "os" "strings" dnfrepo "longheng.io/server/internal/modules/dnf/repository" ) // currentSwordDemonProjectGrow3Env 是"一觉契魔者按未觉醒 grow 下发"的排查开关。 // // 2026-10-20 现场:未觉醒契魔者(job 11 / grow 0x03)蛇腹剑形态稳定可用;一觉 // (grow 0x13)始终没有形态;体验转职(客户端本地建角色)正常。服务端两种状态 // 的 op19/技能数据完全一致,怀疑客户端是按 grow 去查职业基线/形态表,觉醒阶段 // 走了一条没有蛇腹剑的路径。 // // 默认关闭(保留真实觉醒 grow,客户端显示仍为剑魔)。只有显式 // DNF90_SWORD_DEMON_PROJECT_GROW3=on 才启用这套绕过,用于对照/排障。 // 2026-10-20 决定:正式方案改为客户端侧“按已学技能挂形态”,不再依赖职业基线。 const currentSwordDemonProjectGrow3Env = "DNF90_SWORD_DEMON_PROJECT_GROW3" func currentSwordDemonProjectGrow3Enabled() bool { return strings.EqualFold(strings.TrimSpace(os.Getenv(currentSwordDemonProjectGrow3Env)), "on") } // currentClientProjectedGrow 返回下发给客户端时使用的 grow 字节。 // // 默认原样返回;开关开启时,只把"一觉契魔者"的觉醒阶段清零(0x13 -> 0x03), // 其它职业/阶段一律不动。真实数据仍来自 character.Stats["grow_type"]。 func currentClientProjectedGrow(character dnfrepo.CharacterRecord) byte { grow := byte(numericCharacterStatValue(character, "grow_type")) if !currentSwordDemonProjectGrow3Enabled() { return grow } job, ok := characterJobByte(character) if !ok || job != currentATSwordmanJob { return grow } if grow&0x0f != currentSwordDemonFirstGrowType { return grow } return grow & 0x0f }