Solo usuarios registrados pueden comentar y agradecer, Logueate o Registrate

Autor Topic: Custom Pets [1.04E] Fixeado [COMPLETO]  (Visto 12222 veces)

0 Miembros and 2 Guests are viewing this topic.

Offline Llalex Posteado: May 02, 2020, 10:06:45 PM | Modificado: June 26, 2020, 07:58:41 AM by Llalex

  • 0 puntos por ventas
  • *
  • Rank: Puto amo
  • Posts: 337
  • Gracias recibida: 397
  • ve
Buenas, aca dejo los custom pets trabajando al 100% para la version 1.04E
Bug/Errores Fixeados
- Ya no se vuelve un angel al entrar al juego, cambiar de mundo
- El DL al usar DarkRaven y otro Pets salia al costado izquierdo arriba 1 sola barra de vida, acá ya se reparo eso y salen las 2 barras
- Los Custom Pets ahora tienen vida
- Trabaja al 100% con las Capas Custom
- Trabaja al 100% con las Custom Bow


GameServer

Crear CustomPet.h
Code: [Select]
#pragma once

#include "Item.h"
#include "User.h"

#define MAX_CUSTOM_PET 512 // 500

struct CUSTOM_PET_INFO
{
int Index;
int ItemIndex;
int IncDamageRate;
int IncLife;
int IncMana;
int IncAttackSpeed;
int IncDoubleDamageRate;
char ModelName[32];
};

class CCustomPet
{
public:
CCustomPet();
virtual ~CCustomPet();
void Init();
void Load(char* path);
void SetInfo(CUSTOM_PET_INFO info);
CUSTOM_PET_INFO* GetInfo(int index);
CUSTOM_PET_INFO* GetInfoByItem(int ItemIndex);
bool CheckCustomPet(int index);
bool CheckCustomPetByItem(int ItemIndex);
int GetCustomPetIndex(int ItemIndex);

int GetCustomPetDamageRate(int ItemIndex);
int GetCustomPetLife(int ItemIndex);
int GetCustomPetMana(int ItemIndex);
int GetCustomPetAttackSpeed(int ItemIndex);
int GetCustomPetDoubleDamageRate(int ItemIndex);
//long GetCustomPetExperienceRate(int ItemIndex);
//long GetCustomPetMasterExperienceRate(int ItemIndex);
void CalcCustomPetOption(LPOBJ lpObj, bool flag);
public:
CUSTOM_PET_INFO m_CustomPetInfo[MAX_CUSTOM_PET];
};

extern CCustomPet gCustomPet;

Crear CustomPet.cpp
Code: [Select]
#include "stdafx.h"
#include "CustomPet.h"
#include "MemScript.h"
#include "Util.h"

CCustomPet gCustomPet;

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


CCustomPet::~CCustomPet() // OK
{

}


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


void CCustomPet::Load(char* path) // OK
{
CMemScript* lpMemScript = new CMemScript;

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

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

this->Init();

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

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

CUSTOM_PET_INFO info;

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

info.Index = lpMemScript->GetNumber();

info.ItemIndex = lpMemScript->GetAsNumber();

info.IncLife = lpMemScript->GetAsNumber();

info.IncMana = lpMemScript->GetAsNumber();

info.IncDamageRate = lpMemScript->GetAsNumber();

info.IncAttackSpeed = lpMemScript->GetAsNumber();

info.IncDoubleDamageRate = lpMemScript->GetAsNumber();

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

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

delete lpMemScript;
}


