Files
90CNServer/server/internal/modules/dnf/fatigue/weakness_value.go
T
hanfuit 645b64fe21 DNF90 服务端与启动器完整源码(含 GM 工具功能增强)
服务端(Go):
- GM 塞背包/带属性装备发放:在线角色推送 op14 增量物品行,背包实时刷新,无需回角色选择界面
- GM 改金币/改等级:去掉在线拒绝,落库后推送 op14 钱包/op37 等级状态,在线实时刷新
- 等级端点统一切换到新版 GMSetCharacterLevel(自带在线刷新)
- 无限/锁死疲劳模式 + 燃烧疲劳:每房间消耗 2 点、打怪与通关经验双倍
- 燃烧疲劳开关时给所有在线角色推送系统提示(op12 mode 0)
- 深渊史诗掉率:GM 全局倍率 + 城镇增益药剂窗口倍率,真实接入掉落结算

启动器(Python/JS):
- 标题栏自绘、窗口 1204x717、禁止拖拽改大小、仅最小化/关闭
- GM 工具:疲劳与燃烧、深渊史诗掉率、拍卖行上架(单一定价对齐)
- 拍卖行上架前端对齐服务端单一价格语义,修复 400 报错
2026-11-04 14:31:55 +08:00

42 lines
1.6 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package fatigue
// 本文件只提供一个投影函数,供决斗场(PVP)代码读取"虚弱/状态百分比"。
//
// 重要:这棵树的 stamina 语义是**惩罚等级 0..10**,不是百分比。
// 权威实现在 dnfbridge/weakness_state.go:
//
// level = clamp(stats["stamina"], 0, 10)
// condition = 100 - level*9 (level=9 -> 19%,level=10 -> 10%)
//
// 决斗场代码(远端玩家 actor / 街头争霸成员行)需要一个"取状态百分比"的入口,
// 参考树把它做成了 fatigue.WeaknessValue(stats)。这里给出同名 API,但**保持本树
// 的等级语义**,因此它是 dnfbridge 那套虚弱系统的只读投影,不改变任何既有行为,
// 也不引入参考树的百分比数据模型——虚弱系统不属于本次决斗场移植范围。
const (
// WeaknessStatKey 是惩罚等级所在的角色 stat 键。
WeaknessStatKey = "stamina"
// WeaknessMaximumLevel 与客户端自身的钳位一致。
WeaknessMaximumLevel int64 = 10
// WeaknessConditionStep 是每一级惩罚损失的状态百分比。
WeaknessConditionStep int64 = 9
// WeaknessHealthyValue 是客户端视为健康的状态百分比。
WeaknessHealthyValue int64 = 100
)
// WeaknessValue 把持久化的惩罚等级投影成客户端消费的状态百分比。
// Stats 为 nil、缺键或为负时按 0 级处理(=100%)。
func WeaknessValue(stats map[string]int64) int64 {
level := stats[WeaknessStatKey]
if level < 0 {
level = 0
}
if level > WeaknessMaximumLevel {
level = WeaknessMaximumLevel
}
condition := WeaknessHealthyValue - level*WeaknessConditionStep
if condition < 0 {
return 0
}
return condition
}