mirror of
https://github.com/kuitoi/kuitoi-Server.git
synced 2025-07-01 07:15:36 +00:00
[+] onCarSpawned
[+] onCarDeleted [~] change onChatReceive handler [~] Minor
This commit is contained in:
parent
1e685e69ed
commit
e43dc69b5c
@ -434,10 +434,8 @@ class Client:
|
||||
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", data=car_json, car_id=car_id, player=self)
|
||||
d2 = await ev.call_async_event("onCarSpawn", data=car_json, car_id=car_id, player=self)
|
||||
ev_data_list.extend(d2)
|
||||
for ev_data in ev_data_list:
|
||||
event_data = await ev.call_as_events("onCarSpawn", data=car_json, car_id=car_id, player=self)
|
||||
for ev_data in event_data:
|
||||
self.log.debug(ev_data)
|
||||
# TODO: handle event onCarSpawn
|
||||
pass
|
||||
@ -464,6 +462,9 @@ class Client:
|
||||
"pos": {}
|
||||
}
|
||||
await self._send(pkt, to_all=True, to_self=True)
|
||||
if self.focus_car == -1:
|
||||
self._focus_car = car_id
|
||||
await ev.call_as_events("onCarSpawned", data=car_json, car_id=car_id, player=self)
|
||||
else:
|
||||
await self._send(pkt)
|
||||
des = f"Od:{self.cid}-{car_id}"
|
||||
@ -482,13 +483,9 @@ class Client:
|
||||
|
||||
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...
|
||||
ev_data_list = ev.call_event("onCarDelete", data=self._cars[car_id], car_id=car_id, player=self)
|
||||
d2 = await ev.call_async_event("onCarDelete", data=self._cars[car_id], car_id=car_id, player=self)
|
||||
ev_data_list.extend(d2)
|
||||
for ev_data in ev_data_list:
|
||||
event_data = await ev.call_as_events("onCarDelete", data=self._cars[car_id], car_id=car_id, player=self)
|
||||
for ev_data in event_data:
|
||||
self.log.debug(ev_data)
|
||||
# TODO: handle event onCarDelete
|
||||
pass
|
||||
@ -503,8 +500,9 @@ class Client:
|
||||
self._cars[unicycle_id] = None
|
||||
self._cars[car_id] = None
|
||||
await self._send(f"Od:{self.cid}-{car_id}", to_all=True, to_self=True)
|
||||
await ev.call_as_events("onCarDeleted", data=self._cars[car_id], car_id=car_id, player=self)
|
||||
ev.call_lua_event("onVehicleDeleted", self.cid, car_id)
|
||||
self.log.debug(f"Deleted car: car_id={car_id}")
|
||||
|
||||
else:
|
||||
self.log.debug(f"Invalid car: car_id={car_id}")
|
||||
|
||||
@ -660,26 +658,23 @@ class Client:
|
||||
writer = None
|
||||
to_all = True
|
||||
to_self = True
|
||||
message = msg
|
||||
if event is False:
|
||||
need_send = False
|
||||
continue
|
||||
if isinstance(event, str):
|
||||
to_all = False
|
||||
message = event
|
||||
elif isinstance(event, int):
|
||||
if event == 0:
|
||||
message = f"{self.nick}: {msg}"
|
||||
match event:
|
||||
case False | 0:
|
||||
need_send = False
|
||||
continue
|
||||
else:
|
||||
message = event["message"]
|
||||
to_all = event.get("to_all")
|
||||
to_self = event.get("to_self")
|
||||
to_client = event.get("to")
|
||||
if to_client:
|
||||
writer = to_client._writer
|
||||
case {"message": message, **setting}:
|
||||
message = message
|
||||
to_all = setting.get("to_all", True)
|
||||
to_self = setting.get("to_self", True)
|
||||
to_client = setting.get("to")
|
||||
if to_client:
|
||||
writer = to_client._writer
|
||||
case _:
|
||||
self.log.error(f"[onChatReceive] Bad data returned from event: {event}")
|
||||
|
||||
if config.Options['log_chat']:
|
||||
self.log.info(f"[local] {message}" if to_all else f"{self.nick}: {msg}")
|
||||
self.log.info(f"[local] {message}" if not to_all else message)
|
||||
await self._send(f"C:{message}", to_all=to_all, to_self=to_self, writer=writer)
|
||||
need_send = False
|
||||
except KeyError:
|
||||
@ -695,13 +690,16 @@ class Client:
|
||||
if data is None:
|
||||
self.__alive = False
|
||||
return
|
||||
if len(data) == 0:
|
||||
self.__alive = False
|
||||
return
|
||||
|
||||
_bytes = False
|
||||
try:
|
||||
data = data.decode()
|
||||
except UnicodeDecodeError:
|
||||
_bytes = True
|
||||
self.log.error(f"UnicodeDecodeError: {data}")
|
||||
self.log.error("UnicodeDecodeError")
|
||||
|
||||
if data[0] in ['V', 'W', 'Y', 'E', 'N']:
|
||||
await self._send(data, to_all=True, to_self=False)
|
||||
|
@ -10,7 +10,7 @@ __title__ = 'KuiToi-Server'
|
||||
__description__ = 'BeamingDrive Multiplayer server compatible with BeamMP clients.'
|
||||
__url__ = 'https://github.com/kuitoi/kuitoi-Server'
|
||||
__version__ = '0.4.8'
|
||||
__build__ = 2676 # Я это считаю лог файлами
|
||||
__build__ = 2679 # Я это считаю лог файлами
|
||||
__author__ = 'SantaSpeen'
|
||||
__author_email__ = 'admin@anidev.ru'
|
||||
__license__ = "FPA"
|
||||
|
@ -18,7 +18,7 @@ from core import utils, __version__
|
||||
from core.Client import Client
|
||||
from core.tcp_server import TCPServer
|
||||
from core.udp_server import UDPServer
|
||||
from modules import PluginsLoader
|
||||
from modules import PluginsLoader, PermsSystem
|
||||
|
||||
|
||||
def calc_ticks(ticks, duration):
|
||||
@ -253,7 +253,7 @@ class Core:
|
||||
except Exception as e:
|
||||
self.log.error(f"Error in heartbeat: {e}")
|
||||
|
||||
async def kick_cmd(self, args):
|
||||
async def _cmd_kick(self, args):
|
||||
if not len(args) > 0:
|
||||
return "Usage: kick <nick>|:<id> [reason]\nExamples:\n\tkick admin bad boy\n\tkick :0 bad boy"
|
||||
reason = "kicked by console."
|
||||
@ -295,7 +295,7 @@ class Core:
|
||||
tps = calc_ticks(ticks, d)
|
||||
half = self.target_tps // 2
|
||||
qw = self.target_tps // 4
|
||||
if tps > half+qw:
|
||||
if tps > half + qw:
|
||||
return f"<green><b>{tps:.2f}</b></green>"
|
||||
elif tps > half:
|
||||
return f"<yellow><b>{tps:.2f}</b></yellow>"
|
||||
@ -324,7 +324,7 @@ class Core:
|
||||
ticks_60s = deque(maxlen=60 * int(target_tps) + 1)
|
||||
console.add_command("tps", lambda _: self._cmd_tps(ticks_2s, ticks_5s, ticks_30s, ticks_60s),
|
||||
None, "Print TPS", {"tps": None})
|
||||
_add_to_sleep = deque([0.0, 0.0, 0.0,], maxlen=3 * int(target_tps))
|
||||
_add_to_sleep = deque([0.0, 0.0, 0.0, ], maxlen=3 * int(target_tps))
|
||||
# _t0 = []
|
||||
|
||||
self.log.debug("tick system started")
|
||||
@ -372,19 +372,26 @@ class Core:
|
||||
except Exception as e:
|
||||
self.log.exception(e)
|
||||
|
||||
async def _parse_chat(self, event):
|
||||
player = event['kwargs']['player']
|
||||
message = event['kwargs']['message']
|
||||
|
||||
async def main(self):
|
||||
self.tcp = self.tcp(self, self.server_ip, self.server_port)
|
||||
self.udp = self.udp(self, self.server_ip, self.server_port)
|
||||
PermsSystem()
|
||||
console.add_command(
|
||||
"list",
|
||||
lambda x: f"Players list: {self.get_clients_list(True)}"
|
||||
)
|
||||
console.add_command("kick", self.kick_cmd, "kick - Kick user\n"
|
||||
"Usage: kick NICK|:{ID} [REASON]\n"
|
||||
"Examples:\n"
|
||||
" <white>></white> <b><skyblue>kick admin bad boy</skyblue></b>\n"
|
||||
" <white>></white> <b><skyblue>kick :0 bad boy</skyblue></b>",
|
||||
ev.call_event("add_perm_to_alias", "cmd.kick")
|
||||
console.add_command("kick", self._cmd_kick, "kick - Kick user\n"
|
||||
"Usage: kick NICK|:{ID} [REASON]\n"
|
||||
"Examples:\n"
|
||||
" <white>></white> <b><skyblue>kick admin bad boy</skyblue></b>\n"
|
||||
" <white>></white> <b><skyblue>kick :0 bad boy</skyblue></b>",
|
||||
"kick user", {"kick": "<playerlist>"})
|
||||
ev.register("onChatReceive", self._parse_chat)
|
||||
|
||||
pl_dir = "plugins"
|
||||
self.log.debug("Initializing PluginsLoaders...")
|
||||
@ -414,18 +421,19 @@ class Core:
|
||||
self.log.info(i18n.core_mods_loaded.format(len_mods, round(self.mods_list[0] / MB, 2)))
|
||||
self.log.info(i18n.init_ok)
|
||||
|
||||
await self.heartbeat(True)
|
||||
for i in range(int(config.Game["players"] * 4)): # * 4 For down sock and buffer.
|
||||
self.clients.append(None)
|
||||
await self.heartbeat(True) # Check
|
||||
|
||||
self.clients = [None] * config.Game["players"] * 4 # * 4 For down sock and buffer.
|
||||
tasks = []
|
||||
ev.register("serverTick_1s", self._check_alive)
|
||||
ev.register("serverTick_1s", self._send_online)
|
||||
# ev.register("serverTick_5s", self.heartbeat)
|
||||
f_tasks = [self.tcp.start, self.udp._start, console.start, self._tick, self.heartbeat]
|
||||
if config.RCON['enabled']:
|
||||
console.rcon.version = f"KuiToi {__version__}"
|
||||
rcon = console.rcon(config.RCON['password'], config.RCON['server_ip'], config.RCON['server_port'])
|
||||
f_tasks.append(rcon.start)
|
||||
self.log.warning("RCON not available. yet.")
|
||||
# console.rcon.version = f"KuiToi {__version__}"
|
||||
# rcon = console.rcon(config.RCON['password'], config.RCON['server_ip'], config.RCON['server_port'])
|
||||
# f_tasks.append(rcon.start)
|
||||
for task in f_tasks:
|
||||
tasks.append(asyncio.create_task(task()))
|
||||
t = asyncio.wait(tasks, return_when=asyncio.FIRST_EXCEPTION)
|
||||
|
@ -53,7 +53,8 @@ class Core:
|
||||
async def _cmd_tps(self, ticks_2s, ticks_5s, ticks_30s, ticks_60s) -> str: ...
|
||||
def _tick(self) -> None: ...
|
||||
async def heartbeat(self, test=False) -> None: ...
|
||||
async def kick_cmd(self, args: list) -> None | str: ...
|
||||
async def _cmd_kick(self, args: list) -> None | str: ...
|
||||
async def _parse_chat(self, event): ...
|
||||
async def main(self) -> None: ...
|
||||
def start(self) -> None: ...
|
||||
async def stop(self) -> None: ...
|
||||
|
Loading…
x
Reference in New Issue
Block a user