本帖最后由 好坏辅助 于 2015-3-12 14:49 编辑
我们知道CS是基于HalfLife(GlodSrc)的,CSOL也是基于这个东西,那么他们必然可以是差不多。
为了求证这一点,在hlsdk中,cl_dll有Initialize这个导出函数,CSOL的client.dll中也有这个函数
Initialize这个函数用于初始化引擎客户端函数表的信息
hlsdk中这个函数如下
反汇编CSOL client.dll的结果如下 重命名了一些地址
结果却是是差不多,这里有很多可以用的东西,经过测试函数表已知的和CS众是差不多的
比如:
void ( *pfnSPR_DrawAdditive ) ( int frame, int x, int y, const wrect_t *prc ); 开枪火焰效果等spr由此函数画出
struct cvar_s *( *pfnRegisterVariable ) ( char *szName, char *szValue, int flags ); 一些客户端指令参数是它注册的
float ( *pfnGetCvarFloat ) ( char *szName ); 上面注册的值用它可以得到
int ( *pfnAddCommand ) ( char *cmd_name, void (*function)(void) ); 添加一个自定义的指令,指令执行时会执行对应代码
int ( *pfnHookUserMsg ) ( char *szMsgName, pfnUserMsgHook pfn ); 客户端消息,比如击杀信息就是利用消息通知
int ( *pfnClientCmd ) ( char *szCmdString ); 用于执行客户端指令 写键地址再模拟按键简直脑残
void ( *pfnGetPlayerInfo ) ( int ent_num, hud_player_info_t *pinfo ); 这个可以得到玩家的名称
void ( *Cvar_SetValue ) ( char *cvar, float value ); 修改注册参数的值
void ( *Con_Printf ) ( char *fmt, ... ); 控制台输出
struct cl_entity_s *( *GetLocalPlayer ) ( void ); 获取当前玩家实体信息
struct cl_entity_s *( *GetEntityByIndex ) ( int idx ); 根据索引获取实体信息
void ( *pfnHookEvent ) ( char *name, void ( *pfnEvent )( struct event_args_s *args ) ); 修改事件处理函数的话 最简单的可以把烟雾弹事件弄掉
void ( *pfnSetScreenFade ) ( struct screenfade_s *fade ); ScreenFade这个闪光灯的一片白,大灾变初始的一片黑,利用它可以处理掉
|