Hello. I'm adding code for main 1.04D I've done everything I know how to do in this. Can you see where my mistake is? I used the takumi code but the errors were the same.
#include "stdafx.h"
//#include "Cape.h"
#include "Defines.h"
#include "Object.h"
#include "Interface.h"
#include "TMemory.h"
#include "Item.h"
#include "CustomCape.h"
CCapeAnimation gCapeAnimation;
CCapeAnimation::CCapeAnimation()
{
}
CCapeAnimation::~CCapeAnimation()
{
}
DWORD CapeRegister;
DWORD CapeEffectPointer;
DWORD CapeEffectBuff;
void CCapeAnimation::DrawViewPort(DWORD ObjectPointer, DWORD ObjectModel, DWORD a3)
{
lpViewObj Object = &*(ObjectPreview*)(ObjectPointer);
switch(Object->WingsSlot)
{
case ITEM2(12,130): //Small Cape of Lord
case ITEM2(13,30): //Cape of Lord
Object->WingsSlot = ITEM2(13,30);
SetDword((LPVOID)(0x0057491A + 1), 0x7756);
SetDword((LPVOID)(0x0057491F + 1), 0x7756);
break;
case ITEM2(12,40): //Cape of Emperor 7355
Object->WingsSlot = ITEM2(12,40);
//-
SetDword((LPVOID)(0x0057491A + 1), 0x7758); //30552
SetDword((LPVOID)(0x0057491F + 1), 0x7758);
//-
SetDword((LPVOID)(0x00574F2E + 1), 0x7759); //30553
SetDword((LPVOID)(0x00574F33 + 1), 0x7759);
//-
SetDword((LPVOID)(0x00574FFC + 1), 0x7759);
SetDword((LPVOID)(0x00575001 + 1), 0x7759);
//-
break;
case ITEM2(12,49): //Cloak of Warrior
case ITEM2(12,135): //Little Warrior's Cloak
Object->WingsSlot = ITEM2(12,49);
SetDword((LPVOID)(0x0057491A + 1), 0x07EE0);
SetDword((LPVOID)(0x0057491F + 1), 0x07EE0);
break;
case ITEM2(12,50): //Cape of Overrule
Object->WingsSlot = ITEM2(12,50);
//-
SetDword((LPVOID)(0x0057491A + 1), 0x07EE2); //"Item\\monke_manto.TGA"
SetDword((LPVOID)(0x0057491F + 1), 0x07EE2);
//
SetDword((LPVOID)(0x00574F2E + 1), 0x07EE1); //"Item\\monk_manto01.TGA"
SetDword((LPVOID)(0x00574F33 + 1), 0x07EE1);
//
SetDword((LPVOID)(0x00574FFC + 1), 0x07EE1);
SetDword((LPVOID)(0x00575001 + 1), 0x07EE1);
//-
break;
case ITEM2(12,189): //Cloack of Death
Object->WingsSlot = ITEM2(12,189);
//-
SetDword((LPVOID)(0x0057491A + 1), 0x16305); //"Item\\KF_Death_clka.tga"
SetDword((LPVOID)(0x0057491F + 1), 0x16305);
//-
SetDword((LPVOID)(0x00574F2E + 1), 0x16306); //"Item\\KF_Death_clkb.tga"
SetDword((LPVOID)(0x00574F33 + 1), 0x16306);
//-
SetDword((LPVOID)(0x00574FFC + 1), 0x16306);
SetDword((LPVOID)(0x00575001 + 1), 0x16306);
//-
break;
}
pDrawViewPort(ObjectPointer, ObjectModel, a3);
}
//Strip
__declspec(naked) void LoadStrip() // 0x7759 //-> 03 Main
{
static DWORD Address1 = 0x00574F29;
static DWORD Address2 = 0x005750C5;
_asm{
Mov CapeEffectBuff, ecx
MOV EAX,DWORD PTR SS:[EBP+0x8]
MOVSX ECX,WORD PTR DS:[EAX+0x208]
Mov CapeEffectPointer,ecx
Mov ecx, CapeEffectBuff
}
if(CapeEffectPointer == ITEM2(12,40) || //Cape of Emperor
CapeEffectPointer == ITEM2(12,50) || //Cape of Overrule
CapeEffectPointer == ITEM2(12,189)) //Cloak of Death
{
_asm{Jmp Address1}
}
else
{
_asm{Jmp Address2}
}
}
//---- carga de la capa
__declspec(naked) void LoadCape() //7758
{
static DWORD Address1 = 0x00574915;
static DWORD Address2 = 0x00574A6A;
_asm{
mov CapeEffectBuff, ecx
MOV EAX,DWORD PTR SS:[EBP+0x8]
MOVSX ECX,WORD PTR DS:[EAX+0x208]
mov CapeEffectPointer,ecx
mov ecx, CapeEffectBuff
}
if(CapeEffectPointer == ITEM2(12,40) || //Cape of Emperor
CapeEffectPointer == ITEM2(12,49) || //-- 1ra capa rf
CapeEffectPointer == ITEM2(12,50) || //Cape of Overrule
CapeEffectPointer == ITEM2(12,130) ||
CapeEffectPointer == ITEM2(12,135) ||
CapeEffectPointer == ITEM2(12,189)) //Cloak of Death
{
_asm{Jmp Address1}
}
else
{
_asm{Jmp Address2}
}
}
__declspec(naked) void LoadCapeRender()
{
static DWORD Address1 = 0x005760C2;
static DWORD Address2 = 0x00576014;
_asm{
Mov CapeEffectBuff, ecx
MOV EAX,DWORD PTR SS:[EBP+0x8]
MOVSX ECX,WORD PTR DS:[EAX+0x208]
Mov CapeEffectPointer,Ecx
Mov Ecx, CapeEffectBuff
}
if(CapeEffectPointer == ITEM2(12,40) || //-- capa 2 dl
CapeEffectPointer == ITEM2(12,130) ||
CapeEffectPointer == ITEM2(12,135) || //-- mini capa
CapeEffectPointer == ITEM2(13,30) ||
CapeEffectPointer == ITEM2(12,189)) //Cloak of Death
{
_asm{jmp Address1}
}
else
{
_asm{jmp Address2}
}
}
__declspec(naked) void LoadAnimationPlay()
{
static DWORD Address1 = 0x00574683;
static DWORD Address2 = 0x0057468F;
_asm{
Mov CapeEffectBuff, Ecx
MOV DWORD PTR SS:[EBP-0x2D8],4
MOV EAX,DWORD PTR SS:[EBP+0x8]
MOVSX ECX,WORD PTR DS:[EAX+0x208]
mov CapeEffectPointer,ecx
mov ecx, CapeEffectBuff
}
if (CapeEffectPointer == ITEM2(12,40) ||
CapeEffectPointer == ITEM2(12,49) ||
CapeEffectPointer == ITEM2(12,50) ||
CapeEffectPointer == ITEM2(12,130) ||
CapeEffectPointer == ITEM2(12,135) ||
CapeEffectPointer == ITEM2(12,189)) //Cloak of Death
{
_asm{jmp Address1}
}
else
{
_asm{jmp Address2}
}
}
//Hide Cape Texture BMD
__declspec(naked) void HideCape()
{
static DWORD Address1 = 0x005FAD7D;
static DWORD Address2 = 0x005FAE90;
_asm
{
Mov Ecx, dword ptr ss : [ebp +0x10]
Mov Dword ptr ss : [ebp +0x10], Ecx
Mov CapeEffectPointer, Ecx
}
if (CapeEffectPointer == ITEM2(12,40) ||
CapeEffectPointer == ITEM2(12,49) ||
CapeEffectPointer == ITEM2(12,50) ||
CapeEffectPointer == ITEM2(12,130) ||
CapeEffectPointer == ITEM2(12,135) ||
CapeEffectPointer == ITEM2(12,189)) //Cloak of Death
{
_asm{jmp Address1}
}
else
{
_asm{jmp Address2}
}
}
//Cape MG
__declspec(naked) void AllowMGCape()
{
static DWORD Address1 = 0x00574D4C;
static DWORD Address2 = 0x00574DAC;
_asm
{
Mov CapeEffectBuff,Ecx
Mov Eax,Dword Ptr Ss : [Ebp + 0x8]
MOVZX ECX,BYTE Ptr Ds : [Eax + 0x13]
Mov CapeEffectPointer,Ecx
Mov Ecx, CapeEffectBuff
}
if (CapeEffectPointer == 3)
{
_asm{jmp Address1}
}
else
{
_asm{jmp Address2}
}
}
void __declspec(naked) CapeInventoryPos()
{
DWORD dwItem;
_asm
{
Mov Ecx,DWORD PTR SS:[EBP+0x8]
Mov dwItem,Ecx
CMP dwItem,ITEM2(12,40)
Je Exit
CMP dwItem,ITEM2(12,262)
Je Exit
CMP dwItem,ITEM2(12,418)
Je Exit
CMP dwItem,ITEM2(12,420)
Je Exit
Exit:
Mov Ecx,0x005CAFD2
Jmp Ecx
}
}
void DrawObjectDropOnViewport(int a1)
{
pObjOnViewport(a1);
switch(*(DWORD *)(a1 + 48))
{
case ITEM2(13,64): //Demon
*(float *)(a1 + 264) = 0.0f;
*(float *)(a1 + 96) = 0.2f;
*(float *)(a1 + 272) = 70.0f;
break;
}
}
void RefreshCapeUnEquip1(ObjectItem * lpItem)
{
if(lpItem->ItemID == ITEM2(12,189)) //Cloak of Death
//if(gCloak.isCloak(lpItem->ItemID))
{
pRefreshViewport(oUserPreviewStruct, oUserPreviewStruct + 776, 0);
return;
}
switch(lpItem->ItemID)
{
case ITEM(12,130):
case ITEM(12,135):
pRefreshViewport(oUserPreviewStruct, oUserPreviewStruct + 776, 0);
break;
}
pRefreshCape1(lpItem);
}
void RefreshCapeUnEquip2(ObjectItem * lpItem)
{
if(lpItem->ItemID == ITEM2(12,189)) //Cloak of Death
//if(gCloak.isCloak(lpItem->ItemID))
{
pRefreshViewport(oUserPreviewStruct, oUserPreviewStruct + 776, 0);
return;
}
switch(lpItem->ItemID)
{
case ITEM(12,130):
case ITEM(12,135):
pRefreshViewport(oUserPreviewStruct, oUserPreviewStruct + 776, 0);
break;
}
pRefreshCape2(lpItem);
}
//Hair
__declspec(naked) void RemoveDarklordHair()
{
static DWORD Address1 = 0x00574755;
static DWORD Address2 = 0x005748FF;
_asm
{
Mov Eax, Dword Ptr Ss : [Ebp + 0x8]
Movzx Edx, Byte Ptr Ds : [Eax + 0x13]
And Edx, 0x7
Cmp Edx, 0x4
Jne EXIT
Push 0xC0000205
Jmp Address1
EXIT:
Jmp Address2
}
}
void CCapeAnimation::Load()
{
SetCompleteHook(0xFF,0x0040487D, &this->DrawViewPort);
SetCompleteHook(0xFF,0x0048E56C, &this->DrawViewPort);
SetCompleteHook(0xFF,0x0057D4FF, &this->DrawViewPort);
SetCompleteHook(0xFF,0x0057D513, &this->DrawViewPort);
//-
SetCompleteHook(0xE9, 0x00572346, 0x00572370); //Apply
SetCompleteHook(0xE9, 0x0057464E, 0x00574667); //Apply
SetCompleteHook(0xE9, 0x00574750, &RemoveDarklordHair);
//-
SetRange((LPVOID)0x00574667,20,ASM::NOP);
SetOp((LPVOID)0x00574667,(LPVOID)LoadAnimationPlay,ASM::JMP);
//-
SetRange((LPVOID)0x00574F13,10,ASM::NOP);
SetOp((LPVOID)0x00574F13,(LPVOID)LoadStrip,ASM::JMP);
//-
SetRange((LPVOID)0x005748FF,10,ASM::NOP);
SetOp((LPVOID)0x005748FF,(LPVOID)LoadCape,ASM::JMP);
//-
SetRange((LPVOID)0x00576058,10,ASM::NOP);
SetOp((LPVOID)0x00576058,(LPVOID)LoadCapeRender,ASM::JMP);
//-
SetRange((LPVOID)0x005FAD70,7,ASM::NOP);
SetOp((LPVOID)0x005FAD70,(LPVOID)HideCape,ASM::JMP);
//-
SetRange((LPVOID)0x00574D3D,13,ASM::NOP);
SetOp((LPVOID)0x00574D3D,(LPVOID)AllowMGCape,ASM::JMP);
//--
SetCompleteHook(0xE8,0x00833A97,&RefreshCapeUnEquip1); //0x00833BE7 1.04E
SetCompleteHook(0xE8,0x007DD1B4,&RefreshCapeUnEquip2); //0x007DD304 1.04E
SetCompleteHook(0xE8,0x008339B8,&RefreshCapeUnEquip2); //0x00833B08 1.04E
//-
SetRange((LPVOID)0x005CAFCB,7,ASM::NOP);
SetOp((LPVOID)0x005CAFCB,(LPVOID)CapeInventoryPos,ASM::JMP);
}