From 6e6166eec1986d8ec63aae0d990ff1d29210a1e8 Mon Sep 17 00:00:00 2001 From: hondacrx Date: Mon, 15 Nov 2021 23:31:25 -0500 Subject: [PATCH] Core/GameEvent: weekend xp rate Port From (https://github.com/TrinityCore/TrinityCore/commit/c44650502cf7e7285e3e504d238638ac0ccc7ec6) --- Source/Framework/Constants/SharedConst.cs | 4 ++- Source/Scripts/World/BoostedXp.cs | 44 +++++++++++++++++++++++ Source/WorldServer/WorldServer.conf.dist | 24 +++++++++++++ 3 files changed, 71 insertions(+), 1 deletion(-) create mode 100644 Source/Scripts/World/BoostedXp.cs diff --git a/Source/Framework/Constants/SharedConst.cs b/Source/Framework/Constants/SharedConst.cs index f15431e29..d5913f75f 100644 --- a/Source/Framework/Constants/SharedConst.cs +++ b/Source/Framework/Constants/SharedConst.cs @@ -1658,6 +1658,7 @@ namespace Framework.Constants RateXpGuildModifier, RateXpKill, RateXpBgKill, + RateXpBoost, RateXpQuest, RealmZone, ResetDuelCooldowns, @@ -1736,7 +1737,8 @@ namespace Framework.Constants WintergraspPlrMin, WintergraspPlrMinLvl, WintergraspRestartAfterCrash, - WorldBossLevelDiff + WorldBossLevelDiff, + XpBoostDaymask } public enum TimerType diff --git a/Source/Scripts/World/BoostedXp.cs b/Source/Scripts/World/BoostedXp.cs new file mode 100644 index 000000000..b5ca180f2 --- /dev/null +++ b/Source/Scripts/World/BoostedXp.cs @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2012-2020 CypherCore + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +using Framework.Constants; +using Game; +using Game.Entities; +using Game.Scripting; + +namespace Scripts.World +{ + class xp_boost_PlayerScript : PlayerScript + { + public xp_boost_PlayerScript() : base("xp_boost_PlayerScript") { } + + void OnGiveXP(Player player, ref uint amount, Unit unit) + { + if (IsXPBoostActive()) + amount *= (uint)WorldConfig.GetFloatValue(WorldCfg.RateXpBoost); + } + + bool IsXPBoostActive() + { + var now = Time.UnixTimeToDateTime(GameTime.GetGameTime())); + uint weekdayMaskBoosted = WorldConfig.GetUIntValue(WorldCfg.XpBoostDaymask); + uint weekdayMask = (1u << now.Day); + bool currentDayBoosted = (weekdayMask & weekdayMaskBoosted) != 0; + return currentDayBoosted; + } + } +} diff --git a/Source/WorldServer/WorldServer.conf.dist b/Source/WorldServer/WorldServer.conf.dist index 7e3bcdd6e..6b76c12a7 100644 --- a/Source/WorldServer/WorldServer.conf.dist +++ b/Source/WorldServer/WorldServer.conf.dist @@ -2960,6 +2960,30 @@ AllowTrackBothResources = 0 PlayerStart.AllReputation = 0 +# +# XP.Boost.Daymask +# Description: Enables experience boost during the defined days. This field is a bitmask. +# +# Default: 0 - (Disabled) +# 1 - (Sunday) +# 2 - (Monday) +# 4 - (Tuesday) +# 8 - (Wednesday) +# 16 - (Thrusday) +# 32 - (Friday) +# 64 - (Saturday) +# 65 - (Weekend only) +# 127 - (Always active) + +XP.Boost.Daymask = 0 + +# +# XP.Boost.Rate +# Description: The boost multiplier for experience gain during XP boosted days. +# Default: 2.0 - (Double experience) + +XP.Boost.Rate = 2.0 + # # PlayerStart.AllSpells # Description: If enabled, players will start with all their class spells (not talents).