diff --git a/src/core/Client.py b/src/core/Client.py index 26d8e85..2f708c5 100644 --- a/src/core/Client.py +++ b/src/core/Client.py @@ -536,6 +536,7 @@ class Client: self.log.debug("Tried to send an empty event, ignoring") return to_ev = {"message": msg, "player": self} + ev.call_lua_event("onChatMessage", self.cid, self.nick, msg) ev_data_list = ev.call_event("onChatReceive", **to_ev) d2 = await ev.call_async_event("onChatReceive", **to_ev) ev_data_list.extend(d2) diff --git a/src/modules/EventsSystem/events_system.py b/src/modules/EventsSystem/events_system.py index 4d53764..c6de5ab 100644 --- a/src/modules/EventsSystem/events_system.py +++ b/src/modules/EventsSystem/events_system.py @@ -10,8 +10,6 @@ import asyncio import builtins import inspect -import lupa - from core import get_logger @@ -72,15 +70,11 @@ class EventsSystem: self.log.debug(f"register_event(event_name='{event_name}', event_func='{event_func}', " f"async_event={async_event}, lua_event={lua}):") if lua: - if type(event_func) != str and type(lua) != lupa.lua53.LuaRuntime: - self.log.error(f"Cannot add event '{event_name}'. " - f"Use `MP.RegisterEvent(\"{event_name}\", \"function\")` instead. Skipping it...") - return if event_name not in self.__lua_events: - self.__lua_events.update({str(event_name): [{"func": event_func, "engine": lua}]}) + self.__lua_events.update({str(event_name): [event_func]}) else: self.__lua_events[event_name].append(event_func) - + self.log.debug("Register ok") return if not callable(event_func): @@ -93,11 +87,13 @@ class EventsSystem: self.__async_events.update({str(event_name): [event_func]}) else: self.__async_events[event_name].append(event_func) + self.log.debug("Register ok") else: if event_name not in self.__events: self.__events.update({str(event_name): [event_func]}) else: self.__events[event_name].append(event_func) + self.log.debug("Register ok") async def call_async_event(self, event_name, *args, **kwargs): self.log.debug(f"Calling async event: '{event_name}'") @@ -138,5 +134,23 @@ class EventsSystem: return funcs_data - def call_lua_event(self, *args): - pass + def call_lua_event(self, event_name, *args): + self.log.debug(f"Calling lua event: '{event_name}'") + funcs_data = [] + if event_name in self.__lua_events.keys(): + for func in self.__lua_events[event_name]: + try: + funcs_data.append(func(*args)) + except Exception as e: + # TODO: i18n + self.log.error(f'Error while calling "{event_name}"; In function: "{func.__name__}"') + self.log.exception(e) + else: + # TODO: i18n + self.log.warning(f"Event {event_name} does not exist, maybe ev.call_lua_event() or MP.Trigger<>Event()?. " + f"Just skipping it...") + + return funcs_data + + + diff --git a/src/modules/PluginsLoader/lua_plugins_loader.py b/src/modules/PluginsLoader/lua_plugins_loader.py index 8ea3ebc..72853b1 100644 --- a/src/modules/PluginsLoader/lua_plugins_loader.py +++ b/src/modules/PluginsLoader/lua_plugins_loader.py @@ -2,7 +2,6 @@ import asyncio import os import platform -import lupa from lupa.lua53 import LuaRuntime from core import get_logger @@ -39,7 +38,7 @@ class MP: def RegisterEvent(self, event_name: str, function_name: str) -> None: self.log.debug("request MP.RegisterEvent()") - ev.register_event(event_name, function_name, lua=self._lua) + ev.register_event(event_name, self._lua.globals()[function_name], lua=True) def TriggerLocalEvent(self, event_name, *args): self.log.debug("request TriggerLocalEvent()") @@ -74,9 +73,15 @@ class MP: self.log.debug("request GetPlayerCount()") return len(ev.call_event("_get_player", cid=-1)[0]) - def GetPositionRaw(self, pid, vid): - # TODO: GetPositionRaw + def GetPositionRaw(self, player_id, car_id): self.log.debug("request GetPositionRaw()") + client = ev.call_event("_get_player", cid=player_id)[0] + if client: + car = client.cars[car_id] + if car: + return self._lua.table_from(car['pos']) + return self._lua.table(), "Vehicle not found" + return self._lua.table(), "Client expired" def IsPlayerConnected(self, player_id): self.log.debug("request IsPlayerConnected()")