forked from aly/qstbak
qstcompanion v1.0.1
This commit is contained in:
parent
3e10cbbbf2
commit
44c67ab71b
79 changed files with 21148 additions and 0 deletions
|
|
@ -0,0 +1,162 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Dalamud.Plugin.Services;
|
||||
using QuestionableCompanion.Models;
|
||||
|
||||
namespace QuestionableCompanion.Services;
|
||||
|
||||
public class AlliedSocietyDatabase
|
||||
{
|
||||
private readonly Configuration configuration;
|
||||
|
||||
private readonly IPluginLog log;
|
||||
|
||||
public AlliedSocietyDatabase(Configuration configuration, IPluginLog log)
|
||||
{
|
||||
this.configuration = configuration;
|
||||
this.log = log;
|
||||
if (configuration.AlliedSociety.RotationConfig.Priorities.Count == 0)
|
||||
{
|
||||
configuration.AlliedSociety.RotationConfig.InitializeDefaults();
|
||||
SaveToConfig();
|
||||
}
|
||||
}
|
||||
|
||||
public void SaveToConfig()
|
||||
{
|
||||
configuration.Save();
|
||||
}
|
||||
|
||||
public void UpdateCharacterProgress(string characterId, byte societyId, int rank, bool isMaxRank)
|
||||
{
|
||||
if (!configuration.AlliedSociety.CharacterProgress.ContainsKey(characterId))
|
||||
{
|
||||
configuration.AlliedSociety.CharacterProgress[characterId] = new List<AlliedSocietyProgress>();
|
||||
}
|
||||
List<AlliedSocietyProgress> progressList = configuration.AlliedSociety.CharacterProgress[characterId];
|
||||
AlliedSocietyProgress existing = progressList.FirstOrDefault((AlliedSocietyProgress p) => p.SocietyId == societyId);
|
||||
if (existing != null)
|
||||
{
|
||||
existing.CurrentRank = rank;
|
||||
existing.IsMaxRank = isMaxRank;
|
||||
}
|
||||
else
|
||||
{
|
||||
progressList.Add(new AlliedSocietyProgress
|
||||
{
|
||||
CharacterId = characterId,
|
||||
SocietyId = societyId,
|
||||
CurrentRank = rank,
|
||||
IsMaxRank = isMaxRank
|
||||
});
|
||||
}
|
||||
SaveToConfig();
|
||||
}
|
||||
|
||||
public AlliedSocietyProgress? GetProgress(string characterId, byte societyId)
|
||||
{
|
||||
if (configuration.AlliedSociety.CharacterProgress.TryGetValue(characterId, out List<AlliedSocietyProgress> list))
|
||||
{
|
||||
return list.FirstOrDefault((AlliedSocietyProgress p) => p.SocietyId == societyId);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public AlliedSocietyCharacterStatus GetCharacterStatus(string characterId)
|
||||
{
|
||||
if (!configuration.AlliedSociety.CharacterStatuses.ContainsKey(characterId))
|
||||
{
|
||||
configuration.AlliedSociety.CharacterStatuses[characterId] = new AlliedSocietyCharacterStatus
|
||||
{
|
||||
CharacterId = characterId,
|
||||
Status = AlliedSocietyRotationStatus.Ready
|
||||
};
|
||||
SaveToConfig();
|
||||
}
|
||||
return configuration.AlliedSociety.CharacterStatuses[characterId];
|
||||
}
|
||||
|
||||
public void UpdateCharacterStatus(string characterId, AlliedSocietyRotationStatus status)
|
||||
{
|
||||
GetCharacterStatus(characterId).Status = status;
|
||||
SaveToConfig();
|
||||
}
|
||||
|
||||
public void SetCharacterComplete(string characterId, DateTime completionDate)
|
||||
{
|
||||
AlliedSocietyCharacterStatus characterStatus = GetCharacterStatus(characterId);
|
||||
characterStatus.Status = AlliedSocietyRotationStatus.Complete;
|
||||
characterStatus.LastCompletionDate = completionDate;
|
||||
characterStatus.ImportedQuestIds.Clear();
|
||||
SaveToConfig();
|
||||
}
|
||||
|
||||
public void CheckAndResetExpired(DateTime nextResetDate)
|
||||
{
|
||||
List<string> charactersToReset = GetCharactersNeedingReset(nextResetDate);
|
||||
foreach (string charId in charactersToReset)
|
||||
{
|
||||
log.Information("[AlliedSociety] Resetting status for character " + charId);
|
||||
AlliedSocietyCharacterStatus characterStatus = GetCharacterStatus(charId);
|
||||
characterStatus.Status = AlliedSocietyRotationStatus.Ready;
|
||||
characterStatus.ImportedQuestIds.Clear();
|
||||
}
|
||||
if (charactersToReset.Count > 0)
|
||||
{
|
||||
SaveToConfig();
|
||||
}
|
||||
}
|
||||
|
||||
public List<string> GetCharactersNeedingReset(DateTime nextResetDate)
|
||||
{
|
||||
List<string> result = new List<string>();
|
||||
DateTime lastResetDate = nextResetDate.AddDays(-1.0);
|
||||
foreach (KeyValuePair<string, AlliedSocietyCharacterStatus> kvp in configuration.AlliedSociety.CharacterStatuses)
|
||||
{
|
||||
AlliedSocietyCharacterStatus status = kvp.Value;
|
||||
if (status.Status == AlliedSocietyRotationStatus.Ready)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if (status.LastCompletionDate.HasValue)
|
||||
{
|
||||
if (status.LastCompletionDate.Value < lastResetDate)
|
||||
{
|
||||
result.Add(kvp.Key);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
result.Add(kvp.Key);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public void ClearAllStatuses()
|
||||
{
|
||||
foreach (KeyValuePair<string, AlliedSocietyCharacterStatus> kvp in configuration.AlliedSociety.CharacterStatuses)
|
||||
{
|
||||
kvp.Value.Status = AlliedSocietyRotationStatus.Ready;
|
||||
kvp.Value.ImportedQuestIds.Clear();
|
||||
}
|
||||
SaveToConfig();
|
||||
}
|
||||
|
||||
public void AddImportedQuest(string characterId, string questId)
|
||||
{
|
||||
AlliedSocietyCharacterStatus status = GetCharacterStatus(characterId);
|
||||
if (!status.ImportedQuestIds.Contains(questId))
|
||||
{
|
||||
status.ImportedQuestIds.Add(questId);
|
||||
SaveToConfig();
|
||||
}
|
||||
}
|
||||
|
||||
public void ClearImportedQuests(string characterId)
|
||||
{
|
||||
GetCharacterStatus(characterId).ImportedQuestIds.Clear();
|
||||
SaveToConfig();
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue