首页
社区
课程
招聘
[讨论][不敢写原创]献给天下想做魔兽对战平台的人---No1---Hook Storm#501
发表于: 2009-5-12 01:27 11738

[讨论][不敢写原创]献给天下想做魔兽对战平台的人---No1---Hook Storm#501

2009-5-12 01:27
11738
/*************************************************************
被VS警告了。。免得别人说我广告。。全删了。。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (15)
雪    币: 7325
活跃值: (3803)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
2
学习    一下
2009-5-12 09:02
0
雪    币: 399
活跃值: (38)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
3
感谢楼主分享
但这个只是针对dota的吗?其他地图是否适用?
2009-5-12 09:06
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
学习哈!怎么后面的代码没了
2009-5-12 09:59
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
不错,,学习中。
2009-5-12 10:05
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
这个,怎么做到?
2009-5-12 10:32
0
雪    币: 2105
活跃值: (424)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
不止是DOTA,其他地图都可以,这个只是伪代码,要实际能用还要考虑很多。。
VS跟HF都是HOOK这里来判断游戏里面的一些信息的。当然,统计游戏信息可以有两种方法:一种是实时的,一种是游戏打完了。
   1,要做到实时,比如我要统计每个人的杀人数和死亡数,就要HOOK这个函数,比较字符串“XXX杀死了YYY”。
   2,游戏打完再统计也有两种方法
          A,游戏完了会有游戏每个玩家的信息显示,也可以HOOK里面的函数来判断。。
          B,通过replay来统计各种信息,我Google到一个很NB的,用来解析War3Replay的库,就叫War3RepLib
         
         War3RepLib.rar
上传的附件:
2009-5-12 13:47
0
雪    币: 435
活跃值: (172)
能力值: ( LV13,RANK:280 )
在线值:
发帖
回帖
粉丝
8
[QUOTE=exile;622264]/*************************************************************
作者:MentalDease
地址:http://hi.baidu.com/堕落的神曲
时间:2009-5-12
******************************...[/QUOTE]

是gkend那个XXX吧
2009-5-12 15:59
0
雪    币: 2105
活跃值: (424)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
9
[QUOTE='火翼[CCG];622601']是gkend那个XXX吧[/QUOTE]
是那个xxx
2009-5-12 16:38
0
雪    币: 100
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
学习。。谢谢!
2009-5-12 16:57
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
期待整个系列
2009-5-12 17:12
0
雪    币: 122
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
12
看不着了
2009-5-14 21:09
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
来晚了啊啊啊啊啊啊啊
2009-5-15 20:36
0
雪    币: 293
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
还好来的不算晚,google cache还没过期,看到了,呵呵。
2009-5-15 23:38
0
雪    币: 64
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
//伪代码,要用自己去改
//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)
            //.......
  }
  //......
}
还不算晚。
2009-5-16 14:16
0
雪    币: 2105
活跃值: (424)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
16
ls的最好删掉
2009-5-16 15:47
0
游客
登录 | 注册 方可回帖
返回
//