コード例 #1
0
    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