feat: Added conversion SqTable -> Dictionary
+ Added onBan event + Fixed wrong argument order in onTime event
This commit is contained in:
@@ -28,9 +28,10 @@ def removeEventHandler(name, func):
|
||||
if item['function'] == func:
|
||||
del eventList[name][index]
|
||||
|
||||
## registering all the events
|
||||
## registering all events
|
||||
|
||||
addEvent('onInit')
|
||||
addEvent('onExit')
|
||||
addEvent('onTick')
|
||||
addEvent('onTime')
|
||||
addEvent('onBan')
|
||||
47
src/sqcontainers.cpp
Normal file
47
src/sqcontainers.cpp
Normal file
@@ -0,0 +1,47 @@
|
||||
#include <sqapi.h>
|
||||
#include <pybind11/embed.h>
|
||||
#include "sqcontainers.h"
|
||||
|
||||
namespace py = pybind11;
|
||||
using namespace pybind11::literals;
|
||||
|
||||
py::dict sqParseTable(Sqrat::Table tab)
|
||||
{
|
||||
py::dict result;
|
||||
Sqrat::Object::iterator tabIterator;
|
||||
int i = 0;
|
||||
|
||||
while (tab.Next(tabIterator))
|
||||
{
|
||||
HSQOBJECT key = tabIterator.getKey();
|
||||
HSQOBJECT value = tabIterator.getValue();
|
||||
|
||||
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);
|
||||
break;
|
||||
case OT_INTEGER:
|
||||
result[sq_objtostring(&key)] = sq_objtointeger(&value);
|
||||
break;
|
||||
case OT_FLOAT:
|
||||
result[sq_objtostring(&key)] = sq_objtofloat(&value);
|
||||
break;
|
||||
case OT_TABLE:
|
||||
result[sq_objtostring(&key)] = sqParseTable(Sqrat::Table(value));
|
||||
break;
|
||||
|
||||
default:
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
6
src/sqcontainers.h
Normal file
6
src/sqcontainers.h
Normal file
@@ -0,0 +1,6 @@
|
||||
#pragma once
|
||||
|
||||
namespace py = pybind11;
|
||||
using namespace pybind11::literals;
|
||||
|
||||
py::dict sqParseTable(Sqrat::Table);
|
||||
@@ -1,6 +1,6 @@
|
||||
#include <sqapi.h>
|
||||
#include <pybind11/embed.h>
|
||||
#include <iostream>
|
||||
#include "sqcontainers.h"
|
||||
|
||||
namespace py = pybind11;
|
||||
using namespace pybind11::literals;
|
||||
@@ -49,9 +49,9 @@ SQInteger sq_onTime(HSQUIRRELVM vm)
|
||||
{
|
||||
SQInteger day, hour, min;
|
||||
|
||||
sq_getinteger(vm, 4, &day);
|
||||
sq_getinteger(vm, 2, &day);
|
||||
sq_getinteger(vm, 3, &hour);
|
||||
sq_getinteger(vm, 2, &min);
|
||||
sq_getinteger(vm, 4, &min);
|
||||
|
||||
py::dict kwargs = py::dict("day"_a=day, "hour"_a=hour, "min"_a=min);
|
||||
g2o.attr("callEvent")("onTime", **kwargs);
|
||||
@@ -59,10 +59,23 @@ SQInteger sq_onTime(HSQUIRRELVM vm)
|
||||
return 0;
|
||||
}
|
||||
|
||||
SQInteger sq_onBan(HSQUIRRELVM vm)
|
||||
{
|
||||
SQObject obj;
|
||||
sq_getstackobj(vm, 2, &obj);
|
||||
Sqrat::Table banData = Sqrat::Table(obj, vm);
|
||||
|
||||
py::dict kwargs = sqParseTable(banData);
|
||||
g2o.attr("callEvent")("onBan", **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);
|
||||
}
|
||||
@@ -4,5 +4,6 @@ SQInteger sq_onInit(HSQUIRRELVM);
|
||||
SQInteger sq_onExit(HSQUIRRELVM);
|
||||
SQInteger sq_onTick(HSQUIRRELVM);
|
||||
SQInteger sq_onTime(HSQUIRRELVM);
|
||||
SQInteger sq_onBan(HSQUIRRELVM);
|
||||
|
||||
void registerSquirrelEvents();
|
||||
Reference in New Issue
Block a user