mirror of
https://github.com/ornfelt/azerothcore_lua_scripts
synced 2026-08-22 06:26:03 -04:00
171 lines
5.9 KiB
C++
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;
|
|
}
|