コード例 #1
0
ファイル: packet16.py プロジェクト: flammified/terrabot
	def parse(self, world, player, data, ev_man):
		streamer = Streamer(data)
		streamer.next_byte()  # Ignore packet number
		item_id = streamer.next_short()
		owner_id = streamer.next_byte()
		world.item_owner_index[item_id] = owner_id
		ev_man.raise_event(Events.ItemOwnerChanged, (item_id, owner_id))
コード例 #2
0
 def parse(self, world, player, data, ev_man):
     streamer = Streamer(data)
     streamer.next_byte()  # Skip packet id
     id = streamer.next_byte()
     color = (streamer.next_byte(), streamer.next_byte(), streamer.next_byte())
     length = streamer.next_byte()
     msg = str(streamer.remainder(), "utf-8")
     ev_man.raise_event(Events.Chat, msg)
コード例 #3
0
ファイル: packet15.py プロジェクト: flammified/terrabot
	def parse(self, world, player, data, ev_man):
		streamer = Streamer(data)
		streamer.next_byte()  # Skip packet byte
		item_id = streamer.next_short()
		position = (streamer.next_float(), streamer.next_float())
		velocity = (streamer.next_float(), streamer.next_float())
		stacks = streamer.next_short()
		prefix = streamer.next_byte()
		no_delay = streamer.next_byte()
		net_id = streamer.next_short()

		item_object = Item(item_id, net_id, position, velocity, prefix, stacks)

		if item_id in world.items:
			ev_man.raise_event(Events.ItemDropUpdate, item_object)
		else:
			world.items[item_id] = item_object
			if not item_id in world.item_owner_index:
				world.item_owner_index[item_id] = 255
			ev_man.raise_event(Events.ItemDropped, item_object)
コード例 #4
0
ファイル: packet19.py プロジェクト: flammified/terrabot
 def parse(self, world, player, data, ev_man):
     streamer = Streamer(data)
     streamer.next_byte()  # Skip packet id
     id = streamer.next_byte()
     color = (streamer.next_byte(),
              streamer.next_byte(),
              streamer.next_byte())
     length = streamer.next_byte()
     msg = str(streamer.remainder(), "utf-8")
     ev_man.raise_event(Events.Chat, msg)
コード例 #5
0
 def parse(self, world, player, data, ev_man):
     streamer = Streamer(data)
     streamer.next_byte()  # Ignore packet number
     item_id = streamer.next_short()
     owner_id = streamer.next_byte()
     world.item_owner_index[item_id] = owner_id
     ev_man.raise_event(Events.ItemOwnerChanged, (item_id, owner_id))
コード例 #6
0
ファイル: packet7.py プロジェクト: moisterrific/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)
コード例 #7
0
ファイル: packet15.py プロジェクト: moisterrific/terrabot
    def parse(self, world, player, data, ev_man):
        streamer = Streamer(data)
        streamer.next_byte()  # Skip packet byte
        item_id = streamer.next_short()
        position = (streamer.next_float(), streamer.next_float())
        velocity = (streamer.next_float(), streamer.next_float())
        stacks = streamer.next_short()
        prefix = streamer.next_byte()
        no_delay = streamer.next_byte()
        net_id = streamer.next_short()

        item_object = Item(item_id, net_id, position, velocity, prefix, stacks)

        if item_id in world.items:
            ev_man.raise_event(Events.ItemDropUpdate, item_object)
        else:
            world.items[item_id] = item_object
            if not item_id in world.item_owner_index:
                world.item_owner_index[item_id] = 255
            ev_man.raise_event(Events.ItemDropped, item_object)
コード例 #8
0
ファイル: Packet39.py プロジェクト: moisterrific/terrabot
    def parse(self, world, player, data, ev_man):
        streamer = Streamer(data)
        streamer.next_byte()  # Skip packet number
        item_index = streamer.next_short()

        world.item_owner_index[item_index] = 255
コード例 #9
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)
コード例 #10
0
ファイル: Packet39.py プロジェクト: flammified/terrabot
    def parse(self, world, player, data, ev_man):
        streamer = Streamer(data)
        streamer.next_byte()  # Skip packet number
        item_index = streamer.next_short()

        world.item_owner_index[item_index] = 255