feat: Added exception handling

This commit is contained in:
AURUMVORXX
2024-11-04 16:46:39 +03:00
parent 3f477f5a32
commit 2722f33e62
5 changed files with 66 additions and 36 deletions

View File

@@ -7,6 +7,7 @@ namespace py = pybind11;
using namespace pybind11::literals;
extern py::module_ g2o;
extern py::module_ pysys;
void addEventHandler(const char* eventName, SQFUNCTION closure, unsigned int priority = 9999)
{
@@ -28,6 +29,19 @@ void addEventHandler(const char* eventName, SQFUNCTION closure, unsigned int pri
sq_pop(vm, 1);
}
void callEvent(const char* eventName, py::dict kwargs)
{
try
{
g2o.attr("callEvent")(eventName, **kwargs);
}
catch (py::error_already_set &e)
{
pysys.attr("stderr").attr("write")(e.what());
}
}
void registerSquirrelEvents()
{
addEventHandler("onInit", sq_onInit, 0);

View File

@@ -1,6 +1,11 @@
#ifndef _SQEVENTS_H_
#define _SQEVENTS_H
namespace py = pybind11;
using namespace pybind11::literals;
void callEvent(const char*, py::dict);
SQInteger sq_onInit(HSQUIRRELVM);
SQInteger sq_onExit(HSQUIRRELVM);
SQInteger sq_onTick(HSQUIRRELVM);

View File

@@ -36,7 +36,7 @@ SQInteger sq_onTime(HSQUIRRELVM vm)
nonut::sqGetValue(vm, 4, &min);
py::dict kwargs = py::dict("day"_a=day, "hour"_a=hour, "min"_a=min);
g2o.attr("callEvent")("onTime", **kwargs);
callEvent("onTime", kwargs);
return 0;
}
@@ -48,7 +48,7 @@ SQInteger sq_onBan(HSQUIRRELVM vm)
Sqrat::Table banData = Sqrat::Table(obj, vm);
py::dict kwargs = sqParseTable(banData);
g2o.attr("callEvent")("onBan", **kwargs);
callEvent("onBan", kwargs);
return 0;
}
@@ -60,7 +60,7 @@ SQInteger sq_onUnban(HSQUIRRELVM vm)
Sqrat::Table banData = Sqrat::Table(obj, vm);
py::dict kwargs = sqParseTable(banData);
g2o.attr("callEvent")("onUnban", **kwargs);
callEvent("onUnban", kwargs);
return 0;
}

View File

