Restructured

Restructured the code layout to match my other modules.
This commit is contained in:
Revision
2023-06-22 21:41:41 +02:00
parent 8cfe97dcf9
commit 10cb84fd15
5 changed files with 181 additions and 184 deletions

View File

@@ -1,6 +0,0 @@
void AddWeekendBonusScripts();
void Addmod_weekendbonusScripts()
{
AddWeekendBonusScripts();
}

View File

@@ -1,181 +1,8 @@
#include "Chat.h" #include "mod_weekendbonus.h"
#include "Config.h"
#include "Player.h"
#include "ScriptMgr.h"
enum Day WeekendBonus::WeekendBonus() : PlayerScript("WeekendBonusPlayerScript"), WorldScript("WeekendBonusWorldScript") {}
void Addmod_weekendbonusScripts()
{ {
SUNDAY = 0, new WeekendBonus();
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<float>("WeekendBonus.Multiplier.Experience", 2.0f);
multiplierMoney = sConfigMgr->GetOption<float>("WeekendBonus.Multiplier.Money", 2.0f);
multiplierProfessions = sConfigMgr->GetOption<uint32>("WeekendBonus.Multiplier.Professions", 2);
multiplierReputation = sConfigMgr->GetOption<float>("WeekendBonus.Multiplier.Reputation", 2.0f);
multiplierProficiencies = sConfigMgr->GetOption<uint32>("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();
} }

54
src/mod_weekendbonus.h Normal file
View File

@@ -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

View File

@@ -0,0 +1,113 @@
#include "mod_weekendbonus.h"
void WeekendBonus::OnAfterConfigLoad(bool reload)
{
if (!reload)
LoadDefaultValues();
float ExperienceMultiplier = sConfigMgr->GetOption<float>("WeekendBonus.Multiplier.Experience", 2.0f);
float MoneyMultiplier = sConfigMgr->GetOption<float>("WeekendBonus.Multiplier.Money", 2.0f);
uint32 ProfessionsMultiplier = sConfigMgr->GetOption<uint32>("WeekendBonus.Multiplier.Professions", 2);
float ReputationMultiplier = sConfigMgr->GetOption<float>("WeekendBonus.Multiplier.Reputation", 2.0f);
uint32 ProficienciesMultiplier = sConfigMgr->GetOption<uint32>("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]);
}
}

View File

@@ -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!");
}