diff options
author | Subv <s.v.h21@hotmail.com> | 2012-10-12 10:39:13 -0500 |
---|---|---|
committer | Subv <s.v.h21@hotmail.com> | 2012-10-12 10:46:06 -0500 |
commit | c199e308741a3fa1c7d2b08d98cbb6a1341a45d7 (patch) | |
tree | a9bc578085f32b57d84b56f9eae3e4f5eb428530 /src | |
parent | 5e1b74426183a52f63716299ce94386790f31468 (diff) |
Core/XP: Players only get 10% xp for killing NPCs of the same expansion or lower.
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/DataStores/DBCStores.cpp | 18 | ||||
-rwxr-xr-x | src/server/game/DataStores/DBCStores.h | 2 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 9 |
3 files changed, 27 insertions, 2 deletions
diff --git a/src/server/game/DataStores/DBCStores.cpp b/src/server/game/DataStores/DBCStores.cpp index 9ecc41732f0..8a647bacfea 100644 --- a/src/server/game/DataStores/DBCStores.cpp +++ b/src/server/game/DataStores/DBCStores.cpp @@ -862,6 +862,24 @@ uint32 GetVirtualMapForMapAndZone(uint32 mapid, uint32 zoneId) return mapid; } +uint32 GetMaxLevelForExpansion(uint32 expansion) +{ + switch (expansion) + { + case CONTENT_1_60: + return 60; + case CONTENT_61_70: + return 70; + case CONTENT_71_80: + return 80; + case CONTENT_81_85: + return 85; + default: + break; + } + return 0; +} + /* Used only for calculate xp gain by content lvl. Calculation on Gilneas and group maps of LostIslands calculated as CONTENT_1_60. diff --git a/src/server/game/DataStores/DBCStores.h b/src/server/game/DataStores/DBCStores.h index 174cf5c4dfb..c4e012c62c1 100755 --- a/src/server/game/DataStores/DBCStores.h +++ b/src/server/game/DataStores/DBCStores.h @@ -52,6 +52,8 @@ enum ContentLevels MAX_CONTENT }; +uint32 GetMaxLevelForExpansion(uint32 expansion); + ContentLevels GetContentLevelsForMapAndZone(uint32 mapid, uint32 zoneId); bool IsTotemCategoryCompatiableWith(uint32 itemTotemCategoryId, uint32 requiredTotemCategoryId); diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 505da4355c3..c4fdb33bef6 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -75,6 +75,7 @@ #include <cmath> #include "AccountMgr.h" #include "DB2Stores.h" +#include "DBCStores.h" #include "Battlefield.h" #include "BattlefieldMgr.h" #include "BattlefieldWG.h" @@ -513,10 +514,14 @@ inline void KillRewarder::_RewardXP(Player* player, float rate) for (Unit::AuraEffectList::const_iterator i = auras.begin(); i != auras.end(); ++i) AddPct(xp, (*i)->GetAmount()); - // 4.2.3. Give XP to player. + // 4.2.3. Calculate expansion penalty + if (_victim->GetTypeId() == TYPEID_UNIT && player->GetLevel() >= GetMaxLevelForExpansion(_victim->ToCreature()->GetCreatureTemplate()->expansion)) + xp = CalculatePct(xp, 10); // Players get only 10% xp for killing creatures of lower expansion levels than himself + + // 4.2.4. Give XP to player. player->GiveXP(xp, _victim, _groupRate); if (Pet* pet = player->GetPet()) - // 4.2.4. If player has pet, reward pet with XP (100% for single player, 50% for group case). + // 4.2.5. If player has pet, reward pet with XP (100% for single player, 50% for group case). pet->GivePetXP(_group ? xp / 2 : xp); } } |