summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYehonal <yehonal.azeroth@gmail.com>2016-08-07 12:00:52 +0200
committerYehonal <yehonal.azeroth@gmail.com>2016-08-07 12:00:52 +0200
commitb91b679669eba2f0d9aafb645c6e7f8c9ed3fc29 (patch)
treea23831709135ffdfc8f1f07ec0d5a69c2ab864e6
parent2fc723e92cd5ba187fe48f77552b6ea257f939c3 (diff)
Fix import BG rate exp
-rw-r--r--src/server/game/Miscellaneous/Formulas.h34
1 files changed, 20 insertions, 14 deletions
diff --git a/src/server/game/Miscellaneous/Formulas.h b/src/server/game/Miscellaneous/Formulas.h
index b0cea99c1b..e44076d2e7 100644
--- a/src/server/game/Miscellaneous/Formulas.h
+++ b/src/server/game/Miscellaneous/Formulas.h
@@ -160,27 +160,33 @@ namespace Trinity
inline uint32 Gain(Player* player, Unit* u)
{
- uint32 gain;
+ Creature* creature = u->ToCreature();
+ uint32 gain = 0;
- if (u->GetTypeId() == TYPEID_UNIT &&
- (((Creature*)u)->IsTotem() || ((Creature*)u)->IsPet() ||
- (((Creature*)u)->GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_NO_XP_AT_KILL) ||
- u->IsCritter()))
- gain = 0;
- else
+ if (!creature || (!creature->IsTotem() && !creature->IsPet() && !creature->IsCritter() &&
+ !(creature->GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_NO_XP_AT_KILL)))
{
+ float xpMod = 1.0f;
+
gain = BaseGain(player->getLevel(), u->getLevel(), GetContentLevelsForMapAndZone(u->GetMapId(), u->GetZoneId()));
- if (gain != 0 && u->GetTypeId() == TYPEID_UNIT && ((Creature*)u)->isElite())
+ if (gain && creature)
{
- // Elites in instances have a 2.75x XP bonus instead of the regular 2x world bonus.
- if (u->GetMap()->IsDungeon())
- gain = uint32(gain * 2.75);
- else
- gain *= 2;
+ if (creature->isElite())
+ {
+ // Elites in instances have a 2.75x XP bonus instead of the regular 2x world bonus.
+ if (u->GetMap() && u->GetMap()->IsDungeon())
+ xpMod *= 2.75f;
+ else
+ xpMod *= 2.0f;
+ }
+
+ // This requires TrinityCore creature_template.ExperienceModifier feature
+ // xpMod *= creature->GetCreatureTemplate()->ModExperience;
}
- gain = uint32(gain * sWorld->getRate(RATE_XP_KILL));
+ xpMod *= isBattleGround ? sWorld->getRate(RATE_XP_BG_KILL) : sWorld->getRate(RATE_XP_KILL);
+ gain = uint32(gain * xpMod);
}
//sScriptMgr->OnGainCalculation(gain, player, u); // pussywizard: optimization