Solo usuarios registrados pueden comentar y agradecer, Logueate o Registrate

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

0 Miembros and 1 Guest are viewing this topic.

Offline JavixFer #40 Posteado: June 22, 2020, 07:49:27 PM

  • +1 puntos por ventas
  • *
  • Rank: Puto amo
  • Posts: 476
  • Gracias recibida: 3974
  • bo
@takumi12 al usar el custom de las capas, la capa del personaje mg se daña, pierde el movimiento y se mete dentro del cuerpo del mg XD


@javierf2 mira:
Lo mismo ocurre con el DL, mira nada mas esas nalgas  cool2


tendremos que acostrumbrarnos a ver las nalgas asi del Dl xD estoy intentanto buscar el problema pero aun estoy sin resultados... boxing


Offline Daniel@ #41 Posteado: June 22, 2020, 08:24:27 PM

  • 0 puntos por ventas
  • *
  • Rank: Puto amo
  • Posts: 354
  • Gracias recibida: 2786
  • ve
me encanta ver como salen las sources donde le meti mano buscando offsets y mas aun que no salgan los creditos correspondientes
//--- carga tiras de las capas

mi unica fuente fue el unico donde le añadi estas lineas jajaja. que ironico llevarse todo el credito.

 jajaja jajaja jajaja jajaja


Offline Daniel@ #42 Posteado: June 22, 2020, 08:25:15 PM

  • 0 puntos por ventas
  • *
  • Rank: Puto amo
  • Posts: 354
  • Gracias recibida: 2786
  • ve
@takumi12 al usar el custom de las capas, la capa del personaje mg se daña, pierde el movimiento y se mete dentro del cuerpo del mg XD


@javierf2 mira:
Lo mismo ocurre con el DL, mira nada mas esas nalgas  cool2


tendremos que acostrumbrarnos a ver las nalgas asi del Dl xD estoy intentanto buscar el problema pero aun estoy sin resultados... boxing

revisare eso, si tengo solucion lo posteare aqui.


Offline takumi12 #43 Posteado: June 22, 2020, 09:18:21 PM | Modificado: June 22, 2020, 09:28:00 PM by takumi12

  • MAESTRO

  • US. DE HONOR

  • LEYENDA

  • Php Coder
  • +11 puntos por ventas
  • *
  • *
  • Rank: Puto amo
  • Posts: 1.310
  • Gracias recibida: 39644
  • mx
me encanta ver como salen las sources donde le meti mano buscando offsets y mas aun que no salgan los creditos correspondientes
//--- carga tiras de las capas

mi unica fuente fue el unico donde le añadi estas lineas jajaja. que ironico llevarse todo el credito.

 jajaja jajaja jajaja jajaja

??? perdon pero esta es la fuente que compartio louis que pertenece a myheart si no me equivoco y que esta en ltp, yo puse ese apartado para para identificar que parte cargaba las tiras y las mantas, ya que en realidad la fuente que te compre a ti ni servia por lo menos no en 1.4e

esto es lo que tu agregaste que por lo que vi no era necesario y puedes revisar en la fuente que comparti como tambien puedes volver a descargar tu fuente ni si quiera tiene agregado lo que dices

tu source

Code: [Select]
__declspec(naked) void CapeA2() // 0x7759 //-> 03 Main
{
static DWORD Address1 = 0x00575627;
static DWORD Address2 = 0x005757B7;

_asm{
Mov CapeEffectBuff, ecx
MOV EAX,DWORD PTR SS:[EBP+0x8]
MOVSX ECX,WORD PTR DS:[EAX+0x208]
Mov CapeEffectPointer,ecx
Mov ecx, CapeEffectBuff
}

for ( int n = 0; n < g_ItemModelWing.m_Data2.size(); ++n )
{
if(CapeEffectPointer == ITEM2(g_ItemModelWing.m_Data2[n].ItemType,g_ItemModelWing.m_Data2[n].ItemIndex))
{
_asm{jmp Address1}
}
}

if(CapeEffectPointer == 0x1CC4|| CapeEffectPointer == 0x1CC5|| CapeEffectPointer == 0x1D1A
)
{
_asm{Jmp Address1}
}
else
{
_asm{Jmp Address2}
}
}


Las offset no se crea, ni se destruye, solo se transforma

Offline beecubin #44 Posteado: June 23, 2020, 04:27:35 PM

  • 0 puntos por ventas
  • *
  • Rank: Principiante
  • Posts: 23
  • Gracias recibida: 1098
  • vn
@takumi12  could you help me fix it? :( Maybe function HideCape of me not working


Offline SaintZeus #45 Posteado: June 26, 2020, 09:55:33 PM

  • 0 puntos por ventas
  • *
  • Rank: Puto amo
  • Posts: 482
  • Gracias recibida: 2753
  • ar
@takumi12 al usar el custom de las capas, la capa del personaje mg se daña, pierde el movimiento y se mete dentro del cuerpo del mg XD


@javierf2 mira:
Lo mismo ocurre con el DL, mira nada mas esas nalgas  cool2


tendremos que acostrumbrarnos a ver las nalgas asi del Dl xD estoy intentanto buscar el problema pero aun estoy sin resultados... boxing

revisare eso, si tengo solucion lo posteare aqui.
Podria por favor alguien pensar en el trasero del DL???? Jajaja

Gracias:


Offline JavixFer #46 Posteado: July 01, 2020, 12:59:46 AM

  • +1 puntos por ventas
  • *
  • Rank: Puto amo
  • Posts: 476
  • Gracias recibida: 3974
  • bo
hola chicos como estan.. alguien me puede dar una pista porfavor, cree parte del GetmainInfo para hacer el llamado, resulta que la animacion de las capas me funciona perfectamente pero no logro hacer que se visualice las texturas de la capa y las tiras me aparece en blanco... alguien me da un pista porfa  please



Offline SaintZeus #47 Posteado: July 01, 2020, 07:58:29 PM

  • 0 puntos por ventas
  • *
  • Rank: Puto amo
  • Posts: 482
  • Gracias recibida: 2753
  • ar
@takumi12 al usar el custom de las capas, la capa del personaje mg se daña, pierde el movimiento y se mete dentro del cuerpo del mg XD


@javierf2 mira:
Lo mismo ocurre con el DL, mira nada mas esas nalgas  cool2


tendremos que acostrumbrarnos a ver las nalgas asi del Dl xD estoy intentanto buscar el problema pero aun estoy sin resultados... boxing
UP


Offline erickmalfoy #48 Posteado: July 02, 2020, 05:44:46 AM

  • 0 puntos por ventas
  • *
  • Rank: Puto amo
  • Posts: 557
  • Gracias recibida: 314
  • ar
Hola que tal que quede aqui alguien me brinda una manito pleaseplease

https://prnt.sc/taccwz

 Gracias por ayudarme .. ! de antemano


Offline SaintZeus #49 Posteado: July 02, 2020, 05:56:01 AM

  • 0 puntos por ventas
  • *
  • Rank: Puto amo
  • Posts: 482
  • Gracias recibida: 2753
  • ar
Hola que tal que quede aqui alguien me brinda una manito pleaseplease

https://prnt.sc/taccwz

 Gracias por ayudarme .. ! de antemano
agregaste los include .h en el interface.cpp?


Offline erickmalfoy #50 Posteado: July 02, 2020, 06:00:14 AM

  • 0 puntos por ventas
  • *
  • Rank: Puto amo
  • Posts: 557
  • Gracias recibida: 314
  • ar
Hola que tal que quede aqui alguien me brinda una manito pleaseplease

https://prnt.sc/taccwz

 Gracias por ayudarme .. ! de antemano
agregaste los include .h en el interface.cpp?

Gracias por responder si mira la foto :D
https://prnt.sc/tacoxj


Offline SaintZeus #51 Posteado: July 02, 2020, 06:29:39 AM

  • 0 puntos por ventas
  • *
  • Rank: Puto amo
  • Posts: 482
  • Gracias recibida: 2753
  • ar
Hola que tal que quede aqui alguien me brinda una manito pleaseplease

https://prnt.sc/taccwz

 Gracias por ayudarme .. ! de antemano
agregaste los include .h en el interface.cpp?

Gracias por responder si mira la foto :D
https://prnt.sc/tacoxj
mostrame tu cape.h y .cpp


Offline erickmalfoy #52 Posteado: July 02, 2020, 11:59:57 AM

  • 0 puntos por ventas
  • *
  • Rank: Puto amo
  • Posts: 557
  • Gracias recibida: 314
  • ar
Hola que tal que quede aqui alguien me brinda una manito pleaseplease

https://prnt.sc/taccwz

 Gracias por ayudarme .. ! de antemano
agregaste los include .h en el interface.cpp?

Gracias por responder si mira la foto :D
https://prnt.sc/tacoxj
mostrame tu cape.h y .cpp

Gracias por respondes es la misma que publico takumi12 aca una foto :D
https://prnt.sc/takmbt


Offline JavixFer #53 Posteado: July 03, 2020, 12:48:06 AM

  • +1 puntos por ventas
  • *
  • Rank: Puto amo
  • Posts: 476
  • Gracias recibida: 3974
  • bo
Hola chicos estube haciendo el llamado del GetMainInfo para cargar las texturas desde un txt como los custom que ya conocemos, aclaro que no esta del todo funcional solo faltaria la carga de las texturas y validacion para que cargue capa mas tiras y otro que solo seria solo capa, me rompi la cabeza con esto que para algunos puede ser sencillo comparto todo lo que hice para que algun heroe sin capa complete el trabajo y pueda compartir con toda la comunidad. muchos estaremos agradecidos.
postada: no soy coder soy una persona que esta aprendiendo c++

===GetMainInfo==
CustomCloak.h
Code: [Select]
#pragma once

#define MAX_CUSTOM_CLOAK 100

struct CUSTOMCLOAK_DATA
{
int Index;
int ItemIndex;
int Mode;
int IndexCloak;
char CloakModel[150];
int IndexStrip;
char StripModel[150];

};

class CCustomCloak
{
public:
CCustomCloak();
virtual ~CCustomCloak();
void Init();
void Load(char* path);
void SetInfo(CUSTOMCLOAK_DATA info);
public:
CUSTOMCLOAK_DATA m_CustomCloakInfo[MAX_CUSTOM_CLOAK];
};

extern CCustomCloak gCustomCloak;

CustomCloak.cpp
Code: [Select]
#include "stdafx.h"
#include "CustomCloak.h"
#include "MemScript.h"

CCustomCloak gCustomCloak;

CCustomCloak::CCustomCloak() // OK
{
this->Init();
}

CCustomCloak::~CCustomCloak() // OK
{

}

void CCustomCloak::Init() // OK
{
for(int n=0;n < MAX_CUSTOM_CLOAK;n++)
{
this->m_CustomCloakInfo[n].Index = -1;
}
}

void CCustomCloak::Load(char* path)
{
CMemScript* lpMemScript = new CMemScript;

if(lpMemScript == 0)
{
printf(MEM_SCRIPT_ALLOC_ERROR,path);
return;
}

if(lpMemScript->SetBuffer(path) == 0)
{
printf(lpMemScript->GetLastError());
delete lpMemScript;
return;
}

this->Init();

try
{
while(true)
{
if(lpMemScript->GetToken() == TOKEN_END)
{
break;
}

if(strcmp("end",lpMemScript->GetString()) == 0)
{
break;
}

CUSTOMCLOAK_DATA info;

memset(&info,0,sizeof(info));

static int CustomCloakIndexCount = 0;

info.Index = CustomCloakIndexCount++;

info.ItemIndex = lpMemScript->GetNumber();

info.Mode  = lpMemScript->GetAsNumber();

info.IndexCloak = lpMemScript->GetAsNumber();

strcpy_s(info.CloakModel,lpMemScript->GetAsString());

info.IndexStrip = lpMemScript->GetAsNumber();

strcpy_s(info.StripModel,lpMemScript->GetAsString());


this->SetInfo(info);
}
}
catch(...)
{
printf(lpMemScript->GetLastError());
}

delete lpMemScript;
}

void CCustomCloak::SetInfo(CUSTOMCLOAK_DATA info) // OK
{
if(info.Index < 0 || info.Index >= MAX_CUSTOM_CLOAK)
{
return;
}

this->m_CustomCloakInfo[info.Index] = info;
}

===Main==
cape.h
Code: [Select]
#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)) 0x8363D0)
#define pRefreshCape2                        ((void(__thiscall*)(ObjectItem * lpItem)) 0x835E40)

#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;

cape.cpp
Code: [Select]
#include "stdafx.h"
#include "Cape.h"
#include "Defines.h"
#include "Object.h"
#include "Interface.h"
#include "Util.h"
#include "Item.h"
#include "CustomCloak.h"
#include "TMemory.h"
//#include "CustomPet.h"
//#include "PetHook.h"
//#include "Pet.h"
//#include "Import.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);

//for ( int n = 0; n < gCloak.m_CustomCloakInfo.size(); ++n ) {
for(int n=0;n < MAX_CUSTOM_CLOAK;n++)
if(Object->WingsSlot == ITEM2(gCloak.m_CustomCloakInfo[n].Index,gCloak.m_CustomCloakInfo[n].ItemIndex)){
Object->WingsSlot = ITEM2(gCloak.m_CustomCloakInfo[n].Index,gCloak.m_CustomCloakInfo[n].ItemIndex);

if(gCloak.m_CustomCloakInfo[n].Mode == 0){
SetDword((0x0057491A + 1), gCloak.m_CustomCloakInfo[n].IndexCloak);
SetDword((0x0057491F + 1), gCloak.m_CustomCloakInfo[n].IndexCloak);
//
if( strcmp(gCloak.m_CustomCloakInfo[n].StripModel, "") != 0 )
{
SetDword((0x00574F2E + 1), gCloak.m_CustomCloakInfo[n].IndexStrip);
SetDword((0x00574F33 + 1), gCloak.m_CustomCloakInfo[n].IndexStrip);
//
SetDword((0x00574FFC + 1), gCloak.m_CustomCloakInfo[n].IndexStrip);
SetDword((0x00575001 + 1), gCloak.m_CustomCloakInfo[n].IndexStrip);
}
else
{
SetDword((0x00574F2E + 1), 0x7884);
SetDword((0x00574F33 + 1), 0x7884);
//
SetDword((0x00574FFC + 1), 0x7884);
SetDword((0x00575001 + 1), 0x7884);
}
}
else{

SetDword((0x005751EB + 1), gCloak.m_CustomCloakInfo[n].IndexCloak);
SetDword((0x005751F0 + 1), gCloak.m_CustomCloakInfo[n].IndexCloak);
//
if( strcmp(gCloak.m_CustomCloakInfo[n].StripModel, "") != 0 )
{
SetDword((0x0057562C + 1), gCloak.m_CustomCloakInfo[n].IndexStrip);
SetDword((0x00575631 + 1), gCloak.m_CustomCloakInfo[n].IndexStrip);
//
SetDword((0x005756EE + 1), gCloak.m_CustomCloakInfo[n].IndexStrip);
SetDword((0x005756F3 + 1), gCloak.m_CustomCloakInfo[n].IndexStrip);
/*}else
{
SetDword((0x0057562C + 1), 0x7884);
SetDword((0x00575631 + 1), 0x7884);
//
SetDword((0x005756EE + 1), 0x7884);
SetDword((0x005756F3 + 1), 0x7884);*/
}
}
}


switch(Object->WingsSlot)
{
case ITEM2(12,130):
case ITEM2(13,30):

Object->WingsSlot = ITEM2(13,30);

SetDword((0x0057491A + 1), 0x7756);
SetDword((0x0057491F + 1), 0x7756);

break;
case ITEM2(12,40):

Object->WingsSlot = ITEM2(12,40);
//-
SetDword((0x0057491A + 1), 0x7758);
SetDword((0x0057491F + 1), 0x7758);
//
SetDword((0x00574F2E + 1), 0x7759);
SetDword((0x00574F33 + 1), 0x7759);
//
SetDword((0x00574FFC + 1), 0x7759);
SetDword((0x00575001 + 1), 0x7759);
//-
break;
case ITEM2(12,49):
case ITEM2(12,135):
Object->WingsSlot = ITEM2(12,49); //capa rage fighter

SetDword((0x0057491A + 1), 0x07EE0);
SetDword((0x0057491F + 1), 0x07EE0);

break;
case ITEM2(12,50): //capa 2da rage fighter

Object->WingsSlot = ITEM2(12,50);
//-
SetDword((0x0057491A + 1), 0x07EE2);
SetDword((0x0057491F + 1), 0x07EE2);
//
SetDword((0x00574F2E + 1), 0x07EE1);
SetDword((0x00574F33 + 1), 0x07EE1);
//
SetDword((0x00574FFC + 1), 0x07EE1);
SetDword((0x00575001 + 1), 0x07EE1);
//-
break;
/*}

if(gCloak.isCloak(Object->WingsSlot - 1171)){

CUSTOMCLOAK_DATA* CapeModel = gCloak.GetInfoByItem(Object->WingsSlot - 1171);

int ItemGroup = CapeModel->ItemIndex / 512;

int ItemID = CapeModel->ItemIndex % 512;

Object->WingsSlot = ITEM2(ItemGroup, ItemID);

SetDword((0x0057491A + 1), (WORD)CapeModel->IndexCloak);
SetDword((0x0057491F + 1), (WORD)CapeModel->IndexCloak);

if(CapeModel->Mode == 1){
SetDword((0x00574F2E + 1), (WORD)CapeModel->IndexStrip);
SetDword((0x00574F33 + 1), (WORD)CapeModel->IndexStrip);
//
SetDword((0x00574FFC + 1), (WORD)CapeModel->IndexStrip);
SetDword((0x00575001 + 1), (WORD)CapeModel->IndexStrip);
}*/
}

pDrawViewPort(ObjectPointer, ObjectModel,  a3);
}


