protected virtual void OnUserDataComplete(GetUserDataResult result) { Debug.Log("MetaLoopGameManager User Data downloaded..."); if (result != null && result.Data.ContainsKey(MetaStateSettings._MetaDataStateFileName) && !string.IsNullOrEmpty(result.Data[MetaStateSettings._MetaDataStateFileName].Value)) { //being able to retreive userData confirm that user can't be a new user. IsNewInstall = false; MetaDataStateBase onlineData = (MetaDataStateBase)JsonConvert.DeserializeObject(result.Data[MetaStateSettings._MetaDataStateFileName].Value, MetaStateSettings.PolymorhTypes[typeof(MetaDataStateBase)]); if (onlineData.Version > GameData.Current.MetaDataState.Version || forceCloudVersionFromAccountSync) { MetaDataStateBase.LoadData(onlineData); GameData.Current.OverwriteMetaDataState(onlineData); } else { MetaDataStateBase.LoadData(GameData.Current.MetaDataState); } } else { MetaDataStateBase.LoadData(GameData.Current.MetaDataState); } OnGameDataAndBackOfficeReady(); }
private static void HandleShopResult(CloudScriptResponse response, MetaDataStateBase metaDataState, ShopTransactionItem shopTransactionItem, Action <ShopRequestResult> callBack, bool isIAP = false) { ShopRequestResult result = null; if (response.ResponseCode == ResponseCode.Success && response.Params != null && response.Params.ContainsKey("ShopRequestResult")) { result = JsonConvert.DeserializeObject <ShopRequestResult>(response.Params["ShopRequestResult"].ToString()) as ShopRequestResult; if (result.Result == GenericRequestRewardResultType.Success) { shopTransactionItem.Result = GenericRequestRewardResultType.Success; if (result.GetCost() != null && result.GetCost().ConsumableCostItems.Count > 0) { metaDataState.Consumables.SpendConsumables(result.GetCost().ConsumableCostItems); } foreach (RewardDataItem entry in result.GetReward()) { metaDataState.Consumables.AddConsumable(entry.Consumable, entry.Amount, isIAP ? "InAppPurchase" : string.Empty); } } } shopTransactionItem.SetTransactionTime(); metaDataState.ShopState.AllTransactions.Add(shopTransactionItem); //result with error code. if (result == null) { result = new ShopRequestResult(); } callBack.Invoke(result); }
public DailyObjectiveStatus GetObjectiveStatus(MetaDataStateBase state) { var stateItem = GetObjectiveState(state); if (stateItem != null) { if (stateItem.Claimed) { return(DailyObjectiveStatus.Claimed); } if (LevelRequired > 0 && state.PlayerLevel.LevelId < LevelRequired) { return(DailyObjectiveStatus.Unavailabe); } if (stateItem.Count >= CountRequired) { return(DailyObjectiveStatus.CanBeClaimed); } return(DailyObjectiveStatus.Availabe); } return(DailyObjectiveStatus.Unavailabe); }
public int GetCurrentCount(MetaDataStateBase state) { var stateItem = GetAchievementStateItem(state); if (stateItem == null) { return(0); } return(stateItem.Count); }
public static void ValidateIAP(MetaDataStateBase metaDataState, string internalId, string receiptID, bool isOffer, Action <ShopRequestResult> callBack) { ShopTransactionItem shopTransactionItem = new ShopTransactionItem(ShopItemType.HardCurrency, internalId); string platformType = UnityEngine.Application.platform.ToString(); CloudScriptMethod cloudScriptMethod = new CloudScriptMethod("Shop/ValidateIAP", false); cloudScriptMethod.Params.Add("internalId", internalId); cloudScriptMethod.Params.Add("receiptID", receiptID); cloudScriptMethod.Params.Add("platformType", platformType); PlayFabManager.Instance.InvokeBackOffice(cloudScriptMethod, (CloudScriptResponse r, CloudScriptMethod m) => HandleShopResult(r, metaDataState, shopTransactionItem, callBack, true)); }
public bool EvaluateRequirement(MetaDataStateBase state, DateTime utcNow) { #if !BACKOFFICE if (Duration > 0 && utcNow < EndTime && CanBeListedInOffers) { return(true); } #endif if (LevelMin > 0 && LevelMax > 0) { if (state.PlayerLevel.LevelId < LevelMin || state.PlayerLevel.LevelId > LevelMax) { return(false); } } if (AgeMin > 0 && AgeMax > 0) { if (AgeMin < state.LoginCalendar.Count || state.LoginCalendar.Count > AgeMax) { return(false); } } if (LowSoftCurrencyThreshold > 0) { if (state.Consumables.GetConsumableAmount(Consumable.GetByName(MetaStateSettings._SoftCurrencyId)) > LowSoftCurrencyThreshold) { return(false); } } if (LowHardCurrencyThreshold > 0) { if (state.Consumables.GetConsumableAmount(Consumable.GetByName(MetaStateSettings._HardCurrencyId)) > LowHardCurrencyThreshold) { return(false); } } if (LowEnergyThreshold > 0) { if (state.Consumables.GetConsumableAmount(Consumable.GetByName(MetaStateSettings._EnergyId)) > LowEnergyThreshold) { return(false); } } return(true); }
public static ReceiptValidationResult ValidateAndroidReceipt(MetaDataStateBase playerState, string receipt) { if (string.IsNullOrEmpty(LicenseKeyAsXml)) { RSACryptoServiceProvider provider = PEMKeyLoader.CryptoServiceProviderFromPublicKeyInfo(MetaStateSettings._GoogleLicenseKey); LicenseKeyAsXml = provider.ToXmlString(false); } var purchaseReceipt = JsonConvert.DeserializeObject <Dictionary <string, object> >(receipt); var store = (string)purchaseReceipt["Store"]; var payload = (string)purchaseReceipt["Payload"]; var transactionId = (string)purchaseReceipt["TransactionID"]; var details = JsonConvert.DeserializeObject <Dictionary <string, object> >(payload); var json = (string)details["json"]; // This is the INAPP_PURCHASE_DATA information var sig = (string)details["signature"]; // This is the INAPP_DATA_SIGNATURE information var orderId = (string)JsonConvert.DeserializeObject <Dictionary <string, object> >(json)["orderId"]; if (playerState.ShopState.AllTransactions.Where(y => y.ValidationId == transactionId).Count() == 0) { bool result = false; try { // Create the provider and load the KEY RSACryptoServiceProvider provider = new RSACryptoServiceProvider(); provider.FromXmlString(LicenseKeyAsXml); // The signature is supposed to be encoded in base64 and the SHA1 checksum // Of the message is computed against the UTF-8 representation of the // message byte[] signature = Convert.FromBase64String(sig); SHA1Managed sha = new SHA1Managed(); byte[] data = Encoding.UTF8.GetBytes(json); result = provider.VerifyData(data, sha, signature); } catch (Exception /* e */) { /* TODO: add some kind of logging here */ } if (result && transactionId == orderId) { return(new ReceiptValidationResult() { Validated = true, UniqueId = transactionId }); } } return(new ReceiptValidationResult()); }
public int GetCompletion(MetaDataStateBase state) { float completion = (float)((float)GetCurrentCount(state)) / ((float)RequirementCount) * 100f; if (completion < 0) { completion = 0; } if (completion > 100) { completion = 100; } return((int)completion); }
protected virtual void OnUserDataComplete(GetUserDataResult result) { Debug.Log("MetaLoopGameManager User Data downloaded..."); if (result != null && result.Data.ContainsKey(MetaStateSettings._MetaDataStateFileName)) { var gameDataObject = JsonConvert.DeserializeObject(result.Data[MetaStateSettings._MetaDataStateFileName].Value, MetaStateSettings.PolymorhTypes[typeof(MetaDataStateBase)]); MetaDataStateBase.LoadData((MetaDataStateBase)gameDataObject); OnGameDataAndBackOfficeReady(); } else { ShowUnavailableMessage(GameUnavailableMessageType.BACKOFFICE_ERROR); } }
public static ReceiptValidationResult ValidateAppleReceipt(MetaDataStateBase playerState, string receipt, bool isProduction) { var purchaseReceipt = JsonConvert.DeserializeObject <Dictionary <string, object> >(receipt); var payload = (string)purchaseReceipt["Payload"]; var transactionId = (string)purchaseReceipt["TransactionID"]; ReceiptValidationResult receiptValidationResult = SendAppleReceiptValidationRequest(payload, isProduction); if (receiptValidationResult.Validated && !string.IsNullOrEmpty(receiptValidationResult.UniqueId)) { if (playerState.ShopState.AllTransactions.Where(y => y.ValidationId == transactionId).Count() == 0) { return(receiptValidationResult); } } return(new ReceiptValidationResult()); }
public override async Task <CloudScriptResponse> ExecuteAsync(CloudScriptRequest request, string[] urlArguments) { DateTime benginRequest = DateTime.UtcNow; string playFabId = urlArguments[0]; string placementId = urlArguments[1]; string eventId = urlArguments[2]; var cloudData = new PlayFabFileDetails(MetaSettings.MetaDataStateFileName); if (await PlayFabApiHandler.GetPlayerTitleData(playFabId, new List <PlayFabFileDetails>() { cloudData })) { MetaDataState state = MetaDataStateBase.FromJson <MetaDataState>(cloudData.DataAsString); AdPlacementType adPlacementType = (AdPlacementType)(Enum.Parse(typeof(AdPlacementType), placementId)); //state.AdState.RegisterAdWatch(adPlacementType, state, () => AdData.GetAdRewardForTypeMethod(adPlacementType, state)); cloudData.DataAsString = state.ToJson(); if (await PlayFabApiHandler.UploadPlayerTitleData(playFabId, new List <PlayFabFileDetails>() { cloudData })) { CloudScriptResponse cloudScriptResponse = new CloudScriptResponse() { ResponseCode = ResponseCode.Success, Method = this.GetType().Name }; cloudScriptResponse.Params.Add("status", eventId + ":OK"); return(cloudScriptResponse); } } return(new CloudScriptResponse() { ResponseCode = ResponseCode.Error }); }
public static ConsumableCost GetVariableCost(VariableCostDataType costType, MetaDataStateBase state) { VariableCostData costData; int purchaseCount = state.ShopState.GetVariableCostData(costType) + 1; costData = DataLayer.Instance.GetTable(MetaStateSettings.PolymorhTypes[typeof(VariableCostData)]).Cast <VariableCostData>().Where(y => y.PurchaseType == costType && y.PurchaseCount == purchaseCount).SingleOrDefault(); if (costData == null) { costData = DataLayer.Instance.GetTable(MetaStateSettings.PolymorhTypes[typeof(VariableCostData)]).Cast <VariableCostData>().Where(y => y.PurchaseType == costType).OrderBy(y => y.PurchaseCount).Last(); } ConsumableCost result = new ConsumableCost(true); if (costData.SecondaryConsumable == null) { result.ConsumableCostItems.Add(new ConsumableCostItem() { ConsumableId = costData.PrimaryConsumable.ConsumableId, Ammount = costData.PrimaryConsumable.Ammount }); } else { if (state.Consumables.CheckBalance(costData.PrimaryConsumable.Consumable, costData.PrimaryConsumable.Ammount) >= 0) { result.ConsumableCostItems.Add(new ConsumableCostItem() { ConsumableId = costData.PrimaryConsumable.ConsumableId, Ammount = costData.PrimaryConsumable.Ammount }); } else { result.ConsumableCostItems.Add(new ConsumableCostItem() { ConsumableId = costData.SecondaryConsumable.ConsumableId, Ammount = costData.SecondaryConsumable.Ammount }); } } return(result); }
public AchievementStatus GetAchievementStatus(MetaDataStateBase state) { var stateItem = GetAchievementStateItem(state); if (stateItem != null) { if (stateItem.Claimed) { return(AchievementStatus.Claimed); } if (stateItem.Count >= RequirementCount) { return(AchievementStatus.CanBeClaimed); } return(AchievementStatus.Availabe); } else { return(AchievementStatus.Availabe); } }
protected virtual void OnPlayFabLoginFailed(PlayFabError obj) { IsOfflineMode = true; MetaDataStateBase.LoadData(GameData.Current.MetaDataState); OnGameDataAndBackOfficeReady(); }
public ObjectiveStateItem GetObjectiveState(MetaDataStateBase state) { return(state.ObjectiveState.AllObjectiveStateItem.Where(y => y.Id == ObjectiveId).SingleOrDefault()); }
public AchievementDataStateEntry GetAchievementStateItem(MetaDataStateBase state) { return(state.AchievementDataState.Achievements.Where(y => y.AchievementType == AchievementType).SingleOrDefault()); }