From b68d13ea7fe841d44285f13f0d516955c4d343f0 Mon Sep 17 00:00:00 2001 From: Filip Maj Date: Sat, 2 Apr 2016 17:56:01 -0400 Subject: [PATCH 01/10] Cleaned up the lua calls and renamed "onInstantiation" to "init". Added a "onSpawn" callback but still working on it. Added the "ActorSpecialGraphicPacket" and functions to use it. --- .../FFXIVClassic Map Server.csproj | 1 + .../actors/chara/Character.cs | 7 ++ .../actors/chara/npc/Npc.cs | 2 +- .../actors/chara/player/Player.cs | 11 +++ .../dataobjects/ConnectedPlayer.cs | 1 + FFXIVClassic Map Server/lua/LuaEngine.cs | 92 ++++++++++--------- .../send/Actor/ActorSpecialGraphicPacket.cs | 36 ++++++++ 7 files changed, 108 insertions(+), 42 deletions(-) create mode 100644 FFXIVClassic Map Server/packets/send/Actor/ActorSpecialGraphicPacket.cs diff --git a/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj b/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj index 27a9891d..2ecccff3 100644 --- a/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj +++ b/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj @@ -134,6 +134,7 @@ + diff --git a/FFXIVClassic Map Server/actors/chara/Character.cs b/FFXIVClassic Map Server/actors/chara/Character.cs index 8ada9422..dd5f5266 100644 --- a/FFXIVClassic Map Server/actors/chara/Character.cs +++ b/FFXIVClassic Map Server/actors/chara/Character.cs @@ -81,6 +81,13 @@ namespace FFXIVClassic_Map_Server.Actors return SetActorIdleAnimationPacket.buildPacket(actorId, playerActorId, animationId); } + public void setQuestIcon(Player player, bool hasIcon) + { + ActorSpecialGraphicPacket.buildPacket(player.actorId, actorId, hasIcon ? ActorSpecialGraphicPacket.QUEST : 0x0).debugPrintSubPacket(); + //player.queuePacket(ActorSpecialGraphicPacket.buildPacket(player.actorId, actorId, hasIcon ? ActorSpecialGraphicPacket.QUEST : 0x0)); + + } + } } diff --git a/FFXIVClassic Map Server/actors/chara/npc/Npc.cs b/FFXIVClassic Map Server/actors/chara/npc/Npc.cs index 9e43c677..f84b4e24 100644 --- a/FFXIVClassic Map Server/actors/chara/npc/Npc.cs +++ b/FFXIVClassic Map Server/actors/chara/npc/Npc.cs @@ -50,7 +50,7 @@ namespace FFXIVClassic_Map_Server.Actors List lParams; Player player = Server.GetWorldManager().GetPCInWorld(playerActorId); - lParams = LuaEngine.doActorOnInstantiate(player, this); + lParams = LuaEngine.doActorInstantiate(player, this); if (lParams == null) { diff --git a/FFXIVClassic Map Server/actors/chara/player/Player.cs b/FFXIVClassic Map Server/actors/chara/player/Player.cs index 9ef1b188..bcb44705 100644 --- a/FFXIVClassic Map Server/actors/chara/player/Player.cs +++ b/FFXIVClassic Map Server/actors/chara/player/Player.cs @@ -965,6 +965,17 @@ namespace FFXIVClassic_Map_Server.Actors return null; } + public Quest getQuest(string name) + { + for (int i = 0; i < questScenario.Length; i++) + { + if (questScenario[i] != null && questScenario[i].actorName.Equals(name)) + return questScenario[i]; + } + + return null; + } + public bool hasQuest(uint id) { for (int i = 0; i < questScenario.Length; i++) diff --git a/FFXIVClassic Map Server/dataobjects/ConnectedPlayer.cs b/FFXIVClassic Map Server/dataobjects/ConnectedPlayer.cs index 455448dc..567aec3c 100644 --- a/FFXIVClassic Map Server/dataobjects/ConnectedPlayer.cs +++ b/FFXIVClassic Map Server/dataobjects/ConnectedPlayer.cs @@ -2,6 +2,7 @@ using FFXIVClassic_Lobby_Server.common; using FFXIVClassic_Lobby_Server.packets; using FFXIVClassic_Map_Server.Actors; +using FFXIVClassic_Map_Server.lua; using FFXIVClassic_Map_Server.packets.send.actor; using System; using System.Collections.Generic; diff --git a/FFXIVClassic Map Server/lua/LuaEngine.cs b/FFXIVClassic Map Server/lua/LuaEngine.cs index a9d18ee5..7a7603bd 100644 --- a/FFXIVClassic Map Server/lua/LuaEngine.cs +++ b/FFXIVClassic Map Server/lua/LuaEngine.cs @@ -31,7 +31,7 @@ namespace FFXIVClassic_Map_Server.lua UserData.RegistrationPolicy = InteropRegistrationPolicy.Automatic; } - public static List doActorOnInstantiate(Player player, Actor target) + public static List doActorInstantiate(Player player, Actor target) { string luaPath; @@ -39,14 +39,10 @@ namespace FFXIVClassic_Map_Server.lua { luaPath = String.Format(FILEPATH_NPCS, target.zoneId, target.getName()); if (File.Exists(luaPath)) - { - Script script = new Script(); - ((ScriptLoaderBase)script.Options.ScriptLoader).ModulePaths = new string[] { "./scripts/?", "./scripts/?.lua" }; - script.Globals["getStaticActor"] = (Func)Server.getStaticActors; - script.Globals["getWorldMaster"] = (Func)Server.GetWorldManager().GetActor; - script.Globals["getItemGamedata"] = (Func)Server.getItemGamedata; - script.DoFile(luaPath); - DynValue result = script.Call(script.Globals["onInstantiate"], target); + { + Script script = loadScript(luaPath); + + DynValue result = script.Call(script.Globals["init"], target); List lparams = LuaUtils.createLuaParamList(result); return lparams; } @@ -80,13 +76,7 @@ namespace FFXIVClassic_Map_Server.lua if (File.Exists(luaPath)) { - Script script = new Script(); - ((ScriptLoaderBase)script.Options.ScriptLoader).ModulePaths = new string[] { "./scripts/?", "./scripts/?.lua" }; - script.Globals["getWorldManager"] = (Func)Server.GetWorldManager; - script.Globals["getStaticActor"] = (Func)Server.getStaticActors; - script.Globals["getWorldMaster"] = (Func)Server.GetWorldManager().GetActor; - script.Globals["getItemGamedata"] = (Func)Server.getItemGamedata; - script.DoFile(luaPath); + Script script = loadScript(luaPath); //Have to do this to combine LuaParams List objects = new List(); @@ -98,7 +88,8 @@ namespace FFXIVClassic_Map_Server.lua objects.AddRange(LuaUtils.createLuaParamObjectList(eventStart.luaParams)); //Run Script - DynValue result = script.Call(script.Globals["onEventStarted"], objects.ToArray()); + if (!script.Globals.Get("onEventStarted").IsNil()) + script.Call(script.Globals["onEventStarted"], objects.ToArray()); } else { @@ -110,6 +101,28 @@ namespace FFXIVClassic_Map_Server.lua } + public static void doActorOnSpawn(Player player, Npc target) + { + string luaPath = String.Format(FILEPATH_NPCS, target.zoneId, target.getName()); + + if (File.Exists(luaPath)) + { + Script script = loadScript(luaPath); + + //Run Script + if (!script.Globals.Get("onSpawn").IsNil()) + script.Call(script.Globals["onSpawn"], player, target); + } + else + { + List sendError = new List(); + sendError.Add(EndEventPacket.buildPacket(player.actorId, player.eventCurrentOwner, player.eventCurrentStarter)); + player.sendMessage(SendMessagePacket.MESSAGE_TYPE_SYSTEM_ERROR, "", String.Format("ERROR: Could not find script for actor {0}.", target.getName())); + player.playerSession.queuePacket(BasePacket.createPacket(sendError, true, false)); + } + + } + public static void doActorOnEventUpdated(Player player, Actor target, EventUpdatePacket eventUpdate) { string luaPath; @@ -123,13 +136,7 @@ namespace FFXIVClassic_Map_Server.lua if (File.Exists(luaPath)) { - Script script = new Script(); - ((ScriptLoaderBase)script.Options.ScriptLoader).ModulePaths = new string[] { "./scripts/?", "./scripts/?.lua" }; - script.Globals["getWorldManager"] = (Func)Server.GetWorldManager; - script.Globals["getStaticActor"] = (Func)Server.getStaticActors; - script.Globals["getWorldMaster"] = (Func)Server.GetWorldManager().GetActor; - script.Globals["getItemGamedata"] = (Func)Server.getItemGamedata; - script.DoFile(luaPath); + Script script = loadScript(luaPath); //Have to do this to combine LuaParams List objects = new List(); @@ -139,7 +146,8 @@ namespace FFXIVClassic_Map_Server.lua objects.AddRange(LuaUtils.createLuaParamObjectList(eventUpdate.luaParams)); //Run Script - DynValue result = script.Call(script.Globals["onEventUpdate"], objects.ToArray()); + if (!script.Globals.Get("onEventUpdate").IsNil()) + script.Call(script.Globals["onEventUpdate"], objects.ToArray()); } else { @@ -156,16 +164,11 @@ namespace FFXIVClassic_Map_Server.lua if (File.Exists(luaPath)) { - Script script = new Script(); - ((ScriptLoaderBase)script.Options.ScriptLoader).ModulePaths = new string[] { "./scripts/?", "./scripts/?.lua" }; - script.Globals["getWorldManager"] = (Func)Server.GetWorldManager; - script.Globals["getStaticActor"] = (Func)Server.getStaticActors; - script.Globals["getWorldMaster"] = (Func)Server.GetWorldManager().GetActor; - script.Globals["getItemGamedata"] = (Func)Server.getItemGamedata; - script.DoFile(luaPath); + Script script = loadScript(luaPath); //Run Script - DynValue result = script.Call(script.Globals["onZoneIn"], player); + if (!script.Globals.Get("onZoneIn").IsNil()) + script.Call(script.Globals["onZoneIn"], player); } } @@ -173,18 +176,25 @@ namespace FFXIVClassic_Map_Server.lua { if (File.Exists(FILEPATH_PLAYER)) { - Script script = new Script(); - ((ScriptLoaderBase)script.Options.ScriptLoader).ModulePaths = new string[] { "./scripts/?", "./scripts/?.lua" }; - script.Globals["getWorldManager"] = (Func)Server.GetWorldManager; - script.Globals["getStaticActor"] = (Func)Server.getStaticActors; - script.Globals["getWorldMaster"] = (Func)Server.GetWorldManager().GetActor; - script.Globals["getItemGamedata"] = (Func)Server.getItemGamedata; - script.DoFile(FILEPATH_PLAYER); + Script script = loadScript(FILEPATH_PLAYER); //Run Script - DynValue result = script.Call(script.Globals["onLogin"], player); + if (!script.Globals.Get("onZoneIn").IsNil()) + script.Call(script.Globals["onZoneIn"], player); } } + private static Script loadScript(string filename) + { + Script script = new Script(); + ((FileSystemScriptLoader)script.Options.ScriptLoader).ModulePaths = FileSystemScriptLoader.UnpackStringPaths("./scripts/?;./scripts/?.lua"); + script.Globals["getWorldManager"] = (Func)Server.GetWorldManager; + script.Globals["getStaticActor"] = (Func)Server.getStaticActors; + script.Globals["getWorldMaster"] = (Func)Server.GetWorldManager().GetActor; + script.Globals["getItemGamedata"] = (Func)Server.getItemGamedata; + script.DoFile(filename); + return script; + } + } } diff --git a/FFXIVClassic Map Server/packets/send/Actor/ActorSpecialGraphicPacket.cs b/FFXIVClassic Map Server/packets/send/Actor/ActorSpecialGraphicPacket.cs new file mode 100644 index 00000000..d2604645 --- /dev/null +++ b/FFXIVClassic Map Server/packets/send/Actor/ActorSpecialGraphicPacket.cs @@ -0,0 +1,36 @@ +using FFXIVClassic_Lobby_Server.packets; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FFXIVClassic_Map_Server.packets.send.actor +{ + class ActorSpecialGraphicPacket + { + public const int NONE = 0x0; + public const int QUEST = 0x2; + public const int NOGRAPHIC = 0x3; + public const int QUEST_IMPORTANT = 0x4; + + public const ushort OPCODE = 0x00E3; + public const uint PACKET_SIZE = 0x28; + + public static SubPacket buildPacket(uint playerActorID, uint targetActorID, int iconCode) + { + byte[] data = new byte[PACKET_SIZE - 0x20]; + + using (MemoryStream mem = new MemoryStream(data)) + { + using (BinaryWriter binWriter = new BinaryWriter(mem)) + { + binWriter.Write((Int32)iconCode); + } + } + + return new SubPacket(OPCODE, targetActorID, playerActorID, data); + } + } +} From 1f5788def8efcef02b07d1cda24db6bb79cbda4f Mon Sep 17 00:00:00 2001 From: Filip Maj Date: Thu, 7 Apr 2016 22:32:04 -0400 Subject: [PATCH 02/10] Redundent zoneid was redundent. --- FFXIVClassic Map Server/WorldManager.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/FFXIVClassic Map Server/WorldManager.cs b/FFXIVClassic Map Server/WorldManager.cs index cbac035a..f43fef23 100644 --- a/FFXIVClassic Map Server/WorldManager.cs +++ b/FFXIVClassic Map Server/WorldManager.cs @@ -347,7 +347,7 @@ namespace FFXIVClassic_Map_Server } //Moves actor to new zone, and sends packets to spawn at the given zone entrance - public void DoZoneChange(Player player, uint destinationZoneId, uint zoneEntrance) + public void DoZoneChange(Player player, uint zoneEntrance) { if (!zoneEntranceList.ContainsKey(zoneEntrance)) { @@ -356,7 +356,7 @@ namespace FFXIVClassic_Map_Server } ZoneEntrance ze = zoneEntranceList[zoneEntrance]; - DoZoneChange(player, destinationZoneId, ze.privateAreaName, ze.spawnType, ze.spawnX, ze.spawnY, ze.spawnZ, ze.spawnRotation); + DoZoneChange(player, ze.zoneId, ze.privateAreaName, ze.spawnType, ze.spawnX, ze.spawnY, ze.spawnZ, ze.spawnRotation); } //Moves actor to new zone, and sends packets to spawn at the given coords. From c0cd7555e1550832d808b50f3bb11015a79b6b89 Mon Sep 17 00:00:00 2001 From: Filip Maj Date: Thu, 7 Apr 2016 22:34:10 -0400 Subject: [PATCH 03/10] -Fixed up the quest flag functions. -Renamed the ActorSpecialGraphicPacket to SetActorQuestGraphic as those icons all have to do with questing. -Got onSpawn to work and implemented the quest graphics. -Added new QuestDirector class. --- .../actors/area/PrivateArea.cs | 9 ++- .../actors/chara/Character.cs | 6 +- .../actors/chara/player/Player.cs | 23 ++++--- .../director/quest/QuestDirectorMan0L001..cs | 39 +++++++++++ FFXIVClassic Map Server/actors/quest/Quest.cs | 2 +- .../dataobjects/ConnectedPlayer.cs | 24 ++++--- FFXIVClassic Map Server/lua/LuaEngine.cs | 64 +++++++++++++------ .../send/Actor/ActorSpecialGraphicPacket.cs | 2 +- 8 files changed, 120 insertions(+), 49 deletions(-) create mode 100644 FFXIVClassic Map Server/actors/director/quest/QuestDirectorMan0L001..cs diff --git a/FFXIVClassic Map Server/actors/area/PrivateArea.cs b/FFXIVClassic Map Server/actors/area/PrivateArea.cs index ab788357..3c6f6726 100644 --- a/FFXIVClassic Map Server/actors/area/PrivateArea.cs +++ b/FFXIVClassic Map Server/actors/area/PrivateArea.cs @@ -35,7 +35,14 @@ namespace FFXIVClassic_Map_Server.actors.area public override SubPacket createScriptBindPacket(uint playerActorId) { List lParams; - lParams = LuaUtils.createLuaParamList("/Area/PrivateArea/" + className, false, true, zoneName, privateAreaName, 0x9E, canRideChocobo ? (byte)1 : (byte)0, canStealth, isInn, false, false, false, false, false, false); + + string path = className; + + if (className.ToLower().Contains("content")) + path = "Content/" + className; + + lParams = LuaUtils.createLuaParamList("/Area/PrivateArea/" + path, false, true, zoneName, privateAreaName, 0x9E, canRideChocobo ? (byte)1 : (byte)0, canStealth, isInn, false, false, false, false, false, false); + ActorInstantiatePacket.buildPacket(actorId, playerActorId, actorName, className, lParams).debugPrintSubPacket(); return ActorInstantiatePacket.buildPacket(actorId, playerActorId, actorName, className, lParams); } diff --git a/FFXIVClassic Map Server/actors/chara/Character.cs b/FFXIVClassic Map Server/actors/chara/Character.cs index dd5f5266..c453e82f 100644 --- a/FFXIVClassic Map Server/actors/chara/Character.cs +++ b/FFXIVClassic Map Server/actors/chara/Character.cs @@ -81,11 +81,9 @@ namespace FFXIVClassic_Map_Server.Actors return SetActorIdleAnimationPacket.buildPacket(actorId, playerActorId, animationId); } - public void setQuestIcon(Player player, bool hasIcon) + public void setQuestGraphic(Player player, int graphicNum) { - ActorSpecialGraphicPacket.buildPacket(player.actorId, actorId, hasIcon ? ActorSpecialGraphicPacket.QUEST : 0x0).debugPrintSubPacket(); - //player.queuePacket(ActorSpecialGraphicPacket.buildPacket(player.actorId, actorId, hasIcon ? ActorSpecialGraphicPacket.QUEST : 0x0)); - + player.queuePacket(SetActorQuestGraphicPacket.buildPacket(player.actorId, actorId, graphicNum)); } } diff --git a/FFXIVClassic Map Server/actors/chara/player/Player.cs b/FFXIVClassic Map Server/actors/chara/player/Player.cs index bcb44705..4c5849d8 100644 --- a/FFXIVClassic Map Server/actors/chara/player/Player.cs +++ b/FFXIVClassic Map Server/actors/chara/player/Player.cs @@ -125,7 +125,7 @@ namespace FFXIVClassic_Map_Server.Actors public Quest[] questScenario = new Quest[16]; public Quest[] questGuildleve = new Quest[8]; - public Director currentDirector;// = new OpeningDirector(0x46080012); + public Director currentDirector = new OpeningDirector(0x46080012); public PlayerWork playerWork = new PlayerWork(); @@ -590,6 +590,12 @@ namespace FFXIVClassic_Map_Server.Actors playerSession.queuePacket(packet, true, false); } + public void queuePackets(List packets) + { + foreach (SubPacket subpacket in packets) + playerSession.queuePacket(subpacket, true, false); + } + public void broadcastPacket(SubPacket packet, bool sendToSelf) { if (sendToSelf) @@ -969,7 +975,7 @@ namespace FFXIVClassic_Map_Server.Actors { for (int i = 0; i < questScenario.Length; i++) { - if (questScenario[i] != null && questScenario[i].actorName.Equals(name)) + if (questScenario[i] != null && questScenario[i].actorName.ToLower().Equals(name.ToLower())) return questScenario[i]; } @@ -991,7 +997,11 @@ namespace FFXIVClassic_Map_Server.Actors { if (directorType.Equals("openingDirector")) { - currentDirector = new OpeningDirector(0x46080012); + currentDirector = new OpeningDirector(0x46080012); + } + else if (directorType.Equals("QuestDirectorMan0l001")) + { + currentDirector = new QuestDirectorMan0l001(0x46080012); } queuePacket(RemoveActorPacket.buildPacket(actorId, 0x46080012)); @@ -1077,12 +1087,7 @@ namespace FFXIVClassic_Map_Server.Actors { //Update Instance - List instanceUpdatePackets = playerSession.updateInstance(zone.getActorsAroundActor(this, 50)); - foreach (BasePacket bp in instanceUpdatePackets) - { - // bp.debugPrintPacket(); - queuePacket(bp); - } + playerSession.updateInstance(zone.getActorsAroundActor(this, 50)); } diff --git a/FFXIVClassic Map Server/actors/director/quest/QuestDirectorMan0L001..cs b/FFXIVClassic Map Server/actors/director/quest/QuestDirectorMan0L001..cs new file mode 100644 index 00000000..6f00a12a --- /dev/null +++ b/FFXIVClassic Map Server/actors/director/quest/QuestDirectorMan0L001..cs @@ -0,0 +1,39 @@ +using FFXIVClassic_Lobby_Server.packets; +using FFXIVClassic_Map_Server.lua; +using FFXIVClassic_Map_Server.packets.send.actor; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FFXIVClassic_Map_Server.actors.director +{ + class QuestDirectorMan0l001 : Director + { + public QuestDirectorMan0l001(uint id) : base(id) + { + this.displayNameId = 0; + this.customDisplayName = "questDirect_ocn0Btl02_01"; + + this.actorName = "questDirect_ocn0Btl02_01@0C196"; + this.className = "QuestDirectorMan0l001"; + + this.eventConditions = new EventList(); + + List noticeEventList = new List(); + + noticeEventList.Add(new EventList.NoticeEventCondition("noticeEvent", 0xE, 0x0)); + noticeEventList.Add(new EventList.NoticeEventCondition("noticeRequest", 0x0, 0x1)); + + this.eventConditions.noticeEventConditions = noticeEventList; + } + + public override SubPacket createScriptBindPacket(uint playerActorId) + { + List lParams; + lParams = LuaUtils.createLuaParamList("/Director/Quest/QuestDirectorMan0l001", false, false, false, false, 0x7532); + return ActorInstantiatePacket.buildPacket(actorId, playerActorId, actorName, className, lParams); + } + } +} diff --git a/FFXIVClassic Map Server/actors/quest/Quest.cs b/FFXIVClassic Map Server/actors/quest/Quest.cs index c125548e..707349b8 100644 --- a/FFXIVClassic Map Server/actors/quest/Quest.cs +++ b/FFXIVClassic Map Server/actors/quest/Quest.cs @@ -68,7 +68,7 @@ namespace FFXIVClassic_Map_Server.Actors return false; } else - return (questFlags & (1 << bitIndex)) == 1; + return (questFlags & (1 << bitIndex)) == (1 << bitIndex); } public int GetPhase() diff --git a/FFXIVClassic Map Server/dataobjects/ConnectedPlayer.cs b/FFXIVClassic Map Server/dataobjects/ConnectedPlayer.cs index 567aec3c..2a966f81 100644 --- a/FFXIVClassic Map Server/dataobjects/ConnectedPlayer.cs +++ b/FFXIVClassic Map Server/dataobjects/ConnectedPlayer.cs @@ -113,7 +113,7 @@ namespace FFXIVClassic_Map_Server.dataobjects } - public List updateInstance(List list) + public void updateInstance(List list) { List basePackets = new List(); List removeActorSubpackets = new List(); @@ -124,14 +124,11 @@ namespace FFXIVClassic_Map_Server.dataobjects { if (!list.Contains(actorInstanceList[i])) { - removeActorSubpackets.Add(RemoveActorPacket.buildPacket(playerActor.actorId, actorInstanceList[i].actorId)); + getActor().queuePacket(RemoveActorPacket.buildPacket(playerActor.actorId, actorInstanceList[i].actorId)); actorInstanceList.RemoveAt(i); } } - if (removeActorSubpackets.Count != 0) - basePackets.Add(BasePacket.createPacket(removeActorSubpackets, true, false)); - //Add new actors or move for (int i = 0; i < list.Count; i++) { @@ -142,21 +139,22 @@ namespace FFXIVClassic_Map_Server.dataobjects if (actorInstanceList.Contains(actor)) { - posUpdateSubpackets.Add(actor.createPositionUpdatePacket(playerActor.actorId)); + getActor().queuePacket(actor.createPositionUpdatePacket(playerActor.actorId)); } else { - basePackets.Add(actor.getSpawnPackets(playerActor.actorId, 1)); - basePackets.Add(actor.getInitPackets(playerActor.actorId)); - basePackets.Add(actor.getSetEventStatusPackets(playerActor.actorId)); + getActor().queuePacket(actor.getSpawnPackets(playerActor.actorId, 1)); + getActor().queuePacket(actor.getInitPackets(playerActor.actorId)); + getActor().queuePacket(actor.getSetEventStatusPackets(playerActor.actorId)); actorInstanceList.Add(actor); + + if (actor is Npc) + { + LuaEngine.doActorOnSpawn(getActor(), (Npc)actor); + } } } - if (posUpdateSubpackets.Count > 0) - basePackets.Add(BasePacket.createPacket(posUpdateSubpackets, true, false)); - - return basePackets; } diff --git a/FFXIVClassic Map Server/lua/LuaEngine.cs b/FFXIVClassic Map Server/lua/LuaEngine.cs index 7a7603bd..8d8d92eb 100644 --- a/FFXIVClassic Map Server/lua/LuaEngine.cs +++ b/FFXIVClassic Map Server/lua/LuaEngine.cs @@ -1,4 +1,5 @@ using FFXIVClassic_Lobby_Server; +using FFXIVClassic_Lobby_Server.common; using FFXIVClassic_Lobby_Server.packets; using FFXIVClassic_Map_Server.actors.director; using FFXIVClassic_Map_Server.Actors; @@ -42,16 +43,16 @@ namespace FFXIVClassic_Map_Server.lua { Script script = loadScript(luaPath); + if (script == null) + return null; + DynValue result = script.Call(script.Globals["init"], target); List lparams = LuaUtils.createLuaParamList(result); return lparams; } else { - List sendError = new List(); - sendError.Add(EndEventPacket.buildPacket(player.actorId, player.eventCurrentOwner, player.eventCurrentStarter)); - player.sendMessage(SendMessagePacket.MESSAGE_TYPE_SYSTEM_ERROR, "", String.Format("ERROR: Could not find script for actor {0}.", target.getName())); - player.playerSession.queuePacket(BasePacket.createPacket(sendError, true, false)); + SendError(player, String.Format("ERROR: Could not find script for actor {0}.", target.getName())); return null; } } @@ -78,6 +79,9 @@ namespace FFXIVClassic_Map_Server.lua { Script script = loadScript(luaPath); + if (script == null) + return; + //Have to do this to combine LuaParams List objects = new List(); objects.Add(player); @@ -93,10 +97,7 @@ namespace FFXIVClassic_Map_Server.lua } else { - List sendError = new List(); - sendError.Add(EndEventPacket.buildPacket(player.actorId, player.eventCurrentOwner, player.eventCurrentStarter)); - player.sendMessage(SendMessagePacket.MESSAGE_TYPE_SYSTEM_ERROR, "", String.Format("ERROR: Could not find script for actor {0}.", target.getName())); - player.playerSession.queuePacket(BasePacket.createPacket(sendError, true, false)); + SendError(player, String.Format("ERROR: Could not find script for actor {0}.", target.getName())); } } @@ -108,17 +109,17 @@ namespace FFXIVClassic_Map_Server.lua if (File.Exists(luaPath)) { Script script = loadScript(luaPath); - + + if (script == null) + return; + //Run Script if (!script.Globals.Get("onSpawn").IsNil()) script.Call(script.Globals["onSpawn"], player, target); } else { - List sendError = new List(); - sendError.Add(EndEventPacket.buildPacket(player.actorId, player.eventCurrentOwner, player.eventCurrentStarter)); - player.sendMessage(SendMessagePacket.MESSAGE_TYPE_SYSTEM_ERROR, "", String.Format("ERROR: Could not find script for actor {0}.", target.getName())); - player.playerSession.queuePacket(BasePacket.createPacket(sendError, true, false)); + SendError(player, String.Format("ERROR: Could not find script for actor {0}.", target.getName())); } } @@ -138,11 +139,14 @@ namespace FFXIVClassic_Map_Server.lua { Script script = loadScript(luaPath); + if (script == null) + return; + //Have to do this to combine LuaParams List objects = new List(); objects.Add(player); objects.Add(target); - objects.Add(eventUpdate.step); + objects.Add(eventUpdate.val2); objects.AddRange(LuaUtils.createLuaParamObjectList(eventUpdate.luaParams)); //Run Script @@ -151,10 +155,7 @@ namespace FFXIVClassic_Map_Server.lua } else { - List sendError = new List(); - sendError.Add(EndEventPacket.buildPacket(player.actorId, player.eventCurrentOwner, player.eventCurrentStarter)); - player.sendMessage(SendMessagePacket.MESSAGE_TYPE_SYSTEM_ERROR, "", String.Format("ERROR: Could not find script for actor {0}.", target.getName())); - player.playerSession.queuePacket(BasePacket.createPacket(sendError, true, false)); + SendError(player, String.Format("ERROR: Could not find script for actor {0}.", target.getName())); } } @@ -165,7 +166,10 @@ namespace FFXIVClassic_Map_Server.lua if (File.Exists(luaPath)) { Script script = loadScript(luaPath); - + + if (script == null) + return; + //Run Script if (!script.Globals.Get("onZoneIn").IsNil()) script.Call(script.Globals["onZoneIn"], player); @@ -178,6 +182,9 @@ namespace FFXIVClassic_Map_Server.lua { Script script = loadScript(FILEPATH_PLAYER); + if (script == null) + return; + //Run Script if (!script.Globals.Get("onZoneIn").IsNil()) script.Call(script.Globals["onZoneIn"], player); @@ -192,9 +199,26 @@ namespace FFXIVClassic_Map_Server.lua script.Globals["getStaticActor"] = (Func)Server.getStaticActors; script.Globals["getWorldMaster"] = (Func)Server.GetWorldManager().GetActor; script.Globals["getItemGamedata"] = (Func)Server.getItemGamedata; - script.DoFile(filename); + + try + { + script.DoFile(filename); + } + catch(SyntaxErrorException e) + { + Log.error(String.Format("LUAERROR: {0}.", e.DecoratedMessage)); + return null; + } return script; } + private static void SendError(Player player, string message) + { + List sendError = new List(); + sendError.Add(EndEventPacket.buildPacket(player.actorId, player.eventCurrentOwner, player.eventCurrentStarter)); + player.sendMessage(SendMessagePacket.MESSAGE_TYPE_SYSTEM_ERROR, "", message); + player.playerSession.queuePacket(BasePacket.createPacket(sendError, true, false)); + } + } } diff --git a/FFXIVClassic Map Server/packets/send/Actor/ActorSpecialGraphicPacket.cs b/FFXIVClassic Map Server/packets/send/Actor/ActorSpecialGraphicPacket.cs index d2604645..1efd25dd 100644 --- a/FFXIVClassic Map Server/packets/send/Actor/ActorSpecialGraphicPacket.cs +++ b/FFXIVClassic Map Server/packets/send/Actor/ActorSpecialGraphicPacket.cs @@ -8,7 +8,7 @@ using System.Threading.Tasks; namespace FFXIVClassic_Map_Server.packets.send.actor { - class ActorSpecialGraphicPacket + class SetActorQuestGraphicPacket { public const int NONE = 0x0; public const int QUEST = 0x2; From b8a3d4f1e039545ba9c712318050ba6578403935 Mon Sep 17 00:00:00 2001 From: Filip Maj Date: Sun, 10 Apr 2016 11:14:36 -0400 Subject: [PATCH 04/10] Added quest director class. --- FFXIVClassic Map Server/FFXIVClassic Map Server.csproj | 1 + FFXIVClassic Map Server/actors/chara/player/Player.cs | 8 ++++---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj b/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj index 2ecccff3..6a861225 100644 --- a/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj +++ b/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj @@ -72,6 +72,7 @@ + diff --git a/FFXIVClassic Map Server/actors/chara/player/Player.cs b/FFXIVClassic Map Server/actors/chara/player/Player.cs index 4c5849d8..d2bad572 100644 --- a/FFXIVClassic Map Server/actors/chara/player/Player.cs +++ b/FFXIVClassic Map Server/actors/chara/player/Player.cs @@ -125,7 +125,7 @@ namespace FFXIVClassic_Map_Server.Actors public Quest[] questScenario = new Quest[16]; public Quest[] questGuildleve = new Quest[8]; - public Director currentDirector = new OpeningDirector(0x46080012); + public Director currentDirector;// = new OpeningDirector(0x46080012); public PlayerWork playerWork = new PlayerWork(); @@ -1004,9 +1004,9 @@ namespace FFXIVClassic_Map_Server.Actors currentDirector = new QuestDirectorMan0l001(0x46080012); } - queuePacket(RemoveActorPacket.buildPacket(actorId, 0x46080012)); - queuePacket(currentDirector.getSpawnPackets(actorId)); - queuePacket(currentDirector.getInitPackets(actorId)); + // queuePacket(RemoveActorPacket.buildPacket(actorId, 0x46080012)); + // queuePacket(currentDirector.getSpawnPackets(actorId)); + // queuePacket(currentDirector.getInitPackets(actorId)); // queuePacket(currentDirector.getSetEventStatusPackets(actorId)); // currentDirector.getSpawnPackets(actorId).debugPrintPacket(); // currentDirector.getInitPackets(actorId).debugPrintPacket(); From fe111ab6ca44bfce98e74e5f9901e2b22f33c53b Mon Sep 17 00:00:00 2001 From: Filip Maj Date: Sun, 10 Apr 2016 13:11:12 -0400 Subject: [PATCH 05/10] Quest data is now saved/loaded from the DB. --- FFXIVClassic Map Server/Database.cs | 68 ++++++++++++++++++- .../actors/chara/player/Player.cs | 11 +++ FFXIVClassic Map Server/actors/quest/Quest.cs | 39 ++++++++--- 3 files changed, 108 insertions(+), 10 deletions(-) diff --git a/FFXIVClassic Map Server/Database.cs b/FFXIVClassic Map Server/Database.cs index 06a03b1e..881910bc 100644 --- a/FFXIVClassic Map Server/Database.cs +++ b/FFXIVClassic Map Server/Database.cs @@ -310,6 +310,56 @@ namespace FFXIVClassic_Lobby_Server } } + public static void saveQuest(Player player, Quest quest) + { + int slot = player.getQuestSlot(quest.actorId); + if (slot == -1) + { + Log.error(String.Format("Tried saving quest player didn't have: Player: {0:x}, QuestId: {0:x}", player.actorId, quest.actorId)); + return; + } + else + saveQuest(player, quest, slot); + } + + public static void saveQuest(Player player, Quest quest, int slot) + { + string query; + MySqlCommand cmd; + + using (MySqlConnection conn = new MySqlConnection(String.Format("Server={0}; Port={1}; Database={2}; UID={3}; Password={4}", ConfigConstants.DATABASE_HOST, ConfigConstants.DATABASE_PORT, ConfigConstants.DATABASE_NAME, ConfigConstants.DATABASE_USERNAME, ConfigConstants.DATABASE_PASSWORD))) + { + try + { + conn.Open(); + + query = @" + INSERT INTO characters_quest_scenario + (characterId, slot, questId, questData, questFlags) + VALUES + (@charaId, @slot, @questId, @questData, @questFlags) + ON DUPLICATE KEY UPDATE + questData = @questData, questFlags = @questFlags + "; + + cmd = new MySqlCommand(query, conn); + cmd.Parameters.AddWithValue("@charaId", player.actorId); + cmd.Parameters.AddWithValue("@slot", slot); + cmd.Parameters.AddWithValue("@questId", quest.actorId); + cmd.Parameters.AddWithValue("@questData", quest.GetSerializedQuestData()); + cmd.Parameters.AddWithValue("@questFlags", quest.GetQuestFlags()); + + cmd.ExecuteNonQuery(); + } + catch (MySqlException e) + { Console.WriteLine(e); } + finally + { + conn.Dispose(); + } + } + } + public static void loadPlayerCharacter(Player player) { string query; @@ -627,7 +677,9 @@ namespace FFXIVClassic_Lobby_Server query = @" SELECT slot, - questId + questId, + questData, + questFlags FROM characters_quest_scenario WHERE characterId = @charId"; cmd = new MySqlCommand(query, conn); @@ -638,9 +690,21 @@ namespace FFXIVClassic_Lobby_Server { int index = reader.GetUInt16(0); player.playerWork.questScenario[index] = 0xA0F00000 | reader.GetUInt32(1); + string questData = null; + uint questFlags = 0; + + if (!reader.IsDBNull(2)) + questData = reader.GetString(2); + else + questData = "{}"; + + if (!reader.IsDBNull(3)) + questFlags = reader.GetUInt32(3); + else + questFlags = 0; string questName = Server.getStaticActors(player.playerWork.questScenario[index]).actorName; - player.questScenario[index] = new Quest(player.playerWork.questScenario[index], questName); + player.questScenario[index] = new Quest(player, player.playerWork.questScenario[index], questName, questData, questFlags); } } diff --git a/FFXIVClassic Map Server/actors/chara/player/Player.cs b/FFXIVClassic Map Server/actors/chara/player/Player.cs index d2bad572..7405ed9d 100644 --- a/FFXIVClassic Map Server/actors/chara/player/Player.cs +++ b/FFXIVClassic Map Server/actors/chara/player/Player.cs @@ -993,6 +993,17 @@ namespace FFXIVClassic_Map_Server.Actors return false; } + public int getQuestSlot(uint id) + { + for (int i = 0; i < questScenario.Length; i++) + { + if (questScenario[i] != null && questScenario[i].actorId == (0xA0F00000 | id)) + return i; + } + + return -1; + } + public void setDirector(string directorType) { if (directorType.Equals("openingDirector")) diff --git a/FFXIVClassic Map Server/actors/quest/Quest.cs b/FFXIVClassic Map Server/actors/quest/Quest.cs index 707349b8..a8bd5c34 100644 --- a/FFXIVClassic Map Server/actors/quest/Quest.cs +++ b/FFXIVClassic Map Server/actors/quest/Quest.cs @@ -1,4 +1,6 @@ -using FFXIVClassic_Lobby_Server.common; +using FFXIVClassic_Lobby_Server; +using FFXIVClassic_Lobby_Server.common; +using Newtonsoft.Json; using System; using System.Collections.Generic; @@ -6,6 +8,7 @@ namespace FFXIVClassic_Map_Server.Actors { class Quest : Actor { + private Player owner; private int currentPhase = 0; private uint questFlags = 0; private Dictionary questData = new Dictionary(); @@ -13,17 +16,22 @@ namespace FFXIVClassic_Map_Server.Actors public Quest(uint actorID, string name) : base(actorID) { - actorName = name; + actorName = name; } - public void InitQuestData(string dataName, object initialValue) + public Quest(Player owner, uint actorID, string name, string questDataJson, uint questFlags) + : base(actorID) { - questData[dataName] = initialValue; + this.owner = owner; + actorName = name; + this.questFlags = questFlags; + this.questData = JsonConvert.DeserializeObject>(questDataJson); + if (questData == null) + questData = new Dictionary(); } - - public void UpdateQuestData(string dataName, object data) - { - if (questData.ContainsKey(dataName)) + + public void SetQuestData(string dataName, object data) + { questData[dataName] = data; //Inform update @@ -81,5 +89,20 @@ namespace FFXIVClassic_Map_Server.Actors currentPhase++; } + public uint GetQuestFlags() + { + return questFlags; + } + + public string GetSerializedQuestData() + { + return JsonConvert.SerializeObject(questData, Formatting.Indented); + } + + public void SaveData() + { + Database.saveQuest(owner, this); + } + } } From 108f5aa67732c1a43ee78c92d019dddfc9520935 Mon Sep 17 00:00:00 2001 From: Filip Maj Date: Mon, 11 Apr 2016 22:49:05 -0400 Subject: [PATCH 06/10] Fixed crash due to bad constructor for QuestDirectorMan0L001. Unsigned integers will also write out as lua 0-datatype. --- .../actors/director/quest/QuestDirectorMan0L001..cs | 2 +- FFXIVClassic Map Server/lua/LuaUtils.cs | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/FFXIVClassic Map Server/actors/director/quest/QuestDirectorMan0L001..cs b/FFXIVClassic Map Server/actors/director/quest/QuestDirectorMan0L001..cs index 6f00a12a..d7f2bfd0 100644 --- a/FFXIVClassic Map Server/actors/director/quest/QuestDirectorMan0L001..cs +++ b/FFXIVClassic Map Server/actors/director/quest/QuestDirectorMan0L001..cs @@ -32,7 +32,7 @@ namespace FFXIVClassic_Map_Server.actors.director public override SubPacket createScriptBindPacket(uint playerActorId) { List lParams; - lParams = LuaUtils.createLuaParamList("/Director/Quest/QuestDirectorMan0l001", false, false, false, false, 0x7532); + lParams = LuaUtils.createLuaParamList("/Director/Quest/QuestDirectorMan0l001", false, false, false, false, false, 0x7532); return ActorInstantiatePacket.buildPacket(actorId, playerActorId, actorName, className, lParams); } } diff --git a/FFXIVClassic Map Server/lua/LuaUtils.cs b/FFXIVClassic Map Server/lua/LuaUtils.cs index 38410542..101b9fd3 100644 --- a/FFXIVClassic Map Server/lua/LuaUtils.cs +++ b/FFXIVClassic Map Server/lua/LuaUtils.cs @@ -121,7 +121,11 @@ namespace FFXIVClassic_Map_Server { foreach (LuaParam l in luaParams) { - writer.Write((Byte)l.typeID); + if (l.typeID == 0x1) + writer.Write((Byte)0); + else + writer.Write((Byte)l.typeID); + switch (l.typeID) { case 0x0: //Int32 From d989ec2a586585632cdce0b5119170fc0b00fcd1 Mon Sep 17 00:00:00 2001 From: Filip Maj Date: Thu, 14 Apr 2016 08:30:21 -0400 Subject: [PATCH 07/10] Added two callbacks to the Director; onTalked and onCommand. Split the command and event starts and keep track of them separately. --- .../FFXIVClassic Map Server.csproj | 2 + FFXIVClassic Map Server/PacketProcessor.cs | 26 ++++-- FFXIVClassic Map Server/Server.cs | 26 ++++-- FFXIVClassic Map Server/WorldManager.cs | 9 +- .../actors/chara/player/Player.cs | 83 +++++++++++++------ .../actors/director/Director.cs | 19 ++++- .../actors/director/OpeningDirector.cs | 3 +- .../actors/director/WeatherDirector.cs | 4 +- .../director/quest/QuestDirectorMan0L001..cs | 4 +- FFXIVClassic Map Server/actors/quest/Quest.cs | 10 +++ FFXIVClassic Map Server/lua/LuaEngine.cs | 63 +++++++++++++- .../packets/send/_0x10Packet.cs | 31 +++++++ 12 files changed, 227 insertions(+), 53 deletions(-) create mode 100644 FFXIVClassic Map Server/packets/send/_0x10Packet.cs diff --git a/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj b/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj index 6a861225..b24f70a6 100644 --- a/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj +++ b/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj @@ -102,6 +102,7 @@ + @@ -244,6 +245,7 @@ + diff --git a/FFXIVClassic Map Server/PacketProcessor.cs b/FFXIVClassic Map Server/PacketProcessor.cs index 1c27dec5..83670ee2 100644 --- a/FFXIVClassic Map Server/PacketProcessor.cs +++ b/FFXIVClassic Map Server/PacketProcessor.cs @@ -249,19 +249,27 @@ namespace FFXIVClassic_Lobby_Server break; } */ - player.getActor().eventCurrentOwner = eventStart.scriptOwnerActorID; - player.getActor().eventCurrentStarter = eventStart.triggerName; - //Is it a static actor? If not look in the player's instance - Actor ownerActor = Server.getStaticActors(player.getActor().eventCurrentOwner); + Actor ownerActor = Server.getStaticActors(eventStart.scriptOwnerActorID); + if (ownerActor != null && ownerActor is Command) + { + player.getActor().currentCommand = eventStart.scriptOwnerActorID; + player.getActor().currentCommandName = eventStart.triggerName; + } + else + { + player.getActor().currentEventOwner = eventStart.scriptOwnerActorID; + player.getActor().currentEventName = eventStart.triggerName; + } + if (ownerActor == null) { //Is it a instance actor? - ownerActor = Server.GetWorldManager().GetActorInWorld(player.getActor().eventCurrentOwner); + ownerActor = Server.GetWorldManager().GetActorInWorld(player.getActor().currentEventOwner); if (ownerActor == null) { //Is it a Director? - if (player.getActor().currentDirector != null && player.getActor().eventCurrentOwner == player.getActor().currentDirector.actorId) + if (player.getActor().currentDirector != null && player.getActor().currentEventOwner == player.getActor().currentDirector.actorId) ownerActor = player.getActor().currentDirector; else { @@ -285,12 +293,12 @@ namespace FFXIVClassic_Lobby_Server Log.debug(String.Format("\n===Event UPDATE===\nSource Actor: 0x{0:X}\nCaller Actor: 0x{1:X}\nVal1: 0x{2:X}\nVal2: 0x{3:X}\nStep: 0x{4:X}\nParams: {5}", eventUpdate.actorID, eventUpdate.scriptOwnerActorID, eventUpdate.val1, eventUpdate.val2, eventUpdate.step, LuaUtils.dumpParams(eventUpdate.luaParams))); //Is it a static actor? If not look in the player's instance - Actor updateOwnerActor = Server.getStaticActors(player.getActor().eventCurrentOwner); + Actor updateOwnerActor = Server.getStaticActors(player.getActor().currentEventOwner); if (updateOwnerActor == null) { - updateOwnerActor = Server.GetWorldManager().GetActorInWorld(player.getActor().eventCurrentOwner); + updateOwnerActor = Server.GetWorldManager().GetActorInWorld(player.getActor().currentEventOwner); - if (player.getActor().currentDirector != null && player.getActor().eventCurrentOwner == player.getActor().currentDirector.actorId) + if (player.getActor().currentDirector != null && player.getActor().currentEventOwner == player.getActor().currentDirector.actorId) updateOwnerActor = player.getActor().currentDirector; if (updateOwnerActor == null) diff --git a/FFXIVClassic Map Server/Server.cs b/FFXIVClassic Map Server/Server.cs index c87f47a1..8f75ff7c 100644 --- a/FFXIVClassic Map Server/Server.cs +++ b/FFXIVClassic Map Server/Server.cs @@ -418,16 +418,22 @@ namespace FFXIVClassic_Lobby_Server } } - public void doWarp(ConnectedPlayer client, string zone, string privateArea, string sx, string sy, string sz) + public void doWarp(ConnectedPlayer client, string zone, string privateArea, string sx, string sy, string sz, string spawnType) { uint zoneId; float x,y,z; + byte sType; if (zone.ToLower().StartsWith("0x")) zoneId = Convert.ToUInt32(zone, 16); else zoneId = Convert.ToUInt32(zone); + if (spawnType.ToLower().StartsWith("0x")) + sType = Convert.ToByte(spawnType, 16); + else + sType = Convert.ToByte(spawnType); + if (mWorldManager.GetZone(zoneId) == null) { if (client != null) @@ -440,12 +446,20 @@ namespace FFXIVClassic_Lobby_Server z = Single.Parse(sz); if (client != null) - mWorldManager.DoZoneChange(client.getActor(), zoneId, privateArea, 0x2, x, y, z, 0.0f); + { + if (zoneId == client.getActor().zoneId) + mWorldManager.DoPlayerMoveInZone(client.getActor(), x, y, z, 0.0f, sType); + else + mWorldManager.DoZoneChange(client.getActor(), zoneId, privateArea, sType, x, y, z, 0.0f); + } else { foreach (KeyValuePair entry in mConnectedPlayerList) { - mWorldManager.DoZoneChange(entry.Value.getActor(), zoneId, privateArea, 0x2, x, y, z, 0.0f); + if (zoneId == entry.Value.getActor().zoneId) + mWorldManager.DoPlayerMoveInZone(entry.Value.getActor(), x, y, z, 0.0f, 0x0); + else + mWorldManager.DoZoneChange(entry.Value.getActor(), zoneId, privateArea, 0x2, x, y, z, 0.0f); } } } @@ -826,10 +840,10 @@ namespace FFXIVClassic_Lobby_Server { if (split.Length == 2) doWarp(client, split[1]); - else if (split.Length == 5) - doWarp(client, split[1], null, split[2], split[3], split[4]); else if (split.Length == 6) - doWarp(client, split[1], split[2], split[3], split[4], split[5]); + doWarp(client, split[1], null, split[2], split[3], split[4], split[5]); + else if (split.Length == 7) + doWarp(client, split[1], split[2], split[3], split[4], split[5], split[6]); return true; } else if (split[0].Equals("property")) diff --git a/FFXIVClassic Map Server/WorldManager.cs b/FFXIVClassic Map Server/WorldManager.cs index f43fef23..07119676 100644 --- a/FFXIVClassic Map Server/WorldManager.cs +++ b/FFXIVClassic Map Server/WorldManager.cs @@ -417,11 +417,11 @@ namespace FFXIVClassic_Map_Server if (ze.zoneId != player.zoneId) return; - DoPlayerMoveInZone(player, ze.spawnType, ze.spawnX, ze.spawnY, ze.spawnZ, ze.spawnRotation); + DoPlayerMoveInZone(player, ze.spawnX, ze.spawnY, ze.spawnZ, ze.spawnRotation, ze.spawnType); } //Moves actor within the zone - public void DoPlayerMoveInZone(Player player, byte spawnType, float spawnX, float spawnY, float spawnZ, float spawnRotation) + public void DoPlayerMoveInZone(Player player, float spawnX, float spawnY, float spawnZ, float spawnRotation, byte spawnType = 0xF) { //Remove player from currentZone if transfer else it's login if (player.zone != null) @@ -437,7 +437,7 @@ namespace FFXIVClassic_Map_Server //Send packets player.playerSession.queuePacket(_0xE2Packet.buildPacket(player.actorId, 0x0), true, false); - player.playerSession.queuePacket(player.createSpawnTeleportPacket(player.actorId, 0x0f), true, false); + player.playerSession.queuePacket(player.createSpawnTeleportPacket(player.actorId, spawnType), true, false); player.sendInstanceUpdate(); } @@ -455,6 +455,9 @@ namespace FFXIVClassic_Map_Server //Set the current zone and add player player.zone = zone; + + LuaEngine.onBeginLogin(player); + zone.addActorToZone(player); //Send packets diff --git a/FFXIVClassic Map Server/actors/chara/player/Player.cs b/FFXIVClassic Map Server/actors/chara/player/Player.cs index 7405ed9d..4403cb8a 100644 --- a/FFXIVClassic Map Server/actors/chara/player/Player.cs +++ b/FFXIVClassic Map Server/actors/chara/player/Player.cs @@ -84,6 +84,15 @@ namespace FFXIVClassic_Map_Server.Actors 45000, 47000, 50000, 53000, 56000, 59000, 62000, 65000, 68000, 71000, //Level <= 40 74000, 78000, 81000, 85000, 89000, 92000, 96000, 100000, 100000, 110000}; //Level <= 50 + //Event Related + public uint currentEventOwner = 0; + public string currentEventName = ""; + + public uint currentCommand = 0; + public string currentCommandName = ""; + + public uint eventMenuId = 0; + //Player Info public uint[] timers = new uint[20]; public ushort currentJob; @@ -108,12 +117,7 @@ namespace FFXIVClassic_Map_Server.Actors public bool hasGoobbue; public byte chocoboAppearance; public string chocoboName; - public byte mountState = 0; - - //Event Related - public uint eventCurrentOwner = 0; - public string eventCurrentStarter = ""; - public uint eventMenuId = 0; + public byte mountState = 0; public uint achievementPoints; @@ -125,7 +129,7 @@ namespace FFXIVClassic_Map_Server.Actors public Quest[] questScenario = new Quest[16]; public Quest[] questGuildleve = new Quest[8]; - public Director currentDirector;// = new OpeningDirector(0x46080012); + public Director currentDirector; public PlayerWork playerWork = new PlayerWork(); @@ -256,7 +260,7 @@ namespace FFXIVClassic_Map_Server.Actors if (isMyPlayer(playerActorId)) { if (currentDirector != null) - lParams = LuaUtils.createLuaParamList("/Chara/Player/Player_work", false, false, true, currentDirector, 0, false, timers, true); + lParams = LuaUtils.createLuaParamList("/Chara/Player/Player_work", false, false, true, currentDirector, true, 0, false, timers, true); else lParams = LuaUtils.createLuaParamList("/Chara/Player/Player_work", false, false, false, true, 0, false, timers, true); } @@ -472,12 +476,15 @@ namespace FFXIVClassic_Map_Server.Actors public void sendZoneInPackets(WorldManager world, ushort spawnType) { - queuePacket(SetMapPacket.buildPacket(actorId, zone.regionId, zone.actorId)); + queuePacket(SetActorIsZoningPacket.buildPacket(actorId, actorId, false)); + queuePacket(_0x10Packet.buildPacket(actorId, 0xFF)); queuePacket(SetMusicPacket.buildPacket(actorId, zone.bgmDay, 0x01)); queuePacket(SetWeatherPacket.buildPacket(actorId, SetWeatherPacket.WEATHER_CLEAR)); + + queuePacket(SetMapPacket.buildPacket(actorId, zone.regionId, zone.actorId)); queuePacket(getSpawnPackets(actorId, spawnType)); - //getSpawnPackets(actorId, spawnType).debugPrintPacket(); + getSpawnPackets(actorId, spawnType).debugPrintPacket(); #region grouptest //Retainers @@ -511,6 +518,7 @@ namespace FFXIVClassic_Map_Server.Actors playerSession.queuePacket(getInitPackets(actorId)); + BasePacket areaMasterSpawn = zone.getSpawnPackets(actorId); BasePacket debugSpawn = world.GetDebugActor().getSpawnPackets(actorId); BasePacket worldMasterSpawn = world.GetActor().getSpawnPackets(actorId); @@ -523,8 +531,8 @@ namespace FFXIVClassic_Map_Server.Actors playerSession.queuePacket(debugSpawn); if (directorSpawn != null) { - directorSpawn.debugPrintPacket(); - currentDirector.getInitPackets(actorId).debugPrintPacket(); + //directorSpawn.debugPrintPacket(); + // currentDirector.getInitPackets(actorId).debugPrintPacket(); queuePacket(directorSpawn); queuePacket(currentDirector.getInitPackets(actorId)); //queuePacket(currentDirector.getSetEventStatusPackets(actorId)); @@ -982,6 +990,17 @@ namespace FFXIVClassic_Map_Server.Actors return null; } + public bool hasQuest(string name) + { + for (int i = 0; i < questScenario.Length; i++) + { + if (questScenario[i] != null && questScenario[i].actorName.ToLower().Equals(name.ToLower())) + return true; + } + + return false; + } + public bool hasQuest(uint id) { for (int i = 0; i < questScenario.Length; i++) @@ -1004,23 +1023,27 @@ namespace FFXIVClassic_Map_Server.Actors return -1; } - public void setDirector(string directorType) + public void setDirector(string directorType, bool sendPackets) { if (directorType.Equals("openingDirector")) { - currentDirector = new OpeningDirector(0x46080012); + currentDirector = new OpeningDirector(this, 0x46080012); } else if (directorType.Equals("QuestDirectorMan0l001")) { - currentDirector = new QuestDirectorMan0l001(0x46080012); + currentDirector = new QuestDirectorMan0l001(this, 0x46080012); + } + + if (sendPackets) + { + queuePacket(RemoveActorPacket.buildPacket(actorId, 0x46080012)); + queuePacket(currentDirector.getSpawnPackets(actorId)); + queuePacket(currentDirector.getInitPackets(actorId)); + //queuePacket(currentDirector.getSetEventStatusPackets(actorId)); + //currentDirector.getSpawnPackets(actorId).debugPrintPacket(); + //currentDirector.getInitPackets(actorId).debugPrintPacket(); } - // queuePacket(RemoveActorPacket.buildPacket(actorId, 0x46080012)); - // queuePacket(currentDirector.getSpawnPackets(actorId)); - // queuePacket(currentDirector.getInitPackets(actorId)); - // queuePacket(currentDirector.getSetEventStatusPackets(actorId)); - // currentDirector.getSpawnPackets(actorId).debugPrintPacket(); - // currentDirector.getInitPackets(actorId).debugPrintPacket(); } public Director getDirector() @@ -1068,22 +1091,32 @@ namespace FFXIVClassic_Map_Server.Actors public void runEventFunction(string functionName, params object[] parameters) { List lParams = LuaUtils.createLuaParamList(parameters); - SubPacket spacket = RunEventFunctionPacket.buildPacket(actorId, eventCurrentOwner, eventCurrentStarter, functionName, lParams); + SubPacket spacket = RunEventFunctionPacket.buildPacket(actorId, currentEventOwner, currentEventName, functionName, lParams); spacket.debugPrintSubPacket(); queuePacket(spacket); } public void endEvent() { - SubPacket p = EndEventPacket.buildPacket(actorId, eventCurrentOwner, eventCurrentStarter); + SubPacket p = EndEventPacket.buildPacket(actorId, currentEventOwner, currentEventName); p.debugPrintSubPacket(); queuePacket(p); - eventCurrentOwner = 0; - eventCurrentStarter = ""; + currentEventOwner = 0; + currentEventName = ""; eventMenuId = 0; } + public void endCommand() + { + SubPacket p = EndEventPacket.buildPacket(actorId, currentCommand, currentCommandName); + p.debugPrintSubPacket(); + queuePacket(p); + + currentCommand = 0; + currentCommandName = ""; + } + public void setCurrentMenuId(uint id) { eventMenuId = id; diff --git a/FFXIVClassic Map Server/actors/director/Director.cs b/FFXIVClassic Map Server/actors/director/Director.cs index bc63ec27..4ae68542 100644 --- a/FFXIVClassic Map Server/actors/director/Director.cs +++ b/FFXIVClassic Map Server/actors/director/Director.cs @@ -1,5 +1,6 @@ using FFXIVClassic_Lobby_Server.packets; using FFXIVClassic_Map_Server.Actors; +using FFXIVClassic_Map_Server.lua; using FFXIVClassic_Map_Server.packets.send.actor; using System; using System.Collections.Generic; @@ -10,10 +11,12 @@ using System.Threading.Tasks; namespace FFXIVClassic_Map_Server.actors.director { class Director : Actor - { - public Director(uint id) : base(id) - { + { + Player owner; + public Director(Player owner, uint id) : base(id) + { + this.owner = owner; } public virtual BasePacket getSpawnPackets(uint playerActorId, uint spawnType) @@ -37,5 +40,15 @@ namespace FFXIVClassic_Map_Server.actors.director return BasePacket.createPacket(initProperties.buildPacket(playerActorId, actorId), true, false); } + public void onTalked(Npc npc) + { + LuaEngine.doDirectorOnTalked(this, owner, npc); + } + + public void onCommand(Command command) + { + LuaEngine.doDirectorOnCommand(this, owner, command); + } + } } diff --git a/FFXIVClassic Map Server/actors/director/OpeningDirector.cs b/FFXIVClassic Map Server/actors/director/OpeningDirector.cs index 6c45066b..0d910ba4 100644 --- a/FFXIVClassic Map Server/actors/director/OpeningDirector.cs +++ b/FFXIVClassic Map Server/actors/director/OpeningDirector.cs @@ -1,4 +1,5 @@ using FFXIVClassic_Lobby_Server.packets; +using FFXIVClassic_Map_Server.Actors; using FFXIVClassic_Map_Server.lua; using FFXIVClassic_Map_Server.packets.send.actor; using System; @@ -11,7 +12,7 @@ namespace FFXIVClassic_Map_Server.actors.director { class OpeningDirector : Director { - public OpeningDirector(uint id) : base(id) + public OpeningDirector(Player player, uint id) : base(player, id) { this.displayNameId = 0; this.customDisplayName = "openingDire"; diff --git a/FFXIVClassic Map Server/actors/director/WeatherDirector.cs b/FFXIVClassic Map Server/actors/director/WeatherDirector.cs index 658776de..f560a902 100644 --- a/FFXIVClassic Map Server/actors/director/WeatherDirector.cs +++ b/FFXIVClassic Map Server/actors/director/WeatherDirector.cs @@ -15,8 +15,8 @@ namespace FFXIVClassic_Map_Server.Actors { private uint weatherId; - public WeatherDirector(uint weatherId) - : base(0x5FF80003) + public WeatherDirector(Player player, uint weatherId) + : base(player, 0x5FF80003) { this.weatherId = weatherId; diff --git a/FFXIVClassic Map Server/actors/director/quest/QuestDirectorMan0L001..cs b/FFXIVClassic Map Server/actors/director/quest/QuestDirectorMan0L001..cs index d7f2bfd0..2d5d1aec 100644 --- a/FFXIVClassic Map Server/actors/director/quest/QuestDirectorMan0L001..cs +++ b/FFXIVClassic Map Server/actors/director/quest/QuestDirectorMan0L001..cs @@ -1,4 +1,5 @@ using FFXIVClassic_Lobby_Server.packets; +using FFXIVClassic_Map_Server.Actors; using FFXIVClassic_Map_Server.lua; using FFXIVClassic_Map_Server.packets.send.actor; using System; @@ -11,7 +12,8 @@ namespace FFXIVClassic_Map_Server.actors.director { class QuestDirectorMan0l001 : Director { - public QuestDirectorMan0l001(uint id) : base(id) + public QuestDirectorMan0l001(Player player, uint id) + : base(player, id) { this.displayNameId = 0; this.customDisplayName = "questDirect_ocn0Btl02_01"; diff --git a/FFXIVClassic Map Server/actors/quest/Quest.cs b/FFXIVClassic Map Server/actors/quest/Quest.cs index a8bd5c34..8fe77bce 100644 --- a/FFXIVClassic Map Server/actors/quest/Quest.cs +++ b/FFXIVClassic Map Server/actors/quest/Quest.cs @@ -45,11 +45,21 @@ namespace FFXIVClassic_Map_Server.Actors return null; } + public void ClearQuestData() + { + questData.Clear(); + } + public uint GetQuestId() { return actorId; } + public void ClearQuestFlags() + { + questFlags = 0; + } + public void SetQuestFlag(int bitIndex, bool value) { if (bitIndex >= 32) diff --git a/FFXIVClassic Map Server/lua/LuaEngine.cs b/FFXIVClassic Map Server/lua/LuaEngine.cs index 8d8d92eb..89d2c272 100644 --- a/FFXIVClassic Map Server/lua/LuaEngine.cs +++ b/FFXIVClassic Map Server/lua/LuaEngine.cs @@ -176,6 +176,21 @@ namespace FFXIVClassic_Map_Server.lua } } + public static void onBeginLogin(Player player) + { + if (File.Exists(FILEPATH_PLAYER)) + { + Script script = loadScript(FILEPATH_PLAYER); + + if (script == null) + return; + + //Run Script + if (!script.Globals.Get("onBeginLogin").IsNil()) + script.Call(script.Globals["onBeginLogin"], player); + } + } + public static void onLogin(Player player) { if (File.Exists(FILEPATH_PLAYER)) @@ -186,8 +201,8 @@ namespace FFXIVClassic_Map_Server.lua return; //Run Script - if (!script.Globals.Get("onZoneIn").IsNil()) - script.Call(script.Globals["onZoneIn"], player); + if (!script.Globals.Get("onLogin").IsNil()) + script.Call(script.Globals["onLogin"], player); } } @@ -215,10 +230,52 @@ namespace FFXIVClassic_Map_Server.lua private static void SendError(Player player, string message) { List sendError = new List(); - sendError.Add(EndEventPacket.buildPacket(player.actorId, player.eventCurrentOwner, player.eventCurrentStarter)); + sendError.Add(EndEventPacket.buildPacket(player.actorId, player.currentEventOwner, player.currentEventName)); player.sendMessage(SendMessagePacket.MESSAGE_TYPE_SYSTEM_ERROR, "", message); player.playerSession.queuePacket(BasePacket.createPacket(sendError, true, false)); } + + internal static void doDirectorOnTalked(Director director, Player player, Npc npc) + { + string luaPath = String.Format(FILEPATH_DIRECTORS, director.getName()); + + if (File.Exists(luaPath)) + { + Script script = loadScript(luaPath); + + if (script == null) + return; + + //Run Script + if (!script.Globals.Get("onTalked").IsNil()) + script.Call(script.Globals["onTalked"], player, npc); + } + else + { + SendError(player, String.Format("ERROR: Could not find script for director {0}.", director.getName())); + } + } + + internal static void doDirectorOnCommand(Director director, Player player, Command command) + { + string luaPath = String.Format(FILEPATH_DIRECTORS, director.getName()); + + if (File.Exists(luaPath)) + { + Script script = loadScript(luaPath); + + if (script == null) + return; + + //Run Script + if (!script.Globals.Get("onCommand").IsNil()) + script.Call(script.Globals["onCommand"], player, command); + } + else + { + SendError(player, String.Format("ERROR: Could not find script for director {0}.", director.getName())); + } + } } } diff --git a/FFXIVClassic Map Server/packets/send/_0x10Packet.cs b/FFXIVClassic Map Server/packets/send/_0x10Packet.cs new file mode 100644 index 00000000..5c036792 --- /dev/null +++ b/FFXIVClassic Map Server/packets/send/_0x10Packet.cs @@ -0,0 +1,31 @@ +using FFXIVClassic_Lobby_Server.packets; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FFXIVClassic_Map_Server.packets.send +{ + class _0x10Packet + { + public const ushort OPCODE = 0x0010; + public const uint PACKET_SIZE = 0x28; + + public static SubPacket buildPacket(uint playerActorId, int val) + { + byte[] data = new byte[PACKET_SIZE - 0x20]; + + using (MemoryStream mem = new MemoryStream(data)) + { + using (BinaryWriter binWriter = new BinaryWriter(mem)) + { + binWriter.Write((UInt32)val); + } + } + + return new SubPacket(OPCODE, playerActorId, playerActorId, data); + } + } +} From bd4e4a293c9a2fa39a41f48be3c64657d7b8bf68 Mon Sep 17 00:00:00 2001 From: Filip Maj Date: Thu, 14 Apr 2016 08:30:34 -0400 Subject: [PATCH 08/10] Removed a buffer being created for no reason. --- FFXIVClassic Map Server/ClientConnection.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/FFXIVClassic Map Server/ClientConnection.cs b/FFXIVClassic Map Server/ClientConnection.cs index a5751a56..ae14c995 100644 --- a/FFXIVClassic Map Server/ClientConnection.cs +++ b/FFXIVClassic Map Server/ClientConnection.cs @@ -47,8 +47,7 @@ namespace FFXIVClassic_Lobby_Server BasePacket packet = sendPacketQueue.Take(); byte[] packetBytes = packet.getPacketBytes(); - byte[] buffer = new byte[0xFFFF]; - Array.Copy(packetBytes, buffer, packetBytes.Length); + try { socket.Send(packetBytes); From 95849e1c1ca5bb5755a0209219af3d469b0cdd58 Mon Sep 17 00:00:00 2001 From: Filip Maj Date: Thu, 14 Apr 2016 08:31:39 -0400 Subject: [PATCH 09/10] onInit was added to all the scripts. Added code for all the Limsa opening event npcs. --- scripts/commands/ActivateCommand.lua | 13 ++-- scripts/commands/AttackWeaponSkill.lua | 2 +- scripts/commands/BonusPointCommand.lua | 2 +- scripts/commands/CheckCommand.lua | 2 +- scripts/commands/ChocoboRideCommand.lua | 5 +- scripts/commands/DiceCommand.lua | 2 +- scripts/commands/EmoteSitCommand.lua | 2 +- scripts/commands/EmoteStandardCommand.lua | 2 +- scripts/commands/EquipCommand.lua | 2 +- scripts/commands/ItemWasteCommand.lua | 2 +- scripts/commands/LogoutCommand.lua | 15 ++--- .../commands/RequestInformationCommand.lua | 4 -- .../commands/RequestQuestJournalCommand.lua | 4 -- scripts/commands/TeleportCommand.lua | 6 +- scripts/directors/openingDire - Copy.lua | 20 ++++++ scripts/directors/openingDire.lua | 31 ++++++++++ .../questDirect_ocn0Btl02_01@0C196.lua | 19 ++++++ scripts/player.lua | 37 ++++++++++- scripts/quests/man/man0l0.lua | 13 ++++ scripts/zones/128/npcs/testNutEater.lua | 2 +- .../zones/133/npcs/aetheryteP_01@08500.lua | 2 +- .../zones/133/npcs/pplGuildlev_01@08500.lua | 2 +- .../zones/133/npcs/pplLinkshel_01@08500.lua | 2 +- .../zones/133/npcs/pplPassiveG_01@08500.lua | 2 +- .../zones/133/npcs/pplShopSal_01@08500.lua | 2 +- .../zones/133/npcs/pplShopSal_02@08500.lua | 2 +- .../zones/133/npcs/pplShopSal_03@08500.lua | 2 +- .../zones/133/npcs/pplShopSal_04@08500.lua | 2 +- .../zones/133/npcs/pplShopSal_05@08500.lua | 2 +- .../zones/133/npcs/pplShopSal_06@08500.lua | 2 +- .../zones/133/npcs/pplShopSal_07@08500.lua | 2 +- .../zones/133/npcs/pplShopSal_08@08500.lua | 2 +- .../zones/133/npcs/pplShopSal_09@08500.lua | 2 +- .../zones/133/npcs/pplShopSal_0a@08500.lua | 2 +- .../zones/133/npcs/pplShopSal_0b@08500.lua | 2 +- .../zones/133/npcs/pplShopSal_0c@08500.lua | 2 +- .../zones/133/npcs/pplShopSal_0d@08500.lua | 2 +- .../zones/133/npcs/pplShopSal_0e@08500.lua | 2 +- .../zones/133/npcs/pplShopSal_0f@08500.lua | 2 +- .../zones/133/npcs/pplShopSal_10@08500.lua | 2 +- .../zones/133/npcs/pplShopSal_11@08500.lua | 2 +- scripts/zones/133/npcs/pplStd_01@08500.lua | 2 +- scripts/zones/133/npcs/pplStd_02@08500.lua | 2 +- scripts/zones/133/npcs/pplStd_03@08500.lua | 2 +- scripts/zones/133/npcs/pplStd_04@08500.lua | 2 +- scripts/zones/133/npcs/pplStd_05@08500.lua | 2 +- scripts/zones/133/npcs/pplStd_06@08500.lua | 2 +- scripts/zones/133/npcs/pplStd_07@08500.lua | 2 +- scripts/zones/133/npcs/pplStd_08@08500.lua | 2 +- scripts/zones/133/npcs/pplStd_09@08500.lua | 2 +- scripts/zones/133/npcs/pplStd_0a@08500.lua | 2 +- scripts/zones/133/npcs/pplStd_0b@08500.lua | 2 +- scripts/zones/133/npcs/pplStd_0c@08500.lua | 2 +- scripts/zones/133/npcs/pplStd_0d@08500.lua | 2 +- scripts/zones/133/npcs/pplStd_0e@08500.lua | 2 +- scripts/zones/133/npcs/pplStd_0f@08500.lua | 2 +- scripts/zones/133/npcs/pplStd_10@08500.lua | 2 +- scripts/zones/133/npcs/pplStd_11@08500.lua | 2 +- scripts/zones/133/npcs/pplStd_12@08500.lua | 2 +- scripts/zones/133/npcs/pplStd_13@08500.lua | 2 +- scripts/zones/133/npcs/pplStd_14@08500.lua | 2 +- scripts/zones/133/npcs/taskBoard_01@08500.lua | 2 +- .../155/npcs/doorStd_fst0Twn01a_31@0CE00.lua | 7 +++ scripts/zones/155/zone.lua | 10 +++ .../npcs/openingStop_fstBtl03_03@0A600.lua | 2 +- .../npcs/fighterAlly_ocn0Btl02_02@0C196.lua | 3 + .../npcs/fighterAlly_ocn0Btl02_03@0C196.lua | 3 + .../npcs/jellyfishSc_ocn0Btl02_04@0C196.lua | 3 + scripts/zones/193/npcs/pplStd_01@0C100.lua | 19 ++++++ scripts/zones/193/npcs/pplStd_02@0C100.lua | 19 ++++++ scripts/zones/193/npcs/pplStd_03@0C100.lua | 19 ++++++ scripts/zones/193/npcs/pplStd_04@0C100.lua | 19 ++++++ scripts/zones/193/npcs/pplStd_05@0C100.lua | 43 +++++++++++++ scripts/zones/193/npcs/pplStd_06@0C100.lua | 19 ++++++ scripts/zones/193/npcs/pplStd_07@0C100.lua | 19 ++++++ scripts/zones/193/npcs/pplStd_08@0C100.lua | 19 ++++++ scripts/zones/193/npcs/pplStd_09@0C100.lua | 19 ++++++ scripts/zones/193/npcs/pplStd_0a@0C100.lua | 46 ++++++++++++++ scripts/zones/193/npcs/pplStd_0b@0C100.lua | 20 ++++++ scripts/zones/193/npcs/pplStd_0c@0C100.lua | 19 ++++++ scripts/zones/193/npcs/pplStd_0d@0C100.lua | 19 ++++++ scripts/zones/193/npcs/pplStd_0e@0C100.lua | 19 ++++++ scripts/zones/193/npcs/pplStd_0f@0C100.lua | 55 ++++++++++++++++ scripts/zones/193/npcs/pplStd_11@0C100.lua | 62 +++++++++++++++++-- scripts/zones/193/zone.lua | 11 +++- scripts/zones/244/npcs/objBed_01@0F400.lua | 2 +- .../zones/244/npcs/objInnDoor_01@0F400.lua | 2 +- .../zones/244/npcs/objItemStore_01@0F400.lua | 2 +- .../zones/244/npcs/pplCutscene_01@0F400.lua | 2 +- scripts/zones/244/npcs/test1.lua | 2 +- 90 files changed, 662 insertions(+), 91 deletions(-) create mode 100644 scripts/directors/openingDire - Copy.lua create mode 100644 scripts/directors/openingDire.lua create mode 100644 scripts/directors/questDirect_ocn0Btl02_01@0C196.lua create mode 100644 scripts/quests/man/man0l0.lua create mode 100644 scripts/zones/155/npcs/doorStd_fst0Twn01a_31@0CE00.lua create mode 100644 scripts/zones/155/zone.lua create mode 100644 scripts/zones/193/npcs/fighterAlly_ocn0Btl02_02@0C196.lua create mode 100644 scripts/zones/193/npcs/fighterAlly_ocn0Btl02_03@0C196.lua create mode 100644 scripts/zones/193/npcs/jellyfishSc_ocn0Btl02_04@0C196.lua create mode 100644 scripts/zones/193/npcs/pplStd_01@0C100.lua create mode 100644 scripts/zones/193/npcs/pplStd_02@0C100.lua create mode 100644 scripts/zones/193/npcs/pplStd_03@0C100.lua create mode 100644 scripts/zones/193/npcs/pplStd_04@0C100.lua create mode 100644 scripts/zones/193/npcs/pplStd_05@0C100.lua create mode 100644 scripts/zones/193/npcs/pplStd_06@0C100.lua create mode 100644 scripts/zones/193/npcs/pplStd_07@0C100.lua create mode 100644 scripts/zones/193/npcs/pplStd_08@0C100.lua create mode 100644 scripts/zones/193/npcs/pplStd_09@0C100.lua create mode 100644 scripts/zones/193/npcs/pplStd_0a@0C100.lua create mode 100644 scripts/zones/193/npcs/pplStd_0b@0C100.lua create mode 100644 scripts/zones/193/npcs/pplStd_0c@0C100.lua create mode 100644 scripts/zones/193/npcs/pplStd_0d@0C100.lua create mode 100644 scripts/zones/193/npcs/pplStd_0e@0C100.lua create mode 100644 scripts/zones/193/npcs/pplStd_0f@0C100.lua diff --git a/scripts/commands/ActivateCommand.lua b/scripts/commands/ActivateCommand.lua index 898665c6..cb681cb9 100644 --- a/scripts/commands/ActivateCommand.lua +++ b/scripts/commands/ActivateCommand.lua @@ -6,15 +6,20 @@ Switches between active and passive mode states --]] -function onEventStarted(player, actor, triggerName) - +function onEventStarted(player, command, triggerName) + if (player:getState() == 0) then player:changeState(2); elseif (player:getState() == 2) then player:changeState(0); end - - player:endEvent(); + + player:endCommand(); + + --For Opening Tutorial + if (player:hasQuest("Man0l0") or player:hasQuest("Man0g0") or player:hasQuest("Man0u0")) then + player:getDirector():onCommand(command); + end end diff --git a/scripts/commands/AttackWeaponSkill.lua b/scripts/commands/AttackWeaponSkill.lua index 7329b613..a9bf62fc 100644 --- a/scripts/commands/AttackWeaponSkill.lua +++ b/scripts/commands/AttackWeaponSkill.lua @@ -16,7 +16,7 @@ function onEventStarted(player, actor, triggerName) player:sendGameMessage(worldMaster, 32503, 0x20); end - player:endEvent(); + player:endCommand(); end diff --git a/scripts/commands/BonusPointCommand.lua b/scripts/commands/BonusPointCommand.lua index d6e95444..55ee95b6 100644 --- a/scripts/commands/BonusPointCommand.lua +++ b/scripts/commands/BonusPointCommand.lua @@ -18,6 +18,6 @@ function onEventUpdate(player, actor, step, arg1) --Submit - player:endEvent(); + player:endCommand(); end \ No newline at end of file diff --git a/scripts/commands/CheckCommand.lua b/scripts/commands/CheckCommand.lua index 6800f279..734545fe 100644 --- a/scripts/commands/CheckCommand.lua +++ b/scripts/commands/CheckCommand.lua @@ -14,6 +14,6 @@ function onEventStarted(player, commandactor, triggerName, arg1, arg2, arg3, arg player:examinePlayer(actor); end - player:endEvent(); + player:endCommand(); end diff --git a/scripts/commands/ChocoboRideCommand.lua b/scripts/commands/ChocoboRideCommand.lua index 3c95e3da..c3abe58b 100644 --- a/scripts/commands/ChocoboRideCommand.lua +++ b/scripts/commands/ChocoboRideCommand.lua @@ -42,9 +42,6 @@ function onEventStarted(player, actor, triggerName, isGoobbue) player:changeState(0); end - player:endEvent(); + player:endCommand(); -end - -function onEventUpdate(player, npc) end \ No newline at end of file diff --git a/scripts/commands/DiceCommand.lua b/scripts/commands/DiceCommand.lua index b48e4e37..10bfd694 100644 --- a/scripts/commands/DiceCommand.lua +++ b/scripts/commands/DiceCommand.lua @@ -15,7 +15,7 @@ function onEventStarted(player, actor, triggerName, maxNumber) worldMaster = getWorldMaster(); player:sendGameMessage(player, worldMaster, 25342, 0x20, result, maxNumber); - player:endEvent(); + player:endCommand(); end diff --git a/scripts/commands/EmoteSitCommand.lua b/scripts/commands/EmoteSitCommand.lua index e244a436..764033f9 100644 --- a/scripts/commands/EmoteSitCommand.lua +++ b/scripts/commands/EmoteSitCommand.lua @@ -16,7 +16,7 @@ function onEventStarted(player, actor, triggerName, emoteId) player:changeState(0); end - player:endEvent(); + player:endCommand(); end diff --git a/scripts/commands/EmoteStandardCommand.lua b/scripts/commands/EmoteStandardCommand.lua index dac96794..1a4b7408 100644 --- a/scripts/commands/EmoteStandardCommand.lua +++ b/scripts/commands/EmoteStandardCommand.lua @@ -15,7 +15,7 @@ function onEventStarted(player, actor, triggerName, emoteId) player:doEmote(emoteId); end - player:endEvent(); + player:endCommand(); end diff --git a/scripts/commands/EquipCommand.lua b/scripts/commands/EquipCommand.lua index d9c4ad02..00b337db 100644 --- a/scripts/commands/EquipCommand.lua +++ b/scripts/commands/EquipCommand.lua @@ -69,7 +69,7 @@ function onEventStarted(player, actor, triggerName, invActionInfo, param1, param end end - player:endEvent(); + player:endCommand(); end function loadGearset(player, classId) diff --git a/scripts/commands/ItemWasteCommand.lua b/scripts/commands/ItemWasteCommand.lua index 78e568c8..92441bd1 100644 --- a/scripts/commands/ItemWasteCommand.lua +++ b/scripts/commands/ItemWasteCommand.lua @@ -11,5 +11,5 @@ The param "itemDBIds" has the vars: item1 and item2. function onEventStarted(player, actor, triggerName, invActionInfo, param1, param2, param3, param4, param5, param6, param7, param8, itemDBIds) player:getInventory(0x00):removeItem(invActionInfo.slot); - player:endEvent(); + player:endCommand(); end diff --git a/scripts/commands/LogoutCommand.lua b/scripts/commands/LogoutCommand.lua index 9ccd3deb..3dc52b1d 100644 --- a/scripts/commands/LogoutCommand.lua +++ b/scripts/commands/LogoutCommand.lua @@ -16,8 +16,9 @@ Countdown: 1 --]] function onEventStarted(player, command) - player:setCurrentMenuId(0); - player:runEventFunction("delegateCommand", command, "eventConfirm"); + --player:setCurrentMenuId(0); + --player:runEventFunction("delegateCommand", command, "eventConfirm"); + player:logout(); end function onEventUpdate(player, command, triggerName, step, arg1, arg2) @@ -28,23 +29,23 @@ function onEventUpdate(player, command, triggerName, step, arg1, arg2) if (currentMenuId == 0) then if (arg1 == 1) then --Exit player:quitGame(); - player:endEvent(); + player:endCommand(); elseif (arg1 == 2) then --Character Screen player:logout(); - player:endEvent(); + player:endCommand(); --player:setCurrentMenuId(1); --player:runEventFunction("delegateCommand", command, "eventCountDown"); elseif (arg1 == 3) then --Cancel - player:endEvent(); + player:endCommand(); end --Countdown Dialog elseif (currentMenuId == 1) then if (arg2 == 1) then --Logout Complete player:logout(); - player:endEvent(); + player:endCommand(); elseif (arg2 == 2) then --Cancel Pressed - player:endEvent(); + player:endCommand(); end end diff --git a/scripts/commands/RequestInformationCommand.lua b/scripts/commands/RequestInformationCommand.lua index 1b13672d..7cc47797 100644 --- a/scripts/commands/RequestInformationCommand.lua +++ b/scripts/commands/RequestInformationCommand.lua @@ -7,7 +7,3 @@ function onEventStarted(player, actor, questId) player:sendRequestedInfo("requestedData", "activegl", 7, nil, nil, nil, nil, nil, nil, nil); -- player:sendRequestedInfo("requestedData", "glHist", 10, 0x1D4F2, 1009, 12464, 11727, 12485, 12526); end - -function onEventUpdate(player, actor, triggerName, step, arg1) - -end \ No newline at end of file diff --git a/scripts/commands/RequestQuestJournalCommand.lua b/scripts/commands/RequestQuestJournalCommand.lua index 85ec082e..b67e2667 100644 --- a/scripts/commands/RequestQuestJournalCommand.lua +++ b/scripts/commands/RequestQuestJournalCommand.lua @@ -6,7 +6,3 @@ function onEventStarted(player, actor, questId) player:sendRequestedInfo("requestedData", "qtdata", 0x1D4F2); end - -function onEventUpdate(player, actor, triggerName, step, arg1) - -end \ No newline at end of file diff --git a/scripts/commands/TeleportCommand.lua b/scripts/commands/TeleportCommand.lua index 05b893c9..17f593fe 100644 --- a/scripts/commands/TeleportCommand.lua +++ b/scripts/commands/TeleportCommand.lua @@ -35,17 +35,17 @@ function onEventUpdate(player, actor, step, arg1) player:setCurrentMenuId(1); player:runEventFunction("delegateCommand", actor, "eventAetheryte", arg1, 2, 2, 2, 4, 4, 4); else - player:endEvent(); + player:endCommand(); end elseif (menuId == 1) then --Aetheryte if (arg1 == nil) then - player:endEvent(); + player:endCommand(); return; end player:setCurrentMenuId(2); player:runEventFunction("delegateCommand", actor, "eventConfirm", false, false, 1, 138824, false); elseif (menuId == 2) then --Confirm - player:endEvent(); + player:endCommand(); end end \ No newline at end of file diff --git a/scripts/directors/openingDire - Copy.lua b/scripts/directors/openingDire - Copy.lua new file mode 100644 index 00000000..af26e459 --- /dev/null +++ b/scripts/directors/openingDire - Copy.lua @@ -0,0 +1,20 @@ +require("/quests/man/man0l0") + +function onEventStarted(player, actor, triggerName) + + man0l0Quest = getStaticActor("Man0l0"); + player:runEventFunction("delegateEvent", player, man0l0Quest, "processTtrNomal001withHQ", nil, nil, nil, nil); + --player:runEventFunction("delegateEvent", player, man0l0Quest, "processEvent000_1", nil, nil, nil, nil); + +end + +function onEventUpdate(player, npc, resultId) + man0l0Quest = getStaticActor("Man0l0"); + + if (resultId == RESULT_Event000_1) then + player:runEventFunction("delegateEvent", player, man0l0Quest, "processTtrNomal001", nil, nil, nil, nil); + elseif (resultId == RESULT_TtrNomal001) then + player:endEvent(); + end + +end \ No newline at end of file diff --git a/scripts/directors/openingDire.lua b/scripts/directors/openingDire.lua new file mode 100644 index 00000000..2558d8b3 --- /dev/null +++ b/scripts/directors/openingDire.lua @@ -0,0 +1,31 @@ +require("/quests/man/man0l0") + +function onEventStarted(player, actor, triggerName) + + man0l0Quest = getStaticActor("Man0l0"); + player:runEventFunction("delegateEvent", player, man0l0Quest, "processTtrNomal001withHQ", nil, nil, nil, nil); + --player:runEventFunction("delegateEvent", player, man0l0Quest, "processEvent000_1", nil, nil, nil, nil); + +end + +function onEventUpdate(player, npc, resultId) + + player:endEvent(); + +end + +function onTalked(player, npc) + + man0l0Quest = player:getQuest("Man0l0"); + + if (man0l0Quest ~= nil) then + if (man0l0Quest ~= nil and man0l0Quest:GetQuestFlag(MAN0L0_FLAG_MINITUT_DONE1) == true and man0l0Quest:GetQuestFlag(MAN0L0_FLAG_MINITUT_DONE2) == true and man0l0Quest:GetQuestFlag(MAN0L0_FLAG_MINITUT_DONE3) == true) then + + doorNpc = getWorldManager():GetActorInWorld(1090025); + player:setEventStatus(doorNpc, "pushDefault", true, 0x2); + doorNpc:setQuestGraphic(player, 0x3); + + end + end + +end \ No newline at end of file diff --git a/scripts/directors/questDirect_ocn0Btl02_01@0C196.lua b/scripts/directors/questDirect_ocn0Btl02_01@0C196.lua new file mode 100644 index 00000000..339e85c5 --- /dev/null +++ b/scripts/directors/questDirect_ocn0Btl02_01@0C196.lua @@ -0,0 +1,19 @@ + +function onEventStarted(player, actor, triggerName) + + man0l0Quest = getStaticActor("Man0l0"); + player:runEventFunction("delegateEvent", player, man0l0Quest, "processTtrBtl004"); + --player:runEventFunction("delegateEvent", player, man0l0Quest, "processTtrBtl002"); + +end + +function onEventUpdate(player, npc, resultId) + --man0l0Quest = getStaticActor("Man0l0"); + --player:runEventFunction("delegateEvent", player, man0l0Quest, "processTtrBtl002"); + player:endEvent(); +end + +function onCommand(player, command) + --Check command if ActivateCommand + player:kickEvent(player:getDirector(), "noticeEvent", true); +end \ No newline at end of file diff --git a/scripts/player.lua b/scripts/player.lua index 0f562f27..b53ee7ea 100644 --- a/scripts/player.lua +++ b/scripts/player.lua @@ -1,5 +1,38 @@ local initClassItems, initRaceItems; +function onBeginLogin(player) + + --For Opening. Set Director and reset position incase d/c + if (player:hasQuest(110001) == true) then + --player:setDirector("openingDirector", false); + player.positionX = 0.016; + player.positionY = 10.35; + --player.positionZ = -36.91; + player.positionZ = -20.91; + player.rotation = 0.025; + player:getQuest(110001):ClearQuestData(); + player:getQuest(110001):ClearQuestFlags(); + elseif (player:hasQuest(110005) == true) then + player:setDirector("openingDirector", false); + player.positionX = 356.09; + player.positionY = 3.74; + player.positionZ = -701.62; + player.rotation = -1.4; + player:getQuest(110005):ClearQuestData(); + player:getQuest(110005):ClearQuestFlags(); + elseif (player:hasQuest(110009) == true) then + player:setDirector("openingDirector", false); + player.positionX = 12.63; + player.positionY = 196.05; + player.positionZ = 131.01; + player.rotation = -1.34; + player:getQuest(110009):ClearQuestData(); + player:getQuest(110009):ClearQuestFlags(); + end + + +end + function onLogin(player) player:sendMessage(0x1D,"",">Callback \"onLogin\" for player script running."); @@ -7,8 +40,8 @@ function onLogin(player) player:sendMessage(0x1D,"",">PlayTime == 0, new player!"); initClassItems(player); - initRaceItems(player); - end + initRaceItems(player); + end end diff --git a/scripts/quests/man/man0l0.lua b/scripts/quests/man/man0l0.lua new file mode 100644 index 00000000..e99d8b48 --- /dev/null +++ b/scripts/quests/man/man0l0.lua @@ -0,0 +1,13 @@ + +--Quest Flags +MAN0L0_FLAG_TUTORIAL1_DONE = 0; +MAN0L0_FLAG_TUTORIAL2_DONE = 1; +MAN0L0_FLAG_TUTORIAL3_DONE = 2; + +MAN0L0_FLAG_MINITUT_DONE1 = 4; +MAN0L0_FLAG_MINITUT_DONE2 = 8; +MAN0L0_FLAG_MINITUT_DONE3 = 16; + +--Result Unique Ids +RESULT_Event000_1 = 0x2B9EBC42; +RESULT_TtrNomal001 = 0x8649D125; \ No newline at end of file diff --git a/scripts/zones/128/npcs/testNutEater.lua b/scripts/zones/128/npcs/testNutEater.lua index 91b02a61..7dc5e546 100644 --- a/scripts/zones/128/npcs/testNutEater.lua +++ b/scripts/zones/128/npcs/testNutEater.lua @@ -1,3 +1,3 @@ -function onInstantiate(npc) +function init(npc) return "/Chara/Npc/Monster/Lemming/NuteaterStandard", false, false, false, false, false, npc.getActorClassId(), false, false, 10, 1, 4, false, false, false, false, false, false, false, false, 2; end \ No newline at end of file diff --git a/scripts/zones/133/npcs/aetheryteP_01@08500.lua b/scripts/zones/133/npcs/aetheryteP_01@08500.lua index e252c1d1..35689e98 100644 --- a/scripts/zones/133/npcs/aetheryteP_01@08500.lua +++ b/scripts/zones/133/npcs/aetheryteP_01@08500.lua @@ -20,7 +20,7 @@ Menu Ids: --]] -function onInstantiate(npc) +function init(npc) return "/Chara/Npc/Object/Aetheryte/AetheryteParent", false, false, false, false, false, npc.getActorClassId(), false, false, 0, 1, "TEST"; end diff --git a/scripts/zones/133/npcs/pplGuildlev_01@08500.lua b/scripts/zones/133/npcs/pplGuildlev_01@08500.lua index b28a12c1..0a609d1e 100644 --- a/scripts/zones/133/npcs/pplGuildlev_01@08500.lua +++ b/scripts/zones/133/npcs/pplGuildlev_01@08500.lua @@ -20,7 +20,7 @@ Menu Ids: --]] -function onInstantiate(npc) +function init(npc) return "/Chara/Npc/Populace/PopulaceGuildlevePublisher", false, false, false, false, false, npc.getActorClassId(), false, false, 0, 1, "TEST"; end diff --git a/scripts/zones/133/npcs/pplLinkshel_01@08500.lua b/scripts/zones/133/npcs/pplLinkshel_01@08500.lua index 0724c0b7..801aee97 100644 --- a/scripts/zones/133/npcs/pplLinkshel_01@08500.lua +++ b/scripts/zones/133/npcs/pplLinkshel_01@08500.lua @@ -1,4 +1,4 @@ -function onInstantiate(npc) +function init(npc) return "/Chara/Npc/Populace/PopulaceLinkshellManager", false, false, false, false, false, npc.getActorClassId(), false, false, 0, 1, "TEST"; end diff --git a/scripts/zones/133/npcs/pplPassiveG_01@08500.lua b/scripts/zones/133/npcs/pplPassiveG_01@08500.lua index d074f797..c9cbb5df 100644 --- a/scripts/zones/133/npcs/pplPassiveG_01@08500.lua +++ b/scripts/zones/133/npcs/pplPassiveG_01@08500.lua @@ -23,7 +23,7 @@ Menu Ids: --]] -function onInstantiate(npc) +function init(npc) return "/Chara/Npc/Populace/PopulacePassiveGLPublisher", false, false, false, false, false, npc.getActorClassId(), false, false, 0, 1, "TEST"; end diff --git a/scripts/zones/133/npcs/pplShopSal_01@08500.lua b/scripts/zones/133/npcs/pplShopSal_01@08500.lua index 26ead793..f33db312 100644 --- a/scripts/zones/133/npcs/pplShopSal_01@08500.lua +++ b/scripts/zones/133/npcs/pplShopSal_01@08500.lua @@ -1,4 +1,4 @@ -function onInstantiate(npc) +function init(npc) return "/Chara/Npc/Populace/Shop/PopulaceShopSalesman", false, false, false, false, false, npc.getActorClassId(), false, false, 0, 1, "TEST"; end diff --git a/scripts/zones/133/npcs/pplShopSal_02@08500.lua b/scripts/zones/133/npcs/pplShopSal_02@08500.lua index 26ead793..f33db312 100644 --- a/scripts/zones/133/npcs/pplShopSal_02@08500.lua +++ b/scripts/zones/133/npcs/pplShopSal_02@08500.lua @@ -1,4 +1,4 @@ -function onInstantiate(npc) +function init(npc) return "/Chara/Npc/Populace/Shop/PopulaceShopSalesman", false, false, false, false, false, npc.getActorClassId(), false, false, 0, 1, "TEST"; end diff --git a/scripts/zones/133/npcs/pplShopSal_03@08500.lua b/scripts/zones/133/npcs/pplShopSal_03@08500.lua index 26ead793..f33db312 100644 --- a/scripts/zones/133/npcs/pplShopSal_03@08500.lua +++ b/scripts/zones/133/npcs/pplShopSal_03@08500.lua @@ -1,4 +1,4 @@ -function onInstantiate(npc) +function init(npc) return "/Chara/Npc/Populace/Shop/PopulaceShopSalesman", false, false, false, false, false, npc.getActorClassId(), false, false, 0, 1, "TEST"; end diff --git a/scripts/zones/133/npcs/pplShopSal_04@08500.lua b/scripts/zones/133/npcs/pplShopSal_04@08500.lua index 6cfebcfd..7eaf9f87 100644 --- a/scripts/zones/133/npcs/pplShopSal_04@08500.lua +++ b/scripts/zones/133/npcs/pplShopSal_04@08500.lua @@ -32,7 +32,7 @@ Menu Ids: --]] -function onInstantiate(npc) +function init(npc) return "/Chara/Npc/Populace/Shop/PopulaceShopSalesman", false, false, false, false, false, npc.getActorClassId(), false, false, 0, 1, "TEST"; end diff --git a/scripts/zones/133/npcs/pplShopSal_05@08500.lua b/scripts/zones/133/npcs/pplShopSal_05@08500.lua index 26ead793..f33db312 100644 --- a/scripts/zones/133/npcs/pplShopSal_05@08500.lua +++ b/scripts/zones/133/npcs/pplShopSal_05@08500.lua @@ -1,4 +1,4 @@ -function onInstantiate(npc) +function init(npc) return "/Chara/Npc/Populace/Shop/PopulaceShopSalesman", false, false, false, false, false, npc.getActorClassId(), false, false, 0, 1, "TEST"; end diff --git a/scripts/zones/133/npcs/pplShopSal_06@08500.lua b/scripts/zones/133/npcs/pplShopSal_06@08500.lua index 26ead793..f33db312 100644 --- a/scripts/zones/133/npcs/pplShopSal_06@08500.lua +++ b/scripts/zones/133/npcs/pplShopSal_06@08500.lua @@ -1,4 +1,4 @@ -function onInstantiate(npc) +function init(npc) return "/Chara/Npc/Populace/Shop/PopulaceShopSalesman", false, false, false, false, false, npc.getActorClassId(), false, false, 0, 1, "TEST"; end diff --git a/scripts/zones/133/npcs/pplShopSal_07@08500.lua b/scripts/zones/133/npcs/pplShopSal_07@08500.lua index 26ead793..f33db312 100644 --- a/scripts/zones/133/npcs/pplShopSal_07@08500.lua +++ b/scripts/zones/133/npcs/pplShopSal_07@08500.lua @@ -1,4 +1,4 @@ -function onInstantiate(npc) +function init(npc) return "/Chara/Npc/Populace/Shop/PopulaceShopSalesman", false, false, false, false, false, npc.getActorClassId(), false, false, 0, 1, "TEST"; end diff --git a/scripts/zones/133/npcs/pplShopSal_08@08500.lua b/scripts/zones/133/npcs/pplShopSal_08@08500.lua index 26ead793..f33db312 100644 --- a/scripts/zones/133/npcs/pplShopSal_08@08500.lua +++ b/scripts/zones/133/npcs/pplShopSal_08@08500.lua @@ -1,4 +1,4 @@ -function onInstantiate(npc) +function init(npc) return "/Chara/Npc/Populace/Shop/PopulaceShopSalesman", false, false, false, false, false, npc.getActorClassId(), false, false, 0, 1, "TEST"; end diff --git a/scripts/zones/133/npcs/pplShopSal_09@08500.lua b/scripts/zones/133/npcs/pplShopSal_09@08500.lua index 26ead793..f33db312 100644 --- a/scripts/zones/133/npcs/pplShopSal_09@08500.lua +++ b/scripts/zones/133/npcs/pplShopSal_09@08500.lua @@ -1,4 +1,4 @@ -function onInstantiate(npc) +function init(npc) return "/Chara/Npc/Populace/Shop/PopulaceShopSalesman", false, false, false, false, false, npc.getActorClassId(), false, false, 0, 1, "TEST"; end diff --git a/scripts/zones/133/npcs/pplShopSal_0a@08500.lua b/scripts/zones/133/npcs/pplShopSal_0a@08500.lua index 26ead793..f33db312 100644 --- a/scripts/zones/133/npcs/pplShopSal_0a@08500.lua +++ b/scripts/zones/133/npcs/pplShopSal_0a@08500.lua @@ -1,4 +1,4 @@ -function onInstantiate(npc) +function init(npc) return "/Chara/Npc/Populace/Shop/PopulaceShopSalesman", false, false, false, false, false, npc.getActorClassId(), false, false, 0, 1, "TEST"; end diff --git a/scripts/zones/133/npcs/pplShopSal_0b@08500.lua b/scripts/zones/133/npcs/pplShopSal_0b@08500.lua index 26ead793..f33db312 100644 --- a/scripts/zones/133/npcs/pplShopSal_0b@08500.lua +++ b/scripts/zones/133/npcs/pplShopSal_0b@08500.lua @@ -1,4 +1,4 @@ -function onInstantiate(npc) +function init(npc) return "/Chara/Npc/Populace/Shop/PopulaceShopSalesman", false, false, false, false, false, npc.getActorClassId(), false, false, 0, 1, "TEST"; end diff --git a/scripts/zones/133/npcs/pplShopSal_0c@08500.lua b/scripts/zones/133/npcs/pplShopSal_0c@08500.lua index 26ead793..f33db312 100644 --- a/scripts/zones/133/npcs/pplShopSal_0c@08500.lua +++ b/scripts/zones/133/npcs/pplShopSal_0c@08500.lua @@ -1,4 +1,4 @@ -function onInstantiate(npc) +function init(npc) return "/Chara/Npc/Populace/Shop/PopulaceShopSalesman", false, false, false, false, false, npc.getActorClassId(), false, false, 0, 1, "TEST"; end diff --git a/scripts/zones/133/npcs/pplShopSal_0d@08500.lua b/scripts/zones/133/npcs/pplShopSal_0d@08500.lua index 26ead793..f33db312 100644 --- a/scripts/zones/133/npcs/pplShopSal_0d@08500.lua +++ b/scripts/zones/133/npcs/pplShopSal_0d@08500.lua @@ -1,4 +1,4 @@ -function onInstantiate(npc) +function init(npc) return "/Chara/Npc/Populace/Shop/PopulaceShopSalesman", false, false, false, false, false, npc.getActorClassId(), false, false, 0, 1, "TEST"; end diff --git a/scripts/zones/133/npcs/pplShopSal_0e@08500.lua b/scripts/zones/133/npcs/pplShopSal_0e@08500.lua index 26ead793..f33db312 100644 --- a/scripts/zones/133/npcs/pplShopSal_0e@08500.lua +++ b/scripts/zones/133/npcs/pplShopSal_0e@08500.lua @@ -1,4 +1,4 @@ -function onInstantiate(npc) +function init(npc) return "/Chara/Npc/Populace/Shop/PopulaceShopSalesman", false, false, false, false, false, npc.getActorClassId(), false, false, 0, 1, "TEST"; end diff --git a/scripts/zones/133/npcs/pplShopSal_0f@08500.lua b/scripts/zones/133/npcs/pplShopSal_0f@08500.lua index 26ead793..f33db312 100644 --- a/scripts/zones/133/npcs/pplShopSal_0f@08500.lua +++ b/scripts/zones/133/npcs/pplShopSal_0f@08500.lua @@ -1,4 +1,4 @@ -function onInstantiate(npc) +function init(npc) return "/Chara/Npc/Populace/Shop/PopulaceShopSalesman", false, false, false, false, false, npc.getActorClassId(), false, false, 0, 1, "TEST"; end diff --git a/scripts/zones/133/npcs/pplShopSal_10@08500.lua b/scripts/zones/133/npcs/pplShopSal_10@08500.lua index 26ead793..f33db312 100644 --- a/scripts/zones/133/npcs/pplShopSal_10@08500.lua +++ b/scripts/zones/133/npcs/pplShopSal_10@08500.lua @@ -1,4 +1,4 @@ -function onInstantiate(npc) +function init(npc) return "/Chara/Npc/Populace/Shop/PopulaceShopSalesman", false, false, false, false, false, npc.getActorClassId(), false, false, 0, 1, "TEST"; end diff --git a/scripts/zones/133/npcs/pplShopSal_11@08500.lua b/scripts/zones/133/npcs/pplShopSal_11@08500.lua index 26ead793..f33db312 100644 --- a/scripts/zones/133/npcs/pplShopSal_11@08500.lua +++ b/scripts/zones/133/npcs/pplShopSal_11@08500.lua @@ -1,4 +1,4 @@ -function onInstantiate(npc) +function init(npc) return "/Chara/Npc/Populace/Shop/PopulaceShopSalesman", false, false, false, false, false, npc.getActorClassId(), false, false, 0, 1, "TEST"; end diff --git a/scripts/zones/133/npcs/pplStd_01@08500.lua b/scripts/zones/133/npcs/pplStd_01@08500.lua index b5c9c135..34c6215b 100644 --- a/scripts/zones/133/npcs/pplStd_01@08500.lua +++ b/scripts/zones/133/npcs/pplStd_01@08500.lua @@ -1,4 +1,4 @@ -function onInstantiate(npc) +function init(npc) return "/Chara/Npc/Populace/PopulaceStandard", false, false, false, false, false, npc.getActorClassId(), false, false, 0, 1, "TEST"; end diff --git a/scripts/zones/133/npcs/pplStd_02@08500.lua b/scripts/zones/133/npcs/pplStd_02@08500.lua index 16f3ccfd..9a7a1c5a 100644 --- a/scripts/zones/133/npcs/pplStd_02@08500.lua +++ b/scripts/zones/133/npcs/pplStd_02@08500.lua @@ -1,4 +1,4 @@ -function onInstantiate(npc) +function init(npc) return "/Chara/Npc/Populace/PopulaceStandard", false, false, false, false, false, npc.getActorClassId(), false, false, 0, 1, "TEST"; end diff --git a/scripts/zones/133/npcs/pplStd_03@08500.lua b/scripts/zones/133/npcs/pplStd_03@08500.lua index 2c46d59d..cd8bb503 100644 --- a/scripts/zones/133/npcs/pplStd_03@08500.lua +++ b/scripts/zones/133/npcs/pplStd_03@08500.lua @@ -1,4 +1,4 @@ -function onInstantiate(npc) +function init(npc) return "/Chara/Npc/Populace/PopulaceStandard", false, false, false, false, false, npc.getActorClassId(), false, false, 0, 1, "TEST"; end diff --git a/scripts/zones/133/npcs/pplStd_04@08500.lua b/scripts/zones/133/npcs/pplStd_04@08500.lua index 04081d45..bc72b122 100644 --- a/scripts/zones/133/npcs/pplStd_04@08500.lua +++ b/scripts/zones/133/npcs/pplStd_04@08500.lua @@ -1,4 +1,4 @@ -function onInstantiate(npc) +function init(npc) return "/Chara/Npc/Populace/PopulaceStandard", false, false, false, false, false, npc.getActorClassId(), false, false, 0, 1, "TEST"; end diff --git a/scripts/zones/133/npcs/pplStd_05@08500.lua b/scripts/zones/133/npcs/pplStd_05@08500.lua index 2887966b..e1e3ae0a 100644 --- a/scripts/zones/133/npcs/pplStd_05@08500.lua +++ b/scripts/zones/133/npcs/pplStd_05@08500.lua @@ -1,4 +1,4 @@ -function onInstantiate(npc) +function init(npc) return "/Chara/Npc/Populace/PopulaceStandard", false, false, false, false, false, npc.getActorClassId(), false, false, 0, 1, "TEST"; end diff --git a/scripts/zones/133/npcs/pplStd_06@08500.lua b/scripts/zones/133/npcs/pplStd_06@08500.lua index f46baa77..afbdee77 100644 --- a/scripts/zones/133/npcs/pplStd_06@08500.lua +++ b/scripts/zones/133/npcs/pplStd_06@08500.lua @@ -1,4 +1,4 @@ -function onInstantiate(npc) +function init(npc) return "/Chara/Npc/Populace/PopulaceStandard", false, false, false, false, false, npc.getActorClassId(), false, false, 0, 1, "TEST"; end diff --git a/scripts/zones/133/npcs/pplStd_07@08500.lua b/scripts/zones/133/npcs/pplStd_07@08500.lua index 081188ed..5081d5bd 100644 --- a/scripts/zones/133/npcs/pplStd_07@08500.lua +++ b/scripts/zones/133/npcs/pplStd_07@08500.lua @@ -1,4 +1,4 @@ -function onInstantiate(npc) +function init(npc) return "/Chara/Npc/Populace/PopulaceStandard", false, false, false, false, false, npc.getActorClassId(), false, false, 0, 1, "TEST"; end diff --git a/scripts/zones/133/npcs/pplStd_08@08500.lua b/scripts/zones/133/npcs/pplStd_08@08500.lua index 68b2f8d8..f8c621a1 100644 --- a/scripts/zones/133/npcs/pplStd_08@08500.lua +++ b/scripts/zones/133/npcs/pplStd_08@08500.lua @@ -1,4 +1,4 @@ -function onInstantiate(npc) +function init(npc) return "/Chara/Npc/Populace/PopulaceStandard", false, false, false, false, false, npc.getActorClassId(), false, false, 0, 1, "TEST"; end diff --git a/scripts/zones/133/npcs/pplStd_09@08500.lua b/scripts/zones/133/npcs/pplStd_09@08500.lua index 19dfc05f..174eb851 100644 --- a/scripts/zones/133/npcs/pplStd_09@08500.lua +++ b/scripts/zones/133/npcs/pplStd_09@08500.lua @@ -1,4 +1,4 @@ -function onInstantiate(npc) +function init(npc) return "/Chara/Npc/Populace/PopulaceStandard", false, false, false, false, false, npc.getActorClassId(), false, false, 0, 1, "TEST"; end diff --git a/scripts/zones/133/npcs/pplStd_0a@08500.lua b/scripts/zones/133/npcs/pplStd_0a@08500.lua index a7090324..3c63bd8b 100644 --- a/scripts/zones/133/npcs/pplStd_0a@08500.lua +++ b/scripts/zones/133/npcs/pplStd_0a@08500.lua @@ -1,4 +1,4 @@ -function onInstantiate(npc) +function init(npc) return "/Chara/Npc/Populace/PopulaceStandard", false, false, false, false, false, npc.getActorClassId(), false, false, 0, 1, "TEST"; end diff --git a/scripts/zones/133/npcs/pplStd_0b@08500.lua b/scripts/zones/133/npcs/pplStd_0b@08500.lua index 8926d810..cd7a3f45 100644 --- a/scripts/zones/133/npcs/pplStd_0b@08500.lua +++ b/scripts/zones/133/npcs/pplStd_0b@08500.lua @@ -1,4 +1,4 @@ -function onInstantiate(npc) +function init(npc) return "/Chara/Npc/Populace/PopulaceStandard", false, false, false, false, false, npc.getActorClassId(), false, false, 0, 1, "TEST"; end diff --git a/scripts/zones/133/npcs/pplStd_0c@08500.lua b/scripts/zones/133/npcs/pplStd_0c@08500.lua index 51799dcb..c5d09cef 100644 --- a/scripts/zones/133/npcs/pplStd_0c@08500.lua +++ b/scripts/zones/133/npcs/pplStd_0c@08500.lua @@ -1,4 +1,4 @@ -function onInstantiate(npc) +function init(npc) return "/Chara/Npc/Populace/PopulaceStandard", false, false, false, false, false, npc.getActorClassId(), false, false, 0, 1, "TEST"; end diff --git a/scripts/zones/133/npcs/pplStd_0d@08500.lua b/scripts/zones/133/npcs/pplStd_0d@08500.lua index f90827bd..004f497a 100644 --- a/scripts/zones/133/npcs/pplStd_0d@08500.lua +++ b/scripts/zones/133/npcs/pplStd_0d@08500.lua @@ -1,4 +1,4 @@ -function onInstantiate(npc) +function init(npc) return "/Chara/Npc/Populace/PopulaceStandard", false, false, false, false, false, npc.getActorClassId(), false, false, 0, 1, "TEST"; end diff --git a/scripts/zones/133/npcs/pplStd_0e@08500.lua b/scripts/zones/133/npcs/pplStd_0e@08500.lua index 009f5f2a..c764559a 100644 --- a/scripts/zones/133/npcs/pplStd_0e@08500.lua +++ b/scripts/zones/133/npcs/pplStd_0e@08500.lua @@ -1,4 +1,4 @@ -function onInstantiate(npc) +function init(npc) return "/Chara/Npc/Populace/PopulaceStandard", false, false, false, false, false, npc.getActorClassId(), false, false, 0, 1, "TEST"; end diff --git a/scripts/zones/133/npcs/pplStd_0f@08500.lua b/scripts/zones/133/npcs/pplStd_0f@08500.lua index 22b94d0a..ee4a2a8b 100644 --- a/scripts/zones/133/npcs/pplStd_0f@08500.lua +++ b/scripts/zones/133/npcs/pplStd_0f@08500.lua @@ -1,4 +1,4 @@ -function onInstantiate(npc) +function init(npc) return "/Chara/Npc/Populace/PopulaceStandard", false, false, false, false, false, npc.getActorClassId(), false, false, 0, 1, "TEST"; end diff --git a/scripts/zones/133/npcs/pplStd_10@08500.lua b/scripts/zones/133/npcs/pplStd_10@08500.lua index 716f20bd..116c149a 100644 --- a/scripts/zones/133/npcs/pplStd_10@08500.lua +++ b/scripts/zones/133/npcs/pplStd_10@08500.lua @@ -1,4 +1,4 @@ -function onInstantiate(npc) +function init(npc) return "/Chara/Npc/Populace/PopulaceStandard", false, false, false, false, false, npc.getActorClassId(), false, false, 0, 1, "TEST"; end diff --git a/scripts/zones/133/npcs/pplStd_11@08500.lua b/scripts/zones/133/npcs/pplStd_11@08500.lua index a88e6c7d..9d73b68f 100644 --- a/scripts/zones/133/npcs/pplStd_11@08500.lua +++ b/scripts/zones/133/npcs/pplStd_11@08500.lua @@ -1,4 +1,4 @@ -function onInstantiate(npc) +function init(npc) return "/Chara/Npc/Populace/PopulaceStandard", false, false, false, false, false, npc.getActorClassId(), false, false, 0, 1, "TEST"; end diff --git a/scripts/zones/133/npcs/pplStd_12@08500.lua b/scripts/zones/133/npcs/pplStd_12@08500.lua index 68b2f8d8..f8c621a1 100644 --- a/scripts/zones/133/npcs/pplStd_12@08500.lua +++ b/scripts/zones/133/npcs/pplStd_12@08500.lua @@ -1,4 +1,4 @@ -function onInstantiate(npc) +function init(npc) return "/Chara/Npc/Populace/PopulaceStandard", false, false, false, false, false, npc.getActorClassId(), false, false, 0, 1, "TEST"; end diff --git a/scripts/zones/133/npcs/pplStd_13@08500.lua b/scripts/zones/133/npcs/pplStd_13@08500.lua index e7e1bde1..36d8672e 100644 --- a/scripts/zones/133/npcs/pplStd_13@08500.lua +++ b/scripts/zones/133/npcs/pplStd_13@08500.lua @@ -1,4 +1,4 @@ -function onInstantiate(npc) +function init(npc) return "/Chara/Npc/Populace/PopulaceStandard", false, false, false, false, false, npc.getActorClassId(), false, false, 0, 1, "TEST"; end diff --git a/scripts/zones/133/npcs/pplStd_14@08500.lua b/scripts/zones/133/npcs/pplStd_14@08500.lua index e7e1bde1..36d8672e 100644 --- a/scripts/zones/133/npcs/pplStd_14@08500.lua +++ b/scripts/zones/133/npcs/pplStd_14@08500.lua @@ -1,4 +1,4 @@ -function onInstantiate(npc) +function init(npc) return "/Chara/Npc/Populace/PopulaceStandard", false, false, false, false, false, npc.getActorClassId(), false, false, 0, 1, "TEST"; end diff --git a/scripts/zones/133/npcs/taskBoard_01@08500.lua b/scripts/zones/133/npcs/taskBoard_01@08500.lua index 2862b9e5..7e60d68d 100644 --- a/scripts/zones/133/npcs/taskBoard_01@08500.lua +++ b/scripts/zones/133/npcs/taskBoard_01@08500.lua @@ -1,4 +1,4 @@ -function onInstantiate(npc) +function init(npc) return "/Chara/Npc/Object/TaskBoard", false, false, false, false, false, npc.getActorClassId(), false, false, 0, 1, "TEST"; end diff --git a/scripts/zones/155/npcs/doorStd_fst0Twn01a_31@0CE00.lua b/scripts/zones/155/npcs/doorStd_fst0Twn01a_31@0CE00.lua new file mode 100644 index 00000000..62ea5815 --- /dev/null +++ b/scripts/zones/155/npcs/doorStd_fst0Twn01a_31@0CE00.lua @@ -0,0 +1,7 @@ +function init(npc) + return "/Chara/Npc/MapObj/DoorStandard", false, false, false, false, false, 5900001 , false, false, 0, 0, 0x141, 0xB7d; +end + +function onEventStarted(player, npc, triggerName) + +end \ No newline at end of file diff --git a/scripts/zones/155/zone.lua b/scripts/zones/155/zone.lua new file mode 100644 index 00000000..703d61b9 --- /dev/null +++ b/scripts/zones/155/zone.lua @@ -0,0 +1,10 @@ + + +function onZoneInit(zone) +end + +function onZoneIn(zone, player) +end + +function onZoneOut(zone, player) +end \ No newline at end of file diff --git a/scripts/zones/166/npcs/openingStop_fstBtl03_03@0A600.lua b/scripts/zones/166/npcs/openingStop_fstBtl03_03@0A600.lua index 3e1d2f67..0e27be6e 100644 --- a/scripts/zones/166/npcs/openingStop_fstBtl03_03@0A600.lua +++ b/scripts/zones/166/npcs/openingStop_fstBtl03_03@0A600.lua @@ -1,4 +1,4 @@ -function onInstantiate(npc) +function init(npc) return "/Chara/Npc/Object/OpeningStoperF0B1", false, false, false, false, false, 0x10A350, false, false, 0, 1, "TEST"; end diff --git a/scripts/zones/193/npcs/fighterAlly_ocn0Btl02_02@0C196.lua b/scripts/zones/193/npcs/fighterAlly_ocn0Btl02_02@0C196.lua new file mode 100644 index 00000000..046a9adf --- /dev/null +++ b/scripts/zones/193/npcs/fighterAlly_ocn0Btl02_02@0C196.lua @@ -0,0 +1,3 @@ +function init(npc) + return "/Chara/Npc/Monster/Fighter/FighterAllyOpeningHealer", false, false, false, false, false, npc.getActorClassId(), false, false, 10, 1, 4, false, false, false, false, false, false, false, false, 2; +end \ No newline at end of file diff --git a/scripts/zones/193/npcs/fighterAlly_ocn0Btl02_03@0C196.lua b/scripts/zones/193/npcs/fighterAlly_ocn0Btl02_03@0C196.lua new file mode 100644 index 00000000..bb3e993c --- /dev/null +++ b/scripts/zones/193/npcs/fighterAlly_ocn0Btl02_03@0C196.lua @@ -0,0 +1,3 @@ +function init(npc) + return "/Chara/Npc/Monster/Fighter/FighterAllyOpeningAttacker", false, false, false, false, false, npc.getActorClassId(), false, false, 10, 1, 4, false, false, false, false, false, false, false, false, 2; +end \ No newline at end of file diff --git a/scripts/zones/193/npcs/jellyfishSc_ocn0Btl02_04@0C196.lua b/scripts/zones/193/npcs/jellyfishSc_ocn0Btl02_04@0C196.lua new file mode 100644 index 00000000..47696331 --- /dev/null +++ b/scripts/zones/193/npcs/jellyfishSc_ocn0Btl02_04@0C196.lua @@ -0,0 +1,3 @@ +function init(npc) + return "/Chara/Npc/Monster/Jellyfish/JellyfishScenarioLimsaLv00", false, false, false, false, false, npc.getActorClassId(), true, true, 10, 0, 4, false, false, false, false, false, false, false, false, 2; +end \ No newline at end of file diff --git a/scripts/zones/193/npcs/pplStd_01@0C100.lua b/scripts/zones/193/npcs/pplStd_01@0C100.lua new file mode 100644 index 00000000..cbdfb0e9 --- /dev/null +++ b/scripts/zones/193/npcs/pplStd_01@0C100.lua @@ -0,0 +1,19 @@ +function init(npc) + return "/Chara/Npc/Populace/PopulaceStandard", false, false, false, false, false, npc.getActorClassId(), false, false, 0, 1, "TEST"; +end + +function onEventStarted(player, npc, triggerName) + + man0l0Quest = getStaticActor("Man0l0"); + + if (triggerName == "talkDefault") then + player:runEventFunction("delegateEvent", player, man0l0Quest, "processEvent000_4", nil, nil, nil); + else + player:endEvent(); + end + +end + +function onEventUpdate(player, npc) + player:endEvent(); +end \ No newline at end of file diff --git a/scripts/zones/193/npcs/pplStd_02@0C100.lua b/scripts/zones/193/npcs/pplStd_02@0C100.lua new file mode 100644 index 00000000..8c4fdb87 --- /dev/null +++ b/scripts/zones/193/npcs/pplStd_02@0C100.lua @@ -0,0 +1,19 @@ +function init(npc) + return "/Chara/Npc/Populace/PopulaceStandard", false, false, false, false, false, npc.getActorClassId(), false, false, 0, 1, "TEST"; +end + +function onEventStarted(player, npc, triggerName) + + man0l0Quest = getStaticActor("Man0l0"); + + if (triggerName == "talkDefault") then + player:runEventFunction("delegateEvent", player, man0l0Quest, "processEvent000_5", nil, nil, nil); + else + player:endEvent(); + end + +end + +function onEventUpdate(player, npc) + player:endEvent(); +end \ No newline at end of file diff --git a/scripts/zones/193/npcs/pplStd_03@0C100.lua b/scripts/zones/193/npcs/pplStd_03@0C100.lua new file mode 100644 index 00000000..19d3251a --- /dev/null +++ b/scripts/zones/193/npcs/pplStd_03@0C100.lua @@ -0,0 +1,19 @@ +function init(npc) + return "/Chara/Npc/Populace/PopulaceStandard", false, false, false, false, false, npc.getActorClassId(), false, false, 0, 1, "TEST"; +end + +function onEventStarted(player, npc, triggerName) + + man0l0Quest = getStaticActor("Man0l0"); + + if (triggerName == "talkDefault") then + player:runEventFunction("delegateEvent", player, man0l0Quest, "processEvent000_6", nil, nil, nil); + else + player:endEvent(); + end + +end + +function onEventUpdate(player, npc) + player:endEvent(); +end \ No newline at end of file diff --git a/scripts/zones/193/npcs/pplStd_04@0C100.lua b/scripts/zones/193/npcs/pplStd_04@0C100.lua new file mode 100644 index 00000000..7872c17e --- /dev/null +++ b/scripts/zones/193/npcs/pplStd_04@0C100.lua @@ -0,0 +1,19 @@ +function init(npc) + return "/Chara/Npc/Populace/PopulaceStandard", false, false, false, false, false, npc.getActorClassId(), false, false, 0, 1, "TEST"; +end + +function onEventStarted(player, npc, triggerName) + + man0l0Quest = getStaticActor("Man0l0"); + + if (triggerName == "talkDefault") then + player:runEventFunction("delegateEvent", player, man0l0Quest, "processEvent000_7", nil, nil, nil); + else + player:endEvent(); + end + +end + +function onEventUpdate(player, npc) + player:endEvent(); +end \ No newline at end of file diff --git a/scripts/zones/193/npcs/pplStd_05@0C100.lua b/scripts/zones/193/npcs/pplStd_05@0C100.lua new file mode 100644 index 00000000..ed315de5 --- /dev/null +++ b/scripts/zones/193/npcs/pplStd_05@0C100.lua @@ -0,0 +1,43 @@ +require("/quests/man/man0l0") + +function init(npc) + return "/Chara/Npc/Populace/PopulaceStandard", false, false, false, false, false, npc.getActorClassId(), false, false, 0, 1, "TEST"; +end + +function onSpawn(player, npc) + + man0l0Quest = player:getQuest("man0l0"); + + if (man0l0Quest ~= nil) then + if (man0l0Quest ~= nil) then + if (man0l0Quest:GetQuestFlag(MAN0L0_FLAG_MINITUT_DONE3) == false) then + npc:setQuestGraphic(player, 0x2); + end + end + end +end + +function onEventStarted(player, npc, triggerName) + + man0l0Quest = player:getQuest("man0l0"); + + if (triggerName == "talkDefault") then + if (man0l0Quest:GetQuestFlag(MAN0L0_FLAG_MINITUT_DONE3) == false) then + player:runEventFunction("delegateEvent", player, man0l0Quest, "processTtrMini003", nil, nil, nil); + npc:setQuestGraphic(player, 0x0); + man0l0Quest:SetQuestFlag(MAN0L0_FLAG_MINITUT_DONE3, true); + man0l0Quest:SaveData(); + + player:getDirector():onTalked(npc); + else + player:runEventFunction("delegateEvent", player, man0l0Quest, "processEvent000_8", nil, nil, nil); + end + else + player:endEvent(); + end + +end + +function onEventUpdate(player, npc) + player:endEvent(); +end \ No newline at end of file diff --git a/scripts/zones/193/npcs/pplStd_06@0C100.lua b/scripts/zones/193/npcs/pplStd_06@0C100.lua new file mode 100644 index 00000000..54895bc4 --- /dev/null +++ b/scripts/zones/193/npcs/pplStd_06@0C100.lua @@ -0,0 +1,19 @@ +function init(npc) + return "/Chara/Npc/Populace/PopulaceStandard", false, false, false, false, false, npc.getActorClassId(), false, false, 0, 1, "TEST"; +end + +function onEventStarted(player, npc, triggerName) + + man0l0Quest = getStaticActor("Man0l0"); + + if (triggerName == "talkDefault") then + player:runEventFunction("delegateEvent", player, man0l0Quest, "processEvent000_9", nil, nil, nil); + else + player:endEvent(); + end + +end + +function onEventUpdate(player, npc) + player:endEvent(); +end \ No newline at end of file diff --git a/scripts/zones/193/npcs/pplStd_07@0C100.lua b/scripts/zones/193/npcs/pplStd_07@0C100.lua new file mode 100644 index 00000000..79b276f8 --- /dev/null +++ b/scripts/zones/193/npcs/pplStd_07@0C100.lua @@ -0,0 +1,19 @@ +function init(npc) + return "/Chara/Npc/Populace/PopulaceStandard", false, false, false, false, false, npc.getActorClassId(), false, false, 0, 1, "TEST"; +end + +function onEventStarted(player, npc, triggerName) + + man0l0Quest = getStaticActor("Man0l0"); + + if (triggerName == "talkDefault") then + player:runEventFunction("delegateEvent", player, man0l0Quest, "processEvent000_10", nil, nil, nil); + else + player:endEvent(); + end + +end + +function onEventUpdate(player, npc) + player:endEvent(); +end \ No newline at end of file diff --git a/scripts/zones/193/npcs/pplStd_08@0C100.lua b/scripts/zones/193/npcs/pplStd_08@0C100.lua new file mode 100644 index 00000000..2144a8ed --- /dev/null +++ b/scripts/zones/193/npcs/pplStd_08@0C100.lua @@ -0,0 +1,19 @@ +function init(npc) + return "/Chara/Npc/Populace/PopulaceStandard", false, false, false, false, false, npc.getActorClassId(), false, false, 0, 1, "TEST"; +end + +function onEventStarted(player, npc, triggerName) + + man0l0Quest = getStaticActor("Man0l0"); + + if (triggerName == "talkDefault") then + player:runEventFunction("delegateEvent", player, man0l0Quest, "processEvent000_11", nil, nil, nil); + else + player:endEvent(); + end + +end + +function onEventUpdate(player, npc) + player:endEvent(); +end \ No newline at end of file diff --git a/scripts/zones/193/npcs/pplStd_09@0C100.lua b/scripts/zones/193/npcs/pplStd_09@0C100.lua new file mode 100644 index 00000000..87d02d5e --- /dev/null +++ b/scripts/zones/193/npcs/pplStd_09@0C100.lua @@ -0,0 +1,19 @@ +function init(npc) + return "/Chara/Npc/Populace/PopulaceStandard", false, false, false, false, false, npc.getActorClassId(), false, false, 0, 1, "TEST"; +end + +function onEventStarted(player, npc, triggerName) + + man0l0Quest = getStaticActor("Man0l0"); + + if (triggerName == "talkDefault") then + player:runEventFunction("delegateEvent", player, man0l0Quest, "processEvent000_12", nil, nil, nil); + else + player:endEvent(); + end + +end + +function onEventUpdate(player, npc) + player:endEvent(); +end \ No newline at end of file diff --git a/scripts/zones/193/npcs/pplStd_0a@0C100.lua b/scripts/zones/193/npcs/pplStd_0a@0C100.lua new file mode 100644 index 00000000..073378ef --- /dev/null +++ b/scripts/zones/193/npcs/pplStd_0a@0C100.lua @@ -0,0 +1,46 @@ +require("/quests/man/man0l0") + +function init(npc) + return "/Chara/Npc/Populace/PopulaceStandard", false, false, false, false, false, npc.getActorClassId(), false, false, 0, 1, "TEST"; +end + +function onSpawn(player, npc) + + man0l0Quest = player:getQuest("man0l0"); + + if (man0l0Quest ~= nil) then + if (man0l0Quest:GetQuestFlag(MAN0L0_FLAG_MINITUT_DONE2) == false) then + npc:setQuestGraphic(player, 0x2); + end + end + +end + +function onEventStarted(player, npc, triggerName) + + man0l0Quest = player:getQuest("man0l0"); + + if (man0l0Quest ~= nil) then + if (triggerName == "talkDefault") then + if (man0l0Quest:GetQuestFlag(MAN0L0_FLAG_MINITUT_DONE2) == false) then + player:runEventFunction("delegateEvent", player, man0l0Quest, "processTtrMini002", nil, nil, nil); + npc:setQuestGraphic(player, 0x0); + man0l0Quest:SetQuestFlag(MAN0L0_FLAG_MINITUT_DONE2, true); + man0l0Quest:SaveData(); + + player:getDirector():onTalked(npc); + else + player:runEventFunction("delegateEvent", player, man0l0Quest, "processEvent000_13", nil, nil, nil); + end + else + player:endEvent(); + end + else + player:endEvent(); + end + +end + +function onEventUpdate(player, npc) + player:endEvent(); +end \ No newline at end of file diff --git a/scripts/zones/193/npcs/pplStd_0b@0C100.lua b/scripts/zones/193/npcs/pplStd_0b@0C100.lua new file mode 100644 index 00000000..908b457d --- /dev/null +++ b/scripts/zones/193/npcs/pplStd_0b@0C100.lua @@ -0,0 +1,20 @@ +function init(npc) + return "/Chara/Npc/Populace/PopulaceStandard", false, false, false, false, false, npc.getActorClassId(), false, false, 0, 1, "TEST"; +end + +function onEventStarted(player, npc, triggerName) + + man0l0Quest = getStaticActor("Man0l0"); + + if (triggerName == "talkDefault") then + --player:runEventFunction("delegateEvent", player, man0l0Quest, "processEvent000_9", nil, nil, nil); + player:runEventFunction("delegateEvent", player, man0l0Quest, "processEvent000_14", nil, nil, nil); + else + player:endEvent(); + end + +end + +function onEventUpdate(player, npc) + player:endEvent(); +end \ No newline at end of file diff --git a/scripts/zones/193/npcs/pplStd_0c@0C100.lua b/scripts/zones/193/npcs/pplStd_0c@0C100.lua new file mode 100644 index 00000000..dac715e7 --- /dev/null +++ b/scripts/zones/193/npcs/pplStd_0c@0C100.lua @@ -0,0 +1,19 @@ +function init(npc) + return "/Chara/Npc/Populace/PopulaceStandard", false, false, false, false, false, npc.getActorClassId(), false, false, 0, 1, "TEST"; +end + +function onEventStarted(player, npc, triggerName) + + man0l0Quest = getStaticActor("Man0l0"); + + if (triggerName == "talkDefault") then + player:runEventFunction("delegateEvent", player, man0l0Quest, "processEvent000_15", nil, nil, nil); + else + player:endEvent(); + end + +end + +function onEventUpdate(player, npc) + player:endEvent(); +end \ No newline at end of file diff --git a/scripts/zones/193/npcs/pplStd_0d@0C100.lua b/scripts/zones/193/npcs/pplStd_0d@0C100.lua new file mode 100644 index 00000000..facd1c34 --- /dev/null +++ b/scripts/zones/193/npcs/pplStd_0d@0C100.lua @@ -0,0 +1,19 @@ +function init(npc) + return "/Chara/Npc/Populace/PopulaceStandard", false, false, false, false, false, npc.getActorClassId(), false, false, 0, 1, "TEST"; +end + +function onEventStarted(player, npc, triggerName) + + man0l0Quest = getStaticActor("Man0l0"); + + if (triggerName == "talkDefault") then + player:runEventFunction("delegateEvent", player, man0l0Quest, "processEvent000_16", nil, nil, nil); + else + player:endEvent(); + end + +end + +function onEventUpdate(player, npc) + player:endEvent(); +end \ No newline at end of file diff --git a/scripts/zones/193/npcs/pplStd_0e@0C100.lua b/scripts/zones/193/npcs/pplStd_0e@0C100.lua new file mode 100644 index 00000000..a53f24e9 --- /dev/null +++ b/scripts/zones/193/npcs/pplStd_0e@0C100.lua @@ -0,0 +1,19 @@ +function init(npc) + return "/Chara/Npc/Populace/PopulaceStandard", false, false, false, false, false, npc.getActorClassId(), false, false, 0, 1, "TEST"; +end + +function onEventStarted(player, npc, triggerName) + + man0l0Quest = getStaticActor("Man0l0"); + + if (triggerName == "talkDefault") then + player:runEventFunction("delegateEvent", player, man0l0Quest, "processEvent000_17", nil, nil, nil); + else + player:endEvent(); + end + +end + +function onEventUpdate(player, npc) + player:endEvent(); +end \ No newline at end of file diff --git a/scripts/zones/193/npcs/pplStd_0f@0C100.lua b/scripts/zones/193/npcs/pplStd_0f@0C100.lua new file mode 100644 index 00000000..54921d45 --- /dev/null +++ b/scripts/zones/193/npcs/pplStd_0f@0C100.lua @@ -0,0 +1,55 @@ +require("/quests/man/man0l0") + +function init(npc) + return "/Chara/Npc/Populace/PopulaceTutorial", false, false, false, false, false, npc.getActorClassId(), false, false, 0, 1, "TEST"; +end + +function onSpawn(player, npc) + + man0l0Quest = player:getQuest("Man0l0"); + + if (man0l0Quest ~= nil) then + if (man0l0Quest ~= nil and man0l0Quest:GetQuestFlag(MAN0L0_FLAG_MINITUT_DONE1) == true and man0l0Quest:GetQuestFlag(MAN0L0_FLAG_MINITUT_DONE2) == true and man0l0Quest:GetQuestFlag(MAN0L0_FLAG_MINITUT_DONE3) == true) then + player:setEventStatus(npc, "pushDefault", true, 0x2); + npc:setQuestGraphic(player, 0x3); + else + player:setEventStatus(npc, "pushDefault", true, 0x2); + npc:setQuestGraphic(player, 0x3); + end + end + +end + +function onEventStarted(player, npc, triggerName) + + if (triggerName == "pushDefault") then + man0l0Quest = getStaticActor("Man0l0"); + player:runEventFunction("delegateEvent", player, man0l0Quest, "processEventNewRectAsk", nil); + else + player:endEvent(); + end + +end + +function onEventUpdate(player, npc, resultId, choice) + + if (resultId == 0x2B9EBC42) then + player:endEvent(); + player:setDirector("QuestDirectorMan0l001", true); + + worldMaster = getWorldMaster(); + player:sendGameMessage(player, worldMaster, 34108, 0x20); + player:sendGameMessage(player, worldMaster, 50011, 0x20); + + getWorldManager():DoPlayerMoveInZone(player, 9); + player:kickEvent(player:getDirector(), "noticeEvent", true); + else + if (choice == 1) then + man0l0Quest = player:getQuest("Man0l0"); + player:runEventFunction("delegateEvent", player, man0l0Quest, "processEvent000_2", nil, nil, nil, nil); + else + player:endEvent(); + end + end + +end \ No newline at end of file diff --git a/scripts/zones/193/npcs/pplStd_11@0C100.lua b/scripts/zones/193/npcs/pplStd_11@0C100.lua index 8d43ebf5..799d5275 100644 --- a/scripts/zones/193/npcs/pplStd_11@0C100.lua +++ b/scripts/zones/193/npcs/pplStd_11@0C100.lua @@ -1,13 +1,65 @@ -function onInstantiate(npc) +require("/quests/man/man0l0") + +function init(npc) return "/Chara/Npc/Populace/PopulaceTutorial", false, false, false, false, false, npc.getActorClassId(), false, false, 0, 1, "TEST"; end +function onSpawn(player, npc) + + man0l0Quest = player:getQuest("Man0l0"); + + if (man0l0Quest ~= nil) then + if (man0l0Quest:GetQuestFlag(MAN0L0_FLAG_MINITUT_DONE1) == false) then + npc:setQuestGraphic(player, 0x2); + end + + if (man0l0Quest:GetQuestFlag(MAN0L0_FLAG_TUTORIAL3_DONE) == true) then + player:setEventStatus(npc, "pushDefault", false, 0x2); + end + end + +end + function onEventStarted(player, npc, triggerName) - man0l0Quest = getStaticActor("Man0l0"); - player:runEventFunction("delegateEvent", player, man0l0Quest, "processTtrNomal003", nil, nil, nil); - --player:runEventFunction("delegateEvent", player, defaultSea, "defaultTalkWithFrithuric_002", nil, nil, nil); --LTW - --player:runEventFunction("delegateEvent", player, defaultSea, "defaultTalkWithFrithuric_003", nil, nil, nil); --LTW NO GUILD + + man0l0Quest = player:getQuest("Man0l0"); + + if (man0l0Quest ~= nil) then + + if (triggerName == "pushDefault") then + player:runEventFunction("delegateEvent", player, man0l0Quest, "processTtrNomal002", nil, nil, nil); + elseif (triggerName == "talkDefault") then + --Is doing talk tutorial? + if (man0l0Quest:GetQuestFlag(MAN0L0_FLAG_TUTORIAL3_DONE) == false) then + player:setEventStatus(npc, "pushDefault", false, 0x2); + player:runEventFunction("delegateEvent", player, man0l0Quest, "processTtrNomal003", nil, nil, nil); + man0l0Quest:SetQuestFlag(MAN0L0_FLAG_TUTORIAL3_DONE, true); + npc:setQuestGraphic(player, 0x2); + man0l0Quest:SaveData(); + + player:getDirector():onTalked(npc); + --Was he talked to for the mini tutorial? + else + player:runEventFunction("delegateEvent", player, man0l0Quest, "processTtrMini001", nil, nil, nil); + + if (man0l0Quest:GetQuestFlag(MAN0L0_FLAG_MINITUT_DONE1) == false) then + npc:setQuestGraphic(player, 0x0); + man0l0Quest:SetQuestFlag(MAN0L0_FLAG_MINITUT_DONE1, true); + man0l0Quest:SaveData(); + + player:getDirector():onTalked(npc); + end + + end + + else + player:endEvent(); + end + else + player:endEvent(); --Should not be here w.o this quest + end end function onEventUpdate(player, npc) + player:endEvent(); end \ No newline at end of file diff --git a/scripts/zones/193/zone.lua b/scripts/zones/193/zone.lua index 703d61b9..c5c52349 100644 --- a/scripts/zones/193/zone.lua +++ b/scripts/zones/193/zone.lua @@ -3,7 +3,16 @@ function onZoneInit(zone) end -function onZoneIn(zone, player) +function onZoneIn(player) + openingQuest = player:getQuest(110001); + + --Opening Quest + if (openingQuest ~= nil) then + if (openingQuest:GetQuestFlag(0) == false) then + player:kickEvent(player:getDirector(), "noticeEvent"); + end + end + end function onZoneOut(zone, player) diff --git a/scripts/zones/244/npcs/objBed_01@0F400.lua b/scripts/zones/244/npcs/objBed_01@0F400.lua index de11bf32..64dfbd15 100644 --- a/scripts/zones/244/npcs/objBed_01@0F400.lua +++ b/scripts/zones/244/npcs/objBed_01@0F400.lua @@ -1,4 +1,4 @@ -function onInstantiate(npc) +function init(npc) return "/Chara/Npc/Object/ObjectBed", false, false, false, false, false, 0x1250FB, false, false, 0, 1, "TEST"; end diff --git a/scripts/zones/244/npcs/objInnDoor_01@0F400.lua b/scripts/zones/244/npcs/objInnDoor_01@0F400.lua index 0f279f41..4d9d2f2a 100644 --- a/scripts/zones/244/npcs/objInnDoor_01@0F400.lua +++ b/scripts/zones/244/npcs/objInnDoor_01@0F400.lua @@ -1,4 +1,4 @@ -function onInstantiate(npc) +function init(npc) return "/Chara/Npc/Object/ObjectInnDoor", false, false, false, false, false, 0x1250F8, false, false, 0, 1, "TEST"; end diff --git a/scripts/zones/244/npcs/objItemStore_01@0F400.lua b/scripts/zones/244/npcs/objItemStore_01@0F400.lua index 7a9c2b74..7df900c1 100644 --- a/scripts/zones/244/npcs/objItemStore_01@0F400.lua +++ b/scripts/zones/244/npcs/objItemStore_01@0F400.lua @@ -1,4 +1,4 @@ -function onInstantiate(npc) +function init(npc) return "/Chara/Npc/Object/ObjectItemStorage", false, false, false, false, false, 0x1250F8, false, false, 0, 1, "TEST"; end diff --git a/scripts/zones/244/npcs/pplCutscene_01@0F400.lua b/scripts/zones/244/npcs/pplCutscene_01@0F400.lua index 7162a996..04153882 100644 --- a/scripts/zones/244/npcs/pplCutscene_01@0F400.lua +++ b/scripts/zones/244/npcs/pplCutscene_01@0F400.lua @@ -1,4 +1,4 @@ -function onInstantiate(npc) +function init(npc) return "/Chara/Npc/Populace/PopulaceCutScenePlayer", false, false, false, false, false, 0x107B38, false, false, 0, 1, "TEST"; end diff --git a/scripts/zones/244/npcs/test1.lua b/scripts/zones/244/npcs/test1.lua index e3943072..7bdabb1f 100644 --- a/scripts/zones/244/npcs/test1.lua +++ b/scripts/zones/244/npcs/test1.lua @@ -1,4 +1,4 @@ -function onInstantiate(npc) +function init(npc) return "/Chara/Npc/Populace/PopulaceStandard", false, false, false, false, false, npc.getActorClassId(), false, false, 0, 1, "TEST"; end From 79eaf5d79e7d8de1003c23f885ab8429f82b3a57 Mon Sep 17 00:00:00 2001 From: Filip Maj Date: Sun, 17 Apr 2016 19:09:01 -0400 Subject: [PATCH 10/10] Added more quest functions and completed the scripts for Gridania and most of Ul'dah. Up to the battle part that is. --- FFXIVClassic Lobby Server/Database.cs | 2 + FFXIVClassic Lobby Server/PacketProcessor.cs | 18 ++--- FFXIVClassic Map Server/Database.cs | 2 +- .../FFXIVClassic Map Server.csproj | 3 +- FFXIVClassic Map Server/Server.cs | 1 + .../actors/chara/npc/Npc.cs | 71 +++++++++++++++++++ .../actors/chara/player/Player.cs | 49 +++++++++++++ .../actors/director/OpeningDirector.cs | 7 +- .../director/quest/QuestDirectorMan0g001.cs | 41 +++++++++++ .../director/quest/QuestDirectorMan0u001.cs | 41 +++++++++++ FFXIVClassic Map Server/actors/quest/Quest.cs | 7 +- .../openingDire_fst0Btl03_04@0A600.lua | 37 ++++++++++ .../openingDire_wil0Btl01_04@0B800.lua | 26 +++++++ .../questDirect_fst0Btl03_01@0A615.lua | 21 ++++++ .../questDirect_ocn0Btl02_01@0C196.lua | 6 +- scripts/player.lua | 16 ++--- scripts/quests/man/man0g0.lua | 7 ++ scripts/quests/man/man0u0.lua | 7 ++ .../npcs/openingStop_fstBtl03_03@0A600.lua | 2 +- .../166/npcs/pplStd_fst0Btl03_01@0A600.lua | 61 ++++++++++++++++ .../166/npcs/pplStd_fst0Btl03_02@0A600.lua | 28 ++++++++ scripts/zones/166/zone.lua | 12 +++- .../184/npcs/pplStd_wil0Btl01_01@0B800.lua | 21 ++++++ .../184/npcs/pplStd_wil0Btl01_02@0B800.lua | 33 +++++++++ .../184/npcs/pplStd_wil0Btl01_03@0B800.lua | 21 ++++++ .../184/npcs/pplStd_wil0Btl01_04@0B800.lua | 21 ++++++ .../184/npcs/pplStd_wil0Btl01_05@0B800.lua | 21 ++++++ .../184/npcs/pplStd_wil0Btl01_06@0B800.lua | 33 +++++++++ .../184/npcs/pplStd_wil0Btl01_07@0B800.lua | 21 ++++++ .../184/npcs/pplStd_wil0Btl01_08@0B800.lua | 21 ++++++ .../184/npcs/pplStd_wil0Btl01_09@0B800.lua | 16 +++++ .../184/npcs/pplStd_wil0Btl01_0a@0B800.lua | 48 +++++++++++++ .../184/npcs/pplStd_wil0Btl01_0b@0B800.lua | 16 +++++ scripts/zones/184/zone.lua | 20 ++++++ scripts/zones/193/npcs/pplStd_05@0C100.lua | 3 +- scripts/zones/193/zone.lua | 1 + 36 files changed, 733 insertions(+), 28 deletions(-) create mode 100644 FFXIVClassic Map Server/actors/director/quest/QuestDirectorMan0g001.cs create mode 100644 FFXIVClassic Map Server/actors/director/quest/QuestDirectorMan0u001.cs create mode 100644 scripts/directors/openingDire_fst0Btl03_04@0A600.lua create mode 100644 scripts/directors/openingDire_wil0Btl01_04@0B800.lua create mode 100644 scripts/directors/questDirect_fst0Btl03_01@0A615.lua create mode 100644 scripts/quests/man/man0g0.lua create mode 100644 scripts/quests/man/man0u0.lua create mode 100644 scripts/zones/166/npcs/pplStd_fst0Btl03_01@0A600.lua create mode 100644 scripts/zones/166/npcs/pplStd_fst0Btl03_02@0A600.lua create mode 100644 scripts/zones/184/npcs/pplStd_wil0Btl01_01@0B800.lua create mode 100644 scripts/zones/184/npcs/pplStd_wil0Btl01_02@0B800.lua create mode 100644 scripts/zones/184/npcs/pplStd_wil0Btl01_03@0B800.lua create mode 100644 scripts/zones/184/npcs/pplStd_wil0Btl01_04@0B800.lua create mode 100644 scripts/zones/184/npcs/pplStd_wil0Btl01_05@0B800.lua create mode 100644 scripts/zones/184/npcs/pplStd_wil0Btl01_06@0B800.lua create mode 100644 scripts/zones/184/npcs/pplStd_wil0Btl01_07@0B800.lua create mode 100644 scripts/zones/184/npcs/pplStd_wil0Btl01_08@0B800.lua create mode 100644 scripts/zones/184/npcs/pplStd_wil0Btl01_09@0B800.lua create mode 100644 scripts/zones/184/npcs/pplStd_wil0Btl01_0a@0B800.lua create mode 100644 scripts/zones/184/npcs/pplStd_wil0Btl01_0b@0B800.lua create mode 100644 scripts/zones/184/zone.lua diff --git a/FFXIVClassic Lobby Server/Database.cs b/FFXIVClassic Lobby Server/Database.cs index b37b8efc..1f7ec710 100644 --- a/FFXIVClassic Lobby Server/Database.cs +++ b/FFXIVClassic Lobby Server/Database.cs @@ -228,6 +228,8 @@ namespace FFXIVClassic_Lobby_Server { conn.Dispose(); } + + } Log.database(String.Format("CID={0} state updated to active(2).", cid)); diff --git a/FFXIVClassic Lobby Server/PacketProcessor.cs b/FFXIVClassic Lobby Server/PacketProcessor.cs index 6f3e8979..db2dcaaf 100644 --- a/FFXIVClassic Lobby Server/PacketProcessor.cs +++ b/FFXIVClassic Lobby Server/PacketProcessor.cs @@ -253,21 +253,21 @@ namespace FFXIVClassic_Lobby_Server info.x = 0.016f; info.y = 10.35f; info.z = -36.91f; - info.rot = 0.025f; + info.rot = 0.025f; break; case 2: //fst0Battle03 (Gridania) info.zoneId = 166; - info.x = 356.09f; - info.y = 3.74f; - info.z = -701.62f; - info.rot = -1.4f; + info.x = 369.5434f; + info.y = 4.21f; + info.z = -706.1074f; + info.rot = -1.26721f; break; case 3: //wil0Battle01 (Ul'dah) info.zoneId = 184; - info.x = 12.63f; - info.y = 196.05f; - info.z = 131.01f; - info.rot = -1.34f; + info.x = 5.364327f; + info.y = 196.0f; + info.z = 133.6561f; + info.rot = -2.849384f; break; } diff --git a/FFXIVClassic Map Server/Database.cs b/FFXIVClassic Map Server/Database.cs index 881910bc..c9bb7bf1 100644 --- a/FFXIVClassic Map Server/Database.cs +++ b/FFXIVClassic Map Server/Database.cs @@ -345,7 +345,7 @@ namespace FFXIVClassic_Lobby_Server cmd = new MySqlCommand(query, conn); cmd.Parameters.AddWithValue("@charaId", player.actorId); cmd.Parameters.AddWithValue("@slot", slot); - cmd.Parameters.AddWithValue("@questId", quest.actorId); + cmd.Parameters.AddWithValue("@questId", 0xFFFFF & quest.actorId); cmd.Parameters.AddWithValue("@questData", quest.GetSerializedQuestData()); cmd.Parameters.AddWithValue("@questFlags", quest.GetQuestFlags()); diff --git a/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj b/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj index b24f70a6..c6fc13e5 100644 --- a/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj +++ b/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj @@ -72,6 +72,8 @@ + + @@ -102,7 +104,6 @@ - diff --git a/FFXIVClassic Map Server/Server.cs b/FFXIVClassic Map Server/Server.cs index 8f75ff7c..1409cd15 100644 --- a/FFXIVClassic Map Server/Server.cs +++ b/FFXIVClassic Map Server/Server.cs @@ -432,6 +432,7 @@ namespace FFXIVClassic_Lobby_Server if (spawnType.ToLower().StartsWith("0x")) sType = Convert.ToByte(spawnType, 16); else + sType = Convert.ToByte(spawnType); if (mWorldManager.GetZone(zoneId) == null) diff --git a/FFXIVClassic Map Server/actors/chara/npc/Npc.cs b/FFXIVClassic Map Server/actors/chara/npc/Npc.cs index f84b4e24..4ea2ed8a 100644 --- a/FFXIVClassic Map Server/actors/chara/npc/Npc.cs +++ b/FFXIVClassic Map Server/actors/chara/npc/Npc.cs @@ -2,6 +2,7 @@ using FFXIVClassic_Lobby_Server.common; using FFXIVClassic_Lobby_Server.packets; using FFXIVClassic_Map_Server.actors; +using FFXIVClassic_Map_Server.Actors.Chara; using FFXIVClassic_Map_Server.dataobjects; using FFXIVClassic_Map_Server.lua; using FFXIVClassic_Map_Server.packets.send.actor; @@ -20,6 +21,8 @@ namespace FFXIVClassic_Map_Server.Actors { private uint actorClassId; + public NpcWork npcWork = new NpcWork(); + public Npc(uint id, string actorName, uint zoneId, float posX, float posY, float posZ, float rot, ushort actorState, uint animationId, uint displayNameId, string customDisplayName, string className) : base(id) { @@ -38,6 +41,26 @@ namespace FFXIVClassic_Map_Server.Actors this.zoneId = zoneId; loadNpcTemplate(id); + + charaWork.battleSave.potencial = 1.0f; + + charaWork.parameterSave.state_mainSkill[0] = 3; + charaWork.parameterSave.state_mainSkill[2] = 3; + charaWork.parameterSave.state_mainSkillLevel = 2; + + charaWork.parameterSave.hp[0] = 500; + charaWork.parameterSave.hpMax[0] = 500; + charaWork.property[0] = 1; + charaWork.property[1] = 1; + + if (className.Equals("JellyfishScenarioLimsaLv00")) + { + charaWork.property[2] = 1; + npcWork.hateType = 1; + } + + charaWork.property[3] = 1; + charaWork.property[4] = 1; } public SubPacket createAddActorPacket(uint playerActorId) @@ -80,6 +103,54 @@ namespace FFXIVClassic_Map_Server.Actors return BasePacket.createPacket(subpackets, true, false); } + public override BasePacket getInitPackets(uint playerActorId) + { + ActorPropertyPacketUtil propPacketUtil = new ActorPropertyPacketUtil("/_init", this, playerActorId); + + //Properties + for (int i = 0; i < charaWork.property.Length; i++) + { + if (charaWork.property[i] != 0) + propPacketUtil.addProperty(String.Format("charaWork.property[{0}]", i)); + } + + //Parameters + propPacketUtil.addProperty("charaWork.parameterSave.hp[0]"); + propPacketUtil.addProperty("charaWork.parameterSave.hpMax[0]"); + propPacketUtil.addProperty("charaWork.parameterSave.mp"); + propPacketUtil.addProperty("charaWork.parameterSave.mpMax"); + propPacketUtil.addProperty("charaWork.parameterTemp.tp"); + + if (charaWork.parameterSave.state_mainSkill[0] != 0) + propPacketUtil.addProperty("charaWork.parameterSave.state_mainSkill[0]"); + if (charaWork.parameterSave.state_mainSkill[1] != 0) + propPacketUtil.addProperty("charaWork.parameterSave.state_mainSkill[1]"); + if (charaWork.parameterSave.state_mainSkill[2] != 0) + propPacketUtil.addProperty("charaWork.parameterSave.state_mainSkill[2]"); + if (charaWork.parameterSave.state_mainSkill[3] != 0) + propPacketUtil.addProperty("charaWork.parameterSave.state_mainSkill[3]"); + + propPacketUtil.addProperty("charaWork.parameterSave.state_mainSkillLevel"); + + //Status Times + for (int i = 0; i < charaWork.statusShownTime.Length; i++) + { + if (charaWork.statusShownTime[i] != 0xFFFFFFFF) + propPacketUtil.addProperty(String.Format("charaWork.statusShownTime[{0}]", i)); + } + + //General Parameters + for (int i = 3; i < charaWork.battleTemp.generalParameter.Length; i++) + { + if (charaWork.battleTemp.generalParameter[i] != 0) + propPacketUtil.addProperty(String.Format("charaWork.battleTemp.generalParameter[{0}]", i)); + } + + propPacketUtil.addProperty("npcWork.hateType"); + + return BasePacket.createPacket(propPacketUtil.done(), true, false); + } + public uint getActorClassId() { return actorClassId; diff --git a/FFXIVClassic Map Server/actors/chara/player/Player.cs b/FFXIVClassic Map Server/actors/chara/player/Player.cs index 4403cb8a..c4ec6a51 100644 --- a/FFXIVClassic Map Server/actors/chara/player/Player.cs +++ b/FFXIVClassic Map Server/actors/chara/player/Player.cs @@ -966,6 +966,47 @@ namespace FFXIVClassic_Map_Server.Actors public Equipment getEquipment() { return equipment; + } + + public byte getInitialTown() + { + return playerWork.initialTown; + } + + public int getFreeQuestSlot() + { + for (int i = 0; i < questScenario.Length; i++) + { + if (questScenario[i] == null) + return i; + } + + return -1; + } + + public void addQuest(uint id) + { + Actor actor = Server.getStaticActors((0xA0F00000 | id)); + addQuest(actor.actorName); + } + + public void addQuest(string name) + { + Actor actor = Server.getStaticActors(name); + + if (actor == null) + return; + + uint id = actor.actorId; + + int freeSlot = getFreeQuestSlot(); + + if (freeSlot == -1) + return; + + playerWork.questScenario[freeSlot] = id; + questScenario[freeSlot] = new Quest(this, playerWork.questScenario[freeSlot], name, null, 0); + Database.saveQuest(this, questScenario[freeSlot]); } public Quest getQuest(uint id) @@ -1033,6 +1074,14 @@ namespace FFXIVClassic_Map_Server.Actors { currentDirector = new QuestDirectorMan0l001(this, 0x46080012); } + else if (directorType.Equals("QuestDirectorMan0g001")) + { + currentDirector = new QuestDirectorMan0g001(this, 0x46080012); + } + else if (directorType.Equals("QuestDirectorMan0u001")) + { + currentDirector = new QuestDirectorMan0u001(this, 0x46080012); + } if (sendPackets) { diff --git a/FFXIVClassic Map Server/actors/director/OpeningDirector.cs b/FFXIVClassic Map Server/actors/director/OpeningDirector.cs index 0d910ba4..67d35c6c 100644 --- a/FFXIVClassic Map Server/actors/director/OpeningDirector.cs +++ b/FFXIVClassic Map Server/actors/director/OpeningDirector.cs @@ -15,9 +15,12 @@ namespace FFXIVClassic_Map_Server.actors.director public OpeningDirector(Player player, uint id) : base(player, id) { this.displayNameId = 0; - this.customDisplayName = "openingDire"; + this.customDisplayName = String.Format("openingDire_{0}_{1}", player.zone.zoneName, "04"); + + this.actorName = String.Format("openingDire_{0}_{1}@{2:x3}{3:x2}", player.zone.zoneName, "04", player.zoneId, 0); + + this.actorName = this.actorName.Replace("Battle", "Btl"); - this.actorName = "openingDire"; this.className = "OpeningDirector"; this.eventConditions = new EventList(); diff --git a/FFXIVClassic Map Server/actors/director/quest/QuestDirectorMan0g001.cs b/FFXIVClassic Map Server/actors/director/quest/QuestDirectorMan0g001.cs new file mode 100644 index 00000000..51908902 --- /dev/null +++ b/FFXIVClassic Map Server/actors/director/quest/QuestDirectorMan0g001.cs @@ -0,0 +1,41 @@ +using FFXIVClassic_Lobby_Server.packets; +using FFXIVClassic_Map_Server.Actors; +using FFXIVClassic_Map_Server.lua; +using FFXIVClassic_Map_Server.packets.send.actor; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FFXIVClassic_Map_Server.actors.director +{ + class QuestDirectorMan0g001 : Director + { + public QuestDirectorMan0g001(Player player, uint id) + : base(player, id) + { + this.displayNameId = 0; + this.customDisplayName = "questDirect_fst0Btl03_01"; + + this.actorName = "questDirect_fst0Btl03_01@0A615"; + this.className = "QuestDirectorMan0g001"; + + this.eventConditions = new EventList(); + + List noticeEventList = new List(); + + noticeEventList.Add(new EventList.NoticeEventCondition("noticeEvent", 0xE, 0x0)); + noticeEventList.Add(new EventList.NoticeEventCondition("noticeRequest", 0x0, 0x1)); + + this.eventConditions.noticeEventConditions = noticeEventList; + } + + public override SubPacket createScriptBindPacket(uint playerActorId) + { + List lParams; + lParams = LuaUtils.createLuaParamList("/Director/Quest/QuestDirectorMan0g001", false, false, false, false, false, 0x753A); + return ActorInstantiatePacket.buildPacket(actorId, playerActorId, actorName, className, lParams); + } + } +} diff --git a/FFXIVClassic Map Server/actors/director/quest/QuestDirectorMan0u001.cs b/FFXIVClassic Map Server/actors/director/quest/QuestDirectorMan0u001.cs new file mode 100644 index 00000000..2a860b05 --- /dev/null +++ b/FFXIVClassic Map Server/actors/director/quest/QuestDirectorMan0u001.cs @@ -0,0 +1,41 @@ +using FFXIVClassic_Lobby_Server.packets; +using FFXIVClassic_Map_Server.Actors; +using FFXIVClassic_Map_Server.lua; +using FFXIVClassic_Map_Server.packets.send.actor; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FFXIVClassic_Map_Server.actors.director +{ + class QuestDirectorMan0u001 : Director + { + public QuestDirectorMan0u001(Player player, uint id) + : base(player, id) + { + this.displayNameId = 0; + this.customDisplayName = "questDirect_wil0Btl01_01"; + + this.actorName = "questDirect_wil0Btl01_01@0A615"; + this.className = "QuestDirectorMan0u001"; + + this.eventConditions = new EventList(); + + List noticeEventList = new List(); + + noticeEventList.Add(new EventList.NoticeEventCondition("noticeEvent", 0xE, 0x0)); + noticeEventList.Add(new EventList.NoticeEventCondition("noticeRequest", 0x0, 0x1)); + + this.eventConditions.noticeEventConditions = noticeEventList; + } + + public override SubPacket createScriptBindPacket(uint playerActorId) + { + List lParams; + lParams = LuaUtils.createLuaParamList("/Director/Quest/QuestDirectorMan0u001", false, false, false, false, false, 0x757F); + return ActorInstantiatePacket.buildPacket(actorId, playerActorId, actorName, className, lParams); + } + } +} diff --git a/FFXIVClassic Map Server/actors/quest/Quest.cs b/FFXIVClassic Map Server/actors/quest/Quest.cs index 8fe77bce..8a6469e5 100644 --- a/FFXIVClassic Map Server/actors/quest/Quest.cs +++ b/FFXIVClassic Map Server/actors/quest/Quest.cs @@ -25,7 +25,12 @@ namespace FFXIVClassic_Map_Server.Actors this.owner = owner; actorName = name; this.questFlags = questFlags; - this.questData = JsonConvert.DeserializeObject>(questDataJson); + + if (questDataJson != null) + this.questData = JsonConvert.DeserializeObject>(questDataJson); + else + questData = null; + if (questData == null) questData = new Dictionary(); } diff --git a/scripts/directors/openingDire_fst0Btl03_04@0A600.lua b/scripts/directors/openingDire_fst0Btl03_04@0A600.lua new file mode 100644 index 00000000..c573ad61 --- /dev/null +++ b/scripts/directors/openingDire_fst0Btl03_04@0A600.lua @@ -0,0 +1,37 @@ +require("/quests/man/man0g0") + +function onEventStarted(player, actor, triggerName) + + man0g0Quest = getStaticActor("Man0g0"); + player:runEventFunction("delegateEvent", player, man0g0Quest, "processTtrNomal001withHQ", nil, nil, nil, nil); + +end + +function onEventUpdate(player, npc, resultId) + + player:endEvent(); + +end + +function onTalked(player, npc) + + man0g0Quest = player:getQuest("Man0g0"); + + if (man0g0Quest ~= nil) then + + yda = getWorldManager():GetActorInWorld(1000009); + papalymo = getWorldManager():GetActorInWorld(1000010); + + if (man0g0Quest:GetQuestFlag(MAN0G0_FLAG_TUTORIAL1_DONE) == false) then + yda:setQuestGraphic(player, 0x0); + papalymo:setQuestGraphic(player, 0x2); + else + if (man0g0Quest:GetQuestFlag(MAN0G0_FLAG_MINITUT_DONE1) == true) then + yda:setQuestGraphic(player, 0x2); + papalymo:setQuestGraphic(player, 0x0); + end + end + + end + +end \ No newline at end of file diff --git a/scripts/directors/openingDire_wil0Btl01_04@0B800.lua b/scripts/directors/openingDire_wil0Btl01_04@0B800.lua new file mode 100644 index 00000000..8c218fef --- /dev/null +++ b/scripts/directors/openingDire_wil0Btl01_04@0B800.lua @@ -0,0 +1,26 @@ +require("/quests/man/man0u0") + +function onEventStarted(player, actor, triggerName) + + man0u0Quest = getStaticActor("Man0u0"); + player:runEventFunction("delegateEvent", player, man0u0Quest, "processTtrNomal001withHQ", nil, nil, nil, nil); + +end + +function onEventUpdate(player, npc, resultId) + + player:endEvent(); + +end + +function onTalked(player, npc) + + man0u0Quest = player:getQuest("Man0u0"); + + if (man0u0Quest ~= nil) then + + + + end + +end \ No newline at end of file diff --git a/scripts/directors/questDirect_fst0Btl03_01@0A615.lua b/scripts/directors/questDirect_fst0Btl03_01@0A615.lua new file mode 100644 index 00000000..7f4360a5 --- /dev/null +++ b/scripts/directors/questDirect_fst0Btl03_01@0A615.lua @@ -0,0 +1,21 @@ + +function onEventStarted(player, actor, triggerName) + + man0g0Quest = getStaticActor("Man0g0"); + --player:runEventFunction("delegateEvent", player, man0g0Quest, "processTtrBtl001"); + player:runEventFunction("delegateEvent", player, man0g0Quest, "processTtrBtl002"); + +end + +function onEventUpdate(player, npc, resultId) + --man0g0Quest = getStaticActor("Man0g0"); + --player:runEventFunction("delegateEvent", player, man0g0Quest, "processTtrBtl002"); + player:endEvent(); +end + +function onCommand(player, command) + --Check command if ActivateCommand + player:endCommand(); + player:endEvent(); + player:kickEvent(player:getDirector(), "noticeEvent", true); +end \ No newline at end of file diff --git a/scripts/directors/questDirect_ocn0Btl02_01@0C196.lua b/scripts/directors/questDirect_ocn0Btl02_01@0C196.lua index 339e85c5..0d7c6a4e 100644 --- a/scripts/directors/questDirect_ocn0Btl02_01@0C196.lua +++ b/scripts/directors/questDirect_ocn0Btl02_01@0C196.lua @@ -2,8 +2,8 @@ function onEventStarted(player, actor, triggerName) man0l0Quest = getStaticActor("Man0l0"); - player:runEventFunction("delegateEvent", player, man0l0Quest, "processTtrBtl004"); - --player:runEventFunction("delegateEvent", player, man0l0Quest, "processTtrBtl002"); + --player:runEventFunction("delegateEvent", player, man0l0Quest, "processTtrBtl001"); + player:runEventFunction("delegateEvent", player, man0l0Quest, "processTtrBtl002"); end @@ -15,5 +15,7 @@ end function onCommand(player, command) --Check command if ActivateCommand + player:endCommand(); + player:endEvent(); player:kickEvent(player:getDirector(), "noticeEvent", true); end \ No newline at end of file diff --git a/scripts/player.lua b/scripts/player.lua index b53ee7ea..d07bef19 100644 --- a/scripts/player.lua +++ b/scripts/player.lua @@ -14,18 +14,18 @@ function onBeginLogin(player) player:getQuest(110001):ClearQuestFlags(); elseif (player:hasQuest(110005) == true) then player:setDirector("openingDirector", false); - player.positionX = 356.09; - player.positionY = 3.74; - player.positionZ = -701.62; - player.rotation = -1.4; + player.positionX = 369.5434; + player.positionY = 4.21; + player.positionZ = -706.1074; + player.rotation = -1.26721; player:getQuest(110005):ClearQuestData(); player:getQuest(110005):ClearQuestFlags(); elseif (player:hasQuest(110009) == true) then player:setDirector("openingDirector", false); - player.positionX = 12.63; - player.positionY = 196.05; - player.positionZ = 131.01; - player.rotation = -1.34; + player.positionX = 5.364327; + player.positionY = 196.0; + player.positionZ = 133.6561; + player.rotation = -2.849384; player:getQuest(110009):ClearQuestData(); player:getQuest(110009):ClearQuestFlags(); end diff --git a/scripts/quests/man/man0g0.lua b/scripts/quests/man/man0g0.lua new file mode 100644 index 00000000..e237eb10 --- /dev/null +++ b/scripts/quests/man/man0g0.lua @@ -0,0 +1,7 @@ +--Quest Flags +MAN0G0_FLAG_TUTORIAL1_DONE = 0; +MAN0G0_FLAG_TUTORIAL2_DONE = 1; + +MAN0G0_FLAG_MINITUT_DONE1 = 4; +MAN0G0_FLAG_MINITUT_DONE2 = 8; +MAN0G0_FLAG_MINITUT_DONE3 = 16; diff --git a/scripts/quests/man/man0u0.lua b/scripts/quests/man/man0u0.lua new file mode 100644 index 00000000..98d01bdd --- /dev/null +++ b/scripts/quests/man/man0u0.lua @@ -0,0 +1,7 @@ +--Quest Flags +MAN0U0_FLAG_TUTORIAL1_DONE = 0; +MAN0U0_FLAG_TUTORIAL2_DONE = 1; + +MAN0U0_FLAG_MINITUT_DONE1 = 4; +MAN0U0_FLAG_MINITUT_DONE2 = 8; +MAN0U0_FLAG_MINITUT_DONE3 = 16; diff --git a/scripts/zones/166/npcs/openingStop_fstBtl03_03@0A600.lua b/scripts/zones/166/npcs/openingStop_fstBtl03_03@0A600.lua index 0e27be6e..6038d14c 100644 --- a/scripts/zones/166/npcs/openingStop_fstBtl03_03@0A600.lua +++ b/scripts/zones/166/npcs/openingStop_fstBtl03_03@0A600.lua @@ -1,5 +1,5 @@ function init(npc) - return "/Chara/Npc/Object/OpeningStoperF0B1", false, false, false, false, false, 0x10A350, false, false, 0, 1, "TEST"; + return "/Chara/Npc/Object/OpeningStoperF0B1", false, false, false, false, false, npc.getActorClassId(), false, false, 0, 1, "TEST"; end function onEventStarted(player, npc, triggerName) diff --git a/scripts/zones/166/npcs/pplStd_fst0Btl03_01@0A600.lua b/scripts/zones/166/npcs/pplStd_fst0Btl03_01@0A600.lua new file mode 100644 index 00000000..2f0cc3f4 --- /dev/null +++ b/scripts/zones/166/npcs/pplStd_fst0Btl03_01@0A600.lua @@ -0,0 +1,61 @@ +require("/quests/man/man0g0") + +function init(npc) + return "/Chara/Npc/Populace/PopulaceStandard", false, false, false, false, false, npc.getActorClassId(), false, false, 0, 1, "TEST"; +end + +function onSpawn(player, npc) + npc:setQuestGraphic(player, 0x2); +end + +function onEventStarted(player, npc, triggerName) + + man0g0Quest = player:getQuest("Man0g0"); + + if (man0g0Quest ~= nil) then + + if (triggerName == "pushDefault") then + player:runEventFunction("delegateEvent", player, man0g0Quest, "processTtrNomal002", nil, nil, nil); + elseif (triggerName == "talkDefault") then + if (man0g0Quest:GetQuestFlag(MAN0G0_FLAG_TUTORIAL1_DONE) == false) then + player:runEventFunction("delegateEvent", player, man0g0Quest, "processTtrNomal003", nil, nil, nil); + player:setEventStatus(npc, "pushDefault", false, 0x2); + player:getDirector():onTalked(npc); + man0g0Quest:SetQuestFlag(MAN0G0_FLAG_TUTORIAL1_DONE, true); + man0g0Quest:SaveData(); + else + if (man0g0Quest:GetQuestFlag(MAN0G0_FLAG_MINITUT_DONE1) == true) then + man0g0Quest:SetQuestFlag(MAN0G0_FLAG_TUTORIAL2_DONE, true); + player:runEventFunction("delegateEvent", player, man0g0Quest, "processEvent010_1", nil, nil, nil); + else + player:runEventFunction("delegateEvent", player, man0g0Quest, "processEvent000_1", nil, nil, nil); + end + end + else + player:endEvent(); + end + else + player:endEvent(); --Should not be here w.o this quest + end + +end + +function onEventUpdate(player, npc) + + man0g0Quest = player:getQuest("Man0g0"); + + if (man0g0Quest:GetQuestFlag(MAN0G0_FLAG_TUTORIAL2_DONE) == true) then + player:endEvent(); + player:setDirector("QuestDirectorMan0g001", true); + + worldMaster = getWorldMaster(); + player:sendGameMessage(player, worldMaster, 34108, 0x20); + player:sendGameMessage(player, worldMaster, 50011, 0x20); + + getWorldManager():DoPlayerMoveInZone(player, 10); + player:kickEvent(player:getDirector(), "noticeEvent", true); + else + player:endEvent(); + end + +end \ No newline at end of file diff --git a/scripts/zones/166/npcs/pplStd_fst0Btl03_02@0A600.lua b/scripts/zones/166/npcs/pplStd_fst0Btl03_02@0A600.lua new file mode 100644 index 00000000..e5366219 --- /dev/null +++ b/scripts/zones/166/npcs/pplStd_fst0Btl03_02@0A600.lua @@ -0,0 +1,28 @@ +require("/quests/man/man0g0") + +function init(npc) + return "/Chara/Npc/Populace/PopulaceStandard", false, false, false, false, false, npc.getActorClassId(), false, false, 0, 1, "TEST"; +end + +function onEventStarted(player, npc, triggerName) + + man0g0Quest = player:getQuest("Man0g0"); + + if (triggerName == "talkDefault") then + if (man0g0Quest:GetQuestFlag(MAN0G0_FLAG_MINITUT_DONE1) == false) then + player:runEventFunction("delegateEvent", player, man0g0Quest, "processEvent000_2", nil, nil, nil); + man0g0Quest:SetQuestFlag(MAN0G0_FLAG_MINITUT_DONE1, true); + man0g0Quest:SaveData(); + player:getDirector():onTalked(npc); + else + player:runEventFunction("delegateEvent", player, man0g0Quest, "processEvent000_2", nil, nil, nil); + end + else + player:endEvent(); + end + +end + +function onEventUpdate(player, npc) + player:endEvent(); +end \ No newline at end of file diff --git a/scripts/zones/166/zone.lua b/scripts/zones/166/zone.lua index 703d61b9..2657611f 100644 --- a/scripts/zones/166/zone.lua +++ b/scripts/zones/166/zone.lua @@ -3,7 +3,17 @@ function onZoneInit(zone) end -function onZoneIn(zone, player) +function onZoneIn(player) + + openingQuest = player:getQuest(110005); + + --Opening Quest + if (openingQuest ~= nil) then + if (openingQuest:GetQuestFlag(0) == false) then + player:kickEvent(player:getDirector(), "noticeEvent"); + end + end + end function onZoneOut(zone, player) diff --git a/scripts/zones/184/npcs/pplStd_wil0Btl01_01@0B800.lua b/scripts/zones/184/npcs/pplStd_wil0Btl01_01@0B800.lua new file mode 100644 index 00000000..24f151d2 --- /dev/null +++ b/scripts/zones/184/npcs/pplStd_wil0Btl01_01@0B800.lua @@ -0,0 +1,21 @@ +require("/quests/man/man0u0") + +function init(npc) + return "/Chara/Npc/Populace/PopulaceStandard", false, false, false, false, false, npc.getActorClassId(), false, false, 0, 1, "TEST"; +end + +function onEventStarted(player, npc, triggerName) + + man0u0Quest = getStaticActor("Man0u0"); + + if (triggerName == "talkDefault") then + player:runEventFunction("delegateEvent", player, man0u0Quest, "processEvent000_6", nil, nil, nil); + else + player:endEvent(); + end + +end + +function onEventUpdate(player, npc) + player:endEvent(); +end \ No newline at end of file diff --git a/scripts/zones/184/npcs/pplStd_wil0Btl01_02@0B800.lua b/scripts/zones/184/npcs/pplStd_wil0Btl01_02@0B800.lua new file mode 100644 index 00000000..8a9333c0 --- /dev/null +++ b/scripts/zones/184/npcs/pplStd_wil0Btl01_02@0B800.lua @@ -0,0 +1,33 @@ +require("/quests/man/man0u0") + +function init(npc) + return "/Chara/Npc/Populace/PopulaceStandard", false, false, false, false, false, npc.getActorClassId(), false, false, 0, 1, "TEST"; +end + +function onSpawn(player, npc) + npc:setQuestGraphic(player, 0x2); +end + +function onEventStarted(player, npc, triggerName) + + man0u0Quest = player:getQuest("man0u0"); + + if (triggerName == "talkDefault") then + if (man0u0Quest:GetQuestFlag(MAN0U0_FLAG_MINITUT_DONE2) == false) then + player:runEventFunction("delegateEvent", player, man0u0Quest, "processTtrMini002_first", nil, nil, nil); + npc:setQuestGraphic(player, 0x0); + man0u0Quest:SetQuestFlag(MAN0U0_FLAG_MINITUT_DONE2, true); + man0u0Quest:SaveData(); + player:getDirector():onTalked(npc); + else + player:runEventFunction("delegateEvent", player, man0u0Quest, "processTtrMini002", nil, nil, nil); + end + else + player:endEvent(); + end + +end + +function onEventUpdate(player, npc) + player:endEvent(); +end \ No newline at end of file diff --git a/scripts/zones/184/npcs/pplStd_wil0Btl01_03@0B800.lua b/scripts/zones/184/npcs/pplStd_wil0Btl01_03@0B800.lua new file mode 100644 index 00000000..74931883 --- /dev/null +++ b/scripts/zones/184/npcs/pplStd_wil0Btl01_03@0B800.lua @@ -0,0 +1,21 @@ +require("/quests/man/man0u0") + +function init(npc) + return "/Chara/Npc/Populace/PopulaceStandard", false, false, false, false, false, npc.getActorClassId(), false, false, 0, 1, "TEST"; +end + +function onEventStarted(player, npc, triggerName) + + man0u0Quest = getStaticActor("Man0u0"); + + if (triggerName == "talkDefault") then + player:runEventFunction("delegateEvent", player, man0u0Quest, "processEvent000_8", nil, nil, nil); + else + player:endEvent(); + end + +end + +function onEventUpdate(player, npc) + player:endEvent(); +end \ No newline at end of file diff --git a/scripts/zones/184/npcs/pplStd_wil0Btl01_04@0B800.lua b/scripts/zones/184/npcs/pplStd_wil0Btl01_04@0B800.lua new file mode 100644 index 00000000..4deadf4e --- /dev/null +++ b/scripts/zones/184/npcs/pplStd_wil0Btl01_04@0B800.lua @@ -0,0 +1,21 @@ +require("/quests/man/man0u0") + +function init(npc) + return "/Chara/Npc/Populace/PopulaceStandard", false, false, false, false, false, npc.getActorClassId(), false, false, 0, 1, "TEST"; +end + +function onEventStarted(player, npc, triggerName) + + man0u0Quest = getStaticActor("Man0u0"); + + if (triggerName == "talkDefault") then + player:runEventFunction("delegateEvent", player, man0u0Quest, "processEvent000_9", nil, nil, nil); + else + player:endEvent(); + end + +end + +function onEventUpdate(player, npc) + player:endEvent(); +end \ No newline at end of file diff --git a/scripts/zones/184/npcs/pplStd_wil0Btl01_05@0B800.lua b/scripts/zones/184/npcs/pplStd_wil0Btl01_05@0B800.lua new file mode 100644 index 00000000..fdb2eb67 --- /dev/null +++ b/scripts/zones/184/npcs/pplStd_wil0Btl01_05@0B800.lua @@ -0,0 +1,21 @@ +require("/quests/man/man0u0") + +function init(npc) + return "/Chara/Npc/Populace/PopulaceStandard", false, false, false, false, false, npc.getActorClassId(), false, false, 0, 1, "TEST"; +end + +function onEventStarted(player, npc, triggerName) + + man0u0Quest = getStaticActor("Man0u0"); + + if (triggerName == "talkDefault") then + player:runEventFunction("delegateEvent", player, man0u0Quest, "processEvent000_10", nil, nil, nil); + else + player:endEvent(); + end + +end + +function onEventUpdate(player, npc) + player:endEvent(); +end \ No newline at end of file diff --git a/scripts/zones/184/npcs/pplStd_wil0Btl01_06@0B800.lua b/scripts/zones/184/npcs/pplStd_wil0Btl01_06@0B800.lua new file mode 100644 index 00000000..acf3d645 --- /dev/null +++ b/scripts/zones/184/npcs/pplStd_wil0Btl01_06@0B800.lua @@ -0,0 +1,33 @@ +require("/quests/man/man0u0") + +function init(npc) + return "/Chara/Npc/Populace/PopulaceStandard", false, false, false, false, false, npc.getActorClassId(), false, false, 0, 1, "TEST"; +end + +function onSpawn(player, npc) + npc:setQuestGraphic(player, 0x2); +end + +function onEventStarted(player, npc, triggerName) + + man0u0Quest = player:getQuest("man0u0"); + + if (triggerName == "talkDefault") then + if (man0u0Quest:GetQuestFlag(MAN0U0_FLAG_MINITUT_DONE3) == false) then + player:runEventFunction("delegateEvent", player, man0u0Quest, "processTtrMini003_first", nil, nil, nil); + npc:setQuestGraphic(player, 0x0); + man0u0Quest:SetQuestFlag(MAN0U0_FLAG_MINITUT_DONE3, true); + man0u0Quest:SaveData(); + player:getDirector():onTalked(npc); + else + player:runEventFunction("delegateEvent", player, man0u0Quest, "processTtrMini003", nil, nil, nil); + end + else + player:endEvent(); + end + +end + +function onEventUpdate(player, npc) + player:endEvent(); +end \ No newline at end of file diff --git a/scripts/zones/184/npcs/pplStd_wil0Btl01_07@0B800.lua b/scripts/zones/184/npcs/pplStd_wil0Btl01_07@0B800.lua new file mode 100644 index 00000000..c61fa7c4 --- /dev/null +++ b/scripts/zones/184/npcs/pplStd_wil0Btl01_07@0B800.lua @@ -0,0 +1,21 @@ +require("/quests/man/man0u0") + +function init(npc) + return "/Chara/Npc/Populace/PopulaceStandard", false, false, false, false, false, npc.getActorClassId(), false, false, 0, 1, "TEST"; +end + +function onEventStarted(player, npc, triggerName) + + man0u0Quest = getStaticActor("Man0u0"); + + if (triggerName == "talkDefault") then + player:runEventFunction("delegateEvent", player, man0u0Quest, "processEvent000_12", nil, nil, nil); + else + player:endEvent(); + end + +end + +function onEventUpdate(player, npc) + player:endEvent(); +end \ No newline at end of file diff --git a/scripts/zones/184/npcs/pplStd_wil0Btl01_08@0B800.lua b/scripts/zones/184/npcs/pplStd_wil0Btl01_08@0B800.lua new file mode 100644 index 00000000..c112e552 --- /dev/null +++ b/scripts/zones/184/npcs/pplStd_wil0Btl01_08@0B800.lua @@ -0,0 +1,21 @@ +require("/quests/man/man0u0") + +function init(npc) + return "/Chara/Npc/Populace/PopulaceStandard", false, false, false, false, false, npc.getActorClassId(), false, false, 0, 1, "TEST"; +end + +function onEventStarted(player, npc, triggerName) + + man0u0Quest = getStaticActor("Man0u0"); + + if (triggerName == "talkDefault") then + player:runEventFunction("delegateEvent", player, man0u0Quest, "processEvent000_13", nil, nil, nil); + else + player:endEvent(); + end + +end + +function onEventUpdate(player, npc) + player:endEvent(); +end \ No newline at end of file diff --git a/scripts/zones/184/npcs/pplStd_wil0Btl01_09@0B800.lua b/scripts/zones/184/npcs/pplStd_wil0Btl01_09@0B800.lua new file mode 100644 index 00000000..85958ea5 --- /dev/null +++ b/scripts/zones/184/npcs/pplStd_wil0Btl01_09@0B800.lua @@ -0,0 +1,16 @@ +require("/quests/man/man0u0") + +function init(npc) + return "/Chara/Npc/Populace/PopulaceStandard", false, false, false, false, false, npc.getActorClassId(), false, false, 0, 1, "TEST"; +end + +function onEventStarted(player, npc, triggerName) + + +end + +function onEventUpdate(player, npc) + + player:endEvent(); + +end \ No newline at end of file diff --git a/scripts/zones/184/npcs/pplStd_wil0Btl01_0a@0B800.lua b/scripts/zones/184/npcs/pplStd_wil0Btl01_0a@0B800.lua new file mode 100644 index 00000000..4522c5f6 --- /dev/null +++ b/scripts/zones/184/npcs/pplStd_wil0Btl01_0a@0B800.lua @@ -0,0 +1,48 @@ +require("/quests/man/man0u0") + +function init(npc) + return "/Chara/Npc/Populace/PopulaceStandard", false, false, false, false, false, npc.getActorClassId(), false, false, 0, 1, "TEST"; +end + +function onSpawn(player, npc) + npc:setQuestGraphic(player, 0x2); +end + +function onEventStarted(player, npc, triggerName) + + man0u0Quest = player:getQuest("Man0u0"); + if (man0u0Quest ~= nil) then + + if (triggerName == "pushDefault") then + player:runEventFunction("delegateEvent", player, man0u0Quest, "processTtrNomal002", nil, nil, nil); + elseif (triggerName == "talkDefault") then + if (man0u0Quest:GetQuestFlag(MAN0U0_FLAG_TUTORIAL1_DONE) == false) then + player:runEventFunction("delegateEvent", player, man0u0Quest, "processTtrNomal003", nil, nil, nil); + player:setEventStatus(npc, "pushDefault", false, 0x2); + player:getDirector():onTalked(npc); + man0u0Quest:SetQuestFlag(MAN0U0_FLAG_TUTORIAL1_DONE, true); + man0u0Quest:SaveData(); + else + player:runEventFunction("delegateEvent", player, man0u0Quest, "processTtrMini001", nil, nil, nil); + + if (man0u0Quest:GetQuestFlag(MAN0U0_FLAG_MINITUT_DONE1) == false) then + npc:setQuestGraphic(player, 0x0); + man0u0Quest:SetQuestFlag(MAN0U0_FLAG_MINITUT_DONE1, true); + man0u0Quest:SaveData(); + end + + end + else + player:endEvent(); + end + else + player:endEvent(); --Should not be here w.o this quest + end + +end + +function onEventUpdate(player, npc) + + player:endEvent(); + +end \ No newline at end of file diff --git a/scripts/zones/184/npcs/pplStd_wil0Btl01_0b@0B800.lua b/scripts/zones/184/npcs/pplStd_wil0Btl01_0b@0B800.lua new file mode 100644 index 00000000..85958ea5 --- /dev/null +++ b/scripts/zones/184/npcs/pplStd_wil0Btl01_0b@0B800.lua @@ -0,0 +1,16 @@ +require("/quests/man/man0u0") + +function init(npc) + return "/Chara/Npc/Populace/PopulaceStandard", false, false, false, false, false, npc.getActorClassId(), false, false, 0, 1, "TEST"; +end + +function onEventStarted(player, npc, triggerName) + + +end + +function onEventUpdate(player, npc) + + player:endEvent(); + +end \ No newline at end of file diff --git a/scripts/zones/184/zone.lua b/scripts/zones/184/zone.lua new file mode 100644 index 00000000..acf245c1 --- /dev/null +++ b/scripts/zones/184/zone.lua @@ -0,0 +1,20 @@ + + +function onZoneInit(zone) +end + +function onZoneIn(player) + + openingQuest = player:getQuest(110009); + + --Opening Quest + if (openingQuest ~= nil) then + if (openingQuest:GetQuestFlag(0) == false) then + player:kickEvent(player:getDirector(), "noticeEvent"); + end + end + +end + +function onZoneOut(zone, player) +end \ No newline at end of file diff --git a/scripts/zones/193/npcs/pplStd_05@0C100.lua b/scripts/zones/193/npcs/pplStd_05@0C100.lua index ed315de5..4271a73c 100644 --- a/scripts/zones/193/npcs/pplStd_05@0C100.lua +++ b/scripts/zones/193/npcs/pplStd_05@0C100.lua @@ -26,8 +26,7 @@ function onEventStarted(player, npc, triggerName) player:runEventFunction("delegateEvent", player, man0l0Quest, "processTtrMini003", nil, nil, nil); npc:setQuestGraphic(player, 0x0); man0l0Quest:SetQuestFlag(MAN0L0_FLAG_MINITUT_DONE3, true); - man0l0Quest:SaveData(); - + man0l0Quest:SaveData(); player:getDirector():onTalked(npc); else player:runEventFunction("delegateEvent", player, man0l0Quest, "processEvent000_8", nil, nil, nil); diff --git a/scripts/zones/193/zone.lua b/scripts/zones/193/zone.lua index c5c52349..75137ee9 100644 --- a/scripts/zones/193/zone.lua +++ b/scripts/zones/193/zone.lua @@ -4,6 +4,7 @@ function onZoneInit(zone) end function onZoneIn(player) + openingQuest = player:getQuest(110001); --Opening Quest