using System; using System.Collections.Generic; using System.Linq; using Cysharp.Threading.Tasks; namespace BulletHellTemplate { public sealed class OfflineBackendService : IBackendService { /*──────────────────── AUTH ────────────────────*/ public UniTask AccountLogin(string email, string pass) => throw new NotImplementedException(); public UniTask AccountRegister(string email, string pass, string confirmPass) => throw new NotImplementedException(); public UniTask PlayAsGuest() => UniTask.FromResult(RequestResult.Ok()); public async UniTask TryAutoLoginAsync() { var playerName = PlayerSave.GetPlayerName(); if (string.IsNullOrWhiteSpace(playerName)) { string guestName = $"Guest-{UnityEngine.Random.Range(10000, 99999)}"; PlayerSave.SetPlayerName(guestName); var unlockedIcon = GameInstance.Singleton.iconItems.FirstOrDefault(icon => icon.isUnlocked); if (unlockedIcon != null) PlayerSave.SetPlayerIcon(unlockedIcon.iconId); var unlockedFrame = GameInstance.Singleton.frameItems.FirstOrDefault(frame => frame.isUnlocked); if (unlockedFrame != null) PlayerSave.SetPlayerFrame(unlockedFrame.frameId); foreach (var currency in GameInstance.Singleton.currencyData) { MonetizationManager.SetCurrency(currency.coinID, currency.initialAmount); } } await UniTask.Yield(); return true; } public UniTask Logout() => throw new NotImplementedException(); /*──────────────────── LOAD ────────────────────*/ public UniTask LoadAllAccountDataAsync() => UniTask.FromResult(RequestResult.Ok()); /*──────────────────── ACCOUNT ────────────────────*/ public async UniTask ChangePlayerNameAsync(string newName) => await UniTask.FromResult(OfflineProfileHandler.ChangePlayerName(newName)); public async UniTask ChangePlayerIconAsync(string iconId) => await UniTask.FromResult(OfflineProfileHandler.ChangePlayerIcon(iconId)); public async UniTask ChangePlayerFrameAsync(string frameId) => await UniTask.FromResult(OfflineProfileHandler.ChangePlayerFrame(frameId)); /*──────────────────── CURRENCY ───────────────────*/ public async UniTask InitCurrencyRechargeAsync() => await OfflineRechargeHandler.StartAsync(); /*──────────────────── CHAR / ITEM STATE ─────────*/ public async UniTask UpdateSelectedCharacterAsync(int cid) => await UniTask.FromResult(OfflineCharacterHandler.TrySelectCharacterAsync(cid)); public async UniTask UpdatePlayerCharacterFavouriteAsync(int cid) => await UniTask.FromResult(OfflineCharacterHandler.UpdatePlayerCharacterFavouriteAsync(cid)); public async UniTask UnlockCharacterSkin(int characterId, int skinId) => await UniTask.FromResult(OfflineCharacterHandler.TryUnlockCharacterSkin(characterId, skinId)); public async UniTask UpdateCharacterSkin(int characterId, int skinId) => await UniTask.FromResult(OfflineCharacterHandler.UpdateCharacterSkin(characterId, skinId)); public async UniTask UpdateCharacterLevelUP(int characterId) => await UniTask.FromResult(OfflineCharacterHandler.TryCharacterLevelUp(characterId)); public UniTask UpdateCharacterStatUpgradeAsync(StatUpgrade stat, CharacterStatsRuntime stats, int cid) => UniTask.FromResult(OfflineCharacterHandler.TryUpgradeStat(stat, stats, cid)); /*──────────────────── SECURE PURCHASES ──────────*/ public async UniTask PurchaseShopItemAsync(ShopItem shopItem) => await UniTask.FromResult(OfflinePurchasesHandler.PurchaseShopItem(shopItem)); public async UniTask ClaimBattlePassRewardAsync(BattlePassItem reward) => await UniTask.FromResult(OfflinePurchasesHandler.ClaimBattlePassReward(reward)); public async UniTask UnlockBattlePassPremiumAsync() => await UniTask.FromResult( OfflinePurchasesHandler.TryUnlockBattlePassPremium( )); /*──────────────────── MAP / SCORE ───────────────*/ public async UniTask CompleteGameSessionAsync(EndGameSessionData sessionData) => await UniTask.FromResult(OfflineProgressHandler.CompleteGameSession(sessionData)); /*──────────────────── QUESTS / COUPON ───────────*/ public async UniTask CompleteQuestAsync(int questId) => await UniTask.FromResult(OfflineProgressHandler.TryCompleteQuest(questId)); public async UniTask RefreshQuestLevelProgressAsync() { OfflineProgressHandler.RefreshLevelBasedProgress(); return await UniTask.FromResult(RequestResult.Ok()); } public async UniTask RedeemCouponAsync(string code) => await UniTask.FromResult(OfflineRewardsHandler.RedeemCoupon(code)); /*──────────────────── INVENTORY ───────────────────*/ public async UniTask UpgradeInventoryItemAsync(string uniqueItemGuid, InventoryItem inventorySO) => await UniTask.FromResult(OfflinePurchasesHandler.TryUpgradeItem(uniqueItemGuid,inventorySO)); public async UniTask SetCharacterItemAsync(int characterId, string slotName,string uniqueItemGuid) => await UniTask.FromResult(OfflineCharacterHandler.SetCharacterSlotItem(characterId, slotName, uniqueItemGuid)); public async UniTask DeletePurchasedInventoryItemAsync(string uniqueItemGuid) => await UniTask.FromResult(OfflineCharacterHandler.DeletePurchasedItem(uniqueItemGuid)); /*──────────────────── BATTLE-PASS ───────────────*/ public async UniTask GetSeasonEndUtcAsync() => await UniTask.FromResult(OfflineProgressHandler.GetSeasonEndUtc()); /*──────────────────── REWARDS ───────────────────*/ public async UniTask ClaimDailyRewardAsync(int day, BattlePassItem reward) { RequestResult result = OfflineRewardsHandler.ClaimDailyReward(day, reward); return await UniTask.FromResult(result); } public async UniTask ClaimNewPlayerRewardAsync(int day, BattlePassItem reward) { RequestResult result = OfflineRewardsHandler.ClaimNewPlayerReward(day, reward); return await UniTask.FromResult(result); } public async UniTask ApplyMapRewardsAsync(MapCompletionRewardData mapCompletionData) => await UniTask.FromResult(OfflineRewardsHandler.ApplyMapRewards(mapCompletionData)); /*──────────────────── LEADERBOARD ───────────────*/ public async UniTask GetCurrentSeasonAsync() => await UniTask.FromResult(1); public async UniTask>> GetTopPlayersAsync(int limit = 20) { var r = new Dictionary { ["PlayerName"] = PlayerSave.GetPlayerName(), ["PlayerIcon"] = PlayerSave.GetPlayerIcon(), ["PlayerFrame"] = PlayerSave.GetPlayerFrame(), ["PlayerCharacterFavourite"] = PlayerSave.GetFavouriteCharacter(), ["score"] = PlayerSave.GetScore() }; return await UniTask.FromResult(new List> { r }); } public async UniTask GetPlayerRankAsync() => await UniTask.FromResult(1); /*──────────────────── DEBUG ───────────────*/ public async UniTask TestAddAccountExpAsync(int exp) => await UniTask.FromResult(OfflineExpHandler.AddAccountExp(exp)); public async UniTask TestAddCharacterExpAsync(int cid, int exp) => await UniTask.FromResult(OfflineExpHandler.AddCharacterExp(cid, exp)); public async UniTask TestAddCharacterMasteryExpAsync(int cid, int exp) => await UniTask.FromResult(OfflineExpHandler.AddCharacterMasteryExp(cid, exp)); public async UniTask TestAddBattlePassXpAsync(int amount) => await UniTask.FromResult(OfflineExpHandler.AddBattlePassXp(amount)); } }