eluna-scripts-ornfelt/lua/WowEmulationScriptPack/C++/npc_mmr_reset.cpp
2024-09-23 07:59:23 +02:00

171 lines
5.9 KiB
C++

#include "ScriptMgr.h"
#include "ScriptedCreature.h"
#include "ScriptedGossip.h"
#include "WorldPacket.h"
#include "ScriptPCH.h"
#include "ObjectMgr.h"
#include "ArenaTeam.h"
#include "ArenaTeamMgr.h"
#include "World.h"
#include "Player.h"
#include "WorldSession.h"
#include "Group.h"
#include "ObjectAccessor.h"
#include "Unit.h"
class npc_mmr_reset : public CreatureScript
{
public:
npc_mmr_reset() : CreatureScript("npc_mmr_reset") { }
uint16* GetMmr(Player *player)
{
uint16 *mmr = new uint16[3];
mmr[0] = 0;
mmr[1] = 0;
mmr[2] = 0;
for(int x = 0; x < 3; x++)
{
if (ArenaTeam *twos = sArenaTeamMgr->GetArenaTeamById(player->GetArenaTeamId(x)))
{
ArenaTeamMember *member = twos->GetMember(player->GetGUID());
if (player->GetGUID() == twos->GetCaptain())
{
mmr[x] = 0;
}
else
{
mmr[x] = twos->GetMember(player->GetGUID())->MatchMakerRating;
}
}
else
{
mmr[x] = 0;
}
}
return mmr;
}
bool ChangeMmr(Player *player, int slot, int value)
{
if (ArenaTeam *team = sArenaTeamMgr->GetArenaTeamById(player->GetArenaTeamId(slot)))
{
ArenaTeamMember *member = team->GetMember(player->GetGUID());
member->MatchMakerRating = value;
member->ModifyMatchmakerRating(value - (int)member->MatchMakerRating, slot);
team->SaveToDB();
team->DelMember(player->GetGUID(), true);
team->SaveToDB();
return true;
}
return false;
}
bool OnGossipHello(Player *player, Creature *_creature)
{
uint16 *mmr = GetMmr(player);
if (mmr[0] > 0)
{
if (mmr[0] >= 1950)
player->ADD_GOSSIP_ITEM(0, "Lower 2v2 MMR to 1950 and leave team!", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2);
else
player->ADD_GOSSIP_ITEM(0, "Reset 2v2 MMR to 1500 and leave team!", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
}
if (mmr[1] > 0)
{
if (mmr[1] >= 1800)
player->ADD_GOSSIP_ITEM(0, "Lower 3v3 MMR to 1800 and leave team!", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4);
else
player->ADD_GOSSIP_ITEM(0, "Reset 3v3 MMR to 1500 and leave team!", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3);
}
if (mmr[2] > 0)
{
if (mmr[1] >= 1650)
player->ADD_GOSSIP_ITEM(0, "Lower 5v5 MMR to 1650 and leave team!", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6);
else
player->ADD_GOSSIP_ITEM(0, "Reset 5v5 MMR to 1500 and leave team!", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5);
}
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Bye", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+7);
player->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, _creature->GetGUID());
return true;
}
bool OnGossipSelect(Player *player, Creature *_creature, uint32 sender, uint32 action)
{
if (action < GOSSIP_ACTION_INFO_DEF + 7)
{
uint16 *mmr = GetMmr(player);
switch (action - GOSSIP_ACTION_INFO_DEF)
{
case 1: // reset 2v2 mmr to 1500
if (mmr[0] > 0)
{
if (ChangeMmr(player, 0, 1500))
{
player->SaveToDB();
}
}
break;
case 2: // reset 2v2 mmr to 1950
if (mmr[0] >= 1950)
{
if (ChangeMmr(player, 0, 1950))
{
player->SaveToDB();
}
}
break;
case 3: // reset 3v3 mmr to 1500
if (mmr[1] > 0)
{
if (ChangeMmr(player, 1, 1500))
{
player->SaveToDB();
}
}
break;
case 4: // reset 3v3 mmr to 1750
if (mmr[1] >= 1800)
{
if (ChangeMmr(player, 1, 1800))
{
player->SaveToDB();
}
}
break;
case 5: // reset 5v5 mmr to 1500
if (mmr[2] > 0)
{
if (ChangeMmr(player, 2, 1500))
{
player->SaveToDB();
}
}
break;
case 6: // reset 5v5 mmr to 1650
if (mmr[2] >= 1650)
{
if (ChangeMmr(player, 2, 1650))
{
player->SaveToDB();
}
}
break;
default:
break;
}
}
player->CLOSE_GOSSIP_MENU();
return true;
}
};
void AddSC_npc_mmr_reset()
{
new npc_mmr_reset;
}