Code:
#define ACTOR_GETLOCALACTOR1 171A020h
#define ACTOR_GETLOCALACTOR2 9815A0h
#define ACTOR_GETLOCALACTOR3 82A380h
#define ACTOR_GETLOCALPLAYER3 811D10h
int _gameUsePowerCall = 0x97EF80;
typedef void* (__cdecl *tsub_817390)(int a1);
tsub_817390 GetACDPtrFromGUID = (tsub_817390)0x817390;
bool Game_UsePowerACD2(int power, void* acd) {
_asm {
push ebp
mov ebp, esp
sub esp, 30h
cmp dword ptr ds:ACTOR_GETLOCALACTOR1, 0
push esi
mov esi, eax
jz short loc_1000465F
mov eax, ACTOR_GETLOCALACTOR2
call eax
test eax, eax
jz short loc_1000465F
mov eax, [eax+4]
push eax
mov ecx, ACTOR_GETLOCALPLAYER3
call ecx
add esp, 4
test eax, eax
jnz short loc_10004666
loc_1000465F: ; CODE XREF: sub_10004630+10j
xor al, al
pop esi
mov esp, ebp
pop ebp
retn
loc_10004666: ; CODE XREF: sub_10004630+2Dj
mov eax, [eax+8Ch]
push eax
mov edx, ACTOR_GETLOCALACTOR3
call edx
mov [ebp-8], eax
xor eax, eax
mov [ebp-48], eax
mov [ebp-44], eax
mov [ebp-40], eax
mov [ebp-36], eax
mov [ebp-16], eax
mov [ebp-32], eax
mov [ebp-28], eax
mov [ebp-24], eax
mov [ebp-20], eax
mov [ebp-12], eax
mov eax, [ebp+8]
mov ecx, [eax]
add esp, 4
mov [ebp-44], esi
mov [ebp-48], esi
mov dword ptr [ebp-40], 1
mov [ebp-36], ecx
mov dword ptr [ebp-16], 0FFFFFFFFh
push esi
mov eax, [ebp-8]
lea esi, [ebp-4]
push esi ; _DWORD
push 1 ; _DWORD
push 1 ; _DWORD
lea esi, [ebp-48]
call _gameUsePowerCall
add esp, 0Ch
pop esi
mov [ebp-4], eax
xor eax, eax
cmp [ebp-4], eax
pop esi
setnz al
mov esp, ebp
pop ebp
retn
}
}
bool Game_UsePowerACD(int power, void* acd) {
_asm {
push ebp
mov ebp, esp
mov eax, [ebp+12]
push eax
mov eax, [ebp+8]
call Game_UsePowerACD2
add esp, 4
pop ebp
retn
}
}
struct objmgrobj
{
int guid_ractor; //0
int guid_acd; // 4
char name[64]; // 8
DWORD unk1[4]; // 72
DWORD actorlink; // 88
DWORD unk2[21]; // 92
WoWPos pos; // 176
DWORD unk3[68]; // 188
DWORD data1; // 460
DWORD unk4[11];// 464
DWORD data2; // 508
DWORD unk5[96]; // 512
ctmstruct* ctm; // 896
DWORD unk6[41]; // 900
};
bool UsePower(DWORD snopower, objmgrobj target)
{
void* pACD = GetACDPtrFromGUID(target.guid_acd);
if (pACD != 0)
{
return Game_UsePowerACD(snopower, pACD);
}
return false;
}
UsePower(SNOPowerId::Walk, tar);
but when i call it it crashes because it tries to write to 0x00000000