void CCustomPet::SetInfo(CUSTOM_PET_INFO info) // OK
{
if (info.Index < 0 || info.Index >= MAX_CUSTOM_PET)
{
return;
}

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


CUSTOM_PET_INFO* CCustomPet::GetInfo(int index) // OK
{
if (index < 0 || index >= MAX_CUSTOM_PET)
{
return 0;
}

if (this->m_CustomPetInfo[index].Index != index)
{
return 0;
}

return &this->m_CustomPetInfo[index];
}


CUSTOM_PET_INFO* CCustomPet::GetInfoByItem(int ItemIndex) // OK
{
for (int n = 0; n < MAX_CUSTOM_PET; n++)
{
CUSTOM_PET_INFO* lpInfo = this->GetInfo(n);

if (lpInfo == 0)
{
continue;
}

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

return 0;
}


bool CCustomPet::CheckCustomPet(int index) // OK
{
if (this->GetInfo(index) != 0)
{
return 1;
}

return 0;
}

bool CCustomPet::CheckCustomPetByItem(int ItemIndex) // OK
{
if (this->GetInfoByItem(ItemIndex) != 0)
{
return 1;
}

return 0;
}


int CCustomPet::GetCustomPetIndex(int ItemIndex) // OK
{
CUSTOM_PET_INFO* lpInfo = this->GetInfoByItem(ItemIndex);

if (lpInfo == 0)
{
return 0;
}

return lpInfo->Index;
}

int CCustomPet::GetCustomPetDamageRate(int ItemIndex) // OK
{
CUSTOM_PET_INFO* lpInfo = this->GetInfoByItem(ItemIndex);

if (lpInfo == 0)
{
return 0;
}

return (lpInfo->IncDamageRate);
}


int CCustomPet::GetCustomPetLife(int ItemIndex) // OK
{
CUSTOM_PET_INFO* lpInfo = this->GetInfoByItem(ItemIndex);

if (lpInfo == 0)
{
return 0;
}

return (lpInfo->IncLife);
}


int CCustomPet::GetCustomPetMana(int ItemIndex) // OK
{
CUSTOM_PET_INFO* lpInfo = this->GetInfoByItem(ItemIndex);

if (lpInfo == 0)
{
return 0;
}

return (lpInfo->IncMana);
}

int CCustomPet::GetCustomPetAttackSpeed(int ItemIndex) // OK
{
CUSTOM_PET_INFO* lpInfo = this->GetInfoByItem(ItemIndex);

if (lpInfo == 0)
{
return 0;
}

return (lpInfo->IncAttackSpeed);
}


int CCustomPet::GetCustomPetDoubleDamageRate(int ItemIndex) // OK
{
CUSTOM_PET_INFO* lpInfo = this->GetInfoByItem(ItemIndex);

if (lpInfo == 0)
{
return 0;
}

return (lpInfo->IncDoubleDamageRate);
}

/*
long CCustomPet::GetCustomPetExperienceRate(int ItemIndex) // OK
{
CUSTOM_PET_INFO CustomPetInfo;

if(this->GetCustomMonsterInfo(index,map,&CustomMonsterInfo) == 0)
{
return 100;
}
else
{
return ((CustomMonsterInfo.ExperienceRate==-1)?100:CustomMonsterInfo.ExperienceRate);
}
}


long CCustomPet::GetCustomPetMasterExperienceRate(int ItemIndex) // OK
{
CUSTOM_PET_INFO CustomPetInfo;

if(this->GetCustomMonsterInfo(index,map,&CustomMonsterInfo) == 0)
{
return 100;
}
else
{
return ((CustomMonsterInfo.ExperienceRate==-1)?100:CustomMonsterInfo.ExperienceRate);
}
}
*/


void CCustomPet::CalcCustomPetOption(LPOBJ lpObj, bool flag)
{
if (flag != 0)
{
return;
}

CItem* Helper = &lpObj->Inventory[8];

if (this->CheckCustomPetByItem(Helper->m_Index) != 0)
{
lpObj->AddLife += GetCustomPetLife(Helper->m_Index);
lpObj->AddMana += GetCustomPetMana(Helper->m_Index);
lpObj->PhysiSpeed += GetCustomPetAttackSpeed(Helper->m_Index);
lpObj->MagicSpeed += GetCustomPetAttackSpeed(Helper->m_Index);
lpObj->DoubleDamageRate += GetCustomPetDoubleDamageRate(Helper->m_Index);
}

}

Attack.cpp
Agregar al inicio #include "CustomPet.h"
Code: [Select]
//=======================
// BUSCAR: void CAttack::HelperSprite(LPOBJ lpObj,LPOBJ lpTarget,int* damage) // OK
// PEGAR DEBAJO:
//==========================================================================================================
// else if(lpItem->m_Index == GET_ITEM(13,123)) // Skeleton
// {
// lpObj->Life -= 2;
//
// GCLifeSend(lpObj->Index,0xFF,(int)lpObj->Life,lpObj->Shield);
//
// (*damage) = ((*damage)*(100+gServerInfo.m_SkeletonIncDamageConstA))/100;
// }
//==========================================================================================================
else if (gCustomPet.CheckCustomPetByItem(lpItem->m_Index) != 0) //CustomPet
{
lpObj->Life -= 4;

GCLifeSend(lpObj->Index,0xFF,(int)lpObj->Life,lpObj->Shield);

(*damage) = ((*damage)*(100 + gCustomPet.GetCustomPetDamageRate(lpItem->m_Index))) / 100;
}

Code: [Select]
//=======================
// BUSCAR: void CAttack::DamageSprite(LPOBJ lpObj,int damage) // OK
// PEGAR DEBAJO:
//==========================================================================================================
// else if(lpItem->m_Index == GET_ITEM(13,123)) // Skeleton
// {
// lpItem->m_Durability -= (damage*(1.0f*DurabilityValue))/100;
// }
//==========================================================================================================
else if(gCustomPet.CheckCustomPetByItem(lpItem->m_Index) != 0) // CustomPets
{
lpItem->m_Durability -= (damage*(1.0f*DurabilityValue))/100;
}

DSProtocol.cpp
Code: [Select]
//========================
// BUSCAR Y PEGAR DEBAJO:
//================================================================
// void DGCharacterListRecv(SDHP_CHARACTER_LIST_RECV* lpMsg) // OK
// PMSG_CHARACTER_LIST info;
//================================================================


BYTE Petsend[256]; // esto no existia

PMSG_NEW_PET_CHARSET_SEND2 PetpMsg;

PetpMsg.header.set(0xF3, 0xF2, 0);

int Petsize = sizeof(PetpMsg);

PetpMsg.count = 0;

NEW_PET_CHARSET2 petinfo;


//========================
// BUSCAR Y PEGAR DEBAJO:
//===================================================
// memcpy(info.Name,lpInfo->name,sizeof(info.Name));
//===================================================
memcpy(petinfo.Name, lpInfo->name, sizeof(petinfo.Name));


//========================
// BUSCAR Y PEGAR DEBAJO:
//===============================================
// memset(info.CharSet,0,sizeof(info.CharSet));
//===============================================
memset(petinfo.PetCharSet, 0, sizeof(petinfo.PetCharSet));




//========================
// BUSCAR Y PEGAR DEBAJO:
//============================
// info.CharSet[16] |= 0x60;
//============================

else if (TempInventory[8] >= 147 && TempInventory[8] <= 257)
{
petinfo.PetCharSet[0] |= (TempInventory[8] - 146) << 1;
}
else if (TempInventory[8] >= 258 && TempInventory[8] <= 350)
{
petinfo.PetCharSet[1] |= (TempInventory[8] - 257) << 1;
}
else if (TempInventory[8] >= 351 && TempInventory[8] <= 450)
{
petinfo.PetCharSet[2] |= (TempInventory[8] - 350) << 1;
}
else if (TempInventory[8] >= 451 && TempInventory[8] <= 511)
{
petinfo.PetCharSet[3] |= (TempInventory[8] - 450) << 1;
}



//========================
// BUSCAR Y PEGAR DEBAJO:
//============================
// pMsg.count++;
//============================

memcpy(&Petsend[Petsize], &petinfo, sizeof(petinfo));
Petsize += sizeof(petinfo);
PetpMsg.count++;




//========================
// BUSCAR Y PEGAR DEBAJO:
//=====================================================
// gObj[lpMsg->index].ExtWarehouse = pMsg.ExtWarehouse;
//=====================================================
PetpMsg.header.size[0] = SET_NUMBERHB(Petsize);
PetpMsg.header.size[1] = SET_NUMBERLB(Petsize);
memcpy(Petsend, &PetpMsg, sizeof(PetpMsg));
DataSend(lpMsg->index, Petsend, Petsize);



ObjectManager.cpp
Agregar al inicio #include "CustomPet.h"
Code: [Select]
//=======================
// BUSCAR Y PEGAR DEBAJO:
//=======================================================
// CObjectManager::CharacterMakePreviewCharSet
//
// memset(lpObj->CharSet,0,sizeof(lpObj->CharSet));
//=======================================================

memset(lpObj->PetCharSet, 0, sizeof(lpObj->PetCharSet));


//=======================
// BUSCAR Y PEGAR DEBAJO:
//===============================
// lpObj->CharSet[16] |= 0x60;
//===============================
else if (TempInventory[8] >= 147 && TempInventory[8] <= 257)
{
lpObj->PetCharSet[0] |= (TempInventory[8] - 146) << 1;
}
else if (TempInventory[8] >= 258 && TempInventory[8] <= 350)
{
lpObj->PetCharSet[1] |= (TempInventory[8] - 257) << 1;
}
else if (TempInventory[8] >= 351 && TempInventory[8] <= 450)
{
lpObj->PetCharSet[2] |= (TempInventory[8] - 350) << 1;
}

else if (TempInventory[8] >= 451 && TempInventory[8] <= 511)
{
lpObj->PetCharSet[3] |= (TempInventory[8] - 450) << 1;
}

//=======================
// BUSCAR Y PEGAR DEBAJO:
//=====================================================================
// void CObjectManager::CharacterCalcAttribute(int aIndex) // OK
//
// gMasterSkillTree.CalcMasterSkillTreeOption(lpObj,1);
//=====================================================================
gCustomPet.CalcCustomPetOption(lpObj,1);

//=======================
// BUSCAR Y PEGAR DEBAJO:
//======================================================
// gMasterSkillTree.CalcMasterSkillTreeOption(lpObj,0);
//======================================================
gCustomPet.CalcCustomPetOption(lpObj,0);

Protocol.h
Code: [Select]
//=======================
// BUSCAR Y PEGAR DEBAJO:
//======================================================
// struct PMSG_UNION_VIEWPORT_NOTIFY
// {
// BYTE btNumberH;
// BYTE btNumberL;
// int iGuildNumber;
// BYTE btGuildRelationShip;
// char szUnionName[8];
// };
//======================================================
//CustomPets
struct PMSG_NEW_PET_CHARSET_SEND
{
PSWMSG_HEAD header; // C2:F3:E5
BYTE count;
};
struct NEW_PET_CHARSET
{
WORD index;
BYTE PetCharSet[18];
};
struct PMSG_NEW_PET_CHARSET_SEND2
{
PSWMSG_HEAD header; // C2:F3:E8
BYTE count;
};
struct NEW_PET_CHARSET2
{
char Name[10];
BYTE PetCharSet[18];
};
//--

ServerInfo.cpp
Agregar al inicio #include "CustomPet.h"
Code: [Select]
//=======================
// BUSCAR Y PEGAR DEBAJO:
//======================================================
// gCustomOnlineLottery.Load(gPath.GetFullPath("Custom\\CustomOnlineLottery.txt"));
//======================================================
gCustomPet.Load(gPath.GetFullPath("Custom\\CustomPet.txt")); //CustomPets

User.h
Code: [Select]
//=========================
// BUSCAR Y PEGAR DEBAJO:
//=========================
// BYTE CharSet[18];
//=========================

BYTE PetCharSet[18];

User.cpp
Code: [Select]
//=======================
// BUSCAR Y PEGAR DEBAJO:
//========================================================
// void gObjCharZeroSet(int aIndex)
//
// memset(lpObj->CharSet,0,sizeof(lpObj->CharSet));
//========================================================

memset(lpObj->PetCharSet, 0, sizeof(lpObj->PetCharSet));


//=======================
// BUSCAR Y REEMPLAZAR
//=========================================================
// void gObjViewportListProtocolCreate(LPOBJ lpObj) // OK
//=========================================================
void gObjViewportListProtocolCreate(LPOBJ lpObj) // OK
{
if(lpObj->Type == OBJECT_USER || lpObj->Type == OBJECT_BOTS) //MC
{
gViewport.GCViewportSimplePetSend(lpObj); //CustomPets
gViewport.GCViewportSimplePlayerSend(lpObj);
gViewport.GCViewportSimpleChangeSend(lpObj);
gViewport.GCViewportSimpleGuildSend(lpObj);
gViewport.GCViewportSimpleGensSystemSend(lpObj);
}
else
{
gViewport.GCViewportSimpleMonsterSend(lpObj);
gViewport.GCViewportSimpleSummonSend(lpObj);
}
}


//=======================
// BUSCAR Y PEGAR DEBAJO:
//=================================================
// void gObjViewportListProtocol(int aIndex) // OK
//
// if(lpObj->Type == OBJECT_USER)
//=================================================
gViewport.GCViewportNewPetSend(aIndex);


ViewPort.h
Code: [Select]
//========================
// BUSCAR Y PEGAR DEBAJO:
//=================================================
//void GCViewportSimpleGensSystemSend(LPOBJ lpObj);
//=================================================
void GCViewportNewPetSend(int aIndex);
void GCViewportSimplePetSend(LPOBJ lpObj);


ViewPort.cpp
Code: [Select]
//=======================
// BUSCAR Y PEGAR DEBAJO:
//===========================================
// CViewport::GCViewportSimpleGensSystemSend
//===========================================

void CViewport::GCViewportNewPetSend(int aIndex) // OK
{
LPOBJ lpObj = &gObj[aIndex];

BYTE send[8192];

PMSG_NEW_PET_CHARSET_SEND pMsg;

pMsg.header.set(0xF3, 0xF1, 0);

int size = sizeof(pMsg);

pMsg.count = 0;

NEW_PET_CHARSET info;

for (int n = 0; n < MAX_VIEWPORT; n++)
{
if (lpObj->VpPlayer[n].state != VIEWPORT_SEND)
{
continue;
}

if (lpObj->VpPlayer[n].type != OBJECT_USER)
{
continue;
}

if (OBJECT_RANGE(lpObj->VpPlayer[n].index) == 0)
{
continue;
}

LPOBJ lpTarget = &gObj[lpObj->VpPlayer[n].index];

#if(GAMESERVER_UPDATE>=402)

if (gDuel.GetDuelArenaBySpectator(lpTarget->Index) != 0)
{
continue;
}

#endif

if ((lpTarget->Authority & 32) != 0 && gEffectManager.CheckEffect(lpTarget, EFFECT_INVISIBILITY) != 0)
{
continue;
}

info.index = lpTarget->Index;

memcpy(info.PetCharSet, lpTarget->PetCharSet, sizeof(info.PetCharSet));

memcpy(&send[size], &info, sizeof(info));

size += sizeof(info);

pMsg.count++;
}

if (pMsg.count > 0)
{
pMsg.header.size[0] = SET_NUMBERHB(size);
pMsg.header.size[1] = SET_NUMBERLB(size);

memcpy(send, &pMsg, sizeof(pMsg));

DataSend(aIndex, send, size);
}
}

void CViewport::GCViewportSimplePetSend(LPOBJ lpObj) // OK
{

#if(GAMESERVER_UPDATE>=402)

if (gDuel.GetDuelArenaBySpectator(lpObj->Index) != 0)
{
return;
}

#endif

if ((lpObj->Authority & 32) != 0 && gEffectManager.CheckEffect(lpObj, EFFECT_INVISIBILITY) != 0)
{
return;
}

BYTE send[256];

PMSG_NEW_PET_CHARSET_SEND pMsg;

pMsg.header.set(0xF3, 0xF1, 0);

int size = sizeof(pMsg);

pMsg.count = 0;

NEW_PET_CHARSET info;

info.index = lpObj->Index;

memcpy(info.PetCharSet, lpObj->PetCharSet, sizeof(info.PetCharSet));

memcpy(&send[size], &info, sizeof(info));

size += sizeof(info);

pMsg.count++;

pMsg.header.size[0] = SET_NUMBERHB(size);

pMsg.header.size[1] = SET_NUMBERLB(size);

memcpy(send, &pMsg, sizeof(pMsg));

DataSend(lpObj->Index, send, size);

MsgSendV2(lpObj, send, size);
}

Crear CustomPet.txt que ira en la carpeta MuServer\Data\Custom
Code: [Select]
//===========================================================================================
//Index   ItemIndex   AddHP   AddMP   DmgRate   AttackSpeed   DoubleDmgRate   ModelName
//===========================================================================================
end


GetMainInfo

Crear CustomPet.h
Code: [Select]
#pragma once

#define MAX_PET_ITEM 512 // 350

struct CUSTOM_PET_INFO
{
int Index;
int ItemType;
int ItemIndex;
char ModelName[32];
};

class cCustomPet
{
public:
cCustomPet();
virtual ~cCustomPet();
void Init();
void Load(char* path);
void SetInfo(CUSTOM_PET_INFO info);
public:
CUSTOM_PET_INFO m_CustomPetInfo[MAX_PET_ITEM];
};

extern cCustomPet gCustomPet2;


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

cCustomPet gCustomPet2;

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

cCustomPet::~cCustomPet() // OK
{

}

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

void cCustomPet::Load(char* path) // OK
{
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;
}

CUSTOM_PET_INFO info;

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

static int CustomItemIndexCount = 0;

info.Index = CustomItemIndexCount++;

info.ItemType = lpMemScript->GetNumber();

info.ItemIndex = lpMemScript->GetAsNumber();

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

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

delete lpMemScript;
}

void cCustomPet::SetInfo(CUSTOM_PET_INFO info) // OK
{
if (info.Index < 0 || info.Index >= MAX_PET_ITEM)
{
return;
}

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


GetMainInfo.cpp
Code: [Select]
//=======================
// BUSCAR Y PEGAR DEBAJO:
//===========================================
// NPCNAME_DATA CustomNPCName[MAX_CUSTOM_NPCNAME];
//===========================================
CUSTOM_PET_INFO CustomPetInfo[MAX_PET_ITEM]; //CustomPets

//=======================
// BUSCAR Y PEGAR DEBAJO:
//===========================================
// gNPCName.Load("CustomNPCName.txt");
//===========================================
gCustomPet2.Load("CustomPet.txt"); //CustomPets

//=======================
// BUSCAR Y PEGAR DEBAJO:
//===========================================
// memcpy(info.CustomNPCName, gNPCName.m_CustomNpcName, sizeof(info.CustomNPCName));
//===========================================
memcpy(info.CustomPetInfo, gCustomPet2.m_CustomPetInfo, sizeof(info.CustomPetInfo)); //Custom Pets

Crear CustomPet.txt que ira en la carpeta MAIN_INFO
Code: [Select]
//Type	Index  ModelName
end


Main

Crear CustomPet.h
Code: [Select]
#pragma once

#define MAX_PET_ITEM 512 // 350

struct CUSTOM_PET_INFO
{
int Index;
int ItemType;
int ItemIndex;
char ModelName[32];
};

class cCustomPet
{
public:
cCustomPet();
virtual ~cCustomPet();
void Init();
void Load(CUSTOM_PET_INFO* info);
void SetInfo(CUSTOM_PET_INFO info);
CUSTOM_PET_INFO* GetInfo(int index);
CUSTOM_PET_INFO* GetInfoByItem(int ItemType);
BOOL CheckCustomItemByItem(int ItemIndex);
public:
CUSTOM_PET_INFO m_CustomPetInfo[MAX_PET_ITEM];
};

extern cCustomPet gCustomPet2;


Crear CustomPet.cpp
Code: [Select]
#include "stdafx.h"
#include "CustomPet.h"
#include "Defines.h"


cCustomPet gCustomPet2;


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

cCustomPet::~cCustomPet() // OK
{

}

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

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

void cCustomPet::SetInfo(CUSTOM_PET_INFO info) // OK
{
if (info.Index < 0 || info.Index >= MAX_PET_ITEM)
{
return;
}

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

CUSTOM_PET_INFO* cCustomPet::GetInfo(int index) // OK
{
if (index < 0 || index >= MAX_PET_ITEM)
{
return 0;
}

if (this->m_CustomPetInfo[index].Index != index)
{
return 0;
}

return &this->m_CustomPetInfo[index];
}

CUSTOM_PET_INFO* cCustomPet::GetInfoByItem(int ItemType) // OK
{
for (int n = 0; n < MAX_PET_ITEM; n++)
{
CUSTOM_PET_INFO* lpInfo = this->GetInfo(n);

if (lpInfo == 0)
{
continue;
}

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

return 0;
}

BOOL cCustomPet::CheckCustomItemByItem(int ItemIndex) // OK
{
if (this->GetInfoByItem(ItemIndex) != 0)
{
return 1;
}

return 0;
}


Crear Pet.h
Code: [Select]
#pragma once

#include "Object.h"
#include "Defines.h"
#include "zzzmathlib.h"
#define PI 3.14159265


//Pet
#define pMaybeDrawPetHP ((char(__stdcall*)(int a1, int a2)) 0x7DFDB0)
#define sub_50D100 ((size_t(__cdecl*)(char * a1, char * a2, ...)) 0x50D100)
#define sub_7DFA60 ((int(__stdcall*)(signed int PosX, signed int PosY, int a3, signed int a4, signed int a5, char a6)) 0x7DFA60)
#define sub_501790 ((char(__cdecl*)(int a1, char a2)) 0x501790)
#define sub_540C30 ((int(__cdecl*)(float, float, float, float)) 0x540C30)
#define sub_540EA0 ((int(__cdecl*)(float, float a2, float)) 0x540EA0)
#define sub_959CE0 ((int(__cdecl*)(DWORD, DWORD)) 0x959CE0)
#define sub_95A1E0 ((int(__cdecl*)(DWORD a1, DWORD a2, float *a3)) 0x95A1E0)
#define sub_541460 ((void(__cdecl*)(int a1)) 0x541460)
#define sub_4CDA10 ((LPVOID(*)())0x4CDA10)
#define sub_969C50 ((int(__thiscall*)(LPVOID This, signed int a2)) 0x969C50)
#define sub_5D6700 ((int(__cdecl*)(unsigned __int8 a1, unsigned __int8 a2)) 0x5D6700)
#define sub_5422E0 ((bool(__cdecl*)(__int16 a1)) 0x5422E0)
#define sub_542310 ((__int16(__cdecl*)(int a1, int a2, char a3)) 0x542310)
#define sub_545030 ((int(__thiscall*)(LPVOID This, int a2, DWORD *a3, DWORD *BMD, char a5)) 0x545030)
#define sub_6D9070 ((void(__cdecl*)(int a1, int a2, int a3, float * a4, int a5, int a6, __int16 a7, __int16 a8, __int16 a9, __int16 a10, float a11, __int16 a12)) 0x6D9070)
#define sub_74CD30 ((int(__cdecl*)(int a1, int a2, int a3, vec3_t a4, int a5, float a6, int a7)) 0x74CD30)
#define sub_74CD30_ ((int(__cdecl*)(DWORD a1, vec3_t a2, int a3, vec3_t a4, int a5, float a6, int a7)) 0x74CD30)
#define sub_4DB1C0 ((bool(__cdecl*)(signed int a1))0x4DB1C0)
#define sub_4C8640 ((bool(__thiscall*)(void * This,char a2)) 0x4C8640)
#define sub_4DB250 ((int(__cdecl*)()) 0x4DB250)
#define sub_4E44A0 ((bool(__thiscall*)(int This)) 0x4E44A0)
#define sub_7293F0 ((char*(__cdecl*)(int a1, int a2, int a3, int a4, int a5, char a6, int a7)) 0x7293F0)
#define sub_5039A0 ((void(__cdecl*)(int a1, int a2)) 0x5039A0)
#define sub_72D1B0 ((void(__cdecl*)(int a1, int a2, int a3, int a4, int a5, int a6, float a7, __int16 a8, __int16 a9, char a10, int a11, int a12, __int16 a13)) 0x72D1B0)
#define sub_542280 ((bool(__cdecl*)(__int16 a1)) 0x542280)
#define sub_545180 ((char(__thiscall*)(void * This, int a2, int a3, int a4, float a5, int a6, int a7)) 0x545180)
#define sub_5CA0D0 ((void(__cdecl*)( int a1,  int a2, int a3, int a4, int a5, int a6, char a7)) 0x5CA0D0)
#define sub_9250E0 ((int(__thiscall*)(LPVOID This, int a1, int a2, int a3, int a4, int a5, int a6)) 0x9250E0)
#define sub_4DB230 ((LPVOID(*)())0x4DB230)
#define sub_501700 ((DWORD(__cdecl*)(DWORD, DWORD, DWORD, DWORD, DWORD)) 0x501700)
#define sub_57D9A0 ((DWORD(__cdecl*)(DWORD)) 0x57D9A0)
#define sub_58AA80 ((DWORD(__cdecl*)(DWORD)) 0x58AA80)
#define sub_4E6670 ((DWORD(__cdecl*)(DWORD)) 0x4E6670)
#define sub_57F020 ((DWORD(__cdecl*)(DWORD)) 0x57F020)

#define sub_4F8C30 ((DWORD(__cdecl*)(DWORD)) 0x4F8C30)
#define sub_534B40 ((DWORD(__cdecl*)(DWORD)) 0x534B40)
#define sub_5012D0 ((DWORD(__cdecl*)(DWORD)) 0x5012D0)
#define sub_9253D0 ((int(__thiscall*)(LPVOID This,int a1, short a2)) 0x9253D0)
#define sub_4F94A0 ((DWORD(__cdecl*)(DWORD)) 0x4F94A0)
#define sub_57FC30 ((int(__cdecl*)(BYTE CharSet)) 0x57FC30)
#define sub_587500 ((DWORD(__cdecl*)(char)) 0x587500)
#define sub_402BC0 ((LPVOID(*)())0x402BC0)

#define sub_405230 ((int(__cdecl*)(char a1)) 0x405230)
#define sub_4F9930 ((int(__cdecl*)(char *a1)) 0x4F9930)
#define sub_4F8B80 ((int(__cdecl*)(int a1)) 0x4F8B80)
#define sub_4E65A0 ((bool(__cdecl*)(signed int a1)) 0x4E65A0)
#define sub_4FA780 ((int(__thiscall*)(int This, int a2)) 0x4FA780)
#define sub_5013B0 ((char(__cdecl*)(int a1, int a2, int a3, int a4, int a5)) 0x5013B0)
#define sub_4EFF70 ((void(__cdecl*)(LPVOID This,int a1)) 0x4EFF70)
#define sub_96A4C0 ((int(__thiscall*)(LPVOID This, signed int a2)) 0x96A4C0)
#define sub_57FD90 ((void(__cdecl*)(int a1, BYTE * a2, int a3, int a4)) 0x57FD90)
#define sub_558630 ((void(__cdecl*)(int a1, int a2, int a3)) 0x558630)
#define SLODWORD(x) (*((DWORD*)&(x)))
#define sub_771310 ((int(__cdecl*)(int a1, int a2, float a3, vec3_t a4, int a5, float a6, int a7)) 0x771310)
#define sub_771310_ ((int(__cdecl*)(int a1, vec3_t a2, float a3, vec3_t a4, int a5, float a6, int a7)) 0x771310)
#define sub_95A340 ((int(__cdecl*)(int a1, int a2, int a3)) 0x95A340)
#define sub_5440B0 ((int(__fastcall*)(int a1, int a2, int a3, float a4, float a5, __int16 a6, int a7, int a8, char a9, char a10)) 0x5440B0)
#define sub_922D50 ((signed int(__thiscall*)(int This, unsigned int a2)) 0x922D50);
#define sub_580BB0 ((int(__cdecl*)(DWORD, DWORD)) 0x580BB0)
#define sub_4CD7F0 ((int(__stdcall*)(DWORD,DWORD)) 0x4CD7F0)
#define pDrawMonsterEffect ((char(__cdecl*)(int a1, int a2, int a3)) 0x8C7790)
#define sub_5D81B0 ((int(__cdecl*)(float, float)) 0x5D81B0)
#define sub_544E60 ((void(__thiscall*)(LPVOID This, vec3_t a2, int a3, signed int a4, int a5)) 0x544E60)
#define sub_9593B0 ((int(__stdcall*)(HDC This, LPCSTR lpMultiByteStr, int, LPSIZE psizl)) 0x9593B0)
#define pSetTextSize ((int(__thiscall*)(LPVOID This, HFONT a2)) 0x420120)
#define pFontBold *(DWORD*)0xE8C58C
#define sub_8CBA40 ((int(__cdecl*)(int, int, float, float, float, float, GLfloat *v)) 0x8CBA40) //Effect? 32141
#define sub_5DAD80 ((int(__cdecl*)(int, float, float, float, float, GLfloat *v, float, float, float, char)) 0x5DAD80) //effect ?32313
#define sub_56EFC0 ((int(__cdecl*)(int, int, float, int, float, float, float)) 0x56EFC0)
#define sub_4E65C0 ((bool(__cdecl*)(signed int MapNumber)) 0x4E65C0)
#define sub_89CB00 ((LPVOID(*)())0x89CB00)
#define sub_89CB90 ((int(__thiscall*)(LPVOID This)) 0x89CB90)
#define pPreviewPetThis            *(DWORD*)0x007BC4F04
#define LODWORD(h)                ((DWORD)(__int64(h) & __int64(0xffffffff)))


#define MAX_LOOTOBJECT 1024 // 1000


//#define iPetAddInventoryPos 0x005CC8E4 // 1.04E ENG

class CustomPet
{
public:
CustomPet();
virtual ~CustomPet();
void Load();
static void PreviewCharSet(int ObjectIndex, BYTE * CharSet, lpViewObj Object, int Mode);
static void PetsMovement(int a1, char a2);
static char PetHPBar(int a1, int a2);
static void RefreshViewPortItem(int a1);
static void PetFollowCharacter(int a1, float MaxPos);

DWORD PetTickCount;
};

extern CustomPet gCustomPet;


Crear Pet.cpp
Code: [Select]
#include "stdafx.h"
#include "Pet.h"
#include "Import.h"
#include "User.h"
#include "PetProtocol.h"
#include "TMemory.h"
#include "Protect.h"
#include "Interface.h"
#include "Util.h"


CustomPet gCustomPet;

CustomPet::CustomPet() //OK
{
this->PetTickCount = 0;
}

CustomPet::~CustomPet()
{

}

char CustomPet::PetHPBar(int a1, int a2)
{
lpViewObj Object = &*(ObjectPreview*)oUserPreviewStruct;

char result;
char PetName[255];
int PetHP;

if ((Object->PetSlot < 7827 || Object->PetSlot > 7831)
&& Object->PetSlot != 7891
&& Object->PetSlot != 7892
&& Object->PetSlot != 7894
&& Object->PetSlot != 7907
&& Object->PetSlot != 7933
&& Object->PetSlot != 7950
&& Object->PetSlot != 7864
&& (Object->PetSlot < ITEM2(13, 150) || Object->PetSlot > ITEM2(13, 410)))
{
result = 0;
}
else
{
memset(&PetHP, 0, 255);
PetName[0] = 0;
switch (Object->PetSlot)
{
case 7827:
wsprintf(PetName, pGetTextLine_(pTextLineThis, 353));
break;
case 7828:
wsprintf(PetName, (char *)oUserTextObject + 84 * (*(WORD *)(oUserPreviewStruct + 556) - 1171));
break;
case 7829:
wsprintf(PetName, pGetTextLine_(pTextLineThis, 355));
break;
case 7830:
wsprintf(PetName, pGetTextLine_(pTextLineThis, 354));
break;
case 7831:
wsprintf(PetName, pGetTextLine_(pTextLineThis, 1187));
break;
case 7864:
wsprintf(PetName, pGetTextLine_(pTextLineThis, 1916));
break;
case 7891:
wsprintf(PetName, (char *)(oUserTextObject + 564480));
break;
case 7892:
wsprintf(PetName, (char *)(oUserTextObject + 564564));
break;
case 7894:
wsprintf(PetName, (char *)(oUserTextObject + 564732));
break;
case 7907:
wsprintf(PetName, (char *)(oUserTextObject + 565824));
break;
case 7933:
wsprintf(PetName, (char *)(oUserTextObject + 568008));
break;
case 7950:
wsprintf(PetName, (char *)(oUserTextObject + 569436));
break;
default:
wsprintf(PetName, (char *)oUserTextObject + 84 * (*(WORD *)(oUserPreviewStruct + 556) - 1171));
break;
}

PetHP = *(BYTE*)(oUserObjectStruct_ + 5550);
//sub_7DFA60(1, 50, (int)&PetName, PetHP, 255, 0);
sub_7DFA60(2, 26, (int)&PetName, PetHP, 255, 0);
result = 1;

}

return result;
}


bool IsCharacterMove(int a1)
{

if ((*(WORD *)(*(DWORD *)(a1 + 472) + 18) >= 15
&& *(WORD *)(*(DWORD *)(a1 + 472) + 18) <= 37)
|| *(WORD *)(*(DWORD *)(a1 + 472) + 18) == 74
|| *(WORD *)(*(DWORD *)(a1 + 472) + 18) == 75
|| *(WORD *)(*(DWORD *)(a1 + 472) + 18) == 259
|| *(WORD *)(*(DWORD *)(a1 + 472) + 18) == 260)
{
return true;
}
return false;
}


void CustomPet::PetFollowCharacter(int a1, float MaxPos)
{
float v22;
vec3_t MUFLOAT;
vec3_t PetPos;
vec3_t OwnerPos;
vec3_t CurrentPos;
int LootPosition = 1000;

OwnerPos[0] = *(float *)(*(DWORD *)(a1 + 472) + 252);
OwnerPos[1] = *(float *)(*(DWORD *)(a1 + 472) + 256);
OwnerPos[2] = *(float *)(*(DWORD *)(a1 + 472) + 260);

PetPos[0] = OwnerPos[0] - *(float *)(a1 + 252);
PetPos[1] = OwnerPos[1] - *(float *)(a1 + 256);
PetPos[2] = OwnerPos[2] - *(float *)(a1 + 260);

CurrentPos[0] = *(float *)(a1 + 252);
CurrentPos[1] = *(float *)(a1 + 256);
CurrentPos[2] = *(float *)(a1 + 260);

float PetMapPos = PetPos[0] * PetPos[0] + PetPos[1] * PetPos[1];

float diff1 = ((OwnerPos[0] > CurrentPos[0]) ? OwnerPos[0] - CurrentPos[0] : CurrentPos[0] - OwnerPos[0]);
float diff2 = ((OwnerPos[1] > CurrentPos[1]) ? OwnerPos[1] - CurrentPos[1] : CurrentPos[1] - OwnerPos[1]);

float angle = atan(diff2 / diff1) * 180 / PI;
float angle2 = atan2(diff1, diff2) * 180 / PI; //

if (PetMapPos >= MaxPos * MaxPos)
{
float speed;
if (PetMapPos >= (MaxPos * 2) * (MaxPos * 2))
{
speed = 14.0f;
speed += 1.0f;
*(float *)(a1 + 120) = 0.89000002f;
}
else if (PetMapPos >= (MaxPos + (MaxPos / 2)) * (MaxPos + (MaxPos / 2)))
{
speed = 13.0f;
*(float *)(a1 + 120) = 0.69000002f;
}
else
{
speed = 10.0f;
*(float *)(a1 + 120) = 0.40000001f;
}

double MoveX = speed *(cos(angle * PI / 180));
double MoveY = speed *(sin(angle * PI / 180));

if (CurrentPos[0] < OwnerPos[0] && CurrentPos[1] < OwnerPos[1])
{
*(float *)(a1 + 252) += (float)MoveX;
*(float *)(a1 + 256) += (float)MoveY;
*(float *)(a1 + 272) = 180;
*(float *)(a1 + 272) -= angle2;
}
else if (CurrentPos[0] < OwnerPos[0] && CurrentPos[1] > OwnerPos[1])
{
*(float *)(a1 + 252) += (float)MoveX;
*(float *)(a1 + 256) -= (float)MoveY;
*(float *)(a1 + 272) = angle2;
}
else if (CurrentPos[0] > OwnerPos[0] && CurrentPos[1] > OwnerPos[1])
{
*(float *)(a1 + 252) -= (float)MoveX;
*(float *)(a1 + 256) -= (float)MoveY;
*(float *)(a1 + 272) = 360;
*(float *)(a1 + 272) -= angle2;
}
else if (CurrentPos[0] > OwnerPos[0] && CurrentPos[1] < OwnerPos[1])
{
*(float *)(a1 + 252) -= (float)MoveX;
*(float *)(a1 + 256) += (float)MoveY;
*(float *)(a1 + 272) = 180;
*(float *)(a1 + 272) += angle2;
}
//else
//{
// *(float *)(a1 + 252) += abs(MoveX);
// *(float *)(a1 + 256) += abs(MoveY);
// *(float *)(a1 + 272) = *(float *)(*(DWORD *)(a1 + 472) + 272);
//}
*(WORD*)(a1 + 18) = 2;
}
else if (PetMapPos < 70 * 70)
{
if ((*(WORD *)(*(DWORD *)(a1 + 472) + 18) < 15 || *(WORD *)(*(DWORD *)(a1 + 472) + 18) > 37))
{
*(WORD*)(a1 + 18) = 2;
sub_959CE0(a1 + 264, a1 + 372);
sub_95A1E0(a1 + 168, a1 + 372, MUFLOAT);
*(float *)(a1 + 252) = *(float *)(a1 + 252) + MUFLOAT[0];
*(float *)(a1 + 256) = *(float *)(a1 + 256) + MUFLOAT[1];
//*(float *)(a1 + 260) = *(float *)(a1 + 260);
}

}
else
{
if (GetTickCount() <= gCustomPet.PetTickCount + 800)
{
*(WORD*)(a1 + 18) = 1;
}
else if (GetTickCount() <= gCustomPet.PetTickCount + 12000)
{
*(WORD*)(a1 + 18) = 0;
}
else
{
gCustomPet.PetTickCount = GetTickCount();
}
}

if (PetMapPos >= LootPosition * LootPosition)
{
if (*(float *)(a1 + 252) < *(float *)(*(DWORD *)(a1 + 472) + 252))
*(float *)(a1 + 252) = *(float *)(a1 + 252) + PetPos[0] + rand() % 360;
if (*(float *)(a1 + 252) > *(float *)(*(DWORD *)(a1 + 472) + 252))
*(float *)(a1 + 252) = *(float *)(a1 + 252) + PetPos[0] - rand() % 360;

if (*(float *)(a1 + 256) < *(float *)(*(DWORD *)(a1 + 472) + 256))
*(float *)(a1 + 256) = *(float *)(a1 + 256) + PetPos[1] + rand() % 360;
if (*(float *)(a1 + 256) > *(float *)(*(DWORD *)(a1 + 472) + 256))
*(float *)(a1 + 256) = *(float *)(a1 + 256) + PetPos[1] - rand() % 360;
}

*(float *)(a1 + 260) = *(float *)(*(DWORD *)(a1 + 472) + 260);

if (!(rand() % 100))
{
if (PetMapPos < MaxPos * MaxPos)
{
v22 = -(float)(rand() % 64 + 16) * 0.1000000014901161f;
*(float *)(a1 + 272) = (float)(rand() % 360);
}
else
{
v22 = -(float)(rand() % 64 + 128) * 0.1000000014901161f;
}
*(float *)(a1 + 168) = 0.0f;
*(float *)(a1 + 172) = v22;
*(float *)(a1 + 176) = (float)(rand() % 64 - 32) * 0.1000000014901161f;
}

if (*(float *)(a1 + 260) < *(float *)(*(DWORD *)(a1 + 472) + 260) + 100.0f)
*(float *)(a1 + 176) = *(float *)(a1 + 176) + 1.5f;
if (*(float *)(a1 + 260) > *(float *)(*(DWORD *)(a1 + 472) + 260) + 200.0f)
*(float *)(a1 + 176) = *(float *)(a1 + 176) - 1.5f;
}


void CustomPet::PetsMovement(int a1, char a2)
{


if (*(BYTE *)(a1 + 4))
{
lpViewObj lpObj = &*(ObjectPreview*)*(DWORD*)0x07BC4F04;

if (*(DWORD*)0xE609E8 == 5
&& (*(DWORD*)0xE61E18 < 65 || *(DWORD*)0xE61E18 > 68)
&& (!*(BYTE *)(*(DWORD *)(a1 + 472) + 4) || *(BYTE *)(*(DWORD *)(a1 + 472) + 24) != 1))
{
*(BYTE *)(a1 + 4) = 0;
sub_501790(a1, a2);
return;
}

DWORD SkinID = *(DWORD *)(a1 + 48);
DWORD Model = sub_969C50(sub_4CDA10(), SLODWORD(SkinID));

if (Model)
{
if ((SkinID >= ITEM2(13, 147) && SkinID <= ITEM2(13, 410)))
{
gCustomPet.PetFollowCharacter(a1, 150);
switch (SkinID)
{
case ITEM2(13, 226): //King
case ITEM2(13, 281): //Prince
case ITEM2(13, 388): //Prince =)) lazy
*(float*)(a1 + 260) = *(float*)(*(DWORD*)(a1 + 472) + 260) + 40.0f;
break;
case ITEM2(13, 214): //Hawk
case ITEM2(13, 215): //Hawk Evo
case ITEM2(13, 174): //CherryBlossom
case ITEM2(13, 175): //CherryBlossom Evo
case ITEM2(13, 178): //Chrysanthemum
case ITEM2(13, 179): //Chrysanthemum Evo
case ITEM2(13, 200): //Ghost
*(float*)(a1 + 260) = *(float*)(*(DWORD*)(a1 + 472) + 260) + 30.0f;
break;
case ITEM2(13, 201): //Ghost Evo
*(DWORD *)(a1 + 68) = 1;
*(float *)(a1 + 260) = *(float*)(*(DWORD*)(a1 + 472) + 260) + 30.0f;
break;
}
}
}
}

((void(*)(int, char)) 0x501790)(a1, a2);
}


void CustomPet::PreviewCharSet(int ObjectIndex, BYTE * CharSet, lpViewObj Object, int Mode)
{
pPreviewCharSet(ObjectIndex, CharSet, Object, Mode);

lpViewObj lpObj;

if (Object == 0)
{
lpObj = &*(lpViewObj)pGetPreviewStruct(pPreviewThis(), ObjectIndex);
}
else
{
lpObj = Object;
}

PMSG_NEW_CHARACTER_CHARSET_RECV* SelectCharSet = GetNewCharSetSelectCharacter(lpObj->Name);

if (pPlayerState == 4)
{
if (SelectCharSet > 0)
{
BYTE sNewCharSet0 = SelectCharSet->PetCharSet[0] >> 1;
BYTE sNewCharSet1 = SelectCharSet->PetCharSet[1] >> 1;
BYTE sNewCharSet2 = SelectCharSet->PetCharSet[2] >> 1;
BYTE sNewCharSet3 = SelectCharSet->PetCharSet[3] >> 1;

if (sNewCharSet0 > 0 && sNewCharSet0 < 112)
{
if (Mode)
{
*(BYTE *)(Mode + 4) = 0;
}
else
{
sub_5012D0((int)&lpObj->m_Model);
sub_9253D0(sub_4DB230(), (int)&lpObj->m_Model, (int)&lpObj->PetSlot);
}

lpObj->PetSlot = ITEM2(13, 147) + (sNewCharSet0 - 1);

if (Mode)
sub_5013B0(lpObj->PetSlot, (int)&lpObj->m_Model + 252, (int)&lpObj->m_Model, Mode, 0);
else
sub_501700(lpObj->PetSlot, (int)&lpObj->m_Model + 252, (int)&lpObj->m_Model, 0, 0);
}

if (sNewCharSet1 > 0 && sNewCharSet1 < 94)
{
if (Mode)
{
*(BYTE *)(Mode + 4) = 0;
}
else
{
sub_5012D0((int)&lpObj->m_Model);
sub_9253D0(sub_4DB230(), (int)&lpObj->m_Model, (int)&lpObj->PetSlot);
}

lpObj->PetSlot = ITEM2(13, 258) + (sNewCharSet1 - 1);

if (Mode)
sub_5013B0(lpObj->PetSlot, (int)&lpObj->m_Model + 252, (int)&lpObj->m_Model, Mode, 0);
else
sub_501700(lpObj->PetSlot, (int)&lpObj->m_Model + 252, (int)&lpObj->m_Model, 0, 0);
}

if (sNewCharSet2 > 0 && sNewCharSet2 < 100)
{
if (Mode)
{
*(BYTE *)(Mode + 4) = 0;
}
else
{
sub_5012D0((int)&lpObj->m_Model);
sub_9253D0(sub_4DB230(), (int)&lpObj->m_Model, (int)&lpObj->PetSlot);
}

lpObj->PetSlot = ITEM2(13, 351) + (sNewCharSet2 - 1);

if (Mode)
sub_5013B0(lpObj->PetSlot, (int)&lpObj->m_Model + 252, (int)&lpObj->m_Model, Mode, 0);
else
sub_501700(lpObj->PetSlot, (int)&lpObj->m_Model + 252, (int)&lpObj->m_Model, 0, 0);
}

if (sNewCharSet3 > 0 && sNewCharSet3 < 100)
{
if (Mode)
{
*(BYTE *)(Mode + 4) = 0;
}
else
{
sub_5012D0((int)&lpObj->m_Model);
sub_9253D0(sub_4DB230(), (int)&lpObj->m_Model, (int)&lpObj->PetSlot);
}

lpObj->PetSlot = ITEM2(13, 451) + (sNewCharSet3 - 1);

if (Mode)
sub_5013B0(lpObj->PetSlot, (int)&lpObj->m_Model + 252, (int)&lpObj->m_Model, Mode, 0);
else
sub_501700(lpObj->PetSlot, (int)&lpObj->m_Model + 252, (int)&lpObj->m_Model, 0, 0);
}
}
}

NEW_PET_STRUCT* lpCharSet = GetNewPetCharSet(lpObj->aIndex);

if (lpCharSet > 0)
{
BYTE NewCharSet0 = lpCharSet->PetCharSet[0] >> 1;
BYTE NewCharSet1 = lpCharSet->PetCharSet[1] >> 1;
BYTE NewCharSet2 = lpCharSet->PetCharSet[2] >> 1;
BYTE NewCharSet3 = lpCharSet->PetCharSet[3] >> 1;

if (NewCharSet0 > 0 && NewCharSet0 < 112)
{
if (Mode)
{
*(BYTE *)(Mode + 4) = 0;
}
else
{
sub_5012D0((int)&lpObj->m_Model);
sub_9253D0(sub_4DB230(), (int)&lpObj->m_Model, (int)&lpObj->PetSlot);
}

lpObj->PetSlot = ITEM2(13, 147) + (NewCharSet0 - 1);

if (Mode)
sub_5013B0(lpObj->PetSlot, (int)&lpObj->m_Model + 252, (int)&lpObj->m_Model, Mode, 0);
else
sub_501700(lpObj->PetSlot, (int)&lpObj->m_Model + 252, (int)&lpObj->m_Model, 0, 0);
}

if (NewCharSet1 > 0 && NewCharSet1 < 94)
{
if (Mode)
{
*(BYTE *)(Mode + 4) = 0;
}
else
{
sub_5012D0((int)&lpObj->m_Model);
sub_9253D0(sub_4DB230(), (int)&lpObj->m_Model, (int)&lpObj->PetSlot);
}

lpObj->PetSlot = ITEM2(13, 258) + (NewCharSet1 - 1);

if (Mode)
sub_5013B0(lpObj->PetSlot, (int)&lpObj->m_Model + 252, (int)&lpObj->m_Model, Mode, 0);
else
sub_501700(lpObj->PetSlot, (int)&lpObj->m_Model + 252, (int)&lpObj->m_Model, 0, 0);
}

if (NewCharSet2 > 0 && NewCharSet2 < 100)
{
if (Mode)
{
*(BYTE *)(Mode + 4) = 0;
}
else
{
sub_5012D0((int)&lpObj->m_Model);
sub_9253D0(sub_4DB230(), (int)&lpObj->m_Model, (int)&lpObj->PetSlot);
}

lpObj->PetSlot = ITEM2(13, 351) + (NewCharSet2 - 1);

if (Mode)
sub_5013B0(lpObj->PetSlot, (int)&lpObj->m_Model + 252, (int)&lpObj->m_Model, Mode, 0);
else
sub_501700(lpObj->PetSlot, (int)&lpObj->m_Model + 252, (int)&lpObj->m_Model, 0, 0);
}

if (NewCharSet3 > 0 && NewCharSet3 < 100)
{
if (Mode)
{
*(BYTE *)(Mode + 4) = 0;
}
else
{
sub_5012D0((int)&lpObj->m_Model);
sub_9253D0(sub_4DB230(), (int)&lpObj->m_Model, (int)&lpObj->PetSlot);
}

lpObj->PetSlot = ITEM2(13, 451) + (NewCharSet3 - 1);

if (Mode)
sub_5013B0(lpObj->PetSlot, (int)&lpObj->m_Model + 252, (int)&lpObj->m_Model, Mode, 0);
else
sub_501700(lpObj->PetSlot, (int)&lpObj->m_Model + 252, (int)&lpObj->m_Model, 0, 0);
}

}

BYTE CustomPets = CharSet[15] >> 1;

if (CharSet[11] & 1) // == 1
{
lpObj->PetSlot = 7831;
if (Mode)
sub_5013B0(226, (int)&lpObj->m_Model + 252, (int)&lpObj->m_Model, Mode, 0);
else
sub_501700(226, (int)&lpObj->m_Model + 252, (int)&lpObj->m_Model, 0, 0);
}

}


void CustomPet::RefreshViewPortItem(int a1)
{
signed int v1; // ST14_4@1
int result; // eax@1
int v6; // [sp+Ch] [bp-14h]@2
int v7; // [sp+10h] [bp-10h]@1
int v8; // [sp+14h] [bp-Ch]@2
BYTE v9; // [sp+1Dh] [bp-3h]@2
BYTE v10; // [sp+1Eh] [bp-2h]@2
BYTE v11; // [sp+1Fh] [bp-1h]@2

v1 = sub_57D9A0(*(BYTE *)(a1 + 4) + (*(BYTE *)(a1 + 3) << 8));
result = sub_96A4C0(sub_402BC0(), v1);
v7 = result;
if (result)
{
v6 = result + 776;
v8 = sub_58AA80(a1 + 5);
v11 = *(BYTE *)(a1 + 6) & 0xF;
v10 = *(BYTE *)(a1 + 8) & 0x3F;
v9 = *(BYTE *)(a1 + 9);
switch ((signed int)*(BYTE *)(a1 + 6) >> 4)
{
case 8:
if (v8 == 0x1FFF)
{
*(WORD *)(v7 + 556) = -1;
sub_5012D0(v6);
sub_9253D0(sub_4DB230(), v7, -1);
}
else
{
*(WORD *)(v7 + 556) = v8 + 1171;
*(BYTE *)(v7 + 558) = 0;
if (v8 >= ITEM(13, 147) && v8 <= ITEM(13, 410))
{
sub_501700(v8 + 1171, v6 + 252, v6, 0, 0);
}
}
break;
default:
break;
}
}
((void(*)(int))0x6411A0)(a1);
}


void CustomPet::Load()
{
SetOp((LPVOID)0x0048E17D, CustomPet::PetsMovement, ASM::CALL);
SetOp((LPVOID)0x00503756, CustomPet::PetsMovement, ASM::CALL);
SetOp((LPVOID)0x007DF8BB, CustomPet::PetHPBar, ASM::CALL);
SetOp((LPVOID)0x48FB8C, CustomPet::PreviewCharSet, ASM::CALL);
SetOp((LPVOID)0x63D2D8, CustomPet::PreviewCharSet, ASM::CALL);
SetOp((LPVOID)0x641189, CustomPet::PreviewCharSet, ASM::CALL);
SetOp((LPVOID)0x641F42, CustomPet::PreviewCharSet, ASM::CALL);
SetOp((LPVOID)0x642598, CustomPet::PreviewCharSet, ASM::CALL);
SetOp((LPVOID)0x65EA2D, CustomPet::PreviewCharSet, ASM::CALL);
SetOp((LPVOID)0x664267, CustomPet::RefreshViewPortItem, ASM::CALL);

}


Crear PetHook.h
Code: [Select]
// Original
//#define ItemId(x, y)            ((x * 512) + y)
//#define pPreviewPetThis            *(DWORD*)0x007BC4F04
//#define LODWORD(h)                ((DWORD)(__int64(h) & __int64(0xffffffff)))


// Fix
#define ItemId(x, y)            ((x * 512) + y)
#define MAX_ITEM_INFO 350
#define pGetViewportByIndex ((signed int(__cdecl*)(int a1)) 0x57D9A0)
#define sub_6D9070_Addr1 ((int(__cdecl*)(int Type, VAngle* Position, VAngle* Angle, vec3_t Light, int SubType, ObjectModel* Owner, __int16 PKKey, __int16 Skill, __int16 Scale, __int16 SkillSerial, float SkillAngle, __int16 SkillHotKey)) 0x6D9070)
#define  pGCItemChangeRecv ((int(__cdecl*)(PMSG_ITEM_CHANGE_RECV *lpMsg)) 0x6411A0)


namespace eBugType
{
enum T
{
NewPet = 7972,
};
};

// Fix
struct PMSG_ITEM_CHANGE_RECV
{
PBMSG_HEAD header; // C1:25
BYTE index[2];
BYTE ItemInfo[MAX_ITEM_INFO];
};

typedef void(__thiscall *ObjCreatePet)(int ItemId);
extern ObjCreatePet gObjCreatePet;

typedef int(__cdecl *ObjCreateBug)(int BugId, int Arg2, int Arg3, int Arg4, int Arg5);
extern ObjCreateBug gObjCreateBug;

void gObjCreatePetExHook();

Crear PetHook.cpp
Code: [Select]
#include "stdafx.h"
#include "Protect.h"
#include "PetHook.h"
#include "Util.h"
#include "Defines.h"
#include "Import.h"
#include "TMemory.h"
#include "Pet.h"

ObjCreateBug gObjCreateBug = (ObjCreateBug)0x00501700;
ObjCreatePet gObjCreatePet = (ObjCreatePet)0x00835E40;

void gObjCreatePetEx(int ItemId)
{
int ItemSwitch = *(WORD*)ItemId;
int PetPreview = LODWORD(pPreviewPetThis) + 776;
if (ItemSwitch >= ITEM(13, 147) && ItemSwitch <= ITEM(13, 410))
{
gObjCreateBug(ItemSwitch + 1171, PetPreview + 252, PetPreview, 0, 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, 147) //WTF
|| *(WORD*)ItemId == ITEM(13, 148)
|| *(WORD*)ItemId == ITEM(13, 149)
|| *(WORD*)ItemId == ITEM(13, 150)
|| *(WORD*)ItemId == ITEM(13, 151)
|| *(WORD*)ItemId == ITEM(13, 152)
|| *(WORD*)ItemId == ITEM(13, 153)
|| *(WORD*)ItemId == ITEM(13, 154)
|| *(WORD*)ItemId == ITEM(13, 155)
|| *(WORD*)ItemId == ITEM(13, 156)
|| *(WORD*)ItemId == ITEM(13, 157)
|| *(WORD*)ItemId == ITEM(13, 158)
|| *(WORD*)ItemId == ITEM(13, 159)
|| *(WORD*)ItemId == ITEM(13, 160)
|| *(WORD*)ItemId == ITEM(13, 161)
|| *(WORD*)ItemId == ITEM(13, 162)
|| *(WORD*)ItemId == ITEM(13, 163)
|| *(WORD*)ItemId == ITEM(13, 164)
|| *(WORD*)ItemId == ITEM(13, 165)
|| *(WORD*)ItemId == ITEM(13, 166)
|| *(WORD*)ItemId == ITEM(13, 167)
|| *(WORD*)ItemId == ITEM(13, 168)
|| *(WORD*)ItemId == ITEM(13, 169)
|| *(WORD*)ItemId == ITEM(13, 170)
|| *(WORD*)ItemId == ITEM(13, 171)
|| *(WORD*)ItemId == ITEM(13, 172)
|| *(WORD*)ItemId == ITEM(13, 173)
|| *(WORD*)ItemId == ITEM(13, 174)
|| *(WORD*)ItemId == ITEM(13, 175)
|| *(WORD*)ItemId == ITEM(13, 176)
|| *(WORD*)ItemId == ITEM(13, 177)
|| *(WORD*)ItemId == ITEM(13, 178)
|| *(WORD*)ItemId == ITEM(13, 179)
|| *(WORD*)ItemId == ITEM(13, 180)
|| *(WORD*)ItemId == ITEM(13, 181)
|| *(WORD*)ItemId == ITEM(13, 182)
|| *(WORD*)ItemId == ITEM(13, 183)
|| *(WORD*)ItemId == ITEM(13, 184)
|| *(WORD*)ItemId == ITEM(13, 185)
|| *(WORD*)ItemId == ITEM(13, 186)
|| *(WORD*)ItemId == ITEM(13, 187)
|| *(WORD*)ItemId == ITEM(13, 188)
|| *(WORD*)ItemId == ITEM(13, 189)
|| *(WORD*)ItemId == ITEM(13, 190)
|| *(WORD*)ItemId == ITEM(13, 191)
|| *(WORD*)ItemId == ITEM(13, 192)
|| *(WORD*)ItemId == ITEM(13, 193)
|| *(WORD*)ItemId == ITEM(13, 194)
|| *(WORD*)ItemId == ITEM(13, 195)
|| *(WORD*)ItemId == ITEM(13, 196)
|| *(WORD*)ItemId == ITEM(13, 197)
|| *(WORD*)ItemId == ITEM(13, 198)
|| *(WORD*)ItemId == ITEM(13, 199)
|| *(WORD*)ItemId == ITEM(13, 200)
|| *(WORD*)ItemId == ITEM(13, 201)
|| *(WORD*)ItemId == ITEM(13, 202)
|| *(WORD*)ItemId == ITEM(13, 203)
|| *(WORD*)ItemId == ITEM(13, 204)
|| *(WORD*)ItemId == ITEM(13, 205)
|| *(WORD*)ItemId == ITEM(13, 206)
|| *(WORD*)ItemId == ITEM(13, 207)
|| *(WORD*)ItemId == ITEM(13, 208)
|| *(WORD*)ItemId == ITEM(13, 209)
|| *(WORD*)ItemId == ITEM(13, 210)
|| *(WORD*)ItemId == ITEM(13, 211)
|| *(WORD*)ItemId == ITEM(13, 212)
|| *(WORD*)ItemId == ITEM(13, 213)
|| *(WORD*)ItemId == ITEM(13, 214)
|| *(WORD*)ItemId == ITEM(13, 215)
|| *(WORD*)ItemId == ITEM(13, 216)
|| *(WORD*)ItemId == ITEM(13, 217)
|| *(WORD*)ItemId == ITEM(13, 218)
|| *(WORD*)ItemId == ITEM(13, 219)
|| *(WORD*)ItemId == ITEM(13, 220)
|| *(WORD*)ItemId == ITEM(13, 221)
|| *(WORD*)ItemId == ITEM(13, 222)
|| *(WORD*)ItemId == ITEM(13, 223)
|| *(WORD*)ItemId == ITEM(13, 224)
|| *(WORD*)ItemId == ITEM(13, 225)
|| *(WORD*)ItemId == ITEM(13, 226)
|| *(WORD*)ItemId == ITEM(13, 227)
|| *(WORD*)ItemId == ITEM(13, 228)
|| *(WORD*)ItemId == ITEM(13, 229)
|| *(WORD*)ItemId == ITEM(13, 230)
|| *(WORD*)ItemId == ITEM(13, 231)
|| *(WORD*)ItemId == ITEM(13, 232)
|| *(WORD*)ItemId == ITEM(13, 233)
|| *(WORD*)ItemId == ITEM(13, 234)
|| *(WORD*)ItemId == ITEM(13, 235)
|| *(WORD*)ItemId == ITEM(13, 236)
|| *(WORD*)ItemId == ITEM(13, 237)
|| *(WORD*)ItemId == ITEM(13, 238)
|| *(WORD*)ItemId == ITEM(13, 239)
|| *(WORD*)ItemId == ITEM(13, 240)
|| *(WORD*)ItemId == ITEM(13, 241)
|| *(WORD*)ItemId == ITEM(13, 242)
|| *(WORD*)ItemId == ITEM(13, 243)
|| *(WORD*)ItemId == ITEM(13, 244)
|| *(WORD*)ItemId == ITEM(13, 245)
|| *(WORD*)ItemId == ITEM(13, 246)
|| *(WORD*)ItemId == ITEM(13, 247)
|| *(WORD*)ItemId == ITEM(13, 248)
|| *(WORD*)ItemId == ITEM(13, 249)
|| *(WORD*)ItemId == ITEM(13, 250)
|| *(WORD*)ItemId == ITEM(13, 251)
|| *(WORD*)ItemId == ITEM(13, 252)
|| *(WORD*)ItemId == ITEM(13, 253)
|| *(WORD*)ItemId == ITEM(13, 254)
|| *(WORD*)ItemId == ITEM(13, 255)
|| *(WORD*)ItemId == ITEM(13, 256)
|| *(WORD*)ItemId == ITEM(13, 257)
|| *(WORD*)ItemId == ITEM(13, 258)
|| *(WORD*)ItemId == ITEM(13, 259)
|| *(WORD*)ItemId == ITEM(13, 260)
|| *(WORD*)ItemId == ITEM(13, 261)
|| *(WORD*)ItemId == ITEM(13, 262)
|| *(WORD*)ItemId == ITEM(13, 263)
|| *(WORD*)ItemId == ITEM(13, 264)
|| *(WORD*)ItemId == ITEM(13, 265)
|| *(WORD*)ItemId == ITEM(13, 266)
|| *(WORD*)ItemId == ITEM(13, 267)
|| *(WORD*)ItemId == ITEM(13, 268)
|| *(WORD*)ItemId == ITEM(13, 269)
|| *(WORD*)ItemId == ITEM(13, 270)
|| *(WORD*)ItemId == ITEM(13, 271)
|| *(WORD*)ItemId == ITEM(13, 272)
|| *(WORD*)ItemId == ITEM(13, 273)
|| *(WORD*)ItemId == ITEM(13, 274)
|| *(WORD*)ItemId == ITEM(13, 275)
|| *(WORD*)ItemId == ITEM(13, 276)
|| *(WORD*)ItemId == ITEM(13, 277)
|| *(WORD*)ItemId == ITEM(13, 278)
|| *(WORD*)ItemId == ITEM(13, 279)
|| *(WORD*)ItemId == ITEM(13, 280)
|| *(WORD*)ItemId == ITEM(13, 281)
|| *(WORD*)ItemId == ITEM(13, 282)
|| *(WORD*)ItemId == ITEM(13, 283)
|| *(WORD*)ItemId == ITEM(13, 284)
|| *(WORD*)ItemId == ITEM(13, 285)
|| *(WORD*)ItemId == ITEM(13, 286)
|| *(WORD*)ItemId == ITEM(13, 287)
|| *(WORD*)ItemId == ITEM(13, 288)
|| *(WORD*)ItemId == ITEM(13, 289)
|| *(WORD*)ItemId == ITEM(13, 290)
|| *(WORD*)ItemId == ITEM(13, 291)
|| *(WORD*)ItemId == ITEM(13, 292)
|| *(WORD*)ItemId == ITEM(13, 293)
|| *(WORD*)ItemId == ITEM(13, 294)
|| *(WORD*)ItemId == ITEM(13, 295)
|| *(WORD*)ItemId == ITEM(13, 296)
|| *(WORD*)ItemId == ITEM(13, 297)
|| *(WORD*)ItemId == ITEM(13, 298)
|| *(WORD*)ItemId == ITEM(13, 299)
|| *(WORD*)ItemId == ITEM(13, 300)
|| *(WORD*)ItemId == ITEM(13, 301)
|| *(WORD*)ItemId == ITEM(13, 302)
|| *(WORD*)ItemId == ITEM(13, 303)
|| *(WORD*)ItemId == ITEM(13, 304)
|| *(WORD*)ItemId == ITEM(13, 305)
|| *(WORD*)ItemId == ITEM(13, 306)
|| *(WORD*)ItemId == ITEM(13, 307)
|| *(WORD*)ItemId == ITEM(13, 308)
|| *(WORD*)ItemId == ITEM(13, 309)
|| *(WORD*)ItemId == ITEM(13, 310)
|| *(WORD*)ItemId == ITEM(13, 311)
|| *(WORD*)ItemId == ITEM(13, 312)
|| *(WORD*)ItemId == ITEM(13, 313)
|| *(WORD*)ItemId == ITEM(13, 314)
|| *(WORD*)ItemId == ITEM(13, 315)
|| *(WORD*)ItemId == ITEM(13, 316)
|| *(WORD*)ItemId == ITEM(13, 317)
|| *(WORD*)ItemId == ITEM(13, 318)
|| *(WORD*)ItemId == ITEM(13, 319)
|| *(WORD*)ItemId == ITEM(13, 320)
|| *(WORD*)ItemId == ITEM(13, 321)
|| *(WORD*)ItemId == ITEM(13, 322)
|| *(WORD*)ItemId == ITEM(13, 323)
|| *(WORD*)ItemId == ITEM(13, 324)
|| *(WORD*)ItemId == ITEM(13, 325)
|| *(WORD*)ItemId == ITEM(13, 326)
|| *(WORD*)ItemId == ITEM(13, 327)
|| *(WORD*)ItemId == ITEM(13, 328)
|| *(WORD*)ItemId == ITEM(13, 329)
|| *(WORD*)ItemId == ITEM(13, 330)
|| *(WORD*)ItemId == ITEM(13, 331)
|| *(WORD*)ItemId == ITEM(13, 332)
|| *(WORD*)ItemId == ITEM(13, 333)
|| *(WORD*)ItemId == ITEM(13, 334)
|| *(WORD*)ItemId == ITEM(13, 335)
|| *(WORD*)ItemId == ITEM(13, 336)
|| *(WORD*)ItemId == ITEM(13, 337)
|| *(WORD*)ItemId == ITEM(13, 338)
|| *(WORD*)ItemId == ITEM(13, 339)
|| *(WORD*)ItemId == ITEM(13, 340)
|| *(WORD*)ItemId == ITEM(13, 341)
|| *(WORD*)ItemId == ITEM(13, 342)
|| *(WORD*)ItemId == ITEM(13, 343)
|| *(WORD*)ItemId == ITEM(13, 344)
|| *(WORD*)ItemId == ITEM(13, 345)
|| *(WORD*)ItemId == ITEM(13, 346)
|| *(WORD*)ItemId == ITEM(13, 347)
|| *(WORD*)ItemId == ITEM(13, 348)
|| *(WORD*)ItemId == ITEM(13, 349)
|| *(WORD*)ItemId == ITEM(13, 350)
|| *(WORD*)ItemId == ITEM(13, 351)
|| *(WORD*)ItemId == ITEM(13, 352)
|| *(WORD*)ItemId == ITEM(13, 353)
|| *(WORD*)ItemId == ITEM(13, 354)
|| *(WORD*)ItemId == ITEM(13, 355)
|| *(WORD*)ItemId == ITEM(13, 356)
|| *(WORD*)ItemId == ITEM(13, 357)
|| *(WORD*)ItemId == ITEM(13, 358)
|| *(WORD*)ItemId == ITEM(13, 359)
|| *(WORD*)ItemId == ITEM(13, 360)
|| *(WORD*)ItemId == ITEM(13, 361)
|| *(WORD*)ItemId == ITEM(13, 362)
|| *(WORD*)ItemId == ITEM(13, 363)
|| *(WORD*)ItemId == ITEM(13, 364)
|| *(WORD*)ItemId == ITEM(13, 365)
|| *(WORD*)ItemId == ITEM(13, 366)
|| *(WORD*)ItemId == ITEM(13, 367)
|| *(WORD*)ItemId == ITEM(13, 368)
|| *(WORD*)ItemId == ITEM(13, 369)
|| *(WORD*)ItemId == ITEM(13, 370)
|| *(WORD*)ItemId == ITEM(13, 371)
|| *(WORD*)ItemId == ITEM(13, 372)
|| *(WORD*)ItemId == ITEM(13, 373)
|| *(WORD*)ItemId == ITEM(13, 374)
|| *(WORD*)ItemId == ITEM(13, 375)
|| *(WORD*)ItemId == ITEM(13, 376)
|| *(WORD*)ItemId == ITEM(13, 377)
|| *(WORD*)ItemId == ITEM(13, 378)
|| *(WORD*)ItemId == ITEM(13, 379)
|| *(WORD*)ItemId == ITEM(13, 380)
|| *(WORD*)ItemId == ITEM(13, 381)
|| *(WORD*)ItemId == ITEM(13, 382)
|| *(WORD*)ItemId == ITEM(13, 383)
|| *(WORD*)ItemId == ITEM(13, 384)
|| *(WORD*)ItemId == ITEM(13, 385)
|| *(WORD*)ItemId == ITEM(13, 386)
|| *(WORD*)ItemId == ITEM(13, 387)
|| *(WORD*)ItemId == ITEM(13, 388)
|| *(WORD*)ItemId == ITEM(13, 389)
|| *(WORD*)ItemId == ITEM(13, 390)
|| *(WORD*)ItemId == ITEM(13, 391)
|| *(WORD*)ItemId == ITEM(13, 392)
|| *(WORD*)ItemId == ITEM(13, 393)
|| *(WORD*)ItemId == ITEM(13, 394)
|| *(WORD*)ItemId == ITEM(13, 395)
|| *(WORD*)ItemId == ITEM(13, 396)
|| *(WORD*)ItemId == ITEM(13, 397)
|| *(WORD*)ItemId == ITEM(13, 398)
|| *(WORD*)ItemId == ITEM(13, 399)
|| *(WORD*)ItemId == ITEM(13, 400)
|| *(WORD*)ItemId == ITEM(13, 401)
|| *(WORD*)ItemId == ITEM(13, 402)
|| *(WORD*)ItemId == ITEM(13, 403)
|| *(WORD*)ItemId == ITEM(13, 404)
|| *(WORD*)ItemId == ITEM(13, 405)
|| *(WORD*)ItemId == ITEM(13, 406)
|| *(WORD*)ItemId == ITEM(13, 407)
|| *(WORD*)ItemId == ITEM(13, 408)
|| *(WORD*)ItemId == ITEM(13, 409)
|| *(WORD*)ItemId == ITEM(13, 410)
|| *(WORD*)ItemId == ITEM(12, 189)
|| *(WORD*)ItemId == ITEM(12, 194)
|| *(WORD*)ItemId == ITEM(12, 220)
|| *(WORD*)ItemId == ITEM(12, 221);
else
Result = 0;
return Result;
}


void gObjCreatePetExHook()
{
SetOp((LPVOID)0x00836481, (LPVOID)ResetPetPreviewEx, ASM::CALL);
SetOp((LPVOID)0x007DD304, (LPVOID)gObjCreatePetEx, ASM::CALL);
SetOp((LPVOID)0x00833B08, (LPVOID)gObjCreatePetEx, ASM::CALL);

//SetCompleteHook(0xE8, 0x007DD304, &gObjCreatePetEx); // new tipo
//SetCompleteHook(0xE8, 0x00833B08, &gObjCreatePetEx); // new tipo
}

Crear PetProtocol.h
Code: [Select]
#pragma once
#include "Protocol.h"

struct PMSG_NEW_PET_CHARSET_RECV
{
PSWMSG_HEAD header; // C2:F3:E6
BYTE count;
};

struct NEW_PET_STRUCT
{
WORD index;
BYTE PetCharSet[18];
};

struct PMSG_NEW_SELECT_CHARACTER_CHARSET_RECV
{
PSWMSG_HEAD header; // C2:F3:E8
BYTE count;
};

struct PMSG_NEW_CHARACTER_CHARSET_RECV
{
char Name[10];
BYTE PetCharSet[18];
};


void ClearNewPetCharSet();
void InsertNewPetCharSet(WORD index, BYTE *CharSet);
NEW_PET_STRUCT* GetNewPetCharSet(WORD index);

void ClearNewPetCharSetSelectCharacter();
void InsertNewPetCharSetSelectCharacter(char * Name, BYTE *CharSet);
PMSG_NEW_CHARACTER_CHARSET_RECV* GetNewCharSetSelectCharacter(char *Name);

void GCPetCharSetRecv(PMSG_NEW_PET_CHARSET_RECV* lpMsg);
void GCPetCharSetSelectCharacterRecv(PMSG_NEW_SELECT_CHARACTER_CHARSET_RECV* lpMsg);

Crear PetProtocol.cpp
Code: [Select]
#include "stdafx.h"
#include "PetProtocol.h"


NEW_PET_STRUCT gNewPetCharSet[400];
PMSG_NEW_CHARACTER_CHARSET_RECV gNewPetCharSetSelectChar[5];

void ClearNewPetCharSet() // OK
{
for (int n = 0; n < 400; n++)
{
gNewPetCharSet[n].index = 0xFFFF;
memset(gNewPetCharSet[n].PetCharSet, 0, sizeof(gNewPetCharSet[n].PetCharSet));
}
}


void InsertNewPetCharSet(WORD index, BYTE *CharSet) // OK
{
for (int n = 0; n < 400; n++)
{
if (gNewPetCharSet[n].index == 0xFFFF)
{
gNewPetCharSet[n].index = index;
memcpy(gNewPetCharSet[n].PetCharSet, CharSet, sizeof(gNewPetCharSet[n].PetCharSet));
return;
}
}
}


NEW_PET_STRUCT* GetNewPetCharSet(WORD index) // OK
{
for (int n = 0; n < 400; n++)
{
if (gNewPetCharSet[n].index != 0xFFFF)
{
if (gNewPetCharSet[n].index == index)
{
return &gNewPetCharSet[n];
}
}
}

return 0;
}


void ClearNewPetCharSetSelectCharacter() // OK
{
for (int n = 0; n < 5; n++)
{
memset(gNewPetCharSetSelectChar[n].Name, 0, sizeof(gNewPetCharSetSelectChar[n].Name));
memset(gNewPetCharSetSelectChar[n].PetCharSet, 0, sizeof(gNewPetCharSetSelectChar[n].PetCharSet));
}
}


void InsertNewPetCharSetSelectCharacter(char * Name, BYTE *CharSet) // OK
{
for (int n = 0; n < 5; n++)
{
if (gNewPetCharSetSelectChar[n].Name[0] == '\0')
{
memcpy(gNewPetCharSetSelectChar[n].Name, Name, sizeof(gNewPetCharSetSelectChar[n].Name));
memcpy(gNewPetCharSetSelectChar[n].PetCharSet, CharSet, sizeof(gNewPetCharSetSelectChar[n].PetCharSet));
return;
}
}
}


PMSG_NEW_CHARACTER_CHARSET_RECV* GetNewCharSetSelectCharacter(char *Name) // OK
{
for (int n = 0; n < 5; n++)
{
if (gNewPetCharSetSelectChar[n].Name[0] != '\0')
{
if (strncmp(gNewPetCharSetSelectChar[n].Name, Name, sizeof(gNewPetCharSetSelectChar[n].Name)) == 0)
{
return &gNewPetCharSetSelectChar[n];
}
}
}

return 0;
}

Crear zzzmathlib.h
Code: [Select]
#ifndef __MATHLIB__
#define __MATHLIB__

#include <math.h>

#ifdef __cplusplus
extern "C" {
#endif

#ifdef DOUBLEVEC_T
typedef double vec_t;
#else
typedef float vec_t;
#endif
typedef vec_t vec3_t[3];
typedef vec_t vec4_t[4];
typedef vec_t vec34_t[3][4];

typedef struct
{
vec3_t StartPos;
vec3_t XAxis;
vec3_t YAxis;
vec3_t ZAxis;
} OBB_t;

#define SIDE_FRONT 0
#define SIDE_ON 2
#define SIDE_BACK 1
#define SIDE_CROSS -2

#define Q_PI 3.14159265358979323846f
#define ON_EPSILON 0.01
#define EQUAL_EPSILON 0.001

int VectorCompare (vec3_t v1, vec3_t v2);

float GetSquare(float value);

#define Vector(a,b,c,d) {(d)[0]=a;(d)[1]=b;(d)[2]=c;}
#define Vector4(a,b,c,d,e) {(e)[0]=a;(e)[1]=b;(e)[2]=c;(e)[3]=d;}
#define VectorAvg(a) ( ( (a)[0] + (a)[1] + (a)[2] ) / 3 )
#define VectorSubtract(a,b,c) {(c)[0]=(a)[0]-(b)[0];(c)[1]=(a)[1]-(b)[1];(c)[2]=(a)[2]-(b)[2];}
#define VectorAdd(a,b,c) {(c)[0]=(a)[0]+(b)[0];(c)[1]=(a)[1]+(b)[1];(c)[2]=(a)[2]+(b)[2];}
#define VectorCopy(a,b) {(b)[0]=(a)[0];(b)[1]=(a)[1];(b)[2]=(a)[2];}
#define VectorScale(a,b,c) {(c)[0]=(b)*(a)[0];(c)[1]=(b)*(a)[1];(c)[2]=(b)*(a)[2];}
#define DotProduct(x,y) ((x)[0]*(y)[0]+(x)[1]*(y)[1]+(x)[2]*(y)[2])
#define VectorFill(a,b) { (a)[0]=(b); (a)[1]=(b); (a)[2]=(b);}

vec_t Q_rint (vec_t in);
vec_t _DotProduct (vec3_t v1, vec3_t v2);
void _VectorSubtract (vec3_t va, vec3_t vb, vec3_t out);
void _VectorAdd (vec3_t va, vec3_t vb, vec3_t out);
void _VectorCopy (vec3_t in, vec3_t out);
void _VectorScale (vec3_t v, vec_t scale, vec3_t out);

float VectorLength(vec3_t v);

void VectorMA (vec3_t va, float scale, vec3_t vb, vec3_t vc);

void CrossProduct (vec3_t v1, vec3_t v2, vec3_t cross);
vec_t VectorNormalize (vec3_t v);
void VectorInverse (vec3_t v);

void ClearBounds (vec3_t mins, vec3_t maxs);
void AddPointToBounds (vec3_t v, vec3_t mins, vec3_t maxs);

void AngleMatrix (const vec3_t angles, float matrix[3][4] );
void AngleIMatrix (const vec3_t angles, float matrix[3][4] );
void R_ConcatTransforms (const float in1[3][4], const float in2[3][4], float out[3][4]);

void VectorIRotate (const vec3_t in1, const float in2[3][4], vec3_t out);
void VectorRotate (const vec3_t in1, const float in2[3][4], vec3_t out);
void VectorTranslate (const vec3_t in1, const float in2[3][4], vec3_t out);
void VectorTransform (const vec3_t in1, const float in2[3][4], vec3_t out);

void AngleQuaternion( const vec3_t angles, vec4_t quaternion );
void QuaternionMatrix( const vec4_t quaternion, float (*matrix)[4] );
void QuaternionSlerp( const vec4_t p, vec4_t q, float t, vec4_t qt );

void FaceNormalize(vec3_t v1,vec3_t v2,vec3_t v3,vec3_t Normal);

#ifdef __cplusplus
}
#endif

#endif

Import.h
Code: [Select]
//========================
// BUSCAR Y PEGAR DEBAJO:
//===================================================
// #define pIsButtonPressed ((int(__thiscall*)(int ButtonNumber)) 0x791070)
//===================================================
#define oUserTextObject *(int*)0x8128AC0 //ITEM.BMD -- CustomPets
#define pGetTextLine_ ((char*(__thiscall*)(LPVOID This, int LineNumber)) 0x402320) //CustomPets

Protect.h
Agregar al inicio #include "CustomPet.h"
Code: [Select]
//========================
// BUSCAR Y PEGAR DEBAJO:
//===================================================
// NPCNAME_DATA CustomNPCName[MAX_CUSTOM_NPCNAME];
//===================================================
CUSTOM_PET_INFO CustomPetInfo[MAX_PET_ITEM];

Item.cpp
Agregar al inicio #include "CustomPet.h"
Code: [Select]
//===========================
// BUSCAR Y PEGAR DEBAJO:
//===========================
// void ItemModelLoad() // OK
//===========================

for (int n = 0; n < MAX_PET_ITEM; n++)
{
int ModelID = ITEM2(gCustomPet2.m_CustomPetInfo[n].ItemType, gCustomPet2.m_CustomPetInfo[n].ItemIndex);
if (gCustomPet2.m_CustomPetInfo[n].Index != -1)
{
LoadItemModel((ModelID), "Custom\\Pet\\", gCustomPet2.m_CustomPetInfo[n].ModelName, -1);
}
}


//===========================
// BUSCAR Y PEGAR DEBAJO:
//===========================
// void ItemTextureLoad() // OK
//===========================
for (int n = 0; n < MAX_PET_ITEM; n++)
{
int ModelID = ITEM2(gCustomPet2.m_CustomPetInfo[n].ItemType, gCustomPet2.m_CustomPetInfo[n].ItemIndex);
if (gCustomPet2.m_CustomPetInfo[n].Index != -1)
{
LoadItemTexture((ModelID), "Custom\\Pet\\Textures\\", gCustomPet2.m_CustomPetInfo[n].ModelName, -1);
}
}

Main.cpp
Agregar al inicio #include "Pet.h", #include "PetHook.h" y #include "CustomPet.h"
Code: [Select]
//===========================
// BUSCAR Y PEGAR DEBAJO:
//===========================
// gNPCName.Load(gProtect.m_MainInfo.CustomNPCName);
//===========================
gCustomPet2.Load(gProtect.m_MainInfo.CustomPetInfo); //CustomPets

//===========================
// BUSCAR Y PEGAR DEBAJO:
//===========================
// gCustomMap.Load();
//===========================
gCustomPet.Load(); //CustomPets
gObjCreatePetExHook(); //CustomPets

Protocol.cpp
Agregar al inicio #include "PetProtocol.h"
Code: [Select]
//=======================
// BUSCAR Y PEGAR DEBAJO:
//=======================================================================================
BOOL ProtocolCoreEx(BYTE head,BYTE* lpMsg,int size,int key) // OK
{
GCNewMessageRecv((PMSG_NEW_MESSAGE_RECV*)lpMsg);
return 1;
//=======================================================================================

case 0xF1:
GCPetCharSetRecv((PMSG_NEW_PET_CHARSET_RECV*)lpMsg);
break;
case 0xF2:
GCPetCharSetSelectCharacterRecv((PMSG_NEW_SELECT_CHARACTER_CHARSET_RECV*)lpMsg);
break;






//========================
// BUSCAR Y PEGAR DEBAJO:
//========================================================
void DataSend(BYTE* lpMsg,DWORD size) // OK
//========================================================

void GCPetCharSetRecv(PMSG_NEW_PET_CHARSET_RECV* lpMsg)
{
ClearNewPetCharSet();

for (int n = 0; n < lpMsg->count; n++)
{
NEW_PET_STRUCT* lpInfo = (NEW_PET_STRUCT*)(((BYTE*)lpMsg) + sizeof(PMSG_NEW_PET_CHARSET_RECV)+(sizeof(NEW_PET_STRUCT)*n));

InsertNewPetCharSet(lpInfo->index, lpInfo->PetCharSet);
}
}


void GCPetCharSetSelectCharacterRecv(PMSG_NEW_SELECT_CHARACTER_CHARSET_RECV* lpMsg)
{
ClearNewPetCharSetSelectCharacter();

for (int n = 0; n < lpMsg->count; n++)
{
PMSG_NEW_CHARACTER_CHARSET_RECV* lpInfo = (PMSG_NEW_CHARACTER_CHARSET_RECV*)(((BYTE*)lpMsg) + sizeof(PMSG_NEW_SELECT_CHARACTER_CHARSET_RECV)+(sizeof(PMSG_NEW_CHARACTER_CHARSET_RECV)*n));

InsertNewPetCharSetSelectCharacter(lpInfo->Name, lpInfo->PetCharSet);
}
}

Reemplazar totalmente el ItemAsm.cpp por este

Code: [Select]
#include "stdafx.h"
#include "Offset.h"
#include "Util.h"
#include "TMemory.h"
#include "ItemAsm.h"
#include "Import.h"
#include "Defines.h"
#include "CustomBow.h"
#include "Object.h"

DWORD IsBowItem = 0;
DWORD IsCrossItem = 0;
DWORD BowValue = 0x09C;
DWORD MaxBoneCount = 0x108;
DWORD WorldPosition = 0x0FC;

DWORD oCreateEffect = 0x006D9070; // 1.04D ENG
DWORD ReturnBowCode = 0x0074A12E; // 1.04D ENG
DWORD BowPosition = 0x005CC8ED; // 1.04D ENG
DWORD NextBowPosition = 0x005CC92E; // 1.04D ENG
DWORD BowAddPlayerDimension_Offset = 0x0056617F; // 1.04D ENG
DWORD ReturnCrossCode = 0x00749DD2;

void __declspec(naked) cBowAddSkillEffect()
{
_asm
{
mov ecx, dword ptr ss : [ebp - 0x04]
mov dword ptr ss : [ebp - 0x14], ecx
mov IsBowItem, ecx
}
// ---

    if(gCustomBow.CheckCustomBow(IsBowItem - ITEM_INTER))
{
CUSTOM_BOW_INFO* bow = gCustomBow.GetInfoByItem(IsBowItem - ITEM_INTER);
int SkillShot;
if(bow != 0){
SkillShot = bow->SkillShot;
_asm
{
push - 1
push 0
push 0
mov dx, word ptr ss : [ebp + 0x18]
push edx
mov ax, word ptr ss : [ebp + 0x14]
push eax
mov ecx, dword ptr ss : [ebp + 0x0C]
mov dx, word ptr ds : [ecx + 0x2C]
push edx
mov eax, dword ptr ss : [ebp + 0x0C]
push eax
mov ecx, dword ptr ss : [ebp - 0x8]
push ecx
mov edx, dword ptr ss : [ebp + 0x0C]
add edx, BowValue
push edx
mov eax, dword ptr ss : [ebp + 0x0C]
add eax, MaxBoneCount
push eax
mov ecx, dword ptr ss : [ebp + 0x0C]
add ecx, WorldPosition
push ecx
push SkillShot
call oCreateEffect
}
}
}
_asm
{
jmp ReturnBowCode
}
}

void __declspec(naked) cCrossAddSkillEffect()
{
    _asm
    {
mov ecx, dword ptr ss : [ebp - 0x0C]
mov dword ptr ss : [ebp - 0x10], ecx
mov IsCrossItem, ecx
    }
    // ---
    if(gCustomBow.CheckCustomCross(IsCrossItem - ITEM_INTER))
{
CUSTOM_BOW_INFO* cross = gCustomBow.GetInfoByItem(IsCrossItem - ITEM_INTER);

int SkillShot;

if(cross != 0){

SkillShot = cross->SkillShot;
_asm
{
push - 1
push 0
push 0
mov dx, word ptr ss : [ebp + 0x18]
push edx
mov ax, word ptr ss : [ebp + 0x14]
push eax
mov ecx, dword ptr ss : [ebp + 0x0C]
mov dx, word ptr ds : [ecx + 0x2C]
push edx
mov eax, dword ptr ss : [ebp + 0x0C]
push eax
mov ecx, dword ptr ss : [ebp - 0x8]
push ecx
mov edx, dword ptr ss : [ebp + 0x0C]
add edx, BowValue
push edx
mov eax, dword ptr ss : [ebp + 0x0C]
add eax, MaxBoneCount
push eax
mov ecx, dword ptr ss : [ebp + 0x0C]
add ecx, WorldPosition
push ecx
push SkillShot
call oCreateEffect
}
}
    }
    _asm
    {
        jmp ReturnCrossCode
    }
}

void __declspec(naked) cBowAddInventoryPos()
{
_asm
{
mov ecx, dword ptr ss : [ebp + 0x8]
mov dword ptr ss : [ebp + 0x8], ecx
mov IsBowItem, ecx
}
// ---
if (IsBowItem == 0x0CAB)
{
_asm{jmp BowPosition}
}
else if (gCustomBow.CheckCustomBow(IsBowItem - ITEM_INTER) || IsBowItem >= ITEM2(4,25) && IsBowItem <=ITEM2(4,34) || IsBowItem >= ITEM2(4,65) && IsBowItem <=ITEM2(4,85))
{
_asm{jmp BowPosition}
}
//CUSTOMPETS

else if (IsBowItem >= ITEM2(13, 147) && IsBowItem <= ITEM2(13, 512))
{
_asm
{
Mov Ecx, 0x005CC597
Jmp Ecx
}
}

//------------------
else
{
_asm{jmp NextBowPosition}
}
}

void __declspec(naked) cBowCheckPositionOnMap()
{
static DWORD ret_continue = 0x005659EE;
static DWORD ret_succes = 0x00565994;

static DWORD ItemId;

__asm
{
mov EAX, DWORD PTR SS:[EBP+0x1C]
mov ItemId, EAX
}

if (gCustomBow.CheckCustomCross(ItemId - ITEM_INTER))
{
__asm
{
jmp ret_succes
}
}
else
{
__asm
{
CMP DWORD PTR SS:[EBP+0x1C],0x22C
jmp ret_continue;
}
}
}


#define sub_599F10_Addr ((signed int(*)()) 0x599F10)

signed int __cdecl FixBowArrow(WORD *a1)
{
signed int result;
if ((int)(*a1/512) != 4 || *a1 == 2055 || *a1 == 2063)
{
return 0;
}
ItemBmdStruct* ItemInfo = pGetItemBmdStruct(*a1);
if (ItemInfo == 0 || (*a1/512) != 4)
{
return 0;
}
if (ItemInfo->Slot == 0)
{
return 2;
}
if (ItemInfo->Slot == 1)
{
return 1;
}
return 0;
}

void __declspec(naked) cBowAddPlayerDimension()
{
_asm
{
cmp dword ptr ss : [ebp + 0x1c], 0x0CA7
je ReturnLoad
cmp dword ptr ss : [ebp + 0x1c], ITEM2(4, 25)
je ReturnLoad
cmp dword ptr ss : [ebp + 0x1c], ITEM2(4, 26)
je ReturnLoad
cmp dword ptr ss : [ebp + 0x1c], ITEM2(4, 27)
je ReturnLoad
cmp dword ptr ss : [ebp + 0x1c], ITEM2(4, 28)
je ReturnLoad
cmp dword ptr ss : [ebp + 0x1c], ITEM2(4, 29)
je ReturnLoad
cmp dword ptr ss : [ebp + 0x1c], ITEM2(4, 30)
je ReturnLoad
cmp dword ptr ss : [ebp + 0x1c], ITEM2(4, 31)
je ReturnLoad
cmp dword ptr ss : [ebp + 0x1c], ITEM2(4, 32)
je ReturnLoad
cmp dword ptr ss : [ebp + 0x1c], ITEM2(4, 33)
je ReturnLoad
cmp dword ptr ss : [ebp + 0x1c], ITEM2(4, 34)
je ReturnLoad
// ---
ReturnLoad :
// ---
jmp BowAddPlayerDimension_Offset
}
}

void __declspec(naked) cCrossBowAddPlayerDimension()
{
    static DWORD Address1 = 0x00565994;
    static DWORD Address2 = 0x005659E7; 

_asm
{
   Mov Ecx, Dword ptr ss : [ebp + 0x1C]
   Mov Dword ptr ss : [ebp + 0x1C],Ecx
   Mov IsCrossItem, Ecx
}

   if(IsCrossItem >= ITEM2(4,8) && IsCrossItem <= ITEM2(4,14)||IsCrossItem == ITEM2(4,16)||IsCrossItem == ITEM2(4,18)||IsCrossItem == ITEM2(4,19) || IsCrossItem >= ITEM2(4, 35) && IsCrossItem <= ITEM2(4, 44)) // Devil Crossbow


{
_asm{jmp Address1}
}
else
{
_asm{jmp Address2}
}
}

void InitBows()
{
//recarga de flechas
SetCompleteHook(0xE8,0x5913D0+0xDB ,&FixBowArrow);
SetCompleteHook(0xE8,0x5913D0+0xF7 ,&FixBowArrow);
SetCompleteHook(0xE8,0x5A05C0+0x92 ,&FixBowArrow);
SetCompleteHook(0xE8,0x5A05C0+0x1B5,&FixBowArrow);
SetCompleteHook(0xE8,0x5B5FC0+0xD34,&FixBowArrow);
SetCompleteHook(0xE8,0x7E04B0+0xF8 ,&FixBowArrow);
//Skill de ballesta
    SetRange((LPVOID)iCrossAddSkillEffect, 6, ASM::NOP);
    SetJmp((LPVOID)iCrossAddSkillEffect, cCrossAddSkillEffect);
//Skill de arco
SetRange((LPVOID)iBowAddSkillEffect, 6, ASM::NOP);
SetJmp((LPVOID)iBowAddSkillEffect, cBowAddSkillEffect);
//Posición en el inventario
SetRange((LPVOID)iBowAddInventoryPos, 6, ASM::NOP);
SetJmp((LPVOID)iBowAddInventoryPos, cBowAddInventoryPos);
//Posición en el personaje
MemorySet(0x005659E7,0x90,7);
SetCompleteHook(0xE9,0x005659E7,&cBowCheckPositionOnMap);
//Dimensiones
SetRange((LPVOID)iCrossBowAddPlayerDimension, 6, ASM::NOP);
SetJmp((LPVOID)iCrossBowAddPlayerDimension, cCrossBowAddPlayerDimension);
SetRange((LPVOID)iBowAddPlayerDimension, 7, ASM::NOP);
SetJmp((LPVOID)iBowAddPlayerDimension, cBowAddPlayerDimension);
}

Crear una carpeta llamada "Pet" que tendría que ir en Cliente\Data\Custom
Crear una carpeta llamada "Textures" que tendría que ir en Cliente\Data\Custom\Pet

Vídeo demostrativo


  Creditos
Código Base
File Emu
Source Vietnami
Louis
@NasLy
@SaintZeus  Posicionamiento en el inventario ItemAsm.cpp
@Llalex Agregar y modificar algunos códigos

Gracias:


Offline Nation Network #1 Posteado: May 02, 2020, 10:12:02 PM

  • 0 puntos por ventas
  • *
  • Rank: Puto amo
  • Posts: 215
  • Gracias recibida: 2219
  • us

Offline takumi12 #2 Posteado: May 02, 2020, 10:42:16 PM

  • MAESTRO

  • US. DE HONOR

  • LEYENDA

  • Php Coder
  • +11 puntos por ventas
  • *
  • *
  • Rank: Puto amo
  • Posts: 1.310
  • Gracias recibida: 40061
  • mx
? esto ya esta... el código base no es de Nasly, el código base es vietnamita... en el que compartió nasly no existe tal bugs que mencionas... es 99% el unico problema era la barra de vida lo cual era solo cambiar el posicionamiento de la vida del pet... otra cosa lo veo como repetir post .-.


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

Offline Llalex #3 Posteado: May 02, 2020, 10:45:28 PM

  • 0 puntos por ventas
  • *
  • Rank: Puto amo
  • Posts: 337
  • Gracias recibida: 397
  • ve
? esto ya esta... el código base no es de Nasly, el código base es vietnamita... en el que compartió nasly no existe tal bugs que mencionas... es 99% el unico problema era la barra de vida lo cual era solo cambiar el posicionamiento de la vida del pet... otra cosa lo veo como repetir post .-.

Respecto a lo de código base ya le agrego los crédito a Vietnamita... continuando con lo otro, si vez el post de NasLy mucho tienen ese problema de que el custom pet se les vuelve un angel..


Offline takumi12 #4 Posteado: May 02, 2020, 10:48:43 PM

  • MAESTRO

  • US. DE HONOR

  • LEYENDA

  • Php Coder
  • +11 puntos por ventas
  • *
  • *
  • Rank: Puto amo
  • Posts: 1.310
  • Gracias recibida: 40061
  • mx
? esto ya esta... el código base no es de Nasly, el código base es vietnamita... en el que compartió nasly no existe tal bugs que mencionas... es 99% el unico problema era la barra de vida lo cual era solo cambiar el posicionamiento de la vida del pet... otra cosa lo veo como repetir post .-.

Respecto a lo de código base ya le agrego los crédito a Vietnamita... continuando con lo otro, si vez el post de NasLy mucho tienen ese problema de que el custom pet se les vuelve un angel..

copian mal es lo que sucede, yo le ayude a resolver ese problema hace mucho, solo limpiaron los comentarios... pero esta 99.9% lo veo innecesario pero igual la intensión de aportar vale mucho ya que veo mucha gente que pide pide y no aporta...


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

Offline Llalex #5 Posteado: May 02, 2020, 10:51:32 PM

  • 0 puntos por ventas
  • *
  • Rank: Puto amo
  • Posts: 337
  • Gracias recibida: 397
  • ve
? esto ya esta... el código base no es de Nasly, el código base es vietnamita... en el que compartió nasly no existe tal bugs que mencionas... es 99% el unico problema era la barra de vida lo cual era solo cambiar el posicionamiento de la vida del pet... otra cosa lo veo como repetir post .-.

Respecto a lo de código base ya le agrego los crédito a Vietnamita... continuando con lo otro, si vez el post de NasLy mucho tienen ese problema de que el custom pet se les vuelve un angel..

copian mal es lo que sucede, yo le ayude a resolver ese problema hace mucho, solo limpiaron los comentarios... pero esta 99.9% lo veo innecesario pero igual la intensión de aportar vale mucho ya que veo mucha gente que pide pide y no aporta...

No copian mal, hay una parte de las otras sources que no estaba bien, eso lo repare yo con el poco conocimiento que tengo...


Offline axeman192 #6 Posteado: May 02, 2020, 11:00:09 PM

  • 3D Maker
  • 0 puntos por ventas
  • *
  • Rank: Puto amo
  • Posts: 287
  • Gracias recibida: 12019
  • vn
Esta es una presentación repetible de @NasLy .  bad


Offline NasLy #7 Posteado: May 02, 2020, 11:35:20 PM

  • Colaborador
  • 0 puntos por ventas
  • *
  • *
  • Rank: Puto amo
  • Posts: 441
  • Gracias recibida: 12228
  • ar
Esta bueno que quieras ayudar. La que yo comparti esta 100% Solo que los usuarios no la saben usar.
Pero esta bueno.

Otra cosa, siempre quita algo de la Source de desacomodalo, para que los usuarios lo arreglen si no lo unico que aprendera sera COPIAR/PEGAR.

Nunca es tarde para ser lo que podias haber sido.

Offline Llalex #8 Posteado: May 03, 2020, 12:16:15 AM

  • 0 puntos por ventas
  • *
  • Rank: Puto amo
  • Posts: 337
  • Gracias recibida: 397
  • ve
Esta bueno que quieras ayudar. La que yo comparti esta 100% Solo que los usuarios no la saben usar.
Pero esta bueno.

Otra cosa, siempre quita algo de la Source de desacomodalo, para que los usuarios lo arreglen si no lo unico que aprendera sera COPIAR/PEGAR.
Gracias por tu opinión, gracias también por ser tan compresivo en dejarme hacer un post guiándome de lo que tu compartiste, también entiendo lo que me quieres decir con lo de copiar y pegar, pero también tienes que tener en cuenta que al colocar mal una sección está daña todo o hace que las cosas no funcionen como deberían, por ese motivo es preferible hacer las cosas bien, si quieres compartir algo hazlo sin pensar "tengo que hacer que la otra persona también ponga de su parte".

Gracias:


Offline melo920 #9 Posteado: May 03, 2020, 01:27:16 AM | Modificado: May 13, 2020, 04:36:03 PM by melo920

  • C++ Coder
  • 0 puntos por ventas
  • *
  • Rank: Puto amo
  • Posts: 281
  • Gracias recibida: 6487
  • co
esta es mi source vieja que les programe a los vietnamitas, pero en fin..

vamos al grano veo cosas inncesarias en esta source , por ejemplo: por que crear un nuevo: OBJECT_USER si ya existe uno? únicamente se añadio la regla de los bot xD funciona igual agregandolo adentro y no crean una nueva regla, que es consumo innecesario de memoria


// void gObjViewportListProtocolCreate(LPOBJ lpObj) // OK
Code: [Select]
	void gObjViewportListProtocolCreate(LPOBJ lpObj) // OK
{

if(lpObj->Type == OBJECT_USER || lpObj->Type == OBJECT_BOTS) //MC
{
gViewport.GCViewportSimplePetSend(lpObj); //CustomPets
gViewport.GCViewportSimplePlayerSend(lpObj);
gViewport.GCViewportSimpleChangeSend(lpObj);
gViewport.GCViewportSimpleGuildSend(lpObj);
gViewport.GCViewportSimpleGensSystemSend(lpObj);
}
gViewport.GCViewportSimpleMonsterSend(lpObj);
gViewport.GCViewportSimpleSummonSend(lpObj);
}

por que hacer esto

Code: [Select]
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, 147) //WTF
|| *(WORD*)ItemId == ITEM(13, 148)
|| *(WORD*)ItemId == ITEM(13, 149)
|| *(WORD*)ItemId == ITEM(13, 150)
|| *(WORD*)ItemId == ITEM(13, 151)
|| *(WORD*)ItemId == ITEM(13, 152)
|| *(WORD*)ItemId == ITEM(13, 153)
|| *(WORD*)ItemId == ITEM(13, 154)
|| *(WORD*)ItemId == ITEM(13, 155)
|| *(WORD*)ItemId == ITEM(13, 156)
|| *(WORD*)ItemId == ITEM(13, 157)
|| *(WORD*)ItemId == ITEM(13, 158)
|| *(WORD*)ItemId == ITEM(13, 159)
|| *(WORD*)ItemId == ITEM(13, 160)
|| *(WORD*)ItemId == ITEM(13, 161)
|| *(WORD*)ItemId == ITEM(13, 162)
|| *(WORD*)ItemId == ITEM(13, 163)
|| *(WORD*)ItemId == ITEM(13, 164)
|| *(WORD*)ItemId == ITEM(13, 165)
|| *(WORD*)ItemId == ITEM(13, 166)
|| *(WORD*)ItemId == ITEM(13, 167)
|| *(WORD*)ItemId == ITEM(13, 168)
|| *(WORD*)ItemId == ITEM(13, 169)
|| *(WORD*)ItemId == ITEM(13, 170)
|| *(WORD*)ItemId == ITEM(13, 171)
|| *(WORD*)ItemId == ITEM(13, 172)
|| *(WORD*)ItemId == ITEM(13, 173)
|| *(WORD*)ItemId == ITEM(13, 174)
|| *(WORD*)ItemId == ITEM(13, 175)
|| *(WORD*)ItemId == ITEM(13, 176)
|| *(WORD*)ItemId == ITEM(13, 177)
|| *(WORD*)ItemId == ITEM(13, 178)
|| *(WORD*)ItemId == ITEM(13, 179)
|| *(WORD*)ItemId == ITEM(13, 180)
|| *(WORD*)ItemId == ITEM(13, 181)
|| *(WORD*)ItemId == ITEM(13, 182)
|| *(WORD*)ItemId == ITEM(13, 183)
|| *(WORD*)ItemId == ITEM(13, 184)
|| *(WORD*)ItemId == ITEM(13, 185)
|| *(WORD*)ItemId == ITEM(13, 186)
|| *(WORD*)ItemId == ITEM(13, 187)
|| *(WORD*)ItemId == ITEM(13, 188)
|| *(WORD*)ItemId == ITEM(13, 189)
|| *(WORD*)ItemId == ITEM(13, 190)
|| *(WORD*)ItemId == ITEM(13, 191)
|| *(WORD*)ItemId == ITEM(13, 192)
|| *(WORD*)ItemId == ITEM(13, 193)
|| *(WORD*)ItemId == ITEM(13, 194)
|| *(WORD*)ItemId == ITEM(13, 195)
|| *(WORD*)ItemId == ITEM(13, 196)
|| *(WORD*)ItemId == ITEM(13, 197)
|| *(WORD*)ItemId == ITEM(13, 198)
|| *(WORD*)ItemId == ITEM(13, 199)
|| *(WORD*)ItemId == ITEM(13, 200)
|| *(WORD*)ItemId == ITEM(13, 201)
|| *(WORD*)ItemId == ITEM(13, 202)
|| *(WORD*)ItemId == ITEM(13, 203)
|| *(WORD*)ItemId == ITEM(13, 204)
|| *(WORD*)ItemId == ITEM(13, 205)
|| *(WORD*)ItemId == ITEM(13, 206)
|| *(WORD*)ItemId == ITEM(13, 207)
|| *(WORD*)ItemId == ITEM(13, 208)
|| *(WORD*)ItemId == ITEM(13, 209)
|| *(WORD*)ItemId == ITEM(13, 210)
|| *(WORD*)ItemId == ITEM(13, 211)
|| *(WORD*)ItemId == ITEM(13, 212)
|| *(WORD*)ItemId == ITEM(13, 213)
|| *(WORD*)ItemId == ITEM(13, 214)
|| *(WORD*)ItemId == ITEM(13, 215)
|| *(WORD*)ItemId == ITEM(13, 216)
|| *(WORD*)ItemId == ITEM(13, 217)
|| *(WORD*)ItemId == ITEM(13, 218)
|| *(WORD*)ItemId == ITEM(13, 219)
|| *(WORD*)ItemId == ITEM(13, 220)
|| *(WORD*)ItemId == ITEM(13, 221)
|| *(WORD*)ItemId == ITEM(13, 222)
|| *(WORD*)ItemId == ITEM(13, 223)
|| *(WORD*)ItemId == ITEM(13, 224)
|| *(WORD*)ItemId == ITEM(13, 225)
|| *(WORD*)ItemId == ITEM(13, 226)
|| *(WORD*)ItemId == ITEM(13, 227)
|| *(WORD*)ItemId == ITEM(13, 228)
|| *(WORD*)ItemId == ITEM(13, 229)
|| *(WORD*)ItemId == ITEM(13, 230)
|| *(WORD*)ItemId == ITEM(13, 231)
|| *(WORD*)ItemId == ITEM(13, 232)
|| *(WORD*)ItemId == ITEM(13, 233)
|| *(WORD*)ItemId == ITEM(13, 234)
|| *(WORD*)ItemId == ITEM(13, 235)
|| *(WORD*)ItemId == ITEM(13, 236)
|| *(WORD*)ItemId == ITEM(13, 237)
|| *(WORD*)ItemId == ITEM(13, 238)
|| *(WORD*)ItemId == ITEM(13, 239)
|| *(WORD*)ItemId == ITEM(13, 240)
|| *(WORD*)ItemId == ITEM(13, 241)
|| *(WORD*)ItemId == ITEM(13, 242)
|| *(WORD*)ItemId == ITEM(13, 243)
|| *(WORD*)ItemId == ITEM(13, 244)
|| *(WORD*)ItemId == ITEM(13, 245)
|| *(WORD*)ItemId == ITEM(13, 246)
|| *(WORD*)ItemId == ITEM(13, 247)
|| *(WORD*)ItemId == ITEM(13, 248)
|| *(WORD*)ItemId == ITEM(13, 249)
|| *(WORD*)ItemId == ITEM(13, 250)
|| *(WORD*)ItemId == ITEM(13, 251)
|| *(WORD*)ItemId == ITEM(13, 252)
|| *(WORD*)ItemId == ITEM(13, 253)
|| *(WORD*)ItemId == ITEM(13, 254)
|| *(WORD*)ItemId == ITEM(13, 255)
|| *(WORD*)ItemId == ITEM(13, 256)
|| *(WORD*)ItemId == ITEM(13, 257)
|| *(WORD*)ItemId == ITEM(13, 258)
|| *(WORD*)ItemId == ITEM(13, 259)
|| *(WORD*)ItemId == ITEM(13, 260)
|| *(WORD*)ItemId == ITEM(13, 261)
|| *(WORD*)ItemId == ITEM(13, 262)
|| *(WORD*)ItemId == ITEM(13, 263)
|| *(WORD*)ItemId == ITEM(13, 264)
|| *(WORD*)ItemId == ITEM(13, 265)
|| *(WORD*)ItemId == ITEM(13, 266)
|| *(WORD*)ItemId == ITEM(13, 267)
|| *(WORD*)ItemId == ITEM(13, 268)
|| *(WORD*)ItemId == ITEM(13, 269)
|| *(WORD*)ItemId == ITEM(13, 270)
|| *(WORD*)ItemId == ITEM(13, 271)
|| *(WORD*)ItemId == ITEM(13, 272)
|| *(WORD*)ItemId == ITEM(13, 273)
|| *(WORD*)ItemId == ITEM(13, 274)
|| *(WORD*)ItemId == ITEM(13, 275)
|| *(WORD*)ItemId == ITEM(13, 276)
|| *(WORD*)ItemId == ITEM(13, 277)
|| *(WORD*)ItemId == ITEM(13, 278)
|| *(WORD*)ItemId == ITEM(13, 279)
|| *(WORD*)ItemId == ITEM(13, 280)
|| *(WORD*)ItemId == ITEM(13, 281)
|| *(WORD*)ItemId == ITEM(13, 282)
|| *(WORD*)ItemId == ITEM(13, 283)
|| *(WORD*)ItemId == ITEM(13, 284)
|| *(WORD*)ItemId == ITEM(13, 285)
|| *(WORD*)ItemId == ITEM(13, 286)
|| *(WORD*)ItemId == ITEM(13, 287)
|| *(WORD*)ItemId == ITEM(13, 288)
|| *(WORD*)ItemId == ITEM(13, 289)
|| *(WORD*)ItemId == ITEM(13, 290)
|| *(WORD*)ItemId == ITEM(13, 291)
|| *(WORD*)ItemId == ITEM(13, 292)
|| *(WORD*)ItemId == ITEM(13, 293)
|| *(WORD*)ItemId == ITEM(13, 294)
|| *(WORD*)ItemId == ITEM(13, 295)
|| *(WORD*)ItemId == ITEM(13, 296)
|| *(WORD*)ItemId == ITEM(13, 297)
|| *(WORD*)ItemId == ITEM(13, 298)
|| *(WORD*)ItemId == ITEM(13, 299)
|| *(WORD*)ItemId == ITEM(13, 300)
|| *(WORD*)ItemId == ITEM(13, 301)
|| *(WORD*)ItemId == ITEM(13, 302)
|| *(WORD*)ItemId == ITEM(13, 303)
|| *(WORD*)ItemId == ITEM(13, 304)
|| *(WORD*)ItemId == ITEM(13, 305)
|| *(WORD*)ItemId == ITEM(13, 306)
|| *(WORD*)ItemId == ITEM(13, 307)
|| *(WORD*)ItemId == ITEM(13, 308)
|| *(WORD*)ItemId == ITEM(13, 309)
|| *(WORD*)ItemId == ITEM(13, 310)
|| *(WORD*)ItemId == ITEM(13, 311)
|| *(WORD*)ItemId == ITEM(13, 312)
|| *(WORD*)ItemId == ITEM(13, 313)
|| *(WORD*)ItemId == ITEM(13, 314)
|| *(WORD*)ItemId == ITEM(13, 315)
|| *(WORD*)ItemId == ITEM(13, 316)
|| *(WORD*)ItemId == ITEM(13, 317)
|| *(WORD*)ItemId == ITEM(13, 318)
|| *(WORD*)ItemId == ITEM(13, 319)
|| *(WORD*)ItemId == ITEM(13, 320)
|| *(WORD*)ItemId == ITEM(13, 321)
|| *(WORD*)ItemId == ITEM(13, 322)
|| *(WORD*)ItemId == ITEM(13, 323)
|| *(WORD*)ItemId == ITEM(13, 324)
|| *(WORD*)ItemId == ITEM(13, 325)
|| *(WORD*)ItemId == ITEM(13, 326)
|| *(WORD*)ItemId == ITEM(13, 327)
|| *(WORD*)ItemId == ITEM(13, 328)
|| *(WORD*)ItemId == ITEM(13, 329)
|| *(WORD*)ItemId == ITEM(13, 330)
|| *(WORD*)ItemId == ITEM(13, 331)
|| *(WORD*)ItemId == ITEM(13, 332)
|| *(WORD*)ItemId == ITEM(13, 333)
|| *(WORD*)ItemId == ITEM(13, 334)
|| *(WORD*)ItemId == ITEM(13, 335)
|| *(WORD*)ItemId == ITEM(13, 336)
|| *(WORD*)ItemId == ITEM(13, 337)
|| *(WORD*)ItemId == ITEM(13, 338)
|| *(WORD*)ItemId == ITEM(13, 339)
|| *(WORD*)ItemId == ITEM(13, 340)
|| *(WORD*)ItemId == ITEM(13, 341)
|| *(WORD*)ItemId == ITEM(13, 342)
|| *(WORD*)ItemId == ITEM(13, 343)
|| *(WORD*)ItemId == ITEM(13, 344)
|| *(WORD*)ItemId == ITEM(13, 345)
|| *(WORD*)ItemId == ITEM(13, 346)
|| *(WORD*)ItemId == ITEM(13, 347)
|| *(WORD*)ItemId == ITEM(13, 348)
|| *(WORD*)ItemId == ITEM(13, 349)
|| *(WORD*)ItemId == ITEM(13, 350)
|| *(WORD*)ItemId == ITEM(13, 351)
|| *(WORD*)ItemId == ITEM(13, 352)
|| *(WORD*)ItemId == ITEM(13, 353)
|| *(WORD*)ItemId == ITEM(13, 354)
|| *(WORD*)ItemId == ITEM(13, 355)
|| *(WORD*)ItemId == ITEM(13, 356)
|| *(WORD*)ItemId == ITEM(13, 357)
|| *(WORD*)ItemId == ITEM(13, 358)
|| *(WORD*)ItemId == ITEM(13, 359)
|| *(WORD*)ItemId == ITEM(13, 360)
|| *(WORD*)ItemId == ITEM(13, 361)
|| *(WORD*)ItemId == ITEM(13, 362)
|| *(WORD*)ItemId == ITEM(13, 363)
|| *(WORD*)ItemId == ITEM(13, 364)
|| *(WORD*)ItemId == ITEM(13, 365)
|| *(WORD*)ItemId == ITEM(13, 366)
|| *(WORD*)ItemId == ITEM(13, 367)
|| *(WORD*)ItemId == ITEM(13, 368)
|| *(WORD*)ItemId == ITEM(13, 369)
|| *(WORD*)ItemId == ITEM(13, 370)
|| *(WORD*)ItemId == ITEM(13, 371)
|| *(WORD*)ItemId == ITEM(13, 372)
|| *(WORD*)ItemId == ITEM(13, 373)
|| *(WORD*)ItemId == ITEM(13, 374)
|| *(WORD*)ItemId == ITEM(13, 375)
|| *(WORD*)ItemId == ITEM(13, 376)
|| *(WORD*)ItemId == ITEM(13, 377)
|| *(WORD*)ItemId == ITEM(13, 378)
|| *(WORD*)ItemId == ITEM(13, 379)
|| *(WORD*)ItemId == ITEM(13, 380)
|| *(WORD*)ItemId == ITEM(13, 381)
|| *(WORD*)ItemId == ITEM(13, 382)
|| *(WORD*)ItemId == ITEM(13, 383)
|| *(WORD*)ItemId == ITEM(13, 384)
|| *(WORD*)ItemId == ITEM(13, 385)
|| *(WORD*)ItemId == ITEM(13, 386)
|| *(WORD*)ItemId == ITEM(13, 387)
|| *(WORD*)ItemId == ITEM(13, 388)
|| *(WORD*)ItemId == ITEM(13, 389)
|| *(WORD*)ItemId == ITEM(13, 390)
|| *(WORD*)ItemId == ITEM(13, 391)
|| *(WORD*)ItemId == ITEM(13, 392)
|| *(WORD*)ItemId == ITEM(13, 393)
|| *(WORD*)ItemId == ITEM(13, 394)
|| *(WORD*)ItemId == ITEM(13, 395)
|| *(WORD*)ItemId == ITEM(13, 396)
|| *(WORD*)ItemId == ITEM(13, 397)
|| *(WORD*)ItemId == ITEM(13, 398)
|| *(WORD*)ItemId == ITEM(13, 399)
|| *(WORD*)ItemId == ITEM(13, 400)
|| *(WORD*)ItemId == ITEM(13, 401)
|| *(WORD*)ItemId == ITEM(13, 402)
|| *(WORD*)ItemId == ITEM(13, 403)
|| *(WORD*)ItemId == ITEM(13, 404)
|| *(WORD*)ItemId == ITEM(13, 405)
|| *(WORD*)ItemId == ITEM(13, 406)
|| *(WORD*)ItemId == ITEM(13, 407)
|| *(WORD*)ItemId == ITEM(13, 408)
|| *(WORD*)ItemId == ITEM(13, 409)
|| *(WORD*)ItemId == ITEM(13, 410)
|| *(WORD*)ItemId == ITEM(12, 189)
|| *(WORD*)ItemId == ITEM(12, 194)
|| *(WORD*)ItemId == ITEM(12, 220)
|| *(WORD*)ItemId == ITEM(12, 221);
else
Result = 0;
return Result;
}


si pueden hacer esto:

Code: [Select]
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, 147)
        || *(WORD*)ItemId <= ITEM(13, 512);
else
        Result = 0;
    return Result;
}

algunos comentan que las pet no suben mas de cierta cantida aunque modifiquen los valores de 410 en la source
Code: [Select]
void ClearNewPetCharSet() // OK
{
for (int n = 0; n < 400; n++)
{
gNewPetCharSet[n].index = 0xFFFF;
memset(gNewPetCharSet[n].PetCharSet, 0, sizeof(gNewPetCharSet[n].PetCharSet));
}
}

deberia ir asi
#include "CustomPet.h"
Code: [Select]
void ClearNewPetCharSet() // OK
{
for (int n = 0; n < MAX_PET_ITEM; n++)
{
gNewPetCharSet[n].index = 0xFFFF;
memset(gNewPetCharSet[n].PetCharSet, 0, sizeof(gNewPetCharSet[n].PetCharSet));
}
}

esta mal todo el PetProtocol a 400 xD cuando el máximo lo declaran en 512. tambien no aumentaron los limites dejandolo en 410 como maximo xD

> ITEM2(13, 410
 


tambien limpien los codigos aveces uno deja cosas test , solo hacen Copy/Paste y se arrastran con todo lo que uno deja

#define MAX_PET_ITEM 512 // 350  <----
   //SetCompleteHook(0xE8, 0x007DD304, &gObjCreatePetEx); // new tipo
   //SetCompleteHook(0xE8, 0x00833B08, &gObjCreatePetEx); // new tipo


tio @takumi12 ya que me dijiste que andabas con las monturas, te dejare esto por acá aver si te sirve, algunos quizás den crash solo te faltaria de compilar algunas funciones.

si vinieron por cobre, aqui les dejo oro


Code: [Select]
SetCompleteHook(0xE8,0x007DF8BB,&CCustomPet::PetBarHP);

SetCompleteHook(0xE8, 0x007DD304, &gObjCreatePetEx);
SetCompleteHook(0xE8, 0x00833B08, &gObjCreatePetEx);

SetCompleteHook(0xE8, 0x0048F918, &SetPetPreviewScale);
SetCompleteHook(0xE8, 0x0048F94B, &SetPetPreviewScale);
SetCompleteHook(0xE8, 0x0048F97E, &SetPetPreviewScale);
SetCompleteHook(0xE8, 0x0048F9B1, &SetPetPreviewScale);
SetCompleteHook(0xE8, 0x0048F9F3, &SetPetPreviewScale);
SetCompleteHook(0xE8, 0x0048FA35, &SetPetPreviewScale);
SetCompleteHook(0xE8, 0x0048FA74, &SetPetPreviewScale);
SetCompleteHook(0xE8, 0x0048FAA4, &SetPetPreviewScale);
SetCompleteHook(0xE8, 0x00501777, &SetPetPreviewScale);
SetCompleteHook(0xE8, 0x00580178, &SetPetPreviewScale);
SetCompleteHook(0xE8, 0x0058035A, &SetPetPreviewScale);
SetCompleteHook(0xE8, 0x005803C9, &SetPetPreviewScale);
SetCompleteHook(0xE8, 0x0058046F, &SetPetPreviewScale);
SetCompleteHook(0xE8, 0x005804C5, &SetPetPreviewScale);
SetCompleteHook(0xE8, 0x0058051B, &SetPetPreviewScale);
SetCompleteHook(0xE8, 0x00580567, &SetPetPreviewScale);

SetCompleteHook(0xE8, 0x0048E504, &SetPetPreviewScale2);
SetCompleteHook(0xE8, 0x00503986, &SetPetPreviewScale2);

//SetCompleteHook(0xE8, 0x005802AD, &SetPetThis, ASM::CALL);
//SetCompleteHook(0xE8, 0x0064193E, &SetPetThis, ASM::CALL);
//SetCompleteHook(0xE8, 0x0064196C, &SetPetThis, ASM::CALL);
//SetCompleteHook(0xE8, 0x00836158, &SetPetThis, ASM::CALL);
//SetCompleteHook(0xE8, 0x00836189, &SetPetThis, ASM::CALL);
//SetCompleteHook(0xE8, 0x008361BA, &SetPetThis, ASM::CALL);
//SetCompleteHook(0xE8, 0x008361EC, &SetPetThis, ASM::CALL);
//SetCompleteHook(0xE8, 0x0083621A, &SetPetThis, ASM::CALL);
//SetCompleteHook(0xE8, 0x00836248, &SetPetThis, ASM::CALL);
//SetCompleteHook(0xE8, 0x00836248, &SetPetThis, ASM::CALL);
//SetCompleteHook(0xE8, 0x00836248, &SetPetThis, ASM::CALL);
//SetCompleteHook(0xE8, 0x00836248, &SetPetThis, ASM::CALL);
//SetCompleteHook(0xE8, 0x00836248, &SetPetThis, ASM::CALL);

//Fix para mostrar pet a otras personas
SetCompleteHook(0xE8, 0x00664267, &RefreshViewPortItem, ASM::CALL);

//dismunuir tamaño del item dropeado
SetOp((LPVOID)0x005F820C, DrawObjectDropOnViewport, ASM::CALL);
SetOp((LPVOID)0x005F847D, DrawObjectDropOnViewport, ASM::CALL);

//SetCompleteHook(0xE9,0x0050186C,&SetMontMoviment);

SetCompleteHook(0xE9,0x00551920,&SetMontPlayer1);
SetCompleteHook(0xE9,0x0054EAD2,&SetMontPlayer2); //Personaje monte al pet
SetCompleteHook(0xE9,0x0054F6B8,&SetMontPlayer3);
SetCompleteHook(0xE9,0x0054F8F4,&SetMontPlayer4);
SetCompleteHook(0xE9,0x0054FC87,&SetMontPlayer5);
SetCompleteHook(0xE9,0x00550710,&SetMontPlayer6);
SetCompleteHook(0xE9,0x00550771,&SetMontPlayer7);
SetCompleteHook(0xE9,0x005507D7,&SetMontPlayer8);
SetCompleteHook(0xE9,0x0055083D,&SetMontPlayer9);
SetCompleteHook(0xE9,0x00552781,&SetMontPlayer10);
SetCompleteHook(0xE9,0x0055299F,&SetMontPlayer11);
SetCompleteHook(0xE9,0x00552B92,&SetMontPlayer12);
SetCompleteHook(0xE9,0x005531E2,&SetMontPlayer13);
SetCompleteHook(0xE9,0x0055D211,&SetMontPlayer14);
SetCompleteHook(0xE9,0x00564BAC,&SetMontPlayer15);

SetCompleteHook(0xE9,0x00503847,&SetMontPlayer16);

//SetCompleteHook(0xE9,0x0054ED4D,&SetMontPlayer17);
//SetCompleteHook(0xE9,0x0054FD50,&SetMontPlayer18);
//SetCompleteHook(0xE9,0x005517AE,&SetMontPlayer19);

SetCompleteHook(0xE9,0x0048E61B,&SetMontPlayer20);

SetCompleteHook(0xE9,0x005517AE,&SetMontDarkHorse1);
SetCompleteHook(0xE9,0x0055D1E3,&SetMontDarkHorse2);
SetCompleteHook(0xE9,0x00564C26,&SetMontDarkHorse3);
SetCompleteHook(0xE9,0x005964E0,&SetMontDarkHorse4);
SetCompleteHook(0xE9,0x005A3821,&SetMontDarkHorse5);

SetCompleteHook(0xE9,0x00501860,&SetMontMoviment2);

SetCompleteHook(0xE9,0x00502D1D,&SetMovimentDinoFly1);
SetCompleteHook(0xE9,0x00502E4C,&SetMovimentDinoFly2);
SetCompleteHook(0xE9,0x005030D3,&SetMovimentDinoFly3);
SetCompleteHook(0xE9,0x0050313F,&SetMovimentDinoFly4);

SetCompleteHook(0xE8,0x0048E17D,&CCustomPet::PetsMovement);
SetCompleteHook(0xE8,0x00503756,&CCustomPet::PetsMovement);


Gracias:


Offline Llalex #10 Posteado: May 03, 2020, 01:34:42 AM

  • 0 puntos por ventas
  • *
  • Rank: Puto amo
  • Posts: 337
  • Gracias recibida: 397
  • ve

Offline takumi12 #11 Posteado: May 03, 2020, 01:41:34 AM | Modificado: May 03, 2020, 02:31:43 AM by takumi12

  • MAESTRO

  • US. DE HONOR

  • LEYENDA

  • Php Coder
  • +11 puntos por ventas
  • *
  • *
  • Rank: Puto amo
  • Posts: 1.310
  • Gracias recibida: 40061
  • mx

tio @takumi12 ya que me dijiste que andabas con las monturas, te dejare esto por acá aver si te sirve, algunos quizás den crash solo te faltaria de compilar algunas funciones.

si vinieron por cobre, aqui les dejo oro


Code: [Select]
SetCompleteHook(0xE8,0x007DF8BB,&CCustomPet::PetBarHP);

SetCompleteHook(0xE8, 0x007DD304, &gObjCreatePetEx);
SetCompleteHook(0xE8, 0x00833B08, &gObjCreatePetEx);

SetCompleteHook(0xE8, 0x0048F918, &SetPetPreviewScale);
SetCompleteHook(0xE8, 0x0048F94B, &SetPetPreviewScale);
SetCompleteHook(0xE8, 0x0048F97E, &SetPetPreviewScale);
SetCompleteHook(0xE8, 0x0048F9B1, &SetPetPreviewScale);
SetCompleteHook(0xE8, 0x0048F9F3, &SetPetPreviewScale);
SetCompleteHook(0xE8, 0x0048FA35, &SetPetPreviewScale);
SetCompleteHook(0xE8, 0x0048FA74, &SetPetPreviewScale);
SetCompleteHook(0xE8, 0x0048FAA4, &SetPetPreviewScale);
SetCompleteHook(0xE8, 0x00501777, &SetPetPreviewScale);
SetCompleteHook(0xE8, 0x00580178, &SetPetPreviewScale);
SetCompleteHook(0xE8, 0x0058035A, &SetPetPreviewScale);
SetCompleteHook(0xE8, 0x005803C9, &SetPetPreviewScale);
SetCompleteHook(0xE8, 0x0058046F, &SetPetPreviewScale);
SetCompleteHook(0xE8, 0x005804C5, &SetPetPreviewScale);
SetCompleteHook(0xE8, 0x0058051B, &SetPetPreviewScale);
SetCompleteHook(0xE8, 0x00580567, &SetPetPreviewScale);

SetCompleteHook(0xE8, 0x0048E504, &SetPetPreviewScale2);
SetCompleteHook(0xE8, 0x00503986, &SetPetPreviewScale2);

//SetCompleteHook(0xE8, 0x005802AD, &SetPetThis, ASM::CALL);
//SetCompleteHook(0xE8, 0x0064193E, &SetPetThis, ASM::CALL);
//SetCompleteHook(0xE8, 0x0064196C, &SetPetThis, ASM::CALL);
//SetCompleteHook(0xE8, 0x00836158, &SetPetThis, ASM::CALL);
//SetCompleteHook(0xE8, 0x00836189, &SetPetThis, ASM::CALL);
//SetCompleteHook(0xE8, 0x008361BA, &SetPetThis, ASM::CALL);
//SetCompleteHook(0xE8, 0x008361EC, &SetPetThis, ASM::CALL);
//SetCompleteHook(0xE8, 0x0083621A, &SetPetThis, ASM::CALL);
//SetCompleteHook(0xE8, 0x00836248, &SetPetThis, ASM::CALL);
//SetCompleteHook(0xE8, 0x00836248, &SetPetThis, ASM::CALL);
//SetCompleteHook(0xE8, 0x00836248, &SetPetThis, ASM::CALL);
//SetCompleteHook(0xE8, 0x00836248, &SetPetThis, ASM::CALL);
//SetCompleteHook(0xE8, 0x00836248, &SetPetThis, ASM::CALL);

//Fix para mostrar pet a otras personas
SetCompleteHook(0xE8, 0x00664267, &RefreshViewPortItem, ASM::CALL);

//dismunuir tamaño del item dropeado
SetOp((LPVOID)0x005F820C, DrawObjectDropOnViewport, ASM::CALL);
SetOp((LPVOID)0x005F847D, DrawObjectDropOnViewport, ASM::CALL);

//SetCompleteHook(0xE9,0x0050186C,&SetMontMoviment);

SetCompleteHook(0xE9,0x00551920,&SetMontPlayer1);
SetCompleteHook(0xE9,0x0054EAD2,&SetMontPlayer2); //Personaje monte al pet
SetCompleteHook(0xE9,0x0054F6B8,&SetMontPlayer3);
SetCompleteHook(0xE9,0x0054F8F4,&SetMontPlayer4);
SetCompleteHook(0xE9,0x0054FC87,&SetMontPlayer5);
SetCompleteHook(0xE9,0x00550710,&SetMontPlayer6);
SetCompleteHook(0xE9,0x00550771,&SetMontPlayer7);
SetCompleteHook(0xE9,0x005507D7,&SetMontPlayer8);
SetCompleteHook(0xE9,0x0055083D,&SetMontPlayer9);
SetCompleteHook(0xE9,0x00552781,&SetMontPlayer10);
SetCompleteHook(0xE9,0x0055299F,&SetMontPlayer11);
SetCompleteHook(0xE9,0x00552B92,&SetMontPlayer12);
SetCompleteHook(0xE9,0x005531E2,&SetMontPlayer13);
SetCompleteHook(0xE9,0x0055D211,&SetMontPlayer14);
SetCompleteHook(0xE9,0x00564BAC,&SetMontPlayer15);

SetCompleteHook(0xE9,0x00503847,&SetMontPlayer16);

//SetCompleteHook(0xE9,0x0054ED4D,&SetMontPlayer17);
//SetCompleteHook(0xE9,0x0054FD50,&SetMontPlayer18);
//SetCompleteHook(0xE9,0x005517AE,&SetMontPlayer19);

SetCompleteHook(0xE9,0x0048E61B,&SetMontPlayer20);

SetCompleteHook(0xE9,0x005517AE,&SetMontDarkHorse1);
SetCompleteHook(0xE9,0x0055D1E3,&SetMontDarkHorse2);
SetCompleteHook(0xE9,0x00564C26,&SetMontDarkHorse3);
SetCompleteHook(0xE9,0x005964E0,&SetMontDarkHorse4);
SetCompleteHook(0xE9,0x005A3821,&SetMontDarkHorse5);

SetCompleteHook(0xE9,0x00501860,&SetMontMoviment2);

SetCompleteHook(0xE9,0x00502D1D,&SetMovimentDinoFly1);
SetCompleteHook(0xE9,0x00502E4C,&SetMovimentDinoFly2);
SetCompleteHook(0xE9,0x005030D3,&SetMovimentDinoFly3);
SetCompleteHook(0xE9,0x0050313F,&SetMovimentDinoFly4);

SetCompleteHook(0xE8,0x0048E17D,&CCustomPet::PetsMovement);
SetCompleteHook(0xE8,0x00503756,&CCustomPet::PetsMovement);

yo como lo dije desde el inicio y lo seguiré diciendo de todos los coder c++ disque coders los unicos que me dieron una mano fuiste tu y después de mis inicios fui conociendo y entablando conversación otros más..., y como ya comenté en algun momento solia usar la source pet que posteaste en los files louis pero al ver muchas cosas que me generaban problemas con capas y otras cosas adicionales que no diré ya que cada uno se de cuenta, decidí implementar mi propio código para armar los pet, cabe mensionar que lo que se cambia es la estructura del algoritmo y la utilidad de las variables ya que alfinal de todo son las mismas offset que se utilizan, nada mejor que armar algo tuyo....   respecto a la validación de pets es algo mejor si consultas que lo que esta validando es un pet


Code: [Select]
bool RefreshViewPet(int a1)
{

bool t;
// ----

if (a1)
Result = *(WORD*)a1== 0x1A00    //Angel
|| *(WORD*)a1== 0x1A01        //Satan
|| *(WORD*)a1== 0x1A02        //Unicorn
|| *(WORD*)a1== 0x1A03        //Dinorant
|| *(WORD*)a1== 0x1A04        //Dark Horse
|| *(WORD*)a1== 0x1A05        //Dark Raven
|| *(WORD*)a1== 0x1A25        //Fenrir     //
|| *(WORD*)a1== ITEM(13, 64)
|| *(WORD*)a1== ITEM(13, 65)
|| *(WORD*)a1== ITEM(13, 67)
|| *(WORD*)a1== ITEM(13, 80)
|| *(WORD*)a1== ITEM(13, 106)
|| *(WORD*)a1== ITEM(13, 123)
|| gCustomPet.isPet(*(WORD*)a1)
|| gCloak.isCloak(*(WORD*)a1)
|| *(WORD*)ItemId == ITEM(13,30)
|| *(WORD*)ItemId == ITEM(12,130)
|| *(WORD*)ItemId == ITEM(12,135);
else
t= false;
return t;
}


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

Offline Llalex #12 Posteado: May 03, 2020, 01:53:47 AM | Modificado: May 03, 2020, 01:14:53 PM by Llalex

  • 0 puntos por ventas
  • *
  • Rank: Puto amo
  • Posts: 337
  • Gracias recibida: 397
  • ve
esta es mi source vieja que les programe a los vietnamitas, pero en fin..

vamos al grano veo cosas inncesarias en esta source , por ejemplo: por que crear un nuevo: OBJECT_USER si ya existe uno? únicamente se añadio la regla de los bot xD funciona igual agregandolo adentro y no crean una nueva regla, que es consumo innecesario de memoria


// void gObjViewportListProtocolCreate(LPOBJ lpObj) // OK
Code: [Select]
	void gObjViewportListProtocolCreate(LPOBJ lpObj) // OK
{

if(lpObj->Type == OBJECT_USER || lpObj->Type == OBJECT_BOTS) //MC
{
gViewport.GCViewportSimplePetSend(lpObj); //CustomPets
gViewport.GCViewportSimplePlayerSend(lpObj);
gViewport.GCViewportSimpleChangeSend(lpObj);
gViewport.GCViewportSimpleGuildSend(lpObj);
gViewport.GCViewportSimpleGensSystemSend(lpObj);
}
gViewport.GCViewportSimpleMonsterSend(lpObj);
gViewport.GCViewportSimpleSummonSend(lpObj);
}

por que hacer esto

Code: [Select]
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, 147) //WTF
|| *(WORD*)ItemId == ITEM(13, 148)
|| *(WORD*)ItemId == ITEM(13, 149)
|| *(WORD*)ItemId == ITEM(13, 150)
|| *(WORD*)ItemId == ITEM(13, 151)
|| *(WORD*)ItemId == ITEM(13, 152)
|| *(WORD*)ItemId == ITEM(13, 153)
|| *(WORD*)ItemId == ITEM(13, 154)
|| *(WORD*)ItemId == ITEM(13, 155)
|| *(WORD*)ItemId == ITEM(13, 156)
|| *(WORD*)ItemId == ITEM(13, 157)
|| *(WORD*)ItemId == ITEM(13, 158)
|| *(WORD*)ItemId == ITEM(13, 159)
|| *(WORD*)ItemId == ITEM(13, 160)
|| *(WORD*)ItemId == ITEM(13, 161)
|| *(WORD*)ItemId == ITEM(13, 162)
|| *(WORD*)ItemId == ITEM(13, 163)
|| *(WORD*)ItemId == ITEM(13, 164)
|| *(WORD*)ItemId == ITEM(13, 165)
|| *(WORD*)ItemId == ITEM(13, 166)
|| *(WORD*)ItemId == ITEM(13, 167)
|| *(WORD*)ItemId == ITEM(13, 168)
|| *(WORD*)ItemId == ITEM(13, 169)
|| *(WORD*)ItemId == ITEM(13, 170)
|| *(WORD*)ItemId == ITEM(13, 171)
|| *(WORD*)ItemId == ITEM(13, 172)
|| *(WORD*)ItemId == ITEM(13, 173)
|| *(WORD*)ItemId == ITEM(13, 174)
|| *(WORD*)ItemId == ITEM(13, 175)
|| *(WORD*)ItemId == ITEM(13, 176)
|| *(WORD*)ItemId == ITEM(13, 177)
|| *(WORD*)ItemId == ITEM(13, 178)
|| *(WORD*)ItemId == ITEM(13, 179)
|| *(WORD*)ItemId == ITEM(13, 180)
|| *(WORD*)ItemId == ITEM(13, 181)
|| *(WORD*)ItemId == ITEM(13, 182)
|| *(WORD*)ItemId == ITEM(13, 183)
|| *(WORD*)ItemId == ITEM(13, 184)
|| *(WORD*)ItemId == ITEM(13, 185)
|| *(WORD*)ItemId == ITEM(13, 186)
|| *(WORD*)ItemId == ITEM(13, 187)
|| *(WORD*)ItemId == ITEM(13, 188)
|| *(WORD*)ItemId == ITEM(13, 189)
|| *(WORD*)ItemId == ITEM(13, 190)
|| *(WORD*)ItemId == ITEM(13, 191)
|| *(WORD*)ItemId == ITEM(13, 192)
|| *(WORD*)ItemId == ITEM(13, 193)
|| *(WORD*)ItemId == ITEM(13, 194)
|| *(WORD*)ItemId == ITEM(13, 195)
|| *(WORD*)ItemId == ITEM(13, 196)
|| *(WORD*)ItemId == ITEM(13, 197)
|| *(WORD*)ItemId == ITEM(13, 198)
|| *(WORD*)ItemId == ITEM(13, 199)
|| *(WORD*)ItemId == ITEM(13, 200)
|| *(WORD*)ItemId == ITEM(13, 201)
|| *(WORD*)ItemId == ITEM(13, 202)
|| *(WORD*)ItemId == ITEM(13, 203)
|| *(WORD*)ItemId == ITEM(13, 204)
|| *(WORD*)ItemId == ITEM(13, 205)
|| *(WORD*)ItemId == ITEM(13, 206)
|| *(WORD*)ItemId == ITEM(13, 207)
|| *(WORD*)ItemId == ITEM(13, 208)
|| *(WORD*)ItemId == ITEM(13, 209)
|| *(WORD*)ItemId == ITEM(13, 210)
|| *(WORD*)ItemId == ITEM(13, 211)
|| *(WORD*)ItemId == ITEM(13, 212)
|| *(WORD*)ItemId == ITEM(13, 213)
|| *(WORD*)ItemId == ITEM(13, 214)
|| *(WORD*)ItemId == ITEM(13, 215)
|| *(WORD*)ItemId == ITEM(13, 216)
|| *(WORD*)ItemId == ITEM(13, 217)
|| *(WORD*)ItemId == ITEM(13, 218)
|| *(WORD*)ItemId == ITEM(13, 219)
|| *(WORD*)ItemId == ITEM(13, 220)
|| *(WORD*)ItemId == ITEM(13, 221)
|| *(WORD*)ItemId == ITEM(13, 222)
|| *(WORD*)ItemId == ITEM(13, 223)
|| *(WORD*)ItemId == ITEM(13, 224)
|| *(WORD*)ItemId == ITEM(13, 225)
|| *(WORD*)ItemId == ITEM(13, 226)
|| *(WORD*)ItemId == ITEM(13, 227)
|| *(WORD*)ItemId == ITEM(13, 228)
|| *(WORD*)ItemId == ITEM(13, 229)
|| *(WORD*)ItemId == ITEM(13, 230)
|| *(WORD*)ItemId == ITEM(13, 231)
|| *(WORD*)ItemId == ITEM(13, 232)
|| *(WORD*)ItemId == ITEM(13, 233)
|| *(WORD*)ItemId == ITEM(13, 234)
|| *(WORD*)ItemId == ITEM(13, 235)
|| *(WORD*)ItemId == ITEM(13, 236)
|| *(WORD*)ItemId == ITEM(13, 237)
|| *(WORD*)ItemId == ITEM(13, 238)
|| *(WORD*)ItemId == ITEM(13, 239)
|| *(WORD*)ItemId == ITEM(13, 240)
|| *(WORD*)ItemId == ITEM(13, 241)
|| *(WORD*)ItemId == ITEM(13, 242)
|| *(WORD*)ItemId == ITEM(13, 243)
|| *(WORD*)ItemId == ITEM(13, 244)
|| *(WORD*)ItemId == ITEM(13, 245)
|| *(WORD*)ItemId == ITEM(13, 246)
|| *(WORD*)ItemId == ITEM(13, 247)
|| *(WORD*)ItemId == ITEM(13, 248)
|| *(WORD*)ItemId == ITEM(13, 249)
|| *(WORD*)ItemId == ITEM(13, 250)
|| *(WORD*)ItemId == ITEM(13, 251)
|| *(WORD*)ItemId == ITEM(13, 252)
|| *(WORD*)ItemId == ITEM(13, 253)
|| *(WORD*)ItemId == ITEM(13, 254)
|| *(WORD*)ItemId == ITEM(13, 255)
|| *(WORD*)ItemId == ITEM(13, 256)
|| *(WORD*)ItemId == ITEM(13, 257)
|| *(WORD*)ItemId == ITEM(13, 258)
|| *(WORD*)ItemId == ITEM(13, 259)
|| *(WORD*)ItemId == ITEM(13, 260)
|| *(WORD*)ItemId == ITEM(13, 261)
|| *(WORD*)ItemId == ITEM(13, 262)
|| *(WORD*)ItemId == ITEM(13, 263)
|| *(WORD*)ItemId == ITEM(13, 264)
|| *(WORD*)ItemId == ITEM(13, 265)
|| *(WORD*)ItemId == ITEM(13, 266)
|| *(WORD*)ItemId == ITEM(13, 267)
|| *(WORD*)ItemId == ITEM(13, 268)
|| *(WORD*)ItemId == ITEM(13, 269)
|| *(WORD*)ItemId == ITEM(13, 270)
|| *(WORD*)ItemId == ITEM(13, 271)
|| *(WORD*)ItemId == ITEM(13, 272)
|| *(WORD*)ItemId == ITEM(13, 273)
|| *(WORD*)ItemId == ITEM(13, 274)
|| *(WORD*)ItemId == ITEM(13, 275)
|| *(WORD*)ItemId == ITEM(13, 276)
|| *(WORD*)ItemId == ITEM(13, 277)
|| *(WORD*)ItemId == ITEM(13, 278)
|| *(WORD*)ItemId == ITEM(13, 279)
|| *(WORD*)ItemId == ITEM(13, 280)
|| *(WORD*)ItemId == ITEM(13, 281)
|| *(WORD*)ItemId == ITEM(13, 282)
|| *(WORD*)ItemId == ITEM(13, 283)
|| *(WORD*)ItemId == ITEM(13, 284)
|| *(WORD*)ItemId == ITEM(13, 285)
|| *(WORD*)ItemId == ITEM(13, 286)
|| *(WORD*)ItemId == ITEM(13, 287)
|| *(WORD*)ItemId == ITEM(13, 288)
|| *(WORD*)ItemId == ITEM(13, 289)
|| *(WORD*)ItemId == ITEM(13, 290)
|| *(WORD*)ItemId == ITEM(13, 291)
|| *(WORD*)ItemId == ITEM(13, 292)
|| *(WORD*)ItemId == ITEM(13, 293)
|| *(WORD*)ItemId == ITEM(13, 294)
|| *(WORD*)ItemId == ITEM(13, 295)
|| *(WORD*)ItemId == ITEM(13, 296)
|| *(WORD*)ItemId == ITEM(13, 297)
|| *(WORD*)ItemId == ITEM(13, 298)
|| *(WORD*)ItemId == ITEM(13, 299)
|| *(WORD*)ItemId == ITEM(13, 300)
|| *(WORD*)ItemId == ITEM(13, 301)
|| *(WORD*)ItemId == ITEM(13, 302)
|| *(WORD*)ItemId == ITEM(13, 303)
|| *(WORD*)ItemId == ITEM(13, 304)
|| *(WORD*)ItemId == ITEM(13, 305)
|| *(WORD*)ItemId == ITEM(13, 306)
|| *(WORD*)ItemId == ITEM(13, 307)
|| *(WORD*)ItemId == ITEM(13, 308)
|| *(WORD*)ItemId == ITEM(13, 309)
|| *(WORD*)ItemId == ITEM(13, 310)
|| *(WORD*)ItemId == ITEM(13, 311)
|| *(WORD*)ItemId == ITEM(13, 312)
|| *(WORD*)ItemId == ITEM(13, 313)
|| *(WORD*)ItemId == ITEM(13, 314)
|| *(WORD*)ItemId == ITEM(13, 315)
|| *(WORD*)ItemId == ITEM(13, 316)
|| *(WORD*)ItemId == ITEM(13, 317)
|| *(WORD*)ItemId == ITEM(13, 318)
|| *(WORD*)ItemId == ITEM(13, 319)
|| *(WORD*)ItemId == ITEM(13, 320)
|| *(WORD*)ItemId == ITEM(13, 321)
|| *(WORD*)ItemId == ITEM(13, 322)
|| *(WORD*)ItemId == ITEM(13, 323)
|| *(WORD*)ItemId == ITEM(13, 324)
|| *(WORD*)ItemId == ITEM(13, 325)
|| *(WORD*)ItemId == ITEM(13, 326)
|| *(WORD*)ItemId == ITEM(13, 327)
|| *(WORD*)ItemId == ITEM(13, 328)
|| *(WORD*)ItemId == ITEM(13, 329)
|| *(WORD*)ItemId == ITEM(13, 330)
|| *(WORD*)ItemId == ITEM(13, 331)
|| *(WORD*)ItemId == ITEM(13, 332)
|| *(WORD*)ItemId == ITEM(13, 333)
|| *(WORD*)ItemId == ITEM(13, 334)
|| *(WORD*)ItemId == ITEM(13, 335)
|| *(WORD*)ItemId == ITEM(13, 336)
|| *(WORD*)ItemId == ITEM(13, 337)
|| *(WORD*)ItemId == ITEM(13, 338)
|| *(WORD*)ItemId == ITEM(13, 339)
|| *(WORD*)ItemId == ITEM(13, 340)
|| *(WORD*)ItemId == ITEM(13, 341)
|| *(WORD*)ItemId == ITEM(13, 342)
|| *(WORD*)ItemId == ITEM(13, 343)
|| *(WORD*)ItemId == ITEM(13, 344)
|| *(WORD*)ItemId == ITEM(13, 345)
|| *(WORD*)ItemId == ITEM(13, 346)
|| *(WORD*)ItemId == ITEM(13, 347)
|| *(WORD*)ItemId == ITEM(13, 348)
|| *(WORD*)ItemId == ITEM(13, 349)
|| *(WORD*)ItemId == ITEM(13, 350)
|| *(WORD*)ItemId == ITEM(13, 351)
|| *(WORD*)ItemId == ITEM(13, 352)
|| *(WORD*)ItemId == ITEM(13, 353)
|| *(WORD*)ItemId == ITEM(13, 354)
|| *(WORD*)ItemId == ITEM(13, 355)
|| *(WORD*)ItemId == ITEM(13, 356)
|| *(WORD*)ItemId == ITEM(13, 357)
|| *(WORD*)ItemId == ITEM(13, 358)
|| *(WORD*)ItemId == ITEM(13, 359)
|| *(WORD*)ItemId == ITEM(13, 360)
|| *(WORD*)ItemId == ITEM(13, 361)
|| *(WORD*)ItemId == ITEM(13, 362)
|| *(WORD*)ItemId == ITEM(13, 363)
|| *(WORD*)ItemId == ITEM(13, 364)
|| *(WORD*)ItemId == ITEM(13, 365)
|| *(WORD*)ItemId == ITEM(13, 366)
|| *(WORD*)ItemId == ITEM(13, 367)
|| *(WORD*)ItemId == ITEM(13, 368)
|| *(WORD*)ItemId == ITEM(13, 369)
|| *(WORD*)ItemId == ITEM(13, 370)
|| *(WORD*)ItemId == ITEM(13, 371)
|| *(WORD*)ItemId == ITEM(13, 372)
|| *(WORD*)ItemId == ITEM(13, 373)
|| *(WORD*)ItemId == ITEM(13, 374)
|| *(WORD*)ItemId == ITEM(13, 375)
|| *(WORD*)ItemId == ITEM(13, 376)
|| *(WORD*)ItemId == ITEM(13, 377)
|| *(WORD*)ItemId == ITEM(13, 378)
|| *(WORD*)ItemId == ITEM(13, 379)
|| *(WORD*)ItemId == ITEM(13, 380)
|| *(WORD*)ItemId == ITEM(13, 381)
|| *(WORD*)ItemId == ITEM(13, 382)
|| *(WORD*)ItemId == ITEM(13, 383)
|| *(WORD*)ItemId == ITEM(13, 384)
|| *(WORD*)ItemId == ITEM(13, 385)
|| *(WORD*)ItemId == ITEM(13, 386)
|| *(WORD*)ItemId == ITEM(13, 387)
|| *(WORD*)ItemId == ITEM(13, 388)
|| *(WORD*)ItemId == ITEM(13, 389)
|| *(WORD*)ItemId == ITEM(13, 390)
|| *(WORD*)ItemId == ITEM(13, 391)
|| *(WORD*)ItemId == ITEM(13, 392)
|| *(WORD*)ItemId == ITEM(13, 393)
|| *(WORD*)ItemId == ITEM(13, 394)
|| *(WORD*)ItemId == ITEM(13, 395)
|| *(WORD*)ItemId == ITEM(13, 396)
|| *(WORD*)ItemId == ITEM(13, 397)
|| *(WORD*)ItemId == ITEM(13, 398)
|| *(WORD*)ItemId == ITEM(13, 399)
|| *(WORD*)ItemId == ITEM(13, 400)
|| *(WORD*)ItemId == ITEM(13, 401)
|| *(WORD*)ItemId == ITEM(13, 402)
|| *(WORD*)ItemId == ITEM(13, 403)
|| *(WORD*)ItemId == ITEM(13, 404)
|| *(WORD*)ItemId == ITEM(13, 405)
|| *(WORD*)ItemId == ITEM(13, 406)
|| *(WORD*)ItemId == ITEM(13, 407)
|| *(WORD*)ItemId == ITEM(13, 408)
|| *(WORD*)ItemId == ITEM(13, 409)
|| *(WORD*)ItemId == ITEM(13, 410)
|| *(WORD*)ItemId == ITEM(12, 189)
|| *(WORD*)ItemId == ITEM(12, 194)
|| *(WORD*)ItemId == ITEM(12, 220)
|| *(WORD*)ItemId == ITEM(12, 221);
else
Result = 0;
return Result;
}


si pueden hacer esto:

Code: [Select]
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, 147)
&& ItemId <= ITEM(13, 410);
else
        Result = 0;
    return Result;
}

