First Commit
This commit is contained in:
109
modules/mod-mxwow-bounty/src/mxwow_bounty.cpp
Normal file
109
modules/mod-mxwow-bounty/src/mxwow_bounty.cpp
Normal file
@@ -0,0 +1,109 @@
|
||||
//// 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
|
||||
{
|
||||
if (sConfigMgr->GetOption<bool>("MxWoW_Bounty.Enabled", true)) { return; }
|
||||
ChatHandler(player->GetSession()).SendSysMessage("This server is running the |cff4CFF00MxW Bounty |rmodule.");
|
||||
}
|
||||
|
||||
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 << ").";
|
||||
}
|
||||
ChatHandler(player->GetSession()).PSendSysMessage(ss.str().c_str());
|
||||
|
||||
player->ModifyMoney(+int32(giveAmount));
|
||||
}
|
||||
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 << ").";
|
||||
}
|
||||
ChatHandler(p->GetSession()).PSendSysMessage(ss.str().c_str());
|
||||
|
||||
p->ModifyMoney(+int32(giveAmount));
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
void AddMxWoWBountyScripts()
|
||||
{
|
||||
new mxwow_bounty();
|
||||
}
|
||||
Reference in New Issue
Block a user