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

@@ -0,0 +1,9 @@
INSERT INTO `version_db_world` (`sql_rev`) VALUES ('1627113690089052600');
ALTER TABLE `creature_template` ADD COLUMN `ExperienceModifier` FLOAT NOT NULL DEFAULT 1 AFTER `ArmorModifier`;
UPDATE `creature_template` SET `ExperienceModifier` = 2 WHERE `entry` IN (639,642,643,644,645,646,647,1663,1666,1696,1716,1717,1720,1763,1853,2748,3586,3653,3654,3669,3670,3671,3673,3674,3872,3886,3887,3914,3927,3974,3975,3976,3977,3983,4274,4275,4278,4279,4420,4421,4422,4424,4428,4542,4543,4829,4830,4831,4832,4854,4887,5709,5710,5711,5712,5713,5714,5715,5716,5717,5719,5720,5721,5722,5775,6168,6229,6235,6243,6487,6906,6910,7023,7079,7206,7228,7267,7271,7272,7273,7275,7291,7354,7355,7356,7357,7358,7361,7795,7796,7797,7800,8127,8443,8567,8580,8929,8983,9016,9017,9018,9019,9024,9025,9033,9041,9042,9056,9156,9196,9236,9237,9319,9499,9502,9537,9543,9568,9736,9816,9938,10096,10220,10268,10339,10363,10393,10429,10430,10432,10433,10435,10436,10437,10438,10439,10440,10502,10503,10504,10505,10506,10507,10508,10516,10558,10584,10596,10808,10811,10813,10901,10997,11032,11058,11143,11261,11486,11487,11488,11489,11490,11492,11496,11501,11517,11518,11519,11520,11622,12201,12203,12225,12236,12258,12876,12902,13280,13282,13282,13596,13601,13601,14321,14322,14323,14324,14325,14326,14327);
UPDATE `creature_template` SET `ExperienceModifier` = 0.5 WHERE `entry` IN (7076,7077,7309,8477,8615,8658,9157,10387,10389,10441,10461,11460,11466,12473,14350,14396,15546,15720,15733,15735,15738,16032,16286);
UPDATE `creature_template` SET `ExperienceModifier` = 0.1 WHERE `entry` IN (15316,15317);
UPDATE `creature_template` SET `ExperienceModifier` = 0.25 WHERE `entry` IN (2946,6575,9496,10411,11713,14386,16230);
UPDATE `creature_template` SET `ExperienceModifier` = 0.005 WHERE `entry` = 10925;

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