Add call_lua_events()

This commit is contained in:
Maxim Khomutov 2023-07-22 06:28:08 +03:00
parent 90113179d7
commit 33f2d2ba72
3 changed files with 41 additions and 4 deletions

View File

@ -364,6 +364,9 @@ class Client:
allow = True allow = True
allow_snowman = True allow_snowman = True
over_spawn = False over_spawn = False
lua_data = ev.call_lua_event("onVehicleSpawn", self.cid, car_id, car_data[car_data.find("{"):])
if 1 in lua_data:
allow = False
ev_data_list = ev.call_event("onCarSpawn", car=car_json, car_id=car_id, player=self) ev_data_list = ev.call_event("onCarSpawn", car=car_json, car_id=car_id, player=self)
d2 = await ev.call_async_event("onCarSpawn", car=car_json, car_id=car_id, player=self) d2 = await ev.call_async_event("onCarSpawn", car=car_json, car_id=car_id, player=self)
ev_data_list.extend(d2) ev_data_list.extend(d2)
@ -407,6 +410,8 @@ class Client:
if car_id != -1 and self.cars[car_id]: if car_id != -1 and self.cars[car_id]:
ev.call_lua_event("onVehicleDeleted", self.cid, car_id)
admin_allow = False # Delete from admin, for example... admin_allow = False # Delete from admin, for example...
ev_data_list = ev.call_event("onCarDelete", car=self.cars[car_id], car_id=car_id, player=self) ev_data_list = ev.call_event("onCarDelete", car=self.cars[car_id], car_id=car_id, player=self)
d2 = await ev.call_async_event("onCarDelete", car=self.cars[car_id], car_id=car_id, player=self) d2 = await ev.call_async_event("onCarDelete", car=self.cars[car_id], car_id=car_id, player=self)
@ -444,6 +449,9 @@ class Client:
allow = False allow = False
admin_allow = False admin_allow = False
lua_data = ev.call_lua_event("onVehicleEdited", self.cid, car_id, data[data.find("{"):])
if 1 in lua_data:
allow = False
ev_data_list = ev.call_event("onCarEdited", car=new_car_json, car_id=car_id, player=self) ev_data_list = ev.call_event("onCarEdited", car=new_car_json, car_id=car_id, player=self)
d2 = await ev.call_async_event("onCarEdited", car=new_car_json, car_id=car_id, player=self) d2 = await ev.call_async_event("onCarEdited", car=new_car_json, car_id=car_id, player=self)
ev_data_list.extend(d2) ev_data_list.extend(d2)
@ -472,8 +480,14 @@ class Client:
cid, car_id = self._get_cid_vid(raw_data) cid, car_id = self._get_cid_vid(raw_data)
if car_id != -1 and cid == self.cid and self.cars[car_id]: if car_id != -1 and cid == self.cid and self.cars[car_id]:
await self._send(raw_data, to_all=True, to_self=False) await self._send(raw_data, to_all=True, to_self=False)
ev.call_event("onCarReset", car=self.cars[car_id], car_id=car_id, player=self) ev.call_lua_event("onVehicleReset", self.cid, car_id, raw_data[raw_data.find("{"):])
await ev.call_async_event("onCarReset", car=self.cars[car_id], car_id=car_id, player=self) car_json = {}
try:
car_json = json.loads(raw_data[raw_data.find("{"):])
except Exception as e:
self.log.debug(f"Invalid new_car_json: Error: {e}; Data: {raw_data}")
ev.call_event("onCarReset", car=car_json, car_id=car_id, player=self)
await ev.call_async_event("onCarReset", car=car_json, car_id=car_id, player=self)
self.log.debug(f"Car reset: car_id={car_id}") self.log.debug(f"Car reset: car_id={car_id}")
else: else:
self.log.debug(f"Invalid car: car_id={car_id}") self.log.debug(f"Invalid car: car_id={car_id}")
@ -536,7 +550,11 @@ 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) lua_data = ev.call_lua_event("onChatMessage", self.cid, self.nick, msg)
if 1 in lua_data:
if config.Options['log_chat']:
self.log.info(f"{self.nick}: {msg}")
return
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)
@ -633,6 +651,10 @@ class Client:
if self.ready: if self.ready:
await self._send(f"J{self.nick} disconnected!", to_all=True, to_self=False) # I'm disconnected. await self._send(f"J{self.nick} disconnected!", to_all=True, to_self=False) # I'm disconnected.
self.log.debug(f"Removing client") self.log.debug(f"Removing client")
ev.call_lua_event("onPlayerDisconnect", self.cid)
ev.call_event("onPlayerDisconnect", player=self)
await ev.call_async_event("onPlayerDisconnect", player=self)
# TODO: i18n # TODO: i18n
self.log.info(f"Disconnected, online time: {round((time.monotonic() - self._connect_time) / 60, 2)}min.") self.log.info(f"Disconnected, online time: {round((time.monotonic() - self._connect_time) / 60, 2)}min.")
self.__Core.clients[self.cid] = None self.__Core.clients[self.cid] = None

View File

@ -73,8 +73,21 @@ class TCPServer:
await client.kick('Stale Client (replaced by new client)') await client.kick('Stale Client (replaced by new client)')
return False, client return False, client
allow = True
reason = "You are not allowed on the server!"
lua_data = ev.call_lua_event("onPlayerAuth", client.nick, client.roles, client.guest, client.identifiers)
for data in lua_data:
if 1 == data:
allow = True
elif isinstance(data, str):
allow = True
reason = data
if not allow:
await client.kick(reason)
return False, client
ev.call_event("onPlayerAuthenticated", player=client) ev.call_event("onPlayerAuthenticated", player=client)
ev.call_lua_event("onPlayerAuth", client.nick, client.roles, client.guest, client.identifiers)
if len(self.Core.clients_by_id) > config.Game["players"]: if len(self.Core.clients_by_id) > config.Game["players"]:
# TODO: i18n # TODO: i18n

View File

@ -33,6 +33,7 @@ class EventsSystem:
"onCarReset": [], "onCarReset": [],
"onSentPing": [], # Only sync "onSentPing": [], # Only sync
"onChangePosition": [], # Only sync "onChangePosition": [], # Only sync
"onPlayerDisconnect": [],
"onServerStopped": [], "onServerStopped": [],
} }
self.__async_events = { self.__async_events = {
@ -43,6 +44,7 @@ class EventsSystem:
"onCarDelete": [], "onCarDelete": [],
"onCarEdited": [], "onCarEdited": [],
"onCarReset": [], "onCarReset": [],
"onPlayerDisconnect": [],
"onServerStopped": [] "onServerStopped": []
} }