Implement some GM spells.
This commit is contained in:
@@ -34,6 +34,23 @@ ALTER TABLE `auctionhousebot`
|
||||
CHANGE COLUMN `bid` `bid` INT(11) UNSIGNED NOT NULL DEFAULT '1' COMMENT 'Bid Price' AFTER `stack`,
|
||||
CHANGE COLUMN `buyout` `buyout` INT(11) UNSIGNED NOT NULL DEFAULT '1' COMMENT 'Buyout Price' AFTER `bid`;
|
||||
|
||||
-- Change delay field to unsigned.
|
||||
ALTER TABLE `autobroadcast`
|
||||
CHANGE COLUMN `delay` `delay` INT(11) UNSIGNED NULL DEFAULT NULL FIRST;
|
||||
|
||||
-- Rename the comments filed to comment.
|
||||
ALTER TABLE `autobroadcast`
|
||||
CHANGE COLUMN `comments` `comment` VARCHAR(255) NULL DEFAULT NULL AFTER `string_id`;
|
||||
|
||||
-- Change map field to unsigned.
|
||||
ALTER TABLE `battleground_events`
|
||||
CHANGE COLUMN `map` `map` SMALLINT(5) UNSIGNED NOT NULL FIRST;
|
||||
|
||||
-- Change cinematic and timer fields to unsigned.
|
||||
ALTER TABLE `cinematic_waypoints`
|
||||
CHANGE COLUMN `cinematic` `cinematic` INT(11) UNSIGNED NULL DEFAULT '0' FIRST,
|
||||
CHANGE COLUMN `timer` `timer` INT(11) UNSIGNED NULL DEFAULT '0' AFTER `cinematic`;
|
||||
|
||||
|
||||
-- End of migration.
|
||||
END IF;
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
DROP PROCEDURE IF EXISTS add_migration;
|
||||
delimiter ??
|
||||
CREATE PROCEDURE `add_migration`()
|
||||
BEGIN
|
||||
DECLARE v INT DEFAULT 1;
|
||||
SET v = (SELECT COUNT(*) FROM `migrations` WHERE `id`='20190502192619');
|
||||
IF v=0 THEN
|
||||
INSERT INTO `migrations` VALUES ('20190502192619');
|
||||
-- Add your query below.
|
||||
|
||||
|
||||
-- Move some texts to database.
|
||||
INSERT INTO `mangos_string` (`entry`, `content_default`, `content_loc1`, `content_loc2`, `content_loc3`, `content_loc4`, `content_loc5`, `content_loc6`, `content_loc7`, `content_loc8`) VALUES (345, 'INVIS mode is ON', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
INSERT INTO `mangos_string` (`entry`, `content_default`, `content_loc1`, `content_loc2`, `content_loc3`, `content_loc4`, `content_loc5`, `content_loc6`, `content_loc7`, `content_loc8`) VALUES (346, 'INVIS mode is OFF', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
INSERT INTO `mangos_string` (`entry`, `content_default`, `content_loc1`, `content_loc2`, `content_loc3`, `content_loc4`, `content_loc5`, `content_loc6`, `content_loc7`, `content_loc8`) VALUES (349, 'GOD mode is ON', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
INSERT INTO `mangos_string` (`entry`, `content_default`, `content_loc1`, `content_loc2`, `content_loc3`, `content_loc4`, `content_loc5`, `content_loc6`, `content_loc7`, `content_loc8`) VALUES (350, 'GOD mode is OFF', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
INSERT INTO `mangos_string` (`entry`, `content_default`, `content_loc1`, `content_loc2`, `content_loc3`, `content_loc4`, `content_loc5`, `content_loc6`, `content_loc7`, `content_loc8`) VALUES (2049, 'Ticket notifications enabled.', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
INSERT INTO `mangos_string` (`entry`, `content_default`, `content_loc1`, `content_loc2`, `content_loc3`, `content_loc4`, `content_loc5`, `content_loc6`, `content_loc7`, `content_loc8`) VALUES (2050, 'Ticket notifications disabled.', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
|
||||
-- Fix target type for GM spells.
|
||||
UPDATE `spell_template` SET `effectImplicitTargetA1`=1, `effectImplicitTargetB1`=0, `effectRadiusIndex1`=0 WHERE (`build` > 5302) && (`entry` IN (456, 2765, 1509, 18139, 6147, 2763, 20114, 20115));
|
||||
|
||||
-- Add missing creature template for Terky needed by White Murloc Egg.
|
||||
INSERT INTO `creature_template` (`entry`, `patch`, `display_id1`, `display_id2`, `display_id3`, `display_id4`, `name`, `subname`, `gossip_menu_id`, `level_min`, `level_max`, `health_min`, `health_max`, `mana_min`, `mana_max`, `armor`, `faction`, `npc_flags`, `speed_walk`, `speed_run`, `scale`, `detection_range`, `call_for_help_range`, `leash_range`, `rank`, `xp_multiplier`, `dmg_min`, `dmg_max`, `dmg_school`, `attack_power`, `dmg_multiplier`, `base_attack_time`, `ranged_attack_time`, `unit_class`, `unit_flags`, `dynamic_flags`, `beast_family`, `trainer_type`, `trainer_spell`, `trainer_class`, `trainer_race`, `ranged_dmg_min`, `ranged_dmg_max`, `ranged_attack_power`, `type`, `type_flags`, `loot_id`, `pickpocket_loot_id`, `skinning_loot_id`, `holy_res`, `fire_res`, `nature_res`, `frost_res`, `shadow_res`, `arcane_res`, `spell_id1`, `spell_id2`, `spell_id3`, `spell_id4`, `spell_list_id`, `pet_spell_list_id`, `gold_min`, `gold_max`, `ai_name`, `movement_type`, `inhabit_type`, `civilian`, `racial_leader`, `regeneration`, `equipment_id`, `trainer_id`, `vendor_id`, `mechanic_immune_mask`, `school_immune_mask`, `flags_extra`, `script_name`) VALUES (16445, 0, 15398, 0, 0, 0, 'Terky', NULL, 0, 1, 1, 42, 42, 0, 0, 20, 188, 0, 0.75, 1.14286, 0.8, 20, 5, 0, 0, 1, 2, 2, 0, 44, 1, 2000, 2000, 1, 33536, 0, 0, 0, 0, 0, 0, 1, 1, 100, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 3, 0, 0, 3, 0, 0, 0, 0, 0, 2, '');
|
||||
|
||||
|
||||
-- End of migration.
|
||||
END IF;
|
||||
END??
|
||||
delimiter ;
|
||||
CALL add_migration();
|
||||
DROP PROCEDURE IF EXISTS add_migration;
|
||||
@@ -46,6 +46,8 @@ class Unit;
|
||||
class GmTicket;
|
||||
struct ItemPrototype;
|
||||
|
||||
#define SPELL_PLAYER_MUTED_VISUAL 1852
|
||||
|
||||
enum CommandFlags
|
||||
{
|
||||
COMMAND_FLAGS_ONLY_ON_SELF = 0x1,
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
#include "Database/DatabaseImpl.h"
|
||||
#include "World.h"
|
||||
#include "Player.h"
|
||||
#include "SpellAuras.h"
|
||||
#include "Chat.h"
|
||||
#include "ObjectAccessor.h"
|
||||
#include "Language.h"
|
||||
@@ -1182,7 +1183,7 @@ bool ChatHandler::HandleMuteCommand(char* args)
|
||||
if (HasLowerSecurity(target, target_guid, true))
|
||||
return false;
|
||||
|
||||
time_t mutetime = time(NULL) + notspeaktime * 60;
|
||||
time_t mutetime = time(NULL) + notspeaktime * MINUTE;
|
||||
|
||||
if (target)
|
||||
target->GetSession()->m_muteTime = mutetime;
|
||||
@@ -1190,7 +1191,16 @@ bool ChatHandler::HandleMuteCommand(char* args)
|
||||
LoginDatabase.PExecute("UPDATE account SET mutetime = " UI64FMTD " WHERE id = '%u'", uint64(mutetime), account_id);
|
||||
|
||||
if (target)
|
||||
{
|
||||
if (SpellAuraHolder* pAura = target->AddAura(SPELL_PLAYER_MUTED_VISUAL, 0, nullptr))
|
||||
{
|
||||
pAura->SetAuraDuration(notspeaktime * MINUTE * IN_MILLISECONDS);
|
||||
pAura->SetAuraMaxDuration(notspeaktime * MINUTE * IN_MILLISECONDS);
|
||||
pAura->RefreshHolder();
|
||||
}
|
||||
|
||||
ChatHandler(target).PSendSysMessage(LANG_YOUR_CHAT_DISABLED, notspeaktime);
|
||||
}
|
||||
|
||||
std::string nameLink = playerLink(target_name);
|
||||
|
||||
@@ -1245,7 +1255,10 @@ bool ChatHandler::HandleUnmuteCommand(char* args)
|
||||
LoginDatabase.PExecute("UPDATE account SET mutetime = '0' WHERE id = '%u'", account_id);
|
||||
|
||||
if (target)
|
||||
{
|
||||
target->RemoveAurasDueToSpell(SPELL_PLAYER_MUTED_VISUAL);
|
||||
ChatHandler(target).PSendSysMessage(LANG_YOUR_CHAT_ENABLED);
|
||||
}
|
||||
|
||||
std::string nameLink = playerLink(target_name);
|
||||
|
||||
|
||||
@@ -86,12 +86,9 @@ bool ChatHandler::HandleGodCommand(char* args)
|
||||
SetSentErrorMessage(true);
|
||||
return false;
|
||||
}
|
||||
pPlayer->SetGodMode(value);
|
||||
pPlayer->SetGodMode(value, true);
|
||||
}
|
||||
if (pPlayer->IsGod())
|
||||
SendSysMessage("Mode GOD : [ON]");
|
||||
else
|
||||
SendSysMessage("Mode GOD : [OFF]");
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -2394,28 +2391,47 @@ bool ChatHandler::HandleLearnAllCommand(char* /*args*/)
|
||||
|
||||
bool ChatHandler::HandleLearnAllGMCommand(char* /*args*/)
|
||||
{
|
||||
static const char *gmSpellList[] =
|
||||
static uint32 gmSpellList[] =
|
||||
{
|
||||
"24347", // Become A Fish, No Breath Bar
|
||||
"35132", // Visual Boom
|
||||
"38488", // Attack 4000-8000 AOE
|
||||
"38795", // Attack 2000 AOE + Slow Down 90%
|
||||
"15712", // Attack 200
|
||||
"1852", // GM Spell Silence
|
||||
"31899", // Kill
|
||||
"31924", // Kill
|
||||
"29878", // Kill My Self
|
||||
"26644", // More Kill
|
||||
|
||||
"28550", //Invisible 24
|
||||
"23452", //Invisible + Target
|
||||
"0"
|
||||
5, // Death Touch
|
||||
265, // Area Death (TEST)
|
||||
30879, // Permanent Area Damage 50k
|
||||
7482, // dmg
|
||||
8295, // dmg2
|
||||
10073, // dmg3
|
||||
11821, // dmg4
|
||||
18389, // dmg5
|
||||
18390, // dmg6
|
||||
19901, // dmg7
|
||||
27254, // dmg8
|
||||
27255, // dmg9
|
||||
27258, // dmg10
|
||||
27261, // dmg11
|
||||
25059, // Dmg Shield
|
||||
26666, // Dmg Shield2
|
||||
#if SUPPORTED_CLIENT_BUILD > CLIENT_BUILD_1_10_2
|
||||
456, // SHOWLABEL Only OFF
|
||||
2765, // SHOWLABEL Only ON
|
||||
1509, // GM Only OFF
|
||||
18139, // GM Only ON
|
||||
6147, // INVIS Only OFF
|
||||
2763, // INVIS Only ON
|
||||
20114, // BM Only OFF
|
||||
20115, // BM Only ON
|
||||
#endif
|
||||
24341, // Revive
|
||||
29313, // CooldownAll
|
||||
1302, // Damage Immunity Test
|
||||
9454, // Freeze
|
||||
31366, // Root Anybody Forever
|
||||
1908, // Uber Heal Over Time
|
||||
8358, // Mana Spike
|
||||
23965, // Instant Heal
|
||||
};
|
||||
|
||||
uint16 gmSpellIter = 0;
|
||||
while (strcmp(gmSpellList[gmSpellIter], "0"))
|
||||
for (int i = 0; i < sizeof(gmSpellList) / sizeof(uint32); i++)
|
||||
{
|
||||
uint32 spell = atol((char*)gmSpellList[gmSpellIter++]);
|
||||
uint32 spell = gmSpellList[i];
|
||||
|
||||
SpellEntry const* spellInfo = sSpellMgr.GetSpellEntry(spell);
|
||||
if (!spellInfo || !SpellMgr::IsSpellValid(spellInfo, m_session->GetPlayer()))
|
||||
|
||||
@@ -119,16 +119,7 @@ bool ChatHandler::HandleGMCommand(char* args)
|
||||
return false;
|
||||
}
|
||||
|
||||
if (value)
|
||||
{
|
||||
m_session->GetPlayer()->SetGameMaster(true);
|
||||
m_session->SendNotification(LANG_GM_ON);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_session->GetPlayer()->SetGameMaster(false);
|
||||
m_session->SendNotification(LANG_GM_OFF);
|
||||
}
|
||||
m_session->GetPlayer()->SetGameMaster(value, true);
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -153,16 +144,7 @@ bool ChatHandler::HandleGMChatCommand(char* args)
|
||||
return false;
|
||||
}
|
||||
|
||||
if (value)
|
||||
{
|
||||
m_session->GetPlayer()->SetGMChat(true);
|
||||
m_session->SendNotification(LANG_GM_CHAT_ON);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_session->GetPlayer()->SetGMChat(false);
|
||||
m_session->SendNotification(LANG_GM_CHAT_OFF);
|
||||
}
|
||||
m_session->GetPlayer()->SetGMChat(value, true);
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -194,17 +176,10 @@ bool ChatHandler::HandleGMVisibleCommand(char* args)
|
||||
return false;
|
||||
}
|
||||
|
||||
if (value)
|
||||
{
|
||||
m_session->GetPlayer()->SetGMVisible(true);
|
||||
m_session->SendNotification(LANG_INVISIBLE_VISIBLE);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!value)
|
||||
m_session->GetPlayer()->SetGMInvisibilityLevel(visibilityLevel);
|
||||
m_session->SendNotification(LANG_INVISIBLE_INVISIBLE, visibilityLevel);
|
||||
m_session->GetPlayer()->SetGMVisible(false);
|
||||
}
|
||||
|
||||
m_session->GetPlayer()->SetGMVisible(value, true);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -237,7 +237,7 @@ bool ChatHandler::HandleFreezeCommand(char* args)
|
||||
Unit* pTarget = GetSelectedUnit();
|
||||
if (!pTarget)
|
||||
return false;
|
||||
pTarget->CastSpell(pTarget, 29826, true);
|
||||
pTarget->CastSpell(pTarget, 9454, true);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -246,7 +246,7 @@ bool ChatHandler::HandleUnfreezeCommand(char* args)
|
||||
Unit* pTarget = GetSelectedUnit();
|
||||
if (!pTarget)
|
||||
return false;
|
||||
pTarget->RemoveAurasDueToSpell(29826);
|
||||
pTarget->RemoveAurasDueToSpell(9454);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -211,14 +211,18 @@ void WorldSession::HandleMessagechatOpcode(WorldPacket & recv_data)
|
||||
|
||||
if (type != CHAT_MSG_AFK && type != CHAT_MSG_DND)
|
||||
{
|
||||
auto currTime = time(NULL);
|
||||
|
||||
if (m_muteTime > currTime) // Muted
|
||||
if (type != CHAT_MSG_WHISPER) // whisper checked later
|
||||
{
|
||||
std::string timeStr = secsToTimeString(m_muteTime - currTime);
|
||||
SendNotification(GetMangosString(LANG_WAIT_BEFORE_SPEAKING), timeStr.c_str());
|
||||
return;
|
||||
auto currTime = time(nullptr);
|
||||
|
||||
if (m_muteTime > currTime) // Muted
|
||||
{
|
||||
std::string timeStr = secsToTimeString(m_muteTime - currTime);
|
||||
SendNotification(GetMangosString(LANG_WAIT_BEFORE_SPEAKING), timeStr.c_str());
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (lang != LANG_ADDON && GetMasterPlayer())
|
||||
GetMasterPlayer()->UpdateSpeakTime(); // Anti chat flood
|
||||
}
|
||||
@@ -441,6 +445,19 @@ void WorldSession::HandleMessagechatOpcode(WorldPacket & recv_data)
|
||||
return;
|
||||
}
|
||||
|
||||
// Can only whisper GMs while muted.
|
||||
if (pSecurity == SEC_PLAYER)
|
||||
{
|
||||
auto currTime = time(nullptr);
|
||||
|
||||
if (m_muteTime > currTime) // Muted
|
||||
{
|
||||
std::string timeStr = secsToTimeString(m_muteTime - currTime);
|
||||
SendNotification(GetMangosString(LANG_WAIT_BEFORE_SPEAKING), timeStr.c_str());
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (tSecurity == SEC_PLAYER && pSecurity == SEC_PLAYER)
|
||||
{
|
||||
if (!sWorld.getConfig(CONFIG_BOOL_ALLOW_TWO_SIDE_INTERACTION_CHAT) && GetPlayer()->GetTeam() != player->GetTeam())
|
||||
|
||||
+5
-5
@@ -188,7 +188,7 @@ enum MangosStrings
|
||||
LANG_XP_RATE_MIN = 177,
|
||||
LANG_XP_RATE_MAX = 178,
|
||||
LANG_XP_RATE_SET = 179,
|
||||
// Room for more level 1 178-199 not used
|
||||
// Room for more level 1 180-199 not used
|
||||
|
||||
// level 2 chat
|
||||
LANG_NO_SELECTION = 200,
|
||||
@@ -337,12 +337,12 @@ enum MangosStrings
|
||||
LANG_CREATURE_NOT_FOLLOW_YOU_NOW = 342,
|
||||
LANG_CREATURE_NON_TAMEABLE = 343,
|
||||
LANG_YOU_ALREADY_HAVE_PET = 344,
|
||||
// 345 used in master branch
|
||||
// 346 used in master branch
|
||||
LANG_INVIS_ON = 345,
|
||||
LANG_INVIS_OFF = 346,
|
||||
LANG_COMMAND_GOTAXINODENOTFOUND = 347,
|
||||
LANG_GAMEOBJECT_HAVE_INVALID_DATA = 348,
|
||||
// 349 used in master branch
|
||||
// 350 used in master branch
|
||||
LANG_GOD_ON = 349,
|
||||
LANG_GOD_OFF = 350,
|
||||
// 351 used in master branch
|
||||
// 352 used in master branch
|
||||
// 353 used in master branch
|
||||
|
||||
@@ -2479,7 +2479,29 @@ struct SetGameMasterOffHelper
|
||||
uint32 faction;
|
||||
};
|
||||
|
||||
void Player::SetGameMaster(bool on)
|
||||
void Player::SetGMChat(bool on, bool notify)
|
||||
{
|
||||
if (on)
|
||||
{
|
||||
m_ExtraFlags |= PLAYER_EXTRA_GM_CHAT;
|
||||
if (notify)
|
||||
{
|
||||
ChatHandler(this).SendSysMessage(LANG_GM_CHAT_ON);
|
||||
GetSession()->SendNotification(LANG_GM_CHAT_ON);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
m_ExtraFlags &= ~PLAYER_EXTRA_GM_CHAT;
|
||||
if (notify)
|
||||
{
|
||||
ChatHandler(this).SendSysMessage(LANG_GM_CHAT_OFF);
|
||||
GetSession()->SendNotification(LANG_GM_CHAT_OFF);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Player::SetGameMaster(bool on, bool notify)
|
||||
{
|
||||
if (on)
|
||||
{
|
||||
@@ -2494,6 +2516,12 @@ void Player::SetGameMaster(bool on)
|
||||
|
||||
getHostileRefManager().setOnlineOfflineState(false);
|
||||
CombatStopWithPets();
|
||||
|
||||
if (notify)
|
||||
{
|
||||
ChatHandler(this).SendSysMessage(LANG_GM_ON);
|
||||
GetSession()->SendNotification(LANG_GM_ON);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -2511,6 +2539,12 @@ void Player::SetGameMaster(bool on)
|
||||
UpdateArea(m_areaUpdateId);
|
||||
|
||||
getHostileRefManager().setOnlineOfflineState(true);
|
||||
|
||||
if (notify)
|
||||
{
|
||||
ChatHandler(this).SendSysMessage(LANG_GM_OFF);
|
||||
GetSession()->SendNotification(LANG_GM_OFF);
|
||||
}
|
||||
}
|
||||
|
||||
m_camera.UpdateVisibilityForOwner();
|
||||
@@ -2527,7 +2561,7 @@ void Player::SetGameMaster(bool on)
|
||||
RefreshBitsForVisibleUnits(&m, TYPEMASK_PLAYER);
|
||||
}
|
||||
|
||||
void Player::SetGMVisible(bool on)
|
||||
void Player::SetGMVisible(bool on, bool notify)
|
||||
{
|
||||
// 'Invisibilite superieure'
|
||||
const uint32 VISUAL_AURA = 16380;
|
||||
@@ -2543,6 +2577,12 @@ void Player::SetGMVisible(bool on)
|
||||
SetVisibility(VISIBILITY_GROUP_INVISIBILITY);
|
||||
else
|
||||
SetVisibility(VISIBILITY_ON);
|
||||
|
||||
if (notify)
|
||||
{
|
||||
ChatHandler(this).SendSysMessage(LANG_INVISIBLE_VISIBLE);
|
||||
GetSession()->SendNotification(LANG_INVIS_OFF);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -2555,11 +2595,28 @@ void Player::SetGMVisible(bool on)
|
||||
SetGameMaster(true);
|
||||
|
||||
SetVisibility(VISIBILITY_OFF);
|
||||
|
||||
if (notify)
|
||||
{
|
||||
ChatHandler(this).PSendSysMessage(LANG_INVISIBLE_INVISIBLE, GetGMInvisibilityLevel());
|
||||
GetSession()->SendNotification(LANG_INVIS_ON);
|
||||
}
|
||||
}
|
||||
// Sauvegarde directement pour que le site n'affiche plus le MJ parmis les joueurs co.
|
||||
CharacterDatabase.PExecute("UPDATE characters SET extra_flags = %u WHERE guid = %u", m_ExtraFlags, GetGUIDLow());
|
||||
}
|
||||
|
||||
void Player::SetGodMode(bool on, bool notify)
|
||||
{
|
||||
SetOption(PLAYER_CHEAT_GOD, on);
|
||||
|
||||
if (notify)
|
||||
{
|
||||
ChatHandler(this).SendSysMessage(on ? LANG_GOD_ON : LANG_GOD_OFF);
|
||||
GetSession()->SendNotification(on ? LANG_GOD_ON : LANG_GOD_OFF);
|
||||
}
|
||||
}
|
||||
|
||||
bool Player::IsAllowedWhisperFrom(ObjectGuid guid) const
|
||||
{
|
||||
if (PlayerSocial const* social = GetSocial())
|
||||
@@ -15064,6 +15121,16 @@ void Player::LoadAura(AuraSaveStruct& s, uint32 timediff)
|
||||
s.remaintime -= timediff * IN_MILLISECONDS;
|
||||
}
|
||||
|
||||
// Special case for chat silenced indicator
|
||||
if (spellproto->Id == SPELL_PLAYER_MUTED_VISUAL)
|
||||
{
|
||||
auto currTime = time(nullptr);
|
||||
auto muteTime = GetSession()->m_muteTime;
|
||||
if (muteTime <= currTime)
|
||||
return;
|
||||
s.remaintime = (muteTime - currTime) * IN_MILLISECONDS;
|
||||
}
|
||||
|
||||
// prevent wrong values of remaincharges
|
||||
if (spellproto->procCharges == 0)
|
||||
s.remaincharges = 0;
|
||||
|
||||
@@ -917,15 +917,15 @@ class MANGOS_DLL_SPEC Player final: public Unit
|
||||
void SetAcceptTicket(bool on) { if(on) m_ExtraFlags |= PLAYER_EXTRA_GM_ACCEPT_TICKETS; else m_ExtraFlags &= ~PLAYER_EXTRA_GM_ACCEPT_TICKETS; }
|
||||
|
||||
bool IsGameMaster() const { return m_ExtraFlags & PLAYER_EXTRA_GM_ON; }
|
||||
void SetGameMaster(bool on);
|
||||
void SetGameMaster(bool on, bool notify = false);
|
||||
bool IsGMChat() const { return GetSession()->GetSecurity() >= SEC_MODERATOR && (m_ExtraFlags & PLAYER_EXTRA_GM_CHAT); }
|
||||
void SetGMChat(bool on) { if(on) m_ExtraFlags |= PLAYER_EXTRA_GM_CHAT; else m_ExtraFlags &= ~PLAYER_EXTRA_GM_CHAT; }
|
||||
void SetGMChat(bool on, bool notify = false);
|
||||
bool IsTaxiCheater() const { return m_ExtraFlags & PLAYER_EXTRA_TAXICHEAT; }
|
||||
void SetTaxiCheater(bool on) { if(on) m_ExtraFlags |= PLAYER_EXTRA_TAXICHEAT; else m_ExtraFlags &= ~PLAYER_EXTRA_TAXICHEAT; }
|
||||
bool IsGMVisible() const { return !(m_ExtraFlags & PLAYER_EXTRA_GM_INVISIBLE); }
|
||||
void SetGMVisible(bool on);
|
||||
void SetGMVisible(bool on, bool notify = false);
|
||||
void SetPvPDeath(bool on) { if(on) m_ExtraFlags |= PLAYER_EXTRA_PVP_DEATH; else m_ExtraFlags &= ~PLAYER_EXTRA_PVP_DEATH; }
|
||||
void SetGodMode(bool on) { SetOption(PLAYER_CHEAT_GOD, on); }
|
||||
void SetGodMode(bool on, bool notify = false);
|
||||
bool IsGod() const { return HasOption(PLAYER_CHEAT_GOD); }
|
||||
|
||||
bool HasOption(uint32 o) const { return (_playerOptions & o); }
|
||||
|
||||
@@ -639,6 +639,11 @@ void Spell::FillTargetMap()
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case TARGET_ALL_ENEMY_IN_AREA:
|
||||
if ((m_targets.m_targetMask & TARGET_FLAG_SOURCE_LOCATION) && !(m_targets.m_targetMask & TARGET_FLAG_DEST_LOCATION))
|
||||
m_targets.setDestination(m_targets.m_srcX, m_targets.m_srcY, m_targets.m_srcZ);
|
||||
SetTargetMap(SpellEffectIndex(i), m_spellInfo->EffectImplicitTargetA[i], tmpUnitMap);
|
||||
break;
|
||||
default:
|
||||
switch (m_spellInfo->EffectImplicitTargetB[i])
|
||||
{
|
||||
|
||||
@@ -4393,6 +4393,62 @@ void Spell::EffectScriptEffect(SpellEffectIndex eff_idx)
|
||||
{
|
||||
switch (m_spellInfo->Id)
|
||||
{
|
||||
#if SUPPORTED_CLIENT_BUILD > CLIENT_BUILD_1_10_2
|
||||
case 456: // SHOWLABEL Only OFF
|
||||
{
|
||||
if (Player* pPlayer = ToPlayer(m_caster))
|
||||
pPlayer->SetGMChat(false, true);
|
||||
return;
|
||||
}
|
||||
case 2765: // SHOWLABEL Only ON
|
||||
{
|
||||
if (Player* pPlayer = ToPlayer(m_caster))
|
||||
pPlayer->SetGMChat(true, true);;
|
||||
return;
|
||||
}
|
||||
case 1509: // GM Only OFF
|
||||
{
|
||||
if (Player* pPlayer = ToPlayer(m_caster))
|
||||
pPlayer->SetGameMaster(false, true);
|
||||
return;
|
||||
}
|
||||
case 18139: // GM Only ON
|
||||
{
|
||||
if (Player* pPlayer = ToPlayer(m_caster))
|
||||
pPlayer->SetGameMaster(true, true);
|
||||
return;
|
||||
}
|
||||
case 6147: // INVIS Only OFF
|
||||
{
|
||||
if (Player* pPlayer = ToPlayer(m_caster))
|
||||
pPlayer->SetGMVisible(true, true);
|
||||
return;
|
||||
}
|
||||
case 2763: // INVIS Only ON
|
||||
{
|
||||
if (Player* pPlayer = ToPlayer(m_caster))
|
||||
pPlayer->SetGMVisible(false, true);
|
||||
return;
|
||||
}
|
||||
case 20114: // BM Only OFF
|
||||
{
|
||||
if (Player* pPlayer = ToPlayer(m_caster))
|
||||
pPlayer->SetGodMode(false, true);
|
||||
return;
|
||||
}
|
||||
case 20115: // BM Only ON
|
||||
{
|
||||
if (Player* pPlayer = ToPlayer(m_caster))
|
||||
pPlayer->SetGodMode(true, true);
|
||||
return;
|
||||
}
|
||||
case 29313: // CooldownAll
|
||||
{
|
||||
if (m_caster)
|
||||
m_caster->RemoveAllSpellCooldown();
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
case 8856: // Bending Shinbone
|
||||
{
|
||||
if (!itemTarget && m_caster->GetTypeId() != TYPEID_PLAYER)
|
||||
|
||||
Reference in New Issue
Block a user