2025-03-24 23:53:45 -04:00

107 lines
4.2 KiB
C++

//// MxWoW Official Module
//// Boss Kill
//// Dev: mikx
//// Git: https://mxgit.ovh/MxWoW/mod_mxwow_bounty
#include "Configuration/Config.h"
#include "ScriptMgr.h"
#include "Player.h"
#include "Chat.h"
#include <WorldSessionMgr.h>
class mxwow_bounty : public PlayerScript
{
public:
mxwow_bounty() : PlayerScript("mxwow_bounty") { }
void OnPlayerLogin(Player* player) override
{
}
void OnPlayerCreatureKill(Player* player, Creature* creature) {
if (!sConfigMgr->GetOption<bool>("MxWoW_Bounty.Enabled", true)) { return; }
std::ostringstream ss;
uint32 calculatedAmount = 0;
uint32 giveAmount = 0;
uint32 levelDif = 0;
uint32 base = sConfigMgr->GetOption<int>("MxWoW_Bounty.Base.Copper", true);
Map* map = player->GetMap();
uint32 pLevel = player->GetLevel();
bool pGrouped = player->GetGroup();
std::string cName = creature->GetName();
uint32 cLevel = creature->GetLevel();
uint32 multiplicator = 1;
if (creature->isElite()) {
multiplicator = 2;
}
if (creature->IsDungeonBoss()) {
multiplicator = 3;
}
if (creature->isWorldBoss()) {
multiplicator = 4;
}
if (map->IsHeroic()) {
multiplicator = 5;
}
calculatedAmount = ((base * cLevel) * multiplicator);
giveAmount += calculatedAmount;
uint32 formatedAmountCopper = calculatedAmount % 100;
calculatedAmount = (calculatedAmount - formatedAmountCopper) / 100;
uint32 formatedAmountSilver = calculatedAmount % 100;
uint32 formatedAmountGold = (calculatedAmount - formatedAmountSilver) / 100;
if (!pGrouped) {
if (formatedAmountGold > 0) {
ss << "|cffabeeff[MxW] Vous obtenez une récompense de |cffffb300" << formatedAmountGold << "g |cff9c9994" << formatedAmountSilver << "s |cffb87333" << formatedAmountCopper << "c |cffabeeffpour avoir tué " << cName << " (" << cLevel << ").";
}
if (formatedAmountGold == 0 && formatedAmountSilver > 0) {
ss << "|cffabeeff[MxW] Vous obtenez une récompense de |cff9c9994" << formatedAmountSilver << "s |cffb87333" << formatedAmountCopper << "c |cffabeeffpour avoir tué " << cName << " (" << cLevel << ").";
}
if (formatedAmountGold == 0 && formatedAmountSilver == 0 && formatedAmountCopper > 0) {
ss << "|cffabeeff[MxW] Vous obtenez une récompense de |cffb87333" << formatedAmountCopper << "c |cffabeeffpour avoir tué " << cName << " (" << cLevel << ").";
}
player->ModifyMoney(+int32(giveAmount));
ChatHandler(player->GetSession()).PSendSysMessage(ss.str().c_str());
}
else {
Group* group = player->GetGroup();
Group::MemberSlotList const& groupSlot = group->GetMemberSlots();
for (Group::member_citerator itr = groupSlot.begin(); itr != groupSlot.end(); itr++)
{
Player* p = ObjectAccessor::FindPlayer(itr->guid);
if (formatedAmountGold > 0) {
ss << "|cffabeeff[MxW] Vous obtenez une récompense de |cffffb300" << formatedAmountGold << "g |cff9c9994" << formatedAmountSilver << "s |cffb87333" << formatedAmountCopper << "c |cffabeeffpour avoir tué " << cName << " (" << cLevel << ").";
}
if (formatedAmountGold == 0 && formatedAmountSilver > 0) {
ss << "|cffabeeff[MxW] Vous obtenez une récompense de |cff9c9994" << formatedAmountSilver << "s |cffb87333" << formatedAmountCopper << "c |cffabeeffpour avoir tué " << cName << " (" << cLevel << ").";
}
if (formatedAmountGold == 0 && formatedAmountSilver == 0 && formatedAmountCopper > 0) {
ss << "|cffabeeff[MxW] Vous obtenez une récompense de |cffb87333" << formatedAmountCopper << "c |cffabeeffpour avoir tué " << cName << " (" << cLevel << ").";
}
p->ModifyMoney(+int32(giveAmount));
ChatHandler(p->GetSession()).PSendSysMessage(ss.str().c_str());
}
}
}
};
void AddMxWoWBountyScripts()
{
new mxwow_bounty();
}