From bb5167759282bd77b7560843e838cd3ebe2cd2ca Mon Sep 17 00:00:00 2001 From: AURUMVORXX Date: Mon, 4 Nov 2024 05:10:54 +0300 Subject: [PATCH] fix: Crash on adding `name` key into kwargs dictionary + Changed file structure for events --- .github/workflows/docs_pages.yml | 2 +- src/events/sqevents.cpp | 39 +++++++++++++++++++ src/{ => events}/sqevents.h | 8 +++- .../sqevents_general.cpp} | 31 +-------------- src/main.cpp | 2 +- src/sqcontainers.cpp | 6 +-- 6 files changed, 49 insertions(+), 39 deletions(-) create mode 100644 src/events/sqevents.cpp rename src/{ => events}/sqevents.h (60%) rename src/{sqevents.cpp => events/sqevents_general.cpp} (61%) diff --git a/.github/workflows/docs_pages.yml b/.github/workflows/docs_pages.yml index 0abe2ea..5189a31 100644 --- a/.github/workflows/docs_pages.yml +++ b/.github/workflows/docs_pages.yml @@ -3,7 +3,7 @@ name: docs on: push: branches: - - main + - master jobs: docs: diff --git a/src/events/sqevents.cpp b/src/events/sqevents.cpp new file mode 100644 index 0000000..23d4898 --- /dev/null +++ b/src/events/sqevents.cpp @@ -0,0 +1,39 @@ +#include +#include +#include "sqevents.h" +#include "sqcontainers.h" + +namespace py = pybind11; +using namespace pybind11::literals; + +extern py::module_ g2o; + +void addEventHandler(const char* eventName, SQFUNCTION closure, unsigned int priority = 9999) +{ + using namespace SqModule; + + Sqrat::Function sq_addEventHandler = Sqrat::RootTable().GetFunction("addEventHandler"); + + if (sq_addEventHandler.IsNull()) + return; + + HSQOBJECT closureHandle; + + sq_newclosure(vm, closure, 0); + sq_getstackobj(vm, -1, &closureHandle); + + Sqrat::Function func(vm, Sqrat::RootTable().GetObject(), closureHandle); + sq_addEventHandler(eventName, func, priority); + + sq_pop(vm, 1); +} + +void registerSquirrelEvents() +{ + addEventHandler("onInit", sq_onInit, 0); + addEventHandler("onExit", sq_onExit, 0); + addEventHandler("onTick", sq_onTick, 0); + addEventHandler("onTime", sq_onTime, 0); + addEventHandler("onBan", sq_onBan, 0); + addEventHandler("onUnban", sq_onUnban, 0); +} \ No newline at end of file diff --git a/src/sqevents.h b/src/events/sqevents.h similarity index 60% rename from src/sqevents.h rename to src/events/sqevents.h index 7ad91f2..a0870ff 100644 --- a/src/sqevents.h +++ b/src/events/sqevents.h @@ -1,9 +1,13 @@ -#pragma once +#ifndef _SQEVENTS_H_ +#define _SQEVENTS_H SQInteger sq_onInit(HSQUIRRELVM); SQInteger sq_onExit(HSQUIRRELVM); SQInteger sq_onTick(HSQUIRRELVM); SQInteger sq_onTime(HSQUIRRELVM); SQInteger sq_onBan(HSQUIRRELVM); +SQInteger sq_onUnban(HSQUIRRELVM); -void registerSquirrelEvents(); \ No newline at end of file +void registerSquirrelEvents(); + +#endif \ No newline at end of file diff --git a/src/sqevents.cpp b/src/events/sqevents_general.cpp similarity index 61% rename from src/sqevents.cpp rename to src/events/sqevents_general.cpp index 89ac1ab..51ba6ed 100644 --- a/src/sqevents.cpp +++ b/src/events/sqevents_general.cpp @@ -1,32 +1,13 @@ #include #include #include "sqcontainers.h" +#include "sqevents.h" namespace py = pybind11; using namespace pybind11::literals; extern py::module_ g2o; -void addEventHandler(const char* eventName, SQFUNCTION closure, unsigned int priority = 9999) -{ - using namespace SqModule; - - Sqrat::Function sq_addEventHandler = Sqrat::RootTable().GetFunction("addEventHandler"); - - if (sq_addEventHandler.IsNull()) - return; - - HSQOBJECT closureHandle; - - sq_newclosure(vm, closure, 0); - sq_getstackobj(vm, -1, &closureHandle); - - Sqrat::Function func(vm, Sqrat::RootTable().GetObject(), closureHandle); - sq_addEventHandler(eventName, func, priority); - - sq_pop(vm, 1); -} - SQInteger sq_onInit(HSQUIRRELVM vm) { py::object result = g2o.attr("callEvent")("onInit"); @@ -81,14 +62,4 @@ SQInteger sq_onUnban(HSQUIRRELVM vm) g2o.attr("callEvent")("onUnban", **kwargs); return 0; -} - -void registerSquirrelEvents() -{ - addEventHandler("onInit", sq_onInit, 0); - addEventHandler("onExit", sq_onExit, 0); - addEventHandler("onTick", sq_onTick, 0); - addEventHandler("onTime", sq_onTime, 0); - addEventHandler("onBan", sq_onBan, 0); - addEventHandler("onUnban", sq_onUnban, 0); } \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index db89945..455c7ab 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -2,7 +2,7 @@ #include #include #include -#include "sqevents.h" +#include "events/sqevents.h" namespace py = pybind11; py::scoped_interpreter guard{}; diff --git a/src/sqcontainers.cpp b/src/sqcontainers.cpp index 4c07e16..2c0a898 100644 --- a/src/sqcontainers.cpp +++ b/src/sqcontainers.cpp @@ -18,15 +18,11 @@ py::dict sqParseTable(Sqrat::Table tab) if (key._type != OT_STRING) continue; - - py::str pkey = "{0}_"; switch(value._type) { case OT_STRING: - // TODO: for some reason, key names 'name' and 'reason' crashing the server (maybe some more) - // Adding _ to key names is fixing this, but need to find a better solution - result[pkey.format(sq_objtostring(&key))] = sq_objtostring(&value); + result[sq_objtostring(&key)] = sq_objtostring(&value); break; case OT_INTEGER: result[sq_objtostring(&key)] = sq_objtointeger(&value);