From f9f4df74389ee5fad876f0d1071f26735b6045ef Mon Sep 17 00:00:00 2001 From: SantaSpeen Date: Fri, 21 Jul 2023 17:42:00 +0300 Subject: [PATCH] Add TriggerLocalEvent, TriggerGlobalEvent --- .../PluginsLoader/lua_plugins_loader.py | 35 ++++++++++++++++--- 1 file changed, 30 insertions(+), 5 deletions(-) diff --git a/src/modules/PluginsLoader/lua_plugins_loader.py b/src/modules/PluginsLoader/lua_plugins_loader.py index ccd5c8d..e94e8a5 100644 --- a/src/modules/PluginsLoader/lua_plugins_loader.py +++ b/src/modules/PluginsLoader/lua_plugins_loader.py @@ -22,6 +22,11 @@ class MP: self.name = name self.tasks = [] self._lua = lua + self._local_events = { + "onInit": [], "onShutdown": [], "onPlayerAuth": [], "onPlayerConnecting": [], "onPlayerJoining": [], + "onPlayerJoin": [], "onPlayerDisconnect": [], "onChatMessage": [], "onVehicleSpawn": [], + "onVehicleEdited": [], "onVehicleDeleted": [], "onVehicleReset": [], "onFileChanged": [] + } def _print(self, *args): s = " ".join(map(str, args)) @@ -40,7 +45,13 @@ class MP: def RegisterEvent(self, event_name: str, function_name: str) -> None: self.log.debug("request MP.RegisterEvent()") - ev.register_event(event_name, self._lua.globals()[function_name], lua=True) + event_func = self._lua.globals()[function_name] + ev.register_event(event_name, event_func, lua=True) + if event_name not in self._local_events: + self._local_events.update({str(event_name): [event_func]}) + else: + self._local_events[event_name].append(event_func) + self.log.debug("Register ok (local)") def CreateEventTimer(self, event_name: str, interval_ms: int, strategy: int = None): self.log.debug("request CreateEventTimer()") @@ -52,13 +63,27 @@ class MP: def TriggerLocalEvent(self, event_name, *args): self.log.debug("request TriggerLocalEvent()") - # TODO: TriggerLocalEvent - return self._lua.table() + self.log.debug(f"Calling lcoal lua event: '{event_name}'") + funcs_data = [] + if event_name in self._local_events.keys(): + for func in self._local_events[event_name]: + try: + funcs_data.append(func(*args)) + except Exception as e: + self.log.error(f'Error while calling "{event_name}"; In function: "{func.__name__}"') + self.log.exception(e) + else: + self.log.warning(f"Event {event_name} does not exist, maybe ev.call_lua_event() or MP.Trigger<>Event()?. " + f"Just skipping it...") + + return self._lua.table_from({i: v for i, v in enumerate(funcs_data)}) def TriggerGlobalEvent(self, event_name, *args): self.log.debug("request TriggerGlobalEvent()") - # TODO: TriggerGlobalEvent - return self._lua.table(IsDone=lambda: True, GetResults=lambda: "somedata") + return self._lua.table( + IsDone=lambda: True, + GetResults=lambda: self._lua.table_from({i: v for i, v in enumerate(ev.call_lua_event(event_name,*args))}) + ) def SendChatMessage(self, player_id, message): self.log.debug("request SendChatMessage()")