Merge branch 'master' into Playerbot

This commit is contained in:
Yunfan Li
2024-01-08 23:30:50 +08:00
11 changed files with 2506 additions and 42 deletions

View File

@@ -0,0 +1,7 @@
-- DB update 2024_01_07_00 -> 2024_01_07_01
--
DELETE FROM `spell_script_names` WHERE `spell_id` = 18461 AND `ScriptName` = 'spell_rog_vanish_purge';
DELETE FROM `spell_script_names` WHERE `spell_id` = -1856 AND `ScriptName` = 'spell_rog_vanish';
INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
(18461, 'spell_rog_vanish_purge'),
(-1856, 'spell_rog_vanish');

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,9 @@
-- DB update 2024_01_07_02 -> 2024_01_07_03
--
DELETE FROM `command` WHERE `name` = 'gobject respawn';
INSERT INTO `command` (`name`, `security`, `help`) VALUES
('gobject respawn', 1, 'Syntax: .gobject respawn #guid./nRespawns the target gameobject.');
DELETE FROM `acore_string` WHERE `entry` = 5085;
INSERT INTO `acore_string` (`entry`, `content_default`) VALUES
(5085, 'Object %s (entry :%u guid: %u) respawned!');

View File

@@ -0,0 +1,3 @@
-- DB update 2024_01_07_03 -> 2024_01_08_00
--
UPDATE `creature_template` SET `flags_extra` = `flags_extra`|1073741824 WHERE `entry` = 21958;

View File

@@ -0,0 +1,33 @@
-- DB update 2024_01_08_00 -> 2024_01_08_01
-- Fix Midsummer Bonfire gossip menu option conditions
DELETE FROM `conditions` WHERE (`SourceGroup` IN (9381, 9406, 9372, 9358, 9356, 9375, 9366, 9370, 9377, 9382, 9380, 9376, 9363, 9361, 9367, 9359, 9374, 9360, 9371, 9383, 9369, 9373, 9368, 9365, 9378, 9357, 9379, 9364, 9362)) AND (`SourceTypeOrReferenceId` = 15) AND (`ConditionTypeOrReference` = 8);
INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
(15, 9381, 0, 0, 0, 8, 0, 11801, 0, 0, 0, 0, 0, '', 'gossip menu option requires rewarded quest \'Desecrate this Fire!\''),
(15, 9406, 0, 0, 0, 8, 0, 11581, 0, 0, 0, 0, 0, '', 'gossip menu option requires rewarded quest \'Desecrate this Fire!\''),
(15, 9372, 0, 0, 0, 8, 0, 11781, 0, 0, 0, 0, 0, '', 'gossip menu option requires rewarded quest \'Desecrate this Fire!\''),
(15, 9358, 0, 0, 0, 8, 0, 11768, 0, 0, 0, 0, 0, '', 'gossip menu option requires rewarded quest \'Desecrate this Fire!\''),
(15, 9356, 0, 0, 0, 8, 0, 11766, 0, 0, 0, 0, 0, '', 'gossip menu option requires rewarded quest \'Desecrate this Fire!\''),
(15, 9375, 0, 0, 0, 8, 0, 11784, 0, 0, 0, 0, 0, '', 'gossip menu option requires rewarded quest \'Desecrate this Fire!\''),
(15, 9366, 0, 0, 0, 8, 0, 11776, 0, 0, 0, 0, 0, '', 'gossip menu option requires rewarded quest \'Desecrate this Fire!\''),
(15, 9370, 0, 0, 0, 8, 0, 11580, 0, 0, 0, 0, 0, '', 'gossip menu option requires rewarded quest \'Desecrate this Fire!\''),
(15, 9377, 0, 0, 0, 8, 0, 11786, 0, 0, 0, 0, 0, '', 'gossip menu option requires rewarded quest \'Desecrate this Fire!\''),
(15, 9382, 0, 0, 0, 8, 0, 11802, 0, 0, 0, 0, 0, '', 'gossip menu option requires rewarded quest \'Desecrate this Fire!\''),
(15, 9380, 0, 0, 0, 8, 0, 11800, 0, 0, 0, 0, 0, '', 'gossip menu option requires rewarded quest \'Desecrate this Fire!\''),
(15, 9376, 0, 0, 0, 8, 0, 11785, 0, 0, 0, 0, 0, '', 'gossip menu option requires rewarded quest \'Desecrate this Fire!\''),
(15, 9363, 0, 0, 0, 8, 0, 11773, 0, 0, 0, 0, 0, '', 'gossip menu option requires rewarded quest \'Desecrate this Fire!\''),
(15, 9361, 0, 0, 0, 8, 0, 11771, 0, 0, 0, 0, 0, '', 'gossip menu option requires rewarded quest \'Desecrate this Fire!\''),
(15, 9367, 0, 0, 0, 8, 0, 11777, 0, 0, 0, 0, 0, '', 'gossip menu option requires rewarded quest \'Desecrate this Fire!\''),
(15, 9359, 0, 0, 0, 8, 0, 11769, 0, 0, 0, 0, 0, '', 'gossip menu option requires rewarded quest \'Desecrate this Fire!\''),
(15, 9374, 0, 0, 0, 8, 0, 11783, 0, 0, 0, 0, 0, '', 'gossip menu option requires rewarded quest \'Desecrate this Fire!\''),
(15, 9360, 0, 0, 0, 8, 0, 11770, 0, 0, 0, 0, 0, '', 'gossip menu option requires rewarded quest \'Desecrate this Fire!\''),
(15, 9371, 0, 0, 0, 8, 0, 11780, 0, 0, 0, 0, 0, '', 'gossip menu option requires rewarded quest \'Desecrate this Fire!\''),
(15, 9383, 0, 0, 0, 8, 0, 11803, 0, 0, 0, 0, 0, '', 'gossip menu option requires rewarded quest \'Desecrate this Fire!\''),
(15, 9369, 0, 0, 0, 8, 0, 11779, 0, 0, 0, 0, 0, '', 'gossip menu option requires rewarded quest \'Desecrate this Fire!\''),
(15, 9373, 0, 0, 0, 8, 0, 11782, 0, 0, 0, 0, 0, '', 'gossip menu option requires rewarded quest \'Desecrate this Fire!\''),
(15, 9368, 0, 0, 0, 8, 0, 11778, 0, 0, 0, 0, 0, '', 'gossip menu option requires rewarded quest \'Desecrate this Fire!\''),
(15, 9365, 0, 0, 0, 8, 0, 11775, 0, 0, 0, 0, 0, '', 'gossip menu option requires rewarded quest \'Desecrate this Fire!\''),
(15, 9378, 0, 0, 0, 8, 0, 11787, 0, 0, 0, 0, 0, '', 'gossip menu option requires rewarded quest \'Desecrate this Fire!\''),
(15, 9357, 0, 0, 0, 8, 0, 11767, 0, 0, 0, 0, 0, '', 'gossip menu option requires rewarded quest \'Desecrate this Fire!\''),
(15, 9379, 0, 0, 0, 8, 0, 11799, 0, 0, 0, 0, 0, '', 'gossip menu option requires rewarded quest \'Desecrate this Fire!\''),
(15, 9364, 0, 0, 0, 8, 0, 11774, 0, 0, 0, 0, 0, '', 'gossip menu option requires rewarded quest \'Desecrate this Fire!\''),
(15, 9362, 0, 0, 0, 8, 0, 11772, 0, 0, 0, 0, 0, '', 'gossip menu option requires rewarded quest \'Desecrate this Fire!\'');

View File

