1
Fork 0
mirror of https://bitbucket.org/Ioncannon/project-meteor-server.git synced 2025-04-22 04:37:47 +00:00

Ported over all the opening directors and improved the director code a bit more. Also implemented content instances for Grid/Uld.

This commit is contained in:
Filip Maj 2017-07-09 18:38:01 -04:00
parent 24c46c0480
commit 69f7fb5e47
18 changed files with 205 additions and 94 deletions

View file

@ -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) lock (directorLock)
{ {
Director director = new Director(directorIdCount, this, path, args); Director director = new Director(directorIdCount, this, path, hasContentGroup, args);
currentDirectors.Add(director.actorId, director); currentDirectors.Add(director.actorId, director);
directorIdCount++; directorIdCount++;
return director; return director;

View file

@ -14,7 +14,6 @@ namespace FFXIVClassic_Map_Server.actors.area
class PrivateAreaContent : PrivateArea class PrivateAreaContent : PrivateArea
{ {
private Director currentDirector; private Director currentDirector;
private ContentGroup currentContentGroup;
private bool isContentFinished = false; private bool isContentFinished = false;
public static PrivateAreaContent CreateContentArea(String scriptPath) 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) : base(parent, parent.actorId, classPath, privateAreaName, privateAreaType, 0, 0, 0)
{ {
currentDirector = director; currentDirector = director;
currentContentGroup = Server.GetWorldManager().CreateContentGroup(director); LuaEngine.GetInstance().CallLuaFunction(contentStarter, this, "onCreate", false, currentDirector);
LuaEngine.GetInstance().CallLuaFunction(contentStarter, this, "onCreate", false, currentContentGroup, currentDirector);
} }
public Director GetContentDirector() public Director GetContentDirector()
@ -35,11 +33,6 @@ namespace FFXIVClassic_Map_Server.actors.area
return currentDirector; return currentDirector;
} }
public ContentGroup GetContentGroup()
{
return currentContentGroup;
}
public void ContentFinished() public void ContentFinished()
{ {
isContentFinished = true; isContentFinished = true;

View file

@ -114,11 +114,11 @@ namespace FFXIVClassic_Map_Server.actors.area
return mActorList[id]; 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) lock (contentAreasLock)
{ {
Director director = CreateDirector(directorName); Director director = CreateDirector(directorName, true, args);
if (director == null) if (director == null)
return null; return null;

View file

@ -1,6 +1,7 @@
 
using FFXIVClassic.Common; using FFXIVClassic.Common;
using FFXIVClassic_Map_Server.actors.area; using FFXIVClassic_Map_Server.actors.area;
using FFXIVClassic_Map_Server.actors.group;
using FFXIVClassic_Map_Server.Actors; using FFXIVClassic_Map_Server.Actors;
using FFXIVClassic_Map_Server.lua; using FFXIVClassic_Map_Server.lua;
using FFXIVClassic_Map_Server.packets.send.actor; using FFXIVClassic_Map_Server.packets.send.actor;
@ -16,6 +17,7 @@ namespace FFXIVClassic_Map_Server.actors.director
private uint directorId; private uint directorId;
private string directorScriptPath; private string directorScriptPath;
private List<Actor> members = new List<Actor>(); private List<Actor> members = new List<Actor>();
protected ContentGroup contentGroup;
private bool isCreated = false; private bool isCreated = false;
private bool isDeleted = false; private bool isDeleted = false;
private bool isDeleting = false; private bool isDeleting = false;
@ -23,7 +25,7 @@ namespace FFXIVClassic_Map_Server.actors.director
private Script directorScript; private Script directorScript;
private Coroutine currentCoroutine; 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)) : base((6 << 28 | zone.actorId << 19 | (uint)id))
{ {
directorId = id; directorId = id;
@ -33,6 +35,9 @@ namespace FFXIVClassic_Map_Server.actors.director
LoadLuaScript(); LoadLuaScript();
if (hasContentGroup)
contentGroup = Server.GetWorldManager().CreateContentGroup(this, GetMembers());
eventConditions = new EventList(); eventConditions = new EventList();
eventConditions.noticeEventConditions = new List<EventList.NoticeEventCondition>(); eventConditions.noticeEventConditions = new List<EventList.NoticeEventCondition>();
eventConditions.noticeEventConditions.Add(new EventList.NoticeEventCondition("noticeEvent", 0xE,0x0)); eventConditions.noticeEventConditions.Add(new EventList.NoticeEventCondition("noticeEvent", 0xE,0x0));
@ -108,6 +113,9 @@ namespace FFXIVClassic_Map_Server.actors.director
if (isCreated && spawnImmediate) if (isCreated && spawnImmediate)
{ {
if (contentGroup != null)
contentGroup.Start();
foreach (Player p in GetPlayerMembers()) foreach (Player p in GetPlayerMembers())
{ {
p.QueuePackets(GetSpawnPackets()); p.QueuePackets(GetSpawnPackets());
@ -116,15 +124,26 @@ namespace FFXIVClassic_Map_Server.actors.director
} }
if (this is GuildleveDirector) if (this is GuildleveDirector)
{
((GuildleveDirector)this).LoadGuildleve(); ((GuildleveDirector)this).LoadGuildleve();
}
StartCoroutine("main", this); StartCoroutine("main", this);
} }
public void StartContentGroup()
{
if (contentGroup != null)
contentGroup.Start();
}
public void EndDirector() public void EndDirector()
{ {
isDeleting = true; isDeleting = true;
if (contentGroup != null)
contentGroup.DeleteGroup();
if (this is GuildleveDirector) if (this is GuildleveDirector)
((GuildleveDirector)this).EndGuildleveDirector(); ((GuildleveDirector)this).EndGuildleveDirector();
@ -139,13 +158,20 @@ namespace FFXIVClassic_Map_Server.actors.director
public void AddMember(Actor actor) public void AddMember(Actor actor)
{ {
if (!members.Contains(actor)) if (!members.Contains(actor))
{
members.Add(actor); members.Add(actor);
if (contentGroup != null)
contentGroup.AddMember(actor);
}
} }
public void RemoveMember(Actor actor) public void RemoveMember(Actor actor)
{ {
if (members.Contains(actor)) if (members.Contains(actor))
members.Remove(actor); members.Remove(actor);
if (contentGroup != null)
contentGroup.RemoveMember(actor.actorId);
if (GetPlayerMembers().Count == 0 && !isDeleting) if (GetPlayerMembers().Count == 0 && !isDeleting)
EndDirector(); EndDirector();
} }
@ -175,6 +201,16 @@ namespace FFXIVClassic_Map_Server.actors.director
return isDeleted; return isDeleted;
} }
public bool HasContentGroup()
{
return contentGroup != null;
}
public ContentGroup GetContentGroup()
{
return contentGroup;
}
public void GenerateActorName(int actorNumber) public void GenerateActorName(int actorNumber)
{ {
//Format Class Name //Format Class Name
@ -262,5 +298,24 @@ namespace FFXIVClassic_Map_Server.actors.director
return null; 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);
}
} }
} }

