From b5db036d717ab050c3e78c02c6831f112e8321ad Mon Sep 17 00:00:00 2001 From: Filip Maj Date: Sun, 25 Jun 2017 23:02:20 -0400 Subject: [PATCH] Abandoning/Completing GLs now marks them correctly in the Journal. --- FFXIVClassic Map Server/Database.cs | 36 +++++++++++++++++++ .../actors/chara/player/Player.cs | 25 +++++++++++++ .../actors/director/GuildleveDirector.cs | 4 ++- 3 files changed, 64 insertions(+), 1 deletion(-) diff --git a/FFXIVClassic Map Server/Database.cs b/FFXIVClassic Map Server/Database.cs index 28b59224..b23214f1 100644 --- a/FFXIVClassic Map Server/Database.cs +++ b/FFXIVClassic Map Server/Database.cs @@ -432,6 +432,42 @@ namespace FFXIVClassic_Map_Server } } + public static void MarkGuildleve(Player player, uint glId, bool isAbandoned, bool isCompleted) + { + string query; + MySqlCommand cmd; + + using (MySqlConnection conn = new MySqlConnection(String.Format("Server={0}; Port={1}; Database={2}; UID={3}; Password={4}", ConfigConstants.DATABASE_HOST, ConfigConstants.DATABASE_PORT, ConfigConstants.DATABASE_NAME, ConfigConstants.DATABASE_USERNAME, ConfigConstants.DATABASE_PASSWORD))) + { + try + { + conn.Open(); + + query = @" + UPDATE characters_quest_guildleve_regional + SET abandoned = @abandoned, completed = @completed + WHERE characterId = @charaId and guildleveId = @guildleveId + "; + + cmd = new MySqlCommand(query, conn); + cmd.Parameters.AddWithValue("@charaId", player.actorId); + cmd.Parameters.AddWithValue("@guildleveId", glId); + cmd.Parameters.AddWithValue("@abandoned", isAbandoned); + cmd.Parameters.AddWithValue("@completed", isCompleted); + + cmd.ExecuteNonQuery(); + } + catch (MySqlException e) + { + Program.Log.Error(e.ToString()); + } + finally + { + conn.Dispose(); + } + } + } + public static void SaveGuildleve(Player player, uint glId, int slot) { string query; diff --git a/FFXIVClassic Map Server/actors/chara/player/Player.cs b/FFXIVClassic Map Server/actors/chara/player/Player.cs index 8f33e095..c853f270 100644 --- a/FFXIVClassic Map Server/actors/chara/player/Player.cs +++ b/FFXIVClassic Map Server/actors/chara/player/Player.cs @@ -1141,6 +1141,23 @@ namespace FFXIVClassic_Map_Server.Actors SendGuildleveClientUpdate(freeSlot); } + public void MarkGuildleve(uint id, bool abandoned, bool completed) + { + if (HasGuildleve(id)) + { + for (int i = 0; i < questGuildleve.Length; i++) + { + if (questGuildleve[i] != null && questGuildleve[i] == id) + { + work.guildleveChecked[i] = abandoned; + work.guildleveDone[i] = completed; + Database.MarkGuildleve(this, id, abandoned, completed); + SendGuildleveClientUpdate(i); + } + } + } + } + public void RemoveGuildleve(uint id) { if (HasGuildleve(id)) @@ -1409,6 +1426,14 @@ namespace FFXIVClassic_Map_Server.Actors QueuePackets(propPacketUtil.Done()); } + private void SendGuildleveMarkClientUpdate(int slot) + { + ActorPropertyPacketUtil propPacketUtil = new ActorPropertyPacketUtil("work/guildleve", this, actorId); + propPacketUtil.AddProperty(String.Format("work.guildleveDone[{0}]", slot)); + propPacketUtil.AddProperty(String.Format("work.guildleveChecked[{0}]", slot)); + QueuePackets(propPacketUtil.Done()); + } + public void SetLoginDirector(Director director) { if (ownedDirectors.Contains(director)) diff --git a/FFXIVClassic Map Server/actors/director/GuildleveDirector.cs b/FFXIVClassic Map Server/actors/director/GuildleveDirector.cs index e1d00a63..9a4ac483 100644 --- a/FFXIVClassic Map Server/actors/director/GuildleveDirector.cs +++ b/FFXIVClassic Map Server/actors/director/GuildleveDirector.cs @@ -94,6 +94,7 @@ namespace FFXIVClassic_Map_Server.actors.director foreach (Actor a in GetPlayerMembers()) { Player player = (Player)a; + player.MarkGuildleve(guildleveId, false, true); player.PlayAnimation(0x02000002); player.ChangeMusic(81); player.SendGameMessage(Server.GetWorldManager().GetActor(), 50023, 0x20, (object)(int)guildleveId); @@ -128,7 +129,8 @@ namespace FFXIVClassic_Map_Server.actors.director foreach (Actor p in GetPlayerMembers()) { Player player = (Player)p; - player.SendGameMessage(Server.GetWorldManager().GetActor(), 50147, 0x20, (object)guildleveId); + player.SendGameMessage(Server.GetWorldManager().GetActor(), 50147, 0x20, (object)guildleveId); + player.MarkGuildleve(guildleveId, true, false); } EndGuildleve(false);