def service_new_player(self, server, game, newplayer): statebuffer = networking.databuffer.Buffer() state = game.current_state statebuffer.write("B", len(state.players)) for player_id, player_obj in state.players.items(): try: current_class = state.entities[player_obj.character_id].__class__ current_class = function.convert_class(current_class) character_exists = True except KeyError: # The character does not exist yet. # Send nextclass instead current_class = function.convert_class(player_obj.nextclass) character_exists = False statebuffer.write("32pBB", (player_obj.name, current_class, character_exists)) hello_event = networking.event_serialize.ServerEventHello(server.name, newplayer.id, server.game.maxplayers, state.map.mapname, constants.GAME_VERSION_NUMBER) map_event = networking.event_serialize.ServerChangeMap(state.map.mapname) events = [hello_event, map_event, networking.event_serialize.ServerEventFullUpdate(statebuffer)] for event in events: event.time = state.time newplayer.send_fullupdate(self, game, events)
def Client_Event_Changeclass(networker, game, senderplayer, event): player = game.current_state.players[senderplayer.id] # TODO: If any, add classlimits here newclass = function.convert_class(event.newclass) if player.nextclass == newclass: return player.nextclass = newclass classchange_event = event_serialize.ServerEventChangeclass(senderplayer.id, event.newclass) networker.sendbuffer.append(classchange_event) # Kill the character try: character = game.current_state.entities[player.character_id] character.die(game, game.current_state) death_event = event_serialize.ServerEventDie(player.id) networker.sendbuffer.append(death_event) except KeyError: # Character is already dead, we don't need to do anything here pass # Resurrect him with new class. FIXME: REMOVE THIS player.spawn(game, game.current_state) spawn_event = event_serialize.ServerEventSpawn(player.id, 2300, 50) networker.sendbuffer.append(spawn_event)
def Client_Event_Changeclass(networker, game, state, senderplayer, event): player = state.players[senderplayer.id] # TODO: If any, add classlimits here newclass = function.convert_class(event.newclass) if player.nextclass == newclass: return player.nextclass = newclass classchange_event = event_serialize.ServerEventChangeclass( senderplayer.id, event.newclass) game.sendbuffer.append(classchange_event) # Kill the character try: character = state.entities[player.character_id] character.die(game, state) death_event = event_serialize.ServerEventDie(player.id) game.sendbuffer.append(death_event) except KeyError: # Character is already dead, we don't need to do anything here pass # Resurrect him with new class. FIXME: REMOVE THIS player.spawn(game, state) spawn_event = event_serialize.ServerEventSpawn(player.id, 2300, 50) game.sendbuffer.append(spawn_event)
def __init__(self, renderer, character): self.sprite_location = (10, renderer.view_height - 75) # Where is the location on screen of the sprite self.class_number = str(function.convert_class(character)) self.hudsprite = pygrafix.image.load("huds/characterhud/"+ self.class_number + ".png") self.health_box_background = None self.health_box = None
def generate_full_update(self, game): packetstr = "" state = game.current_state packetstr += struct.pack(">B", len(state.players)) for player_id, player_obj in state.players.items(): try: current_class = state.entities[player_obj.character_id].__class__ current_class = function.convert_class(current_class) character_exists = True except KeyError: # The character does not exist yet. # Send nextclass instead current_class = function.convert_class(player_obj.nextclass) character_exists = False packetstr += struct.pack(">32pBB", player_obj.name, current_class, character_exists) event = networking.event_serialize.ServerEventFullUpdate(packetstr) return event
def Server_Full_Update(client, networker, game, state, event): numof_players = struct.unpack_from(">B", event.bytestr)[0] event.bytestr = event.bytestr[1:] for index in range(numof_players): player = engine.player.Player(game, state, index) player.name, player_class, character_exists = struct.unpack_from(">32pBB", event.bytestr) player.nextclass = function.convert_class(player_class) event.bytestr = event.bytestr[34:] if character_exists: player.spawn(game, state)
def Server_Full_Update(client, networker, game, state, event): numof_players = event.internalbuffer.read("B") # FIXME: Unclean mixing # Full update is going to roll over everything anyway, might as well start anew game.rendering_time = event.time for index in range(numof_players): player = engine.player.Player(game, state, index) player.name, player_class, character_exists = event.internalbuffer.read("32pBB") player.nextclass = function.convert_class(player_class) if character_exists: player.spawn(game, state)
def __init__(self, renderer, game, state, character_id): self.sprite_location = (10, renderer.view_height - 75) character = state.entities[character_id] my_class_type = type(character) my_class_number = str(function.convert_class(my_class_type)) self.hudsprite = sfml.Sprite(function.load_texture(constants.SPRITE_FOLDER + "huds/characterhud/"+ my_class_number + ".png")) self.health_box_background = None self.health_box = None self.health_text = HealthText() self.health_text.health_location = (56, renderer.view_height - 52) self.health_text.health_size = (36, 36)
def Server_Full_Update(client, networker, game, state, event): numof_players = struct.unpack_from(">B", event.bytestr)[0] event.bytestr = event.bytestr[1:] # FIXME: Unclean mixing game.rendering_time = event.time for index in range(numof_players): player = engine.player.Player(game, state, index) player.name, player_class, character_exists = struct.unpack_from(">32pBB", event.bytestr) player.nextclass = function.convert_class(player_class) event.bytestr = event.bytestr[34:] if character_exists: player.spawn(game, state)
def __init__(self, renderer, game, state, character): self.sprite_location = (10, renderer.view_height - 75) # Where is the location on screen of the sprite my_class_type = type(character) my_class_number = str(function.convert_class(my_class_type)) self.hudsprite = pygrafix.image.load("huds/characterhud/" + my_class_number + ".png") self.health_box_background = None self.health_box = None self.health_text = HealthText() self.health_text.health_location = (56, renderer.view_height - 52) self.health_text.health_size = (36, 36) self.debug_text = DebugText(game, character)
def service_new_player(self, server, game, newplayer): packetstr = "" state = game.current_state packetstr += struct.pack(">B", len(state.players)) for player_id, player_obj in state.players.items(): try: current_class = state.entities[player_obj.character_id].__class__ current_class = function.convert_class(current_class) character_exists = True except KeyError: # The character does not exist yet. # Send nextclass instead current_class = function.convert_class(player_obj.nextclass) character_exists = False packetstr += struct.pack(">32pBB", player_obj.name, current_class, character_exists) hello_event = networking.event_serialize.ServerEventHello(server.name, newplayer.id, server.game.maxplayers, server.game.map.mapname, constants.GAME_VERSION_NUMBER) events = [hello_event, networking.event_serialize.ServerEventFullUpdate(packetstr)] events[1].time = state.time newplayer.send_fullupdate(self, game, events)
def __init__(self, renderer, game, state, character_id): self.sprite_location = (10, renderer.view_height - 75) character = state.entities[character_id] my_class_type = type(character) my_class_number = str(function.convert_class(my_class_type)) self.hudsprite = sfml.Sprite( function.load_texture(constants.SPRITE_FOLDER + "huds/characterhud/" + my_class_number + ".png")) self.health_box_background = None self.health_box = None self.health_text = HealthText() self.health_text.health_location = (56, renderer.view_height - 52) self.health_text.health_size = (36, 36)
def Server_Event_Changeclass(client, networker, game, event): player = game.current_state.players[event.playerid] player.nextclass = function.convert_class(event.newclass)
def Server_Event_Changeclass(client, networker, game, state, event): player = state.players[event.playerid] player.nextclass = function.convert_class(event.newclass)