Quote:
GameServer 1.00.90
//Add this in user.h
void GCDamageSend(int aIndex, int TargetIndex, int AttackDamage, int MSBFlag, int MSBDamage, int iShieldDamage);
//Add this in user.cpp
struct PMSG_ATTACKRESULT
{
PBMSG_HEAD h; // C1:DC
BYTE NumberH; // 3
BYTE NumberL; // 4
BYTE DamageH; // 5
BYTE DamageL; // 6
BYTE DamageType; // 7
BYTE btShieldDamageH; // 8
BYTE btShieldDamageL; // 9
int Life; //A
int MaxLife; //E
};
void GCDamageSend(int aIndex, int TargetIndex, int AttackDamage, int MSBFlag, int MSBDamage, int iShieldDamage)
{
PMSG_ATTACKRESULT pResult;
PHeadSetB((LPBYTE)&pResult, 0xDC, sizeof(pResult));
pResult.NumberH = SET_NUMBERH(TargetIndex);
pResult.NumberL = SET_NUMBERL(TargetIndex);
pResult.DamageH = SET_NUMBERH(AttackDamage);
pResult.DamageL = SET_NUMBERL(AttackDamage);
pResult.btShieldDamageH = SET_NUMBERH(iShieldDamage);
pResult.btShieldDamageL = SET_NUMBERL(iShieldDamage);
if ( MSBFlag != FALSE )
{
pResult.NumberH &= 0x7F;
pResult.NumberH |= 0x80;
}
pResult.DamageType = MSBDamage;
OBJECTSTRUCT * gObj = (OBJECTSTRUCT*)OBJECT_POINTER(aIndex);
OBJECTSTRUCT * gTarg = (OBJECTSTRUCT*)OBJECT_POINTER(TargetIndex);
pResult.Life = gTarg->Life;
pResult.MaxLife = gTarg->MaxLife;
if(gTarg->Type == OBJ_USER)
{
DataSend(TargetIndex, (LPBYTE)&pResult, pResult.h.size);
}
if(gObj->Type == OBJ_USER )
{
DataSend(aIndex, (LPBYTE)&pResult, pResult.h.size);
}
}
//Add this in Lite.cpp
HookThis((DWORD)&GCDamageSend,0x00403BA7);
OR
Utilits.HookThis((DWORD)&GCDamageSend,0x00403BA7);
You are readdy with MonsterHP and nothing need to be added for New Monsters you can change text size all you want from monsters need to add the model! Read the info!
So for you just need to build the DLL hook to your client 1.03PEng with Init() and add the Minimaps to your client i am not sure but i think i dont have them they are in the forum somewhere so find them! Add a Settings.ini and add all in there dont have time right now to add this things sorry and thats it :)!Your are Done Enjoy!
Quote:
//========================================================================== //-- Main.exe -> Multi Client :: 0xEB - Ativa / 0x75 - Desativa
//==========================================================================
*(BYTE*)(0x005FAE63) = 0xEB;
//==========================================================================
//-- Main.exe -> Set & Wing NPC::Chaos Card Master
//==========================================================================
*(DWORD*)(0x00504BA8+3) = 13; // -> Set Level
*(WORD*)(0x00504B9F+7) = ITEM2(12, 36); // -> Wings Slot
*(WORD*)(0x00504B63+7) = ITEM2(7, 1); // -> Helm Slot
*(WORD*)(0x00504B6F+7) = ITEM2(8, 1); // -> Armor Slot
*(WORD*)(0x00504B7B+7) = ITEM2(9, 1); // -> Pants Slot
*(WORD*)(0x00504B87+7) = ITEM2(10,1); // -> Gloves Slot
*(WORD*)(0x00504B93+7) = ITEM2(11,1); // -> Boots Slot
//==========================================================================
//-- Main.exe -> Set NPC::Marlon
//==========================================================================
*(WORD*)(0x00503C98+7) = ITEM2(3, 7); // -> First Weapon Slot
*(BYTE*)(0x00503CA4+6) = 8; // -> First Weapon Level
*(WORD*)(0x00503CAE+7) = -1; // -> Second Weapon Slot
*(WORD*)(0x00503C2A+7) = ITEM2(7, 9); // -> Helm Slot
*(BYTE*)(0x00503C36+6) = 13; // -> Helm Level
*(WORD*)(0x00503C40+7) = ITEM2(8, 9); // -> Armor Slot
*(BYTE*)(0x00503C4C+6) = 13; // -> Armor Level
*(WORD*)(0x00503C56+7) = ITEM2(9, 9); // -> Pants Slot
*(BYTE*)(0x00503C62+6) = 13; // -> Pants Level
*(WORD*)(0x00503C6C+7) = ITEM2(10,9); // -> Gloves Slot
*(BYTE*)(0x00503C78+6) = 13; // -> Gloves Level
*(WORD*)(0x00503C82+7) = ITEM2(11,9); // -> Boots Slot
*(BYTE*)(0x00503C8E+6) = 13; // -> Boots Level
//==========================================================================
//-- Main.exe -> Set NPC::Crossbow Guard
//==========================================================================
*(WORD*)(0x00504365+7) = ITEM2(7, 9); // -> Helm Slot
*(WORD*)(0x00504371+7) = ITEM2(8, 9); // -> Armor Slot
*(WORD*)(0x0050437D+7) = ITEM2(9, 9); // -> Pants Slot
*(WORD*)(0x00504389+7) = ITEM2(10,9); // -> Gloves Slot
*(WORD*)(0x00504395+7) = ITEM2(11,9); // -> Boots Slot
*(WORD*)(0x005043A1+7) = ITEM2(4,11); // -> First Weapon Slot
*(WORD*)(0x005043AD+7) = ITEM2(4, 7); // -> Second Weapon Slot
//==========================================================================
//-- Main.exe -> Set NPC::Berdysh Guard
//==========================================================================
*(WORD*)(0x00504470+7) = ITEM2(7, 9); // -> Helm Slot
*(WORD*)(0x0050447C+7) = ITEM2(8, 9); // -> Armor Slot
*(WORD*)(0x00504488+7) = ITEM2(9, 9); // -> Pants Slot
*(WORD*)(0x00504494+7) = ITEM2(10,9); // -> Gloves Slot
*(WORD*)(0x005044A0+7) = ITEM2(11,9); // -> Boots Slot
*(WORD*)(0x005044AC+7) = ITEM2(3, 7); // -> First Weapon Slot
Loop New Sets
char Sets[30];
int i;
char *PlayerDir = "Data\\Custom\\Player\\";
char *PlayerFolder = "Custom\\Player\\";
void InitSets(int ItemID, char* ModelName, char* Folder, char* Form){
_asm
{
PUSH -1
PUSH ModelName
PUSH Form
PUSH ItemID
mov eax,BMDModelLoad
CALL eax
PUSH 1
PUSH 0x2600
PUSH 0x2901
PUSH Folder
PUSH ItemID
mov eax,OpenTexture
CALL eax
}
}
void __declspec(naked) NewSetsLoop()
{
for (i = 5; i < 512; i++)
{
//==========================================================================
//-- Sets Loop -> HelmMale Limit::150 <-> 300
//==========================================================================
if(i > 149 && i < 301)
{
sprintf_s(Sets, "HelmMale%d", i+1);
InitSets(LOAD_ITEM(7, i), Sets, PlayerFolder, PlayerDir);
}
//==========================================================================
//-- Sets Loop -> ArmorMale Limit::150 <-> 300
//==========================================================================
if(i > 149 && i < 301)
{
sprintf_s(Sets, "ArmorMale%d", i+1);
InitSets(LOAD_ITEM(8, i), Sets, PlayerFolder, PlayerDir);
}
//==========================================================================
//-- Sets Loop -> PantsMale Limit::150 <-> 300
//==========================================================================
if(i > 149 && i < 301)
{
sprintf_s(Sets, "PantMale%d", i+1);
InitSets(LOAD_ITEM(9, i), Sets, PlayerFolder, PlayerDir);
}
//==========================================================================
//-- Sets Loop -> GloveMale Limit::150 <-> 300
//==========================================================================
if(i > 149 && i < 301)
{
sprintf_s(Sets, "GloveMale%d", i+1);
InitSets(LOAD_ITEM(10, i), Sets, PlayerFolder, PlayerDir);
}
//==========================================================================
//-- Sets Loop -> BootMale Limit::150 <-> 300
//==========================================================================
if(i > 149 && i < 301)
{
sprintf_s(Sets, "BootMale%d", i+1);
InitSets(LOAD_ITEM(11, i), Sets, PlayerFolder, PlayerDir);
}
}
_asm
{
PUSH 11
PUSH gSet
PUSH gSetData
PUSH gSetID
mov eax,BMDModelLoad
CALL eax
ADD ESP,0x10
mov eax,ReturnSetOffset
JMP eax
}
}
void MainItemLoop()
{
PatchJMP g_SetsPatch;
SetNop(LoadSetModel, 25);
g_SetsPatch.Command = 0xE9;
g_SetsPatch.Pointer = (DWORD)&NewSetsLoop;
memcpy((int*)LoadSetModel, &g_SetsPatch, sizeof(g_SetsPatch));
HookThis((DWORD)&NewSetsLoop, LoadSetModel);
}
#ifdef _103P
#define gItem 0x008CC1D0
#define gData 0x008CC1D8
#define gItemID 0x1F60
#define gSet 0x008C022C
#define gSetData 0x008C0238
#define gSetID 0x1151
#define OpenTexture 0x005D63E0
#define BMDModelLoad 0x005D6A93
#define ReturnOffset 0x005DA18B
#define LoadModel 0x005DA172
#define LoadSetModel 0x005D712B
#define ReturnSetOffset 0x005D7144
#endif
//========================================================================== //-- Main.exe -> Skill Siege All Maps
//==========================================================================
*(BYTE*)(0x0057FF57+1) = 0x2B;
*(BYTE*)(0x0057FF5C+1) = 0x26;
*(BYTE*)(0x0057FF61+1) = 0x21;
*(BYTE*)(0x0057FF66+1) = 0x1C;
*(BYTE*)(0x0057FF6B+1) = 0x17;
*(BYTE*)(0x0059B735+2) = 0x00;
*(BYTE*)(0x0059B73B+2) = 0x00;
*(BYTE*)(0x0059B741+2) = 0x00;
*(BYTE*)(0x0059B747+2) = 0x00;
*(BYTE*)(0x0059B74D+2) = 0x00;
*(BYTE*)(0x0059B753+2) = 0x00;
*(BYTE*)(0x0057ABC6+1) = 0x33;
*(BYTE*)(0x0057ABCB+1) = 0x2E;
*(BYTE*)(0x0057ABD0+1) = 0x29;
*(BYTE*)(0x0057ABD5+1) = 0x24;
*(BYTE*)(0x0057ABDA+1) = 0x1F;
*(BYTE*)(0x0057AC28+1) = 0x33;
*(BYTE*)(0x0057AC2D+1) = 0x2E;
*(BYTE*)(0x0057AC32+1) = 0x29;
*(BYTE*)(0x0057AC37+1) = 0x24;
*(BYTE*)(0x0057AC3C+1) = 0x1F;
*(BYTE*)(0x00493DC8+3) = 0x01;
*(BYTE*)(0x0057ABDF) = 0xEB;
*(BYTE*)(0x0057FF70) = 0xEB;
*(BYTE*)(0x0057AC41) = 0xEB;
//==========================================================================
//-- Main.exe -> Decrypt Log Fix
//==========================================================================
BYTE DecryptLog[5] = { 0x90, 0x90, 0x90, 0x90, 0x90 };
memcpy((int*) 0x006BE86D, DecryptLog, sizeof(DecryptLog));
memcpy((int*) 0x006BEA80, DecryptLog, sizeof(DecryptLog));
More here Offsets Chat Separated.
const int GetDisplayMsgType = 0x6F95B0;
const int SetDisplayMsgType = 0x6F9565;
const int ShowChatMsgs = 0x6F6B54;
const int ShowChatMsgsCall_Hook = 0x6F8EF7;
const int NewCall = 0x861FD5;
const int FixSysMsg1_Hook = 0x6F767C;
const int FixSysMsg1_FALSE = FixSysMsg1_Hook+5;
const int FixSysMsg1_TRUE = 0x6F7735;
const int FixSysMsg2_Hook = 0x6F7983;
const int FixSysMsg2_FALSE = FixSysMsg2_Hook+5;
const int FixSysMsg2_TRUE = 0x6F7A86;
const int FixSysMsg3_Hook = 0x6F7CE5;
const int FixSysMsg3_FALSE = FixSysMsg3_Hook+5;
const int FixSysMsg3_TRUE = 0x6F7DAA;
Data Info. For Server
#define OffSet_gTitle 0x008DADA0
#define OffSet_gIPAddress 0x008C71E6
#define OffSet_gVersion 0x008DBFBC
#define OffSet_gSerial 0x008DBFC4
#define OffSet_gScreen 0x008DB9EC
Fixes by afonsolage