挂海论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
 友情提示:文字/图片广告均非网站意见,请担保交易勿直接付款,由此产生的责任自负
玩游戏来117游戏网(H5不下载也能玩手游传奇,吃鸡,竞技都有)不懂社区·好资源不错过·各位资源站大佬欢迎来采集搬运寻找会做《单机》游戏修改器的开发作者长期合作,价格不是问题!联系QQ:1874088565
IOS签名/udid证书出售/送证书加群1040456405 ██【我要租此广告位】██.
.. .
查看: 4535|回复: 5
打印 上一主题 下一主题

[讨论交流] 本人收集查找和整理的W美国际地址

[复制链接]

93

积分

23

主题

3

听众
已帮网友解决0 个问题
好评
0
贡献
70
海币
2539
交易币
0
跳转到指定楼层
楼主
发表于 2015-4-20 10:01:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
提醒:若下载的软件是收费的"请不要付款",可能是骗子,请立即联系本站举报,执意要付款被骗后本站概不负责。(任何交易请走第三方中介,请勿直接付款交易以免被骗!切记).

友情提示:文字/图片广告均非本站意见,请担保交易勿直接付款,由此产生的责任自负!!!↑↑


刚修改了又被封,而且偏移据说变了,因为已经没有W美世界的游戏程序,不再修改程序提供下载。下面的资料仅能供参考了,因为偏移变化范围不会太大。
160:具体功能没变化,因为现在没时间玩游戏,只对exe功能做了增强,详见说明。

应同事的需求,修改了下旧挂,顺便再次发出来,偏移改动了,重新编译,半天时间,然后继续消失。
140:
1、妖精打怪前先发送宝宝打怪消息。
2、查找了下跟随Call(想加 但是没时间)。
3、如果想双开游戏,请在含有 的游戏正常运行时,将 程序目录复制到另一目录,再开另一个窗口。

停止更新,我都把W美删除了,没时间懒得玩了.目前是98版本,各位想用的请自己尝试修改升级.好多地址是别人找的,感谢他们.

短消息好多,论坛里也有帖子,有些找我交流技术的朋友我很高兴,不过我没时间回答了.
jiajiasa,我把你说删除的删了呵呵.希望大家以技术为主,不要总是拿来主义.我写这些东西都是论坛里学的.相信交流就会进步.现在心情很乱,语无伦次.更希望大家不要把心全用在游戏上,多关心下实际空间里的人.风风雨雨玩网游也快8年了,每个游戏也就是那么回事.

增加了一些地址,刚添加的答题功能随着W美更新又不能用了.用挂玩游戏都这么累.希望007能长点良心,没必要.如果看帖子太乱,就看压缩包.最后再次感谢共享和交流的朋友.

部分加了个压缩,写了个说明.别再问怎么用了哦.

今天刚把水下打怪跑路问题修正了,就看说是封号了.初步判断是发包call被检测的问题,我现在还不明白,调用又不改动代码,怎么检测的呢,从栈里检测?我再慢慢学习学习,希望有心得的可以交流下,邮件消息都行啊.

昨天编译的时候忘记改动态库的路径了,我调试的时候用的绝对路径.现在应该好了.
感谢skyidmail提供穿墙地址,我把bt全加上了.发在下面.


中午把地址找了找,发在下面了.
修改了程序,目前问题如下:
1. 发包函数里改动了,增加了一个函数调用,估计是验证反挂机制.所以挂机可能会被封,具体不清楚.
00588170 与原来发包对应位置函数

2. bt功能里的穿墙和隐藏建筑还有问题,无法使用.与原来地址对应的函数如下:
0x00405180 与原来穿墙对应位置函数
0x0041E8D0 与原来隐藏建筑对应位置函数

3. 肯定还有新的更改不知道的,反挂机制肯定是增强了.

修改了发言功能,不再用call了,模拟键盘实现的,好用些了,不过聊天模式还要手动在游戏里选择,或者聊第一句的时候打上!! !~等等.希望有什么问题多讨论讨论.

另,本人不提供代码下载原因:
1.并非我不想,而是没必要.我工作之余随便弄弄,又不卖钱,希望和大家多交流.最关键的部分:地址已经发了,如果还不会,那么学下基础知识先.直接看代码不是最好的学习方式,思路最重要.而且看别人的代码不是一般的累.想想本论坛的说明里不是也写了么,不欢迎求源码者参与.
2.本人写的代码很烂,而且大多的低级水平,实在不好意思拿出来看,同事经常嘲笑偶.
3.虽然我发的程序没有任何保护,但是毕竟分析起来慢一点点,防止封杀啊(当然还远远没到W美关注的程度呵呵).

1.查找了下帮会id,添加在下面了,把我帐号帮派退了呵呵.还有把所用的call全加上了,都是在论坛里找的,没一个我自己找的呵呵,不过可能改了下汇编代码.压缩包里也有.发送封包没有使用结构,因为这样比较好控制,结构反觉得麻烦.
2.增加了与目标怪物保持距离,也可能后退到怪物堆里去哦,如果能判断是主动怪和被动怪就好了,主动就不后退,不知道怪物属性里有没有.
3.修正了宝宝温饱保护和打怪等级限制
4.打坐时间控制放在1分钟以内了,不满也起立.个人不喜欢打坐呵呵.

问题:
1.全屏呼出窗口的时候会最小化游戏.要解决据说跟DirectX有关,不会弄,窗口模式没问题;
2.发言CALL没好好弄,不会
3.不知道怎么解决答题问题.我又建不了题库
4.肯定还有很多问题现在知道或者不知道的

修正一些bug,少了一些定住不动的时候,这回挂了6个小时没出过问题(答题手动~).但是还有首攻技能发不出来的时候会定一下,可能是因为攻击距离远了些.可以先开游戏再开程序,按home调出,现在只有周围物品和怪物5秒一刷新,别的手动右键刷新

69,70,71,72,73,74,75一样的,修改了下已知的bug,增加了点右键菜单和武器替换.

忙了一天,又把程序改了改,找玩家名字费了事.增加了周围玩家和组队队员.特别是增加了bt功能.(在下面)
但是由于穿墙和隐藏建筑还是修改指令,所以会被封号,我屏蔽了.无限跳跃和空中游泳没改指令,不知道会不会被封,帮忙测试下,有bug告诉我.小问答报警加上了.还有一点挂机经验统计.队员的名字是从周围玩家的名字里搜索的.所以超出范围会没显示.还有增加了个发言功能,只支持普通说话.
现在最新的宏定义在下面.有谁知道防封函数或者方法的希望讨论下.共享才能共同提高吗

修改了下程序,修改了打坐的bug,增加了跑路,扩大捡取范围和维持宝宝饥饿度的,这回测试挂机好多了.还有一些问题我在慢慢改.还有就是周围玩家的信息和组队玩家的信息还没添加上.懒得的找地址,谁知道望告之.因为加了地图,所以有点大

工作好忙啊,好不容易才弄好一个试验版本,发上来看看,有些功能没实现,特殊功能也没做,
物品名称开始是Id,然后会自动根据地面上的物品添加到ini里,就能显示包裹里的了(很多bug哈,HOME快截键). 里面用的就是下面的全部地址和一个发包call (参见http://www.ghoffice.com/bbs/read.php?tid-44149-fpage-1-toread--page-1.html),就这么多东西.

原来的宏定义可能会有问题,我改了.顺便发个搜索怪物的代码,不知道效率怎么样.
我很菜的,不好意思发整个代码,因为写的太烂了.很多地方自己都不明白.程序其实不是最麻烦的,
最麻烦的就是反汇编找基地址,我一弄就头大,而且我没太多时间.


感觉论坛里的基址好难找,可能是因为我来的晚了,许多地址都是以前版本的,弄了一个星期才弄好最新70版(elementclient.exe大小5,287,936 字节)的地址.有的是自己找的,有的是查的,虽然还差好多,望知道补充下.

本人采用vc编写,exe加dll方式,键盘hook注入. 目前只实现了读取信息.有了信息就好办了.

下面是地址说明,随后有我的全部宏定义,在VC中直接调用即可.



//从配置文件更改
DWORD W2I_BASE_ADDR              =    0x009297D0;              //全局基址
DWORD W2I_SPEECH_MODE            =    0x008F5D08;              //是否聊天模式
DWORD W2I_HAS_QUESTION            =    0x0092C164;              //是否有答题 0正常 1答题
DWORD W2I_GAME_STATUS            =    0x0092CC70;              //是否断线 2正常 1下线

DWORD W2I_CALL_BASE              =    0x00929174;              //CALL基址
DWORD W2I_SEND_PACK_CALL          =    0x0058D99B;              //发包跳转
DWORD W2I_SEND_PACK_STACK        =    0x00847C88;              //发包入栈
DWORD W2I_ANSWER_QUESTION_CALL    =    0x0058D905;              //答题跳转
DWORD W2I_ANSWER_QUESTION_STACK  =    0x00847C68;              //答题入栈

DWORD W2I_GOTO_COS_CALL1          =    0x0045DCC0;              //走路CALL1
DWORD W2I_GOTO_COS_CALL2          =    0x004616F0;              //走路CALL2
DWORD W2I_GOTO_COS_CALL3          =    0x0045E0C0;              //走路CALL3

DWORD W2I_FOLLOW_PLAYER_CALL      =    0x00458250;              //跟随CALL


//Perfect World International 140
//头文件

//**************************************************************************************

extern DWORD W2I_BASE_ADDR;                                                            //全局基址

extern DWORD W2I_SPEECH_MODE;                                                          //是否聊天模式

extern DWORD W2I_HAS_QUESTION;                                                          //是否有答题

extern DWORD W2I_GAME_STATUS;                                                          //游戏状态 2正常 1下线

#define W2I_SERVER_NAME          (CHAR *)(W2I_BASE_ADDR+0x314)                        //服务器名称(MultiByte)

#define W2I_ROLE_EXPERS_ADDR      (DWORD *)(W2I_BASE_ADDR+0xa24)                        //升级所需经验列表(DWORD)[当前等级-1]

//--------------------------------------------------------------------------------------

#define W2I_DYNAMIC_BASE_ADDR    (*(DWORD *)(W2I_BASE_ADDR+0x1c))                      //动态基址

#define W2I_ENVIRON_BASE_ADDR    (*(DWORD *)(W2I_DYNAMIC_BASE_ADDR+0x8))              //周围环境基址
#define W2I_ROLE_BASE_ADDR        (*(DWORD *)(W2I_DYNAMIC_BASE_ADDR+0x20))              //角色基址

//--------------------------------------------------------------------------------------

#define W2I_ROLE_X                (*(float *)(W2I_ROLE_BASE_ADDR+0x3c))                //当前角色X坐标 取整(float/10)+400
#define W2I_ROLE_Z                (*(float *)(W2I_ROLE_BASE_ADDR+0x40))                //当前角色Z坐标 取整(float/10)
#define W2I_ROLE_Y                (*(float *)(W2I_ROLE_BASE_ADDR+0x44))                //当前角色Y坐标 取整(float/10)+550

#define W2I_ROLE_ID              (*(DWORD *)(W2I_ROLE_BASE_ADDR+0x43c))                //当前角色ID

#define W2I_ROLE_LEVEL            (*(DWORD *)(W2I_ROLE_BASE_ADDR+0x448))                //当前等级
#define W2I_ROLE_PROG            (*(DWORD *)(W2I_ROLE_BASE_ADDR+0x44c))                //当前修真(筑基 灵虚 和合 元婴 空冥 履霜 渡劫 寂灭 大乘)
#define W2I_ROLE_CURHP            (*(DWORD *)(W2I_ROLE_BASE_ADDR+0x450))                //当前血量
#define W2I_ROLE_CURMP            (*(DWORD *)(W2I_ROLE_BASE_ADDR+0x454))                //当前魔量
#define W2I_ROLE_EXPER            (*(DWORD *)(W2I_ROLE_BASE_ADDR+0x458))                //当前经验
#define W2I_ROLE_VIGOUR          (*(DWORD *)(W2I_ROLE_BASE_ADDR+0x45c))                //当前元神
#define W2I_ROLE_DOTS            (*(DWORD *)(W2I_ROLE_BASE_ADDR+0x460))                //剩余点数
#define W2I_ROLE_ENERGY          (*(DWORD *)(W2I_ROLE_BASE_ADDR+0x464))                //当前元气
#define W2I_ROLE_PHYSICAL        (*(DWORD *)(W2I_ROLE_BASE_ADDR+0x470))                //体质点数
#define W2I_ROLE_SPIRIT          (*(DWORD *)(W2I_ROLE_BASE_ADDR+0x474))                //灵力点数
#define W2I_ROLE_STRENGTH        (*(DWORD *)(W2I_ROLE_BASE_ADDR+0x478))                //力量点数
#define W2I_ROLE_AGILITY          (*(DWORD *)(W2I_ROLE_BASE_ADDR+0x47c))                //敏捷点数
#define W2I_ROLE_MAXHP            (*(DWORD *)(W2I_ROLE_BASE_ADDR+0x480))                //全部血量
#define W2I_ROLE_MAXMP            (*(DWORD *)(W2I_ROLE_BASE_ADDR+0x484))                //全部魔量

#define W2I_ROLE_PRECISE          (*(DWORD *)(W2I_ROLE_BASE_ADDR+0x4a0))                //准确度
#define W2I_ROLE_MINPATTACK      (*(DWORD *)(W2I_ROLE_BASE_ADDR+0x4a4))                //最小物理攻击
#define W2I_ROLE_MAXPATTACK      (*(DWORD *)(W2I_ROLE_BASE_ADDR+0x4a8))                //最大物理攻击
#define W2I_ROLE_MINMATTACK      (*(DWORD *)(W2I_ROLE_BASE_ADDR+0x4dc))                //最小法术攻击
#define W2I_ROLE_MAXMATTACK      (*(DWORD *)(W2I_ROLE_BASE_ADDR+0x4e0))                //最大法术攻击

#define W2I_ROLE_GOLDDEFENCE      (*(DWORD *)(W2I_ROLE_BASE_ADDR+0x4e4))                //金抗
#define W2I_ROLE_WOODDEFENCE      (*(DWORD *)(W2I_ROLE_BASE_ADDR+0x4e8))                //木抗
#define W2I_ROLE_WATERDEFENCE    (*(DWORD *)(W2I_ROLE_BASE_ADDR+0x4ec))                //水抗
#define W2I_ROLE_FIREDEFENCE      (*(DWORD *)(W2I_ROLE_BASE_ADDR+0x4f0))                //火抗
#define W2I_ROLE_EARTHDEFENCE    (*(DWORD *)(W2I_ROLE_BASE_ADDR+0x4f4))                //土抗
#define W2I_ROLE_PDEFENCE        (*(DWORD *)(W2I_ROLE_BASE_ADDR+0x4f8))                //物防
#define W2I_ROLE_JOUK            (*(DWORD *)(W2I_ROLE_BASE_ADDR+0x4fc))                //闪避

#define W2I_ROLE_MONEY            (*(DWORD *)(W2I_ROLE_BASE_ADDR+0x504))                //金钱

#define W2I_ROLE_HONOR            (*(DWORD *)(W2I_ROLE_BASE_ADDR+0x568))                //声望

#define W2I_ROLE_PARTYID          (*(DWORD *)(W2I_ROLE_BASE_ADDR+0x5a4))                //帮派ID

#define W2I_ROLE_NAME            ((WCHAR *)(*(DWORD *)(W2I_ROLE_BASE_ADDR+0x5d8)))    //角色名称(Unicode)
#define W2I_ROLE_CAREER          (*(DWORD *)(W2I_ROLE_BASE_ADDR+0x5e0))                //职业(0武侠 1法师 3妖精 4妖兽 6羽芒 7羽灵)
#define W2I_ROLE_SEX              (*(DWORD *)(W2I_ROLE_BASE_ADDR+0x5e4))                //性别(0男 1女)
#define W2I_ROLE_POSITION        (*(DWORD *)(W2I_ROLE_BASE_ADDR+0x5ec))                //当前位置状态(0地面 1水中 2空中)

#define W2I_ROLE_STATUS          (*(BYTE *)(W2I_ROLE_BASE_ADDR+0x638))                //角色当前状态(0正常 32打坐 16飞行)

//--------------------------------------------------------------------------------------

#define W2I_TEAM_ADDR            (*(DWORD *)(W2I_ROLE_BASE_ADDR+0x678))                //组队信息基址
#define W2I_TEAM_COUNT            (*(DWORD *)(W2I_TEAM_ADDR+0x18))                      //队伍队员人数
#define W2I_TEAM_INFO_ADDR        (*(DWORD *)(W2I_TEAM_ADDR+0x14))                      //队员信息基址
#define W2I_TEAM_MEMBER_ADDR(i)  (*(DWORD *)(W2I_TEAM_INFO_ADDR+(i)*4))                //相应位置队员信息基址

#define W2I_TEAM_MEMBER_ID(team_member_addr)    (*(DWORD *)(team_member_addr+0xc))      //相应位置队员ID
#define W2I_TEAM_MEMBER_LEVEL(team_member_addr) (*(DWORD *)(team_member_addr+0x10))    //相应位置队员等级
#define W2I_TEAM_MEMBER_CURHP(team_member_addr) (*(DWORD *)(team_member_addr+0x1c))    //相应位置队员当前生命
#define W2I_TEAM_MEMBER_CURMP(team_member_addr) (*(DWORD *)(team_member_addr+0x20))    //相应位置队员当前魔法
#define W2I_TEAM_MEMBER_MAXHP(team_member_addr) (*(DWORD *)(team_member_addr+0x24))    //相应位置队员最大生命
#define W2I_TEAM_MEMBER_MAXMP(team_member_addr) (*(DWORD *)(team_member_addr+0x28))    //相应位置队员最大魔法

#define W2I_PARTY_ADDR            (*(DWORD *)(W2I_ROLE_BASE_ADDR+0x6c0))                //帮派基址
#define W2I_PARTY_INFO_ADDR      (*(DWORD *)(W2I_PARTY_ADDR+0xc))                      //帮派信息基址
#define W2I_PARTY_NAME_ADDR      (*(DWORD *)(W2I_PARTY_INFO_ADDR))
#define W2I_PARTY_NAME            (WCHAR *)(*(DWORD *)(W2I_PARTY_NAME_ADDR))            //帮派名称

//--------------------------------------------------------------------------------------

#define W2I_ROLE_USINGMAGIC      (*(WORD *)(W2I_ROLE_BASE_ADDR+0x69A))                //是否正在使用魔法(大于0时为正在使用)

#define W2I_ROLE_EYESHOT          (*(float *)(W2I_ROLE_BASE_ADDR+0x7c4+0x3c))          //角色当前视野距离(float 0-835)
#define W2I_ROLE_VERTANGLE        (*(float *)(W2I_ROLE_BASE_ADDR+0x7f0))                //角色当前俯仰角(float 向下为负 (-90,90))
#define W2I_ROLE_HORIANGLE        (*(float *)(W2I_ROLE_BASE_ADDR+0x7f8))                //角色当前方位角(float 北为0 顺时针[0,360))

#define W2I_ROLE_STATIC          (*(BYTE *)(W2I_ROLE_BASE_ADDR+0x854))                //角色当前是否静止(byte 0跑路 1静止)

#define W2I_ROLE_REDLEFT          (*(DWORD *)(W2I_ROLE_BASE_ADDR+0x970))                //红药冷却剩余时间
#define W2I_ROLE_BLUELEFT        (*(DWORD *)(W2I_ROLE_BASE_ADDR+0x978))                //蓝药冷却剩余时间
#define W2I_ROLE_WATERLEFT        (*(DWORD *)(W2I_ROLE_BASE_ADDR+0x9A8))                //清水冷却剩余时间

//--------------------------------------------------------------------------------------

#define W2I_ROLE_SELECT_OBJSN    (*(DWORD *)(W2I_ROLE_BASE_ADDR+0xa24))                //角色选中的事物SN
#define W2I_ROLE_LCLICK_OBJSN    (*(DWORD *)(W2I_ROLE_BASE_ADDR+0xa28))                //角色点击的事物SN
#define W2I_ROLE_MOVER_OBJSN      (*(DWORD *)(W2I_ROLE_BASE_ADDR+0xa3c))                //角色鼠标指向的事物SN

//--------------------------------------------------------------------------------------

#define W2I_PACKAGE_ADDR          (*(DWORD *)(W2I_ROLE_BASE_ADDR+0xb58))                //角色包裹基址
#define W2I_PACKAGE_SIZE          (*(DWORD *)(W2I_PACKAGE_ADDR+0x10))                  //包裹最大容量(32)
#define W2I_PACKAGE_ITEM_ADDR    (*(DWORD *)(W2I_PACKAGE_ADDR+0xc))                    //包裹物品基址
#define W2I_PACK_ITEM_ADDR(i)    (*(DWORD *)(W2I_PACKAGE_ITEM_ADDR+(i)*4))            //相应位置物品基址

#define W2I_PACK_ITEM_TYPE(pack_item_addr)    (*(DWORD *)(pack_item_addr+0x4))        //相应位置物品类型
#define W2I_PACK_ITEM_ID(pack_item_addr)      (*(DWORD *)(pack_item_addr+0x8))        //相应位置物品ID
#define W2I_PACK_ITEM_COUNT(pack_item_addr)    (*(DWORD *)(pack_item_addr+0x14))        //相应位置物品数量
#define W2I_PACK_ITEM_MAXNUM(pack_item_addr)  (*(DWORD *)(pack_item_addr+0x18))        //相应位置物品最大数量
#define W2I_PACK_ITEM_WEAR(pack_item_addr)    (*(DWORD *)(pack_item_addr+0x64))        //相应位置物品耐久
#define W2I_PACK_ITEM_MAXWEAR(pack_item_addr)  (*(DWORD *)(pack_item_addr+0x68))        //相应位置物品最大耐久

//--------------------------------------------------------------------------------------

#define W2I_EQUIPMENT_ADDR        (*(DWORD *)(W2I_ROLE_BASE_ADDR+0xb5c))                //角色装备基址
#define W2I_EQUIPMENT_SIZE        (*(DWORD *)(W2I_EQUIPMENT_ADDR+0x10))                //装备最大数量(23)
#define W2I_EQUIPMENT_ITEM_ADDR  (*(DWORD *)(W2I_EQUIPMENT_ADDR+0xc))                  //装备物品基址
#define W2I_EQUIP_ITEM_ADDR(i)    (*(DWORD *)(W2I_EQUIPMENT_ITEM_ADDR+(i)*4))          //相应位置装备基址

#define W2I_EQUIP_ITEM_TYPE(equip_item_addr)    (*(DWORD *)(equip_item_addr+0x4))      //相应位置装备类型
#define W2I_EQUIP_ITEM_ID(equip_item_addr)      (*(DWORD *)(equip_item_addr+0x8))      //相应位置装备ID
#define W2I_EQUIP_ITEM_COUNT(equip_item_addr)  (*(DWORD *)(equip_item_addr+0x14))      //相应位置装备数量
#define W2I_EQUIP_ITEM_MAXNUM(equip_item_addr)  (*(DWORD *)(equip_item_addr+0x18))      //相应位置装备最大数量
#define W2I_EQUIP_ITEM_WEAR(equip_item_addr)    (*(DWORD *)(equip_item_addr+0x64))      //相应位置装备耐久
#define W2I_EQUIP_ITEM_MAXWEAR(equip_item_addr) (*(DWORD *)(equip_item_addr+0x68))      //相应位置装备最大耐久

//--------------------------------------------------------------------------------------

#define W2I_PET_ADDR              (*(DWORD *)(W2I_ROLE_BASE_ADDR+0xbe0))                //宠物包裹基址
#define W2I_PET_ORDER            (*(DWORD *)(W2I_PET_ADDR+0x8))                        //招出的宠物在包裹中位次(未招出时0xffffffff)
#define W2I_PET_SN                (*(DWORD *)(W2I_PET_ADDR+0x38))                      //招出的宠物SN(未招出时0)
#define W2I_ROLE_PET_ADDR(i)      (*(DWORD *)(W2I_PET_ADDR+0x10+(i)*4))                //相应位置宠物基址

#define W2I_ROLE_PET_LOYALTY(role_pet_addr)  (*(DWORD *)(role_pet_addr+0x4))          //相应位置宠物忠诚度
#define W2I_ROLE_PET_HUNGER(role_pet_addr)    (*(DWORD *)(role_pet_addr+0x8))          //相应位置宠物宠物饥饱度(0酒足饭饱 1正常)
#define W2I_ROLE_PET_LEVEL(role_pet_addr)    (*(DWORD *)(role_pet_addr+0x20))          //相应位置宠物等级
#define W2I_ROLE_PET_EXPER(role_pet_addr)    (*(DWORD *)(role_pet_addr+0x28))          //相应位置宠物经验
#define W2I_ROLE_PET_CURHP(role_pet_addr)    (*(DWORD *)(role_pet_addr+0x38))          //相应位置宠物当前生命
#define W2I_ROLE_PET_HPRATE(role_pet_addr)    (*(float *)(role_pet_addr+0x1c))          //相应位置宠物生命比例(float未复活时0)
#define W2I_ROLE_PET_NAME(role_pet_addr)      (WCHAR *)(*(DWORD *)(role_pet_addr+0x34)) //相应位置宠物名称

//--------------------------------------------------------------------------------------

#define W2I_MAGIC_ADDR            (*(DWORD *)(W2I_ROLE_BASE_ADDR+0xbf0))                //角色技能基址
#define W2I_MAGIC_COUNT          (*(DWORD *)(W2I_ROLE_BASE_ADDR+0xbf4))                //角色已学技能数量
#define W2I_ROLE_MAGIC_ADDR(i)    (*(DWORD *)(W2I_MAGIC_ADDR+(i)*4))                    //相应位置技能基址

#define W2I_ROLE_MAGIC_ID(role_magic_addr)      (*(DWORD *)(role_magic_addr+0x8))      //相应位置技能ID
#define W2I_ROLE_MAGIC_LEVEL(role_magic_addr)    (*(DWORD *)(role_magic_addr+0xc))      //相应位置技能等级
#define W2I_ROLE_MAGIC_TIMELEFT(role_magic_addr) (*(DWORD *)(role_magic_addr+0x10))    //相应位置技能冷却剩余时间
#define W2I_ROLE_MAGIC_INTER(role_magic_addr)    (*(DWORD *)(role_magic_addr+0x14))    //相应位置技能施放间隔
#define W2I_ROLE_MAGIC_STATUS(role_magic_addr)  (*(BYTE *)(role_magic_addr+0x18))      //相应位置技能状态(0可用 1冷却)
#define W2I_ROLE_MAGIC_NAME_ADDR1(role_magic_addr)  (*(DWORD *)(role_magic_addr+0x4))
#define W2I_ROLE_MAGIC_NAME_ADDR2(role_magic_addr)  (*(DWORD *)(W2I_ROLE_MAGIC_NAME_ADDR1(role_magic_addr)+0x4))
#define W2I_ROLE_MAGIC_NAME(role_magic_addr)    (WCHAR *)(*(DWORD *)(W2I_ROLE_MAGIC_NAME_ADDR2(role_magic_addr)+0xc)) //相应位置技能名称

//--------------------------------------------------------------------------------------

#define W2I_PLAYER_BASE_ADDR      (*(DWORD *)(W2I_ENVIRON_BASE_ADDR+0x20))              //周围玩家基址

#define W2I_PLAYER_COUNT          (*(DWORD *)(W2I_PLAYER_BASE_ADDR+0x14))              //周围玩家数量
#define W2I_PLAYER_MAXCOUNT      (*(DWORD *)(W2I_PLAYER_BASE_ADDR+0x24))              //周围玩家最大数量(MAX = 769)
#define W2I_PLAYER_ADDR          (*(DWORD *)(W2I_PLAYER_BASE_ADDR+0x18))              //周围玩家列表基址
#define W2I_ENV_PLAYER_ADDR(i)    (*(DWORD *)(W2I_PLAYER_ADDR+(i)*4))                  //相应位置玩家地址

#define W2I_ENV_PLAYER_OBJ(env_player_addr)    (*(DWORD *)(env_player_addr+0x4))      //相应位置玩家指针

#define W2I_ENV_PLAYER_X(env_player_obj)        (*(float *)(env_player_obj+0x3c))      //相应位置玩家x坐标 取整(float/10)+400
#define W2I_ENV_PLAYER_Z(env_player_obj)        (*(float *)(env_player_obj+0x40))      //相应位置玩家z坐标 取整(float/10)
#define W2I_ENV_PLAYER_Y(env_player_obj)        (*(float *)(env_player_obj+0x44))      //相应位置玩家y坐标 取整(float/10)+550

#define W2I_ENV_PLAYER_LEVEL(env_player_obj)    (*(DWORD *)(env_player_obj+0x448))      //相应位置玩家等级
#define W2I_ENV_PLAYER_CURHP(env_player_obj)    (*(DWORD *)(env_player_obj+0x450))      //相应位置玩家血量
#define W2I_ENV_PLAYER_MAXHP(env_player_obj)    (*(DWORD *)(env_player_obj+0x480))      //相应位置玩家全部血量

#define W2I_ENV_PLAYER_SN(env_player_obj)      (*(DWORD *)(env_player_obj+0x43c))      //相应位置玩家SN
#define W2I_ENV_PLAYER_NAME(env_player_obj) (WCHAR *)(*(DWORD *)(env_player_obj+0x5D8)) //相应位置玩家名称

#define W2I_ENV_PLAYER_CAREER(env_player_obj)  (*(DWORD *)(env_player_obj+0x5e0))      //相应位置玩家职业(0武侠 1法师 3妖精 4妖兽 6羽芒 7羽灵)
#define W2I_ENV_PLAYER_SEX(env_player_obj)      (*(DWORD *)(env_player_obj+0x5e4))      //相应位置玩家性别(0男 1女)

//--------------------------------------------------------------------------------------

#define W2I_MONSTER_BASE_ADDR    (*(DWORD *)(W2I_ENVIRON_BASE_ADDR+0x24))              //周围怪物基址

#define W2I_MONSTER_COUNT        (*(DWORD *)(W2I_MONSTER_BASE_ADDR+0x14))              //周围怪物数量
#define W2I_MONSTER_MAXCOUNT      (*(DWORD *)(W2I_MONSTER_BASE_ADDR+0x24))              //周围怪物最大数量(MAX = 769)
#define W2I_MONSTER_ADDR          (*(DWORD *)(W2I_MONSTER_BASE_ADDR+0x18))              //周围怪物列表基址
#define W2I_ENV_MONSTER_ADDR(i)  (*(DWORD *)(W2I_MONSTER_ADDR+(i)*4))                  //相应位置怪物地址(怪物ID % MAX)

#define W2I_ENV_MONSTER_SN1(env_monster_addr)  (*(DWORD *)(env_monster_addr+0x8))      //相应位置怪物序号
#define W2I_ENV_MONSTER_OBJ(env_monster_addr)  (*(DWORD *)(env_monster_addr+0x4))      //相应位置怪物指针

#define W2I_ENV_MONSTER_TYPE(env_monster_obj)  (*(DWORD *)(env_monster_obj+0xb4))      //相应位置怪物种类(6 怪物 7 NPC 9 宠物 A GM)
#define W2I_ENV_MONSTER_SN2(env_monster_obj)    (*(DWORD *)(env_monster_obj+0x11c))    //相应位置怪物序号
#define W2I_ENV_MONSTER_ID(env_monster_obj)    (*(DWORD *)(env_monster_obj+0x120))    //相应位置怪物ID
#define W2I_ENV_MONSTER_LEVEL(env_monster_obj)  (*(DWORD *)(env_monster_obj+0x124))    //相应位置怪物等级
#define W2I_ENV_MONSTER_CURHP(env_monster_obj)  (*(DWORD *)(env_monster_obj+0x12c))    //相应位置怪物当前血量
#define W2I_ENV_MONSTER_MAXHP(env_monster_obj)  (*(DWORD *)(env_monster_obj+0x15c))    //相应位置怪物最大血量
#define W2I_ENV_MONSTER_NAME(env_monster_obj)  (WCHAR *)(*(DWORD *)(env_monster_obj+0x238)) //相应位置怪物名称

#define W2I_ENV_MONSTER_X(env_monster_obj)      (*(float *)(env_monster_obj+0x3c))      //相应位置怪物x坐标 取整(float/10)+400
#define W2I_ENV_MONSTER_Z(env_monster_obj)      (*(float *)(env_monster_obj+0x40))      //相应位置怪物z坐标 取整(float/10)
#define W2I_ENV_MONSTER_Y(env_monster_obj)      (*(float *)(env_monster_obj+0x44))      //相应位置怪物y坐标 取整(float/10)+550
#define W2I_ENV_MONSTER_DIST(env_monster_obj)  (*(float *)(env_monster_obj+0x25c))    //相应位置怪物与角色距离 取整(float)

#define W2I_ENV_MONSTER_STATUS1(env_monster_obj) (*(BYTE *)(env_monster_obj+0x29c))    //相应位置怪物状态(死亡后为4)
#define W2I_ENV_MONSTER_STATUS2(env_monster_obj) (*(BYTE *)(env_monster_obj+0x2a4))    //相应位置怪物状态(死亡后为4)

//--------------------------------------------------------------------------------------

#define W2I_ITEM_BASE_ADDR        (*(DWORD *)(W2I_ENVIRON_BASE_ADDR+0x28))              //周围物品基址

#define W2I_ITEM_COUNT            (*(DWORD *)(W2I_ITEM_BASE_ADDR+0x14))                //周围物品数量
#define W2I_ITEM_MAXCOUNT        (*(DWORD *)(W2I_ITEM_BASE_ADDR+0x24))                //周围物品最大数量(769)
#define W2I_ITEM_ADDR            (*(DWORD *)(W2I_ITEM_BASE_ADDR+0x18))                //周围物品列表基址
#define W2I_ENV_ITEM_ADDR(i)      (*(DWORD *)(W2I_ITEM_ADDR+(i)*4))                    //相应位置物品地址

#define W2I_ENV_ITEM_OBJ(env_item_addr)      (*(DWORD *)(env_item_addr+0x4))            //相应位置物品指针

#define W2I_ENV_ITEM_SN(env_item_obj)        (*(DWORD *)(env_item_obj+0x10c))          //相应位置物品序号
#define W2I_ENV_ITEM_ID(env_item_obj)        (*(DWORD *)(env_item_obj+0x110))          //相应位置物品ID
#define W2I_ENV_ITEM_NAME(env_item_obj)      (WCHAR *)(*(DWORD *)(env_item_obj+0x164))  //相应位置物品名称

#define W2I_ENV_ITEM_X(env_item_obj)        (*(float *)(env_item_obj+0x3c))            //相应位置物品x坐标 取整(float/10)+400
#define W2I_ENV_ITEM_Z(env_item_obj)        (*(float *)(env_item_obj+0x40))            //相应位置物品z坐标 取整(float/10)
#define W2I_ENV_ITEM_Y(env_item_obj)        (*(float *)(env_item_obj+0x44))            //相应位置物品y坐标 取整(float/10)+550
#define W2I_ENV_ITEM_GETTYPE(env_item_obj)  (*(BYTE *)(env_item_obj+0x14C))            //相应位置物品获取方式 1拾取 2挖取 3金钱
#define W2I_ENV_ITEM_DIST(env_item_obj)      (*(float *)(env_item_obj+0x154))          //相应位置物品与角色距离 取整(float)

//--------------------------------------------------------------------------------------

#define W2I_ENVIRON_MAP_ADDR        (*(DWORD *)(W2I_ENVIRON_BASE_ADDR+0x60))            //环境地图基址
#define W2I_ENVIRON_MAP_NAME        (WCHAR *)(*(DWORD *)(W2I_ENVIRON_MAP_ADDR+0x4))    //环境地图名称

//--------------------------------------------------------------------------------------

#define W2I_QUESTION_BASE_ADDR1    (*(DWORD *)(W2I_DYNAMIC_BASE_ADDR+0x4))            //
#define W2I_QUESTION_BASE_ADDR2    (*(DWORD *)(W2I_QUESTION_BASE_ADDR1+0x8))          //
#define W2I_QUESTION_BASE_ADDR3    (*(DWORD *)(W2I_QUESTION_BASE_ADDR2+0x270))        //
#define W2I_QUESTION_BASE_ADDR      (*(DWORD *)(W2I_QUESTION_BASE_ADDR3+0x134))        //题目基址

#define W2I_QUESTION_TYPE          (*(DWORD *)(W2I_QUESTION_BASE_ADDR3+0x164))        //题目类型 3图片
#define W2I_QUESTION_ID            (*(DWORD *)(W2I_QUESTION_BASE_ADDR3+0x168))        //题目ID
#define W2I_QUESTION_LISTADDR      (*(DWORD *)(W2I_QUESTION_BASE_ADDR3+0x18C))        //题目绘图数据表总地址
#define W2I_QUESTION_LISTCONUT      (*(DWORD *)(W2I_QUESTION_BASE_ADDR3+0x198))        //题目绘图数据表总个数

#define W2I_QUESTION_ANSWER_ADDR(i) (*(DWORD *)(W2I_QUESTION_BASE_ADDR+((i+0x1E)<<2)))  //0-3四个答案 4剩余时间 5答题说明 6题目
#define W2I_QUESTION_ANSWER_OBJ(ques_answer_addr)  (*(DWORD *)(ques_answer_addr+0x4))  //
#define W2I_QUESTION_ANSWER(ques_answer_addr) (WCHAR *)(*(DWORD *)(W2I_QUESTION_ANSWER_OBJ(ques_answer_addr)+0x74)) //题目和说明等

//--------------------------------------------------------------------------------------

#define W2I_PLAY_FLAG  (W2I_DYNAMIC_BASE_ADDR && W2I_ROLE_BASE_ADDR && W2I_ENVIRON_BASE_ADDR)

//**************************************************************************************

以下是cpp文件的
//**************************************************************************************

//跑到相应位置
void CallGotoCoordinates(float X, float Y, float Z)
{
    BOOL IsFlying = (W2I_ROLE_POSITION>0);
    _asm
    {
        pushad

        mov  eax, W2I_BASE_ADDR
        mov  eax, [eax+0x1c]
        mov  esi, [eax+0x20]

        mov  ecx, [esi+0xbcc] //偏移
        push 1
        mov  edx, W2I_GOTO_COS_CALL1
        call edx
        mov  edi, eax

        mov  ecx, [esi+0xbcc] //偏移
        mov  ecx, [ecx+0x30]
        mov  ecx, [ecx+4]
        mov  eax, X
        mov  [ecx+0x20], eax
        mov  eax, Z
        mov  [ecx+0x24], eax
        mov  eax, Y
        mov  [ecx+0x28], eax

        lea  ecx, [ecx+0x20]
        push ecx
        push IsFlying
        mov  ecx, edi
        mov  edx, W2I_GOTO_COS_CALL2
        call edx

        push 0
        push 1
        push edi
        mov  ecx, [esi+0xbcc] //偏移
        push 1
        mov  edx, W2I_GOTO_COS_CALL3
        call edx

        popad
    }
}

//讲话(好像有问题,我没用到,我是用的模拟键盘,代码在一个帖子里发过)
void CallSpeech(TCHAR * Content, int Mode)
{
    _asm
    {
        mov  ecx, W2I_CALL_BASE;
        mov  ecx, [ecx];
        mov  ecx, [ecx+0x20];
        lea  eax, Content;
        push eax;
        push Mode;
        mov  edx, W2I_SPEECH_CALL;
        call edx;
    }
}

//发送封包
void CallSendPack(BYTE * buf, int len)
{
    _asm
    {
        pushad;

        mov  ecx, W2I_CALL_BASE;
        mov  ecx, [ecx];
        push len;
        push buf;
        mov  ecx, [ecx+0x20];
        mov  eax, W2I_SEND_PACK_CALL;
        call eax;

        popad;
    }
}

//跟随某人
void CallFollowPlayer(DWORD PlayerSn)
{
    _asm
    {
        pushad;

        /*
        mov  ecx, W2I_BASE_ADDR
        mov  ecx, [ecx+0x1c];
        mov  ecx, [ecx+0x58];
        mov  ecx, [ecx+0x04];
        mov  ecx, [ecx+0x08];
        mov  ecx, [ecx+0x20];
        mov  ecx, [ecx+0x08];
        mov  ecx, [ecx+0x20];
        */
        mov  ecx, W2I_BASE_ADDR
        mov  ecx, [ecx+0x1c];
        mov  ecx, [ecx+0x20];
        push PlayerSn;
        mov  eax, W2I_FOLLOW_PLAYER_CALL;
        call eax;

        popad;
    }
}

//**************************************************************************************

//发送捡取物品封包
void CallSendPickItem(DWORD ItemSn, DWORD ItemId)
{
    //06 00 00 6F 11 C0 39 03 00 00 (06 00 Sn Id)
    BYTE buf[10] = {0};
    buf[0] = 0x06;
    *(DWORD *)(buf+2) = ItemSn;
    *(DWORD *)(buf+6) = ItemId;
    CallSendPack(buf, 10);
}

//发送挖取物品封包
void CallSendDigItem(DWORD ItemSn, DWORD ToolPos, DWORD ToolId)
{
    //36 00 82 02 10 C0 00 00 15 00 01 0C 00 00 00 00 00 00
    //36 00 Sn 00 00 ToolPos ToolId 00 00 00 00
    BYTE buf[18] = {0};
    buf[0] = 0x36;
    *(DWORD *)(buf+2) = ItemSn;
    *(WORD *)(buf+8) = (WORD)ToolPos;
    *(DWORD *)(buf+0xA) = ToolId;
    CallSendPack(buf, 18);
}

//发送丢弃物品封包
void CallSendDropItem(DWORD ItemPos, DWORD ItemCount)
{
    //0E 00 04 30 01 (0E 00 ItemPos, ItemCount)
    BYTE buf[5] = {0};
    buf[0] = 0x0e;
    buf[2] = (BYTE)ItemPos;
    *(WORD *)(buf+3) = (WORD)ItemCount;
    CallSendPack(buf, 5);
}

//发送使用药品封包
void CallSendUseTonic(DWORD ItemPos, DWORD ItemId)
{
    //28 00 00 01 15 00 C7 21 00 00 (28 00 00 01 Pos Id)
    BYTE buf[10] = {0};
    buf[0] = 0x28;
    buf[3] = 0x01;
    *(DWORD *)(buf+4) = ItemPos;
    *(DWORD *)(buf+6) = ItemId;
    CallSendPack(buf, 10);
}

//发送穿上或除去装备封包
void CallSendEquipWeapon(DWORD ItemPos, DWORD EquipPos)
{
    //11 00 0B 0C (11 00 ItemPos, EquipPos)
    BYTE buf[4] = {0};
    buf[0] = 0x11;
    buf[2] = (BYTE)ItemPos;
    buf[3] = (BYTE)EquipPos;
    CallSendPack(buf, 4);
}

//发送选中怪物封包
void CallSendSelMonster(DWORD MonsterSn)
{
    //02 00 93 16 10 80 (02 00 Sn)
    BYTE buf[6] = {0};
    buf[0] = 0x2;
    *(DWORD *)(buf+2) = MonsterSn;
    CallSendPack(buf, 6);
}

//发送激活Npc封包
void CallSendActivateNpc(DWORD NpcSn)
{
    //23 00 10 15 10 80 (23 00 Sn)
    BYTE buf[6] = {0};
    buf[0] = 0x23;
    *(DWORD *)(buf+2) = NpcSn;
    CallSendPack(buf, 6);
}

//发送复活回城封包
void CallSendReviveBack()
{
    //04 00
    BYTE buf[2] = { 0x04, 0x00 };
    CallSendPack(buf, 2);
}

//发送取消选中封包
void CallSendEscSelect()
{
    //08 00
    BYTE buf[2] = { 0x08, 0x00 };
    CallSendPack(buf, 2);
}

//发送取消技能封包
void CallSendEscMagic()
{
    //2A 00
    BYTE buf[2] = { 0x2a, 0x00 };
    CallSendPack(buf, 2);
}

//发送坐下封包
void CallSendSitDown()
{
    //2e 00
    BYTE buf[2] = { 0x2e, 0x00 };
    CallSendPack(buf, 2);
}

//发送起立封包
void CallSendStandUp()
{
    //2f 00
    BYTE buf[2] = { 0x2f, 0x00 };
    CallSendPack(buf, 2);
}

//发送打坐切换封包
void CallSendRecover()
{
    //2e 00 / 2f 00
    BYTE buf[2] = {0};
    static BYTE Status = 0x2f;
    Status ^= 1;
    buf[0] = Status;
    CallSendPack(buf, 2);
}

//发送回城封包
void CallSendGoBack()
{
    //29 00 A7 00 00 00 00 01 00 00 00 00
    BYTE buf[12] = {0};
    buf[0] = 0x29;
    buf[2] = 0xa7;
    buf[7] = 0x01;
    CallSendPack(buf, 12);
}

//发送驯服宠物封包
void CallSendTamePet(DWORD PetSn)
{
    //29 00 48 01 00 00 00 01 50 52 10 80 (29 00 48 01 00 00 00 01 Sn)
    BYTE buf[12] = { 0x29, 0x00, 0x48, 0x01, 0x00, 0x00, 0x00, 0x01 };
    *(DWORD *)(buf+8) = PetSn;
    CallSendPack(buf, 12);
}

//发送治疗宠物封包
void CallSendRecoverPet(DWORD PetSn)
{
    //29 00 4A 01 00 00 00 01 46 49 12 80 (29 00 4A 01 00 00 00 01 Sn)
    BYTE buf[12] = { 0x29, 0x00, 0x4A, 0x01, 0x00, 0x00, 0x00, 0x01 };
    *(DWORD *)(buf+8) = PetSn;
    CallSendPack(buf, 12);
}

//发送复活宠物封包
void CallSendRevivePet()
{
    //29 00 49 01 00 00 00 01 C1 A3 10 02
    BYTE buf[12] = { 0x29, 0x00, 0x49, 0x01, 0x00,  
        0x00, 0x00, 0x01, 0xC1, 0xA3, 0x10, 0x02 };
    CallSendPack(buf, 12);
}

//发送召出宠物封包
void CallSendCallupPet(DWORD PetPos)
{
    //64 00 01 00 00 00 (64 00 Pos)
    BYTE buf[6] = {0};
    buf[0] = 0x64;
    *(DWORD *)(buf+2) = PetPos;
    CallSendPack(buf, 6);
}

//发送召回宠物封包
void CallSendCallbackPet()
{
    //65 00
    BYTE buf[2] = { 0x65, 0x00 };
    CallSendPack(buf, 2);
}

//发送宠物攻击封包
void CallSendPetAttack(DWORD MonsterSn)
{
    //67 00 DC 50 10 80 01 00 00 00 00 (67 00 MonsterSn 01 00 00 00 00)
    BYTE buf[11] = {0};
    buf[0] = 0x67;
    buf[6] = 0x01;
    *(DWORD *)(buf+2) = MonsterSn;
    CallSendPack(buf, 11);
}

//发送组队封包
void CallSendMakeTeam(DWORD PlayerSn)
{
    //1B 00 02 B0 7A 09 (1B 00 Sn)
    BYTE buf[6] = {0};
    buf[0] = 0x1b;
    *(DWORD *)(buf+2) = PlayerSn;
    CallSendPack(buf, 6);
}

//发送飞行切换封包
void CallSendSwitchFly(DWORD PlaneId)
{
    //28 00 01 01 0C 00 30 08 00 00 (28 00 01 01 0C 00 PlaneId)
    BYTE buf[10] = {0x28, 0x00, 0x01, 0x01, 0x0C, 0x00};
    *(DWORD *)(buf+6) = PlaneId;
    CallSendPack(buf, 10);
}

//发送全部修理封包
void CallSendRepairAll()
{
    //25 00 03 00 00 00 06 00 00 00 FF FF FF FF 00 00
    BYTE buf[16] = {0x25, 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00};
    CallSendPack(buf, 16);
}

//发送出售物品封包
void CallSendSellItem(DWORD ItemId, DWORD ItemPos, DWORD ItemCount)
{
    //25 00 02 00 00 00 10 00 00 00 01 00 00 00 AE 00 00 00 18 00 00 00 01 00 00 00
    //25 00 02 00 00 00 ByteCount GroupCount ItemId ItemPos ItemCount
    BYTE buf[0x1a] = {0x25, 0x00, 0x02, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00};
    *(DWORD *)(buf+6) = (DWORD)0x10;
    *(DWORD *)(buf+0x0a) = (DWORD)0x01;
    *(DWORD *)(buf+0x0e) = (DWORD)ItemId;
    *(DWORD *)(buf+0x12) = (DWORD)ItemPos;
    *(DWORD *)(buf+0x16) = (DWORD)ItemCount;
    CallSendPack(buf, 0x1a);
}

//发送购买物品封包
void CallSendBuyItem(DWORD ItemId, DWORD ItemPos, DWORD ItemCount)
{
    //ItemPos为Npc包裹里的位置
    //25 00 01 00 00 00 14 00 00 00 00 00 00 00 01 00 00 00 AA 21 00 00 01 00 00 00 01 00 00 00
    //25 00 01 00 00 00 ByteCount 00 00 00 00 GroupCount ItemId ItemPos ItemCount
    BYTE buf[0x1e] = {0x25, 0x00, 0x01, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00};
    *(DWORD *)(buf+6) = (DWORD)0x14;
    *(DWORD *)(buf+0x0e) = (DWORD)0x01;
    *(DWORD *)(buf+0x12) = (DWORD)ItemId;
    *(DWORD *)(buf+0x16) = (DWORD)ItemPos;
    *(DWORD *)(buf+0x1a) = (DWORD)ItemCount;
    CallSendPack(buf, 0x1e);
}

//根据种类取身上物品名称
TCHAR * GetItemName(DWORD item_addr)
{
    if(item_addr)
    {
        switch(W2I_PACK_ITEM_TYPE(item_addr))
        {
        case 0: //衣甲
        case 3: //饰品
            {
                return (TCHAR *)((*(DWORD *)(item_addr+0xdc))+0xc);
            }
        case 2: //弹药
            {
                return (TCHAR *)((*(DWORD *)(item_addr+0xc8))+0x8);
            }
        case 4: //灵符
            {
                return (TCHAR *)((*(DWORD *)(item_addr+0xb0))+0x8);
            }
        case 5: //灵石
        case 10: //工具
        case 19: //书籍
        case 20: //仙石
        case 27: //宠粮
        case 31: //仙丹
        case 38: //神药
            {
                return (TCHAR *)((*(DWORD *)(item_addr+0x4c))+0x4);
            }
        case 6: //时装
            {
                return (TCHAR *)((*(DWORD *)(item_addr+0xcc))+0xc);
            }
        case 7: //飞器
            {
                return (TCHAR *)((*(DWORD *)(item_addr+0xd0))+0x4);
            }
        case 8: //材料
        case 9: //药品
        case 22: //卷轴
            {
                return (TCHAR *)((*(DWORD *)(item_addr+0x54))+0xc);
            }
        case 15: //武器
            {
                return (TCHAR *)((*(DWORD *)(item_addr+0xe4))+0xc);
            }
        case 17: //魂石
            {
                return (TCHAR *)((*(DWORD *)(item_addr+0x4c))+0x8);
            }
        case 18: //翅膀
            {
                return (TCHAR *)((*(DWORD *)(item_addr+0xc0))+0x4);
            }
        case 36: //红符
        case 37: //蓝符
            {
                return (TCHAR *)((*(DWORD *)(item_addr+0xb8))+0x4);
            }
        }
    }

    return NULL;
}



联系我时,请说是在 挂海论坛 上看到的,谢谢!

免费评分

参与人数 1海币 -1 收起 理由
lihongxu0221 -1 刷任务,见谅



上一篇:一个1631走路Call写法
下一篇:键盘钩子回调函数为什么接收不到SendMessage消息
免责声明:
1、本主题所有言论和图片纯属会员个人意见,与本论坛立场无关。一切关于该内容及资源商业行为与www.52ghai.com无关。

2、本站提供的一切资源内容信息仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。

3、本站信息来自第三方用户,非本站自制,版权归原作者享有,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。

4、如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵犯你版权的,请邮件与我们联系删除(邮箱:xhzlw@foxmail.com),本站将立即改正。

2

积分

0

主题

0

听众
已帮网友解决0 个问题
好评
0
贡献
2
海币
6
交易币
0
沙发
发表于 2015-4-21 22:25:29 | 只看该作者
你好,我毕业设计做的是 ,以前没搞过,请问全局基址怎么找啊,能指教一下吗?非常感谢!

2

积分

2

主题

3

听众
已帮网友解决0 个问题
好评
0
贡献
0
海币
907
交易币
0
板凳
发表于 2015-4-29 18:50:43 | 只看该作者
我飘过一下 赚一个海币

86

积分

23

主题

4

听众
已帮网友解决0 个问题
好评
0
贡献
63
海币
499
交易币
0
地板
发表于 2015-5-7 20:54:43 | 只看该作者
回复一下 证明我来过
4中级会员
533/600

533

积分

164

主题

9

听众
已帮网友解决0 个问题
好评
0
贡献
369
海币
3270
交易币
0
5#
发表于 2015-8-8 17:56:13 | 只看该作者
楼主的帖子实在是写得太好了

1

积分

0

主题

6

听众
已帮网友解决0 个问题
好评
0
贡献
1
海币
4
交易币
0
6#
发表于 2016-5-26 22:46:51 | 只看该作者
支持楼主,感谢楼主!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

免责声明|Archiver|手机版|小黑屋|挂海论坛

GMT+8, 2025-4-5 18:36 , Processed in 0.110755 second(s), 44 queries , Gzip On.

Powered by Discuz! X3.2

本站资源来自互联网用户收集发布,如有侵权请邮件与我们联系处理。xhzlw@foxmail.com

快速回复 返回顶部 返回列表