Пример #1
0
    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)
Пример #2
0
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)
Пример #3
0
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)
Пример #4
0
    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
Пример #5
0
    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
Пример #6
0
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)
Пример #7
0
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)
Пример #8
0
    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)
Пример #9
0
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)
Пример #10
0
    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)
Пример #11
0
    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)
Пример #12
0
    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)
Пример #13
0
    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)
Пример #14
0
def Server_Event_Changeclass(client, networker, game, event):
    player = game.current_state.players[event.playerid]
    player.nextclass = function.convert_class(event.newclass)
Пример #15
0
def Server_Event_Changeclass(client, networker, game, state, event):
    player = state.players[event.playerid]
    player.nextclass = function.convert_class(event.newclass)