mirror of
https://bitbucket.org/Ioncannon/project-meteor-server.git
synced 2025-04-23 13:17:45 +00:00
Implemented more of the Guildleve Director. Correct script is now autoloaded based on leveplate. Players are now added to the contentgroup on leve start. Moved animation and stuff to C# side of things. Cleaned up code.
This commit is contained in:
parent
c42f1a08de
commit
875b76634a
9 changed files with 292 additions and 55 deletions
|
@ -90,6 +90,7 @@
|
||||||
<Compile Include="actors\director\GuildleveDirector.cs" />
|
<Compile Include="actors\director\GuildleveDirector.cs" />
|
||||||
<Compile Include="actors\director\Work\GuildleveWork.cs" />
|
<Compile Include="actors\director\Work\GuildleveWork.cs" />
|
||||||
<Compile Include="actors\EventList.cs" />
|
<Compile Include="actors\EventList.cs" />
|
||||||
|
<Compile Include="actors\group\GLContentGroup.cs" />
|
||||||
<Compile Include="actors\group\ContentGroup.cs" />
|
<Compile Include="actors\group\ContentGroup.cs" />
|
||||||
<Compile Include="actors\group\Work\ContentGroupWork.cs" />
|
<Compile Include="actors\group\Work\ContentGroupWork.cs" />
|
||||||
<Compile Include="actors\group\Work\GlobalTemp.cs" />
|
<Compile Include="actors\group\Work\GlobalTemp.cs" />
|
||||||
|
|
|
@ -600,7 +600,7 @@ namespace FFXIVClassic_Map_Server
|
||||||
if (player.currentContentGroup != null)
|
if (player.currentContentGroup != null)
|
||||||
{
|
{
|
||||||
player.currentContentGroup.RemoveMember(player.actorId);
|
player.currentContentGroup.RemoveMember(player.actorId);
|
||||||
player.SetCurrentContentGroup(null, player);
|
player.SetCurrentContentGroup(null);
|
||||||
|
|
||||||
if (oldZone is PrivateAreaContent)
|
if (oldZone is PrivateAreaContent)
|
||||||
((PrivateAreaContent)oldZone).CheckDestroy();
|
((PrivateAreaContent)oldZone).CheckDestroy();
|
||||||
|
@ -762,11 +762,6 @@ namespace FFXIVClassic_Map_Server
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public ContentGroup CreateContentGroup(Director director)
|
|
||||||
{
|
|
||||||
return CreateContentGroup(director, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
public ContentGroup CreateContentGroup(Director director, params Actor[] actors)
|
public ContentGroup CreateContentGroup(Director director, params Actor[] actors)
|
||||||
{
|
{
|
||||||
if (director == null)
|
if (director == null)
|
||||||
|
@ -795,6 +790,62 @@ namespace FFXIVClassic_Map_Server
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ContentGroup CreateContentGroup(Director director, List<Actor> actors)
|
||||||
|
{
|
||||||
|
if (director == null)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
lock (groupLock)
|
||||||
|
{
|
||||||
|
uint[] initialMembers = null;
|
||||||
|
|
||||||
|
if (actors != null)
|
||||||
|
{
|
||||||
|
initialMembers = new uint[actors.Count];
|
||||||
|
for (int i = 0; i < actors.Count; i++)
|
||||||
|
initialMembers[i] = actors[i].actorId;
|
||||||
|
}
|
||||||
|
|
||||||
|
groupIndexId = groupIndexId | 0x3000000000000000;
|
||||||
|
|
||||||
|
ContentGroup contentGroup = new ContentGroup(groupIndexId, director, initialMembers);
|
||||||
|
mContentGroups.Add(groupIndexId, contentGroup);
|
||||||
|
groupIndexId++;
|
||||||
|
if (initialMembers != null && initialMembers.Length != 0)
|
||||||
|
contentGroup.SendAll();
|
||||||
|
|
||||||
|
return contentGroup;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public ContentGroup CreateGLContentGroup(Director director, List<Actor> actors)
|
||||||
|
{
|
||||||
|
if (director == null)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
lock (groupLock)
|
||||||
|
{
|
||||||
|
uint[] initialMembers = null;
|
||||||
|
|
||||||
|
if (actors != null)
|
||||||
|
{
|
||||||
|
initialMembers = new uint[actors.Count];
|
||||||
|
for (int i = 0; i < actors.Count; i++)
|
||||||
|
initialMembers[i] = actors[i].actorId;
|
||||||
|
}
|
||||||
|
|
||||||
|
groupIndexId = groupIndexId | 0x2000000000000000;
|
||||||
|
|
||||||
|
GLContentGroup contentGroup = new GLContentGroup(groupIndexId, director, initialMembers);
|
||||||
|
mContentGroups.Add(groupIndexId, contentGroup);
|
||||||
|
groupIndexId++;
|
||||||
|
if (initialMembers != null && initialMembers.Length != 0)
|
||||||
|
contentGroup.SendAll();
|
||||||
|
|
||||||
|
return contentGroup;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void DeleteContentGroup(ulong groupId)
|
public void DeleteContentGroup(ulong groupId)
|
||||||
{
|
{
|
||||||
lock (groupLock)
|
lock (groupLock)
|
||||||
|
@ -802,7 +853,6 @@ namespace FFXIVClassic_Map_Server
|
||||||
if (mContentGroups.ContainsKey(groupId) && mContentGroups[groupId] is ContentGroup)
|
if (mContentGroups.ContainsKey(groupId) && mContentGroups[groupId] is ContentGroup)
|
||||||
{
|
{
|
||||||
ContentGroup group = (ContentGroup)mContentGroups[groupId];
|
ContentGroup group = (ContentGroup)mContentGroups[groupId];
|
||||||
group.SendDeletePackets();
|
|
||||||
mContentGroups.Remove(groupId);
|
mContentGroups.Remove(groupId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -368,6 +368,12 @@ namespace FFXIVClassic_Map_Server.Actors
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void BroadcastPacketsAroundActor(Actor actor, List<SubPacket> packets)
|
||||||
|
{
|
||||||
|
foreach (SubPacket packet in packets)
|
||||||
|
BroadcastPacketAroundActor(actor, packet);
|
||||||
|
}
|
||||||
|
|
||||||
public void BroadcastPacketAroundActor(Actor actor, SubPacket packet)
|
public void BroadcastPacketAroundActor(Actor actor, SubPacket packet)
|
||||||
{
|
{
|
||||||
if (isIsolated)
|
if (isIsolated)
|
||||||
|
@ -501,11 +507,48 @@ namespace FFXIVClassic_Map_Server.Actors
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public Director CreateGuildleveDirector(string path, uint glid, params object[] args)
|
public Director CreateGuildleveDirector(uint glid, byte difficulty, Player owner, params object[] args)
|
||||||
{
|
{
|
||||||
|
String directorScriptPath = "";
|
||||||
|
|
||||||
|
uint type = Server.GetGuildleveGamedata(glid).plateId;
|
||||||
|
|
||||||
|
if (glid == 10801 || glid == 12401 || glid == 11601)
|
||||||
|
directorScriptPath = "Guildleve/PrivateGLBattleTutorial";
|
||||||
|
else
|
||||||
|
{
|
||||||
|
switch (type)
|
||||||
|
{
|
||||||
|
case 20021:
|
||||||
|
directorScriptPath = "Guildleve/PrivateGLBattleSweepNormal";
|
||||||
|
break;
|
||||||
|
case 20022:
|
||||||
|
directorScriptPath = "Guildleve/PrivateGLBattleChaseNormal";
|
||||||
|
break;
|
||||||
|
case 20023:
|
||||||
|
directorScriptPath = "Guildleve/PrivateGLBattleOrbNormal";
|
||||||
|
break;
|
||||||
|
case 20024:
|
||||||
|
directorScriptPath = "Guildleve/PrivateGLBattleHuntNormal";
|
||||||
|
break;
|
||||||
|
case 20025:
|
||||||
|
directorScriptPath = "Guildleve/PrivateGLBattleGatherNormal";
|
||||||
|
break;
|
||||||
|
case 20026:
|
||||||
|
directorScriptPath = "Guildleve/PrivateGLBattleRoundNormal";
|
||||||
|
break;
|
||||||
|
case 20027:
|
||||||
|
directorScriptPath = "Guildleve/PrivateGLBattleSurviveNormal";
|
||||||
|
break;
|
||||||
|
case 20028:
|
||||||
|
directorScriptPath = "Guildleve/PrivateGLBattleDetectNormal";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
lock (directorLock)
|
lock (directorLock)
|
||||||
{
|
{
|
||||||
GuildleveDirector director = new GuildleveDirector(directorIdCount, this, path, glid, args);
|
GuildleveDirector director = new GuildleveDirector(directorIdCount, this, directorScriptPath, glid, difficulty, owner, args);
|
||||||
currentDirectors.Add(directorIdCount, director);
|
currentDirectors.Add(directorIdCount, director);
|
||||||
directorIdCount++;
|
directorIdCount++;
|
||||||
return director;
|
return director;
|
||||||
|
@ -518,7 +561,8 @@ namespace FFXIVClassic_Map_Server.Actors
|
||||||
{
|
{
|
||||||
if (currentDirectors.ContainsKey(id))
|
if (currentDirectors.ContainsKey(id))
|
||||||
{
|
{
|
||||||
currentDirectors[id].RemoveMembers();
|
if (!currentDirectors[id].IsDeleted())
|
||||||
|
currentDirectors[id].EndDirector();
|
||||||
currentDirectors.Remove(id);
|
currentDirectors.Remove(id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -89,7 +89,7 @@ namespace FFXIVClassic_Map_Server.Actors
|
||||||
player.QueuePacket(SetActorQuestGraphicPacket.BuildPacket(player.actorId, actorId, graphicNum));
|
player.QueuePacket(SetActorQuestGraphicPacket.BuildPacket(player.actorId, actorId, graphicNum));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SetCurrentContentGroup(ContentGroup group, Player player = null)
|
public void SetCurrentContentGroup(ContentGroup group)
|
||||||
{
|
{
|
||||||
if (group != null)
|
if (group != null)
|
||||||
charaWork.currentContentGroup = group.GetTypeId();
|
charaWork.currentContentGroup = group.GetTypeId();
|
||||||
|
@ -98,12 +98,10 @@ namespace FFXIVClassic_Map_Server.Actors
|
||||||
|
|
||||||
currentContentGroup = group;
|
currentContentGroup = group;
|
||||||
|
|
||||||
if (player != null)
|
ActorPropertyPacketUtil propPacketUtil = new ActorPropertyPacketUtil("charaWork/currentContentGroup", this, actorId);
|
||||||
{
|
propPacketUtil.AddProperty("charaWork.currentContentGroup");
|
||||||
ActorPropertyPacketUtil propPacketUtil = new ActorPropertyPacketUtil("charaWork/currentContentGroup", this, actorId);
|
zone.BroadcastPacketsAroundActor(this, propPacketUtil.Done());
|
||||||
propPacketUtil.AddProperty("charaWork.currentContentGroup");
|
|
||||||
player.QueuePackets(propPacketUtil.Done());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void PlayAnimation(uint animId)
|
public void PlayAnimation(uint animId)
|
||||||
|
|
|
@ -795,7 +795,7 @@ namespace FFXIVClassic_Map_Server.Actors
|
||||||
QueuePacket(GameMessagePacket.BuildPacket(Server.GetWorldManager().GetActor().actorId, actorId, textIdOwner.actorId, textId, log, LuaUtils.CreateLuaParamList(msgParams)));
|
QueuePacket(GameMessagePacket.BuildPacket(Server.GetWorldManager().GetActor().actorId, actorId, textIdOwner.actorId, textId, log, LuaUtils.CreateLuaParamList(msgParams)));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SendGameMessage(Actor textIdOwner, ushort textId, byte log, string customSender, params object[] msgParams)
|
public void SendGameMessageCustomSender(Actor textIdOwner, ushort textId, byte log, string customSender, params object[] msgParams)
|
||||||
{
|
{
|
||||||
if (msgParams == null || msgParams.Length == 0)
|
if (msgParams == null || msgParams.Length == 0)
|
||||||
QueuePacket(GameMessagePacket.BuildPacket(Server.GetWorldManager().GetActor().actorId, actorId, textIdOwner.actorId, textId, customSender, log));
|
QueuePacket(GameMessagePacket.BuildPacket(Server.GetWorldManager().GetActor().actorId, actorId, textIdOwner.actorId, textId, customSender, log));
|
||||||
|
@ -803,7 +803,7 @@ namespace FFXIVClassic_Map_Server.Actors
|
||||||
QueuePacket(GameMessagePacket.BuildPacket(Server.GetWorldManager().GetActor().actorId, actorId, textIdOwner.actorId, textId, customSender, log, LuaUtils.CreateLuaParamList(msgParams)));
|
QueuePacket(GameMessagePacket.BuildPacket(Server.GetWorldManager().GetActor().actorId, actorId, textIdOwner.actorId, textId, customSender, log, LuaUtils.CreateLuaParamList(msgParams)));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SendGameMessage(Actor textIdOwner, ushort textId, byte log, uint displayId, params object[] msgParams)
|
public void SendGameMessageDisplayIDSender(Actor textIdOwner, ushort textId, byte log, uint displayId, params object[] msgParams)
|
||||||
{
|
{
|
||||||
if (msgParams == null || msgParams.Length == 0)
|
if (msgParams == null || msgParams.Length == 0)
|
||||||
QueuePacket(GameMessagePacket.BuildPacket(Server.GetWorldManager().GetActor().actorId, actorId, textIdOwner.actorId, textId, displayId, log));
|
QueuePacket(GameMessagePacket.BuildPacket(Server.GetWorldManager().GetActor().actorId, actorId, textIdOwner.actorId, textId, displayId, log));
|
||||||
|
@ -1433,13 +1433,25 @@ namespace FFXIVClassic_Map_Server.Actors
|
||||||
|
|
||||||
public void RemoveDirector(Director director)
|
public void RemoveDirector(Director director)
|
||||||
{
|
{
|
||||||
if (!ownedDirectors.Contains(director))
|
if (ownedDirectors.Contains(director))
|
||||||
{
|
{
|
||||||
|
QueuePacket(RemoveActorPacket.BuildPacket(actorId, director.actorId));
|
||||||
ownedDirectors.Remove(director);
|
ownedDirectors.Remove(director);
|
||||||
director.RemoveMember(this);
|
director.RemoveMember(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Director GetGuildleveDirector()
|
||||||
|
{
|
||||||
|
foreach (Director d in ownedDirectors)
|
||||||
|
{
|
||||||
|
if (d is GuildleveDirector)
|
||||||
|
return d;
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
public Director GetDirector(string directorName)
|
public Director GetDirector(string directorName)
|
||||||
{
|
{
|
||||||
foreach (Director d in ownedDirectors)
|
foreach (Director d in ownedDirectors)
|
||||||
|
|
|
@ -17,6 +17,7 @@ namespace FFXIVClassic_Map_Server.actors.director
|
||||||
private string directorScriptPath;
|
private string directorScriptPath;
|
||||||
private List<Actor> members = new List<Actor>();
|
private List<Actor> members = new List<Actor>();
|
||||||
private bool isCreated = false;
|
private bool isCreated = false;
|
||||||
|
private bool isDeleted = false;
|
||||||
|
|
||||||
private Script directorScript;
|
private Script directorScript;
|
||||||
private Coroutine currentCoroutine;
|
private Coroutine currentCoroutine;
|
||||||
|
@ -26,6 +27,7 @@ namespace FFXIVClassic_Map_Server.actors.director
|
||||||
{
|
{
|
||||||
directorId = id;
|
directorId = id;
|
||||||
this.zone = zone;
|
this.zone = zone;
|
||||||
|
this.zoneId = zone.actorId;
|
||||||
directorScriptPath = directorPath;
|
directorScriptPath = directorPath;
|
||||||
|
|
||||||
LoadLuaScript();
|
LoadLuaScript();
|
||||||
|
@ -111,8 +113,23 @@ namespace FFXIVClassic_Map_Server.actors.director
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (this is GuildleveDirector)
|
||||||
|
((GuildleveDirector)this).LoadGuildleve();
|
||||||
|
|
||||||
StartCoroutine("mainLoop", this);
|
StartCoroutine("main", this);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void EndDirector()
|
||||||
|
{
|
||||||
|
if (this is GuildleveDirector)
|
||||||
|
((GuildleveDirector)this).EndGuildleveDirector();
|
||||||
|
|
||||||
|
List<Actor> players = GetPlayerMembers();
|
||||||
|
foreach (Actor player in players)
|
||||||
|
((Player)player).RemoveDirector(this);
|
||||||
|
members.Clear();
|
||||||
|
isDeleted = true;
|
||||||
|
Server.GetWorldManager().GetZone(zoneId).DeleteDirector(actorId);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void AddMember(Actor actor)
|
public void AddMember(Actor actor)
|
||||||
|
@ -125,14 +142,6 @@ namespace FFXIVClassic_Map_Server.actors.director
|
||||||
{
|
{
|
||||||
if (members.Contains(actor))
|
if (members.Contains(actor))
|
||||||
members.Remove(actor);
|
members.Remove(actor);
|
||||||
if (members.Count == 0)
|
|
||||||
Server.GetWorldManager().GetZone(zoneId).DeleteDirector(actorId);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void RemoveMembers()
|
|
||||||
{
|
|
||||||
members.Clear();
|
|
||||||
Server.GetWorldManager().GetZone(zoneId).DeleteDirector(actorId);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<Actor> GetMembers()
|
public List<Actor> GetMembers()
|
||||||
|
@ -155,6 +164,11 @@ namespace FFXIVClassic_Map_Server.actors.director
|
||||||
return isCreated;
|
return isCreated;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool IsDeleted()
|
||||||
|
{
|
||||||
|
return isDeleted;
|
||||||
|
}
|
||||||
|
|
||||||
public void GenerateActorName(int actorNumber)
|
public void GenerateActorName(int actorNumber)
|
||||||
{
|
{
|
||||||
//Format Class Name
|
//Format Class Name
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
using FFXIVClassic.Common;
|
using FFXIVClassic.Common;
|
||||||
|
using FFXIVClassic_Map_Server.actors.area;
|
||||||
using FFXIVClassic_Map_Server.actors.director.Work;
|
using FFXIVClassic_Map_Server.actors.director.Work;
|
||||||
|
using FFXIVClassic_Map_Server.actors.group;
|
||||||
using FFXIVClassic_Map_Server.Actors;
|
using FFXIVClassic_Map_Server.Actors;
|
||||||
using FFXIVClassic_Map_Server.dataobjects;
|
using FFXIVClassic_Map_Server.dataobjects;
|
||||||
using FFXIVClassic_Map_Server.utils;
|
using FFXIVClassic_Map_Server.utils;
|
||||||
|
@ -14,14 +16,20 @@ namespace FFXIVClassic_Map_Server.actors.director
|
||||||
class GuildleveDirector : Director
|
class GuildleveDirector : Director
|
||||||
{
|
{
|
||||||
public uint guildleveId;
|
public uint guildleveId;
|
||||||
|
public Player guildleveOwner;
|
||||||
|
public byte selectedDifficulty;
|
||||||
|
public ContentGroup contentGroup;
|
||||||
|
|
||||||
public GuildleveData guildleveData;
|
public GuildleveData guildleveData;
|
||||||
public GuildleveWork guildleveWork = new GuildleveWork();
|
public GuildleveWork guildleveWork = new GuildleveWork();
|
||||||
|
|
||||||
public GuildleveDirector(uint id, Area zone, string directorPath, uint guildleveId, 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, args)
|
||||||
{
|
{
|
||||||
this.guildleveId = guildleveId;
|
this.guildleveId = guildleveId;
|
||||||
|
this.selectedDifficulty = selectedDifficulty;
|
||||||
this.guildleveData = Server.GetGuildleveGamedata(guildleveId);
|
this.guildleveData = Server.GetGuildleveGamedata(guildleveId);
|
||||||
|
this.guildleveOwner = guildleveOwner;
|
||||||
|
|
||||||
guildleveWork.aimNum[0] = guildleveData.aimNum[0];
|
guildleveWork.aimNum[0] = guildleveData.aimNum[0];
|
||||||
guildleveWork.aimNum[1] = guildleveData.aimNum[1];
|
guildleveWork.aimNum[1] = guildleveData.aimNum[1];
|
||||||
|
@ -38,18 +46,50 @@ namespace FFXIVClassic_Map_Server.actors.director
|
||||||
guildleveWork.uiState[3] = 1;
|
guildleveWork.uiState[3] = 1;
|
||||||
|
|
||||||
guildleveWork.aimNumNow[0] = guildleveWork.aimNumNow[1] = guildleveWork.aimNumNow[2] = guildleveWork.aimNumNow[3] = 0;
|
guildleveWork.aimNumNow[0] = guildleveWork.aimNumNow[1] = guildleveWork.aimNumNow[2] = guildleveWork.aimNumNow[3] = 0;
|
||||||
|
|
||||||
|
LoadGuildleve();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void LoadGuildleve()
|
||||||
|
{
|
||||||
|
contentGroup = Server.GetWorldManager().CreateGLContentGroup(this, GetMembers());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void StartGuildleve()
|
public void StartGuildleve()
|
||||||
{
|
{
|
||||||
|
foreach (Actor p in GetPlayerMembers())
|
||||||
|
{
|
||||||
|
Player player = (Player) p;
|
||||||
|
|
||||||
|
//Set music
|
||||||
|
if (guildleveData.location == 1)
|
||||||
|
player.ChangeMusic(22);
|
||||||
|
else if (guildleveData.location == 2)
|
||||||
|
player.ChangeMusic(14);
|
||||||
|
else if (guildleveData.location == 3)
|
||||||
|
player.ChangeMusic(26);
|
||||||
|
else if (guildleveData.location == 4)
|
||||||
|
player.ChangeMusic(16);
|
||||||
|
|
||||||
|
//Show Start Messages
|
||||||
|
player.SendGameMessage(Server.GetWorldManager().GetActor(), 50022, 0x20, guildleveId, selectedDifficulty);
|
||||||
|
player.SendDataPacket("attention", Server.GetWorldManager().GetActor(), "", 50022, guildleveId, selectedDifficulty);
|
||||||
|
player.SendGameMessage(Server.GetWorldManager().GetActor(), 50026, 0x20, (object)(int)guildleveData.timeLimit);
|
||||||
|
}
|
||||||
|
|
||||||
guildleveWork.startTime = Utils.UnixTimeStampUTC();
|
guildleveWork.startTime = Utils.UnixTimeStampUTC();
|
||||||
ActorPropertyPacketUtil propertyBuilder = new ActorPropertyPacketUtil("guildleveWork/start", this, actorId);
|
ActorPropertyPacketUtil propertyBuilder = new ActorPropertyPacketUtil("guildleveWork/start", this, actorId);
|
||||||
propertyBuilder.AddProperty("guildleveWork.startTime");
|
propertyBuilder.AddProperty("guildleveWork.startTime");
|
||||||
SendPacketsToPlayers(propertyBuilder.Done());
|
SendPacketsToPlayers(propertyBuilder.Done());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void EndGuildleve()
|
public void EndGuildleve(bool wasCompleted)
|
||||||
{
|
{
|
||||||
|
if (wasCompleted)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
guildleveWork.startTime = 0;
|
guildleveWork.startTime = 0;
|
||||||
guildleveWork.signal = -1;
|
guildleveWork.signal = -1;
|
||||||
ActorPropertyPacketUtil propertyBuilder = new ActorPropertyPacketUtil("guildleveWork/signal", this, actorId);
|
ActorPropertyPacketUtil propertyBuilder = new ActorPropertyPacketUtil("guildleveWork/signal", this, actorId);
|
||||||
|
@ -57,6 +97,30 @@ namespace FFXIVClassic_Map_Server.actors.director
|
||||||
propertyBuilder.NewTarget("guildleveWork/start");
|
propertyBuilder.NewTarget("guildleveWork/start");
|
||||||
propertyBuilder.AddProperty("guildleveWork.startTime");
|
propertyBuilder.AddProperty("guildleveWork.startTime");
|
||||||
SendPacketsToPlayers(propertyBuilder.Done());
|
SendPacketsToPlayers(propertyBuilder.Done());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void AbandonGuildleve()
|
||||||
|
{
|
||||||
|
foreach (Actor p in GetPlayerMembers())
|
||||||
|
{
|
||||||
|
Player player = (Player)p;
|
||||||
|
player.SendGameMessage(Server.GetWorldManager().GetActor(), 50147, 0x20, (object)guildleveId);
|
||||||
|
}
|
||||||
|
|
||||||
|
EndGuildleve(false);
|
||||||
|
EndDirector();
|
||||||
|
}
|
||||||
|
|
||||||
|
//Delete ContentGroup, change music back
|
||||||
|
public void EndGuildleveDirector()
|
||||||
|
{
|
||||||
|
contentGroup.DeleteGroup();
|
||||||
|
foreach (Actor p in GetPlayerMembers())
|
||||||
|
{
|
||||||
|
Player player = (Player)p;
|
||||||
|
player.ChangeMusic(player.GetZone().bgmDay);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SyncAllInfo()
|
public void SyncAllInfo()
|
||||||
|
@ -95,6 +159,7 @@ namespace FFXIVClassic_Map_Server.actors.director
|
||||||
|
|
||||||
public void UpdateAimNumNow(int index, sbyte value)
|
public void UpdateAimNumNow(int index, sbyte value)
|
||||||
{
|
{
|
||||||
|
guildleveWork.aimNumNow[index] = value;
|
||||||
ActorPropertyPacketUtil propertyBuilder = new ActorPropertyPacketUtil("guildleveWork/infoVariable", this, actorId);
|
ActorPropertyPacketUtil propertyBuilder = new ActorPropertyPacketUtil("guildleveWork/infoVariable", this, actorId);
|
||||||
propertyBuilder.AddProperty(String.Format("guildleveWork.aimNumNow[{0}]", index));
|
propertyBuilder.AddProperty(String.Format("guildleveWork.aimNumNow[{0}]", index));
|
||||||
SendPacketsToPlayers(propertyBuilder.Done());
|
SendPacketsToPlayers(propertyBuilder.Done());
|
||||||
|
@ -102,6 +167,7 @@ namespace FFXIVClassic_Map_Server.actors.director
|
||||||
|
|
||||||
public void UpdateUiState(int index, sbyte value)
|
public void UpdateUiState(int index, sbyte value)
|
||||||
{
|
{
|
||||||
|
guildleveWork.uiState[index] = value;
|
||||||
ActorPropertyPacketUtil propertyBuilder = new ActorPropertyPacketUtil("guildleveWork/infoVariable", this, actorId);
|
ActorPropertyPacketUtil propertyBuilder = new ActorPropertyPacketUtil("guildleveWork/infoVariable", this, actorId);
|
||||||
propertyBuilder.AddProperty(String.Format("guildleveWork.uiState[{0}]", index));
|
propertyBuilder.AddProperty(String.Format("guildleveWork.uiState[{0}]", index));
|
||||||
SendPacketsToPlayers(propertyBuilder.Done());
|
SendPacketsToPlayers(propertyBuilder.Done());
|
||||||
|
@ -128,5 +194,30 @@ namespace FFXIVClassic_Map_Server.actors.director
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static uint GlBorderIconIDToAnimID(uint iconId)
|
||||||
|
{
|
||||||
|
return iconId - 20000;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static uint GlPlateIconIDToAnimID(uint iconId)
|
||||||
|
{
|
||||||
|
return iconId - 20020;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static uint GetGLStartAnimationFromSheet(uint border, uint plate, bool isBoost)
|
||||||
|
{
|
||||||
|
return GetGLStartAnimation(GlBorderIconIDToAnimID(border), GlPlateIconIDToAnimID(plate), isBoost);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static uint GetGLStartAnimation(uint border, uint plate, bool isBoost)
|
||||||
|
{
|
||||||
|
uint borderBits = border;
|
||||||
|
uint plateBits = plate << 7;
|
||||||
|
|
||||||
|
uint boostBits = isBoost ? (uint)0x8000 : (uint) 0;
|
||||||
|
|
||||||
|
return 0x0B000000 | boostBits | plateBits | borderBits;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,7 +25,13 @@ namespace FFXIVClassic_Map_Server.actors.group
|
||||||
if (initialMembers != null)
|
if (initialMembers != null)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < initialMembers.Length; i++)
|
for (int i = 0; i < initialMembers.Length; i++)
|
||||||
|
{
|
||||||
|
Session s = Server.GetServer().GetSession(initialMembers[i]);
|
||||||
|
if (s != null)
|
||||||
|
s.GetActor().SetCurrentContentGroup(this);
|
||||||
|
|
||||||
members.Add(initialMembers[i]);
|
members.Add(initialMembers[i]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
this.director = director;
|
this.director = director;
|
||||||
|
@ -38,11 +44,10 @@ namespace FFXIVClassic_Map_Server.actors.group
|
||||||
return;
|
return;
|
||||||
|
|
||||||
members.Add(actor.actorId);
|
members.Add(actor.actorId);
|
||||||
|
|
||||||
if (actor is Character)
|
if (actor is Character)
|
||||||
{
|
|
||||||
((Character)actor).SetCurrentContentGroup(this);
|
((Character)actor).SetCurrentContentGroup(this);
|
||||||
SendCurrentContentSync(actor);
|
|
||||||
}
|
|
||||||
SendGroupPacketsAll(members);
|
SendGroupPacketsAll(members);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -110,20 +115,6 @@ namespace FFXIVClassic_Map_Server.actors.group
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SendCurrentContentSync(Actor currentContentChanged)
|
|
||||||
{
|
|
||||||
foreach (uint memberId in members)
|
|
||||||
{
|
|
||||||
Session session = Server.GetServer().GetSession(memberId);
|
|
||||||
if (session != null)
|
|
||||||
{
|
|
||||||
ActorPropertyPacketUtil propPacketUtil = new ActorPropertyPacketUtil("charaWork/currentContentGroup", currentContentChanged, session.id);
|
|
||||||
propPacketUtil.AddProperty("charaWork.currentContentGroup");
|
|
||||||
session.GetActor().QueuePackets(propPacketUtil.Done());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public override uint GetTypeId()
|
public override uint GetTypeId()
|
||||||
{
|
{
|
||||||
return Group.ContentGroup_SimpleContentGroup24B;
|
return Group.ContentGroup_SimpleContentGroup24B;
|
||||||
|
@ -135,12 +126,19 @@ namespace FFXIVClassic_Map_Server.actors.group
|
||||||
SendGroupPacketsAll(members);
|
SendGroupPacketsAll(members);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void DeleteAll()
|
public void DeleteGroup()
|
||||||
{
|
{
|
||||||
SendDeletePackets(members);
|
SendDeletePackets();
|
||||||
|
for (int i = 0; i < members.Count; i++)
|
||||||
|
{
|
||||||
|
Session s = Server.GetServer().GetSession(members[i]);
|
||||||
|
if (s != null)
|
||||||
|
s.GetActor().SetCurrentContentGroup(null);
|
||||||
|
members.Remove(members[i]);
|
||||||
|
}
|
||||||
|
Server.GetWorldManager().DeleteContentGroup(groupIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void CheckDestroy()
|
public void CheckDestroy()
|
||||||
{
|
{
|
||||||
bool foundSession = false;
|
bool foundSession = false;
|
||||||
|
@ -155,7 +153,7 @@ namespace FFXIVClassic_Map_Server.actors.group
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!foundSession)
|
if (!foundSession)
|
||||||
Server.GetWorldManager().DeleteContentGroup(groupIndex);
|
DeleteGroup();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
29
FFXIVClassic Map Server/actors/group/GLContentGroup.cs
Normal file
29
FFXIVClassic Map Server/actors/group/GLContentGroup.cs
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
using FFXIVClassic.Common;
|
||||||
|
using FFXIVClassic_Map_Server.actors.director;
|
||||||
|
using FFXIVClassic_Map_Server.actors.group.Work;
|
||||||
|
using FFXIVClassic_Map_Server.Actors;
|
||||||
|
using FFXIVClassic_Map_Server.dataobjects;
|
||||||
|
using FFXIVClassic_Map_Server.packets.send.group;
|
||||||
|
using FFXIVClassic_Map_Server.packets.send.groups;
|
||||||
|
using FFXIVClassic_Map_Server.utils;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace FFXIVClassic_Map_Server.actors.group
|
||||||
|
{
|
||||||
|
class GLContentGroup : ContentGroup
|
||||||
|
{
|
||||||
|
public GLContentGroup(ulong groupIndex, Director director, uint[] initialMembers)
|
||||||
|
: base(groupIndex, director, initialMembers)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public override uint GetTypeId()
|
||||||
|
{
|
||||||
|
return Group.ContentGroup_GuildleveGroup;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue