梦醒暗黑廿年(补)

1、仔细翻了下d2hackmap的代码,发现怪物是否死亡其实是有标志位的:

BYTE __fastcall MissileBlobCol(UnitAny *pMissile){
	if ( tAutomapMissiles.isOn && !(pMissile->dwFlags1&0x00010000)) {//非死亡的
	...

注释上写得很清楚,非死亡的,UnitAny结构中dwFlags1的偏移是0xC4
那么改下IsNpcLive中关于NPC的判断

else if(NpcType==1)
	{
		//type==1,npc,怪0x14]+0x2c就是名字ansi
		return !(*(ULONG *)(Addr+0xC4) & 0x00010000);//死了就非0,没死就0,取反对应函数名
	}

2、关于当前玩家的地址,游戏都会有个当前玩家,结构上和其它玩家是一致的,但为了便于操作,会有个基址专门存放当前玩家的地址。
直接用NPC遍历找到所有NPC和玩家的地址,然后用CE找当前玩家的地址,看保存在哪个基址中就OK了。
3、关于发包,发包函数也在d2hackmap中找吧(感觉d2hackmap是个大宝库啊):

void __fastcall AutoBackToTown(BYTE *aPacket)
{
	if( aPacket[0]==0x60 && aPacket[1] == 0x00 ) //00限定只能走通向城里的传送门
	{
		if ( fBackToTown && tNoBackToTown.isOn == 0 ){
			fBackToTown = FALSE;
			BYTE castMove[9] = {0x13};
			*(DWORD*)&castMove[1] = 2;
			*(DWORD*)&castMove[5] = *(DWORD*)&aPacket[3]; // portal ID
			D2SendPacket(sizeof(castMove), 0, castMove);
		}

		if( nTownportalAlertNums!= (DWORD)-1 ){
			DWORD srollcount = CalSrollOfTownportal();
			if ( srollcount<= nTownportalAlertNums ){
				wchar_t temp[512];
				wsprintfW(temp,  L"<Hackmap>: Warning !! Only %d Townportals Left ", srollcount);
				D2ShowGameMessage(temp, 8);
			}
		}

	}
}

自动回城的处理中有D2SendPacket,发包的包头是0x13,直接在d2hackmap模块中搜索常量0x13,把汇编和源代码对比下就很容易找到发包函数了。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值