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