mirror of
https://github.com/noisiver/mod-weekendbonus.git
synced 2026-01-13 00:58:36 +00:00
Fixes
Changed a large chunk of the module to support reloading config options.
This commit is contained in:
@@ -3,12 +3,6 @@
|
|||||||
#include "Player.h"
|
#include "Player.h"
|
||||||
#include "ScriptMgr.h"
|
#include "ScriptMgr.h"
|
||||||
|
|
||||||
float multiplierExperience;
|
|
||||||
float multiplierMoney;
|
|
||||||
float multiplierProfessions;
|
|
||||||
float multiplierReputation;
|
|
||||||
float multiplierProficiencies;
|
|
||||||
|
|
||||||
enum Day
|
enum Day
|
||||||
{
|
{
|
||||||
SUNDAY = 0,
|
SUNDAY = 0,
|
||||||
@@ -30,9 +24,7 @@ class WeekendBonusPlayer : public PlayerScript
|
|||||||
time_t t = time(NULL);
|
time_t t = time(NULL);
|
||||||
|
|
||||||
if (localtime(&t)->tm_wday == Day::FRIDAY || localtime(&t)->tm_wday == Day::SATURDAY || localtime(&t)->tm_wday == Day::SUNDAY)
|
if (localtime(&t)->tm_wday == Day::FRIDAY || localtime(&t)->tm_wday == Day::SATURDAY || localtime(&t)->tm_wday == Day::SUNDAY)
|
||||||
{
|
|
||||||
ChatHandler(player->GetSession()).SendSysMessage("The weekend bonus is active, granting you bonuses!");
|
ChatHandler(player->GetSession()).SendSysMessage("The weekend bonus is active, granting you bonuses!");
|
||||||
}
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -41,13 +33,34 @@ class WeekendBonusWorld : WorldScript
|
|||||||
public:
|
public:
|
||||||
WeekendBonusWorld() : WorldScript("WeekendBonusWorld") {}
|
WeekendBonusWorld() : WorldScript("WeekendBonusWorld") {}
|
||||||
|
|
||||||
void OnAfterConfigLoad(bool /*reload*/) override
|
void OnAfterConfigLoad(bool reload) override
|
||||||
{
|
{
|
||||||
multiplierExperience = sConfigMgr->GetOption<float>("WeekendBonus.Multiplier.Experience", 2.0f);
|
rateExperienceKill = sWorld->getRate(RATE_XP_KILL);
|
||||||
multiplierMoney = sConfigMgr->GetOption<float>("WeekendBonus.Multiplier.Money", 2.0f);
|
rateExperienceBgKill = sWorld->getRate(RATE_XP_BG_KILL);
|
||||||
multiplierProfessions = sConfigMgr->GetOption<float>("WeekendBonus.Multiplier.Professions", 2.0f);
|
rateExperienceQuest = sWorld->getRate(RATE_XP_QUEST);
|
||||||
multiplierReputation = sConfigMgr->GetOption<float>("WeekendBonus.Multiplier.Reputation", 2.0f);
|
rateExperienceQuestDf = sWorld->getRate(RATE_XP_QUEST_DF);
|
||||||
multiplierProficiencies = sConfigMgr->GetOption<float>("WeekendBonus.Multiplier.Proficiencies", 2.0f);
|
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<uint32>("WeekendBonus.Multiplier.Experience", 2.0f);
|
||||||
|
multiplierMoney = sConfigMgr->GetOption<uint32>("WeekendBonus.Multiplier.Money", 2.0f);
|
||||||
|
multiplierProfessions = sConfigMgr->GetOption<uint32>("WeekendBonus.Multiplier.Professions", 2.0f);
|
||||||
|
multiplierReputation = sConfigMgr->GetOption<uint32>("WeekendBonus.Multiplier.Reputation", 2.0f);
|
||||||
|
multiplierProficiencies = sConfigMgr->GetOption<uint32>("WeekendBonus.Multiplier.Proficiencies", 2.0f);
|
||||||
|
|
||||||
|
if (reload)
|
||||||
|
{
|
||||||
|
if (localtime(&localTime)->tm_wday == Day::FRIDAY || localtime(&localTime)->tm_wday == Day::SATURDAY || localtime(&localTime)->tm_wday == Day::SUNDAY)
|
||||||
|
SetWorldRates(true);
|
||||||
|
else
|
||||||
|
SetWorldRates(false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void OnStartup() override
|
void OnStartup() override
|
||||||
@@ -56,79 +69,89 @@ class WeekendBonusWorld : WorldScript
|
|||||||
localTime = time(NULL);
|
localTime = time(NULL);
|
||||||
|
|
||||||
if (localtime(&localTime)->tm_wday == Day::FRIDAY || localtime(&localTime)->tm_wday == Day::SATURDAY || localtime(&localTime)->tm_wday == Day::SUNDAY)
|
if (localtime(&localTime)->tm_wday == Day::FRIDAY || localtime(&localTime)->tm_wday == Day::SATURDAY || localtime(&localTime)->tm_wday == Day::SUNDAY)
|
||||||
SetWorldRates();
|
SetWorldRates(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void OnUpdate(uint32 /*diff*/) override
|
void OnUpdate(uint32 /*diff*/) override
|
||||||
{
|
|
||||||
HandleWeekendBonuses();
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
bool triggered;
|
|
||||||
time_t localTime;
|
|
||||||
|
|
||||||
void HandleWeekendBonuses()
|
|
||||||
{
|
{
|
||||||
localTime = time(NULL);
|
localTime = time(NULL);
|
||||||
|
|
||||||
if (localtime(&localTime)->tm_wday == Day::FRIDAY && localtime(&localTime)->tm_hour == 0 && localtime(&localTime)->tm_min == 0 && !triggered)
|
if (localtime(&localTime)->tm_wday == Day::FRIDAY && localtime(&localTime)->tm_hour == 0 && localtime(&localTime)->tm_min == 0 && !triggered)
|
||||||
{
|
{
|
||||||
sWorld->SendServerMessage(SERVER_MSG_STRING, "The weekend bonus is now active, granting you bonuses!");
|
sWorld->SendServerMessage(SERVER_MSG_STRING, "The weekend bonus is now active, granting you bonuses!");
|
||||||
|
SetWorldRates(true);
|
||||||
SetWorldRates();
|
triggered = true;
|
||||||
}
|
}
|
||||||
else if (localtime(&localTime)->tm_wday == Day::MONDAY && localtime(&localTime)->tm_hour == 0 && localtime(&localTime)->tm_min == 0 && triggered)
|
else if (localtime(&localTime)->tm_wday == Day::MONDAY && localtime(&localTime)->tm_hour == 0 && localtime(&localTime)->tm_min == 0 && triggered)
|
||||||
{
|
{
|
||||||
sWorld->SendServerMessage(SERVER_MSG_STRING, "The weekend bonus is no longer active.");
|
sWorld->SendServerMessage(SERVER_MSG_STRING, "The weekend bonus is no longer active.");
|
||||||
|
SetWorldRates(false);
|
||||||
SetWorldRates();
|
triggered = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetWorldRates()
|
private:
|
||||||
|
uint32 rateExperienceKill;
|
||||||
|
uint32 rateExperienceBgKill;
|
||||||
|
uint32 rateExperienceQuest;
|
||||||
|
uint32 rateExperienceQuestDf;
|
||||||
|
uint32 rateExperienceExplore;
|
||||||
|
uint32 rateExperiencePet;
|
||||||
|
uint32 rateMoney;
|
||||||
|
uint32 rateProfessionsCrafting;
|
||||||
|
uint32 rateProfessionsGathering;
|
||||||
|
uint32 rateReputation;
|
||||||
|
uint32 rateProficienciesDefense;
|
||||||
|
uint32 rateProficienciesWeapons;
|
||||||
|
|
||||||
|
uint32 multiplierExperience;
|
||||||
|
uint32 multiplierMoney;
|
||||||
|
uint32 multiplierProfessions;
|
||||||
|
uint32 multiplierReputation;
|
||||||
|
uint32 multiplierProficiencies;
|
||||||
|
|
||||||
|
bool triggered;
|
||||||
|
time_t localTime;
|
||||||
|
|
||||||
|
void SetWorldRates(bool weekend)
|
||||||
{
|
{
|
||||||
if (!triggered)
|
if (weekend)
|
||||||
{
|
{
|
||||||
sWorld->setRate(RATE_XP_KILL, sWorld->getRate(RATE_XP_KILL) * multiplierExperience);
|
sWorld->setRate(RATE_XP_KILL, rateExperienceKill * multiplierExperience);
|
||||||
sWorld->setRate(RATE_XP_BG_KILL, sWorld->getRate(RATE_XP_BG_KILL) * multiplierExperience);
|
sWorld->setRate(RATE_XP_BG_KILL, rateExperienceBgKill * multiplierExperience);
|
||||||
sWorld->setRate(RATE_XP_QUEST, sWorld->getRate(RATE_XP_QUEST) * multiplierExperience);
|
sWorld->setRate(RATE_XP_QUEST, rateExperienceQuest * multiplierExperience);
|
||||||
sWorld->setRate(RATE_XP_QUEST_DF, sWorld->getRate(RATE_XP_QUEST_DF) * multiplierExperience);
|
sWorld->setRate(RATE_XP_QUEST_DF, rateExperienceQuestDf * multiplierExperience);
|
||||||
sWorld->setRate(RATE_XP_EXPLORE, sWorld->getRate(RATE_XP_EXPLORE) * multiplierExperience);
|
sWorld->setRate(RATE_XP_EXPLORE, rateExperienceExplore * multiplierExperience);
|
||||||
sWorld->setRate(RATE_XP_PET, sWorld->getRate(RATE_XP_PET) * multiplierExperience);
|
sWorld->setRate(RATE_XP_PET, rateExperiencePet * multiplierExperience);
|
||||||
|
|
||||||
sWorld->setRate(RATE_DROP_MONEY, sWorld->getRate(RATE_DROP_MONEY) * multiplierMoney);
|
sWorld->setRate(RATE_DROP_MONEY, rateMoney * multiplierMoney);
|
||||||
|
|
||||||
sWorld->setIntConfig(CONFIG_SKILL_GAIN_CRAFTING, sWorld->getIntConfig(CONFIG_SKILL_GAIN_CRAFTING) * multiplierProfessions);
|
sWorld->setIntConfig(CONFIG_SKILL_GAIN_CRAFTING, rateProfessionsCrafting * multiplierProfessions);
|
||||||
sWorld->setIntConfig(CONFIG_SKILL_GAIN_GATHERING, sWorld->getIntConfig(CONFIG_SKILL_GAIN_GATHERING) * multiplierProfessions);
|
sWorld->setIntConfig(CONFIG_SKILL_GAIN_GATHERING, rateProfessionsGathering * multiplierProfessions);
|
||||||
|
|
||||||
sWorld->setRate(RATE_REPUTATION_GAIN, sWorld->getRate(RATE_REPUTATION_GAIN) * multiplierReputation);
|
sWorld->setRate(RATE_REPUTATION_GAIN, rateReputation * multiplierReputation);
|
||||||
|
|
||||||
sWorld->setIntConfig(CONFIG_SKILL_GAIN_DEFENSE, sWorld->getIntConfig(CONFIG_SKILL_GAIN_DEFENSE) * multiplierProficiencies);
|
sWorld->setIntConfig(CONFIG_SKILL_GAIN_DEFENSE, rateProficienciesDefense * multiplierProficiencies);
|
||||||
sWorld->setIntConfig(CONFIG_SKILL_GAIN_WEAPON, sWorld->getIntConfig(CONFIG_SKILL_GAIN_WEAPON) * multiplierProficiencies);
|
sWorld->setIntConfig(CONFIG_SKILL_GAIN_WEAPON, rateProficienciesWeapons * multiplierProficiencies);
|
||||||
|
|
||||||
triggered = true;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
sWorld->setRate(RATE_XP_KILL, sWorld->getRate(RATE_XP_KILL) / multiplierExperience);
|
sWorld->setRate(RATE_XP_KILL, rateExperienceKill);
|
||||||
sWorld->setRate(RATE_XP_BG_KILL, sWorld->getRate(RATE_XP_BG_KILL) / multiplierExperience);
|
sWorld->setRate(RATE_XP_BG_KILL, rateExperienceBgKill);
|
||||||
sWorld->setRate(RATE_XP_QUEST, sWorld->getRate(RATE_XP_QUEST) / multiplierExperience);
|
sWorld->setRate(RATE_XP_QUEST, rateExperienceQuest);
|
||||||
sWorld->setRate(RATE_XP_QUEST_DF, sWorld->getRate(RATE_XP_QUEST_DF) / multiplierExperience);
|
sWorld->setRate(RATE_XP_QUEST_DF, rateExperienceQuestDf);
|
||||||
sWorld->setRate(RATE_XP_EXPLORE, sWorld->getRate(RATE_XP_EXPLORE) / multiplierExperience);
|
sWorld->setRate(RATE_XP_EXPLORE, rateExperienceExplore);
|
||||||
sWorld->setRate(RATE_XP_PET, sWorld->getRate(RATE_XP_PET) / multiplierExperience);
|
sWorld->setRate(RATE_XP_PET, rateExperiencePet);
|
||||||
|
|
||||||
sWorld->setRate(RATE_DROP_MONEY, sWorld->getRate(RATE_DROP_MONEY) / multiplierMoney);
|
sWorld->setRate(RATE_DROP_MONEY, rateMoney);
|
||||||
|
|
||||||
sWorld->setIntConfig(CONFIG_SKILL_GAIN_CRAFTING, sWorld->getIntConfig(CONFIG_SKILL_GAIN_CRAFTING) / multiplierProfessions);
|
sWorld->setIntConfig(CONFIG_SKILL_GAIN_CRAFTING, rateProfessionsCrafting);
|
||||||
sWorld->setIntConfig(CONFIG_SKILL_GAIN_GATHERING, sWorld->getIntConfig(CONFIG_SKILL_GAIN_GATHERING) / multiplierProfessions);
|
sWorld->setIntConfig(CONFIG_SKILL_GAIN_GATHERING, rateProfessionsGathering);
|
||||||
|
|
||||||
sWorld->setRate(RATE_REPUTATION_GAIN, sWorld->getRate(RATE_REPUTATION_GAIN) / multiplierReputation);
|
sWorld->setRate(RATE_REPUTATION_GAIN, rateReputation);
|
||||||
|
|
||||||
sWorld->setIntConfig(CONFIG_SKILL_GAIN_DEFENSE, sWorld->getIntConfig(CONFIG_SKILL_GAIN_DEFENSE) / multiplierProficiencies);
|
sWorld->setIntConfig(CONFIG_SKILL_GAIN_DEFENSE, rateProficienciesDefense);
|
||||||
sWorld->setIntConfig(CONFIG_SKILL_GAIN_WEAPON, sWorld->getIntConfig(CONFIG_SKILL_GAIN_WEAPON) / multiplierProficiencies);
|
sWorld->setIntConfig(CONFIG_SKILL_GAIN_WEAPON, rateProficienciesWeapons);
|
||||||
|
|
||||||
triggered = false;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user