热血江湖 最新寻路CALL,技能CALL,轻功CALL,无限视距
热血江湖 最新寻路CALL,技能CALL,轻功CALL,无限视距刚玩C++没几天,就发上来和大家交流一下。。另外求穿墙。。物品进包。和优化CPU的方法。我实在找不出了
#define Tmp_Base 0x31DBEAC //人物基址
#define WalkCall 0x4C8670 //走路CALL
//走路CALL
void walk(float x, float y)
{
int TT;
TT = *(int*)Tmp_Base;
*(float*)(TT+ 0x1650) = x;
*(float*)(TT + 0x1658) = y;
*(float*)(TT + 0x14BC) = x;
*(float*)(TT + 0x14C4) = y;
*(int*)(TT + 0x14D8) = 1;
*(int*)(TT + 0x14D4) = 1;
*(int*)(TT + 0x14DC) = 0;
_asm{
mov esi, Tmp_Base
mov esi,
mov edx, dword ptr ds :
mov ecx, dword ptr ds :
push 0x2
sub esp, 0xC
mov eax, esp
mov dword ptr ds : , edx
mov edx, dword ptr ds :
mov dword ptr ds : , ecx
mov ecx, esi
mov dword ptr ds : , edx
mov eax, WalkCall
call eax
}
}
--------------------------------
#define SkillCall0x4E0190 ///技能CALL
#define SkillCallBase 0x18A4AC //技能CALL参数基址
void IdSkillCall(int Fwhat)
{
_asm{
mov eax, SkillCallBase
mov ecx, Tmp_Base
mov ecx,
lea eax, dword ptr ss :
push eax
mov eax, SkillCallBase
mov byte ptr ss : , 0xFF
mov edi, Fwhat // 技能ID
mov dword ptr ss : , edi
mov eax, SkillCall
call eax
}
}
在快捷键CALL 进去的最下方
----------------------------------------
#define LightCall 0x4F7E00 //轻功CALL
#define LightCallBase 0x17DB5C //轻功CALL参数基址
void LightSkillCall(int Fwhat)
{
int State;
State = *(int*)Tmp_Base + 0x1F54;
State = *(int*)State; //判断轻功是否开启 0未开启 1开启
if (State == 0)
{
_asm{
mov ecx, Tmp_Base
mov ecx,
mov eax, Fwhat
push eax
mov eax, LightCallBase
lea eax, dword ptr ss :
push eax
mov eax, LightCall
call eax
}
}
}
-------------------------------------
#define BeyondHorizon 0x40D5B0 //无限视距
DWORD dwOldProtect; //无限视距
VirtualProtect(LPVOID(BeyondHorizon), 4, PAGE_EXECUTE_READWRITE, &dwOldProtect); //改变内存属性
*(byte*)BeyondHorizon = 0xEB;
这个是我爆热血宝宝得来的内存点,我也不会逆向出来,求思路
技能树效果遍历所有在武功/ 武功出现的技能 直接把结构遍历发上来了
寻找方法。。鼠标点击技能窗口里面的技能 那么会产生一个鼠标对象,放下后为0,以对象为根源 寻找出数组
#define AttackSkillListBase 0x31B85B0//武功技能数组基址
#define AssistSkillListBase 0x31B85B4// 技能数组基址
typedef struct SKILL_OBJ
{
int CoolingTime;//24C 冷却时间
char *Name;//5C 技能名字
int Class;//8 0x1C
int Id;//C
int XXXX; //标示 0x4C
int Address; //对象
int Judge;// +1F6 WORD型 已学会为1 未学会为0
}_SKILL_OBJ;
//技能数组结构
typedef struct SKILL_LIST
{
SKILL_OBJ OBJ;
SKILL_LIST *GetData();
}_SKILL_LIST;
//技能初始化
SKILL_LIST *SKILL_LIST::GetData()
{
try
{
int base = *(int*)AttackSkillListBase + 0x410; //攻击武功
int obj = NULL;
for (int i = 0; i < 100; i++)
{
if (i > 50)
{
base = *(int*)AssistSkillListBase + 0x410; // 武功
obj = *(int*)(base + 4 * (i - 50));
}
else
{
obj = *(int*)(base + 4 * i);
}
if (obj == NULL)
{
this->OBJ.Class = 0;
continue;
}
this->OBJ.Address = base + 4 * i; //对象
this->OBJ.Name = (char*)(obj + 0x5C);//名字
this->OBJ.CoolingTime = *(int*)(obj + 0x24C);//冷却时间
this->OBJ.Id = *(int*)(obj + 0xC); //ID
this->OBJ.Class = *(int*)(obj + 0x8); //类型
this->OBJ.XXXX = *(int*)(obj + 0x4C); //标示
this->OBJ.Judge = *(WORD*)(obj + 0x1F6);//已学会为1 未学会为0
}
}
catch (...)
{
OutputDebugStringA("技能数组指针失败");
}
return this;
}
看见很多人问为什么遍历选怪会出现问题。那么正好给大家解决了。
其实是指针的问题,当访问数组里面的对象的时候 可能对象是空的。那么在空的前提下再去访问其 +8 +C那么便会出错 加上一 判断是空就进行下一次循环即可 选怪的问题,要判断选怪的对象属性基址是否为0,如果是就不执行,如果有对象就可以选怪。不然就游戏崩溃。
多看游戏里面的反汇编代码,代码怎么写,自己也要跟着他写,特别是条件判断不能忽视。 前排支持下了哦~ 强烈支持楼主ing…… 鄙视楼下的顶帖没我快,哈哈 呵呵,低调,低调! 需要的就是这个 不错,非常好,谢谢了 好东西。拿走了,感谢楼主分享
页:
[1]
2