Rewrote directors so that they can work in the new system. Began adding content groups to the map server.

This commit is contained in:
Filip Maj
2017-01-29 11:07:28 -05:00
parent ad88c0b28a
commit f7482781e5
26 changed files with 638 additions and 359 deletions

View File

@@ -121,9 +121,10 @@ namespace FFXIVClassic_Map_Server.Actors
//Quest Actors (MUST MATCH playerWork.questScenario/questGuildleve)
public Quest[] questScenario = new Quest[16];
public Quest[] questGuildleve = new Quest[8];
public Director currentDirector;
public Quest[] questGuildleve = new Quest[8];
private List<Director> ownedDirectors = new List<Director>();
private Director loginInitDirector = null;
public PlayerWork playerWork = new PlayerWork();
@@ -253,8 +254,8 @@ namespace FFXIVClassic_Map_Server.Actors
List<LuaParam> lParams;
if (IsMyPlayer(playerActorId))
{
if (currentDirector != null)
lParams = LuaUtils.CreateLuaParamList("/Chara/Player/Player_work", false, false, true, currentDirector, true, 0, false, timers, true);
if (loginInitDirector != null)
lParams = LuaUtils.CreateLuaParamList("/Chara/Player/Player_work", false, false, true, loginInitDirector, true, 0, false, timers, true);
else
lParams = LuaUtils.CreateLuaParamList("/Chara/Player/Player_work", false, false, false, true, 0, false, timers, true);
}
@@ -500,26 +501,12 @@ 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);
BasePacket weatherDirectorSpawn = new WeatherDirector(this, 8003).GetSpawnPackets(actorId);
BasePacket directorSpawn = null;
BasePacket worldMasterSpawn = world.GetActor().GetSpawnPackets(actorId);
if (currentDirector != null)
directorSpawn = currentDirector.GetSpawnPackets(actorId);
playerSession.QueuePacket(areaMasterSpawn);
playerSession.QueuePacket(debugSpawn);
if (directorSpawn != null)
{
//directorSpawn.DebugPrintPacket();
// currentDirector.GetInitPackets(actorId).DebugPrintPacket();
QueuePacket(directorSpawn);
QueuePacket(currentDirector.GetInitPackets(actorId));
//QueuePacket(currentDirector.GetSetEventStatusPackets(actorId));
}
playerSession.QueuePacket(debugSpawn);
playerSession.QueuePacket(worldMasterSpawn);
if (zone.isInn)
@@ -532,20 +519,22 @@ namespace FFXIVClassic_Map_Server.Actors
packet.DebugPrintSubPacket();
QueuePacket(packet);
}
}
if (zone.GetWeatherDirector() != null)
{
BasePacket weatherDirectorSpawn = zone.GetWeatherDirector().GetSpawnPackets(actorId);
playerSession.QueuePacket(weatherDirectorSpawn);
}
foreach (Director director in ownedDirectors)
{
director.GetSpawnPackets(actorId).DebugPrintPacket();
QueuePacket(director.GetSpawnPackets(actorId));
QueuePacket(director.GetInitPackets(actorId));
//QueuePacket(director.GetSetEventStatusPackets(actorId));
}
playerSession.QueuePacket(weatherDirectorSpawn);
/*
#region hardcode
BasePacket reply10 = new BasePacket("./packets/login/login10.bin"); //Item Storage, Inn Door Created
BasePacket reply11 = new BasePacket("./packets/login/login11.bin"); //NPC Create ??? Final init
reply10.ReplaceActorID(actorId);
reply11.ReplaceActorID(actorId);
//playerSession.QueuePacket(reply10);
// playerSession.QueuePacket(reply11);
#endregion
*/
}
private void SendRemoveInventoryPackets(List<ushort> slots)
@@ -714,6 +703,11 @@ namespace FFXIVClassic_Map_Server.Actors
return playTime;
}
public void SavePlayTime()
{
Database.SavePlayerPlayTime(this);
}
public void ChangeMusic(ushort musicId)
{
QueuePacket(SetMusicPacket.BuildPacket(actorId, musicId, 1));
@@ -1096,40 +1090,56 @@ namespace FFXIVClassic_Map_Server.Actors
return -1;
}
public void SetDirector(string directorType, bool sendPackets)
{
if (directorType.Equals("openingDirector"))
{
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();
}
public void SetLoginDirector(Director director)
{
if (ownedDirectors.Contains(director))
loginInitDirector = director;
}
public Director GetDirector()
public void AddDirector(Director director)
{
if (!ownedDirectors.Contains(director))
{
ownedDirectors.Add(director);
director.AddChild(this);
//director.GetSpawnPackets(actorId).DebugPrintPacket();
//QueuePacket(director.GetSpawnPackets(actorId));
//QueuePacket(director.GetInitPackets(actorId));
//QueuePacket(director.GetSetEventStatusPackets(actorId));
}
}
public void RemoveDirector(Director director)
{
if (!ownedDirectors.Contains(director))
{
ownedDirectors.Remove(director);
director.RemoveChild(this);
}
}
public Director GetDirector(string directorName)
{
return currentDirector;
foreach (Director d in ownedDirectors)
{
if (d.className.Equals(directorName))
return d;
}
return null;
}
public Director GetDirector(uint id)
{
foreach (Director d in ownedDirectors)
{
if (d.actorId == id)
return d;
}
return null;
}
public void ExaminePlayer(Actor examinee)
@@ -1185,6 +1195,27 @@ namespace FFXIVClassic_Map_Server.Actors
EndEvent();
}
}
else if (owner is Director)
{
currentEventRunning = ((Director)owner).GetEventStartCoroutine(this);
if (currentEventRunning != null)
{
try
{
currentEventRunning.Resume(objects.ToArray());
}
catch (ScriptRuntimeException e)
{
Program.Log.Error("[LUA] {0}", e.DecoratedMessage);
EndEvent();
}
}
else
{
EndEvent();
}
}
else
{
currentEventRunning = LuaEngine.DoActorOnEventStarted(this, owner, start);