Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 25 additions & 0 deletions conf/mod-double-xp-weekend.conf.dist
Original file line number Diff line number Diff line change
Expand Up @@ -59,3 +59,28 @@ XPWeekend.MaxLevel = 80
# Default: 0 (Disabled)

XPWeekend.IsDKStartZoneRequired = 0

# XPWeekend.IsJoyousJourneysActive = 0
# Promotional event, adds yet another layer of bonus on top of the current bonus (yay!)
# Default: 0 (Disabled)

XPWeekend.IsJoyousJourneysActive = 0

# XPWeekend.JoyousJourneysXPRate = 1
# Bonus experience rate during joyous journeys.
# ADDS to the base one. So if base 2x + 1x from this = 3x (50% increase).
# Default: 1

XPWeekend.JoyousJourneysXPRate = 1

# XPWeekend.JoyousJourneysRepRate = 1.10
# Reputation bonus while joyous journeys is active.
# Default: 1.10 (10%)

XPWeekend.JoyousJourneysRepRate = 1.10

# XPWeekend.ExcludeInsaneReps = 1
# Exclude the insane title reputations e.g ravenholdt
# Default: 1 (Enabled)

XPWeekend.ExcludeInsaneReps = 1
40 changes: 38 additions & 2 deletions src/mod-double-xp-weekend.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,11 @@ class DoubleXpWeekend
return true;
}

bool IsJoyousJourneysActive() const { return sConfigMgr->GetOption<bool>("XPWeekend.IsJoyousJourneysActive", false); }
float ConfigJoyousJourneysXPRate() const { return sConfigMgr->GetOption<float>("XPWeekend.JoyousJourneysXPRate", 1.0f); }
float ConfigJoyousJourneysRepRate() const { return sConfigMgr->GetOption<float>("XPWeekend.JoyousJourneysRepRate", 1.10f); }
bool ExcludeInsaneReps() const { return sConfigMgr->GetOption<bool>("XPWeekend.ExcludeInsaneReps", true); }

private:

// NOTE keep options together to prevent having more than 1 potential default value
Expand All @@ -151,7 +156,7 @@ class DoubleXpWeekend
float ConfigxpAmount() const { return sConfigMgr->GetOption<float>("XPWeekend.xpAmount", 2.0f); }
bool ConfigIndividualXPEnabled() const { return sConfigMgr->GetOption<bool>("XPWeekend.IndividualXPEnabled", false); }
bool ConfigEnabled() const { return sConfigMgr->GetOption<bool>("XPWeekend.Enabled", false); }
float ConfigMaxAllowedRate() const { return sConfigMgr->GetOption<float>("XPWeekend.MaxAllowedRate", 2.0f); }
float ConfigMaxAllowedRate() const { return sConfigMgr->GetOption<float>("XPWeekend.MaxAllowedRate", 2.0f) + (IsJoyousJourneysActive() ? ConfigJoyousJourneysXPRate() : 0.0f); }
bool ConfigIsDKStartZoneRequired() const { return sConfigMgr->GetOption<bool>("XPWeekend.IsDKStartZoneRequired", false); }

bool IsDKStartZoneComplete(Player* player) const
Expand Down Expand Up @@ -230,6 +235,11 @@ class DoubleXpWeekend
return 1.0f;
}

if (IsJoyousJourneysActive())
{
rate += ConfigJoyousJourneysXPRate();
}

// If individualxp setting is enabled... and a rate was set, overwrite it.
if (ConfigIndividualXPEnabled())
{
Expand Down Expand Up @@ -293,7 +303,8 @@ class DoubleXpWeekendPlayerScript : public PlayerScript
public:
DoubleXpWeekendPlayerScript() : PlayerScript("DoubleXpWeekend", {
PLAYERHOOK_ON_LOGIN,
PLAYERHOOK_ON_GIVE_EXP
PLAYERHOOK_ON_GIVE_EXP,
PLAYERHOOK_ON_GIVE_REPUTATION
}) { }

void OnPlayerLogin(Player* player) override
Expand All @@ -309,6 +320,31 @@ class DoubleXpWeekendPlayerScript : public PlayerScript
amount = mod->OnPlayerGiveXP(player, amount, xpSource);
}

void OnPlayerGiveReputation(Player* /*player*/, int32 factionID, float& amount, ReputationSource /*repSource*/) override
{
DoubleXpWeekend* mod = DoubleXpWeekend::instance();
if (!mod->IsJoyousJourneysActive() || !mod->ConfigJoyousJourneysRepRate())
return;

if (mod->ExcludeInsaneReps())
{
switch (factionID)
{
case 349: // Ravenholdt
case 87: // bloodsail bucaneers
case 21: // Booty Bay
case 577: // Everlook
case 369: // Gadgetzan
case 470: // Ratchet
case 909: // Darkmoon Faire
case 809: // Shen'dralar
return;
}
}

amount *= mod->ConfigJoyousJourneysRepRate();
}

};

void AdddoublexpScripts()
Expand Down