//--- carga tiras de las capas
__declspec(naked) void CapeA() // 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)
|| CapeEffectPointer == ITEM2(12,50)
|| gCloak.isCloakStrip(CapeEffectPointer - 1171))
{
_asm{Jmp Address1}
}
else
{
_asm{Jmp Address2}
}
}

//---- carga de la capa
__declspec(naked) void CapeB() //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) //2da capa dl
|| CapeEffectPointer == ITEM2(12,49) //-- 1ra capa rf
|| CapeEffectPointer == ITEM2(12,50) //-- 2da capa rf
|| CapeEffectPointer == ITEM2(12,130)
|| CapeEffectPointer == ITEM2(12,135)
|| gCloak.isCloak(CapeEffectPointer - 1171))
{
_asm{Jmp Address1}
}
else
{
_asm{Jmp Address2}
}
}

__declspec(naked) void CapeE() //main allow
{
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) //-- capa 1 dl
|| gCloak.isCloak(CapeEffectPointer - 1171))
{
_asm{jmp Address1}
}
else
{
_asm{jmp Address2}
}
}

__declspec(naked) void CapeD() //allow play
{
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)
|| gCloak.isCloak(CapeEffectPointer - 1171))
{
_asm{jmp Address1}
}
else
{
_asm{jmp Address2}
}

}

__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)
|| gCloak.isCloak(CapeEffectPointer - 1171))
{
_asm{jmp Address1}
}
else
{
_asm{jmp Address2}
}
}


__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):
*(float *)(a1 + 264) = 0.0f;
            *(float *)(a1 + 96) = 0.2f;
*(float *)(a1 + 272) = 70.0f;
break;
}
}


void RefreshCapeUnEquip1(ObjectItem * lpItem)
{

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(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);
}

__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
}
}
/*
//esto puede ir pet.cpp los que usan pet custom desde aquí
ObjCreateBug gObjCreateBug = (ObjCreateBug)0x00501700;
ObjCreatePet gObjCreatePet = (ObjCreatePet)0x00835E40;

void gObjCreatePetEx(int ItemId)
{
int ItemSwitch = *(WORD*)ItemId;

int PetPreview = LODWORD(pPreviewPetThis) + 776;

if (gCustomPet2.CheckCustomPetByItem(ItemSwitch))
{
gObjCreateBug(ItemSwitch + 1171, PetPreview + 252, PetPreview, 0, 0);

} else if (gCloak.isCloak(ItemSwitch)||ItemSwitch == ITEM(13,30)
||ItemSwitch == ITEM(12,130)
||ItemSwitch == ITEM(12,135)){

pRefreshViewport(oUserPreviewStruct, oUserPreviewStruct + 776, 0);
}

gObjCreatePet(ItemId);
}
bool ResetPetPreviewEx(int ItemId)
{

bool Result;
// ----

if (ItemId)
Result = *(WORD*)ItemId == 0x1A00    //Angel
|| *(WORD*)ItemId == 0x1A01        //Satan
|| *(WORD*)ItemId == 0x1A02        //Unicorn
|| *(WORD*)ItemId == 0x1A03        //Dinorant
|| *(WORD*)ItemId == 0x1A04        //Dark Horse
|| *(WORD*)ItemId == 0x1A05        //Dark Raven
|| *(WORD*)ItemId == 0x1A25        //Fenrir     //
|| *(WORD*)ItemId == ITEM(13, 64)
|| *(WORD*)ItemId == ITEM(13, 65)
|| *(WORD*)ItemId == ITEM(13, 67)
|| *(WORD*)ItemId == ITEM(13, 80)
|| *(WORD*)ItemId == ITEM(13, 106)
|| *(WORD*)ItemId == ITEM(13, 123)
|| *(WORD*)ItemId >= ITEM(13, 200)
&& *(WORD*)ItemId <= ITEM(13, 410)
|| gCloak.isCloak(*(WORD*)ItemId)
|| *(WORD*)ItemId == ITEM(13,30)
|| *(WORD*)ItemId == ITEM(12,130)
|| *(WORD*)ItemId == ITEM(12,135);
else
Result = 0;
return Result;
}*/
//hasta aquí


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(0x00574667,20,ASM::NOP);
SetOp(0x00574667,(LPVOID)CapeD,ASM::JMP);
//-
SetRange(0x00574F13,10,ASM::NOP);
SetOp(0x00574F13,(LPVOID)CapeA,ASM::JMP);
//-
SetRange(0x005748FF,10,ASM::NOP);
SetOp(0x005748FF,(LPVOID)CapeB,ASM::JMP);
//-
SetRange(0x00576058,10,ASM::NOP);
SetOp(0x00576058,(LPVOID)CapeE,ASM::JMP);
//-
SetRange(0x005FAD70,7,ASM::NOP);
SetOp(0x005FAD70,(LPVOID)HideCape,ASM::JMP);
//-
SetRange(0x00574D3D,13,ASM::NOP);
SetOp(0x00574D3D,(LPVOID)AllowMGCape,ASM::JMP);
//--
SetCompleteHook(0xE8,0x00833BE7,&RefreshCapeUnEquip1);
SetCompleteHook(0xE8,0x007DD304,&RefreshCapeUnEquip2);
SetCompleteHook(0xE8,0x00833B08,&RefreshCapeUnEquip2);
//-
//SetRange(0x005CAFCB,7,ASM::NOP);
//SetOp(0x005CAFCB,(LPVOID)CapeInventoryPos,ASM::JMP);


//esto también iría en custompet
// SetOp((LPVOID)0x00836481, (LPVOID)ResetPetPreviewEx, ASM::CALL);
// SetOp((LPVOID)0x007DD304, (LPVOID)gObjCreatePetEx, ASM::CALL);
// SetOp((LPVOID)0x00833B08, (LPVOID)gObjCreatePetEx, ASM::CALL);
//hasta aquí
}

CustomCloak.h
Code: [Select]
#pragma once

#define MAX_CUSTOM_CLOAK 100

struct CUSTOMCLOAK_DATA
{
int Index;
int ItemIndex;
int Mode;
int IndexCloak;
char CloakModel[150];
int IndexStrip;
char StripModel[150];


};

class cCloak
{
public:
cCloak();
virtual ~cCloak();
void Init();
void Load(CUSTOMCLOAK_DATA* info);
void SetInfo(CUSTOMCLOAK_DATA info);
CUSTOMCLOAK_DATA* GetInfoByID(int index);
CUSTOMCLOAK_DATA* GetInfoByItem(int ItemIndex);
bool isCloak(int ItemIndex);
bool isCloakStrip(int ItemIndex);
public:
CUSTOMCLOAK_DATA m_CustomCloakInfo[MAX_CUSTOM_CLOAK];
}; extern cCloak gCloak;


CustomCloak.cpp
Code: [Select]
#include "stdafx.h"
#include "CustomCloak.h"
#include "Item.h"



cCloak gCloak;

cCloak::cCloak() // OK
{
this->Init();
}

cCloak::~cCloak() // OK
{

}

void cCloak::Init() // OK
{
for(int n=0;n < MAX_CUSTOM_CLOAK;n++)
{
this->m_CustomCloakInfo[n].Index = -1;
}
}

void cCloak::Load(CUSTOMCLOAK_DATA* info) // OK
{
for(int n=0;n < MAX_CUSTOM_CLOAK;n++)
{
this->SetInfo(info[n]);
}
}

void cCloak::SetInfo(CUSTOMCLOAK_DATA info) // OK
{
if(info.Index < 0 || info.Index >= MAX_CUSTOM_CLOAK)
{
return;
}

this->m_CustomCloakInfo[info.Index] = info;
}

CUSTOMCLOAK_DATA* cCloak::GetInfoByID(int index)
{
for (int i=0;i<MAX_CUSTOM_CLOAK; i++)
{
if (this->m_CustomCloakInfo[i].Index == -1)
{
continue;
}

if (i == index)
{
return &this->m_CustomCloakInfo[i];
}
}

return 0;
}

CUSTOMCLOAK_DATA* cCloak::GetInfoByItem(int ItemIndex) // OK
{
for(int n=0;n < MAX_CUSTOM_CLOAK;n++)
{
CUSTOMCLOAK_DATA* lpInfo = this->GetInfoByID(n);

if(lpInfo == 0)
{
continue;
}

if(lpInfo->ItemIndex == ItemIndex)
{
return lpInfo;
}
}

return 0;
}

bool cCloak::isCloakStrip(int ItemIndex) // OK
{
for (int i = 0 ; i < 10 ; i++)

{
if (ItemIndex == this->m_CustomCloakInfo[i].ItemIndex && this->m_CustomCloakInfo[i].Mode == 1)
{
return true;
}
}
return false;
}


bool cCloak::isCloak(int Index)
{
for (int i=0;i<MAX_CUSTOM_CLOAK; i++)
{
if (this->m_CustomCloakInfo[i].Index == -1)
{
continue;
}

if (Index == this->m_CustomCloakInfo[i].ItemIndex)
{
return true;
}
}
return false;
}

interface.cpp
poner dentro  de void Interface::LoadImages()
Code: [Select]
for(int n=0;n < MAX_CUSTOM_CLOAK;n++)
{
if(gCloak.m_CustomCloakInfo[n].ItemIndex != 0)
{
pLoadImage (gCloak.m_CustomCloakInfo[n].CloakModel, gCloak.m_CustomCloakInfo[n].IndexCloak, GL_LINEAR, GL_REPEAT, 1, 0 );

if( strcmp(gCloak.m_CustomCloakInfo[n].StripModel, "") != 0 )

pLoadImage (gCloak.m_CustomCloakInfo[n].StripModel, gCloak.m_CustomCloakInfo[n].IndexStrip, GL_LINEAR, GL_REPEAT, 1, 0 );
}
}

Gracias:


Offline erickmalfoy #54 Posteado: July 04, 2020, 12:56:33 AM

  • 0 puntos por ventas
  • *
  • Rank: Puto amo
  • Posts: 557
  • Gracias recibida: 314
  • ar
Alguien Comparte el Getinfo Please :( please


Offline Llalex #55 Posteado: July 04, 2020, 02:09:28 AM

  • 0 puntos por ventas
  • *
  • Rank: Puto amo
  • Posts: 337
  • Gracias recibida: 374
  • ve
Hola chicos estube haciendo el llamado del GetMainInfo para cargar las texturas desde un txt como los custom que ya conocemos, aclaro que no esta del todo funcional solo faltaria la carga de las texturas y validacion para que cargue capa mas tiras y otro que solo seria solo capa, me rompi la cabeza con esto que para algunos puede ser sencillo comparto todo lo que hice para que algun heroe sin capa complete el trabajo y pueda compartir con toda la comunidad. muchos estaremos agradecidos.
postada: no soy coder soy una persona que esta aprendiendo c++

===GetMainInfo==
CustomCloak.h
Code: [Select]
#pragma once

#define MAX_CUSTOM_CLOAK 100

struct CUSTOMCLOAK_DATA
{
int Index;
int ItemIndex;
int Mode;
int IndexCloak;
char CloakModel[150];
int IndexStrip;
char StripModel[150];

};

class CCustomCloak
{
public:
CCustomCloak();
virtual ~CCustomCloak();
void Init();
void Load(char* path);
void SetInfo(CUSTOMCLOAK_DATA info);
public:
CUSTOMCLOAK_DATA m_CustomCloakInfo[MAX_CUSTOM_CLOAK];
};

extern CCustomCloak gCustomCloak;

CustomCloak.cpp
Code: [Select]
#include "stdafx.h"
#include "CustomCloak.h"
#include "MemScript.h"

CCustomCloak gCustomCloak;

CCustomCloak::CCustomCloak() // OK
{
this->Init();
}

CCustomCloak::~CCustomCloak() // OK
{

}

void CCustomCloak::Init() // OK
{
for(int n=0;n < MAX_CUSTOM_CLOAK;n++)
{
this->m_CustomCloakInfo[n].Index = -1;
}
}

void CCustomCloak::Load(char* path)
{
CMemScript* lpMemScript = new CMemScript;

if(lpMemScript == 0)
{
printf(MEM_SCRIPT_ALLOC_ERROR,path);
return;
}

if(lpMemScript->SetBuffer(path) == 0)
{
printf(lpMemScript->GetLastError());
delete lpMemScript;
return;
}

this->Init();

try
{
while(true)
{
if(lpMemScript->GetToken() == TOKEN_END)
{
break;
}

if(strcmp("end",lpMemScript->GetString()) == 0)
{
break;
}

CUSTOMCLOAK_DATA info;

memset(&info,0,sizeof(info));

static int CustomCloakIndexCount = 0;

info.Index = CustomCloakIndexCount++;

info.ItemIndex = lpMemScript->GetNumber();

info.Mode  = lpMemScript->GetAsNumber();

info.IndexCloak = lpMemScript->GetAsNumber();

strcpy_s(info.CloakModel,lpMemScript->GetAsString());

info.IndexStrip = lpMemScript->GetAsNumber();

strcpy_s(info.StripModel,lpMemScript->GetAsString());


this->SetInfo(info);
}
}
catch(...)
{
printf(lpMemScript->GetLastError());
}

delete lpMemScript;
}

void CCustomCloak::SetInfo(CUSTOMCLOAK_DATA info) // OK
{
if(info.Index < 0 || info.Index >= MAX_CUSTOM_CLOAK)
{
return;
}

this->m_CustomCloakInfo[info.Index] = info;
}

===Main==
cape.h
Code: [Select]
#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)) 0x8363D0)
#define pRefreshCape2                        ((void(__thiscall*)(ObjectItem * lpItem)) 0x835E40)

#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;

cape.cpp
Code: [Select]
#include "stdafx.h"
#include "Cape.h"
#include "Defines.h"
#include "Object.h"
#include "Interface.h"
#include "Util.h"
#include "Item.h"
#include "CustomCloak.h"
#include "TMemory.h"
//#include "CustomPet.h"
//#include "PetHook.h"
//#include "Pet.h"
//#include "Import.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);

//for ( int n = 0; n < gCloak.m_CustomCloakInfo.size(); ++n ) {
for(int n=0;n < MAX_CUSTOM_CLOAK;n++)
if(Object->WingsSlot == ITEM2(gCloak.m_CustomCloakInfo[n].Index,gCloak.m_CustomCloakInfo[n].ItemIndex)){
Object->WingsSlot = ITEM2(gCloak.m_CustomCloakInfo[n].Index,gCloak.m_CustomCloakInfo[n].ItemIndex);

if(gCloak.m_CustomCloakInfo[n].Mode == 0){
SetDword((0x0057491A + 1), gCloak.m_CustomCloakInfo[n].IndexCloak);
SetDword((0x0057491F + 1), gCloak.m_CustomCloakInfo[n].IndexCloak);
//
if( strcmp(gCloak.m_CustomCloakInfo[n].StripModel, "") != 0 )
{
SetDword((0x00574F2E + 1), gCloak.m_CustomCloakInfo[n].IndexStrip);
SetDword((0x00574F33 + 1), gCloak.m_CustomCloakInfo[n].IndexStrip);
//
SetDword((0x00574FFC + 1), gCloak.m_CustomCloakInfo[n].IndexStrip);
SetDword((0x00575001 + 1), gCloak.m_CustomCloakInfo[n].IndexStrip);
}
else
{
SetDword((0x00574F2E + 1), 0x7884);
SetDword((0x00574F33 + 1), 0x7884);
//
SetDword((0x00574FFC + 1), 0x7884);
SetDword((0x00575001 + 1), 0x7884);
}
}
else{

SetDword((0x005751EB + 1), gCloak.m_CustomCloakInfo[n].IndexCloak);
SetDword((0x005751F0 + 1), gCloak.m_CustomCloakInfo[n].IndexCloak);
//
if( strcmp(gCloak.m_CustomCloakInfo[n].StripModel, "") != 0 )
{
SetDword((0x0057562C + 1), gCloak.m_CustomCloakInfo[n].IndexStrip);
SetDword((0x00575631 + 1), gCloak.m_CustomCloakInfo[n].IndexStrip);
//
SetDword((0x005756EE + 1), gCloak.m_CustomCloakInfo[n].IndexStrip);
SetDword((0x005756F3 + 1), gCloak.m_CustomCloakInfo[n].IndexStrip);
/*}else
{
SetDword((0x0057562C + 1), 0x7884);
SetDword((0x00575631 + 1), 0x7884);
//
SetDword((0x005756EE + 1), 0x7884);
SetDword((0x005756F3 + 1), 0x7884);*/
}
}
}


switch(Object->WingsSlot)
{
case ITEM2(12,130):
case ITEM2(13,30):

Object->WingsSlot = ITEM2(13,30);

SetDword((0x0057491A + 1), 0x7756);
SetDword((0x0057491F + 1), 0x7756);

break;
case ITEM2(12,40):

Object->WingsSlot = ITEM2(12,40);
//-
SetDword((0x0057491A + 1), 0x7758);
SetDword((0x0057491F + 1), 0x7758);
//
SetDword((0x00574F2E + 1), 0x7759);
SetDword((0x00574F33 + 1), 0x7759);
//
SetDword((0x00574FFC + 1), 0x7759);
SetDword((0x00575001 + 1), 0x7759);
//-
break;
case ITEM2(12,49):
case ITEM2(12,135):
Object->WingsSlot = ITEM2(12,49); //capa rage fighter

SetDword((0x0057491A + 1), 0x07EE0);
SetDword((0x0057491F + 1), 0x07EE0);

break;
case ITEM2(12,50): //capa 2da rage fighter

Object->WingsSlot = ITEM2(12,50);
//-
SetDword((0x0057491A + 1), 0x07EE2);
SetDword((0x0057491F + 1), 0x07EE2);
//
SetDword((0x00574F2E + 1), 0x07EE1);
SetDword((0x00574F33 + 1), 0x07EE1);
//
SetDword((0x00574FFC + 1), 0x07EE1);
SetDword((0x00575001 + 1), 0x07EE1);
//-
break;
/*}

if(gCloak.isCloak(Object->WingsSlot - 1171)){

CUSTOMCLOAK_DATA* CapeModel = gCloak.GetInfoByItem(Object->WingsSlot - 1171);

int ItemGroup = CapeModel->ItemIndex / 512;

int ItemID = CapeModel->ItemIndex % 512;

Object->WingsSlot = ITEM2(ItemGroup, ItemID);

SetDword((0x0057491A + 1), (WORD)CapeModel->IndexCloak);
SetDword((0x0057491F + 1), (WORD)CapeModel->IndexCloak);

if(CapeModel->Mode == 1){
SetDword((0x00574F2E + 1), (WORD)CapeModel->IndexStrip);
SetDword((0x00574F33 + 1), (WORD)CapeModel->IndexStrip);
//
SetDword((0x00574FFC + 1), (WORD)CapeModel->IndexStrip);
SetDword((0x00575001 + 1), (WORD)CapeModel->IndexStrip);
}*/
}

pDrawViewPort(ObjectPointer, ObjectModel,  a3);
}


//--- carga tiras de las capas
__declspec(naked) void CapeA() // 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)
|| CapeEffectPointer == ITEM2(12,50)
|| gCloak.isCloakStrip(CapeEffectPointer - 1171))
{
_asm{Jmp Address1}
}
else
{
_asm{Jmp Address2}
}
}

//---- carga de la capa
__declspec(naked) void CapeB() //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) //2da capa dl
|| CapeEffectPointer == ITEM2(12,49) //-- 1ra capa rf
|| CapeEffectPointer == ITEM2(12,50) //-- 2da capa rf
|| CapeEffectPointer == ITEM2(12,130)
|| CapeEffectPointer == ITEM2(12,135)
|| gCloak.isCloak(CapeEffectPointer - 1171))
{
_asm{Jmp Address1}
}
else
{
_asm{Jmp Address2}
}
}

__declspec(naked) void CapeE() //main allow
{
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) //-- capa 1 dl
|| gCloak.isCloak(CapeEffectPointer - 1171))
{
_asm{jmp Address1}
}
else
{
_asm{jmp Address2}
}
}

__declspec(naked) void CapeD() //allow play
{
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)
|| gCloak.isCloak(CapeEffectPointer - 1171))
{
_asm{jmp Address1}
}
else
{
_asm{jmp Address2}
}

}

__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)
|| gCloak.isCloak(CapeEffectPointer - 1171))
{
_asm{jmp Address1}
}
else
{
_asm{jmp Address2}
}
}


__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):
*(float *)(a1 + 264) = 0.0f;
            *(float *)(a1 + 96) = 0.2f;
*(float *)(a1 + 272) = 70.0f;
break;
}
}


void RefreshCapeUnEquip1(ObjectItem * lpItem)
{

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(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);
}

__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
}
}
/*
//esto puede ir pet.cpp los que usan pet custom desde aquí
ObjCreateBug gObjCreateBug = (ObjCreateBug)0x00501700;
ObjCreatePet gObjCreatePet = (ObjCreatePet)0x00835E40;

void gObjCreatePetEx(int ItemId)
{
int ItemSwitch = *(WORD*)ItemId;

int PetPreview = LODWORD(pPreviewPetThis) + 776;

if (gCustomPet2.CheckCustomPetByItem(ItemSwitch))
{
gObjCreateBug(ItemSwitch + 1171, PetPreview + 252, PetPreview, 0, 0);

} else if (gCloak.isCloak(ItemSwitch)||ItemSwitch == ITEM(13,30)
||ItemSwitch == ITEM(12,130)
||ItemSwitch == ITEM(12,135)){

pRefreshViewport(oUserPreviewStruct, oUserPreviewStruct + 776, 0);
}

gObjCreatePet(ItemId);
}
bool ResetPetPreviewEx(int ItemId)
{

bool Result;
// ----

if (ItemId)
Result = *(WORD*)ItemId == 0x1A00    //Angel
|| *(WORD*)ItemId == 0x1A01        //Satan
|| *(WORD*)ItemId == 0x1A02        //Unicorn
|| *(WORD*)ItemId == 0x1A03        //Dinorant
|| *(WORD*)ItemId == 0x1A04        //Dark Horse
|| *(WORD*)ItemId == 0x1A05        //Dark Raven
|| *(WORD*)ItemId == 0x1A25        //Fenrir     //
|| *(WORD*)ItemId == ITEM(13, 64)
|| *(WORD*)ItemId == ITEM(13, 65)
|| *(WORD*)ItemId == ITEM(13, 67)
|| *(WORD*)ItemId == ITEM(13, 80)
|| *(WORD*)ItemId == ITEM(13, 106)
|| *(WORD*)ItemId == ITEM(13, 123)
|| *(WORD*)ItemId >= ITEM(13, 200)
&& *(WORD*)ItemId <= ITEM(13, 410)
|| gCloak.isCloak(*(WORD*)ItemId)
|| *(WORD*)ItemId == ITEM(13,30)
|| *(WORD*)ItemId == ITEM(12,130)
|| *(WORD*)ItemId == ITEM(12,135);
else
Result = 0;
return Result;
}*/
//hasta aquí


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(0x00574667,20,ASM::NOP);
SetOp(0x00574667,(LPVOID)CapeD,ASM::JMP);
//-
SetRange(0x00574F13,10,ASM::NOP);
SetOp(0x00574F13,(LPVOID)CapeA,ASM::JMP);
//-
SetRange(0x005748FF,10,ASM::NOP);
SetOp(0x005748FF,(LPVOID)CapeB,ASM::JMP);
//-
SetRange(0x00576058,10,ASM::NOP);
SetOp(0x00576058,(LPVOID)CapeE,ASM::JMP);
//-
SetRange(0x005FAD70,7,ASM::NOP);
SetOp(0x005FAD70,(LPVOID)HideCape,ASM::JMP);
//-
SetRange(0x00574D3D,13,ASM::NOP);
SetOp(0x00574D3D,(LPVOID)AllowMGCape,ASM::JMP);
//--
SetCompleteHook(0xE8,0x00833BE7,&RefreshCapeUnEquip1);
SetCompleteHook(0xE8,0x007DD304,&RefreshCapeUnEquip2);
SetCompleteHook(0xE8,0x00833B08,&RefreshCapeUnEquip2);
//-
//SetRange(0x005CAFCB,7,ASM::NOP);
//SetOp(0x005CAFCB,(LPVOID)CapeInventoryPos,ASM::JMP);


//esto también iría en custompet
// SetOp((LPVOID)0x00836481, (LPVOID)ResetPetPreviewEx, ASM::CALL);
// SetOp((LPVOID)0x007DD304, (LPVOID)gObjCreatePetEx, ASM::CALL);
// SetOp((LPVOID)0x00833B08, (LPVOID)gObjCreatePetEx, ASM::CALL);
//hasta aquí
}

CustomCloak.h
Code: [Select]
#pragma once

#define MAX_CUSTOM_CLOAK 100

struct CUSTOMCLOAK_DATA
{
int Index;
int ItemIndex;
int Mode;
int IndexCloak;
char CloakModel[150];
int IndexStrip;
char StripModel[150];


};

class cCloak
{
public:
cCloak();
virtual ~cCloak();
void Init();
void Load(CUSTOMCLOAK_DATA* info);
void SetInfo(CUSTOMCLOAK_DATA info);
CUSTOMCLOAK_DATA* GetInfoByID(int index);
CUSTOMCLOAK_DATA* GetInfoByItem(int ItemIndex);
bool isCloak(int ItemIndex);
bool isCloakStrip(int ItemIndex);
public:
CUSTOMCLOAK_DATA m_CustomCloakInfo[MAX_CUSTOM_CLOAK];
}; extern cCloak gCloak;


CustomCloak.cpp
Code: [Select]
#include "stdafx.h"
#include "CustomCloak.h"
#include "Item.h"



cCloak gCloak;

cCloak::cCloak() // OK
{
this->Init();
}

cCloak::~cCloak() // OK
{

}

void cCloak::Init() // OK
{
for(int n=0;n < MAX_CUSTOM_CLOAK;n++)
{
this->m_CustomCloakInfo[n].Index = -1;
}
}

void cCloak::Load(CUSTOMCLOAK_DATA* info) // OK
{
for(int n=0;n < MAX_CUSTOM_CLOAK;n++)
{
this->SetInfo(info[n]);
}
}

void cCloak::SetInfo(CUSTOMCLOAK_DATA info) // OK
{
if(info.Index < 0 || info.Index >= MAX_CUSTOM_CLOAK)
{
return;
}

this->m_CustomCloakInfo[info.Index] = info;
}

CUSTOMCLOAK_DATA* cCloak::GetInfoByID(int index)
{
for (int i=0;i<MAX_CUSTOM_CLOAK; i++)
{
if (this->m_CustomCloakInfo[i].Index == -1)
{
continue;
}

if (i == index)
{
return &this->m_CustomCloakInfo[i];
}
}

return 0;
}

CUSTOMCLOAK_DATA* cCloak::GetInfoByItem(int ItemIndex) // OK
{
for(int n=0;n < MAX_CUSTOM_CLOAK;n++)
{
CUSTOMCLOAK_DATA* lpInfo = this->GetInfoByID(n);

if(lpInfo == 0)
{
continue;
}

if(lpInfo->ItemIndex == ItemIndex)
{
return lpInfo;
}
}

return 0;
}

bool cCloak::isCloakStrip(int ItemIndex) // OK
{
for (int i = 0 ; i < 10 ; i++)

{
if (ItemIndex == this->m_CustomCloakInfo[i].ItemIndex && this->m_CustomCloakInfo[i].Mode == 1)
{
return true;
}
}
return false;
}


bool cCloak::isCloak(int Index)
{
for (int i=0;i<MAX_CUSTOM_CLOAK; i++)
{
if (this->m_CustomCloakInfo[i].Index == -1)
{
continue;
}

if (Index == this->m_CustomCloakInfo[i].ItemIndex)
{
return true;
}
}
return false;
}

interface.cpp
poner dentro  de void Interface::LoadImages()
Code: [Select]
for(int n=0;n < MAX_CUSTOM_CLOAK;n++)
{
if(gCloak.m_CustomCloakInfo[n].ItemIndex != 0)
{
pLoadImage (gCloak.m_CustomCloakInfo[n].CloakModel, gCloak.m_CustomCloakInfo[n].IndexCloak, GL_LINEAR, GL_REPEAT, 1, 0 );

if( strcmp(gCloak.m_CustomCloakInfo[n].StripModel, "") != 0 )

pLoadImage (gCloak.m_CustomCloakInfo[n].StripModel, gCloak.m_CustomCloakInfo[n].IndexStrip, GL_LINEAR, GL_REPEAT, 1, 0 );
}
}

Gracias por el aporte, podrias poner un ejemplo de como seria el customcloak.txt del getinfo?


Offline JavixFer #56 Posteado: July 04, 2020, 08:29:13 AM

  • +1 puntos por ventas
  • *
  • Rank: Puto amo
  • Posts: 476
  • Gracias recibida: 3974
  • bo
Hola chicos estube haciendo el llamado del GetMainInfo para cargar las texturas desde un txt como los custom que ya conocemos, aclaro que no esta del todo funcional solo faltaria la carga de las texturas y validacion para que cargue capa mas tiras y otro que solo seria solo capa, me rompi la cabeza con esto que para algunos puede ser sencillo comparto todo lo que hice para que algun heroe sin capa complete el trabajo y pueda compartir con toda la comunidad. muchos estaremos agradecidos.
postada: no soy coder soy una persona que esta aprendiendo c++

===GetMainInfo==
CustomCloak.h
Code: [Select]
#pragma once

#define MAX_CUSTOM_CLOAK 100

struct CUSTOMCLOAK_DATA
{
int Index;
int ItemIndex;
int Mode;
int IndexCloak;
char CloakModel[150];
int IndexStrip;
char StripModel[150];

};

class CCustomCloak
{
public:
CCustomCloak();
virtual ~CCustomCloak();
void Init();
void Load(char* path);
void SetInfo(CUSTOMCLOAK_DATA info);
public:
CUSTOMCLOAK_DATA m_CustomCloakInfo[MAX_CUSTOM_CLOAK];
};

extern CCustomCloak gCustomCloak;

CustomCloak.cpp
Code: [Select]
#include "stdafx.h"
#include "CustomCloak.h"
#include "MemScript.h"

CCustomCloak gCustomCloak;

CCustomCloak::CCustomCloak() // OK
{
this->Init();
}

CCustomCloak::~CCustomCloak() // OK
{

}

void CCustomCloak::Init() // OK
{
for(int n=0;n < MAX_CUSTOM_CLOAK;n++)
{
this->m_CustomCloakInfo[n].Index = -1;
}
}

void CCustomCloak::Load(char* path)
{
CMemScript* lpMemScript = new CMemScript;

if(lpMemScript == 0)
{
printf(MEM_SCRIPT_ALLOC_ERROR,path);
return;
}

if(lpMemScript->SetBuffer(path) == 0)
{
printf(lpMemScript->GetLastError());
delete lpMemScript;
return;
}

this->Init();

try
{
while(true)
{
if(lpMemScript->GetToken() == TOKEN_END)
{
break;
}

if(strcmp("end",lpMemScript->GetString()) == 0)
{
break;
}

CUSTOMCLOAK_DATA info;

memset(&info,0,sizeof(info));

static int CustomCloakIndexCount = 0;

info.Index = CustomCloakIndexCount++;

info.ItemIndex = lpMemScript->GetNumber();

info.Mode  = lpMemScript->GetAsNumber();

info.IndexCloak = lpMemScript->GetAsNumber();

strcpy_s(info.CloakModel,lpMemScript->GetAsString());

info.IndexStrip = lpMemScript->GetAsNumber();

strcpy_s(info.StripModel,lpMemScript->GetAsString());


this->SetInfo(info);
}
}
catch(...)
{
printf(lpMemScript->GetLastError());
}

delete lpMemScript;
}

void CCustomCloak::SetInfo(CUSTOMCLOAK_DATA info) // OK
{
if(info.Index < 0 || info.Index >= MAX_CUSTOM_CLOAK)
{
return;
}

this->m_CustomCloakInfo[info.Index] = info;
}

===Main==
cape.h
Code: [Select]
#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)) 0x8363D0)
#define pRefreshCape2                        ((void(__thiscall*)(ObjectItem * lpItem)) 0x835E40)

#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;

cape.cpp
Code: [Select]
#include "stdafx.h"
#include "Cape.h"
#include "Defines.h"
#include "Object.h"
#include "Interface.h"
#include "Util.h"
#include "Item.h"
#include "CustomCloak.h"
#include "TMemory.h"
//#include "CustomPet.h"
//#include "PetHook.h"
//#include "Pet.h"
//#include "Import.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);

//for ( int n = 0; n < gCloak.m_CustomCloakInfo.size(); ++n ) {
for(int n=0;n < MAX_CUSTOM_CLOAK;n++)
if(Object->WingsSlot == ITEM2(gCloak.m_CustomCloakInfo[n].Index,gCloak.m_CustomCloakInfo[n].ItemIndex)){
Object->WingsSlot = ITEM2(gCloak.m_CustomCloakInfo[n].Index,gCloak.m_CustomCloakInfo[n].ItemIndex);

if(gCloak.m_CustomCloakInfo[n].Mode == 0){
SetDword((0x0057491A + 1), gCloak.m_CustomCloakInfo[n].IndexCloak);
SetDword((0x0057491F + 1), gCloak.m_CustomCloakInfo[n].IndexCloak);
//
if( strcmp(gCloak.m_CustomCloakInfo[n].StripModel, "") != 0 )
{
SetDword((0x00574F2E + 1), gCloak.m_CustomCloakInfo[n].IndexStrip);
SetDword((0x00574F33 + 1), gCloak.m_CustomCloakInfo[n].IndexStrip);
//
SetDword((0x00574FFC + 1), gCloak.m_CustomCloakInfo[n].IndexStrip);
SetDword((0x00575001 + 1), gCloak.m_CustomCloakInfo[n].IndexStrip);
}
else
{
SetDword((0x00574F2E + 1), 0x7884);
SetDword((0x00574F33 + 1), 0x7884);
//
SetDword((0x00574FFC + 1), 0x7884);
SetDword((0x00575001 + 1), 0x7884);
}
}
else{

SetDword((0x005751EB + 1), gCloak.m_CustomCloakInfo[n].IndexCloak);
SetDword((0x005751F0 + 1), gCloak.m_CustomCloakInfo[n].IndexCloak);
//
if( strcmp(gCloak.m_CustomCloakInfo[n].StripModel, "") != 0 )
{
SetDword((0x0057562C + 1), gCloak.m_CustomCloakInfo[n].IndexStrip);
SetDword((0x00575631 + 1), gCloak.m_CustomCloakInfo[n].IndexStrip);
//
SetDword((0x005756EE + 1), gCloak.m_CustomCloakInfo[n].IndexStrip);
SetDword((0x005756F3 + 1), gCloak.m_CustomCloakInfo[n].IndexStrip);
/*}else
{
SetDword((0x0057562C + 1), 0x7884);
SetDword((0x00575631 + 1), 0x7884);
//
SetDword((0x005756EE + 1), 0x7884);
SetDword((0x005756F3 + 1), 0x7884);*/
}
}
}


switch(Object->WingsSlot)
{
case ITEM2(12,130):
case ITEM2(13,30):

Object->WingsSlot = ITEM2(13,30);

SetDword((0x0057491A + 1), 0x7756);
SetDword((0x0057491F + 1), 0x7756);

break;
case ITEM2(12,40):

Object->WingsSlot = ITEM2(12,40);
//-
SetDword((0x0057491A + 1), 0x7758);
SetDword((0x0057491F + 1), 0x7758);
//
SetDword((0x00574F2E + 1), 0x7759);
SetDword((0x00574F33 + 1), 0x7759);
//
SetDword((0x00574FFC + 1), 0x7759);
SetDword((0x00575001 + 1), 0x7759);
//-
break;
case ITEM2(12,49):
case ITEM2(12,135):
Object->WingsSlot = ITEM2(12,49); //capa rage fighter

SetDword((0x0057491A + 1), 0x07EE0);
SetDword((0x0057491F + 1), 0x07EE0);

break;
case ITEM2(12,50): //capa 2da rage fighter

Object->WingsSlot = ITEM2(12,50);
//-
SetDword((0x0057491A + 1), 0x07EE2);
SetDword((0x0057491F + 1), 0x07EE2);
//
SetDword((0x00574F2E + 1), 0x07EE1);
SetDword((0x00574F33 + 1), 0x07EE1);
//
SetDword((0x00574FFC + 1), 0x07EE1);
SetDword((0x00575001 + 1), 0x07EE1);
//-
break;
/*}

if(gCloak.isCloak(Object->WingsSlot - 1171)){

CUSTOMCLOAK_DATA* CapeModel = gCloak.GetInfoByItem(Object->WingsSlot - 1171);

int ItemGroup = CapeModel->ItemIndex / 512;

int ItemID = CapeModel->ItemIndex % 512;

Object->WingsSlot = ITEM2(ItemGroup, ItemID);

SetDword((0x0057491A + 1), (WORD)CapeModel->IndexCloak);
SetDword((0x0057491F + 1), (WORD)CapeModel->IndexCloak);

if(CapeModel->Mode == 1){
SetDword((0x00574F2E + 1), (WORD)CapeModel->IndexStrip);
SetDword((0x00574F33 + 1), (WORD)CapeModel->IndexStrip);
//
SetDword((0x00574FFC + 1), (WORD)CapeModel->IndexStrip);
SetDword((0x00575001 + 1), (WORD)CapeModel->IndexStrip);
}*/
}

pDrawViewPort(ObjectPointer, ObjectModel,  a3);
}


//--- carga tiras de las capas
__declspec(naked) void CapeA() // 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)
|| CapeEffectPointer == ITEM2(12,50)
|| gCloak.isCloakStrip(CapeEffectPointer - 1171))
{
_asm{Jmp Address1}
}
else
{
_asm{Jmp Address2}
}
}

//---- carga de la capa
__declspec(naked) void CapeB() //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) //2da capa dl
|| CapeEffectPointer == ITEM2(12,49) //-- 1ra capa rf
|| CapeEffectPointer == ITEM2(12,50) //-- 2da capa rf
|| CapeEffectPointer == ITEM2(12,130)
|| CapeEffectPointer == ITEM2(12,135)
|| gCloak.isCloak(CapeEffectPointer - 1171))
{
_asm{Jmp Address1}
}
else
{
_asm{Jmp Address2}
}
}

