Exemplo n.º 1
0
    def finish_loading(self):
        if self.creature_template and self.creature_instance:
            if not self.fully_loaded:
                creature_model_info = WorldDatabaseManager.creature_get_model_info(self.current_display_id)
                if creature_model_info:
                    self.bounding_radius = creature_model_info.bounding_radius
                    self.combat_reach = creature_model_info.combat_reach
                    self.gender = creature_model_info.gender

                if self.creature_template.scale == 0:
                    display_scale = DbcDatabaseManager.creature_display_info_get_by_id(self.current_display_id)
                    if display_scale and display_scale.CreatureModelScale > 0:
                        self.native_scale = display_scale.CreatureModelScale
                    else:
                        self.native_scale = 1
                else:
                    self.native_scale = self.creature_template.scale
                self.current_scale = self.native_scale

                if self.creature_template.equipment_id > 0:
                    creature_equip_template = WorldDatabaseManager.creature_get_equipment_by_id(
                        self.creature_template.equipment_id
                    )
                    if creature_equip_template:
                        self.set_virtual_item(0, creature_equip_template.equipentry1)
                        self.set_virtual_item(1, creature_equip_template.equipentry2)
                        self.set_virtual_item(2, creature_equip_template.equipentry3)

                self.fully_loaded = True
Exemplo n.º 2
0
    def preload_model_info(self):
        if self.creature_template and self.creature_instance:
            if not self.model_info_loaded:
                creature_model_info = WorldDatabaseManager.creature_get_model_info(
                    self.display_id)
                if creature_model_info:
                    self.bounding_radius = creature_model_info.bounding_radius
                    self.combat_reach = creature_model_info.combat_reach

                if self.creature_template.scale == 0:
                    display_scale = DbcDatabaseManager.creature_display_info_get_by_id(
                        self.display_id)
                    if display_scale and display_scale.CreatureModelScale > 0:
                        self.scale = display_scale.CreatureModelScale
                    else:
                        self.scale = 1
                else:
                    self.scale = self.creature_template.scale

                self.model_info_loaded = True
Exemplo n.º 3
0
    def get_update_packet(self,
                          update_type=UpdateTypes.UPDATE_FULL,
                          is_self=True):
        if self.creature_template and self.creature_instance:
            if not self.model_info_loaded:
                creature_model_info = WorldDatabaseManager.creature_get_model_info(
                    self.display_id)
                if creature_model_info:
                    self.bounding_radius = creature_model_info.bounding_radius
                    self.combat_reach = creature_model_info.combat_reach
                self.model_info_loaded = True

            self.bytes_1 = unpack(
                '<I', pack('<4B', self.stand_state, self.npc_flags, 0, 0))[0]
            self.damage = int(self.creature_template.dmg_max)  # temp

            # Object fields
            self.update_packet_factory.update(
                self.update_packet_factory.object_values,
                self.update_packet_factory.updated_object_fields,
                ObjectFields.OBJECT_FIELD_GUID, self.guid, 'Q')
            self.update_packet_factory.update(
                self.update_packet_factory.object_values,
                self.update_packet_factory.updated_object_fields,
                ObjectFields.OBJECT_FIELD_TYPE, self.get_object_type_value(),
                'I')
            self.update_packet_factory.update(
                self.update_packet_factory.object_values,
                self.update_packet_factory.updated_object_fields,
                ObjectFields.OBJECT_FIELD_ENTRY, self.entry, 'I')
            self.update_packet_factory.update(
                self.update_packet_factory.object_values,
                self.update_packet_factory.updated_object_fields,
                ObjectFields.OBJECT_FIELD_SCALE_X, self.scale, 'f')

            # Unit fields
            self.update_packet_factory.update(
                self.update_packet_factory.unit_values,
                self.update_packet_factory.updated_unit_fields,
                UnitFields.UNIT_CHANNEL_SPELL, self.channel_spell, 'I')
            self.update_packet_factory.update(
                self.update_packet_factory.unit_values,
                self.update_packet_factory.updated_unit_fields,
                UnitFields.UNIT_FIELD_CHANNEL_OBJECT, self.channel_object, 'Q')
            self.update_packet_factory.update(
                self.update_packet_factory.unit_values,
                self.update_packet_factory.updated_unit_fields,
                UnitFields.UNIT_FIELD_HEALTH, self.health, 'I')
            self.update_packet_factory.update(
                self.update_packet_factory.unit_values,
                self.update_packet_factory.updated_unit_fields,
                UnitFields.UNIT_FIELD_MAXHEALTH, self.max_health, 'I')
            self.update_packet_factory.update(
                self.update_packet_factory.unit_values,
                self.update_packet_factory.updated_unit_fields,
                UnitFields.UNIT_FIELD_LEVEL, self.level, 'I')
            self.update_packet_factory.update(
                self.update_packet_factory.unit_values,
                self.update_packet_factory.updated_unit_fields,
                UnitFields.UNIT_FIELD_FACTIONTEMPLATE, self.faction, 'I')
            self.update_packet_factory.update(
                self.update_packet_factory.unit_values,
                self.update_packet_factory.updated_unit_fields,
                UnitFields.UNIT_FIELD_FLAGS, self.unit_flags, 'I')
            self.update_packet_factory.update(
                self.update_packet_factory.unit_values,
                self.update_packet_factory.updated_unit_fields,
                UnitFields.UNIT_FIELD_COINAGE, self.coinage, 'I')
            self.update_packet_factory.update(
                self.update_packet_factory.unit_values,
                self.update_packet_factory.updated_unit_fields,
                UnitFields.UNIT_FIELD_BASEATTACKTIME, self.base_attack_time,
                'f')
            self.update_packet_factory.update(
                self.update_packet_factory.unit_values,
                self.update_packet_factory.updated_unit_fields,
                UnitFields.UNIT_FIELD_BASEATTACKTIME + 1, 0, 'f')
            self.update_packet_factory.update(
                self.update_packet_factory.unit_values,
                self.update_packet_factory.updated_unit_fields,
                UnitFields.UNIT_FIELD_RESISTANCES, self.resistance_0, 'q')
            self.update_packet_factory.update(
                self.update_packet_factory.unit_values,
                self.update_packet_factory.updated_unit_fields,
                UnitFields.UNIT_FIELD_RESISTANCES + 1, self.resistance_1, 'i')
            self.update_packet_factory.update(
                self.update_packet_factory.unit_values,
                self.update_packet_factory.updated_unit_fields,
                UnitFields.UNIT_FIELD_RESISTANCES + 2, self.resistance_2, 'i')
            self.update_packet_factory.update(
                self.update_packet_factory.unit_values,
                self.update_packet_factory.updated_unit_fields,
                UnitFields.UNIT_FIELD_RESISTANCES + 3, self.resistance_3, 'i')
            self.update_packet_factory.update(
                self.update_packet_factory.unit_values,
                self.update_packet_factory.updated_unit_fields,
                UnitFields.UNIT_FIELD_RESISTANCES + 4, self.resistance_4, 'i')
            self.update_packet_factory.update(
                self.update_packet_factory.unit_values,
                self.update_packet_factory.updated_unit_fields,
                UnitFields.UNIT_FIELD_RESISTANCES + 5, self.resistance_5, 'i')
            self.update_packet_factory.update(
                self.update_packet_factory.unit_values,
                self.update_packet_factory.updated_unit_fields,
                UnitFields.UNIT_FIELD_BOUNDINGRADIUS, self.bounding_radius,
                'f')
            self.update_packet_factory.update(
                self.update_packet_factory.unit_values,
                self.update_packet_factory.updated_unit_fields,
                UnitFields.UNIT_FIELD_COMBATREACH, self.combat_reach, 'f')
            self.update_packet_factory.update(
                self.update_packet_factory.unit_values,
                self.update_packet_factory.updated_unit_fields,
                UnitFields.UNIT_FIELD_DISPLAYID, self.display_id, 'I')
            self.update_packet_factory.update(
                self.update_packet_factory.unit_values,
                self.update_packet_factory.updated_unit_fields,
                UnitFields.UNIT_FIELD_BYTES_1, self.bytes_1, 'I')
            self.update_packet_factory.update(
                self.update_packet_factory.unit_values,
                self.update_packet_factory.updated_unit_fields,
                UnitFields.UNIT_MOD_CAST_SPEED, self.mod_cast_speed, 'f')
            self.update_packet_factory.update(
                self.update_packet_factory.unit_values,
                self.update_packet_factory.updated_unit_fields,
                UnitFields.UNIT_DYNAMIC_FLAGS, self.dynamic_flags, 'I')
            self.update_packet_factory.update(
                self.update_packet_factory.unit_values,
                self.update_packet_factory.updated_unit_fields,
                UnitFields.UNIT_FIELD_DAMAGE, self.damage, 'I')

            packet = b''
            if update_type == UpdateTypes.UPDATE_FULL:
                packet += self.create_update_packet(is_self)
            else:
                packet += self.create_partial_update_packet(
                    self.update_packet_factory)

            update_packet = packet + self.update_packet_factory.build_packet()
            return update_packet
Exemplo n.º 4
0
    def get_full_update_packet(self, is_self=True):
        if self.creature_template and self.creature_instance:
            if not self.model_info_loaded:
                creature_model_info = WorldDatabaseManager.creature_get_model_info(
                    self.display_id)
                if creature_model_info:
                    self.bounding_radius = creature_model_info.bounding_radius
                    self.combat_reach = creature_model_info.combat_reach
                self.model_info_loaded = True

            self.bytes_1 = unpack(
                '<I', pack('<4B', self.stand_state, self.npc_flags, 0, 0))[0]
            self.damage = int(self.creature_template.dmg_max)  # temp

            # Object fields
            self.set_obj_uint64(ObjectFields.OBJECT_FIELD_GUID, self.guid)
            self.set_obj_uint32(ObjectFields.OBJECT_FIELD_TYPE,
                                self.get_object_type_value())
            self.set_obj_uint32(ObjectFields.OBJECT_FIELD_ENTRY, self.entry)
            self.set_obj_float(ObjectFields.OBJECT_FIELD_SCALE_X, self.scale)

            # Unit fields
            self.set_uni_uint32(UnitFields.UNIT_CHANNEL_SPELL,
                                self.channel_spell)
            self.set_uni_uint64(UnitFields.UNIT_FIELD_CHANNEL_OBJECT,
                                self.channel_object)
            self.set_uni_uint32(UnitFields.UNIT_FIELD_HEALTH, self.health)
            self.set_uni_uint32(UnitFields.UNIT_FIELD_MAXHEALTH,
                                self.max_health)
            self.set_uni_uint32(UnitFields.UNIT_FIELD_LEVEL, self.level)
            self.set_uni_uint32(UnitFields.UNIT_FIELD_FACTIONTEMPLATE,
                                self.faction)
            self.set_uni_uint32(UnitFields.UNIT_FIELD_FLAGS, self.unit_flags)
            self.set_uni_uint32(UnitFields.UNIT_FIELD_COINAGE, self.coinage)
            self.set_uni_float(UnitFields.UNIT_FIELD_BASEATTACKTIME,
                               self.base_attack_time)
            self.set_uni_float(UnitFields.UNIT_FIELD_BASEATTACKTIME + 1, 0)
            self.set_uni_int64(UnitFields.UNIT_FIELD_RESISTANCES,
                               self.resistance_0)
            self.set_uni_int32(UnitFields.UNIT_FIELD_RESISTANCES + 1,
                               self.resistance_1)
            self.set_uni_int32(UnitFields.UNIT_FIELD_RESISTANCES + 2,
                               self.resistance_2)
            self.set_uni_int32(UnitFields.UNIT_FIELD_RESISTANCES + 3,
                               self.resistance_3)
            self.set_uni_int32(UnitFields.UNIT_FIELD_RESISTANCES + 4,
                               self.resistance_4)
            self.set_uni_int32(UnitFields.UNIT_FIELD_RESISTANCES + 5,
                               self.resistance_5)
            self.set_uni_float(UnitFields.UNIT_FIELD_BOUNDINGRADIUS,
                               self.bounding_radius)
            self.set_uni_float(UnitFields.UNIT_FIELD_COMBATREACH,
                               self.combat_reach)
            self.set_uni_uint32(UnitFields.UNIT_FIELD_DISPLAYID,
                                self.display_id)
            self.set_uni_uint32(UnitFields.UNIT_FIELD_BYTES_1, self.bytes_1)
            self.set_uni_float(UnitFields.UNIT_MOD_CAST_SPEED,
                               self.mod_cast_speed)
            self.set_uni_uint32(UnitFields.UNIT_DYNAMIC_FLAGS,
                                self.dynamic_flags)
            self.set_uni_uint32(UnitFields.UNIT_FIELD_DAMAGE, self.damage)

            return self.create_update_packet(self.update_packet_factory,
                                             is_self)