eluna-scripts-ornfelt/lua/WowEmulationScriptPack/C++/OnChat.cpp

67 lines
2.7 KiB
C++
Raw Permalink Normal View History

2023-08-16 00:50:59 +02:00
#include "ScriptPCH.h"
#include "DatabaseEnv.h"
enum ChatFilterAuras
{
SPELL_AURA_FREEZE = 9454,
SPELL_AURA_STUN = 31539,
};
class chat_filter_playerscript : public PlayerScript
{
public:
chat_filter_playerscript() : PlayerScript("chat_filter_playerscript") { }
void OnLogin(Player* player)
{
if (player->HasAura(SPELL_AURA_FREEZE))
{
if (player->LoggedOutWhilePunished())
player->GetSession()->SendNotification("Your freeze timer was set to the number before you logged out during your freeze.");
if (QueryResult result = CharacterDatabase.PQuery("SELECT FreezeTimer FROM characters WHERE guid = %u", player->GetGUIDLow()))
{
player->SetFreezeStunTimer(true, (*result)[0].GetUInt32());
CharacterDatabase.PExecute("UPDATE characters SET FreezeTimer = 0 WHERE guid = %u", player->GetGUIDLow());
}
}
if (player->HasAura(SPELL_AURA_STUN))
{
if (player->LoggedOutWhilePunished())
player->GetSession()->SendNotification("Your stun timer was set to the number before you logged out during your stun.");
if (QueryResult result = CharacterDatabase.PQuery("SELECT StunTimer FROM characters WHERE guid = %u", player->GetGUIDLow()))
{
player->SetFreezeStunTimer(false, (*result)[0].GetUInt32());
CharacterDatabase.PExecute("UPDATE characters SET StunTimer = 0 WHERE guid = %u", player->GetGUIDLow());
}
}
player->SetLoggedOutWhilePunished(false);
}
void OnLogout(Player* player)
{
//! If player is frozen or stunned by the chat filter system because
//! they used 'bad words' and logout during their punishment, the
//! remaining time they should be frozen or stunned will be saved
//! into a database column and pulled back in on logout.
if (player->HasAura(SPELL_AURA_FREEZE))
{
player->SetLoggedOutWhilePunished(true);
CharacterDatabase.PExecute("UPDATE characters SET FreezeTimer = %u WHERE guid = %u", player->GetFreezeStunTimer(true), player->GetGUIDLow());
}
if (player->HasAura(SPELL_AURA_STUN))
{
player->SetLoggedOutWhilePunished(true);
CharacterDatabase.PExecute("UPDATE characters SET StunTimer = %u WHERE guid = %u", player->GetFreezeStunTimer(false), player->GetGUIDLow());
}
}
};
void AddSC_chat_filter_playerscript()
{
new chat_filter_playerscript();
}