make sure that player name in save matches requested player name

This commit is contained in:
troido 2020-04-08 16:46:15 +02:00
parent 108ae2f424
commit f52614874f
4 changed files with 22 additions and 3 deletions

View File

@ -61,7 +61,11 @@ class Game:
if t == "join":
if not self.world.hasPlayer(name):
self.world.createPlayer(name)
self.world.playerJoin(name)
try:
self.world.playerJoin(name)
except world.InvalidPlayerError as err:
self.server.playerError(name, err.errType, err.description)
print("Invalid player: " + str(err))
elif t == "leave":
self.world.removePlayer(name)
elif t == "input":

View File

@ -122,6 +122,9 @@ class GameServer:
def error(self, connection, errtype, description=""):
self.sendMessage(connection, messages.ErrorMessage(errtype, description))
def playerError(self, player, errtype, description=""):
self.error(self.players[player], errtype, description)
def close(self, connection):
if connection in self.connections:
name = self.connections[connection]

View File

@ -25,8 +25,8 @@ class PlayerLoader:
saved = json.load(f)
except OSError:
saved = None
return player.Player.fromJSON(saved, world)
p = player.Player.fromJSON(saved, world)
return p
def exists(self, name):
savePath = os.path.join(self.savePath, name + saveExt)

View File

@ -76,6 +76,8 @@ class World:
if name in self.players:
return self.players[name]
player = self.playerLoader.load(name, self)
if player.name != name:
raise InvalidPlayerError("Names do not match. Expected {}, found {}".format(name, player.name))
self.players[name] = player
return player
@ -130,3 +132,13 @@ class World:
self.deactivateRoom(room)
class InvalidPlayerError(Exception):
errType = "invalidplayer"
description = "This player can not be loaded correctly"
def __init__(self, description="", errType=None):
self.description = description
if errType is not None:
self.errType = errType