From 8aa376511e7b461a621775abd9874c5a30ee8d14 Mon Sep 17 00:00:00 2001 From: HipsterCat Date: Tue, 5 Mar 2019 01:30:20 +0100 Subject: [PATCH] Added things --- dpnet/netserver.py | 23 +++++++++++++---------- dpnet/session.py | 1 + plugins/commands.py | 7 ++++++- server.py | 11 +++++++++++ 4 files changed, 31 insertions(+), 11 deletions(-) diff --git a/dpnet/netserver.py b/dpnet/netserver.py index de0991f..4cd79b4 100644 --- a/dpnet/netserver.py +++ b/dpnet/netserver.py @@ -151,8 +151,15 @@ class Netserver(asyncio.DatagramProtocol): logger.debug("%s:%s > %s (CFRAME CONNECT)", addr[0], addr[1], data.getvalue().hex()) # CONNECT CFRAME if session and session.Full: - logger.error("Session %s:%s was already fully connected. Ignoring.", session.ip, session.port) - return + if False: + logger.error("Session %s:%s was already fully connected. Ignoring.", session.ip, session.port) + return + else: + logger.error("Session %s:%s was already fully connected. Kicking the old one.", session.ip, session.port) + player = self.get_player(session) + if player: + self.server.remove_player(self.get_player(session)) + self.addrs.remove(session) elif session and not session.Full and session.SessID == cframe.SessID: # send CONNECTED logger.debug("Already partially established connection. Sending a CFRAME CONNECTED again.") @@ -501,14 +508,10 @@ class Netserver(asyncio.DatagramProtocol): objid = "75" plix = "01" model = "4b" - async def spawn(objid, plix, model): - await player.session.send_gamedata(bytes.fromhex("05"+plix+objid+"0000"+model+"00000000"), acknow=False) - await player.session.send_gamedata(bytes.fromhex("0a32000000"+plix+objid+"000001"+model+"0000000000000000000000000000000000000000000000000000000000000000000000000000000a12000000"+plix+objid+"0000"+model+"020000000000000000"), acknow=False) - await spawn(objid, plix, model) - - - #for i in range(76, 200): - # await spawn(struct.pack(" 1: + await self.server.broadcast_message("Spawning "+command[1]+"") + await self.server.spawn(self._nextid, "00", command[1]) + def setup(server): plugin = Commands(server) diff --git a/server.py b/server.py index 6d9bf1d..53f8260 100644 --- a/server.py +++ b/server.py @@ -10,6 +10,7 @@ from utils.logger import setup_logger import traceback import asyncio from aioconsole import ainput +import struct logger = setup_logger(__name__) @@ -137,6 +138,16 @@ class Server: continue await player.session.send_gamedata(payload, **kwargs) + async def broadcast_message_except(self, player, text, color=ChatColor.Yellow, type=ChatType.All): + for pplayer in self.players: + if pplayer.name == "[Server]" or pplayer == player: + continue + await pplayer.send_message(text, color=color, type=type) + + async def spawn(self, objid, plix, model): + await self.broadcast_gamedata(bytes.fromhex("05" + plix + struct.pack("