Core/Scripts: unified scripted gossip/quest api
Port From (https://github.com/TrinityCore/TrinityCore/commit/6604849716bc73d82a4cdbf8c66bb188086ceae4)
This commit is contained in:
@@ -364,33 +364,44 @@ namespace Scripts.Northrend.AzjolNerub.Ahnkahet.PrinceTaldaram
|
||||
{
|
||||
public go_prince_taldaram_sphere() : base("go_prince_taldaram_sphere") { }
|
||||
|
||||
public override bool OnGossipHello(Player player, GameObject go)
|
||||
class go_prince_taldaram_sphereAI : GameObjectAI
|
||||
{
|
||||
InstanceScript instance = go.GetInstanceScript();
|
||||
if (instance == null)
|
||||
return false;
|
||||
|
||||
Creature PrinceTaldaram = ObjectAccessor.GetCreature(go, instance.GetGuidData(DataTypes.PrinceTaldaram));
|
||||
if (PrinceTaldaram && PrinceTaldaram.IsAlive())
|
||||
public go_prince_taldaram_sphereAI(GameObject go) : base(go)
|
||||
{
|
||||
go.AddFlag(GameObjectFlags.NotSelectable);
|
||||
go.SetGoState(GameObjectState.Active);
|
||||
|
||||
switch (go.GetEntry())
|
||||
{
|
||||
case GameObjectIds.Sphere1:
|
||||
instance.SetData(DataTypes.Sphere1, (uint)EncounterState.InProgress);
|
||||
PrinceTaldaram.GetAI().Talk(TextIds.Say1);
|
||||
break;
|
||||
case GameObjectIds.Sphere2:
|
||||
instance.SetData(DataTypes.Sphere2, (uint)EncounterState.InProgress);
|
||||
PrinceTaldaram.GetAI().Talk(TextIds.Say1);
|
||||
break;
|
||||
}
|
||||
|
||||
PrinceTaldaram.GetAI<boss_prince_taldaram>().CheckSpheres();
|
||||
instance = go.GetInstanceScript();
|
||||
}
|
||||
return true;
|
||||
|
||||
public override bool GossipHello(Player player, bool reportUse)
|
||||
{
|
||||
Creature PrinceTaldaram = ObjectAccessor.GetCreature(me, instance.GetGuidData(DataTypes.PrinceTaldaram));
|
||||
if (PrinceTaldaram && PrinceTaldaram.IsAlive())
|
||||
{
|
||||
me.AddFlag(GameObjectFlags.NotSelectable);
|
||||
me.SetGoState(GameObjectState.Active);
|
||||
|
||||
switch (me.GetEntry())
|
||||
{
|
||||
case GameObjectIds.Sphere1:
|
||||
instance.SetData(DataTypes.Sphere1, (uint)EncounterState.InProgress);
|
||||
PrinceTaldaram.GetAI().Talk(TextIds.Say1);
|
||||
break;
|
||||
case GameObjectIds.Sphere2:
|
||||
instance.SetData(DataTypes.Sphere2, (uint)EncounterState.InProgress);
|
||||
PrinceTaldaram.GetAI().Talk(TextIds.Say1);
|
||||
break;
|
||||
}
|
||||
|
||||
PrinceTaldaram.GetAI<boss_prince_taldaram>().CheckSpheres();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
InstanceScript instance;
|
||||
}
|
||||
|
||||
public override GameObjectAI GetAI(GameObject go)
|
||||
{
|
||||
return GetInstanceAI<go_prince_taldaram_sphereAI>(go);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+34
-37
@@ -518,6 +518,40 @@ namespace Scripts.Northrend.CrusadersColiseum.TrialOfTheChampion
|
||||
}
|
||||
}
|
||||
|
||||
public override bool GossipHello(Player player)
|
||||
{
|
||||
if (((instance.GetData((uint)Data.BOSS_GRAND_CHAMPIONS) == (uint)EncounterState.Done &&
|
||||
instance.GetData((uint)Data.BOSS_BLACK_KNIGHT) == (uint)EncounterState.Done &&
|
||||
instance.GetData((uint)Data.BOSS_ARGENT_CHALLENGE_E) == (uint)EncounterState.Done) ||
|
||||
instance.GetData((uint)Data.BOSS_ARGENT_CHALLENGE_P) == (uint)EncounterState.Done))
|
||||
return false;
|
||||
|
||||
if (instance.GetData((uint)Data.BOSS_GRAND_CHAMPIONS) == (uint)EncounterState.NotStarted &&
|
||||
instance.GetData((uint)Data.BOSS_ARGENT_CHALLENGE_E) == (uint)EncounterState.NotStarted &&
|
||||
instance.GetData((uint)Data.BOSS_ARGENT_CHALLENGE_P) == (uint)EncounterState.NotStarted &&
|
||||
instance.GetData((uint)Data.BOSS_BLACK_KNIGHT) == (uint)EncounterState.NotStarted)
|
||||
player.ADD_GOSSIP_ITEM(GossipOptionIcon.Chat, TrialOfTheChampionConst.GOSSIP_START_EVENT1, eTradeskill.GossipSenderMain, eTradeskill.GossipActionInfoDef + 1);
|
||||
else if (instance != null)
|
||||
player.ADD_GOSSIP_ITEM(GossipOptionIcon.Chat, TrialOfTheChampionConst.GOSSIP_START_EVENT2, eTradeskill.GossipSenderMain, eTradeskill.GossipActionInfoDef + 1);
|
||||
|
||||
SendGossipMenuFor(player, player.GetGossipTextId(me), me.GetGUID());
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public override bool GossipSelect(Player player, uint menuId, uint gossipListId)
|
||||
{
|
||||
uint action = player.PlayerTalkClass.GetGossipOptionAction(gossipListId);
|
||||
ClearGossipMenuFor(player);
|
||||
if (action == eTradeskill.GossipActionInfoDef + 1)
|
||||
{
|
||||
CloseGossipMenuFor(player);
|
||||
StartEncounter();
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
InstanceScript instance;
|
||||
|
||||
byte uiSummonTimes;
|
||||
@@ -543,43 +577,6 @@ namespace Scripts.Northrend.CrusadersColiseum.TrialOfTheChampion
|
||||
Position SpawnPosition = new Position(746.261f, 657.401f, 411.681f, 4.65f);
|
||||
}
|
||||
|
||||
public override bool OnGossipHello(Player player, Creature creature)
|
||||
{
|
||||
InstanceScript instance = creature.GetInstanceScript();
|
||||
|
||||
if (instance != null &&
|
||||
((instance.GetData((uint)Data.BOSS_GRAND_CHAMPIONS) == (uint)EncounterState.Done &&
|
||||
instance.GetData((uint)Data.BOSS_BLACK_KNIGHT) == (uint)EncounterState.Done &&
|
||||
instance.GetData((uint)Data.BOSS_ARGENT_CHALLENGE_E) == (uint)EncounterState.Done) ||
|
||||
instance.GetData((uint)Data.BOSS_ARGENT_CHALLENGE_P) == (uint)EncounterState.Done))
|
||||
return false;
|
||||
|
||||
if (instance != null &&
|
||||
instance.GetData((uint)Data.BOSS_GRAND_CHAMPIONS) == (uint)EncounterState.NotStarted &&
|
||||
instance.GetData((uint)Data.BOSS_ARGENT_CHALLENGE_E) == (uint)EncounterState.NotStarted &&
|
||||
instance.GetData((uint)Data.BOSS_ARGENT_CHALLENGE_P) == (uint)EncounterState.NotStarted &&
|
||||
instance.GetData((uint)Data.BOSS_BLACK_KNIGHT) == (uint)EncounterState.NotStarted)
|
||||
player.ADD_GOSSIP_ITEM(GossipOptionIcon.Chat, TrialOfTheChampionConst.GOSSIP_START_EVENT1, eTradeskill.GossipSenderMain, eTradeskill.GossipActionInfoDef + 1);
|
||||
else if (instance != null)
|
||||
player.ADD_GOSSIP_ITEM(GossipOptionIcon.Chat, TrialOfTheChampionConst.GOSSIP_START_EVENT2, eTradeskill.GossipSenderMain, eTradeskill.GossipActionInfoDef + 1);
|
||||
|
||||
player.SEND_GOSSIP_MENU(player.GetGossipTextId(creature), creature.GetGUID());
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public override bool OnGossipSelect(Player player, Creature creature, uint sender, uint action)
|
||||
{
|
||||
player.PlayerTalkClass.ClearMenus();
|
||||
if (action == eTradeskill.GossipActionInfoDef + 1)
|
||||
{
|
||||
player.CLOSE_GOSSIP_MENU();
|
||||
((npc_announcer_toc5AI)creature.GetAI()).StartEncounter();
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public override CreatureAI GetAI(Creature creature)
|
||||
{
|
||||
return GetInstanceAI<npc_announcer_toc5AI>(creature);
|
||||
|
||||
+70
-81
@@ -22,6 +22,7 @@ using Game.AI;
|
||||
using Game.Entities;
|
||||
using Game.Maps;
|
||||
using Game.Scripting;
|
||||
using System.Linq;
|
||||
|
||||
namespace Scripts.Northrend.CrusadersColiseum.TrialOfTheCrusader
|
||||
{
|
||||
@@ -779,7 +780,10 @@ namespace Scripts.Northrend.CrusadersColiseum.TrialOfTheCrusader
|
||||
|
||||
class npc_announcer_toc10AI : ScriptedAI
|
||||
{
|
||||
public npc_announcer_toc10AI(Creature creature) : base(creature) { }
|
||||
public npc_announcer_toc10AI(Creature creature) : base(creature)
|
||||
{
|
||||
instance = creature.GetInstanceScript();
|
||||
}
|
||||
|
||||
public override void Reset()
|
||||
{
|
||||
@@ -794,101 +798,86 @@ namespace Scripts.Northrend.CrusadersColiseum.TrialOfTheCrusader
|
||||
}
|
||||
|
||||
public override void AttackStart(Unit who) { }
|
||||
}
|
||||
|
||||
public override bool OnGossipHello(Player player, Creature creature)
|
||||
{
|
||||
InstanceScript instance = creature.GetInstanceScript();
|
||||
if (instance == null)
|
||||
return true;
|
||||
|
||||
string _message = "We are ready!";
|
||||
|
||||
if (player.IsInCombat() || instance.IsEncounterInProgress() || instance.GetData(DataTypes.Event) != 0)
|
||||
return true;
|
||||
|
||||
byte i = 0;
|
||||
for (; i < MiscData._GossipMessage.Length; ++i)
|
||||
public override bool GossipHello(Player player)
|
||||
{
|
||||
if ((!MiscData._GossipMessage[i].state && instance.GetBossState(MiscData._GossipMessage[i].encounter) != EncounterState.Done)
|
||||
|| (MiscData._GossipMessage[i].state && instance.GetBossState(MiscData._GossipMessage[i].encounter) == EncounterState.Done))
|
||||
string _message = "We are ready!";
|
||||
|
||||
if (player.IsInCombat() || instance.IsEncounterInProgress() || instance.GetData(DataTypes.Event) != 0)
|
||||
return true;
|
||||
|
||||
byte i = 0;
|
||||
for (; i < MiscData._GossipMessage.Length; ++i)
|
||||
{
|
||||
player.ADD_GOSSIP_ITEM(GossipOptionIcon.Chat, _message, eTradeskill.GossipSenderMain, MiscData._GossipMessage[i].id);
|
||||
break;
|
||||
if ((!MiscData._GossipMessage[i].state && instance.GetBossState(MiscData._GossipMessage[i].encounter) != EncounterState.Done)
|
||||
|| (MiscData._GossipMessage[i].state && instance.GetBossState(MiscData._GossipMessage[i].encounter) == EncounterState.Done))
|
||||
{
|
||||
AddGossipItemFor(player, GossipOptionIcon.Chat, _message, eTradeskill.GossipSenderMain, MiscData._GossipMessage[i].id);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (i >= MiscData._GossipMessage.Length)
|
||||
return false;
|
||||
if (i >= MiscData._GossipMessage.Length)
|
||||
return false;
|
||||
|
||||
player.SEND_GOSSIP_MENU((uint)MiscData._GossipMessage[i].msgnum, creature.GetGUID());
|
||||
return true;
|
||||
}
|
||||
|
||||
public override bool OnGossipSelect(Player player, Creature creature, uint sender, uint action)
|
||||
{
|
||||
player.PlayerTalkClass.ClearMenus();
|
||||
player.CLOSE_GOSSIP_MENU();
|
||||
InstanceScript instance = creature.GetInstanceScript();
|
||||
if (instance == null)
|
||||
SendGossipMenuFor(player, (uint)MiscData._GossipMessage[i].msgnum, me.GetGUID());
|
||||
return true;
|
||||
|
||||
if (instance.GetBossState(DataTypes.BossBeasts) != EncounterState.Done)
|
||||
{
|
||||
instance.SetData(DataTypes.Event, 110);
|
||||
instance.SetData(DataTypes.NorthrendBeasts, (uint)EncounterState.NotStarted);
|
||||
instance.SetBossState(DataTypes.BossBeasts, EncounterState.NotStarted);
|
||||
}
|
||||
else if (instance.GetBossState(DataTypes.BossJaraxxus) != EncounterState.Done)
|
||||
|
||||
public override bool GossipSelect(Player player, uint menuId, uint gossipListId)
|
||||
{
|
||||
// if Jaraxxus is spawned, but the raid wiped
|
||||
Creature jaraxxus = ObjectAccessor.GetCreature(player, instance.GetGuidData(CreatureIds.Jaraxxus));
|
||||
if (jaraxxus)
|
||||
ClearGossipMenuFor(player);
|
||||
CloseGossipMenuFor(player);
|
||||
|
||||
if (instance.GetBossState(DataTypes.BossBeasts) != EncounterState.Done)
|
||||
{
|
||||
jaraxxus.RemoveAurasDueToSpell(Spells.JaraxxusChains);
|
||||
jaraxxus.RemoveUnitFlag(UnitFlags.NonAttackable);
|
||||
jaraxxus.SetReactState(ReactStates.Defensive);
|
||||
jaraxxus.SetInCombatWithZone();
|
||||
instance.SetData(DataTypes.Event, 110);
|
||||
instance.SetData(DataTypes.NorthrendBeasts, (uint)EncounterState.NotStarted);
|
||||
instance.SetBossState(DataTypes.BossBeasts, EncounterState.NotStarted);
|
||||
}
|
||||
else
|
||||
else if (instance.GetBossState(DataTypes.BossJaraxxus) != EncounterState.Done)
|
||||
{
|
||||
instance.SetData(DataTypes.Event, 1010);
|
||||
instance.SetBossState(DataTypes.BossJaraxxus, EncounterState.NotStarted);
|
||||
// if Jaraxxus is spawned, but the raid wiped
|
||||
Creature jaraxxus = ObjectAccessor.GetCreature(player, instance.GetGuidData(CreatureIds.Jaraxxus));
|
||||
if (jaraxxus)
|
||||
{
|
||||
jaraxxus.RemoveAurasDueToSpell(Spells.JaraxxusChains);
|
||||
jaraxxus.RemoveUnitFlag(UnitFlags.NonAttackable);
|
||||
jaraxxus.SetReactState(ReactStates.Defensive);
|
||||
jaraxxus.SetInCombatWithZone();
|
||||
}
|
||||
else
|
||||
{
|
||||
instance.SetData(DataTypes.Event, 1010);
|
||||
instance.SetBossState(DataTypes.BossJaraxxus, EncounterState.NotStarted);
|
||||
}
|
||||
}
|
||||
else if (instance.GetBossState(DataTypes.BossCrusaders) != EncounterState.Done)
|
||||
{
|
||||
if (player.GetTeam() == Team.Alliance)
|
||||
instance.SetData(DataTypes.Event, 3000);
|
||||
else
|
||||
instance.SetData(DataTypes.Event, 3001);
|
||||
instance.SetBossState(DataTypes.BossCrusaders, EncounterState.NotStarted);
|
||||
}
|
||||
else if (instance.GetBossState(DataTypes.BossValkiries) != EncounterState.Done)
|
||||
{
|
||||
instance.SetData(DataTypes.Event, 4000);
|
||||
instance.SetBossState(DataTypes.BossValkiries, EncounterState.NotStarted);
|
||||
}
|
||||
else if (instance.GetBossState(DataTypes.BossLichKing) != EncounterState.Done)
|
||||
{
|
||||
if (me.GetMap().GetPlayers().First().GetTeam() == Team.Alliance)
|
||||
instance.SetData(DataTypes.Event, 4020);
|
||||
else
|
||||
instance.SetData(DataTypes.Event, 4030);
|
||||
instance.SetBossState(DataTypes.BossLichKing, EncounterState.NotStarted);
|
||||
}
|
||||
me.RemoveNpcFlag(NPCFlags.Gossip);
|
||||
return true;
|
||||
}
|
||||
else if (instance.GetBossState(DataTypes.BossCrusaders) != EncounterState.Done)
|
||||
{
|
||||
if (player.GetTeam() == Team.Alliance)
|
||||
instance.SetData(DataTypes.Event, 3000);
|
||||
else
|
||||
instance.SetData(DataTypes.Event, 3001);
|
||||
instance.SetBossState(DataTypes.BossCrusaders, EncounterState.NotStarted);
|
||||
}
|
||||
else if (instance.GetBossState(DataTypes.BossValkiries) != EncounterState.Done)
|
||||
{
|
||||
instance.SetData(DataTypes.Event, 4000);
|
||||
instance.SetBossState(DataTypes.BossValkiries, EncounterState.NotStarted);
|
||||
}
|
||||
else if (instance.GetBossState(DataTypes.BossLichKing) != EncounterState.Done)
|
||||
{
|
||||
GameObject floor = ObjectAccessor.GetGameObject(player, instance.GetGuidData(GameObjectIds.ArgentColiseumFloor));
|
||||
if (floor)
|
||||
floor.SetDestructibleState(GameObjectDestructibleState.Damaged);
|
||||
|
||||
creature.CastSpell(creature, Spells.CorpseTeleport, false);
|
||||
creature.CastSpell(creature, Spells.DestroyFloorKnockup, false);
|
||||
|
||||
Creature anubArak = ObjectAccessor.GetCreature(creature, instance.GetGuidData(CreatureIds.Anubarak));
|
||||
if (!anubArak || !anubArak.IsAlive())
|
||||
anubArak = creature.SummonCreature(CreatureIds.Anubarak, MiscData.AnubarakLoc[0].GetPositionX(), MiscData.AnubarakLoc[0].GetPositionY(), MiscData.AnubarakLoc[0].GetPositionZ(), 3, TempSummonType.CorpseTimedDespawn, MiscData.DespawnTime);
|
||||
|
||||
instance.SetBossState(DataTypes.BossAnubarak, EncounterState.NotStarted);
|
||||
|
||||
if (creature.IsVisible())
|
||||
creature.SetVisible(false);
|
||||
}
|
||||
creature.RemoveNpcFlag(NPCFlags.Gossip);
|
||||
return true;
|
||||
InstanceScript instance;
|
||||
}
|
||||
|
||||
public override CreatureAI GetAI(Creature creature)
|
||||
|
||||
@@ -220,7 +220,7 @@ namespace Scripts.Northrend.FrozenHalls.ForgeOfSouls
|
||||
Initialize();
|
||||
}
|
||||
|
||||
public override void GossipSelect(Player player, uint menuId, uint gossipListId)
|
||||
public override bool GossipSelect(Player player, uint menuId, uint gossipListId)
|
||||
{
|
||||
if (menuId == Misc.MenuIdSylvanas && gossipListId == Misc.GossipOptionId)
|
||||
{
|
||||
@@ -231,6 +231,7 @@ namespace Scripts.Northrend.FrozenHalls.ForgeOfSouls
|
||||
_events.Reset();
|
||||
_events.ScheduleEvent(EventIds.Intro1, 1000);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public override void UpdateAI(uint diff)
|
||||
@@ -304,7 +305,7 @@ namespace Scripts.Northrend.FrozenHalls.ForgeOfSouls
|
||||
Initialize();
|
||||
}
|
||||
|
||||
public override void GossipSelect(Player player, uint menuId, uint gossipListId)
|
||||
public override bool GossipSelect(Player player, uint menuId, uint gossipListId)
|
||||
{
|
||||
if (menuId == Misc.MenuIdJaina && gossipListId == Misc.GossipOptionId)
|
||||
{
|
||||
@@ -314,6 +315,7 @@ namespace Scripts.Northrend.FrozenHalls.ForgeOfSouls
|
||||
_events.Reset();
|
||||
_events.ScheduleEvent(EventIds.Intro1, 1000);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public override void UpdateAI(uint diff)
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
|
||||
using Framework.Constants;
|
||||
using Framework.IO;
|
||||
using Game.AI;
|
||||
using Game.Entities;
|
||||
using Game.Maps;
|
||||
using Game.Scripting;
|
||||
@@ -421,19 +422,28 @@ namespace Scripts.Northrend.Gundrak
|
||||
{
|
||||
public go_gundrak_altar() : base("go_gundrak_altar") { }
|
||||
|
||||
public override bool OnGossipHello(Player player, GameObject go)
|
||||
class go_gundrak_altarAI : GameObjectAI
|
||||
{
|
||||
go.AddFlag(GameObjectFlags.NotSelectable);
|
||||
go.SetGoState(GameObjectState.Active);
|
||||
|
||||
InstanceScript instance = go.GetInstanceScript();
|
||||
if (instance != null)
|
||||
public go_gundrak_altarAI(GameObject go) : base(go)
|
||||
{
|
||||
instance.SetData(GDDataTypes.StatueActivate, go.GetEntry());
|
||||
instance = go.GetInstanceScript();
|
||||
}
|
||||
|
||||
public override bool GossipHello(Player player, bool reportUse)
|
||||
{
|
||||
me.AddFlag(GameObjectFlags.NotSelectable);
|
||||
me.SetGoState(GameObjectState.Active);
|
||||
|
||||
instance.SetData(GDDataTypes.StatueActivate, me.GetEntry());
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
InstanceScript instance;
|
||||
}
|
||||
|
||||
public override GameObjectAI GetAI(GameObject go)
|
||||
{
|
||||
return GetInstanceAI<go_gundrak_altarAI>(go);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -955,7 +955,7 @@ namespace Scripts.Northrend.IcecrownCitadel
|
||||
}
|
||||
}
|
||||
|
||||
public override void GossipSelect(Player player, uint menuId, uint gossipListId)
|
||||
public override bool GossipSelect(Player player, uint menuId, uint gossipListId)
|
||||
{
|
||||
me.RemoveNpcFlag(NPCFlags.Gossip);
|
||||
me.GetTransport().EnableMovement(true);
|
||||
@@ -965,6 +965,7 @@ namespace Scripts.Northrend.IcecrownCitadel
|
||||
_events.ScheduleEvent(GunshipEvents.IntroSummonSkybreaker, 24600, 0, GunshipMiscData.PhaseIntro);
|
||||
_events.ScheduleEvent(GunshipEvents.IntroH3, 29600, 0, GunshipMiscData.PhaseIntro);
|
||||
_events.ScheduleEvent(GunshipEvents.IntroH4, 39200, 0, GunshipMiscData.PhaseIntro);
|
||||
return false;
|
||||
}
|
||||
|
||||
public override void DamageTaken(Unit u, ref uint damage)
|
||||
@@ -1200,7 +1201,7 @@ namespace Scripts.Northrend.IcecrownCitadel
|
||||
}
|
||||
}
|
||||
|
||||
public override void GossipSelect(Player player, uint menuId, uint gossipListId)
|
||||
public override bool GossipSelect(Player player, uint menuId, uint gossipListId)
|
||||
{
|
||||
me.RemoveNpcFlag(NPCFlags.Gossip);
|
||||
me.GetTransport().EnableMovement(true);
|
||||
@@ -1211,6 +1212,7 @@ namespace Scripts.Northrend.IcecrownCitadel
|
||||
_events.ScheduleEvent(GunshipEvents.IntroA3, 33000, 0, GunshipMiscData.PhaseIntro);
|
||||
_events.ScheduleEvent(GunshipEvents.IntroA4, 39000, 0, GunshipMiscData.PhaseIntro);
|
||||
_events.ScheduleEvent(GunshipEvents.IntroA5, 45000, 0, GunshipMiscData.PhaseIntro);
|
||||
return false;
|
||||
}
|
||||
|
||||
public override void DamageTaken(Unit u, ref uint damage)
|
||||
@@ -1358,10 +1360,11 @@ namespace Scripts.Northrend.IcecrownCitadel
|
||||
me.SetReactState(ReactStates.Passive);
|
||||
}
|
||||
|
||||
public override void GossipSelect(Player player, uint menuId, uint gossipListId)
|
||||
public override bool GossipSelect(Player player, uint menuId, uint gossipListId)
|
||||
{
|
||||
player.AddItem(GunshipMiscData.ItemGoblinRocketPack, 1);
|
||||
player.PlayerTalkClass.SendCloseGossip();
|
||||
return false;
|
||||
}
|
||||
|
||||
public override void UpdateAI(uint diff)
|
||||
|
||||
@@ -441,12 +441,22 @@ namespace Scripts.Northrend.IcecrownCitadel
|
||||
{
|
||||
public npc_alchemist_adrianna() : base("npc_alchemist_adrianna") { }
|
||||
|
||||
public override bool OnGossipHello(Player player, Creature creature)
|
||||
class npc_alchemist_adriannaAI : ScriptedAI
|
||||
{
|
||||
if (!creature.FindCurrentSpellBySpellId(InstanceSpells.HarvestBlightSpecimen) && !creature.FindCurrentSpellBySpellId(InstanceSpells.HarvestBlightSpecimen25))
|
||||
if (player.HasAura(InstanceSpells.OrangeBlightResidue) && player.HasAura(InstanceSpells.GreenBlightResidue))
|
||||
creature.CastSpell(creature, InstanceSpells.HarvestBlightSpecimen, false);
|
||||
return false;
|
||||
public npc_alchemist_adriannaAI(Creature creature) : base(creature) { }
|
||||
|
||||
public override bool GossipHello(Player player)
|
||||
{
|
||||
if (!me.FindCurrentSpellBySpellId(InstanceSpells.HarvestBlightSpecimen) && !me.FindCurrentSpellBySpellId(InstanceSpells.HarvestBlightSpecimen25))
|
||||
if (player.HasAura(InstanceSpells.OrangeBlightResidue) && player.HasAura(InstanceSpells.GreenBlightResidue))
|
||||
DoCastSelf(InstanceSpells.HarvestBlightSpecimen, false);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public override CreatureAI GetAI(Creature creature)
|
||||
{
|
||||
return new npc_alchemist_adriannaAI(creature);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -194,22 +194,34 @@ namespace Scripts.Northrend.Nexus.Nexus
|
||||
{
|
||||
public containment_sphere() : base("containment_sphere") { }
|
||||
|
||||
public override bool OnGossipHello(Player player, GameObject go)
|
||||
class containment_sphereAI : GameObjectAI
|
||||
{
|
||||
InstanceScript instance = go.GetInstanceScript();
|
||||
|
||||
Creature pKeristrasza = ObjectAccessor.GetCreature(go, instance.GetGuidData(DataTypes.Keristrasza));
|
||||
if (pKeristrasza && pKeristrasza.IsAlive())
|
||||
public containment_sphereAI(GameObject go) : base(go)
|
||||
{
|
||||
// maybe these are hacks :(
|
||||
go.AddFlag(GameObjectFlags.NotSelectable);
|
||||
go.SetGoState(GameObjectState.Active);
|
||||
|
||||
((boss_keristrasza)pKeristrasza.GetAI()).CheckContainmentSpheres(true);
|
||||
instance = go.GetInstanceScript();
|
||||
}
|
||||
return true;
|
||||
|
||||
public override bool GossipHello(Player player, bool reportUse)
|
||||
{
|
||||
Creature pKeristrasza = ObjectAccessor.GetCreature(me, instance.GetGuidData(DataTypes.Keristrasza));
|
||||
if (pKeristrasza && pKeristrasza.IsAlive())
|
||||
{
|
||||
// maybe these are hacks :(
|
||||
me.AddFlag(GameObjectFlags.NotSelectable);
|
||||
me.SetGoState(GameObjectState.Active);
|
||||
|
||||
((boss_keristrasza)pKeristrasza.GetAI()).CheckContainmentSpheres(true);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
InstanceScript instance;
|
||||
}
|
||||
|
||||
public override GameObjectAI GetAI(GameObject go)
|
||||
{
|
||||
return GetInstanceAI<containment_sphereAI>(go);
|
||||
}
|
||||
}
|
||||
|
||||
[Script]
|
||||
|
||||
@@ -1034,7 +1034,7 @@ namespace Scripts.Northrend.Ulduar.FlameLeviathan
|
||||
}
|
||||
}
|
||||
|
||||
public override void GossipSelect(Player player, uint menuId, uint gossipListId)
|
||||
public override bool GossipSelect(Player player, uint menuId, uint gossipListId)
|
||||
{
|
||||
if (menuId == GossipIds.MenuLoreKeeper && gossipListId == GossipIds.OptionLoreKeeper)
|
||||
{
|
||||
@@ -1062,6 +1062,7 @@ namespace Scripts.Northrend.Ulduar.FlameLeviathan
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
InstanceScript _instance;
|
||||
@@ -1072,31 +1073,42 @@ namespace Scripts.Northrend.Ulduar.FlameLeviathan
|
||||
{
|
||||
public go_ulduar_tower() : base("go_ulduar_tower") { }
|
||||
|
||||
public override void OnDestroyed(GameObject go, Player player)
|
||||
class go_ulduar_towerAI : GameObjectAI
|
||||
{
|
||||
InstanceScript instance = go.GetInstanceScript();
|
||||
if (instance == null)
|
||||
return;
|
||||
|
||||
switch (go.GetEntry())
|
||||
public go_ulduar_towerAI(GameObject go) : base(go)
|
||||
{
|
||||
case Towers.ofStorms:
|
||||
instance.ProcessEvent(go, InstanceEventIds.TowerOfStormDestroyed);
|
||||
break;
|
||||
case Towers.ofFlames:
|
||||
instance.ProcessEvent(go, InstanceEventIds.TowerOfFlamesDestroyed);
|
||||
break;
|
||||
case Towers.ofFrost:
|
||||
instance.ProcessEvent(go, InstanceEventIds.TowerOfFrostDestroyed);
|
||||
break;
|
||||
case Towers.ofLife:
|
||||
instance.ProcessEvent(go, InstanceEventIds.TowerOfLifeDestroyed);
|
||||
break;
|
||||
instance = go.GetInstanceScript();
|
||||
}
|
||||
|
||||
Creature trigger = go.FindNearestCreature(CreatureIds.UlduarGauntletGenerator, 15.0f, true);
|
||||
if (trigger)
|
||||
trigger.DisappearAndDie();
|
||||
public override void Destroyed(Player player, uint eventId)
|
||||
{
|
||||
switch (me.GetEntry())
|
||||
{
|
||||
case Towers.ofStorms:
|
||||
instance.ProcessEvent(me, InstanceEventIds.TowerOfStormDestroyed);
|
||||
break;
|
||||
case Towers.ofFlames:
|
||||
instance.ProcessEvent(me, InstanceEventIds.TowerOfFlamesDestroyed);
|
||||
break;
|
||||
case Towers.ofFrost:
|
||||
instance.ProcessEvent(me, InstanceEventIds.TowerOfFrostDestroyed);
|
||||
break;
|
||||
case Towers.ofLife:
|
||||
instance.ProcessEvent(me, InstanceEventIds.TowerOfLifeDestroyed);
|
||||
break;
|
||||
}
|
||||
|
||||
Creature trigger = me.FindNearestCreature(CreatureIds.UlduarGauntletGenerator, 15.0f, true);
|
||||
if (trigger)
|
||||
trigger.DisappearAndDie();
|
||||
}
|
||||
|
||||
InstanceScript instance;
|
||||
}
|
||||
|
||||
public override GameObjectAI GetAI(GameObject go)
|
||||
{
|
||||
return GetInstanceAI<go_ulduar_towerAI>(go);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -24,6 +24,7 @@ using Game.Scripting;
|
||||
using Game.Spells;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Dynamic;
|
||||
using System.Linq;
|
||||
|
||||
namespace Scripts.Northrend.Ulduar
|
||||
@@ -1594,21 +1595,32 @@ namespace Scripts.Northrend.Ulduar
|
||||
{
|
||||
public go_mimiron_hardmode_button() : base("go_mimiron_hardmode_button") { }
|
||||
|
||||
public override bool OnGossipHello(Player player, GameObject go)
|
||||
class go_mimiron_hardmode_buttonAI : GameObjectAI
|
||||
{
|
||||
if (go.HasFlag(GameObjectFlags.NotSelectable))
|
||||
go_mimiron_hardmode_buttonAI(GameObject go) : base(go)
|
||||
{
|
||||
instance = go.GetInstanceScript();
|
||||
}
|
||||
|
||||
public override bool GossipHello(Player player, bool reportUse)
|
||||
{
|
||||
if (me.HasFlag(GameObjectFlags.NotSelectable))
|
||||
return true;
|
||||
|
||||
Creature computer = ObjectAccessor.GetCreature(me, instance.GetGuidData(InstanceData.Computer));
|
||||
if (computer)
|
||||
computer.GetAI().DoAction(Actions.ActivateComputer);
|
||||
me.SetGoState(GameObjectState.Active);
|
||||
me.AddFlag(GameObjectFlags.NotSelectable);
|
||||
return true;
|
||||
}
|
||||
|
||||
InstanceScript instance = go.GetInstanceScript();
|
||||
if (instance == null)
|
||||
return false;
|
||||
InstanceScript instance;
|
||||
}
|
||||
|
||||
Creature computer = ObjectAccessor.GetCreature(go, instance.GetGuidData(InstanceData.Computer));
|
||||
if (computer)
|
||||
computer.GetAI().DoAction(Actions.ActivateComputer);
|
||||
go.SetGoState(GameObjectState.Active);
|
||||
go.AddFlag(GameObjectFlags.NotSelectable);
|
||||
return true;
|
||||
public override GameObjectAI GetAI(GameObject go)
|
||||
{
|
||||
return GetInstanceAI<go_mimiron_hardmode_buttonAI>(go);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user