Compare commits

..

5 Commits

Author SHA1 Message Date
59c113ade5 minor 2023-08-17 21:25:52 +03:00
a06c48dca5 Add _synced #1 2023-08-17 21:25:47 +03:00
42e4a8e05e Feature ev_data is None -> continue 2023-08-17 18:32:48 +03:00
074589da47 FIX GetPlayers #1 2023-08-17 18:27:16 +03:00
50c12f4b5c FIX _identifiers and e | e 2023-08-17 18:26:53 +03:00
6 changed files with 20 additions and 5 deletions

View File

@ -32,6 +32,7 @@ class Client:
self.nick = None
self.roles = None
self._guest = True
self._synced = False
self._ready = False
self._identifiers = []
self._cars = [None] * 21 # Max 20 cars per player + 1 snowman
@ -72,6 +73,10 @@ class Client:
def guest(self):
return self._guest
@property
def synced(self):
return self._synced
@property
def ready(self):
return self._ready
@ -617,6 +622,8 @@ class Client:
ev_data_list.extend(d2)
need_send = True
for ev_data in ev_data_list:
if ev_data is None:
continue
try:
message = ev_data["message"]
to_all = ev_data.get("to_all")
@ -634,7 +641,9 @@ class Client:
self.log.info(f"{message}" if to_all else f"{self.nick}: {msg}")
await self._send(f"C:{message}", to_all=to_all, to_self=to_self, writer=writer)
need_send = False
except KeyError | AttributeError:
except KeyError:
self.log.error(i18n.client_event_invalid_data.format(ev_data))
except AttributeError:
self.log.error(i18n.client_event_invalid_data.format(ev_data))
if need_send:
if config.Options['log_chat']:
@ -702,6 +711,7 @@ class Client:
tasks = self.__tasks
recv = asyncio.create_task(self._recv())
tasks.append(recv)
self._synced = True
while self.__alive:
if len(self.__packets_queue) > 0:
for index, packet in enumerate(self.__packets_queue):

View File

@ -32,6 +32,7 @@ class Client:
self.roles: str = None
self._guest = True
self.__alive = True
self._synced = False
self._ready = False
self._focus_car = -1
self._identifiers = []
@ -55,6 +56,8 @@ class Client:
@property
def guest(self) -> bool: ...
@property
def synced(self) -> bool: ...
@property
def ready(self) -> bool: ...
@property
def identifiers(self) -> list: ...

View File

@ -11,7 +11,7 @@ __title__ = 'KuiToi-Server'
__description__ = 'BeamingDrive Multiplayer server compatible with BeamMP clients.'
__url__ = 'https://github.com/kuitoi/kuitoi-Server'
__version__ = '0.4.5'
__build__ = 2300 # Я это считаю лог файлами
__build__ = 2303 # Я это считаю лог файлами
__author__ = 'SantaSpeen'
__author_email__ = 'admin@kuitoi.su'
__license__ = "FPA"

View File

@ -57,7 +57,7 @@ class Core:
return None
if cid is not None:
if cid == -1:
return [i for i in self.clients if i is not None]
return [i for i in self.clients if i is not None and i.synced]
return self.clients_by_id.get(cid)
if nick:
return self.clients_by_nick.get(nick)

View File

@ -53,6 +53,8 @@ class TCPServer:
client.roles = res["roles"]
client._guest = res["guest"]
client._identifiers = {k: v for s in res["identifiers"] for k, v in [s.split(':')]}
if not client._identifiers.get("ip"):
client._identifiers["ip"] = client._addr[0]
# noinspection PyProtectedMember
client._update_logger()
except Exception as e:

View File

@ -110,7 +110,7 @@ class MP:
def TriggerLocalEvent(self, event_name, *args):
self.log.debug("request TriggerLocalEvent()")
self.log.debug(f"Calling local lua event: '{event_name} ({args})'")
self.log.debug(f"Calling local lua event: '{event_name}{args}'")
funcs_data = []
if event_name in self._local_events.keys():
for func_name in self._local_events[event_name]:
@ -233,7 +233,7 @@ class MP:
def GetPlayers(self):
self.log.debug("request GetPlayers()")
clients = ev.call_event("_get_player", cid=-1)[0]
return self._lua.table_from(clients)
return self._lua.table_from([i.nick for i in clients])
def IsPlayerGuest(self, player_id) -> bool:
self.log.debug("request IsPlayerGuest()")