from .entity import Entity import random import struct from . import ChatColor, ChatType, Models from dpnet.DFrame import DFrame from dpnet.gamepackets import MSG_CHANGE_TEAM, MSG_PLAYER_PING class PlayerPhases: NONE = 0 CFRAME_CONNECT = 1 CFRAME_CONNECTED = 2 DN_INTERNAL_MESSAGE_PLAYER_CONNECT_INFO_EX = 3 DN_SEND_CONNECT_INFO = 4 DN_ACK_CONNECT_INFO = 5 INGAME = 6 class Player(Entity): def __init__(self, name, session): super().__init__() self.name = name self.session = session self.team = 2 self.score = 0 self.id = random.getrandbits(16) self.phase = PlayerPhases.NONE self.ping = 1 self.opts = {"debug": True} def get_index(self): return self.session.server.get_player_index(self) async def change_team(self, newteam, respawn=True): self.team = newteam await self.session.server.broadcast_event("on_player_change_team", self, self.team) await self.session.server.broadcast_gamedata(MSG_CHANGE_TEAM(self, newteam, respawn).to_packet()) async def send_ping(self, ping): await self.session.server.broadcast_gamedata(MSG_PLAYER_PING(self, ping).to_packet()) async def send_message(self, message, type=ChatType.All, playerindex=0, color=ChatColor.Orange): options = type | color playeri = 0x80 + playerindex await self.session.send_gamedata(b"\x35" + struct.pack("