algunos comentan que las pet no suben mas de cierta cantida aunque modifiquen los valores de 410 en la source
Code: [Select]
void ClearNewPetCharSet() // OK
{
for (int n = 0; n < 400; n++)
{
gNewPetCharSet[n].index = 0xFFFF;
memset(gNewPetCharSet[n].PetCharSet, 0, sizeof(gNewPetCharSet[n].PetCharSet));
}
}

deberia ir asi
#include "CustomPet.h"
Code: [Select]
void ClearNewPetCharSet() // OK
{
for (int n = 0; n < MAX_PET_ITEM; n++)
{
gNewPetCharSet[n].index = 0xFFFF;
memset(gNewPetCharSet[n].PetCharSet, 0, sizeof(gNewPetCharSet[n].PetCharSet));
}
}

esta mal todo el PetProtocol a 400 xD cuando el máximo lo declaran en 512. tambien no aumentaron los limites dejandolo en 410 como maximo xD

> ITEM2(13, 410
 


tambien limpien los codigos aveces uno deja cosas test , solo hacen Copy/Paste y se arrastran con todo lo que uno deja

#define MAX_PET_ITEM 512 // 350  <----
   //SetCompleteHook(0xE8, 0x007DD304, &gObjCreatePetEx); // new tipo
   //SetCompleteHook(0xE8, 0x00833B08, &gObjCreatePetEx); // new tipo


tio @takumi12 ya que me dijiste que andabas con las monturas, te dejare esto por acá aver si te sirve, algunos quizás den crash solo te faltaria de compilar algunas funciones.

si vinieron por cobre, aqui les dejo oro


Code: [Select]
SetCompleteHook(0xE8,0x007DF8BB,&CCustomPet::PetBarHP);

SetCompleteHook(0xE8, 0x007DD304, &gObjCreatePetEx);
SetCompleteHook(0xE8, 0x00833B08, &gObjCreatePetEx);

SetCompleteHook(0xE8, 0x0048F918, &SetPetPreviewScale);
SetCompleteHook(0xE8, 0x0048F94B, &SetPetPreviewScale);
SetCompleteHook(0xE8, 0x0048F97E, &SetPetPreviewScale);
SetCompleteHook(0xE8, 0x0048F9B1, &SetPetPreviewScale);
SetCompleteHook(0xE8, 0x0048F9F3, &SetPetPreviewScale);
SetCompleteHook(0xE8, 0x0048FA35, &SetPetPreviewScale);
SetCompleteHook(0xE8, 0x0048FA74, &SetPetPreviewScale);
SetCompleteHook(0xE8, 0x0048FAA4, &SetPetPreviewScale);
SetCompleteHook(0xE8, 0x00501777, &SetPetPreviewScale);
SetCompleteHook(0xE8, 0x00580178, &SetPetPreviewScale);
SetCompleteHook(0xE8, 0x0058035A, &SetPetPreviewScale);
SetCompleteHook(0xE8, 0x005803C9, &SetPetPreviewScale);
SetCompleteHook(0xE8, 0x0058046F, &SetPetPreviewScale);
SetCompleteHook(0xE8, 0x005804C5, &SetPetPreviewScale);
SetCompleteHook(0xE8, 0x0058051B, &SetPetPreviewScale);
SetCompleteHook(0xE8, 0x00580567, &SetPetPreviewScale);

SetCompleteHook(0xE8, 0x0048E504, &SetPetPreviewScale2);
SetCompleteHook(0xE8, 0x00503986, &SetPetPreviewScale2);

//SetCompleteHook(0xE8, 0x005802AD, &SetPetThis, ASM::CALL);
//SetCompleteHook(0xE8, 0x0064193E, &SetPetThis, ASM::CALL);
//SetCompleteHook(0xE8, 0x0064196C, &SetPetThis, ASM::CALL);
//SetCompleteHook(0xE8, 0x00836158, &SetPetThis, ASM::CALL);
//SetCompleteHook(0xE8, 0x00836189, &SetPetThis, ASM::CALL);
//SetCompleteHook(0xE8, 0x008361BA, &SetPetThis, ASM::CALL);
//SetCompleteHook(0xE8, 0x008361EC, &SetPetThis, ASM::CALL);
//SetCompleteHook(0xE8, 0x0083621A, &SetPetThis, ASM::CALL);
//SetCompleteHook(0xE8, 0x00836248, &SetPetThis, ASM::CALL);
//SetCompleteHook(0xE8, 0x00836248, &SetPetThis, ASM::CALL);
//SetCompleteHook(0xE8, 0x00836248, &SetPetThis, ASM::CALL);
//SetCompleteHook(0xE8, 0x00836248, &SetPetThis, ASM::CALL);
//SetCompleteHook(0xE8, 0x00836248, &SetPetThis, ASM::CALL);

//Fix para mostrar pet a otras personas
SetCompleteHook(0xE8, 0x00664267, &RefreshViewPortItem, ASM::CALL);

//dismunuir tamaño del item dropeado
SetOp((LPVOID)0x005F820C, DrawObjectDropOnViewport, ASM::CALL);
SetOp((LPVOID)0x005F847D, DrawObjectDropOnViewport, ASM::CALL);

//SetCompleteHook(0xE9,0x0050186C,&SetMontMoviment);

SetCompleteHook(0xE9,0x00551920,&SetMontPlayer1);
SetCompleteHook(0xE9,0x0054EAD2,&SetMontPlayer2); //Personaje monte al pet
SetCompleteHook(0xE9,0x0054F6B8,&SetMontPlayer3);
SetCompleteHook(0xE9,0x0054F8F4,&SetMontPlayer4);
SetCompleteHook(0xE9,0x0054FC87,&SetMontPlayer5);
SetCompleteHook(0xE9,0x00550710,&SetMontPlayer6);
SetCompleteHook(0xE9,0x00550771,&SetMontPlayer7);
SetCompleteHook(0xE9,0x005507D7,&SetMontPlayer8);
SetCompleteHook(0xE9,0x0055083D,&SetMontPlayer9);
SetCompleteHook(0xE9,0x00552781,&SetMontPlayer10);
SetCompleteHook(0xE9,0x0055299F,&SetMontPlayer11);
SetCompleteHook(0xE9,0x00552B92,&SetMontPlayer12);
SetCompleteHook(0xE9,0x005531E2,&SetMontPlayer13);
SetCompleteHook(0xE9,0x0055D211,&SetMontPlayer14);
SetCompleteHook(0xE9,0x00564BAC,&SetMontPlayer15);

SetCompleteHook(0xE9,0x00503847,&SetMontPlayer16);

//SetCompleteHook(0xE9,0x0054ED4D,&SetMontPlayer17);
//SetCompleteHook(0xE9,0x0054FD50,&SetMontPlayer18);
//SetCompleteHook(0xE9,0x005517AE,&SetMontPlayer19);

SetCompleteHook(0xE9,0x0048E61B,&SetMontPlayer20);

SetCompleteHook(0xE9,0x005517AE,&SetMontDarkHorse1);
SetCompleteHook(0xE9,0x0055D1E3,&SetMontDarkHorse2);
SetCompleteHook(0xE9,0x00564C26,&SetMontDarkHorse3);
SetCompleteHook(0xE9,0x005964E0,&SetMontDarkHorse4);
SetCompleteHook(0xE9,0x005A3821,&SetMontDarkHorse5);

SetCompleteHook(0xE9,0x00501860,&SetMontMoviment2);

SetCompleteHook(0xE9,0x00502D1D,&SetMovimentDinoFly1);
SetCompleteHook(0xE9,0x00502E4C,&SetMovimentDinoFly2);
SetCompleteHook(0xE9,0x005030D3,&SetMovimentDinoFly3);
SetCompleteHook(0xE9,0x0050313F,&SetMovimentDinoFly4);

SetCompleteHook(0xE8,0x0048E17D,&CCustomPet::PetsMovement);
SetCompleteHook(0xE8,0x00503756,&CCustomPet::PetsMovement);


Gracias por tu aporte @melo920 , como dijiste el código no esta mal, si hay cosas que se pueden mejorar, pero eso queda en cada quien, como dije arriba yo estoy aportando algo totalmente funcional, sin errores (al menos a mi no me dio).

@melo920  Coloque este refresh que compartiste y me bug los pets, me lo quitaba el pet, me lo colocaba de nuevo y se agregaba otro pet, cuando colocaba el pet en el inventario tampoco se quitaba  lol









Offline AZURE #13 Posteado: May 03, 2020, 01:06:22 PM

  • 0 puntos por ventas
  • *
  • Rank: Puto amo
  • Posts: 267
  • Gracias recibida: 3050
  • cl
No tube problema con la pocion de vida


Offline Llalex #14 Posteado: May 03, 2020, 01:17:16 PM

  • 0 puntos por ventas
  • *
  • Rank: Puto amo
  • Posts: 337
  • Gracias recibida: 397
  • ve

tio @takumi12 ya que me dijiste que andabas con las monturas, te dejare esto por acá aver si te sirve, algunos quizás den crash solo te faltaria de compilar algunas funciones.

si vinieron por cobre, aqui les dejo oro


Code: [Select]
SetCompleteHook(0xE8,0x007DF8BB,&CCustomPet::PetBarHP);

SetCompleteHook(0xE8, 0x007DD304, &gObjCreatePetEx);
SetCompleteHook(0xE8, 0x00833B08, &gObjCreatePetEx);

SetCompleteHook(0xE8, 0x0048F918, &SetPetPreviewScale);
SetCompleteHook(0xE8, 0x0048F94B, &SetPetPreviewScale);
SetCompleteHook(0xE8, 0x0048F97E, &SetPetPreviewScale);
SetCompleteHook(0xE8, 0x0048F9B1, &SetPetPreviewScale);
SetCompleteHook(0xE8, 0x0048F9F3, &SetPetPreviewScale);
SetCompleteHook(0xE8, 0x0048FA35, &SetPetPreviewScale);
SetCompleteHook(0xE8, 0x0048FA74, &SetPetPreviewScale);
SetCompleteHook(0xE8, 0x0048FAA4, &SetPetPreviewScale);
SetCompleteHook(0xE8, 0x00501777, &SetPetPreviewScale);
SetCompleteHook(0xE8, 0x00580178, &SetPetPreviewScale);
SetCompleteHook(0xE8, 0x0058035A, &SetPetPreviewScale);
SetCompleteHook(0xE8, 0x005803C9, &SetPetPreviewScale);
SetCompleteHook(0xE8, 0x0058046F, &SetPetPreviewScale);
SetCompleteHook(0xE8, 0x005804C5, &SetPetPreviewScale);
SetCompleteHook(0xE8, 0x0058051B, &SetPetPreviewScale);
SetCompleteHook(0xE8, 0x00580567, &SetPetPreviewScale);

SetCompleteHook(0xE8, 0x0048E504, &SetPetPreviewScale2);
SetCompleteHook(0xE8, 0x00503986, &SetPetPreviewScale2);

//SetCompleteHook(0xE8, 0x005802AD, &SetPetThis, ASM::CALL);
//SetCompleteHook(0xE8, 0x0064193E, &SetPetThis, ASM::CALL);
//SetCompleteHook(0xE8, 0x0064196C, &SetPetThis, ASM::CALL);
//SetCompleteHook(0xE8, 0x00836158, &SetPetThis, ASM::CALL);
//SetCompleteHook(0xE8, 0x00836189, &SetPetThis, ASM::CALL);
//SetCompleteHook(0xE8, 0x008361BA, &SetPetThis, ASM::CALL);
//SetCompleteHook(0xE8, 0x008361EC, &SetPetThis, ASM::CALL);
//SetCompleteHook(0xE8, 0x0083621A, &SetPetThis, ASM::CALL);
//SetCompleteHook(0xE8, 0x00836248, &SetPetThis, ASM::CALL);
//SetCompleteHook(0xE8, 0x00836248, &SetPetThis, ASM::CALL);
//SetCompleteHook(0xE8, 0x00836248, &SetPetThis, ASM::CALL);
//SetCompleteHook(0xE8, 0x00836248, &SetPetThis, ASM::CALL);
//SetCompleteHook(0xE8, 0x00836248, &SetPetThis, ASM::CALL);

//Fix para mostrar pet a otras personas
SetCompleteHook(0xE8, 0x00664267, &RefreshViewPortItem, ASM::CALL);

//dismunuir tamaño del item dropeado
SetOp((LPVOID)0x005F820C, DrawObjectDropOnViewport, ASM::CALL);
SetOp((LPVOID)0x005F847D, DrawObjectDropOnViewport, ASM::CALL);

//SetCompleteHook(0xE9,0x0050186C,&SetMontMoviment);

SetCompleteHook(0xE9,0x00551920,&SetMontPlayer1);
SetCompleteHook(0xE9,0x0054EAD2,&SetMontPlayer2); //Personaje monte al pet
SetCompleteHook(0xE9,0x0054F6B8,&SetMontPlayer3);
SetCompleteHook(0xE9,0x0054F8F4,&SetMontPlayer4);
SetCompleteHook(0xE9,0x0054FC87,&SetMontPlayer5);
SetCompleteHook(0xE9,0x00550710,&SetMontPlayer6);
SetCompleteHook(0xE9,0x00550771,&SetMontPlayer7);
SetCompleteHook(0xE9,0x005507D7,&SetMontPlayer8);
SetCompleteHook(0xE9,0x0055083D,&SetMontPlayer9);
SetCompleteHook(0xE9,0x00552781,&SetMontPlayer10);
SetCompleteHook(0xE9,0x0055299F,&SetMontPlayer11);
SetCompleteHook(0xE9,0x00552B92,&SetMontPlayer12);
SetCompleteHook(0xE9,0x005531E2,&SetMontPlayer13);
SetCompleteHook(0xE9,0x0055D211,&SetMontPlayer14);
SetCompleteHook(0xE9,0x00564BAC,&SetMontPlayer15);

SetCompleteHook(0xE9,0x00503847,&SetMontPlayer16);

//SetCompleteHook(0xE9,0x0054ED4D,&SetMontPlayer17);
//SetCompleteHook(0xE9,0x0054FD50,&SetMontPlayer18);
//SetCompleteHook(0xE9,0x005517AE,&SetMontPlayer19);

SetCompleteHook(0xE9,0x0048E61B,&SetMontPlayer20);

SetCompleteHook(0xE9,0x005517AE,&SetMontDarkHorse1);
SetCompleteHook(0xE9,0x0055D1E3,&SetMontDarkHorse2);
SetCompleteHook(0xE9,0x00564C26,&SetMontDarkHorse3);
SetCompleteHook(0xE9,0x005964E0,&SetMontDarkHorse4);
SetCompleteHook(0xE9,0x005A3821,&SetMontDarkHorse5);

SetCompleteHook(0xE9,0x00501860,&SetMontMoviment2);

SetCompleteHook(0xE9,0x00502D1D,&SetMovimentDinoFly1);
SetCompleteHook(0xE9,0x00502E4C,&SetMovimentDinoFly2);
SetCompleteHook(0xE9,0x005030D3,&SetMovimentDinoFly3);
SetCompleteHook(0xE9,0x0050313F,&SetMovimentDinoFly4);

SetCompleteHook(0xE8,0x0048E17D,&CCustomPet::PetsMovement);
SetCompleteHook(0xE8,0x00503756,&CCustomPet::PetsMovement);

yo como lo dije desde el inicio y lo seguiré diciendo de todos los coder c++ disque coders los unicos que me dieron una mano fuiste tu y después de mis inicios fui conociendo y entablando conversación otros más..., y como ya comenté en algun momento solia usar la source pet que posteaste en los files louis pero al ver muchas cosas que me generaban problemas con capas y otras cosas adicionales que no diré ya que cada uno se de cuenta, decidí implementar mi propio código para armar los pet, cabe mensionar que lo que se cambia es la estructura del algoritmo y la utilidad de las variables ya que alfinal de todo son las mismas offset que se utilizan, nada mejor que armar algo tuyo....   respecto a la validación de pets es algo mejor si consultas que lo que esta validando es un pet


Code: [Select]
bool RefreshViewPet(int a1)
{

bool t;
// ----

if (a1)
Result = *(WORD*)a1== 0x1A00    //Angel
|| *(WORD*)a1== 0x1A01        //Satan
|| *(WORD*)a1== 0x1A02        //Unicorn
|| *(WORD*)a1== 0x1A03        //Dinorant
|| *(WORD*)a1== 0x1A04        //Dark Horse
|| *(WORD*)a1== 0x1A05        //Dark Raven
|| *(WORD*)a1== 0x1A25        //Fenrir     //
|| *(WORD*)a1== ITEM(13, 64)
|| *(WORD*)a1== ITEM(13, 65)
|| *(WORD*)a1== ITEM(13, 67)
|| *(WORD*)a1== ITEM(13, 80)
|| *(WORD*)a1== ITEM(13, 106)
|| *(WORD*)a1== ITEM(13, 123)
|| gCustomPet.isPet(*(WORD*)a1)
|| gCloak.isCloak(*(WORD*)a1)
|| *(WORD*)ItemId == ITEM(13,30)
|| *(WORD*)ItemId == ITEM(12,130)
|| *(WORD*)ItemId == ITEM(12,135);
else
t= false;
return t;
}

Gracias por tu aporte @takumi12 pero para poder manejar ese refesh que colocaste acá ahí que cambiar algunas partes del codigo porque si no directamente ni funciona, no deja ni copilar..
.


Offline Llalex #15 Posteado: May 03, 2020, 01:22:35 PM | Modificado: May 03, 2020, 01:29:28 PM by Llalex

  • 0 puntos por ventas
  • *
  • Rank: Puto amo
  • Posts: 337
  • Gracias recibida: 397
  • ve
No tube problema con la pocion de vida

El sources que estaban aportadas anteriormente tiene este error, en el mismo post un man aporto como repararlo porque no estaba funcional, una barra de vida sustituía a la otra y por lo tanto solo se podía ver una..

Como dije acá en el post, yo solo agregue y modifique algunos códigos para que asi pueda funcionar bien estas sources..


Offline melo920 #16 Posteado: May 03, 2020, 05:59:24 PM

  • C++ Coder
  • 0 puntos por ventas
  • *
  • Rank: Puto amo
  • Posts: 281
  • Gracias recibida: 6487
  • co
esta es mi source vieja que les programe a los vietnamitas, pero en fin..

vamos al grano veo cosas inncesarias en esta source , por ejemplo: por que crear un nuevo: OBJECT_USER si ya existe uno? únicamente se añadio la regla de los bot xD funciona igual agregandolo adentro y no crean una nueva regla, que es consumo innecesario de memoria


// void gObjViewportListProtocolCreate(LPOBJ lpObj) // OK
Code: [Select]
	void gObjViewportListProtocolCreate(LPOBJ lpObj) // OK
{

if(lpObj->Type == OBJECT_USER || lpObj->Type == OBJECT_BOTS) //MC
{
gViewport.GCViewportSimplePetSend(lpObj); //CustomPets
gViewport.GCViewportSimplePlayerSend(lpObj);
gViewport.GCViewportSimpleChangeSend(lpObj);
gViewport.GCViewportSimpleGuildSend(lpObj);
gViewport.GCViewportSimpleGensSystemSend(lpObj);
}
gViewport.GCViewportSimpleMonsterSend(lpObj);
gViewport.GCViewportSimpleSummonSend(lpObj);
}

por que hacer esto

Code: [Select]
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, 147) //WTF
|| *(WORD*)ItemId == ITEM(13, 148)
|| *(WORD*)ItemId == ITEM(13, 149)
|| *(WORD*)ItemId == ITEM(13, 150)
|| *(WORD*)ItemId == ITEM(13, 151)
|| *(WORD*)ItemId == ITEM(13, 152)
|| *(WORD*)ItemId == ITEM(13, 153)
|| *(WORD*)ItemId == ITEM(13, 154)
|| *(WORD*)ItemId == ITEM(13, 155)
|| *(WORD*)ItemId == ITEM(13, 156)
|| *(WORD*)ItemId == ITEM(13, 157)
|| *(WORD*)ItemId == ITEM(13, 158)
|| *(WORD*)ItemId == ITEM(13, 159)
|| *(WORD*)ItemId == ITEM(13, 160)
|| *(WORD*)ItemId == ITEM(13, 161)
|| *(WORD*)ItemId == ITEM(13, 162)
|| *(WORD*)ItemId == ITEM(13, 163)
|| *(WORD*)ItemId == ITEM(13, 164)
|| *(WORD*)ItemId == ITEM(13, 165)
|| *(WORD*)ItemId == ITEM(13, 166)
|| *(WORD*)ItemId == ITEM(13, 167)
|| *(WORD*)ItemId == ITEM(13, 168)
|| *(WORD*)ItemId == ITEM(13, 169)
|| *(WORD*)ItemId == ITEM(13, 170)
|| *(WORD*)ItemId == ITEM(13, 171)
|| *(WORD*)ItemId == ITEM(13, 172)
|| *(WORD*)ItemId == ITEM(13, 173)
|| *(WORD*)ItemId == ITEM(13, 174)
|| *(WORD*)ItemId == ITEM(13, 175)
|| *(WORD*)ItemId == ITEM(13, 176)
|| *(WORD*)ItemId == ITEM(13, 177)
|| *(WORD*)ItemId == ITEM(13, 178)
|| *(WORD*)ItemId == ITEM(13, 179)
|| *(WORD*)ItemId == ITEM(13, 180)
|| *(WORD*)ItemId == ITEM(13, 181)
|| *(WORD*)ItemId == ITEM(13, 182)
|| *(WORD*)ItemId == ITEM(13, 183)
|| *(WORD*)ItemId == ITEM(13, 184)
|| *(WORD*)ItemId == ITEM(13, 185)
|| *(WORD*)ItemId == ITEM(13, 186)
|| *(WORD*)ItemId == ITEM(13, 187)
|| *(WORD*)ItemId == ITEM(13, 188)
|| *(WORD*)ItemId == ITEM(13, 189)
|| *(WORD*)ItemId == ITEM(13, 190)
|| *(WORD*)ItemId == ITEM(13, 191)
|| *(WORD*)ItemId == ITEM(13, 192)
|| *(WORD*)ItemId == ITEM(13, 193)
|| *(WORD*)ItemId == ITEM(13, 194)
|| *(WORD*)ItemId == ITEM(13, 195)
|| *(WORD*)ItemId == ITEM(13, 196)
|| *(WORD*)ItemId == ITEM(13, 197)
|| *(WORD*)ItemId == ITEM(13, 198)
|| *(WORD*)ItemId == ITEM(13, 199)
|| *(WORD*)ItemId == ITEM(13, 200)
|| *(WORD*)ItemId == ITEM(13, 201)
|| *(WORD*)ItemId == ITEM(13, 202)
|| *(WORD*)ItemId == ITEM(13, 203)
|| *(WORD*)ItemId == ITEM(13, 204)
|| *(WORD*)ItemId == ITEM(13, 205)
|| *(WORD*)ItemId == ITEM(13, 206)
|| *(WORD*)ItemId == ITEM(13, 207)
|| *(WORD*)ItemId == ITEM(13, 208)
|| *(WORD*)ItemId == ITEM(13, 209)
|| *(WORD*)ItemId == ITEM(13, 210)
|| *(WORD*)ItemId == ITEM(13, 211)
|| *(WORD*)ItemId == ITEM(13, 212)
|| *(WORD*)ItemId == ITEM(13, 213)
|| *(WORD*)ItemId == ITEM(13, 214)
|| *(WORD*)ItemId == ITEM(13, 215)
|| *(WORD*)ItemId == ITEM(13, 216)
|| *(WORD*)ItemId == ITEM(13, 217)
|| *(WORD*)ItemId == ITEM(13, 218)
|| *(WORD*)ItemId == ITEM(13, 219)
|| *(WORD*)ItemId == ITEM(13, 220)
|| *(WORD*)ItemId == ITEM(13, 221)
|| *(WORD*)ItemId == ITEM(13, 222)
|| *(WORD*)ItemId == ITEM(13, 223)
|| *(WORD*)ItemId == ITEM(13, 224)
|| *(WORD*)ItemId == ITEM(13, 225)
|| *(WORD*)ItemId == ITEM(13, 226)
|| *(WORD*)ItemId == ITEM(13, 227)
|| *(WORD*)ItemId == ITEM(13, 228)
|| *(WORD*)ItemId == ITEM(13, 229)
|| *(WORD*)ItemId == ITEM(13, 230)
|| *(WORD*)ItemId == ITEM(13, 231)
|| *(WORD*)ItemId == ITEM(13, 232)
|| *(WORD*)ItemId == ITEM(13, 233)
|| *(WORD*)ItemId == ITEM(13, 234)
|| *(WORD*)ItemId == ITEM(13, 235)
|| *(WORD*)ItemId == ITEM(13, 236)
|| *(WORD*)ItemId == ITEM(13, 237)
|| *(WORD*)ItemId == ITEM(13, 238)
|| *(WORD*)ItemId == ITEM(13, 239)
|| *(WORD*)ItemId == ITEM(13, 240)
|| *(WORD*)ItemId == ITEM(13, 241)
|| *(WORD*)ItemId == ITEM(13, 242)
|| *(WORD*)ItemId == ITEM(13, 243)
|| *(WORD*)ItemId == ITEM(13, 244)
|| *(WORD*)ItemId == ITEM(13, 245)
|| *(WORD*)ItemId == ITEM(13, 246)
|| *(WORD*)ItemId == ITEM(13, 247)
|| *(WORD*)ItemId == ITEM(13, 248)
|| *(WORD*)ItemId == ITEM(13, 249)
|| *(WORD*)ItemId == ITEM(13, 250)
|| *(WORD*)ItemId == ITEM(13, 251)
|| *(WORD*)ItemId == ITEM(13, 252)
|| *(WORD*)ItemId == ITEM(13, 253)
|| *(WORD*)ItemId == ITEM(13, 254)
|| *(WORD*)ItemId == ITEM(13, 255)
|| *(WORD*)ItemId == ITEM(13, 256)
|| *(WORD*)ItemId == ITEM(13, 257)
|| *(WORD*)ItemId == ITEM(13, 258)
|| *(WORD*)ItemId == ITEM(13, 259)
|| *(WORD*)ItemId == ITEM(13, 260)
|| *(WORD*)ItemId == ITEM(13, 261)
|| *(WORD*)ItemId == ITEM(13, 262)
|| *(WORD*)ItemId == ITEM(13, 263)
|| *(WORD*)ItemId == ITEM(13, 264)
|| *(WORD*)ItemId == ITEM(13, 265)
|| *(WORD*)ItemId == ITEM(13, 266)
|| *(WORD*)ItemId == ITEM(13, 267)
|| *(WORD*)ItemId == ITEM(13, 268)
|| *(WORD*)ItemId == ITEM(13, 269)
|| *(WORD*)ItemId == ITEM(13, 270)
|| *(WORD*)ItemId == ITEM(13, 271)
|| *(WORD*)ItemId == ITEM(13, 272)
|| *(WORD*)ItemId == ITEM(13, 273)
|| *(WORD*)ItemId == ITEM(13, 274)
|| *(WORD*)ItemId == ITEM(13, 275)
|| *(WORD*)ItemId == ITEM(13, 276)
|| *(WORD*)ItemId == ITEM(13, 277)
|| *(WORD*)ItemId == ITEM(13, 278)
|| *(WORD*)ItemId == ITEM(13, 279)
|| *(WORD*)ItemId == ITEM(13, 280)
|| *(WORD*)ItemId == ITEM(13, 281)
|| *(WORD*)ItemId == ITEM(13, 282)
|| *(WORD*)ItemId == ITEM(13, 283)
|| *(WORD*)ItemId == ITEM(13, 284)
|| *(WORD*)ItemId == ITEM(13, 285)
|| *(WORD*)ItemId == ITEM(13, 286)
|| *(WORD*)ItemId == ITEM(13, 287)
|| *(WORD*)ItemId == ITEM(13, 288)
|| *(WORD*)ItemId == ITEM(13, 289)
|| *(WORD*)ItemId == ITEM(13, 290)
|| *(WORD*)ItemId == ITEM(13, 291)
|| *(WORD*)ItemId == ITEM(13, 292)
|| *(WORD*)ItemId == ITEM(13, 293)
|| *(WORD*)ItemId == ITEM(13, 294)
|| *(WORD*)ItemId == ITEM(13, 295)
|| *(WORD*)ItemId == ITEM(13, 296)
|| *(WORD*)ItemId == ITEM(13, 297)
|| *(WORD*)ItemId == ITEM(13, 298)
|| *(WORD*)ItemId == ITEM(13, 299)
|| *(WORD*)ItemId == ITEM(13, 300)
|| *(WORD*)ItemId == ITEM(13, 301)
|| *(WORD*)ItemId == ITEM(13, 302)
|| *(WORD*)ItemId == ITEM(13, 303)
|| *(WORD*)ItemId == ITEM(13, 304)
|| *(WORD*)ItemId == ITEM(13, 305)
|| *(WORD*)ItemId == ITEM(13, 306)
|| *(WORD*)ItemId == ITEM(13, 307)
|| *(WORD*)ItemId == ITEM(13, 308)
|| *(WORD*)ItemId == ITEM(13, 309)
|| *(WORD*)ItemId == ITEM(13, 310)
|| *(WORD*)ItemId == ITEM(13, 311)
|| *(WORD*)ItemId == ITEM(13, 312)
|| *(WORD*)ItemId == ITEM(13, 313)
|| *(WORD*)ItemId == ITEM(13, 314)
|| *(WORD*)ItemId == ITEM(13, 315)
|| *(WORD*)ItemId == ITEM(13, 316)
|| *(WORD*)ItemId == ITEM(13, 317)
|| *(WORD*)ItemId == ITEM(13, 318)
|| *(WORD*)ItemId == ITEM(13, 319)
|| *(WORD*)ItemId == ITEM(13, 320)
|| *(WORD*)ItemId == ITEM(13, 321)
|| *(WORD*)ItemId == ITEM(13, 322)
|| *(WORD*)ItemId == ITEM(13, 323)
|| *(WORD*)ItemId == ITEM(13, 324)
|| *(WORD*)ItemId == ITEM(13, 325)
|| *(WORD*)ItemId == ITEM(13, 326)
|| *(WORD*)ItemId == ITEM(13, 327)
|| *(WORD*)ItemId == ITEM(13, 328)
|| *(WORD*)ItemId == ITEM(13, 329)
|| *(WORD*)ItemId == ITEM(13, 330)
|| *(WORD*)ItemId == ITEM(13, 331)
|| *(WORD*)ItemId == ITEM(13, 332)
|| *(WORD*)ItemId == ITEM(13, 333)
|| *(WORD*)ItemId == ITEM(13, 334)
|| *(WORD*)ItemId == ITEM(13, 335)
|| *(WORD*)ItemId == ITEM(13, 336)
|| *(WORD*)ItemId == ITEM(13, 337)
|| *(WORD*)ItemId == ITEM(13, 338)
|| *(WORD*)ItemId == ITEM(13, 339)
|| *(WORD*)ItemId == ITEM(13, 340)
|| *(WORD*)ItemId == ITEM(13, 341)
|| *(WORD*)ItemId == ITEM(13, 342)
|| *(WORD*)ItemId == ITEM(13, 343)
|| *(WORD*)ItemId == ITEM(13, 344)
|| *(WORD*)ItemId == ITEM(13, 345)
|| *(WORD*)ItemId == ITEM(13, 346)
|| *(WORD*)ItemId == ITEM(13, 347)
|| *(WORD*)ItemId == ITEM(13, 348)
|| *(WORD*)ItemId == ITEM(13, 349)
|| *(WORD*)ItemId == ITEM(13, 350)
|| *(WORD*)ItemId == ITEM(13, 351)
|| *(WORD*)ItemId == ITEM(13, 352)
|| *(WORD*)ItemId == ITEM(13, 353)
|| *(WORD*)ItemId == ITEM(13, 354)
|| *(WORD*)ItemId == ITEM(13, 355)
|| *(WORD*)ItemId == ITEM(13, 356)
|| *(WORD*)ItemId == ITEM(13, 357)
|| *(WORD*)ItemId == ITEM(13, 358)
|| *(WORD*)ItemId == ITEM(13, 359)
|| *(WORD*)ItemId == ITEM(13, 360)
|| *(WORD*)ItemId == ITEM(13, 361)
|| *(WORD*)ItemId == ITEM(13, 362)
|| *(WORD*)ItemId == ITEM(13, 363)
|| *(WORD*)ItemId == ITEM(13, 364)
|| *(WORD*)ItemId == ITEM(13, 365)
|| *(WORD*)ItemId == ITEM(13, 366)
|| *(WORD*)ItemId == ITEM(13, 367)
|| *(WORD*)ItemId == ITEM(13, 368)
|| *(WORD*)ItemId == ITEM(13, 369)
|| *(WORD*)ItemId == ITEM(13, 370)
|| *(WORD*)ItemId == ITEM(13, 371)
|| *(WORD*)ItemId == ITEM(13, 372)
|| *(WORD*)ItemId == ITEM(13, 373)
|| *(WORD*)ItemId == ITEM(13, 374)
|| *(WORD*)ItemId == ITEM(13, 375)
|| *(WORD*)ItemId == ITEM(13, 376)
|| *(WORD*)ItemId == ITEM(13, 377)
|| *(WORD*)ItemId == ITEM(13, 378)
|| *(WORD*)ItemId == ITEM(13, 379)
|| *(WORD*)ItemId == ITEM(13, 380)
|| *(WORD*)ItemId == ITEM(13, 381)
|| *(WORD*)ItemId == ITEM(13, 382)
|| *(WORD*)ItemId == ITEM(13, 383)
|| *(WORD*)ItemId == ITEM(13, 384)
|| *(WORD*)ItemId == ITEM(13, 385)
|| *(WORD*)ItemId == ITEM(13, 386)
|| *(WORD*)ItemId == ITEM(13, 387)
|| *(WORD*)ItemId == ITEM(13, 388)
|| *(WORD*)ItemId == ITEM(13, 389)
|| *(WORD*)ItemId == ITEM(13, 390)
|| *(WORD*)ItemId == ITEM(13, 391)
|| *(WORD*)ItemId == ITEM(13, 392)
|| *(WORD*)ItemId == ITEM(13, 393)
|| *(WORD*)ItemId == ITEM(13, 394)
|| *(WORD*)ItemId == ITEM(13, 395)
|| *(WORD*)ItemId == ITEM(13, 396)
|| *(WORD*)ItemId == ITEM(13, 397)
|| *(WORD*)ItemId == ITEM(13, 398)
|| *(WORD*)ItemId == ITEM(13, 399)
|| *(WORD*)ItemId == ITEM(13, 400)
|| *(WORD*)ItemId == ITEM(13, 401)
|| *(WORD*)ItemId == ITEM(13, 402)
|| *(WORD*)ItemId == ITEM(13, 403)
|| *(WORD*)ItemId == ITEM(13, 404)
|| *(WORD*)ItemId == ITEM(13, 405)
|| *(WORD*)ItemId == ITEM(13, 406)
|| *(WORD*)ItemId == ITEM(13, 407)
|| *(WORD*)ItemId == ITEM(13, 408)
|| *(WORD*)ItemId == ITEM(13, 409)
|| *(WORD*)ItemId == ITEM(13, 410)
|| *(WORD*)ItemId == ITEM(12, 189)
|| *(WORD*)ItemId == ITEM(12, 194)
|| *(WORD*)ItemId == ITEM(12, 220)
|| *(WORD*)ItemId == ITEM(12, 221);
else
Result = 0;
return Result;
}


