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

320 lines
16 KiB
C++

////////////////////////////////////////////////////////////////////////////////
//
// MILLENIUM-STUDIO
// Copyright 2016 Millenium-studio SARL
// All Rights Reserved.
//
////////////////////////////////////////////////////////////////////////////////
#include "ScriptPCH.h"
#include "ScriptMgr.h"
#include "Config.h"
class duel_reset: public PlayerScript
{
public:
duel_reset() : PlayerScript("duel_reset") {}
void OnDuelEnd(Player* winner, Player* looser, DuelCompleteType type)
{
if (sWorld->getBoolConfig(CONFIG_DUEL_RESET_COOLDOWN_ON_FINISH))
{
if (sWorld->getBoolConfig(CONFIG_DUEL_RESET_COOLDOWN_ONLY_IN_ELWYNN_AND_DUROTAR))
{
if (winner->GetZoneId() == 14 || winner->GetZoneId() == 12)
{
if (type == DUEL_WON)
{
winner->RemoveArenaSpellCooldowns();
looser->RemoveArenaSpellCooldowns();
winner->SetHealth(winner->GetMaxHealth());
looser->SetHealth(looser->GetMaxHealth());
if (winner->getPowerType() == POWER_MANA)
winner->SetPower(POWER_MANA, winner->GetMaxPower(POWER_MANA));
if (looser->getPowerType() == POWER_MANA)
looser->SetPower(POWER_MANA, looser->GetMaxPower(POWER_MANA));
}
winner->HandleEmoteCommand(EMOTE_ONESHOT_CHEER);
}
}
else
{
if (type == DUEL_WON)
{
winner->RemoveArenaSpellCooldowns();
looser->RemoveArenaSpellCooldowns();
winner->SetHealth(winner->GetMaxHealth());
looser->SetHealth(looser->GetMaxHealth());
if (winner->getPowerType() == POWER_MANA)
winner->SetPower(POWER_MANA, winner->GetMaxPower(POWER_MANA));
if (looser->getPowerType() == POWER_MANA)
looser->SetPower(POWER_MANA, looser->GetMaxPower(POWER_MANA));
}
winner->HandleEmoteCommand(EMOTE_ONESHOT_CHEER);
}
}
}
void OnDuelStart(Player* player1, Player* player2)
{
if (sWorld->getBoolConfig(CONFIG_DUEL_RESET_COOLDOWN_ON_START))
{
if (sWorld->getBoolConfig(CONFIG_DUEL_RESET_COOLDOWN_ONLY_IN_ELWYNN_AND_DUROTAR))
{
if (player1->GetZoneId() == 14 || player1->GetZoneId() == 12)
{
player1->RemoveArenaSpellCooldowns();
player2->RemoveArenaSpellCooldowns();
player1->SetHealth(player1->GetMaxHealth());
player2->SetHealth(player2->GetMaxHealth());
if (sWorld->getBoolConfig(CONFIG_DUEL_RESET_COOLDOWN_RESET_ENERGY_ON_START))
{
switch (player1->getPowerType())
{
case POWER_RAGE:
player1->SetPower(POWER_RAGE, 0);
break;
case POWER_RUNIC_POWER:
player1->SetPower(POWER_RUNIC_POWER, 0);
break;
case POWER_CHI:
player1->SetPower(POWER_CHI, 0);
break;
case POWER_DEMONIC_FURY:
player1->SetPower(POWER_DEMONIC_FURY, 0);
break;
case POWER_HOLY_POWER:
player1->SetPower(POWER_HOLY_POWER, 0);
break;
case POWER_BURNING_EMBERS:
player1->SetPower(POWER_BURNING_EMBERS, 0);
break;
case POWER_SHADOW_ORB:
player1->SetPower(POWER_SHADOW_ORB, 0);
break;
case POWER_SOUL_SHARDS:
player1->SetPower(POWER_SOUL_SHARDS, 0);
break;
default:
break;
}
switch (player2->getPowerType())
{
case POWER_RAGE:
player2->SetPower(POWER_RAGE, 0);
break;
case POWER_RUNIC_POWER:
player2->SetPower(POWER_RUNIC_POWER, 0);
break;
default:
break;
}
}
if (sWorld->getBoolConfig(CONFIG_DUEL_RESET_COOLDOWN_MAX_ENERGY_ON_START))
{
switch (player1->getPowerType())
{
case POWER_MANA:
player1->SetPower(POWER_MANA, player1->GetMaxPower(POWER_MANA));
break;
case POWER_RAGE:
player1->SetPower(POWER_RAGE, player1->GetMaxPower(POWER_RAGE));
break;
case POWER_RUNIC_POWER:
player1->SetPower(POWER_RUNIC_POWER, player1->GetMaxPower(POWER_RUNIC_POWER));
break;
case POWER_CHI:
player1->SetPower(POWER_CHI, player1->GetMaxPower(POWER_CHI));
break;
case POWER_DEMONIC_FURY:
player1->SetPower(POWER_DEMONIC_FURY, player1->GetMaxPower(POWER_DEMONIC_FURY));
break;
case POWER_HOLY_POWER:
player1->SetPower(POWER_HOLY_POWER, player1->GetMaxPower(POWER_HOLY_POWER));
break;
case POWER_BURNING_EMBERS:
player1->SetPower(POWER_BURNING_EMBERS, player1->GetMaxPower(POWER_BURNING_EMBERS));
break;
case POWER_SHADOW_ORB:
player1->SetPower(POWER_SHADOW_ORB, player1->GetMaxPower(POWER_SHADOW_ORB));
break;
case POWER_FOCUS:
player1->SetPower(POWER_FOCUS, player1->GetMaxPower(POWER_FOCUS));
break;
case POWER_ENERGY:
player1->SetPower(POWER_ENERGY, player1->GetMaxPower(POWER_ENERGY));
break;
case POWER_SOUL_SHARDS:
player1->SetPower(POWER_SOUL_SHARDS, player1->GetMaxPower(POWER_SOUL_SHARDS));
break;
default:
break;
}
switch (player2->getPowerType())
{
case POWER_MANA:
player2->SetPower(POWER_MANA, player2->GetMaxPower(POWER_MANA));
break;
case POWER_RAGE:
player2->SetPower(POWER_RAGE, player2->GetMaxPower(POWER_RAGE));
break;
case POWER_RUNIC_POWER:
player2->SetPower(POWER_RUNIC_POWER, player2->GetMaxPower(POWER_RUNIC_POWER));
break;
case POWER_CHI:
player2->SetPower(POWER_CHI, player2->GetMaxPower(POWER_CHI));
break;
case POWER_DEMONIC_FURY:
player2->SetPower(POWER_DEMONIC_FURY, player2->GetMaxPower(POWER_DEMONIC_FURY));
break;
case POWER_HOLY_POWER:
player2->SetPower(POWER_HOLY_POWER, player2->GetMaxPower(POWER_HOLY_POWER));
break;
case POWER_BURNING_EMBERS:
player2->SetPower(POWER_BURNING_EMBERS, player2->GetMaxPower(POWER_BURNING_EMBERS));
break;
case POWER_SHADOW_ORB:
player2->SetPower(POWER_SHADOW_ORB, player2->GetMaxPower(POWER_SHADOW_ORB));
break;
case POWER_FOCUS:
player2->SetPower(POWER_FOCUS, player2->GetMaxPower(POWER_FOCUS));
break;
case POWER_ENERGY:
player2->SetPower(POWER_ENERGY, player2->GetMaxPower(POWER_ENERGY));
break;
case POWER_SOUL_SHARDS:
player2->SetPower(POWER_SOUL_SHARDS, player2->GetMaxPower(POWER_SOUL_SHARDS));
break;
default:
break;
}
}
}
}
else
{
player1->RemoveArenaSpellCooldowns();
player2->RemoveArenaSpellCooldowns();
player1->SetHealth(player1->GetMaxHealth());
player2->SetHealth(player2->GetMaxHealth());
if (sWorld->getBoolConfig(CONFIG_DUEL_RESET_COOLDOWN_MAX_ENERGY_ON_START))
{
switch (player1->getPowerType())
{
case POWER_MANA:
player1->SetPower(POWER_MANA, player1->GetMaxPower(POWER_MANA));
break;
case POWER_RAGE:
player1->SetPower(POWER_RAGE, player1->GetMaxPower(POWER_RAGE));
break;
case POWER_RUNIC_POWER:
player1->SetPower(POWER_RUNIC_POWER, player1->GetMaxPower(POWER_RUNIC_POWER));
break;
case POWER_CHI:
player1->SetPower(POWER_CHI, player1->GetMaxPower(POWER_CHI));
break;
case POWER_DEMONIC_FURY:
player1->SetPower(POWER_DEMONIC_FURY, player1->GetMaxPower(POWER_DEMONIC_FURY));
break;
case POWER_HOLY_POWER:
player1->SetPower(POWER_HOLY_POWER, player1->GetMaxPower(POWER_HOLY_POWER));
break;
case POWER_BURNING_EMBERS:
player1->SetPower(POWER_BURNING_EMBERS, player1->GetMaxPower(POWER_BURNING_EMBERS));
break;
case POWER_SHADOW_ORB:
player1->SetPower(POWER_SHADOW_ORB, player1->GetMaxPower(POWER_SHADOW_ORB));
break;
case POWER_FOCUS:
player1->SetPower(POWER_FOCUS, player1->GetMaxPower(POWER_FOCUS));
break;
case POWER_ENERGY:
player1->SetPower(POWER_ENERGY, player1->GetMaxPower(POWER_ENERGY));
break;
case POWER_SOUL_SHARDS:
player1->SetPower(POWER_SOUL_SHARDS, player1->GetMaxPower(POWER_SOUL_SHARDS));
break;
default:
break;
}
switch (player2->getPowerType())
{
case POWER_MANA:
player2->SetPower(POWER_MANA, player2->GetMaxPower(POWER_MANA));
break;
case POWER_RAGE:
player2->SetPower(POWER_RAGE, player2->GetMaxPower(POWER_RAGE));
break;
case POWER_RUNIC_POWER:
player2->SetPower(POWER_RUNIC_POWER, player2->GetMaxPower(POWER_RUNIC_POWER));
break;
case POWER_CHI:
player2->SetPower(POWER_CHI, player2->GetMaxPower(POWER_CHI));
break;
case POWER_DEMONIC_FURY:
player2->SetPower(POWER_DEMONIC_FURY, player2->GetMaxPower(POWER_DEMONIC_FURY));
break;
case POWER_HOLY_POWER:
player2->SetPower(POWER_HOLY_POWER, player2->GetMaxPower(POWER_HOLY_POWER));
break;
case POWER_BURNING_EMBERS:
player2->SetPower(POWER_BURNING_EMBERS, player2->GetMaxPower(POWER_BURNING_EMBERS));
break;
case POWER_SHADOW_ORB:
player2->SetPower(POWER_SHADOW_ORB, player2->GetMaxPower(POWER_SHADOW_ORB));
break;
case POWER_FOCUS:
player2->SetPower(POWER_FOCUS, player2->GetMaxPower(POWER_FOCUS));
break;
case POWER_ENERGY:
player2->SetPower(POWER_ENERGY, player2->GetMaxPower(POWER_ENERGY));
break;
case POWER_SOUL_SHARDS:
player2->SetPower(POWER_SOUL_SHARDS, player2->GetMaxPower(POWER_SOUL_SHARDS));
break;
default:
break;
}
}
}
}
}
};
class duel_reset_aura_script: public PlayerScript
{
public:
duel_reset_aura_script() : PlayerScript("duel_reset_aura_script") {}
void OnDuelStart(Player* p_Player1, Player* p_Player2)
{
if (!p_Player1 || !p_Player2)
return;
if (p_Player1->HasAuraType(SPELL_AURA_RESET_COOLDOWNS_BEFORE_DUEL))
p_Player1->RemoveArenaSpellCooldowns(true);
if (p_Player2->HasAuraType(SPELL_AURA_RESET_COOLDOWNS_BEFORE_DUEL))
p_Player2->RemoveArenaSpellCooldowns(true);
}
};
#ifndef __clang_analyzer__
void AddSC_DuelReset()
{
//new duel_reset();
new duel_reset_aura_script();
}
#endif