mirror of
https://github.com/azerothcore/azerothcore-wotlk.git
synced 2025-11-10 12:24:22 +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()
|
||||
{
|
||||
new npc_prismatic_exile();
|
||||
new npc_professor_phizzlethorpe();
|
||||
}
|
||||
|
||||
@ -33,7 +33,6 @@ enum Yells
|
||||
enum Spells
|
||||
{
|
||||
SPELL_CURSE_OF_LIFE = 49527,
|
||||
SPELL_RAIN_OF_FIRE = 49518,
|
||||
SPELL_SHADOW_VOLLEY = 49528,
|
||||
|
||||
// flesh spells
|
||||
@ -56,7 +55,6 @@ enum Misc
|
||||
ACTION_TURN_BONES = 1,
|
||||
|
||||
EVENT_SPELL_CURSE_OF_LIFE = 1,
|
||||
EVENT_SPELL_RAIN_OF_FIRE = 2,
|
||||
EVENT_SPELL_SHADOW_VOLLEY = 3,
|
||||
EVENT_SPELL_EYE_BEAM = 4,
|
||||
EVENT_SPELL_LIGHTNING_BREATH = 5,
|
||||
@ -97,7 +95,6 @@ public:
|
||||
Talk(SAY_AGGRO);
|
||||
BossAI::JustEngagedWith(who);
|
||||
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_TURN_FLESH, 1s);
|
||||
}
|
||||
@ -146,17 +143,11 @@ public:
|
||||
switch (events.ExecuteEvent())
|
||||
{
|
||||
case EVENT_SPELL_CURSE_OF_LIFE:
|
||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 30.0f, true))
|
||||
me->CastSpell(target, SPELL_CURSE_OF_LIFE, false);
|
||||
DoCastRandomTarget(SPELL_CURSE_OF_LIFE, 0, 30.0f, false);
|
||||
events.ScheduleEvent(EVENT_SPELL_CURSE_OF_LIFE, 13s);
|
||||
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:
|
||||
me->CastSpell(me, SPELL_SHADOW_VOLLEY, false);
|
||||
DoCastAOE(SPELL_SHADOW_VOLLEY);
|
||||
events.ScheduleEvent(EVENT_SPELL_SHADOW_VOLLEY, 9s);
|
||||
break;
|
||||
case EVENT_SPELL_TURN_FLESH:
|
||||
@ -173,9 +164,8 @@ public:
|
||||
events.ScheduleEvent(EVENT_SPELL_TURN_FLESH, 1s);
|
||||
break;
|
||||
case EVENT_TURN_FLESH_REAL:
|
||||
me->CastSpell(me, SPELL_DUMMY, true);
|
||||
|
||||
me->GetMotionMaster()->MoveChase(me->GetVictim());
|
||||
DoCastSelf(SPELL_DUMMY, true);
|
||||
me->ResumeChasingVictim();
|
||||
events.ScheduleEvent(EVENT_SPELL_EYE_BEAM, 11s);
|
||||
events.ScheduleEvent(EVENT_SPELL_LIGHTNING_BREATH, 3s);
|
||||
events.ScheduleEvent(EVENT_SPELL_POISON_CLOUD, 6s);
|
||||
@ -199,7 +189,6 @@ public:
|
||||
me->CastSpell(me, SPELL_CLEAR_GIFT, true);
|
||||
events.Reset();
|
||||
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);
|
||||
break;
|
||||
}
|
||||
@ -249,7 +238,6 @@ class spell_tharon_ja_dummy_aura : public AuraScript
|
||||
{
|
||||
PreventDefaultAction();
|
||||
GetUnitOwner()->GetThreatMgr().ResetAllThreat();
|
||||
GetUnitOwner()->GetMotionMaster()->Clear();
|
||||
GetUnitOwner()->CastSpell((Unit*)nullptr, SPELL_TURN_BONES, false);
|
||||
GetUnitOwner()->GetAI()->DoAction(ACTION_TURN_BONES);
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user