si pueden hacer esto:

Code: [Select]
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, 147)
&& ItemId <= ITEM(13, 410);
else
        Result = 0;
    return Result;
}

algunos comentan que las pet no suben mas de cierta cantida aunque modifiquen los valores de 410 en la source
Code: [Select]
void ClearNewPetCharSet() // OK
{
for (int n = 0; n < 400; n++)
{
gNewPetCharSet[n].index = 0xFFFF;
memset(gNewPetCharSet[n].PetCharSet, 0, sizeof(gNewPetCharSet[n].PetCharSet));
}
}

deberia ir asi
#include "CustomPet.h"
Code: [Select]
void ClearNewPetCharSet() // OK
{
for (int n = 0; n < MAX_PET_ITEM; n++)
{
gNewPetCharSet[n].index = 0xFFFF;
memset(gNewPetCharSet[n].PetCharSet, 0, sizeof(gNewPetCharSet[n].PetCharSet));
}
}

esta mal todo el PetProtocol a 400 xD cuando el máximo lo declaran en 512. tambien no aumentaron los limites dejandolo en 410 como maximo xD

> ITEM2(13, 410
 


tambien limpien los codigos aveces uno deja cosas test , solo hacen Copy/Paste y se arrastran con todo lo que uno deja

#define MAX_PET_ITEM 512 // 350  <----
   //SetCompleteHook(0xE8, 0x007DD304, &gObjCreatePetEx); // new tipo
   //SetCompleteHook(0xE8, 0x00833B08, &gObjCreatePetEx); // new tipo


tio @takumi12 ya que me dijiste que andabas con las monturas, te dejare esto por acá aver si te sirve, algunos quizás den crash solo te faltaria de compilar algunas funciones.

si vinieron por cobre, aqui les dejo oro


Code: [Select]
SetCompleteHook(0xE8,0x007DF8BB,&CCustomPet::PetBarHP);

SetCompleteHook(0xE8, 0x007DD304, &gObjCreatePetEx);
SetCompleteHook(0xE8, 0x00833B08, &gObjCreatePetEx);

SetCompleteHook(0xE8, 0x0048F918, &SetPetPreviewScale);
SetCompleteHook(0xE8, 0x0048F94B, &SetPetPreviewScale);
SetCompleteHook(0xE8, 0x0048F97E, &SetPetPreviewScale);
SetCompleteHook(0xE8, 0x0048F9B1, &SetPetPreviewScale);
SetCompleteHook(0xE8, 0x0048F9F3, &SetPetPreviewScale);
SetCompleteHook(0xE8, 0x0048FA35, &SetPetPreviewScale);
SetCompleteHook(0xE8, 0x0048FA74, &SetPetPreviewScale);
SetCompleteHook(0xE8, 0x0048FAA4, &SetPetPreviewScale);
SetCompleteHook(0xE8, 0x00501777, &SetPetPreviewScale);
SetCompleteHook(0xE8, 0x00580178, &SetPetPreviewScale);
SetCompleteHook(0xE8, 0x0058035A, &SetPetPreviewScale);
SetCompleteHook(0xE8, 0x005803C9, &SetPetPreviewScale);
SetCompleteHook(0xE8, 0x0058046F, &SetPetPreviewScale);
SetCompleteHook(0xE8, 0x005804C5, &SetPetPreviewScale);
SetCompleteHook(0xE8, 0x0058051B, &SetPetPreviewScale);
SetCompleteHook(0xE8, 0x00580567, &SetPetPreviewScale);

SetCompleteHook(0xE8, 0x0048E504, &SetPetPreviewScale2);
SetCompleteHook(0xE8, 0x00503986, &SetPetPreviewScale2);

//SetCompleteHook(0xE8, 0x005802AD, &SetPetThis, ASM::CALL);
//SetCompleteHook(0xE8, 0x0064193E, &SetPetThis, ASM::CALL);
//SetCompleteHook(0xE8, 0x0064196C, &SetPetThis, ASM::CALL);
//SetCompleteHook(0xE8, 0x00836158, &SetPetThis, ASM::CALL);
//SetCompleteHook(0xE8, 0x00836189, &SetPetThis, ASM::CALL);
//SetCompleteHook(0xE8, 0x008361BA, &SetPetThis, ASM::CALL);
//SetCompleteHook(0xE8, 0x008361EC, &SetPetThis, ASM::CALL);
//SetCompleteHook(0xE8, 0x0083621A, &SetPetThis, ASM::CALL);
//SetCompleteHook(0xE8, 0x00836248, &SetPetThis, ASM::CALL);
//SetCompleteHook(0xE8, 0x00836248, &SetPetThis, ASM::CALL);
//SetCompleteHook(0xE8, 0x00836248, &SetPetThis, ASM::CALL);
//SetCompleteHook(0xE8, 0x00836248, &SetPetThis, ASM::CALL);
//SetCompleteHook(0xE8, 0x00836248, &SetPetThis, ASM::CALL);

//Fix para mostrar pet a otras personas
SetCompleteHook(0xE8, 0x00664267, &RefreshViewPortItem, ASM::CALL);

//dismunuir tamaño del item dropeado
SetOp((LPVOID)0x005F820C, DrawObjectDropOnViewport, ASM::CALL);
SetOp((LPVOID)0x005F847D, DrawObjectDropOnViewport, ASM::CALL);

//SetCompleteHook(0xE9,0x0050186C,&SetMontMoviment);

SetCompleteHook(0xE9,0x00551920,&SetMontPlayer1);
SetCompleteHook(0xE9,0x0054EAD2,&SetMontPlayer2); //Personaje monte al pet
SetCompleteHook(0xE9,0x0054F6B8,&SetMontPlayer3);
SetCompleteHook(0xE9,0x0054F8F4,&SetMontPlayer4);
SetCompleteHook(0xE9,0x0054FC87,&SetMontPlayer5);
SetCompleteHook(0xE9,0x00550710,&SetMontPlayer6);
SetCompleteHook(0xE9,0x00550771,&SetMontPlayer7);
SetCompleteHook(0xE9,0x005507D7,&SetMontPlayer8);
SetCompleteHook(0xE9,0x0055083D,&SetMontPlayer9);
SetCompleteHook(0xE9,0x00552781,&SetMontPlayer10);
SetCompleteHook(0xE9,0x0055299F,&SetMontPlayer11);
SetCompleteHook(0xE9,0x00552B92,&SetMontPlayer12);
SetCompleteHook(0xE9,0x005531E2,&SetMontPlayer13);
SetCompleteHook(0xE9,0x0055D211,&SetMontPlayer14);
SetCompleteHook(0xE9,0x00564BAC,&SetMontPlayer15);

SetCompleteHook(0xE9,0x00503847,&SetMontPlayer16);

//SetCompleteHook(0xE9,0x0054ED4D,&SetMontPlayer17);
//SetCompleteHook(0xE9,0x0054FD50,&SetMontPlayer18);
//SetCompleteHook(0xE9,0x005517AE,&SetMontPlayer19);

SetCompleteHook(0xE9,0x0048E61B,&SetMontPlayer20);

SetCompleteHook(0xE9,0x005517AE,&SetMontDarkHorse1);
SetCompleteHook(0xE9,0x0055D1E3,&SetMontDarkHorse2);
SetCompleteHook(0xE9,0x00564C26,&SetMontDarkHorse3);
SetCompleteHook(0xE9,0x005964E0,&SetMontDarkHorse4);
SetCompleteHook(0xE9,0x005A3821,&SetMontDarkHorse5);

SetCompleteHook(0xE9,0x00501860,&SetMontMoviment2);

SetCompleteHook(0xE9,0x00502D1D,&SetMovimentDinoFly1);
SetCompleteHook(0xE9,0x00502E4C,&SetMovimentDinoFly2);
SetCompleteHook(0xE9,0x005030D3,&SetMovimentDinoFly3);
SetCompleteHook(0xE9,0x0050313F,&SetMovimentDinoFly4);

SetCompleteHook(0xE8,0x0048E17D,&CCustomPet::PetsMovement);
SetCompleteHook(0xE8,0x00503756,&CCustomPet::PetsMovement);


Gracias por tu aporte @melo920 , como dijiste el código no esta mal, si hay cosas que se pueden mejorar, pero eso queda en cada quien, como dije arriba yo estoy aportando algo totalmente funcional, sin errores (al menos a mi no me dio).

@melo920  Coloque este refresh que compartiste y me bug los pets, me lo quitaba el pet, me lo colocaba de nuevo y se agregaba otro pet, cuando colocaba el pet en el inventario tampoco se quitaba  lol








así es pero el refresh , lo hice a ojo xD falto poner el || *(WORD*) para separar las diferenciales de >Mayor que y <Menor que xD pero , el gCustomPet.isPet que usa takumi o el  CheckCustomPetByItem que uso yo funciona mejor optimizado, que usando rangos de item, solo son formas de trabajar de cada programador hay muchas maneras de hacer este codigo, solo que todos programan diferente a su manera. para los entendidos con los OffSet que deje si saben usarlo podrian usar monturas como horse, dinoran, sus animaciones etc

Gracias:


Offline takumi12 #17 Posteado: May 03, 2020, 07:04:23 PM

  • MAESTRO

  • US. DE HONOR

  • LEYENDA

  • Php Coder
  • +11 puntos por ventas
  • *
  • *
  • Rank: Puto amo
  • Posts: 1.310
  • Gracias recibida: 40061
  • mx
No tube problema con la pocion de vida

El sources que estaban aportadas anteriormente tiene este error, en el mismo post un man aporto como repararlo porque no estaba funcional, una barra de vida sustituía a la otra y por lo tanto solo se podía ver una..

Como dije acá en el post, yo solo agregue y modifique algunos códigos para que asi pueda funcionar bien estas sources..


jajaja yo soy el que aportó esto en un tema de sopote que vi queposteaon...


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

Gracias:


Offline SaintZeus #18 Posteado: May 03, 2020, 10:38:25 PM

  • 0 puntos por ventas
  • *
  • Rank: Puto amo
  • Posts: 482
  • Gracias recibida: 2791
  • ar
Se me soluciono el problema del refresh de los pets


Online Denis Alves #19 Posteado: May 05, 2020, 06:33:37 AM

  • C++ Coder
  • +2 puntos por ventas
  • *
  • Rank: Puto amo
  • Posts: 270
  • Gracias recibida: 6560
  • br
Tengo un problema en el que mi PETS no muestra los valores definidos en la carpeta Data / Custom / CustomPet.txt


alguien más pasó por esto y sabe cómo resolverlo?


Solo usuarios registrados pueden comentar y agradecer, Logueate o Registrate


 

Related Topics

  Subject / Started by Replies Last post
2 Replies
1416 Views
Last post October 02, 2019, 01:42:04 PM
by Terran
1 Replies
1665 Views
Last post November 16, 2019, 02:23:37 PM
by adryan
35 Replies
3721 Views
Last post May 16, 2021, 05:21:10 PM
by Alpine
1 Replies
987 Views
Last post April 19, 2020, 07:15:00 PM
by JavixFer
6 Replies
584 Views
Last post January 28, 2021, 11:27:12 AM
by CreaTuMuOnline