mirror of
https://github.com/azerothcore/azerothcore-wotlk.git
synced 2025-11-10 21:04:26 +08:00
Compare commits
9 Commits
7655d64c15
...
7f846c629f
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7f846c629f | ||
|
|
fca2e12056 | ||
|
|
c9aedce67f | ||
|
|
e1d28ae712 | ||
|
|
983557345e | ||
|
|
743a764c3c | ||
|
|
bef7204bb6 | ||
|
|
7a3e4066a3 | ||
|
|
75d64cc8f6 |
5
data/sql/updates/db_world/2025_11_08_01.sql
Normal file
5
data/sql/updates/db_world/2025_11_08_01.sql
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
-- DB update 2025_11_08_00 -> 2025_11_08_01
|
||||||
|
--
|
||||||
|
DELETE FROM `conditions` WHERE (`SourceTypeOrReferenceId` = 17) AND (`SourceGroup` = 0) AND (`SourceEntry` = 40969) AND (`SourceId` = 0) AND (`ElseGroup` = 0) AND (`ConditionTypeOrReference` = 31) AND (`ConditionTarget` = 1) AND (`ConditionValue1` = 3) AND (`ConditionValue2` = 23689) AND (`ConditionValue3` = 0);
|
||||||
|
INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
|
||||||
|
(17, 0, 40969, 0, 0, 31, 1, 3, 23689, 0, 0, 0, 0, '', 'Malister Frost Wand require Proto-Drake');
|
||||||
172
data/sql/updates/db_world/2025_11_08_02.sql
Normal file
172
data/sql/updates/db_world/2025_11_08_02.sql
Normal file
@ -0,0 +1,172 @@
|
|||||||
|
-- DB update 2025_11_08_01 -> 2025_11_08_02
|
||||||
|
SET @BossXPMod = 7.5,
|
||||||
|
@FinalBossXPMod = 10;
|
||||||
|
|
||||||
|
UPDATE `creature_template` SET `ExperienceModifier` = @BossXPMod WHERE `entry` IN (
|
||||||
|
-- Utgarde Keep
|
||||||
|
23953, -- Prince Keleseth
|
||||||
|
30748,
|
||||||
|
24200, -- Skarvald the Constructor
|
||||||
|
31679,
|
||||||
|
24201, -- Dalronn the Controller
|
||||||
|
31656,
|
||||||
|
-- Azjol-Nerub
|
||||||
|
28684, -- Krik'thir the Gatewatcher
|
||||||
|
31612,
|
||||||
|
28921, -- Hadronox
|
||||||
|
31611,
|
||||||
|
-- Ahn'kahet: The Old Kingdom
|
||||||
|
29309, -- Elder Nadox
|
||||||
|
31456,
|
||||||
|
29308, -- Prince Taldaram
|
||||||
|
31469,
|
||||||
|
29310, -- Jedoga Shadowseeker
|
||||||
|
31465,
|
||||||
|
30258, -- Amanitar
|
||||||
|
31463,
|
||||||
|
-- The Nexus
|
||||||
|
26731, -- Grand Magus Telestra
|
||||||
|
30510,
|
||||||
|
26763, -- Anomalus
|
||||||
|
30529,
|
||||||
|
26794, -- Ormorok the Tree-Shaper
|
||||||
|
30532,
|
||||||
|
26796, -- Commander Stoutbeard
|
||||||
|
30398,
|
||||||
|
26798, -- Commander Kolurg
|
||||||
|
30397,
|
||||||
|
-- Drak'Tharon Keep
|
||||||
|
26630, -- Trollgore
|
||||||
|
31362,
|
||||||
|
26631, -- Novos the Summoner
|
||||||
|
31350,
|
||||||
|
-- 27483, -- King Dred, observed to not give as much experience as this
|
||||||
|
-- 31349,
|
||||||
|
-- The Violet Hold
|
||||||
|
29315, -- Erekem
|
||||||
|
31507,
|
||||||
|
29316, -- Moragg
|
||||||
|
31510,
|
||||||
|
29313, -- Ichoron
|
||||||
|
31508,
|
||||||
|
29266, -- Xevozz
|
||||||
|
31511,
|
||||||
|
29312, -- Lavanthor
|
||||||
|
31509,
|
||||||
|
29314, -- Zuramat the Obliterator
|
||||||
|
31512,
|
||||||
|
-- Gundrak
|
||||||
|
29304, -- Slad'ran
|
||||||
|
31370,
|
||||||
|
-- 29573, -- Drakkari Elemental, observed to not give as much experience as this
|
||||||
|
-- 31367,
|
||||||
|
29305, -- Moorabi
|
||||||
|
30530,
|
||||||
|
29932, -- Eck the Ferocious
|
||||||
|
-- Halls of Stone
|
||||||
|
27975, -- Maiden of Grief
|
||||||
|
31384,
|
||||||
|
27977, -- Krystallus
|
||||||
|
31381,
|
||||||
|
-- Halls of Lightning
|
||||||
|
28586, -- General Bjarngrim
|
||||||
|
31533,
|
||||||
|
28587, -- Volkhan
|
||||||
|
31536,
|
||||||
|
28546, -- Ionar
|
||||||
|
31537,
|
||||||
|
-- The Oculus
|
||||||
|
27654, -- Drakos the Interrogator
|
||||||
|
31558,
|
||||||
|
27447, -- Varos Cloudstrider
|
||||||
|
31559,
|
||||||
|
27655, -- Mage-Lord Urom
|
||||||
|
31560,
|
||||||
|
-- Utgarde Pinnacle
|
||||||
|
26668, -- Svala Sorrowgrave
|
||||||
|
30810,
|
||||||
|
26687, -- Gortok Palehoof
|
||||||
|
30774,
|
||||||
|
26693, -- Skadi the Ruthless
|
||||||
|
30807,
|
||||||
|
-- The Culling of Stratholme
|
||||||
|
26529, -- Meathook
|
||||||
|
31211,
|
||||||
|
26530, -- Salramm the Fleshcrafter
|
||||||
|
31212,
|
||||||
|
26532, -- Chrono-Lord Epoch
|
||||||
|
31215,
|
||||||
|
32273, -- Infinite Corruptor
|
||||||
|
32313,
|
||||||
|
-- Trial of the Champion
|
||||||
|
34705, -- Marshal Jacob Alerius
|
||||||
|
36088,
|
||||||
|
34702, -- Ambrose Boltspark
|
||||||
|
36082,
|
||||||
|
34701, -- Colosos
|
||||||
|
36083,
|
||||||
|
34657, -- Jaelyne Evensong
|
||||||
|
36086,
|
||||||
|
34703, -- Lana Stouthammer
|
||||||
|
36087,
|
||||||
|
35572, -- Mokra the Skullcrusher
|
||||||
|
36089,
|
||||||
|
35569, -- Eressea Dawnsinger
|
||||||
|
36085,
|
||||||
|
35571, -- Runok Wildmane
|
||||||
|
36090,
|
||||||
|
35570, -- Zul'tore
|
||||||
|
36091,
|
||||||
|
35617, -- Deathstalker Visceri
|
||||||
|
36084,
|
||||||
|
35119, -- Eadric the Pure
|
||||||
|
35518,
|
||||||
|
34928, -- Argent Confessor Paletress
|
||||||
|
35517,
|
||||||
|
-- The Forge of Souls
|
||||||
|
36497, -- Bronjahm
|
||||||
|
36498,
|
||||||
|
-- Pit of Saron
|
||||||
|
36494, -- Forgemaster Garfrost
|
||||||
|
37613,
|
||||||
|
36476, -- Ick
|
||||||
|
37627,
|
||||||
|
-- Halls of Reflection
|
||||||
|
38112, -- Falric
|
||||||
|
38599,
|
||||||
|
38113, -- Marwyn
|
||||||
|
38603
|
||||||
|
);
|
||||||
|
|
||||||
|
UPDATE `creature_template` SET `ExperienceModifier` = @FinalBossXPMod WHERE `entry` IN (
|
||||||
|
23954, -- Ingvar the Plunderer, Utgarde Keep
|
||||||
|
31673,
|
||||||
|
29120, -- Anub'arak, Azjol-Nerub
|
||||||
|
31610,
|
||||||
|
29311, -- Herald Volazj,
|
||||||
|
31464,
|
||||||
|
26723, -- Keristrasza
|
||||||
|
30540,
|
||||||
|
26632, -- The Prophet Tharon'ja
|
||||||
|
31360,
|
||||||
|
31134, -- Cyanigosa
|
||||||
|
31506,
|
||||||
|
29306, -- Gal'darah
|
||||||
|
31368,
|
||||||
|
27978, -- Sjonnir The Ironshaper
|
||||||
|
31386,
|
||||||
|
28923, -- Loken
|
||||||
|
31538,
|
||||||
|
27656, -- Ley-Guardian Eregos
|
||||||
|
31561,
|
||||||
|
26861, -- King Ymiron
|
||||||
|
30788,
|
||||||
|
26533, -- Mal'Ganis
|
||||||
|
31217,
|
||||||
|
35451, -- The Black Knight, Trial of the Champion
|
||||||
|
35490,
|
||||||
|
36502, -- Devourer of Souls, Forge of Souls
|
||||||
|
37677,
|
||||||
|
36658, -- Scourgelord Tyrannus, Pit of Saron
|
||||||
|
36938
|
||||||
|
);
|
||||||
@ -0,0 +1,5 @@
|
|||||||
|
-- Remove SmartAI and add script name
|
||||||
|
UPDATE `creature_template` SET `AIName` = '', `ScriptName` = 'npc_prismatic_exile' WHERE `entry` = 2887;
|
||||||
|
|
||||||
|
-- delete old smartscript
|
||||||
|
DELETE FROM `smart_scripts` WHERE (`entryorguid` = 2887) AND (`source_type` = 0);
|
||||||
@ -124,7 +124,105 @@ public:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum Spells
|
||||||
|
{
|
||||||
|
SPELL_FIREBALL = 34083,
|
||||||
|
SPELL_FROSTNOVA = 38033,
|
||||||
|
SPELL_LIGHTNING_SHIELD = 12550,
|
||||||
|
SPELL_VISUAL_TRANSFORMATION = 24085
|
||||||
|
};
|
||||||
|
|
||||||
|
// Fire, Air, Water, earth model displayId (same as the elemental in the zone)
|
||||||
|
uint32_t elements_display[] = {2172, 5490, 5561, 9587};
|
||||||
|
class npc_prismatic_exile : public CreatureScript
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
npc_prismatic_exile() : CreatureScript("npc_prismatic_exile") {}
|
||||||
|
|
||||||
|
struct npc_prismatic_exileAI : public ScriptedAI
|
||||||
|
{
|
||||||
|
uint32 changeElementTimer;
|
||||||
|
uint32 currentElement;
|
||||||
|
uint32 frostNovaTimer;
|
||||||
|
bool hasLightningShield;
|
||||||
|
|
||||||
|
npc_prismatic_exileAI(Creature* creature) : ScriptedAI(creature) {
|
||||||
|
currentElement = 3;
|
||||||
|
hasLightningShield = false;
|
||||||
|
frostNovaTimer = urand(1400, 7300); // Got those values from smart_script of 2761
|
||||||
|
changeElementTimer = urand(6 * IN_MILLISECONDS, 10 * IN_MILLISECONDS);
|
||||||
|
}
|
||||||
|
|
||||||
|
void InitializeAI() override
|
||||||
|
{
|
||||||
|
ScriptedAI::InitializeAI();
|
||||||
|
|
||||||
|
// Get the target from Myzrael
|
||||||
|
Unit* owner = me->GetOwner();
|
||||||
|
if (!owner)
|
||||||
|
return;
|
||||||
|
|
||||||
|
Unit* target = owner->GetVictim();
|
||||||
|
if (target)
|
||||||
|
SetGazeOn(target);
|
||||||
|
}
|
||||||
|
|
||||||
|
void UpdateAI(uint32 diff) override
|
||||||
|
{
|
||||||
|
// Change Element
|
||||||
|
if (changeElementTimer <= diff)
|
||||||
|
{
|
||||||
|
uint32 _rand = urand(1, 3);
|
||||||
|
me->CastStop();
|
||||||
|
me->CastSpell(me, SPELL_VISUAL_TRANSFORMATION, true);
|
||||||
|
currentElement = (currentElement + _rand) % 4; // Change to a new element different from actual one
|
||||||
|
me->SetDisplayId(elements_display[currentElement]);
|
||||||
|
changeElementTimer = urand(6 * IN_MILLISECONDS, 10 * IN_MILLISECONDS);
|
||||||
|
}
|
||||||
|
else changeElementTimer -= diff;
|
||||||
|
|
||||||
|
if (!me->HasUnitState(UNIT_STATE_CASTING))
|
||||||
|
{
|
||||||
|
// Cast spell depending on the current element
|
||||||
|
switch (currentElement) {
|
||||||
|
case 0: // FIRE
|
||||||
|
// Always cast fire ball
|
||||||
|
me->CastSpell(me->GetVictim(), SPELL_FIREBALL, false);
|
||||||
|
return;
|
||||||
|
case 1: // AIR
|
||||||
|
// Can only cast lightning shield once
|
||||||
|
if (!hasLightningShield)
|
||||||
|
{
|
||||||
|
me->CastSpell(me, SPELL_LIGHTNING_SHIELD, false);
|
||||||
|
hasLightningShield = true;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 2: // WATER
|
||||||
|
// Can only case frostnova if is in range and timer is done
|
||||||
|
Unit * target = me->GetVictim();
|
||||||
|
if (target && me->IsInRange(target, 0.0f, 10.0f) && frostNovaTimer <= diff)
|
||||||
|
{
|
||||||
|
me->CastSpell((Unit*)nullptr, SPELL_FROSTNOVA, false);
|
||||||
|
frostNovaTimer = urand(1400, 7300);
|
||||||
|
}
|
||||||
|
else frostNovaTimer -= diff;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// By default, melee attack
|
||||||
|
DoMeleeAttackIfReady();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
CreatureAI* GetAI(Creature* creature) const override
|
||||||
|
{
|
||||||
|
return new npc_prismatic_exileAI(creature);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
void AddSC_arathi_highlands()
|
void AddSC_arathi_highlands()
|
||||||
{
|
{
|
||||||
|
new npc_prismatic_exile();
|
||||||
new npc_professor_phizzlethorpe();
|
new npc_professor_phizzlethorpe();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -33,7 +33,6 @@ enum Yells
|
|||||||
enum Spells
|
enum Spells
|
||||||
{
|
{
|
||||||
SPELL_CURSE_OF_LIFE = 49527,
|
SPELL_CURSE_OF_LIFE = 49527,
|
||||||
SPELL_RAIN_OF_FIRE = 49518,
|
|
||||||
SPELL_SHADOW_VOLLEY = 49528,
|
SPELL_SHADOW_VOLLEY = 49528,
|
||||||
|
|
||||||
// flesh spells
|
// flesh spells
|
||||||
@ -56,7 +55,6 @@ enum Misc
|
|||||||
ACTION_TURN_BONES = 1,
|
ACTION_TURN_BONES = 1,
|
||||||
|
|
||||||
EVENT_SPELL_CURSE_OF_LIFE = 1,
|
EVENT_SPELL_CURSE_OF_LIFE = 1,
|
||||||
EVENT_SPELL_RAIN_OF_FIRE = 2,
|
|
||||||
EVENT_SPELL_SHADOW_VOLLEY = 3,
|
EVENT_SPELL_SHADOW_VOLLEY = 3,
|
||||||
EVENT_SPELL_EYE_BEAM = 4,
|
EVENT_SPELL_EYE_BEAM = 4,
|
||||||
EVENT_SPELL_LIGHTNING_BREATH = 5,
|
EVENT_SPELL_LIGHTNING_BREATH = 5,
|
||||||
@ -97,7 +95,6 @@ public:
|
|||||||
Talk(SAY_AGGRO);
|
Talk(SAY_AGGRO);
|
||||||
BossAI::JustEngagedWith(who);
|
BossAI::JustEngagedWith(who);
|
||||||
events.ScheduleEvent(EVENT_SPELL_CURSE_OF_LIFE, 5s);
|
events.ScheduleEvent(EVENT_SPELL_CURSE_OF_LIFE, 5s);
|
||||||
events.ScheduleEvent(EVENT_SPELL_RAIN_OF_FIRE, 14s, 18s);
|
|
||||||
events.ScheduleEvent(EVENT_SPELL_SHADOW_VOLLEY, 8s, 10s);
|
events.ScheduleEvent(EVENT_SPELL_SHADOW_VOLLEY, 8s, 10s);
|
||||||
events.ScheduleEvent(EVENT_SPELL_TURN_FLESH, 1s);
|
events.ScheduleEvent(EVENT_SPELL_TURN_FLESH, 1s);
|
||||||
}
|
}
|
||||||
@ -146,17 +143,11 @@ public:
|
|||||||
switch (events.ExecuteEvent())
|
switch (events.ExecuteEvent())
|
||||||
{
|
{
|
||||||
case EVENT_SPELL_CURSE_OF_LIFE:
|
case EVENT_SPELL_CURSE_OF_LIFE:
|
||||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 30.0f, true))
|
DoCastRandomTarget(SPELL_CURSE_OF_LIFE, 0, 30.0f, false);
|
||||||
me->CastSpell(target, SPELL_CURSE_OF_LIFE, false);
|
|
||||||
events.ScheduleEvent(EVENT_SPELL_CURSE_OF_LIFE, 13s);
|
events.ScheduleEvent(EVENT_SPELL_CURSE_OF_LIFE, 13s);
|
||||||
break;
|
break;
|
||||||
case EVENT_SPELL_RAIN_OF_FIRE:
|
|
||||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 30.0f, true))
|
|
||||||
me->CastSpell(target, SPELL_RAIN_OF_FIRE, false);
|
|
||||||
events.ScheduleEvent(EVENT_SPELL_RAIN_OF_FIRE, 16s);
|
|
||||||
break;
|
|
||||||
case EVENT_SPELL_SHADOW_VOLLEY:
|
case EVENT_SPELL_SHADOW_VOLLEY:
|
||||||
me->CastSpell(me, SPELL_SHADOW_VOLLEY, false);
|
DoCastAOE(SPELL_SHADOW_VOLLEY);
|
||||||
events.ScheduleEvent(EVENT_SPELL_SHADOW_VOLLEY, 9s);
|
events.ScheduleEvent(EVENT_SPELL_SHADOW_VOLLEY, 9s);
|
||||||
break;
|
break;
|
||||||
case EVENT_SPELL_TURN_FLESH:
|
case EVENT_SPELL_TURN_FLESH:
|
||||||
@ -173,9 +164,8 @@ public:
|
|||||||
events.ScheduleEvent(EVENT_SPELL_TURN_FLESH, 1s);
|
events.ScheduleEvent(EVENT_SPELL_TURN_FLESH, 1s);
|
||||||
break;
|
break;
|
||||||
case EVENT_TURN_FLESH_REAL:
|
case EVENT_TURN_FLESH_REAL:
|
||||||
me->CastSpell(me, SPELL_DUMMY, true);
|
DoCastSelf(SPELL_DUMMY, true);
|
||||||
|
me->ResumeChasingVictim();
|
||||||
me->GetMotionMaster()->MoveChase(me->GetVictim());
|
|
||||||
events.ScheduleEvent(EVENT_SPELL_EYE_BEAM, 11s);
|
events.ScheduleEvent(EVENT_SPELL_EYE_BEAM, 11s);
|
||||||
events.ScheduleEvent(EVENT_SPELL_LIGHTNING_BREATH, 3s);
|
events.ScheduleEvent(EVENT_SPELL_LIGHTNING_BREATH, 3s);
|
||||||
events.ScheduleEvent(EVENT_SPELL_POISON_CLOUD, 6s);
|
events.ScheduleEvent(EVENT_SPELL_POISON_CLOUD, 6s);
|
||||||
@ -199,7 +189,6 @@ public:
|
|||||||
me->CastSpell(me, SPELL_CLEAR_GIFT, true);
|
me->CastSpell(me, SPELL_CLEAR_GIFT, true);
|
||||||
events.Reset();
|
events.Reset();
|
||||||
events.ScheduleEvent(EVENT_SPELL_CURSE_OF_LIFE, 1s);
|
events.ScheduleEvent(EVENT_SPELL_CURSE_OF_LIFE, 1s);
|
||||||
events.ScheduleEvent(EVENT_SPELL_RAIN_OF_FIRE, 12s, 14s);
|
|
||||||
events.ScheduleEvent(EVENT_SPELL_SHADOW_VOLLEY, 8s, 10s);
|
events.ScheduleEvent(EVENT_SPELL_SHADOW_VOLLEY, 8s, 10s);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -249,7 +238,6 @@ class spell_tharon_ja_dummy_aura : public AuraScript
|
|||||||
{
|
{
|
||||||
PreventDefaultAction();
|
PreventDefaultAction();
|
||||||
GetUnitOwner()->GetThreatMgr().ResetAllThreat();
|
GetUnitOwner()->GetThreatMgr().ResetAllThreat();
|
||||||
GetUnitOwner()->GetMotionMaster()->Clear();
|
|
||||||
GetUnitOwner()->CastSpell((Unit*)nullptr, SPELL_TURN_BONES, false);
|
GetUnitOwner()->CastSpell((Unit*)nullptr, SPELL_TURN_BONES, false);
|
||||||
GetUnitOwner()->GetAI()->DoAction(ACTION_TURN_BONES);
|
GetUnitOwner()->GetAI()->DoAction(ACTION_TURN_BONES);
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user