DNF_DLL/test/squirrel.h

307 lines
11 KiB
C
Raw Normal View History

2022-03-08 12:57:35 +08:00
#pragma once
//-------------------------------------------------------------------------------------------Squirrel
2022-04-11 19:44:03 +08:00
// printFunc <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ջ<EFBFBD><D5BB>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD>
typedef int(SqPrintFunc)(uint32_t v);
static SqPrintFunc* SQPrintFunc = (SqPrintFunc*)0x1354060;
2022-03-08 12:57:35 +08:00
// PushRoot
typedef int(SqPushRootFunc)(uint32_t v);
static SqPushRootFunc* SQPushRootTable = (SqPushRootFunc*)0x1358C50;
// Push <20><><EFBFBD><EFBFBD><EFBFBD>󶨱հ<F3B6A8B1>
typedef int(realSqNewClosure)(uint32_t v, void* funcAddr, int a);
static realSqNewClosure* RealSqNewClosure = (realSqNewClosure*)0x135B850;
#define INIT_NUT_ADDRESS 0x135B850
static realSqNewClosure* MLnewclosure = nullptr;
// New<65><77>
2022-04-22 02:16:45 +08:00
typedef int(SqNewSlot)(uint32_t v, int a, BOOL b);
2022-03-08 12:57:35 +08:00
static SqNewSlot* SQNewSlot = (SqNewSlot*)0x135AA80;
// ƽջ
typedef int(SqPopTop)(uint32_t v);
static SqPopTop* SQPopTop = (SqPopTop*)0x1358FF0;
// ƽջ
typedef int(SqPop)(uint32_t v, int n);
static SqPop* SQPop = (SqPop*)0x1358FD0;
//SQ_Get
typedef int(Sq_Get)(uint32_t v, int n);
static Sq_Get* SQ_Get = (Sq_Get*)0x135AE30;
2022-04-22 02:16:45 +08:00
#define _RT_NULL 0x00000001
#define _RT_INTEGER 0x00000002
#define _RT_FLOAT 0x00000004
#define _RT_BOOL 0x00000008
#define _RT_STRING 0x00000010
#define _RT_TABLE 0x00000020
#define _RT_ARRAY 0x00000040
#define _RT_USERDATA 0x00000080
#define _RT_CLOSURE 0x00000100
#define _RT_NATIVECLOSURE 0x00000200
#define _RT_GENERATOR 0x00000400
#define _RT_USERPOINTER 0x00000800
#define _RT_THREAD 0x00001000
#define _RT_FUNCPROTO 0x00002000
#define _RT_CLASS 0x00004000
#define _RT_INSTANCE 0x00008000
#define _RT_WEAKREF 0x00010000
#define SQOBJECT_REF_COUNTED 0x08000000
#define SQOBJECT_NUMERIC 0x04000000
#define SQOBJECT_DELEGABLE 0x02000000
#define SQOBJECT_CANBEFALSE 0x01000000
typedef enum tagSQObjectType {
OT_NULL = (_RT_NULL | SQOBJECT_CANBEFALSE),
OT_INTEGER = (_RT_INTEGER | SQOBJECT_NUMERIC | SQOBJECT_CANBEFALSE),
OT_FLOAT = (_RT_FLOAT | SQOBJECT_NUMERIC | SQOBJECT_CANBEFALSE),
OT_BOOL = (_RT_BOOL | SQOBJECT_CANBEFALSE),
OT_STRING = (_RT_STRING | SQOBJECT_REF_COUNTED),
OT_TABLE = (_RT_TABLE | SQOBJECT_REF_COUNTED | SQOBJECT_DELEGABLE),
OT_ARRAY = (_RT_ARRAY | SQOBJECT_REF_COUNTED),
OT_USERDATA = (_RT_USERDATA | SQOBJECT_REF_COUNTED | SQOBJECT_DELEGABLE),
OT_CLOSURE = (_RT_CLOSURE | SQOBJECT_REF_COUNTED),
OT_NATIVECLOSURE = (_RT_NATIVECLOSURE | SQOBJECT_REF_COUNTED),
OT_GENERATOR = (_RT_GENERATOR | SQOBJECT_REF_COUNTED),
OT_USERPOINTER = _RT_USERPOINTER,
OT_THREAD = (_RT_THREAD | SQOBJECT_REF_COUNTED),
OT_FUNCPROTO = (_RT_FUNCPROTO | SQOBJECT_REF_COUNTED), //internal usage only
OT_CLASS = (_RT_CLASS | SQOBJECT_REF_COUNTED),
OT_INSTANCE = (_RT_INSTANCE | SQOBJECT_REF_COUNTED | SQOBJECT_DELEGABLE),
OT_WEAKREF = (_RT_WEAKREF | SQOBJECT_REF_COUNTED)
}SQObjectType;
//SQ_GetType
2022-04-11 19:44:03 +08:00
typedef int(Sq_GetType)(uint32_t v, int n);
static Sq_GetType* SQ_GetType = (Sq_GetType*)0x1358CD0;
2022-04-22 02:16:45 +08:00
2022-03-08 12:57:35 +08:00
//SQ_Rawget
typedef int(Sq_Rawget)(uint32_t v, int n);
static Sq_Rawget* SQ_Rawget = (Sq_Rawget*)0x135AEA0;
//SQ*Getlocal
typedef wchar_t* (SqGetlocal)(uint32_t v, int n, int idx);
static SqGetlocal* SQGetlocal = (SqGetlocal*)0x135AFD0;
//SQ_Wakeupvm
typedef int (Sq_Wakeupvm)(uint32_t v, int n, int retval, int raiseerror);
static Sq_Wakeupvm* SQ_Wakeupvm = (Sq_Wakeupvm*)0x135B0D0;
//SQ_Call
typedef int (Sq_CallFunc)(uint32_t v, int params, int retval, int raiseerror);
static Sq_CallFunc* SQ_Call = (Sq_CallFunc*)0x1359280;
//SQ_Remove
typedef int (SQ_RemoveFunc)(uint32_t v, int idx);
static SQ_RemoveFunc* SQ_Remove = (SQ_RemoveFunc*)0x1359000;
//GetInt
typedef int(SqGetIntFunc)(uint32_t v, uint32_t stackIndex, int* sint);
static SqGetIntFunc* SQGetInt = (SqGetIntFunc*)0x1358D70;
//GetFloat
2022-04-22 02:16:45 +08:00
typedef int(SqGetFloatFunc)(uint32_t v, uint32_t stackIndex, FLOAT* sfloat);
2022-03-08 12:57:35 +08:00
static SqGetFloatFunc* SQGetFloat = (SqGetFloatFunc*)0x1358DD0;
//GetBool
2022-04-22 02:16:45 +08:00
typedef int(SqGetBoolFunc)(uint32_t v, uint32_t stackIndex, BOOL* sbool);
2022-03-08 12:57:35 +08:00
static SqGetBoolFunc* SQGetBool = (SqGetBoolFunc*)0x1358E30;
//GetString
typedef int(SqGetStringFunc)(uint32_t v, uint32_t stackIndex, wchar_t** sstring);
static SqGetStringFunc* SQGetString = (SqGetStringFunc*)0x1358E70;
typedef int(SqGetStringCFunc)(uint32_t v, uint32_t stackIndex, char** sstring);
static SqGetStringCFunc* SQGetStringc = (SqGetStringCFunc*)0x1358E70;
//GetUserdata
typedef int(SqGetUserdataFunc)(uint32_t v, uint32_t stackIndex, DWORD* up, DWORD* up1);
static SqGetUserdataFunc* SQGetUserdata = (SqGetUserdataFunc*)0x1358EC0;
//GetObjtypetag
typedef int(SqGetObjtypetagFunc)(uint32_t v, DWORD* up);
static SqGetObjtypetagFunc* SQGetObjtypetag = (SqGetObjtypetagFunc*)0x1358F20;
//GetUserpointer
typedef int(SqGetUserpointerFunc)(uint32_t v, uint32_t idx, DWORD* up);
static SqGetUserpointerFunc* SQGetUserpointer = (SqGetUserpointerFunc*)0x1358F80;
//GetTop
typedef int(SqGetTopFunc)(uint32_t v);
static SqGetTopFunc* SQGetTop = (SqGetTopFunc*)0x1358FC0;
//Push
typedef int(SqPushFunc)(uint32_t v, int idx);
static SqPushFunc* SQPush = (SqPushFunc*)0x1358C90;
//PushString
typedef int(SqPushStringFunc)(uint32_t v, const wchar_t* s, int len);
2022-03-09 16:27:06 +08:00
typedef int(SqPushStringFuncs)(uint32_t v, const char* s, int len);
2022-03-08 12:57:35 +08:00
static SqPushStringFunc* SQPushString = (SqPushStringFunc*)0x1358A60;
2022-03-09 16:27:06 +08:00
static SqPushStringFuncs* SQPushStringc = (SqPushStringFuncs*)0x1358A60;
2022-03-08 12:57:35 +08:00
//PushInt
typedef int(SqPushIntFunc)(uint32_t v, int sint);
static SqPushIntFunc* SQPushInt = (SqPushIntFunc*)0x1358AD0;
//PushBool
2022-04-22 02:16:45 +08:00
typedef int(SqPushBoolFunc)(uint32_t v, BOOL sbool);
2022-03-08 12:57:35 +08:00
static SqPushBoolFunc* SQPushBool = (SqPushBoolFunc*)0x1358B10;
//PushFloat
2022-04-22 02:16:45 +08:00
typedef int(SqPushFloatFunc)(uint32_t v, FLOAT sfloat);
2022-03-08 12:57:35 +08:00
static SqPushFloatFunc* SQPushFloat = (SqPushFloatFunc*)0x1358B60;
//SQLOADFILE
2022-04-22 02:16:45 +08:00
typedef void* (SQLOADFILEFunc)(uint32_t v, const wchar_t* filename, BOOL printerror);
2022-03-08 12:57:35 +08:00
static SQLOADFILEFunc* SQLOADFILEF = (SQLOADFILEFunc*)0x13560E0;
//SQDOFILE
2022-04-22 02:16:45 +08:00
typedef void* (SQDOFILEFunc)(uint32_t v, const wchar_t* filename, BOOL retval, BOOL printerror);
2022-03-08 12:57:35 +08:00
static SQDOFILEFunc* SQDOFILE = (SQDOFILEFunc*)0x1356240;
typedef void* (*SQFILE)();
//SQ_io_file_lexfeed_<64><5F><EFBFBD><EFBFBD>
//typedef int(LSQLEXREADFUNC)(int n);
typedef int(*LSQLEXREADFUNC)(int n);
static LSQLEXREADFUNC SQ_io_file_lexfeed_ASCII = (LSQLEXREADFUNC)0x1355F60;
static LSQLEXREADFUNC SQ_io_file_lexfeed_UCS2_BE = (LSQLEXREADFUNC)0x1356050;
static LSQLEXREADFUNC SQ_io_file_lexfeed_UCS2_LE = (LSQLEXREADFUNC)0x1356020;
static LSQLEXREADFUNC SQ_io_file_lexfeed_UTF8 = (LSQLEXREADFUNC)0x1355F90;
//SQfopen
typedef SQFILE* (SQfopenFunc)(const wchar_t* filename, const wchar_t* type);
static SQfopenFunc* SQfopen = (SQfopenFunc*)0x1355DC0;
//SQfread
typedef int(SQfreadFunc)(void* buffer, int a, int b, void* file);
static SQfreadFunc* SQfread = (SQfreadFunc*)0x1355DD0;
//SQwrite
typedef int(SQwriteFunc)(void* buffer, int a, int b, void* file);
static SQwriteFunc* SQwrite = (SQwriteFunc*)0x1355DE0;
//SQfseek
typedef int(SQfseekFunc)(void* buffer, int a, int b);
static SQfseekFunc* SQfseek = (SQfseekFunc*)0x1355DF0;
//SQftell
typedef int(SQftellFunc)(void* file);
static SQftellFunc* SQftell = (SQftellFunc*)0x1355E50;
//SQ_File_read
typedef int(SQ_File_readFunc)(void* file, void* afile, int a);
static SQ_File_readFunc* SQ_File_read = (SQ_File_readFunc*)0x1356090;
//SQ_Readclosure
typedef int(SQ_ReadclosureFunc)(uint32_t v, SQ_File_readFunc a, void* file);
static SQ_ReadclosureFunc* SQ_Readclosure = (SQ_ReadclosureFunc*)0x1359460;
//SQ_Fclose
typedef int(SQ__FcloseFunc)(void* file);
static SQ__FcloseFunc* SQ__Fclose = (SQ__FcloseFunc*)0x1355E70;
//SQ_Compile
2022-04-22 02:16:45 +08:00
typedef int(SQ_CompileFunc)(uint32_t v, LSQLEXREADFUNC FUNC, void* file, const wchar_t* filename, BOOL printerror);
2022-03-08 12:57:35 +08:00
static SQ_CompileFunc* SQ_Compile = (SQ_CompileFunc*)0x135A390;
//SQ_Throwerror
typedef int(SQ_ThrowerrorFunc)(uint32_t v, const wchar_t* error);
static SQ_ThrowerrorFunc* SQ_Throwerror = (SQ_ThrowerrorFunc*)0x13591A0;
//<2F><>ȡSquirrel v <20><>ַ
inline uint32_t GetSqVm();
class squirrel
2022-02-10 14:14:08 +08:00
{
2022-03-08 12:57:35 +08:00
private:
2022-02-10 14:14:08 +08:00
2022-04-06 09:58:47 +08:00
public://<2F><><EFBFBD><EFBFBD>
2022-04-22 02:16:45 +08:00
static int SQloadfile(uint32_t v, const wchar_t* filename, BOOL printerror);
static int SQdofile(uint32_t v, const wchar_t* filename, BOOL retval, BOOL printerror);
2022-02-10 14:14:08 +08:00
2022-04-06 09:58:47 +08:00
public://NUT API <20>ӿ<EFBFBD>
static int sq_Test(uint32_t v);//<2F><><EFBFBD>Խӿ<D4BD>
static int GetCharacterAttribute(uint32_t v);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>װ<EFBFBD><D7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static int SetCharacterAttribute(uint32_t v);//д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>װ<EFBFBD><D7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static int GetTownIndex(uint32_t v);//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static int GetRegionIndex(uint32_t v);//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static int GetTownXpos(uint32_t v);//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>X<EFBFBD><58><EFBFBD><EFBFBD>
static int GetTownYpos(uint32_t v);//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>Y<EFBFBD><59><EFBFBD><EFBFBD>
static int GetFatigue(uint32_t v);//<2F><>ȡƣ<C8A1><C6A3>ֵ
static int GetExp(uint32_t v);//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ֵ
static int GoDungeon(uint32_t v);//ȥ<><C8A5><EFBFBD><EFBFBD>
static int GoTown(uint32_t v);//<2F>س<EFBFBD>
static int MoveTown(uint32_t v);//<2F>س<EFBFBD>
static int LDofile(uint32_t v);//Ldofile
static int Lcout(uint32_t v);//Lcout
static int NewWindows(uint32_t v);//<2F>½<EFBFBD><C2BD><EFBFBD><EFBFBD><EFBFBD>
static int SetSlot(uint32_t v);//<2F><><EFBFBD><EFBFBD>UI<55><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
public://<2F><><EFBFBD><EFBFBD> API
static int SendPackType(uint32_t v);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static int SendPackByte(uint32_t v);//<2F><><EFBFBD><EFBFBD>Byte
static int SendPackWord(uint32_t v);//<2F><><EFBFBD><EFBFBD>Word
static int SendPackDWord(uint32_t v);//<2F><><EFBFBD><EFBFBD>DWord
2022-04-21 10:50:24 +08:00
static int SendPackWChar(uint32_t v);//<2F><><EFBFBD><EFBFBD>char*
2022-04-06 09:58:47 +08:00
static int SendPack(uint32_t v);//<2F><><EFBFBD><EFBFBD>
static int GivePlayerItem(uint32_t v);//<2F><><EFBFBD><EFBFBD>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static int GivePlayerEqu(uint32_t v);//<2F><>װ<EFBFBD><D7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2022-02-10 14:14:08 +08:00
2022-04-01 20:02:04 +08:00
public://<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD>
2022-04-06 09:58:47 +08:00
static int Get_STL(uint32_t v);//<2F><>ѯ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static int Set_STL(uint32_t v);//<2F><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static int New_STL(uint32_t v);//new <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2022-04-01 20:02:04 +08:00
static int Timer_STL(uint32_t v);//ʱ<><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2022-04-22 02:16:45 +08:00
static int Jsoner_STL(uint32_t v);//ʱ<><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2022-04-01 20:02:04 +08:00
2022-04-06 09:58:47 +08:00
public://<2F><><EFBFBD><EFBFBD>
static int Sync_Dragon_Pack(uint32_t v);//ͬ<><CDAC> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>
static int Get_Dragon_Pack(uint32_t v);//<2F><>ȡ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>
static int Redom_Dragon(uint32_t v);//<2F><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static int Get_DragonModel(uint32_t v);//<2F><>ȡ <20><><EFBFBD><EFBFBD> ģʽ
static int Set_DragonModel(uint32_t v);//<2F><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ģʽ
2022-03-08 12:57:35 +08:00
public:
2022-02-10 14:14:08 +08:00
2022-03-08 12:57:35 +08:00
//<2F><><EFBFBD><EFBFBD>nut<75>ӿ<EFBFBD>funcName<6D><65><EFBFBD><EFBFBD>C<EFBFBD><43><EFBFBD>Ժ<EFBFBD><D4BA><EFBFBD>funcAddr
static void RegisterNutApi(const wchar_t* funcName, void* funcAddr, uint32_t v);
//ע<><D7A2><EFBFBD>ӿ<EFBFBD>
static void R_Register_Nut();
};
2022-02-10 14:14:08 +08:00
2022-03-08 12:57:35 +08:00
//<2F><><EFBFBD><EFBFBD>Nut<75>ӿڰ<D3BF><DAB0><EFBFBD>C<EFBFBD><43><EFBFBD><EFBFBD>
// ʾ<><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/*
static int GoDungeon(uint32_t v)
{
int n1 = 0;
int n2 = 0;
int n3 = 0;
int n4 = 0;
int num;
num = SQGetTop(v);
if (num == 2)
{
SQGetInt(v, 2, &n1);
}
else if (num == 5)
{
SQGetInt(v, 2, &n1);
SQGetInt(v, 3, &n2);
SQGetInt(v, 4, &n3);
SQGetInt(v, 5, &n4);
}
else
{
SQPushBool(v, false);
return 1;
}
_SendpacksType(*_SendClass, 0, 15);
_SendPacks();
_SendpacksType(*_SendClass, 0, 16);
_SendPacksWord(*_SendClass, 0, n1);
_SendPacksByte(*_SendClass, 0, n2);
_SendPacksByte(*_SendClass, 0, n3);
_SendPacksByte(*_SendClass, 0, n4);
_SendPacks();
SQPushBool(v, true);
//return 1 <20><>ʾ<EFBFBD>ú<EFBFBD><C3BA><EFBFBD><EFBFBD>з<EFBFBD><D0B7><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>nut<75>ű<EFBFBD> 0<><30><EFBFBD><EFBFBD>
return 1;
}
*/
//<2F><><EFBFBD><EFBFBD>C++<2B><><EFBFBD><EFBFBD> nut
// ʾ<><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/*
uint32_t v = GetSqVm();
SQPushRootTable(v);
SQPushString(v, L"dofile", -1);
SQ_Get(v, -2);
SQPushRootTable(v);
SQPushString(v, L"1.cpp", -1);
SQ_Call(v, 2, 1, 0);
SQPop(v, 2);
*/