2021-12-25 22:36:38 +01:00
|
|
|
#pragma once
|
2022-03-29 22:27:56 +02:00
|
|
|
#include "squirrel/sqtype.h"
|
2021-12-25 22:36:38 +01:00
|
|
|
|
|
|
|
namespace
|
|
|
|
{
|
|
|
|
/* ==== SQUIRREL ======================================================================================================================================================== */
|
|
|
|
ADDRESS p_sq_pushbool = g_mGameDll.FindPatternSIMD((std::uint8_t*)"\x48\x83\xEC\x38\x33\xC0\x48\xC7\x44\x24\x20\x08\x00\x00\x01\x48", "xxxxxxxxxxxxxxxx");
|
2022-03-29 22:27:56 +02:00
|
|
|
void (*v_sq_pushbool)(HSQUIRRELVM* v, int val) = (void (*)(HSQUIRRELVM*, int))p_sq_pushbool.GetPtr(); /*48 83 EC 38 33 C0 48 C7 44 24 20 08 00 00 01 48*/
|
2021-12-25 22:36:38 +01:00
|
|
|
#if defined (GAMEDLL_S0) || defined (GAMEDLL_S1) || defined (GAMEDLL_S2)
|
|
|
|
ADDRESS p_sq_pushstring = g_mGameDll.FindPatternSIMD((std::uint8_t*)"\x40\x56\x48\x83\xEC\x30\x48\x8B\xF1\x48\x85\xD2\x0F\x84\x8C\x00", "xxxxxxxxxxxxxxxx");
|
2022-03-29 22:27:56 +02:00
|
|
|
void (*v_sq_pushstring)(HSQUIRRELVM* v, const char* string, int len) = (void (*)(HSQUIRRELVM*, const char*, int))p_sq_pushstring.GetPtr(); /*40 56 48 83 EC 30 48 8B F1 48 85 D2 0F 84 8C 00*/
|
2021-12-25 22:36:38 +01:00
|
|
|
#elif defined (GAMEDLL_S3)
|
|
|
|
ADDRESS p_sq_pushstring = g_mGameDll.FindPatternSIMD((std::uint8_t*)"\x40\x56\x48\x83\xEC\x30\x48\x8B\xF1\x48\x85\xD2\x0F\x84\x8F\x00", "xxxxxxxxxxxxxxxx");
|
2022-03-29 22:27:56 +02:00
|
|
|
void (*v_sq_pushstring)(HSQUIRRELVM* v, const char* string, int len) = (void (*)(HSQUIRRELVM*, const char*, int))p_sq_pushstring.GetPtr(); /*40 56 48 83 EC 30 48 8B F1 48 85 D2 0F 84 8F 00*/
|
2021-12-25 22:36:38 +01:00
|
|
|
#endif
|
|
|
|
ADDRESS p_sq_pushinteger = g_mGameDll.FindPatternSIMD((std::uint8_t*)"\x48\x83\xEC\x38\x33\xC0\x48\xC7\x44\x24\x20\x02\x00\x00\x05\x48", "xxxxxxxxxxxxxxxx");
|
2022-03-29 22:27:56 +02:00
|
|
|
void (*v_sq_pushinteger)(HSQUIRRELVM* v, int val) = (void (*)(HSQUIRRELVM*, int))p_sq_pushinteger.GetPtr(); /*48 83 EC 38 33 C0 48 C7 44 24 20 02 00 00 05 48*/
|
2021-12-25 22:36:38 +01:00
|
|
|
|
2022-03-28 02:19:54 +02:00
|
|
|
ADDRESS p_sq_pushconstant = g_mGameDll.FindPatternSIMD((std::uint8_t*)"\x48\x89\x5C\x24\x00\x48\x89\x6C\x24\x00\x48\x89\x74\x24\x00\x57\x48\x83\xEC\x30\x4C\x8B", "xxxx?xxxx?xxxx?xxxxxxx");
|
2022-03-29 22:27:56 +02:00
|
|
|
void (*v_sq_pushconstant)(HSQUIRRELVM* v, const char* name, int val) = (void (*)(HSQUIRRELVM*, const char*, int))p_sq_pushconstant.GetPtr(); /*48 89 5C 24 ? 48 89 6C 24 ? 48 89 74 24 ? 57 48 83 EC 30 4C 8B*/
|
2022-03-28 02:19:54 +02:00
|
|
|
|
2021-12-25 22:36:38 +01:00
|
|
|
ADDRESS p_sq_newarray = g_mGameDll.FindPatternSIMD((std::uint8_t*)"\x48\x89\x5C\x24\x08\x57\x48\x83\xEC\x30\x48\x8B\xD9\x48\xC7\x44\x24\x20\x40", "xxxxxxxxxxxxxxxxxxx");
|
2022-03-29 22:27:56 +02:00
|
|
|
void (*v_sq_newarray)(HSQUIRRELVM* v, int size) = (void (*)(HSQUIRRELVM*, int))p_sq_newarray.GetPtr(); /*48 89 5C 24 08 57 48 83 EC 30 48 8B D9 48 C7 44 24 20 40*/
|
2021-12-25 22:36:38 +01:00
|
|
|
|
|
|
|
ADDRESS p_sq_arrayappend = g_mGameDll.FindPatternSIMD((std::uint8_t*)"\x40\x53\x48\x83\xEC\x20\x8B\x41\x00\x48\x8B\xD9\x2B\x41\x00\x83\xF8\x02\x7D", "xxxxxxxx?xxxxx?xxxx");
|
2022-03-29 22:27:56 +02:00
|
|
|
void (*v_sq_arrayappend)(HSQUIRRELVM* v, int idx) = (void (*)(HSQUIRRELVM*, int))p_sq_arrayappend.GetPtr(); /*40 53 48 83 EC 20 8B 41 ?? 48 8B D9 2B 41 ?? 83 F8 02 7D*/
|
2021-12-25 22:36:38 +01:00
|
|
|
|
|
|
|
ADDRESS p_sq_newtable = g_mGameDll.FindPatternSIMD((std::uint8_t*)"\x48\x89\x5C\x24\x08\x57\x48\x83\xEC\x30\x48\x8B\xD9\x48\xC7\x44\x24\x20\x20", "xxxxxxxxxxxxxxxxxxx");
|
2022-03-29 22:27:56 +02:00
|
|
|
void (*v_sq_newtable)(HSQUIRRELVM* v) = (void (*)(HSQUIRRELVM*))p_sq_newtable.GetPtr(); /*48 89 5C 24 08 57 48 83 EC 30 48 8B D9 48 C7 44 24 20 20*/
|
2021-12-25 22:36:38 +01:00
|
|
|
|
|
|
|
ADDRESS p_sq_newslot = g_mGameDll.FindPatternSIMD((std::uint8_t*)"\x40\x53\x48\x83\xEC\x30\x44\x8B\x49\x00\x48\x8B\xD9\x41\x8B\xC1", "xxxxxxxxx?xxxxxx");
|
2022-03-29 22:27:56 +02:00
|
|
|
void (*v_sq_newslot)(HSQUIRRELVM* v, int idx) = (void (*)(HSQUIRRELVM*, int))p_sq_newslot.GetPtr(); /*40 53 48 83 EC 20 8B 41 ?? 48 8B D9 2B 41 ?? 83 F8 02 7D*/
|
2022-03-28 19:34:51 +02:00
|
|
|
#if defined (GAMEDLL_S0) || defined (GAMEDLL_S1) || defined (GAMEDLL_S2)
|
|
|
|
ADDRESS p_sq_pushstructure = g_mGameDll.FindPatternSIMD((std::uint8_t*)"\x48\x89\x5C\x24\x00\x48\x89\x74\x24\x00\x48\x89\x7C\x24\x00\x4C\x89\x4C\x24\x00\x55\x41\x54\x41\x55\x41\x56\x41\x57\x48\x8B\xEC", "xxxx?xxxx?xxxx?xxxx?xxxxxxxxxxxx");
|
2022-03-29 22:27:56 +02:00
|
|
|
void (*v_sq_pushstructure)(HSQUIRRELVM* v, const char* name, const char* member, const char* codeclass1, const char* codeclass2) = (void (*)(HSQUIRRELVM*, const char*, const char*, const char*, const char*))p_sq_pushstructure.GetPtr(); /*48 89 5C 24 ? 48 89 74 24 ? 48 89 7C 24 ? 4C 89 4C 24 ? 55 41 54 41 55 41 56 41 57 48 8B EC*/
|
2022-03-28 19:34:51 +02:00
|
|
|
#elif defined (GAMEDLL_S3)
|
|
|
|
ADDRESS p_sq_pushstructure = g_mGameDll.FindPatternSIMD((std::uint8_t*)"\x48\x89\x5C\x24\x00\x48\x89\x74\x24\x00\x48\x89\x7C\x24\x00\x55\x41\x54\x41\x55\x41\x56\x41\x57\x48\x8B\xEC\x48\x83\xEC\x60\x48\x8B\x59\x60", "xxxx?xxxx?xxxx?xxxxxxxxxxxxxxxxxxxx");
|
2022-03-29 22:27:56 +02:00
|
|
|
void (*v_sq_pushstructure)(HSQUIRRELVM* v, const char* name, const char* member, const char* codeclass1, const char* codeclass2) = (void (*)(HSQUIRRELVM*, const char*, const char*, const char*, const char*))p_sq_pushstructure.GetPtr(); /*48 89 5C 24 ? 48 89 74 24 ? 48 89 7C 24 ? 55 41 54 41 55 41 56 41 57 48 8B EC 48 83 EC 60 48 8B 59 60*/
|
2022-03-28 19:34:51 +02:00
|
|
|
#endif
|
2021-12-25 22:36:38 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
2022-03-29 22:27:56 +02:00
|
|
|
char* sq_getstring(HSQUIRRELVM* v, int i);
|
|
|
|
int sq_getinteger(HSQUIRRELVM* v, int i);
|
|
|
|
void sq_pushbool(HSQUIRRELVM* v, int val);
|
|
|
|
void sq_pushstring(HSQUIRRELVM* v, const char* string, int len);
|
|
|
|
void sq_pushinteger(HSQUIRRELVM* v, int val);
|
|
|
|
void sq_pushconstant(HSQUIRRELVM* v, const char* name, int val);
|
|
|
|
void sq_newarray(HSQUIRRELVM* v, int size);
|
|
|
|
void sq_arrayappend(HSQUIRRELVM* v, int idx);
|
|
|
|
void sq_newtable(HSQUIRRELVM* v);
|
|
|
|
void sq_newslot(HSQUIRRELVM* v, int idx);
|
|
|
|
void sq_pushstructure(HSQUIRRELVM* v, const char* name, const char* member, const char* codeclass1, const char* codeclass2);
|
2021-12-25 22:36:38 +01:00
|
|
|
|
|
|
|
void SQAPI_Attach();
|
|
|
|
void SQAPI_Detach();
|
|
|
|
|
2022-01-15 15:25:19 +01:00
|
|
|
typedef int SQRESULT;
|
|
|
|
#define SQ_OK (1)
|
|
|
|
#define SQ_ERROR (-1)
|
|
|
|
#define SQ_FAILED(res) (res<0)
|
|
|
|
#define SQ_SUCCEEDED(res) (res>=0)
|
|
|
|
|
2021-12-25 22:36:38 +01:00
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
class HSqapi : public IDetour
|
|
|
|
{
|
|
|
|
virtual void debugp()
|
|
|
|
{
|
2022-03-28 19:34:51 +02:00
|
|
|
std::cout << "| FUN: sq_pushbool : 0x" << std::hex << std::uppercase << p_sq_pushbool.GetPtr() << std::setw(npad) << " |" << std::endl;
|
|
|
|
std::cout << "| FUN: sq_pushstring : 0x" << std::hex << std::uppercase << p_sq_pushstring.GetPtr() << std::setw(npad) << " |" << std::endl;
|
|
|
|
std::cout << "| FUN: sq_pushinteger : 0x" << std::hex << std::uppercase << p_sq_pushinteger.GetPtr() << std::setw(npad) << " |" << std::endl;
|
|
|
|
std::cout << "| FUN: sq_pushconstant : 0x" << std::hex << std::uppercase << p_sq_pushconstant.GetPtr() << std::setw(npad) << " |" << std::endl;
|
|
|
|
std::cout << "| FUN: sq_newarray : 0x" << std::hex << std::uppercase << p_sq_newarray.GetPtr() << std::setw(npad) << " |" << std::endl;
|
|
|
|
std::cout << "| FUN: sq_arrayappend : 0x" << std::hex << std::uppercase << p_sq_arrayappend.GetPtr() << std::setw(npad) << " |" << std::endl;
|
|
|
|
std::cout << "| FUN: sq_newtable : 0x" << std::hex << std::uppercase << p_sq_newtable.GetPtr() << std::setw(npad) << " |" << std::endl;
|
|
|
|
std::cout << "| FUN: sq_newslot : 0x" << std::hex << std::uppercase << p_sq_newslot.GetPtr() << std::setw(npad) << " |" << std::endl;
|
|
|
|
std::cout << "| FUN: sq_pushstructure : 0x" << std::hex << std::uppercase << p_sq_pushstructure.GetPtr() << std::setw(npad) << " |" << std::endl;
|
2021-12-25 22:36:38 +01:00
|
|
|
std::cout << "+----------------------------------------------------------------+" << std::endl;
|
|
|
|
}
|
|
|
|
};
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
REGISTER(HSqapi);
|