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/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); diff --git a/FFXIVClassic Map Server/Database.cs b/FFXIVClassic Map Server/Database.cs index 3f114e1c..e9ecd342 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", 0xFFFFF & 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/FFXIVClassic Map Server.csproj b/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj index d11205d9..39d2345e 100644 --- a/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj +++ b/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj @@ -72,6 +72,9 @@ + + + @@ -135,6 +138,7 @@ + @@ -244,6 +248,7 @@ + @@ -277,11 +282,11 @@ xcopy "$(SolutionDir)data" "$(SolutionDir)$(ProjectName)\$(OutDir)" /E /C /D - \ No newline at end of file diff --git a/FFXIVClassic Map Server/PacketProcessor.cs b/FFXIVClassic Map Server/PacketProcessor.cs index 5d04595e..2e210934 100644 --- a/FFXIVClassic Map Server/PacketProcessor.cs +++ b/FFXIVClassic Map Server/PacketProcessor.cs @@ -259,19 +259,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 { @@ -295,12 +303,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 52e6480b..f0057765 100644 --- a/FFXIVClassic Map Server/Server.cs +++ b/FFXIVClassic Map Server/Server.cs @@ -330,6 +330,7 @@ namespace FFXIVClassic_Lobby_Server #endregion + public static WorldManager GetWorldManager() { return mWorldManager; @@ -344,5 +345,6 @@ namespace FFXIVClassic_Lobby_Server { return gamedataItems; } + } } \ No newline at end of file diff --git a/FFXIVClassic Map Server/WorldManager.cs b/FFXIVClassic Map Server/WorldManager.cs index 3d5d33c5..7484ac22 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. @@ -416,11 +416,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) @@ -436,7 +436,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(); } @@ -454,6 +454,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/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 8ada9422..c453e82f 100644 --- a/FFXIVClassic Map Server/actors/chara/Character.cs +++ b/FFXIVClassic Map Server/actors/chara/Character.cs @@ -81,6 +81,11 @@ namespace FFXIVClassic_Map_Server.Actors return SetActorIdleAnimationPacket.buildPacket(actorId, playerActorId, animationId); } + public void setQuestGraphic(Player player, int graphicNum) + { + player.queuePacket(SetActorQuestGraphicPacket.buildPacket(player.actorId, actorId, graphicNum)); + } + } } diff --git a/FFXIVClassic Map Server/actors/chara/npc/Npc.cs b/FFXIVClassic Map Server/actors/chara/npc/Npc.cs index 9e43c677..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) @@ -50,7 +73,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) { @@ -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 76d1de0a..80f02af9 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)); @@ -591,6 +599,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) @@ -953,6 +967,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) @@ -966,6 +1021,28 @@ 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.ToLower().Equals(name.ToLower())) + return questScenario[i]; + } + + 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++) @@ -977,19 +1054,46 @@ namespace FFXIVClassic_Map_Server.Actors return false; } - public void setDirector(string directorType) + 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, bool sendPackets) { if (directorType.Equals("openingDirector")) { - currentDirector = new OpeningDirector(0x46080012); + currentDirector = new OpeningDirector(this, 0x46080012); + } + else if (directorType.Equals("QuestDirectorMan0l001")) + { + 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) + { + 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() @@ -1037,22 +1141,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; @@ -1067,12 +1181,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/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..67d35c6c 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,12 +12,15 @@ 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"; + 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/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/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/QuestDirectorMan0l001.cs b/FFXIVClassic Map Server/actors/director/quest/QuestDirectorMan0l001.cs new file mode 100644 index 00000000..2d5d1aec --- /dev/null +++ b/FFXIVClassic Map Server/actors/director/quest/QuestDirectorMan0l001.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 QuestDirectorMan0l001 : Director + { + public QuestDirectorMan0l001(Player player, uint id) + : base(player, 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, false, 0x7532); + 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 c125548e..8a6469e5 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,27 @@ 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; - public void UpdateQuestData(string dataName, object data) - { - if (questData.ContainsKey(dataName)) + if (questDataJson != null) + this.questData = JsonConvert.DeserializeObject>(questDataJson); + else + questData = null; + + if (questData == null) + questData = new Dictionary(); + } + + public void SetQuestData(string dataName, object data) + { questData[dataName] = data; //Inform update @@ -37,11 +50,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) @@ -68,7 +91,7 @@ namespace FFXIVClassic_Map_Server.Actors return false; } else - return (questFlags & (1 << bitIndex)) == 1; + return (questFlags & (1 << bitIndex)) == (1 << bitIndex); } public int GetPhase() @@ -81,5 +104,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); + } + } } diff --git a/FFXIVClassic Map Server/dataobjects/ConnectedPlayer.cs b/FFXIVClassic Map Server/dataobjects/ConnectedPlayer.cs index 455448dc..2a966f81 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; @@ -112,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(); @@ -123,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++) { @@ -141,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 a9d18ee5..89d2c272 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; @@ -31,7 +32,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,23 +40,19 @@ 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); + + 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; } } @@ -80,13 +77,10 @@ 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); + + if (script == null) + return; //Have to do this to combine LuaParams List objects = new List(); @@ -98,18 +92,38 @@ 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 { - 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())); } } + 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); + + if (script == null) + return; + + //Run Script + if (!script.Globals.Get("onSpawn").IsNil()) + script.Call(script.Globals["onSpawn"], player, target); + } + else + { + SendError(player, String.Format("ERROR: Could not find script for actor {0}.", target.getName())); + } + + } + public static void doActorOnEventUpdated(Player player, Actor target, EventUpdatePacket eventUpdate) { string luaPath; @@ -123,30 +137,25 @@ 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); + + 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 - DynValue result = script.Call(script.Globals["onEventUpdate"], objects.ToArray()); + if (!script.Globals.Get("onEventUpdate").IsNil()) + script.Call(script.Globals["onEventUpdate"], objects.ToArray()); } 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())); } } @@ -156,35 +165,117 @@ 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); + + if (script == null) + return; + //Run Script - DynValue result = script.Call(script.Globals["onZoneIn"], player); + if (!script.Globals.Get("onZoneIn").IsNil()) + script.Call(script.Globals["onZoneIn"], player); } } + 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)) { - 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); + + if (script == null) + return; //Run Script - DynValue result = script.Call(script.Globals["onLogin"], player); + if (!script.Globals.Get("onLogin").IsNil()) + script.Call(script.Globals["onLogin"], 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; + + 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.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/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 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..1efd25dd --- /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 SetActorQuestGraphicPacket + { + 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); + } + } +} 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); + } + } +} diff --git a/data/scripts/commands/ActivateCommand.lua b/data/scripts/commands/ActivateCommand.lua index 898665c6..cb681cb9 100644 --- a/data/scripts/commands/ActivateCommand.lua +++ b/data/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/data/scripts/commands/AttackWeaponSkill.lua b/data/scripts/commands/AttackWeaponSkill.lua index 7329b613..a9bf62fc 100644 --- a/data/scripts/commands/AttackWeaponSkill.lua +++ b/data/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/data/scripts/commands/BonusPointCommand.lua b/data/scripts/commands/BonusPointCommand.lua index d6e95444..55ee95b6 100644 --- a/data/scripts/commands/BonusPointCommand.lua +++ b/data/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/data/scripts/commands/CheckCommand.lua b/data/scripts/commands/CheckCommand.lua index 6800f279..734545fe 100644 --- a/data/scripts/commands/CheckCommand.lua +++ b/data/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/data/scripts/commands/ChocoboRideCommand.lua b/data/scripts/commands/ChocoboRideCommand.lua index 3c95e3da..c3abe58b 100644 --- a/data/scripts/commands/ChocoboRideCommand.lua +++ b/data/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/data/scripts/commands/DiceCommand.lua b/data/scripts/commands/DiceCommand.lua index b48e4e37..10bfd694 100644 --- a/data/scripts/commands/DiceCommand.lua +++ b/data/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/data/scripts/commands/EmoteSitCommand.lua b/data/scripts/commands/EmoteSitCommand.lua index e244a436..764033f9 100644 --- a/data/scripts/commands/EmoteSitCommand.lua +++ b/data/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/data/scripts/commands/EmoteStandardCommand.lua b/data/scripts/commands/EmoteStandardCommand.lua index dac96794..1a4b7408 100644 --- a/data/scripts/commands/EmoteStandardCommand.lua +++ b/data/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/data/scripts/commands/EquipCommand.lua b/data/scripts/commands/EquipCommand.lua index d9c4ad02..00b337db 100644 --- a/data/scripts/commands/EquipCommand.lua +++ b/data/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/data/scripts/commands/ItemWasteCommand.lua b/data/scripts/commands/ItemWasteCommand.lua index 78e568c8..92441bd1 100644 --- a/data/scripts/commands/ItemWasteCommand.lua +++ b/data/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/data/scripts/commands/LogoutCommand.lua b/data/scripts/commands/LogoutCommand.lua index 9ccd3deb..3dc52b1d 100644 --- a/data/scripts/commands/LogoutCommand.lua +++ b/data/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/data/scripts/commands/RequestInformationCommand.lua b/data/scripts/commands/RequestInformationCommand.lua index 1b13672d..7cc47797 100644 --- a/data/scripts/commands/RequestInformationCommand.lua +++ b/data/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/data/scripts/commands/RequestQuestJournalCommand.lua b/data/scripts/commands/RequestQuestJournalCommand.lua index 85ec082e..b67e2667 100644 --- a/data/scripts/commands/RequestQuestJournalCommand.lua +++ b/data/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/data/scripts/commands/TeleportCommand.lua b/data/scripts/commands/TeleportCommand.lua index 05b893c9..17f593fe 100644 --- a/data/scripts/commands/TeleportCommand.lua +++ b/data/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/data/scripts/player.lua b/data/scripts/player.lua index 378bb84b..69451cfe 100644 --- a/data/scripts/player.lua +++ b/data/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 = 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 = 5.364327; + player.positionY = 196.0; + player.positionZ = 133.6561; + player.rotation = -2.849384; + player:getQuest(110009):ClearQuestData(); + player:getQuest(110009):ClearQuestFlags(); + end + + +end + function onLogin(player) player:sendMessage(0x1D,"",">Callback \"onLogin\" for player script running."); @@ -8,11 +41,6 @@ function onLogin(player) initClassItems(player); initRaceItems(player); - end - - if (player:hasQuest(110001) == true or player:hasQuest(110005) == true or player:hasQuest(110009) == true) then - --player:setDirector("openingDirector"); - end end diff --git a/data/scripts/zones/128/npcs/testNutEater.lua b/data/scripts/zones/128/npcs/testNutEater.lua index 91b02a61..7dc5e546 100644 --- a/data/scripts/zones/128/npcs/testNutEater.lua +++ b/data/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/data/scripts/zones/133/npcs/aetheryteP_01@08500.lua b/data/scripts/zones/133/npcs/aetheryteP_01@08500.lua index e252c1d1..35689e98 100644 --- a/data/scripts/zones/133/npcs/aetheryteP_01@08500.lua +++ b/data/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/data/scripts/zones/133/npcs/pplGuildlev_01@08500.lua b/data/scripts/zones/133/npcs/pplGuildlev_01@08500.lua index b28a12c1..0a609d1e 100644 --- a/data/scripts/zones/133/npcs/pplGuildlev_01@08500.lua +++ b/data/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/data/scripts/zones/133/npcs/pplLinkshel_01@08500.lua b/data/scripts/zones/133/npcs/pplLinkshel_01@08500.lua index 0724c0b7..801aee97 100644 --- a/data/scripts/zones/133/npcs/pplLinkshel_01@08500.lua +++ b/data/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/data/scripts/zones/133/npcs/pplPassiveG_01@08500.lua b/data/scripts/zones/133/npcs/pplPassiveG_01@08500.lua index d074f797..c9cbb5df 100644 --- a/data/scripts/zones/133/npcs/pplPassiveG_01@08500.lua +++ b/data/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/data/scripts/zones/133/npcs/pplShopSal_01@08500.lua b/data/scripts/zones/133/npcs/pplShopSal_01@08500.lua index 26ead793..f33db312 100644 --- a/data/scripts/zones/133/npcs/pplShopSal_01@08500.lua +++ b/data/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/data/scripts/zones/133/npcs/pplShopSal_02@08500.lua b/data/scripts/zones/133/npcs/pplShopSal_02@08500.lua index 26ead793..f33db312 100644 --- a/data/scripts/zones/133/npcs/pplShopSal_02@08500.lua +++ b/data/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/data/scripts/zones/133/npcs/pplShopSal_03@08500.lua b/data/scripts/zones/133/npcs/pplShopSal_03@08500.lua index 26ead793..f33db312 100644 --- a/data/scripts/zones/133/npcs/pplShopSal_03@08500.lua +++ b/data/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/data/scripts/zones/133/npcs/pplShopSal_04@08500.lua b/data/scripts/zones/133/npcs/pplShopSal_04@08500.lua index 6cfebcfd..7eaf9f87 100644 --- a/data/scripts/zones/133/npcs/pplShopSal_04@08500.lua +++ b/data/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/data/scripts/zones/133/npcs/pplShopSal_05@08500.lua b/data/scripts/zones/133/npcs/pplShopSal_05@08500.lua index 26ead793..f33db312 100644 --- a/data/scripts/zones/133/npcs/pplShopSal_05@08500.lua +++ b/data/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/data/scripts/zones/133/npcs/pplShopSal_06@08500.lua b/data/scripts/zones/133/npcs/pplShopSal_06@08500.lua index 26ead793..f33db312 100644 --- a/data/scripts/zones/133/npcs/pplShopSal_06@08500.lua +++ b/data/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/data/scripts/zones/133/npcs/pplShopSal_07@08500.lua b/data/scripts/zones/133/npcs/pplShopSal_07@08500.lua index 26ead793..f33db312 100644 --- a/data/scripts/zones/133/npcs/pplShopSal_07@08500.lua +++ b/data/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/data/scripts/zones/133/npcs/pplShopSal_08@08500.lua b/data/scripts/zones/133/npcs/pplShopSal_08@08500.lua index 26ead793..f33db312 100644 --- a/data/scripts/zones/133/npcs/pplShopSal_08@08500.lua +++ b/data/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/data/scripts/zones/133/npcs/pplShopSal_09@08500.lua b/data/scripts/zones/133/npcs/pplShopSal_09@08500.lua index 26ead793..f33db312 100644 --- a/data/scripts/zones/133/npcs/pplShopSal_09@08500.lua +++ b/data/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/data/scripts/zones/133/npcs/pplShopSal_0a@08500.lua b/data/scripts/zones/133/npcs/pplShopSal_0a@08500.lua index 26ead793..f33db312 100644 --- a/data/scripts/zones/133/npcs/pplShopSal_0a@08500.lua +++ b/data/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/data/scripts/zones/133/npcs/pplShopSal_0b@08500.lua b/data/scripts/zones/133/npcs/pplShopSal_0b@08500.lua index 26ead793..f33db312 100644 --- a/data/scripts/zones/133/npcs/pplShopSal_0b@08500.lua +++ b/data/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/data/scripts/zones/133/npcs/pplShopSal_0c@08500.lua b/data/scripts/zones/133/npcs/pplShopSal_0c@08500.lua index 26ead793..f33db312 100644 --- a/data/scripts/zones/133/npcs/pplShopSal_0c@08500.lua +++ b/data/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/data/scripts/zones/133/npcs/pplShopSal_0d@08500.lua b/data/scripts/zones/133/npcs/pplShopSal_0d@08500.lua index 26ead793..f33db312 100644 --- a/data/scripts/zones/133/npcs/pplShopSal_0d@08500.lua +++ b/data/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/data/scripts/zones/133/npcs/pplShopSal_0e@08500.lua b/data/scripts/zones/133/npcs/pplShopSal_0e@08500.lua index 26ead793..f33db312 100644 --- a/data/scripts/zones/133/npcs/pplShopSal_0e@08500.lua +++ b/data/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/data/scripts/zones/133/npcs/pplShopSal_0f@08500.lua b/data/scripts/zones/133/npcs/pplShopSal_0f@08500.lua index 26ead793..f33db312 100644 --- a/data/scripts/zones/133/npcs/pplShopSal_0f@08500.lua +++ b/data/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/data/scripts/zones/133/npcs/pplShopSal_10@08500.lua b/data/scripts/zones/133/npcs/pplShopSal_10@08500.lua index 26ead793..f33db312 100644 --- a/data/scripts/zones/133/npcs/pplShopSal_10@08500.lua +++ b/data/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/data/scripts/zones/133/npcs/pplShopSal_11@08500.lua b/data/scripts/zones/133/npcs/pplShopSal_11@08500.lua index 26ead793..f33db312 100644 --- a/data/scripts/zones/133/npcs/pplShopSal_11@08500.lua +++ b/data/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/data/scripts/zones/133/npcs/pplStd_01@08500.lua b/data/scripts/zones/133/npcs/pplStd_01@08500.lua index b5c9c135..34c6215b 100644 --- a/data/scripts/zones/133/npcs/pplStd_01@08500.lua +++ b/data/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/data/scripts/zones/133/npcs/pplStd_02@08500.lua b/data/scripts/zones/133/npcs/pplStd_02@08500.lua index 16f3ccfd..9a7a1c5a 100644 --- a/data/scripts/zones/133/npcs/pplStd_02@08500.lua +++ b/data/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/data/scripts/zones/133/npcs/pplStd_03@08500.lua b/data/scripts/zones/133/npcs/pplStd_03@08500.lua index 2c46d59d..cd8bb503 100644 --- a/data/scripts/zones/133/npcs/pplStd_03@08500.lua +++ b/data/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/data/scripts/zones/133/npcs/pplStd_04@08500.lua b/data/scripts/zones/133/npcs/pplStd_04@08500.lua index 04081d45..bc72b122 100644 --- a/data/scripts/zones/133/npcs/pplStd_04@08500.lua +++ b/data/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/data/scripts/zones/133/npcs/pplStd_05@08500.lua b/data/scripts/zones/133/npcs/pplStd_05@08500.lua index 2887966b..e1e3ae0a 100644 --- a/data/scripts/zones/133/npcs/pplStd_05@08500.lua +++ b/data/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/data/scripts/zones/133/npcs/pplStd_06@08500.lua b/data/scripts/zones/133/npcs/pplStd_06@08500.lua index f46baa77..afbdee77 100644 --- a/data/scripts/zones/133/npcs/pplStd_06@08500.lua +++ b/data/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/data/scripts/zones/133/npcs/pplStd_07@08500.lua b/data/scripts/zones/133/npcs/pplStd_07@08500.lua index 081188ed..5081d5bd 100644 --- a/data/scripts/zones/133/npcs/pplStd_07@08500.lua +++ b/data/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/data/scripts/zones/133/npcs/pplStd_08@08500.lua b/data/scripts/zones/133/npcs/pplStd_08@08500.lua index 68b2f8d8..f8c621a1 100644 --- a/data/scripts/zones/133/npcs/pplStd_08@08500.lua +++ b/data/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/data/scripts/zones/133/npcs/pplStd_09@08500.lua b/data/scripts/zones/133/npcs/pplStd_09@08500.lua index 19dfc05f..174eb851 100644 --- a/data/scripts/zones/133/npcs/pplStd_09@08500.lua +++ b/data/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/data/scripts/zones/133/npcs/pplStd_0a@08500.lua b/data/scripts/zones/133/npcs/pplStd_0a@08500.lua index a7090324..3c63bd8b 100644 --- a/data/scripts/zones/133/npcs/pplStd_0a@08500.lua +++ b/data/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/data/scripts/zones/133/npcs/pplStd_0b@08500.lua b/data/scripts/zones/133/npcs/pplStd_0b@08500.lua index 8926d810..cd7a3f45 100644 --- a/data/scripts/zones/133/npcs/pplStd_0b@08500.lua +++ b/data/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/data/scripts/zones/133/npcs/pplStd_0c@08500.lua b/data/scripts/zones/133/npcs/pplStd_0c@08500.lua index 51799dcb..c5d09cef 100644 --- a/data/scripts/zones/133/npcs/pplStd_0c@08500.lua +++ b/data/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/data/scripts/zones/133/npcs/pplStd_0d@08500.lua b/data/scripts/zones/133/npcs/pplStd_0d@08500.lua index f90827bd..004f497a 100644 --- a/data/scripts/zones/133/npcs/pplStd_0d@08500.lua +++ b/data/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/data/scripts/zones/133/npcs/pplStd_0e@08500.lua b/data/scripts/zones/133/npcs/pplStd_0e@08500.lua index 009f5f2a..c764559a 100644 --- a/data/scripts/zones/133/npcs/pplStd_0e@08500.lua +++ b/data/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/data/scripts/zones/133/npcs/pplStd_0f@08500.lua b/data/scripts/zones/133/npcs/pplStd_0f@08500.lua index 22b94d0a..ee4a2a8b 100644 --- a/data/scripts/zones/133/npcs/pplStd_0f@08500.lua +++ b/data/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/data/scripts/zones/133/npcs/pplStd_10@08500.lua b/data/scripts/zones/133/npcs/pplStd_10@08500.lua index 716f20bd..116c149a 100644 --- a/data/scripts/zones/133/npcs/pplStd_10@08500.lua +++ b/data/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/data/scripts/zones/133/npcs/pplStd_11@08500.lua b/data/scripts/zones/133/npcs/pplStd_11@08500.lua index a88e6c7d..9d73b68f 100644 --- a/data/scripts/zones/133/npcs/pplStd_11@08500.lua +++ b/data/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/data/scripts/zones/133/npcs/pplStd_12@08500.lua b/data/scripts/zones/133/npcs/pplStd_12@08500.lua index 68b2f8d8..f8c621a1 100644 --- a/data/scripts/zones/133/npcs/pplStd_12@08500.lua +++ b/data/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/data/scripts/zones/133/npcs/pplStd_13@08500.lua b/data/scripts/zones/133/npcs/pplStd_13@08500.lua index e7e1bde1..36d8672e 100644 --- a/data/scripts/zones/133/npcs/pplStd_13@08500.lua +++ b/data/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/data/scripts/zones/133/npcs/pplStd_14@08500.lua b/data/scripts/zones/133/npcs/pplStd_14@08500.lua index e7e1bde1..36d8672e 100644 --- a/data/scripts/zones/133/npcs/pplStd_14@08500.lua +++ b/data/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/data/scripts/zones/133/npcs/taskBoard_01@08500.lua b/data/scripts/zones/133/npcs/taskBoard_01@08500.lua index 2862b9e5..7e60d68d 100644 --- a/data/scripts/zones/133/npcs/taskBoard_01@08500.lua +++ b/data/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/data/scripts/zones/166/npcs/openingStop_fstBtl03_03@0A600.lua b/data/scripts/zones/166/npcs/openingStop_fstBtl03_03@0A600.lua index 3e1d2f67..6038d14c 100644 --- a/data/scripts/zones/166/npcs/openingStop_fstBtl03_03@0A600.lua +++ b/data/scripts/zones/166/npcs/openingStop_fstBtl03_03@0A600.lua @@ -1,5 +1,5 @@ -function onInstantiate(npc) - return "/Chara/Npc/Object/OpeningStoperF0B1", false, false, false, false, false, 0x10A350, false, false, 0, 1, "TEST"; +function init(npc) + 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/data/scripts/zones/166/zone.lua b/data/scripts/zones/166/zone.lua index 703d61b9..75137ee9 100644 --- a/data/scripts/zones/166/zone.lua +++ b/data/scripts/zones/166/zone.lua @@ -3,7 +3,17 @@ 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/data/scripts/zones/244/npcs/objBed_01@0F400.lua b/data/scripts/zones/244/npcs/objBed_01@0F400.lua index de11bf32..64dfbd15 100644 --- a/data/scripts/zones/244/npcs/objBed_01@0F400.lua +++ b/data/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/data/scripts/zones/244/npcs/objInnDoor_01@0F400.lua b/data/scripts/zones/244/npcs/objInnDoor_01@0F400.lua index 0f279f41..4d9d2f2a 100644 --- a/data/scripts/zones/244/npcs/objInnDoor_01@0F400.lua +++ b/data/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/data/scripts/zones/244/npcs/objItemStore_01@0F400.lua b/data/scripts/zones/244/npcs/objItemStore_01@0F400.lua index 7a9c2b74..7df900c1 100644 --- a/data/scripts/zones/244/npcs/objItemStore_01@0F400.lua +++ b/data/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/data/scripts/zones/244/npcs/pplCutscene_01@0F400.lua b/data/scripts/zones/244/npcs/pplCutscene_01@0F400.lua index 7162a996..04153882 100644 --- a/data/scripts/zones/244/npcs/pplCutscene_01@0F400.lua +++ b/data/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/data/scripts/zones/244/npcs/test1.lua b/data/scripts/zones/244/npcs/test1.lua index e3943072..7bdabb1f 100644 --- a/data/scripts/zones/244/npcs/test1.lua +++ b/data/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 diff --git a/data/scripts/zones/244/zone.lua b/data/scripts/zones/244/zone.lua index 703d61b9..2657611f 100644 --- a/data/scripts/zones/244/zone.lua +++ b/data/scripts/zones/244/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/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/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 new file mode 100644 index 00000000..0d7c6a4e --- /dev/null +++ b/scripts/directors/questDirect_ocn0Btl02_01@0C196.lua @@ -0,0 +1,21 @@ + +function onEventStarted(player, actor, triggerName) + + man0l0Quest = getStaticActor("Man0l0"); + --player:runEventFunction("delegateEvent", player, man0l0Quest, "processTtrBtl001"); + 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:endCommand(); + player:endEvent(); + player:kickEvent(player:getDirector(), "noticeEvent", true); +end \ No newline at end of file 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/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/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/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/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/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/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..4271a73c --- /dev/null +++ b/scripts/zones/193/npcs/pplStd_05@0C100.lua @@ -0,0 +1,42 @@ +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 new file mode 100644 index 00000000..799d5275 --- /dev/null +++ b/scripts/zones/193/npcs/pplStd_11@0C100.lua @@ -0,0 +1,65 @@ +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 = 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