feat(Core/DB): Add Creature ExperienceModifier (#7095)

This commit is contained in:
Shiroe
2021-07-30 07:56:42 +02:00
committed by GitHub
parent 8521dd5d55
commit 2f63e81a94
5 changed files with 22 additions and 12 deletions

View File

@@ -65,7 +65,7 @@ void WorldDatabaseConnection::DoPrepareStatements()
PrepareStatement(WORLD_SEL_WAYPOINT_SCRIPT_ID_BY_GUID, "SELECT id FROM waypoint_scripts WHERE guid = ?", CONNECTION_SYNCH);
PrepareStatement(WORLD_DEL_CREATURE, "DELETE FROM creature WHERE guid = ?", CONNECTION_ASYNC);
PrepareStatement(WORLD_SEL_COMMANDS, "SELECT name, security, help FROM command", CONNECTION_SYNCH);
PrepareStatement(WORLD_SEL_CREATURE_TEMPLATE, "SELECT entry, difficulty_entry_1, difficulty_entry_2, difficulty_entry_3, KillCredit1, KillCredit2, modelid1, modelid2, modelid3, modelid4, name, subname, IconName, gossip_menu_id, minlevel, maxlevel, exp, faction, npcflag, speed_walk, speed_run, detection_range, scale, `rank`, dmgschool, DamageModifier, BaseAttackTime, RangeAttackTime, BaseVariance, RangeVariance, unit_class, unit_flags, unit_flags2, dynamicflags, family, trainer_type, trainer_spell, trainer_class, trainer_race, type, type_flags, lootid, pickpocketloot, skinloot, PetSpellDataId, VehicleId, mingold, maxgold, AIName, MovementType, InhabitType, HoverHeight, HealthModifier, ManaModifier, ArmorModifier, RacialLeader, movementId, RegenHealth, mechanic_immune_mask, spell_school_immune_mask, flags_extra, ScriptName FROM creature_template WHERE entry = ?", CONNECTION_SYNCH);
PrepareStatement(WORLD_SEL_CREATURE_TEMPLATE, "SELECT entry, difficulty_entry_1, difficulty_entry_2, difficulty_entry_3, KillCredit1, KillCredit2, modelid1, modelid2, modelid3, modelid4, name, subname, IconName, gossip_menu_id, minlevel, maxlevel, exp, faction, npcflag, speed_walk, speed_run, detection_range, scale, `rank`, dmgschool, DamageModifier, BaseAttackTime, RangeAttackTime, BaseVariance, RangeVariance, unit_class, unit_flags, unit_flags2, dynamicflags, family, trainer_type, trainer_spell, trainer_class, trainer_race, type, type_flags, lootid, pickpocketloot, skinloot, PetSpellDataId, VehicleId, mingold, maxgold, AIName, MovementType, InhabitType, HoverHeight, HealthModifier, ManaModifier, ArmorModifier, ExperienceModifier, RacialLeader, movementId, RegenHealth, mechanic_immune_mask, spell_school_immune_mask, flags_extra, ScriptName FROM creature_template WHERE entry = ?", CONNECTION_SYNCH);
PrepareStatement(WORLD_SEL_WAYPOINT_SCRIPT_BY_ID, "SELECT guid, delay, command, datalong, datalong2, dataint, x, y, z, o FROM waypoint_scripts WHERE id = ?", CONNECTION_SYNCH);
PrepareStatement(WORLD_SEL_ITEM_TEMPLATE_BY_NAME, "SELECT entry FROM item_template WHERE name = ?", CONNECTION_SYNCH);
PrepareStatement(WORLD_SEL_CREATURE_BY_ID, "SELECT guid FROM creature WHERE id = ?", CONNECTION_SYNCH);

View File

@@ -128,6 +128,7 @@ struct CreatureTemplate
float ModHealth;
float ModMana;
float ModArmor;
float ModExperience;
bool RacialLeader;
uint32 movementId;
bool RegenHealth;

View File

@@ -473,8 +473,8 @@ void ObjectMgr::LoadCreatureTemplates()
"dynamicflags, family, trainer_type, trainer_spell, trainer_class, trainer_race, type, "
// 40 41 42 43 44 45 46 47 48 49
"type_flags, lootid, pickpocketloot, skinloot, PetSpellDataId, VehicleId, mingold, maxgold, AIName, MovementType, "
// 50 51 52 53 54 55 56 57 58 59 60 61
"InhabitType, HoverHeight, HealthModifier, ManaModifier, ArmorModifier, RacialLeader, movementId, RegenHealth, mechanic_immune_mask, spell_school_immune_mask, flags_extra, ScriptName "
// 50 51 52 53 54 55 56 57 58 59 60 61 62
"InhabitType, HoverHeight, HealthModifier, ManaModifier, ArmorModifier, ExperienceModifier, RacialLeader, movementId, RegenHealth, mechanic_immune_mask, spell_school_immune_mask, flags_extra, ScriptName "
"FROM creature_template;");
if (!result)
@@ -600,13 +600,14 @@ void ObjectMgr::LoadCreatureTemplate(Field* fields)
creatureTemplate.ModHealth = fields[52].GetFloat();
creatureTemplate.ModMana = fields[53].GetFloat();
creatureTemplate.ModArmor = fields[54].GetFloat();
creatureTemplate.RacialLeader = fields[55].GetBool();
creatureTemplate.movementId = fields[56].GetUInt32();
creatureTemplate.RegenHealth = fields[57].GetBool();
creatureTemplate.MechanicImmuneMask = fields[58].GetUInt32();
creatureTemplate.SpellSchoolImmuneMask = fields[59].GetUInt8();
creatureTemplate.flags_extra = fields[60].GetUInt32();
creatureTemplate.ScriptID = GetScriptId(fields[61].GetCString());
creatureTemplate.ModExperience = fields[55].GetFloat();
creatureTemplate.RacialLeader = fields[56].GetBool();
creatureTemplate.movementId = fields[57].GetUInt32();
creatureTemplate.RegenHealth = fields[58].GetBool();
creatureTemplate.MechanicImmuneMask = fields[59].GetUInt32();
creatureTemplate.SpellSchoolImmuneMask = fields[60].GetUInt8();
creatureTemplate.flags_extra = fields[61].GetUInt32();
creatureTemplate.ScriptID = GetScriptId(fields[62].GetCString());
}
void ObjectMgr::LoadCreatureTemplateResistances()

View File

@@ -79,8 +79,7 @@ uint32 Acore::XP::Gain(Player* player, Unit* unit, bool isBattleGround /*= false
xpMod *= 2.0f;
}
// This requires TrinityCore creature_template.ExperienceModifier feature
// xpMod *= creature->GetCreatureTemplate()->ModExperience;
xpMod *= creature->GetCreatureTemplate()->ModExperience;
}
xpMod *= isBattleGround ? sWorld->getRate(RATE_XP_BG_KILL) : sWorld->getRate(RATE_XP_KILL);