blizzless-diiis/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/ActV.cs
2023-01-21 18:05:13 -08:00

1685 lines
60 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//Blizzless Project 2022
using DiIiS_NA.Core.Logging;
//Blizzless Project 2022
using DiIiS_NA.GameServer.GSSystem.ActorSystem;
//Blizzless Project 2022
using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings;
//Blizzless Project 2022
using DiIiS_NA.GameServer.GSSystem.GameSystem;
//Blizzless Project 2022
using DiIiS_NA.GameServer.GSSystem.PlayerSystem;
//Blizzless Project 2022
using DiIiS_NA.GameServer.MessageSystem;
//Blizzless Project 2022
using System.Linq;
//Blizzless Project 2022
using System;
//Blizzless Project 2022
using System.Collections.Generic;
//Blizzless Project 2022
using DiIiS_NA.LoginServer.AccountsSystem;
//Blizzless Project 2022
using DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents;
//Blizzless Project 2022
using DiIiS_NA.GameServer.Core.Types.Math;
//Blizzless Project 2022
using DiIiS_NA.Core.MPQ;
//Blizzless Project 2022
using DiIiS_NA.GameServer.Core.Types.SNO;
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
namespace DiIiS_NA.GameServer.GSSystem.QuestSystem
{
public class ActV : QuestRegistry
{
static readonly Logger Logger = LogManager.CreateLogger();
public ActV(Game game) : base(game)
{
//*
var Quest1Data = (DiIiS_NA.Core.MPQ.FileFormats.Quest)MPQStorage.Data.Assets[SNOGroup.Quest][251355].Data;
var Quest2Data = (DiIiS_NA.Core.MPQ.FileFormats.Quest)MPQStorage.Data.Assets[SNOGroup.Quest][284683].Data;
var Quest3Data = (DiIiS_NA.Core.MPQ.FileFormats.Quest)MPQStorage.Data.Assets[SNOGroup.Quest][285098].Data;
var Quest4Data = (DiIiS_NA.Core.MPQ.FileFormats.Quest)MPQStorage.Data.Assets[SNOGroup.Quest][257120].Data;
var Quest5Data = (DiIiS_NA.Core.MPQ.FileFormats.Quest)MPQStorage.Data.Assets[SNOGroup.Quest][263851].Data;
var Quest6Data = (DiIiS_NA.Core.MPQ.FileFormats.Quest)MPQStorage.Data.Assets[SNOGroup.Quest][273790].Data;
var Quest7Data = (DiIiS_NA.Core.MPQ.FileFormats.Quest)MPQStorage.Data.Assets[SNOGroup.Quest][269552].Data;
var Quest8Data = (DiIiS_NA.Core.MPQ.FileFormats.Quest)MPQStorage.Data.Assets[SNOGroup.Quest][273408].Data;
}
public static void AddQuestConversation(Actor actor, int conversation)
{
var NPC = actor as InteractiveNPC;
if (NPC != null)
{
NPC.Conversations.Clear();
NPC.Conversations.Add(new ActorSystem.Interactions.ConversationInteraction(conversation));
NPC.Attributes[GameAttribute.Conversation_Icon, 0] = 2;
NPC.Attributes.BroadcastChangedIfRevealed();
NPC.ForceConversationSNO = conversation;
}
else if (actor != null)
{
foreach (var N in actor.World.GetActorsBySNO(actor.SNO))
if (N is InteractiveNPC)
{
NPC = N as InteractiveNPC;
NPC.Conversations.Clear();
NPC.Conversations.Add(new ActorSystem.Interactions.ConversationInteraction(conversation));
NPC.Attributes[GameAttribute.Conversation_Icon, 0] = 2;
NPC.Attributes.BroadcastChangedIfRevealed();
NPC.ForceConversationSNO = conversation;
}
}
else
Logger.Warn("Failed to assign a dialog for NPC.");
}
public static void RemoveConversations(Actor actor)
{
if (actor is InteractiveNPC npc)
{
npc.Conversations.Clear();
npc.Attributes[GameAttribute.Conversation_Icon, 0] = 1;
npc.Attributes.BroadcastChangedIfRevealed();
}
}
public override void SetQuests()
{
#region The Fall of Westmarch.
//x1_WestM_IntroQuest
Game.QuestManager.Quests.Add(251355, new Quest { RewardXp = 7000, RewardGold = 620, Completed = false, Saveable = true, NextQuest = 284683, Steps = new Dictionary<int, QuestStep> { } });
Game.QuestManager.Quests[251355].Steps.Add(-1, new QuestStep
{
Completed = false,
Saveable = true,
NextStep = 2,
Objectives = new List<Objective> { new Objective { Limit = 1, Counter = 0 } },
OnAdvance = new Action(() => {
//talk with Lorath Nahr
ListenKill(ActorSno._x1_ghost_dark_introoverlook, 1, new LaunchConversation(320130));
ListenConversation(320130, new Advance());
})
});
Game.QuestManager.Quests[251355].Steps.Add(2, new QuestStep
{
Completed = false,
Saveable = false,
NextStep = 59,
Objectives = new List<Objective> { new Objective { Limit = 1, Counter = 0 } },
OnAdvance = new Action(() => {
//enter Westmarch
var world = Game.GetWorld(WorldSno.x1_westm_intro);
Game.AddOnLoadWorldAction(WorldSno.x1_westmarch_overlook_d, () =>
{
if (Game.CurrentQuest == 251355 && Game.CurrentStep == 2)
{
StartConversation(Game.GetWorld(WorldSno.x1_westmarch_overlook_d), 317212);
}
});
Game.AddOnLoadWorldAction(WorldSno.x1_westm_intro, () =>
{
StartConversation(world, 311433);
//Delete fake giant door
if (world.GetActorBySNO(ActorSno._x1_westm_door_giant_closed) != null)
world.Leave(world.GetActorBySNO(ActorSno._x1_westm_door_giant_closed));
//Delete Cadala from this location TODO: нужно найти анимации Кадалы с убийственной волной на монстров)
foreach (var cadal in world.GetActorsBySNO(ActorSno._x1_westm_intro_deathangel))
world.Leave(cadal);
});
var npc = world.GetActorBySNO(ActorSno._x1_npc_westmarch_introguy);
if (npc != null)
{
var introGuy = npc as InteractiveNPC;
introGuy.Conversations.Add(new ActorSystem.Interactions.ConversationInteraction(308393));
introGuy.Attributes[GameAttribute.Conversation_Icon, 0] = 2;
introGuy.Attributes.BroadcastChangedIfRevealed();
}
ListenConversation(308393, new EnterToWest());
//ListenInteract(309222, 1, new Advance());
//Locked Door - 316495 - Wait
})
});
Game.QuestManager.Quests[251355].Steps.Add(59, new QuestStep
{
Completed = false,
Saveable = false,
NextStep = 14,
Objectives = new List<Objective> { new Objective { Limit = 1, Counter = 0 } },
OnAdvance = new Action(() => {
//find a5 hub
var npc = Game.GetWorld(WorldSno.x1_westm_intro).GetActorBySNO(ActorSno._x1_npc_westmarch_introguy);
if (npc != null)
{
var introGuy = npc as InteractiveNPC;
introGuy.Conversations.Clear();
introGuy.Attributes[GameAttribute.Conversation_Icon, 0] = 1;
introGuy.Attributes.BroadcastChangedIfRevealed();
}
ListenInteract(ActorSno._x1_westm_door_giant_iron, 1, new Advance());
})
});
Game.QuestManager.Quests[251355].Steps.Add(14, new QuestStep
{
Completed = false,
Saveable = false,
NextStep = 7,
Objectives = new List<Objective> { new Objective { Limit = 1, Counter = 0 } },
OnAdvance = new Action(() => {
//kill mobs at hub
var world = Game.GetWorld(WorldSno.x1_westm_intro);
Game.AddOnLoadWorldAction(WorldSno.x1_westm_intro, () =>
{
if (Game.CurrentQuest == 251355 && Game.CurrentStep == 14)
{
try { world.FindAt(ActorSno._x1_westm_door_cloister_locked, new Vector3D { X = 555.9f, Y = 403.47f, Z = 10.2f }, 5.0f).Destroy(); } catch { }
}
});
ListenKill(ActorSno._x1_skeleton_westmarch_a, 10, new Advance());
var Tyrael = world.ShowOnlyNumNPC(ActorSno._x1_tyrael_hurt, 0) as InteractiveNPC;
foreach (var general in world.GetActorsBySNO(
ActorSno._x1_westmhub_general,
ActorSno._x1_westmhub_bss_postchange,
ActorSno._pt_mystic_novendor_nonglobalfollower,
ActorSno._x1_westmhub_angryman_temp,
ActorSno._x1_westmhub_grieving_temp
))
{
general.SetVisible(false);
general.Hidden = true;
}
var Lorath = world.ShowOnlyNumNPC(ActorSno._x1_npc_lorathnahr, 0) as InteractiveNPC;
})
});
Game.QuestManager.Quests[251355].Steps.Add(7, new QuestStep
{
Completed = false,
Saveable = true,
NextStep = 57,
Objectives = new List<Objective> { new Objective { Limit = 1, Counter = 0 } },
OnAdvance = new Action(() => {
var world = Game.GetWorld(WorldSno.x1_westm_intro);
//Delete Monsters
foreach (var skeleton in world.GetActorsBySNO(ActorSno._x1_skeleton_westmarch_a, ActorSno._x1_ghost_dark_a, ActorSno._x1_shield_skeleton_westmarch_a))
skeleton.Destroy();
//Talk to Tyrael
var Tyrael = world.ShowOnlyNumNPC(ActorSno._x1_tyrael_hurt, 0) as InteractiveNPC;
var Lorath = world.ShowOnlyNumNPC(ActorSno._x1_npc_lorathnahr, 0) as InteractiveNPC;
AddQuestConversation(Tyrael, 252089);
//ListenInteract(289293, 1, new LaunchConversation(252089));
ListenConversation(252089, new AfterKillMonsters());
})
});
Game.QuestManager.Quests[251355].Steps.Add(57, new QuestStep
{
Completed = false,
Saveable = false,
NextStep = 18,
Objectives = new List<Objective> { new Objective { Limit = 1, Counter = 0 } },
OnAdvance = new Action(() => {
//enter the church
var world = Game.GetWorld(WorldSno.x1_westm_intro);
var Tyrael = world.ShowOnlyNumNPC(ActorSno._x1_tyrael_hurt, 0) as InteractiveNPC;
Tyrael.Conversations.Clear();
Tyrael.Attributes[GameAttribute.Conversation_Icon, 0] = 1;
Tyrael.Attributes.BroadcastChangedIfRevealed();
Game.AddOnLoadWorldAction(WorldSno.x1_westm_intro, () =>
{
Open(world, ActorSno._x1_westm_church_ext_door_a);
});
var door = world.GetActorBySNO(ActorSno._x1_westm_church_ext_door_a);
if (door != null)
door.Destroy();
ListenTeleport(309413, new Advance());
})
});
Game.QuestManager.Quests[251355].Steps.Add(18, new QuestStep
{
Completed = false,
Saveable = false,
NextStep = 11,
Objectives = new List<Objective> { new Objective { Limit = 1, Counter = 0 } },
OnAdvance = new Action(() => {
//Kill unique 273419
ListenKill(ActorSno._x1_deathmaiden_unique_b, 1, new AfterKillBoss());
})
});
Game.QuestManager.Quests[251355].Steps.Add(11, new QuestStep
{
Completed = false,
Saveable = false,
NextStep = 67,
Objectives = new List<Objective> { new Objective { Limit = 1, Counter = 0 } },
OnAdvance = new Action(() => {
//talk to Tyrael
UnlockTeleport(0);
var Tyrael = Game.GetWorld(WorldSno.x1_westmarch_hub).ShowOnlyNumNPC(ActorSno._x1_tyrael_hurt, 0) as InteractiveNPC;
AddQuestConversation(Tyrael, 252100);
//ListenInteract(289293, 1, new LaunchConversation(252100));
ListenConversation(252100, new Advance());
})
});
Game.QuestManager.Quests[251355].Steps.Add(67, new QuestStep
{
Completed = false,
Saveable = false,
NextStep = 5,
Objectives = new List<Objective> { new Objective { Limit = 1, Counter = 0 } },
OnAdvance = new Action(() => {
//leave the church
var Tyrael = Game.GetWorld(WorldSno.x1_westmarch_hub).ShowOnlyNumNPC(ActorSno._x1_tyrael_hurt, 0) as InteractiveNPC;
if (Tyrael != null)
{
Tyrael.Conversations.Clear();
Tyrael.Attributes[GameAttribute.Conversation_Icon, 0] = 1;
Tyrael.Attributes.BroadcastChangedIfRevealed();
}
ListenTeleport(270011, new Advance());
})
});
Game.QuestManager.Quests[251355].Steps.Add(5, new QuestStep
{
Completed = false,
Saveable = true,
NextStep = -1,
Objectives = new List<Objective> { new Objective { Limit = 1, Counter = 0 } },
OnAdvance = new Action(() => {
//complete
})
});
#endregion
#region Souls of the Dead
//X1_WestmHub_Survivor_Rescue
Game.QuestManager.Quests.Add(284683, new Quest { RewardXp = 7000, RewardGold = 620, Completed = false, Saveable = true, NextQuest = 285098, Steps = new Dictionary<int, QuestStep> { } });
Game.QuestManager.Quests[284683].Steps.Add(-1, new QuestStep
{
Completed = false,
Saveable = true,
NextStep = 47,
Objectives = new List<Objective> { new Objective { Limit = 1, Counter = 0 } },
OnAdvance = new Action(() => {
})
});
Game.QuestManager.Quests[284683].Steps.Add(47, new QuestStep
{
Completed = false,
Saveable = false,
NextStep = 62,
Objectives = new List<Objective> { new Objective { Limit = 1, Counter = 0 } },
OnAdvance = new Action(() => {
//OnTargetedActor ID: 315793, Name: x1_westm_Door_Cloister, NumInWorld: 0
Game.AddOnLoadWorldAction(WorldSno.x1_westmarch_hub, () =>
{
if (Game.CurrentQuest == 284683 && Game.CurrentStep == -1 || Game.CurrentQuest == 284683 && Game.CurrentStep == 47)
ActiveArrow(Game.GetWorld(WorldSno.x1_westmarch_hub), ActorSno._x1_westm_door_cloister);
});
//Enter Westmarch Commons
ListenTeleport(261758, new BackToCath());
var world = Game.GetWorld(WorldSno.x1_westm_deathorb_gideonscourt);
// FIXME: incorrect snoId or possible code duplicate
foreach (var Myst in world.GetActorsBySNO(ActorSno._pt_mystic_enhanceevent)) //Mystic
{
Myst.Hidden = true;
Myst.SetVisible(false);
}
foreach (var Myst in world.GetActorsBySNO(ActorSno._pt_mystic_enhanceevent)) //Mystic_EnchanceEvent
{
Myst.Hidden = true;
Myst.SetVisible(false);
}
})
});
Game.QuestManager.Quests[284683].Steps.Add(62, new QuestStep
{
Completed = false,
Saveable = false,
NextStep = 57,
Objectives = new List<Objective> { new Objective { Limit = 1, Counter = 0 } },
OnAdvance = new Action(() => {
//find orbs
var world = Game.GetWorld(WorldSno.x1_westmarch_hub);
var target = world.GetActorBySNO(ActorSno._x1_westm_door_cloister, true);
DisableArrow(world, target);
ListenTeleport(338956, new BackToCath());
})
});
Game.QuestManager.Quests[284683].Steps.Add(57, new QuestStep
{
Completed = false,
Saveable = false,
NextStep = 60,
Objectives = new List<Objective> { new Objective { Limit = 1, Counter = 0 } },
OnAdvance = new Action(() => {
//destroy bodies
var world = Game.GetWorld(WorldSno.x1_westm_deathorb_gideonscourt);
UnlockTeleport(1);
foreach (var Myst in world.GetActorsBySNO(ActorSno._pt_mystic_novendor_nonglobalfollower)) //Mystic_NonGlobalFollower
{
Myst.Hidden = true;
Myst.SetVisible(false);
}
foreach (var Myst in world.GetActorsBySNO(ActorSno._pt_mystic_enhanceevent)) //Mystic_EnchanceEvent
{
Myst.Hidden = true;
Myst.SetVisible(false);
}
ListenKill(ActorSno._x1_deathorb_bodypile, 4, new Advance());
Game.AddOnLoadWorldAction(WorldSno.x1_westm_deathorb_gideonscourt, () =>
{
if (Game.CurrentQuest == 284683 && Game.CurrentStep == 57)
{
SetActorOperable(world, ActorSno._x1_deathmaiden_unique_deathorb_b, false);
SetActorOperable(world, ActorSno._x1_death_orb_monster, false);
}
});
})
});
Game.QuestManager.Quests[284683].Steps.Add(60, new QuestStep
{
Completed = false,
Saveable = false,
NextStep = 1,
Objectives = new List<Objective> { new Objective { Limit = 1, Counter = 0 } },
OnAdvance = new Action(() => {
//slay Drygha
Game.AddOnLoadWorldAction(WorldSno.x1_westm_deathorb_gideonscourt, () =>
{
SetActorOperable(Game.GetWorld(WorldSno.x1_westm_deathorb_gideonscourt), ActorSno._x1_deathmaiden_unique_deathorb_b, true);
});
ListenKill(ActorSno._x1_deathmaiden_unique_deathorb_b, 1, new Advance());
})
});
Game.QuestManager.Quests[284683].Steps.Add(1, new QuestStep
{
Completed = false,
Saveable = false,
NextStep = 68,
Objectives = new List<Objective> { new Objective { Limit = 1, Counter = 0 } },
OnAdvance = new Action(() => {
//destroy orb
Game.AddOnLoadWorldAction(WorldSno.x1_westm_deathorb_gideonscourt, () =>
{
SetActorOperable(Game.GetWorld(WorldSno.x1_westm_deathorb_gideonscourt), ActorSno._x1_death_orb_monster, true);
});
ListenKill(ActorSno._x1_death_orb_monster, 1, new Advance());
})
});
Game.QuestManager.Quests[284683].Steps.Add(68, new QuestStep
{
Completed = false,
Saveable = false,
NextStep = 30,
Objectives = new List<Objective> { new Objective { Limit = 1, Counter = 0 } },
OnAdvance = new Action(() => {
var world = Game.GetWorld(WorldSno.x1_westm_deathorb_gideonscourt);
//destroy effects
foreach (var act in world.GetActorsBySNO(ActorSno._x1_westmarch_cath_int_debriscenter_orbscenes, ActorSno._x1_death_orb_hp_proxy)) act.Destroy();
foreach (var Myst in world.GetActorsBySNO(ActorSno._pt_mystic_novendor_nonglobalfollower, ActorSno._pt_mystic_enhanceevent))
{
Myst.Hidden = true;
Myst.SetVisible(false);
}
//check out pile
ListenInteract(ActorSno._x1_westm_mysticcorpsepile, 1, new Advance());
})
});
Game.QuestManager.Quests[284683].Steps.Add(30, new QuestStep
{
Completed = false,
Saveable = true,
NextStep = 32,
Objectives = new List<Objective> { new Objective { Limit = 1, Counter = 0 } },
OnAdvance = new Action(() => {
//talk to Mystic
Game.AddOnLoadWorldAction(WorldSno.x1_westm_deathorb_gideonscourt, () =>
{
if (Game.CurrentQuest == 284683 && Game.CurrentStep == 30)
{
var world = Game.GetWorld(WorldSno.x1_westm_deathorb_gideonscourt);
var Mysts = world.GetActorsBySNO(ActorSno._pt_mystic_novendor);
if (Mysts.Count < 1)
Mysts.Add(world.SpawnMonster(ActorSno._pt_mystic_novendor, new Vector3D(385.6301f,289.3048f,-18.602905f)));
//foreach (var Myst in World.GetActorsBySNO(175310))
;//175310
//StartConversation(this.Game.GetWorld(338891), 305750);
foreach (var Myst in Mysts) //PT_Mystic_NoVendor
{
world.BroadcastIfRevealed(plr => new MessageSystem.Message.Definitions.ACD.ACDTranslateFacingMessage
{
ActorId = Myst.DynamicID(plr),
Angle = ActorSystem.Movement.MovementHelpers.GetFacingAngle(Myst, plr),
TurnImmediately = true
}, Myst);
Myst.PlayActionAnimation(324119);
AddQuestConversation(Myst, 305750);
(Myst as InteractiveNPC).Conversations.Clear();
(Myst as InteractiveNPC).Conversations.Add(new ActorSystem.Interactions.ConversationInteraction(305750));
(Myst as InteractiveNPC).Attributes[GameAttribute.Conversation_Icon, 0] = 2;
(Myst as InteractiveNPC).Attributes.BroadcastChangedIfRevealed();
(Myst as InteractiveNPC).ForceConversationSNO = 305750;
}
}
});
ListenConversation(305750, new AdvanceWithNotify());
})
});
Game.QuestManager.Quests[284683].Steps.Add(32, new QuestStep
{
Completed = false,
Saveable = false,
NextStep = 55,
Objectives = new List<Objective> { new Objective { Limit = 1, Counter = 0 } },
OnAdvance = new Action(() => {
//exit alley
Game.AddOnLoadWorldAction(WorldSno.x1_westm_deathorb_gideonscourt, () =>
{
var world = Game.GetWorld(WorldSno.x1_westm_deathorb_gideonscourt);
foreach (var Myst in world.GetActorsBySNO(ActorSno._pt_mystic_novendor_nonglobalfollower)) //Mystic_NonGlobalFollower
{
Myst.Hidden = true;
Myst.SetVisible(false);
}
foreach (var Myst in world.GetActorsBySNO(ActorSno._pt_mystic_enhanceevent)) //Mystic_EnchanceEvent
{
Myst.Hidden = true;
Myst.SetVisible(false);
}
foreach (var Myst in world.GetActorsBySNO(ActorSno._pt_mystic_novendor)) //PT_Mystic_NoVendor
{
Myst.Hidden = true;
Myst.SetVisible(false);
}
foreach (var Malt in world.GetActorsBySNO(ActorSno._x1_malthael_deathorbevent))
{
bool Activated = false;
Malt.Attributes[GameAttribute.Team_Override] = (Activated ? -1 : 2);
Malt.Attributes[GameAttribute.Untargetable] = !Activated;
Malt.Attributes[GameAttribute.NPC_Is_Operatable] = Activated;
Malt.Attributes[GameAttribute.Operatable] = Activated;
Malt.Attributes[GameAttribute.Operatable_Story_Gizmo] = Activated;
Malt.Attributes[GameAttribute.Disabled] = !Activated;
Malt.Attributes[GameAttribute.Immunity] = !Activated;
}
Open(world, ActorSno._x1_westm_door_gate);
AddFollower(world, ActorSno._pt_mystic_novendor_nonglobalfollower);
});
ListenTeleport(338946, new AdvanceWithNotify());
})
});
Game.QuestManager.Quests[284683].Steps.Add(55, new QuestStep
{
Completed = false,
Saveable = false,
NextStep = 49,
Objectives = new List<Objective> { new Objective { Limit = 1, Counter = 0 } },
OnAdvance = new Action(() => {
//find death orb
ListenTeleport(339158, new AdvanceWithNotify());
if (!Game.Empty)
{
DestroyFollower(ActorSno._pt_mystic_novendor_nonglobalfollower);
AddFollower(Game.GetWorld(WorldSno.x1_westm_deathorb_gideonscourt), ActorSno._pt_mystic_novendor_nonglobalfollower);
}
})
});
Game.QuestManager.Quests[284683].Steps.Add(49, new QuestStep
{
Completed = false,
Saveable = false,
NextStep = 53,
Objectives = new List<Objective> { new Objective { Limit = 1, Counter = 0 } },
OnAdvance = new Action(() => {
//destroy bodies
UnlockTeleport(2);
Game.AddOnLoadWorldAction(WorldSno.x1_westm_deathorb_kerwinsrow, () =>
{
if (Game.CurrentQuest == 284683 && Game.CurrentStep == 49)
{
var world = Game.GetWorld(WorldSno.x1_westm_deathorb_kerwinsrow);
SetActorOperable(world, ActorSno._x1_deathmaiden_unique_deathorb_c, false);
SetActorOperable(world, ActorSno._x1_death_orb_master_monster, false);
}
});
ListenKill(ActorSno._x1_deathorb_bodypile, 6, new Advance());
if (!Game.Empty)
{
DestroyFollower(ActorSno._pt_mystic_novendor_nonglobalfollower);
AddFollower(Game.GetWorld(WorldSno.x1_westm_deathorb_gideonscourt), ActorSno._pt_mystic_novendor_nonglobalfollower);
}
})
});
Game.QuestManager.Quests[284683].Steps.Add(53, new QuestStep
{
Completed = false,
Saveable = false,
NextStep = 34,
Objectives = new List<Objective> { new Objective { Limit = 1, Counter = 0 } },
OnAdvance = new Action(() => {
//slay guardian
Game.AddOnLoadWorldAction(WorldSno.x1_westm_deathorb_kerwinsrow, () =>
{
SetActorOperable(Game.GetWorld(WorldSno.x1_westm_deathorb_kerwinsrow), ActorSno._x1_deathmaiden_unique_deathorb_c, true);
});
ListenKill(ActorSno._x1_deathmaiden_unique_deathorb_c, 1, new Advance());
if (!Game.Empty)
{
DestroyFollower(ActorSno._pt_mystic_novendor_nonglobalfollower);
AddFollower(Game.GetWorld(WorldSno.x1_westm_deathorb_gideonscourt), ActorSno._pt_mystic_novendor_nonglobalfollower);
}
})
});
Game.QuestManager.Quests[284683].Steps.Add(34, new QuestStep
{
Completed = false,
Saveable = false,
NextStep = 40,
Objectives = new List<Objective> { new Objective { Limit = 1, Counter = 0 } },
OnAdvance = new Action(() => {
//destroy final orb
Game.AddOnLoadWorldAction(WorldSno.x1_westm_deathorb_kerwinsrow, () =>
{
SetActorOperable(Game.GetWorld(WorldSno.x1_westm_deathorb_kerwinsrow), ActorSno._x1_death_orb_master_monster, true);
});
ListenKill(ActorSno._x1_death_orb_master_monster, 1, new Advance());
if (!Game.Empty)
{
DestroyFollower(ActorSno._pt_mystic_novendor_nonglobalfollower);
AddFollower(Game.GetWorld(WorldSno.x1_westm_deathorb_gideonscourt), ActorSno._pt_mystic_novendor_nonglobalfollower);
}
})
});
Game.QuestManager.Quests[284683].Steps.Add(40, new QuestStep
{
Completed = false,
Saveable = false,
NextStep = 42,
Objectives = new List<Objective> { new Objective { Limit = 1, Counter = 0 } },
OnAdvance = new Action(() => {
//talk to Mystic
ListenProximity(ActorSno._pt_mystic_novendor_nonglobalfollower, new LaunchConversation(305871));
ListenConversation(305871, new AdvanceWithNotify());
if (!Game.Empty)
{
DestroyFollower(ActorSno._pt_mystic_novendor_nonglobalfollower);
AddFollower(Game.GetWorld(WorldSno.x1_westm_deathorb_gideonscourt), ActorSno._pt_mystic_novendor_nonglobalfollower);
}
})
});
Game.QuestManager.Quests[284683].Steps.Add(42, new QuestStep
{
Completed = false,
Saveable = true,
NextStep = 29,
Objectives = new List<Objective> { new Objective { Limit = 1, Counter = 0 } },
OnAdvance = new Action(() => {
//return to hub
ListenTeleport(270011, new Advance());
if (!Game.Empty)
foreach (var plr in Game.Players.Values)
{
if (!plr.MysticUnlocked)
{
plr.MysticUnlocked = true;
plr.GrantAchievement(74987247205955);
plr.LoadCrafterData();
}
}
DestroyFollower(ActorSno._pt_mystic_novendor_nonglobalfollower);
})
});
Game.QuestManager.Quests[284683].Steps.Add(29, new QuestStep
{
Completed = false,
Saveable = true,
NextStep = -1,
Objectives = new List<Objective> { new Objective { Limit = 1, Counter = 0 } },
OnAdvance = new Action(() => {
//complete
})
});
#endregion
#region The Harbinger
//X1_Westm_KillUrzael
Game.QuestManager.Quests.Add(285098, new Quest { RewardXp = 7000, RewardGold = 620, Completed = false, Saveable = true, NextQuest = 257120, Steps = new Dictionary<int, QuestStep> { } });
Game.QuestManager.Quests[285098].Steps.Add(-1, new QuestStep
{
Completed = false,
Saveable = true,
NextStep = 1,
Objectives = new List<Objective> { new Objective { Limit = 1, Counter = 0 } },
OnAdvance = new Action(() => {
})
});
Game.QuestManager.Quests[285098].Steps.Add(1, new QuestStep
{
Completed = false,
Saveable = false,
NextStep = 6,
Objectives = new List<Objective> { new Objective { Limit = 1, Counter = 0 } },
OnAdvance = new Action(() => {
//enter Westmarch Heights
ListenTeleport(263493, new AdvanceWithNotify());
})
});
Game.QuestManager.Quests[285098].Steps.Add(6, new QuestStep
{
Completed = false,
Saveable = true,
NextStep = 12,
Objectives = new List<Objective> { new Objective { Limit = 1, Counter = 0 } },
OnAdvance = new Action(() => {
//find Tower
ListenTeleport(308487, new AdvanceWithNotify());
var Quest3Data = (DiIiS_NA.Core.MPQ.FileFormats.Quest)MPQStorage.Data.Assets[SNOGroup.Quest][285098].Data;
ListenKillBonus(ActorSno._x1_deathmaiden_unique_fire_a, 3, new SideTarget());
})
});
Game.QuestManager.Quests[285098].Steps.Add(12, new QuestStep
{
Completed = false,
Saveable = false,
NextStep = 14,
Objectives = new List<Objective> { new Objective { Limit = 1, Counter = 0 } },
OnAdvance = new Action(() => {
//kill Urzael
UnlockTeleport(3);
ListenKill(ActorSno._x1_urzael_boss, 1, new Advance());
})
});
Game.QuestManager.Quests[285098].Steps.Add(14, new QuestStep
{
Completed = false,
Saveable = false,
NextStep = 16,
Objectives = new List<Objective> { new Objective { Limit = 1, Counter = 0 } },
OnAdvance = new Action(() => {
//talk to Malthael spirit
Game.AddOnLoadWorldAction(WorldSno.x1_urzael_arena, () =>
{
var malthael = Game.GetWorld(WorldSno.x1_urzael_arena).SpawnMonster(ActorSno._x1_malthael, new Vector3D { X = 97.65f, Y = 350.23f, Z = 0.1f });
malthael.NotifyConversation(1);
});
Game.CurrentEncounter.activated = false;
ListenInteract(ActorSno._x1_malthael, 1, new LaunchConversation(274423));
ListenConversation(274423, new Advance());
})
});
Game.QuestManager.Quests[285098].Steps.Add(16, new QuestStep
{
Completed = false,
Saveable = false,
NextStep = 18,
Objectives = new List<Objective> { new Objective { Limit = 1, Counter = 0 } },
OnAdvance = new Action(() => {
//return to the Hub
ListenTeleport(270011, new AdvanceWithNotify());
})
});
Game.QuestManager.Quests[285098].Steps.Add(18, new QuestStep
{
Completed = false,
Saveable = false,
NextStep = 3,
Objectives = new List<Objective> { new Objective { Limit = 1, Counter = 0 } },
OnAdvance = new Action(() => {
//talk to Tyrael
ListenInteract(ActorSno._x1_tyrael_hurt, 1, new LaunchConversation(283403));
ListenConversation(283403, new AdvanceWithNotify());
})
});
Game.QuestManager.Quests[285098].Steps.Add(3, new QuestStep
{
Completed = false,
Saveable = false,
NextStep = -1,
Objectives = new List<Objective> { new Objective { Limit = 1, Counter = 0 } },
OnAdvance = new Action(() => {
//complete
PlayCutscene(1);
})
});
#endregion
#region The Witch
//x1_Adria
Game.QuestManager.Quests.Add(257120, new Quest { RewardXp = 7000, RewardGold = 620, Completed = false, Saveable = true, NextQuest = 263851, Steps = new Dictionary<int, QuestStep> { } });
Game.QuestManager.Quests[257120].Steps.Add(-1, new QuestStep
{
Completed = false,
Saveable = true,
NextStep = 67,
Objectives = new List<Objective> { new Objective { Limit = 1, Counter = 0 } },
OnAdvance = new Action(() => {
})
});
Game.QuestManager.Quests[257120].Steps.Add(67, new QuestStep
{
Completed = false,
Saveable = false,
NextStep = 65,
Objectives = new List<Objective> { new Objective { Limit = 1, Counter = 0 } },
OnAdvance = new Action(() => {
//find entrance
//DisableArrow(this.Game.GetWorld(304235), target);
var westmarchWorld = Game.GetWorld(WorldSno.x1_westmarch_hub);
Game.AddOnLoadWorldAction(WorldSno.x1_westmarch_hub, () =>
{
westmarchWorld.BroadcastGlobal(plr => new MessageSystem.Message.Definitions.Map.MapMarkerInfoMessage()
{
HashedName = DiIiS_NA.Core.Helpers.Hash.StringHashHelper.HashItemName("QuestMarker"),
Place = new MessageSystem.Message.Fields.WorldPlace { Position = new Vector3D(435.1377f, 439.43f, -0.96f), WorldID = westmarchWorld.GlobalID },
ImageInfo = 81058,
Label = -1,
snoStringList = -1,
snoKnownActorOverride = -1,
snoQuestSource = -1,
Image = -1,
Active = true,
CanBecomeArrow = true,
RespectsFoW = false,
IsPing = false,
PlayerUseFlags = 0
});
});
ListenProximity(ActorSno._x1_spawner_bogmelee_adriaritual_burrow, new LaunchConversation(345820));
ListenConversation(345820, new AdvanceWithNotify());
AddFollower(westmarchWorld, ActorSno._x1_npc_lorathnahr);
StartConversation(westmarchWorld, 305750);
Game.AddOnLoadWorldAction(WorldSno.x1_bog_adriaritual, () =>
{
var world = Game.GetWorld(WorldSno.x1_bog_adriaritual);
world.BroadcastGlobal(plr => new MessageSystem.Message.Definitions.Map.MapMarkerInfoMessage()
{
HashedName = DiIiS_NA.Core.Helpers.Hash.StringHashHelper.HashItemName("QuestMarker"),
Place = new MessageSystem.Message.Fields.WorldPlace { Position = new Vector3D(435.1377f, 439.43f, -0.96f), WorldID = westmarchWorld.GlobalID },
ImageInfo = 81058,
Label = -1,
snoStringList = -1,
snoKnownActorOverride = -1,
snoQuestSource = -1,
Image = -1,
Active = false,
CanBecomeArrow = false,
RespectsFoW = false,
IsPing = false,
PlayerUseFlags = 0
});
SetActorOperable(world, ActorSno._x1_catacombs_door_b, false);
});
})
});
Game.QuestManager.Quests[257120].Steps.Add(65, new QuestStep
{
Completed = false,
Saveable = false,
NextStep = 92,
Objectives = new List<Objective> { new Objective { Limit = 1, Counter = 0 } },
OnAdvance = new Action(() => {
//kill mobs
Game.AddOnLoadWorldAction(WorldSno.x1_bog_adriaritual, () =>
{
script = new WavedInvasion(
new Vector3D { X = 101.62f, Y = 105.97f, Z = 0.1f },
30f,
new List<ActorSno> { ActorSno._x1_bogfamily_melee_bogmonsterevent, ActorSno._x1_bogfamily_ranged_bogmonsterevent },
ActorSno._x1_bogfamily_brute_bogmonsterevent_unique
);
script.Execute(Game.GetWorld(WorldSno.x1_bog_adriaritual));
});
ListenKill(ActorSno._x1_bogfamily_brute_bogmonsterevent_unique, 1, new Advance());
DestroyFollower(ActorSno._x1_npc_lorathnahr);
AddFollower(Game.GetWorld(WorldSno.x1_westmarch_hub), ActorSno._x1_npc_lorathnahr);
})
});
Game.QuestManager.Quests[257120].Steps.Add(92, new QuestStep
{
Completed = false,
Saveable = true,
NextStep = 106,
Objectives = new List<Objective> { new Objective { Limit = 1, Counter = 0 } },
OnAdvance = new Action(() => {
//find Nephalem Guidestone
Game.AddOnLoadWorldAction(WorldSno.x1_bog_adriaritual, () =>
{
Open(Game.GetWorld(WorldSno.x1_bog_adriaritual), ActorSno._x1_catacombs_door_b);
});
ListenProximity(ActorSno._x1_bog_catacombsportal_beaconloc_first, new AdvanceWithNotify());
DestroyFollower(ActorSno._x1_npc_lorathnahr);
AddFollower(Game.GetWorld(WorldSno.x1_westmarch_hub), ActorSno._x1_npc_lorathnahr);
})
});
Game.QuestManager.Quests[257120].Steps.Add(106, new QuestStep
{
Completed = false,
Saveable = true,
NextStep = 73,
Objectives = new List<Objective> { new Objective { Limit = 1, Counter = 0 } },
OnAdvance = new Action(() => {
//use waystone
UnlockTeleport(4);
ListenInteract(ActorSno._x1_bog_catacombsportal_beaconloc_first, 1, new Advance());
DestroyFollower(ActorSno._x1_npc_lorathnahr);
AddFollower(Game.GetWorld(WorldSno.x1_westmarch_hub), ActorSno._x1_npc_lorathnahr);
})
});
Game.QuestManager.Quests[257120].Steps.Add(73, new QuestStep
{
Completed = false,
Saveable = true,
NextStep = 10,
Objectives = new List<Objective> { new Objective { Limit = 1, Counter = 0 } },
OnAdvance = new Action(() => {
//find catacombs
var world = Game.GetWorld(WorldSno.x1_bog_adriaritual);
Portal Dest = null;
foreach (Portal prtl in world.GetActorsBySNO(ActorSno._g_portal_square_blue))
if (prtl.Destination.WorldSNO == (int)WorldSno.x1_catacombs_level01) Dest = prtl;
if (Dest != null)
world.BroadcastGlobal(plr => new MessageSystem.Message.Definitions.Map.MapMarkerInfoMessage()
{
HashedName = DiIiS_NA.Core.Helpers.Hash.StringHashHelper.HashItemName("QuestMarker"),
Place = new MessageSystem.Message.Fields.WorldPlace { Position = Dest.Position, WorldID = world.GlobalID },
ImageInfo = 81058,
Label = -1,
snoStringList = -1,
snoKnownActorOverride = -1,
snoQuestSource = -1,
Image = -1,
Active = true,
CanBecomeArrow = true,
RespectsFoW = false,
IsPing = false,
PlayerUseFlags = 0
});
//*/
ListenTeleport(283553, new AdvanceWithNotify());
})
});
Game.QuestManager.Quests[257120].Steps.Add(10, new QuestStep
{
Completed = false,
Saveable = true,
NextStep = 110,
Objectives = new List<Objective> { new Objective { Limit = 1, Counter = 0 } },
OnAdvance = new Action(() => {
//search tomb
var world = Game.GetWorld(WorldSno.x1_bog_adriaritual);
Portal Dest = null;
foreach (Portal prtl in world.GetActorsBySNO(ActorSno._g_portal_square_blue))
if (prtl.Destination.WorldSNO == (int)WorldSno.x1_catacombs_level01) Dest = prtl;
if (Dest != null)
world.BroadcastGlobal(plr => new MessageSystem.Message.Definitions.Map.MapMarkerInfoMessage()
{
HashedName = DiIiS_NA.Core.Helpers.Hash.StringHashHelper.HashItemName("QuestMarker"),
Place = new MessageSystem.Message.Fields.WorldPlace { Position = Dest.Position, WorldID = world.GlobalID },
ImageInfo = 81058,
Label = -1,
snoStringList = -1,
snoKnownActorOverride = -1,
snoQuestSource = -1,
Image = -1,
Active = false,
CanBecomeArrow = false,
RespectsFoW = false,
IsPing = false,
PlayerUseFlags = 0
});
//*/
UnlockTeleport(5);
//[World] SNOId: 283566 GlobalId: 117440518 Name: x1_catacombs_level02
ListenTeleport(283567, new AdvanceWithNotify());
})
});
Game.QuestManager.Quests[257120].Steps.Add(110, new QuestStep
{
Completed = false,
Saveable = true,
NextStep = 14,
Objectives = new List<Objective> { new Objective { Limit = 1, Counter = 0 } },
OnAdvance = new Action(() => {
//go Adria
UnlockTeleport(6);
ListenTeleport(287220, new AdvanceWithNotify());
})
});
Game.QuestManager.Quests[257120].Steps.Add(14, new QuestStep
{
Completed = false,
Saveable = true,
NextStep = 78,
Objectives = new List<Objective> { new Objective { Limit = 1, Counter = 0 } },
OnAdvance = new Action(() => {
//kill Adria
//UnlockTeleport(7); //hacky
ListenKill(ActorSno._x1_adria_boss, 1, new Advance());
})
});
Game.QuestManager.Quests[257120].Steps.Add(78, new QuestStep
{
Completed = false,
Saveable = true,
NextStep = 115,
Objectives = new List<Objective> { new Objective { Limit = 1, Counter = 0 } },
OnAdvance = new Action(() => {
//talk to Lorath
Game.CurrentEncounter.activated = false;
var world = Game.GetWorld(WorldSno.x1_adria_boss_arena_02);
foreach (var Myst in world.GetActorsBySNO(ActorSno._x1_npc_lorathnahr)) //284530
{
AddQuestConversation(Myst, 260191);
(Myst as InteractiveNPC).Conversations.Clear();
(Myst as InteractiveNPC).Conversations.Add(new ActorSystem.Interactions.ConversationInteraction(260191));
(Myst as InteractiveNPC).Attributes[GameAttribute.Conversation_Icon, 0] = 2;
(Myst as InteractiveNPC).Attributes.BroadcastChangedIfRevealed();
(Myst as InteractiveNPC).ForceConversationSNO = 260191;
}
Game.AddOnLoadWorldAction(WorldSno.x1_adria_boss_arena_02, () =>
{
world.GetActorBySNO(ActorSno._x1_npc_lorathnahr).NotifyConversation(1);
});
Game.CurrentEncounter.activated = false;
//ListenInteract(284530, 1, new LaunchConversation(260191));
ListenConversation(260191, new Advance());
})
});
Game.QuestManager.Quests[257120].Steps.Add(115, new QuestStep
{
Completed = false,
Saveable = true,
NextStep = 3,
Objectives = new List<Objective> { new Objective { Limit = 1, Counter = 0 } },
OnAdvance = new Action(() => {
//talk to Tyrael
foreach (var Myst in Game.GetWorld(WorldSno.x1_adria_boss_arena_02).GetActorsBySNO(ActorSno._x1_npc_lorathnahr)) //284530
{
(Myst as InteractiveNPC).Conversations.Clear();
(Myst as InteractiveNPC).Attributes[GameAttribute.Conversation_Icon, 0] = 1;
(Myst as InteractiveNPC).Attributes.BroadcastChangedIfRevealed();
}
ListenInteract(ActorSno._x1_tyrael_hurt, 1, new LaunchConversation(274440));
ListenConversation(274440, new Advance());
})
});
Game.QuestManager.Quests[257120].Steps.Add(3, new QuestStep
{
Completed = false,
Saveable = true,
NextStep = -1,
Objectives = new List<Objective> { new Objective { Limit = 1, Counter = 0 } },
OnAdvance = new Action(() => {
//complete
PlayCutscene(2);
})
});
#endregion
#region The Pandemonium Gate
//x1_ToHeaven
Game.QuestManager.Quests.Add(263851, new Quest { RewardXp = 7000, RewardGold = 620, Completed = false, Saveable = true, NextQuest = 273790, Steps = new Dictionary<int, QuestStep> { } });
Game.QuestManager.Quests[263851].Steps.Add(-1, new QuestStep
{
Completed = false,
Saveable = true,
NextStep = 15,
Objectives = new List<Objective> { new Objective { Limit = 1, Counter = 0 } },
OnAdvance = new Action(() => {
})
});
Game.QuestManager.Quests[263851].Steps.Add(15, new QuestStep
{
Completed = false,
Saveable = true,
NextStep = 17,
Objectives = new List<Objective> { new Objective { Limit = 1, Counter = 0 } },
OnAdvance = new Action(() => {
//go to Pandemonium Gate
ListenTeleport(339468, new Advance());
})
});
Game.QuestManager.Quests[263851].Steps.Add(17, new QuestStep
{
Completed = false,
Saveable = true,
NextStep = 19,
Objectives = new List<Objective> { new Objective { Limit = 1, Counter = 0 } },
OnAdvance = new Action(() => {
//kill reapers and Lamiel
ListenKill(ActorSno._x1_deathmaiden_unique_heaven, 1, new Advance());
})
});
Game.QuestManager.Quests[263851].Steps.Add(19, new QuestStep
{
Completed = false,
Saveable = true,
NextStep = 11,
Objectives = new List<Objective> { new Objective { Limit = 1, Counter = 0 } },
OnAdvance = new Action(() => {
//talk to Imperius
Game.AddOnLoadWorldAction(WorldSno.x1_heaven_pandemonium_portal, () =>
{
Game.GetWorld(WorldSno.x1_heaven_pandemonium_portal).GetActorBySNO(ActorSno._x1_imperius_heaventopandgate).NotifyConversation(1);
});
ListenInteract(ActorSno._x1_imperius_heaventopandgate, 1, new LaunchConversation(361192));
ListenConversation(361192, new Advance());
})
});
Game.QuestManager.Quests[263851].Steps.Add(11, new QuestStep
{
Completed = false,
Saveable = true,
NextStep = 3,
Objectives = new List<Objective> { new Objective { Limit = 1, Counter = 0 } },
OnAdvance = new Action(() => {
//use portal
ListenTeleport(299453, new Advance());
})
});
Game.QuestManager.Quests[263851].Steps.Add(3, new QuestStep
{
Completed = false,
Saveable = true,
NextStep = -1,
Objectives = new List<Objective> { new Objective { Limit = 1, Counter = 0 } },
OnAdvance = new Action(() => {
//complete
})
});
#endregion
#region The Battlefields of Eternity
//X1_PandExt_ExteriorFull
Game.QuestManager.Quests.Add(273790, new Quest { RewardXp = 7000, RewardGold = 620, Completed = false, Saveable = true, NextQuest = 269552, Steps = new Dictionary<int, QuestStep> { } });
Game.QuestManager.Quests[273790].Steps.Add(-1, new QuestStep
{
Completed = false,
Saveable = true,
NextStep = 35,
Objectives = new List<Objective> { new Objective { Limit = 1, Counter = 0 } },
OnAdvance = new Action(() => {
})
});
Game.QuestManager.Quests[273790].Steps.Add(35, new QuestStep
{
Completed = false,
Saveable = true,
NextStep = 41,
Objectives = new List<Objective> { new Objective { Limit = 1, Counter = 0 } },
OnAdvance = new Action(() => {
//cork for Imperius
Game.AddOnLoadWorldAction(WorldSno.x1_pand_ext_gateoverlook, () =>
{
if (Game.CurrentQuest == 273790 && Game.CurrentStep == 35)
{
script = new Advance();
script.Execute(Game.GetWorld(WorldSno.x1_pand_ext_gateoverlook));
}
});
})
});
Game.QuestManager.Quests[273790].Steps.Add(41, new QuestStep
{
Completed = false,
Saveable = true,
NextStep = 1,
Objectives = new List<Objective> { new Objective { Limit = 1, Counter = 0 } },
OnAdvance = new Action(() => {
//reach Imperius
ListenInteract(ActorSno._x1_imperius, 1, new LaunchConversation(361245));
ListenConversation(361245, new Advance());
Game.AddOnLoadWorldAction(WorldSno.x1_pand_ext_gateoverlook, () =>
{
var world = Game.GetWorld(WorldSno.x1_pand_ext_gateoverlook);
if (world.GetActorBySNO(ActorSno._x1_imperius, true) != null)
world.GetActorBySNO(ActorSno._x1_imperius, true).NotifyConversation(1);
});
})
});
Game.QuestManager.Quests[273790].Steps.Add(1, new QuestStep
{
Completed = false,
Saveable = true,
NextStep = 51,
Objectives = new List<Objective> { new Objective { Limit = 1, Counter = 0 } },
OnAdvance = new Action(() => {
//get to Siege Camp
ListenProximity(ActorSno._x1_pand_ext_imperiuscharge_towers_chain, new Advance());
})
});
Game.QuestManager.Quests[273790].Steps.Add(51, new QuestStep
{
Completed = false,
Saveable = true,
NextStep = 11,
Objectives = new List<Objective> { new Objective { Limit = 1, Counter = 0 } },
OnAdvance = new Action(() => {
//gather siege rune
ListenInteract(ActorSno._x1_pandext_siegerune, 1, new Advance());
})
});
Game.QuestManager.Quests[273790].Steps.Add(11, new QuestStep
{
Completed = false,
Saveable = true,
NextStep = 43,
Objectives = new List<Objective> { new Objective { Limit = 1, Counter = 0 } },
OnAdvance = new Action(() => {
//talk to Imperius
ListenInteract(ActorSno._x1_imperius, 1, new LaunchConversation(361252));
ListenConversation(361252, new LaunchConversation(361275));
ListenConversation(361275, new Advance());
Game.AddOnLoadWorldAction(WorldSno.x1_pand_ext_gateoverlook, () =>
{
var world = Game.GetWorld(WorldSno.x1_pand_ext_gateoverlook);
if (world.GetActorBySNO(ActorSno._x1_imperius, true) != null)
world.GetActorBySNO(ActorSno._x1_imperius, true).NotifyConversation(1);
});
})
});
Game.QuestManager.Quests[273790].Steps.Add(43, new QuestStep
{
Completed = false,
Saveable = true,
NextStep = 45,
Objectives = new List<Objective> { new Objective { Limit = 1, Counter = 0 } },
OnAdvance = new Action(() => {
//hunt for Siege Runes
UnlockTeleport(8);
ListenInteract(ActorSno._x1_pandext_siegerune, 2, new Advance());
})
});
Game.QuestManager.Quests[273790].Steps.Add(45, new QuestStep
{
Completed = false,
Saveable = true,
NextStep = 30,
Objectives = new List<Objective> { new Objective { Limit = 1, Counter = 0 } },
OnAdvance = new Action(() => {
//enter Siege outpost
ListenTeleport(339397, new Advance());
})
});
Game.QuestManager.Quests[273790].Steps.Add(30, new QuestStep
{
Completed = false,
Saveable = true,
NextStep = 33,
Objectives = new List<Objective> { new Objective { Limit = 1, Counter = 0 } },
OnAdvance = new Action(() => {
//Kill Ram Defense Captain (Thilor)
ListenKill(ActorSno._x1_bigred_chronodemon_burned_ramguard, 1, new Advance());
})
});
Game.QuestManager.Quests[273790].Steps.Add(33, new QuestStep
{
Completed = false,
Saveable = true,
NextStep = 15,
Objectives = new List<Objective> { new Objective { Limit = 1, Counter = 0 } },
OnAdvance = new Action(() => {
//talk to Tyrael
ListenInteract(ActorSno._x1_tyrael_pandext, 1, new LaunchConversation(346540));
ListenConversation(346540, new Advance());
Game.AddOnLoadWorldAction(WorldSno.x1_pand_ext_batteringram_entrance_a, () =>
{
Game.GetWorld(WorldSno.x1_pand_ext_batteringram_entrance_a).GetActorBySNO(ActorSno._x1_tyrael_pandext).NotifyConversation(1);
});
})
});
Game.QuestManager.Quests[273790].Steps.Add(15, new QuestStep
{
Completed = false,
Saveable = true,
NextStep = -1,
Objectives = new List<Objective> { new Objective { Limit = 1, Counter = 0 } },
OnAdvance = new Action(() => {
//complete
})
});
#endregion
#region Breaching the Fortress
//x1_BatteringRamFight
Game.QuestManager.Quests.Add(269552, new Quest { RewardXp = 7000, RewardGold = 620, Completed = false, Saveable = true, NextQuest = 273408, Steps = new Dictionary<int, QuestStep> { } });
Game.QuestManager.Quests[269552].Steps.Add(-1, new QuestStep
{
Completed = false,
Saveable = true,
NextStep = 32,
Objectives = new List<Objective> { new Objective { Limit = 1, Counter = 0 } },
OnAdvance = new Action(() => {
})
});
Game.QuestManager.Quests[269552].Steps.Add(32, new QuestStep
{
Completed = false,
Saveable = true,
NextStep = 25,
Objectives = new List<Objective> { new Objective { Limit = 1, Counter = 0 } },
OnAdvance = new Action(() => {
//Board Ram
UnlockTeleport(9);
ListenTeleport(295228, new Advance());
var RamWorld = Game.GetWorld(WorldSno.x1_pand_batteringram);
var backgroundActor = RamWorld.GetActorBySNO(ActorSno._x1_pand_batteringram_background_static);
backgroundActor.Hidden = true;
backgroundActor.SetVisible(false);
var activationActor = RamWorld.GetActorBySNO(ActorSno._x1_pand_batteringram_activation);
activationActor.Hidden = true;
activationActor.SetVisible(false);
var knockbackActor = RamWorld.GetActorBySNO(ActorSno._x1_pand_ext_ram_knockback);
knockbackActor.Hidden = true;
knockbackActor.SetVisible(false);
Game.AddOnLoadWorldAction(WorldSno.x1_pand_batteringram, () =>
{
var portal = RamWorld.GetActorBySNO(ActorSno._g_portal_archtall_blue);
portal.SetVisible(false);
foreach (var plr in Game.Players.Values)
{
knockbackActor.Unreveal(plr);
activationActor.Unreveal(plr);
backgroundActor.Unreveal(plr);
portal.Unreveal(plr);
}
if (Game.CurrentQuest == 269552)
RamWorld.GetActorBySNO(ActorSno._x1_pand_batteringram_background).PlayActionAnimation(299978);
});
})
});
Game.QuestManager.Quests[269552].Steps.Add(25, new QuestStep
{
Completed = false,
Saveable = true,
NextStep = 27,
Objectives = new List<Objective> { new Objective { Limit = 1, Counter = 0 } },
OnAdvance = new Action(() => {
//breach phase
ListenKill(ActorSno._x1_westmarchranged_b, 2, new Advance());
Game.AddOnLoadWorldAction(WorldSno.x1_pand_batteringram, () =>
{
SetActorVisible(Game.GetWorld(WorldSno.x1_pand_batteringram), ActorSno._x1_westmarchbrute_batteringramboss, false);
});
})
});
Game.QuestManager.Quests[269552].Steps.Add(27, new QuestStep
{
Completed = false,
Saveable = true,
NextStep = 29,
Objectives = new List<Objective> { new Objective { Limit = 1, Counter = 0 } },
OnAdvance = new Action(() => {
//Fight Ram Boss
ListenKill(ActorSno._x1_westmarchbrute_batteringramboss, 1, new Advance());
Game.AddOnLoadWorldAction(WorldSno.x1_pand_batteringram, () =>
{
if (Game.CurrentQuest == 269552)
SetActorVisible(Game.GetWorld(WorldSno.x1_pand_batteringram), ActorSno._x1_westmarchbrute_batteringramboss, true);
});
})
});
Game.QuestManager.Quests[269552].Steps.Add(29, new QuestStep
{
Completed = false,
Saveable = true,
NextStep = 22,
Objectives = new List<Objective> { new Objective { Limit = 1, Counter = 0 } },
OnAdvance = new Action(() => {
//Finish the Gate
Game.AddOnLoadWorldAction(WorldSno.x1_pand_batteringram, () =>
{
if (Game.CurrentQuest == 269552)
{
//Должен быть Удар 1!
//{ 70176 = 334746} //Удар 1
script = new FirstWaveRam();
script.Execute(Game.GetWorld(WorldSno.x1_pand_batteringram));
}
});
//После волны - Удар 2!
//{ 70192 = 334747} //Удар 2 (есть обломки)
ListenKill(ActorSno._x1_leaperangel_a_fortressunique, 1, new SecondWaveRam());
//После волны - Удар 2!
//{ 70192 = 334747} //Удар 2 (есть обломки)
ListenKill(ActorSno._x1_sniperangel_a_fortressunique, 1, new ThirdWaveRam());
//Последняя война - Удар 3, пробиваем дыру.
//{ 70208 = 334748} //Удар 3 (с пробитием)
ListenKill(ActorSno._x1_westmarchbrute_c_fortressunique, 1, new Babah());
})
});
Game.QuestManager.Quests[269552].Steps.Add(22, new QuestStep
{
Completed = false,
Saveable = true,
NextStep = 8,
Objectives = new List<Objective> { new Objective { Limit = 1, Counter = 0 } },
OnAdvance = new Action(() => {
//enter Breach
var RamWorld = Game.GetWorld(WorldSno.x1_pand_batteringram);
Game.CurrentEncounter.activated = false;
ListenTeleport(271234, new Advance());
Game.AddOnLoadWorldAction(WorldSno.x1_pand_batteringram, () =>
{
RamWorld.GetActorBySNO(ActorSno._g_portal_archtall_blue).SetVisible(true);
foreach (var plr in Game.Players.Values)
{
RamWorld.GetActorBySNO(ActorSno._g_portal_archtall_blue).Reveal(plr);
}
if (Game.CurrentQuest != 269552)
RamWorld.GetActorBySNO(ActorSno._x1_pand_batteringram_background).SetIdleAnimation(360069);
//RamWorld.GetActorBySNO(295438).PlayActionAnimation(299978);
//Open(this.Game.GetWorld(295225), 345259);
Open(RamWorld, ActorSno._x1_pand_batteringram_background);
});
})
});
Game.QuestManager.Quests[269552].Steps.Add(8, new QuestStep
{
Completed = false,
Saveable = true,
NextStep = -1,
Objectives = new List<Objective> { new Objective { Limit = 1, Counter = 0 } },
OnAdvance = new Action(() => {
//complete
PlayCutscene(3);
})
});
#endregion
#region Angel of Death
//x1_Fortress_KillMalthael
Game.QuestManager.Quests.Add(273408, new Quest { RewardXp = 7000, RewardGold = 620, Completed = false, Saveable = true, NextQuest = -1, Steps = new Dictionary<int, QuestStep> { } });
Game.QuestManager.Quests[273408].Steps.Add(-1, new QuestStep
{
Completed = false,
Saveable = true,
NextStep = 30,
Objectives = new List<Objective> { new Objective { Limit = 1, Counter = 0 } },
OnAdvance = new Action(() => {
})
});
Game.QuestManager.Quests[273408].Steps.Add(30, new QuestStep
{
Completed = false,
Saveable = true,
NextStep = 12,
Objectives = new List<Objective> { new Objective { Limit = 1, Counter = 0 } },
OnAdvance = new Action(() => {
//FortressIntroTyrael
var world = Game.GetWorld(WorldSno.x1_fortress_level_01);
AddQuestConversation(world.GetActorBySNO(ActorSno._tyrael), 302646);
//ListenProximity(6353, new LaunchConversation(302646));
ListenConversation(302646, new Advance());
Game.AddOnLoadWorldAction(WorldSno.x1_fortress_level_01, () =>
{
if (Game.CurrentQuest == 273408 && Game.CurrentStep == 30)
{
world.GetActorBySNO(ActorSno._tyrael).NotifyConversation(1);
}
});
})
});
Game.QuestManager.Quests[273408].Steps.Add(12, new QuestStep
{
Completed = false,
Saveable = true,
NextStep = 36,
Objectives = new List<Objective> { new Objective { Limit = 1, Counter = 0 } },
OnAdvance = new Action(() => {
//Spirit Well 1
RemoveConversations(Game.GetWorld(WorldSno.x1_fortress_level_01).GetActorBySNO(ActorSno._tyrael));
UnlockTeleport(10);
ListenInteract(ActorSno._x1_fortress_spiritbarbarian, 1, new LaunchConversation(335174));
ListenInteract(ActorSno._x1_fortress_spiritcrusadermmaster, 1, new LaunchConversation(336672));
ListenInteract(ActorSno._x1_fortress_spiritcrusaderfmaster, 1, new LaunchConversation(336674));
ListenInteract(ActorSno._x1_fortress_spiritdemonhunter, 1, new LaunchConversation(336676));
ListenInteract(ActorSno._x1_fortress_spiritmonkpatriarch, 1, new LaunchConversation(336678));
ListenInteract(ActorSno._x1_fortress_spiritwitchdoctor, 1, new LaunchConversation(336680));
ListenInteract(ActorSno._x1_fortress_spiritwizard, 1, new LaunchConversation(336682));
ListenInteract(ActorSno._x1_fortress_spiritnecromancerordan, 1, new LaunchConversation(469534)); //x1_fortress_SpiritLevel1_Necromancer
ListenConversation(335174, new LaunchConversation(308752));
ListenConversation(336672, new LaunchConversation(314906));
ListenConversation(336674, new LaunchConversation(319523));
ListenConversation(336676, new LaunchConversation(314911));
ListenConversation(336678, new LaunchConversation(314915));
ListenConversation(336680, new LaunchConversation(314919));
ListenConversation(336682, new LaunchConversation(314924));
ListenConversation(469534, new LaunchConversation(469542));
ListenConversation(308752, new Advance());
ListenConversation(314906, new Advance());
ListenConversation(319523, new Advance());
ListenConversation(314911, new Advance());
ListenConversation(314915, new Advance());
ListenConversation(314919, new Advance());
ListenConversation(314924, new Advance());
ListenConversation(469542, new Advance());
})
});
Game.QuestManager.Quests[273408].Steps.Add(36, new QuestStep
{
Completed = false,
Saveable = true,
NextStep = 65,
Objectives = new List<Objective> { new Objective { Limit = 1, Counter = 0 } },
OnAdvance = new Action(() => {
//Spirit Well 2
ListenTeleport(360494, new Advance());
})
});
Game.QuestManager.Quests[273408].Steps.Add(65, new QuestStep
{
Completed = false,
Saveable = true,
NextStep = 61,
Objectives = new List<Objective> { new Objective { Limit = 1, Counter = 0 } },
OnAdvance = new Action(() => {
//Kill Death Maiden
ListenKill(ActorSno._x1_deathmaiden_pand_a_fortressunique, 1, new Advance());
Game.AddOnLoadWorldAction(WorldSno.x1_fortress_level_02, () =>
{
SetActorOperable(Game.GetWorld(WorldSno.x1_fortress_level_02), ActorSno._x1_fortress_soul_grinder_a, false);
});
})
});
Game.QuestManager.Quests[273408].Steps.Add(61, new QuestStep
{
Completed = false,
Saveable = true,
NextStep = 3,
Objectives = new List<Objective> { new Objective { Limit = 1, Counter = 0 } },
OnAdvance = new Action(() => {
//Destroy Soul Prison
UnlockTeleport(11);
ListenKill(ActorSno._x1_fortress_soul_grinder_a, 1, new Advance());
Game.AddOnLoadWorldAction(WorldSno.x1_fortress_level_02, () =>
{
SetActorOperable(Game.GetWorld(WorldSno.x1_fortress_level_02), ActorSno._x1_fortress_soul_grinder_a, true);
});
})
});
Game.QuestManager.Quests[273408].Steps.Add(3, new QuestStep
{
Completed = false,
Saveable = true,
NextStep = 8,
Objectives = new List<Objective> { new Objective { Limit = 1, Counter = 0 } },
OnAdvance = new Action(() => {
//find Malthael
ListenTeleport(330576, new Advance());
})
});
Game.QuestManager.Quests[273408].Steps.Add(8, new QuestStep
{
Completed = false,
Saveable = true,
NextStep = 21,
Objectives = new List<Objective> { new Objective { Limit = 1, Counter = 0 } },
OnAdvance = new Action(() => {
//kill Malthael
ListenKill(ActorSno._x1_malthael_boss, 1, new Advance());
})
});
Game.QuestManager.Quests[273408].Steps.Add(21, new QuestStep
{
Completed = false,
Saveable = true,
NextStep = 7,
Objectives = new List<Objective> { new Objective { Limit = 1, Counter = 0 } },
OnAdvance = new Action(() => {
//Success
Game.CurrentEncounter.activated = false;
ListenProximity(ActorSno._tyrael, new LaunchConversation(351334));
ListenConversation(351334, new Advance());
if (Game.IsHardcore)
{
foreach (var plr in Game.Players.Values)
if (!plr.Toon.GameAccount.Flags.HasFlag(GameAccount.GameAccountFlags.HardcoreAdventureModeUnlocked))
{
plr.Toon.GameAccount.Flags = plr.Toon.GameAccount.Flags | GameAccount.GameAccountFlags.HardcoreAdventureModeUnlocked;
//plr.InGameClient.SendMessage(new AdventureModeUnlockedMessage());
}
}
else
{
foreach (var plr in Game.Players.Values)
if (!plr.Toon.GameAccount.Flags.HasFlag(GameAccount.GameAccountFlags.AdventureModeUnlocked))
{
plr.Toon.GameAccount.Flags = plr.Toon.GameAccount.Flags | GameAccount.GameAccountFlags.AdventureModeUnlocked;
//plr.InGameClient.SendMessage(new AdventureModeUnlockedMessage());
}
}
Game.AddOnLoadWorldAction(WorldSno.x1_malthael_boss_arena, () =>
{
Game.GetWorld(WorldSno.x1_malthael_boss_arena).GetActorBySNO(ActorSno._tyrael).NotifyConversation(1);
});
})
});
Game.QuestManager.Quests[273408].Steps.Add(7, new QuestStep
{
Completed = false,
Saveable = true,
NextStep = -1,
Objectives = new List<Objective> { new Objective { Limit = 1, Counter = 0 } },
OnAdvance = new Action(() => {
//complete
})
});
#endregion
}
}
}