View file

@ -18,7 +18,6 @@ namespace FFXIVClassic_Map_Server.actors.director
public uint guildleveId; public uint guildleveId;
public Player guildleveOwner; public Player guildleveOwner;
public byte selectedDifficulty; public byte selectedDifficulty;
public ContentGroup contentGroup;
public GuildleveData guildleveData; public GuildleveData guildleveData;
public GuildleveWork guildleveWork = new GuildleveWork(); public GuildleveWork guildleveWork = new GuildleveWork();
@ -27,7 +26,7 @@ namespace FFXIVClassic_Map_Server.actors.director
public uint completionTime = 0; public uint completionTime = 0;
public GuildleveDirector(uint id, Area zone, string directorPath, uint guildleveId, byte selectedDifficulty, Player guildleveOwner, params object[] args) 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.guildleveId = guildleveId;
this.selectedDifficulty = selectedDifficulty; this.selectedDifficulty = selectedDifficulty;
@ -53,7 +52,7 @@ namespace FFXIVClassic_Map_Server.actors.director
public void LoadGuildleve() public void LoadGuildleve()
{ {
contentGroup = Server.GetWorldManager().CreateGLContentGroup(this, GetMembers());
} }
public void StartGuildleve() public void StartGuildleve()
@ -123,7 +122,7 @@ namespace FFXIVClassic_Map_Server.actors.director
if (wasCompleted) if (wasCompleted)
{ {
Npc aetheryteNode = zone.SpawnActor(1200040, String.Format("{0}:warpExit", guildleveOwner.actorName), guildleveOwner.positionX, guildleveOwner.positionY, guildleveOwner.positionZ); 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()) foreach (Actor a in GetPlayerMembers())
{ {
@ -150,7 +149,6 @@ namespace FFXIVClassic_Map_Server.actors.director
//Delete ContentGroup, change music back //Delete ContentGroup, change music back
public void EndGuildleveDirector() public void EndGuildleveDirector()
{ {
contentGroup.DeleteGroup();
foreach (Actor p in GetPlayerMembers()) foreach (Actor p in GetPlayerMembers())
{ {
Player player = (Player)p; Player player = (Player)p;

View file

@ -19,6 +19,7 @@ namespace FFXIVClassic_Map_Server.actors.group
public ContentGroupWork contentGroupWork = new ContentGroupWork(); public ContentGroupWork contentGroupWork = new ContentGroupWork();
private Director director; private Director director;
private List<uint> members = new List<uint>(); private List<uint> members = new List<uint>();
private bool isStarted = false;
public ContentGroup(ulong groupIndex, Director director, uint[] initialMembers) : base(groupIndex) 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; contentGroupWork._globalTemp.director = (ulong)director.actorId << 32;
} }
public void Start()
{
isStarted = true;
SendGroupPacketsAll(members);
}
public void AddMember(Actor actor) public void AddMember(Actor actor)
{ {
if (actor == null) if (actor == null)
@ -48,12 +55,14 @@ namespace FFXIVClassic_Map_Server.actors.group
if (actor is Character) if (actor is Character)
((Character)actor).SetCurrentContentGroup(this); ((Character)actor).SetCurrentContentGroup(this);
if (isStarted)
SendGroupPacketsAll(members); SendGroupPacketsAll(members);
} }
public void RemoveMember(uint memberId) public void RemoveMember(uint memberId)
{ {
members.Remove(memberId); members.Remove(memberId);
if (isStarted)
SendGroupPacketsAll(members); SendGroupPacketsAll(members);
CheckDestroy(); CheckDestroy();
} }

View file

@ -117,7 +117,7 @@ namespace FFXIVClassic_Map_Server.lua
Coroutine coroutine = mSleepingOnPlayerEvent[player.actorId]; Coroutine coroutine = mSleepingOnPlayerEvent[player.actorId];
mSleepingOnPlayerEvent.Remove(player.actorId); mSleepingOnPlayerEvent.Remove(player.actorId);
DynValue value = coroutine.Resume(LuaUtils.CreateLuaParamObjectList(args)); DynValue value = coroutine.Resume(LuaUtils.CreateLuaParamObjectList(args));
ResolveResume(null, coroutine, value); ResolveResume(player, coroutine, value);
} }
catch (ScriptRuntimeException e) catch (ScriptRuntimeException e)
{ {
@ -384,9 +384,14 @@ namespace FFXIVClassic_Map_Server.lua
player.EndEvent(); player.EndEvent();
} }
} }
else
{
if (target is Director)
((Director)target).OnEventStart(player, LuaUtils.CreateLuaParamObjectList(lparams));
else else
CallLuaFunction(player, target, "onEventStarted", false, LuaUtils.CreateLuaParamObjectList(lparams)); CallLuaFunction(player, target, "onEventStarted", false, LuaUtils.CreateLuaParamObjectList(lparams));
} }
}
public DynValue ResolveResume(Player player, Coroutine coroutine, DynValue value) public DynValue ResolveResume(Player player, Coroutine coroutine, DynValue value)
{ {

View file

@ -144,7 +144,7 @@ function doLevequestInit(player, aetheryte)
player:PlayAnimation(getGLStartAnimationFromSheet(guildleveData.borderId, guildleveData.plateId, true)); player:PlayAnimation(getGLStartAnimationFromSheet(guildleveData.borderId, guildleveData.plateId, true));
director = player:GetZone():CreateGuildleveDirector(glId, difficulty, player); director = player:GetZone():CreateGuildleveDirector(glId, difficulty, player);
player:AddDirector(director); player:AddDirector(director);
director:StartDirector(true, glId) director:StartDirector(true, glId);
end end
else else

View file

@ -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); yshtola = contentArea:SpawnActor(2290001, "yshtola", -8, 16.35, 6, 0.5);
stahlmann = contentArea:SpawnActor(2290002, "stahlmann", 0, 16.35, 22, 3); 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); 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); mob3 = contentArea:SpawnActor(2205403, "mob3", -3.02-3, 17.35, 14.24, -2.81);
contentGroup:AddMember(starterPlayer); director:AddMember(starterPlayer);
contentGroup:AddMember(director); director:AddMember(director);
contentGroup:AddMember(yshtola); director:AddMember(yshtola);
contentGroup:AddMember(stahlmann); director:AddMember(stahlmann);
contentGroup:AddMember(mob1); director:AddMember(mob1);
contentGroup:AddMember(mob2); director:AddMember(mob2);
contentGroup:AddMember(mob3); director:AddMember(mob3);
director:StartContentGroup();
end end

