aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/updates/world/2013_03_03_00_world_eye_of_eternity.sql6
-rw-r--r--sql/updates/world/2013_03_03_01_world_misc.sql13
-rw-r--r--sql/updates/world/2013_03_03_02_world_sai.sql37
-rw-r--r--src/server/game/Spells/SpellMgr.cpp5
-rw-r--r--src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp47
5 files changed, 102 insertions, 6 deletions
diff --git a/sql/updates/world/2013_03_03_00_world_eye_of_eternity.sql b/sql/updates/world/2013_03_03_00_world_eye_of_eternity.sql
new file mode 100644
index 00000000000..e41f2723e5f
--- /dev/null
+++ b/sql/updates/world/2013_03_03_00_world_eye_of_eternity.sql
@@ -0,0 +1,6 @@
+-- Delete wrongly inserted spell linked spell of Scion of Eternity - "Arcane Barrage".
+-- It should be handled in the original caster spell with spellscript effect.
+DELETE FROM `spell_linked_spell` WHERE `spell_trigger`=56397 AND `spell_effect`=63934 AND`type`=1;
+
+-- Update flags in creature for Malygos since differ from these in creature_template
+UPDATE `creature` SET `unit_flags`=320,`dynamicflags`=8 WHERE `id`=28859;
diff --git a/sql/updates/world/2013_03_03_01_world_misc.sql b/sql/updates/world/2013_03_03_01_world_misc.sql
new file mode 100644
index 00000000000..a81da8352e3
--- /dev/null
+++ b/sql/updates/world/2013_03_03_01_world_misc.sql
@@ -0,0 +1,13 @@
+-- Issue 9311
+-- Add Missing Sunreaver Guardian Mage inside Sunreaver Tavern (Thx Aokromes)
+SET @CGUID := 40267; -- Set by TDB Team
+DELETE FROM `creature` WHERE `guid`=@CGUID;
+INSERT INTO `creature` (`guid`,`id`,`map`,`spawnMask`,`phaseMask`,`position_x`,`position_y`,`position_z`,`orientation`,`spawntimesecs`,`spawndist`,`MovementType`) VALUES
+(@CGUID,29255,571,1,1,5900.299,505.75,641.6531,4.171337,120,0,0);
+
+-- Issue 9322:
+-- fix SAI to make the quest Mission: The Abyssal Shelf (10162) Horde completable (thx Kirkhammett)
+UPDATE `creature_template` SET `AIName`= 'SmartAI' WHERE `entry`=19273;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=19273;
+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`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(19273,0,0,0,19, 0,100,0,10162,0,0,0,15,10162,0,0,0,0,0,7,0,0,0,0,0,0,0, 'Commander To''arch - On Quest Accept - Call Areaexplored');
diff --git a/sql/updates/world/2013_03_03_02_world_sai.sql b/sql/updates/world/2013_03_03_02_world_sai.sql
new file mode 100644
index 00000000000..ad1ebfd64f2
--- /dev/null
+++ b/sql/updates/world/2013_03_03_02_world_sai.sql
@@ -0,0 +1,37 @@
+-- Issue 9250
+-- A Worthy Weapon (thx Durotar)
+UPDATE `creature_template` SET `InhabitType`=4, `hoverheight`=1065353216, `AIName`='SmartAI', `ScriptName`='' WHERE `entry`=33273;
+-- Set visual effect: sitting
+DELETE FROM `creature_template_addon` WHERE `entry`=33273;
+INSERT INTO `creature_template_addon` (`entry`,`bytes1`,`bytes2`,`emote`) VALUES (33273,1,1,0);
+-- Winter Hyacinth (item 45000) Send Script Event (20990) by right-click
+DELETE FROM `event_scripts` WHERE `id`=20990;
+INSERT INTO `event_scripts` (`id`, `delay`, `command`, `datalong`, `datalong2`, `x`, `y`, `z`, `o`) VALUES
+(20990, 0, 10, 33273, 42000, 4602.977, -1600.141, 156.7834, 0.7504916);
+-- TEMP Drak'Mar Offering Ring
+SET @ObjectGuid := 6068; -- set by TDB staff
+DELETE FROM `gameobject` WHERE `id`=300009;
+INSERT INTO `gameobject` (`guid`,`id`,`map`,`spawnMask`,`phaseMask`,`position_x`,`position_y`,`position_z`,`orientation`,`rotation0`,`rotation1`,`rotation2`,`rotation3`,`spawntimesecs`,`animprogress`,`state`) VALUES
+(@ObjectGuid+0,300009,571,1,1, 4606.72, -1606.91, 156.659, 1.62734,0.0,0.0, 0.726811, 0.686837,300,0,1),
+(@ObjectGuid+1,300009,571,1,1, 4596.78, -1606.69, 156.659, 1.5488,0.0,0.0, 0.699286, 0.714842,300,0,1),
+(@ObjectGuid+2,300009,571,1,1, 4597.1, -1594.08, 156.658, 1.53702,0.0,0.0, 0.695063, 0.718949,300,0,1),
+(@ObjectGuid+3,300009,571,1,1, 4608.33, -1592.98, 156.658, 0.162569,0.0,0.0, 0.0811951, 0.996698,300,0,1),
+(@ObjectGuid+4,300009,571,1,1, 4602.78, -1600.05, 156.658, 4.08564,0.0,0.0, 0.890651, -0.454688,300,0,1);
+-- creature_text
+DELETE FROM `creature_text` WHERE `entry`=33273 AND `groupid` BETWEEN 0 AND 3;
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
+(33273,0,0, 'Are those winter hyacinths? For me?',12,0,100,6,0,0, 'Maiden of Drak''Mar'),
+(33273,1,0, 'It''s been so long since a traveler has come here bearing flowers.',12,0,100,1,0,0, 'Maiden of Drak''Mar'),
+(33273,2,0, 'The lake has been too lonely these past years. The travelers stopped coming and evil came to these waters.',12,0,100,1,0,0, 'Maiden of Drak''Mar'),
+(33273,3,0, 'Your gift is a rare kindness, traveler. Please take this blade with my gratitude. Long ago, another traveler left it here, but I have little use for it.',12,0,100,1,0,0, 'Maiden of Drak''Mar');
+-- SAI
+DELETE FROM `smart_scripts` WHERE `entryorguid`=33273 AND `source_type`=0 AND `id`=0;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=33273*100 AND `source_type`=9 AND `id` BETWEEN 0 AND 6;
+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`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(33273,0,0,0,54,0,100,0,0,0,0,0,80,33273*100,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Maiden of DrakMar - On spawn - Run script'),
+(33273*100,9,0,0,0,0,100,0,0,0,0,0,50,194239,42000,0,0,0,0,8,0,0,0,4602.977,-1600.141,156.7834,0, 'Maiden of DrakMar - On script - Summon GO DrakMar Lily Pad'),
+(33273*100,9,1,0,0,0,100,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Maiden of DrakMar - On script - Say 0'),
+(33273*100,9,2,0,0,0,100,0,5000,5000,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Maiden of DrakMar - On script - Say 1'),
+(33273*100,9,3,0,0,0,100,0,6000,6000,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Maiden of DrakMar - On script - Say 2'),
+(33273*100,9,4,0,0,0,100,0,7000,7000,0,0,1,3,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Maiden of DrakMar - On script - Say 3'),
+(33273*100,9,5,0,0,0,100,0,0,0,0,0,50,194238,20000,0,0,0,0,8,0,0,0,4603.351,-1599.288,156.8822,2.234018, 'Maiden of DrakMar - On script - Summon GO Blade of DrakMar');
diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp
index e06de171f1d..fc6dec7e2ec 100644
--- a/src/server/game/Spells/SpellMgr.cpp
+++ b/src/server/game/Spells/SpellMgr.cpp
@@ -3603,6 +3603,11 @@ void SpellMgr::LoadSpellInfoCorrections()
case 57143: // Life Burst (Wyrmrest Skytalon)
spellInfo->AttributesEx2 |= SPELL_ATTR2_CAN_TARGET_NOT_IN_LOS;
break;
+ // This would never crit on retail and it has attribute for SPELL_ATTR3_NO_DONE_BONUS because is handled from player,
+ // until someone figures how to make scions not critting without hack and without making them main casters this should stay here.
+ case 63934: // Arcane Barrage (casted by players and NONMELEEDAMAGELOG with caster Scion of Eternity (original caster)).
+ spellInfo->AttributesEx2 |= SPELL_ATTR2_CANT_CRIT;
+ break;
// ENDOF EYE OF ETERNITY SPELLS
//
// OCULUS SPELLS
diff --git a/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp b/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp
index a3c433452a1..75c56a9d947 100644
--- a/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp
+++ b/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp
@@ -130,6 +130,7 @@ enum Spells
SPELL_ARCANE_SHOCK = 57058, // used by Nexus Lords
SPELL_HASTE = 57060, // used by Nexus Lords
SPELL_ARCANE_BARRAGE = 56397, // used by Scions of Eternity
+ SPELL_ARCANE_BARRAGE_DAMAGE = 63934, // the actual damage - cast by affected player by script spell
// Transition /II-III/
SPELL_SUMMOM_RED_DRAGON_BUDYY = 56070,
@@ -1478,7 +1479,7 @@ class npc_scion_of_eternity : public CreatureScript
void IsSummonedBy(Unit* /*summoner*/)
{
_events.SetPhase(PHASE_TWO);
- _events.ScheduleEvent(EVENT_ARCANE_BARRAGE, urand(14, 17)*IN_MILLISECONDS, 0, PHASE_TWO);
+ _events.ScheduleEvent(EVENT_ARCANE_BARRAGE, urand(14, 24)*IN_MILLISECONDS, 0, PHASE_TWO);
}
void EnterCombat(Unit* /*who*/)
@@ -1503,7 +1504,7 @@ class npc_scion_of_eternity : public CreatureScript
{
case EVENT_ARCANE_BARRAGE:
DoCast(me, SPELL_ARCANE_BARRAGE);
- _events.ScheduleEvent(EVENT_ARCANE_BARRAGE, urand(4, 12)*IN_MILLISECONDS, 0, PHASE_TWO);
+ _events.ScheduleEvent(EVENT_ARCANE_BARRAGE, urand(3, 12)*IN_MILLISECONDS, 0, PHASE_TWO);
break;
}
}
@@ -2009,10 +2010,10 @@ class spell_nexus_lord_align_disk_aggro : public SpellScriptLoader
}
};
-class IsPlayerOnHoverDiskCheck
+class IsPlayerOnHoverDisk
{
public:
- IsPlayerOnHoverDiskCheck(Unit* source, bool isOnHoverDisk) : _source(source), _isOnHoverDisk(isOnHoverDisk) { }
+ IsPlayerOnHoverDisk(Unit* source, bool isOnHoverDisk) : _source(source), _isOnHoverDisk(isOnHoverDisk) { }
bool operator()(WorldObject* unit)
{
@@ -2038,6 +2039,24 @@ class IsPlayerOnHoverDiskCheck
bool _isOnHoverDisk;
};
+class CheckUnitAura
+{
+ public:
+ CheckUnitAura(Unit* source) : _source(source) { }
+
+ bool operator()(WorldObject* unit)
+ {
+ if (Unit* target = ObjectAccessor::GetUnit(*_source, unit->GetGUID()))
+ if (target->HasAura(SPELL_ARCANE_BARRAGE_DAMAGE))
+ return true;
+
+ return false;
+ }
+
+ private:
+ Unit* _source;
+};
+
class spell_scion_of_eternity_arcane_barrage : public SpellScriptLoader
{
public:
@@ -2061,14 +2080,30 @@ class spell_scion_of_eternity_arcane_barrage : public SpellScriptLoader
for (std::list<WorldObject*>::const_iterator itr = targets.begin(); itr != targets.end(); ++itr)
_playersWithoutDisk.push_back((*itr));
- _playersWithoutDisk.remove_if(IsPlayerOnHoverDiskCheck(caster, false));
+ // Remove players not on Hover Disk from second list,
+ // if it's empty than we can have player on Hover disk as target.
+ _playersWithoutDisk.remove_if(IsPlayerOnHoverDisk(caster, false));
+ // Else if there are players on the ground we remove all from vehicles.
if (_playersWithoutDisk.empty())
- targets.remove_if(IsPlayerOnHoverDiskCheck(caster, true));
+ targets.remove_if(IsPlayerOnHoverDisk(caster, true));
+ // Finally here we remove all targets that have been damaged by Arcane Barrage
+ // and have 2 seconds long aura still lasting. Used to give healers some time.
+ if (!targets.empty())
+ targets.remove_if(CheckUnitAura(caster));
+ }
+
+ void TriggerDamageSpellFromPlayer()
+ {
+ Player* hitTarget = GetHitPlayer();
+ // There is some proc in this spell I have absolutely no idea of use, but just in case...
+ TriggerCastFlags triggerFlags = TriggerCastFlags(TRIGGERED_FULL_MASK & ~TRIGGERED_DISALLOW_PROC_EVENTS);
+ hitTarget->CastSpell(hitTarget, SPELL_ARCANE_BARRAGE_DAMAGE, triggerFlags, NULL, NULL, GetCaster()->GetGUID());
}
void Register()
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_scion_of_eternity_arcane_barrage_SpellScript::FilterMeleeHoverDiskPassangers, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY);
+ OnHit += SpellHitFn(spell_scion_of_eternity_arcane_barrage_SpellScript::TriggerDamageSpellFromPlayer);
}
std::list<WorldObject*> _playersWithoutDisk;