/// <summary> /// 某个玩家(不包括自己)有物品栏有更新的时候存储他的物品栏数据 /// </summary> /// <param name="_nPtrParam"></param> /// <param name="_nPtrLen"></param> public void UpdatePlayersGoods(IntPtr _nPtrParam, int _nPtrLen) { IntPtrVaArgParseHelper helper = new IntPtrVaArgParseHelper(_nPtrParam, _nPtrLen); cmd_war_persongoodsinfo_count dataCount = helper.get <cmd_war_persongoodsinfo_count>(); uint pdbid = dataCount.idActor; if (dataCount.nCount == 0 || pdbid == 0) { return; } if (!m_dicPlayersGoodsTable.ContainsKey(pdbid)) { m_dicPlayersGoodsTable.Add(pdbid, new List <cmd_war_persongoodsinfo>()); } m_dicPlayersGoodsTable[pdbid].Clear(); for (int i = 0; i < dataCount.nCount; ++i) { cmd_war_persongoodsinfo data = helper.get <cmd_war_persongoodsinfo>(); m_dicPlayersGoodsTable[pdbid].Add(data); } if (LogicDataCenter.recordTableDataManager.isOneRequest == true) { LogicDataCenter.recordTableDataManager.OnTabClick(); } //通知战绩表更新数据 if (LogicDataCenter.recordTableDataManager.IsWarRecordTableVisible) { UISystem.Instance.SendWndMessage(WndMsgID.WND_MSG_RECORDTABLE_FIGHTING_UPDATERECORDINFO, null); } }
/// <summary> /// 接受逻辑层下发的当前购买物品信息 /// </summary> /// <param name="_data">当前购买物品信息</param> public void WarGoodsStoreBuyGoods(IntPtr ptrParam, int nPtrLen) { if (!Value.IsValueValid(vStoreWindow)) { return; } ResetAssociatedWithPurchasedGoodsSlot(); IntPtrVaArgParseHelper helper = new IntPtrVaArgParseHelper(ptrParam, nPtrLen); cmd_war_persongoodsinfo_count obj = helper.get <cmd_war_persongoodsinfo_count>(); for (int i = 0; i < obj.nCount; ++i) { cmd_war_persongoodsinfo data = helper.get <cmd_war_persongoodsinfo>(); SetPurchasedGoodsSlot(data); //Value ASGoodsValue; //GameMobaSchemesManager.Instance.GetASMobaGoods(data.nGoodID, out ASGoodsValue, this); //if (!Value.IsValueValid(ASGoodsValue) || vStoreWindow.Invoke("SetPurchasedGoodsSlot", data.nSlotIndex, ASGoodsValue, data.nCanUseTimes,1) == null) //{ // Trace.LogError("error call SetPurchasedGoodsSlot failed"); // return; //} curPurchasedGoodsList.Add(data); } //等逻辑层发完整个已购买物品列表,再做判断 //判断哪些物品的价格需要变更的 { //这里没用FindWhichGoodsCanEffect()方法,因为该方法好像会重复迭代很多次 FindWhichGoodsCanEffect();// IteratorFindCanComposeGoods(curPurchasedGoodsList[0].nGoodID, ref allCanComposeGoodsMap); //curPurchasedGoodsList = null; } }
/// <summary> /// 更新本地玩家物品信息 /// </summary> /// <param name="_nPtrParam"></param> /// <param name="_nPtrLen"></param> public void UpdateMainPlayerGoods(IntPtr _nPtrParam, int _nPtrLen) { IntPtrVaArgParseHelper helper = new IntPtrVaArgParseHelper(_nPtrParam, _nPtrLen); cmd_war_persongoodsinfo_count dataCount = helper.get <cmd_war_persongoodsinfo_count>(); uint pdbid = dataCount.idActor; int nCount = dataCount.nCount; if (nCount == 0 || pdbid == 0) { Debug.LogWarning("UpdateMainPlayerGoods:dataCount.nCount == 0 || pdbid == 0"); return; } // 缓存本地玩家的PDBID,取EntityView中的话,有可能还没同步下来 m_nMainHeroPDBID = pdbid; if (!m_dicPlayersGoodsTable.ContainsKey(MainHeroPDBID)) { m_dicPlayersGoodsTable.Add(MainHeroPDBID, new List <cmd_war_persongoodsinfo>()); } //小于最大物品槽数量即是更新的是使用物品 if (nCount < (int)SLOT_DEFINE.D_MAX_GOODS_SLOT_COUNT) { UpdateMainPlayerUseGoods(helper, dataCount.nCount); } else { UpdataMainPlayerAllGoods(helper, dataCount.nCount); } FindWhichGoodsCanEffect(); UISystem.Instance.SendWndMessage(WndMsgID.WND_MSG_WAR_GOODSSTORE_UPDATEMAINPLAYERGOODS, null); }