begin work on subquests

This commit is contained in:
Mikhail
2025-05-01 19:16:47 -04:00
parent 9539c0c440
commit 6298471c09
5 changed files with 70 additions and 2 deletions

View File

@@ -265,6 +265,7 @@ namespace EpinelPS.Database
public Dictionary<int, NetUserTeamData> UserTeams = new Dictionary<int, NetUserTeamData>();
public Dictionary<int, bool> MainQuestData = new();
public Dictionary<int, bool> SubQuestData = new();
public int InfraCoreExp = 0;
public int InfraCoreLvl = 1;
public UserPointData userPointData = new();
@@ -350,6 +351,15 @@ namespace EpinelPS.Database
}
}
public void SetSubQuest(int tid, bool recievedReward)
{
if (!SubQuestData.TryAdd(tid, recievedReward))
{
SubQuestData[tid] = recievedReward;
return;
}
}
public int GenerateUniqueItemId()
{
var num = Rng.RandomId();
@@ -684,6 +694,23 @@ namespace EpinelPS.Database
}
}
public static void Reload()
{
if (!File.Exists(AppDomain.CurrentDomain.BaseDirectory + "/db.json"))
{
Console.WriteLine("users: warning: configuration not found, writing default data");
Instance = new CoreInfo();
Save();
}
var j = JsonConvert.DeserializeObject<CoreInfo>(File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + "/db.json"));
if (j != null)
{
Instance = j;
Console.WriteLine("Database reload complete.");
}
}
private static void ValidateDb()
{
// check if character level is valid

View File

@@ -214,12 +214,12 @@ namespace EpinelPS.LobbyServer.Gacha
// Add "New Character" Badge
user.AddBadge(BadgeContents.BadgeContentsNikkeNew, characterData.name_code.ToString());
user.AddTrigger(TriggerType.ObtainCharacter, 1, characterData.name_code);
if (characterData.original_rare == "SSR" || characterData.original_rare == "SR")
{
user.BondInfo.Add(new() { NameCode = characterData.name_code, Level = 1 });
user.AddTrigger(TriggerType.ObtainCharacter, 1, characterData.name_code);
}
}

View File

@@ -8,10 +8,18 @@ namespace EpinelPS.LobbyServer.Subquest
protected override async Task HandleAsync()
{
var req = await ReadData<ReqGetSubQuestList>();
var user = GetUser();
var response = new ResGetSubQuestList();
// TOOD
foreach(var item in user.SubQuestData)
{
response.SubquestList.Add(new NetSubQuestData(){
CreatedAt = DateTime.UtcNow.Ticks, // TODO does this matter
SubQuestId = item.Key,
IsReceived = item.Value
});
}
await WriteDataAsync(response);
}

View File

@@ -0,0 +1,28 @@
using EpinelPS.Database;
using EpinelPS.StaticInfo;
using EpinelPS.Utils;
namespace EpinelPS.LobbyServer.Subquest
{
[PacketPath("/subquest/settrigger")]
public class SetTrigger : LobbyMsgHandler
{
protected override async Task HandleAsync()
{
var req = await ReadData<ReqSetTriggerFromSubQuest>();
var user = GetUser();
var response = new ResSetTriggerFromSubQuest();
if (!GameData.Instance.Subquests.TryGetValue(req.SubquestId, out SubquestRecord? record))
throw new Exception("no such subquest: " + req.SubquestId);
user.AddTrigger(TriggerType.CampaignGroupClear, record.clear_condition_value, record.clear_condition_id); // TODO this may need to go elsewhere
user.AddTrigger(TriggerType.SubQuestClear, 1, req.SubquestId);
JsonDb.Save();
await WriteDataAsync(response);
}
}
}

View File

@@ -210,6 +210,7 @@ namespace EpinelPS
Console.WriteLine(" ls /users - show all users");
Console.WriteLine(" cd (user id) - select user by id");
Console.WriteLine(" rmuser - delete selected user");
Console.WriteLine(" r - load changes to database from disk. Discards data in memory.");
Console.WriteLine(" ban - ban selected user from game");
Console.WriteLine(" unban - unban selected user from game");
Console.WriteLine(" exit - exit server application");
@@ -898,6 +899,10 @@ namespace EpinelPS
{
Console.WriteLine("Not implemented");
}
else if (input == "r")
{
JsonDb.Reload();
}
else
{
Console.WriteLine("Unknown command");