From c8a47a39d08aab59430783259ff37da57e163526 Mon Sep 17 00:00:00 2001 From: Mikhail Date: Sat, 21 Dec 2024 11:22:54 -0500 Subject: [PATCH] Implement tower rewards --- EpinelPS/GameData/GameData.cs | 7 +++++++ EpinelPS/GameData/JsonStaticData.cs | 12 ++++++++++++ EpinelPS/LobbyServer/Tower/ClearTower.cs | 16 ++++++++++++---- 3 files changed, 31 insertions(+), 4 deletions(-) diff --git a/EpinelPS/GameData/GameData.cs b/EpinelPS/GameData/GameData.cs index c3b8173..ac4aff5 100644 --- a/EpinelPS/GameData/GameData.cs +++ b/EpinelPS/GameData/GameData.cs @@ -59,6 +59,7 @@ namespace EpinelPS.StaticInfo public Dictionary skillInfoTable = []; public Dictionary costTable = []; public Dictionary mediasProductTable = []; + public Dictionary towerTable = []; @@ -492,6 +493,12 @@ namespace EpinelPS.StaticInfo { this.mediasProductTable.Add(obj.midas_product_id_proximabeta, obj); } + + var towerTable = await LoadZip("TowerTable.json", progress); + foreach (var obj in towerTable.records) + { + this.towerTable.Add(obj.id, obj); + } } public async Task LoadJukeboxListData(ProgressBar bar) diff --git a/EpinelPS/GameData/JsonStaticData.cs b/EpinelPS/GameData/JsonStaticData.cs index 1cd1d63..9ebe2ad 100644 --- a/EpinelPS/GameData/JsonStaticData.cs +++ b/EpinelPS/GameData/JsonStaticData.cs @@ -559,4 +559,16 @@ Mileage = 7, Trade = 8 } + public class TowerRecord + { + public int id; + public int floor; + public string type = ""; + public int standard_battle_power; + public int reward_id; + } + public class TowerTable + { + public List records = []; + } } diff --git a/EpinelPS/LobbyServer/Tower/ClearTower.cs b/EpinelPS/LobbyServer/Tower/ClearTower.cs index af4be7c..2c40975 100644 --- a/EpinelPS/LobbyServer/Tower/ClearTower.cs +++ b/EpinelPS/LobbyServer/Tower/ClearTower.cs @@ -1,5 +1,7 @@ using EpinelPS.Database; using EpinelPS.Utils; +using EpinelPS.StaticInfo; +using EpinelPS.LobbyServer.Stage; namespace EpinelPS.LobbyServer.Tower { @@ -25,20 +27,26 @@ namespace EpinelPS.LobbyServer.Tower { var response = new ResClearTower(); + if (!GameData.Instance.towerTable.TryGetValue(TowerId, out TowerRecord record)) throw new Exception("unable to find tower with id " + TowerId); + // Parse TowerId to get TowerType and FloorNumber int TowerType = (TowerId / 10000) - 1; // For some weird reason the Type here doesn't match up with NetTowerData, thus the -1 int FloorNumber = TowerId % 10000; // Update user's TowerProgress - if (!user.TowerProgress.ContainsKey(TowerType)) + if (!user.TowerProgress.TryGetValue(TowerType, out int value)) { - user.TowerProgress[TowerType] = FloorNumber; + user.TowerProgress[TowerType] = record.floor; } - else if (user.TowerProgress[TowerType] < FloorNumber) + else if (value < FloorNumber) { - user.TowerProgress[TowerType] = FloorNumber; + user.TowerProgress[TowerType] = record.floor; } + var reward = GameData.Instance.GetRewardTableEntry(record.reward_id) ?? throw new Exception("failed to get reward"); + response.Reward = ClearStage.RegisterRewardsForUser(user, reward); + + JsonDb.Save(); return response;