mirror of
				https://bitbucket.org/Ioncannon/project-meteor-server.git
				synced 2025-05-20 08:26:59 -04:00 
			
		
		
		
	Quest data is now saved/loaded from the DB.
This commit is contained in:
		| @@ -310,6 +310,56 @@ namespace FFXIVClassic_Lobby_Server | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         public static void saveQuest(Player player, Quest quest) | ||||
|         { | ||||
|             int slot = player.getQuestSlot(quest.actorId); | ||||
|             if (slot == -1) | ||||
|             { | ||||
|                 Log.error(String.Format("Tried saving quest player didn't have: Player: {0:x}, QuestId: {0:x}", player.actorId, quest.actorId)); | ||||
|                 return; | ||||
|             } | ||||
|             else | ||||
|                 saveQuest(player, quest, slot); | ||||
|         } | ||||
|  | ||||
|         public static void saveQuest(Player player, Quest quest, int slot) | ||||
|         { | ||||
|             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 = @" | ||||
|                     INSERT INTO characters_quest_scenario  | ||||
|                     (characterId, slot, questId, questData, questFlags) | ||||
|                     VALUES | ||||
|                     (@charaId, @slot, @questId, @questData, @questFlags) | ||||
|                     ON DUPLICATE KEY UPDATE | ||||
|                     questData = @questData, questFlags = @questFlags | ||||
|                     "; | ||||
|  | ||||
|                     cmd = new MySqlCommand(query, conn); | ||||
|                     cmd.Parameters.AddWithValue("@charaId", player.actorId); | ||||
|                     cmd.Parameters.AddWithValue("@slot", slot); | ||||
|                     cmd.Parameters.AddWithValue("@questId", quest.actorId); | ||||
|                     cmd.Parameters.AddWithValue("@questData", quest.GetSerializedQuestData()); | ||||
|                     cmd.Parameters.AddWithValue("@questFlags", quest.GetQuestFlags()); | ||||
|  | ||||
|                     cmd.ExecuteNonQuery(); | ||||
|                 } | ||||
|                 catch (MySqlException e) | ||||
|                 { Console.WriteLine(e); } | ||||
|                 finally | ||||
|                 { | ||||
|                     conn.Dispose(); | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         public static void loadPlayerCharacter(Player player) | ||||
|         {             | ||||
|             string query; | ||||
| @@ -627,7 +677,9 @@ namespace FFXIVClassic_Lobby_Server | ||||
|                     query = @" | ||||
|                         SELECT  | ||||
|                         slot, | ||||
|                         questId                        | ||||
|                         questId, | ||||
|                         questData, | ||||
|                         questFlags | ||||
|                         FROM characters_quest_scenario WHERE characterId = @charId"; | ||||
|                     | ||||
|                     cmd = new MySqlCommand(query, conn); | ||||
| @@ -638,9 +690,21 @@ namespace FFXIVClassic_Lobby_Server | ||||
|                         { | ||||
|                             int index = reader.GetUInt16(0); | ||||
|                             player.playerWork.questScenario[index] = 0xA0F00000 | reader.GetUInt32(1); | ||||
|                             string questData = null; | ||||
|                             uint questFlags = 0; | ||||
|  | ||||
|                             if (!reader.IsDBNull(2)) | ||||
|                                 questData = reader.GetString(2); | ||||
|                             else | ||||
|                                 questData = "{}"; | ||||
|  | ||||
|                             if (!reader.IsDBNull(3)) | ||||
|                                 questFlags = reader.GetUInt32(3); | ||||
|                             else | ||||
|                                 questFlags = 0; | ||||
|  | ||||
|                             string questName = Server.getStaticActors(player.playerWork.questScenario[index]).actorName; | ||||
|                             player.questScenario[index] = new Quest(player.playerWork.questScenario[index], questName); | ||||
|                             player.questScenario[index] = new Quest(player, player.playerWork.questScenario[index], questName, questData, questFlags); | ||||
|                         } | ||||
|                     } | ||||
|  | ||||
|   | ||||
| @@ -993,6 +993,17 @@ namespace FFXIVClassic_Map_Server.Actors | ||||
|             return false; | ||||
|         } | ||||
|  | ||||
|         public int getQuestSlot(uint id) | ||||
|         { | ||||
|             for (int i = 0; i < questScenario.Length; i++) | ||||
|             { | ||||
|                 if (questScenario[i] != null && questScenario[i].actorId == (0xA0F00000 | id)) | ||||
|                     return i; | ||||
|             } | ||||
|  | ||||
|             return -1; | ||||
|         } | ||||
|  | ||||
|         public void setDirector(string directorType) | ||||
|         { | ||||
|             if (directorType.Equals("openingDirector")) | ||||
|   | ||||
| @@ -1,4 +1,6 @@ | ||||
| using FFXIVClassic_Lobby_Server.common; | ||||
| using FFXIVClassic_Lobby_Server; | ||||
| using FFXIVClassic_Lobby_Server.common; | ||||
| using Newtonsoft.Json; | ||||
| using System; | ||||
| using System.Collections.Generic; | ||||
|  | ||||
| @@ -6,6 +8,7 @@ namespace FFXIVClassic_Map_Server.Actors | ||||
| { | ||||
|     class Quest : Actor | ||||
|     { | ||||
|         private Player owner; | ||||
|         private int currentPhase = 0; | ||||
|         private uint questFlags = 0; | ||||
|         private Dictionary<string, Object> questData = new Dictionary<string, object>(); | ||||
| @@ -13,17 +16,22 @@ namespace FFXIVClassic_Map_Server.Actors | ||||
|         public Quest(uint actorID, string name) | ||||
|             : base(actorID) | ||||
|         { | ||||
|             actorName = name; | ||||
|             actorName = name;             | ||||
|         } | ||||
|  | ||||
|         public void InitQuestData(string dataName, object initialValue) | ||||
|         public Quest(Player owner, uint actorID, string name, string questDataJson, uint questFlags) | ||||
|             : base(actorID) | ||||
|         { | ||||
|             questData[dataName] = initialValue; | ||||
|             this.owner = owner; | ||||
|             actorName = name;             | ||||
|             this.questFlags = questFlags; | ||||
|             this.questData = JsonConvert.DeserializeObject<Dictionary<string, Object>>(questDataJson); | ||||
|             if (questData == null) | ||||
|                 questData = new Dictionary<string, object>(); | ||||
|         } | ||||
|  | ||||
|         public void UpdateQuestData(string dataName, object data) | ||||
|         { | ||||
|             if (questData.ContainsKey(dataName)) | ||||
|         | ||||
|         public void SetQuestData(string dataName, object data) | ||||
|         {             | ||||
|                 questData[dataName] = data; | ||||
|  | ||||
|             //Inform update | ||||
| @@ -81,5 +89,20 @@ namespace FFXIVClassic_Map_Server.Actors | ||||
|             currentPhase++; | ||||
|         } | ||||
|  | ||||
|         public uint GetQuestFlags() | ||||
|         { | ||||
|             return questFlags; | ||||
|         } | ||||
|  | ||||
|         public string GetSerializedQuestData() | ||||
|         { | ||||
|             return JsonConvert.SerializeObject(questData, Formatting.Indented); | ||||
|         } | ||||
|  | ||||
|         public void SaveData() | ||||
|         { | ||||
|             Database.saveQuest(owner, this); | ||||
|         } | ||||
|  | ||||
|     } | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user