View file

@ -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

View file

@ -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

View file

@ -59,27 +59,7 @@ function onEventStarted(player, actor, triggerName)
man0u0Quest:NextPhase(10); man0u0Quest:NextPhase(10);
player:EndEvent(); player:EndEvent();
end player:GetZone():ContentFinished();
GetWorldManager():DoZoneChange(player, 230, "PrivateAreaMasterPast", 1, 15, -826.868469, 6, 193.745865, -0.008368492);
function onUpdate()
end
function onTalkEvent(player, npc)
end 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

View file

@ -21,8 +21,9 @@ function onBeginLogin(player)
--For Opening. Set Director and reset position incase d/c --For Opening. Set Director and reset position incase d/c
if (player:HasQuest(110001) == true) then if (player:HasQuest(110001) == true) then
director = player:GetZone():CreateDirector("OpeningDirector"); director = player:GetZone():CreateDirector("OpeningDirector", false);
player:AddDirector(director); player:AddDirector(director);
director:StartDirector(true);
player:SetLoginDirector(director); player:SetLoginDirector(director);
player:KickEvent(director, "noticeEvent", true); player:KickEvent(director, "noticeEvent", true);
@ -33,10 +34,11 @@ function onBeginLogin(player)
player:GetQuest(110001):ClearQuestData(); player:GetQuest(110001):ClearQuestData();
player:GetQuest(110001):ClearQuestFlags(); player:GetQuest(110001):ClearQuestFlags();
elseif (player:HasQuest(110005) == true) then elseif (player:HasQuest(110005) == true) then
director = player:GetZone():CreateDirector("OpeningDirector"); director = player:GetZone():CreateDirector("OpeningDirector", false);
player:AddDirector(director); player:AddDirector(director);
director:StartDirector(false);
player:SetLoginDirector(director); player:SetLoginDirector(director);
player:KickEvent(director, "noticeEvent", "noticeEvent"); player:KickEvent(director, "noticeEvent", true);
player.positionX = 369.5434; player.positionX = 369.5434;
player.positionY = 4.21; player.positionY = 4.21;
@ -45,10 +47,11 @@ function onBeginLogin(player)
player:GetQuest(110005):ClearQuestData(); player:GetQuest(110005):ClearQuestData();
player:GetQuest(110005):ClearQuestFlags(); player:GetQuest(110005):ClearQuestFlags();
elseif (player:HasQuest(110009) == true) then elseif (player:HasQuest(110009) == true) then
director = player:GetZone():CreateDirector("OpeningDirector"); --director = player:GetZone():CreateDirector("OpeningDirector", false);
player:AddDirector(director); --player:AddDirector(director);
player:SetLoginDirector(director); --director:StartDirector(false);
player:KickEvent(director, "noticeEvent", "noticeEvent"); --player:SetLoginDirector(director);
--player:KickEvent(director, "noticeEvent", true);
player.positionX = 5.364327; player.positionX = 5.364327;
player.positionY = 196.0; player.positionY = 196.0;
@ -61,7 +64,6 @@ function onBeginLogin(player)
end end
function onLogin(player) function onLogin(player)
player:SendMessage(0x1D,"",">Callback \"onLogin\" for player script:Running.");
if (player:GetPlayTime(false) == 0) then if (player:GetPlayTime(false) == 0) then
player:SendMessage(0x1D,"",">PlayTime == 0, new player!"); player:SendMessage(0x1D,"",">PlayTime == 0, new player!");

