Ported .Net Core commits:
hondacrx: - Initial commit: Switch to .Net Core 2.0 - Fix build and removed not needed files Fabi: - Updated solution platforms. - Changed folder structure. - Change library target framework to netstandard2.0. - Updated solution platforms again... - Removed windows specific kernel32 function usage (Ctrl-C handler).
This commit is contained in:
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,645 @@
|
||||
/*
|
||||
* 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]
|
||||
public class boss_lord_marrowgar : BossAI
|
||||
{
|
||||
public boss_lord_marrowgar(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;
|
||||
}
|
||||
|
||||
[Script]
|
||||
class npc_coldflame : ScriptedAI
|
||||
{
|
||||
public npc_coldflame(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)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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[Script]
|
||||
class npc_bone_spike : ScriptedAI
|
||||
{
|
||||
public npc_bone_spike(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;
|
||||
}
|
||||
|
||||
[Script]
|
||||
class spell_marrowgar_coldflame : 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));
|
||||
}
|
||||
}
|
||||
|
||||
[Script]
|
||||
class spell_marrowgar_coldflame_bonestorm : 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));
|
||||
}
|
||||
}
|
||||
|
||||
[Script]
|
||||
class spell_marrowgar_coldflame_damage : 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));
|
||||
}
|
||||
}
|
||||
|
||||
[Script]
|
||||
class spell_marrowgar_bone_spike_graveyard : 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));
|
||||
}
|
||||
}
|
||||
|
||||
[Script]
|
||||
class spell_marrowgar_bone_storm : SpellScript
|
||||
{
|
||||
void RecalculateDamage()
|
||||
{
|
||||
SetHitDamage((int)(GetHitDamage() / Math.Max(Math.Sqrt(GetHitUnit().GetExactDist2d(GetCaster())), 1.0f)));
|
||||
}
|
||||
|
||||
public override void Register()
|
||||
{
|
||||
OnHit.Add(new HitHandler(RecalculateDamage));
|
||||
}
|
||||
}
|
||||
|
||||
[Script]
|
||||
class spell_marrowgar_bone_slice : 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;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user