服务端(Go): - GM 塞背包/带属性装备发放:在线角色推送 op14 增量物品行,背包实时刷新,无需回角色选择界面 - GM 改金币/改等级:去掉在线拒绝,落库后推送 op14 钱包/op37 等级状态,在线实时刷新 - 等级端点统一切换到新版 GMSetCharacterLevel(自带在线刷新) - 无限/锁死疲劳模式 + 燃烧疲劳:每房间消耗 2 点、打怪与通关经验双倍 - 燃烧疲劳开关时给所有在线角色推送系统提示(op12 mode 0) - 深渊史诗掉率:GM 全局倍率 + 城镇增益药剂窗口倍率,真实接入掉落结算 启动器(Python/JS): - 标题栏自绘、窗口 1204x717、禁止拖拽改大小、仅最小化/关闭 - GM 工具:疲劳与燃烧、深渊史诗掉率、拍卖行上架(单一定价对齐) - 拍卖行上架前端对齐服务端单一价格语义,修复 400 报错
45 lines
2.1 KiB
C++
45 lines
2.1 KiB
C++
// 90CN_digest_trace.h —— 章节过场(op1378 / op24)客户端侧只读日志。
|
||
//
|
||
// 只在补丁已有的 class0 派发代理里调用,不新增 hook。
|
||
#pragma once
|
||
|
||
namespace cn90
|
||
{
|
||
// 传入 class0 包首地址(bytes[0]=class,bytes[1..2]=opcode)。
|
||
// 命中 op1378 / op24 时写一行到 90CN_digest.log;其它包直接返回。
|
||
void LogClass0CutscenePacket(const unsigned char* bytes);
|
||
|
||
// 记录一次 *.avi 打开:路径 + 调用点 RVA(用于定位客户端影片播放函数)。
|
||
void LogAviOpen(const char* path, const char* callerRvas);
|
||
|
||
// 记录影片函数入口的寄存器/栈参数,用于判定调用约定。
|
||
void LogMovieEntry(unsigned retRva, unsigned ecx, unsigned edx,
|
||
unsigned arg1, const char* s1, unsigned arg2, const char* s2,
|
||
unsigned arg3, const char* s3);
|
||
|
||
// 记录一次「主动调用客户端影片播放器」的尝试(willCall=1 表示真的调用了)。
|
||
void LogMovieInvoke(unsigned fnRva, unsigned thisPtr, const char* path, int willCall);
|
||
|
||
void LogMovieChain(const char* chain);
|
||
|
||
// 记录一次「原始栈扫描」结果:把栈上出现的 bdvid32.dll / DNF.exe 返回地址
|
||
// 连同「前一条指令像不像 call」一起写出来(带 * 的更像真正的返回地址)。
|
||
void LogMovieStack(const char* frames);
|
||
|
||
// 记录影片对象 Open(path) 的一次调用:返回地址、this、宽字符路径、栈上候选返回地址。
|
||
void LogMovieOpen(unsigned retRva, unsigned thisPtr, unsigned argPtr,
|
||
const char* pathText, const char* stackText);
|
||
|
||
// 记录影片对象 Play() 的一次调用。
|
||
void LogMoviePlay(unsigned retRva, unsigned thisPtr, const char* stackText);
|
||
|
||
// 记录影片 Render 的调用(计数 + this + 返回地址 + 栈上候选)。
|
||
void LogMovieRender(long count, unsigned thisPtr, unsigned retRva, const char* stackText);
|
||
|
||
// 一次性记录播放对象 vtable 的 12 个槽位(模块!RVA)。
|
||
void LogMovieVtable(unsigned object, unsigned vtable, const char* slots);
|
||
|
||
// DLL 初始化完成时写一行 "ready",便于确认补丁版本已加载。
|
||
void LogStoryDigestTraceReady();
|
||
}
|