mirror of
https://github.com/MikuLeaks/MikuSB.git
synced 2026-06-04 05:23:59 +00:00
Compare commits
3 Commits
2d1079a80d
...
v2.1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
bdb4ee3d51 | ||
|
|
7507d10072 | ||
|
|
8a7a919d04 |
@@ -1,6 +1,6 @@
|
||||
namespace MikuSB.Data.Excel;
|
||||
namespace MikuSB.Data.Excel;
|
||||
|
||||
[ResourceEntity("ar_item.json")]
|
||||
[ResourceEntity("item/templates/ar_item.json")]
|
||||
public class ArItemExcel : ExcelResource
|
||||
{
|
||||
public uint Genre { get; set; }
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace MikuSB.Data.Excel;
|
||||
|
||||
[ResourceEntity("break.json")]
|
||||
[ResourceEntity("item/break.json")]
|
||||
public class BreakExcel : ExcelResource
|
||||
{
|
||||
[JsonProperty("ID")] public int Id { get; set; }
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
namespace MikuSB.Data.Excel;
|
||||
namespace MikuSB.Data.Excel;
|
||||
|
||||
[ResourceEntity("break_level_limit.json")]
|
||||
[ResourceEntity("item/break_level_limit.json")]
|
||||
public class BreakLevelLimitExcel : ExcelResource
|
||||
{
|
||||
public int ID { get; set; }
|
||||
|
||||
@@ -3,7 +3,7 @@ using Newtonsoft.Json.Linq;
|
||||
|
||||
namespace MikuSB.Data.Excel;
|
||||
|
||||
[ResourceEntity("call_item.json")]
|
||||
[ResourceEntity("item/templates/call_item.json")]
|
||||
public class CallItemExcel : ExcelResource
|
||||
{
|
||||
public uint Genre { get; set; }
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
namespace MikuSB.Data.Excel;
|
||||
|
||||
[ResourceEntity("card.json")]
|
||||
[ResourceEntity("item/templates/card.json")]
|
||||
public class CardExcel : ExcelResource
|
||||
{
|
||||
public uint Genre { get; set; }
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
namespace MikuSB.Data.Excel;
|
||||
|
||||
[ResourceEntity("card_skin.json")]
|
||||
[ResourceEntity("item/templates/card_skin.json")]
|
||||
public class CardSkinExcel : ExcelResource
|
||||
{
|
||||
public uint Genre { get; set; }
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
namespace MikuSB.Data.Excel;
|
||||
|
||||
[ResourceEntity("card_skin_parts.json")]
|
||||
[ResourceEntity("item/templates/card_skin_parts.json")]
|
||||
public class CardSkinPartsExcel : ExcelResource
|
||||
{
|
||||
public uint Genre { get; set; }
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
namespace MikuSB.Data.Excel;
|
||||
|
||||
[ResourceEntity("level.json")]
|
||||
[ResourceEntity("chapter/level.json")]
|
||||
public class ChapterLevelExcel : ExcelResource
|
||||
{
|
||||
public uint ID { get; set; }
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
namespace MikuSB.Data.Excel;
|
||||
|
||||
[ResourceEntity("daily_level.json")]
|
||||
[ResourceEntity("daily/level.json")]
|
||||
public class DailyLevelExcel : ExcelResource
|
||||
{
|
||||
public uint ID { get; set; }
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
namespace MikuSB.Data.Excel;
|
||||
|
||||
[ResourceEntity("manifestation.json")]
|
||||
[ResourceEntity("item/templates/manifestation.json")]
|
||||
public class ManifestationExcel : ExcelResource
|
||||
{
|
||||
public uint Genre { get; set; }
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace MikuSB.Data.Excel;
|
||||
|
||||
// nodecondition.json: NodeConditionId → NodeXCost per sub-node (1-9)
|
||||
[ResourceEntity("nodecondition.json")]
|
||||
[ResourceEntity("item/skill/nodecondition.json")]
|
||||
public class NodeConditionExcel : ExcelResource
|
||||
{
|
||||
[JsonProperty("ID")] public uint Id { get; set; }
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
namespace MikuSB.Data.Excel;
|
||||
|
||||
[ResourceEntity("profile.json")]
|
||||
[ResourceEntity("item/templates/profile.json")]
|
||||
public class ProfileExcel : ExcelResource
|
||||
{
|
||||
public uint Genre { get; set; }
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
using Newtonsoft.Json.Linq;
|
||||
using Newtonsoft.Json.Linq;
|
||||
|
||||
namespace MikuSB.Data.Excel;
|
||||
|
||||
[ResourceEntity("recycle.json")]
|
||||
[ResourceEntity("item/recycle.json")]
|
||||
public class RecycleExcel : ExcelResource
|
||||
{
|
||||
public int ID { get; set; }
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace MikuSB.Data.Excel;
|
||||
|
||||
[ResourceEntity("dailybuff.json")]
|
||||
[ResourceEntity("dlc/rogue3d/dailybuff.json")]
|
||||
public class Rogue3DDailyBuffExcel : ExcelResource
|
||||
{
|
||||
[JsonProperty("ID")] public uint Id { get; set; }
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace MikuSB.Data.Excel;
|
||||
|
||||
[ResourceEntity("server_01_difficult.json")]
|
||||
[ResourceEntity("dlc/rogue3d/server_01_difficult.json")]
|
||||
public class Rogue3DDifficultExcel : ExcelResource
|
||||
{
|
||||
[JsonProperty("DifficultID")] public uint DifficultId { get; set; }
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace MikuSB.Data.Excel;
|
||||
|
||||
[ResourceEntity("server_10_season.json")]
|
||||
[ResourceEntity("dlc/rogue3d/server_10_season.json")]
|
||||
public class Rogue3DSeasonExcel : ExcelResource
|
||||
{
|
||||
[JsonProperty("SeasonID")] public uint SeasonId { get; set; }
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace MikuSB.Data.Excel;
|
||||
|
||||
[ResourceEntity("server_03_talent.json")]
|
||||
[ResourceEntity("dlc/rogue3d/server_03_talent.json")]
|
||||
public class Rogue3DTalentExcel : ExcelResource
|
||||
{
|
||||
[JsonProperty("TalentID")] public uint TalentId { get; set; }
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace MikuSB.Data.Excel;
|
||||
|
||||
// spine.json: SpineId → Node{i}Req (nodecondition ID per master node index)
|
||||
[ResourceEntity("spine.json")]
|
||||
[ResourceEntity("item/skill/spine.json")]
|
||||
public class SpineExcel : ExcelResource
|
||||
{
|
||||
[JsonProperty("ID")] public uint Id { get; set; }
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Linq;
|
||||
|
||||
namespace MikuSB.Data.Excel;
|
||||
|
||||
[ResourceEntity("suplies.json")]
|
||||
[ResourceEntity("item/templates/suplies.json")]
|
||||
public class SuppliesExcel : ExcelResource
|
||||
{
|
||||
public uint Genre { get; set; }
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace MikuSB.Data.Excel;
|
||||
|
||||
[ResourceEntity("support_card.json")]
|
||||
[ResourceEntity("item/templates/support_card.json")]
|
||||
public class SupportCardExcel : ExcelResource
|
||||
{
|
||||
public uint Genre { get; set; }
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Linq;
|
||||
|
||||
namespace MikuSB.Data.Excel;
|
||||
|
||||
[ResourceEntity("upgrade_exp.json")]
|
||||
[ResourceEntity("item/upgrade_exp.json")]
|
||||
public class UpgradeExpExcel : ExcelResource
|
||||
{
|
||||
public int Lv { get; set; }
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Linq;
|
||||
|
||||
namespace MikuSB.Data.Excel;
|
||||
|
||||
[ResourceEntity("weapon.json")]
|
||||
[ResourceEntity("item/templates/weapon.json")]
|
||||
public class WeaponExcel : ExcelResource
|
||||
{
|
||||
public uint Genre { get; set; }
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
namespace MikuSB.Data.Excel;
|
||||
|
||||
[ResourceEntity("weapon_parts.json")]
|
||||
[ResourceEntity("item/templates/weapon_parts.json")]
|
||||
public class WeaponPartsExcel : ExcelResource
|
||||
{
|
||||
public uint Genre { get; set; }
|
||||
|
||||
@@ -3,7 +3,7 @@ using Newtonsoft.Json.Linq;
|
||||
|
||||
namespace MikuSB.Data.Excel;
|
||||
|
||||
[ResourceEntity("weapon_skin.json")]
|
||||
[ResourceEntity("item/templates/weapon_skin.json")]
|
||||
public class WeaponSkinExcel : ExcelResource
|
||||
{
|
||||
public uint Genre { get; set; }
|
||||
|
||||
@@ -46,7 +46,7 @@ public class ResourceManager
|
||||
foreach (var fileName in attribute.FileName)
|
||||
try
|
||||
{
|
||||
var path = ConfigManager.Config.Path.ResourcePath + "/ExcelOutput/" + fileName;
|
||||
var path = ConfigManager.Config.Path.ResourcePath + "/" + fileName;
|
||||
var file = new FileInfo(path);
|
||||
if (!file.Exists)
|
||||
{
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
using Google.Protobuf;
|
||||
using Google.Protobuf;
|
||||
using MikuSB.Data;
|
||||
using MikuSB.Database;
|
||||
using MikuSB.Database.Account;
|
||||
@@ -230,6 +230,11 @@ public class PlayerInstance(PlayerGameData data)
|
||||
proto.Attrs[ToShiftedAttrKey(gid, sid)] = val;
|
||||
}
|
||||
|
||||
foreach (var x in Data.StrAttrs)
|
||||
{
|
||||
proto.StrAttrs[ToShiftedAttrKey(x.Gid, x.Sid)] = x.Val;
|
||||
}
|
||||
|
||||
proto.ShowItems.AddRange(Data.ShowItems);
|
||||
|
||||
return proto;
|
||||
@@ -251,6 +256,22 @@ public class PlayerInstance(PlayerGameData data)
|
||||
Data.ShowItems[index - 1] = itemId;
|
||||
}
|
||||
|
||||
public void SetStrAttr(uint gid, uint sid, string value)
|
||||
{
|
||||
var attr = Data.StrAttrs.FirstOrDefault(x => x.Gid == gid && x.Sid == sid);
|
||||
if (attr == null)
|
||||
{
|
||||
attr = new PlayerStrAttr
|
||||
{
|
||||
Gid = gid,
|
||||
Sid = sid
|
||||
};
|
||||
Data.StrAttrs.Add(attr);
|
||||
}
|
||||
|
||||
attr.Val = value;
|
||||
}
|
||||
|
||||
public uint ToPackedAttrKey(uint gid, uint sid)
|
||||
{
|
||||
if (gid == 0)
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
using MikuSB.Database;
|
||||
using MikuSB.Enums.Player;
|
||||
using MikuSB.Proto;
|
||||
using System.Text.Json;
|
||||
@@ -22,6 +23,7 @@ public class PlayerSetting_ChangeShowCard : ICallGSHandler
|
||||
return;
|
||||
}
|
||||
player.SetShowItem((int)ProfileShowItemTypeEnum.SHOWITEM_GIRL, card.Guid);
|
||||
DatabaseHelper.SaveDatabaseType(player.Data);
|
||||
var sync = new NtfSyncPlayer();
|
||||
sync.ShowItems.AddRange(player.Data.ShowItems);
|
||||
await CallGSRouter.SendScript(connection, "PlayerSetting_ChangeShowCard", "{}", sync);
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using MikuSB.Enums.Player;
|
||||
using MikuSB.Database;
|
||||
using MikuSB.Enums.Player;
|
||||
using MikuSB.Proto;
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Serialization;
|
||||
@@ -35,7 +36,7 @@ public class PlayerSetting_SetProfileFace : ICallGSHandler
|
||||
}
|
||||
player.SetShowItem((int)ProfileShowItemTypeEnum.SHOWITEM_FRAME, item.UniqueId);
|
||||
}
|
||||
|
||||
DatabaseHelper.SaveDatabaseType(player.Data);
|
||||
var sync = new NtfSyncPlayer();
|
||||
sync.ShowItems.AddRange(player.Data.ShowItems);
|
||||
await CallGSRouter.SendScript(connection, "PlayerSetting_SetProfileFace", "null", sync);
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using MikuSB.Enums.Player;
|
||||
using MikuSB.Database;
|
||||
using MikuSB.Enums.Player;
|
||||
using MikuSB.Proto;
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Serialization;
|
||||
@@ -30,6 +31,8 @@ public class PlayerSetting_SetShowBadge : ICallGSHandler
|
||||
player.SetShowItem((int)slots[i], uniqueId);
|
||||
}
|
||||
|
||||
DatabaseHelper.SaveDatabaseType(player.Data);
|
||||
|
||||
var sync = new NtfSyncPlayer();
|
||||
sync.ShowItems.AddRange(player.Data.ShowItems);
|
||||
await CallGSRouter.SendScript(connection, "PlayerSetting_SetShowBadge", "null", sync);
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using MikuSB.Enums.Player;
|
||||
using MikuSB.Database;
|
||||
using MikuSB.Enums.Player;
|
||||
using MikuSB.Proto;
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Serialization;
|
||||
@@ -23,6 +24,8 @@ public class PlayerSetting_SetShowBubble : ICallGSHandler
|
||||
}
|
||||
|
||||
player.SetShowItem((int)ProfileShowItemTypeEnum.SHOWITEM_BUBBLE, item.UniqueId);
|
||||
DatabaseHelper.SaveDatabaseType(player.Data);
|
||||
|
||||
var sync = new NtfSyncPlayer();
|
||||
sync.ShowItems.AddRange(player.Data.ShowItems);
|
||||
await CallGSRouter.SendScript(connection, "PlayerSetting_SetShowBubble", "null", sync);
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using MikuSB.Enums.Player;
|
||||
using MikuSB.Database;
|
||||
using MikuSB.Enums.Player;
|
||||
using MikuSB.Proto;
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Serialization;
|
||||
@@ -23,6 +24,8 @@ public class PlayerSetting_SetShowCover : ICallGSHandler
|
||||
}
|
||||
|
||||
player.SetShowItem((int)ProfileShowItemTypeEnum.SHOWITEM_COVER, item.UniqueId);
|
||||
DatabaseHelper.SaveDatabaseType(player.Data);
|
||||
|
||||
var sync = new NtfSyncPlayer();
|
||||
sync.ShowItems.AddRange(player.Data.ShowItems);
|
||||
await CallGSRouter.SendScript(connection, "PlayerSetting_SetShowCover", "null", sync);
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using MikuSB.Enums.Player;
|
||||
using MikuSB.Database;
|
||||
using MikuSB.Enums.Player;
|
||||
using MikuSB.Proto;
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Serialization;
|
||||
@@ -23,6 +24,8 @@ public class PlayerSetting_SetShowNameCard : ICallGSHandler
|
||||
}
|
||||
|
||||
player.SetShowItem((int)ProfileShowItemTypeEnum.SHOWITEM_NAMECARD, item.UniqueId);
|
||||
DatabaseHelper.SaveDatabaseType(player.Data);
|
||||
|
||||
var sync = new NtfSyncPlayer();
|
||||
sync.ShowItems.AddRange(player.Data.ShowItems);
|
||||
await CallGSRouter.SendScript(connection, "PlayerSetting_SetShowNameCard", "null", sync);
|
||||
|
||||
39
GameServer/Server/CallGS/Handlers/Misc/SettingChange.cs
Normal file
39
GameServer/Server/CallGS/Handlers/Misc/SettingChange.cs
Normal file
@@ -0,0 +1,39 @@
|
||||
using MikuSB.Proto;
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace MikuSB.GameServer.Server.CallGS.Handlers.Misc;
|
||||
|
||||
[CallGSApi("SettingChange")]
|
||||
public class SettingChange : ICallGSHandler
|
||||
{
|
||||
private const uint PlayerSettingGid = 44;
|
||||
|
||||
public async Task Handle(Connection connection, string param, ushort seqNo)
|
||||
{
|
||||
var changes = JsonSerializer.Deserialize<List<SettingChangeParam>>(param) ?? [];
|
||||
var player = connection.Player!;
|
||||
var sync = new NtfSyncPlayer();
|
||||
|
||||
foreach (var change in changes)
|
||||
{
|
||||
var value = player.Data.StrAttrs
|
||||
.FirstOrDefault(x => x.Gid == PlayerSettingGid && x.Sid == change.Id)?
|
||||
.Val;
|
||||
|
||||
if (value == null)
|
||||
continue;
|
||||
|
||||
sync.CustomStr[player.ToShiftedAttrKey(PlayerSettingGid, change.Id)] = value;
|
||||
}
|
||||
|
||||
if (sync.CustomStr.Count > 0)
|
||||
await connection.SendPacket(CmdIds.NtfSyncAttr, sync);
|
||||
}
|
||||
}
|
||||
|
||||
internal sealed class SettingChangeParam
|
||||
{
|
||||
[JsonPropertyName("id")]
|
||||
public uint Id { get; set; }
|
||||
}
|
||||
@@ -1,4 +1,5 @@
|
||||
using MikuSB.Database.Player;
|
||||
using MikuSB.Database;
|
||||
using MikuSB.Database.Player;
|
||||
using MikuSB.Proto;
|
||||
|
||||
namespace MikuSB.GameServer.Server.Packet.Recv.Login;
|
||||
@@ -12,7 +13,11 @@ public class HandlerNtfSetAttr : Handler
|
||||
var player = connection.Player!;
|
||||
var attr = player.Data.Attrs
|
||||
.FirstOrDefault(x => x.Gid == req.Gid && x.Sid == req.Sid);
|
||||
if (attr != null) attr.Val = req.Val;
|
||||
|
||||
if (attr != null)
|
||||
{
|
||||
attr.Val = req.Val;
|
||||
}
|
||||
else
|
||||
{
|
||||
player.Data.Attrs.Add(new PlayerAttr
|
||||
@@ -22,6 +27,7 @@ public class HandlerNtfSetAttr : Handler
|
||||
Val = req.Val
|
||||
});
|
||||
}
|
||||
DatabaseHelper.SaveDatabaseType(player.Data);
|
||||
await player.OnHeartBeat();
|
||||
}
|
||||
}
|
||||
|
||||
19
GameServer/Server/Packet/Recv/Player/HandlerNtfSetStrAttr.cs
Normal file
19
GameServer/Server/Packet/Recv/Player/HandlerNtfSetStrAttr.cs
Normal file
@@ -0,0 +1,19 @@
|
||||
using MikuSB.Database;
|
||||
using MikuSB.Proto;
|
||||
|
||||
namespace MikuSB.GameServer.Server.Packet.Recv.Login;
|
||||
|
||||
[Opcode(CmdIds.NtfSetStrAttr)]
|
||||
public class HandlerNtfSetStrAttr : Handler
|
||||
{
|
||||
public override async Task OnHandle(Connection connection, byte[] data, ushort seqNo)
|
||||
{
|
||||
var req = NtfSetStrAttr.Parser.ParseFrom(data);
|
||||
var player = connection.Player!;
|
||||
|
||||
player.SetStrAttr(req.Gid, req.Sid, req.Val);
|
||||
DatabaseHelper.SaveDatabaseType(player.Data);
|
||||
|
||||
await player.OnHeartBeat();
|
||||
}
|
||||
}
|
||||
@@ -102,11 +102,6 @@ static void UpdateResources(string resourcePackagePath, string resourceTargetDir
|
||||
ZipFile.ExtractToDirectory(resourcePackagePath, resourceStagingDirectory, overwriteFiles: true);
|
||||
|
||||
var extractedRoot = Directory.GetDirectories(resourceStagingDirectory).FirstOrDefault() ?? resourceStagingDirectory;
|
||||
var excelOutputSource = Path.Combine(extractedRoot, "ExcelOutput");
|
||||
if (!Directory.Exists(excelOutputSource))
|
||||
throw new DirectoryNotFoundException($"ExcelOutput directory was not found in resource package: {excelOutputSource}");
|
||||
|
||||
var excelOutputTarget = Path.Combine(resourceTargetDirectory, "ExcelOutput");
|
||||
Directory.CreateDirectory(excelOutputTarget);
|
||||
CopyDirectory(excelOutputSource, excelOutputTarget);
|
||||
Directory.CreateDirectory(resourceTargetDirectory);
|
||||
CopyDirectory(extractedRoot, resourceTargetDirectory);
|
||||
}
|
||||
|
||||
@@ -24,8 +24,8 @@ public static class UpdateService
|
||||
"https://github.com/Kei-Luna/MikuSB-Resource/archive/refs/heads/main.zip";
|
||||
private static readonly string[] RequiredResourceFiles =
|
||||
[
|
||||
"card.json",
|
||||
"weapon.json"
|
||||
"item/templates/card.json",
|
||||
"item/templates/weapon.json"
|
||||
];
|
||||
|
||||
public static async Task<bool> TryStartSelfUpdateAsync()
|
||||
@@ -160,11 +160,11 @@ public static class UpdateService
|
||||
|
||||
private static bool AreRequiredResourcesPresent()
|
||||
{
|
||||
var excelOutputPath = Path.Combine(AppContext.BaseDirectory, ConfigManager.Config.Path.ResourcePath, "ExcelOutput");
|
||||
if (!Directory.Exists(excelOutputPath))
|
||||
var resourcePath = Path.Combine(AppContext.BaseDirectory, ConfigManager.Config.Path.ResourcePath);
|
||||
if (!Directory.Exists(resourcePath))
|
||||
return false;
|
||||
|
||||
return RequiredResourceFiles.All(fileName => File.Exists(Path.Combine(excelOutputPath, fileName)));
|
||||
return RequiredResourceFiles.All(fileName => File.Exists(Path.Combine(resourcePath, fileName)));
|
||||
}
|
||||
|
||||
private static async Task DownloadAndInstallResourcesAsync()
|
||||
@@ -187,13 +187,8 @@ public static class UpdateService
|
||||
ZipFile.ExtractToDirectory(resourcePackagePath, resourceStagingDirectory, overwriteFiles: true);
|
||||
|
||||
var extractedRoot = Directory.GetDirectories(resourceStagingDirectory).FirstOrDefault() ?? resourceStagingDirectory;
|
||||
var excelOutputSource = Path.Combine(extractedRoot, "ExcelOutput");
|
||||
if (!Directory.Exists(excelOutputSource))
|
||||
throw new DirectoryNotFoundException($"ExcelOutput directory was not found in resource package: {excelOutputSource}");
|
||||
|
||||
var excelOutputTarget = Path.Combine(resourceTargetDirectory, "ExcelOutput");
|
||||
Directory.CreateDirectory(excelOutputTarget);
|
||||
CopyDirectory(excelOutputSource, excelOutputTarget);
|
||||
Directory.CreateDirectory(resourceTargetDirectory);
|
||||
CopyDirectory(extractedRoot, resourceTargetDirectory);
|
||||
}
|
||||
|
||||
private static bool ConfirmUpdate(string latestVersion)
|
||||
|
||||
@@ -1 +1 @@
|
||||
v=1.9
|
||||
v=2.1
|
||||
Reference in New Issue
Block a user