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))
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)
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)
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)
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
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)