
CGameServerClient.h (Ant's(Edited))
Code:
//S4League's CGameServerClient - This handles every packet sent to and received from the GameServer.
#pragma once
namespace S4
{
class CGameServerClient
{
public:
int32_t m_ReferenceCount; //4
uint8_t m_S2CStuff[16]; //8
class CGameServerS2C
{
public:
virtual void Function0();
virtual void Function1();
virtual void Function2();
virtual void Function3();
virtual void Function4();
virtual void Function5();
virtual void Function6();
virtual void Function7();
virtual void Function8();
virtual void Function9();
virtual void Function10();
virtual void Item_InventoryInfo_Ack(uint8_t a2,uint8_t *a3, std::vector<Item> * ItemBuffer);
virtual void Function12();
virtual void Function13();
virtual BOOL CSuccessCreateCharacterAck(uint8_t a2, uint32_t *a3, uint32_t *a4, uint32_t *a5, uint32_t *a6, uint32_t *a7);
virtual void Function15();
virtual void Function16();
virtual BOOL Item_UseItem_Ack(uint8_t a2,uint8_t * zero,uint8_t * char_id,uint8_t * slotid,uint64_t * itemid, uint8_t * equipid);
virtual BOOL Item_UpdateInventory_Ack(uint8_t a2, uint32_t * a3, Create_Item * Item);
virtual void Function19();
virtual void Function20();
virtual void Function21();
virtual void Function22();
virtual void Function23();
virtual void Function24();
virtual void Function25();
virtual void Function26();
virtual void Function27();
virtual void Function28();
virtual void Function29();
virtual void Function30();
virtual void Function31();
virtual void Function32();
virtual void Function33();
virtual void Function34();
virtual void Function35();
virtual void Function36();
virtual void Function37();
virtual void Function38();
virtual void Function39();
virtual void Function40();
virtual void Function41();
virtual void Function42();
virtual void Function43();
virtual void Function44();
virtual void Function45();
virtual void Function46();
virtual void Function47();
virtual void Function48();
virtual void Function49();
virtual void Function50();
virtual void Function51();
virtual void Function52();
virtual void Function53();
virtual void Function54();
virtual void Function55();
virtual void Function56();
virtual void Function57();
virtual void Function58();
virtual void Function59();
virtual void Function60();
virtual void Function61();
virtual void Function62();
virtual void Function63();
virtual void Function64();
virtual void Function65();
virtual void Function66();
virtual void Function67();
virtual void Function68();
virtual void Function69();
virtual BOOL Item_DiscardItem_Ack(uint8_t a2,uint32_t *zero, uint32_t * one , uint64_t * iid);
virtual void Function71();
virtual void Function72();
virtual void Function73();
virtual void Function74();
virtual void Function75();
virtual void Function76();
virtual void Function77();
virtual void Function78();
virtual void Function79();
virtual void Function80();
virtual void Function81();
virtual void Function82();
virtual void Function83();
virtual void Function84();
virtual void Function85();
virtual void Function86();
virtual void Function87();
virtual void Function88();
virtual void Function89();
virtual void Function90();
virtual void Function91();
virtual void Function92();
virtual void Function93();
virtual void Function94();
virtual void Function95();
virtual void Function96();
virtual void Function97();
virtual void Function98();
virtual void Function99();
virtual void Function100();
virtual void Function101();
virtual void Function102();
virtual void Function103();
virtual void Function104();
virtual void Function105();
virtual void Function106();
virtual void Function107();
virtual void Function108();
virtual void Function109();
virtual void Function110();
virtual void Function111();
virtual void Function112();
virtual void Function113();
virtual void Function114();
virtual void Function115();
virtual void Function116();
virtual void Function117();
virtual void Function118();
virtual void Function119();
virtual void Function120();
virtual void Function121();
virtual void Function122();
virtual void Function123();
virtual void Function124();
virtual void Function125();
virtual void Function126();
virtual void Function127();
virtual void Function128();
virtual void Function129();
virtual void Function130();
virtual void Function131();
virtual void Function132();
virtual void Function133();
virtual void Function134();
virtual void Function135();
virtual void Function136();
virtual void Function137();
virtual void Function138();
virtual void Function139();
virtual void Function140();
virtual void Function141();
virtual void Function142();
virtual void Function143();
virtual void Function144();
virtual void Function145();
virtual void Function146();
virtual void Function147();
virtual void Function148();
virtual void Function149();
virtual void Function150();
virtual void Function151();
virtual void Function152();
virtual void Function153();
virtual void Function154();
virtual void Function155();
virtual void Function156();
virtual void Function157();
virtual void Function158();
virtual void Function159();
virtual void Function160();
virtual void Function161();
virtual void Function162();
virtual void Function163();
virtual void Function164();
virtual void Function165();
virtual void Function166();
virtual void Function167();
virtual void Function168();
virtual void Function169();
virtual void Function170();
virtual void Function171();
virtual void Function172();
virtual void Function173();
virtual void Function174();
virtual void Function175();
virtual void Function176();
virtual void Function177();
virtual void Function178();
virtual void Function179();
virtual void Function180();
virtual void Function181();
virtual void Function182();
virtual void Function183();
virtual void Function184();
virtual void Function185();
virtual void Function186();
virtual void Function187();
virtual void Function188();
virtual void Function189();
virtual void Function190();
virtual void Function191();
virtual void Function192();
virtual void Function193();
virtual void Function194();
virtual void Function195();
virtual void Function196();
virtual BOOL Esper_Chip_Ack(uint8_t a2, uint32_t * a3, uint32_t * esperid);
virtual void Function198();
virtual void Function199();
virtual void Function200();
}m_GameServerS2C; //24
uint8_t m_S2CStuff_[36]; //28
class CGameServerC2S
{
public:
virtual void Function0();
virtual void Function1();
virtual void Function2();
virtual void Function3();
virtual void Function4();
virtual void Function5();
virtual bool Character_Create_Req(int8_t a2, int32_t * Proudnet, uint8_t * char_id, uint32_t * sex_id);
virtual void Function7();
virtual bool Character_Select_Req();
virtual void Function9();
virtual bool Character_Delete_Req(int8_t a2, int32_t * Proudnet, uint8_t * char_id);
virtual void Function11();
virtual void Function12();
virtual void Function13();
virtual void Function14();
virtual void Function15();
virtual void Function16();
virtual void Function17();
virtual void Function18();
virtual void Function19();
virtual void Item_UseItem_Req(uint8_t a2, int32_t * Proudnet, uint8_t * equip_id, uint8_t * char_id, uint8_t * slot_id,uint64_t * item_id);
}m_GameServerC2S; //64 //64
uint8_t m_SC2Stuff__[16];
class CGameRuleC2S
{
public:
virtual void Function0();
virtual void Function1();
virtual void Function2();
virtual bool RMI_CMessageSend(int8_t* remotes, int32_t remoteCount, uintptr_t rmiContext, uintptr_t Message, LPCWSTR RMI_Name, int32_t RMI_ID);
}m_GameRuleC2S;
};
}
Code:
#pragma once
#include <iostream>
#include <string>
#include "Update.h"
#include "S4 League.h"
BOOL __fastcall hk_RMI_CMessageSend(uintptr_t * thispointer, void * edx, int8_t* a2, int32_t a3, int32_t a4, int32_t a5, int32_t a6, int32_t a7)
{
if (a7 == Game_EquipCheck_Req || a7 == Room_ReadyRound_Req_2 || a7 == Room_BeginRound_Req_2 || a7 == Room_IntrudeRound_Req_2)
{
uint8_t start_offset;
switch (a7)
{
case Room_IntrudeRound_Req_2:
case Game_EquipCheck_Req:
start_offset = 0x2;
break;
case Room_ReadyRound_Req_2:
case Room_BeginRound_Req_2:
start_offset = 0x3;
break;
}
uintptr_t current_pos = *reinterpret_cast<uintptr_t*> (*reinterpret_cast<uintptr_t*>(a5+0x8)+0x8)+start_offset;
size_t Size = *reinterpret_cast<size_t*> (*reinterpret_cast<uintptr_t*>(a5+0x8)+0xC);
*reinterpret_cast<uint32_t*>(current_pos+Size-0xC-start_offset) = EsperID::NONE;
for (int i = 0; i != 12; i++)
{
ZeroMemory((DWORD*)current_pos, sizeof(uint64_t));
uint32_t Effect = *reinterpret_cast<uint32_t*>(current_pos + 0x10);
if (Effect != 0)
{
Effect *= 0x4;
}
current_pos += Effect + 0x1C;
}
}
return VT_RMI_CMessageSend(thispointer, a2, a3, a4, a5, a6, a7);
}
BOOL __fastcall hk_Character_CurrentItemInfo_Ack(uintptr_t* thispointer, void * edx, uint8_t a2, uint8_t* a3, uint8_t* char_id, std::vector<Character_Item_Buffer>* Weapon, std::vector<Character_Item_Buffer>* Skill, std::vector<Character_Item_Buffer>* Clothes)
{
uint8_t equip_id = 2;
for (auto it = Clothes->begin(); it != Clothes->end(); it++)
{
if (it->item_id != 0)
{
m_GameServerClient->m_GameServerC2S.Item_UseItem_Req(1, m_PNetPtr, &equip_id, char_id, &it->slot_id, &it->item_id);
}
}
for (auto it = Weapon->begin(); it != Weapon->end(); it++)
{
if (it->item_id != 0)
{
m_GameServerClient->m_GameServerC2S.Item_UseItem_Req(1, m_PNetPtr, &equip_id, char_id, &it->slot_id, &it->item_id);
}
}
for (auto it = Skill->begin(); it != Skill->end(); it++)
{
if (it->item_id != 0)
{
m_GameServerClient->m_GameServerC2S.Item_UseItem_Req(1, m_PNetPtr, &equip_id, char_id, &it->slot_id, &it->item_id);
}
}
return VT_Character_CurrentItemInfo_Ack(thispointer, a2, a3, char_id, Weapon, Skill, Clothes);
}
BOOL __fastcall hk_Item_InventoryInfo_Ack(uintptr_t* thispointer, void* edx, uint8_t a2, uint8_t* a3, std::vector<Item>* ItemBuffer)
{
return VT_Item_InventoryInfo_Ack(thispointer, a2, a3, &S4_ItemList);
}
BOOL __fastcall hk_Esper_Chip_Ack(uintptr_t * thispointer, void * edx, uint8_t a2, uint32_t * a3, uint32_t * esperid)
{
return VT_Esper_Chip_Ack(thispointer, a2, a3, &esper_id);
}
BOOL __fastcall hk_Item_UseItem_Ack(uintptr_t * thispointer, void * edx, uint8_t a2, uint8_t * zero, uint8_t * Character_ID, uint8_t * Slot_ID, uint64_t * Unique_ID, uint8_t * Equip_ID)
{
for (auto it = S4_ItemList.begin(); it != S4_ItemList.end(); it++)
{
if ((*it).UniqueID == *reinterpret_cast<uint64_t*>(Unique_ID))
{
uint8_t Item_Type = (*it).ItemID / 1000000 - 1;
uint64_t UniqueID_Slot = Character[*reinterpret_cast<uint8_t*>(Character_ID)][Item_Type * 8 + *reinterpret_cast<uint8_t*>(Slot_ID)];
uint8_t Equip_Buffer;
if (UniqueID_Slot == (*it).UniqueID)
{
Character[*reinterpret_cast<uint8_t*>(Character_ID)][Item_Type * 8 + *reinterpret_cast<uint8_t*>(Slot_ID)] = 0;
Equip_Buffer = 2;
Equip_ID = &Equip_Buffer;
}
else
{
Character[*reinterpret_cast<uint8_t*>(Character_ID)][Item_Type * 8 + *reinterpret_cast<uint8_t*>(Slot_ID)] = (*it).UniqueID;
Equip_Buffer = 1;
Equip_ID = &Equip_Buffer;
}
break;
}
}
m_GameServerClient->m_GameServerS2C.Esper_Chip_Ack(01, &unknow, &Default_Esper);
return VT_Item_UseItem_Ack(thispointer, a2, zero, Character_ID, Slot_ID, Unique_ID, Equip_ID);
}
Code:
#pragma once #include "S4 League.h" #include "CGameServerClient.h" #include "VMTH.h" S4::CGameServerClient* m_GameServerClient = nullptr; int32_t* m_PNetPtr; std::vector<Item> S4_ItemList; #define Game_EquipCheck_Req 1049 #define Room_ReadyRound_Req_2 1059 #define Room_BeginRound_Req_2 1060 #define Room_IntrudeRound_Req_2 1061 uint64_t Character[3][17]; typedef BOOL(__thiscall* p_VT_Item_UseItem_Ack)(uintptr_t*, uint8_t, uint8_t*, uint8_t*, uint8_t*, uint64_t*, uint8_t*); p_VT_Item_UseItem_Ack VT_Item_UseItem_Ack; typedef BOOL(__thiscall* p_VT_Esper_Chip_Ack)(uintptr_t*, uint8_t, uint32_t*, uint32_t*); p_VT_Esper_Chip_Ack VT_Esper_Chip_Ack; typedef BOOL(__thiscall* p_VT_Item_InventoryInfo_Ack)(uintptr_t*, uint8_t, uint8_t*, std::vector<Item>*); p_VT_Item_InventoryInfo_Ack VT_Item_InventoryInfo_Ack; typedef BOOL(__thiscall* p_VT_RMI_CMessageSend)(uintptr_t*, int8_t*, int32_t, int32_t, int32_t, int32_t, int32_t); p_VT_RMI_CMessageSend VT_RMI_CMessageSend; typedef BOOL(__thiscall* p_VT_Character_CurrentItemInfo_Ack)(uintptr_t*, uint8_t, uint8_t*, uint8_t*, std::vector<Character_Item_Buffer>*, std::vector<Character_Item_Buffer>*, std::vector<Character_Item_Buffer>*); p_VT_Character_CurrentItemInfo_Ack VT_Character_CurrentItemInfo_Ack; uint32_t esper_id = 2; uint32_t unknow = 0; uint32_t Default_Esper = EsperID::NONE;
Code:
#pragma once
#include <windows.h>
#include <thread>
#include <vector>
#include <sstream>
#include <process.h>
#include <cstdint>
struct Effect
{
uint32_t EnchantID;
uint32_t Period;
uint64_t PurchaseTime;
uint32_t uk = 0;
uint32_t uk_01 = 0;
};
struct Item
{
uint64_t UniqueID;
uint32_t ItemID;
uint32_t PriceType = 3;
uint32_t PeriodType = 1;
uint16_t Period = 1;
uint32_t Color = 0;
uint64_t PurchaseDate = 0;
uint32_t Energy = 2400;
std::vector<Effect> Effects;
uint32_t MP = 0;
uint32_t EnchantCount = 0;
uint32_t EsperID = 0;
};
struct Character_Item_Buffer
{
uint8_t slot_id;
uint8_t unknow[7];
uint64_t item_id;
};
struct Create_Item
{
uint32_t UpdateID = 1;
uint32_t uk_01 = 0;
Item ItemBuffer;
};
enum EsperID
{
STRONG = 0,
SOLID = 1,
SPECIAL = 2,
STYLE = 3,
SHINY = 4,
NONE = UINT_MAX,
};
Code:
#pragma once
#include "Update.h"
#include "S4 Function.h"
#include "S4 League.h"
#include "Unlinking.h"
namespace Convert
{
template <typename T>
bool ToIn32(const std::string & value, T & result)
{
std::istringstream iss(value);
return !(iss >> result).fail();
}
}
void Init(void*)
{
uintptr_t uptr_BaseAddr = (DWORD)GetModuleHandle(0);
uintptr_t GameServerClient = uptr_BaseAddr + 0x16B7108;
while (!(*reinterpret_cast<uintptr_t*>(GameServerClient)))
Sleep(10);
m_GameServerClient = reinterpret_cast<S4::CGameServerClient*>(GameServerClient);
m_PNetPtr = reinterpret_cast<int32_t*>(uptr_BaseAddr+0x1669030);
VT_Item_UseItem_Ack = (p_VT_Item_UseItem_Ack)(*(PDWORD**)(&m_GameServerClient->m_GameServerS2C))[17];
VMTH::HookVMTFunction(reinterpret_cast<PDWORD*>(&m_GameServerClient->m_GameServerS2C), reinterpret_cast<DWORD>(&hk_Item_UseItem_Ack), 17);
VT_Esper_Chip_Ack = (p_VT_Esper_Chip_Ack)(*(PDWORD**)(&m_GameServerClient->m_GameServerS2C))[197];
VMTH::HookVMTFunction(reinterpret_cast<PDWORD*>(&m_GameServerClient->m_GameServerS2C), reinterpret_cast<DWORD>(&hk_Esper_Chip_Ack), 197);
VT_Item_InventoryInfo_Ack = (p_VT_Item_InventoryInfo_Ack)(*(PDWORD**)(&m_GameServerClient->m_GameServerS2C))[11];
VMTH::HookVMTFunction(reinterpret_cast<PDWORD*>(&m_GameServerClient->m_GameServerS2C), reinterpret_cast<DWORD>(&hk_Item_InventoryInfo_Ack), 11);
VT_Character_CurrentItemInfo_Ack = (p_VT_Character_CurrentItemInfo_Ack)(*(PDWORD**)(&m_GameServerClient->m_GameServerS2C))[10];
VMTH::HookVMTFunction(reinterpret_cast<PDWORD*>(&m_GameServerClient->m_GameServerS2C), reinterpret_cast<DWORD>(&hk_Character_CurrentItemInfo_Ack), 10);
VT_RMI_CMessageSend = (p_VT_RMI_CMessageSend)(*(PDWORD**)(&m_GameServerClient->m_GameRuleC2S))[3];
VMTH::HookVMTFunction(reinterpret_cast<PDWORD*>(&m_GameServerClient->m_GameRuleC2S), reinterpret_cast<DWORD>(&hk_RMI_CMessageSend), 3);
_endthread();
}
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpReserved)
{
switch (fdwReason)
{
case DLL_PROCESS_ATTACH:
DisableThreadLibraryCalls(hinstDLL);
_beginthread(&Init, 0, 0);
break;
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
ik hrhrhrh oldQuote:
gay code
FEEL FREE TO FVCK S4LEAGUE
Regards
FazeDaFapper






