-
MakePreviewCharSet Of Client (Source)
Hello all, today i release my old method of charset (and more) control, with it possible to add new wings, change old, fix some protocol bugs (Pet Unicorn at GMO) and more)
My Preview struct not complete at 100%, it only emulation of original with "gaps", but it work)
MakePreviewCharSet.h
Code:
#pragma once
//---------------------------------------------------------------------------
namespace ASM
{
enum T
{
JMP = 0xE9,
JE = 0x74,
JNE = 0x75,
JGE = 0x7D,
NOP = 0x90,
CALL = 0xE8,
};
};
//---------------------------------------------------------------------------
enum eItemOption
{
Damage = 80, //-> Additional Damage +<N>
WizardryDamage = 81,
CurseSpell = 82,
Defense = 84, //-> Additional Defense +<N>
Luck = 85, //-> Default: 0
HPRecovery = 86,
IncreaseDamage = 95, //-> Increase Damage +<N>%
IncreaseSpeed = 98, //-> Increase Attacking(Wizardry)speed +<N>
IgnorOpDefense = 103,
ReturnAttack = 106, //-> Return's the enemy's attack power in <N>%
CompleteLife = 107, //-> Complete recovery of life in <N>% rate
CompleteMana = 108, //-> Complete recovery of Mana in <N>% rate
};
//---------------------------------------------------------------------------
enum ObjClass // -> Complete -> Season 5.2 JPN
{
DarkWizard = 0,
SoulMaster = 8,
GrandMaster = 24,
// ----
DarkKnight = 1,
BladeKnight = 9,
BladeMaster = 25,
// ----
Elf = 2,
MuseElf = 10,
HightElf = 26,
// ----
MagicGladiator = 3,
DuelMaster = 19,
// ----
DarkLord = 4,
LordEmperor = 20,
// ----
Summoner = 5,
BloodySummoner = 13,
DimensionMaster = 29,
};
//---------------------------------------------------------------------------
enum eEffectState
{
AtDarkHorse = 1,
AtFenrir = 4,
AtGameMaster = 5,
};
//---------------------------------------------------------------------------
enum ObjState // -> Complete
{
SelectServer = 2,
SwitchCharacter = 4,
GameProcess = 5,
};
//---------------------------------------------------------------------------
enum eMauntType
{
#if CLIENT_VERSION == 0
DarkHorse = 226,
#else
DarkHorse = 225,
#endif
Uniria = 233,
Dinorant = 323,
BlackFenrir = 384,
RedFenrir = 385,
BlueFenrir = 386,
GoldenFenrir = 387,
};
//---------------------------------------------------------------------------
#define pVisible(x) *(BYTE*)(x + 15)
#define pPlayerClass(x) *(BYTE*)(x + 19)
#define pAncientEffect(x) *(BYTE*)(x + 22)
#define pAtEffect(x) *(BYTE*)(x + 23)
#define pHelmSlot(x) *(WORD*)(x + 232)
#define pHelmSetLevel(x) *(BYTE*)(x + 234)
#define pHelmSetExcellent(x) *(BYTE*)(x + 235)
#define pHelmSetAncient(x) *(BYTE*)(x + 236)
#define pArmorSlot(x) *(WORD*)(x + 264)
#define pArmorSetLevel(x) *(BYTE*)(x + 266)
#define pArmorSetExcellent(x) *(BYTE*)(x + 267)
#define pArmorSetAncient(x) *(BYTE*)(x + 268)
#define pPantsSlot(x) *(WORD*)(x + 296)
#define pPantsSetLevel(x) *(BYTE*)(x + 298)
#define pPantsSetExcellent(x) *(BYTE*)(x + 299)
#define pPantsSetAncient(x) *(BYTE*)(x + 300)
#define pGlovesSlot(x) *(WORD*)(x + 328)
#define pGlovesSetLevel(x) *(BYTE*)(x + 330)
#define pGlovesSetExcellent(x) *(BYTE*)(x + 331)
#define pGlovesSetAncient(x) *(BYTE*)(x + 332)
#define pBootsSlot(x) *(WORD*)(x + 360)
#define pBootsSetLevel(x) *(BYTE*)(x + 362)
#define pBootsSetExcellent(x) *(BYTE*)(x + 363)
#define pBootsSetAncient(x) *(BYTE*)(x + 364)
#define pWeaponFirstSlot(x) *(WORD*)(x + 392)
#define pWeaponFirstSetLevel(x) *(BYTE*)(x + 394)
#define pWeaponFirstSetExcellent(x) *(BYTE*)(x + 395)
#define pWeaponFirstSetAncient(x) *(BYTE*)(x + 396)
#define pWeaponSecondSlot(x) *(WORD*)(x + 424)
#define pWeaponSecondSetLevel(x) *(BYTE*)(x + 426)
#define pWeaponSecondSetExcellent(x) *(BYTE*)(x + 427)
#define pWeaponSecondSetAncient(x) *(BYTE*)(x + 428)
#define pWingsSlot(x) *(WORD*)(x + 456)
#define pSetUnknown1(x) *(BYTE*)(x + 458)
#define pSetUnknown2(x) *(BYTE*)(x + 459)
#define pSetUnknown3(x) *(BYTE*)(x + 460)
#define pPetSlot(x) *(WORD*)(x + 488)
#define pSetUnknown4(x) *(BYTE*)(x + 490)
#define pFenrirCharSet(x) *(BYTE*)(x + 491)
#define pExpectPet(x) *(BYTE*)(x + 492)
#define pObjAction(x) *(BYTE*)(x + 718)
#define pObjScale(x) *(DWORD*)(x + 796)
#define pObjSelectZone(x) *(float*)(x + 924)
#define pGetPosition(x) *(WORD*)(x + 952)
//---------------------------------------------------------------------------
struct Preview
{
BYTE Shift1[14];
/*4*/ //BYTE Unknown4; // -> 100%
/*8*/ //DWORD Unknown8; // -> 100%
/*14*/ BYTE IsSafeZone;
/*15*/ BYTE Visible;
/*16*/ BYTE Unknown16;
/*17*/ BYTE IsLiveObject;
/*18*/ BYTE Unknown18;
/*19*/ BYTE Class;
/*20*/ BYTE Unknown20;
/*21*/ BYTE CtrlCode;
/*22*/ BYTE AncientEffect;
/*23*/ BYTE PetStatus;
/*24*/ BYTE Unknown24;
/*25*/ BYTE Unknown25;
/*26*/ BYTE Unknown26;
/*27*/ BYTE Unknown27;
/*28*/ BYTE Unknown28;
/*29*/ BYTE Unknown29;
/*30*/ BYTE Unknown30;
/*31*/ BYTE Unknown31;
/*32*/ BYTE PKLevel;
/*33*/ BYTE Unknown33;
/*34*/ BYTE Unknown34;
/*35*/ BYTE Unknown35;
/*36*/ BYTE Unknown36;
/*37*/ BYTE Unknown37;
/*38*/ WORD Unknown38;
/*40*/ BYTE Unknown40;
/*41*/ BYTE Unknown41;
/*42*/ BYTE Unknown42;
/*43*/ BYTE Unknown43;
/*44*/ BYTE Unknown44;
/*45*/ BYTE MapPosX;
/*46*/ BYTE MapPosY;
BYTE Shift47[9];
/*56*/ char Name[25]; //-> Need check size
/*50*/ //BYTE Unknown50; // -> 100%
/*88*/ //BYTE Unknown88; // -> 100%
/*90*/ //BYTE Unknown90; // -> 100%
/*91*/ //BYTE Unknown91; // -> 100%
/*92*/ //WORD InGuild; // -> 100%
/*94*/ //WORD ObjIndex; // -> 100%
/*96*/ //WORD Unknown96; // -> 100%
/*98*/ //WORD Unknown98; // -> 100%
/*100*/ //WORD Unknown100; // -> 100%
/*106*/ //WORD Unknown106; // -> 100%
/*112*/ //DWORD Unknown112; // -> 100%
/*116*/ //DWORD Unknown116; // -> 100%
/*124*/ //DWORD Unknown124; // -> 100%
/*140*/ //DWORD MapPosX; // -> 100%
/*144*/ //DWORD MapPosY; // -> 100%
/*156*/ //DWORD Unknown156; // -> 100%
/*172*/ //DWORD Unknown172; // -> 100%
/*188*/ //DWORD Unknown188; // -> 100%
/*192*/ //DWORD Unknown192; // -> 100%
/*196*/ //DWORD Unknown196; // -> 100%
BYTE Shift2[150];
/*232*/ WORD HelmSlot;
/*234*/ BYTE HelmLevel;
/*235*/ BYTE HelmExcellent;
/*236*/ BYTE HelmAncient;
BYTE Shift5[27];
/*264*/ WORD ArmorSlot;
/*266*/ BYTE ArmorLevel;
/*267*/ BYTE ArmorExcellent;
/*268*/ BYTE ArmorAncient;
BYTE Shift6[27];
/*296*/ WORD PantsSlot;
/*298*/ BYTE PantsLevel;
/*299*/ BYTE PantsExcellent;
/*300*/ BYTE PantsAncient;
BYTE Shift7[27];
/*328*/ WORD GlovesSlot;
/*330*/ BYTE GlovesLevel;
/*331*/ BYTE GlovesExcellent;
/*332*/ BYTE GlovesAncient;
BYTE Shift8[27];
/*360*/ WORD BootsSlot;
/*362*/ BYTE BootsLevel;
/*363*/ BYTE BootsExcellent;
/*364*/ BYTE BootsAncient;
BYTE Shift9[27];
/*392*/ WORD WeaponFirstSlot;
/*394*/ BYTE WeaponFirstLevel;
/*395*/ BYTE WeaponFirstExcellent;
/*396*/ BYTE WeaponFirstAncient;
/*397*/ BYTE Unknown397;
BYTE Shift10[26];
/*424*/ WORD WeaponSecondSlot;
/*426*/ BYTE WeaponSecondLevel;
/*427*/ BYTE WeaponSecondExcellent;
/*428*/ BYTE WeaponSecondAncient;
/*429*/ BYTE Unknown429;
BYTE Shift11[26];
/*456*/ WORD WingsSlot;
/*458*/ BYTE Unknown458;
/*459*/ BYTE Unknown459;
/*460*/ BYTE Unknown460;
BYTE Shift12[27];
/*488*/ WORD PetSlot;
/*490*/ BYTE Unknown490;
/*491*/ BYTE FenrirCharSet;
/*492*/ BYTE ExpectPet;
/*520*/ //WORD Unknown520; // -> 100%
/*596*/ //DWORD Unknown596; // -> 100%
/*688*/ //DWORD Unknown688; //
BYTE Shift13[207];
/*700*/ DWORD Unknown700; // -> # Need check
/*704*/ BYTE Unknown704;
BYTE Shift14[2];
/*707*/ BYTE Unknown707;
/*708*/ BYTE Unknown708;
/*709*/ BYTE Unknown709;
/*710*/ BYTE Unknown710; // -> 100%
/*711*/ BYTE Unknown711;
/*712*/ BYTE Unknown712;
BYTE Shift16[5];
/*718*/ BYTE Action;
/*719*/ BYTE Unknown719;
/*720*/ BYTE Unknown720; //-> 100%
/*721*/ BYTE Unknown721; //-> 100%
/*722*/ BYTE ObjectType; //-> Object Type (1 = Player, 2 = Monster, 4 = NPC) 100%
BYTE Shift17[25];
/*748*/ DWORD Unknown748;
/*752*/ DWORD Unknown752;
/*756*/ DWORD Unknown756;
/*760*/ DWORD Unknown760;
/*768*/ //DWORD Unknown768; // -> 100%
BYTE Shift18[32];
/*796*/ DWORD ModelScale;
BYTE Shift19[16];
/*800*/ //DWORD Unknown800; // -> 100%
/*816*/ DWORD Unknown816;
/*824*/ //DWORD Unknown824; // -> 100%
BYTE Shift20[103];
/*856*/ //DWORD Unknown856; // -> 100%
/*860*/ //DWORD Unknown860; // -> 100%
/*864*/ //DWORD Unknown864; // -> 100%
/*972*/ //DWORD Unknown972; // -> 100%
/*904*/ //DWORD Unknown904; // -> 100%
/*908*/ //DWORD Unknown908; // -> 100%
/*912*/ //DWORD Unknown912; // -> 100%
/*916*/ //DWORD Unknown916; // -> 100% / Maybe float
/*920*/ //DWORD Unknown920; // -> 100% / Maybe float
/*924*/ float SelectZone; // -> Maybe DWORD
BYTE Shift21[32];
/*952*/ //float Unknown952; // -> 100%
/*956*/ //float Unknown956; // -> 100%
/*960*/ float Unknown960;
/*964*/ //DWORD Unknown964; // -> 100%
/*968*/ //DWORD Unknown968; // -> 100%
/*972*/ //DWORD Unknown972; // -> 100%
/*1120*/ //DWORD Unknown1120; // -> 100%
/*1184*/ //void?
};
//---------------------------------------------------------------------------
#define ITEM_INTER 887 //1095 for 5.4 GMO
#define ITEM(x, y) ((x * 512) + y)
#define ITEM2(x, y) ((x * 512) + y + ITEM_INTER)
#define oObjState 0x00946F9C
#define oMapNumber 0x00934540
#define LODWORD(h) ((DWORD)(__int64(h) & __int64(0xffffffff)))
// ----
#define CS_START 1304
// ----
#define CS_EMPTY_SLOT -1
#define CS_EMPTY_ITEM 511
#define CS_EMPTY_WEAPON 4095 // ITEM(7, 511)
// ----
#define CS_SET_1(x) ( x >> 2)
// ----
#define CS_HELM 9089 // 9297 for 5.4, need check, maybe it value from * on ITEM_INTER
#define CS_ARMOR CS_HELM + 20
#define CS_PANTS CS_ARMOR + 20
#define CS_GLOVES CS_PANTS + 20
#define CS_BOOTS CS_GLOVES + 20
// ----
#define CS_GET_STRUCT(x, y) (CS_START * x + *(int*)y)
#define CS_GET_WEAPON(x, y) ( y | (16 * (x & 0xF0)) )
#define CS_GET_HELM(x, y, z) ( (32 * (z & 0xF)) + 16 * ((x >> 7) & 1) + (y >> 4) )
#define CS_GET_ARMOR(x, y, z) ( (32 * ((z >> 4) & 0xF)) + 16 * ((x >> 6) & 1) + (y & 0xF) )
#define CS_GET_PANTS(x, y, z) ( (32 * (z & 0xF)) + 16 * ((x >> 5) & 1) + (y >> 4) )
#define CS_GET_GLOVES(x, y, z) ( (32 * ((z >> 4) & 0xF)) + 16 * ((x >> 4) & 1) + (y & 0xF) )
#define CS_GET_BOOTS(x, y, z) ( (32 * (z & 0xF)) + 16 * ((x >> 3) & 1) + (y >> 4) )
//---------------------------------------------------------------------------
//bool __cdecl sub_49A450(signed int a1) -> return bool
typedef bool (__cdecl *IsChaosCastle)(int MapNumber);
extern IsChaosCastle gIsChaosCastle;
//---------------------------------------------------------------------------
//char __cdecl sub_51C4EC(BYTE a1) -> return WORD
typedef WORD (__cdecl *ItemCharSetConvert)(BYTE Pointer);
extern ItemCharSetConvert gItemCharSetConvert;
//---------------------------------------------------------------------------
//int __cdecl sub_463890(char a1) -> return BYTE or WORD
typedef BYTE (__cdecl *AmpersandConvert)(BYTE Pointer);
extern AmpersandConvert gAmpersandConvert;
//---------------------------------------------------------------------------
typedef int (__cdecl *ObjMakePreviewCharSet)(int a1, BYTE * CharSet, int a3, int a4);
extern ObjMakePreviewCharSet mObjMakePreviewCharSet;
//---------------------------------------------------------------------------
//int __cdecl sub_49A50A(int a1)
typedef int (__cdecl *Objsub_49A50A)(int Arg1);
extern Objsub_49A50A sub_49A50A;
//---------------------------------------------------------------------------
//int __cdecl sub_514A21(int a1)
typedef int (__cdecl *Objsub_514A21)(int Arg1);
extern Objsub_514A21 sub_514A21;
//---------------------------------------------------------------------------
//int __cdecl sub_4A3A7D(int a1) -> return int
typedef int (__cdecl *CheckPetStatus)(int Arg1);
extern CheckPetStatus gCheckPetStatus;
//---------------------------------------------------------------------------
//int __cdecl sub_4B6740(int a1) -> return int
typedef int (__cdecl *ReturnPetSlot)(int Arg1);
extern ReturnPetSlot gReturnPetSlot;
//---------------------------------------------------------------------------
//int __cdecl sub_4B6B54(int a1, int a2, int a3, int a4) -> return int
typedef int (__cdecl *SetObjMaunt)(int MauntCode, int Arg2, int Arg3, int Arg4, int Arg5);
extern SetObjMaunt gSetObjMaunt;
//---------------------------------------------------------------------------
//char __cdecl sub_4B680C(int a1, int a2, int a3, int a4, int a5) -> return bool
typedef bool (__cdecl *SetObjMaunt2)(int Arg1, int Arg2, int Arg3, int Arg4, int Arg5);
extern SetObjMaunt2 gSetObjMaunt2;
//---------------------------------------------------------------------------
//int __cdecl sub_8831F1() -> return THIS
typedef LPVOID (__cdecl *ObjPetGetThis)(void);
extern ObjPetGetThis gObjPetGetThis;
//---------------------------------------------------------------------------
//void __stdcall sub_88457C(int a1, int a2, char a3)
typedef void (__thiscall *SetObjPetReset)(LPVOID This, int Arg1, int Arg2, int Arg3);
extern SetObjPetReset gSetObjPetReset;
//---------------------------------------------------------------------------
//char __thiscall sub_884245(void *this, int a2, int a3, int a4, int a5, int a6, int a7) -> return bool
typedef void (__thiscall *SetObjPetOnSwitch)(LPVOID This, int Arg1, int Arg2, int Arg3, int Arg4, int Arg5, int Arg6);
extern SetObjPetOnSwitch gSetObjPetOnSwitch;
//---------------------------------------------------------------------------
//int *__cdecl sub_4ADABB(int a1) -> return int const
typedef int * (__cdecl *Objsub_4ADABB)(int Arg1);
extern Objsub_4ADABB sub_4ADABB;
//---------------------------------------------------------------------------
//int __cdecl sub_4ACDA6(int Preview * gPreview) -> return int
typedef int (__cdecl *ObjPreviewDarkRaven)(int Struct);
extern ObjPreviewDarkRaven gObjPreviewDarkRaven;
//---------------------------------------------------------------------------
typedef DWORD (*Objdword_7B65114);
extern Objdword_7B65114 dword_7B65114;
//---------------------------------------------------------------------------
typedef DWORD (*Objdword_7BA6278);
extern Objdword_7BA6278 dword_7BA6278;
//---------------------------------------------------------------------------
typedef DWORD (*Objdword_7B650F8);
extern Objdword_7B650F8 dword_7B650F8;
//---------------------------------------------------------------------------
void cMakePreviewCharSetLoad();
//---------------------------------------------------------------------------
MakePreviewCharSet.cpp
Code:
#include "stdafx.h"
#include "MakePreviewCharSet.h"
//---------------------------------------------------------------------------
ObjMakePreviewCharSet mObjMakePreviewCharSet = (ObjMakePreviewCharSet)0x51564C;
// ----
IsChaosCastle gIsChaosCastle = (IsChaosCastle)0x49A450;
ItemCharSetConvert gItemCharSetConvert = (ItemCharSetConvert)0x51C4EC;
AmpersandConvert gAmpersandConvert = (AmpersandConvert)0x463890;
SetObjMaunt gSetObjMaunt = (SetObjMaunt)0x4B6B54;
SetObjMaunt2 gSetObjMaunt2 = (SetObjMaunt2)0x4B680C;
ObjPetGetThis gObjPetGetThis = (ObjPetGetThis)0x8831F1;
SetObjPetOnSwitch gSetObjPetOnSwitch = (SetObjPetOnSwitch)0x884245;
SetObjPetReset gSetObjPetReset = (SetObjPetReset)0x88457C;
CheckPetStatus gCheckPetStatus = (CheckPetStatus)0x4A3A7D;
ReturnPetSlot gReturnPetSlot = (ReturnPetSlot)0x4B6740;
ObjPreviewDarkRaven gObjPreviewDarkRaven = (ObjPreviewDarkRaven)0x4ACDA6;
// ----
Objsub_49A50A sub_49A50A = (Objsub_49A50A)0x49A50A;
Objsub_514A21 sub_514A21 = (Objsub_514A21)0x514A21;
Objsub_4ADABB sub_4ADABB = (Objsub_4ADABB)0x4ADABB;
//---------------------------------------------------------------------------
Objdword_7B65114 dword_7B65114 = (Objdword_7B65114)0x7B65114;
Objdword_7BA6278 dword_7BA6278 = (Objdword_7BA6278)0x7BA6278;
Objdword_7B650F8 dword_7B650F8 = (Objdword_7B650F8)0x7B650F8;
DWORD gObjGameState = *(DWORD*)oObjState;
//---------------------------------------------------------------------------
//51551C -> 14 Calls
BYTE gLevelSmallConvert(int SmallValue)
{
BYTE ResultValue;
// ----
switch(SmallValue)
{
case 0:
ResultValue = 0;
break;
// --
case 1:
ResultValue = 3;
break;
// --
case 2:
ResultValue = 5;
break;
// --
case 3:
ResultValue = 7;
break;
// --
case 4:
ResultValue = 9;
break;
// --
case 5:
ResultValue = 11;
break;
// --
case 6:
ResultValue = 13;
break;
// --
case 7:
ResultValue = 15;
break;
// --
default:
ResultValue = 0;
break;
}
// ----
return ResultValue;
}
//---------------------------------------------------------------------------
//515596 -> 1 Call
int gMakePreviewSoldierElf(int Struct)
{
Preview * gPreview = &*(Preview*)Struct;
// ----
//gPreview->WeaponFirstSlot = ITEM2(2, 16);
//gPreview->WeaponFirstLevel = 13;
// ----
//gPreview->WeaponSecondSlot = ITEM2(6, 21);
//gPreview->WeaponSecondLevel = 13;
// ----
gPreview->WingsSlot = ITEM2(12, 3);
// ----
gPreview->HelmSlot = ITEM2(7, 24);
gPreview->HelmLevel = 13;
// ----
gPreview->ArmorSlot = ITEM2(8, 24);
gPreview->ArmorLevel = 13;
// ----
gPreview->PantsSlot = ITEM2(9, 24);
gPreview->PantsLevel = 13;
// ----
gPreview->GlovesSlot = ITEM2(10, 24);
gPreview->GlovesLevel = 13;
// ----
gPreview->BootsSlot = ITEM2(11, 24);
gPreview->BootsLevel = 13;
// ----
gPreview->Action = 11;
gPreview->ModelScale = 0x3F800000;
gPreview->SelectZone += 70.0;
// ----
//gPreview->PKLevel = 10;
return gPreview->Unknown700;
}
//---------------------------------------------------------------------------
//51564C -> 7 Calls
int gObjMakePreviewCharSet(int Index, BYTE * CharSet, int UseStruct, int Mode)
{
if( Mode )
{
TDEBUG("Mode == %d");
}
int Result;
int ObjPreview;
// ----
if( UseStruct )
{
ObjPreview = UseStruct;
}
else
{
ObjPreview = CS_GET_STRUCT(Index, dword_7B650F8);
}
// ----
Result = ObjPreview + 700;
// ----
Preview * gPreview = &*(Preview*)ObjPreview;
// ----
if( gPreview->Unknown748 == (ITEM_INTER - 8) )
{
short WeaponFirstType = CS_GET_WEAPON(CharSet[11], CharSet[0]);
// ----
if( WeaponFirstType == CS_EMPTY_WEAPON )
{
gPreview->WeaponFirstSlot = CS_EMPTY_SLOT;
gPreview->WeaponFirstExcellent = NULL;
gPreview->WeaponFirstAncient = NULL;
}
else
{
gPreview->WeaponFirstSlot = WeaponFirstType + ITEM_INTER;
}
// ----
short WeaponSecondType = CS_GET_WEAPON(CharSet[12], CharSet[1]);
// ----
if( WeaponSecondType == CS_EMPTY_WEAPON )
{
gPreview->WeaponSecondSlot = CS_EMPTY_SLOT;
gPreview->WeaponSecondExcellent = NULL;
gPreview->WeaponSecondAncient = NULL;
}
else
{
if( gAmpersandConvert(pPlayerClass(ObjPreview)) != ObjClass::DarkLord || WeaponSecondType != ITEM(5, 5) )
{
gPreview->WeaponSecondSlot = WeaponSecondType + ITEM_INTER;
}
else
{
int CallArg = *(int*)sub_4ADABB(*(int*)dword_7BA6278 + 4413); // # Need check
gObjPreviewDarkRaven(ObjPreview);
// ----
if ( !gIsChaosCastle(gObjUser.MapNumber) )
{
TDEBUG("sub_4AECB0(CallArg)");
//sub_4AECB0(CallArg);
}
}
}
if( (CS_SET_1(CharSet[4]) & 3) == 3 )
{
BYTE SecondWingsType = CharSet[8] & 7;
// ----
if( SecondWingsType )
{
switch( SecondWingsType )
{
case 5: // Cape Of Lord
gPreview->WingsSlot = ITEM2(13, 30);
break;
// --
case 6: // Wings Of Curse
gPreview->WingsSlot = ITEM2(12, 41);
break;
// --
case 7: // Wings Of Despair
gPreview->WingsSlot = ITEM2(12, 42);
break;
// --
default: // Other Wings
gPreview->WingsSlot = ITEM2(12, 2) + SecondWingsType;
break;
}
}
else
{
gPreview->WingsSlot = CS_EMPTY_SLOT;
gPreview->Unknown459 = NULL;
gPreview->Unknown460 = NULL;
}
}
else
{
gPreview->WingsSlot = ITEM2(12, 0) + (CS_SET_1(CharSet[4]) & 3);
}
// ----
BYTE ThirdWingsType = CS_SET_1(CharSet[15]) & 7;
// ----
if( ThirdWingsType > 0 )
{
if( ThirdWingsType == 6 )
{
gPreview->WingsSlot = ITEM2(12, 43);
}
else
{
gPreview->WingsSlot = ITEM2(12, 35) + ThirdWingsType;
}
}
// ----
#if CLIENT_TYPE == 1 //-> Season 5.4 GMO
BYTE MiniWingsType = CharSet[16] >> 5;
// ----
if( MiniWingsType > 0 )
{
switch( MiniWingsType )
{
case 1:
gPreview->WingsSlot = ITEM2(12, 130);
break;
// --
case 2:
gPreview->WingsSlot = ITEM2(12, 131);
break;
// --
case 3:
gPreview->WingsSlot = ITEM2(12, 132);
break;
// --
case 4:
gPreview->WingsSlot = ITEM2(12, 133);
break;
// --
case 5:
gPreview->WingsSlot = ITEM2(12, 134);
break;
}
}
#endif
// ----
#ifdef CLIENT_0 //-> Custom
BYTE CustomWings = CharSet[16] >> 2;
// ----
if( CustomWings > 0 )
{
//TDEBUG("Wings Switch: [%d]", CustomWings);
// ----
switch( CustomWings )
{
case 1:
gPreview->WingsSlot = ITEM2(12, 180);
break;
// --
case 2:
gPreview->WingsSlot = ITEM2(12, 181);
break;
// --
case 3:
gPreview->WingsSlot = ITEM2(12, 182);
break;
// --
case 4:
gPreview->WingsSlot = ITEM2(12, 183);
break;
// --
case 5:
gPreview->WingsSlot = ITEM2(12, 184);
break;
// --
case 6:
gPreview->WingsSlot = ITEM2(12, 185);
break;
}
}
#endif
// ----
if( Mode )
{
*(BYTE *)(Mode + 4) = NULL;
}
else
{
ReturnPetSlot(ObjPreview + 700);
gSetObjPetReset(gObjPetGetThis(), ObjPreview, pPetSlot(ObjPreview), 1);
}
// ----
BYTE NormalPetType = CharSet[4] & 3;
// ----
if( NormalPetType == 3 )
{
if( (CharSet[9] & 1) == 1 )
{
gPreview->PetSlot = ITEM(13, 3);
// ----
if( Mode )
{
gSetObjMaunt2(eMauntType::Dinorant, ObjPreview + 952, ObjPreview + 700, Mode, 0);
}
else
{
gSetObjMaunt(eMauntType::Dinorant, ObjPreview + 952, ObjPreview + 700, 0, 0);
}
}
else
{
gPreview->PetSlot = CS_EMPTY_SLOT;
gPreview->FenrirCharSet = NULL;
gPreview->ExpectPet = 1;
}
}
else
{
BYTE PetCharSet = CharSet[15] & 0xE0;
// ----
if( PetCharSet != 32 && PetCharSet != 64
&& PetCharSet != 128 && PetCharSet != 224
&& PetCharSet != 160 && PetCharSet != 96 )
{
gPreview->PetSlot = ITEM2(13, 0) + NormalPetType;
int MauntCode = NULL;
bool Check = true;
// ----
if( NormalPetType )
{
if( NormalPetType == 2 )
{
MauntCode = eMauntType::Uniria;
}
else
{
if( NormalPetType == 3 )
{
MauntCode = eMauntType::Dinorant;
}
else
{
Check = false;
}
}
}
else
{
MauntCode = ITEM2(13, 0);
}
// ----
if( Check == true )
{
if( Mode )
{
gSetObjMaunt2(MauntCode, ObjPreview + 952, ObjPreview + 700, Mode, 0);
}
else
{
gSetObjMaunt(MauntCode, ObjPreview + 952, ObjPreview + 700, 0, 0);
}
}
}
else
{
short ShopPetType = NULL;
// ----
switch( PetCharSet )
{
case 0x20: // Demon
ShopPetType = 64;
break;
// --
case 0x40: // Spirit Of Guardian
ShopPetType = 65;
break;
// --
case 0x80: // Rudolf
ShopPetType = 67;
break;
// --
case 0xE0: // Panda
ShopPetType = 80;
break;
// --
case 0xA0: // Unicorn
ShopPetType = 106; //-> Not in use on GMO
break;
// --
case 0x60: // Skeleton
ShopPetType = 123;
break;
}
// ----
gPreview->PetSlot = ITEM2(13, 0) + ShopPetType;
// ----
if( *(DWORD*)oObjState == ObjState::SwitchCharacter || ObjPreview == LODWORD(dword_7B65114) )
{
gSetObjPetOnSwitch(gObjPetGetThis(), ITEM(13, 0) + ShopPetType, pPetSlot(ObjPreview), ObjPreview + 952, ObjPreview, 0, 0);
}
}
}
if( (CharSet[11] & 1) == 1 )
{
gPreview->PetSlot = ITEM2(13, 4);
// ----
if( Mode )
{
gSetObjMaunt2(eMauntType::DarkHorse, ObjPreview + 952, ObjPreview + 700, Mode, 0);
}
else
{
gSetObjMaunt(eMauntType::DarkHorse, ObjPreview + 952, ObjPreview + 700, 0, 0);
}
}
if( (CharSet[11] & 4) == 4 )
{
gPreview->PetSlot = ITEM2(13, 37);
gPreview->FenrirCharSet = CharSet[15] & 3;
// ----
if( (CharSet[16] & 1) == 1 )
{
gPreview->FenrirCharSet = 4;
}
// ----
switch(gPreview->FenrirCharSet)
{
case 1: // Black Fenrir
{
if( Mode )
{
gSetObjMaunt2(eMauntType::BlackFenrir, ObjPreview + 952, ObjPreview + 700, Mode, 0);
}
else
{
gSetObjMaunt(eMauntType::BlackFenrir, ObjPreview + 952, ObjPreview + 700, 0, 0);
}
}
break;
// --
case 2: // Blue Fenrir
{
if( Mode )
{
gSetObjMaunt2(eMauntType::BlueFenrir, ObjPreview + 952, ObjPreview + 700, Mode, 0);
}
else
{
gSetObjMaunt(eMauntType::BlueFenrir, ObjPreview + 952, ObjPreview + 700, 0, 0);
}
}
break;
// --
case 4: // Golden Fenrir
{
if( Mode )
{
gSetObjMaunt2(eMauntType::GoldenFenrir, ObjPreview + 952, ObjPreview + 700, Mode, 0);
}
else
{
gSetObjMaunt(eMauntType::GoldenFenrir, ObjPreview + 952, ObjPreview + 700, 0, 0);
}
}
break;
// --
default: // Red Fenrir
{
if( Mode )
{
gSetObjMaunt2(eMauntType::RedFenrir, ObjPreview + 952, ObjPreview + 700, Mode, 0);
}
else
{
gSetObjMaunt(eMauntType::RedFenrir, ObjPreview + 952, ObjPreview + 700, 0, 0);
}
}
break;
}
}
// ----
gCheckPetStatus(ObjPreview);
// ----
if( ((CharSet[11] >> 1) & 1) == 1 )
{
if( gPreview->PetStatus <= NULL || gPreview->PetStatus > 3 )
{
gPreview->PetStatus = eEffectState::AtFenrir;
}
}
else
{
if( gPreview->PetStatus <= NULL || gPreview->PetStatus > 3 )
{
gPreview->PetStatus = NULL;
}
}
// ----
int TempBuff = CharSet[7] + (CharSet[6] << 8) + (CharSet[5] << 16);
gPreview->WeaponFirstLevel = gLevelSmallConvert(CharSet[7] & 7);
gPreview->WeaponSecondLevel = gLevelSmallConvert((TempBuff >> 3) & 7);
gPreview->Unknown458 = NULL;
gPreview->Unknown490 = NULL;
Result = ObjPreview;
// ----
if( !pVisible(ObjPreview) )
{
short HelmType = CS_GET_HELM(CharSet[8], CharSet[2], CharSet[12]);
// ----
if( HelmType == CS_EMPTY_ITEM )
{
gPreview->HelmSlot = (BYTE)gItemCharSetConvert(gPreview->Class) + CS_HELM;
}
else
{
gPreview->HelmSlot = ITEM2(7, 0) + HelmType;
}
// ----
short ArmorType = CS_GET_ARMOR(CharSet[8], CharSet[2], CharSet[13]);
// ----
if( ArmorType == CS_EMPTY_ITEM )
{
gPreview->ArmorSlot = (BYTE)gItemCharSetConvert(gPreview->Class) + CS_ARMOR;
}
else
{
gPreview->ArmorSlot = ITEM2(8, 0) + ArmorType;
}
// ----
short PantsType = CS_GET_PANTS(CharSet[8], CharSet[3], CharSet[13]);
// ----
if( PantsType == CS_EMPTY_ITEM )
{
gPreview->PantsSlot = (BYTE)gItemCharSetConvert(gPreview->Class) + CS_PANTS;
}
else
{
gPreview->PantsSlot = ITEM2(9, 0) + PantsType;
}
// ----
short GlovesType = CS_GET_GLOVES(CharSet[8], CharSet[3], CharSet[14]);
// ----
if( GlovesType == CS_EMPTY_ITEM )
{
gPreview->GlovesSlot = (BYTE)gItemCharSetConvert(gPreview->Class) + CS_GLOVES;
}
else
{
gPreview->GlovesSlot = ITEM2(10, 0) + GlovesType;
}
// ----
short BootsType = CS_GET_BOOTS(CharSet[8], CharSet[4], CharSet[14]);
// ----
if( BootsType == CS_EMPTY_ITEM )
{
gPreview->BootsSlot = (BYTE)gItemCharSetConvert(gPreview->Class) + CS_BOOTS;
}
else
{
gPreview->BootsSlot = ITEM2(11, 0) + BootsType;
}
// ----
gPreview->HelmLevel = gLevelSmallConvert((TempBuff >> 6) & 7);
gPreview->HelmExcellent = (CharSet[9] & 0x80) >> 7;
gPreview->HelmAncient = (CharSet[9] & 0x80) >> 7;
// ----
gPreview->ArmorLevel = gLevelSmallConvert((TempBuff >> 9) & 7);
gPreview->ArmorExcellent = (CharSet[9] & 0x40) >> 6;
gPreview->ArmorAncient = (CharSet[9] & 0x40) >> 6;
// ----
gPreview->PantsLevel = gLevelSmallConvert((TempBuff >> 12) & 7);
gPreview->PantsExcellent = (CharSet[9] & 0x20) >> 5;
gPreview->PantsAncient = (CharSet[9] & 0x20) >> 5;
// ----
gPreview->GlovesLevel = gLevelSmallConvert((TempBuff >> 15) & 7);
gPreview->GlovesExcellent = (CharSet[9] & 0x10) >> 4;
gPreview->GlovesAncient = (CharSet[9] & 0x10) >> 4;
// ----
gPreview->BootsLevel = gLevelSmallConvert((TempBuff >> 18) & 7);
gPreview->BootsExcellent = (CharSet[9] & 8) >> 3;
gPreview->BootsAncient = (CharSet[9] & 8) >> 3;
// ----
gPreview->WeaponFirstExcellent = (CharSet[9] & 4) >> 2;
gPreview->WeaponFirstAncient = (CharSet[10] & 4) >> 2;
// ----
gPreview->WeaponSecondExcellent = (CharSet[9] & 2) >> 1;
gPreview->WeaponSecondAncient = (CharSet[10] & 2) >> 1;
// ----
gPreview->AncientEffect = CharSet[10] & 1;
// ----
sub_49A50A(ObjPreview);
// ----
Result = sub_514A21(ObjPreview);
}
}
// ----
return Result;
}
//---------------------------------------------------------------------------
void cMakePreviewCharSetLoad()
{
SetHook((LPVOID)gObjMakePreviewCharSet, (LPVOID)0x0047797F, ASM::CALL);
SetHook((LPVOID)gObjMakePreviewCharSet, (LPVOID)0x006317A3, ASM::CALL);
SetHook((LPVOID)gObjMakePreviewCharSet, (LPVOID)0x00637C15, ASM::CALL);
SetHook((LPVOID)gObjMakePreviewCharSet, (LPVOID)0x00638702, ASM::CALL);
SetHook((LPVOID)gObjMakePreviewCharSet, (LPVOID)0x00638CF3, ASM::CALL);
SetHook((LPVOID)gObjMakePreviewCharSet, (LPVOID)0x0065EDCC, ASM::CALL);
SetHook((LPVOID)gObjMakePreviewCharSet, (LPVOID)0x00663A57, ASM::CALL);
// ----
SetHook((LPVOID)gMakePreviewSoldierElf, (LPVOID)0x00519CCF, ASM::CALL);
}
//---------------------------------------------------------------------------
Memory class (by S@nek): http://www.everfall.com/paste/id.php?ln1lq4p6fh0e
About wings in client: http://forum.ragezone.com/f508/new-wings-913447/
All varibles (offsets too) are from Season 5.2+ (1.03.25 JPN).
Good luck for all with development in client, bcz it interesting and needed)
Bad english, bla, bla)
P.S.: Screens for sweet
http://img716.imageshack.us/img716/1...0922130001.jpg
http://img839.imageshack.us/img839/4...1114430000.jpg
http://img849.imageshack.us/img849/2...1107200001.jpg
http://img28.imageshack.us/img28/985...0916310000.jpg
http://img819.imageshack.us/img819/4...0309220000.jpg
-
Re: MakePreviewCharSet Of Client (Source)
-
Re: MakePreviewCharSet Of Client (Source)
#define ITEM_INTER 887 //1095 for 5.4 GMO
#define ITEM(x, y) ((x * 512) + y)
#define ITEM2(x, y) ((x * 512) + y + ITEM_INTER)
-
Re: MakePreviewCharSet Of Client (Source)
please main 1.4.4.0 ( 1.04D - SS 6.3 )
-
Re: MakePreviewCharSet Of Client (Source)
cuocdoisp
- Sorry but if u need - make research, i don't sure at 100% that all mains use identical preview struct
-
Re: MakePreviewCharSet Of Client (Source)
-
Re: MakePreviewCharSet Of Client (Source)
you can share full source ?
build error !
Code:
1>MakePreviewCharSet.cpp(29): error C2065: 'oObjState' : undeclared identifier
1>MakePreviewCharSet.cpp(122): error C3861: 'TDEBUG': identifier not found
1>MakePreviewCharSet.cpp(165): error C2653: 'ObjClass' : is not a class or namespace name
1>MakePreviewCharSet.cpp(165): error C2065: 'DarkLord' : undeclared identifier
1>MakePreviewCharSet.cpp(174): error C2065: 'gObjUser' : undeclared identifier
1>MakePreviewCharSet.cpp(174): error C2228: left of '.MapNumber' must have class/struct/union
1> type is ''unknown-type''
1>MakePreviewCharSet.cpp(176): error C3861: 'TDEBUG': identifier not found
1>MakePreviewCharSet.cpp(318): warning C4482: nonstandard extension used: enum 'eMauntType' used in qualified name
1>MakePreviewCharSet.cpp(322): warning C4482: nonstandard extension used: enum 'eMauntType' used in qualified name
1>MakePreviewCharSet.cpp(348): warning C4482: nonstandard extension used: enum 'eMauntType' used in qualified name
1>MakePreviewCharSet.cpp(354): warning C4482: nonstandard extension used: enum 'eMauntType' used in qualified name
1>MakePreviewCharSet.cpp(412): error C2065: 'oObjState' : undeclared identifier
1>MakePreviewCharSet.cpp(412): error C2653: 'ObjState' : is not a class or namespace name
1>MakePreviewCharSet.cpp(412): error C2065: 'SwitchCharacter' : undeclared identifier
1>MakePreviewCharSet.cpp(424): warning C4482: nonstandard extension used: enum 'eMauntType' used in qualified name
1>MakePreviewCharSet.cpp(428): warning C4482: nonstandard extension used: enum 'eMauntType' used in qualified name
1>MakePreviewCharSet.cpp(447): warning C4482: nonstandard extension used: enum 'eMauntType' used in qualified name
1>MakePreviewCharSet.cpp(451): warning C4482: nonstandard extension used: enum 'eMauntType' used in qualified name
1>MakePreviewCharSet.cpp(460): warning C4482: nonstandard extension used: enum 'eMauntType' used in qualified name
1>MakePreviewCharSet.cpp(464): warning C4482: nonstandard extension used: enum 'eMauntType' used in qualified name
1>MakePreviewCharSet.cpp(473): warning C4482: nonstandard extension used: enum 'eMauntType' used in qualified name
1>MakePreviewCharSet.cpp(477): warning C4482: nonstandard extension used: enum 'eMauntType' used in qualified name
1>MakePreviewCharSet.cpp(486): warning C4482: nonstandard extension used: enum 'eMauntType' used in qualified name
1>MakePreviewCharSet.cpp(490): warning C4482: nonstandard extension used: enum 'eMauntType' used in qualified name
1>MakePreviewCharSet.cpp(503): warning C4482: nonstandard extension used: enum 'eEffectState' used in qualified name
1>MakePreviewCharSet.cpp(618): error C2653: 'ASM' : is not a class or namespace name
1>MakePreviewCharSet.cpp(618): error C2065: 'CALL' : undeclared identifier
1>MakePreviewCharSet.cpp(618): error C3861: 'SetHook': identifier not found
1>MakePreviewCharSet.cpp(619): error C2653: 'ASM' : is not a class or namespace name
1>MakePreviewCharSet.cpp(619): error C2065: 'CALL' : undeclared identifier
1>MakePreviewCharSet.cpp(619): error C3861: 'SetHook': identifier not found
1>MakePreviewCharSet.cpp(620): error C2653: 'ASM' : is not a class or namespace name
1>MakePreviewCharSet.cpp(620): error C2065: 'CALL' : undeclared identifier
1>MakePreviewCharSet.cpp(620): error C3861: 'SetHook': identifier not found
1>MakePreviewCharSet.cpp(621): error C2653: 'ASM' : is not a class or namespace name
1>MakePreviewCharSet.cpp(621): error C2065: 'CALL' : undeclared identifier
1>MakePreviewCharSet.cpp(621): error C3861: 'SetHook': identifier not found
1>MakePreviewCharSet.cpp(622): error C2653: 'ASM' : is not a class or namespace name
1>MakePreviewCharSet.cpp(622): error C2065: 'CALL' : undeclared identifier
1>MakePreviewCharSet.cpp(622): error C3861: 'SetHook': identifier not found
1>MakePreviewCharSet.cpp(623): error C2653: 'ASM' : is not a class or namespace name
1>MakePreviewCharSet.cpp(623): error C2065: 'CALL' : undeclared identifier
1>MakePreviewCharSet.cpp(623): error C3861: 'SetHook': identifier not found
1>MakePreviewCharSet.cpp(624): error C2653: 'ASM' : is not a class or namespace name
1>MakePreviewCharSet.cpp(624): error C2065: 'CALL' : undeclared identifier
1>MakePreviewCharSet.cpp(624): error C3861: 'SetHook': identifier not found
1>MakePreviewCharSet.cpp(626): error C2653: 'ASM' : is not a class or namespace name
1>MakePreviewCharSet.cpp(626): error C2065: 'CALL' : undeclared identifier
1>MakePreviewCharSet.cpp(626): error C3861: 'SetHook': identifier not found
-
Re: MakePreviewCharSet Of Client (Source)
CallOfDuty
Code:
#define oObjState 0x00946F9C
#define oMapNumber 0x00934540
Code:
enum ObjClass // -> Complete -> Season 5.2 JPN
{
DarkWizard = 0,
SoulMaster = 8,
GrandMaster = 24,
// ----
DarkKnight = 1,
BladeKnight = 9,
BladeMaster = 25,
// ----
Elf = 2,
MuseElf = 10,
HightElf = 26,
// ----
MagicGladiator = 3,
DuelMaster = 19,
// ----
DarkLord = 4,
LordEmperor = 20,
// ----
Summoner = 5,
BloodySummoner = 13,
DimensionMaster = 29,
};
Code:
enum ObjState // -> Complete
{
SelectServer = 2,
SwitchCharacter = 4,
GameProcess = 5,
};
TDEBUG, SetHook & gObjUser my custom classes, u can use your own)
-
Re: MakePreviewCharSet Of Client (Source)
and you can share code Utilities :
Code:
SetRange
SetJmp
SetHook
thank you verry much.
-
Re: MakePreviewCharSet Of Client (Source)
CallOfDuty
Code:
namespace ASM
{
enum T
{
JMP = 0xE9,
JE = 0x74,
JNE = 0x75,
JGE = 0x7D,
NOP = 0x90,
CALL = 0xE8,
};
};
everfall.com :: paste
Credits: S@nek
-
Re: MakePreviewCharSet Of Client (Source)
and The last question in funcion :
Code:
__declspec(naked) void WingsAdd28Option () // -> 199 -> 00524578
{
_asm
{
mov edx, dword ptr ss:[ebp+8]
// ----
movsx eax, word ptr ds:[edx]
mov WingsAdd28Option_Pointer, eax
// ----
mov edx, dword ptr ss:[ebp-0x14]
mov WingsAdd28Option_NewOption, edx
// ----
mov cl, byte ptr ss:[ebp-0x10]
mov WingsAdd28Option_OptionValue, cl
}
// ----
//TDEBUG("[%s] Pointer: [%d:%d]", __FUNCTION__, WingsAdd28Option_Pointer / 512, WingsAdd28Option_Pointer % 512);
// ----
switch(WingsAdd28Option_Pointer)
{
case ITEM(12, 43):
{
if( (WingsAdd28Option_NewOption >> 4) & 1 )
{
WingsAdd28Option_OptionStat = WingsAdd28Option_OptionValue * 4;
WingsAdd28Option_OptionNumber = eItemOption::WizardryDamage;
}
else
{
if( (WingsAdd28Option_NewOption >> 5) & 1 )
{
WingsAdd28Option_OptionStat = WingsAdd28Option_OptionValue * 4;
WingsAdd28Option_OptionNumber = eItemOption::CurseSpell;
}
else
{
WingsAdd28Option_OptionStat = WingsAdd28Option_OptionValue;
WingsAdd28Option_OptionNumber = eItemOption::HPRecovery;
}
}
}
break;
// --
case ITEM(12, 180):
{
if( (WingsAdd28Option_NewOption >> 4) & 1 )
{
WingsAdd28Option_OptionStat = WingsAdd28Option_OptionValue * 4;
WingsAdd28Option_OptionNumber = eItemOption::WizardryDamage;
}
else
{
if( (WingsAdd28Option_NewOption >> 5) & 1 )
{
WingsAdd28Option_OptionStat = WingsAdd28Option_OptionValue * 4;
WingsAdd28Option_OptionNumber = eItemOption::Defense;
}
else
{
WingsAdd28Option_OptionStat = WingsAdd28Option_OptionValue;
WingsAdd28Option_OptionNumber = eItemOption::HPRecovery;
}
}
}
break;
// --
case ITEM(12, 181):
{
if( (WingsAdd28Option_NewOption >> 4) & 1 )
{
WingsAdd28Option_OptionStat = WingsAdd28Option_OptionValue * 4;
WingsAdd28Option_OptionNumber = eItemOption::Damage;
}
else
{
if( (WingsAdd28Option_NewOption >> 5) & 1 )
{
WingsAdd28Option_OptionStat = WingsAdd28Option_OptionValue * 4;
WingsAdd28Option_OptionNumber = eItemOption::Defense;
}
else
{
WingsAdd28Option_OptionStat = WingsAdd28Option_OptionValue;
WingsAdd28Option_OptionNumber = eItemOption::HPRecovery;
}
}
}
break;
// --
case ITEM(12, 182):
{
if( (WingsAdd28Option_NewOption >> 4) & 1 )
{
WingsAdd28Option_OptionStat = WingsAdd28Option_OptionValue * 4;
WingsAdd28Option_OptionNumber = eItemOption::Damage;
}
else
{
if( (WingsAdd28Option_NewOption >> 5) & 1 )
{
WingsAdd28Option_OptionStat = WingsAdd28Option_OptionValue * 4;
WingsAdd28Option_OptionNumber = eItemOption::Defense;
}
else
{
WingsAdd28Option_OptionStat = WingsAdd28Option_OptionValue;
WingsAdd28Option_OptionNumber = eItemOption::HPRecovery;
}
}
}
break;
// --
case ITEM(12, 183):
{
if( (WingsAdd28Option_NewOption >> 4) & 1 )
{
WingsAdd28Option_OptionStat = WingsAdd28Option_OptionValue * 4;
WingsAdd28Option_OptionNumber = eItemOption::Damage;
}
else
{
if( (WingsAdd28Option_NewOption >> 5) & 1 )
{
WingsAdd28Option_OptionStat = WingsAdd28Option_OptionValue * 4;
WingsAdd28Option_OptionNumber = eItemOption::WizardryDamage;
}
else
{
WingsAdd28Option_OptionStat = WingsAdd28Option_OptionValue;
WingsAdd28Option_OptionNumber = eItemOption::HPRecovery;
}
}
}
break;
// --
case ITEM(12, 184):
{
if( (WingsAdd28Option_NewOption >> 4) & 1 )
{
WingsAdd28Option_OptionStat = WingsAdd28Option_OptionValue * 4;
WingsAdd28Option_OptionNumber = eItemOption::Damage;
}
else
{
if( (WingsAdd28Option_NewOption >> 5) & 1 )
{
WingsAdd28Option_OptionStat = WingsAdd28Option_OptionValue * 4;
WingsAdd28Option_OptionNumber = eItemOption::Defense;
}
else
{
WingsAdd28Option_OptionStat = WingsAdd28Option_OptionValue;
WingsAdd28Option_OptionNumber = eItemOption::HPRecovery;
}
}
}
break;
// --
case ITEM(12, 185):
{
if( (WingsAdd28Option_NewOption >> 4) & 1 )
{
WingsAdd28Option_OptionStat = WingsAdd28Option_OptionValue * 4;
WingsAdd28Option_OptionNumber = eItemOption::WizardryDamage;
}
else
{
if( (WingsAdd28Option_NewOption >> 5) & 1 )
{
WingsAdd28Option_OptionStat = WingsAdd28Option_OptionValue * 4;
WingsAdd28Option_OptionNumber = eItemOption::CurseSpell;
}
else
{
WingsAdd28Option_OptionStat = WingsAdd28Option_OptionValue;
WingsAdd28Option_OptionNumber = eItemOption::HPRecovery;
}
}
}
break;
// --
default:
{
_asm
{
mov WingsAdd28Option_Buff, 0x0052463F
jmp WingsAdd28Option_Buff
}
}
break;
}
// ----
//TDEBUG("[%s] OptionNumber == %d", __FUNCTION__, WingsAdd28Option_OptionNumber);
// ----
_asm
{
mov edx, dword ptr ss:[ebp-0x10]
shl edx, 2
// ----
mov eax, dword ptr ss:[ebp+8]
xor ecx, ecx
// ----
mov cl, byte ptr ds:[eax+0x25]
mov eax, dword ptr ss:[ebp+8]
mov dl, WingsAdd28Option_OptionStat
mov byte ptr ds:[ecx+eax+0x2e], dl
// ----
xor edx, edx
mov dl, byte ptr ds:[eax+0x25]
mov cl, WingsAdd28Option_OptionNumber
mov byte ptr ds:[edx+eax+0x26], cl
// ----
add dl, 1
mov byte ptr ds:[eax+0x25], dl
// ----
mov WingsAdd28Option_Buff, 0x0052463F
jmp WingsAdd28Option_Buff
}
}
I have to declare how to empty error :
Code:
1>Wings.cpp(552): error C2653: 'eItemOption' : is not a class or namespace name
1>Wings.cpp(552): error C2065: 'WizardryDamage' : undeclared identifier
1>Wings.cpp(559): error C2653: 'eItemOption' : is not a class or namespace name
1>Wings.cpp(559): error C2065: 'CurseSpell' : undeclared identifier
1>Wings.cpp(564): error C2653: 'eItemOption' : is not a class or namespace name
1>Wings.cpp(564): error C2065: 'HPRecovery' : undeclared identifier
1>Wings.cpp(575): error C2653: 'eItemOption' : is not a class or namespace name
1>Wings.cpp(575): error C2065: 'WizardryDamage' : undeclared identifier
1>Wings.cpp(582): error C2653: 'eItemOption' : is not a class or namespace name
1>Wings.cpp(582): error C2065: 'Defense' : undeclared identifier
1>Wings.cpp(587): error C2653: 'eItemOption' : is not a class or namespace name
1>Wings.cpp(587): error C2065: 'HPRecovery' : undeclared identifier
1>Wings.cpp(598): error C2653: 'eItemOption' : is not a class or namespace name
1>Wings.cpp(598): error C2065: 'Damage' : undeclared identifier
1>Wings.cpp(605): error C2653: 'eItemOption' : is not a class or namespace name
1>Wings.cpp(605): error C2065: 'Defense' : undeclared identifier
1>Wings.cpp(610): error C2653: 'eItemOption' : is not a class or namespace name
1>Wings.cpp(610): error C2065: 'HPRecovery' : undeclared identifier
1>Wings.cpp(621): error C2653: 'eItemOption' : is not a class or namespace name
1>Wings.cpp(621): error C2065: 'Damage' : undeclared identifier
1>Wings.cpp(628): error C2653: 'eItemOption' : is not a class or namespace name
1>Wings.cpp(628): error C2065: 'Defense' : undeclared identifier
1>Wings.cpp(633): error C2653: 'eItemOption' : is not a class or namespace name
1>Wings.cpp(633): error C2065: 'HPRecovery' : undeclared identifier
1>Wings.cpp(644): error C2653: 'eItemOption' : is not a class or namespace name
1>Wings.cpp(644): error C2065: 'Damage' : undeclared identifier
1>Wings.cpp(651): error C2653: 'eItemOption' : is not a class or namespace name
1>Wings.cpp(651): error C2065: 'WizardryDamage' : undeclared identifier
1>Wings.cpp(656): error C2653: 'eItemOption' : is not a class or namespace name
1>Wings.cpp(656): error C2065: 'HPRecovery' : undeclared identifier
1>Wings.cpp(667): error C2653: 'eItemOption' : is not a class or namespace name
1>Wings.cpp(667): error C2065: 'Damage' : undeclared identifier
1>Wings.cpp(674): error C2653: 'eItemOption' : is not a class or namespace name
1>Wings.cpp(674): error C2065: 'Defense' : undeclared identifier
1>Wings.cpp(679): error C2653: 'eItemOption' : is not a class or namespace name
1>Wings.cpp(679): error C2065: 'HPRecovery' : undeclared identifier
1>Wings.cpp(690): error C2653: 'eItemOption' : is not a class or namespace name
1>Wings.cpp(690): error C2065: 'WizardryDamage' : undeclared identifier
1>Wings.cpp(697): error C2653: 'eItemOption' : is not a class or namespace name
1>Wings.cpp(697): error C2065: 'CurseSpell' : undeclared identifier
1>Wings.cpp(702): error C2653: 'eItemOption' : is not a class or namespace name
1>Wings.cpp(702): error C2065: 'HPRecovery' : undeclared identifier
thank you verry much ^^!, and sorry my english.
-
Re: MakePreviewCharSet Of Client (Source)
CallOfDuty
- First post updated, u can use updated method of setup options:
http://forum.ragezone.com/f508/new-w...7/#post7490174
-
Re: MakePreviewCharSet Of Client (Source)
sorry ^^! and thank you again :D
-
Re: MakePreviewCharSet Of Client (Source)
-
Re: MakePreviewCharSet Of Client (Source)
darksim in gameserver function to fix the visual bug wings is the only MakePreviewCharSet?
sorry my english
-
Re: MakePreviewCharSet Of Client (Source)
can someone give a link to a 1.03.25 JPN client? (trying to implement this to 1.04D gmo)
update: found it
-
Re: MakePreviewCharSet Of Client (Source)
@-=DarkSim=- : Can u share it ?
Quote:
1>c:\documents and settings\eddy\my documents\visual studio 2010\projects\modclientjpn\modclientjpn\makepreviewcharset.cpp(173): error C2065: 'gObjUser' : undeclared identifier1>c:\documents and settings\eddy\my documents\visual studio 2010\projects\modclientjpn\modclientjpn\makepreviewcharset.cpp(173): error C2228: left of '.MapNumber' must have class/struct/union
1> type is ''unknown-type''
-
Re: MakePreviewCharSet Of Client (Source)
Quote:
Originally Posted by
aecrimch
can someone give a link to a 1.03.25 JPN client? (trying to implement this to 1.04D gmo)
update: found it
Yeah! Thanks you very much!waiting for you update :D
-
Re: MakePreviewCharSet Of Client (Source)
eddydn
- gObjUser is my custom class, u can get mapnumber from main.exe constant:
Code:
#define oMapNumber 0x00934540
-
Re: MakePreviewCharSet Of Client (Source)
-=DarkSim=- It would be possible to apply the aggregate level 4 wings, the same graphic effects that had the same wings on the old server: AriethMu?, Using his method to set starting client effects?
PS: And these effects also apply to other types of items besides wings?, Such as weapons (bows, swords, maces, etc.) or only work with wings?
-
Re: MakePreviewCharSet Of Client (Source)
mauro07
- Yes, it possible, but mauro not for u :laugh:
P.S.: Sorry but u create one addon with public sources and write "by Nemesis" ~9000 times, maybe after 9001 u will be able to create effects and etc addons for main :laugh:
-
Re: MakePreviewCharSet Of Client (Source)
Quote:
Originally Posted by
-=DarkSim=-
mauro07
- Yes, it possible, but mauro not for u :laugh:
P.S.: Sorry but u create one addon with public sources and write "by Nemesis" ~9000 times, maybe after 9001 u will be able to create effects and etc addons for main :laugh:
My intension is not to rob you credits for this, and if you look at more than one of my contributions, I include those people who developed the original source code, which I later adapted for different versions, so here comes not understand that comment on his part, is no secret that my intention is not to steal others' work and sell it as mine, my only intension is to bring good things to the community, so that everyone can put to good use, and have fun nothing more than that.
----------------------
But I recognize that you have a point, maybe I'm not a programmer and I'm really just someone who has some brains to do some Research's.
-
Re: MakePreviewCharSet Of Client (Source)
mauro07
- OK, its cool, u "Helper & Researcher", but not "Coder & Developer", m?
---
u can view Mr.Kernighan (Brain) thread with "cool set effect of 380" and analyze this function in main.exe, it function have all pop effects and struct for work with it, i think Sobieh create effects for wings with it)
-
Re: MakePreviewCharSet Of Client (Source)
Quote:
Originally Posted by
-=DarkSim=-
mauro07
- OK, its cool, u "Helper & Researcher", but not "Coder & Developer", m?
---
u can view Mr.Kernighan (Brain) thread with "cool set effect of 380" and analyze this function in main.exe, it function have all pop effects and struct for work with it, i think Sobieh create effects for wings with it)
If it is true I will leave this ridiculous pride, and I wear the title that I deserve, no more, no less now. and thanks for share this
-
Re: MakePreviewCharSet Of Client (Source)
not work my main 1.05d :(
-
Re: MakePreviewCharSet Of Client (Source)
Sunligth
- Maybe your main have other preview struct, send in PM main)
-
Re: MakePreviewCharSet Of Client (Source)
-
Re: MakePreviewCharSet Of Client (Source)
That is main kor :D darksim use main jpn ^^
-
Re: MakePreviewCharSet Of Client (Source)
Sunlight :
you must have the wrong offsets for your main, i see in the screen with MakePreview on, that all your chars items are not shown.
KeysS:
The src DarkSim posted is an base src, form that we can use are own offsets (or classes, variables, objects, etc.) corresponding with the main we use.
-
Re: MakePreviewCharSet Of Client (Source)
I know, but thanks for that =) i'm working on this, and great release :) thanks for this :)
-
Re: MakePreviewCharSet Of Client (Source)
CodeBlocks
all offsets are correct, check 3 times
-
Re: MakePreviewCharSet Of Client (Source)
Sunligth
- You make research of struct positions?
Your main have other Preview struct positions, for example:
Code:
Name---------1.03.25---------1.05.30
WingsSlot------+456-----------+448
PetSlot--------+488-----------+480
You need fix all positions and after it all will work)
-
Re: MakePreviewCharSet Of Client (Source)
@-=DarkSim=- : Sorry for trouble , can u help me with this proplem !?
Quote:
1>c:\documents and settings\eddy\my documents\visual studio 2010\projects\modclientjpn\modclientjpn\makepreviewcharset.cpp(6): error C3646: 'ObjMakePreviewCharSet' : unknown override specifier1>c:\documents and settings\eddy\my documents\visual studio 2010\projects\modclientjpn\modclientjpn\makepreviewcharset.cpp(6): error C3646: 'mObjMakePreviewCharSet' : unknown override specifier
1>c:\documents and settings\eddy\my documents\visual studio 2010\projects\modclientjpn\modclientjpn\makepreviewcharset.cpp(6): error C2072: 'SetHook' : initialization of a function
1>c:\documents and settings\eddy\my documents\visual studio 2010\projects\modclientjpn\modclientjpn\makepreviewcharset.cpp(6): error C2440: 'initializing' : cannot convert from 'ObjMakePreviewCharSet' to 'DWORD (const LPVOID,const LPVOID,const BYTE)'
1
-
Re: MakePreviewCharSet Of Client (Source)
eddydn
- Maybe u show code?)
Send via PM (upload on pastebin)
-
Re: MakePreviewCharSet Of Client (Source)
DarkSim, I do not know to search for struct: (
-
Re: MakePreviewCharSet Of Client (Source)
@-=DarkSim=- : MakePreviewCharset.cpp - Pastebin.com
Thanks for look and help
-
Re: MakePreviewCharSet Of Client (Source)
eddydn
- I don't know why u get error, but u can delete this line, it not needed)
Sunligth
- For example just open two mains in olly and compare positions
(like mov dword ptr ss:[esi+1c8], 1c8 = 456 (WingsSlot), view this line in your main and get mov dword ptr ss:[esi+XXX)
But you need edit gaps for u main too, for simply just use macro (pPetSlot(x) *(WORD*)(x + 488) and etc)
I can make full research for one main, but your main not popular, sorry)
-
Re: MakePreviewCharSet Of Client (Source)
DarkSim Thanks, I'll do a search here, but I need to redo the struct?
Thanks DarkSim, sorry but I think I'll stop trying, I find very difficult to get work (struct correct), very thanks darksim
-
Re: MakePreviewCharSet Of Client (Source)
Try to work with the same main that darksim works, it's main 1.03y jpn :) u can work with it and see if works or no :) after you can work with your own main after understand the source (Y)
-
Re: MakePreviewCharSet Of Client (Source)
-
Re: MakePreviewCharSet Of Client (Source)
Well, all works ok =) but i have one problem how i get this?:
#define CS_START 1304
#define CS_HELM 9089
It is not in use but ^^ i wanna know XD
#define pVisible(x) *(BYTE*)(x + 15)
#define pPlayerClass(x) *(BYTE*)(x + 19)
#define pAncientEffect(x) *(BYTE*)(x + 22)
#define pAtEffect(x) *(BYTE*)(x + 23)
After i got all and nice source really i was not having time for try it, i start some hours ago but i was thinking about this values i hope can u give me info about those =), and thanks again.
-
Re: MakePreviewCharSet Of Client (Source)
[KeysS]
- u can get all values for any main with olly or ida, just need open function and view line by line)
i recommend to use ida for it, bcz ida show all offsets and positions after analyze)
Example (1.05.30 KOR):
Screenshot by Lightshot
-
Re: MakePreviewCharSet Of Client (Source)
@-=DarkSim=- : I got proplem with Visual bug in Selected Character
http://img829.imageshack.us/img829/1...0409420000.jpg
My code :
Quote:
//Custom Wing - source by Darksim if ( TempInventory[7] >= 180 && TempInventory[7] <= 185 )
{
pCList.CharSet[5] |= CS_SET_WING1(3);
pCList.CharSet[17] |= ((TempInventory[7] - 180) + 1 << 2);
}
Please help me
-
Re: MakePreviewCharSet Of Client (Source)
eddydn
- Maybe u problem with client-side?
You check all stucture positions and etc?
-
Re: MakePreviewCharSet Of Client (Source)
Dear DarkSim , gObjMakePreviewCharset in client work ok , i can see custom wing when i move from this map to other map.
When i add code into JGPGetCharList function
( i have add in conditions "else if ( lpCL->DbVersion <= 2 )" => Show like pictures)
After i've add in conditions "else //DB 3" => Character who wear wing 4th not show wing
So do you have idea for fix this proplem !?
-
Re: MakePreviewCharSet Of Client (Source)
eddydn
- mmm add after 3rd wings check for new wings, like:
Code:
if ( TempInventory[8] == 0x25 && TempInventory[8] != 0x1FF )
{
pCList.CharSet[10] &= 0xFE;
pCList.CharSet[12] &= 0xFE;
pCList.CharSet[12] |= 0x04;
BYTE btExcellentOption = lpCL->dbInventory[34] & 0x3F;
if ( (btExcellentOption&1) == 1 )
{
pCList.CharSet[16] |= 0x01;
}
if ( (btExcellentOption&2) == 2 )
{
pCList.CharSet[16] |= 0x02;
}
if ( (btExcellentOption&4) == 4 ) //Season 2.5 Golden Fenrir Display
{
pCList.CharSet[17] |= 0x01;
}
}
if ( (TempInventory[7] >= 36 && TempInventory[7] <= 40) || TempInventory[7] == 43 ) //Season 2.5 Third Type of Wings
{
pCList.CharSet[5] |= 0x0C;
pCList.CharSet[16] |= (((TempInventory[7]-35) & 0x07) << 0x02);
if ( TempInventory[7] == 43 )
{
pCList.CharSet[16] |= 0x18;
}
}
if ( TempInventory[7] >= 180 && TempInventory[7] <= 185 )
{
pCList.CharSet[5] |= CS_SET_WING1(3);
pCList.CharSet[17] |= (BYTE)(TempInventory[7] - 180 + 1) << 2;
}
-
Re: MakePreviewCharSet Of Client (Source)
Is hard to find all values ^^
#define pObjAction(x) *(BYTE*)(x + 718)//2CE
#define pObjSelectZone(x) *(float*)(x + 924)//39C //Float de zona
#define pGetPosition(x) *(WORD*)(x + 952)//3b8
I found values ^^ like float 70.0000, 0B for action and others, but not found that 718,924,952
-
Re: MakePreviewCharSet Of Client (Source)
-
Re: MakePreviewCharSet Of Client (Source)
I did my research's for this on 1.03.11 Jpn Main.exe version, and,, all offsets are well, but is lacking some things for made work this in this version, here share my offsets researched:
Code:
// Main 1.03k Jpn//MapOffset: 8C5CF8
//ObjOffset: 8D6F7C
ObjMakePreviewCharSet mObjMakePreviewCharSet = (ObjMakePreviewCharSet)0x4FDFE0; //Main 1.03Y+ JPN: 51564C ; Main 1.03k JPN: 4FDFE0
// ----
IsChaosCastle gIsChaosCastle = (IsChaosCastle)0x490280; //Main 1.03Y+ JPN: 49A450 ; Main 1.03k JPN: 490280
ItemCharSetConvert gItemCharSetConvert = (ItemCharSetConvert)0x504A69; //Main 1.03Y+ JPN: 51C4EC ; Main 1.03k JPN: 504A69
AmpersandConvert gAmpersandConvert = (AmpersandConvert)0x45A030; //Main 1.03Y+ JPN: 463890 ; Main 1.03k JPN: 45A030
SetObjMaunt gSetObjMaunt = (SetObjMaunt)0x4AC2C4; //Main 1.03Y+ JPN: 4B6B54 ; Main 1.03k JPN: 4AC2C4
SetObjMaunt2 gSetObjMaunt2 = (SetObjMaunt2)0x4ABF7C; //Main 1.03Y+ JPN: 4B680C ; Main 1.03k JPN: 4ABF7C
ObjPetGetThis gObjPetGetThis = (ObjPetGetThis)0x81AB71; //Main 1.03Y+ JPN: 8831F1 ; Main 1.03k JPN: 81AB71
SetObjPetOnSwitch gSetObjPetOnSwitch = (SetObjPetOnSwitch)0x81BA70; //Main 1.03Y+ JPN: 884245 ; Main 1.03k JPN: 81BA70
SetObjPetReset gSetObjPetReset = (SetObjPetReset)0x81BDA7; //Main 1.03Y+ JPN: 88457C ; Main 1.03k JPN: 81BDA7
CheckPetStatus gCheckPetStatus = (CheckPetStatus)0x4997AD; //Main 1.03Y+ JPN: 4A3A7D ; Main 1.03k JPN: 4997AD
ReturnPetSlot gReturnPetSlot = (ReturnPetSlot)0x4ABEB0; //Main 1.03Y+ JPN: 4B6740 ; Main 1.03k JPN: 4ABEB0
ObjPreviewDarkRaven gObjPreviewDarkRaven = (ObjPreviewDarkRaven)0x4A2AD6; //Main 1.03Y+ JPN: 4ACDA6 ; Main 1.03k JPN: 4A2AD6
// ----
Objsub_49A50A sub_49A50A = (Objsub_49A50A)0x49033A; //Main 1.03Y+ JPN: 49A50A ; Main 1.03k JPN: 49033A
Objsub_514A21 sub_514A21 = (Objsub_514A21)0x4FC216; //Main 1.03Y+ JPN: 514A21 ; Main 1.03k JPN: 4FC216
Objsub_4ADABB sub_4ADABB = (Objsub_4ADABB)0x4A3820; //Main 1.03Y+ JPN: 4ADABB ; Main 1.03k JPN: 4A3820
//---------------------------------------------------------------------------
Objdword_7B65114 dword_7B65114 = (Objdword_7B65114)0x7A723B8; //Main 1.03Y+ JPN: 7B65114 ; Main 1.03k JPN: 7A723B8
Objdword_7BA6278 dword_7BA6278 = (Objdword_7BA6278)0x7AB3518; //Main 1.03Y+ JPN: 7BA6278 ; Main 1.03k JPN: 7AB3518
Objdword_7B650F8 dword_7B650F8 = (Objdword_7B650F8)0x7A7239C; //Main 1.03Y+ JPN: 7B650F8 ; Main 1.03k JPN: 7A7239C
DWORD gObjGameState = *(DWORD*)oObjState;
//---------------------------------------------------------------------------
and for hook functions this:
Code:
void cMakePreviewCharSetLoad(){
SetHook((LPVOID)gObjMakePreviewCharSet, (LPVOID)0x0046D96B, ASM::CALL); //Main 1.03Y+ JPN: 0047797F ; Main 1.03k JPN: 0046D96B
SetHook((LPVOID)gObjMakePreviewCharSet, (LPVOID)0x00611613, ASM::CALL); //Main 1.03Y+ JPN: 006317A3 ; Main 1.03k JPN: 00611613
SetHook((LPVOID)gObjMakePreviewCharSet, (LPVOID)0x006177F5, ASM::CALL); //Main 1.03Y+ JPN: 00637C15 ; Main 1.03k JPN: 006177F5
SetHook((LPVOID)gObjMakePreviewCharSet, (LPVOID)0x006182D0, ASM::CALL); //Main 1.03Y+ JPN: 00638702 ; Main 1.03k JPN: 006182D0
SetHook((LPVOID)gObjMakePreviewCharSet, (LPVOID)0x006188B6, ASM::CALL); //Main 1.03Y+ JPN: 00638CF3 ; Main 1.03k JPN: 006188B6
SetHook((LPVOID)gObjMakePreviewCharSet, (LPVOID)0x0063D4FC, ASM::CALL); //Main 1.03Y+ JPN: 0065EDCC ; Main 1.03k JPN: 0063D4FC
SetHook((LPVOID)gObjMakePreviewCharSet, (LPVOID)0x00640572, ASM::CALL); //Main 1.03Y+ JPN: 00663A57 ; Main 1.03k JPN: 00640572
// ----
SetHook((LPVOID)gMakePreviewSoldierElf, (LPVOID)0x005025B8, ASM::CALL); //Main 1.03Y+ JPN: 00519CCF ; Main 1.03k JPN: 005025B8
}
my .h file is this:
Code:
#pragma once#include "Stdafx.h"
//---------------------------------------------------------------------------
namespace ASM
{
enum T
{
JMP = 0xE9,
JE = 0x74,
JNE = 0x75,
JGE = 0x7D,
NOP = 0x90,
CALL = 0xE8,
};
};
//---------------------------------------------------------------------------
enum eItemOption
{
Damage = 80, //-> Additional Damage +<N>
WizardryDamage = 81,
CurseSpell = 82,
Defense = 84, //-> Additional Defense +<N>
Luck = 85, //-> Default: 0
HPRecovery = 86,
IncreaseDamage = 95, //-> Increase Damage +<N>%
IncreaseSpeed = 98, //-> Increase Attacking(Wizardry)speed +<N>
IgnorOpDefense = 103,
ReturnAttack = 106, //-> Return's the enemy's attack power in <N>%
CompleteLife = 107, //-> Complete recovery of life in <N>% rate
CompleteMana = 108, //-> Complete recovery of Mana in <N>% rate
};
//---------------------------------------------------------------------------
enum ObjClass // -> Complete -> Season 5.2 JPN
{
DarkWizard = 0,
SoulMaster = 8,
GrandMaster = 24,
// ----
DarkKnight = 1,
BladeKnight = 9,
BladeMaster = 25,
// ----
Elf = 2,
MuseElf = 10,
HightElf = 26,
// ----
MagicGladiator = 3,
DuelMaster = 19,
// ----
DarkLord = 4,
LordEmperor = 20,
// ----
Summoner = 5,
BloodySummoner = 13,
DimensionMaster = 29,
};
//---------------------------------------------------------------------------
enum eEffectState
{
AtDarkHorse = 1,
AtFenrir = 4,
AtGameMaster = 5,
};
//---------------------------------------------------------------------------
enum ObjState // -> Complete
{
SelectServer = 2,
SwitchCharacter = 4,
GameProcess = 5,
};
//---------------------------------------------------------------------------
enum eMauntType
{
#if CLIENT_VERSION == 0
DarkHorse = 226,
#else
DarkHorse = 225,
#endif
Uniria = 233,
Dinorant = 323,
BlackFenrir = 384,
RedFenrir = 385,
BlueFenrir = 386,
GoldenFenrir = 387,
};
//---------------------------------------------------------------------------
#define pVisible(x) *(BYTE*)(x + 15)
#define pPlayerClass(x) *(BYTE*)(x + 19)
#define pAncientEffect(x) *(BYTE*)(x + 22)
#define pAtEffect(x) *(BYTE*)(x + 23)
#define pHelmSlot(x) *(WORD*)(x + 232)
#define pHelmSetLevel(x) *(BYTE*)(x + 234)
#define pHelmSetExcellent(x) *(BYTE*)(x + 235)
#define pHelmSetAncient(x) *(BYTE*)(x + 236)
#define pArmorSlot(x) *(WORD*)(x + 264)
#define pArmorSetLevel(x) *(BYTE*)(x + 266)
#define pArmorSetExcellent(x) *(BYTE*)(x + 267)
#define pArmorSetAncient(x) *(BYTE*)(x + 268)
#define pPantsSlot(x) *(WORD*)(x + 296)
#define pPantsSetLevel(x) *(BYTE*)(x + 298)
#define pPantsSetExcellent(x) *(BYTE*)(x + 299)
#define pPantsSetAncient(x) *(BYTE*)(x + 300)
#define pGlovesSlot(x) *(WORD*)(x + 328)
#define pGlovesSetLevel(x) *(BYTE*)(x + 330)
#define pGlovesSetExcellent(x) *(BYTE*)(x + 331)
#define pGlovesSetAncient(x) *(BYTE*)(x + 332)
#define pBootsSlot(x) *(WORD*)(x + 360)
#define pBootsSetLevel(x) *(BYTE*)(x + 362)
#define pBootsSetExcellent(x) *(BYTE*)(x + 363)
#define pBootsSetAncient(x) *(BYTE*)(x + 364)
#define pWeaponFirstSlot(x) *(WORD*)(x + 392)
#define pWeaponFirstSetLevel(x) *(BYTE*)(x + 394)
#define pWeaponFirstSetExcellent(x) *(BYTE*)(x + 395)
#define pWeaponFirstSetAncient(x) *(BYTE*)(x + 396)
#define pWeaponSecondSlot(x) *(WORD*)(x + 424)
#define pWeaponSecondSetLevel(x) *(BYTE*)(x + 426)
#define pWeaponSecondSetExcellent(x) *(BYTE*)(x + 427)
#define pWeaponSecondSetAncient(x) *(BYTE*)(x + 428)
#define pWingsSlot(x) *(WORD*)(x + 456)
#define pSetUnknown1(x) *(BYTE*)(x + 458)
#define pSetUnknown2(x) *(BYTE*)(x + 459)
#define pSetUnknown3(x) *(BYTE*)(x + 460)
#define pPetSlot(x) *(WORD*)(x + 488)
#define pSetUnknown4(x) *(BYTE*)(x + 490)
#define pFenrirCharSet(x) *(BYTE*)(x + 491)
#define pExpectPet(x) *(BYTE*)(x + 492)
#define pObjAction(x) *(BYTE*)(x + 718)
#define pObjScale(x) *(DWORD*)(x + 796)
#define pObjSelectZone(x) *(float*)(x + 924)
#define pGetPosition(x) *(WORD*)(x + 952)
//---------------------------------------------------------------------------
struct Preview
{
BYTE Shift1[14];
/*4*/ //BYTE Unknown4; // -> 100%
/*8*/ //DWORD Unknown8; // -> 100%
/*14*/ BYTE IsSafeZone;
/*15*/ BYTE Visible;
/*16*/ BYTE Unknown16;
/*17*/ BYTE IsLiveObject;
/*18*/ BYTE Unknown18;
/*19*/ BYTE Class;
/*20*/ BYTE Unknown20;
/*21*/ BYTE CtrlCode;
/*22*/ BYTE AncientEffect;
/*23*/ BYTE PetStatus;
/*24*/ BYTE Unknown24;
/*25*/ BYTE Unknown25;
/*26*/ BYTE Unknown26;
/*27*/ BYTE Unknown27;
/*28*/ BYTE Unknown28;
/*29*/ BYTE Unknown29;
/*30*/ BYTE Unknown30;
/*31*/ BYTE Unknown31;
/*32*/ BYTE PKLevel;
/*33*/ BYTE Unknown33;
/*34*/ BYTE Unknown34;
/*35*/ BYTE Unknown35;
/*36*/ BYTE Unknown36;
/*37*/ BYTE Unknown37;
/*38*/ WORD Unknown38;
/*40*/ BYTE Unknown40;
/*41*/ BYTE Unknown41;
/*42*/ BYTE Unknown42;
/*43*/ BYTE Unknown43;
/*44*/ BYTE Unknown44;
/*45*/ BYTE MapPosX;
/*46*/ BYTE MapPosY;
BYTE Shift47[9];
/*56*/ char Name[25]; //-> Need check size
/*50*/ //BYTE Unknown50; // -> 100%
/*88*/ //BYTE Unknown88; // -> 100%
/*90*/ //BYTE Unknown90; // -> 100%
/*91*/ //BYTE Unknown91; // -> 100%
/*92*/ //WORD InGuild; // -> 100%
/*94*/ //WORD ObjIndex; // -> 100%
/*96*/ //WORD Unknown96; // -> 100%
/*98*/ //WORD Unknown98; // -> 100%
/*100*/ //WORD Unknown100; // -> 100%
/*106*/ //WORD Unknown106; // -> 100%
/*112*/ //DWORD Unknown112; // -> 100%
/*116*/ //DWORD Unknown116; // -> 100%
/*124*/ //DWORD Unknown124; // -> 100%
/*140*/ //DWORD MapPosX; // -> 100%
/*144*/ //DWORD MapPosY; // -> 100%
/*156*/ //DWORD Unknown156; // -> 100%
/*172*/ //DWORD Unknown172; // -> 100%
/*188*/ //DWORD Unknown188; // -> 100%
/*192*/ //DWORD Unknown192; // -> 100%
/*196*/ //DWORD Unknown196; // -> 100%
BYTE Shift2[150];
/*232*/ WORD HelmSlot;
/*234*/ BYTE HelmLevel;
/*235*/ BYTE HelmExcellent;
/*236*/ BYTE HelmAncient;
BYTE Shift5[27];
/*264*/ WORD ArmorSlot;
/*266*/ BYTE ArmorLevel;
/*267*/ BYTE ArmorExcellent;
/*268*/ BYTE ArmorAncient;
BYTE Shift6[27];
/*296*/ WORD PantsSlot;
/*298*/ BYTE PantsLevel;
/*299*/ BYTE PantsExcellent;
/*300*/ BYTE PantsAncient;
BYTE Shift7[27];
/*328*/ WORD GlovesSlot;
/*330*/ BYTE GlovesLevel;
/*331*/ BYTE GlovesExcellent;
/*332*/ BYTE GlovesAncient;
BYTE Shift8[27];
/*360*/ WORD BootsSlot;
/*362*/ BYTE BootsLevel;
/*363*/ BYTE BootsExcellent;
/*364*/ BYTE BootsAncient;
BYTE Shift9[27];
/*392*/ WORD WeaponFirstSlot;
/*394*/ BYTE WeaponFirstLevel;
/*395*/ BYTE WeaponFirstExcellent;
/*396*/ BYTE WeaponFirstAncient;
/*397*/ BYTE Unknown397;
BYTE Shift10[26];
/*424*/ WORD WeaponSecondSlot;
/*426*/ BYTE WeaponSecondLevel;
/*427*/ BYTE WeaponSecondExcellent;
/*428*/ BYTE WeaponSecondAncient;
/*429*/ BYTE Unknown429;
BYTE Shift11[26];
/*456*/ WORD WingsSlot;
/*458*/ BYTE Unknown458;
/*459*/ BYTE Unknown459;
/*460*/ BYTE Unknown460;
BYTE Shift12[27];
/*488*/ WORD PetSlot;
/*490*/ BYTE Unknown490;
/*491*/ BYTE FenrirCharSet;
/*492*/ BYTE ExpectPet;
/*520*/ //WORD Unknown520; // -> 100%
/*596*/ //DWORD Unknown596; // -> 100%
/*688*/ //DWORD Unknown688; //
BYTE Shift13[207];
/*700*/ DWORD Unknown700; // -> # Need check
/*704*/ BYTE Unknown704;
BYTE Shift14[2];
/*707*/ BYTE Unknown707;
/*708*/ BYTE Unknown708;
/*709*/ BYTE Unknown709;
/*710*/ BYTE Unknown710; // -> 100%
/*711*/ BYTE Unknown711;
/*712*/ BYTE Unknown712;
BYTE Shift16[5];
/*718*/ BYTE Action;
/*719*/ BYTE Unknown719;
/*720*/ BYTE Unknown720; //-> 100%
/*721*/ BYTE Unknown721; //-> 100%
/*722*/ BYTE ObjectType; //-> Object Type (1 = Player, 2 = Monster, 4 = NPC) 100%
BYTE Shift17[25];
/*748*/ DWORD Unknown748;
/*752*/ DWORD Unknown752;
/*756*/ DWORD Unknown756;
/*760*/ DWORD Unknown760;
/*768*/ //DWORD Unknown768; // -> 100%
BYTE Shift18[32];
/*796*/ DWORD ModelScale;
BYTE Shift19[16];
/*800*/ //DWORD Unknown800; // -> 100%
/*816*/ DWORD Unknown816;
/*824*/ //DWORD Unknown824; // -> 100%
BYTE Shift20[103];
/*856*/ //DWORD Unknown856; // -> 100%
/*860*/ //DWORD Unknown860; // -> 100%
/*864*/ //DWORD Unknown864; // -> 100%
/*972*/ //DWORD Unknown972; // -> 100%
/*904*/ //DWORD Unknown904; // -> 100%
/*908*/ //DWORD Unknown908; // -> 100%
/*912*/ //DWORD Unknown912; // -> 100%
/*916*/ //DWORD Unknown916; // -> 100% / Maybe float
/*920*/ //DWORD Unknown920; // -> 100% / Maybe float
/*924*/ float SelectZone; // -> Maybe DWORD
BYTE Shift21[32];
/*952*/ //float Unknown952; // -> 100%
/*956*/ //float Unknown956; // -> 100%
/*960*/ float Unknown960;
/*964*/ //DWORD Unknown964; // -> 100%
/*968*/ //DWORD Unknown968; // -> 100%
/*972*/ //DWORD Unknown972; // -> 100%
/*1120*/ //DWORD Unknown1120; // -> 100%
/*1184*/ //void?
};
//---------------------------------------------------------------------------
#define ITEM_INTER 834 //Season 4.6 JPN -> 1.03k
#define ITEM(x, y) ((x * 512) + y)
#define ITEM2(x, y) ((x * 512) + y + ITEM_INTER)
#define oObjState 0x008D6F7C //Main 1.03Y+ JPN: 00946F9C ; Main 1.03k JPN: 008D6F7C
#define oMapNumber 0x008C5CF8 //Main 1.03Y+ JPN: 00934540 ; Main 1.03k JPN: 008C5CF8
#define LODWORD(h) ((DWORD)(__int64(h) & __int64(0xffffffff)))
// ----
#define CS_START 1304
// ----
#define CS_EMPTY_SLOT -1
#define CS_EMPTY_ITEM 511
#define CS_EMPTY_WEAPON 4095 // ITEM(7, 511)
// ----
#define CS_SET_1(x) ( x >> 2)
// ----
#define CS_HELM 9036 // 9089 for Season 5.2 JPN (1.03Y+ Main.exe) ; 9036 for Season 4.6 JPN (1.03k Main.exe)
#define CS_ARMOR CS_HELM + 20
#define CS_PANTS CS_ARMOR + 20
#define CS_GLOVES CS_PANTS + 20
#define CS_BOOTS CS_GLOVES + 20
// ----
#define CS_GET_STRUCT(x, y) (CS_START * x + *(int*)y)
#define CS_GET_WEAPON(x, y) ( y | (16 * (x & 0xF0)) )
#define CS_GET_HELM(x, y, z) ( (32 * (z & 0xF)) + 16 * ((x >> 7) & 1) + (y >> 4) )
#define CS_GET_ARMOR(x, y, z) ( (32 * ((z >> 4) & 0xF)) + 16 * ((x >> 6) & 1) + (y & 0xF) )
#define CS_GET_PANTS(x, y, z) ( (32 * (z & 0xF)) + 16 * ((x >> 5) & 1) + (y >> 4) )
#define CS_GET_GLOVES(x, y, z) ( (32 * ((z >> 4) & 0xF)) + 16 * ((x >> 4) & 1) + (y & 0xF) )
#define CS_GET_BOOTS(x, y, z) ( (32 * (z & 0xF)) + 16 * ((x >> 3) & 1) + (y >> 4) )
//---------------------------------------------------------------------------
//bool __cdecl sub_49A450(signed int a1) -> return bool
typedef bool (__cdecl *IsChaosCastle)(int MapNumber);
extern IsChaosCastle gIsChaosCastle;
//---------------------------------------------------------------------------
//char __cdecl sub_51C4EC(BYTE a1) -> return WORD
typedef WORD (__cdecl *ItemCharSetConvert)(BYTE Pointer);
extern ItemCharSetConvert gItemCharSetConvert;
//---------------------------------------------------------------------------
//int __cdecl sub_463890(char a1) -> return BYTE or WORD
typedef BYTE (__cdecl *AmpersandConvert)(BYTE Pointer);
extern AmpersandConvert gAmpersandConvert;
//---------------------------------------------------------------------------
typedef int (__cdecl *ObjMakePreviewCharSet)(int a1, BYTE * CharSet, int a3, int a4);
extern ObjMakePreviewCharSet mObjMakePreviewCharSet;
//---------------------------------------------------------------------------
//int __cdecl sub_49A50A(int a1)
typedef int (__cdecl *Objsub_49A50A)(int Arg1);
extern Objsub_49A50A sub_49A50A;
//---------------------------------------------------------------------------
//int __cdecl sub_514A21(int a1)
typedef int (__cdecl *Objsub_514A21)(int Arg1);
extern Objsub_514A21 sub_514A21;
//---------------------------------------------------------------------------
//int __cdecl sub_4A3A7D(int a1) -> return int
typedef int (__cdecl *CheckPetStatus)(int Arg1);
extern CheckPetStatus gCheckPetStatus;
//---------------------------------------------------------------------------
//int __cdecl sub_4B6740(int a1) -> return int
typedef int (__cdecl *ReturnPetSlot)(int Arg1);
extern ReturnPetSlot gReturnPetSlot;
//---------------------------------------------------------------------------
//int __cdecl sub_4B6B54(int a1, int a2, int a3, int a4) -> return int
typedef int (__cdecl *SetObjMaunt)(int MauntCode, int Arg2, int Arg3, int Arg4, int Arg5);
extern SetObjMaunt gSetObjMaunt;
//---------------------------------------------------------------------------
//char __cdecl sub_4B680C(int a1, int a2, int a3, int a4, int a5) -> return bool
typedef bool (__cdecl *SetObjMaunt2)(int Arg1, int Arg2, int Arg3, int Arg4, int Arg5);
extern SetObjMaunt2 gSetObjMaunt2;
//---------------------------------------------------------------------------
//int __cdecl sub_8831F1() -> return THIS
typedef LPVOID (__cdecl *ObjPetGetThis)(void);
extern ObjPetGetThis gObjPetGetThis;
//---------------------------------------------------------------------------
//void __stdcall sub_88457C(int a1, int a2, char a3)
typedef void (__thiscall *SetObjPetReset)(LPVOID This, int Arg1, int Arg2, int Arg3);
extern SetObjPetReset gSetObjPetReset;
//---------------------------------------------------------------------------
//char __thiscall sub_884245(void *this, int a2, int a3, int a4, int a5, int a6, int a7) -> return bool
typedef void (__thiscall *SetObjPetOnSwitch)(LPVOID This, int Arg1, int Arg2, int Arg3, int Arg4, int Arg5, int Arg6);
extern SetObjPetOnSwitch gSetObjPetOnSwitch;
//---------------------------------------------------------------------------
//int *__cdecl sub_4ADABB(int a1) -> return int const
typedef int * (__cdecl *Objsub_4ADABB)(int Arg1);
extern Objsub_4ADABB sub_4ADABB;
//---------------------------------------------------------------------------
//int __cdecl sub_4ACDA6(int Preview * gPreview) -> return int
typedef int (__cdecl *ObjPreviewDarkRaven)(int Struct);
extern ObjPreviewDarkRaven gObjPreviewDarkRaven;
//---------------------------------------------------------------------------
typedef DWORD (*Objdword_7B65114);
extern Objdword_7B65114 dword_7B65114;
//---------------------------------------------------------------------------
typedef DWORD (*Objdword_7BA6278);
extern Objdword_7BA6278 dword_7BA6278;
//---------------------------------------------------------------------------
typedef DWORD (*Objdword_7B650F8);
extern Objdword_7B650F8 dword_7B650F8;
//---------------------------------------------------------------------------
void cMakePreviewCharSetLoad();
//---------------------------------------------------------------------------
the code compile to 100%, but not work in game... :( something can help me?
sorry for my bad english.
PS: Here link of download full source project, for all, but only compile dll, the source not finished for this version need be fixed. http://www.mediafire.com/?4763zmdsee58d60
-
Re: MakePreviewCharSet Of Client (Source)
Quote:
Originally Posted by
mauro07
I did my research's for this on 1.03.11 Jpn Main.exe version, and,, all offsets are well, but is lacking some things for made work this in this version, here share my offsets researched:
Code:
// Main 1.03k Jpn//MapOffset: 8C5CF8
//ObjOffset: 8D6F7C
ObjMakePreviewCharSet mObjMakePreviewCharSet = (ObjMakePreviewCharSet)0x4FDFE0; //Main 1.03Y+ JPN: 51564C ; Main 1.03k JPN: 4FDFE0
// ----
IsChaosCastle gIsChaosCastle = (IsChaosCastle)0x490280; //Main 1.03Y+ JPN: 49A450 ; Main 1.03k JPN: 490280
ItemCharSetConvert gItemCharSetConvert = (ItemCharSetConvert)0x504A69; //Main 1.03Y+ JPN: 51C4EC ; Main 1.03k JPN: 504A69
AmpersandConvert gAmpersandConvert = (AmpersandConvert)0x45A030; //Main 1.03Y+ JPN: 463890 ; Main 1.03k JPN: 45A030
SetObjMaunt gSetObjMaunt = (SetObjMaunt)0x4AC2C4; //Main 1.03Y+ JPN: 4B6B54 ; Main 1.03k JPN: 4AC2C4
SetObjMaunt2 gSetObjMaunt2 = (SetObjMaunt2)0x4ABF7C; //Main 1.03Y+ JPN: 4B680C ; Main 1.03k JPN: 4ABF7C
ObjPetGetThis gObjPetGetThis = (ObjPetGetThis)0x81AB71; //Main 1.03Y+ JPN: 8831F1 ; Main 1.03k JPN: 81AB71
SetObjPetOnSwitch gSetObjPetOnSwitch = (SetObjPetOnSwitch)0x81BA70; //Main 1.03Y+ JPN: 884245 ; Main 1.03k JPN: 81BA70
SetObjPetReset gSetObjPetReset = (SetObjPetReset)0x81BDA7; //Main 1.03Y+ JPN: 88457C ; Main 1.03k JPN: 81BDA7
CheckPetStatus gCheckPetStatus = (CheckPetStatus)0x4997AD; //Main 1.03Y+ JPN: 4A3A7D ; Main 1.03k JPN: 4997AD
ReturnPetSlot gReturnPetSlot = (ReturnPetSlot)0x4ABEB0; //Main 1.03Y+ JPN: 4B6740 ; Main 1.03k JPN: 4ABEB0
ObjPreviewDarkRaven gObjPreviewDarkRaven = (ObjPreviewDarkRaven)0x4A2AD6; //Main 1.03Y+ JPN: 4ACDA6 ; Main 1.03k JPN: 4A2AD6
// ----
Objsub_49A50A sub_49A50A = (Objsub_49A50A)0x49033A; //Main 1.03Y+ JPN: 49A50A ; Main 1.03k JPN: 49033A
Objsub_514A21 sub_514A21 = (Objsub_514A21)0x4FC216; //Main 1.03Y+ JPN: 514A21 ; Main 1.03k JPN: 4FC216
Objsub_4ADABB sub_4ADABB = (Objsub_4ADABB)0x4A3820; //Main 1.03Y+ JPN: 4ADABB ; Main 1.03k JPN: 4A3820
//---------------------------------------------------------------------------
Objdword_7B65114 dword_7B65114 = (Objdword_7B65114)0x7A723B8; //Main 1.03Y+ JPN: 7B65114 ; Main 1.03k JPN: 7A723B8
Objdword_7BA6278 dword_7BA6278 = (Objdword_7BA6278)0x7AB3518; //Main 1.03Y+ JPN: 7BA6278 ; Main 1.03k JPN: 7AB3518
Objdword_7B650F8 dword_7B650F8 = (Objdword_7B650F8)0x7A7239C; //Main 1.03Y+ JPN: 7B650F8 ; Main 1.03k JPN: 7A7239C
DWORD gObjGameState = *(DWORD*)oObjState;
//---------------------------------------------------------------------------
and for hook functions this:
Code:
void cMakePreviewCharSetLoad(){
SetHook((LPVOID)gObjMakePreviewCharSet, (LPVOID)0x0046D96B, ASM::CALL); //Main 1.03Y+ JPN: 0047797F ; Main 1.03k JPN: 0046D96B
SetHook((LPVOID)gObjMakePreviewCharSet, (LPVOID)0x00611613, ASM::CALL); //Main 1.03Y+ JPN: 006317A3 ; Main 1.03k JPN: 00611613
SetHook((LPVOID)gObjMakePreviewCharSet, (LPVOID)0x006177F5, ASM::CALL); //Main 1.03Y+ JPN: 00637C15 ; Main 1.03k JPN: 006177F5
SetHook((LPVOID)gObjMakePreviewCharSet, (LPVOID)0x006182D0, ASM::CALL); //Main 1.03Y+ JPN: 00638702 ; Main 1.03k JPN: 006182D0
SetHook((LPVOID)gObjMakePreviewCharSet, (LPVOID)0x006188B6, ASM::CALL); //Main 1.03Y+ JPN: 00638CF3 ; Main 1.03k JPN: 006188B6
SetHook((LPVOID)gObjMakePreviewCharSet, (LPVOID)0x0063D4FC, ASM::CALL); //Main 1.03Y+ JPN: 0065EDCC ; Main 1.03k JPN: 0063D4FC
SetHook((LPVOID)gObjMakePreviewCharSet, (LPVOID)0x00640572, ASM::CALL); //Main 1.03Y+ JPN: 00663A57 ; Main 1.03k JPN: 00640572
// ----
SetHook((LPVOID)gMakePreviewSoldierElf, (LPVOID)0x005025B8, ASM::CALL); //Main 1.03Y+ JPN: 00519CCF ; Main 1.03k JPN: 005025B8
}
my .h file is this:
Code:
#pragma once#include "Stdafx.h"
//---------------------------------------------------------------------------
namespace ASM
{
enum T
{
JMP = 0xE9,
JE = 0x74,
JNE = 0x75,
JGE = 0x7D,
NOP = 0x90,
CALL = 0xE8,
};
};
//---------------------------------------------------------------------------
enum eItemOption
{
Damage = 80, //-> Additional Damage +<N>
WizardryDamage = 81,
CurseSpell = 82,
Defense = 84, //-> Additional Defense +<N>
Luck = 85, //-> Default: 0
HPRecovery = 86,
IncreaseDamage = 95, //-> Increase Damage +<N>%
IncreaseSpeed = 98, //-> Increase Attacking(Wizardry)speed +<N>
IgnorOpDefense = 103,
ReturnAttack = 106, //-> Return's the enemy's attack power in <N>%
CompleteLife = 107, //-> Complete recovery of life in <N>% rate
CompleteMana = 108, //-> Complete recovery of Mana in <N>% rate
};
//---------------------------------------------------------------------------
enum ObjClass // -> Complete -> Season 5.2 JPN
{
DarkWizard = 0,
SoulMaster = 8,
GrandMaster = 24,
// ----
DarkKnight = 1,
BladeKnight = 9,
BladeMaster = 25,
// ----
Elf = 2,
MuseElf = 10,
HightElf = 26,
// ----
MagicGladiator = 3,
DuelMaster = 19,
// ----
DarkLord = 4,
LordEmperor = 20,
// ----
Summoner = 5,
BloodySummoner = 13,
DimensionMaster = 29,
};
//---------------------------------------------------------------------------
enum eEffectState
{
AtDarkHorse = 1,
AtFenrir = 4,
AtGameMaster = 5,
};
//---------------------------------------------------------------------------
enum ObjState // -> Complete
{
SelectServer = 2,
SwitchCharacter = 4,
GameProcess = 5,
};
//---------------------------------------------------------------------------
enum eMauntType
{
#if CLIENT_VERSION == 0
DarkHorse = 226,
#else
DarkHorse = 225,
#endif
Uniria = 233,
Dinorant = 323,
BlackFenrir = 384,
RedFenrir = 385,
BlueFenrir = 386,
GoldenFenrir = 387,
};
//---------------------------------------------------------------------------
#define pVisible(x) *(BYTE*)(x + 15)
#define pPlayerClass(x) *(BYTE*)(x + 19)
#define pAncientEffect(x) *(BYTE*)(x + 22)
#define pAtEffect(x) *(BYTE*)(x + 23)
#define pHelmSlot(x) *(WORD*)(x + 232)
#define pHelmSetLevel(x) *(BYTE*)(x + 234)
#define pHelmSetExcellent(x) *(BYTE*)(x + 235)
#define pHelmSetAncient(x) *(BYTE*)(x + 236)
#define pArmorSlot(x) *(WORD*)(x + 264)
#define pArmorSetLevel(x) *(BYTE*)(x + 266)
#define pArmorSetExcellent(x) *(BYTE*)(x + 267)
#define pArmorSetAncient(x) *(BYTE*)(x + 268)
#define pPantsSlot(x) *(WORD*)(x + 296)
#define pPantsSetLevel(x) *(BYTE*)(x + 298)
#define pPantsSetExcellent(x) *(BYTE*)(x + 299)
#define pPantsSetAncient(x) *(BYTE*)(x + 300)
#define pGlovesSlot(x) *(WORD*)(x + 328)
#define pGlovesSetLevel(x) *(BYTE*)(x + 330)
#define pGlovesSetExcellent(x) *(BYTE*)(x + 331)
#define pGlovesSetAncient(x) *(BYTE*)(x + 332)
#define pBootsSlot(x) *(WORD*)(x + 360)
#define pBootsSetLevel(x) *(BYTE*)(x + 362)
#define pBootsSetExcellent(x) *(BYTE*)(x + 363)
#define pBootsSetAncient(x) *(BYTE*)(x + 364)
#define pWeaponFirstSlot(x) *(WORD*)(x + 392)
#define pWeaponFirstSetLevel(x) *(BYTE*)(x + 394)
#define pWeaponFirstSetExcellent(x) *(BYTE*)(x + 395)
#define pWeaponFirstSetAncient(x) *(BYTE*)(x + 396)
#define pWeaponSecondSlot(x) *(WORD*)(x + 424)
#define pWeaponSecondSetLevel(x) *(BYTE*)(x + 426)
#define pWeaponSecondSetExcellent(x) *(BYTE*)(x + 427)
#define pWeaponSecondSetAncient(x) *(BYTE*)(x + 428)
#define pWingsSlot(x) *(WORD*)(x + 456)
#define pSetUnknown1(x) *(BYTE*)(x + 458)
#define pSetUnknown2(x) *(BYTE*)(x + 459)
#define pSetUnknown3(x) *(BYTE*)(x + 460)
#define pPetSlot(x) *(WORD*)(x + 488)
#define pSetUnknown4(x) *(BYTE*)(x + 490)
#define pFenrirCharSet(x) *(BYTE*)(x + 491)
#define pExpectPet(x) *(BYTE*)(x + 492)
#define pObjAction(x) *(BYTE*)(x + 718)
#define pObjScale(x) *(DWORD*)(x + 796)
#define pObjSelectZone(x) *(float*)(x + 924)
#define pGetPosition(x) *(WORD*)(x + 952)
//---------------------------------------------------------------------------
struct Preview
{
BYTE Shift1[14];
/*4*/ //BYTE Unknown4; // -> 100%
/*8*/ //DWORD Unknown8; // -> 100%
/*14*/ BYTE IsSafeZone;
/*15*/ BYTE Visible;
/*16*/ BYTE Unknown16;
/*17*/ BYTE IsLiveObject;
/*18*/ BYTE Unknown18;
/*19*/ BYTE Class;
/*20*/ BYTE Unknown20;
/*21*/ BYTE CtrlCode;
/*22*/ BYTE AncientEffect;
/*23*/ BYTE PetStatus;
/*24*/ BYTE Unknown24;
/*25*/ BYTE Unknown25;
/*26*/ BYTE Unknown26;
/*27*/ BYTE Unknown27;
/*28*/ BYTE Unknown28;
/*29*/ BYTE Unknown29;
/*30*/ BYTE Unknown30;
/*31*/ BYTE Unknown31;
/*32*/ BYTE PKLevel;
/*33*/ BYTE Unknown33;
/*34*/ BYTE Unknown34;
/*35*/ BYTE Unknown35;
/*36*/ BYTE Unknown36;
/*37*/ BYTE Unknown37;
/*38*/ WORD Unknown38;
/*40*/ BYTE Unknown40;
/*41*/ BYTE Unknown41;
/*42*/ BYTE Unknown42;
/*43*/ BYTE Unknown43;
/*44*/ BYTE Unknown44;
/*45*/ BYTE MapPosX;
/*46*/ BYTE MapPosY;
BYTE Shift47[9];
/*56*/ char Name[25]; //-> Need check size
/*50*/ //BYTE Unknown50; // -> 100%
/*88*/ //BYTE Unknown88; // -> 100%
/*90*/ //BYTE Unknown90; // -> 100%
/*91*/ //BYTE Unknown91; // -> 100%
/*92*/ //WORD InGuild; // -> 100%
/*94*/ //WORD ObjIndex; // -> 100%
/*96*/ //WORD Unknown96; // -> 100%
/*98*/ //WORD Unknown98; // -> 100%
/*100*/ //WORD Unknown100; // -> 100%
/*106*/ //WORD Unknown106; // -> 100%
/*112*/ //DWORD Unknown112; // -> 100%
/*116*/ //DWORD Unknown116; // -> 100%
/*124*/ //DWORD Unknown124; // -> 100%
/*140*/ //DWORD MapPosX; // -> 100%
/*144*/ //DWORD MapPosY; // -> 100%
/*156*/ //DWORD Unknown156; // -> 100%
/*172*/ //DWORD Unknown172; // -> 100%
/*188*/ //DWORD Unknown188; // -> 100%
/*192*/ //DWORD Unknown192; // -> 100%
/*196*/ //DWORD Unknown196; // -> 100%
BYTE Shift2[150];
/*232*/ WORD HelmSlot;
/*234*/ BYTE HelmLevel;
/*235*/ BYTE HelmExcellent;
/*236*/ BYTE HelmAncient;
BYTE Shift5[27];
/*264*/ WORD ArmorSlot;
/*266*/ BYTE ArmorLevel;
/*267*/ BYTE ArmorExcellent;
/*268*/ BYTE ArmorAncient;
BYTE Shift6[27];
/*296*/ WORD PantsSlot;
/*298*/ BYTE PantsLevel;
/*299*/ BYTE PantsExcellent;
/*300*/ BYTE PantsAncient;
BYTE Shift7[27];
/*328*/ WORD GlovesSlot;
/*330*/ BYTE GlovesLevel;
/*331*/ BYTE GlovesExcellent;
/*332*/ BYTE GlovesAncient;
BYTE Shift8[27];
/*360*/ WORD BootsSlot;
/*362*/ BYTE BootsLevel;
/*363*/ BYTE BootsExcellent;
/*364*/ BYTE BootsAncient;
BYTE Shift9[27];
/*392*/ WORD WeaponFirstSlot;
/*394*/ BYTE WeaponFirstLevel;
/*395*/ BYTE WeaponFirstExcellent;
/*396*/ BYTE WeaponFirstAncient;
/*397*/ BYTE Unknown397;
BYTE Shift10[26];
/*424*/ WORD WeaponSecondSlot;
/*426*/ BYTE WeaponSecondLevel;
/*427*/ BYTE WeaponSecondExcellent;
/*428*/ BYTE WeaponSecondAncient;
/*429*/ BYTE Unknown429;
BYTE Shift11[26];
/*456*/ WORD WingsSlot;
/*458*/ BYTE Unknown458;
/*459*/ BYTE Unknown459;
/*460*/ BYTE Unknown460;
BYTE Shift12[27];
/*488*/ WORD PetSlot;
/*490*/ BYTE Unknown490;
/*491*/ BYTE FenrirCharSet;
/*492*/ BYTE ExpectPet;
/*520*/ //WORD Unknown520; // -> 100%
/*596*/ //DWORD Unknown596; // -> 100%
/*688*/ //DWORD Unknown688; //
BYTE Shift13[207];
/*700*/ DWORD Unknown700; // -> # Need check
/*704*/ BYTE Unknown704;
BYTE Shift14[2];
/*707*/ BYTE Unknown707;
/*708*/ BYTE Unknown708;
/*709*/ BYTE Unknown709;
/*710*/ BYTE Unknown710; // -> 100%
/*711*/ BYTE Unknown711;
/*712*/ BYTE Unknown712;
BYTE Shift16[5];
/*718*/ BYTE Action;
/*719*/ BYTE Unknown719;
/*720*/ BYTE Unknown720; //-> 100%
/*721*/ BYTE Unknown721; //-> 100%
/*722*/ BYTE ObjectType; //-> Object Type (1 = Player, 2 = Monster, 4 = NPC) 100%
BYTE Shift17[25];
/*748*/ DWORD Unknown748;
/*752*/ DWORD Unknown752;
/*756*/ DWORD Unknown756;
/*760*/ DWORD Unknown760;
/*768*/ //DWORD Unknown768; // -> 100%
BYTE Shift18[32];
/*796*/ DWORD ModelScale;
BYTE Shift19[16];
/*800*/ //DWORD Unknown800; // -> 100%
/*816*/ DWORD Unknown816;
/*824*/ //DWORD Unknown824; // -> 100%
BYTE Shift20[103];
/*856*/ //DWORD Unknown856; // -> 100%
/*860*/ //DWORD Unknown860; // -> 100%
/*864*/ //DWORD Unknown864; // -> 100%
/*972*/ //DWORD Unknown972; // -> 100%
/*904*/ //DWORD Unknown904; // -> 100%
/*908*/ //DWORD Unknown908; // -> 100%
/*912*/ //DWORD Unknown912; // -> 100%
/*916*/ //DWORD Unknown916; // -> 100% / Maybe float
/*920*/ //DWORD Unknown920; // -> 100% / Maybe float
/*924*/ float SelectZone; // -> Maybe DWORD
BYTE Shift21[32];
/*952*/ //float Unknown952; // -> 100%
/*956*/ //float Unknown956; // -> 100%
/*960*/ float Unknown960;
/*964*/ //DWORD Unknown964; // -> 100%
/*968*/ //DWORD Unknown968; // -> 100%
/*972*/ //DWORD Unknown972; // -> 100%
/*1120*/ //DWORD Unknown1120; // -> 100%
/*1184*/ //void?
};
//---------------------------------------------------------------------------
#define ITEM_INTER 834 //Season 4.6 JPN -> 1.03k
#define ITEM(x, y) ((x * 512) + y)
#define ITEM2(x, y) ((x * 512) + y + ITEM_INTER)
#define oObjState 0x008D6F7C //Main 1.03Y+ JPN: 00946F9C ; Main 1.03k JPN: 008D6F7C
#define oMapNumber 0x008C5CF8 //Main 1.03Y+ JPN: 00934540 ; Main 1.03k JPN: 008C5CF8
#define LODWORD(h) ((DWORD)(__int64(h) & __int64(0xffffffff)))
// ----
#define CS_START 1304
// ----
#define CS_EMPTY_SLOT -1
#define CS_EMPTY_ITEM 511
#define CS_EMPTY_WEAPON 4095 // ITEM(7, 511)
// ----
#define CS_SET_1(x) ( x >> 2)
// ----
#define CS_HELM 9036 // 9089 for Season 5.2 JPN (1.03Y+ Main.exe) ; 9036 for Season 4.6 JPN (1.03k Main.exe)
#define CS_ARMOR CS_HELM + 20
#define CS_PANTS CS_ARMOR + 20
#define CS_GLOVES CS_PANTS + 20
#define CS_BOOTS CS_GLOVES + 20
// ----
#define CS_GET_STRUCT(x, y) (CS_START * x + *(int*)y)
#define CS_GET_WEAPON(x, y) ( y | (16 * (x & 0xF0)) )
#define CS_GET_HELM(x, y, z) ( (32 * (z & 0xF)) + 16 * ((x >> 7) & 1) + (y >> 4) )
#define CS_GET_ARMOR(x, y, z) ( (32 * ((z >> 4) & 0xF)) + 16 * ((x >> 6) & 1) + (y & 0xF) )
#define CS_GET_PANTS(x, y, z) ( (32 * (z & 0xF)) + 16 * ((x >> 5) & 1) + (y >> 4) )
#define CS_GET_GLOVES(x, y, z) ( (32 * ((z >> 4) & 0xF)) + 16 * ((x >> 4) & 1) + (y & 0xF) )
#define CS_GET_BOOTS(x, y, z) ( (32 * (z & 0xF)) + 16 * ((x >> 3) & 1) + (y >> 4) )
//---------------------------------------------------------------------------
//bool __cdecl sub_49A450(signed int a1) -> return bool
typedef bool (__cdecl *IsChaosCastle)(int MapNumber);
extern IsChaosCastle gIsChaosCastle;
//---------------------------------------------------------------------------
//char __cdecl sub_51C4EC(BYTE a1) -> return WORD
typedef WORD (__cdecl *ItemCharSetConvert)(BYTE Pointer);
extern ItemCharSetConvert gItemCharSetConvert;
//---------------------------------------------------------------------------
//int __cdecl sub_463890(char a1) -> return BYTE or WORD
typedef BYTE (__cdecl *AmpersandConvert)(BYTE Pointer);
extern AmpersandConvert gAmpersandConvert;
//---------------------------------------------------------------------------
typedef int (__cdecl *ObjMakePreviewCharSet)(int a1, BYTE * CharSet, int a3, int a4);
extern ObjMakePreviewCharSet mObjMakePreviewCharSet;
//---------------------------------------------------------------------------
//int __cdecl sub_49A50A(int a1)
typedef int (__cdecl *Objsub_49A50A)(int Arg1);
extern Objsub_49A50A sub_49A50A;
//---------------------------------------------------------------------------
//int __cdecl sub_514A21(int a1)
typedef int (__cdecl *Objsub_514A21)(int Arg1);
extern Objsub_514A21 sub_514A21;
//---------------------------------------------------------------------------
//int __cdecl sub_4A3A7D(int a1) -> return int
typedef int (__cdecl *CheckPetStatus)(int Arg1);
extern CheckPetStatus gCheckPetStatus;
//---------------------------------------------------------------------------
//int __cdecl sub_4B6740(int a1) -> return int
typedef int (__cdecl *ReturnPetSlot)(int Arg1);
extern ReturnPetSlot gReturnPetSlot;
//---------------------------------------------------------------------------
//int __cdecl sub_4B6B54(int a1, int a2, int a3, int a4) -> return int
typedef int (__cdecl *SetObjMaunt)(int MauntCode, int Arg2, int Arg3, int Arg4, int Arg5);
extern SetObjMaunt gSetObjMaunt;
//---------------------------------------------------------------------------
//char __cdecl sub_4B680C(int a1, int a2, int a3, int a4, int a5) -> return bool
typedef bool (__cdecl *SetObjMaunt2)(int Arg1, int Arg2, int Arg3, int Arg4, int Arg5);
extern SetObjMaunt2 gSetObjMaunt2;
//---------------------------------------------------------------------------
//int __cdecl sub_8831F1() -> return THIS
typedef LPVOID (__cdecl *ObjPetGetThis)(void);
extern ObjPetGetThis gObjPetGetThis;
//---------------------------------------------------------------------------
//void __stdcall sub_88457C(int a1, int a2, char a3)
typedef void (__thiscall *SetObjPetReset)(LPVOID This, int Arg1, int Arg2, int Arg3);
extern SetObjPetReset gSetObjPetReset;
//---------------------------------------------------------------------------
//char __thiscall sub_884245(void *this, int a2, int a3, int a4, int a5, int a6, int a7) -> return bool
typedef void (__thiscall *SetObjPetOnSwitch)(LPVOID This, int Arg1, int Arg2, int Arg3, int Arg4, int Arg5, int Arg6);
extern SetObjPetOnSwitch gSetObjPetOnSwitch;
//---------------------------------------------------------------------------
//int *__cdecl sub_4ADABB(int a1) -> return int const
typedef int * (__cdecl *Objsub_4ADABB)(int Arg1);
extern Objsub_4ADABB sub_4ADABB;
//---------------------------------------------------------------------------
//int __cdecl sub_4ACDA6(int Preview * gPreview) -> return int
typedef int (__cdecl *ObjPreviewDarkRaven)(int Struct);
extern ObjPreviewDarkRaven gObjPreviewDarkRaven;
//---------------------------------------------------------------------------
typedef DWORD (*Objdword_7B65114);
extern Objdword_7B65114 dword_7B65114;
//---------------------------------------------------------------------------
typedef DWORD (*Objdword_7BA6278);
extern Objdword_7BA6278 dword_7BA6278;
//---------------------------------------------------------------------------
typedef DWORD (*Objdword_7B650F8);
extern Objdword_7B650F8 dword_7B650F8;
//---------------------------------------------------------------------------
void cMakePreviewCharSetLoad();
//---------------------------------------------------------------------------
the code compile to 100%, but not work in game... :( something can help me?
sorry for my bad english.
PS: Here link of download full source project, for all, but only compile dll, the source not finished for this version need be fixed.
Main.dll MakePreviewCharSet Client Source Offsets 1.03.11 Jpn.rar
What is not work in game !????
-
Re: MakePreviewCharSet Of Client (Source)
I have a problem, new wing can't drop the box chaos to mix +9 -> +13.
How to fix ?
http://www.youtube.com/watch?v=g660M10EgvM
-
Re: MakePreviewCharSet Of Client (Source)
Quote:
Originally Posted by
caothuphutho
Same proplem , already fix in GameServer but in Client i dont know where need fix...
-
Re: MakePreviewCharSet Of Client (Source)
Quote:
Originally Posted by
eddydn
Same proplem , already fix in GameServer but in Client i dont know where need fix...
edit mix.bmd file
-
Re: MakePreviewCharSet Of Client (Source)
@eddydn only hook that dll to main and work?
-
Re: MakePreviewCharSet Of Client (Source)
Quote:
Originally Posted by
boncha
edit mix.bmd file
Can you guide how to add ?
@Jjkkllaa : no , you need add some code in GameServer for fix some proplem (CheckWing , Visual Bug , effect option...etc)
-
Re: MakePreviewCharSet Of Client (Source)
Fully work Chaosmix New wing +9 to +13 ss4.6 :D
http://www.youtube.com/watch?v=vJ-aJswq0wo
thank to : -=DarkSim=-, boncha
-
Re: MakePreviewCharSet Of Client (Source)
[KeysS]
- You about Season 6+?
-
Re: MakePreviewCharSet Of Client (Source)
Quote:
Originally Posted by
-=DarkSim=-
[KeysS]
- You about Season 6+?
Yeah, i was tryin' with 1.04D GMO main e_e i do many things, but i see the code in ASM changed a lot in comparation with old mains like 1.03Y JNP, ^^ then i leave the work, cuz i don't have a plugin like u for paste ASM to C++ ^^ in IDA T_T
The same effect, just change the image :D fire to light XD, source from darksim with changed image, simply and no more =)
-
Re: MakePreviewCharSet Of Client (Source)
caothuphutho, could post the source of the main? or part of the visual character select bug?
-
Re: MakePreviewCharSet Of Client (Source)
Quote:
Originally Posted by
Sunligth
caothuphutho, could post the source of the main? or part of the visual character select bug?
Quote:
if ( (TempInventory[7] >= 36 && TempInventory[7] <= 40) || TempInventory[7] == 43 ) //Season 2.5 Third Type of Wings {
pCList.CharSet[5] |= 0x0C;
pCList.CharSet[16] |= (((TempInventory[7]-35) & 0x07) << 0x02);
if ( TempInventory[7] == 43 )
{
pCList.CharSet[16] |= 0x18;
}
}
//Custom Wing Fix Visual bug in Select Character
if ( TempInventory[7] >= 180 && TempInventory[7] <= 185 )
{
pCList.CharSet[5] |= CS_SET_WING1(3);
pCList.CharSet[17] |= (BYTE)(TempInventory[7] - 180 + 1) << 2;
}
All you need in DSProtocol.cpp ( if you develop in GameServer 1.00.90 , just build dll and patch function)
-
Re: MakePreviewCharSet Of Client (Source)
Quote:
Originally Posted by
eddydn
All you need in DSProtocol.cpp ( if you develop in GameServer 1.00.90 , just build dll and patch function)
Is this really a Dll to make GS support the wings? or wtf is it ? i actually kinda asleep (im still awake like 30 hours now...) and dont get it..maybe after sleeping i get back here and get it right.....
cya later guys.
IanN "Kurapica" Valls
-
Re: MakePreviewCharSet Of Client (Source)
could post the source for season 4.6? @chaothuphutpho
-
Re: MakePreviewCharSet Of Client (Source)
caothuphutho: In his video, where you show as you try to increase the level of custom wings using the chaos machine, I noticed that their aggregate level 4 wings, have the same effects/animations that they had the same wings on the old server: AriethMu, but ... I have tried to find the same effects in the main.exe 1.03k Jpn, using the source code written by: -=DarkSim=-, and have had no success in finding these effects, at least tell me what are the indicators of such effects, and if that I can put in my main 1.03k, using the source written by: -=DarkSim=- (without aditional modification's), or is that perhaps you used a different source code for it?
-
Re: MakePreviewCharSet Of Client (Source)
arieth mu source files are on the net, maybe they include main source too, look it up
-
Re: MakePreviewCharSet Of Client (Source)
Quote:
Originally Posted by
ftewegw1
arieth mu source files are on the net, maybe they include main source too, look it up
Unpacked dll + different offsets
-
Re: MakePreviewCharSet Of Client (Source)
Quote:
Originally Posted by
Sunligth
caothuphutho, could post the source of the main? or part of the visual character select bug?
you can use source main CharSet by -=DarkSim=- :
Code:
__declspec(naked) void WingsAddCharSet () // -> 57 -> 004FE263 |> 8B4D 0C MOV ECX,DWORD PTR SS:[EBP+C]
{
_asm
{
mov ecx, dword ptr ss:[ebp+0x0c]
xor edx, edx
mov dl, byte ptr ds:[ecx+0x08]
and edx, 0x00000007
mov byte ptr ss:[ebp-4], dl
mov eax, dword ptr ss:[ebp-4]
and eax, 0x000000FF
mov WingsAddCharSet_CharSet9_Buff, eax
}
// ----
if( WingsAddCharSet_CharSet9_Buff > 0 )
{
_asm
{
mov cl, byte ptr ss:[ebp-4]
mov byte ptr ss:[ebp-0x3c], cl
mov WingsAddCharSet_CharSet9, cl
}
}
else
{
goto CHARSET16;
}
// ----
//TDEBUG("[%s] CharSet[9] == %d", __FUNCTION__, WingsAddCharSet_CharSet9);
// ----
if( WingsAddCharSet_CharSet9 == 1 )
{
WingsAddCharSet_CharSet9_Pointer = ITEM2(12, 180);
}
else if( WingsAddCharSet_CharSet9 == 2 )
{
WingsAddCharSet_CharSet9_Pointer = ITEM2(12, 181);
}
else if( WingsAddCharSet_CharSet9 == 3 )
{
WingsAddCharSet_CharSet9_Pointer = ITEM2(12, 182);
}
else if( WingsAddCharSet_CharSet9 == 4 )
{
WingsAddCharSet_CharSet9_Pointer = ITEM2(12, 183);
}
else if( WingsAddCharSet_CharSet9 == 5 )
{
WingsAddCharSet_CharSet9_Pointer = ITEM2(12, 184);
}
else if( WingsAddCharSet_CharSet9 == 6 )
{
WingsAddCharSet_CharSet9_Pointer = ITEM2(12, 185);
}
// ----
_asm
{
mov edx, dword ptr ss:[ebp-8]
mov ax, WingsAddCharSet_CharSet9_Pointer
mov word ptr ds:[edx+0x1c8], ax
}
// ----
CHARSET16:
// ----
_asm
{
mov ecx, dword ptr ss:[ebp+0x0c]
xor edx, edx
mov dl, byte ptr ds:[ecx+0x0f]
sar edx, 2
and edx, 0x00000007
mov byte ptr ss:[ebp-4], dl
mov eax, dword ptr ss:[ebp-4]
and eax, 0x000000FF
mov WingsAddCharSet_CharSet16_Buff, eax
}
// ----
if( WingsAddCharSet_CharSet16_Buff > 0 )
{
_asm
{
mov cl, byte ptr ss:[ebp-4]
mov byte ptr ss:[ebp-0x3c], cl
mov WingsAddCharSet_CharSet16, cl
}
}
else
{
_asm
{
mov WingsAddCharSet_CharSet16_Buff, 0x004FE2B3 // 1.03K JPN
jmp WingsAddCharSet_CharSet16_Buff
}
}
// ----
//TDEBUG("[%s] CharSet[16] == %d", __FUNCTION__, WingsAddCharSet_CharSet16);
// ----
if( WingsAddCharSet_CharSet16 == 6 )
{
_asm
{
mov edx, dword ptr ss:[ebp-8]
mov word ptr ds:[edx+0x1c8], 0x1B6D // FIX 1.03K (1.03.25 1BA2)
mov WingsAddCharSet_CharSet16_Buff, 0x004FE2B3 // 1.03K JPN
jmp WingsAddCharSet_CharSet16_Buff
}
}
else
{
_asm
{
mov WingsAddCharSet_CharSet16_Buff, 0x004FE29C // 1.03K
jmp WingsAddCharSet_CharSet16_Buff
}
}
}
and you can fix on GameServer, use guide by eddydn
mauro07 : i use main1.03k effect by tomatoes
-
Re: MakePreviewCharSet Of Client (Source)
Quote:
Originally Posted by
caothuphutho
you can use source main CharSet by -=DarkSim=- :
Code:
__declspec(naked) void WingsAddCharSet () // -> 57 -> 004FE263 |> 8B4D 0C MOV ECX,DWORD PTR SS:[EBP+C]
{
_asm
{
mov ecx, dword ptr ss:[ebp+0x0c]
xor edx, edx
mov dl, byte ptr ds:[ecx+0x08]
and edx, 0x00000007
mov byte ptr ss:[ebp-4], dl
mov eax, dword ptr ss:[ebp-4]
and eax, 0x000000FF
mov WingsAddCharSet_CharSet9_Buff, eax
}
// ----
if( WingsAddCharSet_CharSet9_Buff > 0 )
{
_asm
{
mov cl, byte ptr ss:[ebp-4]
mov byte ptr ss:[ebp-0x3c], cl
mov WingsAddCharSet_CharSet9, cl
}
}
else
{
goto CHARSET16;
}
// ----
//TDEBUG("[%s] CharSet[9] == %d", __FUNCTION__, WingsAddCharSet_CharSet9);
// ----
if( WingsAddCharSet_CharSet9 == 1 )
{
WingsAddCharSet_CharSet9_Pointer = ITEM2(12, 180);
}
else if( WingsAddCharSet_CharSet9 == 2 )
{
WingsAddCharSet_CharSet9_Pointer = ITEM2(12, 181);
}
else if( WingsAddCharSet_CharSet9 == 3 )
{
WingsAddCharSet_CharSet9_Pointer = ITEM2(12, 182);
}
else if( WingsAddCharSet_CharSet9 == 4 )
{
WingsAddCharSet_CharSet9_Pointer = ITEM2(12, 183);
}
else if( WingsAddCharSet_CharSet9 == 5 )
{
WingsAddCharSet_CharSet9_Pointer = ITEM2(12, 184);
}
else if( WingsAddCharSet_CharSet9 == 6 )
{
WingsAddCharSet_CharSet9_Pointer = ITEM2(12, 185);
}
// ----
_asm
{
mov edx, dword ptr ss:[ebp-8]
mov ax, WingsAddCharSet_CharSet9_Pointer
mov word ptr ds:[edx+0x1c8], ax
}
// ----
CHARSET16:
// ----
_asm
{
mov ecx, dword ptr ss:[ebp+0x0c]
xor edx, edx
mov dl, byte ptr ds:[ecx+0x0f]
sar edx, 2
and edx, 0x00000007
mov byte ptr ss:[ebp-4], dl
mov eax, dword ptr ss:[ebp-4]
and eax, 0x000000FF
mov WingsAddCharSet_CharSet16_Buff, eax
}
// ----
if( WingsAddCharSet_CharSet16_Buff > 0 )
{
_asm
{
mov cl, byte ptr ss:[ebp-4]
mov byte ptr ss:[ebp-0x3c], cl
mov WingsAddCharSet_CharSet16, cl
}
}
else
{
_asm
{
mov WingsAddCharSet_CharSet16_Buff, 0x004FE2B3 // 1.03K JPN
jmp WingsAddCharSet_CharSet16_Buff
}
}
// ----
//TDEBUG("[%s] CharSet[16] == %d", __FUNCTION__, WingsAddCharSet_CharSet16);
// ----
if( WingsAddCharSet_CharSet16 == 6 )
{
_asm
{
mov edx, dword ptr ss:[ebp-8]
mov word ptr ds:[edx+0x1c8], 0x1B6D // FIX 1.03K (1.03.25 1BA2)
mov WingsAddCharSet_CharSet16_Buff, 0x004FE2B3 // 1.03K JPN
jmp WingsAddCharSet_CharSet16_Buff
}
}
else
{
_asm
{
mov WingsAddCharSet_CharSet16_Buff, 0x004FE29C // 1.03K
jmp WingsAddCharSet_CharSet16_Buff
}
}
}
and you can fix on GameServer, use guide by eddydn
mauro07 : i use main1.03k effect by tomatoes
caothuphutho: Can you please share 1.03k main + ariethmu effects wings by tomatoes here?, I can't login in VTM Forums... I'm from Argentina.
-
Re: MakePreviewCharSet Of Client (Source)
Main1.03K effect by tomatoes : download
if want change IP and PORT, you need unpack file mns.dll (enigma protect). Sorry i can't share file unpack :)
-
1 Attachment(s)
Re: MakePreviewCharSet Of Client (Source)
@chaothuphutho Main erro, Player.bmd :S
Attachment 126446
-
Re: MakePreviewCharSet Of Client (Source)
there is also 1.03.51 & 1.04.04 main with tomatoes effects, just need 2 code gs charset :)
-
Re: MakePreviewCharSet Of Client (Source)
Quote:
Originally Posted by
ShamelessVN
-=DarkSim=- is a pro, but i not use source of -=DarkSim=- for ss6.3 and ss4.6. i use main1.03k and 1.04D ss4.6 and ss6.3 custom wing effect by tomatoes !. ss2.5 main1.04J ss3ep1 custom wing fix by ME !
-
Re: MakePreviewCharSet Of Client (Source)
@caothuphutho : work hard and do not waste unnecessary words for things, my friend ^^
-
Re: MakePreviewCharSet Of Client (Source)
-
Re: MakePreviewCharSet Of Client (Source)
@mauro07 post Source for Main 1.03k ?
-
Re: MakePreviewCharSet Of Client (Source)
Quote:
Originally Posted by
VeltonD
@mauro07 post Source for Main 1.03k ?
join to this request !
edit : Here Full Decompile function of 1.03K JPN main .
PHP Code:
int __cdecl sub_4FDFE0(int a1, int a2, int a3, int a4)
{
int result; // eax@4
int v5; // ST10_4@34
int v6; // eax@34
int v7; // ST04_4@57
int v8; // eax@57
signed int v9; // [sp+14h] [bp-30h]@59
int v10; // [sp+18h] [bp-2Ch]@59
signed __int16 v11; // [sp+1Ch] [bp-28h]@48
char v12; // [sp+20h] [bp-24h]@44
int v13; // [sp+24h] [bp-20h]@12
__int16 v14; // [sp+34h] [bp-10h]@5
__int16 v15; // [sp+34h] [bp-10h]@8
__int16 v16; // [sp+34h] [bp-10h]@104
__int16 v17; // [sp+34h] [bp-10h]@107
__int16 v18; // [sp+34h] [bp-10h]@110
__int16 v19; // [sp+34h] [bp-10h]@113
__int16 v20; // [sp+34h] [bp-10h]@116
signed int v21; // [sp+38h] [bp-Ch]@103
int v22; // [sp+3Ch] [bp-8h]@2
unsigned __int8 v23; // [sp+40h] [bp-4h]@17
unsigned __int8 v24; // [sp+40h] [bp-4h]@29
unsigned __int8 v25; // [sp+40h] [bp-4h]@36
char v26; // [sp+40h] [bp-4h]@75
if ( a3 )
v22 = a3;
else
v22 = 1236 * a1 + dword_7A7239C;
result = v22 + 700;
if ( *(_DWORD *)(v22 + 748) == 826 )
{
v14 = *(_BYTE *)a2 | (unsigned __int16)(16 * (unsigned __int8)(*(_BYTE *)(a2 + 11) & 0xF0));
if ( v14 == 4095 )
{
*(_WORD *)(v22 + 392) = -1;
*(_BYTE *)(v22 + 395) = 0;
*(_BYTE *)(v22 + 396) = 0;
}
else
{
*(_WORD *)(v22 + 392) = v14 + 834;
}
v15 = *(_BYTE *)(a2 + 1) | (unsigned __int16)(16 * (unsigned __int8)(*(_BYTE *)(a2 + 12) & 0xF0));
if ( v15 == 4095 )
{
*(_WORD *)(v22 + 424) = -1;
*(_BYTE *)(v22 + 427) = 0;
*(_BYTE *)(v22 + 428) = 0;
}
else
{
if ( sub_45A030(*(_BYTE *)(v22 + 19)) != 4 || v15 != 2565 )
{
*(_WORD *)(v22 + 424) = v15 + 834;
}
else
{
v13 = sub_4A3820(dword_7AB3518 + 4413);
sub_4A2AD6(v22);
if ( !sub_490280(dword_8C5CF8) )
sub_4A4750(*(_DWORD *)(v22 + 600), v13);
}
}
if ( (((signed int)*(_BYTE *)(a2 + 4) >> 2) & 3) == 3 )
{
v23 = *(_BYTE *)(a2 + 8) & 7;
if ( v23 )
{
switch ( v23 )
{
case 5u:
*(_WORD *)(v22 + 456) = 7520;
break;
case 6u:
*(_WORD *)(v22 + 456) = 7019;
break;
case 7u:
*(_WORD *)(v22 + 456) = 7020;
break;
default:
*(_WORD *)(v22 + 456) = v23 + 6980;
break;
}
}
else
{
*(_WORD *)(v22 + 456) = -1;
*(_BYTE *)(v22 + 459) = 0;
*(_BYTE *)(v22 + 460) = 0;
}
}
else
{
*(_WORD *)(v22 + 456) = (((signed int)*(_BYTE *)(a2 + 4) >> 2) & 3) + 6978;
}
v24 = ((signed int)*(_BYTE *)(a2 + 15) >> 2) & 7;
if ( (((signed int)*(_BYTE *)(a2 + 15) >> 2) & 7) > 0 )
{
if ( v24 == 6 )
*(_WORD *)(v22 + 456) = 7021;
else
*(_WORD *)(v22 + 456) = v24 + 7013;
}
if ( a4 )
{
*(_BYTE *)(a4 + 4) = 0;
}
else
{
sub_4ABEB0(v22 + 700);
v5 = *(_WORD *)(v22 + 488);
v6 = sub_81AB71();
sub_81BDA7((void *)v6, v22, v5, 1);
}
v25 = *(_BYTE *)(a2 + 4) & 3;
if ( v25 == 3 )
{
if ( (*(_BYTE *)(a2 + 9) & 1) == 1 )
{
*(_WORD *)(v22 + 488) = 7493;
if ( a4 )
sub_4ABF7C(323, v22 + 952, v22 + 700, a4, 0);
else
sub_4AC2C4(323, v22 + 952, v22 + 700, 0);
}
else
{
*(_WORD *)(v22 + 488) = -1;
*(_BYTE *)(v22 + 491) = 0;
*(_BYTE *)(v22 + 492) = 0;
}
}
else
{
v12 = *(_BYTE *)(a2 + 15) & 0xE0;
if ( v12 != 32 && v12 != 64 && v12 != 128 && v12 != 224 )
{
*(_WORD *)(v22 + 488) = v25 + 7490;
v10 = 0;
v9 = 1;
if ( v25 )
{
if ( v25 == 2 )
{
v10 = 233;
}
else
{
if ( v25 == 3 )
v10 = 323;
else
v9 = 0;
}
}
else
{
v10 = 7490;
}
if ( v9 == 1 )
{
if ( a4 )
sub_4ABF7C(v10, v22 + 952, v22 + 700, a4, 0);
else
sub_4AC2C4(v10, v22 + 952, v22 + 700, 0);
}
}
else
{
v11 = 0;
switch ( v12 )
{
case 0x20:
v11 = 64;
break;
case 0x40:
v11 = 65;
break;
case 0x80:
v11 = 67;
break;
case 0xE0:
v11 = 80;
break;
default:
break;
}
*(_WORD *)(v22 + 488) = v11 + 7490;
if ( v11 != 64 && v11 != 65 || dword_8D6F7C == 4 || v22 == LODWORD(dword_7A723B8) )
{
v7 = *(_WORD *)(v22 + 488);
v8 = sub_81AB71();
sub_81BA70((void *)v8, v11 + 6656, v7, v22 + 952, v22, 0, 0);
}
}
}
if ( (*(_BYTE *)(a2 + 11) & 1) == 1 )
{
*(_WORD *)(v22 + 488) = 7494;
if ( a4 )
sub_4ABF7C(226, v22 + 952, v22 + 700, a4, 0);
else
sub_4AC2C4(226, v22 + 952, v22 + 700, 0);
}
if ( (*(_BYTE *)(a2 + 11) & 4) == 4 )
{
*(_WORD *)(v22 + 488) = 7527;
v26 = *(_BYTE *)(a2 + 15) & 3;
if ( (*(_BYTE *)(a2 + 16) & 1) == 1 )
v26 = 4;
*(_BYTE *)(v22 + 491) = v26;
switch ( v26 )
{
case 1:
if ( a4 )
sub_4ABF7C(384, v22 + 952, v22 + 700, a4, 0);
else
sub_4AC2C4(384, v22 + 952, v22 + 700, 0);
break;
case 2:
if ( a4 )
sub_4ABF7C(386, v22 + 952, v22 + 700, a4, 0);
else
sub_4AC2C4(386, v22 + 952, v22 + 700, 0);
break;
case 4:
if ( a4 )
sub_4ABF7C(387, v22 + 952, v22 + 700, a4, 0);
else
sub_4AC2C4(387, v22 + 952, v22 + 700, 0);
break;
default:
if ( a4 )
sub_4ABF7C(385, v22 + 952, v22 + 700, a4, 0);
else
sub_4AC2C4(385, v22 + 952, v22 + 700, 0);
break;
}
}
sub_4997AD(v22);
if ( (((signed int)*(_BYTE *)(a2 + 11) >> 1) & 1) == 1 )
{
if ( (signed int)*(_BYTE *)(v22 + 23) <= 0 || (signed int)*(_BYTE *)(v22 + 23) > 3 )
*(_BYTE *)(v22 + 23) = 4;
}
else
{
if ( (signed int)*(_BYTE *)(v22 + 23) <= 0 || (signed int)*(_BYTE *)(v22 + 23) > 3 )
*(_BYTE *)(v22 + 23) = 0;
}
v21 = *(_BYTE *)(a2 + 7) + (*(_BYTE *)(a2 + 6) << 8) + (*(_BYTE *)(a2 + 5) << 16);
*(_BYTE *)(v22 + 394) = sub_4FDEB0(*(_BYTE *)(a2 + 7) & 7);
*(_BYTE *)(v22 + 426) = sub_4FDEB0((v21 >> 3) & 7);
*(_BYTE *)(v22 + 458) = 0;
result = v22;
*(_BYTE *)(v22 + 490) = 0;
if ( !*(_BYTE *)(v22 + 15) )
{
v16 = 32 * (*(_BYTE *)(a2 + 12) & 0xF)
+ 16 * (((signed int)*(_BYTE *)(a2 + 8) >> 7) & 1)
+ ((signed int)*(_BYTE *)(a2 + 2) >> 4);
if ( v16 == 511 )
*(_WORD *)(v22 + 232) = (unsigned __int8)sub_504A69(*(_BYTE *)(v22 + 19)) + 9036;
else
*(_WORD *)(v22 + 232) = v16 + 4418;
v17 = 32 * (((signed int)*(_BYTE *)(a2 + 13) >> 4) & 0xF)
+ 16 * (((signed int)*(_BYTE *)(a2 + 8) >> 6) & 1)
+ (*(_BYTE *)(a2 + 2) & 0xF);
if ( v17 == 511 )
*(_WORD *)(v22 + 264) = (unsigned __int8)sub_504A69(*(_BYTE *)(v22 + 19)) + 9056;
else
*(_WORD *)(v22 + 264) = v17 + 4930;
v18 = 32 * (*(_BYTE *)(a2 + 13) & 0xF)
+ 16 * (((signed int)*(_BYTE *)(a2 + 8) >> 5) & 1)
+ ((signed int)*(_BYTE *)(a2 + 3) >> 4);
if ( v18 == 511 )
*(_WORD *)(v22 + 296) = (unsigned __int8)sub_504A69(*(_BYTE *)(v22 + 19)) + 9076;
else
*(_WORD *)(v22 + 296) = v18 + 5442;
v19 = 32 * (((signed int)*(_BYTE *)(a2 + 14) >> 4) & 0xF)
+ 16 * (((signed int)*(_BYTE *)(a2 + 8) >> 4) & 1)
+ (*(_BYTE *)(a2 + 3) & 0xF);
if ( v19 == 511 )
*(_WORD *)(v22 + 328) = (unsigned __int8)sub_504A69(*(_BYTE *)(v22 + 19)) + 9096;
else
*(_WORD *)(v22 + 328) = v19 + 5954;
v20 = 32 * (*(_BYTE *)(a2 + 14) & 0xF)
+ 16 * (((signed int)*(_BYTE *)(a2 + 8) >> 3) & 1)
+ ((signed int)*(_BYTE *)(a2 + 4) >> 4);
if ( v20 == 511 )
*(_WORD *)(v22 + 360) = (unsigned __int8)sub_504A69(*(_BYTE *)(v22 + 19)) + 9116;
else
*(_WORD *)(v22 + 360) = v20 + 6466;
*(_BYTE *)(v22 + 234) = sub_4FDEB0((v21 >> 6) & 7);
*(_BYTE *)(v22 + 266) = sub_4FDEB0((v21 >> 9) & 7);
*(_BYTE *)(v22 + 298) = sub_4FDEB0((v21 >> 12) & 7);
*(_BYTE *)(v22 + 330) = sub_4FDEB0((v21 >> 15) & 7);
*(_BYTE *)(v22 + 362) = sub_4FDEB0((v21 >> 18) & 7);
*(_BYTE *)(v22 + 235) = (*(_BYTE *)(a2 + 9) & 0x80) >> 7;
*(_BYTE *)(v22 + 267) = (*(_BYTE *)(a2 + 9) & 0x40) >> 6;
*(_BYTE *)(v22 + 299) = (*(_BYTE *)(a2 + 9) & 0x20) >> 5;
*(_BYTE *)(v22 + 331) = (*(_BYTE *)(a2 + 9) & 0x10) >> 4;
*(_BYTE *)(v22 + 363) = (*(_BYTE *)(a2 + 9) & 8) >> 3;
*(_BYTE *)(v22 + 236) = (*(_BYTE *)(a2 + 10) & 0x80) >> 7;
*(_BYTE *)(v22 + 268) = (*(_BYTE *)(a2 + 10) & 0x40) >> 6;
*(_BYTE *)(v22 + 300) = (*(_BYTE *)(a2 + 10) & 0x20) >> 5;
*(_BYTE *)(v22 + 332) = (*(_BYTE *)(a2 + 10) & 0x10) >> 4;
*(_BYTE *)(v22 + 364) = (*(_BYTE *)(a2 + 10) & 8) >> 3;
*(_BYTE *)(v22 + 395) = (*(_BYTE *)(a2 + 9) & 4) >> 2;
*(_BYTE *)(v22 + 427) = (*(_BYTE *)(a2 + 9) & 2) >> 1;
*(_BYTE *)(v22 + 396) = (*(_BYTE *)(a2 + 10) & 4) >> 2;
*(_BYTE *)(v22 + 428) = (*(_BYTE *)(a2 + 10) & 2) >> 1;
*(_BYTE *)(v22 + 22) = *(_BYTE *)(a2 + 10) & 1;
sub_49033A(v22);
result = sub_4FD4FD(v22);
}
}
return result;
}
all offsets attached !
-
3 Attachment(s)
Re: MakePreviewCharSet Of Client (Source)
@mauro07 - i test your MakePreviewCharSet 1.03k
1 problem:
SetHook((LPVOID)gObjMakePreviewCharSet, (LPVOID)0x00611613, ASM::CALL); //Main 1.03Y+ JPN: 006317A3 ; Main 1.03k JPN: 00611613 [CRASH Main in Login Server]
Elf Soldier OK / Char Bug[Ivisible] / Wings Bug Opts
Attachment 127855Attachment 127856Attachment 127857
-
Re: MakePreviewCharSet Of Client (Source)
Quote:
Originally Posted by
VeltonD
@mauro07 - i test your MakePreviewCharSet 1.03k
1 problem:
SetHook((LPVOID)gObjMakePreviewCharSet, (LPVOID)0x00611613, ASM::CALL); //Main 1.03Y+ JPN: 006317A3 ; Main 1.03k JPN: 00611613 [CRASH Main in Login Server]
Elf Soldier OK / Char Bug[Ivisible] / Wings Bug Opts
Attachment 127855Attachment 127856Attachment 127857
Char bug is reladet to LevelSmallConvert function.
dont use the the function he gave you !
use this function cuz you dont have +15 items
PHP Code:
BYTE gLevelSmallConvert(int SmallValue)
{
BYTE ResultValue;
// ----
switch(SmallValue)
{
case 0:
ResultValue = 0;
break;
// --
case 1:
ResultValue = 3;
break;
// --
case 2:
ResultValue = 5;
break;
// --
case 3:
ResultValue = 7;
break;
// --
case 4:
ResultValue = 9;
break;
// --
case 5:
ResultValue = 11;
break;
// --
case 6:
ResultValue = 12;
break;
// --
case 7:
ResultValue = 13;
break;
// --
default:
ResultValue = 0;
break;
}
// ----
return ResultValue;
}
just replace it .
if you need more help add my to your skype .
check the last 2 function if its crashing again . (monro07 make a mistake there)
Full decompile function gObjMakeCharSet
PHP Code:
int __cdecl sub_4FDFE0(int a1, int a2, int a3, int a4)
{
int result; // eax@4
int v5; // ST10_4@34
int v6; // eax@34
int v7; // ST04_4@57
int v8; // eax@57
signed int v9; // [sp+14h] [bp-30h]@59
int v10; // [sp+18h] [bp-2Ch]@59
signed __int16 v11; // [sp+1Ch] [bp-28h]@48
char v12; // [sp+20h] [bp-24h]@44
int v13; // [sp+24h] [bp-20h]@12
__int16 v14; // [sp+34h] [bp-10h]@5
__int16 v15; // [sp+34h] [bp-10h]@8
__int16 v16; // [sp+34h] [bp-10h]@104
__int16 v17; // [sp+34h] [bp-10h]@107
__int16 v18; // [sp+34h] [bp-10h]@110
__int16 v19; // [sp+34h] [bp-10h]@113
__int16 v20; // [sp+34h] [bp-10h]@116
signed int v21; // [sp+38h] [bp-Ch]@103
int v22; // [sp+3Ch] [bp-8h]@2
unsigned __int8 v23; // [sp+40h] [bp-4h]@17
unsigned __int8 v24; // [sp+40h] [bp-4h]@29
unsigned __int8 v25; // [sp+40h] [bp-4h]@36
char v26; // [sp+40h] [bp-4h]@75
if ( a3 )
v22 = a3;
else
v22 = 1236 * a1 + dword_7A7239C;
result = v22 + 700;
if ( *(_DWORD *)(v22 + 748) == 826 )
{
v14 = *(_BYTE *)a2 | (unsigned __int16)(16 * (unsigned __int8)(*(_BYTE *)(a2 + 11) & 0xF0));
if ( v14 == 4095 )
{
*(_WORD *)(v22 + 392) = -1;
*(_BYTE *)(v22 + 395) = 0;
*(_BYTE *)(v22 + 396) = 0;
}
else
{
*(_WORD *)(v22 + 392) = v14 + 834;
}
v15 = *(_BYTE *)(a2 + 1) | (unsigned __int16)(16 * (unsigned __int8)(*(_BYTE *)(a2 + 12) & 0xF0));
if ( v15 == 4095 )
{
*(_WORD *)(v22 + 424) = -1;
*(_BYTE *)(v22 + 427) = 0;
*(_BYTE *)(v22 + 428) = 0;
}
else
{
if ( sub_45A030(*(_BYTE *)(v22 + 19)) != 4 || v15 != 2565 )
{
*(_WORD *)(v22 + 424) = v15 + 834;
}
else
{
v13 = sub_4A3820(dword_7AB3518 + 4413);
sub_4A2AD6(v22);
if ( !sub_490280(dword_8C5CF8) )
sub_4A4750(*(_DWORD *)(v22 + 600), v13);
}
}
if ( (((signed int)*(_BYTE *)(a2 + 4) >> 2) & 3) == 3 )
{
v23 = *(_BYTE *)(a2 + 8) & 7;
if ( v23 )
{
switch ( v23 )
{
case 5u:
*(_WORD *)(v22 + 456) = 7520;
break;
case 6u:
*(_WORD *)(v22 + 456) = 7019;
break;
case 7u:
*(_WORD *)(v22 + 456) = 7020;
break;
default:
*(_WORD *)(v22 + 456) = v23 + 6980;
break;
}
}
else
{
*(_WORD *)(v22 + 456) = -1;
*(_BYTE *)(v22 + 459) = 0;
*(_BYTE *)(v22 + 460) = 0;
}
}
else
{
*(_WORD *)(v22 + 456) = (((signed int)*(_BYTE *)(a2 + 4) >> 2) & 3) + 6978;
}
v24 = ((signed int)*(_BYTE *)(a2 + 15) >> 2) & 7;
if ( (((signed int)*(_BYTE *)(a2 + 15) >> 2) & 7) > 0 )
{
if ( v24 == 6 )
*(_WORD *)(v22 + 456) = 7021;
else
*(_WORD *)(v22 + 456) = v24 + 7013;
}
if ( a4 )
{
*(_BYTE *)(a4 + 4) = 0;
}
else
{
sub_4ABEB0(v22 + 700);
v5 = *(_WORD *)(v22 + 488);
v6 = sub_81AB71();
sub_81BDA7((void *)v6, v22, v5, 1);
}
v25 = *(_BYTE *)(a2 + 4) & 3;
if ( v25 == 3 )
{
if ( (*(_BYTE *)(a2 + 9) & 1) == 1 )
{
*(_WORD *)(v22 + 488) = 7493;
if ( a4 )
sub_4ABF7C(323, v22 + 952, v22 + 700, a4, 0);
else
sub_4AC2C4(323, v22 + 952, v22 + 700, 0);
}
else
{
*(_WORD *)(v22 + 488) = -1;
*(_BYTE *)(v22 + 491) = 0;
*(_BYTE *)(v22 + 492) = 0;
}
}
else
{
v12 = *(_BYTE *)(a2 + 15) & 0xE0;
if ( v12 != 32 && v12 != 64 && v12 != 128 && v12 != 224 )
{
*(_WORD *)(v22 + 488) = v25 + 7490;
v10 = 0;
v9 = 1;
if ( v25 )
{
if ( v25 == 2 )
{
v10 = 233;
}
else
{
if ( v25 == 3 )
v10 = 323;
else
v9 = 0;
}
}
else
{
v10 = 7490;
}
if ( v9 == 1 )
{
if ( a4 )
sub_4ABF7C(v10, v22 + 952, v22 + 700, a4, 0);
else
sub_4AC2C4(v10, v22 + 952, v22 + 700, 0);
}
}
else
{
v11 = 0;
switch ( v12 )
{
case 0x20:
v11 = 64;
break;
case 0x40:
v11 = 65;
break;
case 0x80:
v11 = 67;
break;
case 0xE0:
v11 = 80;
break;
default:
break;
}
*(_WORD *)(v22 + 488) = v11 + 7490;
if ( v11 != 64 && v11 != 65 || dword_8D6F7C == 4 || v22 == LODWORD(dword_7A723B8) )
{
v7 = *(_WORD *)(v22 + 488);
v8 = sub_81AB71();
sub_81BA70((void *)v8, v11 + 6656, v7, v22 + 952, v22, 0, 0);
}
}
}
if ( (*(_BYTE *)(a2 + 11) & 1) == 1 )
{
*(_WORD *)(v22 + 488) = 7494;
if ( a4 )
sub_4ABF7C(226, v22 + 952, v22 + 700, a4, 0);
else
sub_4AC2C4(226, v22 + 952, v22 + 700, 0);
}
if ( (*(_BYTE *)(a2 + 11) & 4) == 4 )
{
*(_WORD *)(v22 + 488) = 7527;
v26 = *(_BYTE *)(a2 + 15) & 3;
if ( (*(_BYTE *)(a2 + 16) & 1) == 1 )
v26 = 4;
*(_BYTE *)(v22 + 491) = v26;
switch ( v26 )
{
case 1:
if ( a4 )
sub_4ABF7C(384, v22 + 952, v22 + 700, a4, 0);
else
sub_4AC2C4(384, v22 + 952, v22 + 700, 0);
break;
case 2:
if ( a4 )
sub_4ABF7C(386, v22 + 952, v22 + 700, a4, 0);
else
sub_4AC2C4(386, v22 + 952, v22 + 700, 0);
break;
case 4:
if ( a4 )
sub_4ABF7C(387, v22 + 952, v22 + 700, a4, 0);
else
sub_4AC2C4(387, v22 + 952, v22 + 700, 0);
break;
default:
if ( a4 )
sub_4ABF7C(385, v22 + 952, v22 + 700, a4, 0);
else
sub_4AC2C4(385, v22 + 952, v22 + 700, 0);
break;
}
}
sub_4997AD(v22);
if ( (((signed int)*(_BYTE *)(a2 + 11) >> 1) & 1) == 1 )
{
if ( (signed int)*(_BYTE *)(v22 + 23) <= 0 || (signed int)*(_BYTE *)(v22 + 23) > 3 )
*(_BYTE *)(v22 + 23) = 4;
}
else
{
if ( (signed int)*(_BYTE *)(v22 + 23) <= 0 || (signed int)*(_BYTE *)(v22 + 23) > 3 )
*(_BYTE *)(v22 + 23) = 0;
}
v21 = *(_BYTE *)(a2 + 7) + (*(_BYTE *)(a2 + 6) << 8) + (*(_BYTE *)(a2 + 5) << 16);
*(_BYTE *)(v22 + 394) = sub_4FDEB0(*(_BYTE *)(a2 + 7) & 7);
*(_BYTE *)(v22 + 426) = sub_4FDEB0((v21 >> 3) & 7);
*(_BYTE *)(v22 + 458) = 0;
result = v22;
*(_BYTE *)(v22 + 490) = 0;
if ( !*(_BYTE *)(v22 + 15) )
{
v16 = 32 * (*(_BYTE *)(a2 + 12) & 0xF)
+ 16 * (((signed int)*(_BYTE *)(a2 + 8) >> 7) & 1)
+ ((signed int)*(_BYTE *)(a2 + 2) >> 4);
if ( v16 == 511 )
*(_WORD *)(v22 + 232) = (unsigned __int8)sub_504A69(*(_BYTE *)(v22 + 19)) + 9036;
else
*(_WORD *)(v22 + 232) = v16 + 4418;
v17 = 32 * (((signed int)*(_BYTE *)(a2 + 13) >> 4) & 0xF)
+ 16 * (((signed int)*(_BYTE *)(a2 + 8) >> 6) & 1)
+ (*(_BYTE *)(a2 + 2) & 0xF);
if ( v17 == 511 )
*(_WORD *)(v22 + 264) = (unsigned __int8)sub_504A69(*(_BYTE *)(v22 + 19)) + 9056;
else
*(_WORD *)(v22 + 264) = v17 + 4930;
v18 = 32 * (*(_BYTE *)(a2 + 13) & 0xF)
+ 16 * (((signed int)*(_BYTE *)(a2 + 8) >> 5) & 1)
+ ((signed int)*(_BYTE *)(a2 + 3) >> 4);
if ( v18 == 511 )
*(_WORD *)(v22 + 296) = (unsigned __int8)sub_504A69(*(_BYTE *)(v22 + 19)) + 9076;
else
*(_WORD *)(v22 + 296) = v18 + 5442;
v19 = 32 * (((signed int)*(_BYTE *)(a2 + 14) >> 4) & 0xF)
+ 16 * (((signed int)*(_BYTE *)(a2 + 8) >> 4) & 1)
+ (*(_BYTE *)(a2 + 3) & 0xF);
if ( v19 == 511 )
*(_WORD *)(v22 + 328) = (unsigned __int8)sub_504A69(*(_BYTE *)(v22 + 19)) + 9096;
else
*(_WORD *)(v22 + 328) = v19 + 5954;
v20 = 32 * (*(_BYTE *)(a2 + 14) & 0xF)
+ 16 * (((signed int)*(_BYTE *)(a2 + 8) >> 3) & 1)
+ ((signed int)*(_BYTE *)(a2 + 4) >> 4);
if ( v20 == 511 )
*(_WORD *)(v22 + 360) = (unsigned __int8)sub_504A69(*(_BYTE *)(v22 + 19)) + 9116;
else
*(_WORD *)(v22 + 360) = v20 + 6466;
*(_BYTE *)(v22 + 234) = sub_4FDEB0((v21 >> 6) & 7);
*(_BYTE *)(v22 + 266) = sub_4FDEB0((v21 >> 9) & 7);
*(_BYTE *)(v22 + 298) = sub_4FDEB0((v21 >> 12) & 7);
*(_BYTE *)(v22 + 330) = sub_4FDEB0((v21 >> 15) & 7);
*(_BYTE *)(v22 + 362) = sub_4FDEB0((v21 >> 18) & 7);
*(_BYTE *)(v22 + 235) = (*(_BYTE *)(a2 + 9) & 0x80) >> 7;
*(_BYTE *)(v22 + 267) = (*(_BYTE *)(a2 + 9) & 0x40) >> 6;
*(_BYTE *)(v22 + 299) = (*(_BYTE *)(a2 + 9) & 0x20) >> 5;
*(_BYTE *)(v22 + 331) = (*(_BYTE *)(a2 + 9) & 0x10) >> 4;
*(_BYTE *)(v22 + 363) = (*(_BYTE *)(a2 + 9) & 8) >> 3;
*(_BYTE *)(v22 + 236) = (*(_BYTE *)(a2 + 10) & 0x80) >> 7;
*(_BYTE *)(v22 + 268) = (*(_BYTE *)(a2 + 10) & 0x40) >> 6;
*(_BYTE *)(v22 + 300) = (*(_BYTE *)(a2 + 10) & 0x20) >> 5;
*(_BYTE *)(v22 + 332) = (*(_BYTE *)(a2 + 10) & 0x10) >> 4;
*(_BYTE *)(v22 + 364) = (*(_BYTE *)(a2 + 10) & 8) >> 3;
*(_BYTE *)(v22 + 395) = (*(_BYTE *)(a2 + 9) & 4) >> 2;
*(_BYTE *)(v22 + 427) = (*(_BYTE *)(a2 + 9) & 2) >> 1;
*(_BYTE *)(v22 + 396) = (*(_BYTE *)(a2 + 10) & 4) >> 2;
*(_BYTE *)(v22 + 428) = (*(_BYTE *)(a2 + 10) & 2) >> 1;
*(_BYTE *)(v22 + 22) = *(_BYTE *)(a2 + 10) & 1;
sub_49033A(v22);
result = sub_4FD4FD(v22);
}
}
return result;
}
to fix char bug change it :
PHP Code:
#define CS_START 1236
-
Re: MakePreviewCharSet Of Client (Source)
maybe someone will make this support 1.04d main ?
Edit: aechrim's main i mean
-
1 Attachment(s)
Re: MakePreviewCharSet Of Client (Source)
He was working in the Main Item +15 1.03K, However I will need help by the way = /, No Game Brightness and normal, now is +0 invetorio
Attachment 127899
Quote:
#define CS_START 1236
Crash :S
-
2 Attachment(s)
Re: MakePreviewCharSet Of Client (Source)
Hi guys, i have some problems with this on a season3 main. All my offsets are right, also i adapted the gObjMakePreviewCharSet function for season3 main (no panda pet, no summoner wings etc). My problem is related to the size of Preview struct. Can someone please tell me how i can find the right size for Preview struct ?
Thank you.
-
Re: MakePreviewCharSet Of Client (Source)
Quote:
Originally Posted by
-=DarkSim=-
sir what software do you used to imply this thing?. im new to develop and i want to learn it more, by the descent tutorials. pls help me.
-
Re: MakePreviewCharSet Of Client (Source)
someone has the research to offset the main 1.03k (1.03.11) JAPAN because mauro 07 the wrong that has some offset from the main crash!
-
Re: MakePreviewCharSet Of Client (Source)
Caothuphutho, mauro07 or DarkSim could help find the MakePreviewCharSet in main (0.97.02) already includes the wings but can not find the function to fix the visual bug. In gamesrever already fixed with only the main even, anyone who can help I am grateful.
http://i.imgur.com/smK1xWV.jpg?1
Dowload the main (0.97.02)
-
Re: MakePreviewCharSet Of Client (Source)
DarkHaziel post fix new wings in server?
Mauro07 Source Wings Custom Main 1.03k
http://www.mediafire.com/?98vhw80b42boph1
Notei que é brasileiro, Pode postar o Fix do Bug Visual?
-
Re: MakePreviewCharSet Of Client (Source)
@ - = DarkSim = -: Can you share or offset to correct Main 1.07x
@ - = DarkSim = -: Sorry for trouble, can u help me With This proplem!?
darksim in gameserver visual function to fix the bug wings is the only
@ - = DarkSim = -: I got proplem with Visual bug in Selected Character
MakePreviewCharSet?
Created dll to Main version added 1.07x all about: Main.dll src for Wings 4, Main.dll MakePreviewCharSet Jpn Client 1.03.11 Source Offsets, and yet still do not see the wings to select character
Ingles:
Error wings visual character select , Bug disappears trade wings , select character not seen the wings /
In aggregate gs DsProtocol.cpp and user.cpp
DsProtocol.cpp = JGPGetCharList
user.cpp = gObjMakePreviewCharSet
- JGPGetCharList (para la vista previa switch)
Código:
if (TempInventory [7]> = 49 && TempInventory [7] <= 59) { pCList.CharSet [5] | = CS_SET_WING1 (3); pCList.CharSet [17] | = (BYTE) (TempInventory [7] - 49 + 1) << 2; }
- GObjMakePreviewCharSet (por juego)
Código:
if (lpObj-> pInventory [7]. m_Type> = ITEMGET (12, 49) && lpObj-> pInventory [7]. m_Type <= ITEMGET (12, 59)) { lpObj-> CharSet [5] | = CS_SET_WING1 (3); lpObj-> CharSet [17] | = (. lpObj-> pInventory [7] m_Type - ITEMGET (12, 49) + 1) << 2; }
Please something missing to display the wings to select character
Español:
Creado dll para Main version 1.07x y agregado todo sobre : Main.dll src for Wings 4 , Main.dll MakePreviewCharSet Client Source Offsets 1.03.11 Jpn , y aun asi sigue sin verse las alas al seleccionar personaje
Error visual seleccionar personaje wings
Bug trade desaparece wings
seleccionar personaje no se observa las alas
En gs agregado en DsProtocol.cpp y user.cpp
DsProtocol.cpp = JGPGetCharList
user.cpp = gObjMakePreviewCharSet
- JGPGetCharList (para la vista previa switch)
Código:
if (TempInventory [7]> = 49 && TempInventory [7] <= 59) { pCList.CharSet [5] | = CS_SET_WING1 (3); pCList.CharSet [17] | = (BYTE) (TempInventory [7] - 49 + 1) << 2; }
- GObjMakePreviewCharSet (por juego)
Código:
if (lpObj-> pInventory [7]. m_Type> = ITEMGET (12, 49) && lpObj-> pInventory [7]. m_Type <= ITEMGET (12, 59)) { lpObj-> CharSet [5] | = CS_SET_WING1 (3); lpObj-> CharSet [17] | = (. lpObj-> pInventory [7] m_Type - ITEMGET (12, 49) + 1) << 2; }
Por favor algo falta para que se muestre las alas al seleccionar personaje
@ - = DarkSim = -: ¿Puede compartir u offset para corregir Main 1.07x
-
Re: MakePreviewCharSet Of Client (Source)
Quote:
Originally Posted by
DarkHaziel
Caothuphutho, mauro07 or DarkSim could help find the MakePreviewCharSet in main (0.97.02) already includes the wings but can not find the function to fix the visual bug. In gamesrever already fixed with only the main even, anyone who can help I am grateful.
http://i.imgur.com/smK1xWV.jpg?1
Dowload the main (0.97.02)
------------------------------------------
Can anybody help with this?
-
Re: MakePreviewCharSet Of Client (Source)
DarkSim, is there any program to used for this, like .exe? an application or it just a PHP? pleased can you tell me, add me on yahoo mail: Warzz_008@yahoo.com
-
Re: MakePreviewCharSet Of Client (Source)
I asked to be able to add new fields need to be corrected in the gameserver?
-
Re: MakePreviewCharSet Of Client (Source)
who can share source to client and server julia 4.6 (1.03k jpn) ?
-
Re: MakePreviewCharSet Of Client (Source)
Need help with main 1.04.10 (1.04j)...
Character Select BUG..
Character is Fly but dont show WINGS...
In game all correct.. After switch of map too
-
Re: MakePreviewCharSet Of Client (Source)
Quote:
Originally Posted by
Jareksniper
Need help with main 1.04.10 (1.04j)...
Character Select BUG..
Character is Fly but dont show WINGS...
In game all correct.. After switch of map too
maybe you can share your source for 1.04.10 ?
-
Re: MakePreviewCharSet Of Client (Source)
Yes why not :) I would send it when i weel be back from work ;)
I was fixing wings in Gameserver and Main...
I was using fixes of 3rd wings and summoner wings from 7.11.66b
But it BUUUUUGGED...
-
4 Attachment(s)
Re: MakePreviewCharSet Of Client (Source)
-=DarkSim=-
i have problems for Pets(Ex:Fenrir & Dark Raven)
Pet effects incorrects position and Pet Black,Blue & Gold not excellent in invetarion
Main 1.03.07 VTM
Attachment 134522Attachment 134525
Attachment 134523Attachment 134524
-
Re: MakePreviewCharSet Of Client (Source)
can someone share client 1.03Y JPN ?
-
Re: MakePreviewCharSet Of Client (Source)
please offset 1.04d of
Code:
#define SetItemSpecialStat ((int(*)(short ItemID, int Arg2, BYTE SpecialOption, BYTE SpecialValue, int Arg5)) 0x5A6360) //5C0DC0 1.03Y+
#define oSetItemSpecialStat 0x005AF065 //005CA0B0 1.03Y+
thank you very much
sorry bad english
-
Re: MakePreviewCharSet Of Client (Source)
i use source CharSet of -=darksim=- for main 1.04J not work.
to -=darksim=- you can fix for main1.04j (ss3.1)
-
Re: MakePreviewCharSet Of Client (Source)
Guys, sure, please stop ask about "u can make research? u can fix it for my main.exe? please please?".
For own main.exe need research struct positions, offsets / calls and etc, maybe in some main.exe remake function elements.
If u can't make it - go out, this sources not help u in create own wings.
And stop write me in PM and Skype please, i can't help if u don't know how it work.
-
Re: MakePreviewCharSet Of Client (Source)
-=DarkSim=-, That's right, Guys want much in hand ¬ ¬ '
I got to my main.exe, However I have some questions that I think is not encomodo, Since + / - 90% of that Source is Ok for Me
-
Re: MakePreviewCharSet Of Client (Source)
Quote:
Originally Posted by
daicahieu
please offset 1.04d of
Code:
#define SetItemSpecialStat ((int(*)(short ItemID, int Arg2, BYTE SpecialOption, BYTE SpecialValue, int Arg5)) 0x5A6360) //5C0DC0 1.03Y+
#define oSetItemSpecialStat 0x005AF065 //005CA0B0 1.03Y+
thank you very much
sorry bad english
need for help....thank all
-
Re: MakePreviewCharSet Of Client (Source)
Hello And for 1.03 (JPN) have a working source code without visual bug? I in any case after a teleport, or a change in character - there is a bug (((