@@ -9366,12 +9366,10 @@ void Player::Whisper(std::string_view text, Language language, Player* target, b
}
}
void Player::Whisper(uint32 textId, Player* target, bool /*isBossWhisper = false*/)
void Player::Whisper(uint32 textId, Player* target, bool isBossWhisper)
{
if (!target)
{
return;
}
BroadcastText const* bct = sObjectMgr->GetBroadcastText(textId);
if (!bct)
@@ -9382,7 +9380,10 @@ void Player::Whisper(uint32 textId, Player* target, bool /*isBossWhisper = false
LocaleConstant locale = target->GetSession()->GetSessionDbLocaleIndex();
WorldPacket data;
ChatHandler::BuildChatPacket(data, CHAT_MSG_WHISPER, LANG_UNIVERSAL, this, target, bct->GetText(locale, getGender()), 0, "", locale);
if (isBossWhisper)
ChatHandler::BuildChatPacket(data, CHAT_MSG_RAID_BOSS_WHISPER, LANG_UNIVERSAL, this, target, bct->GetText(locale, getGender()), 0, "", locale);
else
ChatHandler::BuildChatPacket(data, CHAT_MSG_WHISPER, LANG_UNIVERSAL, this, target, bct->GetText(locale, getGender()), 0, "", locale);
target->SendDirectMessage(&data);
}

View File

@@ -1159,7 +1159,9 @@ enum AcoreStrings
LANG_CMD_CAST_ERROR_CODE = 5084,
// Room for more strings 5084-9999
LANG_CMD_GO_RESPAWN = 5085,
// Room for more strings 5086-9999
// Level requirement notifications
LANG_SAY_REQ = 6604,

View File

@@ -809,23 +809,6 @@ void Spell::EffectTriggerSpell(SpellEffIndex effIndex)
break;
}
// Vanish (not exist)
case 18461:
{
unitTarget->RemoveMovementImpairingAuras(true);
unitTarget->RemoveAurasByType(SPELL_AURA_MOD_STALKED);
// See if we already are stealthed. If so, we're done.
if (unitTarget->HasAura(1784))
return;
// Reset cooldown on stealth if needed
if (unitTarget->GetTypeId() == TYPEID_PLAYER && unitTarget->ToPlayer()->HasSpellCooldown(1784))
unitTarget->ToPlayer()->RemoveSpellCooldown(1784);
unitTarget->CastSpell(unitTarget, 1784, true);
return;
}
// Demonic Empowerment -- succubus
case 54437:
{
@@ -4079,18 +4062,6 @@ void Spell::EffectSanctuary(SpellEffIndex /*effIndex*/)
// Xinef: Set last sanctuary time
unitTarget->m_lastSanctuaryTime = GameTime::GetGameTimeMS().count();
// Vanish allows to remove all threat and cast regular stealth so other spells can be used
if (m_caster->GetTypeId() == TYPEID_PLAYER
&& m_spellInfo->SpellFamilyName == SPELLFAMILY_ROGUE
&& (m_spellInfo->SpellFamilyFlags[0] & SPELLFAMILYFLAG_ROGUE_VANISH))
{
m_caster->ToPlayer()->RemoveAurasByType(SPELL_AURA_MOD_ROOT);
//Clean Escape
if (m_caster->HasAura(23582))
m_caster->CastSpell(m_caster, 23583, true);
}
}
void Spell::EffectAddComboPoints(SpellEffIndex /*effIndex*/)

View File

@@ -15,13 +15,6 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/* ScriptData
Name: gobject_commandscript
%Complete: 100
Comment: All gobject related commands
Category: commandscripts
EndScriptData */
#include "Chat.h"
#include "CommandScript.h"
#include "GameEventMgr.h"
@@ -59,7 +52,8 @@ public:
{ "add temp", HandleGameObjectAddTempCommand, SEC_GAMEMASTER, Console::No },
{ "add", HandleGameObjectAddCommand, SEC_ADMINISTRATOR, Console::No },
{ "set phase", HandleGameObjectSetPhaseCommand, SEC_ADMINISTRATOR, Console::No },
{ "set state", HandleGameObjectSetStateCommand, SEC_ADMINISTRATOR, Console::No }
{ "set state", HandleGameObjectSetStateCommand, SEC_ADMINISTRATOR, Console::No },
{ "respawn", HandleGameObjectRespawn, SEC_GAMEMASTER, Console::No }
};
static ChatCommandTable commandTable =
{
@@ -581,6 +575,20 @@ public:
handler->PSendSysMessage("Set gobject type %d state %u", objectType, *objectState);
return true;
}
static bool HandleGameObjectRespawn(ChatHandler* handler, GameObjectSpawnId guidLow)
{
GameObject* object = handler->GetObjectFromPlayerMapByDbGuid(guidLow);
if (!object)
{
handler->SendErrorMessage(LANG_COMMAND_OBJNOTFOUND, uint32(guidLow));
return false;
}
object->Respawn();
handler->PSendSysMessage(LANG_CMD_GO_RESPAWN, object->GetNameForLocaleIdx(handler->GetSessionDbcLocale()), object->GetEntry(), object->GetSpawnId());
return true;
}
};
void AddSC_gobject_commandscript()

