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