This commit is contained in:
Yosin-Lenheart 2022-02-13 23:34:21 +08:00
parent feb4773c65
commit 366de77a2c
1 changed files with 64 additions and 15 deletions

View File

@ -40,6 +40,24 @@ 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;
//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_Call)(uint32_t v, int params, int retval, int raiseerror);
static Sq_Call* SQ_Call = (Sq_Call*)0x1359280;
//GetInt
typedef int(SqGetIntFunc)(uint32_t v, uint32_t stackIndex, int* sint);
static SqGetIntFunc* SQGetInt = (SqGetIntFunc*)0x1358D70;
@ -86,32 +104,63 @@ void RegisterNutApi(const wchar_t* funcName, void* funcAddr, uint32_t v = NULL);
//注册Nut函数
void RegisterNut();
//新增Nut接口绑定C函数 返回值必须为 SQInteger
//新增Nut接口绑定C函数
// 示例如下
/*
static SQInteger math_abs(HSQUIRRELVM v)
static int GoDungeon(uint32_t v)
{
SQInteger n;
const SQChar* str;
int n1 = 0;
int n2 = 0;
int n3 = 0;
int n4 = 0;
//获取nut脚本传来的第一个参数, 索引为2
//索引为1的参数是this指针
//sq_getinteger(v, 2, &n);
int num;
num = SQGetTop(v);
//获取字符串
//sq_getstring(v, 2, &str);
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();
//返回一个整数给nut脚本
//sq_pushinteger(v, (SQInteger)(n));
_SendpacksType(*_SendClass, 0, 16);
_SendPacksWord(*_SendClass, 0, n1);
_SendPacksByte(*_SendClass, 0, n2);
_SendPacksByte(*_SendClass, 0, n3);
_SendPacksByte(*_SendClass, 0, n4);
_SendPacks();
//返回一个字符串给nut脚本 参数3为大小
sq_pushstring(v, str, 5);
//return 1 表示该函数有返回值传给nut脚本
SQPushBool(v, true);
//return 1 表示该函数有返回值传给nut脚本 0则无
return 1;
}
*/
//新增C++调用 nut
// 示例如下
/*
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);
*/
//-------------------------------------------------------------------------------------------Squirrel