View File

@@ -82,6 +82,8 @@ struct boss_the_lurker_below : public BossAI
if (GameObject* pool = instance->GetGameObject(DATA_STRANGE_POOL))
{
pool->Respawn();
pool->SetRespawnTime(10);
pool->SaveRespawnTime(10);
}
me->DespawnOrUnsummon(2000);
}

View File

@@ -693,6 +693,65 @@ class spell_rog_pickpocket : public SpellScript
}
};
enum vanish
{
SPELL_PARALYZE = 38132,
SPELL_CLEAN_ESCAPE_AURA = 23582,
SPELL_CLEAN_ESCAPE_HEAL = 23583
};
// 18461 - Vanish Purge (Server Side)
class spell_rog_vanish_purge : public SpellScript
{
PrepareSpellScript(spell_rog_vanish_purge);
bool Validate(SpellInfo const* /*spellInfo*/) override
{
return ValidateSpellInfo({ SPELL_PARALYZE });
}
void HandleRootRemove(SpellEffIndex /*effIndex*/)
{
if (GetCaster() && !GetCaster()->HasAura(SPELL_PARALYZE)) // Root from Tainted Core SSC, should not be removed by vanish.
GetCaster()->RemoveAurasWithMechanic(1 << MECHANIC_ROOT);
}
void HandleSnareRemove(SpellEffIndex /*effIndex*/)
{
if (GetCaster())
GetCaster()->RemoveAurasWithMechanic(1 << MECHANIC_SNARE);
}
void Register() override
{
// Blizzard handles EFFECT_0 as the unroot and EFFECT_1 as unsnare. Hence why they are not done in the same place.
OnEffectHitTarget += SpellEffectFn(spell_rog_vanish_purge::HandleRootRemove, EFFECT_0, SPELL_EFFECT_APPLY_AURA);
OnEffectHitTarget += SpellEffectFn(spell_rog_vanish_purge::HandleSnareRemove, EFFECT_1, SPELL_EFFECT_APPLY_AURA);
}
};
// -1856 - Vanish
class spell_rog_vanish : public SpellScript
{
PrepareSpellScript(spell_rog_vanish);
bool Validate(SpellInfo const* /*spellInfo*/) override
{
return ValidateSpellInfo({ SPELL_CLEAN_ESCAPE_AURA, SPELL_CLEAN_ESCAPE_HEAL });
}
void HandleEffect(SpellEffIndex /*effIndex*/)
{
if (GetCaster() && GetCaster()->HasAura(SPELL_CLEAN_ESCAPE_AURA))
GetCaster()->CastSpell(GetCaster(), SPELL_CLEAN_ESCAPE_HEAL, true);
}
void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_rog_vanish::HandleEffect, EFFECT_2, SPELL_EFFECT_SANCTUARY);
}
};
void AddSC_rogue_spell_scripts()
{
RegisterSpellScript(spell_rog_savage_combat);
@@ -709,5 +768,7 @@ void AddSC_rogue_spell_scripts()
RegisterSpellScript(spell_rog_tricks_of_the_trade);
RegisterSpellScript(spell_rog_tricks_of_the_trade_proc);
RegisterSpellScript(spell_rog_pickpocket);
RegisterSpellScript(spell_rog_vanish_purge);
RegisterSpellScript(spell_rog_vanish);
}