mirror of
https://bitbucket.org/Ioncannon/project-meteor-server.git
synced 2025-04-20 11:47:48 +00:00
Quest data is now saved/loaded from the DB.
This commit is contained in:
parent
b8a3d4f1e0
commit
fe111ab6ca
3 changed files with 108 additions and 10 deletions
|
@ -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)
|
public static void loadPlayerCharacter(Player player)
|
||||||
{
|
{
|
||||||
string query;
|
string query;
|
||||||
|
@ -627,7 +677,9 @@ namespace FFXIVClassic_Lobby_Server
|
||||||
query = @"
|
query = @"
|
||||||
SELECT
|
SELECT
|
||||||
slot,
|
slot,
|
||||||
questId
|
questId,
|
||||||
|
questData,
|
||||||
|
questFlags
|
||||||
FROM characters_quest_scenario WHERE characterId = @charId";
|
FROM characters_quest_scenario WHERE characterId = @charId";
|
||||||
|
|
||||||
cmd = new MySqlCommand(query, conn);
|
cmd = new MySqlCommand(query, conn);
|
||||||
|
@ -638,9 +690,21 @@ namespace FFXIVClassic_Lobby_Server
|
||||||
{
|
{
|
||||||
int index = reader.GetUInt16(0);
|
int index = reader.GetUInt16(0);
|
||||||
player.playerWork.questScenario[index] = 0xA0F00000 | reader.GetUInt32(1);
|
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;
|
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;
|
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)
|
public void setDirector(string directorType)
|
||||||
{
|
{
|
||||||
if (directorType.Equals("openingDirector"))
|
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;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
@ -6,6 +8,7 @@ namespace FFXIVClassic_Map_Server.Actors
|
||||||
{
|
{
|
||||||
class Quest : Actor
|
class Quest : Actor
|
||||||
{
|
{
|
||||||
|
private Player owner;
|
||||||
private int currentPhase = 0;
|
private int currentPhase = 0;
|
||||||
private uint questFlags = 0;
|
private uint questFlags = 0;
|
||||||
private Dictionary<string, Object> questData = new Dictionary<string, object>();
|
private Dictionary<string, Object> questData = new Dictionary<string, object>();
|
||||||
|
@ -16,14 +19,19 @@ namespace FFXIVClassic_Map_Server.Actors
|
||||||
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)
|
public void SetQuestData(string dataName, object data)
|
||||||
{
|
{
|
||||||
if (questData.ContainsKey(dataName))
|
|
||||||
questData[dataName] = data;
|
questData[dataName] = data;
|
||||||
|
|
||||||
//Inform update
|
//Inform update
|
||||||
|
@ -81,5 +89,20 @@ namespace FFXIVClassic_Map_Server.Actors
|
||||||
currentPhase++;
|
currentPhase++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public uint GetQuestFlags()
|
||||||
|
{
|
||||||
|
return questFlags;
|
||||||
|
}
|
||||||
|
|
||||||
|
public string GetSerializedQuestData()
|
||||||
|
{
|
||||||
|
return JsonConvert.SerializeObject(questData, Formatting.Indented);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SaveData()
|
||||||
|
{
|
||||||
|
Database.saveQuest(owner, this);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue