Sylica
Exalted Member
Today, I would love to share this patch for Weekend XP Rate that runs with the game event system.
Original Author: Kline
I take no credit for making this script. Just for sharing it.
Here's the pastebin post for easier copying
Original Author: Kline
I take no credit for making this script. Just for sharing it.
Here's the pastebin post for easier copying
Code:
http://paste2.org/mMefwYgY
Code:
diff --git a/sql/updates/world/2016_10_22_00_weekend_xp_bonus.sql b/sql/updates/world/2016_10_22_00_weekend_xp_bonus.sql
new file mode 100644
index 0000000..455ccb0
--- /dev/null
+++ b/sql/updates/world/2016_10_22_00_weekend_xp_bonus.sql
@@ -0,0 +1,4 @@
+-- Weekend XP Bonus
+delete from game_event where eventEntry = 66;
+insert into game_event (eventEntry, start_time, end_time, occurence, length, holiday, description, world_event) values
+(66, '2012-02-11 00:00:00', '2020-02-11 00:00:00', 10080, 2880, 0, 'Weekend XP Bonus', 0);
\ No newline at end of file
diff --git a/src/server/game/Entities/Creature/GossipDef.cpp b/src/server/game/Entities/Creature/GossipDef.cpp
index 711196f..0e47480 100644
--- a/src/server/game/Entities/Creature/GossipDef.cpp
+++ b/src/server/game/Entities/Creature/GossipDef.cpp
@@ -454,7 +454,7 @@ void PlayerMenu::SendQuestGiverQuestDetails(Quest const* quest, ObjectGuid npcGU
}
data << uint32(quest->GetRewOrReqMoney());
- data << uint32(quest->XPValue(_session->GetPlayer()) * sWorld->getRate(RATE_XP_QUEST));
+ data << uint32(quest->XPValue(_session->GetPlayer()) * sWorld->getRate(RATE_XP_QUEST) * (IsEventActive(sWorld->getIntConfig(CONFIG_RATE_XP_WEEKEND_EVID)) ? sWorld->getRate(RATE_XP_WEEKEND) : 1.0f));
}
// rewarded honor points. Multiply with 10 to satisfy client
@@ -692,7 +692,7 @@ void PlayerMenu::SendQuestGiverOfferReward(Quest const* quest, ObjectGuid npcGUI
}
data << uint32(quest->GetRewOrReqMoney());
- data << uint32(quest->XPValue(_session->GetPlayer()) * sWorld->getRate(RATE_XP_QUEST));
+ data << uint32(quest->XPValue(_session->GetPlayer()) * sWorld->getRate(RATE_XP_QUEST) * (IsEventActive(sWorld->getIntConfig(CONFIG_RATE_XP_WEEKEND_EVID)) ? sWorld->getRate(RATE_XP_WEEKEND) : 1.0f));
// rewarded honor points. Multiply with 10 to satisfy client
data << uint32(10 * quest->CalculateHonorGain(_session->GetPlayer()->GetQuestLevel(quest)));
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index cfd365b..13b94bf 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -6512,6 +6512,8 @@ void Player::CheckAreaExploreAndOutdoor()
XP = uint32(sObjectMgr->GetBaseXP(areaEntry->area_level)*sWorld->getRate(RATE_XP_EXPLORE));
}
+ XP = uint32(XP * (IsEventActive(sWorld->getIntConfig(CONFIG_RATE_XP_WEEKEND_EVID)) ? sWorld->getRate(RATE_XP_WEEKEND) : 1.0f));
+
GiveXP(XP, nullptr);
SendExplorationExperience(areaId, XP);
}
@@ -15046,7 +15048,7 @@ void Player::RewardQuest(Quest const* quest, uint32 reward, Object* questGiver,
bool rewarded = (m_RewardedQuests.find(quest_id) != m_RewardedQuests.end());
// Not give XP in case already completed once repeatable quest
- uint32 XP = rewarded && !quest->IsDFQuest() ? 0 : uint32(quest->XPValue(this)*sWorld->getRate(RATE_XP_QUEST));
+ uint32 XP = rewarded && !quest->IsDFQuest() ? 0 : uint32(quest->XPValue(this)*sWorld->getRate(RATE_XP_QUEST) * (IsEventActive(sWorld->getIntConfig(CONFIG_RATE_XP_WEEKEND_EVID)) ? sWorld->getRate(RATE_XP_WEEKEND) : 1.0f));
// handle SPELL_AURA_MOD_XP_QUEST_PCT auras
Unit::AuraEffectList const& ModXPPctAuras = GetAuraEffectsByType(SPELL_AURA_MOD_XP_QUEST_PCT);
diff --git a/src/server/game/Miscellaneous/Formulas.h b/src/server/game/Miscellaneous/Formulas.h
index b5c6f37..2b6a2d8 100644
--- a/src/server/game/Miscellaneous/Formulas.h
+++ b/src/server/game/Miscellaneous/Formulas.h
@@ -19,6 +19,7 @@
#ifndef TRINITY_FORMULAS_H
#define TRINITY_FORMULAS_H
+#include "GameEventMgr.h"
#include "World.h"
#include "SharedDefines.h"
#include "ScriptMgr.h"
@@ -184,7 +185,7 @@ namespace Trinity
xpMod *= creature->GetCreatureTemplate()->ModExperience;
}
- xpMod *= isBattleGround ? sWorld->getRate(RATE_XP_BG_KILL) : sWorld->getRate(RATE_XP_KILL);
+ xpMod *= isBattleGround ? sWorld->getRate(RATE_XP_BG_KILL) : sWorld->getRate(RATE_XP_KILL) * (IsEventActive(sWorld->getIntConfig(CONFIG_RATE_XP_WEEKEND_EVID)) ? sWorld->getRate(RATE_XP_WEEKEND) : 1.0f);
if (creature && creature->m_PlayerDamageReq) // if players dealt less than 50% of the damage and were credited anyway (due to CREATURE_FLAG_EXTRA_NO_PLAYER_DAMAGE_REQ), scale XP gained appropriately (linear scaling)
xpMod *= 1.0f - 2.0f*creature->m_PlayerDamageReq / creature->GetMaxHealth();
diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp
index 1f3c5e7..443ba55 100644
--- a/src/server/game/World/World.cpp
+++ b/src/server/game/World/World.cpp
@@ -460,6 +460,8 @@ void World::LoadConfigSettings(bool reload)
rate_values[RATE_XP_BG_KILL] = sConfigMgr->GetFloatDefault("Rate.XP.BattlegroundKill", 1.0f);
rate_values[RATE_XP_QUEST] = sConfigMgr->GetFloatDefault("Rate.XP.Quest", 1.0f);
rate_values[RATE_XP_EXPLORE] = sConfigMgr->GetFloatDefault("Rate.XP.Explore", 1.0f);
+ rate_values[RATE_XP_WEEKEND] = sConfigMgr->GetFloatDefault("Rate.XP.Weekend", 1.0f);
+ m_int_configs[CONFIG_RATE_XP_WEEKEND_EVID] = sConfigMgr->GetIntDefault("Rate.XP.Weekend.EVID", 66);
rate_values[RATE_REPAIRCOST] = sConfigMgr->GetFloatDefault("Rate.RepairCost", 1.0f);
if (rate_values[RATE_REPAIRCOST] < 0.0f)
{
diff --git a/src/server/game/World/World.h b/src/server/game/World/World.h
index 8d61828..b4569f7 100644
--- a/src/server/game/World/World.h
+++ b/src/server/game/World/World.h
@@ -340,6 +340,7 @@ enum WorldIntConfigs
CONFIG_PERSISTENT_CHARACTER_CLEAN_FLAGS,
CONFIG_LFG_OPTIONSMASK,
CONFIG_MAX_INSTANCES_PER_HOUR,
+ CONFIG_RATE_XP_WEEKEND_EVID,
CONFIG_WARDEN_CLIENT_RESPONSE_DELAY,
CONFIG_WARDEN_CLIENT_CHECK_HOLDOFF,
CONFIG_WARDEN_CLIENT_FAIL_ACTION,
@@ -444,6 +445,7 @@ enum Rates
RATE_DURABILITY_LOSS_ABSORB,
RATE_DURABILITY_LOSS_BLOCK,
RATE_MOVESPEED,
+ RATE_XP_WEEKEND,
RATE_MONEY_QUEST,
RATE_MONEY_MAX_LEVEL_QUEST,
MAX_RATES
diff --git a/src/server/worldserver/worldserver.conf.dist b/src/server/worldserver/worldserver.conf.dist
index fab4cf5..bf8beb2 100644
--- a/src/server/worldserver/worldserver.conf.dist
+++ b/src/server/worldserver/worldserver.conf.dist
@@ -2038,10 +2038,14 @@ Rate.Drop.Item.ReferencedAmount = 1
# Default: 1 - (Rate.XP.Kill, affects only kills outside of Battlegrounds)
# 1 - (Rate.XP.Quest)
# 1 - (Rate.XP.Explore)
-
-Rate.XP.Kill = 1
-Rate.XP.Quest = 1
-Rate.XP.Explore = 1
+# 1 - (Rate.XP.Weekend)
+# 66 - (Rate.XP.Weekend.EVID)
+
+Rate.XP.Kill = 1
+Rate.XP.Quest = 1
+Rate.XP.Explore = 1
+Rate.XP.Weekend = 1
+Rate.XP.Weekend.EVID = 66
#
# Rate.XP.BattlegroundKill
Last edited: