void AddTradeToGroup(string tradeId) { ExecuteCloudScriptRequest executeRequest = new ExecuteCloudScriptRequest { FunctionName = "AddNewTradeOffer", FunctionParameter = new { tradeID = tradeId } }; PlayFabClientAPI.ExecuteCloudScript(executeRequest, result => { Trade.instance.SetDisplayText("Trade Off Created."); Trade.instance.onRefreshUI?.Invoke(); }, error => Trade.instance.SetDisplayText(error.ErrorMessage) ); }
/// <summary> /// Starts the buy store item. /// </summary> /// <param name="item">Item.</param> /// <param name="storeID">Store I.</param> public static void StartBuyStoreItem(CatalogItem item, string storeID) { string characterId = null;//PF_PlayerData.activeCharacter == null ? null : PF_PlayerData.activeCharacter.characterDetails.CharacterId; var vcKVP = item.VirtualCurrencyPrices.First(); if (characterId != null) { DialogCanvasController.RequestLoadingPrompt(PlayFabAPIMethods.MakePurchase); ExecuteCloudScriptRequest request = new ExecuteCloudScriptRequest(); request.FunctionName = "PurchaseItem"; //request.FunctionParameter = new { ItemPrice = (int)vcKVP.Value, CurrencyCode = vcKVP.Key, CharacterId = PF_PlayerData.activeCharacter.characterDetails.CharacterId, ItemId = item.ItemId }; PlayFabClientAPI.ExecuteCloudScript(request, (ExecuteCloudScriptResult result) => { if (!PF_Bridge.VerifyErrorFreeCloudScriptResult(result)) { return; } if ((bool)result.FunctionResult == true) { PF_Bridge.RaiseCallbackSuccess(string.Empty, PlayFabAPIMethods.MakePurchase, MessageDisplayStyle.none); } else { PF_Bridge.RaiseCallbackError("Could not process request due to insufficient VC.", PlayFabAPIMethods.MakePurchase, MessageDisplayStyle.error); } }, PF_Bridge.PlayFabErrorCallback); } else if (characterId == null) { // normal purchase item flow PurchaseItemRequest request = new PurchaseItemRequest(); request.ItemId = item.ItemId; request.VirtualCurrency = vcKVP.Key; request.Price = (int)vcKVP.Value; request.StoreId = storeID; DialogCanvasController.RequestLoadingPrompt(PlayFabAPIMethods.MakePurchase); PlayFabClientAPI.PurchaseItem(request, OnBuyStoreItemSuccess, PF_Bridge.PlayFabErrorCallback); } else { Debug.LogWarning("Store purchase failed: " + characterId); } }
public async Task <bool> sendBid(int bidHeroID, int bidPrice) { var request = new ExecuteCloudScriptRequest() { RevisionSelection = CloudScriptRevisionOption.Live, FunctionName = "auction", FunctionParameter = new { hid = bidHeroID, kid = kongID, name = username, bid = bidPrice } }; var statusTask = await PlayFabClientAPI.ExecuteCloudScriptAsync(request); if (statusTask.Error != null) { logError(statusTask.Error.Error.ToString(), statusTask.Error.ErrorMessage); using (StreamWriter sw = new StreamWriter("ActionLog.txt", true)) { sw.WriteLine(DateTime.Now); sw.WriteLine("\tFAILED Bid on hero " + (Constants.heroNames.Length > bidHeroID + 2 ? Constants.heroNames[bidHeroID + 2] : ("Unknown, ID: " + bidHeroID)) + " for: " + bidPrice + "UM."); sw.WriteLine(statusTask.Error.ErrorMessage); } return(false); } if (statusTask == null || statusTask.Result.FunctionResult == null || !statusTask.Result.FunctionResult.ToString().Contains("true")) { logError("Cloud Script Error: bid", statusTask); using (StreamWriter sw = new StreamWriter("ActionLog.txt", true)) { sw.WriteLine(DateTime.Now); sw.WriteLine("\tFAILED Bid on hero " + (Constants.heroNames.Length > bidHeroID + 2 ? Constants.heroNames[bidHeroID + 2] : ("Unknown, ID: " + bidHeroID)) + " for: " + bidPrice + "UM."); sw.WriteLine(statusTask.Result.FunctionResult.ToString()); } return(true); } else { using (StreamWriter sw = new StreamWriter("ActionLog.txt", true)) { sw.WriteLine(DateTime.Now); sw.WriteLine("\tBid on hero " + (Constants.heroNames.Length > bidHeroID + 2 ? Constants.heroNames[bidHeroID + 2] : ("Unknown, ID: " + bidHeroID)) + " for: " + bidPrice + "UM."); } return(true); } }
public void UpdateTradeOffers() { DisableAllTradeOfferButtons(); ExecuteCloudScriptRequest getTradeOffersRequest = new ExecuteCloudScriptRequest { FunctionName = "GetTradeIDs" }; PlayFabClientAPI.ExecuteCloudScript(getTradeOffersRequest, result => { string rawData = result.FunctionResult.ToString(); tradeOfferInfo = JsonUtility.FromJson <TradeOfferInfo>(rawData); GetTradeInfo(); }, error => Trade.instance.SetDisplayText(error.ErrorMessage, true) ); }
public static void TransferItemToCharacter(string sourceId, string sourceType, string instanceId, string destId, Action callback = null) { ExecuteCloudScriptRequest request = new ExecuteCloudScriptRequest(); request.FunctionName = "TransferItemToCharacter"; request.FunctionParameter = new { sourceId = sourceId, sourceType = sourceType, destId = destId, instanceId = instanceId }; PlayFabClientAPI.ExecuteCloudScript(request, (ExecuteCloudScriptResult result) => { if (!PF_Bridge.VerifyErrorFreeCloudScriptResult(result)) { return; } if (callback != null) { callback(); } }, PF_Bridge.PlayFabErrorCallback); }
public static void SubtractLifeFromPlayer() { DialogCanvasController.RequestLoadingPrompt(PlayFabAPIMethods.ExecuteCloudScript); var request = new ExecuteCloudScriptRequest { FunctionName = "SubtractLife", FunctionParameter = new { CharacterId = activeCharacter.characterDetails.CharacterId } }; PlayFabClientAPI.ExecuteCloudScript(request, result => { if (!PF_Bridge.VerifyErrorFreeCloudScriptResult(result)) { return; } PF_Bridge.RaiseCallbackSuccess("", PlayFabAPIMethods.ExecuteCloudScript, MessageDisplayStyle.none); }, PF_Bridge.PlayFabErrorCallback); }
public bool ExecuteCloudScript <TIn, TOut>(string functionName, TIn functionParameter, Dictionary <string, string> extraHeaders, out TOut result, out string errorReport) { // Perform the request var request = new ExecuteCloudScriptRequest { FunctionName = functionName, FunctionParameter = functionParameter, GeneratePlayStreamEvent = true }; var task = clientApi.ExecuteCloudScriptAsync(request, null, extraHeaders); task.Wait(); errorReport = PlayFabUtil.GetCloudScriptErrorReport(task.Result); if (task.Result.Error != null) { Console.WriteLine("Execute Cloudscript failure: " + functionName + ":\n" + JsonWrapper.SerializeObject(functionParameter)); Console.WriteLine(errorReport); result = default(TOut); return(false); } // Re-serialize as the target type var json = JsonWrapper.SerializeObject(task.Result.Result.FunctionResult); if (verbose) { Console.WriteLine("===== Verbose ExecuteCloudScript Json: ====="); Console.WriteLine(json); Console.WriteLine("===== End ====="); } try { result = JsonWrapper.DeserializeObject <TOut>(json); } catch (Exception) { Console.WriteLine("Could not serialize text: \"" + json + "\" as " + typeof(TOut).Name); result = default(TOut); return(false); } return(task.Result.Error == null && task.Result.Result.Error == null && (result != null || json == "null")); }
void RemoveTradeOwnerFromGroup(string offeringPlayerId) { ExecuteCloudScriptRequest executeRequest = new ExecuteCloudScriptRequest { FunctionName = "AcceptTrade", FunctionParameter = new { tradeOwnerId = offeringPlayerId } }; PlayFabClientAPI.ExecuteCloudScript(executeRequest, result => { if (Trade.instance.onRefreshUI != null) { Trade.instance.onRefreshUI.Invoke(); } }, error => Trade.instance.SetDisplayText(error.ErrorMessage, true) ); }
public virtual void Request() { if (CanRequest == false) { Debug.LogError("Can't Request New Player Reward At The Moment, Ignoring"); return; } var request = new ExecuteCloudScriptRequest() { FunctionName = "WelcomeNewPlayer", FunctionParameter = new ParametersData(), GeneratePlayStreamEvent = true, }; PlayFabClientAPI.ExecuteCloudScript(request, ResultCallback, ErrorCallback); }
void AddTradeToGroup(string tradeId) { ExecuteCloudScriptRequest executeRequest = new ExecuteCloudScriptRequest { FunctionName = "AddNewtradeOffer", FunctionParameter = new { tradeID = tradeId } }; PlayFabClientAPI.ExecuteCloudScript(executeRequest, result => { Debug.Log("Trade offer created."); if (Trade.instance.onRefreshUI != null) { Trade.instance.onRefreshUI.Invoke(); } }, error => Debug.Log(error.ErrorMessage) ); }
//“购买5次”按钮的响应事件,基本逻辑同上 public void ClickMultipleBuyGoldButton() { processPanel.SetActive(true); if (int.Parse(diamondCurrencyCount.text) < int.Parse(multiplePaymentDiamondCost.text)) { hintLabel.text = "钻石不足,无法购买"; backButton.SetActive(true); return; } backButton.SetActive(false); hintLabel.text = "处 理 中..."; ExecuteCloudScriptRequest request = new ExecuteCloudScriptRequest() { FunctionName = "ExchangeGold", FunctionParameter = new { DC = multiplePaymentDiamondCost.text, GC = multiplePaymentGoldGet.text }, GeneratePlayStreamEvent = true }; PlayFabClientAPI.ExecuteCloudScript(request, OnExecuteCloudScript, OnPlayFabError); }
public void UpdateTradeOffers() { DisableAllTradeOfferButtons(); ExecuteCloudScriptRequest getTradeOffersRequest = new ExecuteCloudScriptRequest { FunctionName = "GetTradeIDs" }; PlayFabClientAPI.ExecuteCloudScript(getTradeOffersRequest, result => { // Debug.Log("Resulted" + result); string rawData = result.FunctionResult.ToString(); //Not receiving correct data tradeOfferInfo = JsonUtility.FromJson <TradeOfferInfo>(rawData); GetTradeInfo(); }, error => Debug.Log(error.ErrorMessage) ); }
public void SetLeaderboardEntry(int obstaclesHit) { Debug.Log("newscore is " + obstaclesHit); ExecuteCloudScriptRequest request = new ExecuteCloudScriptRequest { FunctionName = "UpdateObstaclesLeaderboard", FunctionParameter = new { score = obstaclesHit } }; PlayFabClientAPI.ExecuteCloudScript(request, result => { Debug.Log(result.Error); Debug.Log(result.FunctionName); Debug.Log(result.FunctionResult); Debug.Log(result.FunctionResultTooLarge); DisplayLeaderboard(); }, error => Debug.Log(error.ErrorMessage) ); }
void AddTradeToGroup(string tradeId) { Debug.Log(tradeId); ExecuteCloudScriptRequest executeRequest = new ExecuteCloudScriptRequest { FunctionName = "AddNewTradeOffer", FunctionParameter = new { tradeID = tradeId } }; PlayFabClientAPI.ExecuteCloudScript(executeRequest, result => { Trade.instance.SetDisplayText("Trade Offer Created", false); if (Trade.instance.onRefreshUI != null) { Trade.instance.onRefreshUI.Invoke(); } }, error => Trade.instance.SetDisplayText(error.ErrorMessage, true) ); }
private static void PostTestResultsToCloudScript(TestSuiteReport testReport) { #if !DISABLE_PLAYFABCLIENT_API var request = new ExecuteCloudScriptRequest { FunctionName = "SaveTestData", FunctionParameter = new Dictionary <string, object> { { "customId", PlayFabSettings.BuildIdentifier }, { "testReport", new[] { testReport } } }, GeneratePlayStreamEvent = true }; var saveTask = PlayFabClientAPI.ExecuteCloudScriptAsync(request); saveTask.ContinueWith(task => { if (_onComplete != null) { _onComplete(task.Result); } } ); #endif }
private void TimerProcessStacks_Elapsed() { if (isWorking) { //retry a bit faster if needed. timerProcessStackLastTime = DateTime.Now.AddMilliseconds(2500); return; } if (cloudScriptStackMethods == null) { cloudScriptStackMethods = new List <CloudScriptStackMethod>(); } float callDelay = 0f; //UnityEngine.Debug.Log("--------PLAYFAB STACK TIMER GOOD "); if (cloudScriptStackMethods.Count > 0) { List <string> allStacks = cloudScriptStackMethods.Select(y => y.StackId).Distinct().ToList(); foreach (string stackId in allStacks) { List <CloudScriptMethod> allMethods = cloudScriptStackMethods.Where(y => y.StackId == stackId).Select(y => y.CloudScriptMethod).ToList(); allMethods.ForEach(y => y.Environement = BackOfficeEnvironement.ToString()); ExecuteCloudScriptRequest request = new ExecuteCloudScriptRequest() { FunctionName = "invokeBioIncBackOffice", FunctionParameter = allMethods }; StartCoroutine(DelayedCall(callDelay, () => PlayFabClientAPI.ExecuteCloudScript(request, onStackCallback, (PlayFabError error) => stackResultCallBack(null)))); UnityEngine.Debug.Log("Stacked " + allMethods.Count + " methods for stack " + stackId); callDelay += 0.5f; } } cloudScriptStackMethods.Clear(); }
public static Promise StartCloudTimer() { int timeStamp = (int)(DateTime.Now.ToUniversalTime() - new DateTime(1970, 1, 1)).TotalSeconds; var promise = new Promise(); var request = new ExecuteCloudScriptRequest { FunctionName = "ReloadRupees", GeneratePlayStreamEvent = true }; PlayFabClientAPI.ExecuteCloudScript(request, (result) => { if (result.Error != null) { Debug.Log("result.Error" + result.Error.Message); } else { promise.Resolve(); result.Logs.ForEach(x => Debug.Log(x.Message)); SuccessCallback(result); } }, ErrorCallback); return(promise); }
private void DdnaPlayerConfig() { // Execute Cloud Script to get deltaDNA AB Test result // containing any parameter modifiers ExecuteCloudScriptRequest myRequest = new ExecuteCloudScriptRequest(); myRequest.FunctionName = "makeDdnaEngageRequest"; myRequest.FunctionParameter = new { decisionPoint = "playerConfig", platform = DDNA.Instance.Platform, engageURL = DDNA.Instance.EngageURL, environmentKey = DDNA.Instance.EnvironmentKey }; myRequest.GeneratePlayStreamEvent = true; PlayFabClientAPI.ExecuteCloudScript(myRequest, result => { Debug.Log("CloudScript result " + result.FunctionResult.ToString()); ReadyToLoad(); /*--------------------------------------------------------------------------------------------------------------------------------------- * // We have the results of the Engage AB Test on the client should we want to do anything with it, * // but we don't need to. The Statistics have been updated on the PlayFab server by the cloud script * * Dictionary<string, object> response = DeltaDNA.MiniJSON.Json.Deserialize(result.FunctionResult.ToString()) as Dictionary<string, object>; * if (response.ContainsKey("parameters")) * { * Dictionary<string, object> parameters = response["parameters"] as Dictionary<string, object>; * UpdatePlayerParameters(parameters); * } * //--------------------------------------------------------------------------------------------------------------------------------------*/ }, error => { Debug.Log("CloudScript error" + error.ErrorMessage); ReadyToLoad(); }); }
public void OnLoginSuccess(LoginResult result) { if (result.NewlyCreated) { Debug.Log("Create new"); ExecuteCloudScriptRequest request = new ExecuteCloudScriptRequest() { FunctionName = "makeFirstCall", GeneratePlayStreamEvent = true }; PlayFabClientAPI.ExecuteCloudScript(request, success => { }, error => { }); } else { //SetUserDataStatic(); Debug.Log("Logined"); } //GameController.RequestRefeshData(); canvas.LoadScreen(); GameGUI.instance.PushPanel(""); }
public static void UpdateUserStatistics(Dictionary <string, int> updates) { var statistics = new List <StatisticUpdate>(); foreach (var eachUpdate in updates) // Copy the stats from the inputs to the request { int eachStat; userStatistics.TryGetValue(eachUpdate.Key, out eachStat); statistics.Add(new StatisticUpdate { StatisticName = eachUpdate.Key, Value = eachUpdate.Value }); // Send the value to the server userStatistics[eachUpdate.Key] = eachStat + eachUpdate.Value; // Update the local cache so that future updates are using correct values } var request = new ExecuteCloudScriptRequest { FunctionName = "SetPlayerStats", FunctionParameter = new { statistics = statistics }, GeneratePlayStreamEvent = true }; PlayFabClientAPI.ExecuteCloudScript(request, OnUpdateUserStatisticsSuccess, PF_Bridge.PlayFabErrorCallback); }
public void GetHalloweenLevels() { getHalloween = new List <int[]>(); var request = new ExecuteCloudScriptRequest() { RevisionSelection = CloudScriptRevisionOption.Live, FunctionName = "status", FunctionParameter = new { token, kid = kongID } }; var statusTask = PlayFabClientAPI.ExecuteCloudScriptAsync(request); bool _running = true; while (_running) { if (statusTask.IsCompleted) { var apiError = statusTask.Result.Error; var apiResult = statusTask.Result.Result; if (apiError != null) { return; } else if (apiResult.FunctionResult != null) { JObject json = JObject.Parse(apiResult.FunctionResult.ToString()); string levels = json["data"]["city"]["halloween"]["hero"].ToString(); int[] heroLevels = getArray(levels); getHalloween.Add(heroLevels); return; } _running = false; } Thread.Sleep(1); } return; }
public void sendHalloweenSolution() { var request = new ExecuteCloudScriptRequest() { RevisionSelection = CloudScriptRevisionOption.Live, FunctionName = "fightH", FunctionParameter = new { kid = kongID, setup = lineup } }; var statusTask = PlayFabClientAPI.ExecuteCloudScriptAsync(request); Task.Run(() => sendLog("CQMC sendHalloweenSolution " + JsonConvert.SerializeObject(statusTask))); bool _running = true; while (_running) { if (statusTask.IsCompleted) { var apiError = statusTask.Result.Error; var apiResult = statusTask.Result.Result; if (apiError != null) { DQResult = false; return; } else if (apiResult.FunctionResult != null && apiResult.FunctionResult.ToString().Contains("true")) { DQResult = true; return; } _running = false; } Thread.Sleep(1); } DQResult = false; return; }
/// <summary> /// Not implemented yet. /// </summary> public static void LoginAccountOther(string otherUser, string key) { ExecuteCloudScriptRequest cloudRequest = new ExecuteCloudScriptRequest() { FunctionName = "getLink", FunctionParameter = new { playerId = otherUser, secretKey = key } }; PlayFabClientAPI.ExecuteCloudScript(cloudRequest, (cloudResult) => { JSONNode node = JSON.Parse(PlayFab.Json.JsonWrapper.SerializeObject(cloudResult.FunctionResult)); Debug.Log("Is Link valid?: " + node["validLink"].Value); bool validLink = false; bool.TryParse(node["validLink"].Value, out validLink); if (!validLink) { return; } linkSecretKey = key; LoginWithCustomIDRequest loginRequest = new LoginWithCustomIDRequest() { TitleId = PlayFabSettings.TitleId, CreateAccount = false, CustomId = otherUser + key, InfoRequestParameters = instance.accountParams }; PlayFabClientAPI.LoginWithCustomID(loginRequest, (loginResult) => { Debug.Log("Logged into other Player Account"); instance.loginResult = loginResult; LinkDevice(); }, OnLinkError); }, OnLinkError); }
public void CloudScript() { var request = new ExecuteCloudScriptRequest(); request.FunctionName = "helloWorld"; var cloudTask = PlayFabClientAPI.ExecuteCloudScriptAsync(request); WaitForResultSuccess(cloudTask, "Failed to Execute CloudScript"); // Get the helloWorld return message JObject jobj = cloudTask.Result.Result.FunctionResult as JObject; UUnitAssert.NotNull(jobj); JToken jtok; jobj.TryGetValue("messageValue", out jtok); UUnitAssert.NotNull(jtok); JValue jval = jtok as JValue; UUnitAssert.NotNull(jval); string actualMessage = jval.Value as string; UUnitAssert.StringEquals("Hello " + playFabId + "!", actualMessage); }
public void sendWB() { var request = new ExecuteCloudScriptRequest() { RevisionSelection = CloudScriptRevisionOption.Specific, SpecificRevision = 190, FunctionName = "fightWB", FunctionParameter = new { setup = lineup, kid = kongID } }; var statusTask = PlayFabClientAPI.ExecuteCloudScriptAsync(request); bool _running = true; while (_running) { if (statusTask.IsCompleted) { var apiError = statusTask.Result.Error; var apiResult = statusTask.Result.Result; if (apiError != null) { DQResult = false; return; } else if (apiResult != null && apiResult.FunctionResult.ToString().Contains("true")) { DQResult = true; return; } _running = false; } Thread.Sleep(1); } DQResult = false; return; }
public static IEnumerator <ExecuteCloudScriptResult> Do(ExecuteCloudScriptRequest request) { return(Do <ExecuteCloudScriptRequest, ExecuteCloudScriptResult>(request, PlayFabClientAPI.ExecuteCloudScript)); }
public UnityTask <ExecuteCloudScriptResult> Do(ExecuteCloudScriptRequest request) { return(this.Do <ExecuteCloudScriptRequest, ExecuteCloudScriptResult>(request, PlayFabClientAPI.ExecuteCloudScriptAsync)); }
//更新选中的天赋技能描述 void UpdateTalentSkill(Sprite skillSprite) { /* UpdateTalentSkill函数实现步骤:(天赋技能数据已经由MainControllerPanel脚本获取,保存在GameInfo.titleData中) * 1. 在游戏界面右侧的天赋技能详细信息面板显示天赋技能图标和名字 * 2. 从GameInfo.titleData中获取天赋技能的详细信息(使用PlayFabSimpeJson.DeserializeObject解析Json数据) * 3. 根据选中的天赋技能,显示该天赋技能的描述 * 4. 根据玩家天赋技能的等级(PlayFabUserData类保存了玩家的天赋技能等级),显示玩家天赋技能等级和对应的加成属性 * 5. 根据玩家天赋技能的等级,显示天赋技能下一等级数据,以及天赋技能升级需要的金币(注意处理天赋技能满级的情况) * 6. 根据玩家天赋技能等级,为天赋技能提升按钮LevelUpButton绑定事件函数,以及按钮是否可以交互 * 如果玩家天赋技鞥已满级:禁用按钮交互,按钮显示“已满级” * 如果玩家天赋技能未解锁,禁用按钮交互,按钮显示“未解锁” * 如果玩家可以提升天赋技能,启用按钮交互,按钮显示“提升”,为按钮动态绑定天赋技能提升相关的实现代码: * 第一步,启用levelUpPanel面板,用于提示玩家天赋技能的提升状况 * 第二部,判断玩家金币数量是否足够: * 若金币不足,在levelUpPanel面板提示玩家“金币不足,提升失败”,结束函数执行。 * 若金币足够,在levelUpPanel面板提示玩家"天赋提升中...",并使用ExecuteCloudScript函数,调用CloudScript的UpgradeTalentSkill函数,完成玩家天赋技能的提升。 * (UpgradeTalentSkill函数包含三个参数,skillName表示提升的天赋技能名称,skillLevel表示玩家当前天赋技能等级,upgradeCost表示玩家天赋技能提升消耗的金币数)。 * ExecuteCloudScript函数执行成功,调用OnExecuteCloudScript函数,获取函数执行的结果,更新玩家的天赋技能等级以及玩家当前金币数,最后使用GetUserData函数,重新获取玩家的自定义属性Player Data。 * GetUserData函数执行成功,调用OnGetUserData函数,将玩家自定义属性Player Data保存在PlayFabUserData类的userData字段中,在levelUpPanel面板提示玩家“天赋技能提升成功”,最后根据currentSkillName字段更新天赋技能面板的显示。 * ExecuteCloudScript函数或GetUserData函数执行失败,调用OnPlayFabError函数,在levelUpPanel面板提示玩家“天赋技能提升失败”,并将失败原因输出到控制台。 */ //1. 在游戏界面右侧的天赋技能详细信息面板显示天赋技能图标和名字 skillImage.sprite = skillSprite; //2. 从GameInfo.titleData中获取天赋技能的详细信息(使用PlayFabSimpeJson.DeserializeObject解析Json数据) Dictionary <string, string> skillData = new Dictionary <string, string>(); skillData = PlayFabSimpleJson.DeserializeObject <Dictionary <string, string> >(GameInfo.titleData[currentSkillName]); skillName.text = skillData["Name"]; int lv = 0; switch (currentSkillName) { case "ExpAndMoneySkill": lv = PlayFabUserData.expAndMoneySkillLV; //Debug.Log("更新选中天赋等级,此时currentSkillName:" + currentSkillName); break; case "ShootingRangeSkill": lv = PlayFabUserData.shootingRangeSkillLV; break; case "ShootingIntervalSkill": lv = PlayFabUserData.shootingIntervalSkillLV; break; case "ShootingDamageSkill": lv = PlayFabUserData.shootingDamageSkillLV; break; } //3.根据选中的天赋技能,显示该天赋技能的描述 skillLevel.text = "LV." + lv.ToString(); skillDescription.text = skillData["Description"]; if (lv == 0) { currentLevel.text = ""; } else { currentLevel.text = "当前等级 +" + skillData["Level" + lv.ToString()] + "%"; } if (lv == int.Parse(skillData["LevelUpperLimit"])) { nextLevel.text = ""; } else { nextLevel.text = "下一等级 +" + skillData["Level" + (lv + 1).ToString()] + "%"; } goldCurrencyCost.text = skillData["LevelCost" + lv.ToString()]; int cost; if (lv.ToString() == skillData["LevelUpperLimit"]) { cost = 0; } else { cost = int.Parse(skillData["LevelCost" + lv.ToString()]); } //玩家天赋已满级 if (lv == int.Parse(skillData["LevelUpperLimit"])) { levelUpButton.interactable = false; levelUpButton.GetComponentInChildren <Text>().text = "已满级"; } //玩家天赋技能未解锁 else if (PlayFabUserData.lv < int.Parse(skillData["LVLimit"])) { levelUpButton.interactable = false; levelUpButton.GetComponentInChildren <Text>().text = "未解锁"; } else { levelUpButton.interactable = true; levelUpButton.GetComponentInChildren <Text>().text = "提升"; //如果玩家可以提升天赋技能,启用按钮交互,按钮显示“提升”,为按钮动态绑定天赋技能提升相关的实现代码: levelUpButton.onClick.RemoveAllListeners(); levelUpButton.onClick.AddListener(delegate() { //启用levelUpPanel面板,用于提示玩家天赋技能的提升状况 levelUpPanel.SetActive(true); Text text = levelUpPanel.GetComponentInChildren <Text>(); //判断玩家金币数量是否足够: if (int.Parse(goldCurrencyCount.text) < int.Parse(goldCurrencyCost.text)) { text.text = "金币不足,提升失败";//若金币不足,在levelUpPanel面板提示玩家“金币不足,提升失败”,结束函数执行。 } else { text.text = "天赋提升中...";//若金币足够,在levelUpPanel面板提示玩家"天赋提升中..." levelUpPanelBackButton.SetActive(false); //使用ExecuteCloudScript函数,调用CloudScript的UpgradeTalentSkill函数,完成玩家天赋技能的提升。 ExecuteCloudScriptRequest request = new ExecuteCloudScriptRequest() { FunctionName = "UpgradeTalentSkill", FunctionParameter = new { skillName = currentSkillName, skillLevel = lv, upgradeCost = cost }, GeneratePlayStreamEvent = true }; PlayFabClientAPI.ExecuteCloudScript(request, OnExecuteCloudScript, OnPlayFabError); } }); } }
private IEnumerator AwardQuartersCall(int expectedAward, OnAwardQuartersSuccessDelegate OnSucess, OnAwardQuartersFailedDelegate OnFailed) { //pull user details if dont exist if (CurrentUser == null) { bool isUserDetailsDone = false; string getUserDetailsError = ""; StartCoroutine(GetUserDetailsCall(delegate(User user) { //user details loaded isUserDetailsDone = true; }, delegate(string userDetailsError) { OnFailed("Getting user details failed: " + userDetailsError); isUserDetailsDone = true; getUserDetailsError = userDetailsError; })); while (!isUserDetailsDone) { yield return(new WaitForEndOfFrame()); } //error occured, break out of coroutine if (!string.IsNullOrEmpty(getUserDetailsError)) { yield break; } } ExecuteCloudScriptRequest request = new ExecuteCloudScriptRequest(); request.FunctionName = "AwardQuarters"; request.GeneratePlayStreamEvent = true; request.FunctionParameter = new { amount = expectedAward, userId = Quarters.Instance.CurrentUser.id }; PlayFabClientAPI.ExecuteCloudScript(request, delegate(ExecuteCloudScriptResult result) { bool errorOccured = false; //catch Playfab and cloud script errors if (result.Error != null) { Debug.LogError("Quarters PlayFab Error: " + result.Error.Error); Debug.LogError("Quarters PlayFab Error: " + result.Error.Message); Debug.LogError("Quarters PlayFab Error: " + result.Error.StackTrace); OnFailed(result.Error.Message); errorOccured = true; } foreach (LogStatement logStatement in result.Logs) { if (logStatement.Level == "Error") { Debug.LogError("Quarters PlayFab Error: " + logStatement.Message); OnFailed("Playfab error: " + logStatement); errorOccured = true; } else { Debug.Log("Quarters PlayFab " + logStatement.Message); } } if (!errorOccured) { Hashtable ht = JsonConvert.DeserializeObject <Hashtable>(result.FunctionResult.ToString()); if (ht.ContainsKey("txId")) { OnSucess((string)ht["txId"]); } else { Debug.Log(JsonConvert.SerializeObject(result.FunctionResult)); OnFailed("Unknown error"); } } }, delegate(PlayFabError error) { Debug.LogError(JsonConvert.SerializeObject(error.ErrorMessage)); }); }
public static UnityTask <ExecuteCloudScriptResult> Do(ExecuteCloudScriptRequest request) { return(Do <ExecuteCloudScriptRequest, ExecuteCloudScriptResult>(request, PlayFabClientAPI.ExecuteCloudScript)); }