@@ -18,7 +18,7 @@ SQInteger sq_onPlayerChangeColor(HSQUIRRELVM vm)
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);
callEvent("onPlayerChangeColor", kwargs);
return 0;
}
@@ -32,7 +32,7 @@ SQInteger sq_onPlayerChangeFocus(HSQUIRRELVM vm)
nonut::sqGetValue(vm, 4, &newFocusId);
py::dict kwargs = py::dict("playerid"_a=playerid, "oldFocusId"_a=oldFocusId, "newFocusId"_a=newFocusId);
g2o.attr("callEvent")("onPlayerChangeFocus", **kwargs);
callEvent("onPlayerChangeFocus", kwargs);
return 0;
}
@@ -46,7 +46,7 @@ SQInteger sq_onPlayerChangeHealth(HSQUIRRELVM vm)
nonut::sqGetValue(vm, 4, &newHP);
py::dict kwargs = py::dict("playerid"_a=playerid, "oldHP"_a=oldHP, "newHP"_a=newHP);
g2o.attr("callEvent")("onPlayerChangeHealth", **kwargs);
callEvent("onPlayerChangeHealth", kwargs);
return 0;
}
@@ -60,7 +60,7 @@ SQInteger sq_onPlayerChangeMana(HSQUIRRELVM vm)
nonut::sqGetValue(vm, 4, &newMP);
py::dict kwargs = py::dict("playerid"_a=playerid, "oldMP"_a=oldMP, "newMP"_a=newMP);
g2o.attr("callEvent")("onPlayerChangeMana", **kwargs);
callEvent("onPlayerChangeMana", kwargs);
return 0;
}
@@ -74,7 +74,7 @@ SQInteger sq_onPlayerChangeMaxHealth(HSQUIRRELVM vm)
nonut::sqGetValue(vm, 4, &newMaxHP);
py::dict kwargs = py::dict("playerid"_a=playerid, "oldMaxHP"_a=oldMaxHP, "newMaxHP"_a=newMaxHP);
g2o.attr("callEvent")("onPlayerChangeMaxHealth", **kwargs);
callEvent("onPlayerChangeMaxHealth", kwargs);
return 0;
}
@@ -88,7 +88,7 @@ SQInteger sq_onPlayerChangeMaxMana(HSQUIRRELVM vm)
nonut::sqGetValue(vm, 4, &newMaxMP);
py::dict kwargs = py::dict("playerid"_a=playerid, "oldMaxMP"_a=oldMaxMP, "newMaxMP"_a=newMaxMP);
g2o.attr("callEvent")("onPlayerChangeMaxMana", **kwargs);
callEvent("onPlayerChangeMaxMana", kwargs);
return 0;
}
@@ -102,7 +102,7 @@ SQInteger sq_onPlayerChangeWeaponMode(HSQUIRRELVM vm)
nonut::sqGetValue(vm, 4, &newWeaponMode);
py::dict kwargs = py::dict("playerid"_a=playerid, "oldWeaponMode"_a=oldWeaponMode, "newWeaponMode"_a=newWeaponMode);
g2o.attr("callEvent")("onPlayerChangeWeaponMode", **kwargs);
callEvent("onPlayerChangeWeaponMode", kwargs);
return 0;
}
@@ -118,7 +118,7 @@ SQInteger sq_onPlayerChangeWorld(HSQUIRRELVM vm)
nonut::sqGetValue(vm, 4, &waypoint);
py::dict kwargs = py::dict("playerid"_a=playerid, "world"_a=world, "waypoint"_a=waypoint);
g2o.attr("callEvent")("onPlayerChangeWorld", **kwargs);
callEvent("onPlayerChangeWorld", kwargs);
return 0;
}
@@ -136,7 +136,7 @@ SQInteger sq_onPlayerCommand(HSQUIRRELVM vm)
nonut::sqGetValue(vm, 4, &params);
py::dict kwargs = py::dict("playerid"_a=playerid, "command"_a=command, "params"_a=params);
g2o.attr("callEvent")("onPlayerCommand", **kwargs);
callEvent("onPlayerCommand", kwargs);
return 0;
}
@@ -149,7 +149,7 @@ SQInteger sq_onPlayerDead(HSQUIRRELVM vm)
nonut::sqGetValue(vm, 3, &killerid);
py::dict kwargs = py::dict("playerid"_a=playerid, "killerid"_a=killerid);
g2o.attr("callEvent")("onPlayerDead", **kwargs);
callEvent("onPlayerDead", kwargs);
return 0;
}
@@ -162,7 +162,7 @@ SQInteger sq_onPlayerDisconnect(HSQUIRRELVM vm)
nonut::sqGetValue(vm, 3, &reason);
py::dict kwargs = py::dict("playerid"_a=playerid, "reason"_a=reason);
g2o.attr("callEvent")("onPlayerDisconnect", **kwargs);
callEvent("onPlayerDisconnect", kwargs);
return 0;
}
@@ -176,7 +176,7 @@ SQInteger sq_onPlayerEnterWorld(HSQUIRRELVM vm)
nonut::sqGetValue(vm, 3, &world);
py::dict kwargs = py::dict("playerid"_a=playerid, "world"_a=world);
g2o.attr("callEvent")("onPlayerEnterWorld", **kwargs);
callEvent("onPlayerEnterWorld", kwargs);
return 0;
}
@@ -188,7 +188,7 @@ SQInteger sq_onPlayerJoin(HSQUIRRELVM vm)
nonut::sqGetValue(vm, 2, &playerid);
py::dict kwargs = py::dict("playerid"_a=playerid);
g2o.attr("callEvent")("onPlayerJoin", **kwargs);
callEvent("onPlayerJoin", kwargs);
return 0;
}
@@ -202,7 +202,7 @@ SQInteger sq_onPlayerMessage(HSQUIRRELVM vm)
nonut::sqGetValue(vm, 3, &message);
py::dict kwargs = py::dict("playerid"_a=playerid, "message"_a=message);
g2o.attr("callEvent")("onPlayerMessage", **kwargs);
callEvent("onPlayerMessage", kwargs);
return 0;
}
@@ -216,7 +216,7 @@ SQInteger sq_onPlayerMobInteract(HSQUIRRELVM vm)
nonut::sqGetValue(vm, 3, &to);
py::dict kwargs = py::dict("playerid"_a=playerid, "from"_a=from, "to"_a = to);
g2o.attr("callEvent")("onPlayerMobInteract", **kwargs);
callEvent("onPlayerMobInteract", kwargs);
return 0;
}
@@ -228,7 +228,7 @@ SQInteger sq_onPlayerRespawn(HSQUIRRELVM vm)
nonut::sqGetValue(vm, 2, &playerid);
py::dict kwargs = py::dict("playerid"_a=playerid);
g2o.attr("callEvent")("onPlayerRespawn", **kwargs);
callEvent("onPlayerRespawn", kwargs);
return 0;
}
@@ -242,7 +242,7 @@ SQInteger sq_onPlayerShoot(HSQUIRRELVM vm)
nonut::sqGetValue(vm, 3, &munition);
py::dict kwargs = py::dict("playerid"_a=playerid, "munition"_a=munition);
g2o.attr("callEvent")("onPlayerShoot", **kwargs);
callEvent("onPlayerShoot", kwargs);
return 0;
}
@@ -256,7 +256,7 @@ SQInteger sq_onPlayerSpellCast(HSQUIRRELVM vm)
nonut::sqGetValue(vm, 3, &instance);
py::dict kwargs = py::dict("playerid"_a=playerid, "instance"_a=instance);
g2o.attr("callEvent")("onPlayerSpellCast", **kwargs);
callEvent("onPlayerSpellCast", kwargs);
return 0;
}
@@ -270,7 +270,7 @@ SQInteger sq_onPlayerSpellSetup(HSQUIRRELVM vm)
nonut::sqGetValue(vm, 3, &instance);
py::dict kwargs = py::dict("playerid"_a=playerid, "instance"_a=instance);
g2o.attr("callEvent")("onPlayerSpellSetup", **kwargs);
callEvent("onPlayerSpellSetup", kwargs);
return 0;
}
@@ -284,7 +284,7 @@ SQInteger sq_onPlayerTeleport(HSQUIRRELVM vm)
nonut::sqGetValue(vm, 3, &vobName);
py::dict kwargs = py::dict("playerid"_a=playerid, "vobName"_a=vobName);
g2o.attr("callEvent")("onPlayerTeleport", **kwargs);
callEvent("onPlayerTeleport", kwargs);
return 0;
}
@@ -300,7 +300,7 @@ SQInteger sq_onPlayerToggleFaceAni(HSQUIRRELVM vm)
nonut::sqGetValue(vm, 4, &toggle);
py::dict kwargs = py::dict("playerid"_a=playerid, "vobName"_a=aniName, "toggle"_a = toggle);
g2o.attr("callEvent")("onPlayerToggleFaceAni", **kwargs);
callEvent("onPlayerToggleFaceAni", kwargs);
return 0;
}
@@ -316,7 +316,7 @@ SQInteger sq_onPlayerEquipAmulet(HSQUIRRELVM vm)
nonut::sqGetValue(vm, 3, &instance);
py::dict kwargs = py::dict("playerid"_a=playerid, "instance"_a=instance);
g2o.attr("callEvent")("onPlayerEquipAmulet", **kwargs);
callEvent("onPlayerEquipAmulet", kwargs);
return 0;
}
@@ -330,7 +330,7 @@ SQInteger sq_onPlayerEquipArmor(HSQUIRRELVM vm)
nonut::sqGetValue(vm, 3, &instance);
py::dict kwargs = py::dict("playerid"_a=playerid, "instance"_a=instance);
g2o.attr("callEvent")("onPlayerEquipArmor", **kwargs);
callEvent("onPlayerEquipArmor", kwargs);
return 0;
}
@@ -344,7 +344,7 @@ SQInteger sq_onPlayerEquipBelt(HSQUIRRELVM vm)
nonut::sqGetValue(vm, 3, &instance);
py::dict kwargs = py::dict("playerid"_a=playerid, "instance"_a=instance);
g2o.attr("callEvent")("onPlayerEquipBelt", **kwargs);
callEvent("onPlayerEquipBelt", kwargs);
return 0;
}
@@ -359,7 +359,7 @@ SQInteger sq_onPlayerEquipHandItem(HSQUIRRELVM vm)
nonut::sqGetValue(vm, 4, &instance);
py::dict kwargs = py::dict("playerid"_a=playerid, "hand"_a = hand, "instance"_a=instance);
g2o.attr("callEvent")("onPlayerEquipHandItem", **kwargs);
callEvent("onPlayerEquipHandItem", kwargs);
return 0;
}
@@ -373,7 +373,7 @@ SQInteger sq_onPlayerEquipHelmet(HSQUIRRELVM vm)
nonut::sqGetValue(vm, 3, &instance);
py::dict kwargs = py::dict("playerid"_a=playerid, "instance"_a=instance);
g2o.attr("callEvent")("onPlayerEquipHelmet", **kwargs);
callEvent("onPlayerEquipHelmet", kwargs);
return 0;
}
@@ -387,7 +387,7 @@ SQInteger sq_onPlayerEquipMeleeWeapon(HSQUIRRELVM vm)
nonut::sqGetValue(vm, 3, &instance);
py::dict kwargs = py::dict("playerid"_a=playerid, "instance"_a=instance);
g2o.attr("callEvent")("onPlayerEquipMeleeWeapon", **kwargs);
callEvent("onPlayerEquipMeleeWeapon", kwargs);
return 0;
}
@@ -401,7 +401,7 @@ SQInteger sq_onPlayerEquipRangedWeapon(HSQUIRRELVM vm)
nonut::sqGetValue(vm, 3, &instance);
py::dict kwargs = py::dict("playerid"_a=playerid, "instance"_a=instance);
g2o.attr("callEvent")("onPlayerEquipRangedWeapon", **kwargs);
callEvent("onPlayerEquipRangedWeapon", kwargs);
return 0;
}
@@ -416,7 +416,7 @@ SQInteger sq_onPlayerEquipRing(HSQUIRRELVM vm)
nonut::sqGetValue(vm, 4, &instance);
py::dict kwargs = py::dict("playerid"_a=playerid, "hand"_a = hand, "instance"_a=instance);
g2o.attr("callEvent")("onPlayerEquipRing", **kwargs);
callEvent("onPlayerEquipRing", kwargs);
return 0;
}
@@ -430,7 +430,7 @@ SQInteger sq_onPlayerEquipShield(HSQUIRRELVM vm)
nonut::sqGetValue(vm, 3, &instance);
py::dict kwargs = py::dict("playerid"_a=playerid, "instance"_a=instance);
g2o.attr("callEvent")("onPlayerEquipShield", **kwargs);
callEvent("onPlayerEquipShield", kwargs);
return 0;
}
@@ -445,7 +445,7 @@ SQInteger sq_onPlayerEquipSpell(HSQUIRRELVM vm)
nonut::sqGetValue(vm, 4, &instance);
py::dict kwargs = py::dict("playerid"_a=playerid, "slotId"_a = slotId, "instance"_a=instance);
g2o.attr("callEvent")("onPlayerEquipSpell", **kwargs);
callEvent("onPlayerEquipSpell", kwargs);
return 0;
}

View File

@@ -7,11 +7,22 @@
namespace py = pybind11;
py::scoped_interpreter guard{};
py::module_ g2o = py::module_::import("g2o");
py::module_ scripts = py::module_::import("scripts");
py::module_ pysys = py::module_::import("sys");
py::module_ g2o;
py::module_ scripts;
extern "C" SQRESULT SQRAT_API sqmodule_load(HSQUIRRELVM vm, HSQAPI api)
{
try
{
g2o = py::module_::import("g2o");
scripts = py::module_::import("scripts");
}
catch (py::error_already_set &e)
{
pysys.attr("stderr").attr("write")(e.what());
}
SqModule::Initialize(vm, api);
Sqrat::DefaultVM::Set(vm);