Files
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

48 lines
1.4 KiB
Go

package config
import "strings"
const (
defaultPVFMaxBytes int64 = 1024 * 1024 * 1024
defaultPVFChunkCacheBytes int64 = 96 * 1024 * 1024
defaultPVFTextCacheBytes int64 = 64 * 1024 * 1024
)
// PVFSection is the DNF project extension that keeps Script.pvf loading in
// the generic platform bootstrap without coupling the framework to DNF logic.
type PVFSection struct {
Enabled bool `toml:"enabled"`
Path string `toml:"path"`
MaxBytes int64 `toml:"max_bytes"`
PreloadChunks bool `toml:"preload_chunks"`
ChunkCacheBytes int64 `toml:"chunk_cache_bytes"`
TextCacheBytes int64 `toml:"text_cache_bytes"`
}
func (c *ServiceConfig) normalizePVF() {
if c.PVF.MaxBytes == 0 {
c.PVF.MaxBytes = defaultPVFMaxBytes
}
if c.PVF.ChunkCacheBytes == 0 {
c.PVF.ChunkCacheBytes = defaultPVFChunkCacheBytes
}
if c.PVF.TextCacheBytes == 0 {
c.PVF.TextCacheBytes = defaultPVFTextCacheBytes
}
}
func (c *ServiceConfig) trimPVF() {
c.PVF.Path = strings.TrimSpace(c.PVF.Path)
}
func (c ServiceConfig) validatePVF(errs *[]error) {
if c.PVF.Enabled {
requireString(errs, "pvf.path", c.PVF.Path)
}
if c.PVF.MaxBytes != -1 {
requirePositiveInt64(errs, "pvf.max_bytes", c.PVF.MaxBytes)
}
requirePositiveInt64(errs, "pvf.chunk_cache_bytes", c.PVF.ChunkCacheBytes)
requirePositiveInt64(errs, "pvf.text_cache_bytes", c.PVF.TextCacheBytes)
}