Fix reg and add call_lua_event();

Add call_lua_event("onChatMessage");
New MP.RegisterEvent();
Add GetPositionRaw();
This commit is contained in:
Maxim Khomutov 2023-07-21 05:22:32 +03:00
parent 3b5324d115
commit 9ae200d48a
3 changed files with 34 additions and 14 deletions

View File

@ -536,6 +536,7 @@ class Client:
self.log.debug("Tried to send an empty event, ignoring") self.log.debug("Tried to send an empty event, ignoring")
return return
to_ev = {"message": msg, "player": self} 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) ev_data_list = ev.call_event("onChatReceive", **to_ev)
d2 = await ev.call_async_event("onChatReceive", **to_ev) d2 = await ev.call_async_event("onChatReceive", **to_ev)
ev_data_list.extend(d2) ev_data_list.extend(d2)

View File

@ -10,8 +10,6 @@ import asyncio
import builtins import builtins
import inspect import inspect
import lupa
from core import get_logger 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}', " self.log.debug(f"register_event(event_name='{event_name}', event_func='{event_func}', "
f"async_event={async_event}, lua_event={lua}):") f"async_event={async_event}, lua_event={lua}):")
if 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: 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: else:
self.__lua_events[event_name].append(event_func) self.__lua_events[event_name].append(event_func)
self.log.debug("Register ok")
return return
if not callable(event_func): if not callable(event_func):
@ -93,11 +87,13 @@ class EventsSystem:
self.__async_events.update({str(event_name): [event_func]}) self.__async_events.update({str(event_name): [event_func]})
else: else:
self.__async_events[event_name].append(event_func) self.__async_events[event_name].append(event_func)
self.log.debug("Register ok")
else: else:
if event_name not in self.__events: if event_name not in self.__events:
self.__events.update({str(event_name): [event_func]}) self.__events.update({str(event_name): [event_func]})
else: else:
self.__events[event_name].append(event_func) self.__events[event_name].append(event_func)
self.log.debug("Register ok")
async def call_async_event(self, event_name, *args, **kwargs): async def call_async_event(self, event_name, *args, **kwargs):
self.log.debug(f"Calling async event: '{event_name}'") self.log.debug(f"Calling async event: '{event_name}'")
@ -138,5 +134,23 @@ class EventsSystem:
return funcs_data return funcs_data
def call_lua_event(self, *args): def call_lua_event(self, event_name, *args):
pass 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

View File

@ -2,7 +2,6 @@ import asyncio
import os import os
import platform import platform
import lupa
from lupa.lua53 import LuaRuntime from lupa.lua53 import LuaRuntime
from core import get_logger from core import get_logger
@ -39,7 +38,7 @@ class MP:
def RegisterEvent(self, event_name: str, function_name: str) -> None: def RegisterEvent(self, event_name: str, function_name: str) -> None:
self.log.debug("request MP.RegisterEvent()") 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): def TriggerLocalEvent(self, event_name, *args):
self.log.debug("request TriggerLocalEvent()") self.log.debug("request TriggerLocalEvent()")
@ -74,9 +73,15 @@ class MP:
self.log.debug("request GetPlayerCount()") self.log.debug("request GetPlayerCount()")
return len(ev.call_event("_get_player", cid=-1)[0]) return len(ev.call_event("_get_player", cid=-1)[0])
def GetPositionRaw(self, pid, vid): def GetPositionRaw(self, player_id, car_id):
# TODO: GetPositionRaw
self.log.debug("request GetPositionRaw()") 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): def IsPlayerConnected(self, player_id):
self.log.debug("request IsPlayerConnected()") self.log.debug("request IsPlayerConnected()")