|
// Common.h
extern FLOAT ex_ratio; // 分辨率 启动图放大倍率 70S2默认0.8
extern INT ex_WinAlpha; // 透明度默认130
extern INT ex_Max_Level; // 角色等级上限 默认70
extern INT ex_Name2; // Name2
extern INT ex_Icon; // 物品、装备图标
extern INT ex_Grade; // 品级
enum ExeType
{
Ver_Unknown = 0,
Ver_0627 = 1,
Ver_0725 = 2,
Ver_1031 = 3,
};
// Gamex.h
#pragma once
#define Ver_0627 ExeType::Ver_0627
#define Ver_0725 ExeType::Ver_0725
#define Ver_1031 ExeType::Ver_1031
// 网页链接 // 初始化全局变量
FLOAT ex_ratio = 1.0f;
INT ex_WinAlpha = 130;
INT ex_Max_Level = 70;
INT ex_Name2 = 1; // Name2
INT ex_Icon = 1; // 物品、装备图标
INT ex_Grade = 1; // 物品品级
// 载入配置
void loadConfig() {
// 省略其他...
ex_Max_Level = xini_file["系统配置"]["角色等级上限"].try_value(70); // 角色等级上限
// ....
// 调用 ----->
// 客户端角色等级上限(可以尝试放到【进赛利亚房间】后调用测试一下)
// 分离后 MT_Func不再关联实际线程
std::thread MT_Func(Gamex::HookThread, ex_Max_Level, 100);
MT_Func.detach();
}
namespace Gamex {
// 初始化...
void DLL_Main() {
loadConfig();
}
// 客户端角色等级上限
void HookThread(int max_level, int ms) {
if (_exeType == Ver_0725) {
Sleep(ms); // *** 关键点 ***
*(DWORD*)0x0111B375 = 0x90909090;
WriteNopCode((void*)0x01118C6A, 11);
*(BYTE*)0x011A0DE0 = 0x55;
*(DWORD*)0x011A0DE1 = 0x018BEC8B;
//Interceptor* interceptor = Interceptor::obtain();
//interceptor->replace_fast((void*)0x11A0DE0, hook_decrypt, &decrypt_11A0DE0);
*(BYTE*)0x004C0F87 = max_level;
*(BYTE*)0x0084A7B7 = max_level;
*(BYTE*)0x008F6477 = max_level;
*(BYTE*)0x00923122 = max_level;
}
}
// ....
} |
|