__declspec(naked) void CapeE() //main allow
{
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) //-- capa 1 dl
|| gCloak.isCloak(CapeEffectPointer - 1171))
{
_asm{jmp Address1}
}
else
{
_asm{jmp Address2}
}
}

__declspec(naked) void CapeD() //allow play
{
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)
|| gCloak.isCloak(CapeEffectPointer - 1171))
{
_asm{jmp Address1}
}
else
{
_asm{jmp Address2}
}

}

__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)
|| gCloak.isCloak(CapeEffectPointer - 1171))
{
_asm{jmp Address1}
}
else
{
_asm{jmp Address2}
}
}


__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):
*(float *)(a1 + 264) = 0.0f;
            *(float *)(a1 + 96) = 0.2f;
*(float *)(a1 + 272) = 70.0f;
break;
}
}


void RefreshCapeUnEquip1(ObjectItem * lpItem)
{

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(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);
}

__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
}
}
/*
//esto puede ir pet.cpp los que usan pet custom desde aquí
ObjCreateBug gObjCreateBug = (ObjCreateBug)0x00501700;
ObjCreatePet gObjCreatePet = (ObjCreatePet)0x00835E40;

void gObjCreatePetEx(int ItemId)
{
int ItemSwitch = *(WORD*)ItemId;

int PetPreview = LODWORD(pPreviewPetThis) + 776;

if (gCustomPet2.CheckCustomPetByItem(ItemSwitch))
{
gObjCreateBug(ItemSwitch + 1171, PetPreview + 252, PetPreview, 0, 0);

} else if (gCloak.isCloak(ItemSwitch)||ItemSwitch == ITEM(13,30)
||ItemSwitch == ITEM(12,130)
||ItemSwitch == ITEM(12,135)){

pRefreshViewport(oUserPreviewStruct, oUserPreviewStruct + 776, 0);
}

gObjCreatePet(ItemId);
}
bool ResetPetPreviewEx(int ItemId)
{

bool Result;
// ----

if (ItemId)
Result = *(WORD*)ItemId == 0x1A00    //Angel
|| *(WORD*)ItemId == 0x1A01        //Satan
|| *(WORD*)ItemId == 0x1A02        //Unicorn
|| *(WORD*)ItemId == 0x1A03        //Dinorant
|| *(WORD*)ItemId == 0x1A04        //Dark Horse
|| *(WORD*)ItemId == 0x1A05        //Dark Raven
|| *(WORD*)ItemId == 0x1A25        //Fenrir     //
|| *(WORD*)ItemId == ITEM(13, 64)
|| *(WORD*)ItemId == ITEM(13, 65)
|| *(WORD*)ItemId == ITEM(13, 67)
|| *(WORD*)ItemId == ITEM(13, 80)
|| *(WORD*)ItemId == ITEM(13, 106)
|| *(WORD*)ItemId == ITEM(13, 123)
|| *(WORD*)ItemId >= ITEM(13, 200)
&& *(WORD*)ItemId <= ITEM(13, 410)
|| gCloak.isCloak(*(WORD*)ItemId)
|| *(WORD*)ItemId == ITEM(13,30)
|| *(WORD*)ItemId == ITEM(12,130)
|| *(WORD*)ItemId == ITEM(12,135);
else
Result = 0;
return Result;
}*/
//hasta aquí


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(0x00574667,20,ASM::NOP);
SetOp(0x00574667,(LPVOID)CapeD,ASM::JMP);
//-
SetRange(0x00574F13,10,ASM::NOP);
SetOp(0x00574F13,(LPVOID)CapeA,ASM::JMP);
//-
SetRange(0x005748FF,10,ASM::NOP);
SetOp(0x005748FF,(LPVOID)CapeB,ASM::JMP);
//-
SetRange(0x00576058,10,ASM::NOP);
SetOp(0x00576058,(LPVOID)CapeE,ASM::JMP);
//-
SetRange(0x005FAD70,7,ASM::NOP);
SetOp(0x005FAD70,(LPVOID)HideCape,ASM::JMP);
//-
SetRange(0x00574D3D,13,ASM::NOP);
SetOp(0x00574D3D,(LPVOID)AllowMGCape,ASM::JMP);
//--
SetCompleteHook(0xE8,0x00833BE7,&RefreshCapeUnEquip1);
SetCompleteHook(0xE8,0x007DD304,&RefreshCapeUnEquip2);
SetCompleteHook(0xE8,0x00833B08,&RefreshCapeUnEquip2);
//-
//SetRange(0x005CAFCB,7,ASM::NOP);
//SetOp(0x005CAFCB,(LPVOID)CapeInventoryPos,ASM::JMP);


//esto también iría en custompet
// SetOp((LPVOID)0x00836481, (LPVOID)ResetPetPreviewEx, ASM::CALL);
// SetOp((LPVOID)0x007DD304, (LPVOID)gObjCreatePetEx, ASM::CALL);
// SetOp((LPVOID)0x00833B08, (LPVOID)gObjCreatePetEx, ASM::CALL);
//hasta aquí
}

CustomCloak.h
Code: [Select]
#pragma once

#define MAX_CUSTOM_CLOAK 100

struct CUSTOMCLOAK_DATA
{
int Index;
int ItemIndex;
int Mode;
int IndexCloak;
char CloakModel[150];
int IndexStrip;
char StripModel[150];


};

class cCloak
{
public:
cCloak();
virtual ~cCloak();
void Init();
void Load(CUSTOMCLOAK_DATA* info);
void SetInfo(CUSTOMCLOAK_DATA info);
CUSTOMCLOAK_DATA* GetInfoByID(int index);
CUSTOMCLOAK_DATA* GetInfoByItem(int ItemIndex);
bool isCloak(int ItemIndex);
bool isCloakStrip(int ItemIndex);
public:
CUSTOMCLOAK_DATA m_CustomCloakInfo[MAX_CUSTOM_CLOAK];
}; extern cCloak gCloak;


CustomCloak.cpp
Code: [Select]
#include "stdafx.h"
#include "CustomCloak.h"
#include "Item.h"



cCloak gCloak;

cCloak::cCloak() // OK
{
this->Init();
}

cCloak::~cCloak() // OK
{

}

void cCloak::Init() // OK
{
for(int n=0;n < MAX_CUSTOM_CLOAK;n++)
{
this->m_CustomCloakInfo[n].Index = -1;
}
}

void cCloak::Load(CUSTOMCLOAK_DATA* info) // OK
{
for(int n=0;n < MAX_CUSTOM_CLOAK;n++)
{
this->SetInfo(info[n]);
}
}

void cCloak::SetInfo(CUSTOMCLOAK_DATA info) // OK
{
if(info.Index < 0 || info.Index >= MAX_CUSTOM_CLOAK)
{
return;
}

this->m_CustomCloakInfo[info.Index] = info;
}

CUSTOMCLOAK_DATA* cCloak::GetInfoByID(int index)
{
for (int i=0;i<MAX_CUSTOM_CLOAK; i++)
{
if (this->m_CustomCloakInfo[i].Index == -1)
{
continue;
}

if (i == index)
{
return &this->m_CustomCloakInfo[i];
}
}

return 0;
}

CUSTOMCLOAK_DATA* cCloak::GetInfoByItem(int ItemIndex) // OK
{
for(int n=0;n < MAX_CUSTOM_CLOAK;n++)
{
CUSTOMCLOAK_DATA* lpInfo = this->GetInfoByID(n);

if(lpInfo == 0)
{
continue;
}

if(lpInfo->ItemIndex == ItemIndex)
{
return lpInfo;
}
}

return 0;
}

bool cCloak::isCloakStrip(int ItemIndex) // OK
{
for (int i = 0 ; i < 10 ; i++)

{
if (ItemIndex == this->m_CustomCloakInfo[i].ItemIndex && this->m_CustomCloakInfo[i].Mode == 1)
{
return true;
}
}
return false;
}


bool cCloak::isCloak(int Index)
{
for (int i=0;i<MAX_CUSTOM_CLOAK; i++)
{
if (this->m_CustomCloakInfo[i].Index == -1)
{
continue;
}

if (Index == this->m_CustomCloakInfo[i].ItemIndex)
{
return true;
}
}
return false;
}

interface.cpp
poner dentro  de void Interface::LoadImages()
Code: [Select]
for(int n=0;n < MAX_CUSTOM_CLOAK;n++)
{
if(gCloak.m_CustomCloakInfo[n].ItemIndex != 0)
{
pLoadImage (gCloak.m_CustomCloakInfo[n].CloakModel, gCloak.m_CustomCloakInfo[n].IndexCloak, GL_LINEAR, GL_REPEAT, 1, 0 );

if( strcmp(gCloak.m_CustomCloakInfo[n].StripModel, "") != 0 )

pLoadImage (gCloak.m_CustomCloakInfo[n].StripModel, gCloak.m_CustomCloakInfo[n].IndexStrip, GL_LINEAR, GL_REPEAT, 1, 0 );
}
}

Gracias por el aporte, podrias poner un ejemplo de como seria el customcloak.txt del getinfo?

solo seria este que dejo takumi

Code: [Select]
//===============================================================================================================
// MasterCodex Season 6 - Mu Online
// Developer: MasterCodex [takumi12]
// Last review: 15.04.2020
//===============================================================================================================
// CustomCloak Config File
//===============================================================================================================
// Agregar archivos en: [Data/Item]
//===============================================================================================================
//ItemType Mode CloakName StripName
6304 1 "Item\\KF_darklordwing4de.tga" "Item\\KF_darklordwing4dd.tga"
6306 0 "Item\\KF_ragefighterwing4db.tga" " "
6299 1 "Item\\KF_Death_clka.tga" "Item\\KF_Death_clkb.tga"
6307 0 "Item\\KF_season_wing_periodc.tga" " "
6344 0 "Item\\growlancerwing4dc.tga" " "
//6298 0 "Item\\CK_adbone02.tga" " "
end


Offline Llalex #57 Posteado: July 04, 2020, 08:36:45 AM

  • 0 puntos por ventas
  • *
  • Rank: Puto amo
  • Posts: 337
  • Gracias recibida: 374
  • ve
Hola chicos estube haciendo el llamado del GetMainInfo para cargar las texturas desde un txt como los custom que ya conocemos, aclaro que no esta del todo funcional solo faltaria la carga de las texturas y validacion para que cargue capa mas tiras y otro que solo seria solo capa, me rompi la cabeza con esto que para algunos puede ser sencillo comparto todo lo que hice para que algun heroe sin capa complete el trabajo y pueda compartir con toda la comunidad. muchos estaremos agradecidos.
postada: no soy coder soy una persona que esta aprendiendo c++

===GetMainInfo==
CustomCloak.h
Code: [Select]
#pragma once

#define MAX_CUSTOM_CLOAK 100

struct CUSTOMCLOAK_DATA
{
int Index;
int ItemIndex;
int Mode;
int IndexCloak;
char CloakModel[150];
int IndexStrip;
char StripModel[150];

};

class CCustomCloak
{
public:
CCustomCloak();
virtual ~CCustomCloak();
void Init();
void Load(char* path);
void SetInfo(CUSTOMCLOAK_DATA info);
public:
CUSTOMCLOAK_DATA m_CustomCloakInfo[MAX_CUSTOM_CLOAK];
};

extern CCustomCloak gCustomCloak;

CustomCloak.cpp
Code: [Select]
#include "stdafx.h"
#include "CustomCloak.h"
#include "MemScript.h"

CCustomCloak gCustomCloak;

CCustomCloak::CCustomCloak() // OK
{
this->Init();
}

CCustomCloak::~CCustomCloak() // OK
{

}

void CCustomCloak::Init() // OK
{
for(int n=0;n < MAX_CUSTOM_CLOAK;n++)
{
this->m_CustomCloakInfo[n].Index = -1;
}
}

void CCustomCloak::Load(char* path)
{
CMemScript* lpMemScript = new CMemScript;

if(lpMemScript == 0)
{
printf(MEM_SCRIPT_ALLOC_ERROR,path);
return;
}

if(lpMemScript->SetBuffer(path) == 0)
{
printf(lpMemScript->GetLastError());
delete lpMemScript;
return;
}

this->Init();

try
{
while(true)
{
if(lpMemScript->GetToken() == TOKEN_END)
{
break;
}

if(strcmp("end",lpMemScript->GetString()) == 0)
{
break;
}

CUSTOMCLOAK_DATA info;

memset(&info,0,sizeof(info));

static int CustomCloakIndexCount = 0;

info.Index = CustomCloakIndexCount++;

info.ItemIndex = lpMemScript->GetNumber();

info.Mode  = lpMemScript->GetAsNumber();

info.IndexCloak = lpMemScript->GetAsNumber();

strcpy_s(info.CloakModel,lpMemScript->GetAsString());

info.IndexStrip = lpMemScript->GetAsNumber();

strcpy_s(info.StripModel,lpMemScript->GetAsString());


this->SetInfo(info);
}
}
catch(...)
{
printf(lpMemScript->GetLastError());
}

delete lpMemScript;
}

void CCustomCloak::SetInfo(CUSTOMCLOAK_DATA info) // OK
{
if(info.Index < 0 || info.Index >= MAX_CUSTOM_CLOAK)
{
return;
}

this->m_CustomCloakInfo[info.Index] = info;
}

===Main==
cape.h
Code: [Select]
#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)) 0x8363D0)
#define pRefreshCape2                        ((void(__thiscall*)(ObjectItem * lpItem)) 0x835E40)

#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;

cape.cpp
Code: [Select]
#include "stdafx.h"
#include "Cape.h"
#include "Defines.h"
#include "Object.h"
#include "Interface.h"
#include "Util.h"
#include "Item.h"
#include "CustomCloak.h"
#include "TMemory.h"
//#include "CustomPet.h"
//#include "PetHook.h"
//#include "Pet.h"
//#include "Import.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);

