initial commit

This commit is contained in:
hondacrx
2017-06-19 17:30:18 -04:00
commit 6e265ea24b
763 changed files with 488824 additions and 0 deletions
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,733 @@
/*
* Copyright (C) 2012-2017 CypherCore <http://github.com/CypherCore>
*
* 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
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
namespace Scripts.Northrend.IcecrownCitadel
{
struct IccConst
{
public const uint WeeklyNPCs = 9;
}
struct Bosses
{
public const uint LordMarrowgar = 0;
public const uint LadyDeathwhisper = 1;
public const uint GunshipBattle = 2;
public const uint DeathbringerSaurfang = 3;
public const uint Festergut = 4;
public const uint Rotface = 5;
public const uint ProfessorPutricide = 6;
public const uint BloodPrinceCouncil = 7;
public const uint BloodQueenLanaThel = 8;
public const uint SisterSvalna = 9;
public const uint ValithriaDreamwalker = 10;
public const uint Sindragosa = 11;
public const uint TheLichKing = 12;
public const uint MaxEncounters = 13;
}
struct Texts
{
// Highlord Tirion Fordring (At Light'S Hammer)
public const uint SayTirionIntro1 = 0;
public const uint SayTirionIntro2 = 1;
public const uint SayTirionIntro3 = 2;
public const uint SayTirionIntro4 = 3;
public const uint SayTirionIntroH5 = 4;
public const uint SayTirionIntroA5 = 5;
// The Lich King (At Light'S Hammer)
public const uint SayLkIntro1 = 0;
public const uint SayLkIntro2 = 1;
public const uint SayLkIntro3 = 2;
public const uint SayLkIntro4 = 3;
public const uint SayLkIntro5 = 4;
// Highlord Bolvar Fordragon (At Light'S Hammer)
public const uint SayBolvarIntro1 = 0;
// High Overlord Saurfang (At Light'S Hammer)
public const uint SaySaurfangIntro1 = 15;
public const uint SaySaurfangIntro2 = 16;
public const uint SaySaurfangIntro3 = 17;
public const uint SaySaurfangIntro4 = 18;
// Muradin Bronzebeard (At Light'S Hammer)
public const uint SayMuradinIntro1 = 13;
public const uint SayMuradinIntro2 = 14;
public const uint SayMuradinIntro3 = 15;
// Deathbound Ward
public const uint SayTrapActivate = 0;
// Rotting Frost Giant
public const uint EmoteDeathPlagueWarning = 0;
// Sister Svalna
public const uint SaySvalnaKillCaptain = 1; // Happens When She Kills A Captain
public const uint SaySvalnaKill = 4;
public const uint SaySvalnaCaptainDeath = 5; // Happens When A Captain Resurrected By Her Dies
public const uint SaySvalnaDeath = 6;
public const uint EmoteSvalnaImpale = 7;
public const uint EmoteSvalnaBrokenShield = 8;
public const uint SayCrokIntro1 = 0; // Ready Your Arms; My Argent Brothers. The Vrykul Will Protect The Frost Queen With Their Lives.
public const uint SayArnathIntro2 = 5; // Even Dying Here Beats Spending Another Day Collecting Reagents For That Madman; Finklestein.
public const uint SayCrokIntro3 = 1; // Enough Idle Banter! Our Champions Have Arrived - Support Them As We Push Our Way Through The Hall!
public const uint SaySvalnaEventStart = 0; // You May Have Once Fought Beside Me; Crok; But Now You Are Nothing More Than A Traitor. Come; Your Second Death Approaches!
public const uint SayCrokCombatWp0 = 2; // Draw Them Back To Us; And We'Ll Assist You.
public const uint SayCrokCombatWp1 = 3; // Quickly; Push On!
public const uint SayCrokFinalWp = 4; // Her Reinforcements Will Arrive Shortly; We Must Bring Her Down Quickly!
public const uint SaySvalnaResurrectCaptains = 2; // Foolish Crok. You Brought My Reinforcements With You. Arise; Argent Champions; And Serve The Lich King In Death!
public const uint SayCrokCombatSvalna = 5; // I'Ll Draw Her Attacks. Return Our Brothers To Their Graves; Then Help Me Bring Her Down!
public const uint SaySvalnaAggro = 3; // Come; Scourgebane. I'Ll Show The Master Which Of Us Is Truly Worthy Of The Title Of "Champion"!
public const uint SayCaptainDeath = 0;
public const uint SayCaptainResurrected = 1;
public const uint SayCaptainKill = 2;
public const uint SayCaptainSecondDeath = 3;
public const uint SayCaptainSurviveTalk = 4;
public const uint SayCrokWeakeningGauntlet = 6;
public const uint SayCrokWeakeningSvalna = 7;
public const uint SayCrokDeath = 8;
}
struct InstanceSpells
{
// Rotting Frost Giant
public const uint DeathPlague = 72879;
public const uint DeathPlagueAura = 72865;
public const uint RecentlyInfected = 72884;
public const uint DeathPlagueKill = 72867;
public const uint Stomp = 64652;
public const uint ArcticBreath = 72848;
// Frost Freeze Trap
public const uint ColdflameJets = 70460;
// Alchemist Adrianna
public const uint HarvestBlightSpecimen = 72155;
public const uint HarvestBlightSpecimen25 = 72162;
// Crok Scourgebane
public const uint IceboundArmor = 70714;
public const uint ScourgeStrike = 71488;
public const uint DeathStrike = 71489;
// Sister Svalna
public const uint CaressOfDeath = 70078;
public const uint ImpalingSpearKill = 70196;
public const uint ReviveChampion = 70053;
public const uint Undeath = 70089;
public const uint ImpalingSpear = 71443;
public const uint AetherShield = 71463;
public const uint HurlSpear = 71466;
// Captain Arnath
public const uint DominateMind = 14515;
public const uint FlashHealNormal = 71595;
public const uint PowerWordShieldNormal = 71548;
public const uint SmiteNormal = 71546;
public const uint FlashHealUndead = 71782;
public const uint PowerWordShieldUndead = 71780;
public const uint SmiteUndead = 71778;
public static uint SpellFlashHeal(bool isUndead) { return isUndead ? InstanceSpells.FlashHealUndead : InstanceSpells.FlashHealNormal; }
public static uint SpellPowerWordShield(bool isUndead) { return isUndead ? InstanceSpells.PowerWordShieldUndead : InstanceSpells.PowerWordShieldNormal; }
public static uint SpellSmite(bool isUndead) { return isUndead ? InstanceSpells.SmiteUndead : InstanceSpells.SmiteNormal; }
// Captain Brandon
public const uint CrusaderStrike = 71549;
public const uint DivineShield = 71550;
public const uint JudgementOfCommand = 71551;
public const uint HammerOfBetrayal = 71784;
// Captain Grondel
public const uint Charge = 71553;
public const uint MortalStrike = 71552;
public const uint SunderArmor = 71554;
public const uint Conflagration = 71785;
// Captain Rupert
public const uint FelIronBombNormal = 71592;
public const uint MachineGunNormal = 71594;
public const uint RocketLaunchNormal = 71590;
public const uint FelIronBombUndead = 71787;
public const uint MachineGunUndead = 71788;
public const uint RocketLaunchUndead = 71786;
public static uint SpellFelIronBomb(bool isUndead) { return isUndead ? InstanceSpells.FelIronBombUndead : InstanceSpells.FelIronBombNormal; }
public static uint SpellMachineGun(bool isUndead) { return isUndead ? InstanceSpells.MachineGunUndead : InstanceSpells.MachineGunNormal; }
public static uint SpellRocketLaunch(bool isUndead) { return isUndead ? InstanceSpells.RocketLaunchUndead : InstanceSpells.RocketLaunchNormal; }
// Invisible Stalker (Float; Uninteractible; Largeaoi)
public const uint SoulMissile = 72585;
public const uint Berserk = 26662;
public const uint Berserk2 = 47008;
// Deathbound Ward
public const uint StoneForm = 70733;
// Residue Rendezvous
public const uint OrangeBlightResidue = 72144;
public const uint GreenBlightResidue = 72145;
// The Lich King
public const uint ArthasTeleporterCeremony = 72915;
public const uint FrostmourneTeleportVisual = 73078;
// Shadowmourne questline
public const uint UnsatedCraving = 71168;
public const uint ShadowsFate = 71169;
}
struct EventTypes
{
// Highlord Tirion Fordring (At Light'S Hammer)
// The Lich King (At Light'S Hammer)
// Highlord Bolvar Fordragon (At Light'S Hammer)
// High Overlord Saurfang (At Light'S Hammer)
// Muradin Bronzebeard (At Light'S Hammer)
public const uint TirionIntro2 = 1;
public const uint TirionIntro3 = 2;
public const uint TirionIntro4 = 3;
public const uint TirionIntro5 = 4;
public const uint LkIntro1 = 5;
public const uint TirionIntro6 = 6;
public const uint LkIntro2 = 7;
public const uint LkIntro3 = 8;
public const uint LkIntro4 = 9;
public const uint BolvarIntro1 = 10;
public const uint LkIntro5 = 11;
public const uint SaurfangIntro1 = 12;
public const uint TirionIntroH7 = 13;
public const uint SaurfangIntro2 = 14;
public const uint SaurfangIntro3 = 15;
public const uint SaurfangIntro4 = 16;
public const uint SaurfangRun = 17;
public const uint MuradinIntro1 = 18;
public const uint MuradinIntro2 = 19;
public const uint MuradinIntro3 = 20;
public const uint TirionIntroA7 = 21;
public const uint MuradinIntro4 = 22;
public const uint MuradinIntro5 = 23;
public const uint MuradinRun = 24;
// Rotting Frost Giant
public const uint DeathPlague = 25;
public const uint Stomp = 26;
public const uint ArcticBreath = 27;
// Frost Freeze Trap
public const uint ActivateTrap = 28;
// Crok Scourgebane
public const uint ScourgeStrike = 29;
public const uint DeathStrike = 30;
public const uint HealthCheck = 31;
public const uint CrokIntro3 = 32;
public const uint StartPathing = 33;
// Sister Svalna
public const uint ArnathIntro2 = 34;
public const uint SvalnaStart = 35;
public const uint SvalnaResurrect = 36;
public const uint SvalnaCombat = 37;
public const uint ImpalingSpear = 38;
public const uint AetherShield = 39;
// Captain Arnath
public const uint ArnathFlashHeal = 40;
public const uint ArnathPwShield = 41;
public const uint ArnathSmite = 42;
public const uint ArnathDominateMind = 43;
// Captain Brandon
public const uint BrandonCrusaderStrike = 44;
public const uint BrandonDivineShield = 45;
public const uint BrandonJudgementOfCommand = 46;
public const uint BrandonHammerOfBetrayal = 47;
// Captain Grondel
public const uint GrondelChargeCheck = 48;
public const uint GrondelMortalStrike = 49;
public const uint GrondelSunderArmor = 50;
public const uint GrondelConflagration = 51;
// Captain Rupert
public const uint RupertFelIronBomb = 52;
public const uint RupertMachineGun = 53;
public const uint RupertRocketLaunch = 54;
// Invisible Stalker (Float; Uninteractible; Largeaoi)
public const uint SoulMissile = 55;
}
struct DataTypes
{
// Additional Data
public const uint SaurfangEventNpc = 13;
public const uint BonedAchievement = 14;
public const uint OozeDanceAchievement = 15;
public const uint PutricideTable = 16;
public const uint NauseaAchievement = 17;
public const uint OrbWhispererAchievement = 18;
public const uint PrinceKelesethGuid = 19;
public const uint PrinceTaldaramGuid = 20;
public const uint PrinceValanarGuid = 21;
public const uint BloodPrincesControl = 22;
public const uint SindragosaFrostwyrms = 23;
public const uint Spinestalker = 24;
public const uint Rimefang = 25;
public const uint ColdflameJets = 26;
public const uint TeamInInstance = 27;
public const uint BloodQuickeningState = 28;
public const uint HeroicAttempts = 29;
public const uint CrokScourgebane = 30;
public const uint CaptainArnath = 31;
public const uint CaptainBrandon = 32;
public const uint CaptainGrondel = 33;
public const uint CaptainRupert = 34;
public const uint ValithriaTrigger = 35;
public const uint ValithriaLichKing = 36;
public const uint HighlordTirionFordring = 37;
public const uint ArthasPlatform = 38;
public const uint TerenasMenethil = 39;
public const uint EnemyGunship = 40;
public const uint UpperSpireTeleAct = 41;
}
struct WorldStates
{
public const uint ShowTimer = 4903;
public const uint ExecutionTime = 4904;
public const uint ShowAttempts = 4940;
public const uint AttemptsRemaining = 4941;
public const uint AttemptsMax = 4942;
}
struct CreatureIds
{
// At Light'S Hammer
public const uint HighlordTirionFordringLh = 37119;
public const uint TheLichKingLh = 37181;
public const uint HighlordBolvarFordragonLh = 37183;
public const uint KorKronGeneral = 37189;
public const uint AllianceCommander = 37190;
public const uint Tortunok = 37992; // Druid Armor H
public const uint AlanaMoonstrike = 37999; // Druid Armor A
public const uint GerardoTheSuave = 37993; // Hunter Armor H
public const uint TalanMoonstrike = 37998; // Hunter Armor A
public const uint UvlusBanefire = 38284; // Mage Armor H
public const uint MalfusGrimfrost = 38283; // Mage Armor A
public const uint IkfirusTheVile = 37991; // Rogue Armor H
public const uint Yili = 37997; // Rogue Armor A
public const uint VolGuk = 38841; // Shaman Armor H
public const uint Jedebia = 38840; // Shaman Armor A
public const uint HaraggTheUnseen = 38181; // Warlock Armor H
public const uint NibyTheAlmighty = 38182; // Warlock Armor N
public const uint GarroshHellscream = 39372;
public const uint KingVarianWrynn = 39371;
public const uint DeathboundWard = 37007;
public const uint LadyJainaProudmooreQuest = 38606;
public const uint MuradinBronzaBeardQuest = 38607;
public const uint UtherTheLightBringerQuest = 38608;
public const uint LadySylvanasWindrunnerQuest = 38609;
// Weekly Quests
public const uint InfiltratorMinchar = 38471;
public const uint KorKronLieutenant = 38491;
public const uint SkybreakerLieutenant = 38492;
public const uint RottingFrostGiant10 = 38490;
public const uint RottingFrostGiant25 = 38494;
public const uint AlchemistAdrianna = 38501;
public const uint AlrinTheAgile = 38551;
public const uint InfiltratorMincharBq = 38558;
public const uint MincharBeamStalker = 38557;
public const uint ValithriaDreamwalkerQuest = 38589;
// Lord Marrowgar
public const uint LordMarrowgar = 36612;
public const uint Coldflame = 36672;
public const uint BoneSpike = 36619;
// Lady Deathwhisper
public const uint LadyDeathwhisper = 36855;
public const uint CultFanatic = 37890;
public const uint DeformedFanatic = 38135;
public const uint ReanimatedFanatic = 38009;
public const uint CultAdherent = 37949;
public const uint EmpoweredAdherent = 38136;
public const uint ReanimatedAdherent = 38010;
public const uint VengefulShade = 38222;
// Icecrown Gunship Battle
public const uint MartyrStalkerIGBSaurfang = 38569;
public const uint AllianceGunshipCannon = 36838;
public const uint HordeGunshipCannon = 36839;
public const uint SkybreakerDeckhand = 36970;
public const uint OrgrimsHammerCrew = 36971;
public const uint IGBHighOverlordSaurfang = 36939;
public const uint IGBMuradinBrozebeard = 36948;
public const uint TheSkybreaker = 37540;
public const uint OrgrimsHammer = 37215;
public const uint GunshipHull = 37547;
public const uint TeleportPortal = 37227;
public const uint TeleportExit = 37488;
public const uint SkybreakerSorcerer = 37116;
public const uint SkybreakerRifleman = 36969;
public const uint SkybreakerMortarSoldier = 36978;
public const uint SkybreakerMarine = 36950;
public const uint SkybreakerSergeant = 36961;
public const uint KorKronBattleMage = 37117;
public const uint KorKronAxeThrower = 36968;
public const uint KorKronRocketeer = 36982;
public const uint KorKronReaver = 36957;
public const uint KorKronSergeant = 36960;
public const uint ZafodBoombox = 37184;
public const uint HighCaptainJustinBartlett = 37182;
public const uint SkyReaverKormBlackscar = 37833;
// Deathbringer Saurfang
public const uint DeathbringerSaurfang = 37813;
public const uint BloodBeast = 38508;
public const uint SeJainaProudmoore = 37188; // Se Means Saurfang Event
public const uint SeMuradinBronzebeard = 37200;
public const uint SeKingVarianWrynn = 37879;
public const uint SeHighOverlordSaurfang = 37187;
public const uint SeKorKronReaver = 37920;
public const uint SeSkybreakerMarine = 37830;
public const uint FrostFreezeTrap = 37744;
// Festergut
public const uint Festergut = 36626;
public const uint GasDummy = 36659;
public const uint MalleableOozeStalker = 38556;
// Rotface
public const uint Rotface = 36627;
public const uint OozeSprayStalker = 37986;
public const uint PuddleStalker = 37013;
public const uint UnstableExplosionStalker = 38107;
public const uint VileGasStalker = 38548;
// Professor Putricide
public const uint ProfessorPutricide = 36678;
public const uint AbominationWingMadScientistStalker = 37824;
public const uint GrowingOozePuddle = 37690;
public const uint GasCloud = 37562;
public const uint VolatileOoze = 37697;
public const uint ChokingGasBomb = 38159;
public const uint TearGasTargetStalker = 38317;
public const uint MutatedAbomination10 = 37672;
public const uint MutatedAbomination25 = 38285;
// Blood Prince Council
public const uint PrinceKeleseth = 37972;
public const uint PrinceTaldaram = 37973;
public const uint PrinceValanar = 37970;
public const uint BloodOrbController = 38008;
public const uint FloatingTrigger = 30298;
public const uint DarkNucleus = 38369;
public const uint BallOfFlame = 38332;
public const uint BallOfInfernoFlame = 38451;
public const uint KineticBombTarget = 38458;
public const uint KineticBomb = 38454;
public const uint ShockVortex = 38422;
// Blood-Queen Lana'Thel
public const uint BloodQueenLanaThel = 37955;
// Frostwing Halls Gauntlet Event
public const uint CrokScourgebane = 37129;
public const uint CaptainArnath = 37122;
public const uint CaptainBrandon = 37123;
public const uint CaptainGrondel = 37124;
public const uint CaptainRupert = 37125;
public const uint CaptainArnathUndead = 37491;
public const uint CaptainBrandonUndead = 37493;
public const uint CaptainGrondelUndead = 37494;
public const uint CaptainRupertUndead = 37495;
public const uint YmirjarBattleMaiden = 37132;
public const uint YmirjarDeathbringer = 38125;
public const uint YmirjarFrostbinder = 37127;
public const uint YmirjarHuntress = 37134;
public const uint YmirjarWarlord = 37133;
public const uint SisterSvalna = 37126;
public const uint ImpalingSpear = 38248;
// Valithria Dreamwalker
public const uint ValithriaDreamwalker = 36789;
public const uint GreenDragonCombatTrigger = 38752;
public const uint RisenArchmage = 37868;
public const uint BlazingSkeleton = 36791;
public const uint Suppresser = 37863;
public const uint BlisteringZombie = 37934;
public const uint GluttonousAbomination = 37886;
public const uint ManaVoid = 38068;
public const uint ColumnOfFrost = 37918;
public const uint RotWorm = 37907;
public const uint TheLichKingValithria = 16980;
public const uint DreamPortalPreEffect = 38186;
public const uint NightmarePortalPreEffect = 38429;
public const uint DreamPortal = 37945;
public const uint NightmarePortal = 38430;
// Sindragosa
public const uint Sindragosa = 36853;
public const uint Spinestalker = 37534;
public const uint Rimefang = 37533;
public const uint FrostwardenHandler = 37531;
public const uint FrostwingWhelp = 37532;
public const uint IcyBlast = 38223;
public const uint FrostBomb = 37186;
public const uint IceTomb = 36980;
// The Lich King
public const uint TheLichKing = 36597;
public const uint HighlordTirionFordringLk = 38995;
public const uint TerenasMenethilFrostmourne = 36823;
public const uint SpiritWarden = 36824;
public const uint TerenasMenethilFrostmourneH = 39217;
public const uint ShamblingHorror = 37698;
public const uint DrudgeGhoul = 37695;
public const uint IceSphere = 36633;
public const uint RagingSpirit = 36701;
public const uint Defile = 38757;
public const uint ValkyrShadowguard = 36609;
public const uint VileSpirit = 37799;
public const uint WickedSpirit = 39190;
public const uint StrangulateVehicle = 36598;
public const uint WorldTrigger = 22515;
public const uint WorldTriggerInfiniteAoi = 36171;
public const uint SpiritBomb = 39189;
public const uint FrostmourneTrigger = 38584;
// Generic
public const uint InvisibleStalker = 30298;
}
struct GameObjectIds
{
// ICC Teleporters
public const uint TransporterLichKing = 202223;
public const uint TransporterUpperSpire = 202235;
public const uint TransporterLightsHammer = 202242;
public const uint TransporterRampart = 202243;
public const uint TransporterDeathBringer = 202244;
public const uint TransporterOratory = 202245;
public const uint TransporterSindragosa = 202246;
// Lower Spire Trash
public const uint SpiritAlarm1 = 201814;
public const uint SpiritAlarm2 = 201815;
public const uint SpiritAlarm3 = 201816;
public const uint SpiritAlarm4 = 201817;
// Lord Marrogar
public const uint DoodadIcecrownIcewall02 = 201910;
public const uint LordMarrowgarIcewall = 201911;
public const uint LordMarrowgarSEntrance = 201857;
// Lady Deathwhisper
public const uint OratoryOfTheDamnedEntrance = 201563;
public const uint LadyDeathwhisperElevator = 202220;
// Icecrown Gunship Battle - Horde raid
public const uint OrgrimsHammer_H = 201812;
public const uint TheSkybreaker_H = 201811;
public const uint GunshipArmory_H_10N = 202178;
public const uint GunshipArmory_H_25N = 202180;
public const uint GunshipArmory_H_10H = 202177;
public const uint GunshipArmory_H_25H = 202179;
// Icecrown Gunship Battle - Alliance raid
public const uint OrgrimsHammer_A = 201581;
public const uint TheSkybreaker_A = 201580;
public const uint GunshipArmory_A_10N = 201873;
public const uint GunshipArmory_A_25N = 201874;
public const uint GunshipArmory_A_10H = 201872;
public const uint GunshipArmory_A_25H = 201875;
// Deathbringer Saurfang
public const uint SaurfangSDoor = 201825;
public const uint DeathbringerSCache10n = 202239;
public const uint DeathbringerSCache25n = 202240;
public const uint DeathbringerSCache10h = 202238;
public const uint DeathbringerSCache25h = 202241;
// Professor Putricide
public const uint OrangePlagueMonsterEntrance = 201371;
public const uint GreenPlagueMonsterEntrance = 201370;
public const uint ScientistAirlockDoorCollision = 201612;
public const uint ScientistAirlockDoorOrange = 201613;
public const uint ScientistAirlockDoorGreen = 201614;
public const uint DoodadIcecrownOrangetubes02 = 201617;
public const uint DoodadIcecrownGreentubes02 = 201618;
public const uint ScientistEntrance = 201372;
public const uint DrinkMe = 201584;
public const uint PlagueSigil = 202182;
// Blood Prince Council
public const uint CrimsonHallDoor = 201376;
public const uint BloodElfCouncilDoor = 201378;
public const uint BloodElfCouncilDoorRight = 201377;
// Blood-Queen Lana'Thel
public const uint DoodadIcecrownBloodprinceDoor01 = 201746;
public const uint DoodadIcecrownGrate01 = 201755;
public const uint BloodwingSigil = 202183;
// Valithria Dreamwalker
public const uint GreenDragonBossEntrance = 201375;
public const uint GreenDragonBossExit = 201374;
public const uint DoodadIcecrownRoostportcullis01 = 201380;
public const uint DoodadIcecrownRoostportcullis02 = 201381;
public const uint DoodadIcecrownRoostportcullis03 = 201382;
public const uint DoodadIcecrownRoostportcullis04 = 201383;
public const uint CacheOfTheDreamwalker10n = 201959;
public const uint CacheOfTheDreamwalker25n = 202339;
public const uint CacheOfTheDreamwalker10h = 202338;
public const uint CacheOfTheDreamwalker25h = 202340;
// Sindragosa
public const uint SindragosaEntranceDoor = 201373;
public const uint SindragosaShortcutEntranceDoor = 201369;
public const uint SindragosaShortcutExitDoor = 201379;
public const uint IceWall = 202396;
public const uint IceBlock = 201722;
public const uint SigilOfTheFrostwing = 202181;
// The Lich King
public const uint ArthasPlatform = 202161;
public const uint ArthasPrecipice = 202078;
public const uint DoodadIcecrownThronefrostywind01 = 202188;
public const uint DoodadIcecrownThronefrostyedge01 = 202189;
public const uint DoodadIceshardStanding02 = 202141;
public const uint DoodadIceshardStanding01 = 202142;
public const uint DoodadIceshardStanding03 = 202143;
public const uint DoodadIceshardStanding04 = 202144;
public const uint DoodadIcecrownSnowedgewarning01 = 202190;
public const uint FrozenLavaman = 202436;
public const uint LavamanPillarsChained = 202437;
public const uint LavamanPillarsUnchained = 202438;
}
struct AchievementCriteriaIds
{
// Lord Marrowgar
public const uint Boned10n = 12775;
public const uint Boned25n = 12962;
public const uint Boned10h = 13393;
public const uint Boned25h = 13394;
// Rotface
public const uint DancesWithOozes10 = 12984;
public const uint DancesWithOozes25 = 12966;
public const uint DancesWithOozes10H = 12985;
public const uint DancesWithOozes25H = 12983;
// Professor Putricide
public const uint Nausea10 = 12987;
public const uint Nausea25 = 12968;
public const uint Nausea10H = 12988;
public const uint Nausea25H = 12981;
// Blood Prince Council
public const uint OrbWhisperer10 = 13033;
public const uint OrbWhisperer25 = 12969;
public const uint OrbWhisperer10H = 13034;
public const uint OrbWhisperer25H = 13032;
// Blood-Queen Lana'Thel
public const uint KillLanaThel10m = 13340;
public const uint KillLanaThel25m = 13360;
public const uint OnceBittenTwiceShy10 = 12780;
public const uint OnceBittenTwiceShy25 = 13012;
public const uint OnceBittenTwiceShy10V = 13011;
public const uint OnceBittenTwiceShy25V = 13013;
}
struct WeeklyQuestIds
{
public const uint Deprogramming10 = 24869;
public const uint Deprogramming25 = 24875;
public const uint SecuringTheRamparts10 = 24870;
public const uint SecuringTheRamparts25 = 24877;
public const uint ResidueRendezvous10 = 24873;
public const uint ResidueRendezvous25 = 24878;
public const uint BloodQuickening10 = 24874;
public const uint BloodQuickening25 = 24879;
public const uint RespiteForATornmentedSoul10 = 24872;
public const uint RespiteForATornmentedSoul25 = 24880;
}
struct Actions
{
// Icecrown Gunship Battle
public const int EnemyGunshipTalk = -369390;
public const int ExitShip = -369391;
// Festergut
public const int FestergutCombat = -366260;
public const int FestergutGas = -366261;
public const int FestergutDeath = -366262;
// Rotface
public const int RotfaceCombat = -366270;
public const int RotfaceOoze = -366271;
public const int RotfaceDeath = -366272;
public const int ChangePhase = -366780;
// Blood-Queen Lana'Thel
public const int KillMinchar = -379550;
// Frostwing Halls Gauntlet Event
public const int VrykulDeath = 37129;
// Sindragosa
public const int StartFrostwyrm = -368530;
public const int TriggerAsphyxiation = -368531;
// The Lich King
public const int RestoreLight = -72262;
public const int FrostmourneIntro = -36823;
// Sister Svalna
public const int KillCaptain = 1;
public const int StartGauntlet = 2;
public const int ResurrectCaptains = 3;
public const int CaptainDies = 4;
public const int ResetEvent = 5;
}
struct TeleporterSpells
{
public const uint LIGHT_S_HAMMER_TELEPORT = 70781;
public const uint ORATORY_OF_THE_DAMNED_TELEPORT = 70856;
public const uint RAMPART_OF_SKULLS_TELEPORT = 70857;
public const uint DEATHBRINGER_S_RISE_TELEPORT = 7085;
public const uint UPPER_SPIRE_TELEPORT = 70859;
public const uint FROZEN_THRONE_TELEPORT = 70860;
public const uint SINDRAGOSA_S_LAIR_TELEPORT = 70861;
}
struct AreaIds
{
public const uint IcecrownCitadel = 4812;
public const uint TheFrozenThrone = 4859;
}
}
@@ -0,0 +1,106 @@
/*
* Copyright (C) 2012-2017 CypherCore <http://github.com/CypherCore>
*
* 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
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
using Framework.Constants;
using Game.AI;
using Game.DataStorage;
using Game.Entities;
using Game.Maps;
using Game.Scripting;
using Game.Spells;
namespace Scripts.Northrend.IcecrownCitadel
{
[Script]
class icecrown_citadel_teleport : GameObjectScript
{
public icecrown_citadel_teleport() : base("icecrown_citadel_teleport") { }
public class icecrown_citadel_teleportAI : GameObjectAI
{
public icecrown_citadel_teleportAI(GameObject go) : base(go) { }
public override bool GossipSelect(Player player, uint menuId, uint gossipListId)
{
if (gossipListId >= TeleportSpells.Length)
return false;
player.PlayerTalkClass.ClearMenus();
player.CLOSE_GOSSIP_MENU();
SpellInfo spell = Global.SpellMgr.GetSpellInfo(TeleportSpells[gossipListId]);
if (spell == null)
return false;
if (player.IsInCombat())
{
ObjectGuid castId = ObjectGuid.Create(HighGuid.Cast, SpellCastSource.Normal, player.GetMapId(), spell.Id, player.GetMap().GenerateLowGuid(HighGuid.Cast));
Spell.SendCastResult(player, spell, 0, castId, SpellCastResult.AffectingCombat);
return true;
}
return true;
}
}
public override GameObjectAI GetAI(GameObject go)
{
return GetInstanceAI<icecrown_citadel_teleportAI>(go, "instance_icecrown_citadel");
}
public const uint GOSSIP_SENDER_ICC_PORT = 631;
static uint[] TeleportSpells =
{
TeleporterSpells.LIGHT_S_HAMMER_TELEPORT, // 0
TeleporterSpells.ORATORY_OF_THE_DAMNED_TELEPORT, // 1
0, // 2
TeleporterSpells.RAMPART_OF_SKULLS_TELEPORT, // 3
TeleporterSpells.DEATHBRINGER_S_RISE_TELEPORT, // 4
TeleporterSpells.UPPER_SPIRE_TELEPORT, // 5
TeleporterSpells.SINDRAGOSA_S_LAIR_TELEPORT // 6
};
}
[Script]
class at_frozen_throne_teleport : AreaTriggerScript
{
public at_frozen_throne_teleport() : base("at_frozen_throne_teleport") { }
public override bool OnTrigger(Player player, AreaTriggerRecord areaTrigger, bool entered)
{
if (player.IsInCombat())
{
SpellInfo spell = Global.SpellMgr.GetSpellInfo(TeleporterSpells.FROZEN_THRONE_TELEPORT);
if (spell == null)
{
ObjectGuid castId = ObjectGuid.Create(HighGuid.Cast, SpellCastSource.Normal, player.GetMapId(), spell.Id, player.GetMap().GenerateLowGuid(HighGuid.Cast));
Spell.SendCastResult(player, spell, 0, castId, SpellCastResult.AffectingCombat);
}
return true;
}
InstanceScript instance = player.GetInstanceScript();
if (instance != null)
if (instance.GetBossState(Bosses.ProfessorPutricide) == EncounterState.Done &&
instance.GetBossState(Bosses.BloodQueenLanaThel) == EncounterState.Done &&
instance.GetBossState(Bosses.Sindragosa) == EncounterState.Done &&
instance.GetBossState(Bosses.TheLichKing) != EncounterState.InProgress)
player.CastSpell(player, TeleporterSpells.FROZEN_THRONE_TELEPORT, true);
return true;
}
}
}
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,734 @@
/*
* Copyright (C) 2012-2017 CypherCore <http://github.com/CypherCore>
*
* 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
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
using Framework.Constants;
using Game.AI;
using Game.Entities;
using Game.Maps;
using Game.Movement;
using Game.Scripting;
using Game.Spells;
using System;
using System.Collections.Generic;
using System.Diagnostics.Contracts;
namespace Scripts.Northrend.IcecrownCitadel
{
namespace Marrorgar
{
struct Texts
{
public const int SayEnterZone = 0;
public const int SayAggro = 1;
public const int SayBoneStorm = 2;
public const int SayBonespike = 3;
public const int SayKill = 4;
public const int SayDeath = 5;
public const int SayBerserk = 6;
public const int EmoteBoneStorm = 7;
}
struct Spells
{
// Lord Marrowgar
public const uint BoneSlice = 69055;
public const uint BoneStorm = 69076;
public const uint BoneSpikeGraveyard = 69057;
public const uint ColdflameNormal = 69140;
public const uint ColdflameBoneStorm = 72705;
// Bone Spike
public const uint Impaled = 69065;
public const uint RideVehicle = 46598;
// Coldflame
public const uint ColdflamePassive = 69145;
public const uint ColdflameSummon = 69147;
}
struct Misc
{
public static uint[] BoneSpikeSummonId = { 69062, 72669, 72670 };
public const uint EventBoneSpikeGraveyard = 1;
public const uint EventColdflame = 2;
public const uint EventBoneStormBegin = 3;
public const uint EventBoneStormMove = 4;
public const uint EventBoneStormEnd = 5;
public const uint EventEnableBoneSlice = 6;
public const uint EventEnrage = 7;
public const uint EventWarnBoneStorm = 8;
public const uint EventColdflameTrigger = 9;
public const uint EventFailBoned = 10;
public const uint EventGroupSpecial = 1;
public const uint PointTargetBonestormPlayer = 36612631;
public const uint PointTargetColdflame = 36672631;
public const int DataColdflameGuid = 0;
// Manual Marking For Targets Hit By Bone Slice As No Aura Exists For This Purpose
// These Units Are The Tanks In This Encounter
// And Should Be Immune To Bone Spike Graveyard
public const int DataSpikeImmune = 1;
//DataSpikeImmune1; = 2; // Reserved & Used
//DataSpikeImmune2; = 3; // Reserved & Used
public const int ActionClearSpikeImmunities = 1;
public const uint MaxBoneSpikeImmune = 3;
}
class BoneSpikeTargetSelector : ISelector
{
public BoneSpikeTargetSelector(UnitAI ai)
{
_ai = ai;
}
public bool Check(Unit unit)
{
if (!unit.IsTypeId(TypeId.Player))
return false;
if (unit.HasAura(Spells.Impaled))
return false;
// Check if it is one of the tanks soaking Bone Slice
for (int i = 0; i < Misc.MaxBoneSpikeImmune; ++i)
if (unit.GetGUID() == _ai.GetGUID(Misc.DataSpikeImmune + i))
return false;
return true;
}
UnitAI _ai;
}
[Script]
class boss_lord_marrowgar : CreatureScript
{
public boss_lord_marrowgar() : base("boss_lord_marrowgar") { }
public class boss_lord_marrowgarAI : BossAI
{
public boss_lord_marrowgarAI(Creature creature) : base(creature, Bosses.LordMarrowgar)
{
_boneStormDuration = RaidMode<uint>(20000, 30000, 20000, 30000);
_baseSpeed = creature.GetSpeedRate(UnitMoveType.Run);
_coldflameLastPos.Relocate(creature);
_introDone = false;
_boneSlice = false;
}
public override void Reset()
{
_Reset();
me.SetSpeedRate(UnitMoveType.Run, _baseSpeed);
me.RemoveAurasDueToSpell(Spells.BoneStorm);
me.RemoveAurasDueToSpell(InstanceSpells.Berserk);
_events.ScheduleEvent(Misc.EventEnableBoneSlice, 10000);
_events.ScheduleEvent(Misc.EventBoneSpikeGraveyard, 15000, Misc.EventGroupSpecial);
_events.ScheduleEvent(Misc.EventColdflame, 5000, Misc.EventGroupSpecial);
_events.ScheduleEvent(Misc.EventWarnBoneStorm, RandomHelper.URand(45000, 50000));
_events.ScheduleEvent(Misc.EventEnrage, 600000);
_boneSlice = false;
_boneSpikeImmune.Clear();
}
public override void EnterCombat(Unit who)
{
Talk(Texts.SayAggro);
me.setActive(true);
DoZoneInCombat();
instance.SetBossState(Bosses.LordMarrowgar, EncounterState.InProgress);
}
public override void JustDied(Unit killer)
{
Talk(Texts.SayDeath);
_JustDied();
}
public override void JustReachedHome()
{
_JustReachedHome();
instance.SetBossState(Bosses.LordMarrowgar, EncounterState.Fail);
instance.SetData(DataTypes.BonedAchievement, 1); // reset
}
public override void KilledUnit(Unit victim)
{
if (victim.IsTypeId(TypeId.Player))
Talk(Texts.SayKill);
}
public override void MoveInLineOfSight(Unit who)
{
if (!_introDone && me.IsWithinDistInMap(who, 70.0f))
{
Talk(Texts.SayEnterZone);
_introDone = true;
}
}
public override void UpdateAI(uint diff)
{
if (!UpdateVictim())
return;
_events.Update(diff);
if (me.HasUnitState(UnitState.Casting))
return;
_events.ExecuteEvents(eventId =>
{
switch (eventId)
{
case Misc.EventBoneSpikeGraveyard:
if (IsHeroic() || !me.HasAura(Spells.BoneStorm))
DoCast(me, Spells.BoneSpikeGraveyard);
_events.ScheduleEvent(Misc.EventBoneSpikeGraveyard, RandomHelper.URand(15000, 20000), Misc.EventGroupSpecial);
break;
case Misc.EventColdflame:
_coldflameLastPos.Relocate(me);
_coldflameTarget.Clear();
if (!me.HasAura(Spells.BoneStorm))
DoCastAOE(Spells.ColdflameNormal);
else
DoCast(me, Spells.ColdflameBoneStorm);
_events.ScheduleEvent(Misc.EventColdflame, 5000, Misc.EventGroupSpecial);
break;
case Misc.EventWarnBoneStorm:
_boneSlice = false;
Talk(Texts.SayBoneStorm);
me.FinishSpell(CurrentSpellTypes.Melee, false);
DoCast(me, Spells.BoneStorm);
_events.DelayEvents(3000, Misc.EventGroupSpecial);
_events.ScheduleEvent(Misc.EventBoneStormBegin, 3050);
_events.ScheduleEvent(Misc.EventWarnBoneStorm, RandomHelper.URand(90000, 95000));
break;
case Misc.EventBoneStormBegin:
Aura pStorm = me.GetAura(Spells.BoneStorm);
if (pStorm != null)
pStorm.SetDuration((int)_boneStormDuration);
me.SetSpeedRate(UnitMoveType.Run, _baseSpeed * 3.0f);
Talk(Texts.SayBoneStorm);
_events.ScheduleEvent(Misc.EventBoneStormEnd, _boneStormDuration + 1);
goto case Misc.EventBoneStormMove;
// no break here
case Misc.EventBoneStormMove:
{
_events.ScheduleEvent(Misc.EventBoneStormMove, _boneStormDuration / 3);
Unit unit = SelectTarget(SelectAggroTarget.Random, 0, new NonTankTargetSelector(me));
if (!unit)
unit = SelectTarget(SelectAggroTarget.Random, 0, 0.0f, true);
if (unit)
me.GetMotionMaster().MovePoint(Misc.PointTargetBonestormPlayer, unit);
break;
}
case Misc.EventBoneStormEnd:
if (me.GetMotionMaster().GetCurrentMovementGeneratorType() == MovementGeneratorType.Point)
me.GetMotionMaster().MovementExpired();
me.GetMotionMaster().MoveChase(me.GetVictim());
me.SetSpeedRate(UnitMoveType.Run, _baseSpeed);
_events.CancelEvent(Misc.EventBoneStormMove);
_events.ScheduleEvent(Misc.EventEnableBoneSlice, 10000);
if (!IsHeroic())
_events.RescheduleEvent(Misc.EventBoneSpikeGraveyard, 15000, Misc.EventGroupSpecial);
break;
case Misc.EventEnableBoneSlice:
_boneSlice = true;
break;
case Misc.EventEnrage:
DoCast(me, Texts.SayBerserk, true);
Talk(Texts.SayBerserk);
break;
}
});
// We should not melee attack when storming
if (me.HasAura(Spells.BoneStorm))
return;
// 10 seconds since encounter start Bone Slice replaces melee attacks
if (_boneSlice && !me.GetCurrentSpell(CurrentSpellTypes.Melee))
DoCastVictim(Spells.BoneSlice);
DoMeleeAttackIfReady();
}
public override void MovementInform(MovementGeneratorType type, uint id)
{
if (type != MovementGeneratorType.Point || id != Misc.PointTargetBonestormPlayer)
return;
// lock movement
me.GetMotionMaster().MoveIdle();
}
public Position GetLastColdflamePosition()
{
return _coldflameLastPos;
}
public override ObjectGuid GetGUID(int type = 0)
{
switch (type)
{
case Misc.DataColdflameGuid:
return _coldflameTarget;
case Misc.DataSpikeImmune + 0:
case Misc.DataSpikeImmune + 1:
case Misc.DataSpikeImmune + 2:
{
int index = type - Misc.DataSpikeImmune;
if (index < _boneSpikeImmune.Count)
return _boneSpikeImmune[index];
break;
}
}
return ObjectGuid.Empty;
}
public override void SetGUID(ObjectGuid guid, int type = 0)
{
switch (type)
{
case Misc.DataColdflameGuid:
_coldflameTarget = guid;
break;
case Misc.DataSpikeImmune:
_boneSpikeImmune.Add(guid);
break;
}
}
public override void DoAction(int action)
{
if (action != Misc.ActionClearSpikeImmunities)
return;
_boneSpikeImmune.Clear();
}
Position _coldflameLastPos = new Position();
List<ObjectGuid> _boneSpikeImmune = new List<ObjectGuid>();
ObjectGuid _coldflameTarget;
uint _boneStormDuration;
float _baseSpeed;
bool _introDone;
bool _boneSlice;
}
public override CreatureAI GetAI(Creature creature)
{
return InstanceIcecrownCitadel.GetInstanceAI<boss_lord_marrowgarAI>(creature);
}
}
[Script]
class npc_coldflame : CreatureScript
{
public npc_coldflame() : base("npc_coldflame") { }
class npc_coldflameAI : ScriptedAI
{
public npc_coldflameAI(Creature creature) : base(creature) { }
public override void IsSummonedBy(Unit owner)
{
if (!owner.IsTypeId(TypeId.Player))
return;
Position pos = new Position();
var marrowgarAI = (boss_lord_marrowgar.boss_lord_marrowgarAI)owner.GetAI();
if (marrowgarAI != null)
pos.Relocate(marrowgarAI.GetLastColdflamePosition());
else
pos.Relocate(owner);
if (owner.HasAura(Spells.BoneStorm))
{
float ang = Position.NormalizeOrientation(pos.GetAngle(me));
me.SetOrientation(ang);
owner.GetNearPoint2D(out pos.posX, out pos.posY, 5.0f - owner.GetObjectSize(), ang);
}
else
{
Player target = Global.ObjAccessor.GetPlayer(owner, owner.GetAI().GetGUID(Misc.DataColdflameGuid));
if (!target)
{
me.DespawnOrUnsummon();
return;
}
float ang = Position.NormalizeOrientation(pos.GetAngle(target));
me.SetOrientation(ang);
owner.GetNearPoint2D(out pos.posX, out pos.posY, 15.0f - owner.GetObjectSize(), ang);
}
me.NearTeleportTo(pos.GetPositionX(), pos.GetPositionY(), me.GetPositionZ(), me.GetOrientation());
DoCast(Spells.ColdflameSummon);
_events.ScheduleEvent(Misc.EventColdflameTrigger, 500);
}
public override void UpdateAI(uint diff)
{
_events.Update(diff);
if (_events.ExecuteEvent() == Misc.EventColdflameTrigger)
{
Position newPos = me.GetNearPosition(5.0f, 0.0f);
me.NearTeleportTo(newPos.GetPositionX(), newPos.GetPositionY(), me.GetPositionZ(), me.GetOrientation());
DoCast(Spells.ColdflameSummon);
_events.ScheduleEvent(Misc.EventColdflameTrigger, 500);
}
}
}
public override CreatureAI GetAI(Creature creature)
{
return InstanceIcecrownCitadel.GetInstanceAI<npc_coldflameAI>(creature);
}
}
[Script]
class npc_bone_spike : CreatureScript
{
public npc_bone_spike() : base("npc_bone_spike") { }
class npc_bone_spikeAI : ScriptedAI
{
public npc_bone_spikeAI(Creature creature)
: base(creature)
{
_hasTrappedUnit = false;
Contract.Assert(creature.GetVehicleKit());
SetCombatMovement(false);
}
public override void JustDied(Unit killer)
{
TempSummon summ = me.ToTempSummon();
if (summ)
{
Unit trapped = summ.GetSummoner();
if (trapped)
trapped.RemoveAurasDueToSpell(Spells.Impaled);
}
me.DespawnOrUnsummon();
}
public override void KilledUnit(Unit victim)
{
me.DespawnOrUnsummon();
victim.RemoveAurasDueToSpell(Spells.Impaled);
}
public override void IsSummonedBy(Unit summoner)
{
DoCast(summoner, Spells.Impaled);
summoner.CastSpell(me, Spells.RideVehicle, true);
_events.ScheduleEvent(Misc.EventFailBoned, 8000);
_hasTrappedUnit = true;
}
public override void PassengerBoarded(Unit passenger, sbyte seat, bool apply)
{
if (!apply)
return;
// @HACK - Change passenger offset to the one taken directly from sniffs
// Remove this when proper calculations are implemented.
// This fixes healing spiked people
MoveSplineInit init = new MoveSplineInit(passenger);
init.DisableTransportPathTransformations();
init.MoveTo(-0.02206125f, -0.02132235f, 5.514783f, false);
init.Launch();
}
public override void UpdateAI(uint diff)
{
if (!_hasTrappedUnit)
return;
_events.Update(diff);
if (_events.ExecuteEvent() == Misc.EventFailBoned)
{
InstanceScript instance = me.GetInstanceScript();
if (instance != null)
instance.SetData(DataTypes.BonedAchievement, 0);
}
}
bool _hasTrappedUnit;
}
public override CreatureAI GetAI(Creature creature)
{
return InstanceIcecrownCitadel.GetInstanceAI<npc_bone_spikeAI>(creature);
}
}
[Script]
class spell_marrowgar_coldflame : SpellScriptLoader
{
public spell_marrowgar_coldflame() : base("spell_marrowgar_coldflame") { }
class spell_marrowgar_coldflame_SpellScript : SpellScript
{
void SelectTarget(List<WorldObject> targets)
{
targets.Clear();
// select any unit but not the tank (by owners threatlist)
Unit target = GetCaster().GetAI().SelectTarget(SelectAggroTarget.Random, 1, -GetCaster().GetObjectSize(), true, -(int)Spells.Impaled);
if (!target)
target = GetCaster().GetAI().SelectTarget(SelectAggroTarget.Random, 0, 0.0f, true); // or the tank if its solo
if (!target)
return;
GetCaster().GetAI().SetGUID(target.GetGUID(), Misc.DataColdflameGuid);
targets.Add(target);
}
void HandleScriptEffect(uint effIndex)
{
PreventHitDefaultEffect(effIndex);
GetCaster().CastSpell(GetHitUnit(), (uint)GetEffectValue(), true);
}
public override void Register()
{
OnObjectAreaTargetSelect.Add(new ObjectAreaTargetSelectHandler(SelectTarget, 0, Targets.UnitDestAreaEnemy));
OnEffectHitTarget.Add(new EffectHandler(HandleScriptEffect, 0, SpellEffectName.ScriptEffect));
}
}
public override SpellScript GetSpellScript()
{
return new spell_marrowgar_coldflame_SpellScript();
}
}
[Script]
class spell_marrowgar_coldflame_bonestorm : SpellScriptLoader
{
public spell_marrowgar_coldflame_bonestorm() : base("spell_marrowgar_coldflame_bonestorm") { }
class spell_marrowgar_coldflame_SpellScript : SpellScript
{
void HandleScriptEffect(uint effIndex)
{
PreventHitDefaultEffect(effIndex);
for (byte i = 0; i < 4; ++i)
GetCaster().CastSpell(GetHitUnit(), (uint)(GetEffectValue() + i), true);
}
public override void Register()
{
OnEffectHitTarget.Add(new EffectHandler(HandleScriptEffect, 0, SpellEffectName.ScriptEffect));
}
}
public override SpellScript GetSpellScript()
{
return new spell_marrowgar_coldflame_SpellScript();
}
}
[Script]
class spell_marrowgar_coldflame_damage : SpellScriptLoader
{
public spell_marrowgar_coldflame_damage() : base("spell_marrowgar_coldflame_damage") { }
class spell_marrowgar_coldflame_damage_AuraScript : AuraScript
{
bool CanBeAppliedOn(Unit target)
{
if (target.HasAura(Spells.Impaled))
return false;
if (target.GetExactDist2d(GetOwner()) > GetSpellInfo().GetEffect(target.GetMap().GetDifficultyID(), 0).CalcRadius())
return false;
Aura aur = target.GetAura(GetId());
if (aur != null)
if (aur.GetOwner() != GetOwner())
return false;
return true;
}
public override void Register()
{
DoCheckAreaTarget.Add(new CheckAreaTargetHandler(CanBeAppliedOn));
}
}
public override AuraScript GetAuraScript()
{
return new spell_marrowgar_coldflame_damage_AuraScript();
}
}
[Script]
class spell_marrowgar_bone_spike_graveyard : SpellScriptLoader
{
public spell_marrowgar_bone_spike_graveyard() : base("spell_marrowgar_bone_spike_graveyard") { }
class spell_marrowgar_bone_spike_graveyard_SpellScript : SpellScript
{
public override bool Validate(SpellInfo spell)
{
return ValidateSpellInfo(Misc.BoneSpikeSummonId);
}
public override bool Load()
{
return GetCaster().IsTypeId(TypeId.Unit) && GetCaster().IsAIEnabled;
}
SpellCastResult CheckCast()
{
return GetCaster().GetAI().SelectTarget(SelectAggroTarget.Random, 0, new BoneSpikeTargetSelector(GetCaster().GetAI())) ? SpellCastResult.SpellCastOk : SpellCastResult.NoValidTargets;
}
void HandleSpikes(uint effIndex)
{
PreventHitDefaultEffect(effIndex);
Creature marrowgar = GetCaster().ToCreature();
if (marrowgar)
{
CreatureAI marrowgarAI = marrowgar.GetAI();
byte boneSpikeCount = (byte)(Convert.ToBoolean((int)GetCaster().GetMap().GetSpawnMode() & 1) ? 3 : 1);
List<Unit> targets = marrowgarAI.SelectTargetList(new BoneSpikeTargetSelector(marrowgarAI), boneSpikeCount, SelectAggroTarget.Random);
if (targets.Empty())
return;
uint i = 0;
foreach (var target in targets)
{
target.CastSpell(target, Misc.BoneSpikeSummonId[i], true);
i++;
}
marrowgarAI.Talk(Texts.SayBonespike);
}
}
public override void Register()
{
OnCheckCast.Add(new CheckCastHandler(CheckCast));
OnEffectHitTarget.Add(new EffectHandler(HandleSpikes, 1, SpellEffectName.ApplyAura));
}
}
public override SpellScript GetSpellScript()
{
return new spell_marrowgar_bone_spike_graveyard_SpellScript();
}
}
[Script]
class spell_marrowgar_bone_storm : SpellScriptLoader
{
public spell_marrowgar_bone_storm() : base("spell_marrowgar_bone_storm") { }
class spell_marrowgar_bone_storm_SpellScript : SpellScript
{
void RecalculateDamage()
{
SetHitDamage((int)(GetHitDamage() / Math.Max(Math.Sqrt(GetHitUnit().GetExactDist2d(GetCaster())), 1.0f)));
}
public override void Register()
{
OnHit.Add(new HitHandler(RecalculateDamage));
}
}
public override SpellScript GetSpellScript()
{
return new spell_marrowgar_bone_storm_SpellScript();
}
}
[Script]
class spell_marrowgar_bone_slice : SpellScriptLoader
{
public spell_marrowgar_bone_slice() : base("spell_marrowgar_bone_slice") { }
class spell_marrowgar_bone_slice_SpellScript : SpellScript
{
public override bool Load()
{
_targetCount = 0;
return true;
}
void ClearSpikeImmunities()
{
GetCaster().GetAI().DoAction(Misc.ActionClearSpikeImmunities);
}
void CountTargets(List<WorldObject> targets)
{
_targetCount = (uint)Math.Min(targets.Count, GetSpellInfo().MaxAffectedTargets);
}
void SplitDamage()
{
// Mark the unit as hit, even if the spell missed or was dodged/parried
GetCaster().GetAI().SetGUID(GetHitUnit().GetGUID(), Misc.DataSpikeImmune);
if (_targetCount == 0)
return; // This spell can miss all targets
SetHitDamage((int)(GetHitDamage() / _targetCount));
}
public override void Register()
{
BeforeCast.Add(new CastHandler(ClearSpikeImmunities));
OnObjectAreaTargetSelect.Add(new ObjectAreaTargetSelectHandler(CountTargets, 0, Targets.UnitDestAreaEnemy));
OnHit.Add(new HitHandler(SplitDamage));
}
uint _targetCount;
}
public override SpellScript GetSpellScript()
{
return new spell_marrowgar_bone_slice_SpellScript();
}
}
}
}
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,35 @@
/*
* Copyright (C) 2012-2017 CypherCore <http://github.com/CypherCore>
*
* 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
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
using Game.Entities;
namespace Scripts.Northrend.IcecrownCitadel
{
public class Sindragosa
{
Position RimefangFlyPos = new Position(4413.309f, 2456.421f, 233.3795f, 2.890186f);
Position RimefangLandPos = new Position(4413.309f, 2456.421f, 203.3848f, 2.890186f);
Position SpinestalkerFlyPos = new Position(4418.895f, 2514.233f, 230.4864f, 3.396045f);
Position SpinestalkerLandPos = new Position(4418.895f, 2514.233f, 203.3848f, 3.396045f);
public static Position SindragosaSpawnPos = new Position(4818.700f, 2483.710f, 287.0650f, 3.089233f);
Position SindragosaFlyPos = new Position(4475.190f, 2484.570f, 234.8510f, 3.141593f);
Position SindragosaLandPos = new Position(4419.190f, 2484.570f, 203.3848f, 3.141593f);
Position SindragosaAirPos = new Position(4475.990f, 2484.430f, 247.9340f, 3.141593f);
Position SindragosaAirPosFar = new Position(4525.600f, 2485.150f, 245.0820f, 3.141593f);
Position SindragosaFlyInPos = new Position(4419.190f, 2484.360f, 232.5150f, 3.141593f);
}
}
@@ -0,0 +1,39 @@
/*
* Copyright (C) 2012-2017 CypherCore <http://github.com/CypherCore>
*
* 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
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
using Game.Entities;
namespace Scripts.Northrend.IcecrownCitadel
{
public class TheLichKing
{
Position CenterPosition = new Position(503.6282f, -2124.655f, 840.8569f, 0.0f);
Position TirionIntro = new Position(489.2970f, -2124.840f, 840.8569f, 0.0f);
Position TirionCharge = new Position(482.9019f, -2124.479f, 840.8570f, 0.0f);
Position[] LichKingIntro =
{
new Position(432.0851f, -2123.673f, 864.6582f, 0.0f),
new Position(457.8351f, -2123.423f, 841.1582f, 0.0f),
new Position(465.0730f, -2123.470f, 840.8569f, 0.0f),
};
Position OutroPosition1 = new Position(493.6286f, -2124.569f, 840.8569f, 0.0f);
Position OutroFlying = new Position(508.9897f, -2124.561f, 845.3565f, 0.0f);
public static Position TerenasSpawn = new Position(495.5542f, -2517.012f, 1050.000f, 4.6993f);
Position TerenasSpawnHeroic = new Position(495.7080f, -2523.760f, 1050.000f, 0.0f);
public static Position SpiritWardenSpawn = new Position(495.3406f, -2529.983f, 1050.000f, 1.5592f);
}
}
@@ -0,0 +1,26 @@
/*
* Copyright (C) 2012-2017 CypherCore <http://github.com/CypherCore>
*
* 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
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
using Game.Entities;
namespace Scripts.Northrend.IcecrownCitadel
{
public class ValithriaDreamwalker
{
public static Position ValithriaSpawnPos = new Position(4210.813f, 2484.443f, 364.9558f, 0.01745329f);
}
}