From 84766e1c34ddb9bc8ea242df4b3838eeb8070b5b Mon Sep 17 00:00:00 2001 From: Mikhail Tyukin Date: Mon, 21 Jul 2025 09:08:13 -0400 Subject: [PATCH] fix namespaces, compiler warnings and messages --- .../LoadRecordInitializerGenerator.cs | 14 +-- EpinelPS/Controllers/AccountController.cs | 14 +-- EpinelPS/Controllers/AdminApiController.cs | 22 ++-- .../Controllers/AdminPanel/AdminController.cs | 11 +- .../Controllers/AdminPanel/UsersController.cs | 14 +-- .../Controllers/LevelInfiniteControlller.cs | 4 +- EpinelPS/Data/Currency.cs | 2 +- EpinelPS/Data/GameData.cs | 112 ++++++++---------- EpinelPS/Data/JsonStaticData.cs | 14 +-- EpinelPS/Database/JsonDb.cs | 61 +++++----- .../LobbyServer/Antibot/BattleReportData.cs | 4 +- .../LobbyServer/Antibot/RecieveAntibotData.cs | 4 +- .../LobbyServer/Archive/ArchiveClearStage.cs | 20 ++-- .../LobbyServer/Archive/ArchiveEnterStage.cs | 8 +- .../Archive/CheckBookmarkScenarioExists.cs | 4 +- .../Archive/CompleteArchiveScenario.cs | 14 +-- .../Archive/FastClearArchiveStage.cs | 19 +-- .../Archive/GetArchiveStoryDungeon.cs | 30 ++--- EpinelPS/LobbyServer/Archive/GetArchives.cs | 8 +- .../LobbyServer/Archive/GetMinigameData.cs | 9 +- .../LobbyServer/Archive/GetNonResettable.cs | 12 +- EpinelPS/LobbyServer/Archive/GetResettable.cs | 8 +- EpinelPS/LobbyServer/Archive/MessengerGet.cs | 16 +-- .../LobbyServer/Arena/ChampionBadgeData.cs | 17 +-- EpinelPS/LobbyServer/Arena/GetArena.cs | 12 +- EpinelPS/LobbyServer/Arena/GetArenaBanInfo.cs | 10 +- EpinelPS/LobbyServer/Arena/GetChampion.cs | 10 +- EpinelPS/LobbyServer/Arena/GetSpecialArena.cs | 12 +- .../Arena/ShowSpecialArenaReward.cs | 10 +- EpinelPS/LobbyServer/Auth/AuthLogout.cs | 2 +- EpinelPS/LobbyServer/Auth/DoEnterServer.cs | 12 +- EpinelPS/LobbyServer/Auth/DoIntlAuth.cs | 8 +- EpinelPS/LobbyServer/Badge/DeleteBadge.cs | 8 +- EpinelPS/LobbyServer/Badge/SyncBadge.cs | 8 +- .../Campaign/CampaignPackageGetAll.cs | 4 +- .../LobbyServer/Campaign/GetCampaignField.cs | 20 ++-- .../Campaign/GetFieldObjectsCount.cs | 8 +- EpinelPS/LobbyServer/Campaign/ObtainItem.cs | 16 +-- EpinelPS/LobbyServer/Campaign/SaveField.cs | 6 +- .../LobbyServer/Campaign/SaveFieldObject.cs | 8 +- .../Character/ChangeSynchroDevice.cs | 14 +-- .../LobbyServer/Character/Counsel/Check.cs | 4 +- .../Character/Counsel/DoCounsel.cs | 9 +- .../LobbyServer/Character/DoLimitBreak.cs | 16 +-- .../Character/GetCharacterAttractiveList.cs | 12 +- .../Character/GetCharacterCostume.cs | 4 +- .../LobbyServer/Character/GetCharacterData.cs | 12 +- .../LobbyServer/Character/GetSynchrodevice.cs | 22 ++-- EpinelPS/LobbyServer/Character/LevelUp.cs | 18 +-- .../LobbyServer/Character/ObtainEpReward.cs | 12 +- .../Character/RegisterSynchroDevice.cs | 12 +- EpinelPS/LobbyServer/Character/ResetLevel.cs | 18 +-- .../Character/SetCharacterCostume.cs | 8 +- .../LobbyServer/Character/SkillLevelUp.cs | 26 ++-- .../LobbyServer/Character/SynchroAddSlot.cs | 10 +- .../LobbyServer/Character/SynchroLevelUp.cs | 12 +- .../Character/UnregisterSynchroDevice.cs | 16 +-- EpinelPS/LobbyServer/Character/UpgradeCore.cs | 16 +-- .../LobbyServer/Client/CheckClientVersion.cs | 8 +- .../LobbyServer/ContentsOpen/GetUnlocked.cs | 8 +- .../ContentsOpen/SetUnlockButton.cs | 8 +- .../ContentsOpen/SetUnlockPopup.cs | 8 +- EpinelPS/LobbyServer/EmptyHandler.cs | 4 +- EpinelPS/LobbyServer/Episode/ListMission.cs | 4 +- .../Event/CheckBookmarkScenarioExists.cs | 4 +- .../LobbyServer/Event/CheckScenarioExists.cs | 6 +- .../Event/CollectSystem/ListField.cs | 7 +- .../Event/CompleteEventScenario.cs | 11 +- EpinelPS/LobbyServer/Event/EnterEventField.cs | 8 +- EpinelPS/LobbyServer/Event/EventLoginGet.cs | 23 ++-- EpinelPS/LobbyServer/Event/EventTypes.cs | 107 ++++++++--------- .../Event/Field/ListPasswordDoor.cs | 9 +- .../LobbyServer/Event/GetChallengeStage.cs | 14 ++- .../LobbyServer/Event/GetClearedMission.cs | 8 +- .../LobbyServer/Event/GetEventScenario.cs | 6 +- EpinelPS/LobbyServer/Event/GetJoinedEvent.cs | 21 ++-- EpinelPS/LobbyServer/Event/ListEvents.cs | 21 ++-- .../Event/Minigame/CE002/GetCe002Data.cs | 6 +- .../Event/Minigame/CE006/GetSBStats.cs | 6 +- .../LobbyServer/Event/Mission/GetClearList.cs | 4 +- .../LobbyServer/Event/Shop/ListProductList.cs | 6 +- .../Event/StoryEvent/EnterStage.cs | 8 +- .../Event/StoryEvent/GetStoryDungeon.cs | 24 ++-- .../FavoriteItem/GetFavoriteItemLibrary.cs | 6 +- .../FavoriteItem/ListFavoriteItem.cs | 6 +- .../FavoriteItem/ListFavoriteItemQuests.cs | 6 +- EpinelPS/LobbyServer/Friend/GetFriends.cs | 4 +- .../LobbyServer/Gacha/CheckGachaDailyEvent.cs | 27 +++-- EpinelPS/LobbyServer/Gacha/ExecGacha.cs | 56 ++++----- .../LobbyServer/Gacha/ExecuteEventGacha.cs | 80 ++++++------- EpinelPS/LobbyServer/Gacha/GetPayback.cs | 4 +- EpinelPS/LobbyServer/Gacha/ListPity.cs | 4 +- EpinelPS/LobbyServer/GetCurrentTime.cs | 12 +- EpinelPS/LobbyServer/GetGacha.cs | 6 +- EpinelPS/LobbyServer/Guild/RecommendList.cs | 4 +- .../LobbyServer/Intercept/AnomalousData.cs | 6 +- .../LobbyServer/Intercept/AnomalousEnter.cs | 4 +- .../Intercept/AnomalousFastClear.cs | 4 +- .../LobbyServer/Intercept/AnomalousFinish.cs | 4 +- .../LobbyServer/Intercept/GetInterceptData.cs | 4 +- .../LobbyServer/Intercept/InterceptCheck.cs | 4 +- .../LobbyServer/Intercept/InterceptClear.cs | 10 +- .../LobbyServer/Intercept/InterceptEnter.cs | 6 +- .../Intercept/InterceptFastClear.cs | 4 +- .../Inventory/ClearAllEquipment.cs | 12 +- .../LobbyServer/Inventory/ClearEquipment.cs | 8 +- .../LobbyServer/Inventory/GetInventoryData.cs | 8 +- .../Inventory/IncreaseEquipmentExp.cs | 40 +++---- EpinelPS/LobbyServer/Inventory/UsePiece.cs | 28 ++--- .../LobbyServer/Inventory/UseRandomBox.cs | 8 +- .../LobbyServer/Inventory/UseTimeReward.cs | 8 +- .../LobbyServer/Inventory/WearEquipment.cs | 12 +- .../Inventory/WearEquipmentList.cs | 14 +-- EpinelPS/LobbyServer/Jukebox/SetTableId.cs | 6 +- .../LobbyServer/Liberate/ChooseCharacter.cs | 13 +- .../LobbyServer/Liberate/GetLiberateData.cs | 6 +- .../LobbyServer/Liberate/GetProgressList.cs | 6 +- EpinelPS/LobbyServer/LobbyHandler.cs | 26 ++-- EpinelPS/LobbyServer/LobbyMsgHandler.cs | 18 +-- .../LobbyServer/LobbyUser/AquireUserTitle.cs | 6 +- .../LobbyServer/LobbyUser/BuyWallpaper.cs | 6 +- .../LobbyServer/LobbyUser/EnterLobbyServer.cs | 43 +++---- .../LobbyUser/GetAllFeatureFlags.cs | 4 +- .../LobbyServer/LobbyUser/GetContentsData.cs | 10 +- .../LobbyServer/LobbyUser/GetFieldTalkList.cs | 6 +- EpinelPS/LobbyServer/LobbyUser/GetMail.cs | 7 +- .../LobbyUser/GetProfileCardPossession.cs | 4 +- .../LobbyUser/GetProfileDecoration.cs | 14 ++- .../LobbyServer/LobbyUser/GetProfileFrame.cs | 6 +- .../LobbyServer/LobbyUser/GetScenarioList.cs | 8 +- .../LobbyUser/GetSpecialLobbySlotData.cs | 4 +- EpinelPS/LobbyServer/LobbyUser/GetUser.cs | 15 +-- .../LobbyServer/LobbyUser/GetUserProfile.cs | 10 +- .../LobbyUser/GetUserScenarioExist.cs | 10 +- .../LobbyServer/LobbyUser/GetUserTitle.cs | 8 +- .../LobbyUser/GetUserTitleCounter.cs | 4 +- .../LobbyServer/LobbyUser/GetWallpaper.cs | 6 +- .../LobbyUser/GetWallpaperInventory.cs | 6 +- .../LobbyServer/LobbyUser/MarkNoticeRead.cs | 6 +- EpinelPS/LobbyServer/LobbyUser/ReadMail.cs | 4 +- EpinelPS/LobbyServer/LobbyUser/SetNickname.cs | 12 +- .../LobbyServer/LobbyUser/SetNicknameFree.cs | 6 +- .../LobbyUser/SetNicknameInTutorial.cs | 6 +- .../LobbyServer/LobbyUser/SetProfileData.cs | 6 +- .../LobbyServer/LobbyUser/SetProfileIcon.cs | 6 +- .../LobbyServer/LobbyUser/SetProfileTeam.cs | 8 +- .../LobbyUser/SetScenarioCompleted.cs | 6 +- .../LobbyServer/LobbyUser/SetUserTitle.cs | 6 +- .../LobbyServer/LobbyUser/SetWallpaper.cs | 6 +- .../LobbyUser/Tutorial/SetTutorial.cs | 8 +- .../LobbyUser/UnmarkUsertitleBadge.cs | 6 +- EpinelPS/LobbyServer/Lostsector/ClearStage.cs | 12 +- EpinelPS/LobbyServer/Lostsector/EnterStage.cs | 4 +- EpinelPS/LobbyServer/Lostsector/GetField.cs | 14 +-- .../Lostsector/GetLostSectorData.cs | 13 +- .../Lostsector/GetPerfectReward.cs | 11 +- EpinelPS/LobbyServer/Lostsector/ObtainItem.cs | 10 +- EpinelPS/LobbyServer/Lostsector/Open.cs | 8 +- EpinelPS/LobbyServer/Lostsector/Play.cs | 8 +- .../LobbyServer/Lostsector/QuickClearStage.cs | 6 +- EpinelPS/LobbyServer/Lostsector/SaveField.cs | 10 +- .../LobbyServer/Lostsector/SaveFieldObject.cs | 6 +- .../Messenger/EnterFinishSubquest.cs | 10 +- .../LobbyServer/Messenger/EnterMessenger.cs | 10 +- .../LobbyServer/Messenger/EnterSubquest.cs | 10 +- .../LobbyServer/Messenger/FinishSubquest.cs | 14 +-- .../LobbyServer/Messenger/GetDailyMessage.cs | 4 +- EpinelPS/LobbyServer/Messenger/GetMessages.cs | 10 +- .../LobbyServer/Messenger/GetPickedMessage.cs | 4 +- .../LobbyServer/Messenger/GetRandomPick.cs | 4 +- EpinelPS/LobbyServer/Messenger/ProceedMsg.cs | 6 +- .../LobbyServer/Minigame/GetNksv2Minigame.cs | 4 +- .../Minigame/IslandAdventure/EventCurrency.cs | 6 +- .../IslandAdventure/EventInventory.cs | 6 +- .../Minigame/IslandAdventure/FishSpotCount.cs | 6 +- .../GetFishingStepUpRewardStatus.cs | 4 +- .../GetPhotoStepUpRewardStatus.cs | 4 +- .../Minigame/IslandAdventure/ListMission.cs | 4 +- .../Minigame/IslandAdventure/PhotoData.cs | 6 +- .../Minigame/PlaySoda/GetChallengeInfo.cs | 4 +- .../Minigame/nksv2/CompleteScenario.cs | 6 +- .../LobbyServer/Minigame/nksv2/GetScenario.cs | 6 +- .../Misc/GachaGetAllShutdownFlags.cs | 6 +- EpinelPS/LobbyServer/Misc/GetFeatureFlags.cs | 8 +- .../LobbyServer/Misc/GetMaintenanceNotice.cs | 10 +- .../LobbyServer/Misc/GetResourceHosts2.cs | 10 +- EpinelPS/LobbyServer/Misc/GetSentryParams.cs | 10 +- EpinelPS/LobbyServer/Misc/GetServerInfo.cs | 11 +- .../LobbyServer/Misc/GetStaticDataPack.cs | 18 +-- .../LobbyServer/Misc/GetStaticDataPackNew.cs | 18 +-- .../LobbyServer/Misc/GetUserOnlineStateLog.cs | 6 +- EpinelPS/LobbyServer/Misc/Retroactive.cs | 6 +- .../Mission/GetAchievementRewardedData.cs | 4 +- EpinelPS/LobbyServer/Mission/GetAllRewards.cs | 6 +- .../LobbyServer/Mission/ObtainAchievement.cs | 12 +- EpinelPS/LobbyServer/Mission/ObtainDaily.cs | 10 +- EpinelPS/LobbyServer/Mission/ObtainWeekly.cs | 10 +- .../Mission/Rewards/GetDailyRewards.cs | 4 +- .../Mission/Rewards/GetJukeboxRewards.cs | 6 +- .../Mission/Rewards/GetWeeklyRewards.cs | 4 +- EpinelPS/LobbyServer/Outpost/BuildBuilding.cs | 10 +- .../LobbyServer/Outpost/CheckInfracore.cs | 4 +- .../Outpost/ClearTacticAcademyLesson.cs | 18 +-- EpinelPS/LobbyServer/Outpost/DoWipeout.cs | 8 +- .../LobbyServer/Outpost/GetDispatchList.cs | 4 +- .../LobbyServer/Outpost/GetOutpostData.cs | 14 +-- .../LobbyServer/Outpost/GetRecycleRoomData.cs | 6 +- .../Outpost/GetTacticAcademyData.cs | 6 +- EpinelPS/LobbyServer/Outpost/JukeboxGet.cs | 4 +- .../LobbyServer/Outpost/JukeboxPlayHistory.cs | 6 +- .../Outpost/MemorialGetMemoryList.cs | 6 +- .../Outpost/ObtainOutpostReward.cs | 12 +- .../Outpost/Recycle/LevelUpResearch.cs | 26 ++-- .../Outpost/Recycle/RunResearch.cs | 10 +- .../LobbyServer/Outpost/SetBuildingDone.cs | 6 +- .../LobbyServer/Outpost/ShowBattleReward.cs | 24 ++-- .../PartyMatch/ListPartyMatchInvitations.cs | 6 +- .../Pass/GetActiveEventPassData.cs | 4 +- .../Pass/GetActiveFreeRewardData.cs | 2 +- .../LobbyServer/Pass/GetActivePassData.cs | 20 ++-- EpinelPS/LobbyServer/Pass/buyrank.cs | 6 +- EpinelPS/LobbyServer/Pass/obtainreward.cs | 6 +- .../Ranking/GetRankAchieventTop.cs | 4 +- EpinelPS/LobbyServer/Ranking/GetTopRanks.cs | 4 +- .../LobbyServer/Ranking/UpdateServerReward.cs | 4 +- EpinelPS/LobbyServer/Shop/GetProductList.cs | 8 +- EpinelPS/LobbyServer/Shop/GetProductOffers.cs | 6 +- EpinelPS/LobbyServer/Shop/GetShop.cs | 13 +- .../LobbyServer/Shop/GetShopProductList.cs | 4 +- .../Shop/InApp/GetMarketingDetail.cs | 8 +- .../InApp/GetMonthlySubscriptionReward.cs | 4 +- .../Shop/InApp/GetProductListInApp.cs | 4 +- .../Shop/InApp/GetRetrivableProductList.cs | 4 +- .../InApp/GetSetupDataForCustomPackage.cs | 4 +- .../Shop/PackageShop/GetPackagePopupState.cs | 6 +- .../PackageShopGetCampaignPackage.cs | 4 +- .../Shop/PackageShop/SetPopupPackageState.cs | 4 +- EpinelPS/LobbyServer/Shop/SeenProductOffer.cs | 4 +- EpinelPS/LobbyServer/Sidestory/ClearBattle.cs | 6 +- .../Sidestory/ClearSideStoryCut.cs | 6 +- .../Sidestory/ClearSideStoryStage.cs | 10 +- EpinelPS/LobbyServer/Sidestory/EnterBattle.cs | 6 +- .../Sidestory/EnterSidestoryStage.cs | 6 +- .../LobbyServer/Sidestory/ListSideStory.cs | 8 +- .../LobbyServer/Simroom/GetSimRoomData.cs | 6 +- EpinelPS/LobbyServer/Simroom/Quit.cs | 4 +- .../LobbyServer/Simroom/SelectDifficulty.cs | 4 +- .../LobbyServer/Soloraid/GetSoloraidPeriod.cs | 8 +- EpinelPS/LobbyServer/Stage/CheckCleared.cs | 10 +- EpinelPS/LobbyServer/Stage/ClearStage.cs | 30 ++--- EpinelPS/LobbyServer/Stage/EnterStage.cs | 10 +- EpinelPS/LobbyServer/Stage/FastClear.cs | 8 +- EpinelPS/LobbyServer/Stage/GetStage.cs | 12 +- .../LobbyServer/Stage/GetStageClearInfo.cs | 6 +- .../LobbyServer/Subquest/EnrollSubquest.cs | 6 +- .../LobbyServer/Subquest/ListSubquests.cs | 8 +- EpinelPS/LobbyServer/Subquest/SetTrigger.cs | 6 +- EpinelPS/LobbyServer/Team/GetTeamData.cs | 8 +- .../Team/ListSupportCharacterCount.cs | 6 +- EpinelPS/LobbyServer/Team/SetTeam.cs | 19 ++- EpinelPS/LobbyServer/Tower/ClearTower.cs | 10 +- EpinelPS/LobbyServer/Tower/EnterTower.cs | 6 +- EpinelPS/LobbyServer/Tower/FastClearTower.cs | 4 +- EpinelPS/LobbyServer/Tower/GetTowerData.cs | 16 +-- .../LobbyServer/Trigger/FinishMainQuest.cs | 8 +- .../LobbyServer/Trigger/GetMainQuestData.cs | 8 +- .../Trigger/ObtainMainQuestReward.cs | 15 +-- EpinelPS/LobbyServer/Trigger/TriggerSync.cs | 10 +- EpinelPS/LobbyServer/Wallet/GetWallet.cs | 11 +- .../LobbyServer/Wallet/WalletRefreshCharge.cs | 9 +- EpinelPS/Models/Admin/ModUserModel.cs | 6 +- EpinelPS/Program.cs | 84 ++++++------- EpinelPS/Utils/AdminCommands.cs | 55 ++++----- EpinelPS/Utils/AssetDownloadUtil.cs | 32 +++-- EpinelPS/Utils/FormulaUtils.cs | 6 +- EpinelPS/Utils/InterceptionHelper.cs | 6 +- EpinelPS/Utils/JsonPrototypes.cs | 2 +- EpinelPS/Utils/Logging.cs | 22 ++-- EpinelPS/Utils/NetUtils.cs | 68 +++++------ EpinelPS/Utils/PacketDecryption.cs | 68 ++++++----- EpinelPS/Utils/PacketPathAttribute.cs | 8 +- EpinelPS/Utils/ProgressBar.cs | 6 +- EpinelPS/Utils/RewardUtils.cs | 14 +-- EpinelPS/Utils/Rng.cs | 7 +- EpinelPS/Views/Shared/_Layout.cshtml | 12 +- ServerSelector/GameSettings.cs | 5 +- ServerSelector/SearchReplace.cs | 9 +- ServerSelector/ServerSwitcher.cs | 34 +++--- ServerSelector/Views/MainView.axaml.cs | 6 +- 289 files changed, 1669 insertions(+), 1665 deletions(-) diff --git a/EpinelPS.Analyzers/LoadRecordInitializerGenerator.cs b/EpinelPS.Analyzers/LoadRecordInitializerGenerator.cs index 85ef9f9..db49424 100644 --- a/EpinelPS.Analyzers/LoadRecordInitializerGenerator.cs +++ b/EpinelPS.Analyzers/LoadRecordInitializerGenerator.cs @@ -13,7 +13,7 @@ public class LoadRecordInitializerGenerator : IIncrementalGenerator public void Initialize(IncrementalGeneratorInitializationContext context) { // Step 1: Filter for field declarations with attributes - var fieldDeclarations = context.SyntaxProvider + IncrementalValueProvider> fieldDeclarations = context.SyntaxProvider .CreateSyntaxProvider( predicate: static (node, _) => node is FieldDeclarationSyntax fds && fds.AttributeLists.Count > 0, transform: static (ctx, _) => GetTargetFieldInfo(ctx) @@ -25,7 +25,7 @@ public class LoadRecordInitializerGenerator : IIncrementalGenerator // Step 2: Generate the code context.RegisterSourceOutput(fieldDeclarations, (spc, fieldInfos) => { - var source = GenerateInitializerCode(fieldInfos!); + string source = GenerateInitializerCode(fieldInfos!); spc.AddSource("GameDataInitializer.g.cs", SourceText.From(source, Encoding.UTF8)); }); } @@ -35,7 +35,7 @@ public class LoadRecordInitializerGenerator : IIncrementalGenerator if (context.Node is not FieldDeclarationSyntax fieldDecl) return null; - var variable = fieldDecl.Declaration.Variables.FirstOrDefault(); + VariableDeclaratorSyntax? variable = fieldDecl.Declaration.Variables.FirstOrDefault(); if (variable == null) return null; @@ -45,7 +45,7 @@ public class LoadRecordInitializerGenerator : IIncrementalGenerator if (symbol.Type is not INamedTypeSymbol namedSymbol) return null; - foreach (var attr in symbol.GetAttributes()) + foreach (AttributeData attr in symbol.GetAttributes()) { if (attr.ConstructorArguments.Length == 2) @@ -69,7 +69,7 @@ public class LoadRecordInitializerGenerator : IIncrementalGenerator private static string GenerateInitializerCode(ImmutableArray fieldInfos) { - var sb = new StringBuilder(); + StringBuilder sb = new(); sb.AppendLine("using System.Collections.Generic;"); sb.AppendLine("using System.Threading.Tasks;"); sb.AppendLine(); @@ -81,9 +81,9 @@ public class LoadRecordInitializerGenerator : IIncrementalGenerator sb.AppendLine("\tpublic static async Task InitializeGameData(IProgress progress = null)"); sb.AppendLine("\t{"); - foreach (var info in fieldInfos) + foreach (LoadFieldInfo info in fieldInfos) { - var tempVar = $"data_{info.FieldName}"; + string tempVar = $"data_{info.FieldName}"; sb.AppendLine($"\t\tvar {tempVar} = await {info.ContainingClass}.Instance.LoadZip<{info.RecordTypeName}>(\"{info.FileName}\", progress);"); sb.AppendLine($"\t\tforeach (var obj in {tempVar})"); sb.AppendLine("\t\t{"); diff --git a/EpinelPS/Controllers/AccountController.cs b/EpinelPS/Controllers/AccountController.cs index 81741b7..a5f03e7 100644 --- a/EpinelPS/Controllers/AccountController.cs +++ b/EpinelPS/Controllers/AccountController.cs @@ -14,11 +14,11 @@ namespace EpinelPS.Controllers [Route("login")] public string Login(string seq, [FromBody] LoginEndpoint2Req req) { - foreach (var item in JsonDb.Instance.Users) + foreach (User item in JsonDb.Instance.Users) { if (item.Username == req.account && item.Password == req.password) { - var tok = CreateLauncherTokenForUser(item); + AccessToken tok = CreateLauncherTokenForUser(item); item.LastLogin = DateTime.UtcNow; JsonDb.Save(); @@ -70,7 +70,7 @@ namespace EpinelPS.Controllers public string RegisterAccount(string seq, [FromBody] RegisterEPReq req) { // check if the account already exists - foreach (var item in JsonDb.Instance.Users) + foreach (User item in JsonDb.Instance.Users) { if (item.Username == req.account) { @@ -78,10 +78,10 @@ namespace EpinelPS.Controllers } } - var uid = (ulong)new Random().Next(1, int.MaxValue); + ulong uid = (ulong)new Random().Next(1, int.MaxValue); // Check if we havent generated a UID that exists - foreach (var item in JsonDb.Instance.Users) + foreach (User item in JsonDb.Instance.Users) { if (item.ID == uid) { @@ -89,7 +89,7 @@ namespace EpinelPS.Controllers } } - var user = new User() + User user = new() { ID = uid, Password = req.password, @@ -101,7 +101,7 @@ namespace EpinelPS.Controllers JsonDb.Instance.Users.Add(user); - var tok = CreateLauncherTokenForUser(user); + AccessToken tok = CreateLauncherTokenForUser(user); return "{\"expire\":" + tok.ExpirationTime + ",\"is_login\":false,\"msg\":\"Success\",\"register_time\":" + user.RegisterTime + ",\"ret\":0,\"seq\":\"" + seq + "\",\"token\":\"" + tok.Token + "\",\"uid\":\"" + user.ID + "\"}"; } diff --git a/EpinelPS/Controllers/AdminApiController.cs b/EpinelPS/Controllers/AdminApiController.cs index e104c78..f50612c 100644 --- a/EpinelPS/Controllers/AdminApiController.cs +++ b/EpinelPS/Controllers/AdminApiController.cs @@ -27,9 +27,9 @@ namespace EpinelPS.Controllers string passwordHash = Convert.ToHexString(md5.ComputeHash(Encoding.ASCII.GetBytes(b.Password))).ToLower(); foreach (User item in JsonDb.Instance.Users) { - if (item.Username == b.Username) + if (item.Username == b.Username && item.Password != null) { - if (item.Password.ToLower() == passwordHash) + if (item.Password.Equals(passwordHash, StringComparison.OrdinalIgnoreCase)) { user = item; } @@ -76,52 +76,52 @@ namespace EpinelPS.Controllers return AdminCommands.CompleteStage(ulong.Parse(req.p1), req.p2); case "addallcharacters": { - var user = JsonDb.Instance.Users.FirstOrDefault(x => x.ID == ulong.Parse(req.p1)); + User? user = JsonDb.Instance.Users.FirstOrDefault(x => x.ID == ulong.Parse(req.p1)); if (user == null) return new RunCmdResponse() { error = "invalid user ID" }; return AdminCommands.AddAllCharacters(user); } case "addallmaterials": { - var user = JsonDb.Instance.Users.FirstOrDefault(x => x.ID == ulong.Parse(req.p1)); + User? user = JsonDb.Instance.Users.FirstOrDefault(x => x.ID == ulong.Parse(req.p1)); if (user == null) return new RunCmdResponse() { error = "invalid user ID" }; return AdminCommands.AddAllMaterials(user, int.Parse(req.p2)); } case "SetLevel": { - var user = JsonDb.Instance.Users.FirstOrDefault(x => x.ID == ulong.Parse(req.p1)); + User? user = JsonDb.Instance.Users.FirstOrDefault(x => x.ID == ulong.Parse(req.p1)); if (user == null) return new RunCmdResponse() { error = "invalid user ID" }; return AdminCommands.SetCharacterLevel(user, int.Parse(req.p2)); } case "SetSkillLevel": { - var user = JsonDb.Instance.Users.FirstOrDefault(x => x.ID == ulong.Parse(req.p1)); + User? user = JsonDb.Instance.Users.FirstOrDefault(x => x.ID == ulong.Parse(req.p1)); if (user == null) return new RunCmdResponse() { error = "invalid user ID" }; return AdminCommands.SetSkillLevel(user, int.Parse(req.p2)); } case "SetCoreLevel": { - var user = JsonDb.Instance.Users.FirstOrDefault(x => x.ID == ulong.Parse(req.p1)); + User? user = JsonDb.Instance.Users.FirstOrDefault(x => x.ID == ulong.Parse(req.p1)); if (user == null) return new RunCmdResponse() { error = "invalid user ID" }; return AdminCommands.SetCoreLevel(user, int.Parse(req.p2)); } case "finishalltutorials": { - var user = JsonDb.Instance.Users.FirstOrDefault(x => x.ID == ulong.Parse(req.p1)); + User? user = JsonDb.Instance.Users.FirstOrDefault(x => x.ID == ulong.Parse(req.p1)); if (user == null) return new RunCmdResponse() { error = "invalid user ID" }; return AdminCommands.FinishAllTutorials(user); } case "AddCharacter": { - var user = JsonDb.Instance.Users.FirstOrDefault(x => x.ID == ulong.Parse(req.p1)); + User? user = JsonDb.Instance.Users.FirstOrDefault(x => x.ID == ulong.Parse(req.p1)); if (user == null) return new RunCmdResponse() { error = "invalid user ID" }; return AdminCommands.AddCharacter(user, int.Parse(req.p2)); } case "AddItem": { - var user = JsonDb.Instance.Users.FirstOrDefault(x => x.ID == ulong.Parse(req.p1)); + User? user = JsonDb.Instance.Users.FirstOrDefault(x => x.ID == ulong.Parse(req.p1)); if (user == null) return new RunCmdResponse() { error = "invalid user ID" }; - var s = req.p2.Split("-"); + string[] s = req.p2.Split("-"); return AdminCommands.AddItem(user, int.Parse(s[0]), int.Parse(s[1])); } case "updateServer": diff --git a/EpinelPS/Controllers/AdminPanel/AdminController.cs b/EpinelPS/Controllers/AdminPanel/AdminController.cs index 1b6ca12..9717845 100644 --- a/EpinelPS/Controllers/AdminPanel/AdminController.cs +++ b/EpinelPS/Controllers/AdminPanel/AdminController.cs @@ -15,17 +15,12 @@ namespace EpinelPS.Controllers.AdminPanel public static bool CheckAuth(HttpContext context) { - string? token = context.Request.Cookies["token"]; - if (token == null) - { - token = context.Request.Headers.Authorization.ToString().Replace("Bearer ", ""); - } + string? token = context.Request.Cookies["token"] ?? context.Request.Headers.Authorization.ToString().Replace("Bearer ", ""); // TODO better authentication - if (JsonDb.Instance.AdminAuthTokens.ContainsKey(token)) + if (JsonDb.Instance.AdminAuthTokens.TryGetValue(token, out ulong userId)) { - ulong userId = JsonDb.Instance.AdminAuthTokens[token]; - var user = JsonDb.Instance.Users.FirstOrDefault(x => x.ID == userId); + User? user = JsonDb.Instance.Users.FirstOrDefault(x => x.ID == userId); if (user != null && user.IsAdmin) return true; } diff --git a/EpinelPS/Controllers/AdminPanel/UsersController.cs b/EpinelPS/Controllers/AdminPanel/UsersController.cs index b3944ec..9cfdc52 100644 --- a/EpinelPS/Controllers/AdminPanel/UsersController.cs +++ b/EpinelPS/Controllers/AdminPanel/UsersController.cs @@ -24,7 +24,7 @@ namespace EpinelPS.Controllers.AdminPanel { if (!AdminController.CheckAuth(HttpContext)) return Redirect("/admin/"); - var user = JsonDb.Instance.Users.Where(x => x.ID == id).FirstOrDefault(); + User? user = JsonDb.Instance.Users.Where(x => x.ID == id).FirstOrDefault(); if (user == null) { return NotFound(); @@ -35,9 +35,9 @@ namespace EpinelPS.Controllers.AdminPanel { IsAdmin = user.IsAdmin, IsBanned = user.IsBanned, - Nickname = user.Nickname, + Nickname = user.Nickname ?? "Unknown nickname", sickpulls = user.sickpulls, - Username = user.Username, + Username = user.Username ?? "Unknown username", ID = user.ID } ); @@ -52,7 +52,7 @@ namespace EpinelPS.Controllers.AdminPanel if (!ModelState.IsValid) throw new Exception("model state invalid"); - var user = JsonDb.Instance.Users.Where(x => x.ID == id).FirstOrDefault(); + User? user = JsonDb.Instance.Users.Where(x => x.ID == id).FirstOrDefault(); if (user == null) { return NotFound(); @@ -84,7 +84,7 @@ namespace EpinelPS.Controllers.AdminPanel { if (!AdminController.CheckAuth(HttpContext)) return Redirect("/admin/"); - var user = JsonDb.Instance.Users.Where(x => x.ID == id).FirstOrDefault(); + User? user = JsonDb.Instance.Users.Where(x => x.ID == id).FirstOrDefault(); if (user == null) { return NotFound(); @@ -115,10 +115,10 @@ namespace EpinelPS.Controllers.AdminPanel { return BadRequest(); } - + // TODO: use bcrypt - var userToUpdate = JsonDb.Instance.Users.Where(s => s.ID == id).FirstOrDefault(); + User? userToUpdate = JsonDb.Instance.Users.Where(s => s.ID == id).FirstOrDefault(); if (userToUpdate == null) { return NotFound(); diff --git a/EpinelPS/Controllers/LevelInfiniteControlller.cs b/EpinelPS/Controllers/LevelInfiniteControlller.cs index 92e9426..8b4842b 100644 --- a/EpinelPS/Controllers/LevelInfiniteControlller.cs +++ b/EpinelPS/Controllers/LevelInfiniteControlller.cs @@ -24,11 +24,11 @@ namespace EpinelPS.Controllers [Route("auth/login")] public string AuthLogin(string seq, [FromBody] LoginEndpoint1Req req) { - foreach (var tok in JsonDb.Instance.LauncherAccessTokens) + foreach (AccessToken tok in JsonDb.Instance.LauncherAccessTokens) { if (tok.Token == req.channel_info.account_token) { - var user = JsonDb.Instance.Users.Find(x => x.ID == tok.UserID); + User? user = JsonDb.Instance.Users.Find(x => x.ID == tok.UserID); if (user != null) { // todo: they use another token here, but we will reuse the same one. diff --git a/EpinelPS/Data/Currency.cs b/EpinelPS/Data/Currency.cs index 3aa39af..94ea982 100644 --- a/EpinelPS/Data/Currency.cs +++ b/EpinelPS/Data/Currency.cs @@ -1,4 +1,4 @@ -namespace EpinelPS +namespace EpinelPS.Data { public enum CurrencyType { diff --git a/EpinelPS/Data/GameData.cs b/EpinelPS/Data/GameData.cs index 3ca5619..3a8e7b3 100644 --- a/EpinelPS/Data/GameData.cs +++ b/EpinelPS/Data/GameData.cs @@ -16,10 +16,7 @@ namespace EpinelPS.Data { get { - if (_instance == null) - { - _instance = BuildAsync().Result; - } + _instance ??= BuildAsync().Result; return _instance; } @@ -33,7 +30,7 @@ namespace EpinelPS.Data private ZipFile MainZip; private MemoryStream ZipStream; private int totalFiles = 1; - private int currentFile = 0; + private int currentFile; // TODO: all of the data types need to be changed to match the game private bool UseMemoryPack = false; @@ -209,7 +206,7 @@ namespace EpinelPS.Data await Load(); Logging.WriteLine("Preparing"); - var stopWatch = new Stopwatch(); + Stopwatch stopWatch = new(); stopWatch.Start(); await Instance.Parse(); @@ -226,14 +223,14 @@ namespace EpinelPS.Data ZipStream = new(); // process json data - var rawBytes = File.ReadAllBytes(filePath); + byte[] rawBytes = File.ReadAllBytes(filePath); Sha256Hash = SHA256.HashData(rawBytes); Size = rawBytes.Length; // process mpk data if (!string.IsNullOrEmpty(mpkFilePath)) { - var rawBytes2 = File.ReadAllBytes(mpkFilePath); + byte[] rawBytes2 = File.ReadAllBytes(mpkFilePath); MpkHash = SHA256.HashData(rawBytes2); MpkSize = rawBytes2.Length; } @@ -247,7 +244,7 @@ namespace EpinelPS.Data #region Data loading private static byte[] PresharedValue = [0xCB, 0xC2, 0x1C, 0x6F, 0xF3, 0xF5, 0x07, 0xF5, 0x05, 0xBA, 0xCA, 0xD4, 0x98, 0x28, 0x84, 0x1F, 0xF0, 0xD1, 0x38, 0xC7, 0x61, 0xDF, 0xD6, 0xE6, 0x64, 0x9A, 0x85, 0x13, 0x3E, 0x1A, 0x6A, 0x0C, 0x68, 0x0E, 0x2B, 0xC4, 0xDF, 0x72, 0xF8, 0xC6, 0x55, 0xE4, 0x7B, 0x14, 0x36, 0x18, 0x3B, 0xA7, 0xD1, 0x20, 0x81, 0x22, 0xD1, 0xA9, 0x18, 0x84, 0x65, 0x13, 0x0B, 0xED, 0xA3, 0x00, 0xE5, 0xD9]; - private static RSAParameters LoadParameters = new RSAParameters() + private static RSAParameters LoadParameters = new() { Exponent = [0x01, 0x00, 0x01], Modulus = [0x89, 0xD6, 0x66, 0x00, 0x7D, 0xFC, 0x7D, 0xCE, 0x83, 0xA6, 0x62, 0xE3, 0x1A, 0x5E, 0x9A, 0x53, 0xC7, 0x8A, 0x27, 0xF3, 0x67, 0xC1, 0xF3, 0xD4, 0x37, 0xFE, 0x50, 0x6D, 0x38, 0x45, 0xDF, 0x7E, 0x73, 0x5C, 0xF4, 0x9D, 0x40, 0x4C, 0x8C, 0x63, 0x21, 0x97, 0xDF, 0x46, 0xFF, 0xB2, 0x0D, 0x0E, 0xDB, 0xB2, 0x72, 0xB4, 0xA8, 0x42, 0xCD, 0xEE, 0x48, 0x06, 0x74, 0x4F, 0xE9, 0x56, 0x6E, 0x9A, 0xB1, 0x60, 0x18, 0xBC, 0x86, 0x0B, 0xB6, 0x32, 0xA7, 0x51, 0x00, 0x85, 0x7B, 0xC8, 0x72, 0xCE, 0x53, 0x71, 0x3F, 0x64, 0xC2, 0x25, 0x58, 0xEF, 0xB0, 0xC9, 0x1D, 0xE3, 0xB3, 0x8E, 0xFC, 0x55, 0xCF, 0x8B, 0x02, 0xA5, 0xC8, 0x1E, 0xA7, 0x0E, 0x26, 0x59, 0xA8, 0x33, 0xA5, 0xF1, 0x11, 0xDB, 0xCB, 0xD3, 0xA7, 0x1F, 0xB1, 0xC6, 0x10, 0x39, 0xC8, 0x31, 0x1D, 0x60, 0xDB, 0x0D, 0xA4, 0x13, 0x4B, 0x2B, 0x0E, 0xF3, 0x6F, 0x69, 0xCB, 0xA8, 0x62, 0x03, 0x69, 0xE6, 0x95, 0x6B, 0x8D, 0x11, 0xF6, 0xAF, 0xD9, 0xC2, 0x27, 0x3A, 0x32, 0x12, 0x05, 0xC3, 0xB1, 0xE2, 0x81, 0x4B, 0x40, 0xF8, 0x8B, 0x8D, 0xBA, 0x1F, 0x55, 0x60, 0x2C, 0x09, 0xC6, 0xED, 0x73, 0x96, 0x32, 0xAF, 0x5F, 0xEE, 0x8F, 0xEB, 0x5B, 0x93, 0xCF, 0x73, 0x13, 0x15, 0x6B, 0x92, 0x7B, 0x27, 0x0A, 0x13, 0xF0, 0x03, 0x4D, 0x6F, 0x5E, 0x40, 0x7B, 0x9B, 0xD5, 0xCE, 0xFC, 0x04, 0x97, 0x7E, 0xAA, 0xA3, 0x53, 0x2A, 0xCF, 0xD2, 0xD5, 0xCF, 0x52, 0xB2, 0x40, 0x61, 0x28, 0xB1, 0xA6, 0xF6, 0x78, 0xFB, 0x69, 0x9A, 0x85, 0xD6, 0xB9, 0x13, 0x14, 0x6D, 0xC4, 0x25, 0x36, 0x17, 0xDB, 0x54, 0x0C, 0xD8, 0x77, 0x80, 0x9A, 0x00, 0x62, 0x83, 0xDD, 0xB0, 0x06, 0x64, 0xD0, 0x81, 0x5B, 0x0D, 0x23, 0x9E, 0x88, 0xBD], @@ -255,50 +252,47 @@ namespace EpinelPS.Data }; private void LoadGameData(string file, StaticData data) { - using var fileStream = File.Open(file, FileMode.Open, FileAccess.Read); + using FileStream fileStream = File.Open(file, FileMode.Open, FileAccess.Read); - var a = new Rfc2898DeriveBytes(PresharedValue, data.GetSalt2Bytes(), 10000, HashAlgorithmName.SHA256); - var key2 = a.GetBytes(32); + Rfc2898DeriveBytes a = new(PresharedValue, data.GetSalt2Bytes(), 10000, HashAlgorithmName.SHA256); + byte[] key2 = a.GetBytes(32); byte[] decryptionKey = key2[0..16]; byte[] iv = key2[16..32]; - var aes = Aes.Create(); + Aes aes = Aes.Create(); aes.KeySize = 128; aes.BlockSize = 128; aes.Mode = CipherMode.CBC; aes.Key = decryptionKey; aes.IV = iv; - var transform = aes.CreateDecryptor(); - using CryptoStream stream = new CryptoStream(fileStream, transform, CryptoStreamMode.Read); + ICryptoTransform transform = aes.CreateDecryptor(); + using CryptoStream stream = new(fileStream, transform, CryptoStreamMode.Read); - using MemoryStream ms = new MemoryStream(); + using MemoryStream ms = new(); stream.CopyTo(ms); - var bytes = ms.ToArray(); - var zip = new ZipFile(ms, false); + byte[] bytes = ms.ToArray(); + ZipFile zip = new(ms, false); - var signEntry = zip.GetEntry("sign"); - if (signEntry == null) throw new Exception("error 1"); - var dataEntry = zip.GetEntry("data"); - if (dataEntry == null) throw new Exception("error 2"); + ZipEntry signEntry = zip.GetEntry("sign") ?? throw new Exception("error 1"); + ZipEntry dataEntry = zip.GetEntry("data") ?? throw new Exception("error 2"); + Stream signStream = zip.GetInputStream(signEntry); + Stream dataStream = zip.GetInputStream(dataEntry); - var signStream = zip.GetInputStream(signEntry); - var dataStream = zip.GetInputStream(dataEntry); - - using MemoryStream signMs = new MemoryStream(); + using MemoryStream signMs = new(); signStream.CopyTo(signMs); - using MemoryStream dataMs = new MemoryStream(); + using MemoryStream dataMs = new(); dataStream.CopyTo(dataMs); dataMs.Position = 0; - var rsa = RSA.Create(LoadParameters); + RSA rsa = RSA.Create(LoadParameters); if (!rsa.VerifyData(dataMs, signMs.ToArray(), HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1)) throw new Exception("error 3"); dataMs.Position = 0; - var keyDec2 = new Rfc2898DeriveBytes(PresharedValue, data.GetSalt1Bytes(), 10000, HashAlgorithmName.SHA256); - var key3 = keyDec2.GetBytes(32); + Rfc2898DeriveBytes keyDec2 = new(PresharedValue, data.GetSalt1Bytes(), 10000, HashAlgorithmName.SHA256); + byte[] key3 = keyDec2.GetBytes(32); byte[] val2 = key3[0..16]; byte[] iv2 = key3[16..32]; @@ -326,11 +320,11 @@ namespace EpinelPS.Data $"(actual: {salt.Length}, expected: {blockSize})"); } - var counter = (byte[])salt.Clone(); + byte[] counter = (byte[])salt.Clone(); - var xorMask = new Queue(); + Queue xorMask = new(); - var zeroIv = new byte[blockSize]; + byte[] zeroIv = new byte[blockSize]; ICryptoTransform counterEncryptor = aes.CreateEncryptor(key, zeroIv); int b; @@ -338,12 +332,12 @@ namespace EpinelPS.Data { if (xorMask.Count == 0) { - var counterModeBlock = new byte[blockSize]; + byte[] counterModeBlock = new byte[blockSize]; counterEncryptor.TransformBlock( counter, 0, counter.Length, counterModeBlock, 0); - for (var i2 = counter.Length - 1; i2 >= 0; i2--) + for (int i2 = counter.Length - 1; i2 >= 0; i2--) { if (++counter[i2] != 0) { @@ -351,31 +345,27 @@ namespace EpinelPS.Data } } - foreach (var b2 in counterModeBlock) + foreach (byte b2 in counterModeBlock) { xorMask.Enqueue(b2); } } - var mask = xorMask.Dequeue(); + byte mask = xorMask.Dequeue(); outputStream.WriteByte((byte)(((byte)b) ^ mask)); } } public static async Task Load() { - var targetFile = await AssetDownloadUtil.DownloadOrGetFileAsync(GameConfig.Root.StaticData.Url, CancellationToken.None); - if (targetFile == null) throw new Exception("static data download fail"); - + string? targetFile = await AssetDownloadUtil.DownloadOrGetFileAsync(GameConfig.Root.StaticData.Url, CancellationToken.None) ?? throw new Exception("static data download fail"); if (string.IsNullOrEmpty(GameConfig.Root.StaticDataMpk.Url)) { _instance = new(targetFile, ""); return; } - var targetFile2 = await AssetDownloadUtil.DownloadOrGetFileAsync(GameConfig.Root.StaticDataMpk.Url, CancellationToken.None); - if (targetFile2 == null) throw new Exception("static data download fail"); - + string? targetFile2 = await AssetDownloadUtil.DownloadOrGetFileAsync(GameConfig.Root.StaticDataMpk.Url, CancellationToken.None) ?? throw new Exception("static data download fail"); _instance = new(targetFile, targetFile2); } #endregion @@ -386,7 +376,7 @@ namespace EpinelPS.Data { if (UseMemoryPack) entry = entry.Replace(".json", ".mpk"); - var fileEntry = MainZip.GetEntry(entry); + ZipEntry fileEntry = MainZip.GetEntry(entry); if (fileEntry == null) { Logging.WriteLine(entry + " does not exist in static data", LogType.Error); @@ -397,12 +387,12 @@ namespace EpinelPS.Data if (UseMemoryPack) { - var stream = MainZip.GetInputStream(fileEntry); + Stream stream = MainZip.GetInputStream(fileEntry); deserializedObject = await MemoryPackSerializer.DeserializeAsync(stream); } else { - var obj = await JsonSerializer.DeserializeAsync>(MainZip.GetInputStream(fileEntry), JsonDb.IndentedJson) ?? throw new Exception("deserializeobject failed"); + DataTable obj = await JsonSerializer.DeserializeAsync>(MainZip.GetInputStream(fileEntry), JsonDb.IndentedJson) ?? throw new Exception("deserializeobject failed"); deserializedObject = [.. obj.records]; } @@ -415,14 +405,14 @@ namespace EpinelPS.Data } catch(Exception ex) { - Logging.WriteLine($"Failed to parse {entry}:\n{ex.ToString()}\n", LogType.Error); + Logging.WriteLine($"Failed to parse {entry}:\n{ex}\n", LogType.Error); return []; } } public async Task Parse() { - using var progress = new ProgressBar(); + using ProgressBar progress = new(); totalFiles = GameDataInitializer.TotalFiles; if (totalFiles == 0) throw new Exception("Source generator failed."); @@ -436,9 +426,9 @@ namespace EpinelPS.Data item.Name.StartsWith("LostSectorMap/") ) { - var x = await LoadZip(item.Name, progress); + MapInfo[] x = await LoadZip(item.Name, progress); - foreach (var map in x) + foreach (MapInfo map in x) { MapData.Add(map.id, map); } @@ -455,7 +445,7 @@ namespace EpinelPS.Data public MainQuestCompletionRecord? GetMainQuestForStageClearCondition(int stage) { if (QuestDataRecords.Count == 0) throw new Exception("QuestDataRecords should not be empty"); - foreach (var item in QuestDataRecords) + foreach (KeyValuePair item in QuestDataRecords) { if (item.Value.condition_id == stage) { @@ -489,7 +479,7 @@ namespace EpinelPS.Data int prevValue = 0; for (int i = 1; i < UserExpDataRecords.Count + 1; i++) { - var item = UserExpDataRecords[i]; + UserExpRecord item = UserExpDataRecords[i]; if (prevValue < targetExp) { @@ -507,7 +497,7 @@ namespace EpinelPS.Data { for (int i = 1; i < UserExpDataRecords.Count + 1; i++) { - var item = UserExpDataRecords[i]; + UserExpRecord item = UserExpDataRecords[i]; if (targetLevel == item.level) { @@ -524,7 +514,7 @@ namespace EpinelPS.Data { string difficulty = keys[1]; - foreach (var item in ChapterCampaignData) + foreach (KeyValuePair item in ChapterCampaignData) { if (difficulty == "Normal" && item.Value.chapter == chapterNum) { @@ -545,7 +535,7 @@ namespace EpinelPS.Data } public int GetNormalChapterNumberFromFieldName(string field) { - foreach (var item in ChapterCampaignData) + foreach (KeyValuePair item in ChapterCampaignData) { if (item.Value.field_id == field) { @@ -557,7 +547,7 @@ namespace EpinelPS.Data } public IEnumerable GetAllCostumes() { - foreach (var item in CharacterCostumeTable) + foreach (KeyValuePair item in CharacterCostumeTable) { yield return item.Value.id; } @@ -576,9 +566,9 @@ namespace EpinelPS.Data internal IEnumerable GetStageIdsForChapter(int chapterNumber, bool normal) { ChapterMod mod = normal ? ChapterMod.Normal : ChapterMod.Hard; - foreach (var item in StageDataRecords) + foreach (KeyValuePair item in StageDataRecords) { - var data = item.Value; + CampaignStageRecord data = item.Value; int chVal = data.chapter_id - 1; @@ -616,7 +606,7 @@ namespace EpinelPS.Data // Example bonus stage format: "d_main_18af_06" // Example stage with suffix format: "d_main_01_01_s" or "d_main_01_01_e" - var parts = scenarioGroupId.Split('_'); + string[] parts = scenarioGroupId.Split('_'); if (parts.Length < 4) { @@ -634,7 +624,7 @@ namespace EpinelPS.Data // Extract chapter number (remove "af" if present) string chapterNumberStr = isBonusStage && chapterPart.EndsWith("af") - ? chapterPart.Substring(0, chapterPart.Length - 2) // Remove "af" + ? chapterPart[..^2] // Remove "af" : chapterPart; // Parse chapter and stage numbers @@ -674,7 +664,7 @@ namespace EpinelPS.Data internal int GetConditionReward(int groupId, long damage) { - var results = ConditionRewards.Where(x => x.Value.group == groupId && x.Value.value_min <= damage && x.Value.value_max >= damage); + IEnumerable> results = ConditionRewards.Where(x => x.Value.group == groupId && x.Value.value_min <= damage && x.Value.value_max >= damage); if (results.Any()) return results.FirstOrDefault().Value.reward_id; else return 0; diff --git a/EpinelPS/Data/JsonStaticData.cs b/EpinelPS/Data/JsonStaticData.cs index 4202eac..c380cab 100644 --- a/EpinelPS/Data/JsonStaticData.cs +++ b/EpinelPS/Data/JsonStaticData.cs @@ -95,8 +95,8 @@ namespace EpinelPS.Data public int shortcut_value; public string name_localkey = ""; public string description_localkey = ""; - public int next_main_quest_id = 0; - public int reward_id = 0; + public int next_main_quest_id; + public int reward_id; public ScenarioType scenario_type; public string episode_id = ""; public int target_chapter_id; @@ -156,7 +156,7 @@ namespace EpinelPS.Data public class ClearedTutorialData { public int id; - public int VersionGroup = 0; + public int VersionGroup; public int GroupId; public int ClearedStageId; public int NextId; @@ -176,15 +176,15 @@ namespace EpinelPS.Data /// /// amount of credits required /// - public int gold = 0; + public int gold; /// /// amount of battle data required /// - public int character_exp = 0; + public int character_exp; /// /// amount of core dust required /// - public int character_exp2 = 0; + public int character_exp2; } public class TacticAcademyLessonReward { @@ -854,7 +854,7 @@ namespace EpinelPS.Data public int id; public int sector; public int exploration_reward; - public string field_id; + public string field_id { get; set; } = ""; public int sector_clear_condition; public ContentOpenType open_condition_type; public int open_condition_value; diff --git a/EpinelPS/Database/JsonDb.cs b/EpinelPS/Database/JsonDb.cs index 6c2f0b3..9f252d6 100644 --- a/EpinelPS/Database/JsonDb.cs +++ b/EpinelPS/Database/JsonDb.cs @@ -64,7 +64,7 @@ namespace EpinelPS.Database } public class EventData { - public List CompletedScenarios = new(); + public List CompletedScenarios = []; public int Diff = 0; // Default value for Diff public int LastStage = 0; // Default value for LastStage } @@ -114,10 +114,10 @@ namespace EpinelPS.Database } public class OutpostBuffs { - public List CreditPercentages = new List(); - public List CoreDustPercentages = new List(); - public List BattleDataPercentages = new List(); - public List UserExpPercentages = new List(); + public List CreditPercentages = []; + public List CoreDustPercentages = []; + public List BattleDataPercentages = []; + public List UserExpPercentages = []; public List GetPercentages(CurrencyType currency) { @@ -182,7 +182,7 @@ namespace EpinelPS.Database Location = badge.Location; Seq = badge.Seq; BadgeContent = badge.BadgeContent; - BadgeGuid = new Guid(badge.BadgeGuid.ToArray()).ToString(); + BadgeGuid = new Guid([.. badge.BadgeGuid]).ToString(); } public NetBadge ToNet() @@ -244,14 +244,14 @@ namespace EpinelPS.Database public class User { // User info - public string Username = ""; - public string Password = ""; - public string PlayerName = ""; + public string? Username; + public string? Password; + public string? PlayerName; public ulong ID; public long RegisterTime; public int LastNormalStageCleared; public int LastHardStageCleared; - public string Nickname = "SomePlayer"; + public string? Nickname; public int ProfileIconId = 39900; public bool ProfileIconIsPrism = false; public int ProfileFrame = 25; @@ -273,14 +273,14 @@ namespace EpinelPS.Database public Dictionary Currency = new() { { CurrencyType.ContentStamina, 2 } }; - public List SynchroSlots = new List(); + public List SynchroSlots = []; public bool SynchroDeviceUpgraded = false; public int SynchroDeviceLevel = 200; public Dictionary ResearchProgress = []; public ResetableData ResetableData = new(); public WeeklyResetableData WeeklyResetableData = new(); - public List Items = new(); + public List Items = []; public List Characters = []; public long[] RepresentationTeamDataNew = []; public Dictionary ClearedTutorialData = []; @@ -293,9 +293,9 @@ namespace EpinelPS.Database public List LobbyDecoBackgroundList = []; - public Dictionary UserTeams = new Dictionary(); - public Dictionary MainQuestData = new(); - public Dictionary SubQuestData = new(); + public Dictionary UserTeams = []; + public Dictionary MainQuestData = []; + public Dictionary SubQuestData = []; public int InfraCoreExp = 0; public int InfraCoreLvl = 1; public UserPointData userPointData = new(); @@ -305,17 +305,17 @@ namespace EpinelPS.Database public NetOutpostBattleLevel OutpostBattleLevel = new() { Level = 1 }; public int GachaTutorialPlayCount = 0; public List CompletedTacticAcademyLessons = []; - public List CompletedSideStoryStages = new(); + public List CompletedSideStoryStages = []; - public List Memorial = new(); - public List JukeboxBgm = new List(); + public List Memorial = []; + public List JukeboxBgm = []; - public Dictionary TowerProgress = new Dictionary(); + public Dictionary TowerProgress = []; public JukeBoxSetting LobbyMusic = new() { Location = NetJukeboxLocation.Lobby, TableId = 2, Type = NetJukeboxBgmType.JukeboxTableId }; public JukeBoxSetting CommanderMusic = new() { Location = NetJukeboxLocation.CommanderRoom, TableId = 5, Type = NetJukeboxBgmType.JukeboxTableId }; public OutpostBuffs OutpostBuffs = new(); - public Dictionary ContentsOpenUnlocked = new(); + public Dictionary ContentsOpenUnlocked = []; public List StageClearHistorys = []; @@ -331,7 +331,7 @@ namespace EpinelPS.Database public Dictionary LostSectorData = []; // Event data - public Dictionary EventInfo = new(); + public Dictionary EventInfo = []; public MogMinigameInfo MogInfo = new(); public Trigger AddTrigger(TriggerType type, int value, int conditionId = 0) @@ -423,8 +423,8 @@ namespace EpinelPS.Database public long GetCurrencyVal(CurrencyType type) { - if (Currency.ContainsKey(type)) - return Currency[type]; + if (Currency.TryGetValue(type, out long value)) + return value; else { Currency.Add(type, 0); @@ -433,8 +433,7 @@ namespace EpinelPS.Database } public void AddCurrency(CurrencyType type, long val) { - if (Currency.ContainsKey(type)) Currency[type] += val; - else Currency.Add(type, val); + if (!Currency.TryAdd(type, val)) Currency[type] += val; } public bool SubtractCurrency(CurrencyType type, long val) { @@ -508,13 +507,11 @@ namespace EpinelPS.Database internal bool GetSynchro(long csn) { - return SynchroSlots.Where(x => x.CharacterSerialNumber == csn).Count() >= 1; + return SynchroSlots.Where(x => x.CharacterSerialNumber == csn).Any(); } internal int GetCharacterLevel(int csn) { - var c = GetCharacterBySerialNumber(csn); - if (c == null) throw new Exception("failed to lookup character"); - + var c = GetCharacterBySerialNumber(csn) ?? throw new Exception("failed to lookup character"); return GetCharacterLevel(csn, c.Level); } internal int GetCharacterLevel(int csn, int characterLevel) @@ -640,7 +637,7 @@ namespace EpinelPS.Database public List Users = []; public List LauncherAccessTokens = []; - public Dictionary AdminAuthTokens = new(); + public Dictionary AdminAuthTokens = []; public byte[] LauncherTokenKey = []; public byte[] EncryptionTokenKey = []; @@ -745,7 +742,7 @@ namespace EpinelPS.Database // FieldInfoNew uses MapId instead of ChapterNum_ChapterDifficulty format foreach (var user in Instance.Users) { - Dictionary info = new(); + Dictionary info = []; foreach (var item in user.FieldInfoNew) { if (item.Key.EndsWith("_Normal") || item.Key.EndsWith("_Hard")) @@ -865,7 +862,7 @@ namespace EpinelPS.Database //in the file when its set in public List JukeboxBgm = new List(); //delete when or if it gets fixed - user.JukeboxBgm = new List { 2, 5 }; + user.JukeboxBgm = [2, 5]; } activeJukeboxBgm.AddRange(user.JukeboxBgm); diff --git a/EpinelPS/LobbyServer/Antibot/BattleReportData.cs b/EpinelPS/LobbyServer/Antibot/BattleReportData.cs index 2b98c01..d2f1eab 100644 --- a/EpinelPS/LobbyServer/Antibot/BattleReportData.cs +++ b/EpinelPS/LobbyServer/Antibot/BattleReportData.cs @@ -7,8 +7,8 @@ namespace EpinelPS.LobbyServer.Antibot { protected override async Task HandleAsync() { - var req = await ReadData(); - var response = new ResBattleReportData(); + ReqBattleReportData req = await ReadData(); + ResBattleReportData response = new(); // this is responsible for server side anticheat diff --git a/EpinelPS/LobbyServer/Antibot/RecieveAntibotData.cs b/EpinelPS/LobbyServer/Antibot/RecieveAntibotData.cs index f1ff688..eb1b949 100644 --- a/EpinelPS/LobbyServer/Antibot/RecieveAntibotData.cs +++ b/EpinelPS/LobbyServer/Antibot/RecieveAntibotData.cs @@ -7,11 +7,11 @@ namespace EpinelPS.LobbyServer.Antibot { protected override async Task HandleAsync() { - var req = await ReadData(); + ReqAntibotRecvData req = await ReadData(); // I don't really care about reimplementing the server side anticheat, so return - var response = new ResAntibotRecvData(); + ResAntibotRecvData response = new(); await WriteDataAsync(response); } diff --git a/EpinelPS/LobbyServer/Archive/ArchiveClearStage.cs b/EpinelPS/LobbyServer/Archive/ArchiveClearStage.cs index 36c939c..8924607 100644 --- a/EpinelPS/LobbyServer/Archive/ArchiveClearStage.cs +++ b/EpinelPS/LobbyServer/Archive/ArchiveClearStage.cs @@ -7,19 +7,14 @@ namespace EpinelPS.LobbyServer.Archive { protected override async Task HandleAsync() { - var req = await ReadData(); // has fields EventId, StageId, BattleResult - var evid = req.EventId; - var stgid = req.StageId; - var result = req.BattleResult; // if 2 add to event info as last stage - var user = GetUser(); - - if (user == null) - { - throw new Exception("User not found."); - } + ReqClearArchiveStage req = await ReadData(); // has fields EventId, StageId, BattleResult + int evid = req.EventId; + int stgid = req.StageId; + int result = req.BattleResult; // if 2 add to event info as last stage + User user = GetUser() ?? throw new Exception("User not found."); // Check if the EventInfo exists for the given EventId - if (!user.EventInfo.ContainsKey(evid)) + if (!user.EventInfo.TryGetValue(evid, out EventData? eventData)) { throw new Exception($"Event with ID {evid} not found."); } @@ -27,14 +22,13 @@ namespace EpinelPS.LobbyServer.Archive // Update the EventData if BattleResult is 2 if (result == 1) { - var eventData = user.EventInfo[evid]; // Update the LastStage in EventData eventData.LastStage = stgid; } JsonDb.Save(); - var response = new ResClearArchiveStage(); + ResClearArchiveStage response = new(); // Send the response back to the client await WriteDataAsync(response); diff --git a/EpinelPS/LobbyServer/Archive/ArchiveEnterStage.cs b/EpinelPS/LobbyServer/Archive/ArchiveEnterStage.cs index 3a6855b..3d8e371 100644 --- a/EpinelPS/LobbyServer/Archive/ArchiveEnterStage.cs +++ b/EpinelPS/LobbyServer/Archive/ArchiveEnterStage.cs @@ -7,10 +7,10 @@ namespace EpinelPS.LobbyServer.Archive { protected override async Task HandleAsync() { - var req = await ReadData();// has fields EventId StageId TeamNumber - var evid = req.EventId; - - var response = new ResEnterArchiveStage(); + ReqEnterArchiveStage req = await ReadData();// has fields EventId StageId TeamNumber + int evid = req.EventId; + + ResEnterArchiveStage response = new(); await WriteDataAsync(response); } diff --git a/EpinelPS/LobbyServer/Archive/CheckBookmarkScenarioExists.cs b/EpinelPS/LobbyServer/Archive/CheckBookmarkScenarioExists.cs index 62d1cc2..e7a7783 100644 --- a/EpinelPS/LobbyServer/Archive/CheckBookmarkScenarioExists.cs +++ b/EpinelPS/LobbyServer/Archive/CheckBookmarkScenarioExists.cs @@ -7,9 +7,9 @@ namespace EpinelPS.LobbyServer.Archive { protected override async Task HandleAsync() { - var req = await ReadData(); + ReqExistScenarioBookmark req = await ReadData(); - var response = new ResExistScenarioBookmark(); + ResExistScenarioBookmark response = new(); // TODO await WriteDataAsync(response); } diff --git a/EpinelPS/LobbyServer/Archive/CompleteArchiveScenario.cs b/EpinelPS/LobbyServer/Archive/CompleteArchiveScenario.cs index ac70b32..f094bab 100644 --- a/EpinelPS/LobbyServer/Archive/CompleteArchiveScenario.cs +++ b/EpinelPS/LobbyServer/Archive/CompleteArchiveScenario.cs @@ -9,15 +9,15 @@ namespace EpinelPS.LobbyServer.Archive { protected override async Task HandleAsync() { - var req = await ReadData(); // req has EventId, ScenarioId, DialogType fields - var evid = req.EventId; - var scenid = req.ScenarioId; - var dialtyp = req.DialogType; + ReqCompleteArchiveScenario req = await ReadData(); // req has EventId, ScenarioId, DialogType fields + int evid = req.EventId; + string scenid = req.ScenarioId; + int dialtyp = req.DialogType; - var user = GetUser(); + User user = GetUser(); // Ensure we are working with the user's EventInfo and not CompletedScenarios - if (!user.EventInfo.TryGetValue(evid, out var evt)) + if (!user.EventInfo.TryGetValue(evid, out EventData? evt)) { // Create a new EventData if the event doesn't exist evt = new EventData(); @@ -31,7 +31,7 @@ namespace EpinelPS.LobbyServer.Archive } JsonDb.Save(); // Prepare and send the response - var response = new ResCompleteArchiveScenario(); + ResCompleteArchiveScenario response = new(); await WriteDataAsync(response); } } diff --git a/EpinelPS/LobbyServer/Archive/FastClearArchiveStage.cs b/EpinelPS/LobbyServer/Archive/FastClearArchiveStage.cs index 653b7fe..338f310 100644 --- a/EpinelPS/LobbyServer/Archive/FastClearArchiveStage.cs +++ b/EpinelPS/LobbyServer/Archive/FastClearArchiveStage.cs @@ -7,29 +7,22 @@ namespace EpinelPS.LobbyServer.Archive { protected override async Task HandleAsync() { - var req = await ReadData(); - var evid = req.EventId; - var stgid = req.StageId; + ReqFastClearArchiveStage req = await ReadData(); + int evid = req.EventId; + int stgid = req.StageId; - var user = GetUser(); - - if (user == null) - { - throw new Exception("User not found."); - } + User user = GetUser() ?? throw new Exception("User not found."); // Check if the EventInfo exists for the given EventId - if (!user.EventInfo.ContainsKey(evid)) + if (!user.EventInfo.TryGetValue(evid, out EventData? eventData)) { throw new Exception($"Event with ID {evid} not found."); } - - var eventData = user.EventInfo[evid]; // Update the LastStage in EventData eventData.LastStage = stgid; JsonDb.Save(); - var response = new ResFastClearArchiveStage(); + ResFastClearArchiveStage response = new(); // Send the response back to the client await WriteDataAsync(response); diff --git a/EpinelPS/LobbyServer/Archive/GetArchiveStoryDungeon.cs b/EpinelPS/LobbyServer/Archive/GetArchiveStoryDungeon.cs index ba06e6b..6103331 100644 --- a/EpinelPS/LobbyServer/Archive/GetArchiveStoryDungeon.cs +++ b/EpinelPS/LobbyServer/Archive/GetArchiveStoryDungeon.cs @@ -8,33 +8,33 @@ namespace EpinelPS.LobbyServer.Archive { protected override async Task HandleAsync() { - var req = await ReadData(); // has EventId field - var evid = req.EventId; - var user = GetUser(); + ReqGetArchiveStoryDungeon req = await ReadData(); // has EventId field + int evid = req.EventId; + User user = GetUser(); // Ensure the EventInfo dictionary contains the requested EventId - if (!user.EventInfo.ContainsKey(evid)) + if (!user.EventInfo.TryGetValue(evid, out EventData? eventData)) { - // Create a new default entry for the missing EventId - user.EventInfo[evid] = new EventData + eventData = new EventData { - CompletedScenarios = new List(), // Initialize empty list + CompletedScenarios = [], // Initialize empty list Diff = 0, // Default difficulty LastStage = 0 // Default last cleared stage }; + // Create a new default entry for the missing EventId + user.EventInfo[evid] = eventData; JsonDb.Save(); } - var eventData = user.EventInfo[evid]; - // Prepare the response - var response = new ResGetArchiveStoryDungeon(); - - // Populate team data - response.TeamData = new NetUserTeamData + ResGetArchiveStoryDungeon response = new() { - LastContentsTeamNumber = 1, - Type = 1 + // Populate team data + TeamData = new NetUserTeamData + { + LastContentsTeamNumber = 1, + Type = 1 + } }; // Populate the last cleared stage diff --git a/EpinelPS/LobbyServer/Archive/GetArchives.cs b/EpinelPS/LobbyServer/Archive/GetArchives.cs index 3c613d1..e89a7dd 100644 --- a/EpinelPS/LobbyServer/Archive/GetArchives.cs +++ b/EpinelPS/LobbyServer/Archive/GetArchives.cs @@ -8,19 +8,19 @@ namespace EpinelPS.LobbyServer.Archive { protected override async Task HandleAsync() { - var req = await ReadData(); + ReqGetArchiveRecord req = await ReadData(); - var response = new ResGetArchiveRecord(); + ResGetArchiveRecord response = new(); // Explicitly select IDs from the records - var allIds = GameData.Instance.archiveRecordManagerTable.Values.Select(record => record.id).ToList(); + List allIds = [.. GameData.Instance.archiveRecordManagerTable.Values.Select(record => record.id)]; // Add the IDs to the response lists response.ArchiveRecordManagerList.AddRange(allIds); response.UnlockedArchiveRecordList.AddRange(allIds); // Get entries with record_type "EventQuest" - var eventQuestRecords = GameData.Instance.archiveRecordManagerTable.Values.Where(record => record.record_type == "EventQuest").ToList(); + List eventQuestRecords = [.. GameData.Instance.archiveRecordManagerTable.Values.Where(record => record.record_type == "EventQuest")]; response.ArchiveEventQuest = new(); response.ArchiveEventQuest.UnlockedArchiveRecordManagerEventQuestIdList.AddRange(eventQuestRecords.Select(record => record.id)); diff --git a/EpinelPS/LobbyServer/Archive/GetMinigameData.cs b/EpinelPS/LobbyServer/Archive/GetMinigameData.cs index 4459689..ae82ae4 100644 --- a/EpinelPS/LobbyServer/Archive/GetMinigameData.cs +++ b/EpinelPS/LobbyServer/Archive/GetMinigameData.cs @@ -7,11 +7,12 @@ namespace EpinelPS.LobbyServer.Archive { protected override async Task HandleAsync() { - var req = await ReadData(); + ReqGetArchiveMiniGameData req = await ReadData(); - var response = new ResGetArchiveMiniGameData(); - - response.Json = "{}"; + ResGetArchiveMiniGameData response = new() + { + Json = "{}" + }; // TODO await WriteDataAsync(response); diff --git a/EpinelPS/LobbyServer/Archive/GetNonResettable.cs b/EpinelPS/LobbyServer/Archive/GetNonResettable.cs index f32a2ad..6ae2e21 100644 --- a/EpinelPS/LobbyServer/Archive/GetNonResettable.cs +++ b/EpinelPS/LobbyServer/Archive/GetNonResettable.cs @@ -9,17 +9,17 @@ namespace EpinelPS.LobbyServer.Archive { protected override async Task HandleAsync() { - var req = await ReadData(); // req has EventId field - var evid = req.EventId; - var response = new ResGetNonResettableArchiveScenario(); + ReqGetNonResettableArchiveScenario req = await ReadData(); // req has EventId field + int evid = req.EventId; + ResGetNonResettableArchiveScenario response = new(); // Access the GameData instance - var gameData = GameData.Instance; + GameData gameData = GameData.Instance; if (evid == 130002) { // Directly use the archiveEventQuestRecords dictionary - foreach (var record in gameData.archiveEventQuestRecords.Values) + foreach (ArchiveEventQuestRecord record in gameData.archiveEventQuestRecords.Values) { if (record.event_quest_manager_id == evid) { @@ -34,7 +34,7 @@ namespace EpinelPS.LobbyServer.Archive else { // Directly use the archiveEventStoryRecords dictionary - foreach (var record in gameData.archiveEventStoryRecords.Values) + foreach (ArchiveEventStoryRecord record in gameData.archiveEventStoryRecords.Values) { if (record.event_id == evid) { diff --git a/EpinelPS/LobbyServer/Archive/GetResettable.cs b/EpinelPS/LobbyServer/Archive/GetResettable.cs index cdbeee9..f6573d6 100644 --- a/EpinelPS/LobbyServer/Archive/GetResettable.cs +++ b/EpinelPS/LobbyServer/Archive/GetResettable.cs @@ -7,11 +7,11 @@ namespace EpinelPS.LobbyServer.Archive { protected override async Task HandleAsync() { - var req = await ReadData(); - var response = new ResGetResettableArchiveScenario(); // has ScenarioIdList field that takes in strings - + ReqGetResettableArchiveScenario req = await ReadData(); + ResGetResettableArchiveScenario response = new(); // has ScenarioIdList field that takes in strings + // Retrieve stage IDs from GameData - var stageIds = GameData.Instance.archiveEventDungeonStageRecords.Values.Select(record => record.stage_id.ToString()).ToList(); + List stageIds = [.. GameData.Instance.archiveEventDungeonStageRecords.Values.Select(record => record.stage_id.ToString())]; // Add them to the response response.ScenarioIdList.Add(stageIds); diff --git a/EpinelPS/LobbyServer/Archive/MessengerGet.cs b/EpinelPS/LobbyServer/Archive/MessengerGet.cs index 7a5feab..32158d1 100644 --- a/EpinelPS/LobbyServer/Archive/MessengerGet.cs +++ b/EpinelPS/LobbyServer/Archive/MessengerGet.cs @@ -9,18 +9,18 @@ namespace EpinelPS.LobbyServer.Archive protected override async Task HandleAsync() { // Read the request containing ArchiveMessengerGroupId - var req = await ReadData(); - var groupId = req.ArchiveMessengerGroupId; + ReqGetArchiveMessenger req = await ReadData(); + int groupId = req.ArchiveMessengerGroupId; // Initialize the response object - var response = new ResGetArchiveMessenger(); - - // Get the relevant data from ArchiveMessengerConditionTable - var gameData = GameData.Instance; + ResGetArchiveMessenger response = new(); - if (gameData.archiveMessengerConditionRecords.TryGetValue(groupId, out var conditionRecord)) + // Get the relevant data from ArchiveMessengerConditionTable + GameData gameData = GameData.Instance; + + if (gameData.archiveMessengerConditionRecords.TryGetValue(groupId, out ArchiveMessengerConditionRecord? conditionRecord)) { - foreach (var condition in conditionRecord.archive_messenger_condition_list) + foreach (ArchiveMessengerConditionList condition in conditionRecord.archive_messenger_condition_list) { // Add each condition as a NetArchiveMessage in the response response.ArchiveMessageList.Add(new NetArchiveMessage diff --git a/EpinelPS/LobbyServer/Arena/ChampionBadgeData.cs b/EpinelPS/LobbyServer/Arena/ChampionBadgeData.cs index 0d45ffc..8e430b9 100644 --- a/EpinelPS/LobbyServer/Arena/ChampionBadgeData.cs +++ b/EpinelPS/LobbyServer/Arena/ChampionBadgeData.cs @@ -8,14 +8,15 @@ namespace EpinelPS.LobbyServer.Arena { protected override async Task HandleAsync() { - var req = await ReadData(); - var response = new ResGetChampionArenaDataByBadge(); - - // TODO - response.Schedule = new NetChampionArenaSchedule(); - response.NextSchedule = new NetChampionArenaSchedule(); - response.ChampionArenaContentsState = ChampionArenaContentsState.SeasonClosed; - response.CurrentOrLastSeasonStartAt = Timestamp.FromDateTime(DateTime.UtcNow.AddDays(5)); + ReqGetChampionArenaDataByBadge req = await ReadData(); + ResGetChampionArenaDataByBadge response = new() + { + // TODO + Schedule = new NetChampionArenaSchedule(), + NextSchedule = new NetChampionArenaSchedule(), + ChampionArenaContentsState = ChampionArenaContentsState.SeasonClosed, + CurrentOrLastSeasonStartAt = Timestamp.FromDateTime(DateTime.UtcNow.AddDays(5)) + }; await WriteDataAsync(response); } diff --git a/EpinelPS/LobbyServer/Arena/GetArena.cs b/EpinelPS/LobbyServer/Arena/GetArena.cs index 3407f23..e23f0a9 100644 --- a/EpinelPS/LobbyServer/Arena/GetArena.cs +++ b/EpinelPS/LobbyServer/Arena/GetArena.cs @@ -8,12 +8,14 @@ namespace EpinelPS.LobbyServer.Arena { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqGetArena req = await ReadData(); + Database.User user = GetUser(); - var response = new ResGetArena(); - response.BanInfo = new NetArenaBanInfo() { Description = "Not Implemented", StartAt = Timestamp.FromDateTimeOffset(DateTimeOffset.UtcNow), EndAt = Timestamp.FromDateTimeOffset(DateTimeOffset.UtcNow.AddYears(10)) }; - response.User = new NetArenaData() {User = LobbyHandler.CreateWholeUserDataFromDbUser(user) }; + ResGetArena response = new() + { + BanInfo = new NetArenaBanInfo() { Description = "Not Implemented", StartAt = Timestamp.FromDateTimeOffset(DateTimeOffset.UtcNow), EndAt = Timestamp.FromDateTimeOffset(DateTimeOffset.UtcNow.AddYears(10)) }, + User = new NetArenaData() { User = LobbyHandler.CreateWholeUserDataFromDbUser(user) } + }; await WriteDataAsync(response); diff --git a/EpinelPS/LobbyServer/Arena/GetArenaBanInfo.cs b/EpinelPS/LobbyServer/Arena/GetArenaBanInfo.cs index aa32888..f13888e 100644 --- a/EpinelPS/LobbyServer/Arena/GetArenaBanInfo.cs +++ b/EpinelPS/LobbyServer/Arena/GetArenaBanInfo.cs @@ -8,11 +8,13 @@ namespace EpinelPS.LobbyServer.Arena { protected override async Task HandleAsync() { - var req = await ReadData(); + ReqGetArenaBanInfo req = await ReadData(); - var response = new ResGetArenaBanInfo(); - response.RookieArenaBanInfo = new NetArenaBanInfo() { Description = "Not Implemented", StartAt = Timestamp.FromDateTimeOffset(DateTimeOffset.UtcNow), EndAt = Timestamp.FromDateTimeOffset(DateTimeOffset.UtcNow.AddYears(10)) }; - response.SpecialArenaBanInfo = new NetArenaBanInfo() { Description = "Not Implemented", StartAt = Timestamp.FromDateTimeOffset(DateTimeOffset.UtcNow), EndAt = Timestamp.FromDateTimeOffset(DateTimeOffset.UtcNow.AddYears(10)) }; + ResGetArenaBanInfo response = new() + { + RookieArenaBanInfo = new NetArenaBanInfo() { Description = "Not Implemented", StartAt = Timestamp.FromDateTimeOffset(DateTimeOffset.UtcNow), EndAt = Timestamp.FromDateTimeOffset(DateTimeOffset.UtcNow.AddYears(10)) }, + SpecialArenaBanInfo = new NetArenaBanInfo() { Description = "Not Implemented", StartAt = Timestamp.FromDateTimeOffset(DateTimeOffset.UtcNow), EndAt = Timestamp.FromDateTimeOffset(DateTimeOffset.UtcNow.AddYears(10)) } + }; await WriteDataAsync(response); } diff --git a/EpinelPS/LobbyServer/Arena/GetChampion.cs b/EpinelPS/LobbyServer/Arena/GetChampion.cs index 95608ce..be06b91 100644 --- a/EpinelPS/LobbyServer/Arena/GetChampion.cs +++ b/EpinelPS/LobbyServer/Arena/GetChampion.cs @@ -8,11 +8,13 @@ namespace EpinelPS.LobbyServer.Arena { protected override async Task HandleAsync() { - var req = await ReadData(); + ReqGetChampionArena req = await ReadData(); + + ResGetChampionArena response = new() + { + Schedule = new NetChampionArenaSchedule() + }; - var response = new ResGetChampionArena(); - response.Schedule = new NetChampionArenaSchedule(); - // TODO await WriteDataAsync(response); diff --git a/EpinelPS/LobbyServer/Arena/GetSpecialArena.cs b/EpinelPS/LobbyServer/Arena/GetSpecialArena.cs index 9b530a6..f92275c 100644 --- a/EpinelPS/LobbyServer/Arena/GetSpecialArena.cs +++ b/EpinelPS/LobbyServer/Arena/GetSpecialArena.cs @@ -8,12 +8,14 @@ namespace EpinelPS.LobbyServer.Arena { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqGetSpecialArena req = await ReadData(); + Database.User user = GetUser(); - var response = new ResGetSpecialArena(); - response.BanInfo = new NetArenaBanInfo() { Description = "Not Implemented", StartAt = Timestamp.FromDateTimeOffset(DateTimeOffset.UtcNow), EndAt = Timestamp.FromDateTimeOffset(DateTimeOffset.UtcNow.AddYears(10)) }; - response.User = new NetArenaData() {User = LobbyHandler.CreateWholeUserDataFromDbUser(user) }; + ResGetSpecialArena response = new() + { + BanInfo = new NetArenaBanInfo() { Description = "Not Implemented", StartAt = Timestamp.FromDateTimeOffset(DateTimeOffset.UtcNow), EndAt = Timestamp.FromDateTimeOffset(DateTimeOffset.UtcNow.AddYears(10)) }, + User = new NetArenaData() { User = LobbyHandler.CreateWholeUserDataFromDbUser(user) } + }; await WriteDataAsync(response); } diff --git a/EpinelPS/LobbyServer/Arena/ShowSpecialArenaReward.cs b/EpinelPS/LobbyServer/Arena/ShowSpecialArenaReward.cs index 4c85a62..5aa5419 100644 --- a/EpinelPS/LobbyServer/Arena/ShowSpecialArenaReward.cs +++ b/EpinelPS/LobbyServer/Arena/ShowSpecialArenaReward.cs @@ -8,11 +8,13 @@ namespace EpinelPS.LobbyServer.Arena { protected override async Task HandleAsync() { - var req = await ReadData(); + ReqShowSpecialArenaReward req = await ReadData(); - var response = new ResShowSpecialArenaReward(); - response.IsBan = true; - response.BanInfo = new NetArenaBanInfo() { Description = "Not Implemented", StartAt = Timestamp.FromDateTimeOffset(DateTimeOffset.UtcNow), EndAt = Timestamp.FromDateTimeOffset(DateTimeOffset.UtcNow.AddYears(10)) }; + ResShowSpecialArenaReward response = new() + { + IsBan = true, + BanInfo = new NetArenaBanInfo() { Description = "Not Implemented", StartAt = Timestamp.FromDateTimeOffset(DateTimeOffset.UtcNow), EndAt = Timestamp.FromDateTimeOffset(DateTimeOffset.UtcNow.AddYears(10)) } + }; await WriteDataAsync(response); } } diff --git a/EpinelPS/LobbyServer/Auth/AuthLogout.cs b/EpinelPS/LobbyServer/Auth/AuthLogout.cs index f8ed128..dd574bd 100644 --- a/EpinelPS/LobbyServer/Auth/AuthLogout.cs +++ b/EpinelPS/LobbyServer/Auth/AuthLogout.cs @@ -8,7 +8,7 @@ namespace EpinelPS.LobbyServer.Auth { protected override async Task HandleAsync() { - var req = await ReadData(); + ReqLogout req = await ReadData(); // TODO remove UsedAuthToken diff --git a/EpinelPS/LobbyServer/Auth/DoEnterServer.cs b/EpinelPS/LobbyServer/Auth/DoEnterServer.cs index 4887665..bdb9d44 100644 --- a/EpinelPS/LobbyServer/Auth/DoEnterServer.cs +++ b/EpinelPS/LobbyServer/Auth/DoEnterServer.cs @@ -14,11 +14,11 @@ namespace EpinelPS.LobbyServer.Auth { protected override async Task HandleAsync() { - var req = await ReadData(); + ReqEnterServer req = await ReadData(); // request has auth token UsedAuthToken = req.AuthToken; - foreach (var item in JsonDb.Instance.LauncherAccessTokens) + foreach (AccessToken item in JsonDb.Instance.LauncherAccessTokens) { if (item.Token == UsedAuthToken) { @@ -26,18 +26,18 @@ namespace EpinelPS.LobbyServer.Auth } } if (UserId == 0) throw new BadHttpRequestException("unknown auth token", 403); - var user = GetUser(); + User user = GetUser(); - var rsp = LobbyHandler.GenGameClientTok(req.ClientPublicKey, UserId); + GameClientInfo rsp = LobbyHandler.GenGameClientTok(req.ClientPublicKey, UserId); - var token = new PasetoBuilder().Use(ProtocolVersion.V4, Purpose.Local) + string token = new PasetoBuilder().Use(ProtocolVersion.V4, Purpose.Local) .WithKey(JsonDb.Instance.LauncherTokenKey, Encryption.SymmetricKey) .AddClaim("userid", UserId) .IssuedAt(DateTime.UtcNow) .Expiration(DateTime.UtcNow.AddDays(2)) .Encode(); - var encryptionToken = new PasetoBuilder().Use(ProtocolVersion.V4, Purpose.Local) + string encryptionToken = new PasetoBuilder().Use(ProtocolVersion.V4, Purpose.Local) .WithKey(JsonDb.Instance.LauncherTokenKey, Encryption.SymmetricKey) .AddClaim("data", JsonSerializer.Serialize(rsp)) .IssuedAt(DateTime.UtcNow) diff --git a/EpinelPS/LobbyServer/Auth/DoIntlAuth.cs b/EpinelPS/LobbyServer/Auth/DoIntlAuth.cs index 7f4e217..ce3aa63 100644 --- a/EpinelPS/LobbyServer/Auth/DoIntlAuth.cs +++ b/EpinelPS/LobbyServer/Auth/DoIntlAuth.cs @@ -9,11 +9,11 @@ namespace EpinelPS.LobbyServer.Auth { protected override async Task HandleAsync() { - var req = await ReadData(); - var response = new ResAuth(); + ReqAuthIntl req = await ReadData(); + ResAuth response = new(); UsedAuthToken = req.Token; - foreach (var item in JsonDb.Instance.LauncherAccessTokens) + foreach (AccessToken item in JsonDb.Instance.LauncherAccessTokens) { if (item.Token == UsedAuthToken) { @@ -26,7 +26,7 @@ namespace EpinelPS.LobbyServer.Auth } else { - var user = GetUser(); + User user = GetUser(); if (user.IsBanned && user.BanEnd < DateTime.UtcNow) { diff --git a/EpinelPS/LobbyServer/Badge/DeleteBadge.cs b/EpinelPS/LobbyServer/Badge/DeleteBadge.cs index 85fd234..9e2cbd7 100644 --- a/EpinelPS/LobbyServer/Badge/DeleteBadge.cs +++ b/EpinelPS/LobbyServer/Badge/DeleteBadge.cs @@ -8,12 +8,12 @@ namespace EpinelPS.LobbyServer.Badge { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqDeleteBadge req = await ReadData(); + User user = GetUser(); - var response = new ResDeleteBadge(); + ResDeleteBadge response = new(); - foreach (var badgeId in req.BadgeSeqList) + foreach (long badgeId in req.BadgeSeqList) { user.Badges.RemoveAll(x => x.Seq == badgeId); } diff --git a/EpinelPS/LobbyServer/Badge/SyncBadge.cs b/EpinelPS/LobbyServer/Badge/SyncBadge.cs index d1e6ef1..989cdc6 100644 --- a/EpinelPS/LobbyServer/Badge/SyncBadge.cs +++ b/EpinelPS/LobbyServer/Badge/SyncBadge.cs @@ -8,12 +8,12 @@ namespace EpinelPS.LobbyServer.Badge { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqSyncBadge req = await ReadData(); + Database.User user = GetUser(); - var response = new ResSyncBadge(); + ResSyncBadge response = new(); - foreach (var item in user.Badges) + foreach (Database.Badge item in user.Badges) { response.BadgeList.Add(item.ToNet()); } diff --git a/EpinelPS/LobbyServer/Campaign/CampaignPackageGetAll.cs b/EpinelPS/LobbyServer/Campaign/CampaignPackageGetAll.cs index 24faf6a..c239587 100644 --- a/EpinelPS/LobbyServer/Campaign/CampaignPackageGetAll.cs +++ b/EpinelPS/LobbyServer/Campaign/CampaignPackageGetAll.cs @@ -7,9 +7,9 @@ namespace EpinelPS.LobbyServer.Campaign { protected override async Task HandleAsync() { - var req = await ReadData(); + ReqCampaignPackageGetAllShutdownFlags req = await ReadData(); - var response = new ResCampaignPackageGetAllShutdownFlags(); + ResCampaignPackageGetAllShutdownFlags response = new(); // TODO await WriteDataAsync(response); diff --git a/EpinelPS/LobbyServer/Campaign/GetCampaignField.cs b/EpinelPS/LobbyServer/Campaign/GetCampaignField.cs index dd8f08a..ba8231e 100644 --- a/EpinelPS/LobbyServer/Campaign/GetCampaignField.cs +++ b/EpinelPS/LobbyServer/Campaign/GetCampaignField.cs @@ -9,19 +9,21 @@ namespace EpinelPS.LobbyServer.Campaign { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqGetCampaignFieldData req = await ReadData(); + Database.User user = GetUser(); Console.WriteLine("Map ID: " + req.MapId); - var response = new ResGetCampaignFieldData(); - response.Field = GetStage.CreateFieldInfo(user, req.MapId, out bool bossEntered); + ResGetCampaignFieldData response = new() + { + Field = GetStage.CreateFieldInfo(user, req.MapId, out bool bossEntered), - // todo save this data - response.Team = new NetUserTeamData() { LastContentsTeamNumber = 1, Type = 1 }; + // todo save this data + Team = new NetUserTeamData() { LastContentsTeamNumber = 1, Type = 1 } + }; if (user.LastNormalStageCleared >= 6000003) { - var team = new NetTeamData() { TeamNumber = 1 }; + NetTeamData team = new() { TeamNumber = 1 }; team.Slots.Add(new NetTeamSlot() { Slot = 1, Value = 47263455 }); team.Slots.Add(new NetTeamSlot() { Slot = 2, Value = 47263456 }); team.Slots.Add(new NetTeamSlot() { Slot = 3, Value = 47263457 }); @@ -33,14 +35,14 @@ namespace EpinelPS.LobbyServer.Campaign } string resultingJson; - if (!user.MapJson.ContainsKey(req.MapId)) + if (!user.MapJson.TryGetValue(req.MapId, out string? value)) { resultingJson = ""; user.MapJson.Add(req.MapId, resultingJson); } else { - resultingJson = user.MapJson[req.MapId]; + resultingJson = value; } response.Json = resultingJson; diff --git a/EpinelPS/LobbyServer/Campaign/GetFieldObjectsCount.cs b/EpinelPS/LobbyServer/Campaign/GetFieldObjectsCount.cs index a5a3ec9..b71e4b9 100644 --- a/EpinelPS/LobbyServer/Campaign/GetFieldObjectsCount.cs +++ b/EpinelPS/LobbyServer/Campaign/GetFieldObjectsCount.cs @@ -10,12 +10,12 @@ namespace EpinelPS.LobbyServer.Campaign { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqGetCampaignFieldObjectItemsNum req = await ReadData(); + User user = GetUser(); - var response = new ResGetCampaignFieldObjectItemsNum(); + ResGetCampaignFieldObjectItemsNum response = new(); - foreach (var map in user.FieldInfoNew) + foreach (KeyValuePair map in user.FieldInfoNew) { response.FieldObjectItemsNum.Add(new NetCampaignFieldObjectItemsNum() { diff --git a/EpinelPS/LobbyServer/Campaign/ObtainItem.cs b/EpinelPS/LobbyServer/Campaign/ObtainItem.cs index 7e187a0..afa77e6 100644 --- a/EpinelPS/LobbyServer/Campaign/ObtainItem.cs +++ b/EpinelPS/LobbyServer/Campaign/ObtainItem.cs @@ -10,10 +10,10 @@ namespace EpinelPS.LobbyServer.Campaign { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqObtainCampaignItem req = await ReadData(); + User user = GetUser(); - var response = new ResObtainCampaignItem(); + ResObtainCampaignItem response = new(); if (!user.FieldInfoNew.TryGetValue(req.MapId, out FieldInfoNew? field)) { @@ -22,7 +22,7 @@ namespace EpinelPS.LobbyServer.Campaign } - foreach (var item in field.CompletedObjects) + foreach (NetFieldObject item in field.CompletedObjects) { if (item.PositionId == req.FieldObject.PositionId) { @@ -33,12 +33,12 @@ namespace EpinelPS.LobbyServer.Campaign // Register and return reward - var map = GameData.Instance.MapData[req.MapId]; + MapInfo map = GameData.Instance.MapData[req.MapId]; - var position = map.ItemSpawner.Where(x => x.positionId == req.FieldObject.PositionId).FirstOrDefault() ?? throw new Exception("bad position id"); + ItemSpawner position = map.ItemSpawner.Where(x => x.positionId == req.FieldObject.PositionId).FirstOrDefault() ?? throw new Exception("bad position id"); - var positionReward = GameData.Instance.FieldItems[position.itemId]; - var reward = GameData.Instance.GetRewardTableEntry(positionReward.type_value) ?? throw new Exception("failed to get reward"); + FieldItemRecord positionReward = GameData.Instance.FieldItems[position.itemId]; + RewardTableRecord reward = GameData.Instance.GetRewardTableEntry(positionReward.type_value) ?? throw new Exception("failed to get reward"); response.Reward = RewardUtils.RegisterRewardsForUser(user, reward); // Hide it from the field diff --git a/EpinelPS/LobbyServer/Campaign/SaveField.cs b/EpinelPS/LobbyServer/Campaign/SaveField.cs index a99ba43..1371485 100644 --- a/EpinelPS/LobbyServer/Campaign/SaveField.cs +++ b/EpinelPS/LobbyServer/Campaign/SaveField.cs @@ -7,10 +7,10 @@ namespace EpinelPS.LobbyServer.Campaign { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqSaveCampaignField req = await ReadData(); + Database.User user = GetUser(); - var response = new ResSaveCampaignField(); + ResSaveCampaignField response = new(); if (!user.MapJson.ContainsKey(req.MapId)) { diff --git a/EpinelPS/LobbyServer/Campaign/SaveFieldObject.cs b/EpinelPS/LobbyServer/Campaign/SaveFieldObject.cs index b1d8527..1159ba8 100644 --- a/EpinelPS/LobbyServer/Campaign/SaveFieldObject.cs +++ b/EpinelPS/LobbyServer/Campaign/SaveFieldObject.cs @@ -9,14 +9,14 @@ namespace EpinelPS.LobbyServer.Campaign { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqSaveCampaignFieldObject req = await ReadData(); + User user = GetUser(); - var response = new ResSaveCampaignFieldObject(); + ResSaveCampaignFieldObject response = new(); Logging.WriteLine($"save {req.MapId} with {req.FieldObject.PositionId}", LogType.Debug); - var field = user.FieldInfoNew[req.MapId]; + FieldInfoNew field = user.FieldInfoNew[req.MapId]; field.CompletedObjects.Add(new NetFieldObject() { PositionId = req.FieldObject.PositionId, Json = req.FieldObject.Json, Type = req.FieldObject.Type }); JsonDb.Save(); diff --git a/EpinelPS/LobbyServer/Character/ChangeSynchroDevice.cs b/EpinelPS/LobbyServer/Character/ChangeSynchroDevice.cs index 143f2e2..3bca448 100644 --- a/EpinelPS/LobbyServer/Character/ChangeSynchroDevice.cs +++ b/EpinelPS/LobbyServer/Character/ChangeSynchroDevice.cs @@ -13,15 +13,15 @@ namespace EpinelPS.LobbyServer.Character { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqSynchroChange req = await ReadData(); + User user = GetUser(); - var response = new ResSynchroChange(); + ResSynchroChange response = new(); - var highestLevelCharacters = user.Characters.OrderByDescending(x => x.Level).Take(5).ToList(); + List highestLevelCharacters = [.. user.Characters.OrderByDescending(x => x.Level).Take(5)]; int slot = 1; - foreach (var item in highestLevelCharacters) + foreach (Database.Character? item in highestLevelCharacters) { if (item.Level != 200) { @@ -32,7 +32,7 @@ namespace EpinelPS.LobbyServer.Character - foreach (var s in user.SynchroSlots) + foreach (SynchroSlot s in user.SynchroSlots) { if (s.Slot == slot) { @@ -45,7 +45,7 @@ namespace EpinelPS.LobbyServer.Character user.SynchroDeviceUpgraded = true; - foreach (var item in user.SynchroSlots) + foreach (SynchroSlot item in user.SynchroSlots) { response.Slots.Add(new NetSynchroSlot() { Slot = item.Slot, AvailableRegisterAt = item.AvailableAt, Csn = item.CharacterSerialNumber }); } diff --git a/EpinelPS/LobbyServer/Character/Counsel/Check.cs b/EpinelPS/LobbyServer/Character/Counsel/Check.cs index 3f1976e..536c2d9 100644 --- a/EpinelPS/LobbyServer/Character/Counsel/Check.cs +++ b/EpinelPS/LobbyServer/Character/Counsel/Check.cs @@ -7,8 +7,8 @@ public class CheckCharacterCounsel : LobbyMsgHandler { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqCounseledBefore req = await ReadData(); + Database.User user = GetUser(); ResCounseledBefore response = new(); diff --git a/EpinelPS/LobbyServer/Character/Counsel/DoCounsel.cs b/EpinelPS/LobbyServer/Character/Counsel/DoCounsel.cs index 502f367..6a6f2d7 100644 --- a/EpinelPS/LobbyServer/Character/Counsel/DoCounsel.cs +++ b/EpinelPS/LobbyServer/Character/Counsel/DoCounsel.cs @@ -1,3 +1,4 @@ +using EpinelPS.Data; using EpinelPS.Database; using EpinelPS.Utils; @@ -8,17 +9,17 @@ public class DoCounsel : LobbyMsgHandler { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqCharacterCounsel req = await ReadData(); + User user = GetUser(); ResCharacterCounsel response = new(); - foreach (var currency in user.Currency) + foreach (KeyValuePair currency in user.Currency) { response.Currencies.Add(new NetUserCurrencyData() { Type = (int)currency.Key, Value = currency.Value }); } - var currentBondInfo = user.BondInfo.Where(x => x.NameCode == req.NameCode); + IEnumerable currentBondInfo = user.BondInfo.Where(x => x.NameCode == req.NameCode); NetUserAttractiveData data; diff --git a/EpinelPS/LobbyServer/Character/DoLimitBreak.cs b/EpinelPS/LobbyServer/Character/DoLimitBreak.cs index abf60b9..3c6982d 100644 --- a/EpinelPS/LobbyServer/Character/DoLimitBreak.cs +++ b/EpinelPS/LobbyServer/Character/DoLimitBreak.cs @@ -10,17 +10,17 @@ namespace EpinelPS.LobbyServer.Character protected override async Task HandleAsync() { // Read the incoming request that contains the current CSN and ISN - var req = await ReadData(); // Contains csn and isn (read-only) - var response = new ResCharacterUpgrade(); - var user = GetUser(); + ReqCharacterUpgrade req = await ReadData(); // Contains csn and isn (read-only) + ResCharacterUpgrade response = new(); + User user = GetUser(); // Get all character data from the game's character table - var fullchardata = GameData.Instance.CharacterTable.Values.ToList(); + List fullchardata = [.. GameData.Instance.CharacterTable.Values]; - var targetCharacter = user.GetCharacterBySerialNumber(req.Csn) ?? throw new NullReferenceException(); + Database.Character targetCharacter = user.GetCharacterBySerialNumber(req.Csn) ?? throw new NullReferenceException(); // Find the element with the current csn from the request - var currentCharacter = fullchardata.FirstOrDefault(c => c.id == targetCharacter.Tid) ?? throw new NullReferenceException(); + CharacterRecord currentCharacter = fullchardata.FirstOrDefault(c => c.id == targetCharacter.Tid) ?? throw new NullReferenceException(); if (currentCharacter != null && targetCharacter != null) { @@ -33,7 +33,7 @@ namespace EpinelPS.LobbyServer.Character // Find a new CSN based on the `name_code` of the current character and `grade_core_id + 1` // For some reason, there is a seperate character for each limit/core break value. - var newCharacter = fullchardata.FirstOrDefault(c => c.name_code == currentCharacter.name_code && c.grade_core_id == currentCharacter.grade_core_id + 1); + CharacterRecord? newCharacter = fullchardata.FirstOrDefault(c => c.name_code == currentCharacter.name_code && c.grade_core_id == currentCharacter.grade_core_id + 1); if (newCharacter != null) @@ -55,7 +55,7 @@ namespace EpinelPS.LobbyServer.Character }; // remove spare body item - var bodyItem = user.Items.FirstOrDefault(i => i.Isn == req.Isn) ?? throw new NullReferenceException(); + ItemData bodyItem = user.Items.FirstOrDefault(i => i.Isn == req.Isn) ?? throw new NullReferenceException(); user.RemoveItemBySerialNumber(req.Isn, 1); response.Items.Add(NetUtils.ToNet(bodyItem)); diff --git a/EpinelPS/LobbyServer/Character/GetCharacterAttractiveList.cs b/EpinelPS/LobbyServer/Character/GetCharacterAttractiveList.cs index b95deb1..ee8a58a 100644 --- a/EpinelPS/LobbyServer/Character/GetCharacterAttractiveList.cs +++ b/EpinelPS/LobbyServer/Character/GetCharacterAttractiveList.cs @@ -7,13 +7,15 @@ namespace EpinelPS.LobbyServer.Character { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqGetAttractiveList req = await ReadData(); + Database.User user = GetUser(); - ResGetAttractiveList response = new(); - response.CounselAvailableCount = 3; // TODO + ResGetAttractiveList response = new() + { + CounselAvailableCount = 3 // TODO + }; - foreach(var item in user.BondInfo) + foreach (NetUserAttractiveData item in user.BondInfo) { response.Attractives.Add(item); item.CanCounselToday = true; diff --git a/EpinelPS/LobbyServer/Character/GetCharacterCostume.cs b/EpinelPS/LobbyServer/Character/GetCharacterCostume.cs index 9703e87..4755d8a 100644 --- a/EpinelPS/LobbyServer/Character/GetCharacterCostume.cs +++ b/EpinelPS/LobbyServer/Character/GetCharacterCostume.cs @@ -8,9 +8,9 @@ namespace EpinelPS.LobbyServer.Character { protected override async Task HandleAsync() { - var req = await ReadData(); + ReqGetCharacterCostumeData req = await ReadData(); - var response = new ResGetCharacterCostumeData(); + ResGetCharacterCostumeData response = new(); // return all response.CostumeIds.AddRange(GameData.Instance.GetAllCostumes()); diff --git a/EpinelPS/LobbyServer/Character/GetCharacterData.cs b/EpinelPS/LobbyServer/Character/GetCharacterData.cs index 8173d10..2f39dba 100644 --- a/EpinelPS/LobbyServer/Character/GetCharacterData.cs +++ b/EpinelPS/LobbyServer/Character/GetCharacterData.cs @@ -7,18 +7,18 @@ namespace EpinelPS.LobbyServer.Character { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqGetCharacterData req = await ReadData(); + Database.User user = GetUser(); - var response = new ResGetCharacterData(); - foreach (var item in user.Characters) + ResGetCharacterData response = new(); + foreach (Database.Character item in user.Characters) { response.Character.Add(new NetUserCharacterData() { Default = new() { Csn = item.Csn, Skill1Lv = item.Skill1Lvl, Skill2Lv = item.Skill2Lvl, CostumeId = item.CostumeId, Lv = user.GetCharacterLevel(item.Csn, item.Level), Grade = item.Grade, Tid = item.Tid, UltiSkillLv = item.UltimateLevel }, IsSynchro = user.GetSynchro(item.Csn) }); } - var highestLevelCharacters = user.Characters.OrderByDescending(x => x.Level).Take(5).ToList(); + List highestLevelCharacters = [.. user.Characters.OrderByDescending(x => x.Level).Take(5)]; - foreach (var c in highestLevelCharacters) + foreach (Database.Character? c in highestLevelCharacters) { response.SynchroStandardCharacters.Add(c.Csn); } diff --git a/EpinelPS/LobbyServer/Character/GetSynchrodevice.cs b/EpinelPS/LobbyServer/Character/GetSynchrodevice.cs index 8242aba..df4164e 100644 --- a/EpinelPS/LobbyServer/Character/GetSynchrodevice.cs +++ b/EpinelPS/LobbyServer/Character/GetSynchrodevice.cs @@ -8,32 +8,34 @@ namespace EpinelPS.LobbyServer.Character { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqGetSynchroData req = await ReadData(); + User user = GetUser(); if (user.SynchroSlots.Count == 0) { - user.SynchroSlots = new() { + user.SynchroSlots = [ new SynchroSlot() { Slot = 1 }, new SynchroSlot() { Slot = 2}, new SynchroSlot() { Slot = 3 }, new SynchroSlot() { Slot = 4 }, new SynchroSlot() { Slot = 5 }, - }; + ]; } - var highestLevelCharacters = user.Characters.OrderByDescending(x => x.Level).Take(5).ToList(); + List highestLevelCharacters = [.. user.Characters.OrderByDescending(x => x.Level).Take(5)]; - var response = new ResGetSynchroData(); - response.Synchro = new NetUserSynchroData(); - - foreach (var item in highestLevelCharacters) + ResGetSynchroData response = new() + { + Synchro = new NetUserSynchroData() + }; + + foreach (Database.Character? item in highestLevelCharacters) { response.Synchro.StandardCharacters.Add(new NetUserCharacterData() { Default = new() { Csn = item.Csn, Skill1Lv = item.Skill1Lvl, Skill2Lv = item.Skill2Lvl, CostumeId = item.CostumeId, Lv = item.Level, Grade = item.Grade, Tid = item.Tid, UltiSkillLv = item.UltimateLevel }, IsSynchro = user.GetSynchro(item.Csn) }); } - foreach (var item in user.SynchroSlots) + foreach (SynchroSlot item in user.SynchroSlots) { response.Synchro.Slots.Add(new NetSynchroSlot() { Slot = item.Slot, AvailableRegisterAt = 1, Csn = item.CharacterSerialNumber }); } diff --git a/EpinelPS/LobbyServer/Character/LevelUp.cs b/EpinelPS/LobbyServer/Character/LevelUp.cs index e078c7e..7deecca 100644 --- a/EpinelPS/LobbyServer/Character/LevelUp.cs +++ b/EpinelPS/LobbyServer/Character/LevelUp.cs @@ -9,12 +9,12 @@ namespace EpinelPS.LobbyServer.Character { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); - var response = new ResCharacterLevelUp(); - var data = GameData.Instance.GetCharacterLevelUpData(); + ReqCharacterLevelUp req = await ReadData(); + User user = GetUser(); + ResCharacterLevelUp response = new(); + Dictionary data = GameData.Instance.GetCharacterLevelUpData(); - foreach (var item in user.Characters.ToArray()) + foreach (Database.Character item in user.Characters.ToArray()) { if (item.Csn == req.Csn) { @@ -23,7 +23,7 @@ namespace EpinelPS.LobbyServer.Character int requiredCoreDust = 0; for (int i = item.Level; i < req.Lv; i++) { - var levelUpData = data[i]; + CharacterLevelData levelUpData = data[i]; requiredCredit += levelUpData.gold; requiredBattleData += levelUpData.character_exp; requiredCoreDust += levelUpData.character_exp2; @@ -55,16 +55,16 @@ namespace EpinelPS.LobbyServer.Character Grade = item.Grade, Tid = item.Tid }; - var highestLevelCharacters = user.Characters.OrderByDescending(x => x.Level).Take(5).ToList(); + List highestLevelCharacters = [.. user.Characters.OrderByDescending(x => x.Level).Take(5)]; response.SynchroLv = user.GetSynchroLevel(); - foreach (var c in highestLevelCharacters) + foreach (Database.Character? c in highestLevelCharacters) { response.SynchroStandardCharacters.Add(c.Csn); } - foreach (var currency in user.Currency) + foreach (KeyValuePair currency in user.Currency) { response.Currencies.Add(new NetUserCurrencyData() { Type = (int)currency.Key, Value = currency.Value }); } diff --git a/EpinelPS/LobbyServer/Character/ObtainEpReward.cs b/EpinelPS/LobbyServer/Character/ObtainEpReward.cs index 7456651..7d0c8fa 100644 --- a/EpinelPS/LobbyServer/Character/ObtainEpReward.cs +++ b/EpinelPS/LobbyServer/Character/ObtainEpReward.cs @@ -9,14 +9,14 @@ namespace EpinelPS.LobbyServer.Character { protected override async Task HandleAsync() { - var req = await ReadData(); - var response = new ResObtainAttractiveReward(); - var user = GetUser(); + ReqObtainAttractiveReward req = await ReadData(); + ResObtainAttractiveReward response = new(); + User user = GetUser(); // look up ID from name code and level - var levelUpRecord = GameData.Instance.AttractiveLevelReward.Where(x => x.Value.attractive_level == req.Lv && x.Value.name_code == req.NameCode).FirstOrDefault(); + KeyValuePair levelUpRecord = GameData.Instance.AttractiveLevelReward.Where(x => x.Value.attractive_level == req.Lv && x.Value.name_code == req.NameCode).FirstOrDefault(); - foreach (var item in user.BondInfo) + foreach (NetUserAttractiveData item in user.BondInfo) { if (item.NameCode == req.NameCode) { @@ -24,7 +24,7 @@ namespace EpinelPS.LobbyServer.Character { item.ObtainedRewardLevels.Add(levelUpRecord.Value.id); - var reward = GameData.Instance.GetRewardTableEntry(levelUpRecord.Value.reward_id) ?? throw new Exception("failed to get reward"); + RewardTableRecord reward = GameData.Instance.GetRewardTableEntry(levelUpRecord.Value.reward_id) ?? throw new Exception("failed to get reward"); response.Reward = RewardUtils.RegisterRewardsForUser(user, reward); JsonDb.Save(); diff --git a/EpinelPS/LobbyServer/Character/RegisterSynchroDevice.cs b/EpinelPS/LobbyServer/Character/RegisterSynchroDevice.cs index a6d555e..19fdf58 100644 --- a/EpinelPS/LobbyServer/Character/RegisterSynchroDevice.cs +++ b/EpinelPS/LobbyServer/Character/RegisterSynchroDevice.cs @@ -8,13 +8,11 @@ namespace EpinelPS.LobbyServer.Character { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); - var targetCharacter = user.GetCharacterBySerialNumber(req.Csn); - if (targetCharacter == null) throw new Exception("target character does not exist"); - - var response = new ResSynchroRegister(); - foreach (var item in user.SynchroSlots) + ReqSynchroRegister req = await ReadData(); + User user = GetUser(); + Database.Character? targetCharacter = user.GetCharacterBySerialNumber(req.Csn) ?? throw new Exception("target character does not exist"); + ResSynchroRegister response = new(); + foreach (SynchroSlot item in user.SynchroSlots) { if (item.Slot == req.Slot) { diff --git a/EpinelPS/LobbyServer/Character/ResetLevel.cs b/EpinelPS/LobbyServer/Character/ResetLevel.cs index 4f3138b..2d46fee 100644 --- a/EpinelPS/LobbyServer/Character/ResetLevel.cs +++ b/EpinelPS/LobbyServer/Character/ResetLevel.cs @@ -9,12 +9,12 @@ namespace EpinelPS.LobbyServer.Character { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); - var response = new ResCharacterGrowReset(); - var data = GameData.Instance.GetCharacterLevelUpData(); + ReqCharacterGrowReset req = await ReadData(); + User user = GetUser(); + ResCharacterGrowReset response = new(); + Dictionary data = GameData.Instance.GetCharacterLevelUpData(); - foreach (var item in user.Characters.ToArray()) + foreach (Database.Character item in user.Characters.ToArray()) { if (item.Csn == req.Csn) { @@ -34,7 +34,7 @@ namespace EpinelPS.LobbyServer.Character int requiredCoreDust = 0; for (int i = 1; i < item.Level; i++) { - var levelUpData = data[i]; + CharacterLevelData levelUpData = data[i]; requiredCredit += levelUpData.gold; requiredBattleData += levelUpData.character_exp; requiredCoreDust += levelUpData.character_exp2; @@ -56,16 +56,16 @@ namespace EpinelPS.LobbyServer.Character Grade = item.Grade, Tid = item.Tid }; - var highestLevelCharacters = user.Characters.OrderByDescending(x => x.Level).Take(5).ToList(); + List highestLevelCharacters = [.. user.Characters.OrderByDescending(x => x.Level).Take(5)]; response.SynchroLv = highestLevelCharacters.Last().Level; - foreach (var c in highestLevelCharacters) + foreach (Database.Character? c in highestLevelCharacters) { response.SynchroStandardCharacters.Add(c.Csn); } - foreach (var currency in user.Currency) + foreach (KeyValuePair currency in user.Currency) { response.Currencies.Add(new NetUserCurrencyData() { Type = (int)currency.Key, Value = currency.Value }); } diff --git a/EpinelPS/LobbyServer/Character/SetCharacterCostume.cs b/EpinelPS/LobbyServer/Character/SetCharacterCostume.cs index bd4ffc2..f0e666e 100644 --- a/EpinelPS/LobbyServer/Character/SetCharacterCostume.cs +++ b/EpinelPS/LobbyServer/Character/SetCharacterCostume.cs @@ -8,10 +8,10 @@ namespace EpinelPS.LobbyServer.Character { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqSetCharacterCostume req = await ReadData(); + User user = GetUser(); - foreach (var item in user.Characters) + foreach (Database.Character item in user.Characters) { if (item.Csn == req.Csn) { @@ -21,7 +21,7 @@ namespace EpinelPS.LobbyServer.Character } JsonDb.Save(); - var response = new ResSetCharacterCostume(); + ResSetCharacterCostume response = new(); await WriteDataAsync(response); } diff --git a/EpinelPS/LobbyServer/Character/SkillLevelUp.cs b/EpinelPS/LobbyServer/Character/SkillLevelUp.cs index c4e18ce..96eb8bb 100644 --- a/EpinelPS/LobbyServer/Character/SkillLevelUp.cs +++ b/EpinelPS/LobbyServer/Character/SkillLevelUp.cs @@ -9,31 +9,31 @@ namespace EpinelPS.LobbyServer.Character { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); - var response = new ResCharacterSkillLevelUp(); - - var character = user.Characters.FirstOrDefault(c => c.Csn == req.Csn) ?? throw new Exception("cannot find character"); + ReqCharacterSkillLevelUp req = await ReadData(); + User user = GetUser(); + ResCharacterSkillLevelUp response = new(); - var charRecord = GameData.Instance.CharacterTable.Values.FirstOrDefault(c => c.id == character.Tid) ?? throw new Exception("cannot find character record"); - var skillIdMap = new Dictionary + Database.Character character = user.Characters.FirstOrDefault(c => c.Csn == req.Csn) ?? throw new Exception("cannot find character"); + + CharacterRecord charRecord = GameData.Instance.CharacterTable.Values.FirstOrDefault(c => c.id == character.Tid) ?? throw new Exception("cannot find character record"); + Dictionary skillIdMap = new() { { 1, charRecord.ulti_skill_id }, { 2, charRecord.skill1_id }, { 3, charRecord.skill2_id } }; - var skillLevelMap = new Dictionary + Dictionary skillLevelMap = new() { { 1, character.UltimateLevel }, { 2, character.Skill1Lvl }, { 3, character.Skill2Lvl } }; - var skillRecord = GameData.Instance.skillInfoTable.Values.FirstOrDefault(s => s.id == skillIdMap[req.Category] + (skillLevelMap[req.Category] - 1)) ?? throw new Exception("cannot find character skill record"); - var costRecord = GameData.Instance.costTable.Values.FirstOrDefault(c => c.id == skillRecord.level_up_cost_id) ?? throw new Exception("cannot find character cost record"); + SkillInfoRecord skillRecord = GameData.Instance.skillInfoTable.Values.FirstOrDefault(s => s.id == skillIdMap[req.Category] + (skillLevelMap[req.Category] - 1)) ?? throw new Exception("cannot find character skill record"); + CostRecord costRecord = GameData.Instance.costTable.Values.FirstOrDefault(c => c.id == skillRecord.level_up_cost_id) ?? throw new Exception("cannot find character cost record"); - foreach (var cost in costRecord.costs.Where(i => i.item_type != "None")) + foreach (CostData? cost in costRecord.costs.Where(i => i.item_type != "None")) { - var item = user.Items.FirstOrDefault(i => i.ItemType == cost.item_id) ?? throw new NullReferenceException(); + ItemData item = user.Items.FirstOrDefault(i => i.ItemType == cost.item_id) ?? throw new NullReferenceException(); item.Count -= cost.item_value; @@ -50,7 +50,7 @@ namespace EpinelPS.LobbyServer.Character }); } - var newChar = new NetUserCharacterDefaultData + NetUserCharacterDefaultData newChar = new() { CostumeId = character.CostumeId, Csn = character.Csn, diff --git a/EpinelPS/LobbyServer/Character/SynchroAddSlot.cs b/EpinelPS/LobbyServer/Character/SynchroAddSlot.cs index 4cd919f..1bbb06d 100644 --- a/EpinelPS/LobbyServer/Character/SynchroAddSlot.cs +++ b/EpinelPS/LobbyServer/Character/SynchroAddSlot.cs @@ -8,11 +8,11 @@ namespace EpinelPS.LobbyServer.Character { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); - var response = new ResSynchroAddSlot(); + ReqSynchroAddSlot req = await ReadData(); + User user = GetUser(); + ResSynchroAddSlot response = new(); - var slot = user.SynchroSlots.FirstOrDefault(x => x.Slot == req.Slot); + SynchroSlot? slot = user.SynchroSlots.FirstOrDefault(x => x.Slot == req.Slot); if (slot != null) { response.Slot = new NetSynchroSlot @@ -24,7 +24,7 @@ namespace EpinelPS.LobbyServer.Character } else { - var newSlot = new NetSynchroSlot + NetSynchroSlot newSlot = new() { Csn = 0, Slot = req.Slot, diff --git a/EpinelPS/LobbyServer/Character/SynchroLevelUp.cs b/EpinelPS/LobbyServer/Character/SynchroLevelUp.cs index 31dbe76..6c32612 100644 --- a/EpinelPS/LobbyServer/Character/SynchroLevelUp.cs +++ b/EpinelPS/LobbyServer/Character/SynchroLevelUp.cs @@ -9,17 +9,17 @@ namespace EpinelPS.LobbyServer.Character { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqSynchroLevelUp req = await ReadData(); + User user = GetUser(); - var response = new ResSynchroLevelUp(); - var data = GameData.Instance.GetCharacterLevelUpData(); + ResSynchroLevelUp response = new(); + Dictionary data = GameData.Instance.GetCharacterLevelUpData(); int requiredCredit = 0; int requiredBattleData = 0; int requiredCoreDust = 0; - var levelUpData = data[user.SynchroDeviceLevel + 1]; + CharacterLevelData levelUpData = data[user.SynchroDeviceLevel + 1]; requiredCredit += levelUpData.gold; requiredBattleData += levelUpData.character_exp; requiredCoreDust += levelUpData.character_exp2; @@ -41,7 +41,7 @@ namespace EpinelPS.LobbyServer.Character } - foreach (var currency in user.Currency) + foreach (KeyValuePair currency in user.Currency) { response.Currencies.Add(new NetUserCurrencyData() { Type = (int)currency.Key, Value = currency.Value }); } diff --git a/EpinelPS/LobbyServer/Character/UnregisterSynchroDevice.cs b/EpinelPS/LobbyServer/Character/UnregisterSynchroDevice.cs index 0fcbc23..87fbafb 100644 --- a/EpinelPS/LobbyServer/Character/UnregisterSynchroDevice.cs +++ b/EpinelPS/LobbyServer/Character/UnregisterSynchroDevice.cs @@ -8,12 +8,12 @@ namespace EpinelPS.LobbyServer.Character { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqSynchroUnregist req = await ReadData(); + User user = GetUser(); - var response = new ResSynchroUnregist(); + ResSynchroUnregist response = new(); - foreach (var item in user.SynchroSlots) + foreach (SynchroSlot item in user.SynchroSlots) { if (item.Slot == req.Slot) { @@ -23,9 +23,9 @@ namespace EpinelPS.LobbyServer.Character } else { - var oldCSN = item.CharacterSerialNumber; + long oldCSN = item.CharacterSerialNumber; item.CharacterSerialNumber = 0; - var data = user.GetCharacterBySerialNumber(oldCSN) ?? throw new Exception("failed to lookup character"); + Database.Character data = user.GetCharacterBySerialNumber(oldCSN) ?? throw new Exception("failed to lookup character"); response.Character = new NetUserCharacterDefaultData() { @@ -41,10 +41,10 @@ namespace EpinelPS.LobbyServer.Character response.Slot = new NetSynchroSlot() { AvailableRegisterAt = item.AvailableAt, Csn = item.CharacterSerialNumber, Slot = item.Slot }; response.IsSynchro = false; - var highestLevelCharacters = user.Characters.OrderByDescending(x => x.Level).Take(5).ToList(); + List highestLevelCharacters = [.. user.Characters.OrderByDescending(x => x.Level).Take(5)]; - foreach (var item2 in highestLevelCharacters) + foreach (Database.Character? item2 in highestLevelCharacters) { response.SynchroStandardCharacters.Add(item2.Csn); } diff --git a/EpinelPS/LobbyServer/Character/UpgradeCore.cs b/EpinelPS/LobbyServer/Character/UpgradeCore.cs index 79603cd..2127ea0 100644 --- a/EpinelPS/LobbyServer/Character/UpgradeCore.cs +++ b/EpinelPS/LobbyServer/Character/UpgradeCore.cs @@ -10,18 +10,18 @@ namespace EpinelPS.LobbyServer.Character protected override async Task HandleAsync() { // Read the incoming request that contains the current CSN and ISN - var req = await ReadData(); // Contains csn and isn (read-only) - var response = new ResCharacterCoreUpgrade(); + ReqCharacterCoreUpgrade req = await ReadData(); // Contains csn and isn (read-only) + ResCharacterCoreUpgrade response = new(); - var user = GetUser(); + User user = GetUser(); // Get all character data from the game's character table - var fullchardata = GameData.Instance.CharacterTable.Values.ToList(); + List fullchardata = [.. GameData.Instance.CharacterTable.Values]; - var targetCharacter = user.GetCharacterBySerialNumber(req.Csn) ?? throw new NullReferenceException(); + Database.Character targetCharacter = user.GetCharacterBySerialNumber(req.Csn) ?? throw new NullReferenceException(); // Find the element with the current csn from the request - var currentCharacter = fullchardata.FirstOrDefault(c => c.id == targetCharacter.Tid); + CharacterRecord? currentCharacter = fullchardata.FirstOrDefault(c => c.id == targetCharacter.Tid); if (currentCharacter != null && targetCharacter != null) { @@ -34,7 +34,7 @@ namespace EpinelPS.LobbyServer.Character // Find a new CSN based on the `name_code` of the current character and `grade_core_id + 1` // For some reason, there is a seperate character for each limit/core break value. - var newCharacter = fullchardata.FirstOrDefault(c => c.name_code == currentCharacter.name_code && c.grade_core_id == currentCharacter.grade_core_id + 1); + CharacterRecord? newCharacter = fullchardata.FirstOrDefault(c => c.name_code == currentCharacter.name_code && c.grade_core_id == currentCharacter.grade_core_id + 1); if (newCharacter != null) @@ -56,7 +56,7 @@ namespace EpinelPS.LobbyServer.Character }; // remove spare body item - var bodyItem = user.Items.FirstOrDefault(i => i.Isn == req.Isn) ?? throw new NullReferenceException(); + ItemData bodyItem = user.Items.FirstOrDefault(i => i.Isn == req.Isn) ?? throw new NullReferenceException(); user.RemoveItemBySerialNumber(req.Isn, 1); response.Items.Add(NetUtils.ToNet(bodyItem)); diff --git a/EpinelPS/LobbyServer/Client/CheckClientVersion.cs b/EpinelPS/LobbyServer/Client/CheckClientVersion.cs index 67ca59c..d67a4e7 100644 --- a/EpinelPS/LobbyServer/Client/CheckClientVersion.cs +++ b/EpinelPS/LobbyServer/Client/CheckClientVersion.cs @@ -7,9 +7,11 @@ namespace EpinelPS.LobbyServer.Client { protected override async Task HandleAsync() { - var req = await ReadData(); - var response = new ResCheckClientVersion(); - response.Availability = ResCheckClientVersion.Types.Availability.None; + ReqCheckClientVersion req = await ReadData(); + ResCheckClientVersion response = new() + { + Availability = ResCheckClientVersion.Types.Availability.None + }; await WriteDataAsync(response); } diff --git a/EpinelPS/LobbyServer/ContentsOpen/GetUnlocked.cs b/EpinelPS/LobbyServer/ContentsOpen/GetUnlocked.cs index 179c7db..b54b9d8 100644 --- a/EpinelPS/LobbyServer/ContentsOpen/GetUnlocked.cs +++ b/EpinelPS/LobbyServer/ContentsOpen/GetUnlocked.cs @@ -8,12 +8,12 @@ namespace EpinelPS.LobbyServer.ContentsOpen { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqGetContentsOpenUnlockInfo req = await ReadData(); + User user = GetUser(); // This request is used for showing the "Collection Item Unlocked" Popup and button unlock animation - var response = new ResGetContentsOpenUnlockInfo(); + ResGetContentsOpenUnlockInfo response = new(); if (user.ContentsOpenUnlocked.Count == 0) { @@ -31,7 +31,7 @@ namespace EpinelPS.LobbyServer.ContentsOpen JsonDb.Save(); } - foreach (var item in user.ContentsOpenUnlocked) + foreach (KeyValuePair item in user.ContentsOpenUnlocked) { response.ContentsOpenUnlockInfoList.Add(new NetContentsOpenUnlockInfo() { diff --git a/EpinelPS/LobbyServer/ContentsOpen/SetUnlockButton.cs b/EpinelPS/LobbyServer/ContentsOpen/SetUnlockButton.cs index 041dc91..079edfc 100644 --- a/EpinelPS/LobbyServer/ContentsOpen/SetUnlockButton.cs +++ b/EpinelPS/LobbyServer/ContentsOpen/SetUnlockButton.cs @@ -8,14 +8,14 @@ namespace EpinelPS.LobbyServer.ContentsOpen { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqSetContentsOpenUnlockButtonPlay req = await ReadData(); + User user = GetUser(); - var response = new ResSetContentsOpenUnlockButtonPlay(); + ResSetContentsOpenUnlockButtonPlay response = new(); // Unlock button animation completed - foreach (var item in req.ContentsOpenTableIds) + foreach (int item in req.ContentsOpenTableIds) { if (user.ContentsOpenUnlocked.TryGetValue(item, out UnlockData? data)) { diff --git a/EpinelPS/LobbyServer/ContentsOpen/SetUnlockPopup.cs b/EpinelPS/LobbyServer/ContentsOpen/SetUnlockPopup.cs index c2053d4..779b01e 100644 --- a/EpinelPS/LobbyServer/ContentsOpen/SetUnlockPopup.cs +++ b/EpinelPS/LobbyServer/ContentsOpen/SetUnlockPopup.cs @@ -8,12 +8,12 @@ namespace EpinelPS.LobbyServer.ContentsOpen { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqSetContentsOpenUnlockPopupPlay req = await ReadData(); + User user = GetUser(); - var response = new ResSetContentsOpenUnlockPopupPlay(); + ResSetContentsOpenUnlockPopupPlay response = new(); - foreach (var item in req.ContentsOpenTableIds) + foreach (int item in req.ContentsOpenTableIds) { if (user.ContentsOpenUnlocked.TryGetValue(item, out UnlockData? data)) { diff --git a/EpinelPS/LobbyServer/EmptyHandler.cs b/EpinelPS/LobbyServer/EmptyHandler.cs index c755a69..601c315 100644 --- a/EpinelPS/LobbyServer/EmptyHandler.cs +++ b/EpinelPS/LobbyServer/EmptyHandler.cs @@ -7,8 +7,8 @@ namespace EpinelPS.LobbyServer { protected override async Task HandleAsync() { - var req = await ReadData(); - var response = new ResGetNow(); + ReqGetNow req = await ReadData(); + ResGetNow response = new(); await WriteDataAsync(response); } diff --git a/EpinelPS/LobbyServer/Episode/ListMission.cs b/EpinelPS/LobbyServer/Episode/ListMission.cs index 74310d4..73aad18 100644 --- a/EpinelPS/LobbyServer/Episode/ListMission.cs +++ b/EpinelPS/LobbyServer/Episode/ListMission.cs @@ -7,9 +7,9 @@ namespace EpinelPS.LobbyServer.Episode { protected override async Task HandleAsync() { - var req = await ReadData(); + ReqListValidEpMission req = await ReadData(); - var response = new ResListValidEpMission(); + ResListValidEpMission response = new(); // TOOD diff --git a/EpinelPS/LobbyServer/Event/CheckBookmarkScenarioExists.cs b/EpinelPS/LobbyServer/Event/CheckBookmarkScenarioExists.cs index 739fd09..e913288 100644 --- a/EpinelPS/LobbyServer/Event/CheckBookmarkScenarioExists.cs +++ b/EpinelPS/LobbyServer/Event/CheckBookmarkScenarioExists.cs @@ -7,9 +7,9 @@ namespace EpinelPS.LobbyServer.Event { protected override async Task HandleAsync() { - var req = await ReadData(); + ReqExistScenarioBookmark req = await ReadData(); - var response = new ResExistScenarioBookmark(); + ResExistScenarioBookmark response = new(); // TODO diff --git a/EpinelPS/LobbyServer/Event/CheckScenarioExists.cs b/EpinelPS/LobbyServer/Event/CheckScenarioExists.cs index 475d218..e0a2d22 100644 --- a/EpinelPS/LobbyServer/Event/CheckScenarioExists.cs +++ b/EpinelPS/LobbyServer/Event/CheckScenarioExists.cs @@ -7,11 +7,11 @@ namespace EpinelPS.LobbyServer.Event { protected override async Task HandleAsync() { - var req = await ReadData(); + ReqExistEventScenario req = await ReadData(); - var response = new ResExistEventScenario(); + ResExistEventScenario response = new(); - foreach (var item in req.ScenarioGroupIds) + foreach (string? item in req.ScenarioGroupIds) response.ExistGroupIds.Add(item); diff --git a/EpinelPS/LobbyServer/Event/CollectSystem/ListField.cs b/EpinelPS/LobbyServer/Event/CollectSystem/ListField.cs index 64e6224..48d72e5 100644 --- a/EpinelPS/LobbyServer/Event/CollectSystem/ListField.cs +++ b/EpinelPS/LobbyServer/Event/CollectSystem/ListField.cs @@ -1,5 +1,4 @@ using EpinelPS.Utils; -using static EpinelPS.LobbyServer.Event.EventConstants; namespace EpinelPS.LobbyServer.Event.CollectSystem { @@ -8,10 +7,10 @@ namespace EpinelPS.LobbyServer.Event.CollectSystem { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqListFieldEventCollectData req = await ReadData(); + Database.User user = GetUser(); - var response = new ResListFieldEventCollectData(); + ResListFieldEventCollectData response = new(); // TODO diff --git a/EpinelPS/LobbyServer/Event/CompleteEventScenario.cs b/EpinelPS/LobbyServer/Event/CompleteEventScenario.cs index 39f935f..05d9a69 100644 --- a/EpinelPS/LobbyServer/Event/CompleteEventScenario.cs +++ b/EpinelPS/LobbyServer/Event/CompleteEventScenario.cs @@ -8,22 +8,21 @@ namespace EpinelPS.LobbyServer.Event { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqSetEventScenarioComplete req = await ReadData(); + User user = GetUser(); - if (user.EventInfo.ContainsKey(req.EventId)) + if (user.EventInfo.TryGetValue(req.EventId, out EventData? evt)) { - var evt = user.EventInfo[req.EventId]; evt.CompletedScenarios.Add(req.ScenarioId); } else { - var evt = new EventData(); + evt = new(); evt.CompletedScenarios.Add(req.ScenarioId); user.EventInfo.Add(req.EventId, evt); } - var response = new ResSetEventScenarioComplete(); + ResSetEventScenarioComplete response = new(); // TODO reward diff --git a/EpinelPS/LobbyServer/Event/EnterEventField.cs b/EpinelPS/LobbyServer/Event/EnterEventField.cs index 561d36e..cf88334 100644 --- a/EpinelPS/LobbyServer/Event/EnterEventField.cs +++ b/EpinelPS/LobbyServer/Event/EnterEventField.cs @@ -8,8 +8,8 @@ namespace EpinelPS.LobbyServer.Event { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqEnterEventField req = await ReadData(); + User user = GetUser(); ResEnterEventField response = new() { @@ -27,11 +27,11 @@ namespace EpinelPS.LobbyServer.Event user.FieldInfoNew.Add(req.MapId, field); } - foreach (var stage in field.CompletedStages) + foreach (int stage in field.CompletedStages) { response.Field.Stages.Add(new NetFieldStageData() { StageId = stage }); } - foreach (var obj in field.CompletedObjects) + foreach (NetFieldObject obj in field.CompletedObjects) { response.Field.Objects.Add(obj); } diff --git a/EpinelPS/LobbyServer/Event/EventLoginGet.cs b/EpinelPS/LobbyServer/Event/EventLoginGet.cs index cfa772e..fae6dba 100644 --- a/EpinelPS/LobbyServer/Event/EventLoginGet.cs +++ b/EpinelPS/LobbyServer/Event/EventLoginGet.cs @@ -8,18 +8,19 @@ namespace EpinelPS.LobbyServer.Event { protected override async Task HandleAsync() { - var req = await ReadData(); - var evid = req.EventId; - var response = new ResLoginEventData(); // fields "EndDate", "DisableDate", "RewardHistories", "LastAttendance" - - response.EndDate = DateTime.Now.AddDays(13).Ticks; - response.DisableDate = DateTime.Now.AddDays(13).Ticks; - response.LastAttendance = new LoginEventAttendance + ReqLoginEventData req = await ReadData(); + int evid = req.EventId; + ResLoginEventData response = new() { - Day = 14, // Example day value, adjust as needed - AttendanceDate = DateTime.UtcNow.Subtract(TimeSpan.FromDays(1)).Ticks // Assign Ticks here - }; - response.RewardHistories.Add(new LoginEventRewardHistory() { IsReceived = true, Day = 1 } ); + EndDate = DateTime.Now.AddDays(13).Ticks, + DisableDate = DateTime.Now.AddDays(13).Ticks, + LastAttendance = new LoginEventAttendance + { + Day = 14, // Example day value, adjust as needed + AttendanceDate = DateTime.UtcNow.Subtract(TimeSpan.FromDays(1)).Ticks // Assign Ticks here + } + }; // fields "EndDate", "DisableDate", "RewardHistories", "LastAttendance" + response.RewardHistories.Add(new LoginEventRewardHistory() { IsReceived = true, Day = 1 } ); response.RewardHistories.Add(new LoginEventRewardHistory() { IsReceived = true, Day = 2 } ); response.RewardHistories.Add(new LoginEventRewardHistory() { IsReceived = true, Day = 3 } ); response.RewardHistories.Add(new LoginEventRewardHistory() { IsReceived = true, Day = 4 } ); diff --git a/EpinelPS/LobbyServer/Event/EventTypes.cs b/EpinelPS/LobbyServer/Event/EventTypes.cs index 044345d..095ddfc 100644 --- a/EpinelPS/LobbyServer/Event/EventTypes.cs +++ b/EpinelPS/LobbyServer/Event/EventTypes.cs @@ -1,60 +1,57 @@ namespace EpinelPS.LobbyServer.Event { - public static class EventConstants + public enum EventType : int { - //bc enum needs casting in each entry in list events and get joined event - //and casting for each single entry would be more tedious that placing a variable here - //if there is a way to plainly write event type without casting to int or this tower of variables please do so - public const int None = 0; - public const int DailyMissionEvent = 1; - public const int LoginEvent = 2; - public const int ViewShortCut = 3; - public const int CooperationEvent = 4; - public const int StoryEvent = 5; - public const int PickupGachaEvent = 6; - public const int PollEvent = 7; - public const int ComeBackUserEvent = 8; - public const int EventPass = 9; - public const int FieldHubEvent = 10; - public const int ShopEvent = 11; - public const int MissionEvent = 12; - public const int ChargeGachaEvent = 13; - public const int MiniGameSortOut = 14; - public const int CharacterSkillResetEvent = 15; - public const int EventQuest = 16; - public const int RewardUpEvent = 17; - public const int SDBattleEvent = 18; - public const int TextAdventure = 19; - public const int ChallengeModeEvent = 20; - public const int DailyFreeGachaEvent = 21; - public const int BoxGachaEvent = 22; - public const int DiceEvent = 23; - public const int BBQTycoon = 24; - public const int CE002MiniGame = 25; - public const int TriggerMissionEventReward = 26; - public const int ArenaRookieGroupShuffle = 27; - public const int ArenaSpecialGroupShuffle = 28; - public const int NKSMiniGame = 29; - public const int DatingSimulator = 30; - public const int DessertRush = 31; - public const int CE003MiniGame = 32; - public const int TowerDefense = 33; - public const int EventPlaySoda = 34; - public const int IslandAdventure = 35; - public const int MiniGameDD = 36; - public const int CE004MiniGame = 37; - public const int MVGMiniGame = 38; - public const int DragonDungeonRunMiniGame = 39; - public const int NewPlayerLottery = 40; - public const int PirateCafe = 41; - public const int CEEvaMiniGame = 42; - public const int BubbleMarchMiniGame = 43; - public const int CE006BossChallengeMiniGame = 44; - public const int SupportCharacterEvent = 45; - public const int GachaBoard = 46; - public const int FreeRewardPass = 47; - public const int GachaPayback = 48; - public const int FieldCollectEvent = 49; - public const int MiniGameBTG = 50; + None = 0, + DailyMissionEvent = 1, + LoginEvent = 2, + ViewShortCut = 3, + CooperationEvent = 4, + StoryEvent = 5, + PickupGachaEvent = 6, + PollEvent = 7, + ComeBackUserEvent = 8, + EventPass = 9, + FieldHubEvent = 10, + ShopEvent = 11, + MissionEvent = 12, + ChargeGachaEvent = 13, + MiniGameSortOut = 14, + CharacterSkillResetEvent = 15, + EventQuest = 16, + RewardUpEvent = 17, + SDBattleEvent = 18, + TextAdventure = 19, + ChallengeModeEvent = 20, + DailyFreeGachaEvent = 21, + BoxGachaEvent = 22, + DiceEvent = 23, + BBQTycoon = 24, + CE002MiniGame = 25, + TriggerMissionEventReward = 26, + ArenaRookieGroupShuffle = 27, + ArenaSpecialGroupShuffle = 28, + NKSMiniGame = 29, + DatingSimulator = 30, + DessertRush = 31, + CE003MiniGame = 32, + TowerDefense = 33, + EventPlaySoda = 34, + IslandAdventure = 35, + MiniGameDD = 36, + CE004MiniGame = 37, + MVGMiniGame = 38, + DragonDungeonRunMiniGame = 39, + NewPlayerLottery = 40, + PirateCafe = 41, + CEEvaMiniGame = 42, + BubbleMarchMiniGame = 43, + CE006BossChallengeMiniGame = 44, + SupportCharacterEvent = 45, + GachaBoard = 46, + FreeRewardPass = 47, + GachaPayback = 48, + FieldCollectEvent = 49, + MiniGameBTG = 50 } } diff --git a/EpinelPS/LobbyServer/Event/Field/ListPasswordDoor.cs b/EpinelPS/LobbyServer/Event/Field/ListPasswordDoor.cs index 8a044d4..1ebd168 100644 --- a/EpinelPS/LobbyServer/Event/Field/ListPasswordDoor.cs +++ b/EpinelPS/LobbyServer/Event/Field/ListPasswordDoor.cs @@ -1,17 +1,16 @@ using EpinelPS.Utils; -using static EpinelPS.LobbyServer.Event.EventConstants; -namespace EpinelPS.LobbyServer.Event +namespace EpinelPS.LobbyServer.Event.Field { [PacketPath("/event/field/password-door/list")] public class ListPasswordDoor : LobbyMsgHandler { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqListFieldPasswordDoorData req = await ReadData(); + Database.User user = GetUser(); - var response = new ResListFieldPasswordDoorData(); + ResListFieldPasswordDoorData response = new(); // TODO diff --git a/EpinelPS/LobbyServer/Event/GetChallengeStage.cs b/EpinelPS/LobbyServer/Event/GetChallengeStage.cs index dadfed0..678c933 100644 --- a/EpinelPS/LobbyServer/Event/GetChallengeStage.cs +++ b/EpinelPS/LobbyServer/Event/GetChallengeStage.cs @@ -7,15 +7,17 @@ namespace EpinelPS.LobbyServer.Event { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqChallengeEventStageData req = await ReadData(); + Database.User user = GetUser(); - var response = new ResChallengeEventStageData(); - response.RemainTicket = 3; - response.TeamData = user.UserTeams[1]; + ResChallengeEventStageData response = new() + { + RemainTicket = 3, + TeamData = user.UserTeams[1] + }; // TODO implement properly - + await WriteDataAsync(response); } } diff --git a/EpinelPS/LobbyServer/Event/GetClearedMission.cs b/EpinelPS/LobbyServer/Event/GetClearedMission.cs index c05381d..8428bcf 100644 --- a/EpinelPS/LobbyServer/Event/GetClearedMission.cs +++ b/EpinelPS/LobbyServer/Event/GetClearedMission.cs @@ -7,10 +7,10 @@ namespace EpinelPS.LobbyServer.Event { protected override async Task HandleAsync() { - var req = await ReadData(); //has EventIdList - - - var response = new ResGetEventMissionClear(); + ReqGetEventMissionClear req = await ReadData(); //has EventIdList + + + ResGetEventMissionClear response = new(); // response.ResGetEventMissionClear.Add(new NetEventMissionClearData(EventId = 0, EventMissionId = 0 , CreatedAt = 0)); // TODO diff --git a/EpinelPS/LobbyServer/Event/GetEventScenario.cs b/EpinelPS/LobbyServer/Event/GetEventScenario.cs index 4093336..b952439 100644 --- a/EpinelPS/LobbyServer/Event/GetEventScenario.cs +++ b/EpinelPS/LobbyServer/Event/GetEventScenario.cs @@ -11,10 +11,10 @@ namespace EpinelPS.LobbyServer.Event { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqGetEventScenarioData req = await ReadData(); + User user = GetUser(); - var response = new ResGetEventScenarioData(); + ResGetEventScenarioData response = new(); /* if (user.EventInfo.TryGetValue(req.EventId, out EventData? data)) diff --git a/EpinelPS/LobbyServer/Event/GetJoinedEvent.cs b/EpinelPS/LobbyServer/Event/GetJoinedEvent.cs index 0ac542e..f589bb2 100644 --- a/EpinelPS/LobbyServer/Event/GetJoinedEvent.cs +++ b/EpinelPS/LobbyServer/Event/GetJoinedEvent.cs @@ -1,5 +1,4 @@ using EpinelPS.Utils; -using static EpinelPS.LobbyServer.Event.EventConstants; namespace EpinelPS.LobbyServer.Event { [PacketPath("/event/getjoinedevent")] @@ -7,16 +6,16 @@ namespace EpinelPS.LobbyServer.Event { protected override async Task HandleAsync() { - var req = await ReadData(); - //types are defined in EventTypes.cs - var response = new ResGetJoinedEvent(); + ReqGetJoinedEvent req = await ReadData(); + //types are defined in EventTypes.cs + ResGetJoinedEvent response = new(); response.EventWithJoinData.Add(new NetEventWithJoinData() { EventData = new NetEventData() { Id = 20001, - EventSystemType = PickupGachaEvent, + EventSystemType = (int)EventType.PickupGachaEvent, EventVisibleDate = DateTime.UtcNow.Subtract(TimeSpan.FromDays(7)).Ticks, EventStartDate = DateTime.UtcNow.Subtract(TimeSpan.FromDays(1)).Ticks, EventEndDate = DateTime.Now.AddDays(20).Ticks, @@ -31,7 +30,7 @@ namespace EpinelPS.LobbyServer.Event EventData = new NetEventData() { Id = 70077, - EventSystemType = PickupGachaEvent, + EventSystemType = (int)EventType.PickupGachaEvent, EventVisibleDate = DateTime.UtcNow.Subtract(TimeSpan.FromDays(7)).Ticks, EventStartDate = DateTime.UtcNow.Subtract(TimeSpan.FromDays(1)).Ticks, EventEndDate = DateTime.Now.AddDays(20).Ticks, @@ -44,7 +43,7 @@ namespace EpinelPS.LobbyServer.Event EventData = new NetEventData() { Id = 10046, - EventSystemType = LoginEvent, + EventSystemType = (int)EventType.LoginEvent, EventStartDate = DateTime.UtcNow.Subtract(TimeSpan.FromDays(1)).Ticks, EventVisibleDate = DateTime.UtcNow.Subtract(TimeSpan.FromDays(1)).Ticks, EventDisableDate = DateTime.Now.AddDays(20).Ticks, @@ -57,7 +56,7 @@ namespace EpinelPS.LobbyServer.Event EventData = new NetEventData() { Id = 40066, - EventSystemType = StoryEvent, + EventSystemType = (int)EventType.StoryEvent, EventStartDate = DateTime.UtcNow.Subtract(TimeSpan.FromDays(1)).Ticks, EventVisibleDate = DateTime.UtcNow.Subtract(TimeSpan.FromDays(1)).Ticks, EventDisableDate = DateTime.Now.AddDays(20).Ticks, @@ -70,7 +69,7 @@ namespace EpinelPS.LobbyServer.Event EventData = new NetEventData() { Id = 60066, - EventSystemType = ChallengeModeEvent, + EventSystemType = (int)EventType.ChallengeModeEvent, EventStartDate = DateTime.UtcNow.Subtract(TimeSpan.FromDays(1)).Ticks, EventVisibleDate = DateTime.UtcNow.Subtract(TimeSpan.FromDays(1)).Ticks, EventDisableDate = DateTime.Now.AddDays(20).Ticks, @@ -83,7 +82,7 @@ namespace EpinelPS.LobbyServer.Event EventData = new NetEventData() { Id = 70078, - EventSystemType = PickupGachaEvent, + EventSystemType = (int)EventType.PickupGachaEvent, EventStartDate = DateTime.UtcNow.Subtract(TimeSpan.FromDays(1)).Ticks, EventVisibleDate = DateTime.UtcNow.Subtract(TimeSpan.FromDays(1)).Ticks, EventDisableDate = DateTime.Now.AddDays(20).Ticks, @@ -96,7 +95,7 @@ namespace EpinelPS.LobbyServer.Event EventData = new NetEventData() { Id = 70079, - EventSystemType = PickupGachaEvent, + EventSystemType = (int)EventType.PickupGachaEvent, EventStartDate = DateTime.UtcNow.Subtract(TimeSpan.FromDays(1)).Ticks, EventVisibleDate = DateTime.UtcNow.Subtract(TimeSpan.FromDays(1)).Ticks, EventDisableDate = DateTime.Now.AddDays(20).Ticks, diff --git a/EpinelPS/LobbyServer/Event/ListEvents.cs b/EpinelPS/LobbyServer/Event/ListEvents.cs index b5b1b32..69bd638 100644 --- a/EpinelPS/LobbyServer/Event/ListEvents.cs +++ b/EpinelPS/LobbyServer/Event/ListEvents.cs @@ -1,5 +1,4 @@ using EpinelPS.Utils; -using static EpinelPS.LobbyServer.Event.EventConstants; namespace EpinelPS.LobbyServer.Event { @@ -8,16 +7,16 @@ namespace EpinelPS.LobbyServer.Event { protected override async Task HandleAsync() { - var req = await ReadData(); + ReqGetEventList req = await ReadData(); // types are defined in EventTypes.cs - var response = new ResGetEventList(); + ResGetEventList response = new(); // Boom! The Ghost! summer event response.EventList.Add(new NetEventData() { Id = 82400, - EventSystemType = FieldHubEvent, + EventSystemType = (int)EventType.FieldHubEvent, EventVisibleDate = DateTime.UtcNow.Subtract(TimeSpan.FromDays(7)).Ticks, EventStartDate = DateTime.UtcNow.Subtract(TimeSpan.FromDays(1)).Ticks, EventEndDate = DateTime.Now.AddDays(20).Ticks, @@ -26,7 +25,7 @@ namespace EpinelPS.LobbyServer.Event response.EventList.Add(new NetEventData() { Id = 82401, - EventSystemType = MiniGameBTG, + EventSystemType = (int)EventType.MiniGameBTG, EventVisibleDate = DateTime.UtcNow.Subtract(TimeSpan.FromDays(7)).Ticks, EventStartDate = DateTime.UtcNow.Subtract(TimeSpan.FromDays(1)).Ticks, EventEndDate = DateTime.Now.AddDays(20).Ticks, @@ -35,7 +34,7 @@ namespace EpinelPS.LobbyServer.Event response.EventList.Add(new NetEventData() { Id = 82402, - EventSystemType = ShopEvent, + EventSystemType = (int)EventType.ShopEvent, EventVisibleDate = DateTime.UtcNow.Subtract(TimeSpan.FromDays(7)).Ticks, EventStartDate = DateTime.UtcNow.Subtract(TimeSpan.FromDays(1)).Ticks, EventEndDate = DateTime.Now.AddDays(20).Ticks, @@ -44,7 +43,7 @@ namespace EpinelPS.LobbyServer.Event response.EventList.Add(new NetEventData() { Id = 40084, - EventSystemType = StoryEvent, + EventSystemType = (int)EventType.StoryEvent, EventVisibleDate = DateTime.UtcNow.Subtract(TimeSpan.FromDays(7)).Ticks, EventStartDate = DateTime.UtcNow.Subtract(TimeSpan.FromDays(1)).Ticks, EventEndDate = DateTime.Now.AddDays(20).Ticks, @@ -53,7 +52,7 @@ namespace EpinelPS.LobbyServer.Event response.EventList.Add(new NetEventData() { Id = 40085, - EventSystemType = StoryEvent, + EventSystemType = (int)EventType.StoryEvent, EventVisibleDate = DateTime.UtcNow.Subtract(TimeSpan.FromDays(7)).Ticks, EventStartDate = DateTime.UtcNow.Subtract(TimeSpan.FromDays(1)).Ticks, EventEndDate = DateTime.Now.AddDays(20).Ticks, @@ -62,7 +61,7 @@ namespace EpinelPS.LobbyServer.Event response.EventList.Add(new NetEventData() { Id = 60084, - EventSystemType = ChallengeModeEvent, + EventSystemType = (int)EventType.ChallengeModeEvent, EventVisibleDate = DateTime.UtcNow.Subtract(TimeSpan.FromDays(7)).Ticks, EventStartDate = DateTime.UtcNow.Subtract(TimeSpan.FromDays(1)).Ticks, EventEndDate = DateTime.Now.AddDays(20).Ticks, @@ -71,7 +70,7 @@ namespace EpinelPS.LobbyServer.Event response.EventList.Add(new NetEventData() { Id = 100032, - EventSystemType = EventPass, + EventSystemType = (int)EventType.EventPass, EventVisibleDate = DateTime.UtcNow.Subtract(TimeSpan.FromDays(7)).Ticks, EventStartDate = DateTime.UtcNow.Subtract(TimeSpan.FromDays(1)).Ticks, EventEndDate = DateTime.Now.AddDays(20).Ticks, @@ -80,7 +79,7 @@ namespace EpinelPS.LobbyServer.Event response.EventList.Add(new NetEventData() { Id = 82403, - EventSystemType = LoginEvent, + EventSystemType = (int)EventType.LoginEvent, EventVisibleDate = DateTime.UtcNow.Subtract(TimeSpan.FromDays(7)).Ticks, EventStartDate = DateTime.UtcNow.Subtract(TimeSpan.FromDays(1)).Ticks, EventEndDate = DateTime.Now.AddDays(20).Ticks, diff --git a/EpinelPS/LobbyServer/Event/Minigame/CE002/GetCe002Data.cs b/EpinelPS/LobbyServer/Event/Minigame/CE002/GetCe002Data.cs index a48cc95..c7f8867 100644 --- a/EpinelPS/LobbyServer/Event/Minigame/CE002/GetCe002Data.cs +++ b/EpinelPS/LobbyServer/Event/Minigame/CE002/GetCe002Data.cs @@ -7,10 +7,10 @@ namespace EpinelPS.LobbyServer.Event.Minigame.CE002 { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqGetMiniGameCe002Data req = await ReadData(); + Database.User user = GetUser(); - var response = new ResGetMiniGameCe002Data + ResGetMiniGameCe002Data response = new() { Data = new() { diff --git a/EpinelPS/LobbyServer/Event/Minigame/CE006/GetSBStats.cs b/EpinelPS/LobbyServer/Event/Minigame/CE006/GetSBStats.cs index 20bcc1a..5ecf484 100644 --- a/EpinelPS/LobbyServer/Event/Minigame/CE006/GetSBStats.cs +++ b/EpinelPS/LobbyServer/Event/Minigame/CE006/GetSBStats.cs @@ -7,10 +7,10 @@ namespace EpinelPS.LobbyServer.Event.Minigame.CE006 { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqGetStellarBladeStatistics req = await ReadData(); + Database.User user = GetUser(); - var response = new ResGetStellarBladeStatistics(); + ResGetStellarBladeStatistics response = new(); // TODO implement diff --git a/EpinelPS/LobbyServer/Event/Mission/GetClearList.cs b/EpinelPS/LobbyServer/Event/Mission/GetClearList.cs index 4dde9b4..c43aa0a 100644 --- a/EpinelPS/LobbyServer/Event/Mission/GetClearList.cs +++ b/EpinelPS/LobbyServer/Event/Mission/GetClearList.cs @@ -7,9 +7,9 @@ namespace EpinelPS.LobbyServer.Event.Mission { protected override async Task HandleAsync() { - var req = await ReadData(); + ReqGetEventMissionClearList req = await ReadData(); - var response = new ResGetEventMissionClearList(); //field ResGetEventMissionClearMap data type NestEventMissionClear field NestEventMissionClear data type NetEventMissionClearData fields EventId EventMissionId CreatedAt + ResGetEventMissionClearList response = new(); //field ResGetEventMissionClearMap data type NestEventMissionClear field NestEventMissionClear data type NetEventMissionClearData fields EventId EventMissionId CreatedAt // TOOD diff --git a/EpinelPS/LobbyServer/Event/Shop/ListProductList.cs b/EpinelPS/LobbyServer/Event/Shop/ListProductList.cs index f35db56..7b4f02c 100644 --- a/EpinelPS/LobbyServer/Event/Shop/ListProductList.cs +++ b/EpinelPS/LobbyServer/Event/Shop/ListProductList.cs @@ -7,10 +7,10 @@ namespace EpinelPS.LobbyServer.Event.Shop { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqShopProductList req = await ReadData(); + Database.User user = GetUser(); - var response = new ResShopProductList(); + ResShopProductList response = new(); response.Shops.Add(new NetShopProductData() { diff --git a/EpinelPS/LobbyServer/Event/StoryEvent/EnterStage.cs b/EpinelPS/LobbyServer/Event/StoryEvent/EnterStage.cs index d946c2b..bf7cd8e 100644 --- a/EpinelPS/LobbyServer/Event/StoryEvent/EnterStage.cs +++ b/EpinelPS/LobbyServer/Event/StoryEvent/EnterStage.cs @@ -1,16 +1,16 @@ using EpinelPS.Utils; using EpinelPS.Database; -namespace EpinelPS.LobbyServer.Event.EventStory +namespace EpinelPS.LobbyServer.Event.StoryEvent { [PacketPath("/event/storydungeon/enterstage")] public class EnterEventStoryStage : LobbyMsgHandler { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); - var response = new ResEnterEventStage(); + ReqEnterEventStage req = await ReadData(); + User user = GetUser(); + ResEnterEventStage response = new(); await WriteDataAsync(response); } diff --git a/EpinelPS/LobbyServer/Event/StoryEvent/GetStoryDungeon.cs b/EpinelPS/LobbyServer/Event/StoryEvent/GetStoryDungeon.cs index 604065d..767d735 100644 --- a/EpinelPS/LobbyServer/Event/StoryEvent/GetStoryDungeon.cs +++ b/EpinelPS/LobbyServer/Event/StoryEvent/GetStoryDungeon.cs @@ -1,16 +1,16 @@ using EpinelPS.Utils; using EpinelPS.Database; -namespace EpinelPS.LobbyServer.Event.EventStory +namespace EpinelPS.LobbyServer.Event.StoryEvent { [PacketPath("/event/storydungeon/get")] public class GetStoryDungeon : LobbyMsgHandler { protected override async Task HandleAsync() { - var req = await ReadData(); - var evid = req.EventId; - var user = GetUser(); + ReqStoryDungeonEventData req = await ReadData(); + int evid = req.EventId; + User user = GetUser(); if (!user.EventInfo.TryGetValue(evid, out EventData? eventData)) @@ -18,14 +18,16 @@ namespace EpinelPS.LobbyServer.Event.EventStory eventData = new(); } - var response = new ResStoryDungeonEventData(); - response.RemainTicket = 5; + ResStoryDungeonEventData response = new() + { + RemainTicket = 5, - response.TeamData = new NetUserTeamData() - { - LastContentsTeamNumber = 1, - Type = 20 - }; + TeamData = new NetUserTeamData() + { + LastContentsTeamNumber = 1, + Type = 20 + } + }; response.LastClearedEventStageList.Add(new NetLastClearedEventStageData() { DifficultyId = eventData.Diff, diff --git a/EpinelPS/LobbyServer/FavoriteItem/GetFavoriteItemLibrary.cs b/EpinelPS/LobbyServer/FavoriteItem/GetFavoriteItemLibrary.cs index 0d55998..c8fac52 100644 --- a/EpinelPS/LobbyServer/FavoriteItem/GetFavoriteItemLibrary.cs +++ b/EpinelPS/LobbyServer/FavoriteItem/GetFavoriteItemLibrary.cs @@ -7,10 +7,10 @@ namespace EpinelPS.LobbyServer.FavoriteItem { protected override async Task HandleAsync() { - var req = await ReadData(); + ReqGetFavoriteItemLibrary req = await ReadData(); - var response = new ResGetFavoriteItemLibrary(); - var user = GetUser(); + ResGetFavoriteItemLibrary response = new(); + Database.User user = GetUser(); await WriteDataAsync(response); diff --git a/EpinelPS/LobbyServer/FavoriteItem/ListFavoriteItem.cs b/EpinelPS/LobbyServer/FavoriteItem/ListFavoriteItem.cs index efc3431..b86199c 100644 --- a/EpinelPS/LobbyServer/FavoriteItem/ListFavoriteItem.cs +++ b/EpinelPS/LobbyServer/FavoriteItem/ListFavoriteItem.cs @@ -7,10 +7,10 @@ namespace EpinelPS.LobbyServer.FavoriteItem { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqListFavoriteItem req = await ReadData(); + Database.User user = GetUser(); - var response = new ResListFavoriteItem(); + ResListFavoriteItem response = new(); await WriteDataAsync(response); } diff --git a/EpinelPS/LobbyServer/FavoriteItem/ListFavoriteItemQuests.cs b/EpinelPS/LobbyServer/FavoriteItem/ListFavoriteItemQuests.cs index 64e2e61..da7e9fd 100644 --- a/EpinelPS/LobbyServer/FavoriteItem/ListFavoriteItemQuests.cs +++ b/EpinelPS/LobbyServer/FavoriteItem/ListFavoriteItemQuests.cs @@ -7,10 +7,10 @@ namespace EpinelPS.LobbyServer.FavoriteItem { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqListFavoriteItemQuest req = await ReadData(); + Database.User user = GetUser(); - var response = new ResListFavoriteItemQuest(); + ResListFavoriteItemQuest response = new(); await WriteDataAsync(response); } diff --git a/EpinelPS/LobbyServer/Friend/GetFriends.cs b/EpinelPS/LobbyServer/Friend/GetFriends.cs index b643557..499b625 100644 --- a/EpinelPS/LobbyServer/Friend/GetFriends.cs +++ b/EpinelPS/LobbyServer/Friend/GetFriends.cs @@ -7,8 +7,8 @@ namespace EpinelPS.LobbyServer.Friend { protected override async Task HandleAsync() { - var req = await ReadData(); - var response = new ResGetFriendData(); + ReqGetFriendData req = await ReadData(); + ResGetFriendData response = new(); await WriteDataAsync(response); diff --git a/EpinelPS/LobbyServer/Gacha/CheckGachaDailyEvent.cs b/EpinelPS/LobbyServer/Gacha/CheckGachaDailyEvent.cs index 8341265..62319d3 100644 --- a/EpinelPS/LobbyServer/Gacha/CheckGachaDailyEvent.cs +++ b/EpinelPS/LobbyServer/Gacha/CheckGachaDailyEvent.cs @@ -7,21 +7,22 @@ namespace EpinelPS.LobbyServer.Gacha { protected override async Task HandleAsync() { - var req = await ReadData(); - var response = new ResCheckDailyFreeGacha(); - - // TODO implement - response.FreeCount = 1; - response.EventData = new NetEventData() + ReqCheckDailyFreeGacha req = await ReadData(); + ResCheckDailyFreeGacha response = new() { - Id = 80005, - EventSystemType = 21, - EventVisibleDate = DateTime.UtcNow.Subtract(TimeSpan.FromDays(7)).Ticks, - EventStartDate = DateTime.UtcNow.Subtract(TimeSpan.FromDays(1)).Ticks, - EventEndDate = DateTime.Now.AddDays(20).Ticks, - EventDisableDate = DateTime.Now.AddDays(20).Ticks + // TODO implement + FreeCount = 1, + EventData = new NetEventData() + { + Id = 80005, + EventSystemType = 21, + EventVisibleDate = DateTime.UtcNow.Subtract(TimeSpan.FromDays(7)).Ticks, + EventStartDate = DateTime.UtcNow.Subtract(TimeSpan.FromDays(1)).Ticks, + EventEndDate = DateTime.Now.AddDays(20).Ticks, + EventDisableDate = DateTime.Now.AddDays(20).Ticks + } }; - // this is net event data i think it should be the same as in list events and get joined event only for free pull gacha event + // this is net event data i think it should be the same as in list events and get joined event only for free pull gacha event await WriteDataAsync(response); } diff --git a/EpinelPS/LobbyServer/Gacha/ExecGacha.cs b/EpinelPS/LobbyServer/Gacha/ExecGacha.cs index 9ba814b..347a930 100644 --- a/EpinelPS/LobbyServer/Gacha/ExecGacha.cs +++ b/EpinelPS/LobbyServer/Gacha/ExecGacha.cs @@ -20,54 +20,54 @@ namespace EpinelPS.LobbyServer.Gacha protected override async Task HandleAsync() { - var req = await ReadData(); - var IncreasedChanceCharacterID = req.Tid; + ReqExecuteGacha req = await ReadData(); + int IncreasedChanceCharacterID = req.Tid; // Count determines whether we select 1 or 10 characters int numberOfPulls = req.Count == 1 ? 1 : 10; - var user = GetUser(); - var response = new ResExecuteGacha() { Reward = new NetRewardData() { PassPoint = new() } }; + User user = GetUser(); + ResExecuteGacha response = new() { Reward = new NetRewardData() { PassPoint = new() } }; - var entireallCharacterData = GameData.Instance.CharacterTable.Values.ToList(); + List entireallCharacterData = [.. GameData.Instance.CharacterTable.Values]; // Remove the .Values part since it's already a list. // Group by name_code to treat same name_code as one character // Always add characters with grade_core_id == 1 and 101 - var allCharacterData = entireallCharacterData.GroupBy(c => c.name_code).SelectMany(g => g.Where(c => c.grade_core_id == 1 || c.grade_core_id == 101 || c.grade_core_id == 201 || c.name_code == 3999)).ToList(); + List allCharacterData = [.. entireallCharacterData.GroupBy(c => c.name_code).SelectMany(g => g.Where(c => c.grade_core_id == 1 || c.grade_core_id == 101 || c.grade_core_id == 201 || c.name_code == 3999))]; // Separate characters by rarity categories - var rCharacters = allCharacterData.Where(c => c.original_rare == "R").ToList(); - var srCharacters = allCharacterData.Where(c => c.original_rare == "SR").ToList(); + List rCharacters = [.. allCharacterData.Where(c => c.original_rare == "R")]; + List srCharacters = [.. allCharacterData.Where(c => c.original_rare == "SR")]; // Separate Pilgrim SSRs and non-Pilgrim SSRs - // treat overspec as pilgrim - var pilgrimCharacters = allCharacterData.Where(c => (c.original_rare == "SSR" && c.corporation == "PILGRIM") || (c.original_rare == "SSR" && c.corporation_sub_type == "OVERSPEC")).ToList(); - var ssrCharacters = allCharacterData.Where(c => c.original_rare == "SSR" && c.corporation != "PILGRIM").ToList(); + // treat overspec as pilgrim + List pilgrimCharacters = [.. allCharacterData.Where(c => (c.original_rare == "SSR" && c.corporation == "PILGRIM") || (c.original_rare == "SSR" && c.corporation_sub_type == "OVERSPEC"))]; + List ssrCharacters = [.. allCharacterData.Where(c => c.original_rare == "SSR" && c.corporation != "PILGRIM")]; - var selectedCharacters = new List(); + List selectedCharacters = []; // Check if user has 'sickpulls' set to true to use old method if (user.sickpulls) { // Old selection method: Randomly select characters based on req.Count value, excluding characters in the sickPullsExclusionList - selectedCharacters = allCharacterData.Where(c => !sickPullsExclusionList.Contains(c.id)).OrderBy(x => random.Next()).Take(numberOfPulls).ToList(); // Exclude characters based on the exclusion list for sick pulls + selectedCharacters = [.. allCharacterData.Where(c => !sickPullsExclusionList.Contains(c.id)).OrderBy(x => random.Next()).Take(numberOfPulls)]; // Exclude characters based on the exclusion list for sick pulls } else { // New method: Select characters based on req.Count value, with each character having its category determined independently, excluding characters in the normalPullsExclusionList for (int i = 0; i < numberOfPulls; i++) { - var character = SelectRandomCharacter(rCharacters, srCharacters, ssrCharacters, pilgrimCharacters, normalPullsExclusionList, IncreasedChanceCharacterID, allCharacterData); + CharacterRecord character = SelectRandomCharacter(rCharacters, srCharacters, ssrCharacters, pilgrimCharacters, normalPullsExclusionList, IncreasedChanceCharacterID, allCharacterData); selectedCharacters.Add(character); } } int totalBodyLabels = 0; - foreach (var characterData in selectedCharacters) + foreach (CharacterRecord characterData in selectedCharacters) { - var gacha = new NetGachaEntityData() + NetGachaEntityData gacha = new() { // PieceCount = 1, // Spare Body CurrencyValue = 0, // Body Label @@ -85,7 +85,7 @@ namespace EpinelPS.LobbyServer.Gacha { Database.Character character = user.GetCharacter(characterData.id) ?? throw new Exception("HasCharacter() returned true, however character was null"); - var existingItem = user.Items.FirstOrDefault(item => item.ItemType == characterData.piece_id); + ItemData? existingItem = user.Items.FirstOrDefault(item => item.ItemType == characterData.piece_id); response.Characters.Add(new NetUserCharacterDefaultData() { @@ -150,7 +150,7 @@ namespace EpinelPS.LobbyServer.Gacha else { // If the item does not exist, create a new item entry - var newItem = new ItemData() + ItemData newItem = new() { ItemType = characterData.piece_id, Csn = 0, @@ -228,9 +228,9 @@ namespace EpinelPS.LobbyServer.Gacha user.AddTrigger(TriggerType.GachaCharacter, 0, 0); } - var TicketType = req.CurrencyType; - var currencyType = TicketType == 5100 ? (int)CurrencyType.SilverMileageTicket : (int)CurrencyType.GoldMileageTicket; - var currencyTypeToAdd = TicketType == 5100 ? CurrencyType.SilverMileageTicket : CurrencyType.GoldMileageTicket; + int TicketType = req.CurrencyType; + int currencyType = TicketType == 5100 ? (int)CurrencyType.SilverMileageTicket : (int)CurrencyType.GoldMileageTicket; + CurrencyType currencyTypeToAdd = TicketType == 5100 ? CurrencyType.SilverMileageTicket : CurrencyType.GoldMileageTicket; response.Reward.Currency.Add(new NetCurrencyData() { Type = currencyType, Value = numberOfPulls }); response.Reward.Currency.Add(new NetCurrencyData() { Type = (int)CurrencyType.DissolutionPoint, Value = totalBodyLabels }); user.AddCurrency(currencyTypeToAdd, numberOfPulls); @@ -244,14 +244,14 @@ namespace EpinelPS.LobbyServer.Gacha private static CharacterRecord SelectRandomCharacter(List rCharacters,List srCharacters,List ssrCharacters,List pilgrimCharacters,List exclusionList,int increasedChanceCharacterID,List allCharacterData) { - // Remove excluded characters from each category - var availableRCharacters = rCharacters.Where(c => !exclusionList.Contains(c.id)).ToList(); - var availableSRCharacters = srCharacters.Where(c => !exclusionList.Contains(c.id)).ToList(); - var availableSSRCharacters = ssrCharacters.Where(c => !exclusionList.Contains(c.id)).ToList(); - var availablePilgrimCharacters = pilgrimCharacters.Where(c => !exclusionList.Contains(c.id)).ToList(); + // Remove excluded characters from each category + List availableRCharacters = [.. rCharacters.Where(c => !exclusionList.Contains(c.id))]; + List availableSRCharacters = [.. srCharacters.Where(c => !exclusionList.Contains(c.id))]; + List availableSSRCharacters = [.. ssrCharacters.Where(c => !exclusionList.Contains(c.id))]; + List availablePilgrimCharacters = [.. pilgrimCharacters.Where(c => !exclusionList.Contains(c.id))]; - // Find the IncreasedChanceCharacterID in the SSR list - var increasedChanceCharacter = availableSSRCharacters.FirstOrDefault(c => c.id == increasedChanceCharacterID); + // Find the IncreasedChanceCharacterID in the SSR list + CharacterRecord? increasedChanceCharacter = availableSSRCharacters.FirstOrDefault(c => c.id == increasedChanceCharacterID); bool isPilgrimOrOverspec = increasedChanceCharacter != null && (increasedChanceCharacter.corporation == "PILGRIM" || increasedChanceCharacter.corporation_sub_type == "OVERSPEC"); double increasedChance = increasedChanceCharacterID != 1 ? (isPilgrimOrOverspec ? 1.0 : 2.0): 0.0; diff --git a/EpinelPS/LobbyServer/Gacha/ExecuteEventGacha.cs b/EpinelPS/LobbyServer/Gacha/ExecuteEventGacha.cs index 29f1b35..ed65756 100644 --- a/EpinelPS/LobbyServer/Gacha/ExecuteEventGacha.cs +++ b/EpinelPS/LobbyServer/Gacha/ExecuteEventGacha.cs @@ -10,60 +10,60 @@ namespace EpinelPS.LobbyServer.Gacha [PacketPath("/gacha/event/execute")] public class ExecuteEventGacha : LobbyMsgHandler { - private static readonly Random random = new Random(); + private static readonly Random random = new(); // Exclusion lists for sick pulls mode and normal mode 2500601 is the broken R rarity dorothy - private static readonly List sickPullsExclusionList = new List { 2500601 }; // Add more IDs as needed - private static readonly List normalPullsExclusionList = new List { 2500601,422401,306201,399901,399902,399903,399904,201401,301501,112101,313201,319301,319401,320301,422601,426101,328301,328401,235101,235301,136101,339201,140001,140101,140201,580001,580101,580201,581001,581101,581201,582001,582101,582201,583001,583101,583201,583301,190101,290701 }; // Add more IDs as needed + private static readonly List sickPullsExclusionList = [2500601]; // Add more IDs as needed + private static readonly List normalPullsExclusionList = [2500601,422401,306201,399901,399902,399903,399904,201401,301501,112101,313201,319301,319401,320301,422601,426101,328301,328401,235101,235301,136101,339201,140001,140101,140201,580001,580101,580201,581001,581101,581201,582001,582101,582201,583001,583101,583201,583301,190101,290701]; // Add more IDs as needed protected override async Task HandleAsync() { - var req = await ReadData(); + ReqExecuteDailyFreeGacha req = await ReadData(); // Count determines whether we select 1 or 10 characters - int numberOfPulls = 1; + int numberOfPulls = 1; - var user = GetUser(); - var response = new ResExecuteDailyFreeGacha(); + User user = GetUser(); + ResExecuteDailyFreeGacha response = new(); - var entireallCharacterData = GameData.Instance.CharacterTable.Values.ToList(); - // Remove the .Values part since it's already a list. - // Group by name_code to treat same name_code as one character - // Always add characters with grade_core_id == 1 and 101 - var allCharacterData = entireallCharacterData.GroupBy(c => c.name_code).SelectMany(g => g.Where(c => c.grade_core_id == 1 || c.grade_core_id == 101 || c.grade_core_id == 201 || c.name_code == 3999)).ToList(); + List entireallCharacterData = [.. GameData.Instance.CharacterTable.Values]; + // Remove the .Values part since it's already a list. + // Group by name_code to treat same name_code as one character + // Always add characters with grade_core_id == 1 and 101 + List allCharacterData = [.. entireallCharacterData.GroupBy(c => c.name_code).SelectMany(g => g.Where(c => c.grade_core_id == 1 || c.grade_core_id == 101 || c.grade_core_id == 201 || c.name_code == 3999))]; // Separate characters by rarity categories - var rCharacters = allCharacterData.Where(c => c.original_rare == "R" ).ToList(); - var srCharacters = allCharacterData.Where(c => c.original_rare == "SR").ToList(); - - // Separate Pilgrim SSRs and non-Pilgrim SSRs - var pilgrimCharacters = allCharacterData.Where(c => c.original_rare == "SSR" && c.corporation == "PILGRIM").ToList(); - var ssrCharacters = allCharacterData.Where(c => c.original_rare == "SSR" && c.corporation != "PILGRIM").ToList(); + List rCharacters = [.. allCharacterData.Where(c => c.original_rare == "R" )]; + List srCharacters = [.. allCharacterData.Where(c => c.original_rare == "SR")]; - var selectedCharacters = new List(); + // Separate Pilgrim SSRs and non-Pilgrim SSRs + List pilgrimCharacters = [.. allCharacterData.Where(c => c.original_rare == "SSR" && c.corporation == "PILGRIM")]; + List ssrCharacters = [.. allCharacterData.Where(c => c.original_rare == "SSR" && c.corporation != "PILGRIM")]; + + List selectedCharacters = []; // Check if user has 'sickpulls' set to true to use old method if (user.sickpulls) { // Old selection method: Randomly select characters based on req.Count value, excluding characters in the sickPullsExclusionList - selectedCharacters = allCharacterData.Where(c => !sickPullsExclusionList.Contains(c.id)).OrderBy(x => random.Next()).Take(numberOfPulls).ToList(); // Exclude characters based on the exclusion list for sick pulls + selectedCharacters = [.. allCharacterData.Where(c => !sickPullsExclusionList.Contains(c.id)).OrderBy(x => random.Next()).Take(numberOfPulls)]; // Exclude characters based on the exclusion list for sick pulls } else { // New method: Select characters based on req.Count value, with each character having its category determined independently, excluding characters in the normalPullsExclusionList for (int i = 0; i < numberOfPulls; i++) { - var character = SelectRandomCharacter(rCharacters, srCharacters, ssrCharacters, pilgrimCharacters, normalPullsExclusionList); + CharacterRecord character = SelectRandomCharacter(rCharacters, srCharacters, ssrCharacters, pilgrimCharacters, normalPullsExclusionList); selectedCharacters.Add(character); } } - var pieceIds = new List>(); // 2D array to store characterId and pieceId as Tuple + List> pieceIds = []; // 2D array to store characterId and pieceId as Tuple // Add each character's item to user.Items if the character exists in user.Characters - foreach (var characterData in selectedCharacters) + foreach (CharacterRecord characterData in selectedCharacters) { - // Check if the item for this character already exists in user.Items based on ItemType - var existingItem = user.Items.FirstOrDefault(item => item.ItemType == characterData.piece_id); + // Check if the item for this character already exists in user.Items based on ItemType + ItemData? existingItem = user.Items.FirstOrDefault(item => item.ItemType == characterData.piece_id); if (existingItem != null) { @@ -84,8 +84,8 @@ namespace EpinelPS.LobbyServer.Gacha } else { - // If the item does not exist, create a new item entry - var newItem = new ItemData() + // If the item does not exist, create a new item entry + ItemData newItem = new() { ItemType = characterData.piece_id, Csn = 0, @@ -113,14 +113,14 @@ namespace EpinelPS.LobbyServer.Gacha } // Populate the 2D array with characterId and pieceId for each selected character - foreach (var characterData in selectedCharacters) + foreach (CharacterRecord characterData in selectedCharacters) { - var characterId = characterData.id; - var pieceId = characterData.piece_id; + int characterId = characterData.id; + int pieceId = characterData.piece_id; // Store characterId and pieceId in the array pieceIds.Add(Tuple.Create(characterId, pieceId)); - var id = user.GenerateUniqueCharacterId(); + int id = user.GenerateUniqueCharacterId(); response.Gacha.Add(new NetGachaEntityData() { Corporation = 1, @@ -171,20 +171,20 @@ namespace EpinelPS.LobbyServer.Gacha private CharacterRecord SelectRandomCharacter(List rCharacters, List srCharacters, List ssrCharacters, List pilgrimCharacters, List exclusionList) { // Remove excluded characters from each category - var availableRCharacters = rCharacters.Where(c => !exclusionList.Contains(c.id)).ToList(); - var availableSRCharacters = srCharacters.Where(c => !exclusionList.Contains(c.id)).ToList(); - var availableSSRCharacters = ssrCharacters.Where(c => !exclusionList.Contains(c.id)).ToList(); - var availablePilgrimCharacters = pilgrimCharacters.Where(c => !exclusionList.Contains(c.id)).ToList(); + List availableRCharacters = [.. rCharacters.Where(c => !exclusionList.Contains(c.id))]; + List availableSRCharacters = [.. srCharacters.Where(c => !exclusionList.Contains(c.id))]; + List availableSSRCharacters = [.. ssrCharacters.Where(c => !exclusionList.Contains(c.id))]; + List availablePilgrimCharacters = [.. pilgrimCharacters.Where(c => !exclusionList.Contains(c.id))]; // Each time we call this method, a new category will be selected for a single character double roll = random.NextDouble() * 100; // Roll from 0 to 100 - if (roll < 53 && availableRCharacters.Any()) + if (roll < 53 && availableRCharacters.Count != 0) { // R category return availableRCharacters[random.Next(availableRCharacters.Count)]; } - else if (roll < 53 + 43 && availableSRCharacters.Any()) + else if (roll < 53 + 43 && availableSRCharacters.Count != 0) { // SR category return availableSRCharacters[random.Next(availableSRCharacters.Count)]; @@ -194,12 +194,12 @@ namespace EpinelPS.LobbyServer.Gacha // SSR category double ssrRoll = random.NextDouble() * 100; - if (ssrRoll < 4.55 && availablePilgrimCharacters.Any()) + if (ssrRoll < 4.55 && availablePilgrimCharacters.Count != 0) { // PILGRIM SSR return availablePilgrimCharacters[random.Next(availablePilgrimCharacters.Count)]; } - else if (availableSSRCharacters.Any()) + else if (availableSSRCharacters.Count != 0) { // Non-PILGRIM SSR return availableSSRCharacters[random.Next(availableSSRCharacters.Count)]; @@ -207,7 +207,7 @@ namespace EpinelPS.LobbyServer.Gacha } // Fallback to a random R character if somehow no SSR characters are left after exclusion - if (!availableRCharacters.Any()) + if (availableRCharacters.Count == 0) { throw new InvalidOperationException("No available characters found for gacha pull"); } diff --git a/EpinelPS/LobbyServer/Gacha/GetPayback.cs b/EpinelPS/LobbyServer/Gacha/GetPayback.cs index 07150a0..6ed239e 100644 --- a/EpinelPS/LobbyServer/Gacha/GetPayback.cs +++ b/EpinelPS/LobbyServer/Gacha/GetPayback.cs @@ -7,9 +7,9 @@ namespace EpinelPS.LobbyServer.Gacha { protected override async Task HandleAsync() { - var req = await ReadData(); + ReqGetGachaPaybackData req = await ReadData(); - var response = new ResGetGachaPaybackData(); + ResGetGachaPaybackData response = new(); // TODO implement diff --git a/EpinelPS/LobbyServer/Gacha/ListPity.cs b/EpinelPS/LobbyServer/Gacha/ListPity.cs index 55a4ff5..2591eac 100644 --- a/EpinelPS/LobbyServer/Gacha/ListPity.cs +++ b/EpinelPS/LobbyServer/Gacha/ListPity.cs @@ -7,9 +7,9 @@ namespace EpinelPS.LobbyServer.Gacha { protected override async Task HandleAsync() { - var req = await ReadData(); + ReqListGachaPityProgress req = await ReadData(); - var response = new ResListGachaPityProgress(); + ResListGachaPityProgress response = new(); // TODO implement diff --git a/EpinelPS/LobbyServer/GetCurrentTime.cs b/EpinelPS/LobbyServer/GetCurrentTime.cs index 2669a81..fb9002c 100644 --- a/EpinelPS/LobbyServer/GetCurrentTime.cs +++ b/EpinelPS/LobbyServer/GetCurrentTime.cs @@ -8,12 +8,14 @@ namespace EpinelPS.LobbyServer { protected override async Task HandleAsync() { - var req = await ReadData(); + ReqGetNow req = await ReadData(); - var response = new ResGetNow(); - response.Tick = DateTimeOffset.UtcNow.ToUnixTimeSeconds(); - response.ResetHour = 1; - response.CheatShiftDuration = Duration.FromTimeSpan(TimeSpan.FromSeconds(0)); + ResGetNow response = new() + { + Tick = DateTimeOffset.UtcNow.ToUnixTimeSeconds(), + ResetHour = 1, + CheatShiftDuration = Duration.FromTimeSpan(TimeSpan.FromSeconds(0)) + }; // todo: validate response with actual server await WriteDataAsync(response); diff --git a/EpinelPS/LobbyServer/GetGacha.cs b/EpinelPS/LobbyServer/GetGacha.cs index 51bdee3..504bdb9 100644 --- a/EpinelPS/LobbyServer/GetGacha.cs +++ b/EpinelPS/LobbyServer/GetGacha.cs @@ -8,10 +8,10 @@ namespace EpinelPS.LobbyServer { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqGetGachaData req = await ReadData(); + Database.User user = GetUser(); - var response = new ResGetGachaData(); + ResGetGachaData response = new(); // TODO: should not return anything when not completed chatper 2 diff --git a/EpinelPS/LobbyServer/Guild/RecommendList.cs b/EpinelPS/LobbyServer/Guild/RecommendList.cs index 35b31b0..2031571 100644 --- a/EpinelPS/LobbyServer/Guild/RecommendList.cs +++ b/EpinelPS/LobbyServer/Guild/RecommendList.cs @@ -7,8 +7,8 @@ namespace EpinelPS.LobbyServer.Guild { protected override async Task HandleAsync() { - var req = await ReadData(); - var response = new ResRecommendGuildList(); + ReqRecommendGuildList req = await ReadData(); + ResRecommendGuildList response = new(); await WriteDataAsync(response); diff --git a/EpinelPS/LobbyServer/Intercept/AnomalousData.cs b/EpinelPS/LobbyServer/Intercept/AnomalousData.cs index 7806436..b39c1b5 100644 --- a/EpinelPS/LobbyServer/Intercept/AnomalousData.cs +++ b/EpinelPS/LobbyServer/Intercept/AnomalousData.cs @@ -7,16 +7,16 @@ namespace EpinelPS.LobbyServer.Intercept { protected override async Task HandleAsync() { - var req = await ReadData(); + ReqInterceptAnomalousData req = await ReadData(); // TODO - var response = new ResInterceptAnomalousData + ResInterceptAnomalousData response = new() { InterceptAnomalousManagerId = 101, RemainingTickets = 5 }; - response.ClearedInterceptAnomalousIds.Add(new[] { 1, 2, 3, 4, 5 }); + response.ClearedInterceptAnomalousIds.Add([1, 2, 3, 4, 5]); await WriteDataAsync(response); } } diff --git a/EpinelPS/LobbyServer/Intercept/AnomalousEnter.cs b/EpinelPS/LobbyServer/Intercept/AnomalousEnter.cs index 43fae67..eef05f5 100644 --- a/EpinelPS/LobbyServer/Intercept/AnomalousEnter.cs +++ b/EpinelPS/LobbyServer/Intercept/AnomalousEnter.cs @@ -7,9 +7,9 @@ namespace EpinelPS.LobbyServer.Intercept { protected override async Task HandleAsync() { - var req = await ReadData(); + ReqEnterInterceptAnomalous req = await ReadData(); - var response = new ResEnterInterceptAnomalous(); + ResEnterInterceptAnomalous response = new(); await WriteDataAsync(response); } diff --git a/EpinelPS/LobbyServer/Intercept/AnomalousFastClear.cs b/EpinelPS/LobbyServer/Intercept/AnomalousFastClear.cs index 198c927..59399d3 100644 --- a/EpinelPS/LobbyServer/Intercept/AnomalousFastClear.cs +++ b/EpinelPS/LobbyServer/Intercept/AnomalousFastClear.cs @@ -7,9 +7,9 @@ namespace EpinelPS.LobbyServer.Intercept { protected override async Task HandleAsync() { - var req = await ReadData(); + ReqFastClearInterceptAnomalous req = await ReadData(); - var response = new ResFastClearInterceptAnomalous(); + ResFastClearInterceptAnomalous response = new(); await WriteDataAsync(response); } diff --git a/EpinelPS/LobbyServer/Intercept/AnomalousFinish.cs b/EpinelPS/LobbyServer/Intercept/AnomalousFinish.cs index e62cb0f..e7c32cd 100644 --- a/EpinelPS/LobbyServer/Intercept/AnomalousFinish.cs +++ b/EpinelPS/LobbyServer/Intercept/AnomalousFinish.cs @@ -7,9 +7,9 @@ namespace EpinelPS.LobbyServer.Intercept { protected override async Task HandleAsync() { - var req = await ReadData(); + ReqFinishInterceptAnomalous req = await ReadData(); - var response = new ResFinishInterceptAnomalous(); + ResFinishInterceptAnomalous response = new(); await WriteDataAsync(response); } diff --git a/EpinelPS/LobbyServer/Intercept/GetInterceptData.cs b/EpinelPS/LobbyServer/Intercept/GetInterceptData.cs index 9ea5d5c..12127e6 100644 --- a/EpinelPS/LobbyServer/Intercept/GetInterceptData.cs +++ b/EpinelPS/LobbyServer/Intercept/GetInterceptData.cs @@ -8,9 +8,9 @@ namespace EpinelPS.LobbyServer.Intercept { protected override async Task HandleAsync() { - var req = await ReadData(); + ReqGetInterceptData req = await ReadData(); - var response = new ResGetInterceptData + ResGetInterceptData response = new() { NormalInterceptGroup = 1, SpecialInterceptId = 1, // TODO switch this out each reset diff --git a/EpinelPS/LobbyServer/Intercept/InterceptCheck.cs b/EpinelPS/LobbyServer/Intercept/InterceptCheck.cs index 66d8ecb..b1a9e40 100644 --- a/EpinelPS/LobbyServer/Intercept/InterceptCheck.cs +++ b/EpinelPS/LobbyServer/Intercept/InterceptCheck.cs @@ -7,9 +7,9 @@ namespace EpinelPS.LobbyServer.Intercept { protected override async Task HandleAsync() { - var req = await ReadData(); + ReqCheckClearInterceptToday req = await ReadData(); - var response = new ResCheckClearInterceptToday + ResCheckClearInterceptToday response = new() { Clear = true }; diff --git a/EpinelPS/LobbyServer/Intercept/InterceptClear.cs b/EpinelPS/LobbyServer/Intercept/InterceptClear.cs index 27d00de..e36d33b 100644 --- a/EpinelPS/LobbyServer/Intercept/InterceptClear.cs +++ b/EpinelPS/LobbyServer/Intercept/InterceptClear.cs @@ -8,19 +8,19 @@ namespace EpinelPS.LobbyServer.Intercept { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqClearIntercept req = await ReadData(); + User user = GetUser(); if (user.ResetableData.InterceptionTickets == 0) { Logging.WriteLine("Attempted to clear interception when 0 tickets remain", LogType.WarningAntiCheat); } - - var sRes = InterceptionHelper.Clear(user, req.Intercept, req.InterceptId, req.Damage); + + InterceptionClearResult sRes = InterceptionHelper.Clear(user, req.Intercept, req.InterceptId, req.Damage); user.ResetableData.InterceptionTickets--; - var response = new ResClearIntercept + ResClearIntercept response = new() { Intercept = req.Intercept, InterceptId = req.InterceptId, diff --git a/EpinelPS/LobbyServer/Intercept/InterceptEnter.cs b/EpinelPS/LobbyServer/Intercept/InterceptEnter.cs index 68cf515..4fbfabc 100644 --- a/EpinelPS/LobbyServer/Intercept/InterceptEnter.cs +++ b/EpinelPS/LobbyServer/Intercept/InterceptEnter.cs @@ -7,10 +7,10 @@ namespace EpinelPS.LobbyServer.Intercept { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqEnterIntercept req = await ReadData(); + Database.User user = GetUser(); - var response = new ResEnterIntercept(); + ResEnterIntercept response = new(); user.AddTrigger(Data.TriggerType.InterceptStart, 1); diff --git a/EpinelPS/LobbyServer/Intercept/InterceptFastClear.cs b/EpinelPS/LobbyServer/Intercept/InterceptFastClear.cs index 15a027e..58e50ad 100644 --- a/EpinelPS/LobbyServer/Intercept/InterceptFastClear.cs +++ b/EpinelPS/LobbyServer/Intercept/InterceptFastClear.cs @@ -8,9 +8,9 @@ namespace EpinelPS.LobbyServer.Intercept { protected override async Task HandleAsync() { - var req = await ReadData(); + ReqFastClearIntercept req = await ReadData(); - var response = new ResFastClearIntercept + ResFastClearIntercept response = new() { TicketCount = User.ResetableData.InterceptionTickets, MaxTicketCount = JsonDb.Instance.MaxInterceptionCount, diff --git a/EpinelPS/LobbyServer/Inventory/ClearAllEquipment.cs b/EpinelPS/LobbyServer/Inventory/ClearAllEquipment.cs index 2fae5e3..677cf2d 100644 --- a/EpinelPS/LobbyServer/Inventory/ClearAllEquipment.cs +++ b/EpinelPS/LobbyServer/Inventory/ClearAllEquipment.cs @@ -8,13 +8,15 @@ namespace EpinelPS.LobbyServer.Inventory { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqAllClearEquipment req = await ReadData(); + User user = GetUser(); - var response = new ResAllClearEquipment(); - response.Csn = req.Csn; + ResAllClearEquipment response = new() + { + Csn = req.Csn + }; - foreach (var item in user.Items.ToArray()) + foreach (ItemData item in user.Items.ToArray()) { if (item.Csn == req.Csn) { diff --git a/EpinelPS/LobbyServer/Inventory/ClearEquipment.cs b/EpinelPS/LobbyServer/Inventory/ClearEquipment.cs index 9dba3d3..5a3dfd9 100644 --- a/EpinelPS/LobbyServer/Inventory/ClearEquipment.cs +++ b/EpinelPS/LobbyServer/Inventory/ClearEquipment.cs @@ -8,12 +8,12 @@ namespace EpinelPS.LobbyServer.Inventory { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqClearEquipment req = await ReadData(); + User user = GetUser(); - var response = new ResClearEquipment(); + ResClearEquipment response = new(); - foreach (var item in user.Items.ToArray()) + foreach (ItemData item in user.Items.ToArray()) { if (item.Isn == req.Isn) { diff --git a/EpinelPS/LobbyServer/Inventory/GetInventoryData.cs b/EpinelPS/LobbyServer/Inventory/GetInventoryData.cs index 174c019..041816f 100644 --- a/EpinelPS/LobbyServer/Inventory/GetInventoryData.cs +++ b/EpinelPS/LobbyServer/Inventory/GetInventoryData.cs @@ -7,11 +7,11 @@ namespace EpinelPS.LobbyServer.Inventory { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqGetInventoryData req = await ReadData(); + Database.User user = GetUser(); - var response = new ResGetInventoryData(); - foreach (var item in user.Items) + ResGetInventoryData response = new(); + foreach (Database.ItemData item in user.Items) { response.Items.Add(new NetUserItemData() { Count = item.Count, Tid = item.ItemType, Csn = item.Csn, Lv = item.Level, Exp = item.Exp, Corporation = item.Corp, Isn = item.Isn, Position = item.Position }); } diff --git a/EpinelPS/LobbyServer/Inventory/IncreaseEquipmentExp.cs b/EpinelPS/LobbyServer/Inventory/IncreaseEquipmentExp.cs index cff5006..daa89b6 100644 --- a/EpinelPS/LobbyServer/Inventory/IncreaseEquipmentExp.cs +++ b/EpinelPS/LobbyServer/Inventory/IncreaseEquipmentExp.cs @@ -16,16 +16,16 @@ namespace EpinelPS.LobbyServer.Inventory protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); - var response = new ResIncreaseExpEquip(); - var destItem = user.Items.FirstOrDefault(x => x.Isn == req.Isn) ?? throw new NullReferenceException();; + ReqIncreaseExpEquip req = await ReadData(); + User user = GetUser(); + ResIncreaseExpEquip response = new(); + ItemData destItem = user.Items.FirstOrDefault(x => x.Isn == req.Isn) ?? throw new NullReferenceException();; int goldCost = 0; int modules = 0; - foreach (var srcItem in req.ItemList) + foreach (NetItemData? srcItem in req.ItemList) { - var item = user.Items.FirstOrDefault(x => x.Isn == srcItem.Isn) ?? throw new NullReferenceException();; + ItemData item = user.Items.FirstOrDefault(x => x.Isn == srcItem.Isn) ?? throw new NullReferenceException();; item.Count -= srcItem.Count; (int addedExp, int addedModules) = AddExp(srcItem, destItem); @@ -68,8 +68,8 @@ namespace EpinelPS.LobbyServer.Inventory (int exp, int modules) AddExp(NetItemData srcItem, ItemData destItem) { int[] maxLevel = [0, 0, 3, 3, 4, 4, 5, 5, 5, 5]; - var srcEquipRecord = GameData.Instance.ItemEquipTable.Values.FirstOrDefault(x => x.id == srcItem.Tid); - var destEquipRecord = GameData.Instance.ItemEquipTable.Values.FirstOrDefault(x => x.id == destItem.ItemType) ?? throw new NullReferenceException();; + ItemEquipRecord? srcEquipRecord = GameData.Instance.ItemEquipTable.Values.FirstOrDefault(x => x.id == srcItem.Tid); + ItemEquipRecord destEquipRecord = GameData.Instance.ItemEquipTable.Values.FirstOrDefault(x => x.id == destItem.ItemType) ?? throw new NullReferenceException();; int[] expNextTable = [.. GameData.Instance.itemEquipExpTable.Values .Where(x => x.item_rare == destEquipRecord.item_rare) .Select(x => x.exp) @@ -79,7 +79,7 @@ namespace EpinelPS.LobbyServer.Inventory if (srcEquipRecord != null) { - var levelRecord = GameData.Instance.ItemEquipGradeExpTable.Values.FirstOrDefault(x => x.grade_core_id == srcEquipRecord.grade_core_id) ?? throw new NullReferenceException();; + ItemEquipGradeExpRecord levelRecord = GameData.Instance.ItemEquipGradeExpTable.Values.FirstOrDefault(x => x.grade_core_id == srcEquipRecord.grade_core_id) ?? throw new NullReferenceException();; exp = srcItem.Count * levelRecord.exp; @@ -87,7 +87,7 @@ namespace EpinelPS.LobbyServer.Inventory } else // if the record is null, boost modules are being used { - foreach (var entry in boostExpTable) + foreach (KeyValuePair entry in boostExpTable) { if (entry.Key == srcItem.Tid) { @@ -119,13 +119,12 @@ namespace EpinelPS.LobbyServer.Inventory private int GetSourceExp(NetItemData srcItem) { - var item = GetUser().Items.FirstOrDefault(x => x.Isn == srcItem.Isn) ?? throw new NullReferenceException(); - var equipRecord = GameData.Instance.ItemEquipTable.Values.FirstOrDefault(x => x.id == item.ItemType) ?? throw new NullReferenceException(); - var levelRecord = GameData.Instance.ItemEquipGradeExpTable.Values.FirstOrDefault(x => x.grade_core_id == equipRecord.grade_core_id); - int[] expNextTable = GameData.Instance.itemEquipExpTable.Values + ItemData item = GetUser().Items.FirstOrDefault(x => x.Isn == srcItem.Isn) ?? throw new NullReferenceException(); + ItemEquipRecord equipRecord = GameData.Instance.ItemEquipTable.Values.FirstOrDefault(x => x.id == item.ItemType) ?? throw new NullReferenceException(); + ItemEquipGradeExpRecord? levelRecord = GameData.Instance.ItemEquipGradeExpTable.Values.FirstOrDefault(x => x.grade_core_id == equipRecord.grade_core_id); + int[] expNextTable = [.. GameData.Instance.itemEquipExpTable.Values .Where(x => x.item_rare == equipRecord.item_rare) - .Select(x => x.exp) - .ToArray(); + .Select(x => x.exp)]; int level = item.Level; int exp = item.Exp; @@ -140,12 +139,11 @@ namespace EpinelPS.LobbyServer.Inventory private static int CalcTotalExp(ItemData destItem) { int exp = 0; - var equipRecord = GameData.Instance.ItemEquipTable.Values.FirstOrDefault(x => x.id == destItem.ItemType) ?? throw new NullReferenceException(); - var levelRecord = GameData.Instance.ItemEquipGradeExpTable.Values.FirstOrDefault(x => x.grade_core_id == equipRecord.grade_core_id); - int[] expNextTable = GameData.Instance.itemEquipExpTable.Values + ItemEquipRecord equipRecord = GameData.Instance.ItemEquipTable.Values.FirstOrDefault(x => x.id == destItem.ItemType) ?? throw new NullReferenceException(); + ItemEquipGradeExpRecord? levelRecord = GameData.Instance.ItemEquipGradeExpTable.Values.FirstOrDefault(x => x.grade_core_id == equipRecord.grade_core_id); + int[] expNextTable = [.. GameData.Instance.itemEquipExpTable.Values .Where(x => x.item_rare == equipRecord.item_rare) - .Select(x => x.exp) - .ToArray(); + .Select(x => x.exp)]; // skip the first level, it's unused for (int i = 1; i < expNextTable.Length; i++) diff --git a/EpinelPS/LobbyServer/Inventory/UsePiece.cs b/EpinelPS/LobbyServer/Inventory/UsePiece.cs index edf57ff..5483aae 100644 --- a/EpinelPS/LobbyServer/Inventory/UsePiece.cs +++ b/EpinelPS/LobbyServer/Inventory/UsePiece.cs @@ -7,7 +7,7 @@ namespace EpinelPS.LobbyServer.Inventory [PacketPath("/inventory/usepiece")] public class UsePiece : LobbyMsgHandler { - private static readonly Random random = new Random(); + private static readonly Random random = new(); protected override async Task HandleAsync() { @@ -17,11 +17,11 @@ namespace EpinelPS.LobbyServer.Inventory * Isn: long value, the item serial number of the piece * Count: int value, how many time */ - var req = await ReadData(); - var user = GetUser(); - var response = new ResUsePiece(); + ReqUsePiece req = await ReadData(); + User user = GetUser(); + ResUsePiece response = new(); - var piece = user.Items.FirstOrDefault(x => x.Isn == req.Isn) ?? throw new InvalidDataException("cannot find piece with isn " + req.Isn); + ItemData piece = user.Items.FirstOrDefault(x => x.Isn == req.Isn) ?? throw new InvalidDataException("cannot find piece with isn " + req.Isn); if (req.Count * 50 > piece.Count) throw new Exception("count mismatch"); piece.Count -= req.Count * 50; @@ -31,18 +31,18 @@ namespace EpinelPS.LobbyServer.Inventory .FirstOrDefault(x => x.Value.id == piece.ItemType).Value ?? throw new Exception("cannot find piece id " + piece.ItemType); - var probList = GameData.Instance.GachaGradeProb + IEnumerable probList = GameData.Instance.GachaGradeProb .Where(x => x.Key == pItem.use_id) .SelectMany(grade => GameData.Instance.GachaListProb.Where(list => list.Value.group_id == grade.Value.gacha_list_id)) .Select(i => i.Value); - var allCharacters = probList.SelectMany(e => GameData.Instance.CharacterTable.Values.Where(c => c.id == e.gacha_id)); + IEnumerable allCharacters = probList.SelectMany(e => GameData.Instance.CharacterTable.Values.Where(c => c.id == e.gacha_id)); NetRewardData reward = new(); - var selectedCharacters = Enumerable.Range(1, req.Count) + IEnumerable selectedCharacters = Enumerable.Range(1, req.Count) .Select(_ => SelectRandomCharacter(allCharacters, pItem.id)); int totalBodyLabels = 0; - foreach (var character in selectedCharacters) + foreach (CharacterRecord? character in selectedCharacters) { ItemData? spareItem = user.Items.FirstOrDefault(i => i.ItemType == character.piece_id); @@ -87,7 +87,7 @@ namespace EpinelPS.LobbyServer.Inventory } else { - var csn = user.GenerateUniqueCharacterId(); + int csn = user.GenerateUniqueCharacterId(); reward.UserCharacters.Add(new NetUserCharacterDefaultData { CostumeId = 0, @@ -150,10 +150,10 @@ namespace EpinelPS.LobbyServer.Inventory private CharacterRecord SelectRandomCharacter(IEnumerable characters, int pieceId) { - var gradeProb = GetPieceGradeProb(pieceId); - var rCharacters = characters.Where(c => c.original_rare == "R"); - var srCharacters = characters.Where(c => c.original_rare == "SR"); - var ssrCharacters = characters.Where(c => c.original_rare == "SSR"); + PieceGradeProb gradeProb = GetPieceGradeProb(pieceId); + IEnumerable rCharacters = characters.Where(c => c.original_rare == "R"); + IEnumerable srCharacters = characters.Where(c => c.original_rare == "SR"); + IEnumerable ssrCharacters = characters.Where(c => c.original_rare == "SSR"); double roll = random.NextDouble() * 100; diff --git a/EpinelPS/LobbyServer/Inventory/UseRandomBox.cs b/EpinelPS/LobbyServer/Inventory/UseRandomBox.cs index ce27c8c..de73c33 100644 --- a/EpinelPS/LobbyServer/Inventory/UseRandomBox.cs +++ b/EpinelPS/LobbyServer/Inventory/UseRandomBox.cs @@ -8,12 +8,12 @@ namespace EpinelPS.LobbyServer.Inventory { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqUseRandomBox req = await ReadData(); + User user = GetUser(); - var response = new ResUseRandomBox(); + ResUseRandomBox response = new(); - var box = user.Items.Where(x => x.Isn == req.Isn).FirstOrDefault() ?? throw new InvalidDataException("cannot find box with isn " + req.Isn); + ItemData box = user.Items.Where(x => x.Isn == req.Isn).FirstOrDefault() ?? throw new InvalidDataException("cannot find box with isn " + req.Isn); if (req.Count > box.Count) throw new Exception("count mismatch"); box.Count -= req.Count; diff --git a/EpinelPS/LobbyServer/Inventory/UseTimeReward.cs b/EpinelPS/LobbyServer/Inventory/UseTimeReward.cs index c56b03e..cb9a581 100644 --- a/EpinelPS/LobbyServer/Inventory/UseTimeReward.cs +++ b/EpinelPS/LobbyServer/Inventory/UseTimeReward.cs @@ -14,11 +14,11 @@ namespace EpinelPS.LobbyServer.Inventory * Isn: long value * Count: int value, how many items to use */ - var req = await ReadData(); - var user = GetUser(); - var response = new ResUseTimeReward(); + ReqUseTimeReward req = await ReadData(); + User user = GetUser(); + ResUseTimeReward response = new(); - var timeReward = user.Items.Where(x => x.Isn == req.Isn).FirstOrDefault() ?? throw new InvalidDataException("cannot find time reward with isn " + req.Isn); + ItemData timeReward = user.Items.Where(x => x.Isn == req.Isn).FirstOrDefault() ?? throw new InvalidDataException("cannot find time reward with isn " + req.Isn); if (req.Count > timeReward.Count) throw new Exception("count mismatch"); timeReward.Count -= req.Count; diff --git a/EpinelPS/LobbyServer/Inventory/WearEquipment.cs b/EpinelPS/LobbyServer/Inventory/WearEquipment.cs index bc8ba4c..8498b23 100644 --- a/EpinelPS/LobbyServer/Inventory/WearEquipment.cs +++ b/EpinelPS/LobbyServer/Inventory/WearEquipment.cs @@ -8,16 +8,16 @@ namespace EpinelPS.LobbyServer.Inventory { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqWearEquipment req = await ReadData(); + User user = GetUser(); - var response = new ResWearEquipment(); + ResWearEquipment response = new(); - var pos = NetUtils.GetItemPos(user, req.Isn); + int pos = NetUtils.GetItemPos(user, req.Isn); // unequip old item - foreach (var item in user.Items.ToArray()) + foreach (ItemData item in user.Items.ToArray()) { if (item.Csn == req.Csn && item.Position == pos) { @@ -25,7 +25,7 @@ namespace EpinelPS.LobbyServer.Inventory } } - foreach (var item in user.Items.ToArray()) + foreach (ItemData item in user.Items.ToArray()) { if (item.Isn == req.Isn) { diff --git a/EpinelPS/LobbyServer/Inventory/WearEquipmentList.cs b/EpinelPS/LobbyServer/Inventory/WearEquipmentList.cs index 641029b..0025157 100644 --- a/EpinelPS/LobbyServer/Inventory/WearEquipmentList.cs +++ b/EpinelPS/LobbyServer/Inventory/WearEquipmentList.cs @@ -8,18 +8,18 @@ namespace EpinelPS.LobbyServer.Inventory { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqWearEquipmentList req = await ReadData(); + User user = GetUser(); - var response = new ResWearEquipmentList(); + ResWearEquipmentList response = new(); // TODO optimize - foreach (var item2 in req.IsnList) + foreach (long item2 in req.IsnList) { - var pos = NetUtils.GetItemPos(user, item2); + int pos = NetUtils.GetItemPos(user, item2); // unequip previous items - foreach (var item in user.Items.ToArray()) + foreach (ItemData item in user.Items.ToArray()) { if (item.Position == pos && item.Csn == req.Csn) { @@ -28,7 +28,7 @@ namespace EpinelPS.LobbyServer.Inventory } } - foreach (var item in user.Items.ToArray()) + foreach (ItemData item in user.Items.ToArray()) { if (item2 == item.Isn) { diff --git a/EpinelPS/LobbyServer/Jukebox/SetTableId.cs b/EpinelPS/LobbyServer/Jukebox/SetTableId.cs index d64a537..e9e0bf7 100644 --- a/EpinelPS/LobbyServer/Jukebox/SetTableId.cs +++ b/EpinelPS/LobbyServer/Jukebox/SetTableId.cs @@ -8,10 +8,10 @@ namespace EpinelPS.LobbyServer.Jukebox { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqSetJukeboxBgmTableId req = await ReadData(); + User user = GetUser(); - var response = new ResSetJukeboxBgmTableId(); + ResSetJukeboxBgmTableId response = new(); if (req.Location == NetJukeboxLocation.CommanderRoom) { diff --git a/EpinelPS/LobbyServer/Liberate/ChooseCharacter.cs b/EpinelPS/LobbyServer/Liberate/ChooseCharacter.cs index 16cd6e5..dbc1620 100644 --- a/EpinelPS/LobbyServer/Liberate/ChooseCharacter.cs +++ b/EpinelPS/LobbyServer/Liberate/ChooseCharacter.cs @@ -7,13 +7,14 @@ namespace EpinelPS.LobbyServer.Liberate { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqChooseLiberateCharacter req = await ReadData(); + Database.User user = GetUser(); - var response = new ResChooseLiberateCharacter(); - - // TODO - response.Data = new NetLiberateData() { CharacterId = req.CharacterId }; + ResChooseLiberateCharacter response = new() + { + // TODO + Data = new NetLiberateData() { CharacterId = req.CharacterId } + }; response.Data.MissionData.Add(new NetLiberateMissionData() { MissionState = LiberateMissionState.Running, Id = 1 }); response.Data.MissionData.Add(new NetLiberateMissionData() { MissionState = LiberateMissionState.Running, Id = 2 }); response.Data.MissionData.Add(new NetLiberateMissionData() { MissionState = LiberateMissionState.Running, Id = 3 }); diff --git a/EpinelPS/LobbyServer/Liberate/GetLiberateData.cs b/EpinelPS/LobbyServer/Liberate/GetLiberateData.cs index c9a68ca..cd8586a 100644 --- a/EpinelPS/LobbyServer/Liberate/GetLiberateData.cs +++ b/EpinelPS/LobbyServer/Liberate/GetLiberateData.cs @@ -7,10 +7,10 @@ namespace EpinelPS.LobbyServer.Liberate { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqGetLiberateData req = await ReadData(); + Database.User user = GetUser(); - var response = new ResGetLiberateData() { }; + ResGetLiberateData response = new() { }; // TODO diff --git a/EpinelPS/LobbyServer/Liberate/GetProgressList.cs b/EpinelPS/LobbyServer/Liberate/GetProgressList.cs index 46da0d5..25c40aa 100644 --- a/EpinelPS/LobbyServer/Liberate/GetProgressList.cs +++ b/EpinelPS/LobbyServer/Liberate/GetProgressList.cs @@ -7,10 +7,10 @@ namespace EpinelPS.LobbyServer.Liberate { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqGetLiberateProgressList req = await ReadData(); + Database.User user = GetUser(); - var response = new ResGetLiberateProgressList(); + ResGetLiberateProgressList response = new(); // TODO diff --git a/EpinelPS/LobbyServer/LobbyHandler.cs b/EpinelPS/LobbyServer/LobbyHandler.cs index 84a562a..fe4f4bd 100644 --- a/EpinelPS/LobbyServer/LobbyHandler.cs +++ b/EpinelPS/LobbyServer/LobbyHandler.cs @@ -4,22 +4,20 @@ using EpinelPS.Utils; using Google.Protobuf; using Paseto.Builder; using Paseto; -using EpinelPS.LobbyServer.Stage; -using EpinelPS.LobbyServer.Event.EventStory; using System.Text.Json; namespace EpinelPS.LobbyServer { public static class LobbyHandler { - public static readonly Dictionary Handlers = new Dictionary(); + public static readonly Dictionary Handlers = []; static LobbyHandler() { foreach (System.Type type in typeof(LobbyMsgHandler).Assembly.GetTypes()) { if (type.GetCustomAttributes(typeof(PacketPathAttribute), true).Length > 0) { - var attrib = (PacketPathAttribute?)Attribute.GetCustomAttribute(type, typeof(PacketPathAttribute)); + PacketPathAttribute? attrib = (PacketPathAttribute?)Attribute.GetCustomAttribute(type, typeof(PacketPathAttribute)); if (attrib == null) { Logging.WriteLine("WARNING: Failed to get attribute for " + type.FullName, LogType.Warning); @@ -27,7 +25,7 @@ namespace EpinelPS.LobbyServer } - var instance = Activator.CreateInstance(type); + object? instance = Activator.CreateInstance(type); if (instance is LobbyMsgHandler handler) { Handlers.Add(attrib.Url, handler); @@ -46,7 +44,7 @@ namespace EpinelPS.LobbyServer string fullPath = ctx.Request.Path.Value ?? throw new Exception(); string path = fullPath.Replace("/v1", ""); - foreach (var item in Handlers) + foreach (KeyValuePair item in Handlers) { if (path == item.Key) { @@ -79,11 +77,11 @@ namespace EpinelPS.LobbyServer /// public static GameClientInfo GenGameClientTok(ByteString publicKey, ulong userid) { - var token = Rng.RandomString(381); + string token = Rng.RandomString(381); - var info = new GameClientInfo() { ClientPublicKey = publicKey.ToArray() }; + GameClientInfo info = new() { ClientPublicKey = [.. publicKey] }; - var box = SodiumKeyExchange.CalculateServerSharedSecret(JsonDb.ServerPublicKey, JsonDb.ServerPrivateKey, publicKey.ToArray()); + SodiumKeyExchangeSharedSecretBox box = SodiumKeyExchange.CalculateServerSharedSecret(JsonDb.ServerPublicKey, JsonDb.ServerPrivateKey, [.. publicKey]); info.Keys = box; info.ClientAuthToken = token; @@ -98,12 +96,12 @@ namespace EpinelPS.LobbyServer public static GameClientInfo? GetInfo(string token) { - var encryptionToken = new PasetoBuilder().Use(ProtocolVersion.V4, Purpose.Local) + PasetoTokenValidationResult encryptionToken = new PasetoBuilder().Use(ProtocolVersion.V4, Purpose.Local) .WithKey(JsonDb.Instance.LauncherTokenKey, Encryption.SymmetricKey) .Decode(token, new PasetoTokenValidationParameters() { ValidateLifetime = true }) ?? throw new Exception("failed to decrypt"); - var elem = (encryptionToken.Paseto.Payload["data"] as System.Text.Json.JsonElement?) ?? throw new Exception("expected data field in auth token"); + JsonElement elem = (encryptionToken.Paseto.Payload["data"] as System.Text.Json.JsonElement?) ?? throw new Exception("expected data field in auth token"); - var p = elem.GetString() ?? throw new Exception("auth token cannot be null"); + string p = elem.GetString() ?? throw new Exception("auth token cannot be null"); return JsonSerializer.Deserialize(p ?? throw new Exception("data cannot be null")); } @@ -129,7 +127,7 @@ namespace EpinelPS.LobbyServer // Restore completed tutorials. - foreach (var item in user.ClearedTutorialData) + foreach (KeyValuePair item in user.ClearedTutorialData) { int groupId = item.Value.GroupId; int version = item.Value.VersionGroup; @@ -141,7 +139,7 @@ namespace EpinelPS.LobbyServer } public static NetWholeUserData CreateWholeUserDataFromDbUser(User user) { - var ret = new NetWholeUserData() + NetWholeUserData ret = new() { Lv = user.userPointData.UserLevel, Frame = user.ProfileFrame, diff --git a/EpinelPS/LobbyServer/LobbyMsgHandler.cs b/EpinelPS/LobbyServer/LobbyMsgHandler.cs index 59f31bf..5f11df3 100644 --- a/EpinelPS/LobbyServer/LobbyMsgHandler.cs +++ b/EpinelPS/LobbyServer/LobbyMsgHandler.cs @@ -41,7 +41,7 @@ namespace EpinelPS.LobbyServer this.ctx = ctx; if (ctx.Request.Headers.ContainsKey("Authorization")) { - var token = ctx.Request.Headers.Authorization.FirstOrDefault(); + string? token = ctx.Request.Headers.Authorization.FirstOrDefault(); if (token != null) { UsedAuthToken = token; @@ -54,7 +54,7 @@ namespace EpinelPS.LobbyServer { this.UsedAuthToken = authToken; - var encryptionToken = new PasetoBuilder().Use(ProtocolVersion.V4, Purpose.Local) + PasetoTokenValidationResult encryptionToken = new PasetoBuilder().Use(ProtocolVersion.V4, Purpose.Local) .WithKey(JsonDb.Instance.LauncherTokenKey, Encryption.SymmetricKey) .Decode(authToken, new PasetoTokenValidationParameters() { ValidateLifetime = true }); @@ -69,7 +69,7 @@ namespace EpinelPS.LobbyServer private static void PrintMessage(T data) where T : IMessage, new() { - var str = (string?)data.GetType().InvokeMember("ToString", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.InvokeMethod, null, data, null); + string? str = (string?)data.GetType().InvokeMember("ToString", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.InvokeMethod, null, data, null); if (str != null) Logging.WriteLine(str, LogType.Debug); } @@ -81,8 +81,8 @@ namespace EpinelPS.LobbyServer if (ctx == null) { - var ms = new MemoryStream(); - var x2 = new CodedOutputStream(ms); + MemoryStream ms = new(); + CodedOutputStream x2 = new(ms); data.WriteTo(x2); x2.Flush(); ReturnBytes = ms.ToArray(); @@ -94,8 +94,8 @@ namespace EpinelPS.LobbyServer ctx.Response.ContentLength = data.CalculateSize(); bool encrypted = ctx.Request.Headers.ContentEncoding.Contains("enc"); encrypted = false; //TODO implement, although client does not complain - var responseBytes = encrypted ? new MemoryStream() : ctx.Response.Body; - var x = new CodedOutputStream(responseBytes); + Stream responseBytes = encrypted ? new MemoryStream() : ctx.Response.Body; + CodedOutputStream x = new(responseBytes); data.WriteTo(x); x.Flush(); @@ -103,7 +103,7 @@ namespace EpinelPS.LobbyServer if (encrypted) { ctx.Response.Headers.ContentEncoding = new Microsoft.Extensions.Primitives.StringValues("gzip,enc"); - var enc = PacketDecryption.EncryptData(((MemoryStream)responseBytes).ToArray(), UsedAuthToken); + byte[] enc = PacketDecryption.EncryptData(((MemoryStream)responseBytes).ToArray(), UsedAuthToken); await ctx.Response.Body.WriteAsync(enc); } } @@ -127,7 +127,7 @@ namespace EpinelPS.LobbyServer T msg = new(); Logging.WriteLine("Reading " + msg.GetType().Name, LogType.Debug); - var bin = await PacketDecryption.DecryptOrReturnContentAsync(ctx); + PacketDecryptResponse bin = await PacketDecryption.DecryptOrReturnContentAsync(ctx); msg.MergeFrom(bin.Contents); PrintMessage(msg); diff --git a/EpinelPS/LobbyServer/LobbyUser/AquireUserTitle.cs b/EpinelPS/LobbyServer/LobbyUser/AquireUserTitle.cs index 8c4721c..0c9ea4b 100644 --- a/EpinelPS/LobbyServer/LobbyUser/AquireUserTitle.cs +++ b/EpinelPS/LobbyServer/LobbyUser/AquireUserTitle.cs @@ -7,10 +7,10 @@ namespace EpinelPS.LobbyServer.LobbyUser { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqAcquireUserTitle req = await ReadData(); + Database.User user = GetUser(); - var response = new ResAcquireUserTitle(); + ResAcquireUserTitle response = new(); // TODO diff --git a/EpinelPS/LobbyServer/LobbyUser/BuyWallpaper.cs b/EpinelPS/LobbyServer/LobbyUser/BuyWallpaper.cs index 9b4d137..9c8126d 100644 --- a/EpinelPS/LobbyServer/LobbyUser/BuyWallpaper.cs +++ b/EpinelPS/LobbyServer/LobbyUser/BuyWallpaper.cs @@ -8,9 +8,9 @@ namespace EpinelPS.LobbyServer.LobbyUser { protected override async Task HandleAsync() { - var req = await ReadData(); - var response = new ResBuyLobbyDecoBackground(); - var user = GetUser(); + ReqBuyLobbyDecoBackground req = await ReadData(); + ResBuyLobbyDecoBackground response = new(); + User user = GetUser(); user.LobbyDecoBackgroundList.Add(req.LobbyDecoBackgroundId); diff --git a/EpinelPS/LobbyServer/LobbyUser/EnterLobbyServer.cs b/EpinelPS/LobbyServer/LobbyUser/EnterLobbyServer.cs index 2f14eaf..5dde673 100644 --- a/EpinelPS/LobbyServer/LobbyUser/EnterLobbyServer.cs +++ b/EpinelPS/LobbyServer/LobbyUser/EnterLobbyServer.cs @@ -1,4 +1,5 @@ -using EpinelPS.Database; +using EpinelPS.Data; +using EpinelPS.Database; using EpinelPS.Utils; namespace EpinelPS.LobbyServer.LobbyUser @@ -8,37 +9,39 @@ namespace EpinelPS.LobbyServer.LobbyUser { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqEnterLobbyServer req = await ReadData(); + User user = GetUser(); - var battleTime = DateTime.UtcNow - user.BattleTime; - var battleTimeMs = (long)(battleTime.TotalNanoseconds / 100); + TimeSpan battleTime = DateTime.UtcNow - user.BattleTime; + long battleTimeMs = (long)(battleTime.TotalNanoseconds / 100); // NOTE: Keep this in sync with GetUser code - var response = new ResEnterLobbyServer(); - response.User = LobbyHandler.CreateNetUserDataFromUser(user); - response.ResetHour = 20; - response.Nickname = user.Nickname; - response.SynchroLv = 1; - response.OutpostBattleLevel = user.OutpostBattleLevel; - response.OutpostBattleTime = new NetOutpostBattleTime() { MaxBattleTime = 864000000000, MaxOverBattleTime = 12096000000000, BattleTime = battleTimeMs }; + ResEnterLobbyServer response = new() + { + User = LobbyHandler.CreateNetUserDataFromUser(user), + ResetHour = 20, + Nickname = user.Nickname, + SynchroLv = 1, + OutpostBattleLevel = user.OutpostBattleLevel, + OutpostBattleTime = new NetOutpostBattleTime() { MaxBattleTime = 864000000000, MaxOverBattleTime = 12096000000000, BattleTime = battleTimeMs }, - response.Jukeboxv2 = new NetUserJukeboxDataV2() { CommandBgm = new NetJukeboxBgm() { JukeboxTableId = user.CommanderMusic.TableId, Type = NetJukeboxBgmType.JukeboxTableId, Location = NetJukeboxLocation.CommanderRoom } }; + Jukeboxv2 = new NetUserJukeboxDataV2() { CommandBgm = new NetJukeboxBgm() { JukeboxTableId = user.CommanderMusic.TableId, Type = NetJukeboxBgmType.JukeboxTableId, Location = NetJukeboxLocation.CommanderRoom } } + }; - - foreach (var item in user.Currency) + + foreach (KeyValuePair item in user.Currency) { response.Currency.Add(new NetUserCurrencyData() { Type = (int)item.Key, Value = item.Value }); } - foreach (var item in user.Characters) + foreach (Database.Character item in user.Characters) { response.Character.Add(new NetUserCharacterData() { Default = new() { Csn = item.Csn, Skill1Lv = item.Skill1Lvl, Skill2Lv = item.Skill2Lvl, CostumeId = item.CostumeId, Lv = user.GetCharacterLevel(item.Csn, item.Level), Grade = item.Grade, Tid = item.Tid, UltiSkillLv = item.UltimateLevel}, IsSynchro = user.GetSynchro(item.Csn) }); } - foreach (var item in NetUtils.GetUserItems(user)) + foreach (NetUserItemData item in NetUtils.GetUserItems(user)) { response.Items.Add(item); } @@ -46,15 +49,15 @@ namespace EpinelPS.LobbyServer.LobbyUser // Add squad data if there are characters if (user.Characters.Count > 0) { - var highestLevelCharacters = user.Characters.OrderByDescending(x => x.Level).Take(5).ToList(); + List highestLevelCharacters = [.. user.Characters.OrderByDescending(x => x.Level).Take(5)]; response.SynchroLv = user.GetSynchroLevel(); - foreach (var item in highestLevelCharacters) + foreach (Database.Character? item in highestLevelCharacters) { response.SynchroStandardCharacters.Add(item.Csn); } - foreach (var teamInfo in user.UserTeams) + foreach (KeyValuePair teamInfo in user.UserTeams) response.TypeTeams.Add(teamInfo.Value); } diff --git a/EpinelPS/LobbyServer/LobbyUser/GetAllFeatureFlags.cs b/EpinelPS/LobbyServer/LobbyUser/GetAllFeatureFlags.cs index 829a68e..a22590c 100644 --- a/EpinelPS/LobbyServer/LobbyUser/GetAllFeatureFlags.cs +++ b/EpinelPS/LobbyServer/LobbyUser/GetAllFeatureFlags.cs @@ -7,9 +7,9 @@ namespace EpinelPS.LobbyServer.LobbyUser { protected override async Task HandleAsync() { - var req = await ReadData(); + ReqGetAllFeatureFlags req = await ReadData(); - var response = new ResGetAllFeatureFlags(); + ResGetAllFeatureFlags response = new(); response.Flags.AddRange([ new NetFeatureFlag() { FeatureKind = NetFeatureKind.UnionRaid, IsOpen = true }, new NetFeatureFlag() { FeatureKind = NetFeatureKind.CooperationEvent, IsOpen = true }, diff --git a/EpinelPS/LobbyServer/LobbyUser/GetContentsData.cs b/EpinelPS/LobbyServer/LobbyUser/GetContentsData.cs index 1df4636..5dae2dc 100644 --- a/EpinelPS/LobbyServer/LobbyUser/GetContentsData.cs +++ b/EpinelPS/LobbyServer/LobbyUser/GetContentsData.cs @@ -7,17 +7,17 @@ namespace EpinelPS.LobbyServer.LobbyUser { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqGetContentsOpenData req = await ReadData(); + Database.User user = GetUser(); // this request returns a list of "special" stages that mark when something is unlocked, ex: the shop or interception List specialStages = [6003003, 6002008, 6002016, 6005003, 6003021, 6011018, 6007021, 6004018, 6005013, 6003009, 6003012, 6009017, 6016039, 6001004, 6000003, 6000001, 6002001, 6004023, 6005026, 6020050, 6006004, 6006023,6022049]; - var response = new ResGetContentsOpenData(); - foreach (var field in user.FieldInfoNew.Values) + ResGetContentsOpenData response = new(); + foreach (Database.FieldInfoNew field in user.FieldInfoNew.Values) { - foreach (var stage in field.CompletedStages) + foreach (int stage in field.CompletedStages) { if (specialStages.Contains(stage)) response.ClearStageList.Add(stage); diff --git a/EpinelPS/LobbyServer/LobbyUser/GetFieldTalkList.cs b/EpinelPS/LobbyServer/LobbyUser/GetFieldTalkList.cs index 0b81d49..1ae22e2 100644 --- a/EpinelPS/LobbyServer/LobbyUser/GetFieldTalkList.cs +++ b/EpinelPS/LobbyServer/LobbyUser/GetFieldTalkList.cs @@ -7,10 +7,10 @@ namespace EpinelPS.LobbyServer.LobbyUser { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqGetFieldTalkList req = await ReadData(); + Database.User user = GetUser(); - var response = new ResGetFieldTalkList(); + ResGetFieldTalkList response = new(); // TODO await WriteDataAsync(response); diff --git a/EpinelPS/LobbyServer/LobbyUser/GetMail.cs b/EpinelPS/LobbyServer/LobbyUser/GetMail.cs index 30a31be..fce7d69 100644 --- a/EpinelPS/LobbyServer/LobbyUser/GetMail.cs +++ b/EpinelPS/LobbyServer/LobbyUser/GetMail.cs @@ -1,4 +1,5 @@ -using EpinelPS.Utils; +using EpinelPS.Data; +using EpinelPS.Utils; namespace EpinelPS.LobbyServer.LobbyUser { @@ -7,9 +8,9 @@ namespace EpinelPS.LobbyServer.LobbyUser { protected override async Task HandleAsync() { - var req = await ReadData(); + ReqGetMailData req = await ReadData(); - var r = new ResGetMailData(); + ResGetMailData r = new(); r.Mail.Add(new NetUserMailData() { diff --git a/EpinelPS/LobbyServer/LobbyUser/GetProfileCardPossession.cs b/EpinelPS/LobbyServer/LobbyUser/GetProfileCardPossession.cs index 4db1c89..81fb215 100644 --- a/EpinelPS/LobbyServer/LobbyUser/GetProfileCardPossession.cs +++ b/EpinelPS/LobbyServer/LobbyUser/GetProfileCardPossession.cs @@ -7,9 +7,9 @@ namespace EpinelPS.LobbyServer.LobbyUser { protected override async Task HandleAsync() { - var req = await ReadData(); + ReqProfileCardObjectList req = await ReadData(); - var response = new ResProfileCardObjectList(); + ResProfileCardObjectList response = new(); // TODO await WriteDataAsync(response); } diff --git a/EpinelPS/LobbyServer/LobbyUser/GetProfileDecoration.cs b/EpinelPS/LobbyServer/LobbyUser/GetProfileDecoration.cs index b029a16..21c88a8 100644 --- a/EpinelPS/LobbyServer/LobbyUser/GetProfileDecoration.cs +++ b/EpinelPS/LobbyServer/LobbyUser/GetProfileDecoration.cs @@ -7,12 +7,16 @@ namespace EpinelPS.LobbyServer.LobbyUser { protected override async Task HandleAsync() { - var req = await ReadData(); + ReqProfileCardDecorationLayout req = await ReadData(); - var r = new ResProfileCardDecorationLayout(); - r.Layout = new ProfileCardDecorationLayout(); - r.Layout.BackgroundId = 101002; - r.Layout.ShowCharacterSpine = true; + ResProfileCardDecorationLayout r = new() + { + Layout = new ProfileCardDecorationLayout + { + BackgroundId = 101002, + ShowCharacterSpine = true + } + }; await WriteDataAsync(r); } } diff --git a/EpinelPS/LobbyServer/LobbyUser/GetProfileFrame.cs b/EpinelPS/LobbyServer/LobbyUser/GetProfileFrame.cs index aee3af2..239f226 100644 --- a/EpinelPS/LobbyServer/LobbyUser/GetProfileFrame.cs +++ b/EpinelPS/LobbyServer/LobbyUser/GetProfileFrame.cs @@ -8,10 +8,10 @@ namespace EpinelPS.LobbyServer.LobbyUser { protected override async Task HandleAsync() { - var req = await ReadData(); - var response = new ResGetProfileFrame(); + ReqGetProfileFrame req = await ReadData(); + ResGetProfileFrame response = new(); - foreach (var frameRecord in GameData.Instance.userFrameTable.Values) + foreach (UserFrameTableRecord frameRecord in GameData.Instance.userFrameTable.Values) { response.Frames.Add(frameRecord.id); } diff --git a/EpinelPS/LobbyServer/LobbyUser/GetScenarioList.cs b/EpinelPS/LobbyServer/LobbyUser/GetScenarioList.cs index c54b678..eac152e 100644 --- a/EpinelPS/LobbyServer/LobbyUser/GetScenarioList.cs +++ b/EpinelPS/LobbyServer/LobbyUser/GetScenarioList.cs @@ -7,14 +7,14 @@ namespace EpinelPS.LobbyServer.LobbyUser { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqGetScenarioList req = await ReadData(); + Database.User user = GetUser(); // todo what are bookmark scenarios? // this returns a list of scenarios that user has completed - var response = new ResGetScenarioList(); - foreach (var item in user.CompletedScenarios) + ResGetScenarioList response = new(); + foreach (string item in user.CompletedScenarios) { response.ScenarioList.Add(item); } diff --git a/EpinelPS/LobbyServer/LobbyUser/GetSpecialLobbySlotData.cs b/EpinelPS/LobbyServer/LobbyUser/GetSpecialLobbySlotData.cs index 2931a23..2d7a663 100644 --- a/EpinelPS/LobbyServer/LobbyUser/GetSpecialLobbySlotData.cs +++ b/EpinelPS/LobbyServer/LobbyUser/GetSpecialLobbySlotData.cs @@ -12,9 +12,9 @@ namespace EpinelPS.LobbyServer.LobbyUser { protected override async Task HandleAsync() { - var req = await ReadData(); + ReqGetSpecialLobbySlotData req = await ReadData(); - var response = new ResGetSpecialLobbySlotData(); + ResGetSpecialLobbySlotData response = new(); // TODO await WriteDataAsync(response); } diff --git a/EpinelPS/LobbyServer/LobbyUser/GetUser.cs b/EpinelPS/LobbyServer/LobbyUser/GetUser.cs index c978908..3e03240 100644 --- a/EpinelPS/LobbyServer/LobbyUser/GetUser.cs +++ b/EpinelPS/LobbyServer/LobbyUser/GetUser.cs @@ -1,5 +1,6 @@ using EpinelPS.Utils; using EpinelPS.Database; +using EpinelPS.Data; namespace EpinelPS.LobbyServer.LobbyUser { @@ -8,12 +9,12 @@ namespace EpinelPS.LobbyServer.LobbyUser { protected override async Task HandleAsync() { - var req = await ReadData(); - var response = new ResGetUserData(); - var user = GetUser(); + ReqGetUserData req = await ReadData(); + ResGetUserData response = new(); + User user = GetUser(); - var battleTime = DateTime.UtcNow - user.BattleTime; - var battleTimeMs = (long)(battleTime.TotalNanoseconds / 100); + TimeSpan battleTime = DateTime.UtcNow - user.BattleTime; + long battleTimeMs = (long)(battleTime.TotalNanoseconds / 100); response.User = LobbyHandler.CreateNetUserDataFromUser(user); @@ -22,7 +23,7 @@ namespace EpinelPS.LobbyServer.LobbyUser response.OutpostBattleLevel = user.OutpostBattleLevel; response.IsSimple = req.IsSimple; - foreach (var item in user.Currency) + foreach (KeyValuePair item in user.Currency) { response.Currency.Add(new NetUserCurrencyData() { Type = (int)item.Key, Value = item.Value }); } @@ -31,7 +32,7 @@ namespace EpinelPS.LobbyServer.LobbyUser response.LastClearedNormalMainStageId = user.LastNormalStageCleared; // Restore completed tutorials. GroupID is the first 4 digits of the Table ID. - foreach (var item in user.ClearedTutorialData) + foreach (KeyValuePair item in user.ClearedTutorialData) { int groupId = item.Value.GroupId; int version = item.Value.VersionGroup; diff --git a/EpinelPS/LobbyServer/LobbyUser/GetUserProfile.cs b/EpinelPS/LobbyServer/LobbyUser/GetUserProfile.cs index 9d697a3..78acff8 100644 --- a/EpinelPS/LobbyServer/LobbyUser/GetUserProfile.cs +++ b/EpinelPS/LobbyServer/LobbyUser/GetUserProfile.cs @@ -7,10 +7,10 @@ namespace EpinelPS.LobbyServer.LobbyUser { protected override async Task HandleAsync() { - var req = await ReadData(); - var callingUser = GetUser(); - var user = GetUser((ulong)req.TargetUsn); - var response = new ResGetProfileData(); + ReqGetProfileData req = await ReadData(); + Database.User callingUser = GetUser(); + Database.User? user = GetUser((ulong)req.TargetUsn); + ResGetProfileData response = new(); if (user != null) { @@ -28,7 +28,7 @@ namespace EpinelPS.LobbyServer.LobbyUser for (int i = 0; i < user.RepresentationTeamDataNew.Length; i++) { long csn = user.RepresentationTeamDataNew[i]; - var c = user.GetCharacterBySerialNumber(csn); + Database.Character? c = user.GetCharacterBySerialNumber(csn); if (c != null) { diff --git a/EpinelPS/LobbyServer/LobbyUser/GetUserScenarioExist.cs b/EpinelPS/LobbyServer/LobbyUser/GetUserScenarioExist.cs index 86577cd..5f487ea 100644 --- a/EpinelPS/LobbyServer/LobbyUser/GetUserScenarioExist.cs +++ b/EpinelPS/LobbyServer/LobbyUser/GetUserScenarioExist.cs @@ -7,17 +7,17 @@ namespace EpinelPS.LobbyServer.LobbyUser { protected override async Task HandleAsync() { - var req = await ReadData(); + ReqExistScenario req = await ReadData(); // TODO: Check response from real server - var response = new ResExistScenario(); + ResExistScenario response = new(); - var user = GetUser(); + Database.User user = GetUser(); - foreach (var item in req.ScenarioGroupIds) + foreach (string? item in req.ScenarioGroupIds) { - foreach (var completed in user.CompletedScenarios) + foreach (string completed in user.CompletedScenarios) { // story thingy was completed if (completed == item) diff --git a/EpinelPS/LobbyServer/LobbyUser/GetUserTitle.cs b/EpinelPS/LobbyServer/LobbyUser/GetUserTitle.cs index dd144a4..8f6b716 100644 --- a/EpinelPS/LobbyServer/LobbyUser/GetUserTitle.cs +++ b/EpinelPS/LobbyServer/LobbyUser/GetUserTitle.cs @@ -8,13 +8,13 @@ namespace EpinelPS.LobbyServer.LobbyUser { protected override async Task HandleAsync() { - var req = await ReadData(); - var r = new ResGetUserTitleList(); + ReqGetUserTitleList req = await ReadData(); + ResGetUserTitleList r = new(); // Access GameData and get all UserTitle IDs - var userTitleRecords = GameData.Instance.userTitleRecords; + Dictionary userTitleRecords = GameData.Instance.userTitleRecords; - foreach (var titleId in userTitleRecords.Keys) + foreach (int titleId in userTitleRecords.Keys) { r.UserTitleList.Add(new ResGetUserTitleList.Types.NetUserTitle() { UserTitleId = titleId }); } diff --git a/EpinelPS/LobbyServer/LobbyUser/GetUserTitleCounter.cs b/EpinelPS/LobbyServer/LobbyUser/GetUserTitleCounter.cs index 8c2a139..c61b72c 100644 --- a/EpinelPS/LobbyServer/LobbyUser/GetUserTitleCounter.cs +++ b/EpinelPS/LobbyServer/LobbyUser/GetUserTitleCounter.cs @@ -7,9 +7,9 @@ namespace EpinelPS.LobbyServer.LobbyUser { protected override async Task HandleAsync() { - var req = await ReadData(); + ReqGetUserTitleCounterList req = await ReadData(); - var r = new ResGetUserTitleCounterList(); + ResGetUserTitleCounterList r = new(); await WriteDataAsync(r); } diff --git a/EpinelPS/LobbyServer/LobbyUser/GetWallpaper.cs b/EpinelPS/LobbyServer/LobbyUser/GetWallpaper.cs index 2d615fc..e78638a 100644 --- a/EpinelPS/LobbyServer/LobbyUser/GetWallpaper.cs +++ b/EpinelPS/LobbyServer/LobbyUser/GetWallpaper.cs @@ -7,9 +7,9 @@ namespace EpinelPS.LobbyServer.LobbyUser { protected override async Task HandleAsync() { - var req = await ReadData(); - var response = new ResGetWallpaper(); - var user = GetUser(); + ReqGetWallpaper req = await ReadData(); + ResGetWallpaper response = new(); + Database.User user = GetUser(); response.WallpaperList.AddRange(user.WallpaperList); diff --git a/EpinelPS/LobbyServer/LobbyUser/GetWallpaperInventory.cs b/EpinelPS/LobbyServer/LobbyUser/GetWallpaperInventory.cs index 35cbb14..26a9d07 100644 --- a/EpinelPS/LobbyServer/LobbyUser/GetWallpaperInventory.cs +++ b/EpinelPS/LobbyServer/LobbyUser/GetWallpaperInventory.cs @@ -7,14 +7,14 @@ namespace EpinelPS.LobbyServer.LobbyUser { protected override async Task HandleAsync() { - var req = await ReadData(); + ReqGetWallpaperInventory req = await ReadData(); // Prepare the response - var r = new ResGetWallpaperInventory(); + ResGetWallpaperInventory r = new(); // Fetch all the wallpaper IDs from the LiveWallpaperTable, // excluding records where livewallpaper_type is "SkillCutScene" - var wallpaperIds = GameData.Instance.lwptablemgrs.Where(w => w.Value.livewallpaper_type != "SkillCutScene").Select(w => w.Key).ToList(); + List wallpaperIds = [.. GameData.Instance.lwptablemgrs.Where(w => w.Value.livewallpaper_type != "SkillCutScene").Select(w => w.Key)]; // Add the filtered wallpaper IDs to the LivewallpaperIds field r.LivewallpaperIds.AddRange(wallpaperIds); diff --git a/EpinelPS/LobbyServer/LobbyUser/MarkNoticeRead.cs b/EpinelPS/LobbyServer/LobbyUser/MarkNoticeRead.cs index b40602f..b83ce5f 100644 --- a/EpinelPS/LobbyServer/LobbyUser/MarkNoticeRead.cs +++ b/EpinelPS/LobbyServer/LobbyUser/MarkNoticeRead.cs @@ -8,9 +8,9 @@ namespace EpinelPS.LobbyServer.LobbyUser { protected override async Task HandleAsync() { - var req = await ReadData(); - var r = new ResRecordNoticeLog(); - var user = GetUser(); + ReqRecordNoticeLog req = await ReadData(); + ResRecordNoticeLog r = new(); + Database.User user = GetUser(); // TODO diff --git a/EpinelPS/LobbyServer/LobbyUser/ReadMail.cs b/EpinelPS/LobbyServer/LobbyUser/ReadMail.cs index acb8c3a..8629587 100644 --- a/EpinelPS/LobbyServer/LobbyUser/ReadMail.cs +++ b/EpinelPS/LobbyServer/LobbyUser/ReadMail.cs @@ -7,9 +7,9 @@ namespace EpinelPS.LobbyServer.LobbyUser { protected override async Task HandleAsync() { - var req = await ReadData(); + ReqReadMail req = await ReadData(); - var r = new ResReadMail(); + ResReadMail r = new(); //TODO await WriteDataAsync(r); } diff --git a/EpinelPS/LobbyServer/LobbyUser/SetNickname.cs b/EpinelPS/LobbyServer/LobbyUser/SetNickname.cs index f0756e0..a566bf2 100644 --- a/EpinelPS/LobbyServer/LobbyUser/SetNickname.cs +++ b/EpinelPS/LobbyServer/LobbyUser/SetNickname.cs @@ -8,13 +8,15 @@ namespace EpinelPS.LobbyServer.LobbyUser { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqSetNickname req = await ReadData(); + User user = GetUser(); user.Nickname = req.Nickname; - var response = new ResSetNickname(); - response.Result = SetNicknameResult.Okay; - response.Nickname = req.Nickname; + ResSetNickname response = new() + { + Result = SetNicknameResult.Okay, + Nickname = req.Nickname + }; JsonDb.Save(); diff --git a/EpinelPS/LobbyServer/LobbyUser/SetNicknameFree.cs b/EpinelPS/LobbyServer/LobbyUser/SetNicknameFree.cs index 17b2f26..315c7e2 100644 --- a/EpinelPS/LobbyServer/LobbyUser/SetNicknameFree.cs +++ b/EpinelPS/LobbyServer/LobbyUser/SetNicknameFree.cs @@ -8,11 +8,11 @@ namespace EpinelPS.LobbyServer.LobbyUser { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqSetNicknameFree req = await ReadData(); + User user = GetUser(); user.Nickname = req.Nickname; - var response = new ResSetNicknameFree + ResSetNicknameFree response = new() { Result = SetNicknameResult.Okay, Nickname = req.Nickname diff --git a/EpinelPS/LobbyServer/LobbyUser/SetNicknameInTutorial.cs b/EpinelPS/LobbyServer/LobbyUser/SetNicknameInTutorial.cs index b76abfc..c9dfc57 100644 --- a/EpinelPS/LobbyServer/LobbyUser/SetNicknameInTutorial.cs +++ b/EpinelPS/LobbyServer/LobbyUser/SetNicknameInTutorial.cs @@ -8,11 +8,11 @@ namespace EpinelPS.LobbyServer.LobbyUser { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqSetNicknameInTutorial req = await ReadData(); + User user = GetUser(); user.Nickname = req.Nickname; - var response = new ResSetNicknameInTutorial + ResSetNicknameInTutorial response = new() { Result = SetNicknameResult.Okay, Nickname = req.Nickname diff --git a/EpinelPS/LobbyServer/LobbyUser/SetProfileData.cs b/EpinelPS/LobbyServer/LobbyUser/SetProfileData.cs index 54d37bf..d803b30 100644 --- a/EpinelPS/LobbyServer/LobbyUser/SetProfileData.cs +++ b/EpinelPS/LobbyServer/LobbyUser/SetProfileData.cs @@ -13,14 +13,14 @@ namespace EpinelPS.LobbyServer.LobbyUser { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqSetProfileData req = await ReadData(); + User user = GetUser(); user.ProfileIconId = req.Icon; user.ProfileIconIsPrism = req.IsPrism; user.ProfileFrame = req.Frame; JsonDb.Save(); - var response = new ResSetProfileData(); + ResSetProfileData response = new(); await WriteDataAsync(response); } diff --git a/EpinelPS/LobbyServer/LobbyUser/SetProfileIcon.cs b/EpinelPS/LobbyServer/LobbyUser/SetProfileIcon.cs index 7ec493c..0502e7a 100644 --- a/EpinelPS/LobbyServer/LobbyUser/SetProfileIcon.cs +++ b/EpinelPS/LobbyServer/LobbyUser/SetProfileIcon.cs @@ -8,12 +8,12 @@ namespace EpinelPS.LobbyServer.LobbyUser { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqSetProfileIcon req = await ReadData(); + User user = GetUser(); user.ProfileIconId = req.Icon; user.ProfileIconIsPrism = req.IsPrism; JsonDb.Save(); - var response = new ResSetProfileIcon(); + ResSetProfileIcon response = new(); await WriteDataAsync(response); } diff --git a/EpinelPS/LobbyServer/LobbyUser/SetProfileTeam.cs b/EpinelPS/LobbyServer/LobbyUser/SetProfileTeam.cs index 33e7026..640a95e 100644 --- a/EpinelPS/LobbyServer/LobbyUser/SetProfileTeam.cs +++ b/EpinelPS/LobbyServer/LobbyUser/SetProfileTeam.cs @@ -13,17 +13,17 @@ namespace EpinelPS.LobbyServer.LobbyUser { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqSetProfileTeam req = await ReadData(); + User user = GetUser(); for (int i = 0; i < req.Team.Slots.Count - 1; i++) { - var slot = req.Team.Slots[i]; + NetTeamSlot slot = req.Team.Slots[i]; user.RepresentationTeamDataNew[i] = slot.Value; } JsonDb.Save(); - var response = new ResSetProfileTeam(); + ResSetProfileTeam response = new(); await WriteDataAsync(response); } diff --git a/EpinelPS/LobbyServer/LobbyUser/SetScenarioCompleted.cs b/EpinelPS/LobbyServer/LobbyUser/SetScenarioCompleted.cs index a70cf18..ec0b59e 100644 --- a/EpinelPS/LobbyServer/LobbyUser/SetScenarioCompleted.cs +++ b/EpinelPS/LobbyServer/LobbyUser/SetScenarioCompleted.cs @@ -9,10 +9,10 @@ namespace EpinelPS.LobbyServer.LobbyUser { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqSetScenarioComplete req = await ReadData(); + User user = GetUser(); - var response = new ResSetScenarioComplete + ResSetScenarioComplete response = new() { Reward = new NetRewardData() }; diff --git a/EpinelPS/LobbyServer/LobbyUser/SetUserTitle.cs b/EpinelPS/LobbyServer/LobbyUser/SetUserTitle.cs index 470e6e4..c19e5bd 100644 --- a/EpinelPS/LobbyServer/LobbyUser/SetUserTitle.cs +++ b/EpinelPS/LobbyServer/LobbyUser/SetUserTitle.cs @@ -7,11 +7,11 @@ namespace EpinelPS.LobbyServer.LobbyUser { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqSetUserTitle req = await ReadData(); + User user = GetUser(); user.TitleId = req.UserTitleId; JsonDb.Save(); - var response = new ResSetUserTitle(); + ResSetUserTitle response = new(); await WriteDataAsync(response); } diff --git a/EpinelPS/LobbyServer/LobbyUser/SetWallpaper.cs b/EpinelPS/LobbyServer/LobbyUser/SetWallpaper.cs index 0d8d33f..5bb3ba5 100644 --- a/EpinelPS/LobbyServer/LobbyUser/SetWallpaper.cs +++ b/EpinelPS/LobbyServer/LobbyUser/SetWallpaper.cs @@ -8,9 +8,9 @@ namespace EpinelPS.LobbyServer.LobbyUser { protected override async Task HandleAsync() { - var req = await ReadData(); - var response = new ResSetWallpaper(); - var user = GetUser(); + ReqSetWallpaper req = await ReadData(); + ResSetWallpaper response = new(); + User user = GetUser(); user.WallpaperList = [.. req.WallpaperList]; user.WallpaperBackground = [.. req.WallpaperBackgroundList]; user.WallpaperFavoriteList = [.. req.WallpaperFavoriteList]; diff --git a/EpinelPS/LobbyServer/LobbyUser/Tutorial/SetTutorial.cs b/EpinelPS/LobbyServer/LobbyUser/Tutorial/SetTutorial.cs index d1cb102..6925748 100644 --- a/EpinelPS/LobbyServer/LobbyUser/Tutorial/SetTutorial.cs +++ b/EpinelPS/LobbyServer/LobbyUser/Tutorial/SetTutorial.cs @@ -9,18 +9,18 @@ namespace EpinelPS.LobbyServer.LobbyUser.Tutorial { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqSetTutorial req = await ReadData(); + User user = GetUser(); if (!user.ClearedTutorialData.ContainsKey(req.LastClearedTid)) { - var cleared = GameData.Instance.GetTutorialDataById(req.LastClearedTid); + ClearedTutorialData cleared = GameData.Instance.GetTutorialDataById(req.LastClearedTid); cleared.id = req.LastClearedTid; user.ClearedTutorialData.Add(req.LastClearedTid, cleared); } JsonDb.Save(); - var response = new ResSetTutorial(); + ResSetTutorial response = new(); await WriteDataAsync(response); } } diff --git a/EpinelPS/LobbyServer/LobbyUser/UnmarkUsertitleBadge.cs b/EpinelPS/LobbyServer/LobbyUser/UnmarkUsertitleBadge.cs index 65c8994..9b1819b 100644 --- a/EpinelPS/LobbyServer/LobbyUser/UnmarkUsertitleBadge.cs +++ b/EpinelPS/LobbyServer/LobbyUser/UnmarkUsertitleBadge.cs @@ -7,10 +7,10 @@ namespace EpinelPS.LobbyServer.LobbyUser { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqUnMarkUserTitleBadge req = await ReadData(); + Database.User user = GetUser(); - var response = new ResUnMarkUserTitleBadge(); + ResUnMarkUserTitleBadge response = new(); // TODO diff --git a/EpinelPS/LobbyServer/Lostsector/ClearStage.cs b/EpinelPS/LobbyServer/Lostsector/ClearStage.cs index 27362cb..a79e489 100644 --- a/EpinelPS/LobbyServer/Lostsector/ClearStage.cs +++ b/EpinelPS/LobbyServer/Lostsector/ClearStage.cs @@ -10,10 +10,10 @@ namespace EpinelPS.LobbyServer.Lostsector { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqClearLostSectorStage req = await ReadData(); + User user = GetUser(); - var response = new ResClearLostSectorStage(); + ResClearLostSectorStage response = new(); if (req.BattleResult == 1) { @@ -27,14 +27,14 @@ namespace EpinelPS.LobbyServer.Lostsector public static void ClearLostSectorStage(User user, int stageId) { // get lost sector id from stage id - var sector = GameData.Instance.LostSectorStages[stageId].sector; + int sector = GameData.Instance.LostSectorStages[stageId].sector; // get position ID from stage id in map data - var sectorData = GameData.Instance.LostSector[sector]; + LostSectorRecord sectorData = GameData.Instance.LostSector[sector]; MapInfo mapInfo = GameData.Instance.MapData[sectorData.field_id]; - var stage = mapInfo.StageSpawner.Where(x => x.stageId == stageId).FirstOrDefault() ?? throw new Exception("cannot find stage in map data"); + StageSpawner stage = mapInfo.StageSpawner.Where(x => x.stageId == stageId).FirstOrDefault() ?? throw new Exception("cannot find stage in map data"); user.LostSectorData[sector].ClearedStages.Add(stage.positionId, stageId); } diff --git a/EpinelPS/LobbyServer/Lostsector/EnterStage.cs b/EpinelPS/LobbyServer/Lostsector/EnterStage.cs index 8d87f6d..34a63e7 100644 --- a/EpinelPS/LobbyServer/Lostsector/EnterStage.cs +++ b/EpinelPS/LobbyServer/Lostsector/EnterStage.cs @@ -7,9 +7,9 @@ namespace EpinelPS.LobbyServer.Lostsector { protected override async Task HandleAsync() { - var req = await ReadData(); + ReqEnterLostSectorStage req = await ReadData(); - var response = new ResEnterLostSectorStage(); + ResEnterLostSectorStage response = new(); await WriteDataAsync(response); } diff --git a/EpinelPS/LobbyServer/Lostsector/GetField.cs b/EpinelPS/LobbyServer/Lostsector/GetField.cs index 56061be..62e4c12 100644 --- a/EpinelPS/LobbyServer/Lostsector/GetField.cs +++ b/EpinelPS/LobbyServer/Lostsector/GetField.cs @@ -7,17 +7,17 @@ namespace EpinelPS.LobbyServer.Lostsector { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqGetLostSectorFieldData req = await ReadData(); + Database.User user = GetUser(); - var f = user.LostSectorData[req.SectorId]; + Database.LostSectorData f = user.LostSectorData[req.SectorId]; ResGetLostSectorFieldData response = new() { Field = new NetFieldObjectData(), Json = f.Json }; - foreach (var item in f.Objects) + foreach (KeyValuePair item in f.Objects) response.Field.Objects.Add(new NetFieldObject() { ActionAt = item.Value.ActionAt, @@ -27,7 +27,7 @@ namespace EpinelPS.LobbyServer.Lostsector }); - foreach (var item in f.ClearedStages) + foreach (KeyValuePair item in f.ClearedStages) response.Field.Stages.Add(new NetFieldStageData() { PositionId = item.Key, @@ -35,8 +35,8 @@ namespace EpinelPS.LobbyServer.Lostsector }); // 10: lost sector team - if (user.UserTeams.ContainsKey(10)) - response.Team = user.UserTeams[10]; + if (user.UserTeams.TryGetValue(10, out NetUserTeamData? value)) + response.Team = value; await WriteDataAsync(response); } } diff --git a/EpinelPS/LobbyServer/Lostsector/GetLostSectorData.cs b/EpinelPS/LobbyServer/Lostsector/GetLostSectorData.cs index b7078f7..cb4fca0 100644 --- a/EpinelPS/LobbyServer/Lostsector/GetLostSectorData.cs +++ b/EpinelPS/LobbyServer/Lostsector/GetLostSectorData.cs @@ -8,22 +8,21 @@ namespace EpinelPS.LobbyServer.Lostsector { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqGetLostSectorData req = await ReadData(); + Database.User user = GetUser(); - var response = new ResGetLostSectorData(); + ResGetLostSectorData response = new(); - foreach (var item in GameData.Instance.LostSector) + foreach (KeyValuePair item in GameData.Instance.LostSector) { if (item.Value.open_condition_type == ContentOpenType.Stage && user.IsStageCompleted(item.Value.open_condition_value)) { response.ClearStages.Add(new NetFieldStageData() { StageId = item.Value.open_condition_value }); } - if (user.LostSectorData.ContainsKey(item.Key)) + if (user.LostSectorData.TryGetValue(item.Key, out Database.LostSectorData? val)) { - var map = GameData.Instance.MapData[item.Value.field_id]; - var val = user.LostSectorData[item.Key]; + MapInfo map = GameData.Instance.MapData[item.Value.field_id]; response.LostSector.Add(new NetUserLostSectorData() { IsOpen = val.IsOpen, diff --git a/EpinelPS/LobbyServer/Lostsector/GetPerfectReward.cs b/EpinelPS/LobbyServer/Lostsector/GetPerfectReward.cs index bcfb5bd..8c2380d 100644 --- a/EpinelPS/LobbyServer/Lostsector/GetPerfectReward.cs +++ b/EpinelPS/LobbyServer/Lostsector/GetPerfectReward.cs @@ -9,17 +9,16 @@ namespace EpinelPS.LobbyServer.Lostsector { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqLostSectorPerfectReward req = await ReadData(); + User user = GetUser(); - var response = new ResLostSectorPerfectReward(); + ResLostSectorPerfectReward response = new(); - if (user.LostSectorData.ContainsKey(req.SectorId)) + if (user.LostSectorData.TryGetValue(req.SectorId, out LostSectorData? lostSectorData)) { - var lostSectorData = user.LostSectorData[req.SectorId]; lostSectorData.CompletedPerfectly = true; - var sectorInfo = GameData.Instance.LostSector[req.SectorId]; + LostSectorRecord sectorInfo = GameData.Instance.LostSector[req.SectorId]; response.Reward = RewardUtils.RegisterRewardsForUser(user, sectorInfo.exploration_reward); } diff --git a/EpinelPS/LobbyServer/Lostsector/ObtainItem.cs b/EpinelPS/LobbyServer/Lostsector/ObtainItem.cs index f71c697..1671fd5 100644 --- a/EpinelPS/LobbyServer/Lostsector/ObtainItem.cs +++ b/EpinelPS/LobbyServer/Lostsector/ObtainItem.cs @@ -9,12 +9,12 @@ namespace EpinelPS.LobbyServer.Lostsector { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqObtainLostSectorItem req = await ReadData(); + User user = GetUser(); ResObtainLostSectorItem response = new(); - var lostSectorUser = user.LostSectorData[req.SectorId]; + LostSectorData lostSectorUser = user.LostSectorData[req.SectorId]; lostSectorUser.ObtainedRewards++; if (lostSectorUser.Objects.ContainsKey(req.Object.PositionId)) @@ -27,9 +27,9 @@ namespace EpinelPS.LobbyServer.Lostsector MapInfo map = GameData.Instance.MapData[GameData.Instance.LostSector[req.SectorId].field_id]; // find reward - var rewardEntry = map.ItemSpawner.Where(x => x.positionId == req.Object.PositionId).FirstOrDefault() ?? throw new Exception("cannot find reward"); + ItemSpawner rewardEntry = map.ItemSpawner.Where(x => x.positionId == req.Object.PositionId).FirstOrDefault() ?? throw new Exception("cannot find reward"); - var positionReward = GameData.Instance.FieldItems[rewardEntry.itemId]; + FieldItemRecord positionReward = GameData.Instance.FieldItems[rewardEntry.itemId]; response.Reward = RewardUtils.RegisterRewardsForUser(user, positionReward.type_value); response.BoxCount = lostSectorUser.ObtainedRewards; diff --git a/EpinelPS/LobbyServer/Lostsector/Open.cs b/EpinelPS/LobbyServer/Lostsector/Open.cs index 8fadde0..6a25f78 100644 --- a/EpinelPS/LobbyServer/Lostsector/Open.cs +++ b/EpinelPS/LobbyServer/Lostsector/Open.cs @@ -8,10 +8,10 @@ namespace EpinelPS.LobbyServer.Lostsector { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqOpenLostSector req = await ReadData(); + User user = GetUser(); - var response = new ResOpenLostSector(); + ResOpenLostSector response = new(); if (!user.LostSectorData.ContainsKey(req.SectorId)) user.LostSectorData.Add(req.SectorId, new LostSectorData() @@ -19,7 +19,7 @@ namespace EpinelPS.LobbyServer.Lostsector IsOpen = true }); - var val = user.LostSectorData[req.SectorId]; + LostSectorData val = user.LostSectorData[req.SectorId]; response.Lostsector = new NetUserLostSectorData() { IsOpen = val.IsOpen, diff --git a/EpinelPS/LobbyServer/Lostsector/Play.cs b/EpinelPS/LobbyServer/Lostsector/Play.cs index 86e67d2..ec965a7 100644 --- a/EpinelPS/LobbyServer/Lostsector/Play.cs +++ b/EpinelPS/LobbyServer/Lostsector/Play.cs @@ -8,10 +8,10 @@ namespace EpinelPS.LobbyServer.Lostsector { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqPlayLostSector req = await ReadData(); + User user = GetUser(); - var response = new ResPlayLostSector(); + ResPlayLostSector response = new(); if (!user.LostSectorData.ContainsKey(req.SectorId)) user.LostSectorData.Add(req.SectorId, new Database.LostSectorData() @@ -19,7 +19,7 @@ namespace EpinelPS.LobbyServer.Lostsector IsPlaying = true }); - var lostSectorData = user.LostSectorData[req.SectorId]; + LostSectorData lostSectorData = user.LostSectorData[req.SectorId]; lostSectorData.IsPlaying = true; response.Lostsector = new NetUserLostSectorData() diff --git a/EpinelPS/LobbyServer/Lostsector/QuickClearStage.cs b/EpinelPS/LobbyServer/Lostsector/QuickClearStage.cs index 629e71d..cd84e43 100644 --- a/EpinelPS/LobbyServer/Lostsector/QuickClearStage.cs +++ b/EpinelPS/LobbyServer/Lostsector/QuickClearStage.cs @@ -8,10 +8,10 @@ namespace EpinelPS.LobbyServer.Lostsector { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqFastClearLostSectorStage req = await ReadData(); + User user = GetUser(); - var response = new ResFastClearLostSectorStage(); + ResFastClearLostSectorStage response = new(); ClearStage.ClearLostSectorStage(user, req.StageId); JsonDb.Save(); diff --git a/EpinelPS/LobbyServer/Lostsector/SaveField.cs b/EpinelPS/LobbyServer/Lostsector/SaveField.cs index 356446f..187c35e 100644 --- a/EpinelPS/LobbyServer/Lostsector/SaveField.cs +++ b/EpinelPS/LobbyServer/Lostsector/SaveField.cs @@ -7,18 +7,18 @@ namespace EpinelPS.LobbyServer.Lostsector { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqSaveLostSectorField req = await ReadData(); + Database.User user = GetUser(); - var response = new ResSaveLostSectorField(); + ResSaveLostSectorField response = new(); - if (!user.LostSectorData.ContainsKey(req.SectorId)) + if (!user.LostSectorData.TryGetValue(req.SectorId, out Database.LostSectorData? value)) user.LostSectorData.Add(req.SectorId, new Database.LostSectorData() { Json = req.Json }); else - user.LostSectorData[req.SectorId].Json = req.Json; + value.Json = req.Json; await WriteDataAsync(response); diff --git a/EpinelPS/LobbyServer/Lostsector/SaveFieldObject.cs b/EpinelPS/LobbyServer/Lostsector/SaveFieldObject.cs index fc432ed..bffcec6 100644 --- a/EpinelPS/LobbyServer/Lostsector/SaveFieldObject.cs +++ b/EpinelPS/LobbyServer/Lostsector/SaveFieldObject.cs @@ -7,10 +7,10 @@ namespace EpinelPS.LobbyServer.Lostsector { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqSaveLostSectorFieldObject req = await ReadData(); + Database.User user = GetUser(); - var response = new ResSaveLostSectorFieldObject(); + ResSaveLostSectorFieldObject response = new(); if (user.LostSectorData[req.SectorId].Objects.ContainsKey(req.Object.PositionId)) user.LostSectorData[req.SectorId].Objects[req.Object.PositionId] = req.Object; diff --git a/EpinelPS/LobbyServer/Messenger/EnterFinishSubquest.cs b/EpinelPS/LobbyServer/Messenger/EnterFinishSubquest.cs index 448db93..71cc1e5 100644 --- a/EpinelPS/LobbyServer/Messenger/EnterFinishSubquest.cs +++ b/EpinelPS/LobbyServer/Messenger/EnterFinishSubquest.cs @@ -9,13 +9,13 @@ namespace EpinelPS.LobbyServer.Messenger { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqEnterSubQuestFinMessengerDialog req = await ReadData(); + User user = GetUser(); - var response = new ResEnterSubQuestFinMessengerDialog(); + ResEnterSubQuestFinMessengerDialog response = new(); - var opener = GameData.Instance.Subquests.Where(x => x.Key == req.SubQuestId).First(); - var conversation = GameData.Instance.Messages.Where(x => x.Value.conversation_id == opener.Value.end_messenger_conversation_id && x.Value.is_opener).First(); + KeyValuePair opener = GameData.Instance.Subquests.Where(x => x.Key == req.SubQuestId).First(); + KeyValuePair conversation = GameData.Instance.Messages.Where(x => x.Value.conversation_id == opener.Value.end_messenger_conversation_id && x.Value.is_opener).First(); response.Message = user.CreateMessage(conversation.Value, 1); JsonDb.Save(); diff --git a/EpinelPS/LobbyServer/Messenger/EnterMessenger.cs b/EpinelPS/LobbyServer/Messenger/EnterMessenger.cs index 2e4feef..b6faa2b 100644 --- a/EpinelPS/LobbyServer/Messenger/EnterMessenger.cs +++ b/EpinelPS/LobbyServer/Messenger/EnterMessenger.cs @@ -9,13 +9,13 @@ namespace EpinelPS.LobbyServer.Messenger { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqEnterMessengerDialog req = await ReadData(); + User user = GetUser(); - var response = new ResEnterMessengerDialog(); + ResEnterMessengerDialog response = new(); - var opener = GameData.Instance.MessageConditions[req.Tid]; - var conversation = GameData.Instance.Messages.Where(x => x.Value.conversation_id == opener.tid && x.Value.is_opener).First(); + MessengerMsgConditionRecord opener = GameData.Instance.MessageConditions[req.Tid]; + KeyValuePair conversation = GameData.Instance.Messages.Where(x => x.Value.conversation_id == opener.tid && x.Value.is_opener).First(); response.Message = user.CreateMessage(conversation.Value); diff --git a/EpinelPS/LobbyServer/Messenger/EnterSubquest.cs b/EpinelPS/LobbyServer/Messenger/EnterSubquest.cs index 76f3355..764a17a 100644 --- a/EpinelPS/LobbyServer/Messenger/EnterSubquest.cs +++ b/EpinelPS/LobbyServer/Messenger/EnterSubquest.cs @@ -9,13 +9,13 @@ namespace EpinelPS.LobbyServer.Messenger { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqEnterSubQuestMessengerDialog req = await ReadData(); + User user = GetUser(); - var response = new ResEnterSubQuestMessengerDialog(); + ResEnterSubQuestMessengerDialog response = new(); - var opener = GameData.Instance.Subquests.Where(x => x.Key == req.SubQuestId).First(); - var conversation = GameData.Instance.Messages.Where(x => x.Value.conversation_id == opener.Value.conversation_id && x.Value.is_opener).First(); + KeyValuePair opener = GameData.Instance.Subquests.Where(x => x.Key == req.SubQuestId).First(); + KeyValuePair conversation = GameData.Instance.Messages.Where(x => x.Value.conversation_id == opener.Value.conversation_id && x.Value.is_opener).First(); response.Message = user.CreateMessage(conversation.Value); JsonDb.Save(); diff --git a/EpinelPS/LobbyServer/Messenger/FinishSubquest.cs b/EpinelPS/LobbyServer/Messenger/FinishSubquest.cs index 14a1f04..e3ff1d5 100644 --- a/EpinelPS/LobbyServer/Messenger/FinishSubquest.cs +++ b/EpinelPS/LobbyServer/Messenger/FinishSubquest.cs @@ -9,19 +9,19 @@ namespace EpinelPS.LobbyServer.Messenger { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqFinSubQuest req = await ReadData(); + User user = GetUser(); - var response = new ResFinSubQuest(); + ResFinSubQuest response = new(); - var opener = GameData.Instance.Subquests.Where(x => x.Key == req.SubQuestId).First(); - var conversation = GameData.Instance.Messages.Where(x => x.Value.id == req.MessageId).First(); + KeyValuePair opener = GameData.Instance.Subquests.Where(x => x.Key == req.SubQuestId).First(); + KeyValuePair conversation = GameData.Instance.Messages.Where(x => x.Value.id == req.MessageId).First(); - var rewardRecord = GameData.Instance.GetRewardTableEntry(conversation.Value.reward_id) ?? throw new Exception("unable to lookup reward"); + RewardTableRecord rewardRecord = GameData.Instance.GetRewardTableEntry(conversation.Value.reward_id) ?? throw new Exception("unable to lookup reward"); user.SetSubQuest(req.SubQuestId, true); - var conversationRecordUser = user.MessengerData.Where(x => x.MessageId == req.MessageId).First(); + NetMessage conversationRecordUser = user.MessengerData.Where(x => x.MessageId == req.MessageId).First(); conversationRecordUser.State = 2; // mark as claimed response.Reward = RewardUtils.RegisterRewardsForUser(user, rewardRecord); diff --git a/EpinelPS/LobbyServer/Messenger/GetDailyMessage.cs b/EpinelPS/LobbyServer/Messenger/GetDailyMessage.cs index d086001..f329a26 100644 --- a/EpinelPS/LobbyServer/Messenger/GetDailyMessage.cs +++ b/EpinelPS/LobbyServer/Messenger/GetDailyMessage.cs @@ -7,10 +7,10 @@ namespace EpinelPS.LobbyServer.Messenger { protected override async Task HandleAsync() { - var req = await ReadData(); + ReqPickTodayDailyMessage req = await ReadData(); // TODO: save these things - var response = new ResPickTodayDailyMessage(); + ResPickTodayDailyMessage response = new(); await WriteDataAsync(response); } diff --git a/EpinelPS/LobbyServer/Messenger/GetMessages.cs b/EpinelPS/LobbyServer/Messenger/GetMessages.cs index dfdbe09..1d6183e 100644 --- a/EpinelPS/LobbyServer/Messenger/GetMessages.cs +++ b/EpinelPS/LobbyServer/Messenger/GetMessages.cs @@ -8,14 +8,14 @@ namespace EpinelPS.LobbyServer.Messenger { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqGetMessages req = await ReadData(); + User user = GetUser(); - var response = new ResGetMessages(); + ResGetMessages response = new(); - var newMessages = user.MessengerData.Where(x => x.Seq >= req.Seq); + IEnumerable newMessages = user.MessengerData.Where(x => x.Seq >= req.Seq); - foreach (var item in newMessages) + foreach (NetMessage? item in newMessages) { response.Messages.Add(item); } diff --git a/EpinelPS/LobbyServer/Messenger/GetPickedMessage.cs b/EpinelPS/LobbyServer/Messenger/GetPickedMessage.cs index f4062aa..d2ed5c4 100644 --- a/EpinelPS/LobbyServer/Messenger/GetPickedMessage.cs +++ b/EpinelPS/LobbyServer/Messenger/GetPickedMessage.cs @@ -7,10 +7,10 @@ namespace EpinelPS.LobbyServer.Messenger { protected override async Task HandleAsync() { - var req = await ReadData(); + ReqGetPickedMessageList req = await ReadData(); // TODO: get proper response - var response = new ResGetPickedMessageList(); + ResGetPickedMessageList response = new(); await WriteDataAsync(response); } diff --git a/EpinelPS/LobbyServer/Messenger/GetRandomPick.cs b/EpinelPS/LobbyServer/Messenger/GetRandomPick.cs index c02620d..8e2cdcb 100644 --- a/EpinelPS/LobbyServer/Messenger/GetRandomPick.cs +++ b/EpinelPS/LobbyServer/Messenger/GetRandomPick.cs @@ -7,10 +7,10 @@ namespace EpinelPS.LobbyServer.Messenger { protected override async Task HandleAsync() { - var req = await ReadData(); + ReqPickTodayRandomMessage req = await ReadData(); // TODO: get proper response - var response = new ResPickTodayRandomMessage(); + ResPickTodayRandomMessage response = new(); await WriteDataAsync(response); } diff --git a/EpinelPS/LobbyServer/Messenger/ProceedMsg.cs b/EpinelPS/LobbyServer/Messenger/ProceedMsg.cs index 109863b..4b53a79 100644 --- a/EpinelPS/LobbyServer/Messenger/ProceedMsg.cs +++ b/EpinelPS/LobbyServer/Messenger/ProceedMsg.cs @@ -10,11 +10,11 @@ namespace EpinelPS.LobbyServer.Messenger protected override async Task HandleAsync() { // This request handles saving user choices - var req = await ReadData(); + ReqProceedMessage req = await ReadData(); ResProceedMessage response = new(); - var user = GetUser(); + User user = GetUser(); - var msgToSave = GameData.Instance.Messages.Where(x => x.Key == req.MessageId).First(); + KeyValuePair msgToSave = GameData.Instance.Messages.Where(x => x.Key == req.MessageId).First(); response.Message = user.CreateMessage(msgToSave.Value.conversation_id, req.MessageId); diff --git a/EpinelPS/LobbyServer/Minigame/GetNksv2Minigame.cs b/EpinelPS/LobbyServer/Minigame/GetNksv2Minigame.cs index 05de576..4da4006 100644 --- a/EpinelPS/LobbyServer/Minigame/GetNksv2Minigame.cs +++ b/EpinelPS/LobbyServer/Minigame/GetNksv2Minigame.cs @@ -7,9 +7,9 @@ namespace EpinelPS.LobbyServer.Minigame { protected override async Task HandleAsync() { - var req = await ReadData(); + ReqGetMiniGameNKSV2Data req = await ReadData(); - var response = new ResGetMiniGameNKSV2Data(); + ResGetMiniGameNKSV2Data response = new(); // TODO await WriteDataAsync(response); } diff --git a/EpinelPS/LobbyServer/Minigame/IslandAdventure/EventCurrency.cs b/EpinelPS/LobbyServer/Minigame/IslandAdventure/EventCurrency.cs index e0866c3..f91c3c7 100644 --- a/EpinelPS/LobbyServer/Minigame/IslandAdventure/EventCurrency.cs +++ b/EpinelPS/LobbyServer/Minigame/IslandAdventure/EventCurrency.cs @@ -1,14 +1,14 @@ using EpinelPS.Utils; -namespace EpinelPS.LobbyServer.Event +namespace EpinelPS.LobbyServer.Minigame.IslandAdventure { [PacketPath("/event/minigame/islandadventure/get/currency")] public class MiniGameIslandAdventureCurrency : LobbyMsgHandler { protected override async Task HandleAsync() { - var req = await ReadData(); + ReqGetMiniGameIslandAdventureCurrency req = await ReadData(); - var response = new ResGetMiniGameIslandAdventureCurrency + ResGetMiniGameIslandAdventureCurrency response = new() { Currency = 90000 }; diff --git a/EpinelPS/LobbyServer/Minigame/IslandAdventure/EventInventory.cs b/EpinelPS/LobbyServer/Minigame/IslandAdventure/EventInventory.cs index 665308d..dda1079 100644 --- a/EpinelPS/LobbyServer/Minigame/IslandAdventure/EventInventory.cs +++ b/EpinelPS/LobbyServer/Minigame/IslandAdventure/EventInventory.cs @@ -1,15 +1,15 @@ using EpinelPS.Utils; -namespace EpinelPS.LobbyServer.Event +namespace EpinelPS.LobbyServer.Minigame.IslandAdventure { [PacketPath("/event/minigame/islandadventure/get/inventory")] public class MiniGameIslandAdventureInventory : LobbyMsgHandler { protected override async Task HandleAsync() { - var req = await ReadData(); + ReqGetMiniGameIslandAdventureInventory req = await ReadData(); - var response = new ResGetMiniGameIslandAdventureInventory + ResGetMiniGameIslandAdventureInventory response = new() { }; diff --git a/EpinelPS/LobbyServer/Minigame/IslandAdventure/FishSpotCount.cs b/EpinelPS/LobbyServer/Minigame/IslandAdventure/FishSpotCount.cs index 425251b..1f61132 100644 --- a/EpinelPS/LobbyServer/Minigame/IslandAdventure/FishSpotCount.cs +++ b/EpinelPS/LobbyServer/Minigame/IslandAdventure/FishSpotCount.cs @@ -1,15 +1,15 @@ using EpinelPS.Utils; -namespace EpinelPS.LobbyServer.Event +namespace EpinelPS.LobbyServer.Minigame.IslandAdventure { [PacketPath("/event/minigame/islandadventure/get/fish/spotcount")] public class MiniGameIslandAdventureFishingSpotCountHistory : LobbyMsgHandler { protected override async Task HandleAsync() { - var req = await ReadData(); + ReqMiniGameIslandAdventureFishingSpotCountHistory req = await ReadData(); - var response = new ResMiniGameIslandAdventureFishingSpotCountHistory + ResMiniGameIslandAdventureFishingSpotCountHistory response = new() { }; diff --git a/EpinelPS/LobbyServer/Minigame/IslandAdventure/GetFishingStepUpRewardStatus.cs b/EpinelPS/LobbyServer/Minigame/IslandAdventure/GetFishingStepUpRewardStatus.cs index 50e2a46..3a93ed3 100644 --- a/EpinelPS/LobbyServer/Minigame/IslandAdventure/GetFishingStepUpRewardStatus.cs +++ b/EpinelPS/LobbyServer/Minigame/IslandAdventure/GetFishingStepUpRewardStatus.cs @@ -7,9 +7,9 @@ namespace EpinelPS.LobbyServer.Minigame.IslandAdventure { protected override async Task HandleAsync() { - var req = await ReadData(); + ReqGetIslandAdventureFishingStepUpRewardStatus req = await ReadData(); - var response = new ResGetIslandAdventureFishingStepUpRewardStatus(); + ResGetIslandAdventureFishingStepUpRewardStatus response = new(); // TODO await WriteDataAsync(response); } diff --git a/EpinelPS/LobbyServer/Minigame/IslandAdventure/GetPhotoStepUpRewardStatus.cs b/EpinelPS/LobbyServer/Minigame/IslandAdventure/GetPhotoStepUpRewardStatus.cs index b7f94a8..3e0e696 100644 --- a/EpinelPS/LobbyServer/Minigame/IslandAdventure/GetPhotoStepUpRewardStatus.cs +++ b/EpinelPS/LobbyServer/Minigame/IslandAdventure/GetPhotoStepUpRewardStatus.cs @@ -7,9 +7,9 @@ namespace EpinelPS.LobbyServer.Minigame.IslandAdventure { protected override async Task HandleAsync() { - var req = await ReadData(); + ReqGetIslandAdventurePhotoStepUpRewardStatus req = await ReadData(); - var response = new ResGetIslandAdventurePhotoStepUpRewardStatus(); + ResGetIslandAdventurePhotoStepUpRewardStatus response = new(); // TODO await WriteDataAsync(response); } diff --git a/EpinelPS/LobbyServer/Minigame/IslandAdventure/ListMission.cs b/EpinelPS/LobbyServer/Minigame/IslandAdventure/ListMission.cs index bcecd09..ce1b37c 100644 --- a/EpinelPS/LobbyServer/Minigame/IslandAdventure/ListMission.cs +++ b/EpinelPS/LobbyServer/Minigame/IslandAdventure/ListMission.cs @@ -7,9 +7,9 @@ namespace EpinelPS.LobbyServer.Minigame.IslandAdventure { protected override async Task HandleAsync() { - var req = await ReadData(); + ReqGetIslandAdventureMissionProgress req = await ReadData(); - var response = new ResGetIslandAdventureMissionProgress(); + ResGetIslandAdventureMissionProgress response = new(); // TODO await WriteDataAsync(response); } diff --git a/EpinelPS/LobbyServer/Minigame/IslandAdventure/PhotoData.cs b/EpinelPS/LobbyServer/Minigame/IslandAdventure/PhotoData.cs index 7cac294..03c5019 100644 --- a/EpinelPS/LobbyServer/Minigame/IslandAdventure/PhotoData.cs +++ b/EpinelPS/LobbyServer/Minigame/IslandAdventure/PhotoData.cs @@ -1,15 +1,15 @@ using EpinelPS.Utils; -namespace EpinelPS.LobbyServer.Event +namespace EpinelPS.LobbyServer.Minigame.IslandAdventure { [PacketPath("/event/minigame/islandadventure/get/photo/album")] public class MiniGameIslandAdventurePhotoAlbum : LobbyMsgHandler { protected override async Task HandleAsync() { - var req = await ReadData(); + ReqMiniGameIslandAdventurePhotoAlbum req = await ReadData(); - var response = new ResMiniGameIslandAdventurePhotoAlbum + ResMiniGameIslandAdventurePhotoAlbum response = new() { }; diff --git a/EpinelPS/LobbyServer/Minigame/PlaySoda/GetChallengeInfo.cs b/EpinelPS/LobbyServer/Minigame/PlaySoda/GetChallengeInfo.cs index f9b96d1..3a5fd77 100644 --- a/EpinelPS/LobbyServer/Minigame/PlaySoda/GetChallengeInfo.cs +++ b/EpinelPS/LobbyServer/Minigame/PlaySoda/GetChallengeInfo.cs @@ -7,9 +7,9 @@ namespace EpinelPS.LobbyServer.Minigame.PlaySoda { protected override async Task HandleAsync() { - var req = await ReadData(); + ReqGetPlaySodaChallengeModeInfo req = await ReadData(); - var response = new ResGetPlaySodaChallengeModeInfo(); + ResGetPlaySodaChallengeModeInfo response = new(); // TODO await WriteDataAsync(response); } diff --git a/EpinelPS/LobbyServer/Minigame/nksv2/CompleteScenario.cs b/EpinelPS/LobbyServer/Minigame/nksv2/CompleteScenario.cs index 86bdb7b..19cec8d 100644 --- a/EpinelPS/LobbyServer/Minigame/nksv2/CompleteScenario.cs +++ b/EpinelPS/LobbyServer/Minigame/nksv2/CompleteScenario.cs @@ -8,10 +8,10 @@ namespace EpinelPS.LobbyServer.Minigame.nksv2 { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqCompleteNKSV2Scenario req = await ReadData(); + User user = GetUser(); - var response = new ResCompleteNKSV2Scenario(); + ResCompleteNKSV2Scenario response = new(); user.MogInfo.CompletedScenarios.Add(req.ScenarioId); JsonDb.Save(); diff --git a/EpinelPS/LobbyServer/Minigame/nksv2/GetScenario.cs b/EpinelPS/LobbyServer/Minigame/nksv2/GetScenario.cs index 9db58ae..1eea577 100644 --- a/EpinelPS/LobbyServer/Minigame/nksv2/GetScenario.cs +++ b/EpinelPS/LobbyServer/Minigame/nksv2/GetScenario.cs @@ -7,10 +7,10 @@ namespace EpinelPS.LobbyServer.Minigame.nksv2 { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqGetNKSV2Scenario req = await ReadData(); + Database.User user = GetUser(); - var response = new ResGetNKSV2Scenario(); + ResGetNKSV2Scenario response = new(); response.ScenarioIdList.Add(user.MogInfo.CompletedScenarios); await WriteDataAsync(response); diff --git a/EpinelPS/LobbyServer/Misc/GachaGetAllShutdownFlags.cs b/EpinelPS/LobbyServer/Misc/GachaGetAllShutdownFlags.cs index 0962c9e..e3c4c98 100644 --- a/EpinelPS/LobbyServer/Misc/GachaGetAllShutdownFlags.cs +++ b/EpinelPS/LobbyServer/Misc/GachaGetAllShutdownFlags.cs @@ -7,10 +7,10 @@ namespace EpinelPS.LobbyServer.Misc { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqGachaGetAllShutdownFlags req = await ReadData(); + Database.User user = GetUser(); - var response = new ResGachaGetAllShutdownFlags(); + ResGachaGetAllShutdownFlags response = new(); if (user.GachaTutorialPlayCount > 0) response.Unavailables.Add(3); diff --git a/EpinelPS/LobbyServer/Misc/GetFeatureFlags.cs b/EpinelPS/LobbyServer/Misc/GetFeatureFlags.cs index 87aacce..4645785 100644 --- a/EpinelPS/LobbyServer/Misc/GetFeatureFlags.cs +++ b/EpinelPS/LobbyServer/Misc/GetFeatureFlags.cs @@ -7,10 +7,12 @@ namespace EpinelPS.LobbyServer.Misc { protected override async Task HandleAsync() { - var req = await ReadData(); + ReqGetFeatureFlag req = await ReadData(); - var r = new ResGetFeatureFlag(); - r.IsOpen = true; + ResGetFeatureFlag r = new() + { + IsOpen = true + }; await WriteDataAsync(r); } diff --git a/EpinelPS/LobbyServer/Misc/GetMaintenanceNotice.cs b/EpinelPS/LobbyServer/Misc/GetMaintenanceNotice.cs index 12d2e33..8405beb 100644 --- a/EpinelPS/LobbyServer/Misc/GetMaintenanceNotice.cs +++ b/EpinelPS/LobbyServer/Misc/GetMaintenanceNotice.cs @@ -7,18 +7,18 @@ namespace EpinelPS.LobbyServer.Misc { protected override async Task HandleAsync() { - var req = await ReadData(); // field string OpenId - var oid = req.OpenId; + ReqMaintenanceNotice req = await ReadData(); // field string OpenId + string oid = req.OpenId; // Create a new instance of ResMaintenanceNotice - var r = new ResMaintenanceNotice + ResMaintenanceNotice r = new() { IsWhitelisted = true }; // Define maintenance window timestamps - var maintenanceFrom = Google.Protobuf.WellKnownTypes.Timestamp.FromDateTime(DateTime.UtcNow.AddHours(-2)); // Example: 2 hour ago - var maintenanceTo = Google.Protobuf.WellKnownTypes.Timestamp.FromDateTime(DateTime.UtcNow.AddHours(-1)); // Example: 1 hour ago + Google.Protobuf.WellKnownTypes.Timestamp maintenanceFrom = Google.Protobuf.WellKnownTypes.Timestamp.FromDateTime(DateTime.UtcNow.AddHours(-2)); // Example: 2 hour ago + Google.Protobuf.WellKnownTypes.Timestamp maintenanceTo = Google.Protobuf.WellKnownTypes.Timestamp.FromDateTime(DateTime.UtcNow.AddHours(-1)); // Example: 1 hour ago // Add a new maintenance window r.MaintenanceWindow = new NetMaintenanceWindow diff --git a/EpinelPS/LobbyServer/Misc/GetResourceHosts2.cs b/EpinelPS/LobbyServer/Misc/GetResourceHosts2.cs index f70facc..3f8aebd 100644 --- a/EpinelPS/LobbyServer/Misc/GetResourceHosts2.cs +++ b/EpinelPS/LobbyServer/Misc/GetResourceHosts2.cs @@ -7,11 +7,13 @@ namespace EpinelPS.LobbyServer.Misc { protected override async Task HandleAsync() { - var req = await ReadData(); + ReqGetResourceHosts2 req = await ReadData(); - var r = new ResGetResourceHosts2(); - r.BaseUrl = GameConfig.Root.ResourceBaseURL; - r.Version = req.Version; + ResGetResourceHosts2 r = new() + { + BaseUrl = GameConfig.Root.ResourceBaseURL, + Version = req.Version + }; await WriteDataAsync(r); } diff --git a/EpinelPS/LobbyServer/Misc/GetSentryParams.cs b/EpinelPS/LobbyServer/Misc/GetSentryParams.cs index 4b994bb..5ff0e10 100644 --- a/EpinelPS/LobbyServer/Misc/GetSentryParams.cs +++ b/EpinelPS/LobbyServer/Misc/GetSentryParams.cs @@ -7,10 +7,12 @@ namespace EpinelPS.LobbyServer.Misc { protected override async Task HandleAsync() { - var r = new ResGetSentryParams(); - // TODO: Figure out a way so that the game developers would not be annoyed by bogus errors in Sentry dashboard - r.SamplingRate = 1E-06; - r.TraceSamplingRate = 1E-06; + ResGetSentryParams r = new() + { + // TODO: Figure out a way so that the game developers would not be annoyed by bogus errors in Sentry dashboard + SamplingRate = 1E-06, + TraceSamplingRate = 1E-06 + }; await WriteDataAsync(r); } } diff --git a/EpinelPS/LobbyServer/Misc/GetServerInfo.cs b/EpinelPS/LobbyServer/Misc/GetServerInfo.cs index d8f880e..ab716f3 100644 --- a/EpinelPS/LobbyServer/Misc/GetServerInfo.cs +++ b/EpinelPS/LobbyServer/Misc/GetServerInfo.cs @@ -7,11 +7,12 @@ namespace EpinelPS.LobbyServer.Misc { protected override async Task HandleAsync() { - var r = new ResGetServerInfo(); - - // todo: reimplement this as well - r.MatchUrl = "https://global-match.nikke-kr.com"; - r.WorldId = 84; + ResGetServerInfo r = new() + { + // todo: reimplement this as well + MatchUrl = "https://global-match.nikke-kr.com", + WorldId = 84 + }; await WriteDataAsync(r); } diff --git a/EpinelPS/LobbyServer/Misc/GetStaticDataPack.cs b/EpinelPS/LobbyServer/Misc/GetStaticDataPack.cs index 8d57b3b..9dd278d 100644 --- a/EpinelPS/LobbyServer/Misc/GetStaticDataPack.cs +++ b/EpinelPS/LobbyServer/Misc/GetStaticDataPack.cs @@ -9,15 +9,17 @@ namespace EpinelPS.LobbyServer.Misc { protected override async Task HandleAsync() { - var req = await ReadData(); + ReqStaticDataPackInfo req = await ReadData(); - var r = new ResStaticDataPackInfo(); - r.Url = GameConfig.Root.StaticData.Url; - r.Version = GameConfig.Root.StaticData.Version; - r.Size = GameData.Instance.Size; - r.Sha256Sum = ByteString.CopyFrom(GameData.Instance.Sha256Hash); - r.Salt1 = ByteString.CopyFrom(Convert.FromBase64String(GameConfig.Root.StaticData.Salt1)); - r.Salt2 = ByteString.CopyFrom(Convert.FromBase64String(GameConfig.Root.StaticData.Salt2)); + ResStaticDataPackInfo r = new() + { + Url = GameConfig.Root.StaticData.Url, + Version = GameConfig.Root.StaticData.Version, + Size = GameData.Instance.Size, + Sha256Sum = ByteString.CopyFrom(GameData.Instance.Sha256Hash), + Salt1 = ByteString.CopyFrom(Convert.FromBase64String(GameConfig.Root.StaticData.Salt1)), + Salt2 = ByteString.CopyFrom(Convert.FromBase64String(GameConfig.Root.StaticData.Salt2)) + }; await WriteDataAsync(r); } diff --git a/EpinelPS/LobbyServer/Misc/GetStaticDataPackNew.cs b/EpinelPS/LobbyServer/Misc/GetStaticDataPackNew.cs index 5322a87..39dc6bb 100644 --- a/EpinelPS/LobbyServer/Misc/GetStaticDataPackNew.cs +++ b/EpinelPS/LobbyServer/Misc/GetStaticDataPackNew.cs @@ -9,19 +9,21 @@ namespace EpinelPS.LobbyServer.Misc { protected override async Task HandleAsync() { - var req = await ReadData(); + ReqStaticDataPackInfoV2 req = await ReadData(); Console.WriteLine("Requesting " + req.Type); StaticData data = req.Type == StaticDataPackType.Mpk ? GameConfig.Root.StaticDataMpk : GameConfig.Root.StaticData; - var r = new ResStaticDataPackInfoV2(); - r.Url = data.Url; - r.Version = data.Version; - r.Size = req.Type == StaticDataPackType.Mpk ? GameData.Instance.MpkSize : GameData.Instance.Size; - r.Sha256Sum = ByteString.CopyFrom(req.Type == StaticDataPackType.Mpk ? GameData.Instance.MpkHash : GameData.Instance.Sha256Hash); - r.Salt1 = ByteString.CopyFrom(Convert.FromBase64String(data.Salt1)); - r.Salt2 = ByteString.CopyFrom(Convert.FromBase64String(data.Salt2)); + ResStaticDataPackInfoV2 r = new() + { + Url = data.Url, + Version = data.Version, + Size = req.Type == StaticDataPackType.Mpk ? GameData.Instance.MpkSize : GameData.Instance.Size, + Sha256Sum = ByteString.CopyFrom(req.Type == StaticDataPackType.Mpk ? GameData.Instance.MpkHash : GameData.Instance.Sha256Hash), + Salt1 = ByteString.CopyFrom(Convert.FromBase64String(data.Salt1)), + Salt2 = ByteString.CopyFrom(Convert.FromBase64String(data.Salt2)) + }; await WriteDataAsync(r); } diff --git a/EpinelPS/LobbyServer/Misc/GetUserOnlineStateLog.cs b/EpinelPS/LobbyServer/Misc/GetUserOnlineStateLog.cs index 79316d6..c11cbba 100644 --- a/EpinelPS/LobbyServer/Misc/GetUserOnlineStateLog.cs +++ b/EpinelPS/LobbyServer/Misc/GetUserOnlineStateLog.cs @@ -7,10 +7,10 @@ namespace EpinelPS.LobbyServer.Misc { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqUserOnlineStateLog req = await ReadData(); + Database.User user = GetUser(); - var response = new ResUserOnlineStateLog(); + ResUserOnlineStateLog response = new(); user.LastLogin = DateTime.UtcNow; await WriteDataAsync(response); } diff --git a/EpinelPS/LobbyServer/Misc/Retroactive.cs b/EpinelPS/LobbyServer/Misc/Retroactive.cs index cc2f202..62fc154 100644 --- a/EpinelPS/LobbyServer/Misc/Retroactive.cs +++ b/EpinelPS/LobbyServer/Misc/Retroactive.cs @@ -12,10 +12,10 @@ namespace EpinelPS.LobbyServer.Misc { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqRetroactive req = await ReadData(); + Database.User user = GetUser(); - var response = new ResRetroactive(); + ResRetroactive response = new(); await WriteDataAsync(response); } } diff --git a/EpinelPS/LobbyServer/Mission/GetAchievementRewardedData.cs b/EpinelPS/LobbyServer/Mission/GetAchievementRewardedData.cs index 46a00e4..364295e 100644 --- a/EpinelPS/LobbyServer/Mission/GetAchievementRewardedData.cs +++ b/EpinelPS/LobbyServer/Mission/GetAchievementRewardedData.cs @@ -8,9 +8,9 @@ namespace EpinelPS.LobbyServer.Mission protected override async Task HandleAsync() { await ReadData(); - var user = GetUser(); + Database.User user = GetUser(); - var response = new ResGetAchievementRewardedData(); + ResGetAchievementRewardedData response = new(); response.Ids.AddRange(user.CompletedAchievements); await WriteDataAsync(response); diff --git a/EpinelPS/LobbyServer/Mission/GetAllRewards.cs b/EpinelPS/LobbyServer/Mission/GetAllRewards.cs index 2e2728a..4e40c4b 100644 --- a/EpinelPS/LobbyServer/Mission/GetAllRewards.cs +++ b/EpinelPS/LobbyServer/Mission/GetAllRewards.cs @@ -7,10 +7,10 @@ namespace EpinelPS.LobbyServer.Mission { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqGetRewardedData req = await ReadData(); + Database.User user = GetUser(); - var response = new ResGetRewardedData(); + ResGetRewardedData response = new(); response.AchievementIds.Add(user.CompletedAchievements); response.WeeklyIds.Add(user.WeeklyResetableData.CompletedWeeklyMissions); diff --git a/EpinelPS/LobbyServer/Mission/ObtainAchievement.cs b/EpinelPS/LobbyServer/Mission/ObtainAchievement.cs index e6769cb..5a08e31 100644 --- a/EpinelPS/LobbyServer/Mission/ObtainAchievement.cs +++ b/EpinelPS/LobbyServer/Mission/ObtainAchievement.cs @@ -9,24 +9,24 @@ namespace EpinelPS.LobbyServer.Mission { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqObtainAchievementReward req = await ReadData(); + User user = GetUser(); - var response = new ResObtainAchievementReward(); + ResObtainAchievementReward response = new(); List rewards = []; int total_points = 0; - foreach (var item in req.TidList) + foreach (int item in req.TidList) { if (user.CompletedAchievements.Contains(item)) continue; if (!GameData.Instance.TriggerTable.TryGetValue(item, out TriggerRecord? key)) throw new Exception("unknown TID"); - var rewardRecord = GameData.Instance.GetRewardTableEntry(key.reward_id) ?? throw new Exception("unable to lookup reward"); + RewardTableRecord rewardRecord = GameData.Instance.GetRewardTableEntry(key.reward_id) ?? throw new Exception("unable to lookup reward"); - var reward = RewardUtils.RegisterRewardsForUser(user, rewardRecord); + NetRewardData reward = RewardUtils.RegisterRewardsForUser(user, rewardRecord); rewards.Add(reward); user.CompletedAchievements.Add(item); diff --git a/EpinelPS/LobbyServer/Mission/ObtainDaily.cs b/EpinelPS/LobbyServer/Mission/ObtainDaily.cs index c1aae81..de6c74e 100644 --- a/EpinelPS/LobbyServer/Mission/ObtainDaily.cs +++ b/EpinelPS/LobbyServer/Mission/ObtainDaily.cs @@ -9,16 +9,16 @@ namespace EpinelPS.LobbyServer.Mission { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqObtainDailyMissionReward req = await ReadData(); + User user = GetUser(); - var response = new ResObtainDailyMissionReward(); + ResObtainDailyMissionReward response = new(); List rewards = []; int total_points = 0; - foreach (var item in req.TidList) + foreach (int item in req.TidList) { if (user.ResetableData.CompletedDailyMissions.Contains(item)) { @@ -33,7 +33,7 @@ namespace EpinelPS.LobbyServer.Mission if (key.reward_id != 0) { // Actual reward - var rewardRecord = GameData.Instance.GetRewardTableEntry(key.reward_id) ?? throw new Exception("unable to lookup reward"); + RewardTableRecord rewardRecord = GameData.Instance.GetRewardTableEntry(key.reward_id) ?? throw new Exception("unable to lookup reward"); rewards.Add(RewardUtils.RegisterRewardsForUser(user, rewardRecord)); } else diff --git a/EpinelPS/LobbyServer/Mission/ObtainWeekly.cs b/EpinelPS/LobbyServer/Mission/ObtainWeekly.cs index 8115ba8..5012d37 100644 --- a/EpinelPS/LobbyServer/Mission/ObtainWeekly.cs +++ b/EpinelPS/LobbyServer/Mission/ObtainWeekly.cs @@ -9,16 +9,16 @@ namespace EpinelPS.LobbyServer.Mission { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqObtainWeeklyMissionReward req = await ReadData(); + User user = GetUser(); - var response = new ResObtainWeeklyMissionReward(); + ResObtainWeeklyMissionReward response = new(); List rewards = []; int total_points = 0; - foreach (var item in req.TidList) + foreach (int item in req.TidList) { if (user.WeeklyResetableData.CompletedWeeklyMissions.Contains(item)) continue; @@ -29,7 +29,7 @@ namespace EpinelPS.LobbyServer.Mission if (key.reward_id != 0) { // Actual reward - var rewardRecord = GameData.Instance.GetRewardTableEntry(key.reward_id) ?? throw new Exception("unable to lookup reward"); + RewardTableRecord rewardRecord = GameData.Instance.GetRewardTableEntry(key.reward_id) ?? throw new Exception("unable to lookup reward"); rewards.Add(RewardUtils.RegisterRewardsForUser(user, rewardRecord)); } else diff --git a/EpinelPS/LobbyServer/Mission/Rewards/GetDailyRewards.cs b/EpinelPS/LobbyServer/Mission/Rewards/GetDailyRewards.cs index 7100c24..c9c564f 100644 --- a/EpinelPS/LobbyServer/Mission/Rewards/GetDailyRewards.cs +++ b/EpinelPS/LobbyServer/Mission/Rewards/GetDailyRewards.cs @@ -8,11 +8,11 @@ namespace EpinelPS.LobbyServer.Mission.Rewards protected override async Task HandleAsync() { await ReadData(); - var user = GetUser(); + Database.User user = GetUser(); user.ResetDataIfNeeded(); - var response = new ResGetDailyRewardedData(); + ResGetDailyRewardedData response = new(); response.Ids.Add(user.ResetableData.CompletedDailyMissions); await WriteDataAsync(response); diff --git a/EpinelPS/LobbyServer/Mission/Rewards/GetJukeboxRewards.cs b/EpinelPS/LobbyServer/Mission/Rewards/GetJukeboxRewards.cs index 9c05e3d..8c9eef3 100644 --- a/EpinelPS/LobbyServer/Mission/Rewards/GetJukeboxRewards.cs +++ b/EpinelPS/LobbyServer/Mission/Rewards/GetJukeboxRewards.cs @@ -1,16 +1,16 @@ using EpinelPS.Utils; -namespace EpinelPS.LobbyServer.Outpost +namespace EpinelPS.LobbyServer.Mission.Rewards { [PacketPath("/mission/getrewarded/jukebox")] public class GetJukeboxRewards : LobbyMsgHandler { protected override async Task HandleAsync() { - var req = await ReadData(); + ReqGetJukeboxRewardedData req = await ReadData(); // TODO: save these things - var response = new ResGetJukeboxRewardedData(); + ResGetJukeboxRewardedData response = new(); await WriteDataAsync(response); } diff --git a/EpinelPS/LobbyServer/Mission/Rewards/GetWeeklyRewards.cs b/EpinelPS/LobbyServer/Mission/Rewards/GetWeeklyRewards.cs index 834b9a2..a90f515 100644 --- a/EpinelPS/LobbyServer/Mission/Rewards/GetWeeklyRewards.cs +++ b/EpinelPS/LobbyServer/Mission/Rewards/GetWeeklyRewards.cs @@ -8,11 +8,11 @@ namespace EpinelPS.LobbyServer.Mission.Rewards protected override async Task HandleAsync() { await ReadData(); - var user = GetUser(); + Database.User user = GetUser(); user.ResetDataIfNeeded(); - var response = new ResGetWeeklyRewardedData(); + ResGetWeeklyRewardedData response = new(); response.Ids.Add(user.WeeklyResetableData.CompletedWeeklyMissions); await WriteDataAsync(response); diff --git a/EpinelPS/LobbyServer/Outpost/BuildBuilding.cs b/EpinelPS/LobbyServer/Outpost/BuildBuilding.cs index a7444af..d253381 100644 --- a/EpinelPS/LobbyServer/Outpost/BuildBuilding.cs +++ b/EpinelPS/LobbyServer/Outpost/BuildBuilding.cs @@ -12,11 +12,13 @@ namespace EpinelPS.LobbyServer.Outpost { protected override async Task HandleAsync() { - var req = await ReadData(); + ReqBuilding req = await ReadData(); - var response = new ResBuilding(); - response.StartAt = DateTime.UtcNow.Ticks; - response.CompleteAt = DateTime.UtcNow.AddDays(1).Ticks; + ResBuilding response = new() + { + StartAt = DateTime.UtcNow.Ticks, + CompleteAt = DateTime.UtcNow.AddDays(1).Ticks + }; // TODO await WriteDataAsync(response); } diff --git a/EpinelPS/LobbyServer/Outpost/CheckInfracore.cs b/EpinelPS/LobbyServer/Outpost/CheckInfracore.cs index 2e0ac8b..f2f0384 100644 --- a/EpinelPS/LobbyServer/Outpost/CheckInfracore.cs +++ b/EpinelPS/LobbyServer/Outpost/CheckInfracore.cs @@ -7,8 +7,8 @@ namespace EpinelPS.LobbyServer.Outpost { protected override async Task HandleAsync() { - var req = await ReadData(); - var response = new ResCheckReceiveInfraCoreReward(); + ReqCheckReceiveInfraCoreReward req = await ReadData(); + ResCheckReceiveInfraCoreReward response = new(); // TODO diff --git a/EpinelPS/LobbyServer/Outpost/ClearTacticAcademyLesson.cs b/EpinelPS/LobbyServer/Outpost/ClearTacticAcademyLesson.cs index 1d6608c..2145b16 100644 --- a/EpinelPS/LobbyServer/Outpost/ClearTacticAcademyLesson.cs +++ b/EpinelPS/LobbyServer/Outpost/ClearTacticAcademyLesson.cs @@ -9,13 +9,15 @@ namespace EpinelPS.LobbyServer.Outpost { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqTacticAcademyClearLesson req = await ReadData(); + User user = GetUser(); - var response = new ResTacticAcademyClearLesson(); - response.ClearLessonTid = req.LessonTid; + ResTacticAcademyClearLesson response = new() + { + ClearLessonTid = req.LessonTid + }; - var x = GameData.Instance.GetTacticAcademyLesson(req.LessonTid); + TacticAcademyLessonRecord x = GameData.Instance.GetTacticAcademyLesson(req.LessonTid); if (user.CanSubtractCurrency((CurrencyType)x.currency_id, x.currency_value)) { @@ -25,7 +27,7 @@ namespace EpinelPS.LobbyServer.Outpost ProcessLessonReward(user, x); - foreach (var currency in user.Currency) + foreach (KeyValuePair currency in user.Currency) { response.Currencies.Add(new NetUserCurrencyData() { Type = (int)currency.Key, Value = currency.Value }); } @@ -38,7 +40,7 @@ namespace EpinelPS.LobbyServer.Outpost await WriteDataAsync(response); } - private void ProcessLessonReward(Database.User user, TacticAcademyLessonRecord r) + private static void ProcessLessonReward(Database.User user, TacticAcademyLessonRecord r) { if (r.lesson_reward == null) { @@ -48,7 +50,7 @@ namespace EpinelPS.LobbyServer.Outpost if (r.lesson_type == "OutpostBattle") { - foreach (var item in r.lesson_reward) + foreach (TacticAcademyLessonReward item in r.lesson_reward) { if (item.lesson_reward_id != 0 && item.lesson_reward_value != 0) { diff --git a/EpinelPS/LobbyServer/Outpost/DoWipeout.cs b/EpinelPS/LobbyServer/Outpost/DoWipeout.cs index 44967d4..7a2fc5e 100644 --- a/EpinelPS/LobbyServer/Outpost/DoWipeout.cs +++ b/EpinelPS/LobbyServer/Outpost/DoWipeout.cs @@ -9,9 +9,9 @@ namespace EpinelPS.LobbyServer.Outpost { protected override async Task HandleAsync() { - var req = await ReadData(); - var response = new ResObtainFastBattleReward(); - var user = GetUser(); + ReqObtainFastBattleReward req = await ReadData(); + ResObtainFastBattleReward response = new(); + User user = GetUser(); if (user.ResetableData.WipeoutCount >= 12) { @@ -25,7 +25,7 @@ namespace EpinelPS.LobbyServer.Outpost NetUtils.RegisterRewardsForUser(user, response.Reward); // TODO subtract currency as needed - foreach (var item in user.Currency) + foreach (KeyValuePair item in user.Currency) { response.Currencies.Add(new NetUserCurrencyData() { Type = (int)item.Key, Value = item.Value}); } diff --git a/EpinelPS/LobbyServer/Outpost/GetDispatchList.cs b/EpinelPS/LobbyServer/Outpost/GetDispatchList.cs index f1c9ca3..41a20ae 100644 --- a/EpinelPS/LobbyServer/Outpost/GetDispatchList.cs +++ b/EpinelPS/LobbyServer/Outpost/GetDispatchList.cs @@ -7,9 +7,9 @@ namespace EpinelPS.LobbyServer.Outpost { protected override async Task HandleAsync() { - var req = await ReadData(); + ReqGetDispatchList req = await ReadData(); - var response = new ResGetDispatchList(); + ResGetDispatchList response = new(); // TODO await WriteDataAsync(response); } diff --git a/EpinelPS/LobbyServer/Outpost/GetOutpostData.cs b/EpinelPS/LobbyServer/Outpost/GetOutpostData.cs index 3d16359..ce45e0a 100644 --- a/EpinelPS/LobbyServer/Outpost/GetOutpostData.cs +++ b/EpinelPS/LobbyServer/Outpost/GetOutpostData.cs @@ -8,17 +8,17 @@ namespace EpinelPS.LobbyServer.Outpost { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqGetOutpostData req = await ReadData(); + User user = GetUser(); user.ResetDataIfNeeded(); - var battleTime = DateTime.UtcNow - user.BattleTime; - var battleTimeMs = (long)(battleTime.TotalNanoseconds / 100); + TimeSpan battleTime = DateTime.UtcNow - user.BattleTime; + long battleTimeMs = (long)(battleTime.TotalNanoseconds / 100); long overBattleTime = battleTimeMs > 12096000000000 ? battleTimeMs - 12096000000000 : 0; - var response = new ResGetOutpostData + ResGetOutpostData response = new() { OutpostBattleLevel = user.OutpostBattleLevel, Jukeboxv2 = new NetUserJukeboxDataV2() { CommandBgm = new() { Type = NetJukeboxBgmType.JukeboxTableId, JukeboxTableId = user.CommanderMusic.TableId } } @@ -28,9 +28,9 @@ namespace EpinelPS.LobbyServer.Outpost //response.Jukebox.List.AddRange([5, 9999901, 4001, 4002, 4003, 4004, 4005, 4006, 12, 4007, 4008, 4009, 4010, 4011, 4012, 4013, 4014, 4015, 4016, 4017, 4018, 4019, 4020, 4021, 4022, 4023, 4024, 4025, 4026, 4027, 4028, 4029, 4030, 4031, 4032, 4033, 4034, 4036, 5001, 5002, 5003, 5004, 5005, 5006, 5007, 5008, 5009, 5010, 5011, 5012]); //response.JukeboxV2.JukeboxTableIds.AddRange([5, 9999901, 4001, 4002, 4003, 4004, 4005, 4006, 12, 4007, 4008, 4009, 4010, 4011, 4012, 4013, 4014, 4015, 4016, 4017, 4018, 4019, 4020, 4021, 4022, 4023, 4024, 4025, 4026, 4027, 4028, 4029, 4030, 4031, 4032, 4033, 4034, 4036, 5001, 5002, 5003, 5004, 5005, 5006, 5007, 5008, 5009, 5010, 5011, 5012]); - + // Directly use jukeboxListDataRecords - var jukeboxIds = GameData.Instance.jukeboxListDataRecords.Keys.ToList(); + List jukeboxIds = [.. GameData.Instance.jukeboxListDataRecords.Keys]; // Update response lists with the IDs response.Jukeboxv2.JukeboxTableIds.AddRange(jukeboxIds); diff --git a/EpinelPS/LobbyServer/Outpost/GetRecycleRoomData.cs b/EpinelPS/LobbyServer/Outpost/GetRecycleRoomData.cs index 1589842..93437c3 100644 --- a/EpinelPS/LobbyServer/Outpost/GetRecycleRoomData.cs +++ b/EpinelPS/LobbyServer/Outpost/GetRecycleRoomData.cs @@ -8,9 +8,9 @@ namespace EpinelPS.LobbyServer.Outpost { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); - var response = new ResGetRecycleRoomData(); + ReqGetRecycleRoomData req = await ReadData(); + User user = GetUser(); + ResGetRecycleRoomData response = new(); response.Recycle.AddRange(user.ResearchProgress.Select(progress => { diff --git a/EpinelPS/LobbyServer/Outpost/GetTacticAcademyData.cs b/EpinelPS/LobbyServer/Outpost/GetTacticAcademyData.cs index 157b31b..39fed5f 100644 --- a/EpinelPS/LobbyServer/Outpost/GetTacticAcademyData.cs +++ b/EpinelPS/LobbyServer/Outpost/GetTacticAcademyData.cs @@ -7,10 +7,10 @@ namespace EpinelPS.LobbyServer.Outpost { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqGetTacticAcademyData req = await ReadData(); + Database.User user = GetUser(); - var response = new ResGetTacticAcademyData(); + ResGetTacticAcademyData response = new(); response.ClearLessons.AddRange(user.CompletedTacticAcademyLessons); await WriteDataAsync(response); diff --git a/EpinelPS/LobbyServer/Outpost/JukeboxGet.cs b/EpinelPS/LobbyServer/Outpost/JukeboxGet.cs index e63dab0..cb85a6a 100644 --- a/EpinelPS/LobbyServer/Outpost/JukeboxGet.cs +++ b/EpinelPS/LobbyServer/Outpost/JukeboxGet.cs @@ -1,7 +1,7 @@ using EpinelPS.Utils; -namespace EpinelPS.LobbyServer.Jukebox +namespace EpinelPS.LobbyServer.Outpost { [PacketPath("/jukebox/playlist/get")] public class JukeboxPlaylistGet : LobbyMsgHandler @@ -9,7 +9,7 @@ namespace EpinelPS.LobbyServer.Jukebox protected override async Task HandleAsync() { // Prepare response with static data - var response = new ResGetJukeboxPlaylist + ResGetJukeboxPlaylist response = new() { Playlists = {}, // Assuming Playlists is a list or similar collection type, you may want to add items here. FavoriteSongs = new NetJukeboxFavorite diff --git a/EpinelPS/LobbyServer/Outpost/JukeboxPlayHistory.cs b/EpinelPS/LobbyServer/Outpost/JukeboxPlayHistory.cs index bb01aa6..68d8f04 100644 --- a/EpinelPS/LobbyServer/Outpost/JukeboxPlayHistory.cs +++ b/EpinelPS/LobbyServer/Outpost/JukeboxPlayHistory.cs @@ -1,15 +1,15 @@ using EpinelPS.Utils; -namespace EpinelPS.LobbyServer.Jukebox +namespace EpinelPS.LobbyServer.Outpost { [PacketPath("/jukebox/record/playhistory")] public class JukeboxPlayHistory : LobbyMsgHandler { protected override async Task HandleAsync() { - var req = await ReadData(); + ReqRecordJukeboxPlayHistory req = await ReadData(); - var response = new ResRecordJukeboxPlayHistory(); + ResRecordJukeboxPlayHistory response = new(); await WriteDataAsync(response); } } diff --git a/EpinelPS/LobbyServer/Outpost/MemorialGetMemoryList.cs b/EpinelPS/LobbyServer/Outpost/MemorialGetMemoryList.cs index f4e8ce3..8a27c1a 100644 --- a/EpinelPS/LobbyServer/Outpost/MemorialGetMemoryList.cs +++ b/EpinelPS/LobbyServer/Outpost/MemorialGetMemoryList.cs @@ -7,10 +7,10 @@ namespace EpinelPS.LobbyServer.Outpost { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqGetMemoryList req = await ReadData(); + Database.User user = GetUser(); - var response = new ResGetMemoryList(); + ResGetMemoryList response = new(); response.MemoryList.AddRange(user.Memorial); diff --git a/EpinelPS/LobbyServer/Outpost/ObtainOutpostReward.cs b/EpinelPS/LobbyServer/Outpost/ObtainOutpostReward.cs index c8cb398..b28c9fc 100644 --- a/EpinelPS/LobbyServer/Outpost/ObtainOutpostReward.cs +++ b/EpinelPS/LobbyServer/Outpost/ObtainOutpostReward.cs @@ -2,21 +2,21 @@ using EpinelPS.Utils; using EpinelPS.Data; -namespace EpinelPS.LobbyServer.Msgs.Outpost +namespace EpinelPS.LobbyServer.Outpost { [PacketPath("/outpost/obtainoutpostbattlereward")] public class ObtainOutpostReward : LobbyMsgHandler { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqObtainOutpostBattleReward req = await ReadData(); + User user = GetUser(); - var response = new ResObtainOutpostBattleReward(); + ResObtainOutpostBattleReward response = new(); - var battleTime = DateTime.UtcNow - user.BattleTime; - var battleTimeMs = (long)(battleTime.TotalNanoseconds / 100); + TimeSpan battleTime = DateTime.UtcNow - user.BattleTime; + long battleTimeMs = (long)(battleTime.TotalNanoseconds / 100); long overBattleTime = battleTimeMs > 864000000000 ? battleTimeMs - 864000000000 : 0; response.OutpostBattleTime = new NetOutpostBattleTime() { MaxBattleTime = 864000000000, MaxOverBattleTime = 12096000000000, BattleTime = 0, OverBattleTime = 0 }; diff --git a/EpinelPS/LobbyServer/Outpost/Recycle/LevelUpResearch.cs b/EpinelPS/LobbyServer/Outpost/Recycle/LevelUpResearch.cs index d0da37c..ca1a4d5 100644 --- a/EpinelPS/LobbyServer/Outpost/Recycle/LevelUpResearch.cs +++ b/EpinelPS/LobbyServer/Outpost/Recycle/LevelUpResearch.cs @@ -14,11 +14,11 @@ namespace EpinelPS.LobbyServer.Outpost.Recycle * Tid: int value, research tid * Items: int value, used items. */ - var req = await ReadData(); - var user = GetUser(); - var response = new ResRecycleLevelUpResearch(); + ReqRecycleLevelUpResearch req = await ReadData(); + User user = GetUser(); + ResRecycleLevelUpResearch response = new(); - user.ResearchProgress.TryGetValue(req.Tid, out var progress); + user.ResearchProgress.TryGetValue(req.Tid, out RecycleRoomResearchProgress? progress); // Check progress is null, null means research is not unlocked. if (progress != null) @@ -31,19 +31,19 @@ namespace EpinelPS.LobbyServer.Outpost.Recycle await WriteDataAsync(response); } - private void AddProgressToResearch(ResRecycleLevelUpResearch response, User user, RecycleRoomResearchProgress progress, ReqRecycleLevelUpResearch req) + private static void AddProgressToResearch(ResRecycleLevelUpResearch response, User user, RecycleRoomResearchProgress progress, ReqRecycleLevelUpResearch req) { - GameData.Instance.RecycleResearchStats.TryGetValue(req.Tid, out var statRecord); + GameData.Instance.RecycleResearchStats.TryGetValue(req.Tid, out RecycleResearchStatRecord? statRecord); if (statRecord is null) return; - var levelRecord = GameData.Instance.RecycleResearchLevels.Values.Where(e => e.recycle_type == statRecord.recycle_type) + RecycleResearchLevelRecord? levelRecord = GameData.Instance.RecycleResearchLevels.Values.Where(e => e.recycle_type == statRecord.recycle_type) .FirstOrDefault(e => e.recycle_level == progress.Level); if (levelRecord is null) return; if (statRecord.recycle_type == "Personal") // main research { - var usedItem = user.Items.FirstOrDefault(e => e.ItemType == levelRecord.item_id); // item_id equals level-up item's tid. + ItemData? usedItem = user.Items.FirstOrDefault(e => e.ItemType == levelRecord.item_id); // item_id equals level-up item's tid. if (usedItem is null || usedItem.Count < levelRecord.item_value) return; @@ -60,8 +60,8 @@ namespace EpinelPS.LobbyServer.Outpost.Recycle } else if (statRecord.recycle_type == "Class" || statRecord.recycle_type == "Corporation") // class research or corporation research { - var netItem = req.Items.Single(); - var usedItem = user.Items.FirstOrDefault(e => e.ItemType == netItem.Tid); + NetItemData netItem = req.Items.Single(); + ItemData? usedItem = user.Items.FirstOrDefault(e => e.ItemType == netItem.Tid); if (usedItem is null) return; @@ -84,12 +84,12 @@ namespace EpinelPS.LobbyServer.Outpost.Recycle } // First: level, Second: exp - private (int, int) CalcCorpAndClassLevelUp(string researchType, int itemCount, int startLevel = 1, int startExp = 0) + private static (int, int) CalcCorpAndClassLevelUp(string researchType, int itemCount, int startLevel = 1, int startExp = 0) { // levelRecord.exp is required exp to level up. - var levelRecords = GameData.Instance.RecycleResearchLevels.Values.Where(e => e.recycle_type == researchType && e.recycle_level > startLevel); + IEnumerable levelRecords = GameData.Instance.RecycleResearchLevels.Values.Where(e => e.recycle_type == researchType && e.recycle_level > startLevel); - foreach (var record in levelRecords) + foreach (RecycleResearchLevelRecord? record in levelRecords) { if (itemCount < record.exp) { diff --git a/EpinelPS/LobbyServer/Outpost/Recycle/RunResearch.cs b/EpinelPS/LobbyServer/Outpost/Recycle/RunResearch.cs index c14c964..e8684ad 100644 --- a/EpinelPS/LobbyServer/Outpost/Recycle/RunResearch.cs +++ b/EpinelPS/LobbyServer/Outpost/Recycle/RunResearch.cs @@ -9,16 +9,16 @@ namespace EpinelPS.LobbyServer.Outpost.Recycle { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); - var response = new ResRecycleRunResearch(); + ReqRecycleRunResearch req = await ReadData(); + User user = GetUser(); + ResRecycleRunResearch response = new(); - user.ResearchProgress.TryGetValue(req.Tid, out var progress); + user.ResearchProgress.TryGetValue(req.Tid, out RecycleRoomResearchProgress? progress); // Check progress is null, non-null means research is already unlocked. if (progress is null) { - var researchRecord = GameData.Instance.RecycleResearchStats.Values.FirstOrDefault(e => e.id == req.Tid) + RecycleResearchStatRecord researchRecord = GameData.Instance.RecycleResearchStats.Values.FirstOrDefault(e => e.id == req.Tid) ?? throw new Exception("not found research record with tid " + req.Tid); progress = new() { diff --git a/EpinelPS/LobbyServer/Outpost/SetBuildingDone.cs b/EpinelPS/LobbyServer/Outpost/SetBuildingDone.cs index cb034c9..bde42be 100644 --- a/EpinelPS/LobbyServer/Outpost/SetBuildingDone.cs +++ b/EpinelPS/LobbyServer/Outpost/SetBuildingDone.cs @@ -7,10 +7,10 @@ namespace EpinelPS.LobbyServer.Outpost { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqBuildingIsDone req = await ReadData(); + Database.User user = GetUser(); - var response = new ResBuildingIsDone(); + ResBuildingIsDone response = new(); diff --git a/EpinelPS/LobbyServer/Outpost/ShowBattleReward.cs b/EpinelPS/LobbyServer/Outpost/ShowBattleReward.cs index ab8751c..7ba58dd 100644 --- a/EpinelPS/LobbyServer/Outpost/ShowBattleReward.cs +++ b/EpinelPS/LobbyServer/Outpost/ShowBattleReward.cs @@ -8,26 +8,28 @@ namespace EpinelPS.LobbyServer.Outpost { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqShowOutpostBattleReward req = await ReadData(); + User user = GetUser(); - var battleTime = DateTime.UtcNow - user.BattleTime; - var battleTimeMs = (long)(battleTime.TotalNanoseconds / 100); + TimeSpan battleTime = DateTime.UtcNow - user.BattleTime; + long battleTimeMs = (long)(battleTime.TotalNanoseconds / 100); long overBattleTime = battleTimeMs > 864000000000 ? battleTimeMs - 864000000000 : 0; // TODO if (overBattleTime > 864000000000) overBattleTime = 0; - var response = new ResShowOutpostBattleReward(); - response.OutpostBattleLevel = user.OutpostBattleLevel; - response.OutpostBattleTime = new NetOutpostBattleTime() { MaxBattleTime = 864000000000, MaxOverBattleTime = 12096000000000, BattleTime = battleTimeMs, OverBattleTime = 0 }; + ResShowOutpostBattleReward response = new() + { + OutpostBattleLevel = user.OutpostBattleLevel, + OutpostBattleTime = new NetOutpostBattleTime() { MaxBattleTime = 864000000000, MaxOverBattleTime = 12096000000000, BattleTime = battleTimeMs, OverBattleTime = 0 }, - response.BattleTime = 0; - response.FastBattleCount = user.ResetableData.WipeoutCount; - response.MaxBattleTime = 864000000000; + BattleTime = 0, + FastBattleCount = user.ResetableData.WipeoutCount, + MaxBattleTime = 864000000000, - response.Reward = NetUtils.GetOutpostReward(user, battleTime); + Reward = NetUtils.GetOutpostReward(user, battleTime) + }; response.TimeRewardBuffs.AddRange(NetUtils.GetOutpostTimeReward(user)); diff --git a/EpinelPS/LobbyServer/PartyMatch/ListPartyMatchInvitations.cs b/EpinelPS/LobbyServer/PartyMatch/ListPartyMatchInvitations.cs index 72ac821..f79e974 100644 --- a/EpinelPS/LobbyServer/PartyMatch/ListPartyMatchInvitations.cs +++ b/EpinelPS/LobbyServer/PartyMatch/ListPartyMatchInvitations.cs @@ -7,10 +7,10 @@ namespace EpinelPS.LobbyServer.PartyMatch { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqListInvitation req = await ReadData(); + Database.User user = GetUser(); - var response = new ResListInvitation(); + ResListInvitation response = new(); // TODO await WriteDataAsync(response); } diff --git a/EpinelPS/LobbyServer/Pass/GetActiveEventPassData.cs b/EpinelPS/LobbyServer/Pass/GetActiveEventPassData.cs index 0500e47..a543e56 100644 --- a/EpinelPS/LobbyServer/Pass/GetActiveEventPassData.cs +++ b/EpinelPS/LobbyServer/Pass/GetActiveEventPassData.cs @@ -8,9 +8,9 @@ namespace EpinelPS.LobbyServer.Pass //broken game wont boot if not empty not sure how to implement this one protected override async Task HandleAsync() { - var req = await ReadData(); // no fields + ReqGetActiveEventPassData req = await ReadData(); // no fields - var response = new ResGetActiveEventPassData(); // fields PassList = NetPassInfo + ResGetActiveEventPassData response = new(); // fields PassList = NetPassInfo diff --git a/EpinelPS/LobbyServer/Pass/GetActiveFreeRewardData.cs b/EpinelPS/LobbyServer/Pass/GetActiveFreeRewardData.cs index 0545d45..436af20 100644 --- a/EpinelPS/LobbyServer/Pass/GetActiveFreeRewardData.cs +++ b/EpinelPS/LobbyServer/Pass/GetActiveFreeRewardData.cs @@ -7,7 +7,7 @@ namespace EpinelPS.LobbyServer.Pass { protected override async Task HandleAsync() { - var req = await ReadData(); + ReqGetActiveFreeRewardPassData req = await ReadData(); ResGetActiveFreeRewardPassData response = new(); await WriteDataAsync(response); diff --git a/EpinelPS/LobbyServer/Pass/GetActivePassData.cs b/EpinelPS/LobbyServer/Pass/GetActivePassData.cs index 057f388..5ad1fbb 100644 --- a/EpinelPS/LobbyServer/Pass/GetActivePassData.cs +++ b/EpinelPS/LobbyServer/Pass/GetActivePassData.cs @@ -7,20 +7,22 @@ namespace EpinelPS.LobbyServer.Pass { protected override async Task HandleAsync() { - var req = await ReadData(); - - var response = new ResGetActivePassData(); - response.PassExist = true; - response.Pass = new NetPassInfo { PassId = 1028, PassPoint = 490, PassSkipCount = 15, PremiumActive = true }; - - // Adding PassRankList using a loop + ReqGetActivePassData req = await ReadData(); + + ResGetActivePassData response = new() + { + PassExist = true, + Pass = new NetPassInfo { PassId = 1028, PassPoint = 490, PassSkipCount = 15, PremiumActive = true } + }; + + // Adding PassRankList using a loop for (int rank = 1; rank <= 15; rank++) { response.Pass.PassRankList.Add(new NetPassRankData { PassRank = rank, IsNormalRewarded = true, IsPremiumRewarded = true }); } - var missionIds = new[] { 4001, 4002, 4003, 4004, 4005, 4006, 4007 }; - foreach (var missionId in missionIds) response.Pass.PassMissionList.Add(new NetPassMissionData { PassMissionId = missionId, IsComplete = true }); + int[] missionIds = new[] { 4001, 4002, 4003, 4004, 4005, 4006, 4007 }; + foreach (int missionId in missionIds) response.Pass.PassMissionList.Add(new NetPassMissionData { PassMissionId = missionId, IsComplete = true }); await WriteDataAsync(response); } diff --git a/EpinelPS/LobbyServer/Pass/buyrank.cs b/EpinelPS/LobbyServer/Pass/buyrank.cs index 8cbe2d6..e367059 100644 --- a/EpinelPS/LobbyServer/Pass/buyrank.cs +++ b/EpinelPS/LobbyServer/Pass/buyrank.cs @@ -7,9 +7,9 @@ namespace EpinelPS.LobbyServer.Pass { protected override async Task HandleAsync() { - var req = await ReadData(); //fields "PassId", "TargetPassRank" - - var response = new ResBuyPassRank(); // fields "PassRank", "PassPoint", "Currencies" + ReqBuyPassRank req = await ReadData(); //fields "PassId", "TargetPassRank" + + ResBuyPassRank response = new(); // fields "PassRank", "PassPoint", "Currencies" await WriteDataAsync(response); diff --git a/EpinelPS/LobbyServer/Pass/obtainreward.cs b/EpinelPS/LobbyServer/Pass/obtainreward.cs index 882832d..5c967f4 100644 --- a/EpinelPS/LobbyServer/Pass/obtainreward.cs +++ b/EpinelPS/LobbyServer/Pass/obtainreward.cs @@ -7,9 +7,9 @@ namespace EpinelPS.LobbyServer.Pass { protected override async Task HandleAsync() { - var req = await ReadData(); //fields "PassId", "PassRank" - - var response = new ResObtainPassReward(); // field Reward + ReqObtainPassReward req = await ReadData(); //fields "PassId", "PassRank" + + ResObtainPassReward response = new(); // field Reward await WriteDataAsync(response); diff --git a/EpinelPS/LobbyServer/Ranking/GetRankAchieventTop.cs b/EpinelPS/LobbyServer/Ranking/GetRankAchieventTop.cs index 3505bf9..b3b34fa 100644 --- a/EpinelPS/LobbyServer/Ranking/GetRankAchieventTop.cs +++ b/EpinelPS/LobbyServer/Ranking/GetRankAchieventTop.cs @@ -7,9 +7,9 @@ namespace EpinelPS.LobbyServer.Ranking { protected override async Task HandleAsync() { - var req = await ReadData(); + ReqGetRankAchievementTop req = await ReadData(); - var response = new ResGetRankAchievementTop(); + ResGetRankAchievementTop response = new(); // TODO diff --git a/EpinelPS/LobbyServer/Ranking/GetTopRanks.cs b/EpinelPS/LobbyServer/Ranking/GetTopRanks.cs index 19e4a9f..422dcfc 100644 --- a/EpinelPS/LobbyServer/Ranking/GetTopRanks.cs +++ b/EpinelPS/LobbyServer/Ranking/GetTopRanks.cs @@ -7,9 +7,9 @@ namespace EpinelPS.LobbyServer.Ranking { protected override async Task HandleAsync() { - var req = await ReadData(); + ReqGetAllTopRank req = await ReadData(); - var response = new ResGetAllTopRank(); + ResGetAllTopRank response = new(); // TODO diff --git a/EpinelPS/LobbyServer/Ranking/UpdateServerReward.cs b/EpinelPS/LobbyServer/Ranking/UpdateServerReward.cs index 5d356e5..d1f0b39 100644 --- a/EpinelPS/LobbyServer/Ranking/UpdateServerReward.cs +++ b/EpinelPS/LobbyServer/Ranking/UpdateServerReward.cs @@ -7,8 +7,8 @@ namespace EpinelPS.LobbyServer.Ranking { protected override async Task HandleAsync() { - var req = await ReadData(); - var response = new ResUpdateRankingServerReward(); + ReqUpdateRankingServerReward req = await ReadData(); + ResUpdateRankingServerReward response = new(); await WriteDataAsync(response); diff --git a/EpinelPS/LobbyServer/Shop/GetProductList.cs b/EpinelPS/LobbyServer/Shop/GetProductList.cs index 16b6df9..75be7d6 100644 --- a/EpinelPS/LobbyServer/Shop/GetProductList.cs +++ b/EpinelPS/LobbyServer/Shop/GetProductList.cs @@ -12,12 +12,12 @@ namespace EpinelPS.LobbyServer.Shop { protected override async Task HandleAsync() { - var x = await ReadData(); + ReqGetJupiterProductList x = await ReadData(); - var response = new ResGetJupiterProductList(); - foreach (var item in x.ProductIdList) + ResGetJupiterProductList response = new(); + foreach (string? item in x.ProductIdList) { - var product = GameData.Instance.mediasProductTable.Where(x => x.Key == item); + IEnumerable> product = GameData.Instance.mediasProductTable.Where(x => x.Key == item); if (product.Any()) { diff --git a/EpinelPS/LobbyServer/Shop/GetProductOffers.cs b/EpinelPS/LobbyServer/Shop/GetProductOffers.cs index a9f9eb9..a9b9276 100644 --- a/EpinelPS/LobbyServer/Shop/GetProductOffers.cs +++ b/EpinelPS/LobbyServer/Shop/GetProductOffers.cs @@ -8,11 +8,11 @@ namespace EpinelPS.LobbyServer.Shop { protected override async Task HandleAsync() { - var x = await ReadData(); + ReqListSeenProductOffer x = await ReadData(); // Disable in game ads - var response = new ResListSeenProductOffer(); - foreach(var item in GameData.Instance.ProductOffers) + ResListSeenProductOffer response = new(); + foreach(KeyValuePair item in GameData.Instance.ProductOffers) { response.Result.Add(new NetUserProductOfferSeenHistory() { ProductOfferId = item.Key }); } diff --git a/EpinelPS/LobbyServer/Shop/GetShop.cs b/EpinelPS/LobbyServer/Shop/GetShop.cs index 77c414c..e6d5321 100644 --- a/EpinelPS/LobbyServer/Shop/GetShop.cs +++ b/EpinelPS/LobbyServer/Shop/GetShop.cs @@ -7,13 +7,16 @@ namespace EpinelPS.LobbyServer.Shop { protected override async Task HandleAsync() { - var x = await ReadData(); + ReqGetShop x = await ReadData(); - var response = new ResGetShop(); + ResGetShop response = new() + { + Shop = new NetShopProductData + { + ShopCategory = x.ShopCategory + } + }; - response.Shop = new NetShopProductData(); - response.Shop.ShopCategory = x.ShopCategory; - // TODO await WriteDataAsync(response); diff --git a/EpinelPS/LobbyServer/Shop/GetShopProductList.cs b/EpinelPS/LobbyServer/Shop/GetShopProductList.cs index 7a2bb76..2d6dd39 100644 --- a/EpinelPS/LobbyServer/Shop/GetShopProductList.cs +++ b/EpinelPS/LobbyServer/Shop/GetShopProductList.cs @@ -7,8 +7,8 @@ namespace EpinelPS.LobbyServer.Shop { protected override async Task HandleAsync() { - var req = await ReadData(); - var response = new ResShopProductList(); + ReqShopProductList req = await ReadData(); + ResShopProductList response = new(); await WriteDataAsync(response); } diff --git a/EpinelPS/LobbyServer/Shop/InApp/GetMarketingDetail.cs b/EpinelPS/LobbyServer/Shop/InApp/GetMarketingDetail.cs index 50ff667..ad7b94c 100644 --- a/EpinelPS/LobbyServer/Shop/InApp/GetMarketingDetail.cs +++ b/EpinelPS/LobbyServer/Shop/InApp/GetMarketingDetail.cs @@ -7,9 +7,11 @@ namespace EpinelPS.LobbyServer.Shop.InApp { protected override async Task HandleAsync() { - var req = await ReadData(); - var response = new ResGetJupiterMarketingDetail(); - response.MarketingDetail = "{}"; + ReqGetJupiterMarketingDetail req = await ReadData(); + ResGetJupiterMarketingDetail response = new() + { + MarketingDetail = "{}" + }; await WriteDataAsync(response); } diff --git a/EpinelPS/LobbyServer/Shop/InApp/GetMonthlySubscriptionReward.cs b/EpinelPS/LobbyServer/Shop/InApp/GetMonthlySubscriptionReward.cs index 1f05724..60757d9 100644 --- a/EpinelPS/LobbyServer/Shop/InApp/GetMonthlySubscriptionReward.cs +++ b/EpinelPS/LobbyServer/Shop/InApp/GetMonthlySubscriptionReward.cs @@ -7,9 +7,9 @@ namespace EpinelPS.LobbyServer.Shop.InApp { protected override async Task HandleAsync() { - var req = await ReadData(); + ReqGetMonthlySubscriptionReward req = await ReadData(); - var response = new ResGetMonthlySubscriptionReward(); + ResGetMonthlySubscriptionReward response = new(); // TODO: Validate response from real server await WriteDataAsync(response); diff --git a/EpinelPS/LobbyServer/Shop/InApp/GetProductListInApp.cs b/EpinelPS/LobbyServer/Shop/InApp/GetProductListInApp.cs index 7ac756a..8df3524 100644 --- a/EpinelPS/LobbyServer/Shop/InApp/GetProductListInApp.cs +++ b/EpinelPS/LobbyServer/Shop/InApp/GetProductListInApp.cs @@ -7,9 +7,9 @@ namespace EpinelPS.LobbyServer.Shop.InApp { protected override async Task HandleAsync() { - var x = await ReadData(); + ReqGetInAppShopData x = await ReadData(); - var response = new ResGetInAppShopData(); + ResGetInAppShopData response = new(); response.InAppShopDataList.Add(new NetInAppShopData() { Id = 10001, StartDate = DateTime.Now.Ticks, EndDate = DateTime.Now.AddDays(2).Ticks }); diff --git a/EpinelPS/LobbyServer/Shop/InApp/GetRetrivableProductList.cs b/EpinelPS/LobbyServer/Shop/InApp/GetRetrivableProductList.cs index 93f3a99..7cc25e1 100644 --- a/EpinelPS/LobbyServer/Shop/InApp/GetRetrivableProductList.cs +++ b/EpinelPS/LobbyServer/Shop/InApp/GetRetrivableProductList.cs @@ -7,9 +7,9 @@ namespace EpinelPS.LobbyServer.Shop.InApp { protected override async Task HandleAsync() { - var x = await ReadData(); + ReqGetInAppShopReceivableProductList x = await ReadData(); - var response = new ResGetInAppShopReceivableProductList(); + ResGetInAppShopReceivableProductList response = new(); // TODO await WriteDataAsync(response); diff --git a/EpinelPS/LobbyServer/Shop/InApp/GetSetupDataForCustomPackage.cs b/EpinelPS/LobbyServer/Shop/InApp/GetSetupDataForCustomPackage.cs index b12ee67..0880c3e 100644 --- a/EpinelPS/LobbyServer/Shop/InApp/GetSetupDataForCustomPackage.cs +++ b/EpinelPS/LobbyServer/Shop/InApp/GetSetupDataForCustomPackage.cs @@ -7,9 +7,9 @@ namespace EpinelPS.LobbyServer.Shop.InApp { protected override async Task HandleAsync() { - var req = await ReadData(); + ReqGetCustomPackageSetupData req = await ReadData(); - var response = new ResGetCustomPackageSetupData(); + ResGetCustomPackageSetupData response = new(); // TODO: Validate response from real server and pull info from user info await WriteDataAsync(response); diff --git a/EpinelPS/LobbyServer/Shop/PackageShop/GetPackagePopupState.cs b/EpinelPS/LobbyServer/Shop/PackageShop/GetPackagePopupState.cs index fd3d03a..e3f9cb4 100644 --- a/EpinelPS/LobbyServer/Shop/PackageShop/GetPackagePopupState.cs +++ b/EpinelPS/LobbyServer/Shop/PackageShop/GetPackagePopupState.cs @@ -8,12 +8,12 @@ namespace EpinelPS.LobbyServer.Shop.PackageShop { protected override async Task HandleAsync() { - var req = await ReadData(); + ReqGetPopupPackageState req = await ReadData(); - var response = new ResGetPopupPackageState(); + ResGetPopupPackageState response = new(); // disable ads - foreach (var item in GameData.Instance.PopupPackages) + foreach (KeyValuePair item in GameData.Instance.PopupPackages) response.AppearedList.Add(item.Key); await WriteDataAsync(response); diff --git a/EpinelPS/LobbyServer/Shop/PackageShop/PackageShopGetCampaignPackage.cs b/EpinelPS/LobbyServer/Shop/PackageShop/PackageShopGetCampaignPackage.cs index 12406bf..ed9476d 100644 --- a/EpinelPS/LobbyServer/Shop/PackageShop/PackageShopGetCampaignPackage.cs +++ b/EpinelPS/LobbyServer/Shop/PackageShop/PackageShopGetCampaignPackage.cs @@ -7,9 +7,9 @@ namespace EpinelPS.LobbyServer.Shop.PackageShop { protected override async Task HandleAsync() { - var req = await ReadData(); + ReqGetCampaignPackage req = await ReadData(); - var response = new ResGetCampaignPackage(); + ResGetCampaignPackage response = new(); // TODO: Validate response from real server and pull info from user info await WriteDataAsync(response); diff --git a/EpinelPS/LobbyServer/Shop/PackageShop/SetPopupPackageState.cs b/EpinelPS/LobbyServer/Shop/PackageShop/SetPopupPackageState.cs index 084b145..5b753f3 100644 --- a/EpinelPS/LobbyServer/Shop/PackageShop/SetPopupPackageState.cs +++ b/EpinelPS/LobbyServer/Shop/PackageShop/SetPopupPackageState.cs @@ -7,9 +7,9 @@ namespace EpinelPS.LobbyServer.Shop.PackageShop { protected override async Task HandleAsync() { - var req = await ReadData(); + ReqSetPopupPackageState req = await ReadData(); - var response = new ResSetPopupPackageState(); + ResSetPopupPackageState response = new(); await WriteDataAsync(response); } } diff --git a/EpinelPS/LobbyServer/Shop/SeenProductOffer.cs b/EpinelPS/LobbyServer/Shop/SeenProductOffer.cs index c12ad8d..a399029 100644 --- a/EpinelPS/LobbyServer/Shop/SeenProductOffer.cs +++ b/EpinelPS/LobbyServer/Shop/SeenProductOffer.cs @@ -7,11 +7,11 @@ namespace EpinelPS.LobbyServer.Shop { protected override async Task HandleAsync() { - var x = await ReadData(); + ReqSetSetSeenProductOffer x = await ReadData(); // TODO: Figure out a way to disable ads - var response = new ResSetSetSeenProductOffer(); + ResSetSetSeenProductOffer response = new(); await WriteDataAsync(response); } diff --git a/EpinelPS/LobbyServer/Sidestory/ClearBattle.cs b/EpinelPS/LobbyServer/Sidestory/ClearBattle.cs index 30193d4..c0581f8 100644 --- a/EpinelPS/LobbyServer/Sidestory/ClearBattle.cs +++ b/EpinelPS/LobbyServer/Sidestory/ClearBattle.cs @@ -7,10 +7,10 @@ namespace EpinelPS.LobbyServer.Sidestory { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqClearSideStoryCutForBattle req = await ReadData(); + Database.User user = GetUser(); - var response = new ResClearSideStoryCutForBattle(); + ResClearSideStoryCutForBattle response = new(); // TODO diff --git a/EpinelPS/LobbyServer/Sidestory/ClearSideStoryCut.cs b/EpinelPS/LobbyServer/Sidestory/ClearSideStoryCut.cs index 629a8a3..05b1817 100644 --- a/EpinelPS/LobbyServer/Sidestory/ClearSideStoryCut.cs +++ b/EpinelPS/LobbyServer/Sidestory/ClearSideStoryCut.cs @@ -7,10 +7,10 @@ namespace EpinelPS.LobbyServer.Sidestory { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqClearSideStoryCutForScenario req = await ReadData(); + Database.User user = GetUser(); - var response = new ResClearSideStoryCutForScenario(); + ResClearSideStoryCutForScenario response = new(); // TODO diff --git a/EpinelPS/LobbyServer/Sidestory/ClearSideStoryStage.cs b/EpinelPS/LobbyServer/Sidestory/ClearSideStoryStage.cs index df182e2..eb7e390 100644 --- a/EpinelPS/LobbyServer/Sidestory/ClearSideStoryStage.cs +++ b/EpinelPS/LobbyServer/Sidestory/ClearSideStoryStage.cs @@ -10,18 +10,18 @@ namespace EpinelPS.LobbyServer.Sidestory { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqClearSideStoryStage req = await ReadData(); + User user = GetUser(); - var response = new ResClearSideStoryStage(); + ResClearSideStoryStage response = new(); if (!user.CompletedSideStoryStages.Contains(req.SideStoryStageId)) { user.CompletedSideStoryStages.Add(req.SideStoryStageId); - if (GameData.Instance.SidestoryRewardTable.ContainsKey(req.SideStoryStageId)) + if (GameData.Instance.SidestoryRewardTable.TryGetValue(req.SideStoryStageId, out SideStoryStageRecord? value)) { - var rewardData = GameData.Instance.GetRewardTableEntry(GameData.Instance.SidestoryRewardTable[req.SideStoryStageId].first_clear_reward); + RewardTableRecord? rewardData = GameData.Instance.GetRewardTableEntry(value.first_clear_reward); if (rewardData != null) response.Reward = RewardUtils.RegisterRewardsForUser(user, rewardData); diff --git a/EpinelPS/LobbyServer/Sidestory/EnterBattle.cs b/EpinelPS/LobbyServer/Sidestory/EnterBattle.cs index d8a9bbe..dfd1cb1 100644 --- a/EpinelPS/LobbyServer/Sidestory/EnterBattle.cs +++ b/EpinelPS/LobbyServer/Sidestory/EnterBattle.cs @@ -7,10 +7,10 @@ namespace EpinelPS.LobbyServer.Sidestory { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqEnterSideStoryCutForBattle req = await ReadData(); + Database.User user = GetUser(); - var response = new ResEnterSideStoryCutForBattle(); + ResEnterSideStoryCutForBattle response = new(); await WriteDataAsync(response); } diff --git a/EpinelPS/LobbyServer/Sidestory/EnterSidestoryStage.cs b/EpinelPS/LobbyServer/Sidestory/EnterSidestoryStage.cs index 81990ac..3a23767 100644 --- a/EpinelPS/LobbyServer/Sidestory/EnterSidestoryStage.cs +++ b/EpinelPS/LobbyServer/Sidestory/EnterSidestoryStage.cs @@ -7,10 +7,10 @@ namespace EpinelPS.LobbyServer.Sidestory { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqEnterSideStoryStage req = await ReadData(); + Database.User user = GetUser(); - var response = new ResEnterSideStoryStage(); + ResEnterSideStoryStage response = new(); // TODO diff --git a/EpinelPS/LobbyServer/Sidestory/ListSideStory.cs b/EpinelPS/LobbyServer/Sidestory/ListSideStory.cs index 9618de5..d3b0030 100644 --- a/EpinelPS/LobbyServer/Sidestory/ListSideStory.cs +++ b/EpinelPS/LobbyServer/Sidestory/ListSideStory.cs @@ -8,12 +8,12 @@ namespace EpinelPS.LobbyServer.Sidestory { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqListSideStory req = await ReadData(); + Database.User user = GetUser(); - var response = new ResListSideStory(); + ResListSideStory response = new(); - foreach (var item in user.CompletedSideStoryStages) + foreach (int item in user.CompletedSideStoryStages) { // TODO cleared at response.SideStoryStageDataList.Add(new NetSideStoryStageData() { SideStoryStageId = item, ClearedAt = Timestamp.FromDateTime(DateTime.UtcNow) }); diff --git a/EpinelPS/LobbyServer/Simroom/GetSimRoomData.cs b/EpinelPS/LobbyServer/Simroom/GetSimRoomData.cs index 29d7189..f53ef33 100644 --- a/EpinelPS/LobbyServer/Simroom/GetSimRoomData.cs +++ b/EpinelPS/LobbyServer/Simroom/GetSimRoomData.cs @@ -8,10 +8,10 @@ namespace EpinelPS.LobbyServer.Simroom { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqGetSimRoom req = await ReadData(); + Database.User user = GetUser(); - var response = new ResGetSimRoom + ResGetSimRoom response = new() { OverclockData = new NetSimRoomOverclockData { diff --git a/EpinelPS/LobbyServer/Simroom/Quit.cs b/EpinelPS/LobbyServer/Simroom/Quit.cs index e243304..1a96fb3 100644 --- a/EpinelPS/LobbyServer/Simroom/Quit.cs +++ b/EpinelPS/LobbyServer/Simroom/Quit.cs @@ -8,8 +8,8 @@ namespace EpinelPS.LobbyServer.Simroom { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqQuitSimRoom req = await ReadData(); + User user = GetUser(); ResQuitSimRoom response = new() { diff --git a/EpinelPS/LobbyServer/Simroom/SelectDifficulty.cs b/EpinelPS/LobbyServer/Simroom/SelectDifficulty.cs index 8d8c119..cd00340 100644 --- a/EpinelPS/LobbyServer/Simroom/SelectDifficulty.cs +++ b/EpinelPS/LobbyServer/Simroom/SelectDifficulty.cs @@ -8,8 +8,8 @@ namespace EpinelPS.LobbyServer.Simroom { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqSelectSimRoomDifficulty req = await ReadData(); + User user = GetUser(); ResSelectSimRoomDifficulty response = new() { diff --git a/EpinelPS/LobbyServer/Soloraid/GetSoloraidPeriod.cs b/EpinelPS/LobbyServer/Soloraid/GetSoloraidPeriod.cs index 6e66abe..8382bb5 100644 --- a/EpinelPS/LobbyServer/Soloraid/GetSoloraidPeriod.cs +++ b/EpinelPS/LobbyServer/Soloraid/GetSoloraidPeriod.cs @@ -7,12 +7,14 @@ namespace EpinelPS.LobbyServer.Soloraid { protected override async Task HandleAsync() { - var req = await ReadData(); + ReqGetSoloRaidPeriod req = await ReadData(); - var response = new ResGetSoloRaidPeriod(); - response.Period = new NetSoloRaidPeriodData + ResGetSoloRaidPeriod response = new() { + Period = new NetSoloRaidPeriodData + { + } }; // TODO await WriteDataAsync(response); diff --git a/EpinelPS/LobbyServer/Stage/CheckCleared.cs b/EpinelPS/LobbyServer/Stage/CheckCleared.cs index 6b043b3..d379e9c 100644 --- a/EpinelPS/LobbyServer/Stage/CheckCleared.cs +++ b/EpinelPS/LobbyServer/Stage/CheckCleared.cs @@ -7,14 +7,14 @@ namespace EpinelPS.LobbyServer.Stage { protected override async Task HandleAsync() { - var req = await ReadData(); + ReqCheckStageClear req = await ReadData(); - var response = new ResCheckStageClear(); - var user = GetUser(); + ResCheckStageClear response = new(); + Database.User user = GetUser(); - foreach (var fields in user.FieldInfoNew) + foreach (KeyValuePair fields in user.FieldInfoNew) { - foreach (var stages in fields.Value.CompletedStages) + foreach (int stages in fields.Value.CompletedStages) { if (req.StageIds.Contains(stages)) response.ClearedStageIds.Add(stages); diff --git a/EpinelPS/LobbyServer/Stage/ClearStage.cs b/EpinelPS/LobbyServer/Stage/ClearStage.cs index 7fb3836..da76298 100644 --- a/EpinelPS/LobbyServer/Stage/ClearStage.cs +++ b/EpinelPS/LobbyServer/Stage/ClearStage.cs @@ -9,10 +9,10 @@ namespace EpinelPS.LobbyServer.Stage { protected override async Task HandleAsync() { - var req = await ReadData(); + ReqClearStage req = await ReadData(); - var response = new ResClearStage(); - var user = GetUser(); + ResClearStage response = new(); + User user = GetUser(); Console.WriteLine($"Stage " + req.StageId + " completed, result is " + req.BattleResult); @@ -28,10 +28,10 @@ namespace EpinelPS.LobbyServer.Stage public static ResClearStage CompleteStage(User user, int StageId, bool forceCompleteScenarios = false) { - var response = new ResClearStage(); - var clearedStage = GameData.Instance.GetStageData(StageId) ?? throw new Exception("cleared stage cannot be null"); + ResClearStage response = new(); + CampaignStageRecord clearedStage = GameData.Instance.GetStageData(StageId) ?? throw new Exception("cleared stage cannot be null"); - var stageMapId = GameData.Instance.GetMapIdFromChapter(clearedStage.chapter_id, clearedStage.chapter_mod); + string stageMapId = GameData.Instance.GetMapIdFromChapter(clearedStage.chapter_id, clearedStage.chapter_mod); if (user.FieldInfoNew.Count == 0) { @@ -39,7 +39,7 @@ namespace EpinelPS.LobbyServer.Stage } DoQuestSpecificUserOperations(user, StageId); - var rewardData = GameData.Instance.GetRewardTableEntry(clearedStage.reward_id); + RewardTableRecord? rewardData = GameData.Instance.GetRewardTableEntry(clearedStage.reward_id); if (forceCompleteScenarios) { @@ -53,8 +53,8 @@ namespace EpinelPS.LobbyServer.Stage } } - var oldLevel = user.userPointData.UserLevel; - var oldOutpostLevel = user.OutpostBattleLevel.Level; + int oldLevel = user.userPointData.UserLevel; + int oldOutpostLevel = user.OutpostBattleLevel.Level; if (rewardData != null) response.StageClearReward = RewardUtils.RegisterRewardsForUser(user, rewardData); @@ -102,13 +102,9 @@ namespace EpinelPS.LobbyServer.Stage user.LastNormalStageCleared = StageId; } } - else if (clearedStage.stage_category == StageCategory.Extra) - { - // TODO - } else { - Console.WriteLine("Unknown stage category " + clearedStage.stage_category); + Logging.Warn("Unknown stage category " + clearedStage.stage_category); } if (clearedStage.stage_type != StageType.Sub) @@ -151,7 +147,7 @@ namespace EpinelPS.LobbyServer.Stage private static void DoQuestSpecificUserOperations(User user, int clearedStageId) { - var quest = GameData.Instance.GetMainQuestForStageClearCondition(clearedStageId); + MainQuestCompletionRecord? quest = GameData.Instance.GetMainQuestForStageClearCondition(clearedStageId); user.AddTrigger(TriggerType.CampaignClear, 1, clearedStageId); if (quest != null) @@ -168,7 +164,7 @@ namespace EpinelPS.LobbyServer.Stage // CSN: Character Serial Number // create a squad with first 5 characters - var team1 = new NetUserTeamData + NetUserTeamData team1 = new() { Type = 1, LastContentsTeamNumber = 1 @@ -197,7 +193,7 @@ namespace EpinelPS.LobbyServer.Stage for (int i = 1; i < 6; i++) { - var character = user.Characters[i - 1]; + Database.Character character = user.Characters[i - 1]; team1Sub.Slots.Add(new NetTeamSlot() { Slot = i, Value = character.Csn }); } team1.Teams.Add(team1Sub); diff --git a/EpinelPS/LobbyServer/Stage/EnterStage.cs b/EpinelPS/LobbyServer/Stage/EnterStage.cs index edb37bb..174c0cc 100644 --- a/EpinelPS/LobbyServer/Stage/EnterStage.cs +++ b/EpinelPS/LobbyServer/Stage/EnterStage.cs @@ -9,13 +9,13 @@ namespace EpinelPS.LobbyServer.Stage { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqEnterStage req = await ReadData(); + User user = GetUser(); - var response = new ResEnterStage(); + ResEnterStage response = new(); - var clearedStage = GameData.Instance.GetStageData(req.StageId) ?? throw new Exception("cleared stage cannot be null"); - var map = GameData.Instance.GetMapIdFromChapter(clearedStage.chapter_id, clearedStage.chapter_mod); + CampaignStageRecord clearedStage = GameData.Instance.GetStageData(req.StageId) ?? throw new Exception("cleared stage cannot be null"); + string map = GameData.Instance.GetMapIdFromChapter(clearedStage.chapter_id, clearedStage.chapter_mod); if (clearedStage.stage_category == StageCategory.Boss) { diff --git a/EpinelPS/LobbyServer/Stage/FastClear.cs b/EpinelPS/LobbyServer/Stage/FastClear.cs index bdb30dc..b4fd938 100644 --- a/EpinelPS/LobbyServer/Stage/FastClear.cs +++ b/EpinelPS/LobbyServer/Stage/FastClear.cs @@ -8,15 +8,15 @@ namespace EpinelPS.LobbyServer.Stage { protected override async Task HandleAsync() { - var req = await ReadData(); + ReqFastClearCampaignStage req = await ReadData(); - var user = GetUser(); + Database.User user = GetUser(); Console.WriteLine($"Stage " + req.CampaignStageId + " completed using quick battle"); - var rsp = ClearStage.CompleteStage(user, req.CampaignStageId); + ResClearStage rsp = ClearStage.CompleteStage(user, req.CampaignStageId); - var response = new ResFastClearCampaignStage() + ResFastClearCampaignStage response = new() { OutpostBattle = rsp.OutpostBattle, OutpostBattleLevelReward = rsp.OutpostBattleLevelReward, diff --git a/EpinelPS/LobbyServer/Stage/GetStage.cs b/EpinelPS/LobbyServer/Stage/GetStage.cs index 1dec89a..43c66de 100644 --- a/EpinelPS/LobbyServer/Stage/GetStage.cs +++ b/EpinelPS/LobbyServer/Stage/GetStage.cs @@ -10,9 +10,9 @@ namespace EpinelPS.LobbyServer.Stage protected override async Task HandleAsync() { ReqGetStageData req = await ReadData(); - var user = GetUser(); + User user = GetUser(); - var mapId = GameData.Instance.GetMapIdFromChapter(req.Chapter, (ChapterMod)req.Mod); + string mapId = GameData.Instance.GetMapIdFromChapter(req.Chapter, (ChapterMod)req.Mod); ResGetStageData response = new() { @@ -26,19 +26,19 @@ namespace EpinelPS.LobbyServer.Stage public static NetFieldObjectData CreateFieldInfo(User user, string mapId, out bool BossEntered) { - var f = new NetFieldObjectData(); + NetFieldObjectData f = new(); bool found = false; BossEntered = false; - foreach (var item in user.FieldInfoNew) + foreach (KeyValuePair item in user.FieldInfoNew) { if (item.Key == mapId) { found = true; - foreach (var stage in item.Value.CompletedStages) + foreach (int stage in item.Value.CompletedStages) { f.Stages.Add(new NetFieldStageData() { StageId = stage }); } - foreach (var obj in item.Value.CompletedObjects) + foreach (NetFieldObject obj in item.Value.CompletedObjects) { f.Objects.Add(obj); } diff --git a/EpinelPS/LobbyServer/Stage/GetStageClearInfo.cs b/EpinelPS/LobbyServer/Stage/GetStageClearInfo.cs index daed05d..7b53c82 100644 --- a/EpinelPS/LobbyServer/Stage/GetStageClearInfo.cs +++ b/EpinelPS/LobbyServer/Stage/GetStageClearInfo.cs @@ -7,9 +7,9 @@ namespace EpinelPS.LobbyServer.Stage { protected override async Task HandleAsync() { - var req = await ReadData(); - var response = new ResGetStageClearInfo(); - var user = GetUser(); + ReqGetStageClearInfo req = await ReadData(); + ResGetStageClearInfo response = new(); + Database.User user = GetUser(); response.Historys.AddRange(user.StageClearHistorys); diff --git a/EpinelPS/LobbyServer/Subquest/EnrollSubquest.cs b/EpinelPS/LobbyServer/Subquest/EnrollSubquest.cs index 904b7bf..267b320 100644 --- a/EpinelPS/LobbyServer/Subquest/EnrollSubquest.cs +++ b/EpinelPS/LobbyServer/Subquest/EnrollSubquest.cs @@ -9,10 +9,10 @@ namespace EpinelPS.LobbyServer.Subquest { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqEnrollmentSubQuest req = await ReadData(); + User user = GetUser(); - var response = new ResEnrollmentSubQuest(); + ResEnrollmentSubQuest response = new(); if (!GameData.Instance.Subquests.TryGetValue(req.SubquestId, out _)) throw new Exception("no such subquest: " + req.SubquestId); diff --git a/EpinelPS/LobbyServer/Subquest/ListSubquests.cs b/EpinelPS/LobbyServer/Subquest/ListSubquests.cs index b66a1de..514b1ed 100644 --- a/EpinelPS/LobbyServer/Subquest/ListSubquests.cs +++ b/EpinelPS/LobbyServer/Subquest/ListSubquests.cs @@ -7,12 +7,12 @@ namespace EpinelPS.LobbyServer.Subquest { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqGetSubQuestList req = await ReadData(); + Database.User user = GetUser(); - var response = new ResGetSubQuestList(); + ResGetSubQuestList response = new(); - foreach(var item in user.SubQuestData) + foreach(KeyValuePair item in user.SubQuestData) { response.SubquestList.Add(new NetSubQuestData(){ CreatedAt = DateTime.UtcNow.Ticks, // TODO does this matter diff --git a/EpinelPS/LobbyServer/Subquest/SetTrigger.cs b/EpinelPS/LobbyServer/Subquest/SetTrigger.cs index 9fe747e..bffcd9b 100644 --- a/EpinelPS/LobbyServer/Subquest/SetTrigger.cs +++ b/EpinelPS/LobbyServer/Subquest/SetTrigger.cs @@ -9,10 +9,10 @@ namespace EpinelPS.LobbyServer.Subquest { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqSetTriggerFromSubQuest req = await ReadData(); + User user = GetUser(); - var response = new ResSetTriggerFromSubQuest(); + ResSetTriggerFromSubQuest response = new(); if (!GameData.Instance.Subquests.TryGetValue(req.SubquestId, out SubquestRecord? record)) throw new Exception("no such subquest: " + req.SubquestId); diff --git a/EpinelPS/LobbyServer/Team/GetTeamData.cs b/EpinelPS/LobbyServer/Team/GetTeamData.cs index a172e0e..b38c99c 100644 --- a/EpinelPS/LobbyServer/Team/GetTeamData.cs +++ b/EpinelPS/LobbyServer/Team/GetTeamData.cs @@ -7,15 +7,15 @@ namespace EpinelPS.LobbyServer.Team { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqGetTeamData req = await ReadData(); + Database.User user = GetUser(); - var response = new ResGetTeamData(); + ResGetTeamData response = new(); // NOTE: Keep this in sync with EnterLobbyServer code if (user.Characters.Count > 0) { - foreach (var item in user.UserTeams) + foreach (KeyValuePair item in user.UserTeams) { response.TypeTeams.Add(item.Value); } diff --git a/EpinelPS/LobbyServer/Team/ListSupportCharacterCount.cs b/EpinelPS/LobbyServer/Team/ListSupportCharacterCount.cs index 5377b72..32e39e4 100644 --- a/EpinelPS/LobbyServer/Team/ListSupportCharacterCount.cs +++ b/EpinelPS/LobbyServer/Team/ListSupportCharacterCount.cs @@ -7,12 +7,12 @@ namespace EpinelPS.LobbyServer.Team { protected override async Task HandleAsync() { - var req = await ReadData(); + ReqListSupportCharacterUsedCount req = await ReadData(); - var response = new ResListSupportCharacterUsedCount(); + ResListSupportCharacterUsedCount response = new(); // TODO: Limit temportary participation - foreach (var item in req.TeamTypeList) + foreach (int item in req.TeamTypeList) { Console.WriteLine("support character used: " + item); } diff --git a/EpinelPS/LobbyServer/Team/SetTeam.cs b/EpinelPS/LobbyServer/Team/SetTeam.cs index d5d65ef..26fcd69 100644 --- a/EpinelPS/LobbyServer/Team/SetTeam.cs +++ b/EpinelPS/LobbyServer/Team/SetTeam.cs @@ -8,26 +8,25 @@ namespace EpinelPS.LobbyServer.Team { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqSetTeam req = await ReadData(); + User user = GetUser(); // TODO is this right - var response = new ResSetTeam(); - response.Type = req.Type; + ResSetTeam response = new() + { + Type = req.Type + }; response.Teams.AddRange(req.Teams.ToArray()); // Add team data to user data - var teamData = new NetUserTeamData() { LastContentsTeamNumber = req.ContentsId + 1, Type = req.Type }; + NetUserTeamData teamData = new() { LastContentsTeamNumber = req.ContentsId + 1, Type = req.Type }; teamData.Teams.AddRange(req.Teams); - if (user.UserTeams.ContainsKey(req.Type)) + if (!user.UserTeams.TryAdd(req.Type, teamData)) { user.UserTeams[req.Type] = teamData; } - else - { - user.UserTeams.Add(req.Type, teamData); - } + JsonDb.Save(); await WriteDataAsync(response); diff --git a/EpinelPS/LobbyServer/Tower/ClearTower.cs b/EpinelPS/LobbyServer/Tower/ClearTower.cs index 5917e5e..1fb99a6 100644 --- a/EpinelPS/LobbyServer/Tower/ClearTower.cs +++ b/EpinelPS/LobbyServer/Tower/ClearTower.cs @@ -9,10 +9,10 @@ namespace EpinelPS.LobbyServer.Tower { protected override async Task HandleAsync() { - var req = await ReadData(); + ReqClearTower req = await ReadData(); - var response = new ResClearTower(); - var user = GetUser(); + ResClearTower response = new(); + User user = GetUser(); if (req.BattleResult == 1) { @@ -24,7 +24,7 @@ namespace EpinelPS.LobbyServer.Tower public static ResClearTower CompleteTower(User user, int TowerId) { - var response = new ResClearTower(); + ResClearTower response = new(); if (!GameData.Instance.towerTable.TryGetValue(TowerId, out TowerRecord? record)) throw new Exception("unable to find tower with id " + TowerId); @@ -63,7 +63,7 @@ namespace EpinelPS.LobbyServer.Tower user.AddTrigger(TriggerType.TowerBasicClear, TowerId); } - var reward = GameData.Instance.GetRewardTableEntry(record.reward_id) ?? throw new Exception("failed to get reward"); + RewardTableRecord reward = GameData.Instance.GetRewardTableEntry(record.reward_id) ?? throw new Exception("failed to get reward"); response.Reward = RewardUtils.RegisterRewardsForUser(user, reward); diff --git a/EpinelPS/LobbyServer/Tower/EnterTower.cs b/EpinelPS/LobbyServer/Tower/EnterTower.cs index ed1b8dd..940bb14 100644 --- a/EpinelPS/LobbyServer/Tower/EnterTower.cs +++ b/EpinelPS/LobbyServer/Tower/EnterTower.cs @@ -9,10 +9,10 @@ namespace EpinelPS.LobbyServer.Tower { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqEnterTower req = await ReadData(); + User user = GetUser(); - var response = new ResEnterTower(); + ResEnterTower response = new(); user.AddTrigger(TriggerType.TowerAllStart, 1); diff --git a/EpinelPS/LobbyServer/Tower/FastClearTower.cs b/EpinelPS/LobbyServer/Tower/FastClearTower.cs index a5bf332..b8fd273 100644 --- a/EpinelPS/LobbyServer/Tower/FastClearTower.cs +++ b/EpinelPS/LobbyServer/Tower/FastClearTower.cs @@ -7,9 +7,9 @@ namespace EpinelPS.LobbyServer.Tower { protected override async Task HandleAsync() { - var req = await ReadData(); + ReqFastClearTower req = await ReadData(); - var response = new ResFastClearTower(); + ResFastClearTower response = new(); await WriteDataAsync(response); } diff --git a/EpinelPS/LobbyServer/Tower/GetTowerData.cs b/EpinelPS/LobbyServer/Tower/GetTowerData.cs index 3afa515..326dcb1 100644 --- a/EpinelPS/LobbyServer/Tower/GetTowerData.cs +++ b/EpinelPS/LobbyServer/Tower/GetTowerData.cs @@ -7,18 +7,18 @@ namespace EpinelPS.LobbyServer.Tower { protected override async Task HandleAsync() { - var req = await ReadData(); + ReqGetTowerData req = await ReadData(); - var response = new ResGetTowerData(); + ResGetTowerData response = new(); - var user = GetUser(); + Database.User user = GetUser(); // TODO: Load remain count for these - var t0 = new NetTowerData() { Type = 1, RemainCount = 3 }; - var t1 = new NetTowerData() { Type = 2, RemainCount = 3 }; - var t2 = new NetTowerData() { Type = 3, RemainCount = 3 }; - var t3 = new NetTowerData() { Type = 4, RemainCount = 3 }; - var t4 = new NetTowerData() { Type = 5 }; + NetTowerData t0 = new() { Type = 1, RemainCount = 3 }; + NetTowerData t1 = new() { Type = 2, RemainCount = 3 }; + NetTowerData t2 = new() { Type = 3, RemainCount = 3 }; + NetTowerData t3 = new() { Type = 4, RemainCount = 3 }; + NetTowerData t4 = new() { Type = 5 }; // setup schedules t0.Schedules.Add(new NetSchedule() { DayOfWeek = new() { DayOfWeeks = { 1, 4, 6 }, StartTime = 720000000000, Duration = 863990000000 } }); diff --git a/EpinelPS/LobbyServer/Trigger/FinishMainQuest.cs b/EpinelPS/LobbyServer/Trigger/FinishMainQuest.cs index 786a05a..b8b4a58 100644 --- a/EpinelPS/LobbyServer/Trigger/FinishMainQuest.cs +++ b/EpinelPS/LobbyServer/Trigger/FinishMainQuest.cs @@ -9,18 +9,18 @@ namespace EpinelPS.LobbyServer.Trigger { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqFinMainQuest req = await ReadData(); + User user = GetUser(); Console.WriteLine("Complete quest: " + req.Tid); user.SetQuest(req.Tid, false); - var completedQuest = GameData.Instance.GetMainQuestByTableId(req.Tid) ?? throw new Exception("Quest not found"); + MainQuestCompletionRecord completedQuest = GameData.Instance.GetMainQuestByTableId(req.Tid) ?? throw new Exception("Quest not found"); user.AddTrigger(TriggerType.CampaignClear, 1, completedQuest.condition_id); user.AddTrigger(TriggerType.MainQuestClear, 1, completedQuest.id); JsonDb.Save(); - var response = new ResFinMainQuest(); + ResFinMainQuest response = new(); await WriteDataAsync(response); } } diff --git a/EpinelPS/LobbyServer/Trigger/GetMainQuestData.cs b/EpinelPS/LobbyServer/Trigger/GetMainQuestData.cs index 0e9534b..186d638 100644 --- a/EpinelPS/LobbyServer/Trigger/GetMainQuestData.cs +++ b/EpinelPS/LobbyServer/Trigger/GetMainQuestData.cs @@ -7,11 +7,11 @@ namespace EpinelPS.LobbyServer.Trigger { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqGetMainQuestData req = await ReadData(); + Database.User user = GetUser(); - var response = new ResGetMainQuestData(); - foreach (var item in user.MainQuestData) + ResGetMainQuestData response = new(); + foreach (KeyValuePair item in user.MainQuestData) { response.MainQuestList.Add(new NetMainQuestData() { IsReceived = item.Value, Tid = item.Key }); } diff --git a/EpinelPS/LobbyServer/Trigger/ObtainMainQuestReward.cs b/EpinelPS/LobbyServer/Trigger/ObtainMainQuestReward.cs index 1ec6fda..56242c6 100644 --- a/EpinelPS/LobbyServer/Trigger/ObtainMainQuestReward.cs +++ b/EpinelPS/LobbyServer/Trigger/ObtainMainQuestReward.cs @@ -15,31 +15,28 @@ namespace EpinelPS.LobbyServer.Trigger { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqObtainMainQuestReward req = await ReadData(); + User user = GetUser(); ResObtainMainQuestReward response = new(); List rewards = []; - foreach (var item in user.MainQuestData) + foreach (KeyValuePair item in user.MainQuestData) { // give only rewards for things that were completed and not claimed already if (!item.Value && req.TidList.Contains(item.Key)) { user.MainQuestData[item.Key] = true; - var questInfo = GameData.Instance.GetMainQuestByTableId(item.Key); - if (questInfo == null) throw new Exception("failed to lookup quest id " + item.Key); - var reward = GameData.Instance.GetRewardTableEntry(questInfo.reward_id); - if (reward == null) throw new Exception("failed to lookup reward id " + questInfo.reward_id); - + MainQuestCompletionRecord? questInfo = GameData.Instance.GetMainQuestByTableId(item.Key) ?? throw new Exception("failed to lookup quest id " + item.Key); + RewardTableRecord? reward = GameData.Instance.GetRewardTableEntry(questInfo.reward_id) ?? throw new Exception("failed to lookup reward id " + questInfo.reward_id); rewards.Add(RewardUtils.RegisterRewardsForUser(user, reward)); } } response.Reward = NetUtils.MergeRewards(rewards, user); - foreach (var item in response.Reward.Item) + foreach (NetItemData? item in response.Reward.Item) { Console.WriteLine($"item: {item.Tid} {item.Isn} {item.Count}"); } diff --git a/EpinelPS/LobbyServer/Trigger/TriggerSync.cs b/EpinelPS/LobbyServer/Trigger/TriggerSync.cs index 7d3f5e9..2904c1f 100644 --- a/EpinelPS/LobbyServer/Trigger/TriggerSync.cs +++ b/EpinelPS/LobbyServer/Trigger/TriggerSync.cs @@ -8,8 +8,8 @@ namespace EpinelPS.LobbyServer.Trigger { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqSyncTrigger req = await ReadData(); + User user = GetUser(); // This request is responsible for fetching a log for // daily, weekly, challenge mission completion. @@ -21,15 +21,15 @@ namespace EpinelPS.LobbyServer.Trigger // TODO: Is it necessary to store the entire account history each time a stage // is cleared, why does the official server do this? - var response = new ResSyncTrigger(); + ResSyncTrigger response = new(); Console.WriteLine("needs " + req.Seq); // Look for triggers past that amount - var newTriggers = user.Triggers.Where(x => x.Id > req.Seq).ToArray(); + Database.Trigger[] newTriggers = [.. user.Triggers.Where(x => x.Id > req.Seq)]; // Return all triggers int triggerCount = 0; - foreach (var item in newTriggers) + foreach (Database.Trigger? item in newTriggers) { triggerCount++; diff --git a/EpinelPS/LobbyServer/Wallet/GetWallet.cs b/EpinelPS/LobbyServer/Wallet/GetWallet.cs index 925eca6..9ff2feb 100644 --- a/EpinelPS/LobbyServer/Wallet/GetWallet.cs +++ b/EpinelPS/LobbyServer/Wallet/GetWallet.cs @@ -1,4 +1,5 @@ -using EpinelPS.Utils; +using EpinelPS.Data; +using EpinelPS.Utils; namespace EpinelPS.LobbyServer.Wallet { @@ -7,12 +8,12 @@ namespace EpinelPS.LobbyServer.Wallet { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqGetCurrencyData req = await ReadData(); + Database.User user = GetUser(); - var response = new ResGetCurrencyData(); + ResGetCurrencyData response = new(); - foreach (var currency in user.Currency) + foreach (KeyValuePair currency in user.Currency) { response.Currency.Add(new NetUserCurrencyData() { Type = (int)currency.Key, Value = currency.Value }); } diff --git a/EpinelPS/LobbyServer/Wallet/WalletRefreshCharge.cs b/EpinelPS/LobbyServer/Wallet/WalletRefreshCharge.cs index 356d240..237167f 100644 --- a/EpinelPS/LobbyServer/Wallet/WalletRefreshCharge.cs +++ b/EpinelPS/LobbyServer/Wallet/WalletRefreshCharge.cs @@ -1,4 +1,5 @@ -using EpinelPS.Utils; +using EpinelPS.Data; +using EpinelPS.Utils; namespace EpinelPS.LobbyServer.Wallet { @@ -7,8 +8,8 @@ namespace EpinelPS.LobbyServer.Wallet { protected override async Task HandleAsync() { - var req = await ReadData(); - var user = GetUser(); + ReqRefreshChargeCurrencyData req = await ReadData(); + Database.User user = GetUser(); ResRefreshChargeCurrencyData response = new() { @@ -16,7 +17,7 @@ namespace EpinelPS.LobbyServer.Wallet ChargeCash = new() { Type = (int)CurrencyType.ChargeCash } }; - foreach (var item in user.Currency) + foreach (KeyValuePair item in user.Currency) { if (item.Key == CurrencyType.FreeCash) { diff --git a/EpinelPS/Models/Admin/ModUserModel.cs b/EpinelPS/Models/Admin/ModUserModel.cs index 7b2acf6..ad684ad 100644 --- a/EpinelPS/Models/Admin/ModUserModel.cs +++ b/EpinelPS/Models/Admin/ModUserModel.cs @@ -8,8 +8,8 @@ public class ModUserModel { public string Username { get; set; } = ""; public string Nickname { get; set; } = ""; - public bool IsAdmin { get; set; } = false; - public bool sickpulls { get; set; } = false; - public bool IsBanned { get; set; } = false; + public bool IsAdmin { get; set; } + public bool sickpulls { get; set; } + public bool IsBanned { get; set; } public ulong ID { get; set; } } \ No newline at end of file diff --git a/EpinelPS/Program.cs b/EpinelPS/Program.cs index 0f833a9..4260b9e 100644 --- a/EpinelPS/Program.cs +++ b/EpinelPS/Program.cs @@ -34,10 +34,10 @@ namespace EpinelPS Logging.WriteLine("Starting ASP.NET core on port 443"); new Thread(() => { - var builder = WebApplication.CreateBuilder(args); + WebApplicationBuilder builder = WebApplication.CreateBuilder(args); // Configure HTTPS - var httpsConnectionAdapterOptions = new HttpsConnectionAdapterOptions + HttpsConnectionAdapterOptions httpsConnectionAdapterOptions = new() { SslProtocols = System.Security.Authentication.SslProtocols.Tls12, ClientCertificateMode = ClientCertificateMode.AllowCertificate, @@ -75,7 +75,7 @@ namespace EpinelPS }); - var app = builder.Build(); + WebApplication app = builder.Build(); app.UseDefaultFiles(); app.UseStaticFiles(); @@ -190,7 +190,7 @@ namespace EpinelPS } } - private static async Task HandleRqd(HttpContext context) + private static void HandleRqd(HttpContext context) { } @@ -203,9 +203,9 @@ namespace EpinelPS { Console.Write(prompt); - var input = Console.ReadLine(); + string? input = Console.ReadLine(); if (input == null) break; - var args = input.Split(' '); + string[] args = input.Split(' '); if (string.IsNullOrEmpty(input) || string.IsNullOrWhiteSpace(input)) { @@ -236,7 +236,7 @@ namespace EpinelPS else if (input == "show users") { Console.WriteLine("Id,Username,Nickname"); - foreach (var item in JsonDb.Instance.Users) + foreach (User item in JsonDb.Instance.Users) { Console.WriteLine($"{item.ID},{item.Username},{item.Nickname}"); } @@ -248,7 +248,7 @@ namespace EpinelPS if (ulong.TryParse(args[1], out ulong id)) { // check if user id exists - var user = JsonDb.Instance.Users.FirstOrDefault(x => x.ID == id); + User? user = JsonDb.Instance.Users.FirstOrDefault(x => x.ID == id); if (user != null) { selectedUser = user.ID; @@ -280,7 +280,7 @@ namespace EpinelPS } else { - var user = JsonDb.Instance.Users.FirstOrDefault(x => x.ID == selectedUser); + User? user = JsonDb.Instance.Users.FirstOrDefault(x => x.ID == selectedUser); if (user == null) { Console.WriteLine("Selected user does not exist"); @@ -289,7 +289,7 @@ namespace EpinelPS } else { - var rsp = AdminCommands.AddAllCharacters(user); + Models.Admin.RunCmdResponse rsp = AdminCommands.AddAllCharacters(user); if (!rsp.ok) Console.WriteLine(rsp.error); } } @@ -302,7 +302,7 @@ namespace EpinelPS } else { - var user = JsonDb.Instance.Users.FirstOrDefault(x => x.ID == selectedUser); + User? user = JsonDb.Instance.Users.FirstOrDefault(x => x.ID == selectedUser); if (user == null) { Console.WriteLine("Selected user does not exist"); @@ -317,7 +317,7 @@ namespace EpinelPS amount = parsedAmount; } - var rsp = AdminCommands.AddAllMaterials(user, amount); + Models.Admin.RunCmdResponse rsp = AdminCommands.AddAllMaterials(user, amount); if (!rsp.ok) Console.WriteLine(rsp.error); } } @@ -330,7 +330,7 @@ namespace EpinelPS } else { - var user = JsonDb.Instance.Users.FirstOrDefault(x => x.ID == selectedUser); + User? user = JsonDb.Instance.Users.FirstOrDefault(x => x.ID == selectedUser); if (user == null) { Console.WriteLine("Selected user does not exist"); @@ -339,7 +339,7 @@ namespace EpinelPS } else { - var rsp = AdminCommands.FinishAllTutorials(user); + Models.Admin.RunCmdResponse rsp = AdminCommands.FinishAllTutorials(user); if (!rsp.ok) Console.WriteLine(rsp.error); } } @@ -352,7 +352,7 @@ namespace EpinelPS } else { - var user = JsonDb.Instance.Users.FirstOrDefault(x => x.ID == selectedUser); + User? user = JsonDb.Instance.Users.FirstOrDefault(x => x.ID == selectedUser); if (user == null) { Console.WriteLine("Selected user does not exist"); @@ -361,7 +361,7 @@ namespace EpinelPS } else if (args.Length == 2 && int.TryParse(args[1], out int inputGrade) && inputGrade >= 0 && inputGrade <= 11) { - var rsp = AdminCommands.SetCoreLevel(user, inputGrade); + Models.Admin.RunCmdResponse rsp = AdminCommands.SetCoreLevel(user, inputGrade); if (!rsp.ok) Console.WriteLine(rsp.error); } else @@ -382,7 +382,7 @@ namespace EpinelPS } else { - var user = JsonDb.Instance.Users.FirstOrDefault(x => x.ID == selectedUser); + User? user = JsonDb.Instance.Users.FirstOrDefault(x => x.ID == selectedUser); if (user == null) { Console.WriteLine("Selected user does not exist"); @@ -417,7 +417,7 @@ namespace EpinelPS } else { - var user = JsonDb.Instance.Users.FirstOrDefault(x => x.ID == selectedUser); + User? user = JsonDb.Instance.Users.FirstOrDefault(x => x.ID == selectedUser); if (user == null) { Console.WriteLine("Selected user does not exist"); @@ -426,7 +426,7 @@ namespace EpinelPS } else if (args.Length == 2 && int.TryParse(args[1], out int level) && level >= 1 && level <= 999) { - var rsp = AdminCommands.SetCharacterLevel(user, level); + Models.Admin.RunCmdResponse rsp = AdminCommands.SetCharacterLevel(user, level); if (!rsp.ok) Console.WriteLine(rsp.error); } else @@ -446,7 +446,7 @@ namespace EpinelPS } else { - var user = JsonDb.Instance.Users.FirstOrDefault(x => x.ID == selectedUser); + User? user = JsonDb.Instance.Users.FirstOrDefault(x => x.ID == selectedUser); if (user == null) { Console.WriteLine("Selected user does not exist"); @@ -455,7 +455,7 @@ namespace EpinelPS } else if (args.Length == 2 && int.TryParse(args[1], out int skillLevel) && skillLevel >= 1 && skillLevel <= 10) { - var rsp = AdminCommands.SetSkillLevel(user, skillLevel); + Models.Admin.RunCmdResponse rsp = AdminCommands.SetSkillLevel(user, skillLevel); if (!rsp.ok) Console.WriteLine(rsp.error); } else @@ -473,7 +473,7 @@ namespace EpinelPS } else { - var user = JsonDb.Instance.Users.FirstOrDefault(x => x.ID == selectedUser); + User? user = JsonDb.Instance.Users.FirstOrDefault(x => x.ID == selectedUser); if (user == null) { Console.WriteLine("Selected user does not exist"); @@ -483,7 +483,7 @@ namespace EpinelPS else { Console.Write("Are you sure you want to delete user " + user.Username + "? (y/n) "); - var confirm = Console.ReadLine(); + string? confirm = Console.ReadLine(); if (confirm == "y") { JsonDb.Instance.Users.Remove(user); @@ -509,8 +509,8 @@ namespace EpinelPS { if (args.Length == 2) { - var input2 = args[1]; - var rsp = AdminCommands.CompleteStage(selectedUser, input2); + string input2 = args[1]; + Models.Admin.RunCmdResponse rsp = AdminCommands.CompleteStage(selectedUser, input2); if (!rsp.ok) Console.WriteLine(rsp.error); } else @@ -527,7 +527,7 @@ namespace EpinelPS } else { - var user = JsonDb.Instance.Users.FirstOrDefault(x => x.ID == selectedUser); + User? user = JsonDb.Instance.Users.FirstOrDefault(x => x.ID == selectedUser); if (user == null) { Console.WriteLine("Selected user does not exist"); @@ -540,7 +540,7 @@ namespace EpinelPS { if (int.TryParse(args[1], out int itemId) && int.TryParse(args[2], out int amount)) { - var rsp = AdminCommands.AddItem(user, itemId, amount); + Models.Admin.RunCmdResponse rsp = AdminCommands.AddItem(user, itemId, amount); if (!rsp.ok) Console.WriteLine(rsp.error); } else @@ -563,7 +563,7 @@ namespace EpinelPS } else { - var user = JsonDb.Instance.Users.FirstOrDefault(x => x.ID == selectedUser); + User? user = JsonDb.Instance.Users.FirstOrDefault(x => x.ID == selectedUser); if (user == null) { Console.WriteLine("Selected user does not exist"); @@ -576,7 +576,7 @@ namespace EpinelPS { if (int.TryParse(args[1], out int characterId)) { - var rsp = AdminCommands.AddCharacter(user, characterId); + Models.Admin.RunCmdResponse rsp = AdminCommands.AddCharacter(user, characterId); if (!rsp.ok) Console.WriteLine(rsp.error); } else @@ -610,7 +610,7 @@ namespace EpinelPS private static async Task HandleBatchRequests(HttpContext ctx) { - var theBytes = await PacketDecryption.DecryptOrReturnContentAsync(ctx); + PacketDecryptResponse theBytes = await PacketDecryption.DecryptOrReturnContentAsync(ctx); // this actually uses gzip compression, unlike other requests. @@ -620,7 +620,7 @@ namespace EpinelPS content.Headers.TryAddWithoutValidation("Content-Type", (string?)ctx.Request.Headers["Content-Type"]); // we have the form contents, - var multipart = await content.ReadAsMultipartAsync(); + MultipartMemoryStreamProvider multipart = await content.ReadAsMultipartAsync(); HttpClient cl = new(); @@ -628,17 +628,17 @@ namespace EpinelPS List response = [.. Encoding.UTF8.GetBytes("--f5d5cf4d-5627-422f-b3c6-532f1a0cbc0a\r\n")]; int i = 0; - foreach (var item in multipart.Contents) + foreach (HttpContent? item in multipart.Contents) { i++; response.AddRange(Encoding.UTF8.GetBytes("Content-Type: application/http\r\n")); response.AddRange(Encoding.UTF8.GetBytes($"Content-ID: {item.Headers.NonValidated["Content-ID"]}\r\n")); response.AddRange(Encoding.UTF8.GetBytes("\r\n")); - var bin = await item.ReadAsByteArrayAsync(); + byte[] bin = await item.ReadAsByteArrayAsync(); try { - var res = await SendReqLocalAndReadResponseAsync(bin); + byte[]? res = await SendReqLocalAndReadResponseAsync(bin); if (res != null) { @@ -685,7 +685,7 @@ namespace EpinelPS } - var responseBytes = response.ToArray(); + byte[] responseBytes = [.. response]; ctx.Response.ContentType = "multipart/mixed; boundary=\"f5d5cf4d-5627-422f-b3c6-532f1a0cbc0a\""; ctx.Response.Body.Write(responseBytes); } @@ -695,14 +695,14 @@ namespace EpinelPS } private static (string key, string value) GetHeader(string line) { - var pieces = line.Split([':'], 2); + string[] pieces = line.Split([':'], 2); return (pieces[0].Trim(), pieces[1].Trim()); } private static async Task SendReqLocalAndReadResponseAsync(byte[] bytes) { int line = 0; - var bodyStartStr = Encoding.UTF8.GetString(bytes); + string bodyStartStr = Encoding.UTF8.GetString(bytes); string method; string url = ""; @@ -712,11 +712,11 @@ namespace EpinelPS int currentByte = 0; - foreach (var item in bodyStartStr.Split("\r\n")) + foreach (string item in bodyStartStr.Split("\r\n")) { if (line == 0) { - var parts = item.Split(" "); + string[] parts = item.Split(" "); method = parts[0]; url = parts[1]; httpVer = parts[2]; @@ -728,7 +728,7 @@ namespace EpinelPS } else { - var (key, value) = GetHeader(item); + (string key, string value) = GetHeader(item); headers.Add(new NameValueHeaderValue(key, value)); if (key == "Authorization") @@ -747,7 +747,7 @@ namespace EpinelPS } else { - body = bytes.Skip(currentByte).ToArray(); + body = [.. bytes.Skip(currentByte)]; } if (!url.StartsWith("/v1/")) @@ -760,7 +760,7 @@ namespace EpinelPS // find appropriate handler Logging.WriteLine("BATCH " + url, LogType.Info); - foreach (var item in LobbyHandler.Handlers) + foreach (KeyValuePair item in LobbyHandler.Handlers) { if (item.Key == url) { diff --git a/EpinelPS/Utils/AdminCommands.cs b/EpinelPS/Utils/AdminCommands.cs index 786a9ad..78e42f1 100644 --- a/EpinelPS/Utils/AdminCommands.cs +++ b/EpinelPS/Utils/AdminCommands.cs @@ -12,7 +12,7 @@ namespace EpinelPS.Utils { public class AdminCommands { - private static HttpClient client; + private static readonly HttpClient client; private static string serverUrl = "global-lobby.nikke-kr.com"; private static string connectingServer = serverUrl; @@ -24,16 +24,16 @@ namespace EpinelPS.Utils // Use TLS 1.1 so that tencents cloudflare knockoff wont complain if (!OperatingSystem.IsLinux()) { - var handler = new SocketsHttpHandler + SocketsHttpHandler handler = new() { - ConnectCallback = async (context, cancellationToken) => + ConnectCallback = static async (context, cancellationToken) => { - var socket = new Socket(SocketType.Stream, ProtocolType.Tcp) { NoDelay = true }; + Socket socket = new(SocketType.Stream, ProtocolType.Tcp) { NoDelay = true }; try { await socket.ConnectAsync(context.DnsEndPoint, cancellationToken); - var sslStream = new SslStream(new NetworkStream(socket, ownsSocket: true)); + SslStream sslStream = new(new NetworkStream(socket, ownsSocket: true)); // When using HTTP/2, you must also keep in mind to set options like ApplicationProtocols await sslStream.AuthenticateAsClientAsync(new SslClientAuthenticationOptions @@ -63,13 +63,13 @@ namespace EpinelPS.Utils } public static RunCmdResponse CompleteStage(ulong userId, string input2) { - var user = JsonDb.Instance.Users.FirstOrDefault(x => x.ID == userId); + User? user = JsonDb.Instance.Users.FirstOrDefault(x => x.ID == userId); if (user == null) return new RunCmdResponse() { error = "invalid user ID" }; try { - var chapterParsed = int.TryParse(input2.Split('-')[0], out int chapterNumber); - var stageParsed = int.TryParse(input2.Split('-')[1], out int stageNumber); + bool chapterParsed = int.TryParse(input2.Split('-')[0], out int chapterNumber); + bool stageParsed = int.TryParse(input2.Split('-')[1], out int stageNumber); if (chapterParsed && stageParsed) { @@ -78,11 +78,11 @@ namespace EpinelPS.Utils // Complete main stages for (int i = 0; i <= chapterNumber; i++) { - var stages = GameData.Instance.GetStageIdsForChapter(i, true); + IEnumerable stages = GameData.Instance.GetStageIdsForChapter(i, true); int target = 1; - foreach (var item in stages) + foreach (int item in stages) { - var stageData = GameData.Instance.GetStageData(item) ?? throw new Exception("failed to find stage " + item); + CampaignStageRecord stageData = GameData.Instance.GetStageData(item) ?? throw new Exception("failed to find stage " + item); if (!user.IsStageCompleted(item) && stageData.chapter_mod == ChapterMod.Normal) { Console.WriteLine("Completing stage " + item); @@ -105,13 +105,11 @@ namespace EpinelPS.Utils { Console.WriteLine($"Processing chapter: {chapter}"); - var stages = GameData.Instance.GetScenarioStageIdsForChapter(chapter) - .Where(stageId => GameData.Instance.IsValidScenarioStage(stageId, chapterNumber, stageNumber)) - .ToList(); + List stages = [.. GameData.Instance.GetScenarioStageIdsForChapter(chapter).Where(stageId => GameData.Instance.IsValidScenarioStage(stageId, chapterNumber, stageNumber))]; Console.WriteLine($"Found {stages.Count} stages for chapter {chapter}"); - foreach (var stage in stages) + foreach (string? stage in stages) { if (!user.CompletedScenarios.Contains(stage)) { @@ -128,7 +126,7 @@ namespace EpinelPS.Utils // get last quest data to remove any gaps if (user.MainQuestData.Count >= 2) { - var last = user.MainQuestData.Last(); + KeyValuePair last = user.MainQuestData.Last(); Logging.WriteLine("last quest id: " + last.Key, LogType.Debug); for (int i = 0; i < last.Key; i++) { @@ -156,12 +154,11 @@ namespace EpinelPS.Utils public static RunCmdResponse AddAllCharacters(User user) { // Group characters by name_code and always add those with grade_core_id == 11, 103, and include grade_core_id == 201 - var allCharacters = GameData.Instance.CharacterTable.Values + List allCharacters = [.. GameData.Instance.CharacterTable.Values .GroupBy(c => c.name_code) // Group by name_code to treat same name_code as one character 3999 = marian - .SelectMany(g => g.Where(c => c.grade_core_id == 1 || c.grade_core_id == 101 || c.grade_core_id == 201 || c.name_code == 3999)) // Always add characters with grade_core_id == 11 and 103 - .ToList(); + .SelectMany(g => g.Where(c => c.grade_core_id == 1 || c.grade_core_id == 101 || c.grade_core_id == 201 || c.name_code == 3999))]; - foreach (var character in allCharacters) + foreach (CharacterRecord? character in allCharacters) { if (!user.HasCharacter(character.id)) { @@ -190,7 +187,7 @@ namespace EpinelPS.Utils public static RunCmdResponse AddAllMaterials(User user, int amount) { - foreach (var tableItem in GameData.Instance.itemMaterialTable.Values) + foreach (ItemMaterialRecord tableItem in GameData.Instance.itemMaterialTable.Values) { ItemData? item = user.Items.FirstOrDefault(i => i.ItemType == tableItem.id); @@ -218,7 +215,7 @@ namespace EpinelPS.Utils public static RunCmdResponse FinishAllTutorials(User user) { - foreach (var tutorial in GameData.Instance.TutorialTable.Values) + foreach (ClearedTutorialData tutorial in GameData.Instance.TutorialTable.Values) { if (!user.ClearedTutorialData.ContainsKey(tutorial.id)) { @@ -235,13 +232,13 @@ namespace EpinelPS.Utils { if (!(inputGrade >= 0 && inputGrade <= 11)) return new RunCmdResponse() { error = "core level out of range, must be between 0-12" }; - foreach (var character in user.Characters) + foreach (Character character in user.Characters) { // Get current character's Tid int tid = character.Tid; // Get the character data from the character table - if (!GameData.Instance.CharacterTable.TryGetValue(tid, out var charData)) + if (!GameData.Instance.CharacterTable.TryGetValue(tid, out CharacterRecord? charData)) { Console.WriteLine($"Character data not found for Tid {tid}"); continue; @@ -269,7 +266,7 @@ namespace EpinelPS.Utils int newGradeCoreId = Math.Min(inputGrade + 1, maxGradeCoreId); // +1 because inputGrade starts from 0 for SSRs // Find the character with the same name_code and new grade_core_id - var newCharData = GameData.Instance.CharacterTable.Values.FirstOrDefault(c => + CharacterRecord? newCharData = GameData.Instance.CharacterTable.Values.FirstOrDefault(c => c.name_code == nameCode && c.grade_core_id == newGradeCoreId); if (newCharData != null) @@ -290,7 +287,7 @@ namespace EpinelPS.Utils int newGradeCoreId = Math.Min(101 + inputGrade, maxGradeCoreId); // Starts at 101 // Find the character with the same name_code and new grade_core_id - var newCharData = GameData.Instance.CharacterTable.Values.FirstOrDefault(c => + CharacterRecord? newCharData = GameData.Instance.CharacterTable.Values.FirstOrDefault(c => c.name_code == nameCode && c.grade_core_id == newGradeCoreId); if (newCharData != null) @@ -313,7 +310,7 @@ namespace EpinelPS.Utils public static RunCmdResponse SetCharacterLevel(User user, int level) { if (level > 999 || level <= 0) return new RunCmdResponse() { error = "level must be between 1-999" }; - foreach (var character in user.Characters) + foreach (Character character in user.Characters) { character.Level = level; } @@ -325,7 +322,7 @@ namespace EpinelPS.Utils public static RunCmdResponse SetSkillLevel(User user, int skillLevel) { if (skillLevel > 10 || skillLevel < 0) return new RunCmdResponse() { error = "level must be between 1-10" }; - foreach (var character in user.Characters) + foreach (Character character in user.Characters) { character.UltimateLevel = skillLevel; character.Skill1Lvl = skillLevel; @@ -455,7 +452,7 @@ namespace EpinelPS.Utils if (input != null) { using MemoryStream ms = new(); - CodedOutputStream stream = new CodedOutputStream(ms); + CodedOutputStream stream = new(ms); input.WriteTo(stream); stream.Flush(); diff --git a/EpinelPS/Utils/AssetDownloadUtil.cs b/EpinelPS/Utils/AssetDownloadUtil.cs index 4997c4f..918ff60 100644 --- a/EpinelPS/Utils/AssetDownloadUtil.cs +++ b/EpinelPS/Utils/AssetDownloadUtil.cs @@ -7,12 +7,12 @@ namespace EpinelPS.Utils { public static readonly HttpClient AssetDownloader = new(new HttpClientHandler() { AutomaticDecompression = DecompressionMethods.All }); - private static string? CloudIp = null; + private static string? CloudIp; public static async Task DownloadOrGetFileAsync(string url, CancellationToken cancellationToken) { - var rawUrl = url.Replace("https://cloud.nikke-kr.com/", ""); + string rawUrl = url.Replace("https://cloud.nikke-kr.com/", ""); string targetFile = Program.GetCachePathForPath(rawUrl); - var targetDir = Path.GetDirectoryName(targetFile); + string? targetDir = Path.GetDirectoryName(targetFile); if (targetDir == null) { Console.WriteLine($"ERROR: Directory name cannot be null for request " + url + ", file path is " + targetFile); @@ -20,24 +20,20 @@ namespace EpinelPS.Utils } Directory.CreateDirectory(targetDir); - Console.WriteLine("Download " + targetFile); + Logging.WriteLine("Game is requesting " + targetFile); if (!File.Exists(targetFile)) { + CloudIp ??= await GetIpAsync("cloud.nikke-kr.com"); - if (CloudIp == null) - { - CloudIp = await GetIpAsync("cloud.nikke-kr.com"); - } - - var requestUri = new Uri("https://" + CloudIp + "/" + rawUrl); - using var request = new HttpRequestMessage(HttpMethod.Get, requestUri); + Uri requestUri = new("https://" + CloudIp + "/" + rawUrl); + using HttpRequestMessage request = new(HttpMethod.Get, requestUri); request.Headers.TryAddWithoutValidation("host", "cloud.nikke-kr.com"); - using var response = await AssetDownloader.SendAsync(request, cancellationToken); + using HttpResponseMessage response = await AssetDownloader.SendAsync(request, cancellationToken); if (response.StatusCode == HttpStatusCode.OK) { if (!File.Exists(targetFile)) { - using var fss = new FileStream(targetFile, FileMode.CreateNew); + using FileStream fss = new(targetFile, FileMode.CreateNew); await response.Content.CopyToAsync(fss, cancellationToken); fss.Close(); @@ -53,7 +49,7 @@ namespace EpinelPS.Utils return targetFile; } - public static async Task HandleReq(HttpContext context) + public static async Task HandleReq(HttpContext context, string all) { string? targetFile = await DownloadOrGetFileAsync(context.Request.Path.Value ?? "", CancellationToken.None); @@ -71,11 +67,11 @@ namespace EpinelPS.Utils public static async Task GetIpAsync(string query) { - var lookup = new LookupClient(); - var result = await lookup.QueryAsync(query, QueryType.A); + LookupClient lookup = new(); + IDnsQueryResponse result = await lookup.QueryAsync(query, QueryType.A); - var record = result.Answers.ARecords().FirstOrDefault(); - var ip = record?.Address ?? throw new Exception($"Failed to find IP address of {query}, check your internet connection."); + DnsClient.Protocol.ARecord? record = result.Answers.ARecords().FirstOrDefault(); + IPAddress ip = record?.Address ?? throw new Exception($"Failed to find IP address of {query}, check your internet connection."); return ip.ToString(); } diff --git a/EpinelPS/Utils/FormulaUtils.cs b/EpinelPS/Utils/FormulaUtils.cs index f08480c..2f530d2 100644 --- a/EpinelPS/Utils/FormulaUtils.cs +++ b/EpinelPS/Utils/FormulaUtils.cs @@ -6,13 +6,13 @@ namespace EpinelPS.Utils { public static int CalculateCP(Database.User user, long csn) { - var character = user.Characters.FirstOrDefault(c => c.Csn == csn); + Database.Character? character = user.Characters.FirstOrDefault(c => c.Csn == csn); if (character == null) return 0; - var charRecord = GameData.Instance.CharacterTable.Values.FirstOrDefault(c => c.id == character.Tid); + CharacterRecord? charRecord = GameData.Instance.CharacterTable.Values.FirstOrDefault(c => c.id == character.Tid); if (charRecord == null) return 0; - var statRecord = GameData.Instance.characterStatTable.Values.FirstOrDefault(s => charRecord.stat_enhance_id == s.group + (character.Level - 1)); + CharacterStatRecord? statRecord = GameData.Instance.characterStatTable.Values.FirstOrDefault(s => charRecord.stat_enhance_id == s.group + (character.Level - 1)); if (statRecord == null) return 0; float coreMult = 1f + character.Grade * 0.02f; diff --git a/EpinelPS/Utils/InterceptionHelper.cs b/EpinelPS/Utils/InterceptionHelper.cs index 7c8cca5..3dad260 100644 --- a/EpinelPS/Utils/InterceptionHelper.cs +++ b/EpinelPS/Utils/InterceptionHelper.cs @@ -13,9 +13,9 @@ namespace EpinelPS.Utils Dictionary records = type == 0 ? GameData.Instance.InterceptNormal : GameData.Instance.InterceptSpecial; - var record = records[id]; + InterceptionRecord record = records[id]; - var normReward = GameData.Instance.GetConditionReward(record.condition_reward_group, damage); + int normReward = GameData.Instance.GetConditionReward(record.condition_reward_group, damage); if (normReward != 0) { response.NormalReward = RewardUtils.RegisterRewardsForUser(user, normReward); @@ -25,7 +25,7 @@ namespace EpinelPS.Utils Logging.WriteLine($"unable to find reward which meets condition of damage {damage} and group {record.condition_reward_group}"); } - var percentReward = GameData.Instance.GetConditionReward(record.percent_condition_reward_group, damage); + int percentReward = GameData.Instance.GetConditionReward(record.percent_condition_reward_group, damage); if (percentReward != 0) { response.BonusReward = RewardUtils.RegisterRewardsForUser(user, percentReward); diff --git a/EpinelPS/Utils/JsonPrototypes.cs b/EpinelPS/Utils/JsonPrototypes.cs index 872bbfc..1b1c66f 100644 --- a/EpinelPS/Utils/JsonPrototypes.cs +++ b/EpinelPS/Utils/JsonPrototypes.cs @@ -1,4 +1,4 @@ -namespace EpinelPS +namespace EpinelPS.Utils { public class ChannelInfo { diff --git a/EpinelPS/Utils/Logging.cs b/EpinelPS/Utils/Logging.cs index c93f21c..037980b 100644 --- a/EpinelPS/Utils/Logging.cs +++ b/EpinelPS/Utils/Logging.cs @@ -10,9 +10,13 @@ namespace EpinelPS.Utils { LogLevel = level; } + public static void Warn(string msg) + { + WriteLine(msg, LogType.Warning); + } public static void WriteLine(string msg, LogType level = LogType.Info) { - var originalFG = Console.ForegroundColor; + ConsoleColor originalFG = Console.ForegroundColor; Console.ForegroundColor = GetColorForLevel(level); // todo write to some file @@ -27,15 +31,15 @@ namespace EpinelPS.Utils private static ConsoleColor GetColorForLevel(LogType level) { - switch (level) + return level switch { - case LogType.Debug: return ConsoleColor.DarkGray; - case LogType.Info: return ConsoleColor.Gray; - case LogType.Warning: return ConsoleColor.Yellow; - case LogType.WarningAntiCheat: return ConsoleColor.DarkMagenta; - case LogType.Error: return ConsoleColor.Red; - default: return ConsoleColor.White; - } + LogType.Debug => ConsoleColor.DarkGray, + LogType.Info => ConsoleColor.Gray, + LogType.Warning => ConsoleColor.Yellow, + LogType.WarningAntiCheat => ConsoleColor.DarkMagenta, + LogType.Error => ConsoleColor.Red, + _ => ConsoleColor.White, + }; } } diff --git a/EpinelPS/Utils/NetUtils.cs b/EpinelPS/Utils/NetUtils.cs index 43c1143..0824ad5 100644 --- a/EpinelPS/Utils/NetUtils.cs +++ b/EpinelPS/Utils/NetUtils.cs @@ -15,11 +15,11 @@ namespace EpinelPS.Utils throw new Exception("missing auth token"); - foreach (var tok in JsonDb.Instance.LauncherAccessTokens) + foreach (AccessToken tok in JsonDb.Instance.LauncherAccessTokens) { if (tok.Token == tokToCheck) { - var user = JsonDb.Instance.Users.Find(x => x.ID == tok.UserID); + User? user = JsonDb.Instance.Users.Find(x => x.ID == tok.UserID); if (user != null) { return (user, tok); @@ -62,16 +62,16 @@ namespace EpinelPS.Utils public static List GetUserItems(User user) { - List ret = new(); - Dictionary itemDictionary = new Dictionary(); + List ret = []; + Dictionary itemDictionary = []; - foreach (var item in user.Items.ToList()) + foreach (ItemData? item in user.Items.ToList()) { if (item.Csn == 0) { - if (itemDictionary.ContainsKey(item.ItemType)) + if (itemDictionary.TryGetValue(item.ItemType, out NetUserItemData? value)) { - itemDictionary[item.ItemType].Count++; + value.Count++; } else { @@ -89,11 +89,11 @@ namespace EpinelPS.Utils public static int GetItemPos(User user, long isn) { - foreach (var item in user.Items) + foreach (ItemData item in user.Items) { if (item.Isn == isn) { - var subType = GameData.Instance.GetItemSubType(item.ItemType); + string? subType = GameData.Instance.GetItemSubType(item.ItemType); switch (subType) { case "Module_A": @@ -129,7 +129,7 @@ namespace EpinelPS.Utils foreach (NetRewardData reward in rewards) { - foreach (var c in reward.Currency) + foreach (NetCurrencyData? c in reward.Currency) { if (currencyDict.ContainsKey(c.Type)) currencyDict[c.Type] += c.Value; @@ -137,23 +137,23 @@ namespace EpinelPS.Utils currencyDict.Add(c.Type, c.Value); } - foreach (var item in reward.Item) + foreach (NetItemData? item in reward.Item) { items.Add(item); } - foreach (var item in reward.UserItems) + foreach (NetUserItemData? item in reward.UserItems) { // TODO: do these need to be combined? result.UserItems.Add(item); } - foreach (var item in reward.Point) + foreach (NetPointData? item in reward.Point) { result.Point.Add(item); } - foreach (var c in reward.Character) + foreach (NetCharacterData? c in reward.Character) { Logging.WriteLine("MergeRewards - TODO Character", LogType.Error); } @@ -162,13 +162,13 @@ namespace EpinelPS.Utils result.InfraCoreExp = reward.InfraCoreExp; } - foreach (var c in currencyDict) + foreach (KeyValuePair c in currencyDict) { result.Currency.Add(new NetCurrencyData() { Value = c.Value, Type = c.Key, FinalValue = user.Currency[(CurrencyType)c.Key] }); } // TODO is this right? - foreach (var c in items) + foreach (NetItemData c in items) { result.Item.Add(c); } @@ -191,7 +191,7 @@ namespace EpinelPS.Utils public static long GetOutpostRewardAmount(User user, CurrencyType type, double mins, bool includeBoost) { - var battleData = GameData.Instance.OutpostBattle[user.OutpostBattleLevel.Level]; + OutpostBattleTableRecord battleData = GameData.Instance.OutpostBattle[user.OutpostBattleLevel.Level]; int value = 0; double ratio = 0; @@ -226,7 +226,7 @@ namespace EpinelPS.Utils //duration = TimeSpan.FromHours(1); NetRewardData result = new(); - var battleData = GameData.Instance.OutpostBattle[user.OutpostBattleLevel.Level]; + OutpostBattleTableRecord battleData = GameData.Instance.OutpostBattle[user.OutpostBattleLevel.Level]; result.Currency.Add(new NetCurrencyData() { @@ -261,7 +261,7 @@ namespace EpinelPS.Utils public static void RegisterRewardsForUser(User user, NetRewardData rewardData) { - foreach (var item in rewardData.Currency) + foreach (NetCurrencyData? item in rewardData.Currency) { user.AddCurrency((CurrencyType)item.Type, item.Value); } @@ -271,53 +271,53 @@ namespace EpinelPS.Utils internal static List GetOutpostTimeReward(User user) { - List res = new List(); + List res = []; // NetTimeRewardBuff // FunctionType: 1: value increase, 2: percentage increase // Tid: Outpost building ID - var goldBuff = new NetTimeReward() + NetTimeReward goldBuff = new() { UseId = 1, ValuePerMinAfterBuff = GetOutpostRewardAmount(user, CurrencyType.Gold, 1, true) * 10000, ValuePerMinBeforeBuff = GetOutpostRewardAmount(user, CurrencyType.Gold, 1, false) * 10000 }; - foreach (var item in user.OutpostBuffs.CreditPercentages) + foreach (int item in user.OutpostBuffs.CreditPercentages) { goldBuff.Buffs.Add(new NetTimeRewardBuff() { Tid = 22401, FunctionType = 2, SourceType = OutpostBuffSourceType.TacticAcademy, Value = item }); } - var battleDataBuff = new NetTimeReward() + NetTimeReward battleDataBuff = new() { UseId = 2, ValuePerMinAfterBuff = GetOutpostRewardAmount(user, CurrencyType.CharacterExp, 1, true) * 10000, ValuePerMinBeforeBuff = GetOutpostRewardAmount(user, CurrencyType.CharacterExp, 1, false) * 10000 }; - foreach (var item in user.OutpostBuffs.BattleDataPercentages) + foreach (int item in user.OutpostBuffs.BattleDataPercentages) { battleDataBuff.Buffs.Add(new NetTimeRewardBuff() { Tid = 22401, FunctionType = 2, SourceType = OutpostBuffSourceType.TacticAcademy, Value = item }); } - var xpBuff = new NetTimeReward() + NetTimeReward xpBuff = new() { UseId = 3, ValuePerMinAfterBuff = GetOutpostRewardAmount(user, CurrencyType.UserExp, 1, true) * 10000, ValuePerMinBeforeBuff = GetOutpostRewardAmount(user, CurrencyType.UserExp, 1, false) * 10000 }; - foreach (var item in user.OutpostBuffs.UserExpPercentages) + foreach (int item in user.OutpostBuffs.UserExpPercentages) { xpBuff.Buffs.Add(new NetTimeRewardBuff() { Tid = 22401, FunctionType = 2, SourceType = OutpostBuffSourceType.TacticAcademy, Value = item }); } - var coredustBuff = new NetTimeReward() + NetTimeReward coredustBuff = new() { UseId = 4, ValuePerMinAfterBuff = GetOutpostRewardAmount(user, CurrencyType.CharacterExp2, 60, true) * 100, ValuePerMinBeforeBuff = GetOutpostRewardAmount(user, CurrencyType.CharacterExp2, 60, false) * 100 }; - foreach (var item in user.OutpostBuffs.CoreDustPercentages) + foreach (int item in user.OutpostBuffs.CoreDustPercentages) { coredustBuff.Buffs.Add(new NetTimeRewardBuff() { Tid = 22401, FunctionType = 2, SourceType = OutpostBuffSourceType.TacticAcademy, Value = item }); } @@ -334,9 +334,9 @@ namespace EpinelPS.Utils { if (csn == 0) return new() { Slot = slot }; - var result = new NetWholeTeamSlot(); + NetWholeTeamSlot result = new(); - var c = user.GetCharacterBySerialNumber(csn); + Character? c = user.GetCharacterBySerialNumber(csn); if (c == null) return new() { Slot = slot }; return new NetWholeTeamSlot() @@ -365,7 +365,7 @@ namespace EpinelPS.Utils int totalCP = 0; - foreach (var item in user.RepresentationTeamDataNew) + foreach (long item in user.RepresentationTeamDataNew) { totalCP += FormulaUtils.CalculateCP(user, item); } @@ -382,14 +382,14 @@ namespace EpinelPS.Utils if (cItem.use_type != "ItemRandomBox") throw new Exception("expected random box"); // find matching probability entries - var probabilityEntries = GameData.Instance.RandomItem.Values.Where(x => x.group_id == cItem.use_id).ToArray(); - if (!probabilityEntries.Any()) throw new Exception($"cannot find any probability entries with ID {cItem.use_id}, box ID: {cItem.id}"); + RandomItemRecord[] probabilityEntries = [.. GameData.Instance.RandomItem.Values.Where(x => x.group_id == cItem.use_id)]; + if (probabilityEntries.Length == 0) throw new Exception($"cannot find any probability entries with ID {cItem.use_id}, box ID: {cItem.id}"); // run probability as many times as needed NetRewardData ret = new() { PassPoint = new() }; for (int i = 0; i < count; i++) { - var winningRecord = Rng.PickWeightedItem(probabilityEntries); + RandomItemRecord winningRecord = Rng.PickWeightedItem(probabilityEntries); if (winningRecord.reward_value_min != winningRecord.reward_value_max) { diff --git a/EpinelPS/Utils/PacketDecryption.cs b/EpinelPS/Utils/PacketDecryption.cs index df05a27..e477f3a 100644 --- a/EpinelPS/Utils/PacketDecryption.cs +++ b/EpinelPS/Utils/PacketDecryption.cs @@ -10,13 +10,11 @@ namespace EpinelPS.Utils { public static async Task DecryptOrReturnContentAsync(HttpContext ctx) { - byte[] bin = []; - using MemoryStream buffer = new(); - var stream = ctx.Request.Body; + Stream stream = ctx.Request.Body; - var encoding = ctx.Request.Headers.ContentEncoding.FirstOrDefault(); + string? encoding = ctx.Request.Headers.ContentEncoding.FirstOrDefault(); Stream decryptedStream; switch (encoding) @@ -32,33 +30,33 @@ namespace EpinelPS.Utils decryptedStream = stream; break; case "gzip,enc": - var responseLen = CBorReadItem(stream); // length of header (not including encrypted data) + CBorItem responseLen = CBorReadItem(stream); // length of header (not including encrypted data) stream.ReadByte(); // ignore padding stream.ReadByte(); // ignore padding - var decryptionToken = CBorReadString(stream); - var nonce = CBorReadByteString(stream); + string decryptionToken = CBorReadString(stream); + byte[] nonce = CBorReadByteString(stream); MemoryStream encryptedBytes = new(); stream.CopyTo(encryptedBytes); - var bytes = encryptedBytes.ToArray(); + byte[] bytes = encryptedBytes.ToArray(); - var key = LobbyHandler.GetInfo(decryptionToken) ?? throw new BadHttpRequestException("Invalid decryption token"); - var additionalData = GenerateAdditionalData(decryptionToken, false); + GameClientInfo key = LobbyHandler.GetInfo(decryptionToken) ?? throw new BadHttpRequestException("Invalid decryption token"); + byte[] additionalData = GenerateAdditionalData(decryptionToken, false); - var x = SecretAeadXChaCha20Poly1305.Decrypt(bytes, nonce, key.Keys.ReadSharedSecret, [.. additionalData]); + byte[] x = SecretAeadXChaCha20Poly1305.Decrypt(bytes, nonce, key.Keys.ReadSharedSecret, [.. additionalData]); - var ms = new MemoryStream(x); + MemoryStream ms = new(x); - var unkVal1 = ms.ReadByte(); - var unkVal2 = ms.ReadByte(); - var sequenceNumber = ReadCborInteger(ms); + int unkVal1 = ms.ReadByte(); + int unkVal2 = ms.ReadByte(); + ulong sequenceNumber = ReadCborInteger(ms); - var startPos = (int)ms.Position; + int startPos = (int)ms.Position; - var contents = x.Skip(startPos).ToArray(); + byte[] contents = [.. x.Skip(startPos)]; if (contents.Length != 0 && contents[0] == 31) { //File.WriteAllBytes("contentsgzip", contents); @@ -145,15 +143,15 @@ namespace EpinelPS.Utils public static byte[] EncryptData(byte[] message, string authToken) { - var key = LobbyHandler.GetInfo(authToken) ?? throw new BadHttpRequestException("Invalid decryption token"); + GameClientInfo key = LobbyHandler.GetInfo(authToken) ?? throw new BadHttpRequestException("Invalid decryption token"); MemoryStream m = new(); m.WriteByte(89); // cbor ushort // 42bytes of data past header, 3 bytes for auth token bytestring, 2 bytes for nonce prefix, 24 bytes for nonce data - var headerLen = 2 + 3 + authToken.Length + 2 + 24; + int headerLen = 2 + 3 + authToken.Length + 2 + 24; byte[] headerLenBytes = BitConverter.GetBytes((ushort)headerLen); - if (BitConverter.IsLittleEndian) headerLenBytes = headerLenBytes.Reverse().ToArray(); + if (BitConverter.IsLittleEndian) headerLenBytes = [.. headerLenBytes.Reverse()]; m.Write(headerLenBytes, 0, headerLenBytes.Length); @@ -163,12 +161,12 @@ namespace EpinelPS.Utils // write auth token len m.WriteByte(89); // cbor ushort - var authLenBytes = BitConverter.GetBytes((ushort)authToken.Length); - if (BitConverter.IsLittleEndian) authLenBytes = authLenBytes.Reverse().ToArray(); + byte[] authLenBytes = BitConverter.GetBytes((ushort)authToken.Length); + if (BitConverter.IsLittleEndian) authLenBytes = [.. authLenBytes.Reverse()]; m.Write(authLenBytes, 0, authLenBytes.Length); // write actual auth token - var authBytes = Encoding.UTF8.GetBytes(authToken); + byte[] authBytes = Encoding.UTF8.GetBytes(authToken); m.Write(authBytes, 0, authBytes.Length); // write nonce @@ -183,7 +181,7 @@ namespace EpinelPS.Utils m.Write(nonce, 0, nonce.Length); // get additional data - var additionalData = GenerateAdditionalData(authToken, true); + byte[] additionalData = GenerateAdditionalData(authToken, true); // prep payload MemoryStream msm = new(); @@ -194,7 +192,7 @@ namespace EpinelPS.Utils msm.Write(message); - var encryptedBytes = SecretAeadXChaCha20Poly1305.Encrypt(msm.ToArray(), nonce, key.Keys.TransferSharedSecret, [.. additionalData]); + byte[] encryptedBytes = SecretAeadXChaCha20Poly1305.Encrypt(msm.ToArray(), nonce, key.Keys.TransferSharedSecret, [.. additionalData]); // write encrypted data m.Write(encryptedBytes); @@ -217,14 +215,14 @@ namespace EpinelPS.Utils // write auth token len if (!encrypting) { - var authLen = BitConverter.GetBytes((ushort)authToken.Length); + byte[] authLen = BitConverter.GetBytes((ushort)authToken.Length); if (BitConverter.IsLittleEndian) - authLen = authLen.Reverse().ToArray(); + authLen = [.. authLen.Reverse()]; additionalData.WriteByte(89); additionalData.Write(authLen, 0, authLen.Length); // write our authentication token - var authBytes = Encoding.UTF8.GetBytes(authToken); + byte[] authBytes = Encoding.UTF8.GetBytes(authToken); additionalData.Write(authBytes, 0, authBytes.Length); } @@ -240,10 +238,10 @@ namespace EpinelPS.Utils } string resp = ""; - var len = item.FullValue; + int len = item.FullValue; for (int i = 0; i < len; i++) { - var b = s.ReadByte(); + int b = s.ReadByte(); if (b == -1) throw new EndOfStreamException(); resp += (char)b; @@ -259,12 +257,12 @@ namespace EpinelPS.Utils throw new Exception("invalid string"); } - var len = item.FullValue; + int len = item.FullValue; byte[] resp = new byte[len]; for (int i = 0; i < len; i++) { - var b = s.ReadByte(); + int b = s.ReadByte(); if (b == -1) throw new EndOfStreamException(); resp[i] = (byte)b; @@ -274,8 +272,8 @@ namespace EpinelPS.Utils } private static CBorItem CBorReadItem(Stream s) { - var b = s.ReadByte(); - var type = b & 0x1f; + int b = s.ReadByte(); + int type = b & 0x1f; CBorItem res = new() { MajorType = (b >> 5) & 7 @@ -317,7 +315,7 @@ namespace EpinelPS.Utils { if (i > buf.Length) throw new ArgumentOutOfRangeException(nameof(buf)); - var read = s.Read(buf, i, buf.Length - i); + int read = s.Read(buf, i, buf.Length - i); if (read == 0) break; i += read; diff --git a/EpinelPS/Utils/PacketPathAttribute.cs b/EpinelPS/Utils/PacketPathAttribute.cs index 62c3c86..ca08727 100644 --- a/EpinelPS/Utils/PacketPathAttribute.cs +++ b/EpinelPS/Utils/PacketPathAttribute.cs @@ -4,12 +4,8 @@ /// Represents that this class handles a message /// [AttributeUsage(AttributeTargets.Class)] - public class PacketPathAttribute : Attribute + public class PacketPathAttribute(string url) : Attribute { - public string Url { get; set; } - public PacketPathAttribute(string url) - { - Url = url; - } + public string Url { get; set; } = url; } } diff --git a/EpinelPS/Utils/ProgressBar.cs b/EpinelPS/Utils/ProgressBar.cs index 46cde83..a945f8c 100644 --- a/EpinelPS/Utils/ProgressBar.cs +++ b/EpinelPS/Utils/ProgressBar.cs @@ -16,10 +16,10 @@ namespace EpinelPS.Utils private readonly Timer timer; - private double currentProgress = 0; + private double currentProgress; private string currentText = string.Empty; - private bool disposed = false; - private int animationIndex = 0; + private bool disposed; + private int animationIndex; public ProgressBar() { diff --git a/EpinelPS/Utils/RewardUtils.cs b/EpinelPS/Utils/RewardUtils.cs index 6e87fec..368e1a3 100644 --- a/EpinelPS/Utils/RewardUtils.cs +++ b/EpinelPS/Utils/RewardUtils.cs @@ -9,7 +9,7 @@ namespace EpinelPS.Utils { public static NetRewardData RegisterRewardsForUser(User user, int rewardId) { - var rewardData = GameData.Instance.GetRewardTableEntry(rewardId) ?? throw new Exception($"unknown reward id {rewardId}"); + RewardTableRecord rewardData = GameData.Instance.GetRewardTableEntry(rewardId) ?? throw new Exception($"unknown reward id {rewardId}"); return RegisterRewardsForUser(user, rewardData); } public static NetRewardData RegisterRewardsForUser(User user, RewardTableRecord rewardData) @@ -22,10 +22,10 @@ namespace EpinelPS.Utils if (rewardData.user_exp != 0) { - var newXp = rewardData.user_exp + user.userPointData.ExperiencePoint; + int newXp = rewardData.user_exp + user.userPointData.ExperiencePoint; - var newLevelExp = GameData.Instance.GetUserMinXpForLevel(user.userPointData.UserLevel); - var newLevel = user.userPointData.UserLevel; + int newLevelExp = GameData.Instance.GetUserMinXpForLevel(user.userPointData.UserLevel); + int newLevel = user.userPointData.UserLevel; if (newLevelExp == -1) { @@ -68,7 +68,7 @@ namespace EpinelPS.Utils user.userPointData.UserLevel = newLevel; } - foreach (var item in rewardData.rewards) + foreach (RewardEntry item in rewardData.rewards) { if (!string.IsNullOrEmpty(item.reward_type)) { @@ -155,7 +155,7 @@ namespace EpinelPS.Utils else { - var id = user.GenerateUniqueItemId(); + int id = user.GenerateUniqueItemId(); user.Items.Add(new ItemData() { ItemType = rewardId, Isn = id, Level = 1, Exp = 0, Count = rewardCount }); ret.Item.Add(new NetItemData() { @@ -210,7 +210,7 @@ namespace EpinelPS.Utils } else { - var itm = new NetItemData() + NetItemData itm = new() { Count = rewardCount, Tid = cItem.id, diff --git a/EpinelPS/Utils/Rng.cs b/EpinelPS/Utils/Rng.cs index a4c230b..e746917 100644 --- a/EpinelPS/Utils/Rng.cs +++ b/EpinelPS/Utils/Rng.cs @@ -4,13 +4,12 @@ namespace EpinelPS.Utils { public class Rng { - private static Random random = new Random(); + private static readonly Random random = new(); public static string RandomString(int length) { const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; - return new string(Enumerable.Repeat(chars, length) - .Select(s => s[random.Next(s.Length)]).ToArray()); + return new string([.. Enumerable.Repeat(chars, length).Select(s => s[random.Next(s.Length)])]); } public static int RandomId() @@ -26,7 +25,7 @@ namespace EpinelPS.Utils public static RandomItemRecord PickWeightedItem(RandomItemRecord[] records) { int totalWeight = 0; - foreach (var item in records) + foreach (RandomItemRecord item in records) totalWeight += item.ratio; int randomNumber = random.Next(0, totalWeight); diff --git a/EpinelPS/Views/Shared/_Layout.cshtml b/EpinelPS/Views/Shared/_Layout.cshtml index 9bac964..6a15405 100644 --- a/EpinelPS/Views/Shared/_Layout.cshtml +++ b/EpinelPS/Views/Shared/_Layout.cshtml @@ -36,32 +36,32 @@