//for ( int n = 0; n < gCloak.m_CustomCloakInfo.size(); ++n ) {
for(int n=0;n < MAX_CUSTOM_CLOAK;n++)
if(Object->WingsSlot == ITEM2(gCloak.m_CustomCloakInfo[n].Index,gCloak.m_CustomCloakInfo[n].ItemIndex)){
Object->WingsSlot = ITEM2(gCloak.m_CustomCloakInfo[n].Index,gCloak.m_CustomCloakInfo[n].ItemIndex);

if(gCloak.m_CustomCloakInfo[n].Mode == 0){
SetDword((0x0057491A + 1), gCloak.m_CustomCloakInfo[n].IndexCloak);
SetDword((0x0057491F + 1), gCloak.m_CustomCloakInfo[n].IndexCloak);
//
if( strcmp(gCloak.m_CustomCloakInfo[n].StripModel, "") != 0 )
{
SetDword((0x00574F2E + 1), gCloak.m_CustomCloakInfo[n].IndexStrip);
SetDword((0x00574F33 + 1), gCloak.m_CustomCloakInfo[n].IndexStrip);
//
SetDword((0x00574FFC + 1), gCloak.m_CustomCloakInfo[n].IndexStrip);
SetDword((0x00575001 + 1), gCloak.m_CustomCloakInfo[n].IndexStrip);
}
else
{
SetDword((0x00574F2E + 1), 0x7884);
SetDword((0x00574F33 + 1), 0x7884);
//
SetDword((0x00574FFC + 1), 0x7884);
SetDword((0x00575001 + 1), 0x7884);
}
}
else{

SetDword((0x005751EB + 1), gCloak.m_CustomCloakInfo[n].IndexCloak);
SetDword((0x005751F0 + 1), gCloak.m_CustomCloakInfo[n].IndexCloak);
//
if( strcmp(gCloak.m_CustomCloakInfo[n].StripModel, "") != 0 )
{
SetDword((0x0057562C + 1), gCloak.m_CustomCloakInfo[n].IndexStrip);
SetDword((0x00575631 + 1), gCloak.m_CustomCloakInfo[n].IndexStrip);
//
SetDword((0x005756EE + 1), gCloak.m_CustomCloakInfo[n].IndexStrip);
SetDword((0x005756F3 + 1), gCloak.m_CustomCloakInfo[n].IndexStrip);
/*}else
{
SetDword((0x0057562C + 1), 0x7884);
SetDword((0x00575631 + 1), 0x7884);
//
SetDword((0x005756EE + 1), 0x7884);
SetDword((0x005756F3 + 1), 0x7884);*/
}
}
}


switch(Object->WingsSlot)
{
case ITEM2(12,130):
case ITEM2(13,30):

Object->WingsSlot = ITEM2(13,30);

SetDword((0x0057491A + 1), 0x7756);
SetDword((0x0057491F + 1), 0x7756);

break;
case ITEM2(12,40):

Object->WingsSlot = ITEM2(12,40);
//-
SetDword((0x0057491A + 1), 0x7758);
SetDword((0x0057491F + 1), 0x7758);
//
SetDword((0x00574F2E + 1), 0x7759);
SetDword((0x00574F33 + 1), 0x7759);
//
SetDword((0x00574FFC + 1), 0x7759);
SetDword((0x00575001 + 1), 0x7759);
//-
break;
case ITEM2(12,49):
case ITEM2(12,135):
Object->WingsSlot = ITEM2(12,49); //capa rage fighter

SetDword((0x0057491A + 1), 0x07EE0);
SetDword((0x0057491F + 1), 0x07EE0);

break;
case ITEM2(12,50): //capa 2da rage fighter

Object->WingsSlot = ITEM2(12,50);
//-
SetDword((0x0057491A + 1), 0x07EE2);
SetDword((0x0057491F + 1), 0x07EE2);
//
SetDword((0x00574F2E + 1), 0x07EE1);
SetDword((0x00574F33 + 1), 0x07EE1);
//
SetDword((0x00574FFC + 1), 0x07EE1);
SetDword((0x00575001 + 1), 0x07EE1);
//-
break;
/*}

if(gCloak.isCloak(Object->WingsSlot - 1171)){

CUSTOMCLOAK_DATA* CapeModel = gCloak.GetInfoByItem(Object->WingsSlot - 1171);

int ItemGroup = CapeModel->ItemIndex / 512;

int ItemID = CapeModel->ItemIndex % 512;

Object->WingsSlot = ITEM2(ItemGroup, ItemID);

SetDword((0x0057491A + 1), (WORD)CapeModel->IndexCloak);
SetDword((0x0057491F + 1), (WORD)CapeModel->IndexCloak);

if(CapeModel->Mode == 1){
SetDword((0x00574F2E + 1), (WORD)CapeModel->IndexStrip);
SetDword((0x00574F33 + 1), (WORD)CapeModel->IndexStrip);
//
SetDword((0x00574FFC + 1), (WORD)CapeModel->IndexStrip);
SetDword((0x00575001 + 1), (WORD)CapeModel->IndexStrip);
}*/
}

pDrawViewPort(ObjectPointer, ObjectModel,  a3);
}


//--- carga tiras de las capas
__declspec(naked) void CapeA() // 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)
|| CapeEffectPointer == ITEM2(12,50)
|| gCloak.isCloakStrip(CapeEffectPointer - 1171))
{
_asm{Jmp Address1}
}
else
{
_asm{Jmp Address2}
}
}

//---- carga de la capa
__declspec(naked) void CapeB() //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) //2da capa dl
|| CapeEffectPointer == ITEM2(12,49) //-- 1ra capa rf
|| CapeEffectPointer == ITEM2(12,50) //-- 2da capa rf
|| CapeEffectPointer == ITEM2(12,130)
|| CapeEffectPointer == ITEM2(12,135)
|| gCloak.isCloak(CapeEffectPointer - 1171))
{
_asm{Jmp Address1}
}
else
{
_asm{Jmp Address2}
}
}

__declspec(naked) void CapeE() //main allow
{
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) //-- capa 1 dl
|| gCloak.isCloak(CapeEffectPointer - 1171))
{
_asm{jmp Address1}
}
else
{
_asm{jmp Address2}
}
}

__declspec(naked) void CapeD() //allow play
{
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)
|| gCloak.isCloak(CapeEffectPointer - 1171))
{
_asm{jmp Address1}
}
else
{
_asm{jmp Address2}
}

}

__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)
|| gCloak.isCloak(CapeEffectPointer - 1171))
{
_asm{jmp Address1}
}
else
{
_asm{jmp Address2}
}
}


__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):
*(float *)(a1 + 264) = 0.0f;
            *(float *)(a1 + 96) = 0.2f;
*(float *)(a1 + 272) = 70.0f;
break;
}
}


void RefreshCapeUnEquip1(ObjectItem * lpItem)
{

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(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);
}

__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
}
}
/*
//esto puede ir pet.cpp los que usan pet custom desde aquí
ObjCreateBug gObjCreateBug = (ObjCreateBug)0x00501700;
ObjCreatePet gObjCreatePet = (ObjCreatePet)0x00835E40;

void gObjCreatePetEx(int ItemId)
{
int ItemSwitch = *(WORD*)ItemId;

int PetPreview = LODWORD(pPreviewPetThis) + 776;

if (gCustomPet2.CheckCustomPetByItem(ItemSwitch))
{
gObjCreateBug(ItemSwitch + 1171, PetPreview + 252, PetPreview, 0, 0);

} else if (gCloak.isCloak(ItemSwitch)||ItemSwitch == ITEM(13,30)
||ItemSwitch == ITEM(12,130)
||ItemSwitch == ITEM(12,135)){

pRefreshViewport(oUserPreviewStruct, oUserPreviewStruct + 776, 0);
}

gObjCreatePet(ItemId);
}
bool ResetPetPreviewEx(int ItemId)
{

bool Result;
// ----

if (ItemId)
Result = *(WORD*)ItemId == 0x1A00    //Angel
|| *(WORD*)ItemId == 0x1A01        //Satan
|| *(WORD*)ItemId == 0x1A02        //Unicorn
|| *(WORD*)ItemId == 0x1A03        //Dinorant
|| *(WORD*)ItemId == 0x1A04        //Dark Horse
|| *(WORD*)ItemId == 0x1A05        //Dark Raven
|| *(WORD*)ItemId == 0x1A25        //Fenrir     //
|| *(WORD*)ItemId == ITEM(13, 64)
|| *(WORD*)ItemId == ITEM(13, 65)
|| *(WORD*)ItemId == ITEM(13, 67)
|| *(WORD*)ItemId == ITEM(13, 80)
|| *(WORD*)ItemId == ITEM(13, 106)
|| *(WORD*)ItemId == ITEM(13, 123)
|| *(WORD*)ItemId >= ITEM(13, 200)
&& *(WORD*)ItemId <= ITEM(13, 410)
|| gCloak.isCloak(*(WORD*)ItemId)
|| *(WORD*)ItemId == ITEM(13,30)
|| *(WORD*)ItemId == ITEM(12,130)
|| *(WORD*)ItemId == ITEM(12,135);
else
Result = 0;
return Result;
}*/
//hasta aquí


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(0x00574667,20,ASM::NOP);
SetOp(0x00574667,(LPVOID)CapeD,ASM::JMP);
//-
SetRange(0x00574F13,10,ASM::NOP);
SetOp(0x00574F13,(LPVOID)CapeA,ASM::JMP);
//-
SetRange(0x005748FF,10,ASM::NOP);
SetOp(0x005748FF,(LPVOID)CapeB,ASM::JMP);
//-
SetRange(0x00576058,10,ASM::NOP);
SetOp(0x00576058,(LPVOID)CapeE,ASM::JMP);
//-
SetRange(0x005FAD70,7,ASM::NOP);
SetOp(0x005FAD70,(LPVOID)HideCape,ASM::JMP);
//-
SetRange(0x00574D3D,13,ASM::NOP);
SetOp(0x00574D3D,(LPVOID)AllowMGCape,ASM::JMP);
//--
SetCompleteHook(0xE8,0x00833BE7,&RefreshCapeUnEquip1);
SetCompleteHook(0xE8,0x007DD304,&RefreshCapeUnEquip2);
SetCompleteHook(0xE8,0x00833B08,&RefreshCapeUnEquip2);
//-
//SetRange(0x005CAFCB,7,ASM::NOP);
//SetOp(0x005CAFCB,(LPVOID)CapeInventoryPos,ASM::JMP);


//esto también iría en custompet
// SetOp((LPVOID)0x00836481, (LPVOID)ResetPetPreviewEx, ASM::CALL);
// SetOp((LPVOID)0x007DD304, (LPVOID)gObjCreatePetEx, ASM::CALL);
// SetOp((LPVOID)0x00833B08, (LPVOID)gObjCreatePetEx, ASM::CALL);
//hasta aquí
}

CustomCloak.h
Code: [Select]
#pragma once

#define MAX_CUSTOM_CLOAK 100

struct CUSTOMCLOAK_DATA
{
int Index;
int ItemIndex;
int Mode;
int IndexCloak;
char CloakModel[150];
int IndexStrip;
char StripModel[150];


};

class cCloak
{
public:
cCloak();
virtual ~cCloak();
void Init();
void Load(CUSTOMCLOAK_DATA* info);
void SetInfo(CUSTOMCLOAK_DATA info);
CUSTOMCLOAK_DATA* GetInfoByID(int index);
CUSTOMCLOAK_DATA* GetInfoByItem(int ItemIndex);
bool isCloak(int ItemIndex);
bool isCloakStrip(int ItemIndex);
public:
CUSTOMCLOAK_DATA m_CustomCloakInfo[MAX_CUSTOM_CLOAK];
}; extern cCloak gCloak;


CustomCloak.cpp
Code: [Select]
#include "stdafx.h"
#include "CustomCloak.h"
#include "Item.h"



cCloak gCloak;

cCloak::cCloak() // OK
{
this->Init();
}

cCloak::~cCloak() // OK
{

}

void cCloak::Init() // OK
{
for(int n=0;n < MAX_CUSTOM_CLOAK;n++)
{
this->m_CustomCloakInfo[n].Index = -1;
}
}

void cCloak::Load(CUSTOMCLOAK_DATA* info) // OK
{
for(int n=0;n < MAX_CUSTOM_CLOAK;n++)
{
this->SetInfo(info[n]);
}
}

void cCloak::SetInfo(CUSTOMCLOAK_DATA info) // OK
{
if(info.Index < 0 || info.Index >= MAX_CUSTOM_CLOAK)
{
return;
}

this->m_CustomCloakInfo[info.Index] = info;
}

CUSTOMCLOAK_DATA* cCloak::GetInfoByID(int index)
{
for (int i=0;i<MAX_CUSTOM_CLOAK; i++)
{
if (this->m_CustomCloakInfo[i].Index == -1)
{
continue;
}

if (i == index)
{
return &this->m_CustomCloakInfo[i];
}
}

return 0;
}

CUSTOMCLOAK_DATA* cCloak::GetInfoByItem(int ItemIndex) // OK
{
for(int n=0;n < MAX_CUSTOM_CLOAK;n++)
{
CUSTOMCLOAK_DATA* lpInfo = this->GetInfoByID(n);

if(lpInfo == 0)
{
continue;
}

if(lpInfo->ItemIndex == ItemIndex)
{
return lpInfo;
}
}

return 0;
}

bool cCloak::isCloakStrip(int ItemIndex) // OK
{
for (int i = 0 ; i < 10 ; i++)

{
if (ItemIndex == this->m_CustomCloakInfo[i].ItemIndex && this->m_CustomCloakInfo[i].Mode == 1)
{
return true;
}
}
return false;
}


bool cCloak::isCloak(int Index)
{
for (int i=0;i<MAX_CUSTOM_CLOAK; i++)
{
if (this->m_CustomCloakInfo[i].Index == -1)
{
continue;
}

if (Index == this->m_CustomCloakInfo[i].ItemIndex)
{
return true;
}
}
return false;
}

