From 10cb84fd15f4ebe99bd0d6e952479968d9a023c5 Mon Sep 17 00:00:00 2001 From: Revision Date: Thu, 22 Jun 2023 21:41:41 +0200 Subject: [PATCH] Restructured Restructured the code layout to match my other modules. --- src/loader.cpp | 6 -- src/mod_weekendbonus.cpp | 183 +------------------------------- src/mod_weekendbonus.h | 54 ++++++++++ src/mod_weekendbonus_config.cpp | 113 ++++++++++++++++++++ src/mod_weekendbonus_player.cpp | 9 ++ 5 files changed, 181 insertions(+), 184 deletions(-) delete mode 100644 src/loader.cpp create mode 100644 src/mod_weekendbonus.h create mode 100644 src/mod_weekendbonus_config.cpp create mode 100644 src/mod_weekendbonus_player.cpp diff --git a/src/loader.cpp b/src/loader.cpp deleted file mode 100644 index 6cd2b5c..0000000 --- a/src/loader.cpp +++ /dev/null @@ -1,6 +0,0 @@ -void AddWeekendBonusScripts(); - -void Addmod_weekendbonusScripts() -{ - AddWeekendBonusScripts(); -} diff --git a/src/mod_weekendbonus.cpp b/src/mod_weekendbonus.cpp index 380f510..4ca7caa 100644 --- a/src/mod_weekendbonus.cpp +++ b/src/mod_weekendbonus.cpp @@ -1,181 +1,8 @@ -#include "Chat.h" -#include "Config.h" -#include "Player.h" -#include "ScriptMgr.h" +#include "mod_weekendbonus.h" -enum Day +WeekendBonus::WeekendBonus() : PlayerScript("WeekendBonusPlayerScript"), WorldScript("WeekendBonusWorldScript") {} + +void Addmod_weekendbonusScripts() { - SUNDAY = 0, - MONDAY, - TUESDAY, - WEDNESDAY, - THURSDAY, - FRIDAY, - SATURDAY -}; - -class WeekendBonusPlayer : public PlayerScript -{ -public: - WeekendBonusPlayer() : PlayerScript("WeekendBonusPlayer") {} - - void OnLogin(Player* player) override - { - time_t localTime = time(NULL); - - if ((localtime(&localTime)->tm_wday == Day::FRIDAY && localtime(&localTime)->tm_hour >= 18) || localtime(&localTime)->tm_wday == Day::SATURDAY || localtime(&localTime)->tm_wday == Day::SUNDAY) - ChatHandler(player->GetSession()).SendSysMessage("The weekend bonus is active, granting you bonuses!"); - } -}; - -class WeekendBonusWorld : WorldScript -{ -public: - WeekendBonusWorld() : WorldScript("WeekendBonusWorld") {} - - void OnAfterConfigLoad(bool reload) override - { - if (!reload) - { - rateExperienceKill = sWorld->getRate(RATE_XP_KILL); - rateExperienceBgKill[0] = sWorld->getRate(RATE_XP_BG_KILL_AV); - rateExperienceBgKill[1] = sWorld->getRate(RATE_XP_BG_KILL_WSG); - rateExperienceBgKill[2] = sWorld->getRate(RATE_XP_BG_KILL_AB); - rateExperienceBgKill[3] = sWorld->getRate(RATE_XP_BG_KILL_EOTS); - rateExperienceBgKill[4] = sWorld->getRate(RATE_XP_BG_KILL_SOTA); - rateExperienceBgKill[5] = sWorld->getRate(RATE_XP_BG_KILL_IC); - rateExperienceQuest = sWorld->getRate(RATE_XP_QUEST); - rateExperienceQuestDf = sWorld->getRate(RATE_XP_QUEST_DF); - rateExperienceExplore = sWorld->getRate(RATE_XP_EXPLORE); - rateExperiencePet = sWorld->getRate(RATE_XP_PET); - rateMoney = sWorld->getRate(RATE_DROP_MONEY); - rateProfessionsCrafting = sWorld->getIntConfig(CONFIG_SKILL_GAIN_CRAFTING); - rateProfessionsGathering = sWorld->getIntConfig(CONFIG_SKILL_GAIN_GATHERING); - rateReputation = sWorld->getRate(RATE_REPUTATION_GAIN); - rateProficienciesDefense = sWorld->getIntConfig(CONFIG_SKILL_GAIN_DEFENSE); - rateProficienciesWeapons = sWorld->getIntConfig(CONFIG_SKILL_GAIN_WEAPON); - } - - multiplierExperience = sConfigMgr->GetOption("WeekendBonus.Multiplier.Experience", 2.0f); - multiplierMoney = sConfigMgr->GetOption("WeekendBonus.Multiplier.Money", 2.0f); - multiplierProfessions = sConfigMgr->GetOption("WeekendBonus.Multiplier.Professions", 2); - multiplierReputation = sConfigMgr->GetOption("WeekendBonus.Multiplier.Reputation", 2.0f); - multiplierProficiencies = sConfigMgr->GetOption("WeekendBonus.Multiplier.Proficiencies", 2); - - if (reload) - { - if ((localtime(&localTime)->tm_wday == Day::FRIDAY && localtime(&localTime)->tm_hour >= 18) || localtime(&localTime)->tm_wday == Day::SATURDAY || localtime(&localTime)->tm_wday == Day::SUNDAY) - SetWorldRates(true); - else - SetWorldRates(false); - } - } - - void OnStartup() override - { - triggered = false; - localTime = time(NULL); - - if ((localtime(&localTime)->tm_wday == Day::FRIDAY && localtime(&localTime)->tm_hour >= 18) || localtime(&localTime)->tm_wday == Day::SATURDAY || localtime(&localTime)->tm_wday == Day::SUNDAY) - SetWorldRates(true); - } - - void OnUpdate(uint32 /*diff*/) override - { - localTime = time(NULL); - - if ((localtime(&localTime)->tm_wday == Day::FRIDAY && localtime(&localTime)->tm_hour >= 18) && !triggered) - { - sWorld->SendServerMessage(SERVER_MSG_STRING, "The weekend bonus is now active, granting you bonuses!"); - SetWorldRates(true); - triggered = true; - } - else if (localtime(&localTime)->tm_wday == Day::MONDAY && triggered) - { - sWorld->SendServerMessage(SERVER_MSG_STRING, "The weekend bonus is no longer active."); - SetWorldRates(false); - triggered = false; - } - } - -private: - float rateExperienceKill; - float rateExperienceBgKill[6]; - float rateExperienceQuest; - float rateExperienceQuestDf; - float rateExperienceExplore; - float rateExperiencePet; - float rateMoney; - uint32 rateProfessionsCrafting; - uint32 rateProfessionsGathering; - float rateReputation; - uint32 rateProficienciesDefense; - uint32 rateProficienciesWeapons; - - float multiplierExperience; - float multiplierMoney; - uint32 multiplierProfessions; - float multiplierReputation; - uint32 multiplierProficiencies; - - bool triggered; - time_t localTime; - - void SetWorldRates(bool weekend) - { - if (weekend) - { - sWorld->setRate(RATE_XP_KILL, rateExperienceKill * multiplierExperience); - sWorld->setRate(RATE_XP_BG_KILL_AV, rateExperienceBgKill[0] * multiplierExperience); - sWorld->setRate(RATE_XP_BG_KILL_WSG, rateExperienceBgKill[1] * multiplierExperience); - sWorld->setRate(RATE_XP_BG_KILL_AB, rateExperienceBgKill[2] * multiplierExperience); - sWorld->setRate(RATE_XP_BG_KILL_EOTS, rateExperienceBgKill[3] * multiplierExperience); - sWorld->setRate(RATE_XP_BG_KILL_SOTA, rateExperienceBgKill[4] * multiplierExperience); - sWorld->setRate(RATE_XP_BG_KILL_IC, rateExperienceBgKill[5] * multiplierExperience); - sWorld->setRate(RATE_XP_QUEST, rateExperienceQuest * multiplierExperience); - sWorld->setRate(RATE_XP_QUEST_DF, rateExperienceQuestDf * multiplierExperience); - sWorld->setRate(RATE_XP_EXPLORE, rateExperienceExplore * multiplierExperience); - sWorld->setRate(RATE_XP_PET, rateExperiencePet * multiplierExperience); - - sWorld->setRate(RATE_DROP_MONEY, rateMoney * multiplierMoney); - - sWorld->setIntConfig(CONFIG_SKILL_GAIN_CRAFTING, rateProfessionsCrafting * multiplierProfessions); - sWorld->setIntConfig(CONFIG_SKILL_GAIN_GATHERING, rateProfessionsGathering * multiplierProfessions); - - sWorld->setRate(RATE_REPUTATION_GAIN, rateReputation * multiplierReputation); - - sWorld->setIntConfig(CONFIG_SKILL_GAIN_DEFENSE, rateProficienciesDefense * multiplierProficiencies); - sWorld->setIntConfig(CONFIG_SKILL_GAIN_WEAPON, rateProficienciesWeapons * multiplierProficiencies); - } - else - { - sWorld->setRate(RATE_XP_KILL, rateExperienceKill); - sWorld->setRate(RATE_XP_BG_KILL_AV, rateExperienceBgKill[0]); - sWorld->setRate(RATE_XP_BG_KILL_WSG, rateExperienceBgKill[1]); - sWorld->setRate(RATE_XP_BG_KILL_AB, rateExperienceBgKill[2]); - sWorld->setRate(RATE_XP_BG_KILL_EOTS, rateExperienceBgKill[3]); - sWorld->setRate(RATE_XP_BG_KILL_SOTA, rateExperienceBgKill[4]); - sWorld->setRate(RATE_XP_BG_KILL_IC, rateExperienceBgKill[5]); - sWorld->setRate(RATE_XP_QUEST, rateExperienceQuest); - sWorld->setRate(RATE_XP_QUEST_DF, rateExperienceQuestDf); - sWorld->setRate(RATE_XP_EXPLORE, rateExperienceExplore); - sWorld->setRate(RATE_XP_PET, rateExperiencePet); - - sWorld->setRate(RATE_DROP_MONEY, rateMoney); - - sWorld->setIntConfig(CONFIG_SKILL_GAIN_CRAFTING, rateProfessionsCrafting); - sWorld->setIntConfig(CONFIG_SKILL_GAIN_GATHERING, rateProfessionsGathering); - - sWorld->setRate(RATE_REPUTATION_GAIN, rateReputation); - - sWorld->setIntConfig(CONFIG_SKILL_GAIN_DEFENSE, rateProficienciesDefense); - sWorld->setIntConfig(CONFIG_SKILL_GAIN_WEAPON, rateProficienciesWeapons); - } - } -}; - -void AddWeekendBonusScripts() -{ - new WeekendBonusPlayer(); - new WeekendBonusWorld(); + new WeekendBonus(); } diff --git a/src/mod_weekendbonus.h b/src/mod_weekendbonus.h new file mode 100644 index 0000000..0f88bb0 --- /dev/null +++ b/src/mod_weekendbonus.h @@ -0,0 +1,54 @@ +#ifndef MOD_WEEKENDBONUS_H +#define MOD_WEEKENDBONUS_H + +#include "Chat.h" +#include "Config.h" +#include "Player.h" +#include "ScriptMgr.h" + +enum Day +{ + SUNDAY = 0, + MONDAY, + TUESDAY, + WEDNESDAY, + THURSDAY, + FRIDAY, + SATURDAY +}; + +class WeekendBonus : public PlayerScript, WorldScript +{ +public: + WeekendBonus(); + + // PlayerScript + void OnLogin(Player* /*player*/) override; + + // WorldScript + void OnAfterConfigLoad(bool /*reload*/) override; + void OnStartup() override; + void OnUpdate(uint32 /*diff*/) override; + +private: + void LoadDefaultValues(); + void SetRates(bool /*active*/); + + bool Triggered; + time_t LocalTime; + + float ExperienceMultiplier; + float MoneyMultiplier; + uint32 ProfessionsMultiplier; + float ReputationMultiplier; + uint32 ProficienciesMultiplier; + + float DefaultExperienceMultiplier[6]; + float DefaultBattlegroundExperienceMultiplier[6]; + uint32 DefaultProfessionsMultiplier[2]; + uint32 DefaultProficienciesMultiplier[2]; + float DefaultMoneyMultiplier; + float DefaultReputationMultiplier; +}; + +#endif diff --git a/src/mod_weekendbonus_config.cpp b/src/mod_weekendbonus_config.cpp new file mode 100644 index 0000000..d26333a --- /dev/null +++ b/src/mod_weekendbonus_config.cpp @@ -0,0 +1,113 @@ +#include "mod_weekendbonus.h" + +void WeekendBonus::OnAfterConfigLoad(bool reload) +{ + if (!reload) + LoadDefaultValues(); + + float ExperienceMultiplier = sConfigMgr->GetOption("WeekendBonus.Multiplier.Experience", 2.0f); + float MoneyMultiplier = sConfigMgr->GetOption("WeekendBonus.Multiplier.Money", 2.0f); + uint32 ProfessionsMultiplier = sConfigMgr->GetOption("WeekendBonus.Multiplier.Professions", 2); + float ReputationMultiplier = sConfigMgr->GetOption("WeekendBonus.Multiplier.Reputation", 2.0f); + uint32 ProficienciesMultiplier = sConfigMgr->GetOption("WeekendBonus.Multiplier.Proficiencies", 2); + + if (reload) + { + if ((localtime(&LocalTime)->tm_wday == Day::FRIDAY && localtime(&LocalTime)->tm_hour >= 18) || localtime(&LocalTime)->tm_wday == Day::SATURDAY || localtime(&LocalTime)->tm_wday == Day::SUNDAY) + SetRates(true); + else + SetRates(false); + } +} + +void WeekendBonus::OnStartup() +{ + Triggered = false; + LocalTime = time(NULL); + + if ((localtime(&LocalTime)->tm_wday == Day::FRIDAY && localtime(&LocalTime)->tm_hour >= 18) || localtime(&LocalTime)->tm_wday == Day::SATURDAY || localtime(&LocalTime)->tm_wday == Day::SUNDAY) + SetRates(true); +} + +void WeekendBonus::OnUpdate(uint32 /*diff*/) +{ + LocalTime = time(NULL); + + if ((localtime(&LocalTime)->tm_wday == Day::FRIDAY && localtime(&LocalTime)->tm_hour >= 18) && !Triggered) + { + sWorld->SendServerMessage(SERVER_MSG_STRING, "The weekend bonus is now active, granting you bonuses!"); + SetRates(true); + Triggered = true; + } + else if (localtime(&LocalTime)->tm_wday == Day::MONDAY && Triggered) + { + sWorld->SendServerMessage(SERVER_MSG_STRING, "The weekend bonus is no longer active."); + SetRates(false); + Triggered = false; + } +} + +void WeekendBonus::LoadDefaultValues() +{ + DefaultExperienceMultiplier[0] = sWorld->getRate(RATE_XP_KILL); + DefaultExperienceMultiplier[1] = sWorld->getRate(RATE_XP_QUEST); + DefaultExperienceMultiplier[2] = sWorld->getRate(RATE_XP_QUEST_DF); + DefaultExperienceMultiplier[3] = sWorld->getRate(RATE_XP_EXPLORE); + DefaultExperienceMultiplier[4] = sWorld->getRate(RATE_XP_PET); + DefaultBattlegroundExperienceMultiplier[0] = sWorld->getRate(RATE_XP_BG_KILL_AV); + DefaultBattlegroundExperienceMultiplier[1] = sWorld->getRate(RATE_XP_BG_KILL_WSG); + DefaultBattlegroundExperienceMultiplier[2] = sWorld->getRate(RATE_XP_BG_KILL_AB); + DefaultBattlegroundExperienceMultiplier[3] = sWorld->getRate(RATE_XP_BG_KILL_EOTS); + DefaultBattlegroundExperienceMultiplier[4] = sWorld->getRate(RATE_XP_BG_KILL_SOTA); + DefaultBattlegroundExperienceMultiplier[5] = sWorld->getRate(RATE_XP_BG_KILL_IC); + DefaultMoneyMultiplier = sWorld->getRate(RATE_DROP_MONEY); + DefaultProfessionsMultiplier[0] = sWorld->getIntConfig(CONFIG_SKILL_GAIN_CRAFTING); + DefaultProfessionsMultiplier[1] = sWorld->getIntConfig(CONFIG_SKILL_GAIN_GATHERING); + DefaultReputationMultiplier = sWorld->getRate(RATE_REPUTATION_GAIN); + DefaultProficienciesMultiplier[0] = sWorld->getIntConfig(CONFIG_SKILL_GAIN_DEFENSE); + DefaultProficienciesMultiplier[1] = sWorld->getIntConfig(CONFIG_SKILL_GAIN_WEAPON); +} + +void WeekendBonus::SetRates(bool active) +{ + if (active) + { + sWorld->setRate(RATE_XP_KILL, DefaultExperienceMultiplier[0] * ExperienceMultiplier); + sWorld->setRate(RATE_XP_QUEST, DefaultExperienceMultiplier[1] * ExperienceMultiplier); + sWorld->setRate(RATE_XP_QUEST_DF, DefaultExperienceMultiplier[2] * ExperienceMultiplier); + sWorld->setRate(RATE_XP_EXPLORE, DefaultExperienceMultiplier[3] * ExperienceMultiplier); + sWorld->setRate(RATE_XP_PET, DefaultExperienceMultiplier[4] * ExperienceMultiplier); + sWorld->setRate(RATE_XP_BG_KILL_AV, DefaultBattlegroundExperienceMultiplier[0] * ExperienceMultiplier); + sWorld->setRate(RATE_XP_BG_KILL_WSG, DefaultBattlegroundExperienceMultiplier[1] * ExperienceMultiplier); + sWorld->setRate(RATE_XP_BG_KILL_AB, DefaultBattlegroundExperienceMultiplier[2] * ExperienceMultiplier); + sWorld->setRate(RATE_XP_BG_KILL_EOTS, DefaultBattlegroundExperienceMultiplier[3] * ExperienceMultiplier); + sWorld->setRate(RATE_XP_BG_KILL_SOTA, DefaultBattlegroundExperienceMultiplier[4] * ExperienceMultiplier); + sWorld->setRate(RATE_XP_BG_KILL_IC, DefaultBattlegroundExperienceMultiplier[5] * ExperienceMultiplier); + sWorld->setRate(RATE_DROP_MONEY, DefaultMoneyMultiplier * MoneyMultiplier); + sWorld->setIntConfig(CONFIG_SKILL_GAIN_CRAFTING, DefaultProfessionsMultiplier[0] * ProfessionsMultiplier); + sWorld->setIntConfig(CONFIG_SKILL_GAIN_GATHERING, DefaultProfessionsMultiplier[1] * ProfessionsMultiplier); + sWorld->setRate(RATE_REPUTATION_GAIN, DefaultReputationMultiplier * ReputationMultiplier); + sWorld->setIntConfig(CONFIG_SKILL_GAIN_DEFENSE, DefaultProficienciesMultiplier[0] * ProficienciesMultiplier); + sWorld->setIntConfig(CONFIG_SKILL_GAIN_WEAPON, DefaultProficienciesMultiplier[1] * ProficienciesMultiplier); + } + else + { + sWorld->setRate(RATE_XP_KILL, DefaultExperienceMultiplier[0]); + sWorld->setRate(RATE_XP_QUEST, DefaultExperienceMultiplier[1]); + sWorld->setRate(RATE_XP_QUEST_DF, DefaultExperienceMultiplier[2]); + sWorld->setRate(RATE_XP_EXPLORE, DefaultExperienceMultiplier[3]); + sWorld->setRate(RATE_XP_PET, DefaultExperienceMultiplier[4]); + sWorld->setRate(RATE_XP_BG_KILL_AV, DefaultBattlegroundExperienceMultiplier[0]); + sWorld->setRate(RATE_XP_BG_KILL_WSG, DefaultBattlegroundExperienceMultiplier[1]); + sWorld->setRate(RATE_XP_BG_KILL_AB, DefaultBattlegroundExperienceMultiplier[2]); + sWorld->setRate(RATE_XP_BG_KILL_EOTS, DefaultBattlegroundExperienceMultiplier[3]); + sWorld->setRate(RATE_XP_BG_KILL_SOTA, DefaultBattlegroundExperienceMultiplier[4]); + sWorld->setRate(RATE_XP_BG_KILL_IC, DefaultBattlegroundExperienceMultiplier[5]); + sWorld->setRate(RATE_DROP_MONEY, DefaultMoneyMultiplier); + sWorld->setIntConfig(CONFIG_SKILL_GAIN_CRAFTING, DefaultProfessionsMultiplier[0]); + sWorld->setIntConfig(CONFIG_SKILL_GAIN_GATHERING, DefaultProfessionsMultiplier[1]); + sWorld->setRate(RATE_REPUTATION_GAIN, DefaultReputationMultiplier); + sWorld->setIntConfig(CONFIG_SKILL_GAIN_DEFENSE, DefaultProficienciesMultiplier[0]); + sWorld->setIntConfig(CONFIG_SKILL_GAIN_WEAPON, DefaultProficienciesMultiplier[1]); + } +} diff --git a/src/mod_weekendbonus_player.cpp b/src/mod_weekendbonus_player.cpp new file mode 100644 index 0000000..0562821 --- /dev/null +++ b/src/mod_weekendbonus_player.cpp @@ -0,0 +1,9 @@ +#include "mod_weekendbonus.h" + +void WeekendBonus::OnLogin(Player* player) +{ + LocalTime = time(NULL); + + if ((localtime(&LocalTime)->tm_wday == Day::FRIDAY && localtime(&LocalTime)->tm_hour >= 18) || localtime(&LocalTime)->tm_wday == Day::SATURDAY || localtime(&LocalTime)->tm_wday == Day::SUNDAY) + ChatHandler(player->GetSession()).SendSysMessage("The weekend bonus is active, granting you bonuses!"); +}