Skilled Illusionist
- Joined
- Mar 20, 2009
- Messages
- 374
- Reaction score
- 378
MainFunction
Misc.
Code:
int* KSummon::Summon(int index, int x, int y, int map){
tagPOINT point;
CGenMonster thisGenMonster;
int* thisInitMonster;
int* thisMonster = 0;
DWORD Offset;
DWORD Offset2;
DWORD Unknown;
point.x = x;
point.y = y;
CriticalSectionEnter((void*)0x4E182C);
Unknown0((void*)(g_mInitMonsterMap), (int)&Offset, (int)&index);
Offset2 = Unknown1((void*)(g_mInitMonsterMap), (int)&Unknown);
if (!Unknown2(&Offset, Offset2)){
CriticalSectionLeave((void*)0x4E182C);
return 0;
}else{
thisInitMonster = (int*)*(DWORD*)(Unknown3(&Offset) + 4);
thisGenMonster = SetGenMonster(index, x, y, map);
thisMonster = NewMonster(thisInitMonster, &thisGenMonster);
if (thisMonster){
SetXY(thisMonster, &point);
SetProperty(thisMonster, thisInitMonster);
CriticalSectionLeave((void*)0x4E182C);
Lock((int)thisMonster);
point.x = x >> 5;
point.y = y >> 5;
if (GetCellMap(*(void **)(thisMonster + 80), thisMonster, &point)){
AddMonster(thisMonster, 0);
WriteInSight((void*)thisMonster, S2C_CREATEMONSTER, "wdddwddIIsbdsIIb",
*(WORD*)((int)thisInitMonster + 60),//index
*(DWORD*)((int)thisMonster + 28),//id
*(DWORD*)((int)thisMonster + 332),//x
*(DWORD*)((int)thisMonster + 336),//y
*(WORD*)((int)thisMonster + 348),//dir
*(DWORD*)((int)thisMonster + 272),//curhp
GetMaxHp(thisMonster),//maxhp
(__int64)(*(DWORD*)((int)thisMonster + 280)),//gstate
*(__int64*)((int)thisMonster + 288),//gstate64
(char*)GetGuildName(thisMonster),//guildname
*(BYTE*)((int)thisInitMonster + 64),//race
*(DWORD*)((int)thisMonster + 524),//gid
(char*)GetOperatorName(thisMonster),//operatorname
(__int64)0,
(__int64)0, 0);
Unlock((int)thisMonster);
}
else{
Unlock((int)thisMonster);
if (thisMonster)
(**(void(__thiscall ***)(int*, DWORD))thisMonster)(thisMonster, 1);
}
}
CriticalSectionLeave((void*)0x004E182C);
}
return thisMonster;
}
Misc.
Code:
#define g_mInitMonsterMap 0x4E1820
#define S2C_CREATEMONSTER 51
//####
//InitMonsterMap
int(__thiscall* Unknown0)(void* _this, int a2, int a3) = (int(__thiscall*)(void*, int, int))0x0044AE20;
int(__thiscall* Unknown1)(void* _this, int a2) = (int(__thiscall*)(void*, int))0x00430C20;
bool(__thiscall* Unknown2)(void* _this, int a2) = (bool(__thiscall*)(void*, int))0x0047D070;
int(__thiscall* Unknown3)(void* _this) = (int(__thiscall*)(void*))0x00420250;
//####
static void(__thiscall *CriticalSectionEnter)(void *Section) = (void(__thiscall*)(void*))0x00423640;
static void(__thiscall *CriticalSectionLeave)(void *Section) = (void(__thiscall*)(void*))0x004236d0;
static int* (__cdecl *NewMonster)(int* InitMonster, void* GenMonster) = (int* (__cdecl*)(int*, void*))0x00439200;
static int(__thiscall *SetXY)(int* nObject, void* point) = (int(__thiscall*)(int*, void*))0x0040B110;
static int(__thiscall *SetProperty)(void* thisMonster, void* thisInitMonster) = (int(__thiscall*)(void*, void*))0x0043CEA0;
static void(__thiscall *Lock)(int nObject) = (void(__thiscall*)(int))0x00412e90;
static void(__thiscall *Unlock)(int nObject) = (void(__thiscall*)(int))0x00412eb0;
static unsigned long(__thiscall *GetCellMap)(void *_this, void*, void* point) = (unsigned long(__thiscall*)(void*, void*, void*))0x00491360;
static LONG(__thiscall *AddMonster)(void* thisMonster, int a5) = (LONG(__thiscall*)(void*, int))0x0043CFA0;
static void(__cdecl *WriteInSight)(void *Char, unsigned char Type, const char* Format, ...) = (void(__cdecl*)(void*, unsigned char, const char*, ...))0x0040b9e0;
static unsigned long(__thiscall *GetGuildName)(void *Monster) = (unsigned long(__thiscall*)(void*))0x00438eb0;
static int(__thiscall *GetMaxHp)(void *Char) = (int(__thiscall*)(void*))0x0043A200;
static unsigned long(__thiscall *GetOperatorName)(void *Monster) = (unsigned long(__thiscall*)(void*))0x0043a720;
enum CGenMonsterEx{
nIndex = 8,
nMap,
nArea,
nMax,
nUnknown1,
nLive,
nLeft,
nTop,
nRight,
nBottom,
nSMap,
nUnknown2,
nCycle,
nUnknown3
};
struct CGenMonster{
int s_gen[22];
};
CGenMonster SetGenMonster(int index, int x, int y, int map){
CGenMonster GenMonster;
ZeroMemory(&GenMonster, sizeof GenMonster);
GenMonster.s_gen[CGenMonsterEx::nIndex] = index;
GenMonster.s_gen[CGenMonsterEx::nMap] = map;
GenMonster.s_gen[CGenMonsterEx::nArea] = -1;
GenMonster.s_gen[CGenMonsterEx::nMax] = 1;
GenMonster.s_gen[CGenMonsterEx::nLive] = 1;
GenMonster.s_gen[CGenMonsterEx::nLeft] = x;
GenMonster.s_gen[CGenMonsterEx::nTop] = y;
GenMonster.s_gen[CGenMonsterEx::nRight] = x;
GenMonster.s_gen[CGenMonsterEx::nBottom] = y;
GenMonster.s_gen[CGenMonsterEx::nSMap] = *(DWORD*)0x4E2738;
GenMonster.s_gen[CGenMonsterEx::nUnknown2] = GetTickCount();
GenMonster.s_gen[CGenMonsterEx::nCycle] = 1000;
return GenMonster;
}
//Old Engine WriteInSight
WriteInSight((void*)thisMonster, S2C_CREATEMONSTER, "wdddwddIIsbds",
*(WORD*)((int)thisInitMonster + 60),//index
*(DWORD*)((int)thisMonster + 28),//id
*(DWORD*)((int)thisMonster + 332),//x
*(DWORD*)((int)thisMonster + 336),//y
*(WORD*)((int)thisMonster + 348),//dir
*(DWORD*)((int)thisMonster + 272),//curhp
GetMaxHp(thisMonster),//maxhp
(__int64)(*(DWORD*)((int)thisMonster + 280)),//gstate
*(__int64*)((int)thisMonster + 288),//gstate64
(char*)GetGuildName(thisMonster),//guildname
*(BYTE*)((int)thisInitMonster + 64),//race
*(DWORD*)((int)thisMonster + 524),//gid
(char*)GetOperatorName(thisMonster));//operatorname
Last edited: