跳到主要內容

//伪代码,�...

//伪代码,要用自己去改
//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)
            //.......
  }
  //......
}
还不算晚。

留言