public static void ChangeCurrency(string type, int valueChange) { if (_currentPlayer != null) { if (_currentPlayer.wallet != null) { bool isFound = false; foreach (PlayerCurrencyData currency in _currentPlayer.wallet) { if (currency.currencyType == type) { currency.value += valueChange; isFound = true; break; } } if (!isFound) { PlayerCurrencyData newCurrency = new PlayerCurrencyData(); newCurrency.id = _currentPlayer.wallet.Count + 1; newCurrency.currencyType = type; newCurrency.value = valueChange; _currentPlayer.wallet.Add(newCurrency); } SaveData(); } } }
public void ResetWallet() { // For currencies already in the player wallet reset the amount to the initialValue. foreach (PlayerCurrencyData playerCurrency in SpilUnityEditorImplementation.pData.Wallet.currencies) { int initialValue = SpilUnityEditorImplementation.gData.currencies.FirstOrDefault(a => a.id == playerCurrency.id).initialValue; int newDelta = initialValue - playerCurrency.currentBalance; playerCurrency.currentBalance = initialValue; playerCurrency.delta = newDelta + playerCurrency.delta; } // Check the currencies in the game data, if a currency is not currently in the wallet but has an initialvalue > 0 then add it. foreach (SpilCurrencyData gameDataCurrency in SpilUnityEditorImplementation.gData.currencies) { if (gameDataCurrency.initialValue > 0 && !SpilUnityEditorImplementation.pData.Wallet.currencies.Any(a => a.id == gameDataCurrency.id)) { PlayerCurrencyData playerCurrency = new PlayerCurrencyData(gameDataCurrency); playerCurrency.currentBalance = gameDataCurrency.initialValue; playerCurrency.delta = gameDataCurrency.initialValue; SpilUnityEditorImplementation.pData.Wallet.currencies.Add(playerCurrency); } } }
private void UpdateCurrency(PlayerCurrencyData currency) { foreach (PlayerCurrencyData playerCurrency in Wallet.currencies) { if (playerCurrency.id != currency.id) { continue; } playerCurrency.currentBalance = currency.currentBalance; playerCurrency.delta = currency.delta; } }
private void UpdateCurrency(PlayerCurrencyData currency) { for (int i = 0; i < Wallet.currencies.Count; i++) { if (Wallet.currencies [i].id == currency.id) { Wallet.currencies [i].currentBalance = currency.currentBalance; Wallet.currencies [i].delta = currency.delta; } } }
public void ProcessPlayerDataResponse(ResponseEvent response) { WalletData receivedWallet = null; InventoryData receivedInventory = null; if (response.data.HasField ("wallet")) { JSONObject walletJSON = response.data.GetField ("wallet"); receivedWallet = new WalletData (); if (walletJSON.HasField ("currencies")) { receivedWallet.currencies = new List<PlayerCurrencyData> (); JSONObject currenciesJSON = walletJSON.GetField ("currencies"); for (int i = 0; i < currenciesJSON.Count; i++) { PlayerCurrencyData currency = new PlayerCurrencyData (); currency.id = (int)currenciesJSON.list [i].GetField ("id").n; currency.currentBalance = (int)currenciesJSON.list [i].GetField ("currentBalance").n; currency.delta = (int)currenciesJSON.list [i].GetField ("delta").n; receivedWallet.currencies.Add (currency); } } receivedWallet.offset = (int)walletJSON.GetField ("offset").n; receivedWallet.logic = walletJSON.GetField ("logic").str; } if (response.data.HasField ("inventory")) { JSONObject inventoryJSON = response.data.GetField ("inventory"); receivedInventory = new InventoryData (); if (inventoryJSON.HasField ("items")) { receivedInventory.items = new List<PlayerItemData> (); JSONObject itemsJSON = inventoryJSON.GetField ("items"); for (int i = 0; i < itemsJSON.Count; i++) { PlayerItemData item = new PlayerItemData (); item.id = (int)itemsJSON.list [i].GetField ("id").n; item.amount = (int)itemsJSON.list [i].GetField ("amount").n; item.delta = (int)itemsJSON.list [i].GetField ("delta").n; receivedInventory.items.Add (item); } } receivedInventory.offset = (int)inventoryJSON.GetField ("offset").n; receivedInventory.logic = inventoryJSON.GetField ("logic").str; } CalculatePlayerDataResponse (receivedWallet, receivedInventory); }
public void BuyBundle(int bundleId, string reason, string reasonDetails, string location, string transactionId) { PlayerDataUpdatedData updatedData = new PlayerDataUpdatedData(); SpilBundleData bundle = GetBundleFromObjects(bundleId); if (bundle == null || reason == null) { SpilLogging.Error("Error adding bundle to player inventory!"); return; } Promotion promotion = Spil.Instance.GetPromotions().GetBundlePromotion(bundleId); bool isPromotionValid = false; if (promotion != null) { isPromotionValid = promotion.IsValid(); } List <SpilBundlePriceData> bundlePrices = new List <SpilBundlePriceData>(); if (isPromotionValid) { foreach (PriceOverride priceOverride in promotion.PriceOverride) { SpilBundlePriceData bundlePriceData = new SpilBundlePriceData(); bundlePriceData.currencyId = priceOverride.Id; bundlePriceData.value = priceOverride.Amount; bundlePrices.Add(bundlePriceData); } } else { bundlePrices = bundle.prices; } foreach (SpilBundlePriceData bundlePrice in bundlePrices) { PlayerCurrencyData currency = GetCurrencyFromWallet(bundlePrice.currencyId); if (currency == null) { SpilLogging.Error("Currency does not exist!"); return; } int currentBalance = currency.currentBalance; int updatedBalance = currentBalance - bundlePrice.value; if (updatedBalance < 0) { SpilLogging.Error("Not enough balance for currency!"); return; } int updatedDelta = -bundlePrice.value + currency.delta; if (updatedDelta == 0) { updatedDelta = -bundlePrice.value; } currency.delta = updatedDelta; currency.currentBalance = updatedBalance; UpdateCurrency(currency); updatedData.currencies.Add(currency); } foreach (SpilBundleItemData bundleItem in bundle.items) { SpilItemData gameItem = GetItemFromObjects(bundleItem.id); if (gameItem == null) { SpilLogging.Error("Item does not exist!"); return; } ; PlayerItemData item = new PlayerItemData(); item.id = gameItem.id; item.name = gameItem.name; item.type = gameItem.type; item.displayName = gameItem.displayName; item.displayDescription = gameItem.displayDescription; item.isGacha = gameItem.isGacha; item.content = gameItem.content; PlayerItemData inventoryItem = GetItemFromInventory(bundleItem.id); int inventoryItemAmount; if (inventoryItem != null) { inventoryItemAmount = inventoryItem.amount; inventoryItemAmount = inventoryItemAmount + bundleItem.amount; inventoryItem.delta = bundleItem.amount; inventoryItem.amount = inventoryItemAmount; UpdateItem(inventoryItem); updatedData.items.Add(inventoryItem); } else { inventoryItemAmount = bundleItem.amount; item.delta = inventoryItemAmount; item.amount = inventoryItemAmount; Inventory.items.Add(item); updatedData.items.Add(item); } } if (isPromotionValid) { foreach (ExtraEntity extraEntity in promotion.ExtraEntities) { if (extraEntity.Type.Equals("CURRENCY")) { PlayerCurrencyData currency = GetCurrencyFromWallet(extraEntity.Id); if (currency == null) { SpilLogging.Error("Currency does not exist!"); return; } currency.currentBalance = currency.currentBalance + extraEntity.Amount; currency.delta = currency.delta + extraEntity.Amount; UpdateCurrency(currency); PlayerCurrencyData temp = null; foreach (PlayerCurrencyData playerCurrency in updatedData.currencies) { if (playerCurrency.id == extraEntity.Id) { temp = playerCurrency; } } if (temp != null) { updatedData.currencies.Remove(temp); } updatedData.currencies.Add(currency); } else if (extraEntity.Type.Equals("ITEM") || extraEntity.Type.Equals("GACHA")) { SpilItemData gameItem = GetItemFromObjects(extraEntity.Id); if (gameItem == null) { SpilLogging.Error("Item does not exist!"); return; } ; PlayerItemData item = new PlayerItemData(); item.id = gameItem.id; item.name = gameItem.name; item.type = gameItem.type; item.displayName = gameItem.displayName; item.displayDescription = gameItem.displayDescription; item.isGacha = gameItem.isGacha; item.content = gameItem.content; PlayerItemData inventoryItem = GetItemFromInventory(extraEntity.Id); int inventoryItemAmount; if (inventoryItem != null) { inventoryItemAmount = inventoryItem.amount; inventoryItemAmount = inventoryItemAmount + extraEntity.Amount; inventoryItem.delta = extraEntity.Amount; inventoryItem.amount = inventoryItemAmount; UpdateItem(inventoryItem); PlayerItemData temp = null; foreach (PlayerItemData playerItem in updatedData.items) { if (playerItem.id == extraEntity.Id) { temp = playerItem; } } if (temp != null) { updatedData.items.Remove(temp); } updatedData.items.Add(inventoryItem); } else { inventoryItemAmount = extraEntity.Amount; item.delta = inventoryItemAmount; item.amount = inventoryItemAmount; Inventory.items.Add(item); updatedData.items.Add(item); } } } } UserDataManager.UpdateUserDataVersions(); UserDataManager.UpdateUserDataMeta(); updatedData.reason = reason; SpilUnityImplementationBase.firePlayerDataUpdated(JsonHelper.getJSONFromObject(updatedData)); if (isPromotionValid) { PromotionsManager.PromotionData.First(a => a.id == promotion.Id).amountPurchased++; PromotionsManager.SendBoughtPromotion(promotion.Id); } SendUpdatePlayerDataEvent(bundle, reason, reasonDetails, location, transactionId); }
public void WalletOperation(string action, int currencyId, int amount, string reason, string reasonDetails, string location, string transactionId) { if (currencyId <= 0 || reason == null) { SpilLogging.Error("Error updating wallet!"); return; } PlayerCurrencyData currency = null; foreach (PlayerCurrencyData playerCurrency in Wallet.currencies) { if (playerCurrency.id == currencyId) { currency = playerCurrency; } } if (currency == null) { SpilLogging.Error("Currency does not exist!"); return; } int currentBalance = currency.currentBalance; if (action.Equals("subtract")) { amount = -amount; } int updatedBalance = currentBalance + amount; if (updatedBalance < 0) { SpilLogging.Error("Not enough balance for currency!"); return; } int updatedDelta = amount + currency.delta; if (updatedDelta == 0) { updatedDelta = amount; } currency.delta = updatedDelta; currency.currentBalance = updatedBalance; if (Wallet.logic.Equals("CLIENT")) { UpdateCurrency(currency); UserDataManager.UpdateUserDataVersions(); UserDataManager.UpdateUserDataMeta(); PlayerDataUpdatedData updatedData = new PlayerDataUpdatedData(); updatedData.currencies.Add(currency); updatedData.reason = reason; SpilUnityImplementationBase.firePlayerDataUpdated(JsonHelper.getJSONFromObject(updatedData)); SendUpdatePlayerDataEvent(null, reason, reasonDetails, location, transactionId); } else if (Wallet.logic.Equals("SERVER")) { } }
public void CalculatePlayerDataResponse(WalletData receivedWallet, InventoryData receivedInventory, bool fromInit) { bool updated = false; PlayerDataUpdatedData updatedData = new PlayerDataUpdatedData(); if (receivedWallet != null) { foreach (PlayerCurrencyData playerCurrency in Wallet.currencies) { playerCurrency.delta = 0; } if (Wallet.offset < receivedWallet.offset && receivedWallet.currencies.Count > 0) { foreach (PlayerCurrencyData playerCurrency in receivedWallet.currencies) { if (receivedWallet.logic.Equals("CLIENT")) { PlayerCurrencyData currency = Wallet.currencies.FirstOrDefault(a => a.id == playerCurrency.id); if (currency == null) { continue; } if (Wallet.offset == 0 && receivedWallet.offset != 0) { currency.currentBalance = playerCurrency.currentBalance; } else { if (playerCurrency.delta != 0) { int updatedBalance = currency.currentBalance + playerCurrency.delta; if (updatedBalance < 0) { updatedBalance = 0; } currency.currentBalance = updatedBalance; } } updated = true; updatedData.currencies.Add(currency); } else if (receivedWallet.logic.Equals("SERVER")) { } } } Wallet.offset = receivedWallet.offset; Wallet.logic = receivedWallet.logic; } if (receivedInventory != null) { foreach (PlayerItemData playerItem in Inventory.items) { playerItem.delta = 0; } if (Inventory.offset < receivedInventory.offset && receivedInventory.items.Count > 0) { List <PlayerItemData> itemsToBeAdded = new List <PlayerItemData>(); foreach (PlayerItemData playerItem in receivedInventory.items) { if (receivedInventory.logic.Equals("CLIENT")) { PlayerItemData item = Inventory.items.FirstOrDefault(a => a.id == playerItem.id); if (item != null && playerItem.delta != 0) { item.amount = item.amount + playerItem.delta; } else { itemsToBeAdded.Add(playerItem); } updated = true; } else if (receivedInventory.logic.Equals("SERVER")) { } updatedData.items.Add(playerItem); } foreach (PlayerItemData itemToAdd in itemsToBeAdded) { SpilItemData item = GetItemFromObjects(itemToAdd.id); if (item != null && itemToAdd.amount > 0) { PlayerItemData playerItem = new PlayerItemData(); playerItem.id = item.id; playerItem.name = item.name; playerItem.type = item.type; playerItem.amount = itemToAdd.amount; playerItem.value = itemToAdd.value; playerItem.delta = 0; playerItem.displayName = item.displayName; playerItem.displayDescription = item.displayDescription; playerItem.isGacha = item.isGacha; playerItem.content = item.content; Inventory.items.Add(playerItem); updated = true; } } } Inventory.offset = receivedInventory.offset; Inventory.logic = receivedInventory.logic; } if (updated) { UserDataManager.UpdateUserDataVersions(); updatedData.reason = PlayerDataUpdateReasons.ServerUpdate; SpilUnityImplementationBase.firePlayerDataUpdated(JsonHelper.getJSONFromObject(updatedData)); } if (!fromInit) { SpilUnityImplementationBase.fireUserDataAvailable(); } }
public static void ProcessPlayerDataResponse(ResponseEvent response) { WalletData receivedWallet = null; InventoryData receivedInventory = null; if (response.data.HasField("wallet")) { JSONObject walletJSON = response.data.GetField("wallet"); receivedWallet = new WalletData(); if (walletJSON.HasField("currencies")) { receivedWallet.currencies = new List <PlayerCurrencyData>(); JSONObject currenciesJSON = walletJSON.GetField("currencies"); for (int i = 0; i < currenciesJSON.Count; i++) { PlayerCurrencyData currency = new PlayerCurrencyData(); currency.id = (int)currenciesJSON.list[i].GetField("id").n; currency.currentBalance = (int)currenciesJSON.list[i].GetField("currentBalance").n; currency.delta = (int)currenciesJSON.list[i].GetField("delta").n; receivedWallet.currencies.Add(currency); } } receivedWallet.offset = (long)walletJSON.GetField("offset").n; receivedWallet.logic = walletJSON.GetField("logic").str; } if (response.data.HasField("inventory")) { JSONObject inventoryJSON = response.data.GetField("inventory"); receivedInventory = new InventoryData(); if (inventoryJSON.HasField("items")) { receivedInventory.items = new List <PlayerItemData>(); JSONObject itemsJSON = inventoryJSON.GetField("items"); for (int i = 0; i < itemsJSON.Count; i++) { PlayerItemData item = new PlayerItemData(); item.id = (int)itemsJSON.list[i].GetField("id").n; item.amount = (int)itemsJSON.list[i].GetField("amount").n; item.delta = (int)itemsJSON.list[i].GetField("delta").n; receivedInventory.items.Add(item); } } receivedInventory.offset = (long)inventoryJSON.GetField("offset").n; receivedInventory.logic = inventoryJSON.GetField("logic").str; } if (response.action.ToLower().Trim().Equals("update")) { SpilUnityEditorImplementation.pData.CalculatePlayerDataResponse(receivedWallet, receivedInventory, false); } else if (response.action.ToLower().Trim().Equals("syncerror")) { UserDataManager.ProcessSyncError(); } else if (response.action.ToLower().Trim().Equals("dropped")) { UserDataManager.ProcessDroppedResponse("Event dropped!"); } else if (response.action.ToLower().Trim().Equals("lockerror")) { UserDataManager.ProcessLockError(); } }
public static void ProcessUserDataResponse(ResponseEvent responseEvent) { WalletData receivedWallet = null; InventoryData receivedInventory = null; string gameStateData = null; List <UserDataVersion> userDataVersions = null; UserDataMeta userDataMeta = null; bool externalChange = false; if (responseEvent.data.HasField("playerData")) { JSONObject playerDataJSON = responseEvent.data.GetField("playerData"); if (playerDataJSON.HasField("wallet")) { JSONObject walletJSON = playerDataJSON.GetField("wallet"); receivedWallet = new WalletData(); if (walletJSON.HasField("currencies")) { receivedWallet.currencies = new List <PlayerCurrencyData>(); JSONObject currenciesJSON = walletJSON.GetField("currencies"); for (int i = 0; i < currenciesJSON.Count; i++) { PlayerCurrencyData currency = new PlayerCurrencyData(); currency.id = (int)currenciesJSON.list[i].GetField("id").n; currency.currentBalance = (int)currenciesJSON.list[i].GetField("currentBalance").n; currency.delta = (int)currenciesJSON.list[i].GetField("delta").n; receivedWallet.currencies.Add(currency); } } receivedWallet.offset = (long)walletJSON.GetField("offset").n; receivedWallet.logic = walletJSON.GetField("logic").str; } if (playerDataJSON.HasField("inventory")) { JSONObject inventoryJSON = playerDataJSON.GetField("inventory"); receivedInventory = new InventoryData(); if (inventoryJSON.HasField("items")) { receivedInventory.items = new List <PlayerItemData>(); JSONObject itemsJSON = inventoryJSON.GetField("items"); for (int i = 0; i < itemsJSON.Count; i++) { PlayerItemData item = new PlayerItemData(); item.id = (int)itemsJSON.list[i].GetField("id").n; item.amount = (int)itemsJSON.list[i].GetField("amount").n; item.delta = (int)itemsJSON.list[i].GetField("delta").n; receivedInventory.items.Add(item); } } receivedInventory.offset = (long)inventoryJSON.GetField("offset").n; receivedInventory.logic = inventoryJSON.GetField("logic").str; } } if (responseEvent.data.HasField("gameState")) { gameStateData = responseEvent.data.GetField("gameState").Print(); } if (responseEvent.data.HasField("externalChange")) { externalChange = responseEvent.data.GetField("externalChange").b; } if (responseEvent.data.HasField("deviceVersions")) { JSONObject deviceVersionsJSON = responseEvent.data.GetField("deviceVersions"); userDataVersions = new List <UserDataVersion>(); if (deviceVersionsJSON.Count > 0) { for (int i = 0; i < deviceVersionsJSON.Count; i++) { UserDataVersion userDataVersion = new UserDataVersion(); userDataVersion.deviceId = deviceVersionsJSON.keys[i]; userDataVersion.version = (int)deviceVersionsJSON.list[i].i; userDataVersions.Add(userDataVersion); } } } if (responseEvent.data.HasField("metaData")) { JSONObject metaDataJSON = responseEvent.data.GetField("metaData"); userDataMeta = new UserDataMeta(); if (metaDataJSON.HasField("serverTime")) { userDataMeta.serverTime = metaDataJSON.GetField("serverTime").i; } if (metaDataJSON.HasField("clientTime")) { userDataMeta.clientTime = metaDataJSON.GetField("clientTime").i; } if (metaDataJSON.HasField("timezoneOffset")) { userDataMeta.timezoneOffset = (int)metaDataJSON.GetField("timezoneOffset").i; } if (metaDataJSON.HasField("deviceModel")) { userDataMeta.deviceModel = metaDataJSON.GetField("deviceModel").str; } if (metaDataJSON.HasField("appVersion")) { userDataMeta.appVersion = metaDataJSON.GetField("appVersion").str; } } if (responseEvent.action.ToLower().Trim().Equals("request")) { UserDataManager.ProcessRequestUserData(receivedWallet, receivedInventory, externalChange, gameStateData, userDataVersions, userDataMeta); } else if (responseEvent.action.ToLower().Trim().Equals("mergeconflict")) { UserDataManager.ProcessMergeConflict(receivedWallet, receivedInventory, gameStateData, userDataVersions, userDataMeta); } else if (responseEvent.action.ToLower().Trim().Equals("merge")) { UserDataManager.ProcessMergeUserData(userDataVersions); } else if (responseEvent.action.ToLower().Trim().Equals("lockerror")) { UserDataManager.ProcessLockError(); } else if (responseEvent.action.ToLower().Trim().Equals("syncerror")) { UserDataManager.ProcessSyncError(); } }