From 662f4172894d437ab753c35fc8beb7933abc712c Mon Sep 17 00:00:00 2001 From: MrShadow Date: Sat, 15 Nov 2025 07:34:18 -0300 Subject: [PATCH 1/4] Add track NPCs initial commit --- doc/bt/ZC_DIRECTION_APC.bt | 7 +- src/Shared/Network/NormalOp.cs | 4 +- src/ZoneServer/Network/Send.Normal.cs | 66 +++++--- src/ZoneServer/Network/Send.cs | 22 +++ src/ZoneServer/Scripting/Shortcuts.Npcs.cs | 105 +++++++++++++ src/ZoneServer/World/Actors/Actor.cs | 57 +++++++ .../World/Actors/Characters/Character.cs | 19 +++ .../Actors/Components/EffectsComponent.cs | 142 ++++++++++++++++++ .../World/Actors/Effects/DirectionAPC.cs | 102 +++++++++++++ src/ZoneServer/World/Actors/Effects/Effect.cs | 23 +++ .../World/Actors/Effects/ReviveEffect.cs | 20 +++ .../World/Actors/Effects/SetTrackPosition.cs | 20 +++ src/ZoneServer/World/Actors/Monsters/Npc.cs | 12 +- src/ZoneServer/World/WorldManager.cs | 7 + .../content/r1/npcs/dungeons/d_abbey_64_1.cs | 19 +++ .../content/r1/npcs/dungeons/d_abbey_64_2.cs | 19 +++ .../content/r1/npcs/dungeons/d_abbey_64_3.cs | 19 +++ .../content/r1/npcs/dungeons/d_castle_67_1.cs | 19 +++ .../content/r1/npcs/dungeons/d_castle_67_2.cs | 20 +++ .../content/r1/npcs/dungeons/d_cmine_66_1.cs | 19 +++ .../r1/npcs/dungeons/d_fantasylibrary_48_2.cs | 19 +++ .../r1/npcs/dungeons/d_fantasylibrary_48_3.cs | 19 +++ .../r1/npcs/dungeons/d_fantasylibrary_48_4.cs | 19 +++ .../r1/npcs/dungeons/d_firetower_69_1.cs | 22 +++ .../r1/npcs/dungeons/d_firetower_69_2.cs | 19 +++ .../r1/npcs/dungeons/d_limestonecave_55_1.cs | 19 +++ .../content/r1/npcs/dungeons/d_prison_62_1.cs | 19 +++ .../content/r1/npcs/dungeons/d_prison_62_2.cs | 19 +++ .../content/r1/npcs/dungeons/d_prison_62_3.cs | 19 +++ .../r1/npcs/dungeons/d_underfortress_68_2.cs | 21 +++ .../content/r1/npcs/fields/f_3cmlake_26_1.cs | 19 +++ .../content/r1/npcs/fields/f_bracken_42_1.cs | 20 +++ .../content/r1/npcs/fields/f_bracken_43_2.cs | 20 +++ .../content/r1/npcs/fields/f_bracken_43_4.cs | 19 +++ .../content/r1/npcs/fields/f_bracken_63_1.cs | 19 +++ .../content/r1/npcs/fields/f_bracken_63_2.cs | 19 +++ .../content/r1/npcs/fields/f_bracken_63_3.cs | 19 +++ .../content/r1/npcs/fields/f_castle_20_1.cs | 20 +++ .../content/r1/npcs/fields/f_castle_20_2.cs | 20 +++ .../content/r1/npcs/fields/f_castle_20_3.cs | 19 +++ .../content/r1/npcs/fields/f_castle_20_4.cs | 19 +++ .../content/r1/npcs/fields/f_castle_65_1.cs | 19 +++ .../content/r1/npcs/fields/f_castle_65_2.cs | 19 +++ .../content/r1/npcs/fields/f_castle_65_3.cs | 19 +++ .../content/r1/npcs/fields/f_coral_32_2.cs | 19 +++ .../content/r1/npcs/fields/f_coral_35_2.cs | 19 +++ .../content/r1/npcs/fields/f_coral_44_3.cs | 19 +++ .../content/r1/npcs/fields/f_dcapital_103.cs | 20 +++ .../content/r1/npcs/fields/f_dcapital_105.cs | 19 +++ .../content/r1/npcs/fields/f_dcapital_106.cs | 19 +++ .../content/r1/npcs/fields/f_dcapital_20_5.cs | 19 +++ .../content/r1/npcs/fields/f_dcapital_20_6.cs | 19 +++ .../zone/content/r1/npcs/fields/f_flash_63.cs | 19 +++ .../content/r1/npcs/fields/f_gele_57_1.cs | 19 +++ .../content/r1/npcs/fields/f_gele_57_2.cs | 19 +++ .../r1/npcs/fields/f_huevillage_58_1.cs | 19 +++ .../content/r1/npcs/fields/f_maple_25_1.cs | 19 +++ .../content/r1/npcs/fields/f_maple_25_2.cs | 19 +++ .../content/r1/npcs/fields/f_maple_25_3.cs | 19 +++ .../r1/npcs/fields/f_nicopolis_81_2.cs | 19 +++ .../r1/npcs/fields/f_nicopolis_81_3.cs | 19 +++ .../content/r1/npcs/fields/f_orchard_32_4.cs | 20 +++ .../content/r1/npcs/fields/f_orchard_34_2.cs | 19 +++ .../zone/content/r1/npcs/fields/f_rokas_27.cs | 19 +++ .../r1/npcs/fields/f_whitetrees_22_2.cs | 19 +++ .../r1/npcs/fields/f_whitetrees_23_1.cs | 19 +++ .../r1/npcs/fields/f_whitetrees_23_3.cs | 19 +++ .../r1/npcs/fields/f_whitetrees_56_1.cs | 19 +++ .../scripts/zone/content/r1/npcs/scripts.txt | 5 + system/scripts/zone/content/r1/scripts.txt | 1 + 70 files changed, 1628 insertions(+), 22 deletions(-) create mode 100644 src/ZoneServer/World/Actors/Components/EffectsComponent.cs create mode 100644 src/ZoneServer/World/Actors/Effects/DirectionAPC.cs create mode 100644 src/ZoneServer/World/Actors/Effects/Effect.cs create mode 100644 src/ZoneServer/World/Actors/Effects/ReviveEffect.cs create mode 100644 src/ZoneServer/World/Actors/Effects/SetTrackPosition.cs create mode 100644 system/scripts/zone/content/r1/npcs/dungeons/d_abbey_64_1.cs create mode 100644 system/scripts/zone/content/r1/npcs/dungeons/d_abbey_64_2.cs create mode 100644 system/scripts/zone/content/r1/npcs/dungeons/d_abbey_64_3.cs create mode 100644 system/scripts/zone/content/r1/npcs/dungeons/d_castle_67_1.cs create mode 100644 system/scripts/zone/content/r1/npcs/dungeons/d_castle_67_2.cs create mode 100644 system/scripts/zone/content/r1/npcs/dungeons/d_cmine_66_1.cs create mode 100644 system/scripts/zone/content/r1/npcs/dungeons/d_fantasylibrary_48_2.cs create mode 100644 system/scripts/zone/content/r1/npcs/dungeons/d_fantasylibrary_48_3.cs create mode 100644 system/scripts/zone/content/r1/npcs/dungeons/d_fantasylibrary_48_4.cs create mode 100644 system/scripts/zone/content/r1/npcs/dungeons/d_firetower_69_1.cs create mode 100644 system/scripts/zone/content/r1/npcs/dungeons/d_firetower_69_2.cs create mode 100644 system/scripts/zone/content/r1/npcs/dungeons/d_limestonecave_55_1.cs create mode 100644 system/scripts/zone/content/r1/npcs/dungeons/d_prison_62_1.cs create mode 100644 system/scripts/zone/content/r1/npcs/dungeons/d_prison_62_2.cs create mode 100644 system/scripts/zone/content/r1/npcs/dungeons/d_prison_62_3.cs create mode 100644 system/scripts/zone/content/r1/npcs/dungeons/d_underfortress_68_2.cs create mode 100644 system/scripts/zone/content/r1/npcs/fields/f_3cmlake_26_1.cs create mode 100644 system/scripts/zone/content/r1/npcs/fields/f_bracken_42_1.cs create mode 100644 system/scripts/zone/content/r1/npcs/fields/f_bracken_43_2.cs create mode 100644 system/scripts/zone/content/r1/npcs/fields/f_bracken_43_4.cs create mode 100644 system/scripts/zone/content/r1/npcs/fields/f_bracken_63_1.cs create mode 100644 system/scripts/zone/content/r1/npcs/fields/f_bracken_63_2.cs create mode 100644 system/scripts/zone/content/r1/npcs/fields/f_bracken_63_3.cs create mode 100644 system/scripts/zone/content/r1/npcs/fields/f_castle_20_1.cs create mode 100644 system/scripts/zone/content/r1/npcs/fields/f_castle_20_2.cs create mode 100644 system/scripts/zone/content/r1/npcs/fields/f_castle_20_3.cs create mode 100644 system/scripts/zone/content/r1/npcs/fields/f_castle_20_4.cs create mode 100644 system/scripts/zone/content/r1/npcs/fields/f_castle_65_1.cs create mode 100644 system/scripts/zone/content/r1/npcs/fields/f_castle_65_2.cs create mode 100644 system/scripts/zone/content/r1/npcs/fields/f_castle_65_3.cs create mode 100644 system/scripts/zone/content/r1/npcs/fields/f_coral_32_2.cs create mode 100644 system/scripts/zone/content/r1/npcs/fields/f_coral_35_2.cs create mode 100644 system/scripts/zone/content/r1/npcs/fields/f_coral_44_3.cs create mode 100644 system/scripts/zone/content/r1/npcs/fields/f_dcapital_103.cs create mode 100644 system/scripts/zone/content/r1/npcs/fields/f_dcapital_105.cs create mode 100644 system/scripts/zone/content/r1/npcs/fields/f_dcapital_106.cs create mode 100644 system/scripts/zone/content/r1/npcs/fields/f_dcapital_20_5.cs create mode 100644 system/scripts/zone/content/r1/npcs/fields/f_dcapital_20_6.cs create mode 100644 system/scripts/zone/content/r1/npcs/fields/f_flash_63.cs create mode 100644 system/scripts/zone/content/r1/npcs/fields/f_gele_57_1.cs create mode 100644 system/scripts/zone/content/r1/npcs/fields/f_gele_57_2.cs create mode 100644 system/scripts/zone/content/r1/npcs/fields/f_huevillage_58_1.cs create mode 100644 system/scripts/zone/content/r1/npcs/fields/f_maple_25_1.cs create mode 100644 system/scripts/zone/content/r1/npcs/fields/f_maple_25_2.cs create mode 100644 system/scripts/zone/content/r1/npcs/fields/f_maple_25_3.cs create mode 100644 system/scripts/zone/content/r1/npcs/fields/f_nicopolis_81_2.cs create mode 100644 system/scripts/zone/content/r1/npcs/fields/f_nicopolis_81_3.cs create mode 100644 system/scripts/zone/content/r1/npcs/fields/f_orchard_32_4.cs create mode 100644 system/scripts/zone/content/r1/npcs/fields/f_orchard_34_2.cs create mode 100644 system/scripts/zone/content/r1/npcs/fields/f_rokas_27.cs create mode 100644 system/scripts/zone/content/r1/npcs/fields/f_whitetrees_22_2.cs create mode 100644 system/scripts/zone/content/r1/npcs/fields/f_whitetrees_23_1.cs create mode 100644 system/scripts/zone/content/r1/npcs/fields/f_whitetrees_23_3.cs create mode 100644 system/scripts/zone/content/r1/npcs/fields/f_whitetrees_56_1.cs create mode 100644 system/scripts/zone/content/r1/npcs/scripts.txt diff --git a/doc/bt/ZC_DIRECTION_APC.bt b/doc/bt/ZC_DIRECTION_APC.bt index 54851a32a..e6b2d61dd 100644 --- a/doc/bt/ZC_DIRECTION_APC.bt +++ b/doc/bt/ZC_DIRECTION_APC.bt @@ -14,8 +14,9 @@ #include "inc/common.bt" ServerHeaderFixed header; + +int handle; +int packetString; int i1; int i2; -int i3; -int i4; -float f2; \ No newline at end of file +float serverAppTimeOffset; \ No newline at end of file diff --git a/src/Shared/Network/NormalOp.cs b/src/Shared/Network/NormalOp.cs index 597fda8d6..fb6bfc623 100644 --- a/src/Shared/Network/NormalOp.cs +++ b/src/Shared/Network/NormalOp.cs @@ -50,6 +50,8 @@ public static class Zone public const int AccountProperties = 0x4D; public const int UnkDynamicCastStart = 0x4F; public const int UnkDynamicCastEnd = 0x50; + public const int NPC_PlayTrack = 0x53; + public const int SetNPCTrackPosition = 0x54; public const int PadUpdate = 0x59; public const int PadSetMonsterAltitude = 0x5C; public const int ParticleEffect = 0x61; @@ -71,7 +73,7 @@ public static class Zone public const int Unknown_EF = 0xF2; public const int ChannelTraffic = 0x12D; public const int SetGreetingMessage = 0x136; - public const int Unk13E = 0x13E; + public const int Revive = 0x13E; public const int SetSessionKey = 0x14F; public const int ItemDrop = 0x152; public const int NGSCallback = 0x170; diff --git a/src/ZoneServer/Network/Send.Normal.cs b/src/ZoneServer/Network/Send.Normal.cs index ebb09e5e9..5759eef60 100644 --- a/src/ZoneServer/Network/Send.Normal.cs +++ b/src/ZoneServer/Network/Send.Normal.cs @@ -1179,23 +1179,6 @@ public static void LeapJump(ICombatEntity entity, Position targetPos, float f1, entity.Map.Broadcast(packet, entity); } - /// - /// Purpose unknown. Added for testing purposes, but turned - /// out to not be necessary. - /// - /// - /// - public static void Unk13E(ICombatEntity entity, bool b1) - { - var packet = new Packet(Op.ZC_NORMAL); - packet.PutInt(NormalOp.Zone.Unk13E); - - packet.PutInt(entity.Handle); - packet.PutByte(b1); - - entity.Map.Broadcast(packet, entity); - } - /// /// Starts a time action, displaying a progress bar and /// potentially putting the character in an animation. @@ -1357,6 +1340,55 @@ public static void OpenBook(Character character, string bookName) character.Connection.Send(packet); } + + /// + /// Sent with Resurrect Packets? + /// + /// + /// + public static void Revive(IZoneConnection conn, IActor actor) + { + var packet = new Packet(Op.ZC_NORMAL); + packet.PutInt(NormalOp.Zone.Revive); + + packet.PutInt(actor.Handle); + packet.PutByte(0); + + conn.Send(packet); + } + + /// + /// NPC Position For a script? + /// + /// + /// + public static void SetNPCTrackPosition(IZoneConnection conn, IActor actor) + { + var packet = new Packet(Op.ZC_NORMAL); + packet.PutInt(NormalOp.Zone.SetNPCTrackPosition); + + packet.PutInt(actor.Handle); + packet.PutPosition(actor.Position); + + conn.Send(packet); + } + + /// + /// NPC Play a Track (Client side direction) + /// + public static void NPC_PlayTrack(IActor actor, string trackName, int i1, int i2, float f1) + { + var packet = new Packet(Op.ZC_NORMAL); + packet.PutInt(NormalOp.Zone.NPC_PlayTrack); + + packet.PutInt(actor.Handle); + packet.PutLpString(trackName); + packet.PutInt(i1); + packet.PutInt(i2); + packet.PutFloat(f1); + + actor.Map.Broadcast(packet); + } } } } diff --git a/src/ZoneServer/Network/Send.cs b/src/ZoneServer/Network/Send.cs index 8adb3d947..77c1f1b17 100644 --- a/src/ZoneServer/Network/Send.cs +++ b/src/ZoneServer/Network/Send.cs @@ -4550,5 +4550,27 @@ public static void ZC_ACTION_PKS(IActor toActor, IActor fromActor, byte type, in toActor.Map.Broadcast(packet); } + + /// + /// Sends ZC_DIRECTION_APC packet to initialize track animation. + /// + /// The connection to send to. + /// The actor to animate. + /// The packet string ID for the track. + /// Track start index. + /// Track end index. + /// Time parameter. + public static void ZC_DIRECTION_APC(IZoneConnection conn, IActor actor, int packetStringId, int i1, int i2, float f1) + { + var packet = new Packet(Op.ZC_DIRECTION_APC); + + packet.PutInt(actor.Handle); + packet.PutInt(packetStringId); + packet.PutInt(i1); + packet.PutInt(i2); + packet.PutFloat(f1); + + conn.Send(packet); + } } } diff --git a/src/ZoneServer/Scripting/Shortcuts.Npcs.cs b/src/ZoneServer/Scripting/Shortcuts.Npcs.cs index f69aa128b..028d1d27d 100644 --- a/src/ZoneServer/Scripting/Shortcuts.Npcs.cs +++ b/src/ZoneServer/Scripting/Shortcuts.Npcs.cs @@ -99,6 +99,111 @@ public static Npc AddNpc(int monsterId, string name, string uniqueName, string m return monster; } + /// + /// Adds new NPC to the world with explicit Y coordinate. + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + public static Npc AddNpc(int monsterId, string name, string uniqueName, string map, double x, double y, double z, double direction, DialogFunc dialog = null) + { + if (!ZoneServer.Instance.World.TryGetMap(map, out var mapObj)) + throw new ArgumentException($"Map '{map}' not found."); + + if (ZoneServer.Instance.World.TryGetMonster(a => a.UniqueName == uniqueName, out _)) + throw new ArgumentException($"An NPC with the unique name '{uniqueName}' already exists."); + + var pos = new Position((float)x, (float)y, (float)z); + + // Wrap name in localization code if applicable + if (Dialog.IsLocalizationKey(name)) + { + name = Dialog.WrapLocalizationKey(name); + } + // Insert line breaks in tagged NPC names that don't have one + else if (name.StartsWith('[') && !name.Contains("{nl}")) + { + var endIndex = name.LastIndexOf("] "); + if (endIndex != -1) + { + // Remove space and insert new line instead. + name = name.Remove(endIndex + 1, 1); + name = name.Insert(endIndex + 1, "{nl}"); + } + } + + var location = new Location(mapObj.Id, pos); + var dir = new Direction(direction); + + var monster = new Npc(monsterId, name, location, dir); + monster.UniqueName = uniqueName; + + if (dialog != null) + monster.SetClickTrigger("DYNAMIC_DIALOG", dialog); + + mapObj.AddMonster(monster); + + return monster; + } + + /// + /// Adds new NPC to the world with explicit Y coordinate. + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + public static Npc AddNpc(int monsterId, string name, string map, double x, double y, double z, double direction, DialogFunc dialog = null) + { + var uniqueId = Interlocked.Increment(ref UniqueNpcNameId); + var uniqueName = $"__NPC{uniqueId}__"; + + return AddNpc(monsterId, name, uniqueName, map, x, y, z, direction, dialog); + } + + /// + /// Adds a Track NPC to the world. + /// + /// Monster ID for the NPC + /// Display name (usually empty for track NPCs) + /// Map class name + /// X coordinate + /// Y coordinate + /// Z coordinate + /// Facing direction + /// Track animation string + /// Track start index (default: 2) + /// Track end index (default: 5) + /// The created NPC, or null if map is invalid + public static Npc AddTrackNPC(int monsterId, string name, string map, double x, double y, double z, double direction, string trackString, int i1 = 2, int i2 = 5) + { + if (string.IsNullOrEmpty(map) || map == "None") + { + Yggdrasil.Logging.Log.Debug($"Skipped adding Track NPC {monsterId} - {name} at {x},{y},{z} because of invalid map: {map}"); + return null; + } + + var npc = AddNpc(monsterId, name, map, x, y, z, direction); + npc.Visibility = World.Actors.ActorVisibility.Always; + npc.AddEffect(new World.Actors.Effects.ReviveEffect()); + npc.AddEffect(new World.Actors.Effects.SetTrackPosition()); + npc.AddEffect(new World.Actors.Effects.DirectionAPC(trackString, i1, i2)); + + return npc; + } + /// /// Creates a custom shop. /// diff --git a/src/ZoneServer/World/Actors/Actor.cs b/src/ZoneServer/World/Actors/Actor.cs index eda519145..b6cc9cadd 100644 --- a/src/ZoneServer/World/Actors/Actor.cs +++ b/src/ZoneServer/World/Actors/Actor.cs @@ -1,6 +1,8 @@ using System.Collections.Concurrent; using Melia.Shared.World; using Melia.Zone.Network; +using Melia.Zone.World.Actors.Components; +using Melia.Zone.World.Actors.Effects; using Melia.Zone.World.Maps; namespace Melia.Zone.World.Actors @@ -35,6 +37,11 @@ public interface IActor /// Direction Direction { get; set; } + /// + /// Returns the actor's visibility. + /// + public ActorVisibility Visibility { get; set; } + /// /// Returns a list of effects that are attached to the actor. /// @@ -51,11 +58,24 @@ public abstract class Actor : IActor /// public ConcurrentBag AttachableEffects { get; } = new ConcurrentBag(); + /// + /// Returns the effects component for this actor. + /// + public EffectsComponent Effects { get; } + /// /// Returns the actor's unique handle. /// public int Handle { get; } = ZoneServer.Instance.World.CreateHandle(); + /// + /// Creates a new actor instance. + /// + public Actor() + { + this.Effects = new EffectsComponent(this); + } + /// /// Returns the actor's display name. /// @@ -81,6 +101,11 @@ public Map Map /// public Direction Direction { get; set; } + /// + /// Gets or sets the actor's visibility. + /// + public ActorVisibility Visibility { get; set; } = ActorVisibility.Everyone; + /// /// Attaches an effect to the actor that is displayed alongside it. @@ -95,6 +120,25 @@ public void AttachEffect(string packetString, float scale = 1) if (this.Map != Map.Limbo) Send.ZC_NORMAL.AttachEffect(this, effect.PacketString, effect.Scale); } + + /// + /// Adds an effect to the actor. + /// + /// The effect to add. + public void AddEffect(Effect effect) + { + this.Effects.AddEffect(effect); + } + + /// + /// Adds a named effect to the actor. + /// + /// The name to identify the effect. + /// The effect to add. + public void AddEffect(string effectName, Effect effect) + { + this.Effects.AddEffect(effectName, effect); + } } /// @@ -123,4 +167,17 @@ public AttachableEffect(string packetString, float scale) this.Scale = scale; } } + + /// + /// Defines an actor's visibility. + /// + public enum ActorVisibility + { + NoOne, + Individual, + Party, + Track, + Everyone, + Always, + } } diff --git a/src/ZoneServer/World/Actors/Characters/Character.cs b/src/ZoneServer/World/Actors/Characters/Character.cs index 0d2d659c9..d392c4846 100644 --- a/src/ZoneServer/World/Actors/Characters/Character.cs +++ b/src/ZoneServer/World/Actors/Characters/Character.cs @@ -957,6 +957,9 @@ public void LookAround() Send.ZC_NORMAL.AttachEffect(this.Connection, monster, effect.PacketString, effect.Scale); } + if (monster is Actor actor) + actor.Effects.ShowEffects(this.Connection); + if (monster is ICombatEntity entity) { Send.ZC_FACTION(this.Connection, monster, entity.Faction); @@ -999,6 +1002,8 @@ public void LookAround() Send.ZC_NORMAL.AttachEffect(this.Connection, character, effect.PacketString, effect.Scale); } + character.Effects.ShowEffects(this.Connection); + if (character.Components.Get()?.Count != 0) Send.ZC_BUFF_LIST(this.Connection, character); } @@ -1041,6 +1046,20 @@ public void CloseEyes() } } + /// + /// Returns if a character can see an actor. + /// + public bool CanSee(IActor actor) + { + if (actor.Visibility == ActorVisibility.Always) + return true; + if (actor == null) + return false; + if (!this.Position.InRange2D(actor.Position, Maps.Map.VisibleRange)) + return false; + return true; + } + /// /// Sets direction and updates clients. /// diff --git a/src/ZoneServer/World/Actors/Components/EffectsComponent.cs b/src/ZoneServer/World/Actors/Components/EffectsComponent.cs new file mode 100644 index 000000000..7cd4225b8 --- /dev/null +++ b/src/ZoneServer/World/Actors/Components/EffectsComponent.cs @@ -0,0 +1,142 @@ +using System; +using System.Collections.Generic; +using Melia.Zone.Network; +using Melia.Zone.World.Actors.Characters; +using Melia.Zone.World.Actors.Effects; +using Yggdrasil.Geometry.Shapes; +using Yggdrasil.Scheduling; + +namespace Melia.Zone.World.Actors.Components +{ + /// + /// Component that manages actor effects. + /// + public class EffectsComponent : IUpdateable + { + private readonly Dictionary _effects = new Dictionary(); + + /// + /// Returns the number of effects. + /// + public int Count + { + get + { + lock (_effects) + return _effects.Count; + } + } + + /// + /// Returns the component's owner. + /// + public IActor Owner { get; } + + /// + /// Creates a new effects component. + /// + /// The actor that owns this component. + public EffectsComponent(IActor owner) + { + this.Owner = owner; + } + + /// + /// Adds an effect with an auto-generated name. + /// + /// The effect to add. + public void AddEffect(Effect effect) + { + lock (_effects) + { + var effectName = $"{_effects.Count}"; + _effects.Add(effectName, effect); + this.BroadcastEffectAddition(effect); + } + } + + /// + /// Adds an effect with a specific name. + /// + /// The name to identify the effect. + /// The effect to add. + public void AddEffect(string effectName, Effect effect) + { + lock (_effects) + { + _effects.Add(effectName, effect); + this.BroadcastEffectAddition(effect); + } + } + + /// + /// Sends an effect to all players that can currently see the owner. + /// + /// The effect to show. + private void BroadcastEffectAddition(Effect effect) + { + if (this.Owner?.Map == null) + return; + + // Get all characters within a generous visibility range of the owner. + var charactersInRange = this.Owner.Map.GetActorsIn(new CircleF(this.Owner.Position, 1000f)); + + foreach (var character in charactersInRange) + { + // Check if the character is connected and can actually see the owner actor. + if (character.Connection != null && character.CanSee(this.Owner)) + { + effect.ShowEffect(character.Connection, this.Owner); + } + } + } + + /// + /// Shows all effects to a specific connection. + /// + /// The connection to show effects to. + public void ShowEffects(IZoneConnection connection) + { + lock (_effects) + { + foreach (var effect in _effects.Values) + effect.ShowEffect(connection, this.Owner); + } + } + + /// + /// Removes an effect with a given name. + /// + /// The name of the effect to remove. + public void RemoveEffect(string effectName) + { + if (string.IsNullOrEmpty(effectName)) + return; + + lock (_effects) + { + if (_effects.TryGetValue(effectName, out var effect)) + { + effect.OnRemove(this.Owner); + _effects.Remove(effectName); + } + } + } + + /// + /// Updates the component, calling Update on all IUpdateable effects. + /// + /// Time elapsed since last update. + public void Update(TimeSpan elapsed) + { + lock (_effects) + { + foreach (var effect in _effects.Values) + { + if (effect is IUpdateable updateable) + updateable.Update(elapsed); + } + } + } + } +} diff --git a/src/ZoneServer/World/Actors/Effects/DirectionAPC.cs b/src/ZoneServer/World/Actors/Effects/DirectionAPC.cs new file mode 100644 index 000000000..ce9934302 --- /dev/null +++ b/src/ZoneServer/World/Actors/Effects/DirectionAPC.cs @@ -0,0 +1,102 @@ +using System; +using Melia.Zone.Network; +using Yggdrasil.Scheduling; + +namespace Melia.Zone.World.Actors.Effects +{ + /// + /// Effect that animates an NPC along a track path. + /// + public class DirectionAPC : Effect, IUpdateable + { + private readonly static TimeSpan DefaultUpdateInterval = TimeSpan.FromSeconds(7); + private DateTime _lastUpdate; + + /// + /// Gets or sets the update interval for the animation. + /// + public TimeSpan UpdateInterval { get; set; } = DefaultUpdateInterval; + + /// + /// Gets the track string name. + /// + public string EffectString { get; } + + /// + /// Gets the track string ID. + /// + public int EffectId { get; } + + /// + /// Gets the starting track index. + /// + public int I1 { get; } + + /// + /// Gets the ending track index. + /// + public int I2 { get; } + + /// + /// Gets the actor this effect is applied to. + /// + public IActor Actor { get; private set; } + + /// + /// Gets the current track index. + /// + public int TrackIndex { get; private set; } + + /// + /// Creates a new DirectionAPC effect. + /// + /// The track animation string + /// Start index + /// End index + public DirectionAPC(string packetString, int i1, int i2) + { + if (!ZoneServer.Instance.Data.PacketStringDb.TryFind(packetString, out var data)) + { + throw new ArgumentException($"Packet string '{packetString}' not found."); + } + + this.EffectString = packetString; + this.EffectId = data.Id; + this.I1 = i1; + this.I2 = i2; + } + + /// + /// Shows the effect by initializing the track animation. + /// + /// The connection to show the effect to. + /// The actor that owns the effect. + public override void ShowEffect(IZoneConnection conn, IActor actor) + { + this.Actor = actor; + this.TrackIndex = this.I1 - 1; + Send.ZC_DIRECTION_APC(conn, actor, this.EffectId, this.I1, this.I2, (float)ZoneServer.Instance.World.WorldTime.Elapsed.TotalSeconds); + } + + /// + /// Updates the track animation. + /// + /// Time elapsed since last update. + public void Update(TimeSpan elapsed) + { + var now = DateTime.Now; + var sinceLastUpdate = now - _lastUpdate; + + if (sinceLastUpdate >= this.UpdateInterval && this.Actor != null) + { + if (this.TrackIndex >= this.I2) + this.TrackIndex = 1; + else + this.TrackIndex += 1; + + Send.ZC_NORMAL.NPC_PlayTrack(this.Actor, this.EffectString, this.I1, this.TrackIndex, (float)ZoneServer.Instance.World.WorldTime.Elapsed.TotalSeconds); + _lastUpdate = now; + } + } + } +} diff --git a/src/ZoneServer/World/Actors/Effects/Effect.cs b/src/ZoneServer/World/Actors/Effects/Effect.cs new file mode 100644 index 000000000..d16dba71d --- /dev/null +++ b/src/ZoneServer/World/Actors/Effects/Effect.cs @@ -0,0 +1,23 @@ +using Melia.Zone.Network; + +namespace Melia.Zone.World.Actors.Effects +{ + /// + /// Base class for actor effects. + /// + public abstract class Effect + { + /// + /// Shows an effect to a specific connection. + /// + /// The connection to show the effect to. + /// The actor that owns the effect. + public abstract void ShowEffect(IZoneConnection conn, IActor actor); + + /// + /// Called when the effect is removed from its owner. + /// + /// The actor that owned the effect. + public virtual void OnRemove(IActor actor) { } + } +} diff --git a/src/ZoneServer/World/Actors/Effects/ReviveEffect.cs b/src/ZoneServer/World/Actors/Effects/ReviveEffect.cs new file mode 100644 index 000000000..e235b63a5 --- /dev/null +++ b/src/ZoneServer/World/Actors/Effects/ReviveEffect.cs @@ -0,0 +1,20 @@ +using Melia.Zone.Network; + +namespace Melia.Zone.World.Actors.Effects +{ + /// + /// Effect that sends a revive packet for an actor. + /// + public class ReviveEffect : Effect + { + /// + /// Shows the effect by sending a revive packet. + /// + /// The connection to show the effect to. + /// The actor that owns the effect. + public override void ShowEffect(IZoneConnection conn, IActor actor) + { + Send.ZC_NORMAL.Revive(conn, actor); + } + } +} diff --git a/src/ZoneServer/World/Actors/Effects/SetTrackPosition.cs b/src/ZoneServer/World/Actors/Effects/SetTrackPosition.cs new file mode 100644 index 000000000..aaa4ead3e --- /dev/null +++ b/src/ZoneServer/World/Actors/Effects/SetTrackPosition.cs @@ -0,0 +1,20 @@ +using Melia.Zone.Network; + +namespace Melia.Zone.World.Actors.Effects +{ + /// + /// Effect that sets an NPC's track position. + /// + public class SetTrackPosition : Effect + { + /// + /// Shows the effect by setting the NPC's track position. + /// + /// The connection to show the effect to. + /// The actor that owns the effect. + public override void ShowEffect(IZoneConnection conn, IActor actor) + { + Send.ZC_NORMAL.SetNPCTrackPosition(conn, actor); + } + } +} diff --git a/src/ZoneServer/World/Actors/Monsters/Npc.cs b/src/ZoneServer/World/Actors/Monsters/Npc.cs index e8a9610b7..c81d17c91 100644 --- a/src/ZoneServer/World/Actors/Monsters/Npc.cs +++ b/src/ZoneServer/World/Actors/Monsters/Npc.cs @@ -9,13 +9,14 @@ using System.Threading.Tasks; using Melia.Zone.World.Actors.Pads; using Melia.Zone.Skills; +using Yggdrasil.Scheduling; namespace Melia.Zone.World.Actors.Monsters { /// /// A non-player character that supports dialogues. /// - public class Npc : MonsterInName, ITriggerableArea + public class Npc : MonsterInName, ITriggerableArea, IUpdateable { // TODO: Determine whether NPCs and mobs should actually be // separate classes. NPCs don't typically fight, and many @@ -144,6 +145,15 @@ public void SetTriggerArea(IShapeF area) this.Area = area; } + /// + /// Updates NPC and its components. + /// + /// + public void Update(TimeSpan elapsed) + { + this.Effects.Update(elapsed); + } + /// /// Makes the NPC say the given message, which will display via /// chat bubble above their head. diff --git a/src/ZoneServer/World/WorldManager.cs b/src/ZoneServer/World/WorldManager.cs index d4b808465..4ed921f33 100644 --- a/src/ZoneServer/World/WorldManager.cs +++ b/src/ZoneServer/World/WorldManager.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Diagnostics; using System.Linq; using System.Threading; using Melia.Shared.Network; @@ -56,6 +57,11 @@ public class WorldManager /// public GlobalVariables GlobalVariables { get; } = new(); + /// + /// Returns the world's running time for animation synchronization. + /// + public Stopwatch WorldTime { get; } = new Stopwatch(); + /// /// Returns a new handle to be used for a character or monster. /// @@ -135,6 +141,7 @@ private void InitUpdatables() /// internal void Start() { + this.WorldTime.Start(); this.Heartbeat.Start(); } diff --git a/system/scripts/zone/content/r1/npcs/dungeons/d_abbey_64_1.cs b/system/scripts/zone/content/r1/npcs/dungeons/d_abbey_64_1.cs new file mode 100644 index 000000000..4b0579a14 --- /dev/null +++ b/system/scripts/zone/content/r1/npcs/dungeons/d_abbey_64_1.cs @@ -0,0 +1,19 @@ +//--- Melia Script ---------------------------------------------------------- +// Novaha Assembly Hall +//--- Description ----------------------------------------------------------- +// NPCs found in and around Novaha Assembly Hall. +//--------------------------------------------------------------------------- + +using Melia.Shared.Game.Const; +using Melia.Zone.Scripting; +using static Melia.Zone.Scripting.Shortcuts; + +public class DAbbey641NpcScript : GeneralScript +{ + protected override void Load() + { + // Track NPCs + //--------------------------------------------------------------------------- + AddTrackNPC(153102, "", "d_abbey_64_1", -1017.423, 366.9117, -465.3019, 0, "d_abbey_64_1_elt2", 3, 5); + } +} diff --git a/system/scripts/zone/content/r1/npcs/dungeons/d_abbey_64_2.cs b/system/scripts/zone/content/r1/npcs/dungeons/d_abbey_64_2.cs new file mode 100644 index 000000000..ac93c82a6 --- /dev/null +++ b/system/scripts/zone/content/r1/npcs/dungeons/d_abbey_64_2.cs @@ -0,0 +1,19 @@ +//--- Melia Script ---------------------------------------------------------- +// Novaha Annex +//--- Description ----------------------------------------------------------- +// NPCs found in and around Novaha Annex. +//--------------------------------------------------------------------------- + +using Melia.Shared.Game.Const; +using Melia.Zone.Scripting; +using static Melia.Zone.Scripting.Shortcuts; + +public class DAbbey642NpcScript : GeneralScript +{ + protected override void Load() + { + // Track NPCs + //--------------------------------------------------------------------------- + AddTrackNPC(153113, "", "d_abbey_64_2", 275.6379, 348.6844, -439.101, 90, "d_abbey_64_2_elt"); + } +} diff --git a/system/scripts/zone/content/r1/npcs/dungeons/d_abbey_64_3.cs b/system/scripts/zone/content/r1/npcs/dungeons/d_abbey_64_3.cs new file mode 100644 index 000000000..93ce595e6 --- /dev/null +++ b/system/scripts/zone/content/r1/npcs/dungeons/d_abbey_64_3.cs @@ -0,0 +1,19 @@ +//--- Melia Script ---------------------------------------------------------- +// Novaha Institute +//--- Description ----------------------------------------------------------- +// NPCs found in and around Novaha Institute. +//--------------------------------------------------------------------------- + +using Melia.Shared.Game.Const; +using Melia.Zone.Scripting; +using static Melia.Zone.Scripting.Shortcuts; + +public class DAbbey643NpcScript : GeneralScript +{ + protected override void Load() + { + // Track NPCs + //--------------------------------------------------------------------------- + AddTrackNPC(153114, "", "d_abbey_64_3", -1155.956, 411.8994, -1264.598, 90, "d_abbey_64_3_elt"); + } +} diff --git a/system/scripts/zone/content/r1/npcs/dungeons/d_castle_67_1.cs b/system/scripts/zone/content/r1/npcs/dungeons/d_castle_67_1.cs new file mode 100644 index 000000000..f91ddb07b --- /dev/null +++ b/system/scripts/zone/content/r1/npcs/dungeons/d_castle_67_1.cs @@ -0,0 +1,19 @@ +//--- Melia Script ---------------------------------------------------------- +// Topes Fortress 1F +//--- Description ----------------------------------------------------------- +// NPCs found in and around Topes Fortress 1F. +//--------------------------------------------------------------------------- + +using Melia.Shared.Game.Const; +using Melia.Zone.Scripting; +using static Melia.Zone.Scripting.Shortcuts; + +public class DCastle671NpcScript : GeneralScript +{ + protected override void Load() + { + // Track NPCs + //--------------------------------------------------------------------------- + AddTrackNPC(153129, "", "d_castle_67_1", 183.9423, 277.7617, 330.8154, 0, "d_castle_67_1_elt"); + } +} diff --git a/system/scripts/zone/content/r1/npcs/dungeons/d_castle_67_2.cs b/system/scripts/zone/content/r1/npcs/dungeons/d_castle_67_2.cs new file mode 100644 index 000000000..26274394b --- /dev/null +++ b/system/scripts/zone/content/r1/npcs/dungeons/d_castle_67_2.cs @@ -0,0 +1,20 @@ +//--- Melia Script ---------------------------------------------------------- +// Topes Fortress 2F +//--- Description ----------------------------------------------------------- +// NPCs found in and around Topes Fortress 2F. +//--------------------------------------------------------------------------- + +using Melia.Shared.Game.Const; +using Melia.Zone.Scripting; +using static Melia.Zone.Scripting.Shortcuts; + +public class DCastle672NpcScript : GeneralScript +{ + protected override void Load() + { + // Track NPCs + //--------------------------------------------------------------------------- + AddTrackNPC(153130, "", "d_castle_67_2", -741.084, 95.06264, 125.5274, 0, "d_castle_67_2_elt"); + AddTrackNPC(153130, "", "d_castle_67_2", -865.5137, 93.15315, -926.0688, 0, "d_castle_67_2_elt2"); + } +} diff --git a/system/scripts/zone/content/r1/npcs/dungeons/d_cmine_66_1.cs b/system/scripts/zone/content/r1/npcs/dungeons/d_cmine_66_1.cs new file mode 100644 index 000000000..bf5d5397b --- /dev/null +++ b/system/scripts/zone/content/r1/npcs/dungeons/d_cmine_66_1.cs @@ -0,0 +1,19 @@ +//--- Melia Script ---------------------------------------------------------- +// Nevellet Quarry 1F +//--- Description ----------------------------------------------------------- +// NPCs found in and around Nevellet Quarry 1F. +//--------------------------------------------------------------------------- + +using Melia.Shared.Game.Const; +using Melia.Zone.Scripting; +using static Melia.Zone.Scripting.Shortcuts; + +public class DCmine661NpcScript : GeneralScript +{ + protected override void Load() + { + // Track NPCs + //--------------------------------------------------------------------------- + AddTrackNPC(155110, "", "d_cmine_66_1", 77.5127, 413.2733, -77.08086, 0, "d_cmine_66_1_elt"); + } +} diff --git a/system/scripts/zone/content/r1/npcs/dungeons/d_fantasylibrary_48_2.cs b/system/scripts/zone/content/r1/npcs/dungeons/d_fantasylibrary_48_2.cs new file mode 100644 index 000000000..27fe7c11a --- /dev/null +++ b/system/scripts/zone/content/r1/npcs/dungeons/d_fantasylibrary_48_2.cs @@ -0,0 +1,19 @@ +//--- Melia Script ---------------------------------------------------------- +// Sausis Room 10 +//--- Description ----------------------------------------------------------- +// NPCs found in and around Sausis Room 10. +//--------------------------------------------------------------------------- + +using Melia.Shared.Game.Const; +using Melia.Zone.Scripting; +using static Melia.Zone.Scripting.Shortcuts; + +public class DFantasylibrary482NpcScript : GeneralScript +{ + protected override void Load() + { + // Track NPCs + //--------------------------------------------------------------------------- + AddTrackNPC(157051, "", "d_fantasylibrary_48_2", 60.01674, 69.90582, -182.7349, 0, "d_fantasylibrary_48_2_elt"); + } +} diff --git a/system/scripts/zone/content/r1/npcs/dungeons/d_fantasylibrary_48_3.cs b/system/scripts/zone/content/r1/npcs/dungeons/d_fantasylibrary_48_3.cs new file mode 100644 index 000000000..94b8c2972 --- /dev/null +++ b/system/scripts/zone/content/r1/npcs/dungeons/d_fantasylibrary_48_3.cs @@ -0,0 +1,19 @@ +//--- Melia Script ---------------------------------------------------------- +// Valandis Room 2 +//--- Description ----------------------------------------------------------- +// NPCs found in and around Valandis Room 2. +//--------------------------------------------------------------------------- + +using Melia.Shared.Game.Const; +using Melia.Zone.Scripting; +using static Melia.Zone.Scripting.Shortcuts; + +public class DFantasylibrary483NpcScript : GeneralScript +{ + protected override void Load() + { + // Track NPCs + //--------------------------------------------------------------------------- + AddTrackNPC(157052, "", "d_fantasylibrary_48_3", -321.4122, 138.6892, 209.0464, 0, "d_fantasylibrary_48_3_elt"); + } +} diff --git a/system/scripts/zone/content/r1/npcs/dungeons/d_fantasylibrary_48_4.cs b/system/scripts/zone/content/r1/npcs/dungeons/d_fantasylibrary_48_4.cs new file mode 100644 index 000000000..d7af9bd69 --- /dev/null +++ b/system/scripts/zone/content/r1/npcs/dungeons/d_fantasylibrary_48_4.cs @@ -0,0 +1,19 @@ +//--- Melia Script ---------------------------------------------------------- +// Valandis Room 3 +//--- Description ----------------------------------------------------------- +// NPCs found in and around Valandis Room 3. +//--------------------------------------------------------------------------- + +using Melia.Shared.Game.Const; +using Melia.Zone.Scripting; +using static Melia.Zone.Scripting.Shortcuts; + +public class DFantasylibrary484NpcScript : GeneralScript +{ + protected override void Load() + { + // Track NPCs + //--------------------------------------------------------------------------- + AddTrackNPC(157053, "", "d_fantasylibrary_48_4", -1004.409, 6.635758, -709.1039, 0, "d_fantasylibrary_48_4_elt"); + } +} diff --git a/system/scripts/zone/content/r1/npcs/dungeons/d_firetower_69_1.cs b/system/scripts/zone/content/r1/npcs/dungeons/d_firetower_69_1.cs new file mode 100644 index 000000000..f0c1db367 --- /dev/null +++ b/system/scripts/zone/content/r1/npcs/dungeons/d_firetower_69_1.cs @@ -0,0 +1,22 @@ +//--- Melia Script ---------------------------------------------------------- +// Zima Suecourt +//--- Description ----------------------------------------------------------- +// NPCs found in and around Zima Suecourt. +//--------------------------------------------------------------------------- + +using Melia.Shared.Game.Const; +using Melia.Zone.Scripting; +using static Melia.Zone.Scripting.Shortcuts; + +public class DFiretower691NpcScript : GeneralScript +{ + protected override void Load() + { + // Track NPCs + //--------------------------------------------------------------------------- + AddTrackNPC(154081, "", "d_firetower_69_1", -1674.647, 0, -1202.516, 3.571429, "d_firetower_69_1_elt"); + AddTrackNPC(154081, "", "d_firetower_69_1", -1535.553, 0, -1129.915, 0, "d_firetower_69_1_elt"); + AddTrackNPC(154083, "", "d_firetower_69_1", -1689.049, 0, -965.8168, 0, "d_firetower_69_1_elt"); + AddTrackNPC(154083, "", "d_firetower_69_1", -1553.533, 0, -910.1417, 0, "d_firetower_69_1_elt"); + } +} diff --git a/system/scripts/zone/content/r1/npcs/dungeons/d_firetower_69_2.cs b/system/scripts/zone/content/r1/npcs/dungeons/d_firetower_69_2.cs new file mode 100644 index 000000000..1541eddf4 --- /dev/null +++ b/system/scripts/zone/content/r1/npcs/dungeons/d_firetower_69_2.cs @@ -0,0 +1,19 @@ +//--- Melia Script ---------------------------------------------------------- +// Martuis Storage Room +//--- Description ----------------------------------------------------------- +// NPCs found in and around Martuis Storage Room. +//--------------------------------------------------------------------------- + +using Melia.Shared.Game.Const; +using Melia.Zone.Scripting; +using static Melia.Zone.Scripting.Shortcuts; + +public class DFiretower692NpcScript : GeneralScript +{ + protected override void Load() + { + // Track NPCs + //--------------------------------------------------------------------------- + AddTrackNPC(157026, "", "d_firetower_69_2", -757.8323, 85.4979, 728.7798, 0, "d_firetower_69_2_elt"); + } +} diff --git a/system/scripts/zone/content/r1/npcs/dungeons/d_limestonecave_55_1.cs b/system/scripts/zone/content/r1/npcs/dungeons/d_limestonecave_55_1.cs new file mode 100644 index 000000000..fafec5962 --- /dev/null +++ b/system/scripts/zone/content/r1/npcs/dungeons/d_limestonecave_55_1.cs @@ -0,0 +1,19 @@ +//--- Melia Script ---------------------------------------------------------- +// Alembique Cave +//--- Description ----------------------------------------------------------- +// NPCs found in and around Alembique Cave. +//--------------------------------------------------------------------------- + +using Melia.Shared.Game.Const; +using Melia.Zone.Scripting; +using static Melia.Zone.Scripting.Shortcuts; + +public class DLimestonecave551NpcScript : GeneralScript +{ + protected override void Load() + { + // Track NPCs + //--------------------------------------------------------------------------- + AddTrackNPC(154099, "", "d_limestonecave_55_1", 1227.525, 151.018, 529.8058, 16, "d_limestonecave_55_1_elt"); + } +} diff --git a/system/scripts/zone/content/r1/npcs/dungeons/d_prison_62_1.cs b/system/scripts/zone/content/r1/npcs/dungeons/d_prison_62_1.cs new file mode 100644 index 000000000..c7ebcb869 --- /dev/null +++ b/system/scripts/zone/content/r1/npcs/dungeons/d_prison_62_1.cs @@ -0,0 +1,19 @@ +//--- Melia Script ---------------------------------------------------------- +// Ashaq Underground Prison 1F +//--- Description ----------------------------------------------------------- +// NPCs found in and around Ashaq Underground Prison 1F. +//--------------------------------------------------------------------------- + +using Melia.Shared.Game.Const; +using Melia.Zone.Scripting; +using static Melia.Zone.Scripting.Shortcuts; + +public class DPrison621NpcScript : GeneralScript +{ + protected override void Load() + { + // Track NPCs + //--------------------------------------------------------------------------- + AddTrackNPC(154059, "", "d_prison_62_1", -241.3938, 200.532, 501.1691, 0, "d_prison_62_1_elt"); + } +} diff --git a/system/scripts/zone/content/r1/npcs/dungeons/d_prison_62_2.cs b/system/scripts/zone/content/r1/npcs/dungeons/d_prison_62_2.cs new file mode 100644 index 000000000..361ea8179 --- /dev/null +++ b/system/scripts/zone/content/r1/npcs/dungeons/d_prison_62_2.cs @@ -0,0 +1,19 @@ +//--- Melia Script ---------------------------------------------------------- +// Ashaq Underground Prison 2F +//--- Description ----------------------------------------------------------- +// NPCs found in and around Ashaq Underground Prison 2F. +//--------------------------------------------------------------------------- + +using Melia.Shared.Game.Const; +using Melia.Zone.Scripting; +using static Melia.Zone.Scripting.Shortcuts; + +public class DPrison622NpcScript : GeneralScript +{ + protected override void Load() + { + // Track NPCs + //--------------------------------------------------------------------------- + AddTrackNPC(154058, "", "d_prison_62_2", 5.702232, -707.8696, -1245.999, 0, "d_prison_62_2_elt"); + } +} diff --git a/system/scripts/zone/content/r1/npcs/dungeons/d_prison_62_3.cs b/system/scripts/zone/content/r1/npcs/dungeons/d_prison_62_3.cs new file mode 100644 index 000000000..06022775c --- /dev/null +++ b/system/scripts/zone/content/r1/npcs/dungeons/d_prison_62_3.cs @@ -0,0 +1,19 @@ +//--- Melia Script ---------------------------------------------------------- +// Ashaq Underground Prison 3F +//--- Description ----------------------------------------------------------- +// NPCs found in and around Ashaq Underground Prison 3F. +//--------------------------------------------------------------------------- + +using Melia.Shared.Game.Const; +using Melia.Zone.Scripting; +using static Melia.Zone.Scripting.Shortcuts; + +public class DPrison623NpcScript : GeneralScript +{ + protected override void Load() + { + // Track NPCs + //--------------------------------------------------------------------------- + AddTrackNPC(154058, "", "d_prison_62_3", -324.5829, 1013.862, 329.7611, 0, "d_prison_62_3_elt"); + } +} diff --git a/system/scripts/zone/content/r1/npcs/dungeons/d_underfortress_68_2.cs b/system/scripts/zone/content/r1/npcs/dungeons/d_underfortress_68_2.cs new file mode 100644 index 000000000..c1775fb2a --- /dev/null +++ b/system/scripts/zone/content/r1/npcs/dungeons/d_underfortress_68_2.cs @@ -0,0 +1,21 @@ +//--- Melia Script ---------------------------------------------------------- +// Sicarius 2F +//--- Description ----------------------------------------------------------- +// NPCs found in and around Sicarius 2F. +//--------------------------------------------------------------------------- + +using Melia.Shared.Game.Const; +using Melia.Zone.Scripting; +using static Melia.Zone.Scripting.Shortcuts; + +public class DUnderfortress682NpcScript : GeneralScript +{ + protected override void Load() + { + // Track NPCs + //--------------------------------------------------------------------------- + AddTrackNPC(153135, "", "d_underfortress_68_2", 600.5497, 205.7321, 37.91431, 0, "d_underfortress_68_2_elt"); + AddTrackNPC(153135, "", "d_underfortress_68_2", 600.5497, 205.7321, 37.91431, 0, "d_underfortress_68_2_elt"); + AddTrackNPC(153135, "", "d_underfortress_68_2", 830.5077, 195.7104, -1507.612, 0, "d_underfortress_68_2_elt2"); + } +} diff --git a/system/scripts/zone/content/r1/npcs/fields/f_3cmlake_26_1.cs b/system/scripts/zone/content/r1/npcs/fields/f_3cmlake_26_1.cs new file mode 100644 index 000000000..22444cdce --- /dev/null +++ b/system/scripts/zone/content/r1/npcs/fields/f_3cmlake_26_1.cs @@ -0,0 +1,19 @@ +//--- Melia Script ---------------------------------------------------------- +// Lanko 26 Waters +//--- Description ----------------------------------------------------------- +// NPCs found in and around Lanko 26 Waters. +//--------------------------------------------------------------------------- + +using Melia.Shared.Game.Const; +using Melia.Zone.Scripting; +using static Melia.Zone.Scripting.Shortcuts; + +public class F3cmlake261NpcScript : GeneralScript +{ + protected override void Load() + { + // Track NPCs + //--------------------------------------------------------------------------- + AddTrackNPC(155160, "", "f_3cmlake_26_1", 948.2599, -117.9686, 444.7431, 0, "f_3cmlake_26_1_elt"); + } +} diff --git a/system/scripts/zone/content/r1/npcs/fields/f_bracken_42_1.cs b/system/scripts/zone/content/r1/npcs/fields/f_bracken_42_1.cs new file mode 100644 index 000000000..825f6362a --- /dev/null +++ b/system/scripts/zone/content/r1/npcs/fields/f_bracken_42_1.cs @@ -0,0 +1,20 @@ +//--- Melia Script ---------------------------------------------------------- +// Khonot Forest +//--- Description ----------------------------------------------------------- +// NPCs found in and around Khonot Forest. +//--------------------------------------------------------------------------- + +using Melia.Shared.Game.Const; +using Melia.Zone.Scripting; +using static Melia.Zone.Scripting.Shortcuts; + +public class FBracken421NpcScript : GeneralScript +{ + protected override void Load() + { + // Track NPCs + //--------------------------------------------------------------------------- + AddTrackNPC(157042, "", "f_bracken_42_1", 782.5125, 558.6927, -747.0397, 0, "f_bracken_42_1_elt"); + AddTrackNPC(157043, "", "f_bracken_42_1", 1067.31, 557.06, -425.56, 0, "f_bracken_42_1_elt2"); + } +} diff --git a/system/scripts/zone/content/r1/npcs/fields/f_bracken_43_2.cs b/system/scripts/zone/content/r1/npcs/fields/f_bracken_43_2.cs new file mode 100644 index 000000000..f98cd3efb --- /dev/null +++ b/system/scripts/zone/content/r1/npcs/fields/f_bracken_43_2.cs @@ -0,0 +1,20 @@ +//--- Melia Script ---------------------------------------------------------- +// Phamer Forest +//--- Description ----------------------------------------------------------- +// NPCs found in and around Phamer Forest. +//--------------------------------------------------------------------------- + +using Melia.Shared.Game.Const; +using Melia.Zone.Scripting; +using static Melia.Zone.Scripting.Shortcuts; + +public class FBracken432NpcScript : GeneralScript +{ + protected override void Load() + { + // Track NPCs + //--------------------------------------------------------------------------- + AddTrackNPC(153179, "", "f_bracken_43_2", 1369.781, 116.1511, 470.741, 0, "f_bracken_43_2_elt"); + AddTrackNPC(153180, "", "f_bracken_43_2", 552.7917, 35.09259, -574.3962, 354, "f_bracken_43_2_elt2"); + } +} diff --git a/system/scripts/zone/content/r1/npcs/fields/f_bracken_43_4.cs b/system/scripts/zone/content/r1/npcs/fields/f_bracken_43_4.cs new file mode 100644 index 000000000..83796b8a0 --- /dev/null +++ b/system/scripts/zone/content/r1/npcs/fields/f_bracken_43_4.cs @@ -0,0 +1,19 @@ +//--- Melia Script ---------------------------------------------------------- +// Mollogheo Forest +//--- Description ----------------------------------------------------------- +// NPCs found in and around Mollogheo Forest. +//--------------------------------------------------------------------------- + +using Melia.Shared.Game.Const; +using Melia.Zone.Scripting; +using static Melia.Zone.Scripting.Shortcuts; + +public class FBracken434NpcScript : GeneralScript +{ + protected override void Load() + { + // Track NPCs + //--------------------------------------------------------------------------- + AddTrackNPC(153181, "", "f_bracken_43_4", 665.4066, 59.12576, 327.8538, 0, "f_bracken_43_4_elt"); + } +} diff --git a/system/scripts/zone/content/r1/npcs/fields/f_bracken_63_1.cs b/system/scripts/zone/content/r1/npcs/fields/f_bracken_63_1.cs new file mode 100644 index 000000000..ae59e56d7 --- /dev/null +++ b/system/scripts/zone/content/r1/npcs/fields/f_bracken_63_1.cs @@ -0,0 +1,19 @@ +//--- Melia Script ---------------------------------------------------------- +// Kateen Forest +//--- Description ----------------------------------------------------------- +// NPCs found in and around Kateen Forest. +//--------------------------------------------------------------------------- + +using Melia.Shared.Game.Const; +using Melia.Zone.Scripting; +using static Melia.Zone.Scripting.Shortcuts; + +public class FBracken631NpcScript : GeneralScript +{ + protected override void Load() + { + // Track NPCs + //--------------------------------------------------------------------------- + AddTrackNPC(153107, "", "f_bracken_63_1", -268.1401, 544.2999, 995.2676, 21, "f_bracken_63_1_elt", 3); + } +} diff --git a/system/scripts/zone/content/r1/npcs/fields/f_bracken_63_2.cs b/system/scripts/zone/content/r1/npcs/fields/f_bracken_63_2.cs new file mode 100644 index 000000000..d1a756722 --- /dev/null +++ b/system/scripts/zone/content/r1/npcs/fields/f_bracken_63_2.cs @@ -0,0 +1,19 @@ +//--- Melia Script ---------------------------------------------------------- +// Knidos Jungle +//--- Description ----------------------------------------------------------- +// NPCs found in and around Knidos Jungle. +//--------------------------------------------------------------------------- + +using Melia.Shared.Game.Const; +using Melia.Zone.Scripting; +using static Melia.Zone.Scripting.Shortcuts; + +public class FBracken632NpcScript : GeneralScript +{ + protected override void Load() + { + // Track NPCs + //--------------------------------------------------------------------------- + AddTrackNPC(153112, "", "f_bracken_63_2", -47.54993, 253.4295, -541.7952, 0, "f_bracken_63_2_elt"); + } +} diff --git a/system/scripts/zone/content/r1/npcs/fields/f_bracken_63_3.cs b/system/scripts/zone/content/r1/npcs/fields/f_bracken_63_3.cs new file mode 100644 index 000000000..9c8d3b171 --- /dev/null +++ b/system/scripts/zone/content/r1/npcs/fields/f_bracken_63_3.cs @@ -0,0 +1,19 @@ +//--- Melia Script ---------------------------------------------------------- +// Dadan Jungle +//--- Description ----------------------------------------------------------- +// NPCs found in and around Dadan Jungle. +//--------------------------------------------------------------------------- + +using Melia.Shared.Game.Const; +using Melia.Zone.Scripting; +using static Melia.Zone.Scripting.Shortcuts; + +public class FBracken633NpcScript : GeneralScript +{ + protected override void Load() + { + // Track NPCs + //--------------------------------------------------------------------------- + AddTrackNPC(153095, "", "f_bracken_63_3", -252.8264, 189.2868, -89.98244, 111, "f_bracken_63_3_elt", 2, 1); + } +} diff --git a/system/scripts/zone/content/r1/npcs/fields/f_castle_20_1.cs b/system/scripts/zone/content/r1/npcs/fields/f_castle_20_1.cs new file mode 100644 index 000000000..b557ca2a0 --- /dev/null +++ b/system/scripts/zone/content/r1/npcs/fields/f_castle_20_1.cs @@ -0,0 +1,20 @@ +//--- Melia Script ---------------------------------------------------------- +// Outer Wall District 9 +//--- Description ----------------------------------------------------------- +// NPCs found in and around Outer Wall District 9. +//--------------------------------------------------------------------------- + +using Melia.Shared.Game.Const; +using Melia.Zone.Scripting; +using static Melia.Zone.Scripting.Shortcuts; + +public class FCastle201NpcScript : GeneralScript +{ + protected override void Load() + { + // Track NPCs + //--------------------------------------------------------------------------- + AddTrackNPC(157027, "", "f_castle_20_1", 405.7464, 150.6457, -274.809, 0, "f_castle_20_1_elt"); + AddTrackNPC(157028, "", "f_castle_20_1", -576.8862, 237.7089, -320.7311, 0, "f_castle_20_1_elt2"); + } +} diff --git a/system/scripts/zone/content/r1/npcs/fields/f_castle_20_2.cs b/system/scripts/zone/content/r1/npcs/fields/f_castle_20_2.cs new file mode 100644 index 000000000..5690d577e --- /dev/null +++ b/system/scripts/zone/content/r1/npcs/fields/f_castle_20_2.cs @@ -0,0 +1,20 @@ +//--- Melia Script ---------------------------------------------------------- +// Inner Wall District 9 +//--- Description ----------------------------------------------------------- +// NPCs found in and around Inner Wall District 9. +//--------------------------------------------------------------------------- + +using Melia.Shared.Game.Const; +using Melia.Zone.Scripting; +using static Melia.Zone.Scripting.Shortcuts; + +public class FCastle202NpcScript : GeneralScript +{ + protected override void Load() + { + // Track NPCs + //--------------------------------------------------------------------------- + AddTrackNPC(157029, "", "f_castle_20_2", -1006.002, 1.829224, -609.7711, 0, "f_castle_20_2_elt"); + AddTrackNPC(157029, "", "f_castle_20_2", -894.3446, -120.3677, 549.2271, 0, "f_castle_20_2_elt2"); + } +} diff --git a/system/scripts/zone/content/r1/npcs/fields/f_castle_20_3.cs b/system/scripts/zone/content/r1/npcs/fields/f_castle_20_3.cs new file mode 100644 index 000000000..c47afdf81 --- /dev/null +++ b/system/scripts/zone/content/r1/npcs/fields/f_castle_20_3.cs @@ -0,0 +1,19 @@ +//--- Melia Script ---------------------------------------------------------- +// Inner Wall District 8 +//--- Description ----------------------------------------------------------- +// NPCs found in and around Inner Wall District 8. +//--------------------------------------------------------------------------- + +using Melia.Shared.Game.Const; +using Melia.Zone.Scripting; +using static Melia.Zone.Scripting.Shortcuts; + +public class FCastle203NpcScript : GeneralScript +{ + protected override void Load() + { + // Track NPCs + //--------------------------------------------------------------------------- + AddTrackNPC(157030, "", "f_castle_20_3", 467.1729, 139.2464, -586.9828, 0, "f_castle_20_3_elt"); + } +} diff --git a/system/scripts/zone/content/r1/npcs/fields/f_castle_20_4.cs b/system/scripts/zone/content/r1/npcs/fields/f_castle_20_4.cs new file mode 100644 index 000000000..92912c429 --- /dev/null +++ b/system/scripts/zone/content/r1/npcs/fields/f_castle_20_4.cs @@ -0,0 +1,19 @@ +//--- Melia Script ---------------------------------------------------------- +// City Wall District 8 +//--- Description ----------------------------------------------------------- +// NPCs found in and around City Wall District 8. +//--------------------------------------------------------------------------- + +using Melia.Shared.Game.Const; +using Melia.Zone.Scripting; +using static Melia.Zone.Scripting.Shortcuts; + +public class FCastle204NpcScript : GeneralScript +{ + protected override void Load() + { + // Track NPCs + //--------------------------------------------------------------------------- + AddTrackNPC(157025, "", "f_castle_20_4", 1157.179, 126.4701, 271.2875, 0, "d_castle_20_4_elt"); + } +} diff --git a/system/scripts/zone/content/r1/npcs/fields/f_castle_65_1.cs b/system/scripts/zone/content/r1/npcs/fields/f_castle_65_1.cs new file mode 100644 index 000000000..37256f73a --- /dev/null +++ b/system/scripts/zone/content/r1/npcs/fields/f_castle_65_1.cs @@ -0,0 +1,19 @@ +//--- Melia Script ---------------------------------------------------------- +// Delmore Hamlet +//--- Description ----------------------------------------------------------- +// NPCs found in and around Delmore Hamlet. +//--------------------------------------------------------------------------- + +using Melia.Shared.Game.Const; +using Melia.Zone.Scripting; +using static Melia.Zone.Scripting.Shortcuts; + +public class FCastle651NpcScript : GeneralScript +{ + protected override void Load() + { + // Track NPCs + //--------------------------------------------------------------------------- + AddTrackNPC(155112, "", "f_castle_65_1", -728.6979, -8.345245, 768.4816, 0, "f_castle_65_1_elt"); + } +} diff --git a/system/scripts/zone/content/r1/npcs/fields/f_castle_65_2.cs b/system/scripts/zone/content/r1/npcs/fields/f_castle_65_2.cs new file mode 100644 index 000000000..2a4c39c8e --- /dev/null +++ b/system/scripts/zone/content/r1/npcs/fields/f_castle_65_2.cs @@ -0,0 +1,19 @@ +//--- Melia Script ---------------------------------------------------------- +// Delmore Manor +//--- Description ----------------------------------------------------------- +// NPCs found in and around Delmore Manor. +//--------------------------------------------------------------------------- + +using Melia.Shared.Game.Const; +using Melia.Zone.Scripting; +using static Melia.Zone.Scripting.Shortcuts; + +public class FCastle652NpcScript : GeneralScript +{ + protected override void Load() + { + // Track NPCs + //--------------------------------------------------------------------------- + AddTrackNPC(155108, "", "f_castle_65_2", -849.7505, 220.4114, 516.4036, 0, "f_castle_65_2_elt"); + } +} diff --git a/system/scripts/zone/content/r1/npcs/fields/f_castle_65_3.cs b/system/scripts/zone/content/r1/npcs/fields/f_castle_65_3.cs new file mode 100644 index 000000000..860e1d572 --- /dev/null +++ b/system/scripts/zone/content/r1/npcs/fields/f_castle_65_3.cs @@ -0,0 +1,19 @@ +//--- Melia Script ---------------------------------------------------------- +// Delmore Outskirts +//--- Description ----------------------------------------------------------- +// NPCs found in and around Delmore Outskirts. +//--------------------------------------------------------------------------- + +using Melia.Shared.Game.Const; +using Melia.Zone.Scripting; +using static Melia.Zone.Scripting.Shortcuts; + +public class FCastle653NpcScript : GeneralScript +{ + protected override void Load() + { + // Track NPCs + //--------------------------------------------------------------------------- + AddTrackNPC(155109, "", "f_castle_65_3", 123.7928, 96.6724, 200.1542, 0, "f_castle_65_3_elt"); + } +} diff --git a/system/scripts/zone/content/r1/npcs/fields/f_coral_32_2.cs b/system/scripts/zone/content/r1/npcs/fields/f_coral_32_2.cs new file mode 100644 index 000000000..38484eda7 --- /dev/null +++ b/system/scripts/zone/content/r1/npcs/fields/f_coral_32_2.cs @@ -0,0 +1,19 @@ +//--- Melia Script ---------------------------------------------------------- +// Igti Coast +//--- Description ----------------------------------------------------------- +// NPCs found in and around Igti Coast. +//--------------------------------------------------------------------------- + +using Melia.Shared.Game.Const; +using Melia.Zone.Scripting; +using static Melia.Zone.Scripting.Shortcuts; + +public class FCoral322NpcScript : GeneralScript +{ + protected override void Load() + { + // Track NPCs + //--------------------------------------------------------------------------- + AddTrackNPC(157003, "", "f_coral_32_2", -641.0241, -36.33413, 1405.18, 0, "f_coral_32_2_elt"); + } +} diff --git a/system/scripts/zone/content/r1/npcs/fields/f_coral_35_2.cs b/system/scripts/zone/content/r1/npcs/fields/f_coral_35_2.cs new file mode 100644 index 000000000..a7936c41d --- /dev/null +++ b/system/scripts/zone/content/r1/npcs/fields/f_coral_35_2.cs @@ -0,0 +1,19 @@ +//--- Melia Script ---------------------------------------------------------- +// Vera Coast +//--- Description ----------------------------------------------------------- +// NPCs found in and around Vera Coast. +//--------------------------------------------------------------------------- + +using Melia.Shared.Game.Const; +using Melia.Zone.Scripting; +using static Melia.Zone.Scripting.Shortcuts; + +public class FCoral352NpcScript : GeneralScript +{ + protected override void Load() + { + // Track NPCs + //--------------------------------------------------------------------------- + AddTrackNPC(156034, "", "f_coral_35_2", 401.4194, 224.4277, 717.4001, 0, "f_coral_35_2_elt"); + } +} diff --git a/system/scripts/zone/content/r1/npcs/fields/f_coral_44_3.cs b/system/scripts/zone/content/r1/npcs/fields/f_coral_44_3.cs new file mode 100644 index 000000000..916e64115 --- /dev/null +++ b/system/scripts/zone/content/r1/npcs/fields/f_coral_44_3.cs @@ -0,0 +1,19 @@ +//--- Melia Script ---------------------------------------------------------- +// Epherotao Coast +//--- Description ----------------------------------------------------------- +// NPCs found in and around Epherotao Coast. +//--------------------------------------------------------------------------- + +using Melia.Shared.Game.Const; +using Melia.Zone.Scripting; +using static Melia.Zone.Scripting.Shortcuts; + +public class FCoral443NpcScript : GeneralScript +{ + protected override void Load() + { + // Track NPCs + //--------------------------------------------------------------------------- + AddTrackNPC(157050, "", "f_coral_44_3", 464.66, 92.97, 518.12, 0, "f_coral_44_3_elt"); + } +} diff --git a/system/scripts/zone/content/r1/npcs/fields/f_dcapital_103.cs b/system/scripts/zone/content/r1/npcs/fields/f_dcapital_103.cs new file mode 100644 index 000000000..73d1bb0c0 --- /dev/null +++ b/system/scripts/zone/content/r1/npcs/fields/f_dcapital_103.cs @@ -0,0 +1,20 @@ +//--- Melia Script ---------------------------------------------------------- +// Taniel I Commemorative Orb +//--- Description ----------------------------------------------------------- +// NPCs found in and around Taniel I Commemorative Orb. +//--------------------------------------------------------------------------- + +using Melia.Shared.Game.Const; +using Melia.Zone.Scripting; +using static Melia.Zone.Scripting.Shortcuts; + +public class FDcapital103NpcScript : GeneralScript +{ + protected override void Load() + { + // Track NPCs + //--------------------------------------------------------------------------- + AddTrackNPC(157032, "", "f_dcapital_103", 1260.842, 214.2436, -324.7393, 0, "f_dcapital_103_elt"); + AddTrackNPC(157033, "", "f_dcapital_103", -401.9065, 174.6531, -97.95161, 0, "f_dcapital_103_elt2"); + } +} diff --git a/system/scripts/zone/content/r1/npcs/fields/f_dcapital_105.cs b/system/scripts/zone/content/r1/npcs/fields/f_dcapital_105.cs new file mode 100644 index 000000000..5b89980cc --- /dev/null +++ b/system/scripts/zone/content/r1/npcs/fields/f_dcapital_105.cs @@ -0,0 +1,19 @@ +//--- Melia Script ---------------------------------------------------------- +// Baltinel Memorial +//--- Description ----------------------------------------------------------- +// NPCs found in and around Baltinel Memorial. +//--------------------------------------------------------------------------- + +using Melia.Shared.Game.Const; +using Melia.Zone.Scripting; +using static Melia.Zone.Scripting.Shortcuts; + +public class FDcapital105NpcScript : GeneralScript +{ + protected override void Load() + { + // Track NPCs + //--------------------------------------------------------------------------- + AddTrackNPC(153231, "", "f_dcapital_105", -264.1042, 111.0862, -237.836, 0, "f_dcapital_105_elt"); + } +} diff --git a/system/scripts/zone/content/r1/npcs/fields/f_dcapital_106.cs b/system/scripts/zone/content/r1/npcs/fields/f_dcapital_106.cs new file mode 100644 index 000000000..a859ba800 --- /dev/null +++ b/system/scripts/zone/content/r1/npcs/fields/f_dcapital_106.cs @@ -0,0 +1,19 @@ +//--- Melia Script ---------------------------------------------------------- +// Gliehel Memorial +//--- Description ----------------------------------------------------------- +// NPCs found in and around Gliehel Memorial. +//--------------------------------------------------------------------------- + +using Melia.Shared.Game.Const; +using Melia.Zone.Scripting; +using static Melia.Zone.Scripting.Shortcuts; + +public class FDcapital106NpcScript : GeneralScript +{ + protected override void Load() + { + // Track NPCs + //--------------------------------------------------------------------------- + AddTrackNPC(153230, "", "f_dcapital_106", 392.5825, 71.17463, 988.9101, 0, "f_dcapital_106_elt"); + } +} diff --git a/system/scripts/zone/content/r1/npcs/fields/f_dcapital_20_5.cs b/system/scripts/zone/content/r1/npcs/fields/f_dcapital_20_5.cs new file mode 100644 index 000000000..110253844 --- /dev/null +++ b/system/scripts/zone/content/r1/npcs/fields/f_dcapital_20_5.cs @@ -0,0 +1,19 @@ +//--- Melia Script ---------------------------------------------------------- +// Jeromel Park +//--- Description ----------------------------------------------------------- +// NPCs found in and around Jeromel Park. +//--------------------------------------------------------------------------- + +using Melia.Shared.Game.Const; +using Melia.Zone.Scripting; +using static Melia.Zone.Scripting.Shortcuts; + +public class FDcapital205NpcScript : GeneralScript +{ + protected override void Load() + { + // Track NPCs + //--------------------------------------------------------------------------- + AddTrackNPC(157019, "", "f_dcapital_20_5", 929.8597, 294.7133, -722.7009, 0, "f_dcapital_20_5_elt"); + } +} diff --git a/system/scripts/zone/content/r1/npcs/fields/f_dcapital_20_6.cs b/system/scripts/zone/content/r1/npcs/fields/f_dcapital_20_6.cs new file mode 100644 index 000000000..226f0f6ff --- /dev/null +++ b/system/scripts/zone/content/r1/npcs/fields/f_dcapital_20_6.cs @@ -0,0 +1,19 @@ +//--- Melia Script ---------------------------------------------------------- +// Jonael Commemorative Orb +//--- Description ----------------------------------------------------------- +// NPCs found in and around Jonael Commemorative Orb. +//--------------------------------------------------------------------------- + +using Melia.Shared.Game.Const; +using Melia.Zone.Scripting; +using static Melia.Zone.Scripting.Shortcuts; + +public class FDcapital206NpcScript : GeneralScript +{ + protected override void Load() + { + // Track NPCs + //--------------------------------------------------------------------------- + AddTrackNPC(157031, "", "f_dcapital_20_6", -755.0917, 283.1046, 1777.638, 0, "f_dcapital_20_6_elt"); + } +} diff --git a/system/scripts/zone/content/r1/npcs/fields/f_flash_63.cs b/system/scripts/zone/content/r1/npcs/fields/f_flash_63.cs new file mode 100644 index 000000000..cff61d661 --- /dev/null +++ b/system/scripts/zone/content/r1/npcs/fields/f_flash_63.cs @@ -0,0 +1,19 @@ +//--- Melia Script ---------------------------------------------------------- +// Downtown +//--- Description ----------------------------------------------------------- +// NPCs found in and around Downtown. +//--------------------------------------------------------------------------- + +using Melia.Shared.Game.Const; +using Melia.Zone.Scripting; +using static Melia.Zone.Scripting.Shortcuts; + +public class FFlash63NpcScript : GeneralScript +{ + protected override void Load() + { + // Track NPCs + //--------------------------------------------------------------------------- + AddTrackNPC(147427, "", "f_flash_63", 897.8192, 233.7511, 654.0224, 1, "flash_elevator"); + } +} diff --git a/system/scripts/zone/content/r1/npcs/fields/f_gele_57_1.cs b/system/scripts/zone/content/r1/npcs/fields/f_gele_57_1.cs new file mode 100644 index 000000000..e25ddbecd --- /dev/null +++ b/system/scripts/zone/content/r1/npcs/fields/f_gele_57_1.cs @@ -0,0 +1,19 @@ +//--- Melia Script ---------------------------------------------------------- +// Srautas Gorge +//--- Description ----------------------------------------------------------- +// NPCs found in and around Srautas Gorge. +//--------------------------------------------------------------------------- + +using Melia.Shared.Game.Const; +using Melia.Zone.Scripting; +using static Melia.Zone.Scripting.Shortcuts; + +public class FGele571NpcScript : GeneralScript +{ + protected override void Load() + { + // Track NPCs + //--------------------------------------------------------------------------- + AddTrackNPC(153006, "", "f_gele_57_1", -305.9306, 168.8233, -402.949, 0, "f_gele_57_1_elt"); + } +} diff --git a/system/scripts/zone/content/r1/npcs/fields/f_gele_57_2.cs b/system/scripts/zone/content/r1/npcs/fields/f_gele_57_2.cs new file mode 100644 index 000000000..6c37e1caa --- /dev/null +++ b/system/scripts/zone/content/r1/npcs/fields/f_gele_57_2.cs @@ -0,0 +1,19 @@ +//--- Melia Script ---------------------------------------------------------- +// Gele Plateau +//--- Description ----------------------------------------------------------- +// NPCs found in and around Gele Plateau. +//--------------------------------------------------------------------------- + +using Melia.Shared.Game.Const; +using Melia.Zone.Scripting; +using static Melia.Zone.Scripting.Shortcuts; + +public class FGele572NpcScript : GeneralScript +{ + protected override void Load() + { + // Track NPCs + //--------------------------------------------------------------------------- + AddTrackNPC(153007, "", "f_gele_57_2", -85.66, 381.08, 841.97, 0, "f_gele57_2_cablecar"); + } +} diff --git a/system/scripts/zone/content/r1/npcs/fields/f_huevillage_58_1.cs b/system/scripts/zone/content/r1/npcs/fields/f_huevillage_58_1.cs new file mode 100644 index 000000000..a57be9d0a --- /dev/null +++ b/system/scripts/zone/content/r1/npcs/fields/f_huevillage_58_1.cs @@ -0,0 +1,19 @@ +//--- Melia Script ---------------------------------------------------------- +// Veja Ravine +//--- Description ----------------------------------------------------------- +// NPCs found in and around Veja Ravine. +//--------------------------------------------------------------------------- + +using Melia.Shared.Game.Const; +using Melia.Zone.Scripting; +using static Melia.Zone.Scripting.Shortcuts; + +public class FHuevillage581NpcScript : GeneralScript +{ + protected override void Load() + { + // Track NPCs + //--------------------------------------------------------------------------- + AddTrackNPC(153008, "", "f_huevillage_58_1", 638.2, 129.74, 468.58, 0, "f_huevillage58_1_cablecar"); + } +} diff --git a/system/scripts/zone/content/r1/npcs/fields/f_maple_25_1.cs b/system/scripts/zone/content/r1/npcs/fields/f_maple_25_1.cs new file mode 100644 index 000000000..c2db5b4d5 --- /dev/null +++ b/system/scripts/zone/content/r1/npcs/fields/f_maple_25_1.cs @@ -0,0 +1,19 @@ +//--- Melia Script ---------------------------------------------------------- +// Nheto Forest +//--- Description ----------------------------------------------------------- +// NPCs found in and around Nheto Forest. +//--------------------------------------------------------------------------- + +using Melia.Shared.Game.Const; +using Melia.Zone.Scripting; +using static Melia.Zone.Scripting.Shortcuts; + +public class FMaple251NpcScript : GeneralScript +{ + protected override void Load() + { + // Track NPCs + //--------------------------------------------------------------------------- + AddTrackNPC(157034, "", "f_maple_25_1", -953.6499, -38.68602, 177.3624, 342, "f_maple_25_1_elt"); + } +} diff --git a/system/scripts/zone/content/r1/npcs/fields/f_maple_25_2.cs b/system/scripts/zone/content/r1/npcs/fields/f_maple_25_2.cs new file mode 100644 index 000000000..393358299 --- /dev/null +++ b/system/scripts/zone/content/r1/npcs/fields/f_maple_25_2.cs @@ -0,0 +1,19 @@ +//--- Melia Script ---------------------------------------------------------- +// Tiltas Forest +//--- Description ----------------------------------------------------------- +// NPCs found in and around Tiltas Forest. +//--------------------------------------------------------------------------- + +using Melia.Shared.Game.Const; +using Melia.Zone.Scripting; +using static Melia.Zone.Scripting.Shortcuts; + +public class FMaple252NpcScript : GeneralScript +{ + protected override void Load() + { + // Track NPCs + //--------------------------------------------------------------------------- + AddTrackNPC(157035, "", "f_maple_25_2", -78.02134, 34.58647, 382.6509, 320, "f_maple_25_2_elt", 0); + } +} diff --git a/system/scripts/zone/content/r1/npcs/fields/f_maple_25_3.cs b/system/scripts/zone/content/r1/npcs/fields/f_maple_25_3.cs new file mode 100644 index 000000000..4d1d5261e --- /dev/null +++ b/system/scripts/zone/content/r1/npcs/fields/f_maple_25_3.cs @@ -0,0 +1,19 @@ +//--- Melia Script ---------------------------------------------------------- +// Lhadar Forest +//--- Description ----------------------------------------------------------- +// NPCs found in and around Lhadar Forest. +//--------------------------------------------------------------------------- + +using Melia.Shared.Game.Const; +using Melia.Zone.Scripting; +using static Melia.Zone.Scripting.Shortcuts; + +public class FMaple253NpcScript : GeneralScript +{ + protected override void Load() + { + // Track NPCs + //--------------------------------------------------------------------------- + AddTrackNPC(157036, "", "f_maple_25_3", -917.34, 36.80652, -444.9715, 0, "f_maple_25_3_elt"); + } +} diff --git a/system/scripts/zone/content/r1/npcs/fields/f_nicopolis_81_2.cs b/system/scripts/zone/content/r1/npcs/fields/f_nicopolis_81_2.cs new file mode 100644 index 000000000..cbdbb0b0d --- /dev/null +++ b/system/scripts/zone/content/r1/npcs/fields/f_nicopolis_81_2.cs @@ -0,0 +1,19 @@ +//--- Melia Script ---------------------------------------------------------- +// Feline Post Town +//--- Description ----------------------------------------------------------- +// NPCs found in and around Feline Post Town. +//--------------------------------------------------------------------------- + +using Melia.Shared.Game.Const; +using Melia.Zone.Scripting; +using static Melia.Zone.Scripting.Shortcuts; + +public class FNicopolis812NpcScript : GeneralScript +{ + protected override void Load() + { + // Track NPCs + //--------------------------------------------------------------------------- + AddTrackNPC(153232, "", "f_nicopolis_81_2", 60.4, 2.22, -1645, 0, "f_nicopolis_81_2_elt"); + } +} diff --git a/system/scripts/zone/content/r1/npcs/fields/f_nicopolis_81_3.cs b/system/scripts/zone/content/r1/npcs/fields/f_nicopolis_81_3.cs new file mode 100644 index 000000000..46b608a45 --- /dev/null +++ b/system/scripts/zone/content/r1/npcs/fields/f_nicopolis_81_3.cs @@ -0,0 +1,19 @@ +//--- Melia Script ---------------------------------------------------------- +// Spell Tome Town +//--- Description ----------------------------------------------------------- +// NPCs found in and around Spell Tome Town. +//--------------------------------------------------------------------------- + +using Melia.Shared.Game.Const; +using Melia.Zone.Scripting; +using static Melia.Zone.Scripting.Shortcuts; + +public class FNicopolis813NpcScript : GeneralScript +{ + protected override void Load() + { + // Track NPCs + //--------------------------------------------------------------------------- + AddTrackNPC(153233, "", "f_nicopolis_81_3", -372.14, -117.52, -888.32, 0, "f_nicopolis_81_3_elt"); + } +} diff --git a/system/scripts/zone/content/r1/npcs/fields/f_orchard_32_4.cs b/system/scripts/zone/content/r1/npcs/fields/f_orchard_32_4.cs new file mode 100644 index 000000000..547f239c1 --- /dev/null +++ b/system/scripts/zone/content/r1/npcs/fields/f_orchard_32_4.cs @@ -0,0 +1,20 @@ +//--- Melia Script ---------------------------------------------------------- +// Seir Rainforest +//--- Description ----------------------------------------------------------- +// NPCs found in and around Seir Rainforest. +//--------------------------------------------------------------------------- + +using Melia.Shared.Game.Const; +using Melia.Zone.Scripting; +using static Melia.Zone.Scripting.Shortcuts; + +public class FOrchard324NpcScript : GeneralScript +{ + protected override void Load() + { + // Track NPCs + //--------------------------------------------------------------------------- + AddTrackNPC(156037, "", "f_orchard_32_4", 1402.254, 135.6041, 557.9661, 0, "f_orchard_32_4_wheel"); + AddTrackNPC(156038, "", "f_orchard_32_4", -333.8946, 19.81506, 796.1085, 90, "f_orchard_32_4_elt"); + } +} diff --git a/system/scripts/zone/content/r1/npcs/fields/f_orchard_34_2.cs b/system/scripts/zone/content/r1/npcs/fields/f_orchard_34_2.cs new file mode 100644 index 000000000..65e585cbd --- /dev/null +++ b/system/scripts/zone/content/r1/npcs/fields/f_orchard_34_2.cs @@ -0,0 +1,19 @@ +//--- Melia Script ---------------------------------------------------------- +// Ruklys Hall +//--- Description ----------------------------------------------------------- +// NPCs found in and around Ruklys Hall. +//--------------------------------------------------------------------------- + +using Melia.Shared.Game.Const; +using Melia.Zone.Scripting; +using static Melia.Zone.Scripting.Shortcuts; + +public class FOrchard342NpcScript : GeneralScript +{ + protected override void Load() + { + // Track NPCs + //--------------------------------------------------------------------------- + AddTrackNPC(155059, "", "f_orchard_34_2", -1761.933, -357.2179, 384.1256, 90, "f_orchard_34_2_elevator", 3); + } +} diff --git a/system/scripts/zone/content/r1/npcs/fields/f_rokas_27.cs b/system/scripts/zone/content/r1/npcs/fields/f_rokas_27.cs new file mode 100644 index 000000000..8ff8c36fe --- /dev/null +++ b/system/scripts/zone/content/r1/npcs/fields/f_rokas_27.cs @@ -0,0 +1,19 @@ +//--- Melia Script ---------------------------------------------------------- +// Akmens Ridge +//--- Description ----------------------------------------------------------- +// NPCs found in and around Akmens Ridge. +//--------------------------------------------------------------------------- + +using Melia.Shared.Game.Const; +using Melia.Zone.Scripting; +using static Melia.Zone.Scripting.Shortcuts; + +public class FRokas27NpcScript : GeneralScript +{ + protected override void Load() + { + // Track NPCs + //--------------------------------------------------------------------------- + AddTrackNPC(153009, "", "f_rokas_27", 393.83, 1297.32, -1456.52, 250, "f_rokas27_cablecar"); + } +} diff --git a/system/scripts/zone/content/r1/npcs/fields/f_whitetrees_22_2.cs b/system/scripts/zone/content/r1/npcs/fields/f_whitetrees_22_2.cs new file mode 100644 index 000000000..a2f9dd60c --- /dev/null +++ b/system/scripts/zone/content/r1/npcs/fields/f_whitetrees_22_2.cs @@ -0,0 +1,19 @@ +//--- Melia Script ---------------------------------------------------------- +// Tekel Shelter +//--- Description ----------------------------------------------------------- +// NPCs found in and around Tekel Shelter. +//--------------------------------------------------------------------------- + +using Melia.Shared.Game.Const; +using Melia.Zone.Scripting; +using static Melia.Zone.Scripting.Shortcuts; + +public class FWhitetrees222NpcScript : GeneralScript +{ + protected override void Load() + { + // Track NPCs + //--------------------------------------------------------------------------- + AddTrackNPC(153189, "", "f_whitetrees_22_2", 990.0172, 125.708, -499.8661, 0, "f_whitetrees_22_2_elt"); + } +} diff --git a/system/scripts/zone/content/r1/npcs/fields/f_whitetrees_23_1.cs b/system/scripts/zone/content/r1/npcs/fields/f_whitetrees_23_1.cs new file mode 100644 index 000000000..13cfb8ce1 --- /dev/null +++ b/system/scripts/zone/content/r1/npcs/fields/f_whitetrees_23_1.cs @@ -0,0 +1,19 @@ +//--- Melia Script ---------------------------------------------------------- +// Emmet Forest +//--- Description ----------------------------------------------------------- +// NPCs found in and around Emmet Forest. +//--------------------------------------------------------------------------- + +using Melia.Shared.Game.Const; +using Melia.Zone.Scripting; +using static Melia.Zone.Scripting.Shortcuts; + +public class FWhitetrees231NpcScript : GeneralScript +{ + protected override void Load() + { + // Track NPCs + //--------------------------------------------------------------------------- + AddTrackNPC(157041, "", "f_whitetrees_23_1", 527.8957, -140.5882, 190.1657, 43, "f_whitetrees_23_1_elt"); + } +} diff --git a/system/scripts/zone/content/r1/npcs/fields/f_whitetrees_23_3.cs b/system/scripts/zone/content/r1/npcs/fields/f_whitetrees_23_3.cs new file mode 100644 index 000000000..84cd2e3fc --- /dev/null +++ b/system/scripts/zone/content/r1/npcs/fields/f_whitetrees_23_3.cs @@ -0,0 +1,19 @@ +//--- Melia Script ---------------------------------------------------------- +// Syla Forest +//--- Description ----------------------------------------------------------- +// NPCs found in and around Syla Forest. +//--------------------------------------------------------------------------- + +using Melia.Shared.Game.Const; +using Melia.Zone.Scripting; +using static Melia.Zone.Scripting.Shortcuts; + +public class FWhitetrees233NpcScript : GeneralScript +{ + protected override void Load() + { + // Track NPCs + //--------------------------------------------------------------------------- + AddTrackNPC(157037, "", "f_whitetrees_23_3", -997.1872, 160.0814, 367.3382, 38, "f_whitetrees_23_3_elt"); + } +} diff --git a/system/scripts/zone/content/r1/npcs/fields/f_whitetrees_56_1.cs b/system/scripts/zone/content/r1/npcs/fields/f_whitetrees_56_1.cs new file mode 100644 index 000000000..e9a8ac1b1 --- /dev/null +++ b/system/scripts/zone/content/r1/npcs/fields/f_whitetrees_56_1.cs @@ -0,0 +1,19 @@ +//--- Melia Script ---------------------------------------------------------- +// Mishekan Forest +//--- Description ----------------------------------------------------------- +// NPCs found in and around Mishekan Forest. +//--------------------------------------------------------------------------- + +using Melia.Shared.Game.Const; +using Melia.Zone.Scripting; +using static Melia.Zone.Scripting.Shortcuts; + +public class FWhitetrees561NpcScript : GeneralScript +{ + protected override void Load() + { + // Track NPCs + //--------------------------------------------------------------------------- + AddTrackNPC(157038, "", "f_whitetrees_56_1", 1384.889, 68.06953, 243.3077, 10, "f_whitetrees_56_1_elt"); + } +} diff --git a/system/scripts/zone/content/r1/npcs/scripts.txt b/system/scripts/zone/content/r1/npcs/scripts.txt new file mode 100644 index 000000000..23f9c35a8 --- /dev/null +++ b/system/scripts/zone/content/r1/npcs/scripts.txt @@ -0,0 +1,5 @@ +// Melia +// Script List File +//--------------------------------------------------------------------------- + +./**/* \ No newline at end of file diff --git a/system/scripts/zone/content/r1/scripts.txt b/system/scripts/zone/content/r1/scripts.txt index 4b456b27d..3ffb7a3e0 100644 --- a/system/scripts/zone/content/r1/scripts.txt +++ b/system/scripts/zone/content/r1/scripts.txt @@ -4,3 +4,4 @@ require "mobs/scripts.txt" require "warps/scripts.txt" +require "npcs/scripts.txt" From 0ef5de9a22843f61b3a59e56be43fd799431b8d6 Mon Sep 17 00:00:00 2001 From: MrShadow Date: Sat, 15 Nov 2025 09:51:01 -0300 Subject: [PATCH 2/4] Fix track NPCs not moving when player is far away --- src/ZoneServer/World/Actors/Actor.cs | 10 ---------- .../World/Actors/Components/EffectsComponent.cs | 14 -------------- src/ZoneServer/World/Maps/Map.cs | 5 ++--- .../zone/content/r1/npcs/fields/f_gele_57_1.cs | 2 +- 4 files changed, 3 insertions(+), 28 deletions(-) diff --git a/src/ZoneServer/World/Actors/Actor.cs b/src/ZoneServer/World/Actors/Actor.cs index b6cc9cadd..444ac7b3d 100644 --- a/src/ZoneServer/World/Actors/Actor.cs +++ b/src/ZoneServer/World/Actors/Actor.cs @@ -129,16 +129,6 @@ public void AddEffect(Effect effect) { this.Effects.AddEffect(effect); } - - /// - /// Adds a named effect to the actor. - /// - /// The name to identify the effect. - /// The effect to add. - public void AddEffect(string effectName, Effect effect) - { - this.Effects.AddEffect(effectName, effect); - } } /// diff --git a/src/ZoneServer/World/Actors/Components/EffectsComponent.cs b/src/ZoneServer/World/Actors/Components/EffectsComponent.cs index 7cd4225b8..80ac32b6c 100644 --- a/src/ZoneServer/World/Actors/Components/EffectsComponent.cs +++ b/src/ZoneServer/World/Actors/Components/EffectsComponent.cs @@ -55,20 +55,6 @@ public void AddEffect(Effect effect) } } - /// - /// Adds an effect with a specific name. - /// - /// The name to identify the effect. - /// The effect to add. - public void AddEffect(string effectName, Effect effect) - { - lock (_effects) - { - _effects.Add(effectName, effect); - this.BroadcastEffectAddition(effect); - } - } - /// /// Sends an effect to all players that can currently see the owner. /// diff --git a/src/ZoneServer/World/Maps/Map.cs b/src/ZoneServer/World/Maps/Map.cs index d65b07dd7..7c2c29295 100644 --- a/src/ZoneServer/World/Maps/Map.cs +++ b/src/ZoneServer/World/Maps/Map.cs @@ -320,7 +320,7 @@ public Character[] GetCharacters(Func predicate) /// /// public Character[] GetVisibleCharacters(Character character) - => this.GetCharacters(a => a != character && character.Position.InRange2D(a.Position, VisibleRange)); + => this.GetCharacters(a => a != character && character.CanSee(a)); /// /// Adds monster to map. @@ -635,8 +635,7 @@ public IMonster[] GetMonsters(Func predicate) /// /// public IMonster[] GetVisibleMonsters(Character character) - // TODO: Move responsibility about visibility to Character. - => this.GetMonsters(a => (a is not Npc npc || npc.State != NpcState.Invisible) && character.Position.InRange2D(a.Position, VisibleRange)); + => this.GetMonsters(a => (a is not Npc npc || npc.State != NpcState.Invisible) && character.CanSee(a)); /// /// Removes all scripted entities, like NPCs, monsters, and warps. diff --git a/system/scripts/zone/content/r1/npcs/fields/f_gele_57_1.cs b/system/scripts/zone/content/r1/npcs/fields/f_gele_57_1.cs index e25ddbecd..2a3c7dfa3 100644 --- a/system/scripts/zone/content/r1/npcs/fields/f_gele_57_1.cs +++ b/system/scripts/zone/content/r1/npcs/fields/f_gele_57_1.cs @@ -14,6 +14,6 @@ protected override void Load() { // Track NPCs //--------------------------------------------------------------------------- - AddTrackNPC(153006, "", "f_gele_57_1", -305.9306, 168.8233, -402.949, 0, "f_gele_57_1_elt"); + AddTrackNPC(153006, "", "f_gele_57_1", -305.9306, 168.8233, -402.949, 0, "f_gele_57_1_elt", 2, 1); } } From eeb2bcf305e7a92376f42f4e3848bea70188af90 Mon Sep 17 00:00:00 2001 From: MrShadow Date: Sat, 15 Nov 2025 13:13:01 -0300 Subject: [PATCH 3/4] Fix index and directions of track NPCs --- .../zone/content/r1/npcs/dungeons/d_abbey_64_1.cs | 2 +- .../zone/content/r1/npcs/dungeons/d_abbey_64_2.cs | 2 +- .../zone/content/r1/npcs/dungeons/d_abbey_64_3.cs | 2 +- .../zone/content/r1/npcs/dungeons/d_castle_67_1.cs | 2 +- .../zone/content/r1/npcs/dungeons/d_castle_67_2.cs | 4 ++-- .../zone/content/r1/npcs/dungeons/d_cmine_66_1.cs | 2 +- .../content/r1/npcs/dungeons/d_fantasylibrary_48_2.cs | 2 +- .../content/r1/npcs/dungeons/d_fantasylibrary_48_3.cs | 2 +- .../content/r1/npcs/dungeons/d_fantasylibrary_48_4.cs | 2 +- .../zone/content/r1/npcs/dungeons/d_firetower_69_1.cs | 9 +++++---- .../zone/content/r1/npcs/dungeons/d_firetower_69_2.cs | 2 +- .../content/r1/npcs/dungeons/d_limestonecave_55_1.cs | 2 +- .../zone/content/r1/npcs/dungeons/d_prison_62_1.cs | 2 +- .../zone/content/r1/npcs/dungeons/d_prison_62_2.cs | 2 +- .../zone/content/r1/npcs/dungeons/d_prison_62_3.cs | 2 +- .../content/r1/npcs/dungeons/d_underfortress_68_2.cs | 6 +++--- .../zone/content/r1/npcs/fields/f_3cmlake_26_1.cs | 2 +- .../zone/content/r1/npcs/fields/f_bracken_42_1.cs | 4 ++-- .../zone/content/r1/npcs/fields/f_bracken_43_2.cs | 4 ++-- .../zone/content/r1/npcs/fields/f_bracken_43_4.cs | 2 +- .../zone/content/r1/npcs/fields/f_bracken_63_1.cs | 2 +- .../zone/content/r1/npcs/fields/f_bracken_63_2.cs | 2 +- .../scripts/zone/content/r1/npcs/fields/f_castle_20_1.cs | 4 ++-- .../scripts/zone/content/r1/npcs/fields/f_castle_20_2.cs | 4 ++-- .../scripts/zone/content/r1/npcs/fields/f_castle_20_3.cs | 2 +- .../scripts/zone/content/r1/npcs/fields/f_castle_20_4.cs | 2 +- .../scripts/zone/content/r1/npcs/fields/f_castle_65_1.cs | 2 +- .../scripts/zone/content/r1/npcs/fields/f_castle_65_2.cs | 2 +- .../scripts/zone/content/r1/npcs/fields/f_castle_65_3.cs | 2 +- .../scripts/zone/content/r1/npcs/fields/f_coral_32_2.cs | 2 +- .../scripts/zone/content/r1/npcs/fields/f_coral_35_2.cs | 2 +- .../scripts/zone/content/r1/npcs/fields/f_coral_44_3.cs | 2 +- .../zone/content/r1/npcs/fields/f_dcapital_103.cs | 4 ++-- .../zone/content/r1/npcs/fields/f_dcapital_105.cs | 2 +- .../zone/content/r1/npcs/fields/f_dcapital_106.cs | 2 +- .../zone/content/r1/npcs/fields/f_dcapital_20_5.cs | 2 +- .../zone/content/r1/npcs/fields/f_dcapital_20_6.cs | 2 +- system/scripts/zone/content/r1/npcs/fields/f_flash_63.cs | 2 +- .../scripts/zone/content/r1/npcs/fields/f_gele_57_2.cs | 2 +- .../zone/content/r1/npcs/fields/f_huevillage_58_1.cs | 2 +- .../scripts/zone/content/r1/npcs/fields/f_maple_25_1.cs | 2 +- .../scripts/zone/content/r1/npcs/fields/f_maple_25_2.cs | 2 +- .../scripts/zone/content/r1/npcs/fields/f_maple_25_3.cs | 2 +- .../zone/content/r1/npcs/fields/f_nicopolis_81_2.cs | 2 +- .../zone/content/r1/npcs/fields/f_nicopolis_81_3.cs | 2 +- .../zone/content/r1/npcs/fields/f_orchard_32_4.cs | 4 ++-- .../zone/content/r1/npcs/fields/f_orchard_34_2.cs | 2 +- system/scripts/zone/content/r1/npcs/fields/f_rokas_27.cs | 2 +- .../zone/content/r1/npcs/fields/f_whitetrees_22_2.cs | 2 +- .../zone/content/r1/npcs/fields/f_whitetrees_23_1.cs | 2 +- .../zone/content/r1/npcs/fields/f_whitetrees_23_3.cs | 2 +- .../zone/content/r1/npcs/fields/f_whitetrees_56_1.cs | 2 +- 52 files changed, 65 insertions(+), 64 deletions(-) diff --git a/system/scripts/zone/content/r1/npcs/dungeons/d_abbey_64_1.cs b/system/scripts/zone/content/r1/npcs/dungeons/d_abbey_64_1.cs index 4b0579a14..5f22caa5f 100644 --- a/system/scripts/zone/content/r1/npcs/dungeons/d_abbey_64_1.cs +++ b/system/scripts/zone/content/r1/npcs/dungeons/d_abbey_64_1.cs @@ -14,6 +14,6 @@ protected override void Load() { // Track NPCs //--------------------------------------------------------------------------- - AddTrackNPC(153102, "", "d_abbey_64_1", -1017.423, 366.9117, -465.3019, 0, "d_abbey_64_1_elt2", 3, 5); + AddTrackNPC(153102, "", "d_abbey_64_1", -1017.423, 366.9117, -465.3019, 0, "d_abbey_64_1_elt2", 3, 2); } } diff --git a/system/scripts/zone/content/r1/npcs/dungeons/d_abbey_64_2.cs b/system/scripts/zone/content/r1/npcs/dungeons/d_abbey_64_2.cs index ac93c82a6..00751f9d6 100644 --- a/system/scripts/zone/content/r1/npcs/dungeons/d_abbey_64_2.cs +++ b/system/scripts/zone/content/r1/npcs/dungeons/d_abbey_64_2.cs @@ -14,6 +14,6 @@ protected override void Load() { // Track NPCs //--------------------------------------------------------------------------- - AddTrackNPC(153113, "", "d_abbey_64_2", 275.6379, 348.6844, -439.101, 90, "d_abbey_64_2_elt"); + AddTrackNPC(153113, "", "d_abbey_64_2", 275.6379, 348.6844, -439.101, 90, "d_abbey_64_2_elt", 2, 1); } } diff --git a/system/scripts/zone/content/r1/npcs/dungeons/d_abbey_64_3.cs b/system/scripts/zone/content/r1/npcs/dungeons/d_abbey_64_3.cs index 93ce595e6..6b5d81edf 100644 --- a/system/scripts/zone/content/r1/npcs/dungeons/d_abbey_64_3.cs +++ b/system/scripts/zone/content/r1/npcs/dungeons/d_abbey_64_3.cs @@ -14,6 +14,6 @@ protected override void Load() { // Track NPCs //--------------------------------------------------------------------------- - AddTrackNPC(153114, "", "d_abbey_64_3", -1155.956, 411.8994, -1264.598, 90, "d_abbey_64_3_elt"); + AddTrackNPC(153114, "", "d_abbey_64_3", -1155.956, 411.8994, -1264.598, 90, "d_abbey_64_3_elt", 2, 1); } } diff --git a/system/scripts/zone/content/r1/npcs/dungeons/d_castle_67_1.cs b/system/scripts/zone/content/r1/npcs/dungeons/d_castle_67_1.cs index f91ddb07b..9def584f9 100644 --- a/system/scripts/zone/content/r1/npcs/dungeons/d_castle_67_1.cs +++ b/system/scripts/zone/content/r1/npcs/dungeons/d_castle_67_1.cs @@ -14,6 +14,6 @@ protected override void Load() { // Track NPCs //--------------------------------------------------------------------------- - AddTrackNPC(153129, "", "d_castle_67_1", 183.9423, 277.7617, 330.8154, 0, "d_castle_67_1_elt"); + AddTrackNPC(153129, "", "d_castle_67_1", 183.9423, 277.7617, 330.8154, 21, "d_castle_67_1_elt", 3, 2); } } diff --git a/system/scripts/zone/content/r1/npcs/dungeons/d_castle_67_2.cs b/system/scripts/zone/content/r1/npcs/dungeons/d_castle_67_2.cs index 26274394b..3068d4e39 100644 --- a/system/scripts/zone/content/r1/npcs/dungeons/d_castle_67_2.cs +++ b/system/scripts/zone/content/r1/npcs/dungeons/d_castle_67_2.cs @@ -14,7 +14,7 @@ protected override void Load() { // Track NPCs //--------------------------------------------------------------------------- - AddTrackNPC(153130, "", "d_castle_67_2", -741.084, 95.06264, 125.5274, 0, "d_castle_67_2_elt"); - AddTrackNPC(153130, "", "d_castle_67_2", -865.5137, 93.15315, -926.0688, 0, "d_castle_67_2_elt2"); + AddTrackNPC(153130, "", "d_castle_67_2", -741.084, 95.06264, 125.5274, 0, "d_castle_67_2_elt", 3, 2); + AddTrackNPC(153130, "", "d_castle_67_2", -865.5137, 93.15315, -926.0688, 16, "d_castle_67_2_elt2", 3, 2); } } diff --git a/system/scripts/zone/content/r1/npcs/dungeons/d_cmine_66_1.cs b/system/scripts/zone/content/r1/npcs/dungeons/d_cmine_66_1.cs index bf5d5397b..fe8f18160 100644 --- a/system/scripts/zone/content/r1/npcs/dungeons/d_cmine_66_1.cs +++ b/system/scripts/zone/content/r1/npcs/dungeons/d_cmine_66_1.cs @@ -14,6 +14,6 @@ protected override void Load() { // Track NPCs //--------------------------------------------------------------------------- - AddTrackNPC(155110, "", "d_cmine_66_1", 77.5127, 413.2733, -77.08086, 0, "d_cmine_66_1_elt"); + AddTrackNPC(155110, "", "d_cmine_66_1", 77.5127, 413.2733, -77.08086, 0, "d_cmine_66_1_elt", 2, 1); } } diff --git a/system/scripts/zone/content/r1/npcs/dungeons/d_fantasylibrary_48_2.cs b/system/scripts/zone/content/r1/npcs/dungeons/d_fantasylibrary_48_2.cs index 27fe7c11a..f1ba19d1a 100644 --- a/system/scripts/zone/content/r1/npcs/dungeons/d_fantasylibrary_48_2.cs +++ b/system/scripts/zone/content/r1/npcs/dungeons/d_fantasylibrary_48_2.cs @@ -14,6 +14,6 @@ protected override void Load() { // Track NPCs //--------------------------------------------------------------------------- - AddTrackNPC(157051, "", "d_fantasylibrary_48_2", 60.01674, 69.90582, -182.7349, 0, "d_fantasylibrary_48_2_elt"); + AddTrackNPC(157051, "", "d_fantasylibrary_48_2", 60.01674, 69.90582, -182.7349, 90, "d_fantasylibrary_48_2_elt", 2, 1); } } diff --git a/system/scripts/zone/content/r1/npcs/dungeons/d_fantasylibrary_48_3.cs b/system/scripts/zone/content/r1/npcs/dungeons/d_fantasylibrary_48_3.cs index 94b8c2972..7d973fc88 100644 --- a/system/scripts/zone/content/r1/npcs/dungeons/d_fantasylibrary_48_3.cs +++ b/system/scripts/zone/content/r1/npcs/dungeons/d_fantasylibrary_48_3.cs @@ -14,6 +14,6 @@ protected override void Load() { // Track NPCs //--------------------------------------------------------------------------- - AddTrackNPC(157052, "", "d_fantasylibrary_48_3", -321.4122, 138.6892, 209.0464, 0, "d_fantasylibrary_48_3_elt"); + AddTrackNPC(157052, "", "d_fantasylibrary_48_3", -321.4122, 138.6892, 209.0464, 90, "d_fantasylibrary_48_3_elt", 2, 1); } } diff --git a/system/scripts/zone/content/r1/npcs/dungeons/d_fantasylibrary_48_4.cs b/system/scripts/zone/content/r1/npcs/dungeons/d_fantasylibrary_48_4.cs index d7af9bd69..bb2efabad 100644 --- a/system/scripts/zone/content/r1/npcs/dungeons/d_fantasylibrary_48_4.cs +++ b/system/scripts/zone/content/r1/npcs/dungeons/d_fantasylibrary_48_4.cs @@ -14,6 +14,6 @@ protected override void Load() { // Track NPCs //--------------------------------------------------------------------------- - AddTrackNPC(157053, "", "d_fantasylibrary_48_4", -1004.409, 6.635758, -709.1039, 0, "d_fantasylibrary_48_4_elt"); + AddTrackNPC(157053, "", "d_fantasylibrary_48_4", -1004.409, 6.635758, -709.1039, 90, "d_fantasylibrary_48_4_elt", 2, 1); } } diff --git a/system/scripts/zone/content/r1/npcs/dungeons/d_firetower_69_1.cs b/system/scripts/zone/content/r1/npcs/dungeons/d_firetower_69_1.cs index f0c1db367..33b6f80bc 100644 --- a/system/scripts/zone/content/r1/npcs/dungeons/d_firetower_69_1.cs +++ b/system/scripts/zone/content/r1/npcs/dungeons/d_firetower_69_1.cs @@ -14,9 +14,10 @@ protected override void Load() { // Track NPCs //--------------------------------------------------------------------------- - AddTrackNPC(154081, "", "d_firetower_69_1", -1674.647, 0, -1202.516, 3.571429, "d_firetower_69_1_elt"); - AddTrackNPC(154081, "", "d_firetower_69_1", -1535.553, 0, -1129.915, 0, "d_firetower_69_1_elt"); - AddTrackNPC(154083, "", "d_firetower_69_1", -1689.049, 0, -965.8168, 0, "d_firetower_69_1_elt"); - AddTrackNPC(154083, "", "d_firetower_69_1", -1553.533, 0, -910.1417, 0, "d_firetower_69_1_elt"); + // TODO: Check rotation + // AddTrackNPC(154081, "", "d_firetower_69_1", -1674.647, 0, -1202.516, 3.571429, "d_firetower_69_1_elt"); + // AddTrackNPC(154081, "", "d_firetower_69_1", -1535.553, 0, -1129.915, 0, "d_firetower_69_1_elt"); + // AddTrackNPC(154083, "", "d_firetower_69_1", -1689.049, 0, -965.8168, 0, "d_firetower_69_1_elt"); + // AddTrackNPC(154083, "", "d_firetower_69_1", -1553.533, 0, -910.1417, 0, "d_firetower_69_1_elt"); } } diff --git a/system/scripts/zone/content/r1/npcs/dungeons/d_firetower_69_2.cs b/system/scripts/zone/content/r1/npcs/dungeons/d_firetower_69_2.cs index 1541eddf4..cc8cf53da 100644 --- a/system/scripts/zone/content/r1/npcs/dungeons/d_firetower_69_2.cs +++ b/system/scripts/zone/content/r1/npcs/dungeons/d_firetower_69_2.cs @@ -14,6 +14,6 @@ protected override void Load() { // Track NPCs //--------------------------------------------------------------------------- - AddTrackNPC(157026, "", "d_firetower_69_2", -757.8323, 85.4979, 728.7798, 0, "d_firetower_69_2_elt"); + AddTrackNPC(157026, "", "d_firetower_69_2", -757.8323, 85.4979, 728.7798, 45, "d_firetower_69_2_elt", 2, 1); } } diff --git a/system/scripts/zone/content/r1/npcs/dungeons/d_limestonecave_55_1.cs b/system/scripts/zone/content/r1/npcs/dungeons/d_limestonecave_55_1.cs index fafec5962..e522fb9e1 100644 --- a/system/scripts/zone/content/r1/npcs/dungeons/d_limestonecave_55_1.cs +++ b/system/scripts/zone/content/r1/npcs/dungeons/d_limestonecave_55_1.cs @@ -14,6 +14,6 @@ protected override void Load() { // Track NPCs //--------------------------------------------------------------------------- - AddTrackNPC(154099, "", "d_limestonecave_55_1", 1227.525, 151.018, 529.8058, 16, "d_limestonecave_55_1_elt"); + AddTrackNPC(154099, "", "d_limestonecave_55_1", 1227.525, 151.018, 529.8058, 16, "d_limestonecave_55_1_elt", 2, 1); } } diff --git a/system/scripts/zone/content/r1/npcs/dungeons/d_prison_62_1.cs b/system/scripts/zone/content/r1/npcs/dungeons/d_prison_62_1.cs index c7ebcb869..8943138e4 100644 --- a/system/scripts/zone/content/r1/npcs/dungeons/d_prison_62_1.cs +++ b/system/scripts/zone/content/r1/npcs/dungeons/d_prison_62_1.cs @@ -14,6 +14,6 @@ protected override void Load() { // Track NPCs //--------------------------------------------------------------------------- - AddTrackNPC(154059, "", "d_prison_62_1", -241.3938, 200.532, 501.1691, 0, "d_prison_62_1_elt"); + AddTrackNPC(154059, "", "d_prison_62_1", -241.3938, 200.532, 501.1691, 0, "d_prison_62_1_elt", 2, 1); } } diff --git a/system/scripts/zone/content/r1/npcs/dungeons/d_prison_62_2.cs b/system/scripts/zone/content/r1/npcs/dungeons/d_prison_62_2.cs index 361ea8179..73fe60870 100644 --- a/system/scripts/zone/content/r1/npcs/dungeons/d_prison_62_2.cs +++ b/system/scripts/zone/content/r1/npcs/dungeons/d_prison_62_2.cs @@ -14,6 +14,6 @@ protected override void Load() { // Track NPCs //--------------------------------------------------------------------------- - AddTrackNPC(154058, "", "d_prison_62_2", 5.702232, -707.8696, -1245.999, 0, "d_prison_62_2_elt"); + AddTrackNPC(154058, "", "d_prison_62_2", 5.702232, -707.8696, -1245.999, 0, "d_prison_62_2_elt", 2, 1); } } diff --git a/system/scripts/zone/content/r1/npcs/dungeons/d_prison_62_3.cs b/system/scripts/zone/content/r1/npcs/dungeons/d_prison_62_3.cs index 06022775c..abad36584 100644 --- a/system/scripts/zone/content/r1/npcs/dungeons/d_prison_62_3.cs +++ b/system/scripts/zone/content/r1/npcs/dungeons/d_prison_62_3.cs @@ -14,6 +14,6 @@ protected override void Load() { // Track NPCs //--------------------------------------------------------------------------- - AddTrackNPC(154058, "", "d_prison_62_3", -324.5829, 1013.862, 329.7611, 0, "d_prison_62_3_elt"); + AddTrackNPC(154058, "", "d_prison_62_3", -324.5829, 1013.862, 329.7611, 0, "d_prison_62_3_elt", 2, 1); } } diff --git a/system/scripts/zone/content/r1/npcs/dungeons/d_underfortress_68_2.cs b/system/scripts/zone/content/r1/npcs/dungeons/d_underfortress_68_2.cs index c1775fb2a..97fbc5b96 100644 --- a/system/scripts/zone/content/r1/npcs/dungeons/d_underfortress_68_2.cs +++ b/system/scripts/zone/content/r1/npcs/dungeons/d_underfortress_68_2.cs @@ -14,8 +14,8 @@ protected override void Load() { // Track NPCs //--------------------------------------------------------------------------- - AddTrackNPC(153135, "", "d_underfortress_68_2", 600.5497, 205.7321, 37.91431, 0, "d_underfortress_68_2_elt"); - AddTrackNPC(153135, "", "d_underfortress_68_2", 600.5497, 205.7321, 37.91431, 0, "d_underfortress_68_2_elt"); - AddTrackNPC(153135, "", "d_underfortress_68_2", 830.5077, 195.7104, -1507.612, 0, "d_underfortress_68_2_elt2"); + AddTrackNPC(153135, "", "d_underfortress_68_2", 600.5497, 205.7321, 37.91431, 0, "d_underfortress_68_2_elt", 3, 2); + AddTrackNPC(153135, "", "d_underfortress_68_2", 600.5497, 205.7321, 37.91431, 0, "d_underfortress_68_2_elt", 3, 2); + AddTrackNPC(153135, "", "d_underfortress_68_2", 830.5077, 195.7104, -1507.612, 0, "d_underfortress_68_2_elt2", 3, 2); } } diff --git a/system/scripts/zone/content/r1/npcs/fields/f_3cmlake_26_1.cs b/system/scripts/zone/content/r1/npcs/fields/f_3cmlake_26_1.cs index 22444cdce..29c478bb2 100644 --- a/system/scripts/zone/content/r1/npcs/fields/f_3cmlake_26_1.cs +++ b/system/scripts/zone/content/r1/npcs/fields/f_3cmlake_26_1.cs @@ -14,6 +14,6 @@ protected override void Load() { // Track NPCs //--------------------------------------------------------------------------- - AddTrackNPC(155160, "", "f_3cmlake_26_1", 948.2599, -117.9686, 444.7431, 0, "f_3cmlake_26_1_elt"); + AddTrackNPC(155160, "", "f_3cmlake_26_1", 948.2599, -117.9686, 444.7431, 0, "f_3cmlake_26_1_elt", 2, 1); } } diff --git a/system/scripts/zone/content/r1/npcs/fields/f_bracken_42_1.cs b/system/scripts/zone/content/r1/npcs/fields/f_bracken_42_1.cs index 825f6362a..1c9bf2ac9 100644 --- a/system/scripts/zone/content/r1/npcs/fields/f_bracken_42_1.cs +++ b/system/scripts/zone/content/r1/npcs/fields/f_bracken_42_1.cs @@ -14,7 +14,7 @@ protected override void Load() { // Track NPCs //--------------------------------------------------------------------------- - AddTrackNPC(157042, "", "f_bracken_42_1", 782.5125, 558.6927, -747.0397, 0, "f_bracken_42_1_elt"); - AddTrackNPC(157043, "", "f_bracken_42_1", 1067.31, 557.06, -425.56, 0, "f_bracken_42_1_elt2"); + AddTrackNPC(157042, "", "f_bracken_42_1", 782.5125, 558.6927, -747.0397, 0, "f_bracken_42_1_elt", 2, 1); + AddTrackNPC(157043, "", "f_bracken_42_1", 1067.31, 557.06, -425.56, 0, "f_bracken_42_1_elt2", 2, 1); } } diff --git a/system/scripts/zone/content/r1/npcs/fields/f_bracken_43_2.cs b/system/scripts/zone/content/r1/npcs/fields/f_bracken_43_2.cs index f98cd3efb..cfd7c266e 100644 --- a/system/scripts/zone/content/r1/npcs/fields/f_bracken_43_2.cs +++ b/system/scripts/zone/content/r1/npcs/fields/f_bracken_43_2.cs @@ -14,7 +14,7 @@ protected override void Load() { // Track NPCs //--------------------------------------------------------------------------- - AddTrackNPC(153179, "", "f_bracken_43_2", 1369.781, 116.1511, 470.741, 0, "f_bracken_43_2_elt"); - AddTrackNPC(153180, "", "f_bracken_43_2", 552.7917, 35.09259, -574.3962, 354, "f_bracken_43_2_elt2"); + AddTrackNPC(153179, "", "f_bracken_43_2", 1369.781, 116.1511, 470.741, 0, "f_bracken_43_2_elt", 2, 1); + AddTrackNPC(153180, "", "f_bracken_43_2", 552.7917, 35.09259, -574.3962, 354, "f_bracken_43_2_elt2", 2, 1); } } diff --git a/system/scripts/zone/content/r1/npcs/fields/f_bracken_43_4.cs b/system/scripts/zone/content/r1/npcs/fields/f_bracken_43_4.cs index 83796b8a0..aa6915f90 100644 --- a/system/scripts/zone/content/r1/npcs/fields/f_bracken_43_4.cs +++ b/system/scripts/zone/content/r1/npcs/fields/f_bracken_43_4.cs @@ -14,6 +14,6 @@ protected override void Load() { // Track NPCs //--------------------------------------------------------------------------- - AddTrackNPC(153181, "", "f_bracken_43_4", 665.4066, 59.12576, 327.8538, 0, "f_bracken_43_4_elt"); + AddTrackNPC(153181, "", "f_bracken_43_4", 665.4066, 59.12576, 327.8538, 0, "f_bracken_43_4_elt", 2, 1); } } diff --git a/system/scripts/zone/content/r1/npcs/fields/f_bracken_63_1.cs b/system/scripts/zone/content/r1/npcs/fields/f_bracken_63_1.cs index ae59e56d7..49f184935 100644 --- a/system/scripts/zone/content/r1/npcs/fields/f_bracken_63_1.cs +++ b/system/scripts/zone/content/r1/npcs/fields/f_bracken_63_1.cs @@ -14,6 +14,6 @@ protected override void Load() { // Track NPCs //--------------------------------------------------------------------------- - AddTrackNPC(153107, "", "f_bracken_63_1", -268.1401, 544.2999, 995.2676, 21, "f_bracken_63_1_elt", 3); + AddTrackNPC(153107, "", "f_bracken_63_1", -268.1401, 544.2999, 995.2676, 21, "f_bracken_63_1_elt", 3, 2); } } diff --git a/system/scripts/zone/content/r1/npcs/fields/f_bracken_63_2.cs b/system/scripts/zone/content/r1/npcs/fields/f_bracken_63_2.cs index d1a756722..7b3171609 100644 --- a/system/scripts/zone/content/r1/npcs/fields/f_bracken_63_2.cs +++ b/system/scripts/zone/content/r1/npcs/fields/f_bracken_63_2.cs @@ -14,6 +14,6 @@ protected override void Load() { // Track NPCs //--------------------------------------------------------------------------- - AddTrackNPC(153112, "", "f_bracken_63_2", -47.54993, 253.4295, -541.7952, 0, "f_bracken_63_2_elt"); + AddTrackNPC(153112, "", "f_bracken_63_2", -47.54993, 253.4295, -541.7952, 0, "f_bracken_63_2_elt", 2, 1); } } diff --git a/system/scripts/zone/content/r1/npcs/fields/f_castle_20_1.cs b/system/scripts/zone/content/r1/npcs/fields/f_castle_20_1.cs index b557ca2a0..a4dfa0b90 100644 --- a/system/scripts/zone/content/r1/npcs/fields/f_castle_20_1.cs +++ b/system/scripts/zone/content/r1/npcs/fields/f_castle_20_1.cs @@ -14,7 +14,7 @@ protected override void Load() { // Track NPCs //--------------------------------------------------------------------------- - AddTrackNPC(157027, "", "f_castle_20_1", 405.7464, 150.6457, -274.809, 0, "f_castle_20_1_elt"); - AddTrackNPC(157028, "", "f_castle_20_1", -576.8862, 237.7089, -320.7311, 0, "f_castle_20_1_elt2"); + AddTrackNPC(157027, "", "f_castle_20_1", 405.7464, 150.6457, -274.809, 0, "f_castle_20_1_elt", 2, 1); + AddTrackNPC(157028, "", "f_castle_20_1", -576.8862, 237.7089, -320.7311, 90, "f_castle_20_1_elt2", 2, 1); } } diff --git a/system/scripts/zone/content/r1/npcs/fields/f_castle_20_2.cs b/system/scripts/zone/content/r1/npcs/fields/f_castle_20_2.cs index 5690d577e..d62959039 100644 --- a/system/scripts/zone/content/r1/npcs/fields/f_castle_20_2.cs +++ b/system/scripts/zone/content/r1/npcs/fields/f_castle_20_2.cs @@ -14,7 +14,7 @@ protected override void Load() { // Track NPCs //--------------------------------------------------------------------------- - AddTrackNPC(157029, "", "f_castle_20_2", -1006.002, 1.829224, -609.7711, 0, "f_castle_20_2_elt"); - AddTrackNPC(157029, "", "f_castle_20_2", -894.3446, -120.3677, 549.2271, 0, "f_castle_20_2_elt2"); + AddTrackNPC(157029, "", "f_castle_20_2", -1006.002, 1.829224, -609.7711, 16, "f_castle_20_2_elt", 2, 1); + AddTrackNPC(157029, "", "f_castle_20_2", -894.3446, -120.3677, 549.2271, 0, "f_castle_20_2_elt2", 2, 1); } } diff --git a/system/scripts/zone/content/r1/npcs/fields/f_castle_20_3.cs b/system/scripts/zone/content/r1/npcs/fields/f_castle_20_3.cs index c47afdf81..c2d5b0a01 100644 --- a/system/scripts/zone/content/r1/npcs/fields/f_castle_20_3.cs +++ b/system/scripts/zone/content/r1/npcs/fields/f_castle_20_3.cs @@ -14,6 +14,6 @@ protected override void Load() { // Track NPCs //--------------------------------------------------------------------------- - AddTrackNPC(157030, "", "f_castle_20_3", 467.1729, 139.2464, -586.9828, 0, "f_castle_20_3_elt"); + AddTrackNPC(157030, "", "f_castle_20_3", 467.1729, 139.2464, -586.9828, 0, "f_castle_20_3_elt", 2, 1); } } diff --git a/system/scripts/zone/content/r1/npcs/fields/f_castle_20_4.cs b/system/scripts/zone/content/r1/npcs/fields/f_castle_20_4.cs index 92912c429..f57ce61fc 100644 --- a/system/scripts/zone/content/r1/npcs/fields/f_castle_20_4.cs +++ b/system/scripts/zone/content/r1/npcs/fields/f_castle_20_4.cs @@ -14,6 +14,6 @@ protected override void Load() { // Track NPCs //--------------------------------------------------------------------------- - AddTrackNPC(157025, "", "f_castle_20_4", 1157.179, 126.4701, 271.2875, 0, "d_castle_20_4_elt"); + AddTrackNPC(157025, "", "f_castle_20_4", 1157.179, 126.4701, 271.2875, 0, "d_castle_20_4_elt", 2, 1); } } diff --git a/system/scripts/zone/content/r1/npcs/fields/f_castle_65_1.cs b/system/scripts/zone/content/r1/npcs/fields/f_castle_65_1.cs index 37256f73a..f4ff8ad6f 100644 --- a/system/scripts/zone/content/r1/npcs/fields/f_castle_65_1.cs +++ b/system/scripts/zone/content/r1/npcs/fields/f_castle_65_1.cs @@ -14,6 +14,6 @@ protected override void Load() { // Track NPCs //--------------------------------------------------------------------------- - AddTrackNPC(155112, "", "f_castle_65_1", -728.6979, -8.345245, 768.4816, 0, "f_castle_65_1_elt"); + AddTrackNPC(155112, "", "f_castle_65_1", -728.6979, -8.345245, 768.4816, 0, "f_castle_65_1_elt", 2, 1); } } diff --git a/system/scripts/zone/content/r1/npcs/fields/f_castle_65_2.cs b/system/scripts/zone/content/r1/npcs/fields/f_castle_65_2.cs index 2a4c39c8e..863f74b80 100644 --- a/system/scripts/zone/content/r1/npcs/fields/f_castle_65_2.cs +++ b/system/scripts/zone/content/r1/npcs/fields/f_castle_65_2.cs @@ -14,6 +14,6 @@ protected override void Load() { // Track NPCs //--------------------------------------------------------------------------- - AddTrackNPC(155108, "", "f_castle_65_2", -849.7505, 220.4114, 516.4036, 0, "f_castle_65_2_elt"); + AddTrackNPC(155108, "", "f_castle_65_2", -849.7505, 220.4114, 516.4036, 0, "f_castle_65_2_elt", 2, 1); } } diff --git a/system/scripts/zone/content/r1/npcs/fields/f_castle_65_3.cs b/system/scripts/zone/content/r1/npcs/fields/f_castle_65_3.cs index 860e1d572..0e5436f3d 100644 --- a/system/scripts/zone/content/r1/npcs/fields/f_castle_65_3.cs +++ b/system/scripts/zone/content/r1/npcs/fields/f_castle_65_3.cs @@ -14,6 +14,6 @@ protected override void Load() { // Track NPCs //--------------------------------------------------------------------------- - AddTrackNPC(155109, "", "f_castle_65_3", 123.7928, 96.6724, 200.1542, 0, "f_castle_65_3_elt"); + AddTrackNPC(155109, "", "f_castle_65_3", 123.7928, 96.6724, 200.1542, 0, "f_castle_65_3_elt", 2, 1); } } diff --git a/system/scripts/zone/content/r1/npcs/fields/f_coral_32_2.cs b/system/scripts/zone/content/r1/npcs/fields/f_coral_32_2.cs index 38484eda7..b0998d1fa 100644 --- a/system/scripts/zone/content/r1/npcs/fields/f_coral_32_2.cs +++ b/system/scripts/zone/content/r1/npcs/fields/f_coral_32_2.cs @@ -14,6 +14,6 @@ protected override void Load() { // Track NPCs //--------------------------------------------------------------------------- - AddTrackNPC(157003, "", "f_coral_32_2", -641.0241, -36.33413, 1405.18, 0, "f_coral_32_2_elt"); + AddTrackNPC(157003, "", "f_coral_32_2", -641.0241, -36.33413, 1405.18, 21, "f_coral_32_2_elt", 3, 2); } } diff --git a/system/scripts/zone/content/r1/npcs/fields/f_coral_35_2.cs b/system/scripts/zone/content/r1/npcs/fields/f_coral_35_2.cs index a7936c41d..db3bb4cec 100644 --- a/system/scripts/zone/content/r1/npcs/fields/f_coral_35_2.cs +++ b/system/scripts/zone/content/r1/npcs/fields/f_coral_35_2.cs @@ -14,6 +14,6 @@ protected override void Load() { // Track NPCs //--------------------------------------------------------------------------- - AddTrackNPC(156034, "", "f_coral_35_2", 401.4194, 224.4277, 717.4001, 0, "f_coral_35_2_elt"); + AddTrackNPC(156034, "", "f_coral_35_2", 401.4194, 224.4277, 717.4001, 0, "f_coral_35_2_elt", 2, 1); } } diff --git a/system/scripts/zone/content/r1/npcs/fields/f_coral_44_3.cs b/system/scripts/zone/content/r1/npcs/fields/f_coral_44_3.cs index 916e64115..df7ec05db 100644 --- a/system/scripts/zone/content/r1/npcs/fields/f_coral_44_3.cs +++ b/system/scripts/zone/content/r1/npcs/fields/f_coral_44_3.cs @@ -14,6 +14,6 @@ protected override void Load() { // Track NPCs //--------------------------------------------------------------------------- - AddTrackNPC(157050, "", "f_coral_44_3", 464.66, 92.97, 518.12, 0, "f_coral_44_3_elt"); + AddTrackNPC(157050, "", "f_coral_44_3", 464.66, 92.97, 518.12, 335, "f_coral_44_3_elt", 2, 1); } } diff --git a/system/scripts/zone/content/r1/npcs/fields/f_dcapital_103.cs b/system/scripts/zone/content/r1/npcs/fields/f_dcapital_103.cs index 73d1bb0c0..7b34fd744 100644 --- a/system/scripts/zone/content/r1/npcs/fields/f_dcapital_103.cs +++ b/system/scripts/zone/content/r1/npcs/fields/f_dcapital_103.cs @@ -14,7 +14,7 @@ protected override void Load() { // Track NPCs //--------------------------------------------------------------------------- - AddTrackNPC(157032, "", "f_dcapital_103", 1260.842, 214.2436, -324.7393, 0, "f_dcapital_103_elt"); - AddTrackNPC(157033, "", "f_dcapital_103", -401.9065, 174.6531, -97.95161, 0, "f_dcapital_103_elt2"); + AddTrackNPC(157032, "", "f_dcapital_103", 1260.842, 214.2436, -324.7393, 8, "f_dcapital_103_elt", 2, 1); + AddTrackNPC(157033, "", "f_dcapital_103", -401.9065, 174.6531, -97.95161, 0, "f_dcapital_103_elt2", 2, 1); } } diff --git a/system/scripts/zone/content/r1/npcs/fields/f_dcapital_105.cs b/system/scripts/zone/content/r1/npcs/fields/f_dcapital_105.cs index 5b89980cc..71202b01d 100644 --- a/system/scripts/zone/content/r1/npcs/fields/f_dcapital_105.cs +++ b/system/scripts/zone/content/r1/npcs/fields/f_dcapital_105.cs @@ -14,6 +14,6 @@ protected override void Load() { // Track NPCs //--------------------------------------------------------------------------- - AddTrackNPC(153231, "", "f_dcapital_105", -264.1042, 111.0862, -237.836, 0, "f_dcapital_105_elt"); + AddTrackNPC(153231, "", "f_dcapital_105", -264.1042, 111.0862, -237.836, 0, "f_dcapital_105_elt", 2, 1); } } diff --git a/system/scripts/zone/content/r1/npcs/fields/f_dcapital_106.cs b/system/scripts/zone/content/r1/npcs/fields/f_dcapital_106.cs index a859ba800..adc07582c 100644 --- a/system/scripts/zone/content/r1/npcs/fields/f_dcapital_106.cs +++ b/system/scripts/zone/content/r1/npcs/fields/f_dcapital_106.cs @@ -14,6 +14,6 @@ protected override void Load() { // Track NPCs //--------------------------------------------------------------------------- - AddTrackNPC(153230, "", "f_dcapital_106", 392.5825, 71.17463, 988.9101, 0, "f_dcapital_106_elt"); + AddTrackNPC(153230, "", "f_dcapital_106", 392.5825, 71.17463, 988.9101, 21, "f_dcapital_106_elt", 2, 1); } } diff --git a/system/scripts/zone/content/r1/npcs/fields/f_dcapital_20_5.cs b/system/scripts/zone/content/r1/npcs/fields/f_dcapital_20_5.cs index 110253844..7c579d3c1 100644 --- a/system/scripts/zone/content/r1/npcs/fields/f_dcapital_20_5.cs +++ b/system/scripts/zone/content/r1/npcs/fields/f_dcapital_20_5.cs @@ -14,6 +14,6 @@ protected override void Load() { // Track NPCs //--------------------------------------------------------------------------- - AddTrackNPC(157019, "", "f_dcapital_20_5", 929.8597, 294.7133, -722.7009, 0, "f_dcapital_20_5_elt"); + AddTrackNPC(157019, "", "f_dcapital_20_5", 929.8597, 294.7133, -722.7009, 0, "f_dcapital_20_5_elt", 2, 5); } } diff --git a/system/scripts/zone/content/r1/npcs/fields/f_dcapital_20_6.cs b/system/scripts/zone/content/r1/npcs/fields/f_dcapital_20_6.cs index 226f0f6ff..d0fca8f9c 100644 --- a/system/scripts/zone/content/r1/npcs/fields/f_dcapital_20_6.cs +++ b/system/scripts/zone/content/r1/npcs/fields/f_dcapital_20_6.cs @@ -14,6 +14,6 @@ protected override void Load() { // Track NPCs //--------------------------------------------------------------------------- - AddTrackNPC(157031, "", "f_dcapital_20_6", -755.0917, 283.1046, 1777.638, 0, "f_dcapital_20_6_elt"); + AddTrackNPC(157031, "", "f_dcapital_20_6", -755.0917, 283.1046, 1777.638, 0, "f_dcapital_20_6_elt", 2, 1); } } diff --git a/system/scripts/zone/content/r1/npcs/fields/f_flash_63.cs b/system/scripts/zone/content/r1/npcs/fields/f_flash_63.cs index cff61d661..861e68361 100644 --- a/system/scripts/zone/content/r1/npcs/fields/f_flash_63.cs +++ b/system/scripts/zone/content/r1/npcs/fields/f_flash_63.cs @@ -14,6 +14,6 @@ protected override void Load() { // Track NPCs //--------------------------------------------------------------------------- - AddTrackNPC(147427, "", "f_flash_63", 897.8192, 233.7511, 654.0224, 1, "flash_elevator"); + AddTrackNPC(147427, "", "f_flash_63", 897.8192, 233.7511, 654.0224, 357.82477, "flash_elevator", 2, 1); } } diff --git a/system/scripts/zone/content/r1/npcs/fields/f_gele_57_2.cs b/system/scripts/zone/content/r1/npcs/fields/f_gele_57_2.cs index 6c37e1caa..5db9a3517 100644 --- a/system/scripts/zone/content/r1/npcs/fields/f_gele_57_2.cs +++ b/system/scripts/zone/content/r1/npcs/fields/f_gele_57_2.cs @@ -14,6 +14,6 @@ protected override void Load() { // Track NPCs //--------------------------------------------------------------------------- - AddTrackNPC(153007, "", "f_gele_57_2", -85.66, 381.08, 841.97, 0, "f_gele57_2_cablecar"); + AddTrackNPC(153007, "", "f_gele_57_2", -85.66, 381.08, 841.97, 0, "f_gele57_2_cablecar", 2, 5); } } diff --git a/system/scripts/zone/content/r1/npcs/fields/f_huevillage_58_1.cs b/system/scripts/zone/content/r1/npcs/fields/f_huevillage_58_1.cs index a57be9d0a..64b773a3b 100644 --- a/system/scripts/zone/content/r1/npcs/fields/f_huevillage_58_1.cs +++ b/system/scripts/zone/content/r1/npcs/fields/f_huevillage_58_1.cs @@ -14,6 +14,6 @@ protected override void Load() { // Track NPCs //--------------------------------------------------------------------------- - AddTrackNPC(153008, "", "f_huevillage_58_1", 638.2, 129.74, 468.58, 0, "f_huevillage58_1_cablecar"); + AddTrackNPC(153008, "", "f_huevillage_58_1", 638.2, 129.74, 468.58, 0, "f_huevillage58_1_cablecar", 2, 5); } } diff --git a/system/scripts/zone/content/r1/npcs/fields/f_maple_25_1.cs b/system/scripts/zone/content/r1/npcs/fields/f_maple_25_1.cs index c2db5b4d5..cc6a68cb7 100644 --- a/system/scripts/zone/content/r1/npcs/fields/f_maple_25_1.cs +++ b/system/scripts/zone/content/r1/npcs/fields/f_maple_25_1.cs @@ -14,6 +14,6 @@ protected override void Load() { // Track NPCs //--------------------------------------------------------------------------- - AddTrackNPC(157034, "", "f_maple_25_1", -953.6499, -38.68602, 177.3624, 342, "f_maple_25_1_elt"); + AddTrackNPC(157034, "", "f_maple_25_1", -953.6499, -38.68602, 177.3624, 342, "f_maple_25_1_elt", 2, 1); } } diff --git a/system/scripts/zone/content/r1/npcs/fields/f_maple_25_2.cs b/system/scripts/zone/content/r1/npcs/fields/f_maple_25_2.cs index 393358299..f01be29c2 100644 --- a/system/scripts/zone/content/r1/npcs/fields/f_maple_25_2.cs +++ b/system/scripts/zone/content/r1/npcs/fields/f_maple_25_2.cs @@ -14,6 +14,6 @@ protected override void Load() { // Track NPCs //--------------------------------------------------------------------------- - AddTrackNPC(157035, "", "f_maple_25_2", -78.02134, 34.58647, 382.6509, 320, "f_maple_25_2_elt", 0); + AddTrackNPC(157035, "", "f_maple_25_2", -78.02134, 34.58647, 382.6509, 320, "f_maple_25_2_elt", 2, 1); } } diff --git a/system/scripts/zone/content/r1/npcs/fields/f_maple_25_3.cs b/system/scripts/zone/content/r1/npcs/fields/f_maple_25_3.cs index 4d1d5261e..21cfb37cb 100644 --- a/system/scripts/zone/content/r1/npcs/fields/f_maple_25_3.cs +++ b/system/scripts/zone/content/r1/npcs/fields/f_maple_25_3.cs @@ -14,6 +14,6 @@ protected override void Load() { // Track NPCs //--------------------------------------------------------------------------- - AddTrackNPC(157036, "", "f_maple_25_3", -917.34, 36.80652, -444.9715, 0, "f_maple_25_3_elt"); + AddTrackNPC(157036, "", "f_maple_25_3", -917.34, 36.80652, -444.9715, 0, "f_maple_25_3_elt", 2, 1); } } diff --git a/system/scripts/zone/content/r1/npcs/fields/f_nicopolis_81_2.cs b/system/scripts/zone/content/r1/npcs/fields/f_nicopolis_81_2.cs index cbdbb0b0d..f5475a1ee 100644 --- a/system/scripts/zone/content/r1/npcs/fields/f_nicopolis_81_2.cs +++ b/system/scripts/zone/content/r1/npcs/fields/f_nicopolis_81_2.cs @@ -14,6 +14,6 @@ protected override void Load() { // Track NPCs //--------------------------------------------------------------------------- - AddTrackNPC(153232, "", "f_nicopolis_81_2", 60.4, 2.22, -1645, 0, "f_nicopolis_81_2_elt"); + AddTrackNPC(153232, "", "f_nicopolis_81_2", 60.4, 2.22, -1645, 0, "f_nicopolis_81_2_elt", 2, 1); } } diff --git a/system/scripts/zone/content/r1/npcs/fields/f_nicopolis_81_3.cs b/system/scripts/zone/content/r1/npcs/fields/f_nicopolis_81_3.cs index 46b608a45..bfd9d3415 100644 --- a/system/scripts/zone/content/r1/npcs/fields/f_nicopolis_81_3.cs +++ b/system/scripts/zone/content/r1/npcs/fields/f_nicopolis_81_3.cs @@ -14,6 +14,6 @@ protected override void Load() { // Track NPCs //--------------------------------------------------------------------------- - AddTrackNPC(153233, "", "f_nicopolis_81_3", -372.14, -117.52, -888.32, 0, "f_nicopolis_81_3_elt"); + AddTrackNPC(153233, "", "f_nicopolis_81_3", -372.14, -157.52, -888.32, 1, "f_nicopolis_81_3_elt", 4, 1); } } diff --git a/system/scripts/zone/content/r1/npcs/fields/f_orchard_32_4.cs b/system/scripts/zone/content/r1/npcs/fields/f_orchard_32_4.cs index 547f239c1..5a9b2b859 100644 --- a/system/scripts/zone/content/r1/npcs/fields/f_orchard_32_4.cs +++ b/system/scripts/zone/content/r1/npcs/fields/f_orchard_32_4.cs @@ -14,7 +14,7 @@ protected override void Load() { // Track NPCs //--------------------------------------------------------------------------- - AddTrackNPC(156037, "", "f_orchard_32_4", 1402.254, 135.6041, 557.9661, 0, "f_orchard_32_4_wheel"); - AddTrackNPC(156038, "", "f_orchard_32_4", -333.8946, 19.81506, 796.1085, 90, "f_orchard_32_4_elt"); + AddTrackNPC(156037, "", "f_orchard_32_4", 1402.254, 135.6041, 557.9661, 0, "f_orchard_32_4_wheel", 2, 1); + AddTrackNPC(156038, "", "f_orchard_32_4", -333.8946, 19.81506, 796.1085, 90, "f_orchard_32_4_elt", 2, 1); } } diff --git a/system/scripts/zone/content/r1/npcs/fields/f_orchard_34_2.cs b/system/scripts/zone/content/r1/npcs/fields/f_orchard_34_2.cs index 65e585cbd..62b56bf1e 100644 --- a/system/scripts/zone/content/r1/npcs/fields/f_orchard_34_2.cs +++ b/system/scripts/zone/content/r1/npcs/fields/f_orchard_34_2.cs @@ -14,6 +14,6 @@ protected override void Load() { // Track NPCs //--------------------------------------------------------------------------- - AddTrackNPC(155059, "", "f_orchard_34_2", -1761.933, -357.2179, 384.1256, 90, "f_orchard_34_2_elevator", 3); + AddTrackNPC(155059, "", "f_orchard_34_2", -1761.933, -357.2179, 384.1256, 90, "f_orchard_34_2_elevator", 3, 2); } } diff --git a/system/scripts/zone/content/r1/npcs/fields/f_rokas_27.cs b/system/scripts/zone/content/r1/npcs/fields/f_rokas_27.cs index 8ff8c36fe..d9d151d92 100644 --- a/system/scripts/zone/content/r1/npcs/fields/f_rokas_27.cs +++ b/system/scripts/zone/content/r1/npcs/fields/f_rokas_27.cs @@ -14,6 +14,6 @@ protected override void Load() { // Track NPCs //--------------------------------------------------------------------------- - AddTrackNPC(153009, "", "f_rokas_27", 393.83, 1297.32, -1456.52, 250, "f_rokas27_cablecar"); + AddTrackNPC(153009, "", "f_rokas_27", 393.83, 1297.32, -1456.52, 250, "f_rokas27_cablecar", 2, 5); } } diff --git a/system/scripts/zone/content/r1/npcs/fields/f_whitetrees_22_2.cs b/system/scripts/zone/content/r1/npcs/fields/f_whitetrees_22_2.cs index a2f9dd60c..7dbcf02ec 100644 --- a/system/scripts/zone/content/r1/npcs/fields/f_whitetrees_22_2.cs +++ b/system/scripts/zone/content/r1/npcs/fields/f_whitetrees_22_2.cs @@ -14,6 +14,6 @@ protected override void Load() { // Track NPCs //--------------------------------------------------------------------------- - AddTrackNPC(153189, "", "f_whitetrees_22_2", 990.0172, 125.708, -499.8661, 0, "f_whitetrees_22_2_elt"); + AddTrackNPC(153189, "", "f_whitetrees_22_2", 990.0172, 125.708, -499.8661, 351, "f_whitetrees_22_2_elt", 2, 1); } } diff --git a/system/scripts/zone/content/r1/npcs/fields/f_whitetrees_23_1.cs b/system/scripts/zone/content/r1/npcs/fields/f_whitetrees_23_1.cs index 13cfb8ce1..fa29335fe 100644 --- a/system/scripts/zone/content/r1/npcs/fields/f_whitetrees_23_1.cs +++ b/system/scripts/zone/content/r1/npcs/fields/f_whitetrees_23_1.cs @@ -14,6 +14,6 @@ protected override void Load() { // Track NPCs //--------------------------------------------------------------------------- - AddTrackNPC(157041, "", "f_whitetrees_23_1", 527.8957, -140.5882, 190.1657, 43, "f_whitetrees_23_1_elt"); + AddTrackNPC(157041, "", "f_whitetrees_23_1", 527.8957, -140.5882, 190.1657, 43, "f_whitetrees_23_1_elt", 2, 1); } } diff --git a/system/scripts/zone/content/r1/npcs/fields/f_whitetrees_23_3.cs b/system/scripts/zone/content/r1/npcs/fields/f_whitetrees_23_3.cs index 84cd2e3fc..fc6bf81d3 100644 --- a/system/scripts/zone/content/r1/npcs/fields/f_whitetrees_23_3.cs +++ b/system/scripts/zone/content/r1/npcs/fields/f_whitetrees_23_3.cs @@ -14,6 +14,6 @@ protected override void Load() { // Track NPCs //--------------------------------------------------------------------------- - AddTrackNPC(157037, "", "f_whitetrees_23_3", -997.1872, 160.0814, 367.3382, 38, "f_whitetrees_23_3_elt"); + AddTrackNPC(157037, "", "f_whitetrees_23_3", -997.1872, 160.0814, 367.3382, 38, "f_whitetrees_23_3_elt", 2, 1); } } diff --git a/system/scripts/zone/content/r1/npcs/fields/f_whitetrees_56_1.cs b/system/scripts/zone/content/r1/npcs/fields/f_whitetrees_56_1.cs index e9a8ac1b1..dc64b953e 100644 --- a/system/scripts/zone/content/r1/npcs/fields/f_whitetrees_56_1.cs +++ b/system/scripts/zone/content/r1/npcs/fields/f_whitetrees_56_1.cs @@ -14,6 +14,6 @@ protected override void Load() { // Track NPCs //--------------------------------------------------------------------------- - AddTrackNPC(157038, "", "f_whitetrees_56_1", 1384.889, 68.06953, 243.3077, 10, "f_whitetrees_56_1_elt"); + AddTrackNPC(157038, "", "f_whitetrees_56_1", 1384.889, 68.06953, 243.3077, 10, "f_whitetrees_56_1_elt", 2, 1); } } From de6be1f1b5260908704dc459c2ce65213b1f096e Mon Sep 17 00:00:00 2001 From: MrShadow Date: Sat, 15 Nov 2025 13:33:48 -0300 Subject: [PATCH 4/4] Fix d_firetower_69_1 NPC Track --- .../zone/content/r1/npcs/dungeons/d_firetower_69_1.cs | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/system/scripts/zone/content/r1/npcs/dungeons/d_firetower_69_1.cs b/system/scripts/zone/content/r1/npcs/dungeons/d_firetower_69_1.cs index 33b6f80bc..e3075734a 100644 --- a/system/scripts/zone/content/r1/npcs/dungeons/d_firetower_69_1.cs +++ b/system/scripts/zone/content/r1/npcs/dungeons/d_firetower_69_1.cs @@ -14,10 +14,9 @@ protected override void Load() { // Track NPCs //--------------------------------------------------------------------------- - // TODO: Check rotation - // AddTrackNPC(154081, "", "d_firetower_69_1", -1674.647, 0, -1202.516, 3.571429, "d_firetower_69_1_elt"); - // AddTrackNPC(154081, "", "d_firetower_69_1", -1535.553, 0, -1129.915, 0, "d_firetower_69_1_elt"); - // AddTrackNPC(154083, "", "d_firetower_69_1", -1689.049, 0, -965.8168, 0, "d_firetower_69_1_elt"); - // AddTrackNPC(154083, "", "d_firetower_69_1", -1553.533, 0, -910.1417, 0, "d_firetower_69_1_elt"); + AddTrackNPC(154081, "", "d_firetower_69_1", -1674.647, -875.7016, -1202.516, 1, "d_firetower_69_1_elt", 2, 1); + AddTrackNPC(154081, "", "d_firetower_69_1", -1535.553, -878.40466, -1129.915, 1, "d_firetower_69_1_elt", 3, 1); + AddTrackNPC(154083, "", "d_firetower_69_1", -1689.049, -873.08508, -965.8168, 1, "d_firetower_69_1_elt", 4, 1); + AddTrackNPC(154083, "", "d_firetower_69_1", -1553.533, -880.21301, -910.1417, 182, "d_firetower_69_1_elt", 5, 1); } }