/// <summary> /// 请求消耗物品以添加物品 /// </summary> /// <param name="callback"></param> /// <param name="cost_goods_types"></param> /// <param name="cost_goods_counts"></param> /// <param name="cost_goods_params"></param> /// <param name="add_goods_types"></param> /// <param name="add_goods_counts"></param> /// <param name="add_goods_params"></param> public void RequestCostAddGameGoods(RequestCostAddGameGoodsCallback callback, int[] cost_goods_types, int[] cost_goods_counts, int[] cost_goods_params, int[] add_goods_types, int[] add_goods_counts, int[] add_goods_params) { RequestCostAddGameGoods(callback, cost_goods_types, ConvertIntArrToBigIntegerArr(cost_goods_counts), cost_goods_params, add_goods_types, ConvertIntArrToBigIntegerArr(add_goods_counts), add_goods_params); }
/// <summary> /// 请求消耗物品以添加物品 /// </summary> /// <param name="callback"></param> /// <param name="cost_goods_type"></param> /// <param name="cost_goods_count"></param> /// <param name="cost_goods_param"></param> /// <param name="add_goods_types"></param> /// <param name="add_goods_counts"></param> /// <param name="add_goods_params"></param> public void RequestCostAddGameGoods(RequestCostAddGameGoodsCallback callback, int cost_goods_type, BigInteger cost_goods_count, int cost_goods_param, int[] add_goods_types, BigInteger[] add_goods_counts, int[] add_goods_params) { RequestCostAddGameGoods(callback, new int[] { cost_goods_type }, new BigInteger[] { cost_goods_count }, new int[] { cost_goods_param }, add_goods_types, add_goods_counts, add_goods_params); }
/// <summary> /// 请求消耗物品以添加物品 /// </summary> /// <param name="callback"></param> /// <param name="cost_goods_types"></param> /// <param name="cost_goods_counts"></param> /// <param name="cost_goods_params"></param> /// <param name="add_goods_types"></param> /// <param name="add_goods_counts"></param> /// <param name="add_goods_params"></param> public void RequestCostAddGameGoods(RequestCostAddGameGoodsCallback callback, int[] cost_goods_types, BigInteger[] cost_goods_counts, int[] cost_goods_params, int[] add_goods_types, BigInteger[] add_goods_counts, int[] add_goods_params) { List <GameGoodsCostResult> localCostResults = new List <GameGoodsCostResult>(); List <GameGoodsCostResult> netCostResults = new List <GameGoodsCostResult>(); for (int i = 0; i < cost_goods_types.Length; i++) { var costResult = CheckGoodsCostResult(cost_goods_types[i], cost_goods_counts[i], cost_goods_params[i]); if (costResult == null || costResult.requestType == GoodsRequestType.Undefine) { continue; } if (!costResult.canCost) { callback?.Invoke(GoodsRequestResult.DataFail_NotEnough, null, null, ((int)costResult.costGoods.type).ToString()); return; } switch (costResult.requestType) { case GoodsRequestType.Local: localCostResults.Add(costResult); break; case GoodsRequestType.Network: netCostResults.Add(costResult); break; default: break; } } List <GameGoodsAddResult> localAddResults = new List <GameGoodsAddResult>(); List <GameGoodsAddResult> netAddResults = new List <GameGoodsAddResult>(); for (int i = 0; i < add_goods_types.Length; i++) { GameGoodsAddResult addResult = CheckGoodsAddResult(add_goods_types[i], add_goods_counts[i], add_goods_params[i]); if (addResult == null || addResult.requestType == GoodsRequestType.Undefine) { continue; } switch (addResult.requestType) { case GoodsRequestType.Local: localAddResults.Add(addResult); break; case GoodsRequestType.Network: netAddResults.Add(addResult); break; default: break; } } if (netCostResults.Count <= 0 && netAddResults.Count <= 0) { List <GameGoodData> realAddGoods = new List <GameGoodData>(); HashSet <string> tips = new HashSet <string>(); MergeGoodsAddResult(localAddResults, realAddGoods, tips); AddGameGoods(realAddGoods); ApplyCostResults(localCostResults); callback?.Invoke(GoodsRequestResult.Success, realAddGoods, tips, null); } else { List <int> request_types = new List <int>(); List <int> request_counts = new List <int>(); List <int> request_params = new List <int>(); for (int i = 0; i < netCostResults.Count; i++) { var goods = netCostResults[i].costGoods; request_types.Add((int)goods.type); request_counts.Add(-(int)goods.count);//暂时使用强制转换 之后有大数字请求 需与服务器进行商讨确定 request_params.Add(goods.param); } for (int i = 0; i < netAddResults.Count; i++) { for (int j = 0; j < netAddResults[i].realAddGoods.Count; j++) { var goods = netAddResults[i].realAddGoods[j]; request_types.Add((int)goods.type); request_counts.Add((int)goods.count);//暂时使用强制转换 之后有大数字请求 需与服务器进行商讨确定 request_params.Add(goods.param); } } //打开联网遮罩 Global.gApp.gUiMgr.OpenPanel(Wndid.LoadingUI); ServerMgr.singleton.RequestAddDelResource(request_types.ToArray(), request_counts.ToArray(), request_params.ToArray(), (state) => { //关闭联网遮罩 Global.gApp.gUiMgr.ClosePanel(Wndid.LoadingUI); switch (state) { case ServerMgr.RequestCallbackState.Success: { ApplyCostResults(localCostResults); BroadcastCostResults(netCostResults); List <GameGoodData> realAddGoods = new List <GameGoodData>(); HashSet <string> tips = new HashSet <string>(); MergeGoodsAddResult(localAddResults, realAddGoods, tips); AddGameGoods(realAddGoods); //之后本地物品需要实际添加 MergeGoodsAddResult(netAddResults, realAddGoods, tips); callback?.Invoke(GoodsRequestResult.Success, realAddGoods, tips, null); } break; case ServerMgr.RequestCallbackState.DataFail: { GoodsRequestResult failResult = GoodsRequestResult.Undefine; string failDetail = null; for (int i = 0; i < cost_goods_types.Length; i++) { var costResult = CheckGoodsCostResult(cost_goods_types[i], cost_goods_counts[i], cost_goods_params[i]); if (costResult == null || costResult.requestType == GoodsRequestType.Undefine) { continue; } if (!costResult.canCost) { failResult = GoodsRequestResult.DataFail_NotEnough; failDetail = ((int)costResult.costGoods.type).ToString(); break; } } BroadcastCostResults(netCostResults); callback?.Invoke(failResult, null, null, failDetail); } break; case ServerMgr.RequestCallbackState.NetFail: { callback?.Invoke(GoodsRequestResult.NetFail, null, null, null); } break; default: { callback?.Invoke(GoodsRequestResult.Undefine, null, null, null); } break; } }); } }