Merge branch 'master' into Playerbot

This commit is contained in:
Yunfan Li
2025-05-23 19:55:02 +08:00
11 changed files with 112 additions and 34 deletions

19
AUTHORS
View File

@@ -34,3 +34,22 @@ The third-party libraries have their own way of addressing authorship, and the a
a third-party library reflects who did the importing instead of who wrote the code within the commit.
The Authors of third-party libraries are not explicitly mentioned, and usually is possible to obtain from the files belonging to the third-party libraries.
## Cross-project collaboration
At AzerothCore, we actively promote collaboration with other MaNGOS-based open-source projects that are actively maintained. This also includes cherry-picking commits from relevant projects such as:
* TrinityCore: https://github.com/trinitycore
* CMaNGOS: https://github.com/cmangos/
* vMaNGOS: https://github.com/vmangos
* and others
It is strictly required for any contributor importing code to credit the original author by:
- linking the original PR (or commit)
- adding a [Co-authored-by](https://docs.github.com/en/pull-requests/committing-changes-to-your-project/creating-and-editing-commits/creating-a-commit-with-multiple-authors) line in the PR description
This will automatically include the original author in our list of [Contributors](https://github.com/azerothcore/azerothcore-wotlk/graphs/contributors).
If you notice a violation of the above, please report it to the Staff immediately.
We encourage other projects to adopt similar practices to promote healthy cross-project collaboration and proper attribution.

View File

@@ -0,0 +1,3 @@
-- DB update 2025_05_15_00 -> 2025_05_18_00
-- Sets the SAI Link to 0 from 1 for Ziggurat Defender (has only 1 cast, nothing to link to)
UPDATE `smart_scripts` SET `link` = 0 WHERE (`source_type` = 0 AND `entryorguid` = 26202 AND `id` = 0);

View File

@@ -0,0 +1,17 @@
-- DB update 2025_05_18_00 -> 2025_05_19_00
-- Deletes `Dalaran Wizard's Robe` (5110) from References: `World Drop - White World Drop - NPC Levels` 14-15 (1011415), 15-15 (1011515), 15-16 (1011516), 16-16 (1011616)
DELETE FROM `reference_loot_template` WHERE `Item` = 5110;
DELETE FROM `creature_loot_template` WHERE `Item` = 5110;
INSERT INTO `creature_loot_template` (`Entry`, `Item`, `Reference`, `Chance`, `QuestRequired`, `LootMode`, `GroupId`, `MinCount`, `MaxCount`, `Comment`) VALUES
(1867, 5110, 0, 3, 0, 1, 0, 1, 1, 'Dalaran Apprentice - Dalaran Wizard\'s Robe'),
(1888, 5110, 0, 4, 0, 1, 0, 1, 1, 'Dalaran Watcher - Dalaran Wizard\'s Robe'),
(1889, 5110, 0, 4, 0, 1, 0, 1, 1, 'Dalaran Wizard - Dalaran Wizard\'s Robe'),
(1912, 5110, 0, 3, 0, 1, 0, 1, 1, 'Dalaran Protector - Dalaran Wizard\'s Robe'),
(1913, 5110, 0, 4, 0, 1, 0, 1, 1, 'Dalaran Warder - Dalaran Wizard\'s Robe'),
(1914, 5110, 0, 3, 0, 1, 0, 1, 1, 'Dalaran Mage - Dalaran Wizard\'s Robe'),
(1915, 5110, 0, 4, 0, 1, 0, 1, 1, 'Dalaran Conjuror - Dalaran Wizard\'s Robe'),
(1920, 5110, 0, 1.6, 0, 1, 0, 1, 1, 'Dalaran Spellscribe - Dalaran Wizard\'s Robe'),
(2120, 5110, 0, 1.8, 0, 1, 0, 1, 1, 'Archmage Ataeric - Dalaran Wizard\'s Robe'),
(3577, 5110, 0, 4, 0, 1, 0, 1, 1, 'Dalaran Brewmaster - Dalaran Wizard\'s Robe'),
(3578, 5110, 0, 3, 0, 1, 0, 1, 1, 'Dalaran Miner - Dalaran Wizard\'s Robe');

View File

@@ -0,0 +1,2 @@
-- DB update 2025_05_19_00 -> 2025_05_20_00
UPDATE `creature_loot_template` SET `Chance` = 6 WHERE `Item` = 34334 AND `Entry` = 25315;

View File

@@ -0,0 +1,4 @@
-- DB update 2025_05_20_00 -> 2025_05_21_00
--
DELETE FROM `spell_custom_attr` WHERE `spell_id`=45770;
INSERT INTO `spell_custom_attr` (`spell_id`, `attributes`) VALUES (45770, 4194304);

View File

@@ -0,0 +1,2 @@
-- DB update 2025_05_21_00 -> 2025_05_21_01
UPDATE `smart_scripts` SET `action_param1` = 9053 WHERE `source_type` = 0 AND `entryorguid` IN (21382, 21637) AND `id` IN (1, 2) AND `action_type` = 11;

View File

@@ -0,0 +1,51 @@
-- DB update 2025_05_21_01 -> 2025_05_22_00
-- Set Attack Delay on spawn and update comments.
UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 25708;
DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 25708);
INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
(25708, 0, 0, 1, 54, 0, 100, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - On Just Summoned - Set Reactstate Passive'),
(25708, 0, 1, 0, 61, 0, 100, 512, 0, 0, 0, 0, 0, 0, 134, 45785, 2, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - On Just Summoned - Invoker Cast \'Sinister Reflection Clone\''),
(25708, 0, 2, 3, 60, 0, 100, 1, 3000, 3000, 0, 0, 0, 0, 8, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - On Update - Set Reactstate Aggressive (No Repeat)'),
(25708, 0, 3, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 21, 50, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - On Update - Start Attacking (No Repeat)'),
(25708, 0, 4, 0, 6, 0, 100, 512, 0, 0, 0, 0, 0, 0, 41, 2000, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - On Just Died - Despawn In 2000 ms'),
(25708, 0, 5, 0, 38, 0, 100, 512, 1, 1, 0, 0, 0, 0, 22, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - On Data Set 1 1 - Set Event Phase 1'),
(25708, 0, 6, 0, 38, 0, 100, 512, 1, 2, 0, 0, 0, 0, 22, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - On Data Set 1 2 - Set Event Phase 2'),
(25708, 0, 7, 0, 38, 0, 100, 512, 1, 3, 0, 0, 0, 0, 22, 3, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - On Data Set 1 3 - Set Event Phase 3'),
(25708, 0, 8, 0, 38, 0, 100, 512, 1, 4, 0, 0, 0, 0, 22, 4, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - On Data Set 1 4 - Set Event Phase 4'),
(25708, 0, 9, 0, 38, 0, 100, 512, 1, 5, 0, 0, 0, 0, 22, 5, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - On Data Set 1 5 - Set Event Phase 5'),
(25708, 0, 10, 0, 38, 0, 100, 512, 1, 6, 0, 0, 0, 0, 22, 6, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - On Data Set 1 6 - Set Event Phase 6'),
(25708, 0, 11, 0, 38, 0, 100, 512, 1, 7, 0, 0, 0, 0, 22, 7, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - On Data Set 1 7 - Set Event Phase 7'),
(25708, 0, 12, 0, 38, 0, 100, 512, 1, 8, 0, 0, 0, 0, 22, 8, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - On Data Set 1 8 - Set Event Phase 8'),
(25708, 0, 13, 0, 38, 0, 100, 512, 1, 9, 0, 0, 0, 0, 22, 9, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - On Data Set 1 9 - Set Event Phase 9'),
(25708, 0, 14, 0, 38, 0, 100, 512, 1, 11, 0, 0, 0, 0, 22, 11, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - On Data Set 1 11 - Set Event Phase 11'),
(25708, 0, 15, 0, 0, 1, 100, 1, 0, 0, 0, 0, 0, 0, 11, 42459, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - In Combat - Cast \'Dual Wield\' (Phase 1) (No Repeat)'),
(25708, 0, 16, 0, 0, 1, 100, 0, 1000, 5000, 9000, 13000, 0, 0, 11, 17207, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - In Combat - Cast \'Whirlwind\' (Phase 1)'),
(25708, 0, 17, 0, 0, 2, 100, 0, 1000, 5000, 5000, 8000, 0, 0, 11, 38921, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - In Combat - Cast \'Holy Shock\' (Phase 2)'),
(25708, 0, 18, 0, 0, 2, 100, 0, 3000, 10000, 15000, 25000, 0, 0, 11, 37369, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - In Combat - Cast \'Hammer of Justice\' (Phase 2)'),
(25708, 0, 19, 0, 9, 4, 100, 0, 0, 0, 2000, 2000, 5, 30, 11, 16496, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - Within 5-30 Range - Cast \'Shoot\' (Phase 3)'),
(25708, 0, 20, 0, 9, 4, 100, 0, 0, 0, 10000, 15000, 5, 30, 11, 48098, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - Within 5-30 Range - Cast \'Multi-Shot\' (Phase 3)'),
(25708, 0, 21, 0, 9, 4, 100, 0, 0, 0, 15000, 25000, 0, 5, 11, 40652, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - Within 0-5 Range - Cast \'Wing Clip\' (Phase 3)'),
(25708, 0, 22, 0, 9, 4, 100, 512, 0, 0, 0, 0, 0, 20, 21, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - Within 0-20 Range - Disable Combat Movement (Phase 3)'),
(25708, 0, 23, 0, 9, 4, 100, 512, 0, 0, 0, 0, 25, 100, 21, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - Within 25-100 Range - Enable Combat Movement (Phase 3)'),
(25708, 0, 24, 0, 0, 8, 100, 1, 0, 0, 0, 0, 0, 0, 11, 42459, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - In Combat - Cast \'Dual Wield\' (Phase 4) (No Repeat)'),
(25708, 0, 25, 0, 0, 8, 100, 0, 1000, 3000, 4000, 6000, 0, 0, 11, 45897, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - In Combat - Cast \'Hemorrhage\' (Phase 4)'),
(25708, 0, 26, 0, 0, 16, 100, 0, 1000, 4000, 4000, 5000, 0, 0, 11, 47077, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - In Combat - Cast \'Holy Smite\' (Phase 5)'),
(25708, 0, 27, 0, 14, 16, 100, 0, 10000, 40, 10000, 15000, 0, 0, 11, 47079, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - Friendly At 10000 Health - Cast \'Renew\' (Phase 5)'),
(25708, 0, 28, 0, 9, 16, 100, 512, 0, 0, 0, 0, 0, 20, 21, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - Within 0-20 Range - Disable Combat Movement (Phase 5)'),
(25708, 0, 29, 0, 9, 16, 100, 512, 0, 0, 0, 0, 25, 100, 21, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - Within 25-100 Range - Enable Combat Movement (Phase 5)'),
(25708, 0, 30, 0, 0, 32, 100, 1, 0, 0, 0, 0, 0, 0, 11, 42459, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - In Combat - Cast \'Dual Wield\' (Phase 6) (No Repeat)'),
(25708, 0, 31, 0, 0, 32, 100, 0, 1000, 5000, 4000, 6000, 0, 0, 11, 58843, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - In Combat - Cast \'Plague Strike\' (Phase 6)'),
(25708, 0, 32, 0, 0, 64, 100, 1, 0, 0, 0, 0, 0, 0, 11, 42459, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - In Combat - Cast \'Dual Wield\' (Phase 7) (No Repeat)'),
(25708, 0, 33, 0, 0, 64, 100, 0, 1000, 5000, 6000, 10000, 0, 0, 11, 47071, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - In Combat - Cast \'Earth Shock\' (Phase 7)'),
(25708, 0, 34, 0, 0, 128, 100, 0, 1000, 2000, 2000, 3000, 0, 0, 11, 47074, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - In Combat - Cast \'Fireball\' (Phase 8)'),
(25708, 0, 35, 0, 9, 128, 100, 512, 0, 0, 0, 0, 0, 20, 21, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - Within 0-20 Range - Disable Combat Movement (Phase 8)'),
(25708, 0, 36, 0, 9, 128, 100, 512, 0, 0, 0, 0, 25, 100, 21, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - Within 25-100 Range - Enable Combat Movement (Phase 8)'),
(25708, 0, 37, 0, 0, 256, 100, 0, 1000, 1500, 1500, 2500, 0, 0, 11, 47076, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - In Combat - Cast \'Shadow Bolt\' (Phase 9)'),
(25708, 0, 38, 0, 0, 256, 100, 0, 4000, 5000, 10000, 12000, 0, 0, 11, 46190, 0, 0, 0, 0, 0, 5, 30, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - In Combat - Cast \'Curse of Agony\' (Phase 9)'),
(25708, 0, 39, 0, 9, 256, 100, 512, 0, 0, 0, 0, 0, 20, 21, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - Within 0-20 Range - Disable Combat Movement (Phase 9)'),
(25708, 0, 40, 0, 9, 256, 100, 512, 0, 0, 0, 0, 25, 100, 21, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - Within 25-100 Range - Enable Combat Movement (Phase 9)'),
(25708, 0, 41, 0, 0, 1024, 100, 0, 1000, 2000, 2000, 3000, 0, 0, 11, 47072, 0, 0, 0, 0, 0, 5, 30, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - In Combat - Cast \'Moonfire\' (Phase 11)'),
(25708, 0, 42, 0, 9, 1024, 100, 512, 0, 0, 0, 0, 0, 20, 21, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - Within 0-20 Range - Disable Combat Movement (Phase 11)'),
(25708, 0, 43, 0, 9, 1024, 100, 512, 0, 0, 0, 0, 25, 100, 21, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - Within 25-100 Range - Enable Combat Movement (Phase 11)');

View File

@@ -7136,37 +7136,26 @@ void Player::ApplyItemEquipSpell(Item* item, bool apply, bool form_change)
if (!proto)
return;
for (uint8 i = 0; i < MAX_ITEM_PROTO_SPELLS; ++i)
for (auto const& spellData : proto->Spells)
{
_Spell const& spellData = proto->Spells[i];
// no spell
// no spell
if (!spellData.SpellId)
continue;
// Spells that should stay on the caster after removing the item.
constexpr std::array<int32, 2> spellExceptions =
{
11826, //Electromagnetic Gigaflux Reactivator
17490 //Book of the Dead - Summon Skeleton
};
const auto found = std::find(std::begin(spellExceptions), std::end(spellExceptions), spellData.SpellId);
// wrong triggering type
if (apply)
{
// Only apply "On Equip" spells
if (spellData.SpellTrigger != ITEM_SPELLTRIGGER_ON_EQUIP)
{
continue;
}
}
else
{
// If the spell is an exception do not remove it.
if (found != std::end(spellExceptions))
{
// Do not remove "Use" spells in these special cases:
// 1. During form changes (e.g., druid shapeshifting)
// 2. When the spell comes from an item with negative charges, which means its effect should persist after the item is consumed or removed.
if (spellData.SpellTrigger == ITEM_SPELLTRIGGER_ON_USE && (form_change || spellData.SpellCharges < 0))
continue;
}
}
// check if it is valid spell
@@ -7215,18 +7204,6 @@ void Player::ApplyEquipSpell(SpellInfo const* spellInfo, Item* item, bool apply,
RemoveAurasDueToItemSpell(spellInfo->Id, item->GetGUID()); // un-apply all spells, not only at-equipped
else
RemoveAurasDueToSpell(spellInfo->Id); // un-apply spell (item set case)
// Xinef: Remove Proc Spells and Summons
for (uint8 i = EFFECT_0; i < MAX_SPELL_EFFECTS; ++i)
{
// Xinef: Remove procs
if (spellInfo->Effects[i].TriggerSpell)
RemoveAurasDueToSpell(spellInfo->Effects[i].TriggerSpell);
// Xinef: remove minions summoned by item
if (spellInfo->Effects[i].Effect == SPELL_EFFECT_SUMMON)
RemoveAllMinionsByEntry(spellInfo->Effects[i].MiscValue);
}
}
}

View File

@@ -4897,8 +4897,10 @@ void SpellMgr::LoadSpellInfoCorrections()
spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_70_YARDS);
});
// Encapsulate
ApplySpellFix({ 45662 }, [](SpellInfo* spellInfo)
ApplySpellFix({
45662, // Encapsulate
45642 // Fire Bloom
}, [](SpellInfo* spellInfo)
{
spellInfo->AttributesEx7 |= SPELL_ATTR7_TREAT_AS_NPC_AOE;
});

View File

@@ -141,6 +141,7 @@ struct npc_kiljaeden_controller : public NullCreatureAI
void Reset() override
{
scheduler.CancelAll();
instance->SetBossState(DATA_KILJAEDEN, NOT_STARTED);
summons.DespawnAll();
ResetOrbs();

View File

@@ -122,9 +122,9 @@ public:
if (Player* player = ObjectAccessor::GetPlayer(*me, PlayerGUID))
{
if (GetClosestCreatureWithEntry(me, NPC_SOUTH_GATE, 200.0f))
player->KilledMonsterCredit(NPC_SOUTH_GATE_CREDIT);
player->RewardPlayerAndGroupAtEvent(NPC_SOUTH_GATE_CREDIT, player);
else if (GetClosestCreatureWithEntry(me, NPC_NORTH_GATE, 200.0f))
player->KilledMonsterCredit(NPC_NORTH_GATE_CREDIT);
player->RewardPlayerAndGroupAtEvent(NPC_NORTH_GATE_CREDIT, player);
// complete quest part
if (Creature* bunny = GetClosestCreatureWithEntry(me, NPC_EXPLOSION_BUNNY, 200.0f))
bunny->CastSpell(nullptr, SPELL_EXPLOSION, TRIGGERED_NONE);