feat: Switch from default sq stack parsing to NoNut

This commit is contained in:
AURUMVORXX
2024-11-04 14:57:54 +03:00
parent 965c65147f
commit 3f477f5a32
6 changed files with 91 additions and 89 deletions

View File

@@ -13,6 +13,7 @@ namespace nonut
public:
static void registerFunction(String funcName, const SQFUNCTION func, size_t funcSize)
{
HSQUIRRELVM vm = Sqrat::DefaultVM::Get();
const auto top = sq_gettop(vm);
sq_pushroottable(vm);
sq_pushstring(vm, funcName.c_str(), funcName.length());

View File

@@ -15,7 +15,4 @@ namespace nonut
constexpr SQObject SQ_NULL{ OT_NULL };
}
namespace nonut::g2o{}
namespace g2o = nonut::g2o;
#endif // CORE_COMMONHEADER_H_

View File

@@ -1,6 +1,8 @@
#ifndef NONUT_CORE_USER_DATA_H
#define NONUT_CORE_USER_DATA_H
#include <sqapi.h>
namespace nonut
{
class UserData

View File

@@ -18,7 +18,7 @@ namespace nonut
std::is_same_v<T, Bool*> ||
std::is_same_v<T, Int*> ||
std::is_same_v<T, Float*> ||
std::is_same_v<T, SQChar**> ||
std::is_same_v<T, const SQChar**> ||
std::is_same_v<T, HSQOBJECT*> ||
std::is_same_v<T, SQUserPointer*>,
"Not supported return type");
@@ -29,7 +29,7 @@ namespace nonut
sq_getinteger(vm, idx, outPtr);
if constexpr (std::is_same_v<T, Float*>)
sq_getfloat(vm, idx, outPtr);
if constexpr (std::is_same_v<T, SQChar**>)
if constexpr (std::is_same_v<T, const SQChar**>)
sq_getstring(vm, idx, outPtr);
if constexpr (std::is_same_v<T, HSQOBJECT*>)
{

View File

@@ -1,5 +1,6 @@
#include <sqapi.h>
#include <pybind11/embed.h>
#include "NoNut/core/Utils.h"
#include "sqcontainers.h"
#include "sqevents.h"
@@ -30,9 +31,9 @@ SQInteger sq_onTime(HSQUIRRELVM vm)
{
SQInteger day, hour, min;
sq_getinteger(vm, 2, &day);
sq_getinteger(vm, 3, &hour);
sq_getinteger(vm, 4, &min);
nonut::sqGetValue(vm, 2, &day);
nonut::sqGetValue(vm, 3, &hour);
nonut::sqGetValue(vm, 4, &min);
py::dict kwargs = py::dict("day"_a=day, "hour"_a=hour, "min"_a=min);
g2o.attr("callEvent")("onTime", **kwargs);
@@ -42,8 +43,8 @@ SQInteger sq_onTime(HSQUIRRELVM vm)
SQInteger sq_onBan(HSQUIRRELVM vm)
{
SQObject obj;
sq_getstackobj(vm, 2, &obj);
HSQOBJECT obj;
nonut::sqGetValue(vm, 2, &obj);
Sqrat::Table banData = Sqrat::Table(obj, vm);
py::dict kwargs = sqParseTable(banData);
@@ -54,8 +55,8 @@ SQInteger sq_onBan(HSQUIRRELVM vm)
SQInteger sq_onUnban(HSQUIRRELVM vm)
{
SQObject obj;
sq_getstackobj(vm, 2, &obj);
HSQOBJECT obj;
nonut::sqGetValue(vm, 2, &obj);
Sqrat::Table banData = Sqrat::Table(obj, vm);
py::dict kwargs = sqParseTable(banData);

View File

@@ -1,5 +1,6 @@
#include <sqapi.h>
#include <pybind11/embed.h>
#include "NoNut/core/Utils.h"
#include "sqevents.h"
namespace py = pybind11;
@@ -11,10 +12,10 @@ SQInteger sq_onPlayerChangeColor(HSQUIRRELVM vm)
{
SQInteger playerid, r, g, b;
sq_getinteger(vm, 2, &playerid);
sq_getinteger(vm, 3, &r);
sq_getinteger(vm, 4, &g);
sq_getinteger(vm, 5, &b);
nonut::sqGetValue(vm, 2, &playerid);
nonut::sqGetValue(vm, 3, &r);
nonut::sqGetValue(vm, 4, &g);
nonut::sqGetValue(vm, 5, &b);
py::dict kwargs = py::dict("playerid"_a=playerid, "r"_a=r, "g"_a=g, "b"_a=b);
g2o.attr("callEvent")("onPlayerChangeColor", **kwargs);
@@ -26,9 +27,9 @@ SQInteger sq_onPlayerChangeFocus(HSQUIRRELVM vm)
{
SQInteger playerid, oldFocusId, newFocusId;
sq_getinteger(vm, 2, &playerid);
sq_getinteger(vm, 3, &oldFocusId);
sq_getinteger(vm, 4, &newFocusId);
nonut::sqGetValue(vm, 2, &playerid);
nonut::sqGetValue(vm, 3, &oldFocusId);
nonut::sqGetValue(vm, 4, &newFocusId);
py::dict kwargs = py::dict("playerid"_a=playerid, "oldFocusId"_a=oldFocusId, "newFocusId"_a=newFocusId);
g2o.attr("callEvent")("onPlayerChangeFocus", **kwargs);
@@ -40,9 +41,9 @@ SQInteger sq_onPlayerChangeHealth(HSQUIRRELVM vm)
{
SQInteger playerid, oldHP, newHP;
sq_getinteger(vm, 2, &playerid);
sq_getinteger(vm, 3, &oldHP);
sq_getinteger(vm, 4, &newHP);
nonut::sqGetValue(vm, 2, &playerid);
nonut::sqGetValue(vm, 3, &oldHP);
nonut::sqGetValue(vm, 4, &newHP);
py::dict kwargs = py::dict("playerid"_a=playerid, "oldHP"_a=oldHP, "newHP"_a=newHP);
g2o.attr("callEvent")("onPlayerChangeHealth", **kwargs);
@@ -54,9 +55,9 @@ SQInteger sq_onPlayerChangeMana(HSQUIRRELVM vm)
{
SQInteger playerid, oldMP, newMP;
sq_getinteger(vm, 2, &playerid);
sq_getinteger(vm, 3, &oldMP);
sq_getinteger(vm, 4, &newMP);
nonut::sqGetValue(vm, 2, &playerid);
nonut::sqGetValue(vm, 3, &oldMP);
nonut::sqGetValue(vm, 4, &newMP);
py::dict kwargs = py::dict("playerid"_a=playerid, "oldMP"_a=oldMP, "newMP"_a=newMP);
g2o.attr("callEvent")("onPlayerChangeMana", **kwargs);
@@ -68,9 +69,9 @@ SQInteger sq_onPlayerChangeMaxHealth(HSQUIRRELVM vm)
{
SQInteger playerid, oldMaxHP, newMaxHP;
sq_getinteger(vm, 2, &playerid);
sq_getinteger(vm, 3, &oldMaxHP);
sq_getinteger(vm, 4, &newMaxHP);
nonut::sqGetValue(vm, 2, &playerid);
nonut::sqGetValue(vm, 3, &oldMaxHP);
nonut::sqGetValue(vm, 4, &newMaxHP);
py::dict kwargs = py::dict("playerid"_a=playerid, "oldMaxHP"_a=oldMaxHP, "newMaxHP"_a=newMaxHP);
g2o.attr("callEvent")("onPlayerChangeMaxHealth", **kwargs);
@@ -82,9 +83,9 @@ SQInteger sq_onPlayerChangeMaxMana(HSQUIRRELVM vm)
{
SQInteger playerid, oldMaxMP, newMaxMP;
sq_getinteger(vm, 2, &playerid);
sq_getinteger(vm, 3, &oldMaxMP);
sq_getinteger(vm, 4, &newMaxMP);
nonut::sqGetValue(vm, 2, &playerid);
nonut::sqGetValue(vm, 3, &oldMaxMP);
nonut::sqGetValue(vm, 4, &newMaxMP);
py::dict kwargs = py::dict("playerid"_a=playerid, "oldMaxMP"_a=oldMaxMP, "newMaxMP"_a=newMaxMP);
g2o.attr("callEvent")("onPlayerChangeMaxMana", **kwargs);
@@ -96,9 +97,9 @@ SQInteger sq_onPlayerChangeWeaponMode(HSQUIRRELVM vm)
{
SQInteger playerid, oldWeaponMode, newWeaponMode;
sq_getinteger(vm, 2, &playerid);
sq_getinteger(vm, 3, &oldWeaponMode);
sq_getinteger(vm, 4, &newWeaponMode);
nonut::sqGetValue(vm, 2, &playerid);
nonut::sqGetValue(vm, 3, &oldWeaponMode);
nonut::sqGetValue(vm, 4, &newWeaponMode);
py::dict kwargs = py::dict("playerid"_a=playerid, "oldWeaponMode"_a=oldWeaponMode, "newWeaponMode"_a=newWeaponMode);
g2o.attr("callEvent")("onPlayerChangeWeaponMode", **kwargs);
@@ -109,12 +110,12 @@ SQInteger sq_onPlayerChangeWeaponMode(HSQUIRRELVM vm)
SQInteger sq_onPlayerChangeWorld(HSQUIRRELVM vm)
{
SQInteger playerid;
const SQChar* world;
const SQChar* waypoint;
const SQChar* world = nullptr;
const SQChar* waypoint = nullptr;
sq_getinteger(vm, 2, &playerid);
sq_getstring(vm, 3, &world);
sq_getstring(vm, 4, &waypoint);
nonut::sqGetValue(vm, 2, &playerid);
nonut::sqGetValue(vm, 3, &world);
nonut::sqGetValue(vm, 4, &waypoint);
py::dict kwargs = py::dict("playerid"_a=playerid, "world"_a=world, "waypoint"_a=waypoint);
g2o.attr("callEvent")("onPlayerChangeWorld", **kwargs);
@@ -130,9 +131,9 @@ SQInteger sq_onPlayerCommand(HSQUIRRELVM vm)
const SQChar* command;
const SQChar* params;
sq_getinteger(vm, 2, &playerid);
sq_getstring(vm, 3, &command);
sq_getstring(vm, 4, &params);
nonut::sqGetValue(vm, 2, &playerid);
nonut::sqGetValue(vm, 3, &command);
nonut::sqGetValue(vm, 4, &params);
py::dict kwargs = py::dict("playerid"_a=playerid, "command"_a=command, "params"_a=params);
g2o.attr("callEvent")("onPlayerCommand", **kwargs);
@@ -144,8 +145,8 @@ SQInteger sq_onPlayerDead(HSQUIRRELVM vm)
{
SQInteger playerid, killerid;
sq_getinteger(vm, 2, &playerid);
sq_getinteger(vm, 3, &killerid);
nonut::sqGetValue(vm, 2, &playerid);
nonut::sqGetValue(vm, 3, &killerid);
py::dict kwargs = py::dict("playerid"_a=playerid, "killerid"_a=killerid);
g2o.attr("callEvent")("onPlayerDead", **kwargs);
@@ -157,8 +158,8 @@ SQInteger sq_onPlayerDisconnect(HSQUIRRELVM vm)
{
SQInteger playerid, reason;
sq_getinteger(vm, 2, &playerid);
sq_getinteger(vm, 3, &reason);
nonut::sqGetValue(vm, 2, &playerid);
nonut::sqGetValue(vm, 3, &reason);
py::dict kwargs = py::dict("playerid"_a=playerid, "reason"_a=reason);
g2o.attr("callEvent")("onPlayerDisconnect", **kwargs);
@@ -171,8 +172,8 @@ SQInteger sq_onPlayerEnterWorld(HSQUIRRELVM vm)
SQInteger playerid;
const SQChar* world;
sq_getinteger(vm, 2, &playerid);
sq_getstring(vm, 3, &world);
nonut::sqGetValue(vm, 2, &playerid);
nonut::sqGetValue(vm, 3, &world);
py::dict kwargs = py::dict("playerid"_a=playerid, "world"_a=world);
g2o.attr("callEvent")("onPlayerEnterWorld", **kwargs);
@@ -184,7 +185,7 @@ SQInteger sq_onPlayerJoin(HSQUIRRELVM vm)
{
SQInteger playerid;
sq_getinteger(vm, 2, &playerid);
nonut::sqGetValue(vm, 2, &playerid);
py::dict kwargs = py::dict("playerid"_a=playerid);
g2o.attr("callEvent")("onPlayerJoin", **kwargs);
@@ -197,8 +198,8 @@ SQInteger sq_onPlayerMessage(HSQUIRRELVM vm)
SQInteger playerid;
const SQChar* message;
sq_getinteger(vm, 2, &playerid);
sq_getstring(vm, 3, &message);
nonut::sqGetValue(vm, 2, &playerid);
nonut::sqGetValue(vm, 3, &message);
py::dict kwargs = py::dict("playerid"_a=playerid, "message"_a=message);
g2o.attr("callEvent")("onPlayerMessage", **kwargs);
@@ -210,9 +211,9 @@ SQInteger sq_onPlayerMobInteract(HSQUIRRELVM vm)
{
SQInteger playerid, from, to;
sq_getinteger(vm, 2, &playerid);
sq_getinteger(vm, 3, &from);
sq_getinteger(vm, 3, &to);
nonut::sqGetValue(vm, 2, &playerid);
nonut::sqGetValue(vm, 3, &from);
nonut::sqGetValue(vm, 3, &to);
py::dict kwargs = py::dict("playerid"_a=playerid, "from"_a=from, "to"_a = to);
g2o.attr("callEvent")("onPlayerMobInteract", **kwargs);
@@ -224,7 +225,7 @@ SQInteger sq_onPlayerRespawn(HSQUIRRELVM vm)
{
SQInteger playerid;
sq_getinteger(vm, 2, &playerid);
nonut::sqGetValue(vm, 2, &playerid);
py::dict kwargs = py::dict("playerid"_a=playerid);
g2o.attr("callEvent")("onPlayerRespawn", **kwargs);
@@ -237,8 +238,8 @@ SQInteger sq_onPlayerShoot(HSQUIRRELVM vm)
SQInteger playerid;
const SQChar* munition;
sq_getinteger(vm, 2, &playerid);
sq_getstring(vm, 3, &munition);
nonut::sqGetValue(vm, 2, &playerid);
nonut::sqGetValue(vm, 3, &munition);
py::dict kwargs = py::dict("playerid"_a=playerid, "munition"_a=munition);
g2o.attr("callEvent")("onPlayerShoot", **kwargs);
@@ -251,8 +252,8 @@ SQInteger sq_onPlayerSpellCast(HSQUIRRELVM vm)
SQInteger playerid;
const SQChar* instance;
sq_getinteger(vm, 2, &playerid);
sq_getstring(vm, 3, &instance);
nonut::sqGetValue(vm, 2, &playerid);
nonut::sqGetValue(vm, 3, &instance);
py::dict kwargs = py::dict("playerid"_a=playerid, "instance"_a=instance);
g2o.attr("callEvent")("onPlayerSpellCast", **kwargs);
@@ -265,8 +266,8 @@ SQInteger sq_onPlayerSpellSetup(HSQUIRRELVM vm)
SQInteger playerid;
const SQChar* instance;
sq_getinteger(vm, 2, &playerid);
sq_getstring(vm, 3, &instance);
nonut::sqGetValue(vm, 2, &playerid);
nonut::sqGetValue(vm, 3, &instance);
py::dict kwargs = py::dict("playerid"_a=playerid, "instance"_a=instance);
g2o.attr("callEvent")("onPlayerSpellSetup", **kwargs);
@@ -279,8 +280,8 @@ SQInteger sq_onPlayerTeleport(HSQUIRRELVM vm)
SQInteger playerid;
const SQChar* vobName;
sq_getinteger(vm, 2, &playerid);
sq_getstring(vm, 3, &vobName);
nonut::sqGetValue(vm, 2, &playerid);
nonut::sqGetValue(vm, 3, &vobName);
py::dict kwargs = py::dict("playerid"_a=playerid, "vobName"_a=vobName);
g2o.attr("callEvent")("onPlayerTeleport", **kwargs);
@@ -294,9 +295,9 @@ SQInteger sq_onPlayerToggleFaceAni(HSQUIRRELVM vm)
const SQChar* aniName;
SQBool toggle;
sq_getinteger(vm, 2, &playerid);
sq_getstring(vm, 3, &aniName);
sq_getbool(vm, 4, &toggle);
nonut::sqGetValue(vm, 2, &playerid);
nonut::sqGetValue(vm, 3, &aniName);
nonut::sqGetValue(vm, 4, &toggle);
py::dict kwargs = py::dict("playerid"_a=playerid, "vobName"_a=aniName, "toggle"_a = toggle);
g2o.attr("callEvent")("onPlayerToggleFaceAni", **kwargs);
@@ -311,8 +312,8 @@ SQInteger sq_onPlayerEquipAmulet(HSQUIRRELVM vm)
SQInteger playerid;
const SQChar* instance;
sq_getinteger(vm, 2, &playerid);
sq_getstring(vm, 3, &instance);
nonut::sqGetValue(vm, 2, &playerid);
nonut::sqGetValue(vm, 3, &instance);
py::dict kwargs = py::dict("playerid"_a=playerid, "instance"_a=instance);
g2o.attr("callEvent")("onPlayerEquipAmulet", **kwargs);
@@ -325,8 +326,8 @@ SQInteger sq_onPlayerEquipArmor(HSQUIRRELVM vm)
SQInteger playerid;
const SQChar* instance;
sq_getinteger(vm, 2, &playerid);
sq_getstring(vm, 3, &instance);
nonut::sqGetValue(vm, 2, &playerid);
nonut::sqGetValue(vm, 3, &instance);
py::dict kwargs = py::dict("playerid"_a=playerid, "instance"_a=instance);
g2o.attr("callEvent")("onPlayerEquipArmor", **kwargs);
@@ -339,8 +340,8 @@ SQInteger sq_onPlayerEquipBelt(HSQUIRRELVM vm)
SQInteger playerid;
const SQChar* instance;
sq_getinteger(vm, 2, &playerid);
sq_getstring(vm, 3, &instance);
nonut::sqGetValue(vm, 2, &playerid);
nonut::sqGetValue(vm, 3, &instance);
py::dict kwargs = py::dict("playerid"_a=playerid, "instance"_a=instance);
g2o.attr("callEvent")("onPlayerEquipBelt", **kwargs);
@@ -353,9 +354,9 @@ SQInteger sq_onPlayerEquipHandItem(HSQUIRRELVM vm)
SQInteger playerid, hand;
const SQChar* instance;
sq_getinteger(vm, 2, &playerid);
sq_getinteger(vm, 3, &hand);
sq_getstring(vm, 4, &instance);
nonut::sqGetValue(vm, 2, &playerid);
nonut::sqGetValue(vm, 3, &hand);
nonut::sqGetValue(vm, 4, &instance);
py::dict kwargs = py::dict("playerid"_a=playerid, "hand"_a = hand, "instance"_a=instance);
g2o.attr("callEvent")("onPlayerEquipHandItem", **kwargs);
@@ -368,8 +369,8 @@ SQInteger sq_onPlayerEquipHelmet(HSQUIRRELVM vm)
SQInteger playerid;
const SQChar* instance;
sq_getinteger(vm, 2, &playerid);
sq_getstring(vm, 3, &instance);
nonut::sqGetValue(vm, 2, &playerid);
nonut::sqGetValue(vm, 3, &instance);
py::dict kwargs = py::dict("playerid"_a=playerid, "instance"_a=instance);
g2o.attr("callEvent")("onPlayerEquipHelmet", **kwargs);
@@ -382,8 +383,8 @@ SQInteger sq_onPlayerEquipMeleeWeapon(HSQUIRRELVM vm)
SQInteger playerid;
const SQChar* instance;
sq_getinteger(vm, 2, &playerid);
sq_getstring(vm, 3, &instance);
nonut::sqGetValue(vm, 2, &playerid);
nonut::sqGetValue(vm, 3, &instance);
py::dict kwargs = py::dict("playerid"_a=playerid, "instance"_a=instance);
g2o.attr("callEvent")("onPlayerEquipMeleeWeapon", **kwargs);
@@ -396,8 +397,8 @@ SQInteger sq_onPlayerEquipRangedWeapon(HSQUIRRELVM vm)
SQInteger playerid;
const SQChar* instance;
sq_getinteger(vm, 2, &playerid);
sq_getstring(vm, 3, &instance);
nonut::sqGetValue(vm, 2, &playerid);
nonut::sqGetValue(vm, 3, &instance);
py::dict kwargs = py::dict("playerid"_a=playerid, "instance"_a=instance);
g2o.attr("callEvent")("onPlayerEquipRangedWeapon", **kwargs);
@@ -410,9 +411,9 @@ SQInteger sq_onPlayerEquipRing(HSQUIRRELVM vm)
SQInteger playerid, hand;
const SQChar* instance;
sq_getinteger(vm, 2, &playerid);
sq_getinteger(vm, 3, &hand);
sq_getstring(vm, 4, &instance);
nonut::sqGetValue(vm, 2, &playerid);
nonut::sqGetValue(vm, 3, &hand);
nonut::sqGetValue(vm, 4, &instance);
py::dict kwargs = py::dict("playerid"_a=playerid, "hand"_a = hand, "instance"_a=instance);
g2o.attr("callEvent")("onPlayerEquipRing", **kwargs);
@@ -425,8 +426,8 @@ SQInteger sq_onPlayerEquipShield(HSQUIRRELVM vm)
SQInteger playerid;
const SQChar* instance;
sq_getinteger(vm, 2, &playerid);
sq_getstring(vm, 3, &instance);
nonut::sqGetValue(vm, 2, &playerid);
nonut::sqGetValue(vm, 3, &instance);
py::dict kwargs = py::dict("playerid"_a=playerid, "instance"_a=instance);
g2o.attr("callEvent")("onPlayerEquipShield", **kwargs);
@@ -439,9 +440,9 @@ SQInteger sq_onPlayerEquipSpell(HSQUIRRELVM vm)
SQInteger playerid, slotId;
const SQChar* instance;
sq_getinteger(vm, 2, &playerid);
sq_getinteger(vm, 3, &slotId);
sq_getstring(vm, 4, &instance);
nonut::sqGetValue(vm, 2, &playerid);
nonut::sqGetValue(vm, 3, &slotId);
nonut::sqGetValue(vm, 4, &instance);
py::dict kwargs = py::dict("playerid"_a=playerid, "slotId"_a = slotId, "instance"_a=instance);
g2o.attr("callEvent")("onPlayerEquipSpell", **kwargs);