def on_packet(self, packet): if isinstance(packet, p.MobileStatus): mobile = self._make_mobile(packet.serial) mobile.name = packet.name mobile.hits = BoundedValue(packet.hits, packet.hits_max) mobile.female = packet.female mobile.stats = packet.stats mobile.stamina = BoundedValue(packet.stamina, packet.stamina_max) mobile.mana = BoundedValue(packet.mana, packet.mana_max) mobile.gold = packet.gold mobile.armor = packet.armor mobile.mass = packet.mass mobile.stat_cap = packet.stat_cap self._signal('on_mobile_status', mobile) elif isinstance(packet, p.WorldItem): item = self._new_item(packet.serial) item.item_id = packet.item_id item.amount = packet.amount item.hue = packet.hue item.flags = packet.flags item.position = Position(packet.x, packet.y, packet.z, packet.direction) self._signal('on_world_item', item) elif isinstance(packet, p.LoginConfirm): self._clear() self.map_width = packet.map_width self.map_height = packet.map_height self.player = self._make_mobile(packet.serial) self.player.body = packet.body self.player.position = Position(packet.x, packet.y, packet.z, packet.direction) self.walk = Walk(self.player) elif isinstance(packet, p.Delete): self._delete_entity(packet.serial) elif isinstance(packet, p.MobileUpdate): mobile = self._make_mobile(packet.serial) mobile.body = packet.body mobile.hue = packet.hue mobile.flags = packet.flags mobile.position = Position(packet.x, packet.y, packet.z, packet.direction) self._signal('on_mobile_update', mobile) elif isinstance(packet, p.WalkReject): if self.walk is not None: self.walk.walk_reject(packet.seq, packet.x, packet.y, packet.z, packet.direction) self._signal('on_walk_reject') elif isinstance(packet, p.WalkAck): if self.walk is not None: self.walk.walk_ack(packet.seq, packet.notoriety) self._signal('on_walk_ack') elif isinstance(packet, p.OpenContainer): if packet.serial in self.entities: container = self.entities[packet.serial] container.gump_id = packet.gump_id self._signal('on_open_container', container) elif isinstance(packet, p.ContainerItem): item = self._new_item(packet.serial) item.item_id = packet.item_id item.hue = packet.hue item.parent_serial = packet.parent_serial item.amount = packet.amount item.position = Position(packet.x, packet.y) self._signal('on_container_item', item) elif isinstance(packet, p.EquipItem): item = self._new_item(packet.serial) item.item_id = packet.item_id item.hue = packet.hue item.parent_serial = packet.parent_serial item.layer = packet.layer self._signal('on_equip_item', item) elif isinstance(packet, p.SkillUpdate): if self.player is not None: self.player.update_skills(packet.skills) self._signal('on_skill_update', self.player.skills) elif isinstance(packet, p.ContainerContent): containers = set() for x in packet.items: self.on_packet(x) containers.add(x.parent_serial) for x in containers: if x in self.entities: self._signal('on_container_content', self.entities[x]) elif isinstance(packet, p.MobileIncoming): mobile = self._make_mobile(packet.serial) mobile.body = packet.body mobile.hue = packet.hue mobile.flags = packet.flags mobile.position = Position(packet.x, packet.y, packet.z, packet.direction) mobile.notoriety = packet.notoriety for x in packet.items: item = self._new_item(x.serial) item.parent_serial = mobile.serial item.item_id = x.item_id item.layer = x.layer item.hue = x.hue self._signal('on_mobile_incoming', mobile) elif isinstance(packet, p.MovePlayer): if self.walk is not None: self.walk.move_player(packet.direction) self._signal('on_move_player') elif isinstance(packet, p.MobileMoving): mobile = self._make_mobile(packet.serial) oldpos = mobile.position mobile.body = packet.body mobile.hue = packet.hue mobile.flags = packet.flags mobile.position = Position(packet.x, packet.y, packet.z, packet.direction) mobile.notoriety = packet.notoriety self._signal('on_mobile_moving', mobile, oldpos) elif isinstance(packet, p.MobileHits): mobile = self._make_mobile(packet.serial) mobile.hits = BoundedValue(packet.hits, packet.hits_max) self._signal('on_mobile_hits', mobile) elif isinstance(packet, p.MobileMana): mobile = self._make_mobile(packet.serial) mobile.mana = BoundedValue(packet.mana, packet.mana_max) self._signal('on_mobile_mana', mobile) elif isinstance(packet, p.MobileStamina): mobile = self._make_mobile(packet.serial) mobile.stamina = BoundedValue(packet.stamina, packet.stamina_max) self._signal('on_mobile_stamina', mobile) elif isinstance(packet, p.Extended): if packet.extended == 0x0019 and packet.extended2 == 2: # statlock info mobile = self._make_mobile(packet.serial) mobile.stat_locks = packet.stat_locks elif isinstance(packet, p.AsciiMessage): if packet.serial in self.entities: if packet.type == 0x06 or len(packet.name) > 0: entity = self.entities[packet.serial] entity.name = packet.text elif isinstance(packet, p.ChangeCombatant): if packet.serial != 0: self.combatant = self._make_mobile(packet.serial) else: self.combatant = None