DNF90 服务端与启动器完整源码(含 GM 工具功能增强)

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

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

No files matched your search

@@ -0,0 +1,108 @@
package dnfbridge
func (r *csharpLegacyUserInfoReader) build374() []byte {
row, ok := r.rawOne("legacy_character_userinfo374_state", []string{"header"})
if !ok {
return nil
}
header := rowBytes(row, "header")
if !legacyPayloadLengthOK(header, 20) {
return nil
}
rows12, ok := r.rawPayloadRows("legacy_character_userinfo374_rows", "raw12", 12)
if !ok {
return nil
}
rows13, ok := r.rawPayloadRows("legacy_character_userinfo374_rows", "raw13", 13)
if !ok {
return nil
}
var w packetWriter
w.writeBytes(header)
writeLegacyRawRows(&w, rows12)
writeLegacyRawRows(&w, rows13)
r.loaded = true
return w.bytes()
}
func (r *csharpLegacyUserInfoReader) build379() []byte {
row, ok := r.rawOne("legacy_character_userinfo379_state", []string{"header"})
if !ok {
return nil
}
header := rowBytes(row, "header")
if !legacyPayloadLengthOK(header, 25) {
return nil
}
rows12A, ok := r.rawPayloadRows("legacy_character_userinfo379_rows", "raw12_a", 12)
if !ok {
return nil
}
rows12B, ok := r.rawPayloadRows("legacy_character_userinfo379_rows", "raw12_b", 12)
if !ok {
return nil
}
rows5, ok := r.rawPayloadRows("legacy_character_userinfo379_rows", "raw5", 5)
if !ok {
return nil
}
var w packetWriter
w.writeBytes(header)
writeLegacyRawRows(&w, rows12A)
writeLegacyRawRows(&w, rows12B)
writeLegacyRawRows(&w, rows5)
r.loaded = true
return w.bytes()
}
func (r *csharpLegacyUserInfoReader) build37A() []byte {
row, ok := r.rawOne("legacy_character_userinfo37a_state", []string{"header1", "header33"})
if !ok {
return nil
}
header1 := rowBytes(row, "header1")
header33 := rowBytes(row, "header33")
if !legacyPayloadLengthOK(header1, 1) || !legacyPayloadLengthOK(header33, 33) {
return nil
}
rows8, ok := r.rawPayloadRows("legacy_character_userinfo37a_rows", "raw8", 8)
if !ok {
return nil
}
rows12A, ok := r.rawPayloadRows("legacy_character_userinfo37a_rows", "raw12_a", 12)
if !ok {
return nil
}
rows12B, ok := r.rawPayloadRows("legacy_character_userinfo37a_rows", "raw12_b", 12)
if !ok {
return nil
}
rows12C, ok := r.rawPayloadRows("legacy_character_userinfo37a_rows", "raw12_c", 12)
if !ok {
return nil
}
rows10A, ok := r.rawPayloadRows("legacy_character_userinfo37a_rows", "raw10_a", 10)
if !ok {
return nil
}
rows10B, ok := r.rawPayloadRows("legacy_character_userinfo37a_rows", "raw10_b", 10)
if !ok {
return nil
}
rows5, ok := r.rawPayloadRows("legacy_character_userinfo37a_rows", "raw5", 5)
if !ok {
return nil
}
var w packetWriter
w.writeBytes(header1)
w.writeBytes(header33)
writeLegacyRawRows(&w, rows8)
writeLegacyRawRows(&w, rows12A)
writeLegacyRawRows(&w, rows12B)
writeLegacyRawRows(&w, rows12C)
writeLegacyRawRows(&w, rows10A)
writeLegacyRawRows(&w, rows10B)
writeLegacyRawRows(&w, rows5)
r.loaded = true
return w.bytes()
}