Prepare for lua events;

Add _get_player for info;
client.send_message();
This commit is contained in:
Maxim Khomutov 2023-07-21 01:15:31 +03:00
parent c8fea133ba
commit b345588c02
4 changed files with 44 additions and 8 deletions

View File

@ -94,7 +94,7 @@ class Client:
self.__alive = False
async def send_message(self, message, to_all=True):
pass
await self._send(f"C:{message}", to_all=to_all)
async def send_event(self, event_name, event_data):
pass

View File

@ -47,12 +47,12 @@ class Core:
self.BeamMP_version = "3.1.1" # 20.07.2023
ev.register_event("_get_BeamMP_version", lambda x: tuple([int(i) for i in self.BeamMP_version.split(".")]))
ev.register_event("_get_player", self.get_client)
ev.register_event("_get_player", lambda x: self.get_client(**x['kwargs']))
def get_client(self, cid=None, nick=None, from_ev=None):
if from_ev is not None:
return self.get_client(*from_ev['args'], **from_ev['kwargs'])
def get_client(self, cid=None, nick=None):
if cid is not None:
if cid == -1:
return [i for i in self.clients if i is not None]
return self.clients_by_id.get(cid)
if nick:
return self.clients_by_nick.get(nick)

View File

@ -10,6 +10,8 @@ import asyncio
import builtins
import inspect
import lupa
from core import get_logger
@ -46,12 +48,41 @@ class EventsSystem:
"onServerStopped": []
}
self.__lua_events = {
"onInit": [], # onServerStarted
"onShutdown": [], # onServerStopped
"onPlayerAuth": [], # onPlayerAuthenticated
"onPlayerConnecting": [], # TODO lua onPlayerConnecting
"onPlayerJoining": [], # TODO lua onPlayerJoining
"onPlayerJoin": [], # onPlayerJoin
"onPlayerDisconnect": [], # TODO lua onPlayerDisconnect
"onChatMessage": [], # onChatReceive
"onVehicleSpawn": [], # "onCarSpawn
"onVehicleEdited": [], # onCarEdited
"onVehicleDeleted": [], # onCarDelete
"onVehicleReset": [], # onCarReset
"onFileChanged": [], # TODO lua onFileChanged
}
def builtins_hook(self):
self.log.debug("used builtins_hook")
builtins.ev = self
def register_event(self, event_name, event_func, async_event=False):
self.log.debug(f"register_event({event_name}, {event_func}):")
def register_event(self, event_name, event_func, async_event=False, lua=None):
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}]})
else:
self.__lua_events[event_name].append(event_func)
return
if not callable(event_func):
# TODO: i18n
self.log.error(f"Cannot add event '{event_name}'. "
@ -106,3 +137,6 @@ class EventsSystem:
self.log.warning(f"Event {event_name} does not exist, maybe ev.call_async_event()?. Just skipping it...")
return funcs_data
def call_lua_event(self, *args):
pass

View File

@ -3,9 +3,11 @@ from typing import Any
class EventsSystem:
@staticmethod
def register_event(event_name, event_func): ...
def register_event(event_name, event_func, async_event: bool = False, lua: bool | object = None): ...
@staticmethod
async def call_async_event(event_name, *args, **kwargs) -> list[Any]: ...
@staticmethod
def call_event(event_name, *data, **kwargs) -> list[Any]: ...
@staticmethod
def call_lua_event(event_name, *data) -> list[Any]: ...
class ev(EventsSystem): ...