107 lines
4.2 KiB
C++
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();
|
|
}
|