diff --git a/.github/.gitkeep b/.github/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml deleted file mode 100644 index 5610d2b..0000000 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ /dev/null @@ -1,72 +0,0 @@ -name: Bug report -description: Create a bug report to help us improve. -title: "Bug: " -body: - - type: textarea - id: current - attributes: - label: Current Behaviour - description: | - Description of the problem or issue here. - Include entries of affected creatures / items / quests / spells etc. - If this is a crash, post the crashlog (upload to https://gist.github.com/) and include the link here. - Never upload files! Use GIST for text and YouTube for videos! - validations: - required: true - - type: textarea - id: expected - attributes: - label: Expected Behaviour - description: | - Tell us what should happen instead. - validations: - required: true - - type: textarea - id: reproduce - attributes: - label: Steps to reproduce the problem - description: | - What does someone else need to do to encounter the same bug? - placeholder: | - 1. Step 1 - 2. Step 2 - 3. Step 3 - validations: - required: true - - type: textarea - id: extra - attributes: - label: Extra Notes - description: | - Do you have any extra notes that can help solve the issue that does not fit any other field? - placeholder: | - None - validations: - required: false - - type: textarea - id: commit - attributes: - label: AC rev. hash/commit - description: | - Copy the result of the `.server debug` command (if you need to run it from the client get a prat addon) - validations: - required: true - - type: input - id: os - attributes: - label: Operating system - description: | - The Operating System the Server is running on. - i.e. Windows 11 x64, Debian 10 x64, macOS 12, Ubuntu 20.04 - validations: - required: true - - type: textarea - id: custom - attributes: - label: Custom changes or Modules - description: | - List which custom changes or modules you have applied, i.e. Eluna module, etc. - placeholder: | - None - validations: - required: false diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml deleted file mode 100644 index 58f79dd..0000000 --- a/.github/ISSUE_TEMPLATE/feature_request.yml +++ /dev/null @@ -1,33 +0,0 @@ -name: Feature request -description: Suggest an idea for this project -title: "Feature: " -body: - - type: markdown - attributes: - value: | - Thank you for taking your time to fill out a feature request. Remember to fill out all fields including the title above. - An issue that is not properly filled out will be closed. - - type: textarea - id: description - attributes: - label: Describe your feature request or suggestion in detail - description: | - A clear and concise description of what you want to happen. - validations: - required: true - - type: textarea - id: solution - attributes: - label: Describe a possible solution to your feature or suggestion in detail - description: | - A clear and concise description of any alternative solutions or features you've considered. - validations: - required: false - - type: textarea - id: additional - attributes: - label: Additional context - description: | - Add any other context or screenshots about the feature request here. - validations: - required: false diff --git a/README.md b/README.md index 44e46bb..a5c55ae 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,4 @@ # Features - This module will deposit a certain percentage of money obtained from quests and money looted into the guild bank. It will **not** take money from the player, it will just add a bonus to the guild bank. diff --git a/conf/.gitkeep b/conf/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/conf/conf.sh.dist b/conf/conf.sh.dist new file mode 100644 index 0000000..f1f641a --- /dev/null +++ b/conf/conf.sh.dist @@ -0,0 +1 @@ +#!/usr/bin/env bash diff --git a/include.sh b/include.sh index e69de29..1c4cfbd 100644 --- a/include.sh +++ b/include.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash +MOD_GUILDFUNDS_ROOT="$( cd "$( dirname "${BASH_SOURCE[0]}" )/" && pwd )" + +source $MOD_GUILDFUNDS_ROOT"/conf/conf.sh.dist" + +if [ -f $MOD_GUILDFUNDS_ROOT"/conf/conf.sh" ]; then + source $MOD_GUILDFUNDS_ROOT"/conf/conf.sh" +fi diff --git a/src/loader.cpp b/src/loader.cpp new file mode 100644 index 0000000..2682ffe --- /dev/null +++ b/src/loader.cpp @@ -0,0 +1,6 @@ +void AddGuildFundsScripts(); + +void Addmod_guildfundsScripts() +{ + AddGuildFundsScripts(); +} diff --git a/src/mod_guildfunds.cpp b/src/mod_guildfunds.cpp index f602367..a7cae0e 100644 --- a/src/mod_guildfunds.cpp +++ b/src/mod_guildfunds.cpp @@ -1,8 +1,160 @@ -#include "mod_guildfunds.h" +#include "Chat.h" +#include "Config.h" +#include "Guild.h" +#include "Player.h" +#include "ScriptMgr.h" -GuildFunds::GuildFunds() : LootScript("GuildFundsLootScript"), PlayerScript("GuildFundsPlayerScript"), WorldScript("GuildFundsWorldScript") {} +bool gfShowInfo; +uint32 gfLootMultiplier; +uint32 gfQuestMultiplier; -void Addmod_guildfundsScripts() +class GuildFundsConfig : WorldScript { - new GuildFunds(); +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(); } diff --git a/src/mod_guildfunds.h b/src/mod_guildfunds.h deleted file mode 100644 index 6f9e72b..0000000 --- a/src/mod_guildfunds.h +++ /dev/null @@ -1,28 +0,0 @@ -#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 deleted file mode 100644 index ce14332..0000000 --- a/src/mod_guildfunds_config.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#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 deleted file mode 100644 index c674e48..0000000 --- a/src/mod_guildfunds_loot.cpp +++ /dev/null @@ -1,62 +0,0 @@ -#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 deleted file mode 100644 index 22e9463..0000000 --- a/src/mod_guildfunds_player.cpp +++ /dev/null @@ -1,47 +0,0 @@ -#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("{} copper was deposited to the guild bank.", copper); - else if (money < GOLD) - info = Acore::StringFormat("{} silver, {} copper was deposited to the guild bank.", silver, copper); - else - info = Acore::StringFormat("{} gold, {} silver, {} copper was deposited to the guild bank.", gold, silver, copper); - - ChatHandler(player->GetSession()).SendSysMessage(info); -}