//伪代码,要用自己去改
//storm.dll
////////////////////////////////////////////////////////////////////////////////////////////////////
//1503AE83 E8 58FDABED call GameStat.02AFABE0 // hook Storm #501号函数,Storm.dll库的详细函数列表请看
// code.google.com/p/vgce/wiki/stormDLL
//GameStatDota.dll( modulebase:0x2af0000, size:0x1a000)
void GameStatDota_02afabe0(str) //比较游戏中的一些字符串,获得游戏结果等等
{
if(!IsBadReadPtr(str))
Func_2af9980(str); //跟据字符串内容做出动作
}
char * mystrstr(char * str1, char * str2, int len)
{
int i = strlen(str1);
for( int j=0; j< i - len; j++)
{
if(memcmp(str1+j, str2, len) == 0)
return str1+j;
}
return NULL;
}
Func_2af9980(str) //判断内容,做出动作
//只要在游戏中显示出来的字符串,都可以在这里面弄到,然后做一些分析
//比如统计杀人次数,死亡次数,金钱,等级。。。等等
{
install_seh(); //?
if(mystrstr(str, utf-8(":|r"), 4) != 0) // 0x3A, 0x20, 0x7C, 0x72
//不知道做啥的,=我再研究下
if(mystrstr(str, utf-8("等待其他玩家中"), 0x15) != 0)
GetTickCount();
if(mystrstr(str, asc("0:"), 2) != 0)
GetTickCount();
//上面两个if不知道在干啥。。。不管了
if(mystrstr(str, utf-8("获得了胜利"), 0xF) != 0 ||
mystrstr(str, utf-8("取得了胜利"), 0xF) != 0) //中文
{
if(mystrstr(str, utf-8("近卫军团"), 0xC) != 0)
function_2af9540(0); //近卫军团取得胜利, 报告结果
else if(mystrstr(str, utf-8("天灾军团"), 0xC) != 0)
function_2af9540(1); //天灾军团取得胜利, 报告结果
}
if(mystrstr(str, asc("has won!"), 8)!=0) //英文
{
if(mystrstr(str, asc("The Sentinel"), 0xC) !=0 )
function_2af9540(0); //近卫军团取得胜利, 报告结果
else if(mystrstr(str, asc("The Scourge"), 0xB) !=0 )
function_2af9540(1); //天灾军团取得胜利, 报告结果
}
if(mystrstr(str, utf-8("刚刚杀死了")) != 0) //XXX刚刚杀死了YYY得到ZZZ黄金
{
if(mystrstr(str, asc("|c"), 2) !=0)
if(mystrstr(str, asc("|r"), 2) !=0)
if(mystrstr(str, utf-8("得到"), 6) != 0)
if(mystrstr(str, utf-8("黄金"), 6) !=0)
//.......
}
//......
}
还不算晚。
留言
張貼留言