interface.cpp
poner dentro  de void Interface::LoadImages()
Code: [Select]
for(int n=0;n < MAX_CUSTOM_CLOAK;n++)
{
if(gCloak.m_CustomCloakInfo[n].ItemIndex != 0)
{
pLoadImage (gCloak.m_CustomCloakInfo[n].CloakModel, gCloak.m_CustomCloakInfo[n].IndexCloak, GL_LINEAR, GL_REPEAT, 1, 0 );

if( strcmp(gCloak.m_CustomCloakInfo[n].StripModel, "") != 0 )

pLoadImage (gCloak.m_CustomCloakInfo[n].StripModel, gCloak.m_CustomCloakInfo[n].IndexStrip, GL_LINEAR, GL_REPEAT, 1, 0 );
}
}

Gracias por el aporte, podrias poner un ejemplo de como seria el customcloak.txt del getinfo?

solo seria este que dejo takumi

Code: [Select]
//===============================================================================================================
// MasterCodex Season 6 - Mu Online
// Developer: MasterCodex [takumi12]
// Last review: 15.04.2020
//===============================================================================================================
// CustomCloak Config File
//===============================================================================================================
// Agregar archivos en: [Data/Item]
//===============================================================================================================
//ItemType Mode CloakName StripName
6304 1 "Item\\KF_darklordwing4de.tga" "Item\\KF_darklordwing4dd.tga"
6306 0 "Item\\KF_ragefighterwing4db.tga" " "
6299 1 "Item\\KF_Death_clka.tga" "Item\\KF_Death_clkb.tga"
6307 0 "Item\\KF_season_wing_periodc.tga" " "
6344 0 "Item\\growlancerwing4dc.tga" " "
//6298 0 "Item\\CK_adbone02.tga" " "
end

Hice todo tal cual lo pasaste y al ejecutar el main me dice lo siguiente "Main.premium not found or invalid", sabrias decirme por que pasa eso ?


Offline Nakamura #58 Posteado: July 05, 2020, 05:25:49 PM

  • 0 puntos por ventas
  • *
  • Rank: Dedicado
  • Posts: 40
  • Gracias recibida: 110
  • br
Hola chicos estube haciendo el llamado del GetMainInfo para cargar las texturas desde un txt como los custom que ya conocemos, aclaro que no esta del todo funcional solo faltaria la carga de las texturas y validacion para que cargue capa mas tiras y otro que solo seria solo capa, me rompi la cabeza con esto que para algunos puede ser sencillo comparto todo lo que hice para que algun heroe sin capa complete el trabajo y pueda compartir con toda la comunidad. muchos estaremos agradecidos.
postada: no soy coder soy una persona que esta aprendiendo c++

===GetMainInfo==
CustomCloak.h
Code: [Select]
#pragma once

#define MAX_CUSTOM_CLOAK 100

struct CUSTOMCLOAK_DATA
{
int Index;
int ItemIndex;
int Mode;
int IndexCloak;
char CloakModel[150];
int IndexStrip;
char StripModel[150];

};

class CCustomCloak
{
public:
CCustomCloak();
virtual ~CCustomCloak();
void Init();
void Load(char* path);
void SetInfo(CUSTOMCLOAK_DATA info);
public:
CUSTOMCLOAK_DATA m_CustomCloakInfo[MAX_CUSTOM_CLOAK];
};

extern CCustomCloak gCustomCloak;

CustomCloak.cpp
Code: [Select]
#include "stdafx.h"
#include "CustomCloak.h"
#include "MemScript.h"

CCustomCloak gCustomCloak;

CCustomCloak::CCustomCloak() // OK
{
this->Init();
}

CCustomCloak::~CCustomCloak() // OK
{

}

void CCustomCloak::Init() // OK
{
for(int n=0;n < MAX_CUSTOM_CLOAK;n++)
{
this->m_CustomCloakInfo[n].Index = -1;
}
}

void CCustomCloak::Load(char* path)
{
CMemScript* lpMemScript = new CMemScript;

if(lpMemScript == 0)
{
printf(MEM_SCRIPT_ALLOC_ERROR,path);
return;
}

if(lpMemScript->SetBuffer(path) == 0)
{
printf(lpMemScript->GetLastError());
delete lpMemScript;
return;
}

this->Init();

try
{
while(true)
{
if(lpMemScript->GetToken() == TOKEN_END)
{
break;
}

if(strcmp("end",lpMemScript->GetString()) == 0)
{
break;
}

CUSTOMCLOAK_DATA info;

memset(&info,0,sizeof(info));

static int CustomCloakIndexCount = 0;

info.Index = CustomCloakIndexCount++;

info.ItemIndex = lpMemScript->GetNumber();

info.Mode  = lpMemScript->GetAsNumber();

info.IndexCloak = lpMemScript->GetAsNumber();

strcpy_s(info.CloakModel,lpMemScript->GetAsString());

info.IndexStrip = lpMemScript->GetAsNumber();

strcpy_s(info.StripModel,lpMemScript->GetAsString());


this->SetInfo(info);
}
}
catch(...)
{
printf(lpMemScript->GetLastError());
}

delete lpMemScript;
}

void CCustomCloak::SetInfo(CUSTOMCLOAK_DATA info) // OK
{
if(info.Index < 0 || info.Index >= MAX_CUSTOM_CLOAK)
{
return;
}

this->m_CustomCloakInfo[info.Index] = info;
}

===Main==
cape.h
Code: [Select]
#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)) 0x8363D0)
#define pRefreshCape2                        ((void(__thiscall*)(ObjectItem * lpItem)) 0x835E40)

#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;

cape.cpp
Code: [Select]
#include "stdafx.h"
#include "Cape.h"
#include "Defines.h"
#include "Object.h"
#include "Interface.h"
#include "Util.h"
#include "Item.h"
#include "CustomCloak.h"
#include "TMemory.h"
//#include "CustomPet.h"
//#include "PetHook.h"
//#include "Pet.h"
//#include "Import.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);

//for ( int n = 0; n < gCloak.m_CustomCloakInfo.size(); ++n ) {
for(int n=0;n < MAX_CUSTOM_CLOAK;n++)
if(Object->WingsSlot == ITEM2(gCloak.m_CustomCloakInfo[n].Index,gCloak.m_CustomCloakInfo[n].ItemIndex)){
Object->WingsSlot = ITEM2(gCloak.m_CustomCloakInfo[n].Index,gCloak.m_CustomCloakInfo[n].ItemIndex);

if(gCloak.m_CustomCloakInfo[n].Mode == 0){
SetDword((0x0057491A + 1), gCloak.m_CustomCloakInfo[n].IndexCloak);
SetDword((0x0057491F + 1), gCloak.m_CustomCloakInfo[n].IndexCloak);
//
if( strcmp(gCloak.m_CustomCloakInfo[n].StripModel, "") != 0 )
{
SetDword((0x00574F2E + 1), gCloak.m_CustomCloakInfo[n].IndexStrip);
SetDword((0x00574F33 + 1), gCloak.m_CustomCloakInfo[n].IndexStrip);
//
SetDword((0x00574FFC + 1), gCloak.m_CustomCloakInfo[n].IndexStrip);
SetDword((0x00575001 + 1), gCloak.m_CustomCloakInfo[n].IndexStrip);
}
else
{
SetDword((0x00574F2E + 1), 0x7884);
SetDword((0x00574F33 + 1), 0x7884);
//
SetDword((0x00574FFC + 1), 0x7884);
SetDword((0x00575001 + 1), 0x7884);
}
}
else{

SetDword((0x005751EB + 1), gCloak.m_CustomCloakInfo[n].IndexCloak);
SetDword((0x005751F0 + 1), gCloak.m_CustomCloakInfo[n].IndexCloak);
//
if( strcmp(gCloak.m_CustomCloakInfo[n].StripModel, "") != 0 )
{
SetDword((0x0057562C + 1), gCloak.m_CustomCloakInfo[n].IndexStrip);
SetDword((0x00575631 + 1), gCloak.m_CustomCloakInfo[n].IndexStrip);
//
SetDword((0x005756EE + 1), gCloak.m_CustomCloakInfo[n].IndexStrip);
SetDword((0x005756F3 + 1), gCloak.m_CustomCloakInfo[n].IndexStrip);
/*}else
{
SetDword((0x0057562C + 1), 0x7884);
SetDword((0x00575631 + 1), 0x7884);
//
SetDword((0x005756EE + 1), 0x7884);
SetDword((0x005756F3 + 1), 0x7884);*/
}
}
}


switch(Object->WingsSlot)
{
case ITEM2(12,130):
case ITEM2(13,30):

Object->WingsSlot = ITEM2(13,30);

SetDword((0x0057491A + 1), 0x7756);
SetDword((0x0057491F + 1), 0x7756);

break;
case ITEM2(12,40):

Object->WingsSlot = ITEM2(12,40);
//-
SetDword((0x0057491A + 1), 0x7758);
SetDword((0x0057491F + 1), 0x7758);
//
SetDword((0x00574F2E + 1), 0x7759);
SetDword((0x00574F33 + 1), 0x7759);
//
SetDword((0x00574FFC + 1), 0x7759);
SetDword((0x00575001 + 1), 0x7759);
//-
break;
case ITEM2(12,49):
case ITEM2(12,135):
Object->WingsSlot = ITEM2(12,49); //capa rage fighter

SetDword((0x0057491A + 1), 0x07EE0);
SetDword((0x0057491F + 1), 0x07EE0);

break;
case ITEM2(12,50): //capa 2da rage fighter

Object->WingsSlot = ITEM2(12,50);
//-
SetDword((0x0057491A + 1), 0x07EE2);
SetDword((0x0057491F + 1), 0x07EE2);
//
SetDword((0x00574F2E + 1), 0x07EE1);
SetDword((0x00574F33 + 1), 0x07EE1);
//
SetDword((0x00574FFC + 1), 0x07EE1);
SetDword((0x00575001 + 1), 0x07EE1);
//-
break;
/*}

if(gCloak.isCloak(Object->WingsSlot - 1171)){

CUSTOMCLOAK_DATA* CapeModel = gCloak.GetInfoByItem(Object->WingsSlot - 1171);

int ItemGroup = CapeModel->ItemIndex / 512;

int ItemID = CapeModel->ItemIndex % 512;

Object->WingsSlot = ITEM2(ItemGroup, ItemID);

SetDword((0x0057491A + 1), (WORD)CapeModel->IndexCloak);
SetDword((0x0057491F + 1), (WORD)CapeModel->IndexCloak);

if(CapeModel->Mode == 1){
SetDword((0x00574F2E + 1), (WORD)CapeModel->IndexStrip);
SetDword((0x00574F33 + 1), (WORD)CapeModel->IndexStrip);
//
SetDword((0x00574FFC + 1), (WORD)CapeModel->IndexStrip);
SetDword((0x00575001 + 1), (WORD)CapeModel->IndexStrip);
}*/
}

pDrawViewPort(ObjectPointer, ObjectModel,  a3);
}


//--- carga tiras de las capas
__declspec(naked) void CapeA() // 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)
|| CapeEffectPointer == ITEM2(12,50)
|| gCloak.isCloakStrip(CapeEffectPointer - 1171))
{
_asm{Jmp Address1}
}
else
{
_asm{Jmp Address2}
}
}

//---- carga de la capa
__declspec(naked) void CapeB() //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) //2da capa dl
|| CapeEffectPointer == ITEM2(12,49) //-- 1ra capa rf
|| CapeEffectPointer == ITEM2(12,50) //-- 2da capa rf
|| CapeEffectPointer == ITEM2(12,130)
|| CapeEffectPointer == ITEM2(12,135)
|| gCloak.isCloak(CapeEffectPointer - 1171))
{
_asm{Jmp Address1}
}
else
{
_asm{Jmp Address2}
}
}

__declspec(naked) void CapeE() //main allow
{
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) //-- capa 1 dl
|| gCloak.isCloak(CapeEffectPointer - 1171))
{
_asm{jmp Address1}
}
else
{
_asm{jmp Address2}
}
}

__declspec(naked) void CapeD() //allow play
{
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)
|| gCloak.isCloak(CapeEffectPointer - 1171))
{
_asm{jmp Address1}
}
else
{
_asm{jmp Address2}
}

}

__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)
|| gCloak.isCloak(CapeEffectPointer - 1171))
{
_asm{jmp Address1}
}
else
{
_asm{jmp Address2}
}
}


__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):
*(float *)(a1 + 264) = 0.0f;
            *(float *)(a1 + 96) = 0.2f;
*(float *)(a1 + 272) = 70.0f;
break;
}
}


void RefreshCapeUnEquip1(ObjectItem * lpItem)
{

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(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);
}