View file

@ -6,7 +6,7 @@ function onEventStarted(player, npc, triggerName)
worldMaster = GetWorldMaster(); worldMaster = GetWorldMaster();
player:SendGameMessage(player, worldMaster, 34109, 0x20); player:SendGameMessage(player, worldMaster, 34109, 0x20);
elseif (triggerName == "exit") then elseif (triggerName == "exit") then
GetWorldManager():DoPlayerMoveInZone(player, 5); GetWorldManager():DoPlayerMoveInZone(player, 356.09, 3.74, -701.62, -1.4);
end end
player:EndEvent(); player:EndEvent();
end end

View file

@ -27,16 +27,21 @@ function onEventStarted(player, npc, triggerName)
player:EndEvent(); player:EndEvent();
worldMaster = GetWorldMaster(); contentArea = player:GetZone():CreateContentArea(player, "/Area/PrivateArea/Content/PrivateAreaMasterSimpleContent", "man0g01", "SimpleContent30010", "Quest/QuestDirectorMan0g001");
player:SendGameMessage(player, worldMaster, 34108, 0x20);
player:SendGameMessage(player, worldMaster, 50011, 0x20);
director = player:GetZone():CreateDirector("Quest/QuestDirectorMan0g001"); if (contentArea == nil) then
player:KickEvent(director, "noticeEvent", true); player:EndEvent();
return;
end
director = contentArea:GetContentDirector();
player:AddDirector(director); player:AddDirector(director);
director:StartDirector(false);
player:KickEvent(director, "noticeEvent", true);
player:SetLoginDirector(director); player:SetLoginDirector(director);
GetWorldManager():DoZoneChange(player, 166, "ContentSimpleContent30010", 1, 16, 362.4087, 4, -703.8168, 1.5419); GetWorldManager():DoZoneChangeContent(player, contentArea, 362.4087, 4, -703.8168, 1.5419, 16);
return; return;
else else
callClientFunction(player, "delegateEvent", player, man0g0Quest, "processEvent000_1", nil, nil, nil); callClientFunction(player, "delegateEvent", player, man0g0Quest, "processEvent000_1", nil, nil, nil);

