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:
Fabian
2017-10-26 17:23:44 +02:00
parent 227702e19c
commit a3dc7b3f48
844 changed files with 26064 additions and 1824 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,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);
}
}