__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
}
}
/*
//esto puede ir pet.cpp los que usan pet custom desde aquí
ObjCreateBug gObjCreateBug = (ObjCreateBug)0x00501700;
ObjCreatePet gObjCreatePet = (ObjCreatePet)0x00835E40;

void gObjCreatePetEx(int ItemId)
{
int ItemSwitch = *(WORD*)ItemId;

int PetPreview = LODWORD(pPreviewPetThis) + 776;

if (gCustomPet2.CheckCustomPetByItem(ItemSwitch))
{
gObjCreateBug(ItemSwitch + 1171, PetPreview + 252, PetPreview, 0, 0);

} else if (gCloak.isCloak(ItemSwitch)||ItemSwitch == ITEM(13,30)
||ItemSwitch == ITEM(12,130)
||ItemSwitch == ITEM(12,135)){

pRefreshViewport(oUserPreviewStruct, oUserPreviewStruct + 776, 0);
}

gObjCreatePet(ItemId);
}
bool ResetPetPreviewEx(int ItemId)
{

bool Result;
// ----

if (ItemId)
Result = *(WORD*)ItemId == 0x1A00    //Angel
|| *(WORD*)ItemId == 0x1A01        //Satan
|| *(WORD*)ItemId == 0x1A02        //Unicorn
|| *(WORD*)ItemId == 0x1A03        //Dinorant
|| *(WORD*)ItemId == 0x1A04        //Dark Horse
|| *(WORD*)ItemId == 0x1A05        //Dark Raven
|| *(WORD*)ItemId == 0x1A25        //Fenrir     //
|| *(WORD*)ItemId == ITEM(13, 64)
|| *(WORD*)ItemId == ITEM(13, 65)
|| *(WORD*)ItemId == ITEM(13, 67)
|| *(WORD*)ItemId == ITEM(13, 80)
|| *(WORD*)ItemId == ITEM(13, 106)
|| *(WORD*)ItemId == ITEM(13, 123)
|| *(WORD*)ItemId >= ITEM(13, 200)
&& *(WORD*)ItemId <= ITEM(13, 410)
|| gCloak.isCloak(*(WORD*)ItemId)
|| *(WORD*)ItemId == ITEM(13,30)
|| *(WORD*)ItemId == ITEM(12,130)
|| *(WORD*)ItemId == ITEM(12,135);
else
Result = 0;
return Result;
}*/
//hasta aquí


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(0x00574667,20,ASM::NOP);
SetOp(0x00574667,(LPVOID)CapeD,ASM::JMP);
//-
SetRange(0x00574F13,10,ASM::NOP);
SetOp(0x00574F13,(LPVOID)CapeA,ASM::JMP);
//-
SetRange(0x005748FF,10,ASM::NOP);
SetOp(0x005748FF,(LPVOID)CapeB,ASM::JMP);
//-
SetRange(0x00576058,10,ASM::NOP);
SetOp(0x00576058,(LPVOID)CapeE,ASM::JMP);
//-
SetRange(0x005FAD70,7,ASM::NOP);
SetOp(0x005FAD70,(LPVOID)HideCape,ASM::JMP);
//-
SetRange(0x00574D3D,13,ASM::NOP);
SetOp(0x00574D3D,(LPVOID)AllowMGCape,ASM::JMP);
//--
SetCompleteHook(0xE8,0x00833BE7,&RefreshCapeUnEquip1);
SetCompleteHook(0xE8,0x007DD304,&RefreshCapeUnEquip2);
SetCompleteHook(0xE8,0x00833B08,&RefreshCapeUnEquip2);
//-
//SetRange(0x005CAFCB,7,ASM::NOP);
//SetOp(0x005CAFCB,(LPVOID)CapeInventoryPos,ASM::JMP);


//esto también iría en custompet
// SetOp((LPVOID)0x00836481, (LPVOID)ResetPetPreviewEx, ASM::CALL);
// SetOp((LPVOID)0x007DD304, (LPVOID)gObjCreatePetEx, ASM::CALL);
// SetOp((LPVOID)0x00833B08, (LPVOID)gObjCreatePetEx, ASM::CALL);
//hasta aquí
}

CustomCloak.h
Code: [Select]
#pragma once

#define MAX_CUSTOM_CLOAK 100

struct CUSTOMCLOAK_DATA
{
int Index;
int ItemIndex;
int Mode;
int IndexCloak;
char CloakModel[150];
int IndexStrip;
char StripModel[150];


};

class cCloak
{
public:
cCloak();
virtual ~cCloak();
void Init();
void Load(CUSTOMCLOAK_DATA* info);
void SetInfo(CUSTOMCLOAK_DATA info);
CUSTOMCLOAK_DATA* GetInfoByID(int index);
CUSTOMCLOAK_DATA* GetInfoByItem(int ItemIndex);
bool isCloak(int ItemIndex);
bool isCloakStrip(int ItemIndex);
public:
CUSTOMCLOAK_DATA m_CustomCloakInfo[MAX_CUSTOM_CLOAK];
}; extern cCloak gCloak;


CustomCloak.cpp
Code: [Select]
#include "stdafx.h"
#include "CustomCloak.h"
#include "Item.h"



cCloak gCloak;

cCloak::cCloak() // OK
{
this->Init();
}

cCloak::~cCloak() // OK
{

}

void cCloak::Init() // OK
{
for(int n=0;n < MAX_CUSTOM_CLOAK;n++)
{
this->m_CustomCloakInfo[n].Index = -1;
}
}

void cCloak::Load(CUSTOMCLOAK_DATA* info) // OK
{
for(int n=0;n < MAX_CUSTOM_CLOAK;n++)
{
this->SetInfo(info[n]);
}
}

void cCloak::SetInfo(CUSTOMCLOAK_DATA info) // OK
{
if(info.Index < 0 || info.Index >= MAX_CUSTOM_CLOAK)
{
return;
}

this->m_CustomCloakInfo[info.Index] = info;
}

CUSTOMCLOAK_DATA* cCloak::GetInfoByID(int index)
{
for (int i=0;i<MAX_CUSTOM_CLOAK; i++)
{
if (this->m_CustomCloakInfo[i].Index == -1)
{
continue;
}

if (i == index)
{
return &this->m_CustomCloakInfo[i];
}
}

return 0;
}

CUSTOMCLOAK_DATA* cCloak::GetInfoByItem(int ItemIndex) // OK
{
for(int n=0;n < MAX_CUSTOM_CLOAK;n++)
{
CUSTOMCLOAK_DATA* lpInfo = this->GetInfoByID(n);

if(lpInfo == 0)
{
continue;
}

if(lpInfo->ItemIndex == ItemIndex)
{
return lpInfo;
}
}

return 0;
}

bool cCloak::isCloakStrip(int ItemIndex) // OK
{
for (int i = 0 ; i < 10 ; i++)

{
if (ItemIndex == this->m_CustomCloakInfo[i].ItemIndex && this->m_CustomCloakInfo[i].Mode == 1)
{
return true;
}
}
return false;
}


bool cCloak::isCloak(int Index)
{
for (int i=0;i<MAX_CUSTOM_CLOAK; i++)
{
if (this->m_CustomCloakInfo[i].Index == -1)
{
continue;
}

if (Index == this->m_CustomCloakInfo[i].ItemIndex)
{
return true;
}
}
return false;
}

interface.cpp
poner dentro  de void Interface::LoadImages()
Code: [Select]
for(int n=0;n < MAX_CUSTOM_CLOAK;n++)
{
if(gCloak.m_CustomCloakInfo[n].ItemIndex != 0)
{
pLoadImage (gCloak.m_CustomCloakInfo[n].CloakModel, gCloak.m_CustomCloakInfo[n].IndexCloak, GL_LINEAR, GL_REPEAT, 1, 0 );

if( strcmp(gCloak.m_CustomCloakInfo[n].StripModel, "") != 0 )

pLoadImage (gCloak.m_CustomCloakInfo[n].StripModel, gCloak.m_CustomCloakInfo[n].IndexStrip, GL_LINEAR, GL_REPEAT, 1, 0 );
}
}

Estoy probando el código aquí, las felicitaciones fueron muy buenas primero. Sin embargo, en el caso de que sea solo para recargar la textura para que Cape tenga movimiento, ¿no sería más apropiado agregar su Carga en la función "void ItemTextureLoad ()"? Si me equivoco alguien me corrige por favor


Offline erickmalfoy #59 Posteado: July 06, 2020, 04:30:13 AM

  • 0 puntos por ventas
  • *
  • Rank: Puto amo
  • Posts: 557
  • Gracias recibida: 314
  • ar
Dice no hay egoísmo y lo libera incompleto sin getinfo bueno.
 No puedes liberar algo completo tanto les cuesta así aprende la gente.

Encima que lo liberan se quejan? Asi no da ganas de liberar nada. Y si es por aprender, la gente va a aprender justamente de esta forma, que hagan ellos la parte del getmaininfo.
Si pero el que lo haga mal va a empezar a reportar bugs que no son y va a generar una confusión ...
No se porque me sigue sin funcionar el refresh al cambiar la capa, solo funciona al relogearme o cambiarme de mapa  :o

Para los que recién estan empezando a meterle mano a esto del source de las capas les faltaría esto igual:

MAIN.CPP antes de  gInterface.Load();

Code: [Select]
	gCapeAnimation.Load();

INTERFACE.CPP dentro de la funcion void Interface::LoadImages() cargan los .tga dejo un ejemplo de como lo tengo
Code: [Select]
	//Cape of Emperor
pLoadImage("Item\\dl_redwings02.tga", iCape1a, GL_LINEAR, GL_REPEAT, 1, 0);
pLoadImage("Item\\dl_redwings03.tga", iCape1b, GL_LINEAR, GL_REPEAT, 1, 0);
//Cape Of Lord (Demonic)
pLoadImage("Item\\capadlmarote.tga", iCape2a, GL_LINEAR, GL_REPEAT, 1, 0);
//Cloak Of Warrior (Demonic)
pLoadImage("Item\\caparfmarote.tga", iCape3a, GL_LINEAR, GL_REPEAT, 1, 0);
//Cape Of Lord (Celestial)
pLoadImage("Item\\capadlmarotecel.tga", iCape4a, GL_LINEAR, GL_REPEAT, 1, 0);
//Cloak Of Warrior (Celestial)
pLoadImage("Item\\caparfmarotecel.tga", iCape5a, GL_LINEAR, GL_REPEAT, 1, 0);
//Cape of Midnight
pLoadImage("Item\\VSL_Cape_Midnight_02.tga", iCape6a, GL_LINEAR, GL_REPEAT, 1, 0);
pLoadImage("Item\\VSL_Cape_Midnight_03.tga", iCape6b, GL_LINEAR, GL_REPEAT, 1, 0);
//Cape of Halo
pLoadImage("Item\\US_awakeningwing4db.tga", iCape7a, GL_LINEAR, GL_REPEAT, 1, 0);
//Cape of RedBone
pLoadImage("Item\\HS_US_REDBONE.tga", iCape8a, GL_LINEAR, GL_REPEAT, 1, 0);
//Cape of WhiteBlue
pLoadImage("Item\\HS_US_Whiteblue.tga", iCape9a, GL_LINEAR, GL_REPEAT, 1, 0);
//Cape of NightBlue
pLoadImage("Item\\VSL_Cape_NightBlue_02.tga", iCape10a, GL_LINEAR, GL_REPEAT, 1, 0);
pLoadImage("Item\\VSL_Cape_NightBlue_03.tga", iCape10b, GL_LINEAR, GL_REPEAT, 1, 0);
//Cape of Metal
pLoadImage("Item\\CapeSteel_FIX.tga", iCape11a, GL_LINEAR, GL_REPEAT, 1, 0);
//Cloak of Death (NO FUNCIONA)
//pLoadImage("Item\\Death_clk.tga", iCape12a, GL_LINEAR, GL_REPEAT, 1, 0);
//Cloak of Control
pLoadImage("Item\\darklordwing4de.tga", iCape13a, GL_LINEAR, GL_REPEAT, 1, 0);
pLoadImage("Item\\darklordwing4dd.tga", iCape13b, GL_LINEAR, GL_REPEAT, 1, 0);
//Cloak of Premiere
pLoadImage("Item\\ground_wind2.tga", iCape14b, GL_LINEAR, GL_REPEAT, 1, 0);
pLoadImage("Item\\growlancerwing4dc.tga", iCape14a, GL_LINEAR, GL_REPEAT, 1, 0);
//Cloak of Referre
pLoadImage("Item\\ragefighterwing4db.tga", iCape15a, GL_LINEAR, GL_REPEAT, 1, 0);
//Cloak of War
pLoadImage("Item\\USK_War2.0Cloak_02.tga", iCape16a, GL_LINEAR, GL_REPEAT, 1, 0);
//Cloak of Reaper
pLoadImage("Item\\golden_dlcape4de.tga", iCape17a, GL_LINEAR, GL_REPEAT, 1, 0);
pLoadImage("Item\\golden_dlcape4dd.tga", iCape17b, GL_LINEAR, GL_REPEAT, 1, 0);
//Cloak of Shadow
pLoadImage("Item\\KF_darklordwing4de.tga", iCape18a, GL_LINEAR, GL_REPEAT, 1, 0);
pLoadImage("Item\\KF_darklordwing4dd.tga", iCape18b, GL_LINEAR, GL_REPEAT, 1, 0);
//Cloak of Medieval (NO TIENE)

//Cloak of Christmas
pLoadImage("Item\\chrismascapeA.tga", iCape20a, GL_LINEAR, GL_REPEAT, 1, 0);
pLoadImage("Item\\chrismascapeB.tga", iCape20b, GL_LINEAR, GL_REPEAT, 1, 0);


UTIL.H al final
Code: [Select]
DWORD SetOp(const DWORD dwEnterFunction, const LPVOID dwJMPAddress, const BYTE cmd);
DWORD SetRange(const DWORD dwAddress, const USHORT wCount, const BYTE btValue);

UTIL.CPP al final
Code: [Select]
DWORD SetOp(const DWORD dwEnterFunction, const LPVOID dwJMPAddress, const BYTE cmd)
{
    BYTE btBuf[5];
    DWORD dwShift    = (ULONG_PTR)dwJMPAddress - (ULONG_PTR)dwEnterFunction - 5;
   
    btBuf[0]        = cmd;
    memcpy( (LPVOID) & btBuf[1], (LPVOID) & dwShift, sizeof(ULONG_PTR));
   
    return WriteMemory((PVOID)dwEnterFunction, (LPVOID) btBuf, sizeof(btBuf));
};

DWORD SetRange(const DWORD dwAddress, const USHORT wCount, const BYTE btValue)
{
   BYTE * lpBuf   = new BYTE[wCount];
   
   memset(lpBuf, btValue, wCount);
   
   return WriteMemory( (PVOID)dwAddress, (LPVOID) lpBuf, wCount);
}

USER.CPP al inicio
Code: [Select]
#include "Cape.h"

Dentro de la funcion void User::Refresh()
Code: [Select]
	lpCharObj Character		= &*(ObjectCharacter*)oUserObjectStruct_;

if (Character->pEquipment[7].ItemID < 0)
{
//Reset pet view by yourself
sub_558630((int)&*lpViewPlayer, (int)&lpViewPlayer->m_Model, 0);
lpViewPlayer->WingsSlot = -1;
}

Bro que tal me ayudas en esto
https://prnt.sc/tcl7dv
Gracias :D


Solo usuarios registrados pueden comentar y agradecer, Logueate o Registrate


 

Related Topics

  Subject / Started by Replies Last post
4 Replies
1287 Views
Last post October 20, 2017, 11:57:53 AM
by darkroh
9 Replies
2169 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_