aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSubv <s.v.h21@hotmail.com>2012-10-12 10:39:13 -0500
committerSubv <s.v.h21@hotmail.com>2012-10-12 10:46:06 -0500
commitc199e308741a3fa1c7d2b08d98cbb6a1341a45d7 (patch)
treea9bc578085f32b57d84b56f9eae3e4f5eb428530 /src
parent5e1b74426183a52f63716299ce94386790f31468 (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.cpp18
-rwxr-xr-xsrc/server/game/DataStores/DBCStores.h2
-rw-r--r--src/server/game/Entities/Player/Player.cpp9
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);
}
}