From 69f7fb5e475de41139b6f122d1575f0a1efd739c Mon Sep 17 00:00:00 2001 From: Filip Maj Date: Sun, 9 Jul 2017 18:38:01 -0400 Subject: [PATCH] Ported over all the opening directors and improved the director code a bit more. Also implemented content instances for Grid/Uld. --- FFXIVClassic Map Server/actors/area/Area.cs | 4 +- .../actors/area/PrivateAreaContent.cs | 9 +-- FFXIVClassic Map Server/actors/area/Zone.cs | 4 +- .../actors/director/Director.cs | 59 ++++++++++++++++++- .../actors/director/GuildleveDirector.cs | 10 ++-- .../actors/group/ContentGroup.cs | 17 ++++-- FFXIVClassic Map Server/lua/LuaEngine.cs | 11 +++- .../npc/object/aetheryte/AetheryteParent.lua | 2 +- data/scripts/content/SimpleContent30002.lua | 18 +++--- data/scripts/content/SimpleContent30010.lua | 30 ++++++++++ data/scripts/content/SimpleContent30079.lua | 26 ++++++++ .../directors/Quest/QuestDirectorMan0u001.lua | 26 +------- data/scripts/player.lua | 24 ++++---- .../openingstoper_gridania.lua | 2 +- .../fst0Battle03/PopulaceStandard/yda.lua | 23 +++++--- .../PopulaceStandard/exit_door.lua | 5 +- .../opening_stoper_uldah.lua | 2 +- .../PopulaceStandard/exit_trigger.lua | 27 +++++---- 18 files changed, 205 insertions(+), 94 deletions(-) create mode 100644 data/scripts/content/SimpleContent30010.lua create mode 100644 data/scripts/content/SimpleContent30079.lua diff --git a/FFXIVClassic Map Server/actors/area/Area.cs b/FFXIVClassic Map Server/actors/area/Area.cs index 28691b42..220ac86b 100644 --- a/FFXIVClassic Map Server/actors/area/Area.cs +++ b/FFXIVClassic Map Server/actors/area/Area.cs @@ -501,11 +501,11 @@ namespace FFXIVClassic_Map_Server.Actors } } - public Director CreateDirector(string path, params object[] args) + public Director CreateDirector(string path, bool hasContentGroup, params object[] args) { lock (directorLock) { - Director director = new Director(directorIdCount, this, path, args); + Director director = new Director(directorIdCount, this, path, hasContentGroup, args); currentDirectors.Add(director.actorId, director); directorIdCount++; return director; diff --git a/FFXIVClassic Map Server/actors/area/PrivateAreaContent.cs b/FFXIVClassic Map Server/actors/area/PrivateAreaContent.cs index e82727e7..4cece65c 100644 --- a/FFXIVClassic Map Server/actors/area/PrivateAreaContent.cs +++ b/FFXIVClassic Map Server/actors/area/PrivateAreaContent.cs @@ -14,7 +14,6 @@ namespace FFXIVClassic_Map_Server.actors.area class PrivateAreaContent : PrivateArea { private Director currentDirector; - private ContentGroup currentContentGroup; private bool isContentFinished = false; public static PrivateAreaContent CreateContentArea(String scriptPath) @@ -26,8 +25,7 @@ namespace FFXIVClassic_Map_Server.actors.area : base(parent, parent.actorId, classPath, privateAreaName, privateAreaType, 0, 0, 0) { currentDirector = director; - currentContentGroup = Server.GetWorldManager().CreateContentGroup(director); - LuaEngine.GetInstance().CallLuaFunction(contentStarter, this, "onCreate", false, currentContentGroup, currentDirector); + LuaEngine.GetInstance().CallLuaFunction(contentStarter, this, "onCreate", false, currentDirector); } public Director GetContentDirector() @@ -35,11 +33,6 @@ namespace FFXIVClassic_Map_Server.actors.area return currentDirector; } - public ContentGroup GetContentGroup() - { - return currentContentGroup; - } - public void ContentFinished() { isContentFinished = true; diff --git a/FFXIVClassic Map Server/actors/area/Zone.cs b/FFXIVClassic Map Server/actors/area/Zone.cs index 409bdbb2..16ee73e7 100644 --- a/FFXIVClassic Map Server/actors/area/Zone.cs +++ b/FFXIVClassic Map Server/actors/area/Zone.cs @@ -114,11 +114,11 @@ namespace FFXIVClassic_Map_Server.actors.area return mActorList[id]; } - public PrivateAreaContent CreateContentArea(Player starterPlayer, string areaClassPath, string contentScript, string areaName, string directorName) + public PrivateAreaContent CreateContentArea(Player starterPlayer, string areaClassPath, string contentScript, string areaName, string directorName, params object[] args) { lock (contentAreasLock) { - Director director = CreateDirector(directorName); + Director director = CreateDirector(directorName, true, args); if (director == null) return null; diff --git a/FFXIVClassic Map Server/actors/director/Director.cs b/FFXIVClassic Map Server/actors/director/Director.cs index f5c7bc8b..321645ab 100644 --- a/FFXIVClassic Map Server/actors/director/Director.cs +++ b/FFXIVClassic Map Server/actors/director/Director.cs @@ -1,6 +1,7 @@  using FFXIVClassic.Common; using FFXIVClassic_Map_Server.actors.area; +using FFXIVClassic_Map_Server.actors.group; using FFXIVClassic_Map_Server.Actors; using FFXIVClassic_Map_Server.lua; using FFXIVClassic_Map_Server.packets.send.actor; @@ -16,6 +17,7 @@ namespace FFXIVClassic_Map_Server.actors.director private uint directorId; private string directorScriptPath; private List members = new List(); + protected ContentGroup contentGroup; private bool isCreated = false; private bool isDeleted = false; private bool isDeleting = false; @@ -23,7 +25,7 @@ namespace FFXIVClassic_Map_Server.actors.director private Script directorScript; private Coroutine currentCoroutine; - public Director(uint id, Area zone, string directorPath, params object[] args) + public Director(uint id, Area zone, string directorPath, bool hasContentGroup, params object[] args) : base((6 << 28 | zone.actorId << 19 | (uint)id)) { directorId = id; @@ -33,6 +35,9 @@ namespace FFXIVClassic_Map_Server.actors.director LoadLuaScript(); + if (hasContentGroup) + contentGroup = Server.GetWorldManager().CreateContentGroup(this, GetMembers()); + eventConditions = new EventList(); eventConditions.noticeEventConditions = new List(); eventConditions.noticeEventConditions.Add(new EventList.NoticeEventCondition("noticeEvent", 0xE,0x0)); @@ -108,6 +113,9 @@ namespace FFXIVClassic_Map_Server.actors.director if (isCreated && spawnImmediate) { + if (contentGroup != null) + contentGroup.Start(); + foreach (Player p in GetPlayerMembers()) { p.QueuePackets(GetSpawnPackets()); @@ -116,15 +124,26 @@ namespace FFXIVClassic_Map_Server.actors.director } if (this is GuildleveDirector) + { ((GuildleveDirector)this).LoadGuildleve(); - + } + StartCoroutine("main", this); } + public void StartContentGroup() + { + if (contentGroup != null) + contentGroup.Start(); + } + public void EndDirector() { isDeleting = true; + if (contentGroup != null) + contentGroup.DeleteGroup(); + if (this is GuildleveDirector) ((GuildleveDirector)this).EndGuildleveDirector(); @@ -139,13 +158,20 @@ namespace FFXIVClassic_Map_Server.actors.director public void AddMember(Actor actor) { if (!members.Contains(actor)) + { members.Add(actor); + + if (contentGroup != null) + contentGroup.AddMember(actor); + } } public void RemoveMember(Actor actor) { if (members.Contains(actor)) members.Remove(actor); + if (contentGroup != null) + contentGroup.RemoveMember(actor.actorId); if (GetPlayerMembers().Count == 0 && !isDeleting) EndDirector(); } @@ -175,6 +201,16 @@ namespace FFXIVClassic_Map_Server.actors.director return isDeleted; } + public bool HasContentGroup() + { + return contentGroup != null; + } + + public ContentGroup GetContentGroup() + { + return contentGroup; + } + public void GenerateActorName(int actorNumber) { //Format Class Name @@ -262,5 +298,24 @@ namespace FFXIVClassic_Map_Server.actors.director return null; } + public void OnEventStart(Player player, object[] args) + { + object[] args2 = new object[args.Length + (player == null ? 1 : 2)]; + Array.Copy(args, 0, args2, (player == null ? 1 : 2), args.Length); + if (player != null) + { + args2[0] = player; + args2[1] = this; + } + else + args2[0] = this; + + Coroutine coroutine = directorScript.CreateCoroutine(directorScript.Globals["onEventStarted"]).Coroutine; + DynValue value = coroutine.Resume(args2); + LuaEngine.GetInstance().ResolveResume(player, coroutine, value); + } + + + } } \ No newline at end of file diff --git a/FFXIVClassic Map Server/actors/director/GuildleveDirector.cs b/FFXIVClassic Map Server/actors/director/GuildleveDirector.cs index 6e10da11..0bfa49a4 100644 --- a/FFXIVClassic Map Server/actors/director/GuildleveDirector.cs +++ b/FFXIVClassic Map Server/actors/director/GuildleveDirector.cs @@ -18,7 +18,6 @@ namespace FFXIVClassic_Map_Server.actors.director public uint guildleveId; public Player guildleveOwner; public byte selectedDifficulty; - public ContentGroup contentGroup; public GuildleveData guildleveData; public GuildleveWork guildleveWork = new GuildleveWork(); @@ -27,7 +26,7 @@ namespace FFXIVClassic_Map_Server.actors.director public uint completionTime = 0; public GuildleveDirector(uint id, Area zone, string directorPath, uint guildleveId, byte selectedDifficulty, Player guildleveOwner, params object[] args) - : base(id, zone, directorPath, args) + : base(id, zone, directorPath, true, args) { this.guildleveId = guildleveId; this.selectedDifficulty = selectedDifficulty; @@ -53,7 +52,7 @@ namespace FFXIVClassic_Map_Server.actors.director public void LoadGuildleve() { - contentGroup = Server.GetWorldManager().CreateGLContentGroup(this, GetMembers()); + } public void StartGuildleve() @@ -123,7 +122,7 @@ namespace FFXIVClassic_Map_Server.actors.director if (wasCompleted) { Npc aetheryteNode = zone.SpawnActor(1200040, String.Format("{0}:warpExit", guildleveOwner.actorName), guildleveOwner.positionX, guildleveOwner.positionY, guildleveOwner.positionZ); - contentGroup.AddMember(aetheryteNode); + AddMember(aetheryteNode); foreach (Actor a in GetPlayerMembers()) { @@ -149,8 +148,7 @@ namespace FFXIVClassic_Map_Server.actors.director //Delete ContentGroup, change music back public void EndGuildleveDirector() - { - contentGroup.DeleteGroup(); + { foreach (Actor p in GetPlayerMembers()) { Player player = (Player)p; diff --git a/FFXIVClassic Map Server/actors/group/ContentGroup.cs b/FFXIVClassic Map Server/actors/group/ContentGroup.cs index 0af1e0d9..f5353198 100644 --- a/FFXIVClassic Map Server/actors/group/ContentGroup.cs +++ b/FFXIVClassic Map Server/actors/group/ContentGroup.cs @@ -19,6 +19,7 @@ namespace FFXIVClassic_Map_Server.actors.group public ContentGroupWork contentGroupWork = new ContentGroupWork(); private Director director; private List members = new List(); + private bool isStarted = false; public ContentGroup(ulong groupIndex, Director director, uint[] initialMembers) : base(groupIndex) { @@ -38,6 +39,12 @@ namespace FFXIVClassic_Map_Server.actors.group contentGroupWork._globalTemp.director = (ulong)director.actorId << 32; } + public void Start() + { + isStarted = true; + SendGroupPacketsAll(members); + } + public void AddMember(Actor actor) { if (actor == null) @@ -46,15 +53,17 @@ namespace FFXIVClassic_Map_Server.actors.group members.Add(actor.actorId); if (actor is Character) - ((Character)actor).SetCurrentContentGroup(this); - - SendGroupPacketsAll(members); + ((Character)actor).SetCurrentContentGroup(this); + + if (isStarted) + SendGroupPacketsAll(members); } public void RemoveMember(uint memberId) { members.Remove(memberId); - SendGroupPacketsAll(members); + if (isStarted) + SendGroupPacketsAll(members); CheckDestroy(); } diff --git a/FFXIVClassic Map Server/lua/LuaEngine.cs b/FFXIVClassic Map Server/lua/LuaEngine.cs index c0134a3e..fb382518 100644 --- a/FFXIVClassic Map Server/lua/LuaEngine.cs +++ b/FFXIVClassic Map Server/lua/LuaEngine.cs @@ -117,7 +117,7 @@ namespace FFXIVClassic_Map_Server.lua Coroutine coroutine = mSleepingOnPlayerEvent[player.actorId]; mSleepingOnPlayerEvent.Remove(player.actorId); DynValue value = coroutine.Resume(LuaUtils.CreateLuaParamObjectList(args)); - ResolveResume(null, coroutine, value); + ResolveResume(player, coroutine, value); } catch (ScriptRuntimeException e) { @@ -384,8 +384,13 @@ namespace FFXIVClassic_Map_Server.lua player.EndEvent(); } } - else - CallLuaFunction(player, target, "onEventStarted", false, LuaUtils.CreateLuaParamObjectList(lparams)); + else + { + if (target is Director) + ((Director)target).OnEventStart(player, LuaUtils.CreateLuaParamObjectList(lparams)); + else + CallLuaFunction(player, target, "onEventStarted", false, LuaUtils.CreateLuaParamObjectList(lparams)); + } } public DynValue ResolveResume(Player player, Coroutine coroutine, DynValue value) diff --git a/data/scripts/base/chara/npc/object/aetheryte/AetheryteParent.lua b/data/scripts/base/chara/npc/object/aetheryte/AetheryteParent.lua index 1917a37b..63fee49d 100644 --- a/data/scripts/base/chara/npc/object/aetheryte/AetheryteParent.lua +++ b/data/scripts/base/chara/npc/object/aetheryte/AetheryteParent.lua @@ -144,7 +144,7 @@ function doLevequestInit(player, aetheryte) player:PlayAnimation(getGLStartAnimationFromSheet(guildleveData.borderId, guildleveData.plateId, true)); director = player:GetZone():CreateGuildleveDirector(glId, difficulty, player); player:AddDirector(director); - director:StartDirector(true, glId) + director:StartDirector(true, glId); end else diff --git a/data/scripts/content/SimpleContent30002.lua b/data/scripts/content/SimpleContent30002.lua index 1ca2ba03..f0154a81 100644 --- a/data/scripts/content/SimpleContent30002.lua +++ b/data/scripts/content/SimpleContent30002.lua @@ -1,5 +1,5 @@ -function onCreate(starterPlayer, contentArea, contentGroup, director) +function onCreate(starterPlayer, contentArea, director) yshtola = contentArea:SpawnActor(2290001, "yshtola", -8, 16.35, 6, 0.5); stahlmann = contentArea:SpawnActor(2290002, "stahlmann", 0, 16.35, 22, 3); @@ -8,13 +8,15 @@ function onCreate(starterPlayer, contentArea, contentGroup, director) mob2 = contentArea:SpawnActor(2205403, "mob2", -3.02, 17.35, 14.24, -2.81); mob3 = contentArea:SpawnActor(2205403, "mob3", -3.02-3, 17.35, 14.24, -2.81); - contentGroup:AddMember(starterPlayer); - contentGroup:AddMember(director); - contentGroup:AddMember(yshtola); - contentGroup:AddMember(stahlmann); - contentGroup:AddMember(mob1); - contentGroup:AddMember(mob2); - contentGroup:AddMember(mob3); + director:AddMember(starterPlayer); + director:AddMember(director); + director:AddMember(yshtola); + director:AddMember(stahlmann); + director:AddMember(mob1); + director:AddMember(mob2); + director:AddMember(mob3); + + director:StartContentGroup(); end diff --git a/data/scripts/content/SimpleContent30010.lua b/data/scripts/content/SimpleContent30010.lua new file mode 100644 index 00000000..d78c2935 --- /dev/null +++ b/data/scripts/content/SimpleContent30010.lua @@ -0,0 +1,30 @@ + +function onCreate(starterPlayer, contentArea, director) + + papalymo = contentArea:SpawnActor(2290005, "papalymo", 365.89, 4.0943, -706.72, -0.718); + yda = contentArea:SpawnActor(2290006, "yda", 365.266, 4.122, -700.73, 1.5659); + yda:ChangeState(2); + + mob1 = contentArea:SpawnActor(2201407, "mob1", 374.427, 4.4, -698.711, -1.942); + mob2 = contentArea:SpawnActor(2201407, "mob2", 375.377, 4.4, -700.247, -1.992); + mob3 = contentArea:SpawnActor(2201407, "mob3", 375.125, 4.4, -703.591, -1.54); + + openingStoper = contentArea:SpawnActor(1090384, "openingstoper", 356.09, 3.74, -701.62, -1.41); + + director:AddMember(starterPlayer); + director:AddMember(director); + director:AddMember(papalymo); + director:AddMember(yda); + director:AddMember(mob1); + director:AddMember(mob2); + director:AddMember(mob3); + + director:StartContentGroup(); + +end + +function onDestroy() + + + +end \ No newline at end of file diff --git a/data/scripts/content/SimpleContent30079.lua b/data/scripts/content/SimpleContent30079.lua new file mode 100644 index 00000000..1e40131c --- /dev/null +++ b/data/scripts/content/SimpleContent30079.lua @@ -0,0 +1,26 @@ + +function onCreate(starterPlayer, contentArea, director) + + niellefresne = contentArea:SpawnActor(2290003, "niellefresne", -11.86, 192, 35.06, -0.8); + thancred = contentArea:SpawnActor(2290004, "thancred", -26.41, 192, 39.52, 1.2); + thancred:ChangeState(2); + + mob1 = contentArea:SpawnActor(2203301, "mob1", -6.193, 192, 47.658, -2.224); + + openingStoper = contentArea:SpawnActor(1090385, "openingstoper", -24.34, 192, 34.22, 0); + + director:AddMember(starterPlayer); + director:AddMember(director); + director:AddMember(niellefresne); + director:AddMember(thancred); + director:AddMember(mob1); + + director:StartContentGroup(); + +end + +function onDestroy() + + + +end \ No newline at end of file diff --git a/data/scripts/directors/Quest/QuestDirectorMan0u001.lua b/data/scripts/directors/Quest/QuestDirectorMan0u001.lua index a0baacab..7a09c750 100644 --- a/data/scripts/directors/Quest/QuestDirectorMan0u001.lua +++ b/data/scripts/directors/Quest/QuestDirectorMan0u001.lua @@ -59,27 +59,7 @@ function onEventStarted(player, actor, triggerName) man0u0Quest:NextPhase(10); player:EndEvent(); + player:GetZone():ContentFinished(); + GetWorldManager():DoZoneChange(player, 230, "PrivateAreaMasterPast", 1, 15, -826.868469, 6, 193.745865, -0.008368492); + end - -function onUpdate() -end - -function onTalkEvent(player, npc) - -end - -function onPushEvent(player, npc) -end - -function onCommandEvent(player, command) - - quest = GetStaticActor("Man0l0"); - callClientFunction(player, "delegateEvent", player, quest, "processTtrBtl002", nil, nil, nil); - -end - -function onEventUpdate(player, npc) -end - -function onCommand(player, command) -end \ No newline at end of file diff --git a/data/scripts/player.lua b/data/scripts/player.lua index 6a82be35..19930b93 100644 --- a/data/scripts/player.lua +++ b/data/scripts/player.lua @@ -21,11 +21,12 @@ function onBeginLogin(player) --For Opening. Set Director and reset position incase d/c if (player:HasQuest(110001) == true) then - director = player:GetZone():CreateDirector("OpeningDirector"); + director = player:GetZone():CreateDirector("OpeningDirector", false); player:AddDirector(director); + director:StartDirector(true); player:SetLoginDirector(director); player:KickEvent(director, "noticeEvent", true); - + player.positionX = 0.016; player.positionY = 10.35; player.positionZ = -36.91; @@ -33,10 +34,11 @@ function onBeginLogin(player) player:GetQuest(110001):ClearQuestData(); player:GetQuest(110001):ClearQuestFlags(); elseif (player:HasQuest(110005) == true) then - director = player:GetZone():CreateDirector("OpeningDirector"); + director = player:GetZone():CreateDirector("OpeningDirector", false); player:AddDirector(director); - player:SetLoginDirector(director); - player:KickEvent(director, "noticeEvent", "noticeEvent"); + director:StartDirector(false); + player:SetLoginDirector(director); + player:KickEvent(director, "noticeEvent", true); player.positionX = 369.5434; player.positionY = 4.21; @@ -45,10 +47,11 @@ function onBeginLogin(player) player:GetQuest(110005):ClearQuestData(); player:GetQuest(110005):ClearQuestFlags(); elseif (player:HasQuest(110009) == true) then - director = player:GetZone():CreateDirector("OpeningDirector"); - player:AddDirector(director); - player:SetLoginDirector(director); - player:KickEvent(director, "noticeEvent", "noticeEvent"); + --director = player:GetZone():CreateDirector("OpeningDirector", false); + --player:AddDirector(director); + --director:StartDirector(false); + --player:SetLoginDirector(director); + --player:KickEvent(director, "noticeEvent", true); player.positionX = 5.364327; player.positionY = 196.0; @@ -61,8 +64,7 @@ function onBeginLogin(player) end function onLogin(player) - player:SendMessage(0x1D,"",">Callback \"onLogin\" for player script:Running."); - + if (player:GetPlayTime(false) == 0) then player:SendMessage(0x1D,"",">PlayTime == 0, new player!"); diff --git a/data/scripts/unique/fst0Battle03/OpeningStoperF0B1/openingstoper_gridania.lua b/data/scripts/unique/fst0Battle03/OpeningStoperF0B1/openingstoper_gridania.lua index 28521fac..2d63e9f0 100644 --- a/data/scripts/unique/fst0Battle03/OpeningStoperF0B1/openingstoper_gridania.lua +++ b/data/scripts/unique/fst0Battle03/OpeningStoperF0B1/openingstoper_gridania.lua @@ -6,7 +6,7 @@ function onEventStarted(player, npc, triggerName) worldMaster = GetWorldMaster(); player:SendGameMessage(player, worldMaster, 34109, 0x20); elseif (triggerName == "exit") then - GetWorldManager():DoPlayerMoveInZone(player, 5); + GetWorldManager():DoPlayerMoveInZone(player, 356.09, 3.74, -701.62, -1.4); end player:EndEvent(); end \ No newline at end of file diff --git a/data/scripts/unique/fst0Battle03/PopulaceStandard/yda.lua b/data/scripts/unique/fst0Battle03/PopulaceStandard/yda.lua index 3a16e9de..a82963ad 100644 --- a/data/scripts/unique/fst0Battle03/PopulaceStandard/yda.lua +++ b/data/scripts/unique/fst0Battle03/PopulaceStandard/yda.lua @@ -27,16 +27,21 @@ function onEventStarted(player, npc, triggerName) player:EndEvent(); - worldMaster = GetWorldMaster(); - player:SendGameMessage(player, worldMaster, 34108, 0x20); - player:SendGameMessage(player, worldMaster, 50011, 0x20); - - director = player:GetZone():CreateDirector("Quest/QuestDirectorMan0g001"); - player:KickEvent(director, "noticeEvent", true); - player:AddDirector(director); - player:SetLoginDirector(director); + contentArea = player:GetZone():CreateContentArea(player, "/Area/PrivateArea/Content/PrivateAreaMasterSimpleContent", "man0g01", "SimpleContent30010", "Quest/QuestDirectorMan0g001"); + + if (contentArea == nil) then + player:EndEvent(); + return; + end + + director = contentArea:GetContentDirector(); + player:AddDirector(director); + director:StartDirector(false); - GetWorldManager():DoZoneChange(player, 166, "ContentSimpleContent30010", 1, 16, 362.4087, 4, -703.8168, 1.5419); + player:KickEvent(director, "noticeEvent", true); + player:SetLoginDirector(director); + + GetWorldManager():DoZoneChangeContent(player, contentArea, 362.4087, 4, -703.8168, 1.5419, 16); return; else callClientFunction(player, "delegateEvent", player, man0g0Quest, "processEvent000_1", nil, nil, nil); diff --git a/data/scripts/unique/ocn0Battle02/PopulaceStandard/exit_door.lua b/data/scripts/unique/ocn0Battle02/PopulaceStandard/exit_door.lua index a4d05536..ade16c2e 100644 --- a/data/scripts/unique/ocn0Battle02/PopulaceStandard/exit_door.lua +++ b/data/scripts/unique/ocn0Battle02/PopulaceStandard/exit_door.lua @@ -34,10 +34,11 @@ function onEventStarted(player, npc, triggerName) return; end - director = contentArea:GetContentDirector(); + director = contentArea:GetContentDirector(); + player:AddDirector(director); + director:StartDirector(false); player:KickEvent(director, "noticeEvent", true); - player:AddDirector(director); player:SetLoginDirector(director); GetWorldManager():DoZoneChangeContent(player, contentArea, -5, 16.35, 6, 0.5, 16); diff --git a/data/scripts/unique/wil0Battle01/OpeningStoperW0B1/opening_stoper_uldah.lua b/data/scripts/unique/wil0Battle01/OpeningStoperW0B1/opening_stoper_uldah.lua index cb7b27e6..ab7f52a1 100644 --- a/data/scripts/unique/wil0Battle01/OpeningStoperW0B1/opening_stoper_uldah.lua +++ b/data/scripts/unique/wil0Battle01/OpeningStoperW0B1/opening_stoper_uldah.lua @@ -7,7 +7,7 @@ function onEventStarted(player, npc, triggerName) worldMaster = GetWorldMaster(); player:SendGameMessage(player, worldMaster, 34109, 0x20); elseif (triggerName == "exit") then - GetWorldManager():DoPlayerMoveInZone(player, 6); + GetWorldManager():DoPlayerMoveInZone(player, 5.36433, 196, 133.656, -2.84938); end player:EndEvent(); end \ No newline at end of file diff --git a/data/scripts/unique/wil0Battle01/PopulaceStandard/exit_trigger.lua b/data/scripts/unique/wil0Battle01/PopulaceStandard/exit_trigger.lua index db93a4f7..880602bc 100644 --- a/data/scripts/unique/wil0Battle01/PopulaceStandard/exit_trigger.lua +++ b/data/scripts/unique/wil0Battle01/PopulaceStandard/exit_trigger.lua @@ -25,18 +25,23 @@ function onEventStarted(player, npc, triggerName) --if (man0u0Quest ~= nil and man0u0Quest:GetQuestFlag(MAN0U0_FLAG_MINITUT_DONE1) == true and man0u0Quest:GetQuestFlag(MAN0U0_FLAG_MINITUT_DONE2) == true and man0u0Quest:GetQuestFlag(MAN0U0_FLAG_MINITUT_DONE3) == true) then + player:EndEvent(); + + contentArea = player:GetZone():CreateContentArea(player, "/Area/PrivateArea/Content/PrivateAreaMasterSimpleContent", "man0u01", "SimpleContent30079", "Quest/QuestDirectorMan0u001"); + + if (contentArea == nil) then player:EndEvent(); - - worldMaster = GetWorldMaster(); - player:SendGameMessage(player, worldMaster, 34108, 0x20); - player:SendGameMessage(player, worldMaster, 50011, 0x20); - - director = player:GetZone():CreateDirector("Quest/QuestDirectorMan0u001"); - player:KickEvent(director, "noticeEvent", true); - player:AddDirector(director); - player:SetLoginDirector(director); - - GetWorldManager():DoZoneChange(player, 184, nil, 0, 16, -24.34, 192, 34.22, 0.78); + return; + end + + director = contentArea:GetContentDirector(); + player:AddDirector(director); + director:StartDirector(false); + + player:KickEvent(director, "noticeEvent", true); + player:SetLoginDirector(director); + + GetWorldManager():DoZoneChangeContent(player, contentArea, -24.34, 192, 34.22, 0.78, 16); end