Implemented the ending portion of the guildleve.

This commit is contained in:
Filip Maj 2017-06-25 22:43:15 -04:00
parent cd0bb10ef6
commit e5afe8791b
7 changed files with 88 additions and 0 deletions

View file

@ -467,6 +467,11 @@ namespace FFXIVClassic_Map_Server.Actors
RemoveActorFromZone(FindActorInZoneByUniqueID(uniqueId));
}
public void DespawnActor(Actor actor)
{
RemoveActorFromZone(actor);
}
public Director GetWeatherDirector()
{
return mWeatherDirector;

View file

@ -396,6 +396,11 @@ namespace FFXIVClassic_Map_Server.Actors
player.QueuePacket(PlayBGAnimation.BuildPacket(actorId, player.actorId, animationName));
}
public void Despawn()
{
zone.DespawnActor(this);
}
public void Update(double deltaTime)
{
LuaEngine.GetInstance().CallLuaFunction(null, this, "onUpdate", true, deltaTime);

View file

@ -123,6 +123,7 @@ namespace FFXIVClassic_Map_Server.actors.director
public void EndDirector()
{
isDeleting = true;
if (this is GuildleveDirector)
((GuildleveDirector)this).EndGuildleveDirector();

View file

@ -23,6 +23,8 @@ namespace FFXIVClassic_Map_Server.actors.director
public GuildleveData guildleveData;
public GuildleveWork guildleveWork = new GuildleveWork();
public bool isEnded = false;
public GuildleveDirector(uint id, Area zone, string directorPath, uint guildleveId, byte selectedDifficulty, Player guildleveOwner, params object[] args)
: base(id, zone, directorPath, args)
{
@ -83,9 +85,27 @@ namespace FFXIVClassic_Map_Server.actors.director
public void EndGuildleve(bool wasCompleted)
{
if (isEnded)
return;
isEnded = true;
if (wasCompleted)
{
foreach (Actor a in GetPlayerMembers())
{
Player player = (Player)a;
player.PlayAnimation(0x02000002);
player.ChangeMusic(81);
player.SendGameMessage(Server.GetWorldManager().GetActor(), 50023, 0x20, (object)(int)guildleveId);
player.SendDataPacket("attention", Server.GetWorldManager().GetActor(), "", 50023, (object)(int)guildleveId);
}
}
foreach (Actor a in GetNpcMembers())
{
Npc npc = (Npc)a;
npc.Despawn();
RemoveMember(a);
}
guildleveWork.startTime = 0;
@ -96,6 +116,11 @@ namespace FFXIVClassic_Map_Server.actors.director
propertyBuilder.AddProperty("guildleveWork.startTime");
SendPacketsToPlayers(propertyBuilder.Done());
if (wasCompleted)
{
Npc aetheryteNode = zone.SpawnActor(1200040, String.Format("{0}:warpExit", guildleveOwner.actorName), guildleveOwner.positionX, guildleveOwner.positionY, guildleveOwner.positionZ);
contentGroup.AddMember(aetheryteNode);
}
}
public void AbandonGuildleve()

View file

@ -134,7 +134,11 @@ namespace FFXIVClassic_Map_Server.actors.group
Session s = Server.GetServer().GetSession(members[i]);
if (s != null)
s.GetActor().SetCurrentContentGroup(null);
Actor a = director.GetZone().FindActorInArea(members[i]);
if (a is Npc)
((Npc)a).Despawn();
members.Remove(members[i]);
i--;
}
Server.GetWorldManager().DeleteContentGroup(groupIndex);
}