*Merge.
--HG-- branch : trunk
This commit is contained in:
@@ -1,189 +1,189 @@
|
|||||||
DROP TABLE IF EXISTS `achievement_reward`;
|
DROP TABLE IF EXISTS `achievement_reward`;
|
||||||
CREATE TABLE `achievement_reward` (
|
CREATE TABLE `achievement_reward` (
|
||||||
`entry` mediumint(8) unsigned NOT NULL default '0',
|
`entry` mediumint(8) unsigned NOT NULL default '0',
|
||||||
`title_A` mediumint(8) unsigned NOT NULL default '0',
|
`title_A` mediumint(8) unsigned NOT NULL default '0',
|
||||||
`title_H` mediumint(8) unsigned NOT NULL default '0',
|
`title_H` mediumint(8) unsigned NOT NULL default '0',
|
||||||
`item` mediumint(8) unsigned NOT NULL default '0',
|
`item` mediumint(8) unsigned NOT NULL default '0',
|
||||||
`sender` mediumint(8) unsigned NOT NULL default '0',
|
`sender` mediumint(8) unsigned NOT NULL default '0',
|
||||||
`subject` varchar(255) default NULL,
|
`subject` varchar(255) default NULL,
|
||||||
`text` text,
|
`text` text,
|
||||||
PRIMARY KEY (`entry`)
|
PRIMARY KEY (`entry`)
|
||||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Loot System';
|
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Loot System';
|
||||||
|
|
||||||
|
|
||||||
DROP TABLE IF EXISTS `locales_achievement_reward`;
|
DROP TABLE IF EXISTS `locales_achievement_reward`;
|
||||||
CREATE TABLE `locales_achievement_reward` (
|
CREATE TABLE `locales_achievement_reward` (
|
||||||
`entry` mediumint(8) unsigned NOT NULL default '0',
|
`entry` mediumint(8) unsigned NOT NULL default '0',
|
||||||
`subject_loc1` varchar(100) NOT NULL default '',
|
`subject_loc1` varchar(100) NOT NULL default '',
|
||||||
`subject_loc2` varchar(100) NOT NULL default '',
|
`subject_loc2` varchar(100) NOT NULL default '',
|
||||||
`subject_loc3` varchar(100) NOT NULL default '',
|
`subject_loc3` varchar(100) NOT NULL default '',
|
||||||
`subject_loc4` varchar(100) NOT NULL default '',
|
`subject_loc4` varchar(100) NOT NULL default '',
|
||||||
`subject_loc5` varchar(100) NOT NULL default '',
|
`subject_loc5` varchar(100) NOT NULL default '',
|
||||||
`subject_loc6` varchar(100) NOT NULL default '',
|
`subject_loc6` varchar(100) NOT NULL default '',
|
||||||
`subject_loc7` varchar(100) NOT NULL default '',
|
`subject_loc7` varchar(100) NOT NULL default '',
|
||||||
`subject_loc8` varchar(100) NOT NULL default '',
|
`subject_loc8` varchar(100) NOT NULL default '',
|
||||||
`text_loc1` text default NULL,
|
`text_loc1` text default NULL,
|
||||||
`text_loc2` text default NULL,
|
`text_loc2` text default NULL,
|
||||||
`text_loc3` text default NULL,
|
`text_loc3` text default NULL,
|
||||||
`text_loc4` text default NULL,
|
`text_loc4` text default NULL,
|
||||||
`text_loc5` text default NULL,
|
`text_loc5` text default NULL,
|
||||||
`text_loc6` text default NULL,
|
`text_loc6` text default NULL,
|
||||||
`text_loc7` text default NULL,
|
`text_loc7` text default NULL,
|
||||||
`text_loc8` text default NULL,
|
`text_loc8` text default NULL,
|
||||||
PRIMARY KEY (`entry`)
|
PRIMARY KEY (`entry`)
|
||||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||||
|
|
||||||
TRUNCATE `creature_equip_template`;
|
TRUNCATE `creature_equip_template`;
|
||||||
ALTER TABLE `creature_equip_template`
|
ALTER TABLE `creature_equip_template`
|
||||||
DROP COLUMN `equipinfo1`,
|
DROP COLUMN `equipinfo1`,
|
||||||
DROP COLUMN `equipinfo2`,
|
DROP COLUMN `equipinfo2`,
|
||||||
DROP COLUMN `equipinfo3`,
|
DROP COLUMN `equipinfo3`,
|
||||||
DROP COLUMN `equipslot1`,
|
DROP COLUMN `equipslot1`,
|
||||||
DROP COLUMN `equipslot2`,
|
DROP COLUMN `equipslot2`,
|
||||||
DROP COLUMN `equipslot3`,
|
DROP COLUMN `equipslot3`,
|
||||||
CHANGE COLUMN `equipmodel1` `equipentry1` mediumint(8) UNSIGNED default '0' NOT NULL,
|
CHANGE COLUMN `equipmodel1` `equipentry1` mediumint(8) UNSIGNED default '0' NOT NULL,
|
||||||
CHANGE COLUMN `equipmodel2` `equipentry2` mediumint(8) UNSIGNED default '0' NOT NULL,
|
CHANGE COLUMN `equipmodel2` `equipentry2` mediumint(8) UNSIGNED default '0' NOT NULL,
|
||||||
CHANGE COLUMN `equipmodel3` `equipentry3` mediumint(8) UNSIGNED default '0' NOT NULL;
|
CHANGE COLUMN `equipmodel3` `equipentry3` mediumint(8) UNSIGNED default '0' NOT NULL;
|
||||||
UPDATE `creature_template` set equipment_id = 0;
|
UPDATE `creature_template` set equipment_id = 0;
|
||||||
|
|
||||||
ALTER TABLE `item_template`
|
ALTER TABLE `item_template`
|
||||||
ADD COLUMN `ScalingStatDistribution` smallint(6) DEFAULT '0' NOT NULL after `stat_value10`,
|
ADD COLUMN `ScalingStatDistribution` smallint(6) DEFAULT '0' NOT NULL after `stat_value10`,
|
||||||
ADD COLUMN `ScalingStatValue` smallint(6) DEFAULT '0' NOT NULL after `ScalingStatDistribution`,
|
ADD COLUMN `ScalingStatValue` smallint(6) DEFAULT '0' NOT NULL after `ScalingStatDistribution`,
|
||||||
ADD COLUMN `ItemLimitCategory` smallint(6) DEFAULT '0' NOT NULL after `ArmorDamageModifier`,
|
ADD COLUMN `ItemLimitCategory` smallint(6) DEFAULT '0' NOT NULL after `ArmorDamageModifier`,
|
||||||
CHANGE COLUMN `Duration` `Duration` int(11) NOT NULL default '0' COMMENT 'Duration in seconds. Negative value means realtime, postive value ingame time' after ArmorDamageModifier,
|
CHANGE COLUMN `Duration` `Duration` int(11) NOT NULL default '0' COMMENT 'Duration in seconds. Negative value means realtime, postive value ingame time' after ArmorDamageModifier,
|
||||||
ADD COLUMN `StatsCount` tinyint(3) UNSIGNED DEFAULT '0' NOT NULL after `ContainerSlots`,
|
ADD COLUMN `StatsCount` tinyint(3) UNSIGNED DEFAULT '0' NOT NULL after `ContainerSlots`,
|
||||||
CHANGE COLUMN `TotemCategory` `TotemCategory` mediumint(9) NOT NULL default '0';
|
CHANGE COLUMN `TotemCategory` `TotemCategory` mediumint(9) NOT NULL default '0';
|
||||||
|
|
||||||
UPDATE `item_template`
|
UPDATE `item_template`
|
||||||
SET `maxcount`=0 WHERE `maxcount` > 32000;
|
SET `maxcount`=0 WHERE `maxcount` > 32000;
|
||||||
UPDATE `item_template`
|
UPDATE `item_template`
|
||||||
SET `stackable`=0 WHERE `stackable` > 32000;
|
SET `stackable`=0 WHERE `stackable` > 32000;
|
||||||
ALTER TABLE `item_template`
|
ALTER TABLE `item_template`
|
||||||
CHANGE COLUMN `maxcount` `maxcount` smallint(5) NOT NULL default '-1',
|
CHANGE COLUMN `maxcount` `maxcount` smallint(5) NOT NULL default '-1',
|
||||||
CHANGE COLUMN `stackable` `stackable` smallint(5) NOT NULL default '1';
|
CHANGE COLUMN `stackable` `stackable` smallint(5) NOT NULL default '1';
|
||||||
UPDATE `item_template`
|
UPDATE `item_template`
|
||||||
SET `stackable`=-1 WHERE `stackable` = 0;
|
SET `stackable`=-1 WHERE `stackable` = 0;
|
||||||
|
|
||||||
ALTER TABLE `quest_template`
|
ALTER TABLE `quest_template`
|
||||||
ADD COLUMN `PlayersSlain` tinyint(3) UNSIGNED DEFAULT '0' NOT NULL after `CharTitleId`,
|
ADD COLUMN `PlayersSlain` tinyint(3) UNSIGNED DEFAULT '0' NOT NULL after `CharTitleId`,
|
||||||
ADD COLUMN `BonusTalents` tinyint(3) UNSIGNED DEFAULT '0' NOT NULL after `PlayersSlain`,
|
ADD COLUMN `BonusTalents` tinyint(3) UNSIGNED DEFAULT '0' NOT NULL after `PlayersSlain`,
|
||||||
CHANGE COLUMN `RewHonorableKills` `RewHonorableKills` int unsigned NOT NULL default '0';
|
CHANGE COLUMN `RewHonorableKills` `RewHonorableKills` int unsigned NOT NULL default '0';
|
||||||
|
|
||||||
DROP TABLE IF EXISTS `milling_loot_template`;
|
DROP TABLE IF EXISTS `milling_loot_template`;
|
||||||
CREATE TABLE `milling_loot_template` (
|
CREATE TABLE `milling_loot_template` (
|
||||||
`entry` mediumint(8) unsigned NOT NULL default '0',
|
`entry` mediumint(8) unsigned NOT NULL default '0',
|
||||||
`item` mediumint(8) unsigned NOT NULL default '0',
|
`item` mediumint(8) unsigned NOT NULL default '0',
|
||||||
`ChanceOrQuestChance` float NOT NULL default '100',
|
`ChanceOrQuestChance` float NOT NULL default '100',
|
||||||
`groupid` tinyint(3) unsigned NOT NULL default '0',
|
`groupid` tinyint(3) unsigned NOT NULL default '0',
|
||||||
`mincountOrRef` mediumint(9) NOT NULL default '1',
|
`mincountOrRef` mediumint(9) NOT NULL default '1',
|
||||||
`maxcount` tinyint(3) unsigned NOT NULL default '1',
|
`maxcount` tinyint(3) unsigned NOT NULL default '1',
|
||||||
`lootcondition` tinyint(3) unsigned NOT NULL default '0',
|
`lootcondition` tinyint(3) unsigned NOT NULL default '0',
|
||||||
`condition_value1` mediumint(8) unsigned NOT NULL default '0',
|
`condition_value1` mediumint(8) unsigned NOT NULL default '0',
|
||||||
`condition_value2` mediumint(8) unsigned NOT NULL default '0',
|
`condition_value2` mediumint(8) unsigned NOT NULL default '0',
|
||||||
PRIMARY KEY (`entry`,`item`)
|
PRIMARY KEY (`entry`,`item`)
|
||||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Loot System';
|
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Loot System';
|
||||||
|
|
||||||
DROP TABLE IF EXISTS `spell_affect`;
|
DROP TABLE IF EXISTS `spell_affect`;
|
||||||
CREATE TABLE `spell_affect` (
|
CREATE TABLE `spell_affect` (
|
||||||
`entry` smallint(5) unsigned NOT NULL default '0',
|
`entry` smallint(5) unsigned NOT NULL default '0',
|
||||||
`effectId` tinyint(3) unsigned NOT NULL default '0',
|
`effectId` tinyint(3) unsigned NOT NULL default '0',
|
||||||
`SpellClassMask0` int(5) unsigned NOT NULL default '0',
|
`SpellClassMask0` int(5) unsigned NOT NULL default '0',
|
||||||
`SpellClassMask1` int(5) unsigned NOT NULL default '0',
|
`SpellClassMask1` int(5) unsigned NOT NULL default '0',
|
||||||
`SpellClassMask2` int(5) unsigned NOT NULL default '0',
|
`SpellClassMask2` int(5) unsigned NOT NULL default '0',
|
||||||
PRIMARY KEY (`entry`,`effectId`)
|
PRIMARY KEY (`entry`,`effectId`)
|
||||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||||
|
|
||||||
ALTER TABLE `skill_discovery_template`
|
ALTER TABLE `skill_discovery_template`
|
||||||
DROP PRIMARY KEY,
|
DROP PRIMARY KEY,
|
||||||
ADD PRIMARY KEY (`spellId`,`reqSpell`),
|
ADD PRIMARY KEY (`spellId`,`reqSpell`),
|
||||||
ADD COLUMN `reqClass` tinyint(2) unsigned NOT NULL default '0' COMMENT 'class requirement' AFTER reqSpell;
|
ADD COLUMN `reqClass` tinyint(2) unsigned NOT NULL default '0' COMMENT 'class requirement' AFTER reqSpell;
|
||||||
ALTER TABLE skill_discovery_template
|
ALTER TABLE skill_discovery_template
|
||||||
DROP COLUMN `reqClass`,
|
DROP COLUMN `reqClass`,
|
||||||
ADD COLUMN `reqSkillValue` smallint(5) unsigned NOT NULL default '0' COMMENT 'skill points requirement' AFTER reqSpell;
|
ADD COLUMN `reqSkillValue` smallint(5) unsigned NOT NULL default '0' COMMENT 'skill points requirement' AFTER reqSpell;
|
||||||
|
|
||||||
DROP TABLE IF EXISTS `player_classlevelstats`;
|
DROP TABLE IF EXISTS `player_classlevelstats`;
|
||||||
CREATE TABLE `player_classlevelstats` (
|
CREATE TABLE `player_classlevelstats` (
|
||||||
`class` tinyint(3) unsigned NOT NULL,
|
`class` tinyint(3) unsigned NOT NULL,
|
||||||
`level` tinyint(3) unsigned NOT NULL,
|
`level` tinyint(3) unsigned NOT NULL,
|
||||||
`basehp` smallint(5) unsigned NOT NULL,
|
`basehp` smallint(5) unsigned NOT NULL,
|
||||||
`basemana` smallint(5) unsigned NOT NULL,
|
`basemana` smallint(5) unsigned NOT NULL,
|
||||||
PRIMARY KEY (`class`,`level`)
|
PRIMARY KEY (`class`,`level`)
|
||||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0 COMMENT='Stores levels stats.';
|
) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0 COMMENT='Stores levels stats.';
|
||||||
|
|
||||||
DROP TABLE IF EXISTS `player_levelstats`;
|
DROP TABLE IF EXISTS `player_levelstats`;
|
||||||
CREATE TABLE `player_levelstats` (
|
CREATE TABLE `player_levelstats` (
|
||||||
`race` tinyint(3) unsigned NOT NULL,
|
`race` tinyint(3) unsigned NOT NULL,
|
||||||
`class` tinyint(3) unsigned NOT NULL,
|
`class` tinyint(3) unsigned NOT NULL,
|
||||||
`level` tinyint(3) unsigned NOT NULL,
|
`level` tinyint(3) unsigned NOT NULL,
|
||||||
`str` tinyint(3) unsigned NOT NULL,
|
`str` tinyint(3) unsigned NOT NULL,
|
||||||
`agi` tinyint(3) unsigned NOT NULL,
|
`agi` tinyint(3) unsigned NOT NULL,
|
||||||
`sta` tinyint(3) unsigned NOT NULL,
|
`sta` tinyint(3) unsigned NOT NULL,
|
||||||
`inte` tinyint(3) unsigned NOT NULL,
|
`inte` tinyint(3) unsigned NOT NULL,
|
||||||
`spi` tinyint(3) unsigned NOT NULL,
|
`spi` tinyint(3) unsigned NOT NULL,
|
||||||
PRIMARY KEY (`race`,`class`,`level`)
|
PRIMARY KEY (`race`,`class`,`level`)
|
||||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0 COMMENT='Stores levels stats.';
|
) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0 COMMENT='Stores levels stats.';
|
||||||
|
|
||||||
DROP TABLE IF EXISTS `playercreateinfo_spell`;
|
DROP TABLE IF EXISTS `playercreateinfo_spell`;
|
||||||
CREATE TABLE `playercreateinfo_spell` (
|
CREATE TABLE `playercreateinfo_spell` (
|
||||||
`race` tinyint(3) unsigned NOT NULL default '0',
|
`race` tinyint(3) unsigned NOT NULL default '0',
|
||||||
`class` tinyint(3) unsigned NOT NULL default '0',
|
`class` tinyint(3) unsigned NOT NULL default '0',
|
||||||
`Spell` mediumint(8) unsigned NOT NULL default '0',
|
`Spell` mediumint(8) unsigned NOT NULL default '0',
|
||||||
`Note` varchar(255) default NULL,
|
`Note` varchar(255) default NULL,
|
||||||
PRIMARY KEY (`race`,`class`,`Spell`)
|
PRIMARY KEY (`race`,`class`,`Spell`)
|
||||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||||
|
|
||||||
DROP TABLE IF EXISTS `playercreateinfo_action`;
|
DROP TABLE IF EXISTS `playercreateinfo_action`;
|
||||||
CREATE TABLE `playercreateinfo_action` (
|
CREATE TABLE `playercreateinfo_action` (
|
||||||
`race` tinyint(3) unsigned NOT NULL default '0',
|
`race` tinyint(3) unsigned NOT NULL default '0',
|
||||||
`class` tinyint(3) unsigned NOT NULL default '0',
|
`class` tinyint(3) unsigned NOT NULL default '0',
|
||||||
`button` smallint(5) unsigned NOT NULL default '0',
|
`button` smallint(5) unsigned NOT NULL default '0',
|
||||||
`action` smallint(5) unsigned NOT NULL default '0',
|
`action` smallint(5) unsigned NOT NULL default '0',
|
||||||
`type` smallint(5) unsigned NOT NULL default '0',
|
`type` smallint(5) unsigned NOT NULL default '0',
|
||||||
`misc` smallint(5) unsigned NOT NULL default '0',
|
`misc` smallint(5) unsigned NOT NULL default '0',
|
||||||
KEY `playercreateinfo_race_class_index` (`race`,`class`)
|
KEY `playercreateinfo_race_class_index` (`race`,`class`)
|
||||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||||
|
|
||||||
DROP TABLE IF EXISTS `spell_learn_spell`;
|
DROP TABLE IF EXISTS `spell_learn_spell`;
|
||||||
CREATE TABLE `spell_learn_spell` (
|
CREATE TABLE `spell_learn_spell` (
|
||||||
`entry` smallint(5) unsigned NOT NULL default '0',
|
`entry` smallint(5) unsigned NOT NULL default '0',
|
||||||
`SpellID` smallint(5) unsigned NOT NULL default '0',
|
`SpellID` smallint(5) unsigned NOT NULL default '0',
|
||||||
`Active` tinyint(3) unsigned NOT NULL default '1',
|
`Active` tinyint(3) unsigned NOT NULL default '1',
|
||||||
PRIMARY KEY (`entry`,`SpellID`)
|
PRIMARY KEY (`entry`,`SpellID`)
|
||||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Item System';
|
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Item System';
|
||||||
|
|
||||||
DROP TABLE IF EXISTS `spell_proc_event`;
|
DROP TABLE IF EXISTS `spell_proc_event`;
|
||||||
CREATE TABLE `spell_proc_event` (
|
CREATE TABLE `spell_proc_event` (
|
||||||
`entry` smallint(5) unsigned NOT NULL default '0',
|
`entry` smallint(5) unsigned NOT NULL default '0',
|
||||||
`SchoolMask` tinyint(4) NOT NULL default '0',
|
`SchoolMask` tinyint(4) NOT NULL default '0',
|
||||||
`SpellFamilyName` smallint(5) unsigned NOT NULL default '0',
|
`SpellFamilyName` smallint(5) unsigned NOT NULL default '0',
|
||||||
`SpellFamilyMask0` int(10) unsigned NOT NULL default '0',
|
`SpellFamilyMask0` int(10) unsigned NOT NULL default '0',
|
||||||
`SpellFamilyMask1` int(10) unsigned NOT NULL default '0',
|
`SpellFamilyMask1` int(10) unsigned NOT NULL default '0',
|
||||||
`SpellFamilyMask2` int(10) unsigned NOT NULL default '0',
|
`SpellFamilyMask2` int(10) unsigned NOT NULL default '0',
|
||||||
`procFlags` int(10) unsigned NOT NULL default '0',
|
`procFlags` int(10) unsigned NOT NULL default '0',
|
||||||
`procEx` int(10) unsigned NOT NULL default '0',
|
`procEx` int(10) unsigned NOT NULL default '0',
|
||||||
`ppmRate` float NOT NULL default '0',
|
`ppmRate` float NOT NULL default '0',
|
||||||
`CustomChance` float NOT NULL default '0',
|
`CustomChance` float NOT NULL default '0',
|
||||||
`Cooldown` int(10) unsigned NOT NULL default '0',
|
`Cooldown` int(10) unsigned NOT NULL default '0',
|
||||||
PRIMARY KEY (`entry`)
|
PRIMARY KEY (`entry`)
|
||||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||||
|
|
||||||
DROP TABLE IF EXISTS `player_xp_for_level`;
|
DROP TABLE IF EXISTS `player_xp_for_level`;
|
||||||
CREATE TABLE `player_xp_for_level` (
|
CREATE TABLE `player_xp_for_level` (
|
||||||
`lvl` int(3) unsigned NOT NULL,
|
`lvl` int(3) unsigned NOT NULL,
|
||||||
`xp_for_next_level` int(10) unsigned NOT NULL,
|
`xp_for_next_level` int(10) unsigned NOT NULL,
|
||||||
PRIMARY KEY (`lvl`)
|
PRIMARY KEY (`lvl`)
|
||||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||||
|
|
||||||
DROP TABLE IF EXISTS `spell_loot_template`;
|
DROP TABLE IF EXISTS `spell_loot_template`;
|
||||||
CREATE TABLE `spell_loot_template` (
|
CREATE TABLE `spell_loot_template` (
|
||||||
`entry` mediumint(8) unsigned NOT NULL default '0',
|
`entry` mediumint(8) unsigned NOT NULL default '0',
|
||||||
`item` mediumint(8) unsigned NOT NULL default '0',
|
`item` mediumint(8) unsigned NOT NULL default '0',
|
||||||
`ChanceOrQuestChance` float NOT NULL default '100',
|
`ChanceOrQuestChance` float NOT NULL default '100',
|
||||||
`groupid` tinyint(3) unsigned NOT NULL default '0',
|
`groupid` tinyint(3) unsigned NOT NULL default '0',
|
||||||
`mincountOrRef` mediumint(9) NOT NULL default '1',
|
`mincountOrRef` mediumint(9) NOT NULL default '1',
|
||||||
`maxcount` tinyint(3) unsigned NOT NULL default '1',
|
`maxcount` tinyint(3) unsigned NOT NULL default '1',
|
||||||
`lootcondition` tinyint(3) unsigned NOT NULL default '0',
|
`lootcondition` tinyint(3) unsigned NOT NULL default '0',
|
||||||
`condition_value1` mediumint(8) unsigned NOT NULL default '0',
|
`condition_value1` mediumint(8) unsigned NOT NULL default '0',
|
||||||
`condition_value2` mediumint(8) unsigned NOT NULL default '0',
|
`condition_value2` mediumint(8) unsigned NOT NULL default '0',
|
||||||
PRIMARY KEY (`entry`,`item`)
|
PRIMARY KEY (`entry`,`item`)
|
||||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Loot System';
|
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Loot System';
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
-- Script for Yrykul Skeleton - Prince Keleseth Event
|
|
||||||
update creature_template set scriptname = 'mob_vrykul_skeleton' where entry = 23970;
|
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
-- Script for Yrykul Skeleton - Prince Keleseth Event
|
||||||
|
UPDATE `creature_template` SET `ScriptName`='mob_vrykul_skeleton' WHERE `entry`=23970;
|
||||||
+2
-2
@@ -1,4 +1,4 @@
|
|||||||
ALTER TABLE character_db_version CHANGE COLUMN required_7314_01_characters_guild_rank required_7324_01_characters_character_spell bit;
|
/*ALTER TABLE character_db_version CHANGE COLUMN required_7314_01_characters_guild_rank required_7324_01_characters_character_spell bit;*/
|
||||||
|
|
||||||
/* remove some deleted spells or ranks from characters */
|
/* remove some deleted spells or ranks from characters */
|
||||||
/* Mana Tap no longer Blood Elf Racial */
|
/* Mana Tap no longer Blood Elf Racial */
|
||||||
@@ -10,4 +10,4 @@ DELETE FROM `character_spell` WHERE `spell` IN ('20616', '20617', '25272', '2527
|
|||||||
/* Overpower is only one rank now, need to delete these zzOLDRank spells */
|
/* Overpower is only one rank now, need to delete these zzOLDRank spells */
|
||||||
DELETE FROM `character_spell` WHERE `spell` IN ('7887', '11584', '11585');
|
DELETE FROM `character_spell` WHERE `spell` IN ('7887', '11584', '11585');
|
||||||
/* Shield Bash is only one rank now, need to delete these zzOLDRank spells */
|
/* Shield Bash is only one rank now, need to delete these zzOLDRank spells */
|
||||||
DELETE FROM `character_spell` WHERE `spell` IN ('1671', '1672', '29704');
|
DELETE FROM `character_spell` WHERE `spell` IN ('1671', '1672', '29704');
|
||||||
+2
-2
@@ -1,4 +1,4 @@
|
|||||||
ALTER TABLE character_db_version CHANGE COLUMN required_7324_01_characters_character_spell required_7324_02_characters_character_aura bit;
|
/*ALTER TABLE character_db_version CHANGE COLUMN required_7324_01_characters_character_spell required_7324_02_characters_character_aura bit;*/
|
||||||
|
|
||||||
/* remove some deleted spells or ranks from characters auras */
|
/* remove some deleted spells or ranks from characters auras */
|
||||||
/* Mana Tap no longer Blood Elf Racial */
|
/* Mana Tap no longer Blood Elf Racial */
|
||||||
@@ -10,4 +10,4 @@ DELETE FROM `character_aura` WHERE `spell` IN ('20616', '20617', '25272', '25275
|
|||||||
/* Overpower is only one rank now, need to delete these zzOLDRank spells */
|
/* Overpower is only one rank now, need to delete these zzOLDRank spells */
|
||||||
DELETE FROM `character_aura` WHERE `spell` IN ('7887', '11584', '11585');
|
DELETE FROM `character_aura` WHERE `spell` IN ('7887', '11584', '11585');
|
||||||
/* Shield Bash is only one rank now, need to delete these zzOLDRank spells */
|
/* Shield Bash is only one rank now, need to delete these zzOLDRank spells */
|
||||||
DELETE FROM `character_aura` WHERE `spell` IN ('1671', '1672', '29704');
|
DELETE FROM `character_aura` WHERE `spell` IN ('1671', '1672', '29704');
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
ALTER TABLE db_version CHANGE COLUMN required_7312_01_mangos_mangos_string required_7331_01_mangos_command bit;
|
/*ALTER TABLE db_version CHANGE COLUMN required_7312_01_mangos_mangos_string required_7331_01_mangos_command bit;*/
|
||||||
|
|
||||||
DELETE FROM `command` WHERE `name` = 'account set addon';
|
DELETE FROM `command` WHERE `name` = 'account set addon';
|
||||||
DELETE FROM `command` WHERE `name` = 'ban account';
|
DELETE FROM `command` WHERE `name` = 'ban account';
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
INSERT INTO `spell_linked_spell` (`spell_trigger`, `spell_effect`, `type`, `comment`) VALUES
|
||||||
|
(48077, 48075, 0, 'Holy Nova (rank8)'),
|
||||||
|
(48078, 48076, 0, 'Holy Nova (rank9)'),
|
||||||
|
(47585, 60069, 0, 'Dispersion (transform/regen)');
|
||||||
|
|
||||||
|
DELETE FROM `spell_proc_event` WHERE `entry` IN (47549);
|
||||||
|
INSERT INTO `spell_proc_event` VALUES (47549, 0x00, 6, 0x00000000, 0x00000200, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0);
|
||||||
|
DELETE FROM `spell_proc_event` WHERE `entry` IN (47551);
|
||||||
|
INSERT INTO `spell_proc_event` VALUES (47551, 0x00, 6, 0x00000000, 0x00000200, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0);
|
||||||
|
DELETE FROM `spell_proc_event` WHERE `entry` IN (47552);
|
||||||
|
INSERT INTO `spell_proc_event` VALUES (47552, 0x00, 6, 0x00000000, 0x00000200, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0);
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
-- Bloodsurge
|
||||||
|
DELETE FROM `spell_proc_event` WHERE `entry` IN (46915);
|
||||||
|
INSERT INTO `spell_proc_event` VALUES (46915, 0x00, 6, 0x00000040, 0x00000404, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0);
|
||||||
@@ -43,5 +43,11 @@ INSTALL(FILES
|
|||||||
1484_mangos_7307_01_characters_arena_team_member.sql
|
1484_mangos_7307_01_characters_arena_team_member.sql
|
||||||
1495_mangos_7312_01_world_trinity_string.sql
|
1495_mangos_7312_01_world_trinity_string.sql
|
||||||
1497_mangos_7314_01_characters_guild_rank.sql
|
1497_mangos_7314_01_characters_guild_rank.sql
|
||||||
|
1525_world_scripts.sql
|
||||||
|
1531_mangos_7324_01_characters_character_spell.sql
|
||||||
|
1531_mangos_7324_02_characters_character_aura.sql
|
||||||
|
1555_mangos_7331_01_world_command.sql
|
||||||
1558_world_spell_linked_spell.sql
|
1558_world_spell_linked_spell.sql
|
||||||
|
1559_world.sql
|
||||||
|
1570_world.sql
|
||||||
DESTINATION share/trinity/sql/updates)
|
DESTINATION share/trinity/sql/updates)
|
||||||
@@ -313,6 +313,7 @@ UPDATE `creature_template` SET `ScriptName`='npc_saat' WHERE `entry`=20201;
|
|||||||
/* THE UNDERBOG */
|
/* THE UNDERBOG */
|
||||||
UPDATE `creature_template` SET `ScriptName`='mob_underbog_mushroom' WHERE `entry`=17990;
|
UPDATE `creature_template` SET `ScriptName`='mob_underbog_mushroom' WHERE `entry`=17990;
|
||||||
UPDATE `creature_template` SET `ScriptName`='boss_hungarfen' WHERE `entry`=17770;
|
UPDATE `creature_template` SET `ScriptName`='boss_hungarfen' WHERE `entry`=17770;
|
||||||
|
UPDATE `creature_template` SET `ScriptName`='boss_the_black_stalker' WHERE `entry`='17882';
|
||||||
|
|
||||||
/* THE STEAMVAULT */
|
/* THE STEAMVAULT */
|
||||||
UPDATE `instance_template` SET `script`='instance_steam_vault' WHERE `map`=545;
|
UPDATE `instance_template` SET `script`='instance_steam_vault' WHERE `map`=545;
|
||||||
@@ -330,6 +331,7 @@ UPDATE `creature_template` SET `ScriptName`='mob_toxic_sporebat' WHERE `entry`=2
|
|||||||
/* Leotheras the Blind event */
|
/* Leotheras the Blind event */
|
||||||
UPDATE `creature_template` SET `ScriptName`='boss_leotheras_the_blind' WHERE `entry`=21215;
|
UPDATE `creature_template` SET `ScriptName`='boss_leotheras_the_blind' WHERE `entry`=21215;
|
||||||
UPDATE `creature_template` SET `ScriptName`='boss_leotheras_the_blind_demonform' WHERE `entry`=21845;
|
UPDATE `creature_template` SET `ScriptName`='boss_leotheras_the_blind_demonform' WHERE `entry`=21845;
|
||||||
|
UPDATE `creature_template` SET `ScriptName`='mob_greyheart_spellbinder' WHERE `entry` = '21806';
|
||||||
/* Fathom-lord Karathress event */
|
/* Fathom-lord Karathress event */
|
||||||
UPDATE `creature_template` SET `ScriptName`='boss_fathomlord_karathress' WHERE `entry`=21214;
|
UPDATE `creature_template` SET `ScriptName`='boss_fathomlord_karathress' WHERE `entry`=21214;
|
||||||
UPDATE `creature_template` SET `ScriptName`='boss_fathomguard_sharkkis' WHERE `entry`=21966;
|
UPDATE `creature_template` SET `ScriptName`='boss_fathomguard_sharkkis' WHERE `entry`=21966;
|
||||||
@@ -905,6 +907,7 @@ UPDATE `creature_template` SET `ScriptName`='npc_parqual_fintallas' WHERE `entry
|
|||||||
UPDATE `creature_template` SET `scriptname` = 'boss_keleseth' WHERE `entry` = '23953';
|
UPDATE `creature_template` SET `scriptname` = 'boss_keleseth' WHERE `entry` = '23953';
|
||||||
UPDATE `creature_template` SET `scriptname` = 'mob_frost_tomb' WHERE `entry` = '23965';
|
UPDATE `creature_template` SET `scriptname` = 'mob_frost_tomb' WHERE `entry` = '23965';
|
||||||
UPDATE `instance_template` SET `script`='instance_utgarde_keep' WHERE `map`= '574';
|
UPDATE `instance_template` SET `script`='instance_utgarde_keep' WHERE `map`= '574';
|
||||||
|
UPDATE `creature_template` SET `ScriptName`='mob_vrykul_skeleton' WHERE `entry`=23970;
|
||||||
|
|
||||||
/* WAILING CAVERNS */
|
/* WAILING CAVERNS */
|
||||||
|
|
||||||
@@ -954,6 +957,7 @@ UPDATE `creature_template` SET `ScriptName` = 'boss_koragg' WHERE `entry` =24247
|
|||||||
UPDATE `creature_template` SET `ScriptName` = 'boss_zuljin' WHERE `entry` =23863;
|
UPDATE `creature_template` SET `ScriptName` = 'boss_zuljin' WHERE `entry` =23863;
|
||||||
UPDATE `creature_template` SET `ScriptName` = 'do_nothing' WHERE `entry` = '24187';
|
UPDATE `creature_template` SET `ScriptName` = 'do_nothing' WHERE `entry` = '24187';
|
||||||
UPDATE `creature_template` SET `ScriptName` = 'mob_zuljin_vortex' WHERE `entry` = '24136';
|
UPDATE `creature_template` SET `ScriptName` = 'mob_zuljin_vortex' WHERE `entry` = '24136';
|
||||||
|
UPDATE `creature_template` SET `ScriptName` = 'npc_zulaman_hostage' WHERE `entry` IN (23790, 23999, 24024, 24001);
|
||||||
|
|
||||||
/* ZUL'FARRAK */
|
/* ZUL'FARRAK */
|
||||||
UPDATE `creature_template` SET `ScriptName`='npc_sergeant_bly' WHERE `entry`=7604;
|
UPDATE `creature_template` SET `ScriptName`='npc_sergeant_bly' WHERE `entry`=7604;
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
+450
-450
@@ -1,450 +1,450 @@
|
|||||||
/* Copyright (C) 2006 - 2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>.sourceforge.net/>
|
/* Copyright (C) 2006 - 2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>.sourceforge.net/>
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
* the Free Software Foundation; either version 2 of the License, or
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
* (at your option) any later version.
|
* (at your option) any later version.
|
||||||
*
|
*
|
||||||
* This program is distributed in the hope that it will be useful,
|
* This program is distributed in the hope that it will be useful,
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program; if not, write to the Free Software
|
* along with this program; if not, write to the Free Software
|
||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* ScriptData
|
/* ScriptData
|
||||||
SDName: Blades_Edge_Mountains
|
SDName: Blades_Edge_Mountains
|
||||||
SD%Complete: 90
|
SD%Complete: 90
|
||||||
SDComment: Quest support: 10503, 10504, 10556, 10609, 10682, 10821, 10980. Ogri'la->Skettis Flight. (npc_daranelle needs bit more work before consider complete)
|
SDComment: Quest support: 10503, 10504, 10556, 10609, 10682, 10821, 10980. Ogri'la->Skettis Flight. (npc_daranelle needs bit more work before consider complete)
|
||||||
SDCategory: Blade's Edge Mountains
|
SDCategory: Blade's Edge Mountains
|
||||||
EndScriptData */
|
EndScriptData */
|
||||||
|
|
||||||
/* ContentData
|
/* ContentData
|
||||||
mobs_bladespire_ogre
|
mobs_bladespire_ogre
|
||||||
mobs_nether_drake
|
mobs_nether_drake
|
||||||
npc_daranelle
|
npc_daranelle
|
||||||
npc_overseer_nuaar
|
npc_overseer_nuaar
|
||||||
npc_saikkal_the_elder
|
npc_saikkal_the_elder
|
||||||
npc_skyguard_handler_irena
|
npc_skyguard_handler_irena
|
||||||
go_legion_obelisk
|
go_legion_obelisk
|
||||||
EndContentData */
|
EndContentData */
|
||||||
|
|
||||||
#include "precompiled.h"
|
#include "precompiled.h"
|
||||||
|
|
||||||
//Support for quest: You're Fired! (10821)
|
//Support for quest: You're Fired! (10821)
|
||||||
bool obelisk_one, obelisk_two, obelisk_three, obelisk_four, obelisk_five;
|
bool obelisk_one, obelisk_two, obelisk_three, obelisk_four, obelisk_five;
|
||||||
|
|
||||||
#define LEGION_OBELISK_ONE 185193
|
#define LEGION_OBELISK_ONE 185193
|
||||||
#define LEGION_OBELISK_TWO 185195
|
#define LEGION_OBELISK_TWO 185195
|
||||||
#define LEGION_OBELISK_THREE 185196
|
#define LEGION_OBELISK_THREE 185196
|
||||||
#define LEGION_OBELISK_FOUR 185197
|
#define LEGION_OBELISK_FOUR 185197
|
||||||
#define LEGION_OBELISK_FIVE 185198
|
#define LEGION_OBELISK_FIVE 185198
|
||||||
|
|
||||||
/*######
|
/*######
|
||||||
## mobs_bladespire_ogre
|
## mobs_bladespire_ogre
|
||||||
######*/
|
######*/
|
||||||
|
|
||||||
//TODO: add support for quest 10512 + creature abilities
|
//TODO: add support for quest 10512 + creature abilities
|
||||||
struct TRINITY_DLL_DECL mobs_bladespire_ogreAI : public ScriptedAI
|
struct TRINITY_DLL_DECL mobs_bladespire_ogreAI : public ScriptedAI
|
||||||
{
|
{
|
||||||
mobs_bladespire_ogreAI(Creature *c) : ScriptedAI(c) {Reset();}
|
mobs_bladespire_ogreAI(Creature *c) : ScriptedAI(c) {Reset();}
|
||||||
|
|
||||||
void Reset()
|
void Reset()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void Aggro(Unit* who)
|
void Aggro(Unit* who)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void JustDied(Unit* Killer)
|
void JustDied(Unit* Killer)
|
||||||
{
|
{
|
||||||
if (Killer->GetTypeId() == TYPEID_PLAYER)
|
if (Killer->GetTypeId() == TYPEID_PLAYER)
|
||||||
((Player*)Killer)->KilledMonster(19995, m_creature->GetGUID());
|
((Player*)Killer)->KilledMonster(19995, m_creature->GetGUID());
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
CreatureAI* GetAI_mobs_bladespire_ogre(Creature *_Creature)
|
CreatureAI* GetAI_mobs_bladespire_ogre(Creature *_Creature)
|
||||||
{
|
{
|
||||||
return new mobs_bladespire_ogreAI (_Creature);
|
return new mobs_bladespire_ogreAI (_Creature);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*######
|
/*######
|
||||||
## mobs_nether_drake
|
## mobs_nether_drake
|
||||||
######*/
|
######*/
|
||||||
|
|
||||||
#define SAY_NIHIL_1 -1000396
|
#define SAY_NIHIL_1 -1000396
|
||||||
#define SAY_NIHIL_2 -1000397
|
#define SAY_NIHIL_2 -1000397
|
||||||
#define SAY_NIHIL_3 -1000398
|
#define SAY_NIHIL_3 -1000398
|
||||||
#define SAY_NIHIL_4 -1000399
|
#define SAY_NIHIL_4 -1000399
|
||||||
#define SAY_NIHIL_INTERRUPT -1000400
|
#define SAY_NIHIL_INTERRUPT -1000400
|
||||||
|
|
||||||
#define ENTRY_WHELP 20021
|
#define ENTRY_WHELP 20021
|
||||||
#define ENTRY_PROTO 21821
|
#define ENTRY_PROTO 21821
|
||||||
#define ENTRY_ADOLE 21817
|
#define ENTRY_ADOLE 21817
|
||||||
#define ENTRY_MATUR 21820
|
#define ENTRY_MATUR 21820
|
||||||
#define ENTRY_NIHIL 21823
|
#define ENTRY_NIHIL 21823
|
||||||
|
|
||||||
#define SPELL_T_PHASE_MODULATOR 37573
|
#define SPELL_T_PHASE_MODULATOR 37573
|
||||||
|
|
||||||
#define SPELL_ARCANE_BLAST 38881
|
#define SPELL_ARCANE_BLAST 38881
|
||||||
#define SPELL_MANA_BURN 38884
|
#define SPELL_MANA_BURN 38884
|
||||||
#define SPELL_INTANGIBLE_PRESENCE 36513
|
#define SPELL_INTANGIBLE_PRESENCE 36513
|
||||||
|
|
||||||
struct TRINITY_DLL_DECL mobs_nether_drakeAI : public ScriptedAI
|
struct TRINITY_DLL_DECL mobs_nether_drakeAI : public ScriptedAI
|
||||||
{
|
{
|
||||||
mobs_nether_drakeAI(Creature *c) : ScriptedAI(c) {Reset();}
|
mobs_nether_drakeAI(Creature *c) : ScriptedAI(c) {Reset();}
|
||||||
|
|
||||||
bool IsNihil;
|
bool IsNihil;
|
||||||
uint32 NihilSpeech_Timer;
|
uint32 NihilSpeech_Timer;
|
||||||
uint32 NihilSpeech_Phase;
|
uint32 NihilSpeech_Phase;
|
||||||
|
|
||||||
uint32 ArcaneBlast_Timer;
|
uint32 ArcaneBlast_Timer;
|
||||||
uint32 ManaBurn_Timer;
|
uint32 ManaBurn_Timer;
|
||||||
uint32 IntangiblePresence_Timer;
|
uint32 IntangiblePresence_Timer;
|
||||||
|
|
||||||
void Reset()
|
void Reset()
|
||||||
{
|
{
|
||||||
IsNihil = false;
|
IsNihil = false;
|
||||||
NihilSpeech_Timer = 3000;
|
NihilSpeech_Timer = 3000;
|
||||||
NihilSpeech_Phase = 0;
|
NihilSpeech_Phase = 0;
|
||||||
|
|
||||||
ArcaneBlast_Timer = 7500;
|
ArcaneBlast_Timer = 7500;
|
||||||
ManaBurn_Timer = 10000;
|
ManaBurn_Timer = 10000;
|
||||||
IntangiblePresence_Timer = 15000;
|
IntangiblePresence_Timer = 15000;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Aggro(Unit* who) { }
|
void Aggro(Unit* who) { }
|
||||||
|
|
||||||
void MoveInLineOfSight(Unit *who)
|
void MoveInLineOfSight(Unit *who)
|
||||||
{
|
{
|
||||||
if (m_creature->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE))
|
if (m_creature->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
ScriptedAI::MoveInLineOfSight(who);
|
ScriptedAI::MoveInLineOfSight(who);
|
||||||
}
|
}
|
||||||
|
|
||||||
//in case creature was not summoned (not expected)
|
//in case creature was not summoned (not expected)
|
||||||
void MovementInform(uint32 type, uint32 id)
|
void MovementInform(uint32 type, uint32 id)
|
||||||
{
|
{
|
||||||
if (type != POINT_MOTION_TYPE)
|
if (type != POINT_MOTION_TYPE)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (id == 0)
|
if (id == 0)
|
||||||
{
|
{
|
||||||
m_creature->setDeathState(JUST_DIED);
|
m_creature->setDeathState(JUST_DIED);
|
||||||
m_creature->RemoveCorpse();
|
m_creature->RemoveCorpse();
|
||||||
m_creature->SetHealth(0);
|
m_creature->SetHealth(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void SpellHit(Unit *caster, const SpellEntry *spell)
|
void SpellHit(Unit *caster, const SpellEntry *spell)
|
||||||
{
|
{
|
||||||
if (spell->Id == SPELL_T_PHASE_MODULATOR && caster->GetTypeId() == TYPEID_PLAYER)
|
if (spell->Id == SPELL_T_PHASE_MODULATOR && caster->GetTypeId() == TYPEID_PLAYER)
|
||||||
{
|
{
|
||||||
const uint32 entry_list[4] = {ENTRY_PROTO, ENTRY_ADOLE, ENTRY_MATUR, ENTRY_NIHIL};
|
const uint32 entry_list[4] = {ENTRY_PROTO, ENTRY_ADOLE, ENTRY_MATUR, ENTRY_NIHIL};
|
||||||
int cid = rand()%(4-1);
|
int cid = rand()%(4-1);
|
||||||
|
|
||||||
if (entry_list[cid] == m_creature->GetEntry())
|
if (entry_list[cid] == m_creature->GetEntry())
|
||||||
++cid;
|
++cid;
|
||||||
|
|
||||||
//we are nihil, so say before transform
|
//we are nihil, so say before transform
|
||||||
if (m_creature->GetEntry() == ENTRY_NIHIL)
|
if (m_creature->GetEntry() == ENTRY_NIHIL)
|
||||||
{
|
{
|
||||||
DoScriptText(SAY_NIHIL_INTERRUPT, m_creature);
|
DoScriptText(SAY_NIHIL_INTERRUPT, m_creature);
|
||||||
m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||||
IsNihil = false;
|
IsNihil = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_creature->UpdateEntry(entry_list[cid]))
|
if (m_creature->UpdateEntry(entry_list[cid]))
|
||||||
{
|
{
|
||||||
if (entry_list[cid] == ENTRY_NIHIL)
|
if (entry_list[cid] == ENTRY_NIHIL)
|
||||||
{
|
{
|
||||||
EnterEvadeMode();
|
EnterEvadeMode();
|
||||||
m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||||
IsNihil = true;
|
IsNihil = true;
|
||||||
}else
|
}else
|
||||||
AttackStart(caster);
|
AttackStart(caster);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void UpdateAI(const uint32 diff)
|
void UpdateAI(const uint32 diff)
|
||||||
{
|
{
|
||||||
if (IsNihil)
|
if (IsNihil)
|
||||||
{
|
{
|
||||||
if (NihilSpeech_Timer <= diff)
|
if (NihilSpeech_Timer <= diff)
|
||||||
{
|
{
|
||||||
switch(NihilSpeech_Phase)
|
switch(NihilSpeech_Phase)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
DoScriptText(SAY_NIHIL_1, m_creature);
|
DoScriptText(SAY_NIHIL_1, m_creature);
|
||||||
++NihilSpeech_Phase;
|
++NihilSpeech_Phase;
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
DoScriptText(SAY_NIHIL_2, m_creature);
|
DoScriptText(SAY_NIHIL_2, m_creature);
|
||||||
++NihilSpeech_Phase;
|
++NihilSpeech_Phase;
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
DoScriptText(SAY_NIHIL_3, m_creature);
|
DoScriptText(SAY_NIHIL_3, m_creature);
|
||||||
++NihilSpeech_Phase;
|
++NihilSpeech_Phase;
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
DoScriptText(SAY_NIHIL_4, m_creature);
|
DoScriptText(SAY_NIHIL_4, m_creature);
|
||||||
++NihilSpeech_Phase;
|
++NihilSpeech_Phase;
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
||||||
//take off to location above
|
//take off to location above
|
||||||
m_creature->GetMotionMaster()->MovePoint(0, m_creature->GetPositionX()+50.0f, m_creature->GetPositionY(), m_creature->GetPositionZ()+50.0f);
|
m_creature->GetMotionMaster()->MovePoint(0, m_creature->GetPositionX()+50.0f, m_creature->GetPositionY(), m_creature->GetPositionZ()+50.0f);
|
||||||
++NihilSpeech_Phase;
|
++NihilSpeech_Phase;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
NihilSpeech_Timer = 5000;
|
NihilSpeech_Timer = 5000;
|
||||||
}else NihilSpeech_Timer -=diff;
|
}else NihilSpeech_Timer -=diff;
|
||||||
|
|
||||||
//anything below here is not interesting for Nihil, so skip it
|
//anything below here is not interesting for Nihil, so skip it
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!UpdateVictim() )
|
if (!UpdateVictim() )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (IntangiblePresence_Timer <= diff)
|
if (IntangiblePresence_Timer <= diff)
|
||||||
{
|
{
|
||||||
DoCast(m_creature->getVictim(),SPELL_INTANGIBLE_PRESENCE);
|
DoCast(m_creature->getVictim(),SPELL_INTANGIBLE_PRESENCE);
|
||||||
IntangiblePresence_Timer = 15000+rand()%15000;
|
IntangiblePresence_Timer = 15000+rand()%15000;
|
||||||
}else IntangiblePresence_Timer -= diff;
|
}else IntangiblePresence_Timer -= diff;
|
||||||
|
|
||||||
if (ManaBurn_Timer <= diff)
|
if (ManaBurn_Timer <= diff)
|
||||||
{
|
{
|
||||||
Unit* target = m_creature->getVictim();
|
Unit* target = m_creature->getVictim();
|
||||||
if (target && target->getPowerType() == POWER_MANA)
|
if (target && target->getPowerType() == POWER_MANA)
|
||||||
DoCast(target,SPELL_MANA_BURN);
|
DoCast(target,SPELL_MANA_BURN);
|
||||||
ManaBurn_Timer = 8000+rand()%8000;
|
ManaBurn_Timer = 8000+rand()%8000;
|
||||||
}else ManaBurn_Timer -= diff;
|
}else ManaBurn_Timer -= diff;
|
||||||
|
|
||||||
if (ArcaneBlast_Timer <= diff)
|
if (ArcaneBlast_Timer <= diff)
|
||||||
{
|
{
|
||||||
DoCast(m_creature->getVictim(),SPELL_ARCANE_BLAST);
|
DoCast(m_creature->getVictim(),SPELL_ARCANE_BLAST);
|
||||||
ArcaneBlast_Timer = 2500+rand()%5000;
|
ArcaneBlast_Timer = 2500+rand()%5000;
|
||||||
}else ArcaneBlast_Timer -= diff;
|
}else ArcaneBlast_Timer -= diff;
|
||||||
|
|
||||||
DoMeleeAttackIfReady();
|
DoMeleeAttackIfReady();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
CreatureAI* GetAI_mobs_nether_drake(Creature *_Creature)
|
CreatureAI* GetAI_mobs_nether_drake(Creature *_Creature)
|
||||||
{
|
{
|
||||||
return new mobs_nether_drakeAI (_Creature);
|
return new mobs_nether_drakeAI (_Creature);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*######
|
/*######
|
||||||
## npc_daranelle
|
## npc_daranelle
|
||||||
######*/
|
######*/
|
||||||
|
|
||||||
#define SAY_SPELL_INFLUENCE -1000174
|
#define SAY_SPELL_INFLUENCE -1000174
|
||||||
|
|
||||||
struct TRINITY_DLL_DECL npc_daranelleAI : public ScriptedAI
|
struct TRINITY_DLL_DECL npc_daranelleAI : public ScriptedAI
|
||||||
{
|
{
|
||||||
npc_daranelleAI(Creature *c) : ScriptedAI(c) {Reset();}
|
npc_daranelleAI(Creature *c) : ScriptedAI(c) {Reset();}
|
||||||
|
|
||||||
void Reset() { }
|
void Reset() { }
|
||||||
|
|
||||||
void Aggro(Unit* who) { }
|
void Aggro(Unit* who) { }
|
||||||
|
|
||||||
void MoveInLineOfSight(Unit *who)
|
void MoveInLineOfSight(Unit *who)
|
||||||
{
|
{
|
||||||
if (who->GetTypeId() == TYPEID_PLAYER)
|
if (who->GetTypeId() == TYPEID_PLAYER)
|
||||||
{
|
{
|
||||||
if (who->HasAura(36904,0) && m_creature->IsWithinDistInMap(who, 10.0f))
|
if (who->HasAura(36904,0) && m_creature->IsWithinDistInMap(who, 10.0f))
|
||||||
{
|
{
|
||||||
DoScriptText(SAY_SPELL_INFLUENCE, m_creature, who);
|
DoScriptText(SAY_SPELL_INFLUENCE, m_creature, who);
|
||||||
//TODO: Move the below to updateAI and run if this statement == true
|
//TODO: Move the below to updateAI and run if this statement == true
|
||||||
((Player*)who)->KilledMonster(21511, m_creature->GetGUID());
|
((Player*)who)->KilledMonster(21511, m_creature->GetGUID());
|
||||||
((Player*)who)->RemoveAurasDueToSpell(36904);
|
((Player*)who)->RemoveAurasDueToSpell(36904);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ScriptedAI::MoveInLineOfSight(who);
|
ScriptedAI::MoveInLineOfSight(who);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
CreatureAI* GetAI_npc_daranelle(Creature *_Creature)
|
CreatureAI* GetAI_npc_daranelle(Creature *_Creature)
|
||||||
{
|
{
|
||||||
return new npc_daranelleAI (_Creature);
|
return new npc_daranelleAI (_Creature);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*######
|
/*######
|
||||||
## npc_overseer_nuaar
|
## npc_overseer_nuaar
|
||||||
######*/
|
######*/
|
||||||
|
|
||||||
bool GossipHello_npc_overseer_nuaar(Player *player, Creature *_Creature)
|
bool GossipHello_npc_overseer_nuaar(Player *player, Creature *_Creature)
|
||||||
{
|
{
|
||||||
if (player->GetQuestStatus(10682) == QUEST_STATUS_INCOMPLETE)
|
if (player->GetQuestStatus(10682) == QUEST_STATUS_INCOMPLETE)
|
||||||
player->ADD_GOSSIP_ITEM( 0, "Overseer, I am here to negotiate on behalf of the Cenarion Expedition.", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
|
player->ADD_GOSSIP_ITEM( 0, "Overseer, I am here to negotiate on behalf of the Cenarion Expedition.", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
|
||||||
|
|
||||||
player->SEND_GOSSIP_MENU(10532, _Creature->GetGUID());
|
player->SEND_GOSSIP_MENU(10532, _Creature->GetGUID());
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool GossipSelect_npc_overseer_nuaar(Player *player, Creature *_Creature, uint32 sender, uint32 action)
|
bool GossipSelect_npc_overseer_nuaar(Player *player, Creature *_Creature, uint32 sender, uint32 action)
|
||||||
{
|
{
|
||||||
if (action == GOSSIP_ACTION_INFO_DEF+1)
|
if (action == GOSSIP_ACTION_INFO_DEF+1)
|
||||||
{
|
{
|
||||||
player->SEND_GOSSIP_MENU(10533, _Creature->GetGUID());
|
player->SEND_GOSSIP_MENU(10533, _Creature->GetGUID());
|
||||||
player->AreaExploredOrEventHappens(10682);
|
player->AreaExploredOrEventHappens(10682);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*######
|
/*######
|
||||||
## npc_saikkal_the_elder
|
## npc_saikkal_the_elder
|
||||||
######*/
|
######*/
|
||||||
|
|
||||||
bool GossipHello_npc_saikkal_the_elder(Player *player, Creature *_Creature)
|
bool GossipHello_npc_saikkal_the_elder(Player *player, Creature *_Creature)
|
||||||
{
|
{
|
||||||
if (player->GetQuestStatus(10980) == QUEST_STATUS_INCOMPLETE)
|
if (player->GetQuestStatus(10980) == QUEST_STATUS_INCOMPLETE)
|
||||||
player->ADD_GOSSIP_ITEM( 0, "Yes... yes, it's me.", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
|
player->ADD_GOSSIP_ITEM( 0, "Yes... yes, it's me.", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
|
||||||
|
|
||||||
player->SEND_GOSSIP_MENU(10794, _Creature->GetGUID());
|
player->SEND_GOSSIP_MENU(10794, _Creature->GetGUID());
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool GossipSelect_npc_saikkal_the_elder(Player *player, Creature *_Creature, uint32 sender, uint32 action)
|
bool GossipSelect_npc_saikkal_the_elder(Player *player, Creature *_Creature, uint32 sender, uint32 action)
|
||||||
{
|
{
|
||||||
switch (action)
|
switch (action)
|
||||||
{
|
{
|
||||||
case GOSSIP_ACTION_INFO_DEF+1:
|
case GOSSIP_ACTION_INFO_DEF+1:
|
||||||
player->ADD_GOSSIP_ITEM( 0, "Yes elder. Tell me more of the book.", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+2);
|
player->ADD_GOSSIP_ITEM( 0, "Yes elder. Tell me more of the book.", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+2);
|
||||||
player->SEND_GOSSIP_MENU(10795, _Creature->GetGUID());
|
player->SEND_GOSSIP_MENU(10795, _Creature->GetGUID());
|
||||||
break;
|
break;
|
||||||
case GOSSIP_ACTION_INFO_DEF+2:
|
case GOSSIP_ACTION_INFO_DEF+2:
|
||||||
player->TalkedToCreature(_Creature->GetEntry(), _Creature->GetGUID());
|
player->TalkedToCreature(_Creature->GetEntry(), _Creature->GetGUID());
|
||||||
player->SEND_GOSSIP_MENU(10796, _Creature->GetGUID());
|
player->SEND_GOSSIP_MENU(10796, _Creature->GetGUID());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*######
|
/*######
|
||||||
## npc_skyguard_handler_irena
|
## npc_skyguard_handler_irena
|
||||||
######*/
|
######*/
|
||||||
|
|
||||||
#define GOSSIP_SKYGUARD "Fly me to Skettis please"
|
#define GOSSIP_SKYGUARD "Fly me to Skettis please"
|
||||||
|
|
||||||
bool GossipHello_npc_skyguard_handler_irena(Player *player, Creature *_Creature )
|
bool GossipHello_npc_skyguard_handler_irena(Player *player, Creature *_Creature )
|
||||||
{
|
{
|
||||||
if (_Creature->isQuestGiver())
|
if (_Creature->isQuestGiver())
|
||||||
player->PrepareQuestMenu( _Creature->GetGUID() );
|
player->PrepareQuestMenu( _Creature->GetGUID() );
|
||||||
|
|
||||||
if (player->GetReputationRank(1031) >= REP_HONORED)
|
if (player->GetReputationRank(1031) >= REP_HONORED)
|
||||||
player->ADD_GOSSIP_ITEM( 2, GOSSIP_SKYGUARD, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
|
player->ADD_GOSSIP_ITEM( 2, GOSSIP_SKYGUARD, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
|
||||||
|
|
||||||
player->SEND_GOSSIP_MENU(_Creature->GetNpcTextId(), _Creature->GetGUID());
|
player->SEND_GOSSIP_MENU(_Creature->GetNpcTextId(), _Creature->GetGUID());
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool GossipSelect_npc_skyguard_handler_irena(Player *player, Creature *_Creature, uint32 sender, uint32 action )
|
bool GossipSelect_npc_skyguard_handler_irena(Player *player, Creature *_Creature, uint32 sender, uint32 action )
|
||||||
{
|
{
|
||||||
if (action == GOSSIP_ACTION_INFO_DEF+1)
|
if (action == GOSSIP_ACTION_INFO_DEF+1)
|
||||||
{
|
{
|
||||||
player->CLOSE_GOSSIP_MENU();
|
player->CLOSE_GOSSIP_MENU();
|
||||||
player->CastSpell(player,41278,true); //TaxiPath 706
|
player->CastSpell(player,41278,true); //TaxiPath 706
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*######
|
/*######
|
||||||
## go_legion_obelisk
|
## go_legion_obelisk
|
||||||
######*/
|
######*/
|
||||||
|
|
||||||
bool GOHello_go_legion_obelisk(Player *player, GameObject* _GO)
|
bool GOHello_go_legion_obelisk(Player *player, GameObject* _GO)
|
||||||
{
|
{
|
||||||
if ( player->GetQuestStatus(10821) == QUEST_STATUS_INCOMPLETE )
|
if ( player->GetQuestStatus(10821) == QUEST_STATUS_INCOMPLETE )
|
||||||
{
|
{
|
||||||
switch( _GO->GetEntry() )
|
switch( _GO->GetEntry() )
|
||||||
{
|
{
|
||||||
case LEGION_OBELISK_ONE:
|
case LEGION_OBELISK_ONE:
|
||||||
obelisk_one = true;
|
obelisk_one = true;
|
||||||
break;
|
break;
|
||||||
case LEGION_OBELISK_TWO:
|
case LEGION_OBELISK_TWO:
|
||||||
obelisk_two = true;
|
obelisk_two = true;
|
||||||
break;
|
break;
|
||||||
case LEGION_OBELISK_THREE:
|
case LEGION_OBELISK_THREE:
|
||||||
obelisk_three = true;
|
obelisk_three = true;
|
||||||
break;
|
break;
|
||||||
case LEGION_OBELISK_FOUR:
|
case LEGION_OBELISK_FOUR:
|
||||||
obelisk_four = true;
|
obelisk_four = true;
|
||||||
break;
|
break;
|
||||||
case LEGION_OBELISK_FIVE:
|
case LEGION_OBELISK_FIVE:
|
||||||
obelisk_five = true;
|
obelisk_five = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( obelisk_one == true && obelisk_two == true && obelisk_three == true && obelisk_four == true && obelisk_five == true )
|
if ( obelisk_one == true && obelisk_two == true && obelisk_three == true && obelisk_four == true && obelisk_five == true )
|
||||||
{
|
{
|
||||||
_GO->SummonCreature(19963,2943.40f,4778.20f,284.49f,0.94f,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,120000);
|
_GO->SummonCreature(19963,2943.40f,4778.20f,284.49f,0.94f,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,120000);
|
||||||
//reset global var
|
//reset global var
|
||||||
obelisk_one = false;
|
obelisk_one = false;
|
||||||
obelisk_two = false;
|
obelisk_two = false;
|
||||||
obelisk_three = false;
|
obelisk_three = false;
|
||||||
obelisk_four = false;
|
obelisk_four = false;
|
||||||
obelisk_five = false;
|
obelisk_five = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*######
|
/*######
|
||||||
## AddSC
|
## AddSC
|
||||||
######*/
|
######*/
|
||||||
|
|
||||||
void AddSC_blades_edge_mountains()
|
void AddSC_blades_edge_mountains()
|
||||||
{
|
{
|
||||||
Script *newscript;
|
Script *newscript;
|
||||||
|
|
||||||
newscript = new Script;
|
newscript = new Script;
|
||||||
newscript->Name="mobs_bladespire_ogre";
|
newscript->Name="mobs_bladespire_ogre";
|
||||||
newscript->GetAI = &GetAI_mobs_bladespire_ogre;
|
newscript->GetAI = &GetAI_mobs_bladespire_ogre;
|
||||||
newscript->RegisterSelf();
|
newscript->RegisterSelf();
|
||||||
|
|
||||||
newscript = new Script;
|
newscript = new Script;
|
||||||
newscript->Name="mobs_nether_drake";
|
newscript->Name="mobs_nether_drake";
|
||||||
newscript->GetAI = &GetAI_mobs_nether_drake;
|
newscript->GetAI = &GetAI_mobs_nether_drake;
|
||||||
newscript->RegisterSelf();
|
newscript->RegisterSelf();
|
||||||
|
|
||||||
newscript = new Script;
|
newscript = new Script;
|
||||||
newscript->Name="npc_daranelle";
|
newscript->Name="npc_daranelle";
|
||||||
newscript->GetAI = &GetAI_npc_daranelle;
|
newscript->GetAI = &GetAI_npc_daranelle;
|
||||||
newscript->RegisterSelf();
|
newscript->RegisterSelf();
|
||||||
|
|
||||||
newscript = new Script;
|
newscript = new Script;
|
||||||
newscript->Name="npc_overseer_nuaar";
|
newscript->Name="npc_overseer_nuaar";
|
||||||
newscript->pGossipHello = &GossipHello_npc_overseer_nuaar;
|
newscript->pGossipHello = &GossipHello_npc_overseer_nuaar;
|
||||||
newscript->pGossipSelect = &GossipSelect_npc_overseer_nuaar;
|
newscript->pGossipSelect = &GossipSelect_npc_overseer_nuaar;
|
||||||
newscript->RegisterSelf();
|
newscript->RegisterSelf();
|
||||||
|
|
||||||
newscript = new Script;
|
newscript = new Script;
|
||||||
newscript->Name="npc_saikkal_the_elder";
|
newscript->Name="npc_saikkal_the_elder";
|
||||||
newscript->pGossipHello = &GossipHello_npc_saikkal_the_elder;
|
newscript->pGossipHello = &GossipHello_npc_saikkal_the_elder;
|
||||||
newscript->pGossipSelect = &GossipSelect_npc_saikkal_the_elder;
|
newscript->pGossipSelect = &GossipSelect_npc_saikkal_the_elder;
|
||||||
newscript->RegisterSelf();
|
newscript->RegisterSelf();
|
||||||
|
|
||||||
newscript = new Script;
|
newscript = new Script;
|
||||||
newscript->Name="go_legion_obelisk";
|
newscript->Name="go_legion_obelisk";
|
||||||
newscript->pGOHello = &GOHello_go_legion_obelisk;
|
newscript->pGOHello = &GOHello_go_legion_obelisk;
|
||||||
newscript->RegisterSelf();
|
newscript->RegisterSelf();
|
||||||
|
|
||||||
newscript = new Script;
|
newscript = new Script;
|
||||||
newscript->Name="npc_skyguard_handler_irena";
|
newscript->Name="npc_skyguard_handler_irena";
|
||||||
newscript->pGossipHello = &GossipHello_npc_skyguard_handler_irena;
|
newscript->pGossipHello = &GossipHello_npc_skyguard_handler_irena;
|
||||||
newscript->pGossipSelect = &GossipSelect_npc_skyguard_handler_irena;
|
newscript->pGossipSelect = &GossipSelect_npc_skyguard_handler_irena;
|
||||||
newscript->RegisterSelf();
|
newscript->RegisterSelf();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
+121
-121
@@ -1,121 +1,121 @@
|
|||||||
/* Copyright (C) 2006 - 2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
|
/* Copyright (C) 2006 - 2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
* the Free Software Foundation; either version 2 of the License, or
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
* (at your option) any later version.
|
* (at your option) any later version.
|
||||||
*
|
*
|
||||||
* This program is distributed in the hope that it will be useful,
|
* This program is distributed in the hope that it will be useful,
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program; if not, write to the Free Software
|
* along with this program; if not, write to the Free Software
|
||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* ScriptData
|
/* ScriptData
|
||||||
SDName: Boss_Broggok
|
SDName: Boss_Broggok
|
||||||
SD%Complete: 70
|
SD%Complete: 70
|
||||||
SDComment: pre-event not made
|
SDComment: pre-event not made
|
||||||
SDCategory: Hellfire Citadel, Blood Furnace
|
SDCategory: Hellfire Citadel, Blood Furnace
|
||||||
EndScriptData */
|
EndScriptData */
|
||||||
|
|
||||||
#include "precompiled.h"
|
#include "precompiled.h"
|
||||||
|
|
||||||
#define SAY_AGGRO -1542008
|
#define SAY_AGGRO -1542008
|
||||||
|
|
||||||
#define SPELL_SLIME_SPRAY 30913
|
#define SPELL_SLIME_SPRAY 30913
|
||||||
#define SPELL_POISON_CLOUD 30916
|
#define SPELL_POISON_CLOUD 30916
|
||||||
#define SPELL_POISON_BOLT 30917
|
#define SPELL_POISON_BOLT 30917
|
||||||
|
|
||||||
#define SPELL_POISON 30914
|
#define SPELL_POISON 30914
|
||||||
|
|
||||||
struct TRINITY_DLL_DECL boss_broggokAI : public ScriptedAI
|
struct TRINITY_DLL_DECL boss_broggokAI : public ScriptedAI
|
||||||
{
|
{
|
||||||
boss_broggokAI(Creature *c) : ScriptedAI(c) {Reset();}
|
boss_broggokAI(Creature *c) : ScriptedAI(c) {Reset();}
|
||||||
|
|
||||||
uint32 AcidSpray_Timer;
|
uint32 AcidSpray_Timer;
|
||||||
uint32 PoisonSpawn_Timer;
|
uint32 PoisonSpawn_Timer;
|
||||||
uint32 PoisonBolt_Timer;
|
uint32 PoisonBolt_Timer;
|
||||||
|
|
||||||
void Reset()
|
void Reset()
|
||||||
{
|
{
|
||||||
AcidSpray_Timer = 10000;
|
AcidSpray_Timer = 10000;
|
||||||
PoisonSpawn_Timer = 5000;
|
PoisonSpawn_Timer = 5000;
|
||||||
PoisonBolt_Timer = 7000;
|
PoisonBolt_Timer = 7000;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Aggro(Unit *who)
|
void Aggro(Unit *who)
|
||||||
{
|
{
|
||||||
DoScriptText(SAY_AGGRO, m_creature);
|
DoScriptText(SAY_AGGRO, m_creature);
|
||||||
}
|
}
|
||||||
|
|
||||||
void JustSummoned(Creature *summoned)
|
void JustSummoned(Creature *summoned)
|
||||||
{
|
{
|
||||||
summoned->setFaction(16);
|
summoned->setFaction(16);
|
||||||
summoned->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
summoned->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||||
summoned->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
summoned->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
||||||
summoned->CastSpell(summoned,SPELL_POISON,false,0,0,m_creature->GetGUID());
|
summoned->CastSpell(summoned,SPELL_POISON,false,0,0,m_creature->GetGUID());
|
||||||
}
|
}
|
||||||
|
|
||||||
void UpdateAI(const uint32 diff)
|
void UpdateAI(const uint32 diff)
|
||||||
{
|
{
|
||||||
if (!UpdateVictim() )
|
if (!UpdateVictim() )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (AcidSpray_Timer < diff)
|
if (AcidSpray_Timer < diff)
|
||||||
{
|
{
|
||||||
DoCast(m_creature->getVictim(),SPELL_SLIME_SPRAY);
|
DoCast(m_creature->getVictim(),SPELL_SLIME_SPRAY);
|
||||||
AcidSpray_Timer = 4000+rand()%8000;
|
AcidSpray_Timer = 4000+rand()%8000;
|
||||||
}else AcidSpray_Timer -=diff;
|
}else AcidSpray_Timer -=diff;
|
||||||
|
|
||||||
if (PoisonBolt_Timer < diff)
|
if (PoisonBolt_Timer < diff)
|
||||||
{
|
{
|
||||||
DoCast(m_creature->getVictim(),SPELL_POISON_BOLT);
|
DoCast(m_creature->getVictim(),SPELL_POISON_BOLT);
|
||||||
PoisonBolt_Timer = 4000+rand()%8000;
|
PoisonBolt_Timer = 4000+rand()%8000;
|
||||||
}else PoisonBolt_Timer -=diff;
|
}else PoisonBolt_Timer -=diff;
|
||||||
|
|
||||||
if (PoisonSpawn_Timer < diff)
|
if (PoisonSpawn_Timer < diff)
|
||||||
{
|
{
|
||||||
DoCast(m_creature,SPELL_POISON_CLOUD);
|
DoCast(m_creature,SPELL_POISON_CLOUD);
|
||||||
PoisonSpawn_Timer = 20000;
|
PoisonSpawn_Timer = 20000;
|
||||||
}else PoisonSpawn_Timer -=diff;
|
}else PoisonSpawn_Timer -=diff;
|
||||||
|
|
||||||
DoMeleeAttackIfReady();
|
DoMeleeAttackIfReady();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
struct TRINITY_DLL_DECL mob_broggok_poisoncloudAI : public ScriptedAI
|
struct TRINITY_DLL_DECL mob_broggok_poisoncloudAI : public ScriptedAI
|
||||||
{
|
{
|
||||||
mob_broggok_poisoncloudAI(Creature *c) : ScriptedAI(c) {Reset();}
|
mob_broggok_poisoncloudAI(Creature *c) : ScriptedAI(c) {Reset();}
|
||||||
|
|
||||||
void Reset() { }
|
void Reset() { }
|
||||||
void MoveInLineOfSight(Unit *who) { }
|
void MoveInLineOfSight(Unit *who) { }
|
||||||
void AttackStart(Unit *who) { }
|
void AttackStart(Unit *who) { }
|
||||||
void Aggro(Unit* who) { }
|
void Aggro(Unit* who) { }
|
||||||
};
|
};
|
||||||
|
|
||||||
CreatureAI* GetAI_boss_broggok(Creature *_Creature)
|
CreatureAI* GetAI_boss_broggok(Creature *_Creature)
|
||||||
{
|
{
|
||||||
return new boss_broggokAI (_Creature);
|
return new boss_broggokAI (_Creature);
|
||||||
}
|
}
|
||||||
|
|
||||||
CreatureAI* GetAI_mob_broggok_poisoncloud(Creature *_Creature)
|
CreatureAI* GetAI_mob_broggok_poisoncloud(Creature *_Creature)
|
||||||
{
|
{
|
||||||
return new mob_broggok_poisoncloudAI (_Creature);
|
return new mob_broggok_poisoncloudAI (_Creature);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AddSC_boss_broggok()
|
void AddSC_boss_broggok()
|
||||||
{
|
{
|
||||||
Script *newscript;
|
Script *newscript;
|
||||||
newscript = new Script;
|
newscript = new Script;
|
||||||
newscript->Name = "boss_broggok";
|
newscript->Name = "boss_broggok";
|
||||||
newscript->GetAI = &GetAI_boss_broggok;
|
newscript->GetAI = &GetAI_boss_broggok;
|
||||||
newscript->RegisterSelf();
|
newscript->RegisterSelf();
|
||||||
|
|
||||||
newscript = new Script;
|
newscript = new Script;
|
||||||
newscript->Name = "mob_broggok_poisoncloud";
|
newscript->Name = "mob_broggok_poisoncloud";
|
||||||
newscript->GetAI = &GetAI_mob_broggok_poisoncloud;
|
newscript->GetAI = &GetAI_mob_broggok_poisoncloud;
|
||||||
newscript->RegisterSelf();
|
newscript->RegisterSelf();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,201 +1,201 @@
|
|||||||
/* Copyright (C) 2006 - 2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
|
/* Copyright (C) 2006 - 2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
* the Free Software Foundation; either version 2 of the License, or
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
* (at your option) any later version.
|
* (at your option) any later version.
|
||||||
*
|
*
|
||||||
* This program is distributed in the hope that it will be useful,
|
* This program is distributed in the hope that it will be useful,
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program; if not, write to the Free Software
|
* along with this program; if not, write to the Free Software
|
||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* ScriptData
|
/* ScriptData
|
||||||
SDName: Boss_Curator
|
SDName: Boss_Curator
|
||||||
SD%Complete: 100
|
SD%Complete: 100
|
||||||
SDComment:
|
SDComment:
|
||||||
SDCategory: Karazhan
|
SDCategory: Karazhan
|
||||||
EndScriptData */
|
EndScriptData */
|
||||||
|
|
||||||
#include "precompiled.h"
|
#include "precompiled.h"
|
||||||
|
|
||||||
#define SAY_AGGRO -1532057
|
#define SAY_AGGRO -1532057
|
||||||
#define SAY_SUMMON1 -1532058
|
#define SAY_SUMMON1 -1532058
|
||||||
#define SAY_SUMMON2 -1532059
|
#define SAY_SUMMON2 -1532059
|
||||||
#define SAY_EVOCATE -1532060
|
#define SAY_EVOCATE -1532060
|
||||||
#define SAY_ENRAGE -1532061
|
#define SAY_ENRAGE -1532061
|
||||||
#define SAY_KILL1 -1532062
|
#define SAY_KILL1 -1532062
|
||||||
#define SAY_KILL2 -1532063
|
#define SAY_KILL2 -1532063
|
||||||
#define SAY_DEATH -1532064
|
#define SAY_DEATH -1532064
|
||||||
|
|
||||||
//Flare spell info
|
//Flare spell info
|
||||||
#define SPELL_ASTRAL_FLARE_PASSIVE 30234 //Visual effect + Flare damage
|
#define SPELL_ASTRAL_FLARE_PASSIVE 30234 //Visual effect + Flare damage
|
||||||
|
|
||||||
//Curator spell info
|
//Curator spell info
|
||||||
#define SPELL_HATEFUL_BOLT 30383
|
#define SPELL_HATEFUL_BOLT 30383
|
||||||
#define SPELL_EVOCATION 30254
|
#define SPELL_EVOCATION 30254
|
||||||
#define SPELL_ENRAGE 30403 //Arcane Infusion: Transforms Curator and adds damage.
|
#define SPELL_ENRAGE 30403 //Arcane Infusion: Transforms Curator and adds damage.
|
||||||
#define SPELL_BERSERK 26662
|
#define SPELL_BERSERK 26662
|
||||||
|
|
||||||
struct TRINITY_DLL_DECL boss_curatorAI : public ScriptedAI
|
struct TRINITY_DLL_DECL boss_curatorAI : public ScriptedAI
|
||||||
{
|
{
|
||||||
boss_curatorAI(Creature *c) : ScriptedAI(c) {Reset();}
|
boss_curatorAI(Creature *c) : ScriptedAI(c) {Reset();}
|
||||||
|
|
||||||
uint32 AddTimer;
|
uint32 AddTimer;
|
||||||
uint32 HatefulBoltTimer;
|
uint32 HatefulBoltTimer;
|
||||||
uint32 BerserkTimer;
|
uint32 BerserkTimer;
|
||||||
|
|
||||||
bool Enraged;
|
bool Enraged;
|
||||||
bool Evocating;
|
bool Evocating;
|
||||||
|
|
||||||
void Reset()
|
void Reset()
|
||||||
{
|
{
|
||||||
AddTimer = 10000;
|
AddTimer = 10000;
|
||||||
HatefulBoltTimer = 15000; //This time may be wrong
|
HatefulBoltTimer = 15000; //This time may be wrong
|
||||||
BerserkTimer = 720000; //12 minutes
|
BerserkTimer = 720000; //12 minutes
|
||||||
Enraged = false;
|
Enraged = false;
|
||||||
Evocating = false;
|
Evocating = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void KilledUnit(Unit *victim)
|
void KilledUnit(Unit *victim)
|
||||||
{
|
{
|
||||||
switch(rand()%2)
|
switch(rand()%2)
|
||||||
{
|
{
|
||||||
case 0: DoScriptText(SAY_KILL1, m_creature); break;
|
case 0: DoScriptText(SAY_KILL1, m_creature); break;
|
||||||
case 1: DoScriptText(SAY_KILL2, m_creature); break;
|
case 1: DoScriptText(SAY_KILL2, m_creature); break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void JustDied(Unit *victim)
|
void JustDied(Unit *victim)
|
||||||
{
|
{
|
||||||
DoScriptText(SAY_DEATH, m_creature);
|
DoScriptText(SAY_DEATH, m_creature);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Aggro(Unit *who)
|
void Aggro(Unit *who)
|
||||||
{
|
{
|
||||||
DoScriptText(SAY_AGGRO, m_creature);
|
DoScriptText(SAY_AGGRO, m_creature);
|
||||||
}
|
}
|
||||||
|
|
||||||
void UpdateAI(const uint32 diff)
|
void UpdateAI(const uint32 diff)
|
||||||
{
|
{
|
||||||
if (!UpdateVictim() )
|
if (!UpdateVictim() )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
//always decrease BerserkTimer
|
//always decrease BerserkTimer
|
||||||
if (BerserkTimer < diff)
|
if (BerserkTimer < diff)
|
||||||
{
|
{
|
||||||
//if evocate, then break evocate
|
//if evocate, then break evocate
|
||||||
if (Evocating)
|
if (Evocating)
|
||||||
{
|
{
|
||||||
if (m_creature->HasAura(SPELL_EVOCATION))
|
if (m_creature->HasAura(SPELL_EVOCATION))
|
||||||
m_creature->RemoveAurasDueToSpell(SPELL_EVOCATION);
|
m_creature->RemoveAurasDueToSpell(SPELL_EVOCATION);
|
||||||
|
|
||||||
Evocating = false;
|
Evocating = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
//may not be correct SAY (generic hard enrage)
|
//may not be correct SAY (generic hard enrage)
|
||||||
DoScriptText(SAY_ENRAGE, m_creature);
|
DoScriptText(SAY_ENRAGE, m_creature);
|
||||||
|
|
||||||
m_creature->InterruptNonMeleeSpells(true);
|
m_creature->InterruptNonMeleeSpells(true);
|
||||||
DoCast(m_creature, SPELL_BERSERK);
|
DoCast(m_creature, SPELL_BERSERK);
|
||||||
|
|
||||||
//don't know if he's supposed to do summon/evocate after hard enrage (probably not)
|
//don't know if he's supposed to do summon/evocate after hard enrage (probably not)
|
||||||
Enraged = true;
|
Enraged = true;
|
||||||
}else BerserkTimer -= diff;
|
}else BerserkTimer -= diff;
|
||||||
|
|
||||||
if (Evocating)
|
if (Evocating)
|
||||||
{
|
{
|
||||||
//not supposed to do anything while evocate
|
//not supposed to do anything while evocate
|
||||||
if (m_creature->HasAura(SPELL_EVOCATION))
|
if (m_creature->HasAura(SPELL_EVOCATION))
|
||||||
return;
|
return;
|
||||||
else
|
else
|
||||||
Evocating = false;
|
Evocating = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!Enraged)
|
if (!Enraged)
|
||||||
{
|
{
|
||||||
if (AddTimer < diff)
|
if (AddTimer < diff)
|
||||||
{
|
{
|
||||||
//Summon Astral Flare
|
//Summon Astral Flare
|
||||||
Creature* AstralFlare = DoSpawnCreature(17096, rand()%37, rand()%37, 0, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000);
|
Creature* AstralFlare = DoSpawnCreature(17096, rand()%37, rand()%37, 0, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000);
|
||||||
Unit* target = NULL;
|
Unit* target = NULL;
|
||||||
target = SelectUnit(SELECT_TARGET_RANDOM, 0);
|
target = SelectUnit(SELECT_TARGET_RANDOM, 0);
|
||||||
|
|
||||||
if (AstralFlare && target)
|
if (AstralFlare && target)
|
||||||
{
|
{
|
||||||
AstralFlare->CastSpell(AstralFlare, SPELL_ASTRAL_FLARE_PASSIVE, false);
|
AstralFlare->CastSpell(AstralFlare, SPELL_ASTRAL_FLARE_PASSIVE, false);
|
||||||
AstralFlare->AI()->AttackStart(target);
|
AstralFlare->AI()->AttackStart(target);
|
||||||
AstralFlare->ApplySpellImmune(0, IMMUNITY_STATE, SPELL_AURA_MOD_TAUNT, true);
|
AstralFlare->ApplySpellImmune(0, IMMUNITY_STATE, SPELL_AURA_MOD_TAUNT, true);
|
||||||
AstralFlare->ApplySpellImmune(0, IMMUNITY_EFFECT,SPELL_EFFECT_ATTACK_ME, true);
|
AstralFlare->ApplySpellImmune(0, IMMUNITY_EFFECT,SPELL_EFFECT_ATTACK_ME, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
//Reduce Mana by 10% of max health
|
//Reduce Mana by 10% of max health
|
||||||
if (int32 mana = m_creature->GetMaxPower(POWER_MANA))
|
if (int32 mana = m_creature->GetMaxPower(POWER_MANA))
|
||||||
{
|
{
|
||||||
mana /= 10;
|
mana /= 10;
|
||||||
m_creature->ModifyPower(POWER_MANA, -mana);
|
m_creature->ModifyPower(POWER_MANA, -mana);
|
||||||
|
|
||||||
//if this get's us below 10%, then we evocate (the 10th should be summoned now)
|
//if this get's us below 10%, then we evocate (the 10th should be summoned now)
|
||||||
if (m_creature->GetPower(POWER_MANA)*100 / m_creature->GetMaxPower(POWER_MANA) < 10)
|
if (m_creature->GetPower(POWER_MANA)*100 / m_creature->GetMaxPower(POWER_MANA) < 10)
|
||||||
{
|
{
|
||||||
DoScriptText(SAY_EVOCATE, m_creature);
|
DoScriptText(SAY_EVOCATE, m_creature);
|
||||||
m_creature->InterruptNonMeleeSpells(false);
|
m_creature->InterruptNonMeleeSpells(false);
|
||||||
DoCast(m_creature, SPELL_EVOCATION);
|
DoCast(m_creature, SPELL_EVOCATION);
|
||||||
Evocating = true;
|
Evocating = true;
|
||||||
//no AddTimer cooldown, this will make first flare appear instantly after evocate end, like expected
|
//no AddTimer cooldown, this will make first flare appear instantly after evocate end, like expected
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
switch(rand()%4)
|
switch(rand()%4)
|
||||||
{
|
{
|
||||||
case 0: DoScriptText(SAY_SUMMON1, m_creature); break;
|
case 0: DoScriptText(SAY_SUMMON1, m_creature); break;
|
||||||
case 1: DoScriptText(SAY_SUMMON2, m_creature); break;
|
case 1: DoScriptText(SAY_SUMMON2, m_creature); break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
AddTimer = 10000;
|
AddTimer = 10000;
|
||||||
}else AddTimer -= diff;
|
}else AddTimer -= diff;
|
||||||
|
|
||||||
if (m_creature->GetHealth()*100 / m_creature->GetMaxHealth() <= 15)
|
if (m_creature->GetHealth()*100 / m_creature->GetMaxHealth() <= 15)
|
||||||
{
|
{
|
||||||
Enraged = true;
|
Enraged = true;
|
||||||
DoCast(m_creature, SPELL_ENRAGE);
|
DoCast(m_creature, SPELL_ENRAGE);
|
||||||
DoScriptText(SAY_ENRAGE, m_creature);
|
DoScriptText(SAY_ENRAGE, m_creature);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (HatefulBoltTimer < diff)
|
if (HatefulBoltTimer < diff)
|
||||||
{
|
{
|
||||||
if (Enraged)
|
if (Enraged)
|
||||||
HatefulBoltTimer = 7000;
|
HatefulBoltTimer = 7000;
|
||||||
else
|
else
|
||||||
HatefulBoltTimer = 15000;
|
HatefulBoltTimer = 15000;
|
||||||
|
|
||||||
if (Unit* target = SelectUnit(SELECT_TARGET_TOPAGGRO, 1))
|
if (Unit* target = SelectUnit(SELECT_TARGET_TOPAGGRO, 1))
|
||||||
DoCast(target, SPELL_HATEFUL_BOLT);
|
DoCast(target, SPELL_HATEFUL_BOLT);
|
||||||
|
|
||||||
}else HatefulBoltTimer -= diff;
|
}else HatefulBoltTimer -= diff;
|
||||||
|
|
||||||
DoMeleeAttackIfReady();
|
DoMeleeAttackIfReady();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
CreatureAI* GetAI_boss_curator(Creature *_Creature)
|
CreatureAI* GetAI_boss_curator(Creature *_Creature)
|
||||||
{
|
{
|
||||||
return new boss_curatorAI (_Creature);
|
return new boss_curatorAI (_Creature);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AddSC_boss_curator()
|
void AddSC_boss_curator()
|
||||||
{
|
{
|
||||||
Script *newscript;
|
Script *newscript;
|
||||||
newscript = new Script;
|
newscript = new Script;
|
||||||
newscript->Name = "boss_curator";
|
newscript->Name = "boss_curator";
|
||||||
newscript->GetAI = &GetAI_boss_curator;
|
newscript->GetAI = &GetAI_boss_curator;
|
||||||
newscript->RegisterSelf();
|
newscript->RegisterSelf();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,227 +1,227 @@
|
|||||||
/* Copyright (C) 2006 - 2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
|
/* Copyright (C) 2006 - 2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
* the Free Software Foundation; either version 2 of the License, or
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
* (at your option) any later version.
|
* (at your option) any later version.
|
||||||
*
|
*
|
||||||
* This program is distributed in the hope that it will be useful,
|
* This program is distributed in the hope that it will be useful,
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program; if not, write to the Free Software
|
* along with this program; if not, write to the Free Software
|
||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* ScriptData
|
/* ScriptData
|
||||||
SDName: Boss_Vexallus
|
SDName: Boss_Vexallus
|
||||||
SD%Complete: 90
|
SD%Complete: 90
|
||||||
SDComment: Heroic and Normal support. Needs further testing.
|
SDComment: Heroic and Normal support. Needs further testing.
|
||||||
SDCategory: Magister's Terrace
|
SDCategory: Magister's Terrace
|
||||||
EndScriptData */
|
EndScriptData */
|
||||||
|
|
||||||
#include "precompiled.h"
|
#include "precompiled.h"
|
||||||
#include "def_magisters_terrace.h"
|
#include "def_magisters_terrace.h"
|
||||||
|
|
||||||
#define SAY_AGGRO -1585007
|
#define SAY_AGGRO -1585007
|
||||||
#define SAY_ENERGY -1585008
|
#define SAY_ENERGY -1585008
|
||||||
#define SAY_OVERLOAD -1585009
|
#define SAY_OVERLOAD -1585009
|
||||||
#define SAY_KILL -1585010
|
#define SAY_KILL -1585010
|
||||||
#define EMOTE_DISCHARGE_ENERGY -1585011
|
#define EMOTE_DISCHARGE_ENERGY -1585011
|
||||||
|
|
||||||
//is this text for real?
|
//is this text for real?
|
||||||
//#define SAY_DEATH "What...happen...ed."
|
//#define SAY_DEATH "What...happen...ed."
|
||||||
|
|
||||||
//Pure energy spell info
|
//Pure energy spell info
|
||||||
#define SPELL_ENERGY_BOLT 46156
|
#define SPELL_ENERGY_BOLT 46156
|
||||||
#define SPELL_ENERGY_FEEDBACK 44335
|
#define SPELL_ENERGY_FEEDBACK 44335
|
||||||
|
|
||||||
//Vexallus spell info
|
//Vexallus spell info
|
||||||
#define SPELL_CHAIN_LIGHTNING 44318
|
#define SPELL_CHAIN_LIGHTNING 44318
|
||||||
#define SPELL_OVERLOAD 44353
|
#define SPELL_OVERLOAD 44353
|
||||||
#define SPELL_ARCANE_SHOCK 44319
|
#define SPELL_ARCANE_SHOCK 44319
|
||||||
|
|
||||||
#define SPELL_SUMMON_PURE_ENERGY 44322 //mod scale -10
|
#define SPELL_SUMMON_PURE_ENERGY 44322 //mod scale -10
|
||||||
#define H_SPELL_SUMMON_PURE_ENERGY1 46154 //mod scale -5
|
#define H_SPELL_SUMMON_PURE_ENERGY1 46154 //mod scale -5
|
||||||
#define H_SPELL_SUMMON_PURE_ENERGY2 46159 //mod scale -5
|
#define H_SPELL_SUMMON_PURE_ENERGY2 46159 //mod scale -5
|
||||||
|
|
||||||
//Creatures
|
//Creatures
|
||||||
#define CREATURE_PURE_ENERGY 24745
|
#define CREATURE_PURE_ENERGY 24745
|
||||||
|
|
||||||
struct TRINITY_DLL_DECL boss_vexallusAI : public ScriptedAI
|
struct TRINITY_DLL_DECL boss_vexallusAI : public ScriptedAI
|
||||||
{
|
{
|
||||||
boss_vexallusAI(Creature *c) : ScriptedAI(c)
|
boss_vexallusAI(Creature *c) : ScriptedAI(c)
|
||||||
{
|
{
|
||||||
pInstance = ((ScriptedInstance*)c->GetInstanceData());
|
pInstance = ((ScriptedInstance*)c->GetInstanceData());
|
||||||
Heroic = c->GetMap()->IsHeroic();
|
Heroic = c->GetMap()->IsHeroic();
|
||||||
Reset();
|
Reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
ScriptedInstance* pInstance;
|
ScriptedInstance* pInstance;
|
||||||
bool Heroic;
|
bool Heroic;
|
||||||
|
|
||||||
uint32 ChainLightningTimer;
|
uint32 ChainLightningTimer;
|
||||||
uint32 ArcaneShockTimer;
|
uint32 ArcaneShockTimer;
|
||||||
uint32 OverloadTimer;
|
uint32 OverloadTimer;
|
||||||
uint32 SpawnAddInterval;
|
uint32 SpawnAddInterval;
|
||||||
uint32 AlreadySpawnedAmount;
|
uint32 AlreadySpawnedAmount;
|
||||||
bool Enraged;
|
bool Enraged;
|
||||||
|
|
||||||
void Reset()
|
void Reset()
|
||||||
{
|
{
|
||||||
ChainLightningTimer = 10000;
|
ChainLightningTimer = 10000;
|
||||||
ArcaneShockTimer = 8000;
|
ArcaneShockTimer = 8000;
|
||||||
OverloadTimer = 2200;
|
OverloadTimer = 2200;
|
||||||
SpawnAddInterval = 15;
|
SpawnAddInterval = 15;
|
||||||
AlreadySpawnedAmount = 0;
|
AlreadySpawnedAmount = 0;
|
||||||
Enraged = false;
|
Enraged = false;
|
||||||
|
|
||||||
if (pInstance)
|
if (pInstance)
|
||||||
pInstance->SetData(DATA_VEXALLUS_EVENT, NOT_STARTED);
|
pInstance->SetData(DATA_VEXALLUS_EVENT, NOT_STARTED);
|
||||||
}
|
}
|
||||||
|
|
||||||
void KilledUnit(Unit *victim)
|
void KilledUnit(Unit *victim)
|
||||||
{
|
{
|
||||||
DoScriptText(SAY_KILL, m_creature);
|
DoScriptText(SAY_KILL, m_creature);
|
||||||
}
|
}
|
||||||
|
|
||||||
void JustDied(Unit *victim)
|
void JustDied(Unit *victim)
|
||||||
{
|
{
|
||||||
if (pInstance)
|
if (pInstance)
|
||||||
{
|
{
|
||||||
pInstance->SetData(DATA_VEXALLUS_EVENT, DONE);
|
pInstance->SetData(DATA_VEXALLUS_EVENT, DONE);
|
||||||
|
|
||||||
if (GameObject* Door = GameObject::GetGameObject((*m_creature), pInstance->GetData64(DATA_VEXALLUS_DOOR)))
|
if (GameObject* Door = GameObject::GetGameObject((*m_creature), pInstance->GetData64(DATA_VEXALLUS_DOOR)))
|
||||||
Door->SetGoState(0);
|
Door->SetGoState(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Aggro(Unit *who)
|
void Aggro(Unit *who)
|
||||||
{
|
{
|
||||||
DoScriptText(SAY_AGGRO, m_creature);
|
DoScriptText(SAY_AGGRO, m_creature);
|
||||||
|
|
||||||
if (pInstance)
|
if (pInstance)
|
||||||
pInstance->SetData(DATA_VEXALLUS_EVENT, IN_PROGRESS);
|
pInstance->SetData(DATA_VEXALLUS_EVENT, IN_PROGRESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
void JustSummoned(Creature *summoned)
|
void JustSummoned(Creature *summoned)
|
||||||
{
|
{
|
||||||
if (Unit *temp = SelectUnit(SELECT_TARGET_RANDOM, 0))
|
if (Unit *temp = SelectUnit(SELECT_TARGET_RANDOM, 0))
|
||||||
summoned->GetMotionMaster()->MoveFollow(temp,0,0);
|
summoned->GetMotionMaster()->MoveFollow(temp,0,0);
|
||||||
|
|
||||||
//spells are SUMMON_TYPE_GUARDIAN, so using setOwner should be ok
|
//spells are SUMMON_TYPE_GUARDIAN, so using setOwner should be ok
|
||||||
summoned->SetOwnerGUID(m_creature->GetGUID());
|
summoned->SetOwnerGUID(m_creature->GetGUID());
|
||||||
summoned->CastSpell(summoned,SPELL_ENERGY_BOLT,false,0,0,m_creature->GetGUID());
|
summoned->CastSpell(summoned,SPELL_ENERGY_BOLT,false,0,0,m_creature->GetGUID());
|
||||||
}
|
}
|
||||||
|
|
||||||
void UpdateAI(const uint32 diff)
|
void UpdateAI(const uint32 diff)
|
||||||
{
|
{
|
||||||
if (!UpdateVictim() )
|
if (!UpdateVictim() )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (m_creature->GetHealth()*100 / m_creature->GetMaxHealth() <= 10)
|
if (m_creature->GetHealth()*100 / m_creature->GetMaxHealth() <= 10)
|
||||||
{
|
{
|
||||||
Enraged = true;
|
Enraged = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!Enraged)
|
if (!Enraged)
|
||||||
{
|
{
|
||||||
//used for check, when Vexallus cast adds 85%, 70%, 55%, 40%, 25%
|
//used for check, when Vexallus cast adds 85%, 70%, 55%, 40%, 25%
|
||||||
if ((m_creature->GetHealth()*100 / m_creature->GetMaxHealth()) < (100-(SpawnAddInterval*(AlreadySpawnedAmount+1))))
|
if ((m_creature->GetHealth()*100 / m_creature->GetMaxHealth()) < (100-(SpawnAddInterval*(AlreadySpawnedAmount+1))))
|
||||||
{
|
{
|
||||||
DoScriptText(SAY_ENERGY, m_creature);
|
DoScriptText(SAY_ENERGY, m_creature);
|
||||||
DoScriptText(EMOTE_DISCHARGE_ENERGY, m_creature);
|
DoScriptText(EMOTE_DISCHARGE_ENERGY, m_creature);
|
||||||
|
|
||||||
if (Heroic)
|
if (Heroic)
|
||||||
{
|
{
|
||||||
m_creature->CastSpell(m_creature,H_SPELL_SUMMON_PURE_ENERGY1,false);
|
m_creature->CastSpell(m_creature,H_SPELL_SUMMON_PURE_ENERGY1,false);
|
||||||
m_creature->CastSpell(m_creature,H_SPELL_SUMMON_PURE_ENERGY2,false);
|
m_creature->CastSpell(m_creature,H_SPELL_SUMMON_PURE_ENERGY2,false);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
m_creature->CastSpell(m_creature,SPELL_SUMMON_PURE_ENERGY,false);
|
m_creature->CastSpell(m_creature,SPELL_SUMMON_PURE_ENERGY,false);
|
||||||
|
|
||||||
//below are workaround summons, remove when summoning spells w/implicitTarget 73 implemented in Mangos
|
//below are workaround summons, remove when summoning spells w/implicitTarget 73 implemented in Mangos
|
||||||
DoSpawnCreature(CREATURE_PURE_ENERGY, 0, 0, 0, 0, TEMPSUMMON_CORPSE_DESPAWN, 0);
|
DoSpawnCreature(CREATURE_PURE_ENERGY, 0, 0, 0, 0, TEMPSUMMON_CORPSE_DESPAWN, 0);
|
||||||
|
|
||||||
if (Heroic)
|
if (Heroic)
|
||||||
DoSpawnCreature(CREATURE_PURE_ENERGY, 0, 0, 0, 0, TEMPSUMMON_CORPSE_DESPAWN, 0);
|
DoSpawnCreature(CREATURE_PURE_ENERGY, 0, 0, 0, 0, TEMPSUMMON_CORPSE_DESPAWN, 0);
|
||||||
|
|
||||||
++AlreadySpawnedAmount;
|
++AlreadySpawnedAmount;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ChainLightningTimer < diff)
|
if (ChainLightningTimer < diff)
|
||||||
{
|
{
|
||||||
if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0))
|
if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0))
|
||||||
DoCast(target, SPELL_CHAIN_LIGHTNING);
|
DoCast(target, SPELL_CHAIN_LIGHTNING);
|
||||||
|
|
||||||
ChainLightningTimer = 10000;
|
ChainLightningTimer = 10000;
|
||||||
}else ChainLightningTimer -= diff;
|
}else ChainLightningTimer -= diff;
|
||||||
|
|
||||||
if (ArcaneShockTimer < diff)
|
if (ArcaneShockTimer < diff)
|
||||||
{
|
{
|
||||||
if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0))
|
if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0))
|
||||||
DoCast(target, SPELL_ARCANE_SHOCK);
|
DoCast(target, SPELL_ARCANE_SHOCK);
|
||||||
|
|
||||||
ArcaneShockTimer = 8000;
|
ArcaneShockTimer = 8000;
|
||||||
}else ArcaneShockTimer -= diff;
|
}else ArcaneShockTimer -= diff;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (OverloadTimer < diff)
|
if (OverloadTimer < diff)
|
||||||
{
|
{
|
||||||
if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0))
|
if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0))
|
||||||
DoCast(target, SPELL_OVERLOAD);
|
DoCast(target, SPELL_OVERLOAD);
|
||||||
|
|
||||||
OverloadTimer = 2200;
|
OverloadTimer = 2200;
|
||||||
}else OverloadTimer -= diff;
|
}else OverloadTimer -= diff;
|
||||||
}
|
}
|
||||||
|
|
||||||
DoMeleeAttackIfReady();
|
DoMeleeAttackIfReady();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
CreatureAI* GetAI_boss_vexallus(Creature *_Creature)
|
CreatureAI* GetAI_boss_vexallus(Creature *_Creature)
|
||||||
{
|
{
|
||||||
return new boss_vexallusAI (_Creature);
|
return new boss_vexallusAI (_Creature);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct TRINITY_DLL_DECL mob_pure_energyAI : public ScriptedAI
|
struct TRINITY_DLL_DECL mob_pure_energyAI : public ScriptedAI
|
||||||
{
|
{
|
||||||
mob_pure_energyAI(Creature *c) : ScriptedAI(c) {Reset();}
|
mob_pure_energyAI(Creature *c) : ScriptedAI(c) {Reset();}
|
||||||
|
|
||||||
void Reset() { }
|
void Reset() { }
|
||||||
|
|
||||||
void JustDied(Unit* slayer)
|
void JustDied(Unit* slayer)
|
||||||
{
|
{
|
||||||
if (Unit *temp = m_creature->GetOwner())
|
if (Unit *temp = m_creature->GetOwner())
|
||||||
{
|
{
|
||||||
if (temp && temp->isAlive())
|
if (temp && temp->isAlive())
|
||||||
slayer->CastSpell(slayer, SPELL_ENERGY_FEEDBACK, true, 0, 0, temp->GetGUID());
|
slayer->CastSpell(slayer, SPELL_ENERGY_FEEDBACK, true, 0, 0, temp->GetGUID());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Aggro(Unit *who) { }
|
void Aggro(Unit *who) { }
|
||||||
void MoveInLineOfSight(Unit *who) { }
|
void MoveInLineOfSight(Unit *who) { }
|
||||||
void AttackStart(Unit *who) { }
|
void AttackStart(Unit *who) { }
|
||||||
};
|
};
|
||||||
|
|
||||||
CreatureAI* GetAI_mob_pure_energy(Creature *_Creature)
|
CreatureAI* GetAI_mob_pure_energy(Creature *_Creature)
|
||||||
{
|
{
|
||||||
return new mob_pure_energyAI (_Creature);
|
return new mob_pure_energyAI (_Creature);
|
||||||
};
|
};
|
||||||
|
|
||||||
void AddSC_boss_vexallus()
|
void AddSC_boss_vexallus()
|
||||||
{
|
{
|
||||||
Script *newscript;
|
Script *newscript;
|
||||||
|
|
||||||
newscript = new Script;
|
newscript = new Script;
|
||||||
newscript->Name = "boss_vexallus";
|
newscript->Name = "boss_vexallus";
|
||||||
newscript->GetAI = &GetAI_boss_vexallus;
|
newscript->GetAI = &GetAI_boss_vexallus;
|
||||||
newscript->RegisterSelf();
|
newscript->RegisterSelf();
|
||||||
|
|
||||||
newscript = new Script;
|
newscript = new Script;
|
||||||
newscript->Name = "mob_pure_energy";
|
newscript->Name = "mob_pure_energy";
|
||||||
newscript->GetAI = &GetAI_mob_pure_energy;
|
newscript->GetAI = &GetAI_mob_pure_energy;
|
||||||
newscript->RegisterSelf();
|
newscript->RegisterSelf();
|
||||||
}
|
}
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
+6
-1
@@ -756,7 +756,12 @@ bool Item::IsFitToSpellRequirements(SpellEntry const* spellInfo) const
|
|||||||
|
|
||||||
if(spellInfo->EquippedItemInventoryTypeMask != 0) // 0 == any inventory type
|
if(spellInfo->EquippedItemInventoryTypeMask != 0) // 0 == any inventory type
|
||||||
{
|
{
|
||||||
if((spellInfo->EquippedItemInventoryTypeMask & (1 << proto->InventoryType)) == 0)
|
// Special case - accept weapon type for main and offhand requirements
|
||||||
|
if(proto->InventoryType == INVTYPE_WEAPON &&
|
||||||
|
(spellInfo->EquippedItemInventoryTypeMask & (1 << INVTYPE_WEAPONMAINHAND) ||
|
||||||
|
spellInfo->EquippedItemInventoryTypeMask & (1 << INVTYPE_WEAPONOFFHAND)))
|
||||||
|
return true;
|
||||||
|
else if ((spellInfo->EquippedItemInventoryTypeMask & (1 << proto->InventoryType)) == 0)
|
||||||
return false; // inventory type not present in mask
|
return false; // inventory type not present in mask
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+14
-8
@@ -1127,7 +1127,20 @@ void Spell::DoSpellHitOnUnit(Unit *unit, const uint32 effectMask)
|
|||||||
|
|
||||||
// Apply additional spell effects to target
|
// Apply additional spell effects to target
|
||||||
if (m_preCastSpell)
|
if (m_preCastSpell)
|
||||||
m_caster->CastSpell(unit,m_preCastSpell, true, m_CastItem);
|
{
|
||||||
|
// Special spell id
|
||||||
|
// TODO: Handle all of special spells in one place?
|
||||||
|
if(m_preCastSpell==61988)
|
||||||
|
{
|
||||||
|
//Cast forbearance
|
||||||
|
m_caster->CastSpell(unit,25771, true, m_CastItem);
|
||||||
|
// Cast Avenging Wrath Marker
|
||||||
|
m_caster->CastSpell(unit,61987, true, m_CastItem);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
m_caster->CastSpell(unit,m_preCastSpell, true, m_CastItem);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
for(uint32 effectNumber=0;effectNumber<3;effectNumber++)
|
for(uint32 effectNumber=0;effectNumber<3;effectNumber++)
|
||||||
{
|
{
|
||||||
@@ -2179,13 +2192,6 @@ void Spell::cast(bool skipCheck)
|
|||||||
m_preCastSpell = 23230; // Blood Fury - Healing Reduction
|
m_preCastSpell = 23230; // Blood Fury - Healing Reduction
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case SPELLFAMILY_PRIEST:
|
|
||||||
{
|
|
||||||
if (m_spellInfo->Id == 47585) // Dispersion (transform)
|
|
||||||
m_preCastSpell = 60069; // Dispersion (mana regen)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
// traded items have trade slot instead of guid in m_itemTargetGUID
|
// traded items have trade slot instead of guid in m_itemTargetGUID
|
||||||
// set to real guid to be sent later to the client
|
// set to real guid to be sent later to the client
|
||||||
|
|||||||
@@ -459,12 +459,6 @@ m_updated(false), m_isRemovedOnShapeLost(true), m_in_use(false)
|
|||||||
|
|
||||||
Aura::~Aura()
|
Aura::~Aura()
|
||||||
{
|
{
|
||||||
//Delete references to aura
|
|
||||||
if(GetAuraSlot() < MAX_AURAS && m_target && m_target->GetVisibleAura(GetAuraSlot()))
|
|
||||||
{
|
|
||||||
AuraSlotEntry * entry = m_target->GetVisibleAura(GetAuraSlot());
|
|
||||||
entry->m_slotAuras[GetEffIndex()]=NULL;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
AreaAura::AreaAura(SpellEntry const* spellproto, uint32 eff, int32 *currentBasePoints, Unit *target,
|
AreaAura::AreaAura(SpellEntry const* spellproto, uint32 eff, int32 *currentBasePoints, Unit *target,
|
||||||
|
|||||||
@@ -620,23 +620,23 @@ void Spell::SpellDamageSchoolDmg(uint32 effect_idx)
|
|||||||
}
|
}
|
||||||
case SPELLFAMILY_PALADIN:
|
case SPELLFAMILY_PALADIN:
|
||||||
{
|
{
|
||||||
// Judgement of Vengeance ${1+0.22*$SPH+0.14*$AP} + 10% for each application of Holy Vengeance on the target
|
// Judgement of Vengeance/Corruption ${1+0.22*$SPH+0.14*$AP} + 10% for each application of Holy Vengeance/Blood Corruption on the target
|
||||||
if((m_spellInfo->SpellFamilyFlags[1] & 0x8) && m_spellInfo->SpellIconID==2292)
|
if((m_spellInfo->SpellFamilyFlags[1] & 0x800) && m_spellInfo->SpellIconID==2292)
|
||||||
{
|
{
|
||||||
float ap = m_caster->GetTotalAttackPowerValue(BASE_ATTACK);
|
float ap = m_caster->GetTotalAttackPowerValue(BASE_ATTACK);
|
||||||
int32 holy = m_caster->SpellBaseDamageBonus(GetSpellSchoolMask(m_spellInfo)) +
|
int32 holy = m_caster->SpellBaseDamageBonus(GetSpellSchoolMask(m_spellInfo)) +
|
||||||
m_caster->SpellBaseDamageBonusForVictim(GetSpellSchoolMask(m_spellInfo), unitTarget);
|
m_caster->SpellBaseDamageBonusForVictim(GetSpellSchoolMask(m_spellInfo), unitTarget);
|
||||||
damage+=int32(ap * 0.14f) + int32(holy * 22 / 100);
|
damage+=int32(ap * 0.14f) + int32(holy * 22 / 100);
|
||||||
// Get stack of Holy Vengeance on the target added by caster
|
// Get stack of Holy Vengeance/Blood Corruption on the target added by caster
|
||||||
uint32 stacks = 0;
|
uint32 stacks = 0;
|
||||||
Unit::AuraList const& auras = unitTarget->GetAurasByType(SPELL_AURA_PERIODIC_DAMAGE);
|
Unit::AuraList const& auras = unitTarget->GetAurasByType(SPELL_AURA_PERIODIC_DAMAGE);
|
||||||
for(Unit::AuraList::const_iterator itr = auras.begin(); itr!=auras.end(); ++itr)
|
for(Unit::AuraList::const_iterator itr = auras.begin(); itr!=auras.end(); ++itr)
|
||||||
if((*itr)->GetId() == 31803 && (*itr)->GetCasterGUID()==m_caster->GetGUID())
|
if(((*itr)->GetId() == 31803 || (*itr)->GetId() == 53742) && (*itr)->GetCasterGUID()==m_caster->GetGUID())
|
||||||
{
|
{
|
||||||
stacks = (*itr)->GetStackAmount();
|
stacks = (*itr)->GetStackAmount();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
// + 10% for each application of Holy Vengeance on the target
|
// + 10% for each application of Holy Vengeance/Blood Corruption on the target
|
||||||
if(stacks)
|
if(stacks)
|
||||||
damage += damage * stacks * 10 /100;
|
damage += damage * stacks * 10 /100;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1044,8 +1044,9 @@ void SpellMgr::LoadSpellProcEvents()
|
|||||||
|
|
||||||
spe.schoolMask = fields[1].GetUInt32();
|
spe.schoolMask = fields[1].GetUInt32();
|
||||||
spe.spellFamilyName = fields[2].GetUInt32();
|
spe.spellFamilyName = fields[2].GetUInt32();
|
||||||
spe.spellFamilyMask = (uint64)fields[3].GetUInt32()|((uint64)fields[4].GetUInt32()<<32);
|
spe.spellFamilyMask[0] = fields[3].GetUInt32();
|
||||||
spe.spellFamilyMask2= fields[5].GetUInt32();
|
spe.spellFamilyMask[1] = fields[4].GetUInt32();
|
||||||
|
spe.spellFamilyMask[2] = fields[5].GetUInt32();
|
||||||
spe.procFlags = fields[6].GetUInt32();
|
spe.procFlags = fields[6].GetUInt32();
|
||||||
spe.procEx = fields[7].GetUInt32();
|
spe.procEx = fields[7].GetUInt32();
|
||||||
spe.ppmRate = fields[8].GetFloat();
|
spe.ppmRate = fields[8].GetFloat();
|
||||||
@@ -1155,7 +1156,7 @@ bool SpellMgr::IsSpellProcEventCanTriggeredBy(SpellProcEventEntry const * spellP
|
|||||||
return false;
|
return false;
|
||||||
|
|
||||||
// spellFamilyName is Ok need check for spellFamilyMask if present
|
// spellFamilyName is Ok need check for spellFamilyMask if present
|
||||||
if(spellProcEvent->spellFamilyMask || spellProcEvent->spellFamilyMask2)
|
if(spellProcEvent->spellFamilyMask)
|
||||||
{
|
{
|
||||||
if ((spellProcEvent->spellFamilyMask & procSpell->SpellFamilyFlags ) == 0)
|
if ((spellProcEvent->spellFamilyMask & procSpell->SpellFamilyFlags ) == 0)
|
||||||
return false;
|
return false;
|
||||||
@@ -2883,7 +2884,7 @@ DiminishingGroup GetDiminishingReturnsGroupForSpell(SpellEntry const* spellproto
|
|||||||
if (mechanic & (1<<MECHANIC_FEAR)) return DIMINISHING_FEAR;
|
if (mechanic & (1<<MECHANIC_FEAR)) return DIMINISHING_FEAR;
|
||||||
if (mechanic & (1<<MECHANIC_CHARM)) return DIMINISHING_CHARM;
|
if (mechanic & (1<<MECHANIC_CHARM)) return DIMINISHING_CHARM;
|
||||||
if (mechanic & (1<<MECHANIC_SILENCE)) return DIMINISHING_SILENCE;
|
if (mechanic & (1<<MECHANIC_SILENCE)) return DIMINISHING_SILENCE;
|
||||||
if (mechanic & (1<<DIMINISHING_DISARM)) return DIMINISHING_DISARM;
|
if (mechanic & (1<<MECHANIC_DISARM)) return DIMINISHING_DISARM;
|
||||||
if (mechanic & (1<<MECHANIC_FREEZE)) return DIMINISHING_FREEZE;
|
if (mechanic & (1<<MECHANIC_FREEZE)) return DIMINISHING_FREEZE;
|
||||||
if (mechanic & ((1<<MECHANIC_KNOCKOUT) | (1<<MECHANIC_SAPPED))) return DIMINISHING_KNOCKOUT;
|
if (mechanic & ((1<<MECHANIC_KNOCKOUT) | (1<<MECHANIC_SAPPED))) return DIMINISHING_KNOCKOUT;
|
||||||
if (mechanic & (1<<MECHANIC_BANISH)) return DIMINISHING_BANISH;
|
if (mechanic & (1<<MECHANIC_BANISH)) return DIMINISHING_BANISH;
|
||||||
|
|||||||
@@ -615,7 +615,6 @@ struct SpellProcEventEntry
|
|||||||
uint32 schoolMask; // if nonzero - bit mask for matching proc condition based on spell candidate's school: Fire=2, Mask=1<<(2-1)=2
|
uint32 schoolMask; // if nonzero - bit mask for matching proc condition based on spell candidate's school: Fire=2, Mask=1<<(2-1)=2
|
||||||
uint32 spellFamilyName; // if nonzero - for matching proc condition based on candidate spell's SpellFamilyNamer value
|
uint32 spellFamilyName; // if nonzero - for matching proc condition based on candidate spell's SpellFamilyNamer value
|
||||||
flag96 spellFamilyMask; // if nonzero - for matching proc condition based on candidate spell's SpellFamilyFlags (like auras 107 and 108 do)
|
flag96 spellFamilyMask; // if nonzero - for matching proc condition based on candidate spell's SpellFamilyFlags (like auras 107 and 108 do)
|
||||||
uint32 spellFamilyMask2; // if nonzero - for matching proc condition based on candidate spell's SpellFamilyFlags2 (like auras 107 and 108 do)
|
|
||||||
uint32 procFlags; // bitmask for matching proc event
|
uint32 procFlags; // bitmask for matching proc event
|
||||||
uint32 procEx; // proc Extend info (see ProcFlagsEx)
|
uint32 procEx; // proc Extend info (see ProcFlagsEx)
|
||||||
float ppmRate; // for melee (ranged?) damage spells - proc rate per minute. if zero, falls back to flat chance from Spell.dbc
|
float ppmRate; // for melee (ranged?) damage spells - proc rate per minute. if zero, falls back to flat chance from Spell.dbc
|
||||||
|
|||||||
+32
-13
@@ -209,18 +209,7 @@ void Unit::Update( uint32 p_time )
|
|||||||
_UpdateAura();
|
_UpdateAura();
|
||||||
}else
|
}else
|
||||||
m_AurasCheck -= p_time;*/
|
m_AurasCheck -= p_time;*/
|
||||||
const uint64& auramask = GetAuraUpdateMask();
|
UpdateAuras();
|
||||||
if (auramask)
|
|
||||||
{
|
|
||||||
for(uint32 i = 0; i < MAX_AURAS; ++i)
|
|
||||||
{
|
|
||||||
if(auramask & (uint64(1) << i))
|
|
||||||
{
|
|
||||||
SendAuraUpdate(i);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
ResetAuraUpdateMask();
|
|
||||||
}
|
|
||||||
|
|
||||||
// WARNING! Order of execution here is important, do not change.
|
// WARNING! Order of execution here is important, do not change.
|
||||||
// Spells must be processed with event system BEFORE they go to _UpdateSpells.
|
// Spells must be processed with event system BEFORE they go to _UpdateSpells.
|
||||||
@@ -265,6 +254,22 @@ void Unit::Update( uint32 p_time )
|
|||||||
i_motionMaster.UpdateMotion(p_time);
|
i_motionMaster.UpdateMotion(p_time);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Unit::UpdateAuras()
|
||||||
|
{
|
||||||
|
const uint64& auramask = GetAuraUpdateMask();
|
||||||
|
if (auramask)
|
||||||
|
{
|
||||||
|
for(uint32 i = 0; i < MAX_AURAS; ++i)
|
||||||
|
{
|
||||||
|
if(auramask & (uint64(1) << i))
|
||||||
|
{
|
||||||
|
SendAuraUpdate(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ResetAuraUpdateMask();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
bool Unit::haveOffhandWeapon() const
|
bool Unit::haveOffhandWeapon() const
|
||||||
{
|
{
|
||||||
if(GetTypeId() == TYPEID_PLAYER)
|
if(GetTypeId() == TYPEID_PLAYER)
|
||||||
@@ -4328,6 +4333,9 @@ Aura* Unit::GetAura(AuraType type, uint32 family, uint32 familyFlag1, uint32 fam
|
|||||||
|
|
||||||
bool Unit::HasAura(uint32 spellId) const
|
bool Unit::HasAura(uint32 spellId) const
|
||||||
{
|
{
|
||||||
|
//Special case for non existing spell
|
||||||
|
if (spellId==61988)
|
||||||
|
return HasAura(61987) || HasAura(25771);
|
||||||
for (int i = 0; i < 3 ; ++i)
|
for (int i = 0; i < 3 ; ++i)
|
||||||
{
|
{
|
||||||
AuraMap::const_iterator iter = m_Auras.find(spellEffectPair(spellId, i));
|
AuraMap::const_iterator iter = m_Auras.find(spellEffectPair(spellId, i));
|
||||||
@@ -5783,6 +5791,15 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, Aura* triggeredByAu
|
|||||||
triggered_spell_id = 31803;
|
triggered_spell_id = 31803;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
// Seal of Corruption
|
||||||
|
case 53736:
|
||||||
|
{
|
||||||
|
if(effIndex != 0) // effect 1,2 used by seal unleashing code
|
||||||
|
return false;
|
||||||
|
|
||||||
|
triggered_spell_id = 53742;
|
||||||
|
break;
|
||||||
|
}
|
||||||
// Spiritual Attunement
|
// Spiritual Attunement
|
||||||
case 31785:
|
case 31785:
|
||||||
case 33776:
|
case 33776:
|
||||||
@@ -6930,7 +6947,7 @@ bool Unit::HandleProcTriggerSpell(Unit *pVictim, uint32 damage, Aura* triggeredB
|
|||||||
// Bloodthirst (($m/100)% of max health)
|
// Bloodthirst (($m/100)% of max health)
|
||||||
case 23880:
|
case 23880:
|
||||||
{
|
{
|
||||||
basepoints0 = int32(GetMaxHealth() * triggerAmount / 10000);
|
basepoints0 = int32(GetMaxHealth() * triggerAmount / 100);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
// Shamanistic Rage triggered spell
|
// Shamanistic Rage triggered spell
|
||||||
@@ -9848,6 +9865,8 @@ void Unit::setDeathState(DeathState s)
|
|||||||
{
|
{
|
||||||
RemoveAllAurasOnDeath();
|
RemoveAllAurasOnDeath();
|
||||||
UnsummonAllTotems();
|
UnsummonAllTotems();
|
||||||
|
//This is needed to clear visible auras after unit dies
|
||||||
|
UpdateAuras();
|
||||||
|
|
||||||
ModifyAuraState(AURA_STATE_HEALTHLESS_20_PERCENT, false);
|
ModifyAuraState(AURA_STATE_HEALTHLESS_20_PERCENT, false);
|
||||||
ModifyAuraState(AURA_STATE_HEALTHLESS_35_PERCENT, false);
|
ModifyAuraState(AURA_STATE_HEALTHLESS_35_PERCENT, false);
|
||||||
|
|||||||
@@ -865,6 +865,7 @@ class TRINITY_DLL_SPEC Unit : public WorldObject
|
|||||||
uint32 GetSpellRadiusForTarget(Unit* target,const SpellRadiusEntry * radiusEntry);
|
uint32 GetSpellRadiusForTarget(Unit* target,const SpellRadiusEntry * radiusEntry);
|
||||||
|
|
||||||
virtual void Update( uint32 time );
|
virtual void Update( uint32 time );
|
||||||
|
void UpdateAuras();
|
||||||
|
|
||||||
void setAttackTimer(WeaponAttackType type, uint32 time) { m_attackTimer[type] = time; }
|
void setAttackTimer(WeaponAttackType type, uint32 time) { m_attackTimer[type] = time; }
|
||||||
void resetAttackTimer(WeaponAttackType type = BASE_ATTACK);
|
void resetAttackTimer(WeaponAttackType type = BASE_ATTACK);
|
||||||
|
|||||||
Reference in New Issue
Block a user