diff --git a/src/loader.cpp b/src/loader.cpp deleted file mode 100644 index 2682ffe..0000000 --- a/src/loader.cpp +++ /dev/null @@ -1,6 +0,0 @@ -void AddGuildFundsScripts(); - -void Addmod_guildfundsScripts() -{ - AddGuildFundsScripts(); -} diff --git a/src/mod_guildfunds.cpp b/src/mod_guildfunds.cpp index 1c38409..f602367 100644 --- a/src/mod_guildfunds.cpp +++ b/src/mod_guildfunds.cpp @@ -1,160 +1,8 @@ -#include "Chat.h" -#include "Config.h" -#include "Guild.h" -#include "Player.h" -#include "ScriptMgr.h" +#include "mod_guildfunds.h" -bool gfShowInfo; -uint32 gfLootMultiplier; -uint32 gfQuestMultiplier; +GuildFunds::GuildFunds() : LootScript("GuildFundsLootScript"), PlayerScript("GuildFundsPlayerScript"), WorldScript("GuildFundsWorldScript") {} -class GuildFundsConfig : WorldScript +void Addmod_guildfundsScripts() { -public: - GuildFundsConfig() : WorldScript("GuildFundsConfig") {} - - void OnAfterConfigLoad(bool /*reload*/) override - { - gfShowInfo = sConfigMgr->GetOption("GuildFunds.ShowInfo", 1); - gfLootMultiplier = sConfigMgr->GetOption("GuildFunds.Looted", 10); - gfQuestMultiplier = sConfigMgr->GetOption("GuildFunds.Quests", 3); - } -}; - -class GuildFundsLoot : LootScript -{ -public: - GuildFundsLoot() : LootScript("GuildFundsLoot") {} - - void OnLootMoney(Player* player, uint32 gold) override - { - if (Group* group = player->GetGroup()) - { - uint32 membersInRange = 0; - for (GroupReference* groupRef = group->GetFirstMember(); groupRef != nullptr; groupRef = groupRef->next()) - { - if (Player* member = groupRef->GetSource()) - { - if (member->IsAtLootRewardDistance(player)) - membersInRange++; - } - } - - if (gfLootMultiplier < 1) - return; - - uint32 money = (gold / membersInRange) * gfLootMultiplier / 100; - - if (money < 1) - return; - - for (GroupReference* groupRef = group->GetFirstMember(); groupRef != nullptr; groupRef = groupRef->next()) - { - if (Player* member = groupRef->GetSource()) - { - if (member->IsAtLootRewardDistance(player)) - { - if (Guild* guild = member->GetGuild()) - { - guild->HandleMemberDepositMoney(member->GetSession(), money); - member->ModifyMoney(money); - - if (gfShowInfo) - PrintGuildFundsInformation(member, money); - } - } - } - } - } - else - { - if (Guild* guild = player->GetGuild()) - { - uint32 money = gold * gfLootMultiplier / 100; - - if (money < 1 || gfLootMultiplier < 1) - return; - - guild->HandleMemberDepositMoney(player->GetSession(), money); - player->ModifyMoney(money); - - if (gfShowInfo) - PrintGuildFundsInformation(player, money); - } - } - } - -private: - void PrintGuildFundsInformation(Player* player, uint32 money) - { - uint32 gold = money / GOLD; - uint32 silver = (money % GOLD) / SILVER; - uint32 copper = (money % GOLD) % SILVER; - std::string info; - - if (money < SILVER) - info = Acore::StringFormat("%i copper was deposited to the guild bank.", copper); - else if (money < GOLD) - info = Acore::StringFormat("%i silver, %i copper was deposited to the guild bank.", silver, copper); - else - info = Acore::StringFormat("%i gold, %i silver, %i copper was deposited to the guild bank.", gold, silver, copper); - - ChatHandler(player->GetSession()).SendSysMessage(info); - } -}; - -class GuildFundsQuest : public PlayerScript -{ -public: - GuildFundsQuest() : PlayerScript("GuildFundsQuest") {} - - void OnPlayerCompleteQuest(Player* player, Quest const* quest) override - { - if (Guild* guild = player->GetGuild()) - { - if (gfQuestMultiplier < 1) - return; - - uint32 playerLevel = player->GetLevel(); - - if (quest->GetRewOrReqMoney(playerLevel) < 1) - return; - - uint32 money = quest->GetRewOrReqMoney(playerLevel) * gfQuestMultiplier / 100; - - if (money < 1) - return; - - guild->HandleMemberDepositMoney(player->GetSession(), money); - player->ModifyMoney(money); - - if (gfShowInfo) - PrintGuildFundsInformation(player, money); - } - } - -private: - void PrintGuildFundsInformation(Player* player, uint32 money) - { - uint32 gold = money / GOLD; - uint32 silver = (money % GOLD) / SILVER; - uint32 copper = (money % GOLD) % SILVER; - std::string info; - - if (money < SILVER) - info = Acore::StringFormat("%i copper was deposited to the guild bank.", copper); - else if (money < GOLD) - info = Acore::StringFormat("%i silver, %i copper was deposited to the guild bank.", silver, copper); - else - info = Acore::StringFormat("%i gold, %i silver, %i copper was deposited to the guild bank.", gold, silver, copper); - - ChatHandler(player->GetSession()).SendSysMessage(info); - } -}; - -void AddGuildFundsScripts() -{ - new GuildFundsConfig(); - new GuildFundsLoot(); - new GuildFundsQuest(); + new GuildFunds(); } diff --git a/src/mod_guildfunds.h b/src/mod_guildfunds.h new file mode 100644 index 0000000..6f9e72b --- /dev/null +++ b/src/mod_guildfunds.h @@ -0,0 +1,28 @@ +#ifndef MOD_GUILDFUNDS +#define MOD_GUILDFUNDS + +#include "ScriptMgr.h" + +class GuildFunds : public LootScript, PlayerScript, WorldScript +{ +public: + GuildFunds(); + + // LootScript + void OnLootMoney(Player* /*player*/, uint32 /*gold*/) override; + + // PlayerScript + void OnPlayerCompleteQuest(Player* /*player*/, Quest const* /*quest*/) override; + + // WorldScript + void OnAfterConfigLoad(bool /*reload*/) override; + +private: + bool ShowInfo; + uint32 LootMultiplier; + uint32 QuestMultiplier; + + void SendFundsInformation(Player* /*player*/, uint32 /*money*/); +}; + +#endif diff --git a/src/mod_guildfunds_config.cpp b/src/mod_guildfunds_config.cpp new file mode 100644 index 0000000..ce14332 --- /dev/null +++ b/src/mod_guildfunds_config.cpp @@ -0,0 +1,10 @@ +#include "Config.h" + +#include "mod_guildfunds.h" + +void GuildFunds::OnAfterConfigLoad(bool /*reload*/) +{ + ShowInfo = sConfigMgr->GetOption("GuildFunds.ShowInfo", 1); + LootMultiplier = sConfigMgr->GetOption("GuildFunds.Looted", 10); + QuestMultiplier = sConfigMgr->GetOption("GuildFunds.Quests", 3); +} diff --git a/src/mod_guildfunds_loot.cpp b/src/mod_guildfunds_loot.cpp new file mode 100644 index 0000000..c674e48 --- /dev/null +++ b/src/mod_guildfunds_loot.cpp @@ -0,0 +1,62 @@ +#include "Guild.h" +#include "Player.h" + +#include "mod_guildfunds.h" + +void GuildFunds::OnLootMoney(Player* player, uint32 gold) +{ + if (Group* group = player->GetGroup()) + { + uint32 membersInRange = 0; + for (GroupReference* groupRef = group->GetFirstMember(); groupRef != nullptr; groupRef = groupRef->next()) + { + if (Player* member = groupRef->GetSource()) + { + if (member->IsAtLootRewardDistance(player)) + membersInRange++; + } + } + + if (LootMultiplier < 1) + return; + + uint32 money = (gold / membersInRange) * LootMultiplier / 100; + + if (money < 1) + return; + + for (GroupReference* groupRef = group->GetFirstMember(); groupRef != nullptr; groupRef = groupRef->next()) + { + if (Player* member = groupRef->GetSource()) + { + if (member->IsAtLootRewardDistance(player)) + { + if (Guild* guild = member->GetGuild()) + { + guild->HandleMemberDepositMoney(member->GetSession(), money); + member->ModifyMoney(money); + + if (ShowInfo) + SendFundsInformation(member, money); + } + } + } + } + } + else + { + if (Guild* guild = player->GetGuild()) + { + uint32 money = gold * LootMultiplier / 100; + + if (money < 1 || LootMultiplier < 1) + return; + + guild->HandleMemberDepositMoney(player->GetSession(), money); + player->ModifyMoney(money); + + if (ShowInfo) + SendFundsInformation(player, money); + } + } +} diff --git a/src/mod_guildfunds_player.cpp b/src/mod_guildfunds_player.cpp new file mode 100644 index 0000000..0931ec3 --- /dev/null +++ b/src/mod_guildfunds_player.cpp @@ -0,0 +1,47 @@ +#include "Chat.h" +#include "Guild.h" +#include "Player.h" + +#include "mod_guildfunds.h" + +void GuildFunds::OnPlayerCompleteQuest(Player* player, Quest const* quest) +{ + if (Guild* guild = player->GetGuild()) + { + if (QuestMultiplier < 1) + return; + + uint32 playerLevel = player->GetLevel(); + + if (quest->GetRewOrReqMoney(playerLevel) < 1) + return; + + uint32 money = quest->GetRewOrReqMoney(playerLevel) * QuestMultiplier / 100; + + if (money < 1) + return; + + guild->HandleMemberDepositMoney(player->GetSession(), money); + player->ModifyMoney(money); + + if (ShowInfo) + SendFundsInformation(player, money); + } +} + +void GuildFunds::SendFundsInformation(Player* player, uint32 money) +{ + uint32 gold = money / GOLD; + uint32 silver = (money % GOLD) / SILVER; + uint32 copper = (money % GOLD) % SILVER; + std::string info; + + if (money < SILVER) + info = Acore::StringFormat("%i copper was deposited to the guild bank.", copper); + else if (money < GOLD) + info = Acore::StringFormat("%i silver, %i copper was deposited to the guild bank.", silver, copper); + else + info = Acore::StringFormat("%i gold, %i silver, %i copper was deposited to the guild bank.", gold, silver, copper); + + ChatHandler(player->GetSession()).SendSysMessage(info); +}