Hugo
20/11/2015, 09:01 AM
Prints :
[Only registered and activated users can see links]
[Only registered and activated users can see links]
Arquivo NewBows.cpp :
DWORD IsBowItem = 0;
DWORD IsCrossItem = 0;
DWORD BowValue = 0x09C;
DWORD MaxBoneCount = 0x108;
DWORD WorldPosition = 0x0FC;
DWORD oCreateEffect = 0x00650FF0;
DWORD ReturnBowCode = 0x00699416;
DWORD BowPosition = 0x0059F77C;
DWORD NextBowPosition = 0x0059F7BB;
DWORD ReturnCrossCode = 0x006990E3;
void __declspec(naked) cBowAddSkillEffect()
{
_asm
{
mov edx,dword ptr ss:[ebp-0x8]
mov dword ptr ss:[ebp-0x14],edx
mov IsBowItem,edx
}
// ---
if( IsBowItem == ObjectId(4, 25) ) // Lightning Bow
{
_asm
{
push -1
push 0
push 0
mov dx,word ptr ss:[ebp+0x18]
push edx
mov ax,word ptr ss:[ebp+0x14]
push eax
mov ecx,dword ptr ss:[ebp+0x0C]
mov dx,word ptr ds:[ecx+0x2C]
push edx
mov eax,dword ptr ss:[ebp+0x0C]
push eax
mov ecx,dword ptr ss:[ebp-0x0C]
push ecx
mov edx,dword ptr ss:[ebp+0x0C]
add edx, BowValue
push edx
mov eax,dword ptr ss:[ebp+0x0C]
add eax, MaxBoneCount
push eax
mov ecx,dword ptr ss:[ebp+0x0C]
add ecx, WorldPosition
push ecx
push 324
call oCreateEffect
}
}
else if( IsBowItem == ObjectId(4, 26) ) // Divinity Bow
{
_asm
{
push -1
push 0
push 0
mov dx,word ptr ss:[ebp+0x18]
push edx
mov ax,word ptr ss:[ebp+0x14]
push eax
mov ecx,dword ptr ss:[ebp+0x0C]
mov dx,word ptr ds:[ecx+0x2C]
push edx
mov eax,dword ptr ss:[ebp+0x0C]
push eax
mov ecx,dword ptr ss:[ebp-0x0C]
push ecx
mov edx,dword ptr ss:[ebp+0x0C]
add edx, BowValue
push edx
mov eax,dword ptr ss:[ebp+0x0C]
add eax, MaxBoneCount
push eax
mov ecx,dword ptr ss:[ebp+0x0C]
add ecx, WorldPosition
push ecx
push 321
call oCreateEffect
}
}
else if( IsBowItem == ObjectId(4, 27) ) // Angelic Bow
{
_asm
{
push -1
push 0
push 0
mov dx,word ptr ss:[ebp+0x18]
push edx
mov ax,word ptr ss:[ebp+0x14]
push eax
mov ecx,dword ptr ss:[ebp+0x0C]
mov dx,word ptr ds:[ecx+0x2C]
push edx
mov eax,dword ptr ss:[ebp+0x0C]
push eax
mov ecx,dword ptr ss:[ebp-0x0C]
push ecx
mov edx,dword ptr ss:[ebp+0x0C]
add edx, BowValue
push edx
mov eax,dword ptr ss:[ebp+0x0C]
add eax, MaxBoneCount
push eax
mov ecx,dword ptr ss:[ebp+0x0C]
add ecx, WorldPosition
push ecx
push 297
call oCreateEffect
}
}
else if( IsBowItem == ObjectId(4, 28) ) // Thunder Bow
{
_asm
{
push -1
push 0
push 0
mov dx,word ptr ss:[ebp+0x18]
push edx
mov ax,word ptr ss:[ebp+0x14]
push eax
mov ecx,dword ptr ss:[ebp+0x0C]
mov dx,word ptr ds:[ecx+0x2C]
push edx
mov eax,dword ptr ss:[ebp+0x0C]
push eax
mov ecx,dword ptr ss:[ebp-0x0C]
push ecx
mov edx,dword ptr ss:[ebp+0x0C]
add edx, BowValue
push edx
mov eax,dword ptr ss:[ebp+0x0C]
add eax, MaxBoneCount
push eax
mov ecx,dword ptr ss:[ebp+0x0C]
add ecx, WorldPosition
push ecx
push 266
call oCreateEffect
}
}
_asm
{
jmp ReturnBowCode
}
}
void __declspec(naked) cCrossAddSkillEffect()
{
_asm
{
mov edx,dword ptr ss:[ebp-0x4]
mov dword ptr ss:[ebp-0x10],edx
mov IsCrossItem,edx
}
// ---
if(IsCrossItem == ObjectId(4,129)) // Devil Crossbow
{
_asm
{
push -1
push 0
push 0
mov ax,word ptr ss:[ebp+0x18]
push eax
mov cx,word ptr ss:[ebp+0x14]
push ecx
mov edx,dword ptr ss:[ebp+0x0C]
mov ax,word ptr ds:[edx+0x2C]
push eax
mov ecx,dword ptr ss:[ebp+0x10]
push ecx
push 0
mov edx,dword ptr ss:[ebp+0x0C]
add edx,BowValue
push edx
mov eax,dword ptr ss:[ebp+0x0C]
add eax,MaxBoneCount
push eax
mov ecx,dword ptr ss:[ebp+0x0C]
add ecx,WorldPosition
push ecx
push 321
call oCreateEffect
}
}
// ---
_asm
{
jmp ReturnCrossCode
}
}
void __declspec(naked) cBowAddInventoryPos()
{
_asm
{
mov IsBowItem, esi
}
// ---
if(IsBowItem == 0x0B5A)
{
_asm{jmp BowPosition}
}
else if(IsBowItem == ObjectId(4,25))
{
_asm{jmp BowPosition}
}
else if(IsBowItem == ObjectId(4,26))
{
_asm{jmp BowPosition}
}
else if(IsBowItem == ObjectId(4,27))
{
_asm{jmp BowPosition}
}
else if(IsBowItem == ObjectId(4,28))
{
_asm{jmp BowPosition}
}
else
{
_asm{jmp NextBowPosition}
}
}
DWORD BowAddPlayerDimension_Offset = 0x004E9A12;
void __declspec(naked) cBowAddPlayerDimension()
{
_asm
{
CMP DWORD PTR SS:[EBP+0x1C],0x0B56
JE ReturnLoad
CMP DWORD PTR SS:[EBP+0x1C],ObjectId(4,24)
JE ReturnLoad
CMP DWORD PTR SS:[EBP+0x1C],ObjectId(4,25)
JE ReturnLoad
CMP DWORD PTR SS:[EBP+0x1C],ObjectId(4,26)
JE ReturnLoad
CMP DWORD PTR SS:[EBP+0x1C],ObjectId(4,27)
JE ReturnLoad
CMP DWORD PTR SS:[EBP+0x1C],ObjectId(4,28)
JE ReturnLoad
// ---
ReturnLoad:
// ---
JMP BowAddPlayerDimension_Offset
}
}
void InitBows()
{
Utils.SetRange((LPVOID)iBowAddSkillEffect, 6, ASM::NOP);
Utils.SetJmp((LPVOID)iBowAddSkillEffect, cBowAddSkillEffect);
// ----
Utils.SetRange((LPVOID)iBowAddInventoryPos, 6, ASM::NOP);
Utils.SetJmp((LPVOID)iBowAddInventoryPos, cBowAddInventoryPos);
// ----
Utils.SetRange((LPVOID)iBowAddPlayerDimension, 7, ASM::NOP);
Utils.SetJmp((LPVOID)iBowAddPlayerDimension, cBowAddPlayerDimension);
// ----
Utils.SetRange((LPVOID)iCrossAddSkillEffect, 6, ASM::NOP);
Utils.SetJmp((LPVOID)iCrossAddSkillEffect, cCrossAddSkillEffect);
}
Offsets de Hook :
#define iBowAddSkillEffect 0x00699410
#define iBowAddInventoryPos 0x0059F774
#define iBowAddPlayerDimension 0x004E9A0B
#define iCrossAddSkillEffect 0x006990DD
Creditos :
SmileY
Main 1.03.11 (JPN)
[Only registered and activated users can see links]
[Only registered and activated users can see links]
Arquivo NewBows.cpp :
DWORD IsBowItem = 0;
DWORD IsCrossItem = 0;
DWORD BowValue = 0x09C;
DWORD MaxBoneCount = 0x108;
DWORD WorldPosition = 0x0FC;
DWORD oCreateEffect = 0x00650FF0;
DWORD ReturnBowCode = 0x00699416;
DWORD BowPosition = 0x0059F77C;
DWORD NextBowPosition = 0x0059F7BB;
DWORD ReturnCrossCode = 0x006990E3;
void __declspec(naked) cBowAddSkillEffect()
{
_asm
{
mov edx,dword ptr ss:[ebp-0x8]
mov dword ptr ss:[ebp-0x14],edx
mov IsBowItem,edx
}
// ---
if( IsBowItem == ObjectId(4, 25) ) // Lightning Bow
{
_asm
{
push -1
push 0
push 0
mov dx,word ptr ss:[ebp+0x18]
push edx
mov ax,word ptr ss:[ebp+0x14]
push eax
mov ecx,dword ptr ss:[ebp+0x0C]
mov dx,word ptr ds:[ecx+0x2C]
push edx
mov eax,dword ptr ss:[ebp+0x0C]
push eax
mov ecx,dword ptr ss:[ebp-0x0C]
push ecx
mov edx,dword ptr ss:[ebp+0x0C]
add edx, BowValue
push edx
mov eax,dword ptr ss:[ebp+0x0C]
add eax, MaxBoneCount
push eax
mov ecx,dword ptr ss:[ebp+0x0C]
add ecx, WorldPosition
push ecx
push 324
call oCreateEffect
}
}
else if( IsBowItem == ObjectId(4, 26) ) // Divinity Bow
{
_asm
{
push -1
push 0
push 0
mov dx,word ptr ss:[ebp+0x18]
push edx
mov ax,word ptr ss:[ebp+0x14]
push eax
mov ecx,dword ptr ss:[ebp+0x0C]
mov dx,word ptr ds:[ecx+0x2C]
push edx
mov eax,dword ptr ss:[ebp+0x0C]
push eax
mov ecx,dword ptr ss:[ebp-0x0C]
push ecx
mov edx,dword ptr ss:[ebp+0x0C]
add edx, BowValue
push edx
mov eax,dword ptr ss:[ebp+0x0C]
add eax, MaxBoneCount
push eax
mov ecx,dword ptr ss:[ebp+0x0C]
add ecx, WorldPosition
push ecx
push 321
call oCreateEffect
}
}
else if( IsBowItem == ObjectId(4, 27) ) // Angelic Bow
{
_asm
{
push -1
push 0
push 0
mov dx,word ptr ss:[ebp+0x18]
push edx
mov ax,word ptr ss:[ebp+0x14]
push eax
mov ecx,dword ptr ss:[ebp+0x0C]
mov dx,word ptr ds:[ecx+0x2C]
push edx
mov eax,dword ptr ss:[ebp+0x0C]
push eax
mov ecx,dword ptr ss:[ebp-0x0C]
push ecx
mov edx,dword ptr ss:[ebp+0x0C]
add edx, BowValue
push edx
mov eax,dword ptr ss:[ebp+0x0C]
add eax, MaxBoneCount
push eax
mov ecx,dword ptr ss:[ebp+0x0C]
add ecx, WorldPosition
push ecx
push 297
call oCreateEffect
}
}
else if( IsBowItem == ObjectId(4, 28) ) // Thunder Bow
{
_asm
{
push -1
push 0
push 0
mov dx,word ptr ss:[ebp+0x18]
push edx
mov ax,word ptr ss:[ebp+0x14]
push eax
mov ecx,dword ptr ss:[ebp+0x0C]
mov dx,word ptr ds:[ecx+0x2C]
push edx
mov eax,dword ptr ss:[ebp+0x0C]
push eax
mov ecx,dword ptr ss:[ebp-0x0C]
push ecx
mov edx,dword ptr ss:[ebp+0x0C]
add edx, BowValue
push edx
mov eax,dword ptr ss:[ebp+0x0C]
add eax, MaxBoneCount
push eax
mov ecx,dword ptr ss:[ebp+0x0C]
add ecx, WorldPosition
push ecx
push 266
call oCreateEffect
}
}
_asm
{
jmp ReturnBowCode
}
}
void __declspec(naked) cCrossAddSkillEffect()
{
_asm
{
mov edx,dword ptr ss:[ebp-0x4]
mov dword ptr ss:[ebp-0x10],edx
mov IsCrossItem,edx
}
// ---
if(IsCrossItem == ObjectId(4,129)) // Devil Crossbow
{
_asm
{
push -1
push 0
push 0
mov ax,word ptr ss:[ebp+0x18]
push eax
mov cx,word ptr ss:[ebp+0x14]
push ecx
mov edx,dword ptr ss:[ebp+0x0C]
mov ax,word ptr ds:[edx+0x2C]
push eax
mov ecx,dword ptr ss:[ebp+0x10]
push ecx
push 0
mov edx,dword ptr ss:[ebp+0x0C]
add edx,BowValue
push edx
mov eax,dword ptr ss:[ebp+0x0C]
add eax,MaxBoneCount
push eax
mov ecx,dword ptr ss:[ebp+0x0C]
add ecx,WorldPosition
push ecx
push 321
call oCreateEffect
}
}
// ---
_asm
{
jmp ReturnCrossCode
}
}
void __declspec(naked) cBowAddInventoryPos()
{
_asm
{
mov IsBowItem, esi
}
// ---
if(IsBowItem == 0x0B5A)
{
_asm{jmp BowPosition}
}
else if(IsBowItem == ObjectId(4,25))
{
_asm{jmp BowPosition}
}
else if(IsBowItem == ObjectId(4,26))
{
_asm{jmp BowPosition}
}
else if(IsBowItem == ObjectId(4,27))
{
_asm{jmp BowPosition}
}
else if(IsBowItem == ObjectId(4,28))
{
_asm{jmp BowPosition}
}
else
{
_asm{jmp NextBowPosition}
}
}
DWORD BowAddPlayerDimension_Offset = 0x004E9A12;
void __declspec(naked) cBowAddPlayerDimension()
{
_asm
{
CMP DWORD PTR SS:[EBP+0x1C],0x0B56
JE ReturnLoad
CMP DWORD PTR SS:[EBP+0x1C],ObjectId(4,24)
JE ReturnLoad
CMP DWORD PTR SS:[EBP+0x1C],ObjectId(4,25)
JE ReturnLoad
CMP DWORD PTR SS:[EBP+0x1C],ObjectId(4,26)
JE ReturnLoad
CMP DWORD PTR SS:[EBP+0x1C],ObjectId(4,27)
JE ReturnLoad
CMP DWORD PTR SS:[EBP+0x1C],ObjectId(4,28)
JE ReturnLoad
// ---
ReturnLoad:
// ---
JMP BowAddPlayerDimension_Offset
}
}
void InitBows()
{
Utils.SetRange((LPVOID)iBowAddSkillEffect, 6, ASM::NOP);
Utils.SetJmp((LPVOID)iBowAddSkillEffect, cBowAddSkillEffect);
// ----
Utils.SetRange((LPVOID)iBowAddInventoryPos, 6, ASM::NOP);
Utils.SetJmp((LPVOID)iBowAddInventoryPos, cBowAddInventoryPos);
// ----
Utils.SetRange((LPVOID)iBowAddPlayerDimension, 7, ASM::NOP);
Utils.SetJmp((LPVOID)iBowAddPlayerDimension, cBowAddPlayerDimension);
// ----
Utils.SetRange((LPVOID)iCrossAddSkillEffect, 6, ASM::NOP);
Utils.SetJmp((LPVOID)iCrossAddSkillEffect, cCrossAddSkillEffect);
}
Offsets de Hook :
#define iBowAddSkillEffect 0x00699410
#define iBowAddInventoryPos 0x0059F774
#define iBowAddPlayerDimension 0x004E9A0B
#define iCrossAddSkillEffect 0x006990DD
Creditos :
SmileY
Main 1.03.11 (JPN)