コード例 #1
0
ファイル: packet007.py プロジェクト: lvm/terrabot
    def parse(self, world, player, data, ev_man):
        streamer = Streamer(data)
        streamer.next_byte()  # Ignore packet ID byte
        world.time = streamer.next_int32()
        world.daynight = streamer.next_byte()
        world.moonphase = streamer.next_byte()
        world.maxX = streamer.next_short()
        world.maxY = streamer.next_short()
        world.spawnX = streamer.next_short()
        world.spawnY = streamer.next_short()
        world.surface = streamer.next_short()
        world.rocklayer = streamer.next_short()
        world.worldID = streamer.next_int32()
        world.name = streamer.next_str()
        world.mode = streamer.next_byte()

        if player.initialized and not player.logged_in:
            player.logged_in = True
            ev_man.raise_event(Events.Login, None)

        if not player.initialized:
            player.initialized = True
            world.initialize_tiles(world.maxX, world.maxY)
            ev_man.raise_event(Events.Initialized, None)
コード例 #2
0
ファイル: packet7.py プロジェクト: flammified/terrabot
    def parse(self, world, player, data, ev_man):
        streamer = Streamer(data)
        streamer.next_byte()  # Ignore packet ID byte
        world.time = streamer.next_int32()
        world.daynight = streamer.next_byte()
        world.moonphase = streamer.next_byte()
        world.maxX = streamer.next_short()
        world.maxY = streamer.next_short()
        world.spawnX = streamer.next_short()
        world.spawnY = streamer.next_short()

        if player.initialized and not player.logged_in:
            player.logged_in = True
            ev_man.raise_event(Events.Login, None)

        if not player.initialized:
            player.initialized = True
            world.initialize_tiles(world.maxX, world.maxY)
            ev_man.raise_event(Events.Initialized, None)
コード例 #3
0
ファイル: packetA.py プロジェクト: moisterrific/terrabot
    def parse(self, world, player, data, ev_man):
        streamer = Streamer(data)
        streamer.next_byte()  # Skip packet number byte
        compressed = streamer.next_byte()

        if compressed:
            compressed_data = streamer.remainder()
            data = zlib.decompress(compressed_data, -zlib.MAX_WBITS)
            streamer = Streamer(data)

        startx = streamer.next_int32()
        starty = streamer.next_int32()
        width = streamer.next_short()
        height = streamer.next_short()

        repeat_count = 0
        last_tile = None

        for y in range(height):
            for x in range(width):
                if repeat_count > 0:
                    repeat_count -= 1
                    world.tiles[starty + y][startx + x] = last_tile
                else:
                    flag = streamer.next_byte()
                    flag2 = 0
                    flag3 = 0
                    if flag & 1:
                        flag2 = streamer.next_byte()
                    if flag2 & 1:
                        flag3 = streamer.next_byte()

                    active = flag & 2 > 0
                    has_wall = flag & 4 > 0
                    liquid = flag & 8 > 0
                    is_short = flag & 32 > 0
                    repeat_value_present = flag & 64 > 0
                    extra_repeat_value = flag & 128 > 0

                    wire = flag2 & 2 > 0
                    wire2 = flag2 & 4 > 0
                    wire3 = flag2 & 8 > 0

                    has_color = flag3 & 8 > 0
                    has_wall_color = flag3 & 16 > 0

                    frame_y = 0
                    frame_x = 0
                    wall = 0
                    wall_color = 0
                    tile_type = 0
                    color = (0, 0, 0)

                    if active:
                        if is_short:
                            tile_type = streamer.next_short()
                        else:
                            tile_type = streamer.next_byte()
                        if tile_type in frameImportant:
                            frame_x = streamer.next_short()
                            frame_y = streamer.next_short()
                    if has_color:
                        color = streamer.next_byte()
                    if has_wall:
                        wall = streamer.next_byte()
                        if has_wall_color:
                            wall_color = streamer.next_byte()
                    if liquid:
                        streamer.next_byte()
                    if wire:
                        streamer.next_byte()
                    if wire2:
                        streamer.next_byte()
                    if wire3:
                        streamer.next_byte()
                    if extra_repeat_value:
                        repeat_count = streamer.next_short()
                    else:
                        if repeat_value_present:
                            repeat_count = streamer.next_byte()
                    temp_tile = Tile(type=tile_type, active=active, color=color)
                    last_tile = temp_tile
                    world.tiles[starty + y][startx + x] = temp_tile

        ev_man.raise_event(Events.TileUpdate, world.tiles)