mirror of
https://bitbucket.org/Ioncannon/project-meteor-server.git
synced 2025-08-05 17:18:07 +02:00
Implemented the ending portion of the guildleve.
This commit is contained in:
parent
cd0bb10ef6
commit
e5afe8791b
7 changed files with 88 additions and 0 deletions
|
@ -467,6 +467,11 @@ namespace FFXIVClassic_Map_Server.Actors
|
|||
RemoveActorFromZone(FindActorInZoneByUniqueID(uniqueId));
|
||||
}
|
||||
|
||||
public void DespawnActor(Actor actor)
|
||||
{
|
||||
RemoveActorFromZone(actor);
|
||||
}
|
||||
|
||||
public Director GetWeatherDirector()
|
||||
{
|
||||
return mWeatherDirector;
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -123,6 +123,7 @@ namespace FFXIVClassic_Map_Server.actors.director
|
|||
public void EndDirector()
|
||||
{
|
||||
isDeleting = true;
|
||||
|
||||
if (this is GuildleveDirector)
|
||||
((GuildleveDirector)this).EndGuildleveDirector();
|
||||
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue