diff --git a/src/events/sqevents.cpp b/src/events/sqevents.cpp index fc9c0b9..3ee174c 100644 --- a/src/events/sqevents.cpp +++ b/src/events/sqevents.cpp @@ -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); diff --git a/src/events/sqevents.h b/src/events/sqevents.h index 84e8940..0f54b9b 100644 --- a/src/events/sqevents.h +++ b/src/events/sqevents.h @@ -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); diff --git a/src/events/sqevents_general.cpp b/src/events/sqevents_general.cpp index 6a72019..8dfe20a 100644 --- a/src/events/sqevents_general.cpp +++ b/src/events/sqevents_general.cpp @@ -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; } \ No newline at end of file diff --git a/src/events/sqevents_player.cpp b/src/events/sqevents_player.cpp index c6e12ea..32af7c4 100644 --- a/src/events/sqevents_player.cpp +++ b/src/events/sqevents_player.cpp @@ -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, ¶ms); 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; } \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index 455c7ab..9be3115 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -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);