Solo usuarios registrados pueden comentar y agradecer, Logueate o Registrate

Autor Topic: CustomCape 100% 1.4e MuEmu  (Visto 10373 veces)

0 Miembros and 1 Guest are viewing this topic.

Offline Ngocdung #80 Posteado: July 19, 2020, 08:22:39 PM

  • 0 puntos por ventas
  • *
  • Rank: Principiante
  • Posts: 3
  • Gracias recibida: 0
  • vn
I was trying to add a custom cape, I saw an error like a video, explaining in detail: when logging in to 2 clients, the character wearing a cape takes it off, it will have a visual bug, I don't know if anyone knows how to fix this error.  No, if you know, show it how to fix with me, thanks
https://www.youtube.com/watch?v=Ozv21do5Slw&feature=youtu.be
uppp , how to fix ?, who can share source full fix visual bug ?


Offline vcore30 #81 Posteado: April 29, 2022, 02:47:06 AM

  • 0 puntos por ventas
  • *
  • Rank: Destacado
  • Posts: 90
  • Gracias recibida: 686
  • ru
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.




Interface.cpp
Code: [Select]
void Interface::LoadTga()
{

pLoadImage("Item\\KF_Death_clka.tga", 0x16305, 0x2601, 0x2901, 1, 0);
pLoadImage("Item\\KF_Death_clkb.tga", 0x16306, 0x2601, 0x2901, 1, 0);

Item.cpp
Code: [Select]
void Item::LoadModels()
{
pInitModelData();
//----
pLoadModel(ITEM2(12,189), "Data\\Item\\", "Wing280", -1);  //Cloak of Death


void Item::LoadTextures()
{
pInitTextureData();
// ----

pLoadTexture(ITEM2(12,189), "Item\\", GL_REPEAT, GL_NEAREST, GL_TRUE);  //Cloak of Death

Main.cpp
Code: [Select]
gCapeAnimation.Load();

CustomCape.cpp
Code: [Select]
#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);
}

CustomCape.h
Code: [Select]
#pragma once
class CustomCape
{
public:
CustomCape();
~CustomCape();
};



#pragma once

#define pDrawViewPort ((int(__cdecl*)(DWORD ObjectPointer, DWORD ModelPointer, int a3)) 0x56F210)
#define pRefreshViewport ((void(__cdecl*)(DWORD a1, DWORD a2, int a3)) 0x558630)

#define pRefreshCape1                        ((void(__thiscall*)(ObjectItem * lpItem)) 0x00836280)  //0x8363D0 1.04E
#define pRefreshCape2                        ((void(__thiscall*)(ObjectItem * lpItem)) 0x00835CF0)  //0x835E40 1.04E

#define pObjOnViewport ((int(__cdecl*)(int Object))0x5F61C0)
#define sub_57D9A0 ((DWORD(__cdecl*)(DWORD)) 0x57D9A0)
#define sub_96A4C0 ((int(__thiscall*)(LPVOID This, signed int a2)) 0x96A4C0)
#define sub_402BC0 ((LPVOID(*)())0x402BC0)
#define sub_58AA80 ((DWORD(__cdecl*)(DWORD)) 0x58AA80)
#define sub_558630 ((void(__cdecl*)(int a1, int a2, int a3)) 0x558630)
#define sub_5012D0 ((DWORD(__cdecl*)(DWORD)) 0x5012D0)
#define sub_9253D0 ((int(__thiscall*)(LPVOID This,int a1, short a2)) 0x9253D0)
#define sub_4DB230 ((LPVOID(*)())0x4DB230)
#define sub_501700 ((DWORD(__cdecl*)(DWORD, DWORD, DWORD, DWORD, DWORD)) 0x501700)

static void RefreshViewPortItem(int a1);
class CCapeAnimation
{
public:
CCapeAnimation();
virtual ~CCapeAnimation();
void Load();
static void DrawViewPort(DWORD ObjectPointer, DWORD ModelPointer, DWORD a3);

};

extern CCapeAnimation gCapeAnimation;


Offline kincxh #82 Posteado: April 29, 2022, 03:46:15 AM

  • 0 puntos por ventas
  • *
  • Rank: Principiante
  • Posts: 13
  • Gracias recibida: 5
  • af

Solo usuarios registrados pueden comentar y agradecer, Logueate o Registrate


 

Related Topics

  Subject / Started by Replies Last post
4 Replies
1286 Views
Last post October 20, 2017, 11:57:53 AM
by darkroh
9 Replies
2168 Views
Last post June 13, 2017, 08:24:50 PM
by d3llam3a
3 Replies
2090 Views
Last post November 24, 2017, 06:56:46 PM
by splound
1 Replies
1002 Views
Last post October 24, 2018, 11:10:23 PM
by aemoscon
6 Replies
3944 Views
Last post October 27, 2022, 04:23:57 AM
by RifleMaN_