blizzless-diiis/Src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act I/SpawnSkeletons.cs
2025-09-29 10:45:42 -03:00

93 lines
3.2 KiB
C#

using DiIiS_NA.Core.Logging;
using DiIiS_NA.GameServer.GSSystem.ActorSystem;
using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings;
using DiIiS_NA.GameServer.GSSystem.GameSystem;
using DiIiS_NA.GameServer.GSSystem.PlayerSystem;
using DiIiS_NA.GameServer.MessageSystem;
using System.Linq;
using System;
using System.Collections.Generic;
using DiIiS_NA.LoginServer.AccountsSystem;
using DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents;
using DiIiS_NA.GameServer.Core.Types.Math;
using DiIiS_NA.Core.Helpers.Math;
using DiIiS_NA.GameServer.Core.Types.TagMap;
using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Animation;
using System.Threading.Tasks;
using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Base;
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
namespace DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents.Implementations
{
class SpawnSkeletons : QuestEvent
{
//ActorID: 0x7A3100DD
//ZombieSkinny_A_LeahInn.acr (2050031837)
//ActorSNOId: 0x00031971:ZombieSkinny_A_LeahInn.acr
private static readonly Logger Logger = LogManager.CreateLogger();
public SpawnSkeletons()
: base(151124)
{
}
public override void Execute(MapSystem.World world)
{
if (world.Game.Empty) return;
//Logger.Debug("SpawnSkeletons event started");
Task.Delay(1000).ContinueWith(delegate
{
foreach (var plr in world.Game.Players.Values)
plr.InGameClient.SendMessage(new MessageSystem.Message.Definitions.Camera.CameraCriptedSequenceStartMessage() { Activate = true });
var SkeletonKing_Bridge = world.GetActorBySNO(ActorSno._trdun_skeletonking_bridge_active);
Task.Delay(1000).ContinueWith(delegate
{
foreach (var plr in world.Game.Players.Values)
plr.InGameClient.SendMessage(new MessageSystem.Message.Definitions.Camera.CameraFocusMessage() { ActorID = (int)SkeletonKing_Bridge.DynamicID(plr), Duration = 1f, Snap = false });
StartConversation(world, 17923);
SkeletonKing_Bridge.PlayAnimation(5, (AnimationSno)SkeletonKing_Bridge.AnimationSet.TagMapAnimDefault[AnimationSetKeys.Opening], 1f);
world.BroadcastIfRevealed(plr => new SetIdleAnimationMessage
{
ActorID = SkeletonKing_Bridge.DynamicID(plr),
AnimationSNO = AnimationSetKeys.Open.ID,
}, SkeletonKing_Bridge);
Task.Delay(3000).ContinueWith(delegate
{
foreach (var plr in world.Game.Players.Values)
{
plr.InGameClient.SendMessage(new BoolDataMessage(Opcodes.CameraTriggerFadeToBlackMessage) { Field0 = true });
plr.InGameClient.SendMessage(new SimpleMessage(Opcodes.CameraSriptedSequenceStopMessage) { });
}
});
});
});
var spawner = world.GetActorBySNO(ActorSno._trdun_rescuecainskelspawner);
while (spawner != null)
{
var monster = ActorSno._skeletonking_shield_skeleton;
world.SpawnMonster(monster, spawner.Position);
spawner.Destroy();
spawner = world.GetActorBySNO(ActorSno._trdun_rescuecainskelspawner);
}
}
private bool StartConversation(MapSystem.World world, Int32 conversationId)
{
foreach (var player in world.Players)
{
player.Value.Conversations.StartConversation(conversationId);
}
return true;
}
}
}