View file

@ -35,9 +35,10 @@ function onEventStarted(player, npc, triggerName)
end end
director = contentArea:GetContentDirector(); director = contentArea:GetContentDirector();
player:AddDirector(director);
director:StartDirector(false);
player:KickEvent(director, "noticeEvent", true); player:KickEvent(director, "noticeEvent", true);
player:AddDirector(director);
player:SetLoginDirector(director); player:SetLoginDirector(director);
GetWorldManager():DoZoneChangeContent(player, contentArea, -5, 16.35, 6, 0.5, 16); GetWorldManager():DoZoneChangeContent(player, contentArea, -5, 16.35, 6, 0.5, 16);

View file

@ -7,7 +7,7 @@ function onEventStarted(player, npc, triggerName)
worldMaster = GetWorldMaster(); worldMaster = GetWorldMaster();
player:SendGameMessage(player, worldMaster, 34109, 0x20); player:SendGameMessage(player, worldMaster, 34109, 0x20);
elseif (triggerName == "exit") then elseif (triggerName == "exit") then
GetWorldManager():DoPlayerMoveInZone(player, 6); GetWorldManager():DoPlayerMoveInZone(player, 5.36433, 196, 133.656, -2.84938);
end end
player:EndEvent(); player:EndEvent();
end end

View file

@ -27,16 +27,21 @@ function onEventStarted(player, npc, triggerName)
player:EndEvent(); player:EndEvent();
worldMaster = GetWorldMaster(); contentArea = player:GetZone():CreateContentArea(player, "/Area/PrivateArea/Content/PrivateAreaMasterSimpleContent", "man0u01", "SimpleContent30079", "Quest/QuestDirectorMan0u001");
player:SendGameMessage(player, worldMaster, 34108, 0x20);
player:SendGameMessage(player, worldMaster, 50011, 0x20);
director = player:GetZone():CreateDirector("Quest/QuestDirectorMan0u001"); if (contentArea == nil) then
player:KickEvent(director, "noticeEvent", true); player:EndEvent();
return;
end
director = contentArea:GetContentDirector();
player:AddDirector(director); player:AddDirector(director);
director:StartDirector(false);
player:KickEvent(director, "noticeEvent", true);
player:SetLoginDirector(director); player:SetLoginDirector(director);
GetWorldManager():DoZoneChange(player, 184, nil, 0, 16, -24.34, 192, 34.22, 0.78); GetWorldManager():DoZoneChangeContent(player, contentArea, -24.34, 192, 34.22, 0.78, 16);
end end