@@ -141,6 +141,11 @@ class DoubleXpWeekend
141141 return true ;
142142 }
143143
144+ bool IsJoyousJourneysActive () const { return sConfigMgr ->GetOption <bool >(" XPWeekend.IsJoyousJourneysActive" , false ); }
145+ float ConfigJoyousJourneysXPRate () const { return sConfigMgr ->GetOption <float >(" XPWeekend.JoyousJourneysXPRate" , 1 .0f ); }
146+ float ConfigJoyousJourneysRepRate () const { return sConfigMgr ->GetOption <float >(" XPWeekend.JoyousJourneysRepRate" , 1 .10f ); }
147+ bool ExcludeInsaneReps () const { return sConfigMgr ->GetOption <bool >(" XPWeekend.ExcludeInsaneReps" , true ); }
148+
144149private:
145150
146151 // NOTE keep options together to prevent having more than 1 potential default value
@@ -151,7 +156,7 @@ class DoubleXpWeekend
151156 float ConfigxpAmount () const { return sConfigMgr ->GetOption <float >(" XPWeekend.xpAmount" , 2 .0f ); }
152157 bool ConfigIndividualXPEnabled () const { return sConfigMgr ->GetOption <bool >(" XPWeekend.IndividualXPEnabled" , false ); }
153158 bool ConfigEnabled () const { return sConfigMgr ->GetOption <bool >(" XPWeekend.Enabled" , false ); }
154- float ConfigMaxAllowedRate () const { return sConfigMgr ->GetOption <float >(" XPWeekend.MaxAllowedRate" , 2 .0f ); }
159+ float ConfigMaxAllowedRate () const { return sConfigMgr ->GetOption <float >(" XPWeekend.MaxAllowedRate" , 2 .0f ) + ( IsJoyousJourneysActive () ? ConfigJoyousJourneysXPRate () : 0 . 0f ) ; }
155160 bool ConfigIsDKStartZoneRequired () const { return sConfigMgr ->GetOption <bool >(" XPWeekend.IsDKStartZoneRequired" , false ); }
156161
157162 bool IsDKStartZoneComplete (Player* player) const
@@ -230,6 +235,11 @@ class DoubleXpWeekend
230235 return 1 .0f ;
231236 }
232237
238+ if (IsJoyousJourneysActive ())
239+ {
240+ rate += ConfigJoyousJourneysXPRate ();
241+ }
242+
233243 // If individualxp setting is enabled... and a rate was set, overwrite it.
234244 if (ConfigIndividualXPEnabled ())
235245 {
@@ -293,7 +303,8 @@ class DoubleXpWeekendPlayerScript : public PlayerScript
293303public:
294304 DoubleXpWeekendPlayerScript () : PlayerScript(" DoubleXpWeekend" , {
295305 PLAYERHOOK_ON_LOGIN,
296- PLAYERHOOK_ON_GIVE_EXP
306+ PLAYERHOOK_ON_GIVE_EXP,
307+ PLAYERHOOK_ON_GIVE_REPUTATION
297308 }) { }
298309
299310 void OnPlayerLogin (Player* player) override
@@ -309,6 +320,31 @@ class DoubleXpWeekendPlayerScript : public PlayerScript
309320 amount = mod->OnPlayerGiveXP (player, amount, xpSource);
310321 }
311322
323+ void OnPlayerGiveReputation (Player* /* player*/ , int32 factionID, float & amount, ReputationSource /* repSource*/ ) override
324+ {
325+ DoubleXpWeekend* mod = DoubleXpWeekend::instance ();
326+ if (!mod->IsJoyousJourneysActive () || !mod->ConfigJoyousJourneysRepRate ())
327+ return ;
328+
329+ if (mod->ExcludeInsaneReps ())
330+ {
331+ switch (factionID)
332+ {
333+ case 349 : // Ravenholdt
334+ case 87 : // bloodsail bucaneers
335+ case 21 : // Booty Bay
336+ case 577 : // Everlook
337+ case 369 : // Gadgetzan
338+ case 470 : // Ratchet
339+ case 909 : // Darkmoon Faire
340+ case 809 : // Shen'dralar
341+ return ;
342+ }
343+ }
344+
345+ amount *= mod->ConfigJoyousJourneysRepRate ();
346+ }
347+
312348};
313349
314350void AdddoublexpScripts ()
0 commit comments