//发送给客户端某个圣物,部件更新 public void HolyItemSendToClient(GameClient client, sbyte sShenWu_slot, sbyte sBuJian_slot) { Dictionary <sbyte, HolyItemData> holyitemdata = client.ClientData.MyHolyItemDataDic; if (holyitemdata == null) { return; } HolyItemData tmpdata = null; HolyItemPartData tmppartdata = null; if (false == holyitemdata.TryGetValue(sShenWu_slot, out tmpdata)) { return; } if (false == tmpdata.m_PartArray.TryGetValue(sBuJian_slot, out tmppartdata)) { return; } string strSend = string.Format("{0}:{1}:{2}:{3}", sShenWu_slot, sBuJian_slot, tmppartdata.m_sSuit, tmppartdata.m_nSlice); client.sendCmd((int)TCPGameServerCmds.CMD_SPR_HOLYITEM_PART_DATA, strSend); }
//更新数据库资料 private void UpdateHolyItemData2DB(GameClient client, sbyte sShengWu_slot, sbyte sBuJian_slot, HolyItemPartData partdata = null) { Dictionary <sbyte, HolyItemData> holyitemdata = client.ClientData.MyHolyItemDataDic; HolyItemData tmpdata = null; HolyItemPartData tmppartdata = partdata; if (tmppartdata == null) { if (false == holyitemdata.TryGetValue(sShengWu_slot, out tmpdata)) { return; } if (false == tmpdata.m_PartArray.TryGetValue(sBuJian_slot, out tmppartdata)) { return; } } //格式: roleID, sShengwu_type, sPart_slot, sPart_suit, nPart_slice, nFail_count string[] dbFields = null; string sCmd = ""; sCmd = string.Format("{0}:{1}:{2}:{3}:{4}:{5}", client.ClientData.RoleID, sShengWu_slot, sBuJian_slot, tmppartdata.m_sSuit, tmppartdata.m_nSlice, tmppartdata.m_nFailCount); TCPProcessCmdResults retcmd = Global.RequestToDBServer(Global._TCPManager.tcpClientPool, Global._TCPManager.TcpOutPacketPool, (int)TCPGameServerCmds.CMD_DB_UPDATE_HOLYITEM, sCmd, out dbFields, client.ServerId); }
public void UpdateHolyItemBuJianAttr(GameClient client, sbyte sShenWu_slot, sbyte sBuJian_slot) { Dictionary <sbyte, HolyItemData> holyitemdata = client.ClientData.MyHolyItemDataDic; if (null != holyitemdata) { HolyItemData tmpdata = null; HolyItemPartData tmppartdata = null; if (holyitemdata.TryGetValue(sShenWu_slot, out tmpdata)) { if (tmpdata.m_PartArray.TryGetValue(sBuJian_slot, out tmppartdata)) { int nDataID = HolyPartInfo.GetBujianID(sShenWu_slot, sBuJian_slot, tmppartdata.m_sSuit); HolyPartInfo nXmlData = null; if (this._partDataDic.TryGetValue(nDataID, out nXmlData)) { for (int i = 0; i < nXmlData.m_PropertyList.Count; i++) { this.ProcessAction(client, nXmlData.m_PropertyList[i].MagicActionID, nXmlData.m_PropertyList[i].MagicActionParams, 16, sShenWu_slot, sBuJian_slot); } } } } } }
private void UpdateHolyItemData2DB(GameClient client, sbyte sShengWu_slot, sbyte sBuJian_slot, HolyItemPartData partdata = null) { Dictionary <sbyte, HolyItemData> holyitemdata = client.ClientData.MyHolyItemDataDic; HolyItemData tmpdata = null; HolyItemPartData tmppartdata = partdata; if (tmppartdata == null) { if (!holyitemdata.TryGetValue(sShengWu_slot, out tmpdata)) { return; } if (!tmpdata.m_PartArray.TryGetValue(sBuJian_slot, out tmppartdata)) { return; } } string[] dbFields = null; string sCmd = string.Format("{0}:{1}:{2}:{3}:{4}:{5}", new object[] { client.ClientData.RoleID, sShengWu_slot, sBuJian_slot, tmppartdata.m_sSuit, tmppartdata.m_nSlice, tmppartdata.m_nFailCount }); TCPProcessCmdResults retcmd = Global.RequestToDBServer(Global._TCPManager.tcpClientPool, Global._TCPManager.TcpOutPacketPool, 10206, sCmd, out dbFields, client.ServerId); }
public void GetHolyItemPart(GameClient client, sbyte sShengWu_slot, sbyte sBuJian_slot, int nNum) { if (!GameFuncControlManager.IsGameFuncDisabled(GameFuncType.System1Dot7)) { Dictionary <sbyte, HolyItemData> holyitemdata = client.ClientData.MyHolyItemDataDic; HolyItemData tmpdata = null; HolyItemPartData tmppartdata = null; if (holyitemdata.TryGetValue(sShengWu_slot, out tmpdata)) { if (tmpdata.m_PartArray.TryGetValue(sBuJian_slot, out tmppartdata)) { tmppartdata.m_nSlice += nNum; this.UpdateHolyItemData2DB(client, sShengWu_slot, sBuJian_slot, tmppartdata); this.HolyItemSendToClient(client, sShengWu_slot, sBuJian_slot); string strHint = StringUtil.substitute(GLang.GetLang(384, new object[0]), new object[] { Global.GetLang(HolyItemManager.SliceNameSet[(int)sShengWu_slot, (int)sBuJian_slot]), nNum }); GameManager.ClientMgr.NotifyImportantMsg(client, strHint, GameInfoTypeIndexes.Normal, ShowGameInfoTypes.PiaoFuZi, 0); GameManager.logDBCmdMgr.AddDBLogInfo(-1, HolyItemManager.SliceNameSet[(int)sShengWu_slot, (int)sBuJian_slot], "圣物碎片", Global.GetMapName(client.ClientData.MapCode), client.ClientData.RoleName, "增加", nNum, client.ClientData.ZoneID, client.strUserID, tmppartdata.m_nSlice, client.ServerId, null); } } } }
//更新圣物额外属性 public void UpdataHolyItemExAttr(GameClient client, sbyte sShenWu_slot) { Dictionary <sbyte, HolyItemData> holyitemdata = client.ClientData.MyHolyItemDataDic; if (null == holyitemdata) { return; } HolyItemData tmpdata = null; HolyItemPartData tmppartdata = null; int sMinSuit = (int)MAX_HOLY_PART_LEVEL; if (true == holyitemdata.TryGetValue(sShenWu_slot, out tmpdata)) { for (sbyte i = 1; i <= MAX_HOLY_PART_NUM; ++i) { if (true == tmpdata.m_PartArray.TryGetValue(i, out tmppartdata)) { if (sMinSuit > tmppartdata.m_sSuit) { sMinSuit = tmppartdata.m_sSuit; } } else { //存在有0阶情况直接跳 sMinSuit = 0; break; } } } else { //这个圣物不存在按0阶处理 sMinSuit = 0; } HolyInfo xmlData = null; int nDataID = HolyInfo.GetShengwuID((sbyte)sMinSuit, sShenWu_slot); if (true == _holyDataDic.TryGetValue(nDataID, out xmlData)) { for (int j = 0; j < xmlData.m_ExtraPropertyList.Count; ++j) { ProcessAction( client , xmlData.m_ExtraPropertyList[j].MagicActionID , xmlData.m_ExtraPropertyList[j].MagicActionParams , (int)PropsSystemTypes.HolyItem , sShenWu_slot , 100); //0 作为额外属性用 } } }
//登陆时发送给客户端圣物数据 //发送格式为 string = 圣物数量:<圣物类型:圣物部件数:<部件位置:部件阶数:部件碎片数量:>> public void PlayGameAfterSend(GameClient client) { // 如果1.7的功能没开放 if (GameFuncControlManager.IsGameFuncDisabled(GameFuncType.System1Dot7)) { return; } Dictionary <sbyte, HolyItemData> holyitemdata = client.ClientData.MyHolyItemDataDic; if (holyitemdata == null) { return; } HolyItemData tmpdata = null; HolyItemPartData tmppartdata = null; for (sbyte i = 1; i <= MAX_HOLY_NUM; ++i) { if (true == holyitemdata.TryGetValue(i, out tmpdata)) { for (sbyte j = 1; j <= MAX_HOLY_PART_NUM; ++j) { if (false == tmpdata.m_PartArray.TryGetValue(j, out tmppartdata)) { tmppartdata = new HolyItemPartData(); tmpdata.m_PartArray.Add(j, tmppartdata); } } } else { //即使数据库没有也要补全数据 tmpdata = new HolyItemData(); holyitemdata.Add(i, tmpdata); tmpdata.m_sType = i; for (sbyte j = 1; j <= MAX_HOLY_PART_NUM; ++j) { tmppartdata = new HolyItemPartData(); tmpdata.m_PartArray.Add(j, tmppartdata); } } } //byte[] sendbytes = DataHelper.ObjectToBytes<Dictionary<int, HolyItemData>>(holyitemdata); //client.sendCmd((int)TCPGameServerCmds.CMD_SPR_HOLYITEM_DATA, sendbytes); client.sendCmd <Dictionary <sbyte, HolyItemData> >((int)TCPGameServerCmds.CMD_SPR_HOLYITEM_DATA, holyitemdata); }
//得到圣物碎片 public void GetHolyItemPart(GameClient client, sbyte sShengWu_slot, sbyte sBuJian_slot, int nNum) { // 如果1.7的功能没开放 if (GameFuncControlManager.IsGameFuncDisabled(GameFuncType.System1Dot7)) { return; } Dictionary <sbyte, HolyItemData> holyitemdata = client.ClientData.MyHolyItemDataDic; HolyItemData tmpdata = null; HolyItemPartData tmppartdata = null; //先取得当前圣物部件等级 if (false == holyitemdata.TryGetValue(sShengWu_slot, out tmpdata)) { return; } if (false == tmpdata.m_PartArray.TryGetValue(sBuJian_slot, out tmppartdata)) { return; } tmppartdata.m_nSlice += nNum; //更新DB UpdateHolyItemData2DB(client, sShengWu_slot, sBuJian_slot, tmppartdata); //发送给客户端更新数据 HolyItemSendToClient(client, sShengWu_slot, sBuJian_slot); //推送个hint告诉前端获得碎片 string strHint = StringUtil.substitute(Global.GetLang("获得【{0}】{1}个"), Global.GetLang(SliceNameSet[sShengWu_slot, sBuJian_slot]), nNum); GameManager.ClientMgr.NotifyImportantMsg(client, strHint, GameInfoTypeIndexes.Normal, ShowGameInfoTypes.PiaoFuZi); //写log做统计 GameManager.logDBCmdMgr.AddDBLogInfo( -1 , SliceNameSet[sShengWu_slot, sBuJian_slot] , /**/ "圣物碎片" , Global.GetMapName(client.ClientData.MapCode) , client.ClientData.RoleName, /**/ "增加" , nNum , client.ClientData.ZoneID , client.strUserID , tmppartdata.m_nSlice , client.ServerId); }
//[bing] GM命令外部使用 public void GMSetHolyItemLvup(GameClient client, sbyte sShengWu_slot, sbyte sBuJian_slot, sbyte sLv) { Dictionary <sbyte, HolyItemData> holyitemdata = client.ClientData.MyHolyItemDataDic; HolyItemData tmpdata = null; HolyItemPartData tmppartdata = null; //先取得当前圣物部件等级 if (null == holyitemdata || false == holyitemdata.TryGetValue(sShengWu_slot, out tmpdata)) { return; } if (false == tmpdata.m_PartArray.TryGetValue(sBuJian_slot, out tmppartdata)) { return; } tmppartdata.m_sSuit = sLv; if (tmppartdata.m_sSuit > MAX_HOLY_PART_LEVEL) { tmppartdata.m_sSuit = MAX_HOLY_PART_LEVEL; } //计算部件属性 UpdateHolyItemBuJianAttr(client, sShengWu_slot, sBuJian_slot); //计算圣物额外属性 UpdataHolyItemExAttr(client, sShengWu_slot); // 通知客户端属性变化 GameManager.ClientMgr.NotifyUpdateEquipProps(Global._TCPManager.MySocketListener, Global._TCPManager.TcpOutPacketPool, client); // 总生命值和魔法值变化通知(同一个地图才需要通知) GameManager.ClientMgr.NotifyOthersLifeChanged(Global._TCPManager.MySocketListener, Global._TCPManager.TcpOutPacketPool, client); //更新db UpdateHolyItemData2DB(client, sShengWu_slot, sBuJian_slot, tmppartdata); //发送给客户端更新数据 HolyItemSendToClient(client, sShengWu_slot, sBuJian_slot); }
public void UpdataHolyItemExAttr(GameClient client, sbyte sShenWu_slot) { Dictionary <sbyte, HolyItemData> holyitemdata = client.ClientData.MyHolyItemDataDic; if (null != holyitemdata) { HolyItemData tmpdata = null; HolyItemPartData tmppartdata = null; int sMinSuit = (int)HolyItemManager.MAX_HOLY_PART_LEVEL; if (holyitemdata.TryGetValue(sShenWu_slot, out tmpdata)) { for (sbyte i = 1; i <= HolyItemManager.MAX_HOLY_PART_NUM; i += 1) { if (!tmpdata.m_PartArray.TryGetValue(i, out tmppartdata)) { sMinSuit = 0; break; } if (sMinSuit > (int)tmppartdata.m_sSuit) { sMinSuit = (int)tmppartdata.m_sSuit; } } } else { sMinSuit = 0; } HolyInfo xmlData = null; int nDataID = HolyInfo.GetShengwuID((sbyte)sMinSuit, sShenWu_slot); if (this._holyDataDic.TryGetValue(nDataID, out xmlData)) { for (int j = 0; j < xmlData.m_ExtraPropertyList.Count; j++) { this.ProcessAction(client, xmlData.m_ExtraPropertyList[j].MagicActionID, xmlData.m_ExtraPropertyList[j].MagicActionParams, 16, sShenWu_slot, 100); } } } }
public void PlayGameAfterSend(GameClient client) { if (!GameFuncControlManager.IsGameFuncDisabled(GameFuncType.System1Dot7)) { Dictionary <sbyte, HolyItemData> holyitemdata = client.ClientData.MyHolyItemDataDic; if (holyitemdata != null) { HolyItemData tmpdata = null; HolyItemPartData tmppartdata = null; for (sbyte i = 1; i <= HolyItemManager.MAX_HOLY_NUM; i += 1) { if (holyitemdata.TryGetValue(i, out tmpdata)) { for (sbyte j = 1; j <= HolyItemManager.MAX_HOLY_PART_NUM; j += 1) { if (!tmpdata.m_PartArray.TryGetValue(j, out tmppartdata)) { tmppartdata = new HolyItemPartData(); tmpdata.m_PartArray.Add(j, tmppartdata); } } } else { tmpdata = new HolyItemData(); holyitemdata.Add(i, tmpdata); tmpdata.m_sType = i; for (sbyte j = 1; j <= HolyItemManager.MAX_HOLY_PART_NUM; j += 1) { tmppartdata = new HolyItemPartData(); tmpdata.m_PartArray.Add(j, tmppartdata); } } } client.sendCmd <Dictionary <sbyte, HolyItemData> >(1200, holyitemdata, false); } } }
//更新某个圣物某个部件属性 public void UpdateHolyItemBuJianAttr(GameClient client, sbyte sShenWu_slot, sbyte sBuJian_slot) { Dictionary <sbyte, HolyItemData> holyitemdata = client.ClientData.MyHolyItemDataDic; if (null == holyitemdata) { return; } HolyItemData tmpdata = null; HolyItemPartData tmppartdata = null; if (true == holyitemdata.TryGetValue(sShenWu_slot, out tmpdata)) { if (true == tmpdata.m_PartArray.TryGetValue(sBuJian_slot, out tmppartdata)) { int nDataID = HolyPartInfo.GetBujianID(sShenWu_slot, sBuJian_slot, (sbyte)tmppartdata.m_sSuit); HolyPartInfo nXmlData = null; if (false == _partDataDic.TryGetValue(nDataID, out nXmlData)) { return; } for (int i = 0; i < nXmlData.m_PropertyList.Count; ++i) { ProcessAction( client , nXmlData.m_PropertyList[i].MagicActionID , nXmlData.m_PropertyList[i].MagicActionParams , (int)PropsSystemTypes.HolyItem , sShenWu_slot , sBuJian_slot); } } } }
public void GMSetHolyItemLvup(GameClient client, sbyte sShengWu_slot, sbyte sBuJian_slot, sbyte sLv) { Dictionary <sbyte, HolyItemData> holyitemdata = client.ClientData.MyHolyItemDataDic; HolyItemData tmpdata = null; HolyItemPartData tmppartdata = null; if (holyitemdata != null && holyitemdata.TryGetValue(sShengWu_slot, out tmpdata)) { if (tmpdata.m_PartArray.TryGetValue(sBuJian_slot, out tmppartdata)) { tmppartdata.m_sSuit = sLv; if (tmppartdata.m_sSuit > HolyItemManager.MAX_HOLY_PART_LEVEL) { tmppartdata.m_sSuit = HolyItemManager.MAX_HOLY_PART_LEVEL; } this.UpdateHolyItemBuJianAttr(client, sShengWu_slot, sBuJian_slot); this.UpdataHolyItemExAttr(client, sShengWu_slot); GameManager.ClientMgr.NotifyUpdateEquipProps(Global._TCPManager.MySocketListener, Global._TCPManager.TcpOutPacketPool, client); GameManager.ClientMgr.NotifyOthersLifeChanged(Global._TCPManager.MySocketListener, Global._TCPManager.TcpOutPacketPool, client, true, false, 7); this.UpdateHolyItemData2DB(client, sShengWu_slot, sBuJian_slot, tmppartdata); this.HolyItemSendToClient(client, sShengWu_slot, sBuJian_slot); } } }
public void HolyItemSendToClient(GameClient client, sbyte sShenWu_slot, sbyte sBuJian_slot) { Dictionary <sbyte, HolyItemData> holyitemdata = client.ClientData.MyHolyItemDataDic; if (holyitemdata != null) { HolyItemData tmpdata = null; HolyItemPartData tmppartdata = null; if (holyitemdata.TryGetValue(sShenWu_slot, out tmpdata)) { if (tmpdata.m_PartArray.TryGetValue(sBuJian_slot, out tmppartdata)) { string strSend = string.Format("{0}:{1}:{2}:{3}", new object[] { sShenWu_slot, sBuJian_slot, tmppartdata.m_sSuit, tmppartdata.m_nSlice }); client.sendCmd(1201, strSend, false); } } } }
//圣物进阶 private EHolyResult HolyItem_Suit_Up(GameClient client, sbyte sShengWu_slot, sbyte sBuJian_slot) { // 如果1.7的功能没开放 if (GameFuncControlManager.IsGameFuncDisabled(GameFuncType.System1Dot7)) { return(EHolyResult.NotOpen); } //增加系统开启判断 if (false == GameManager.VersionSystemOpenMgr.IsVersionSystemOpen(VersionSystemOpenKey.HolyItem)) { return(EHolyResult.NotOpen); } //不满足任务条件 if (GlobalNew.IsGongNengOpened(client, GongNengIDs.HolyItem, true) == false) { return(EHolyResult.NotOpen); } if (null == client.ClientData.MyHolyItemDataDic) { return(EHolyResult.Error); } Dictionary <sbyte, HolyItemData> holyitemdata = client.ClientData.MyHolyItemDataDic; HolyItemData tmpdata = null; HolyItemPartData tmppartdata = null; HolyPartInfo xmlData = null; //先取得当前圣物部件等级 if (false == holyitemdata.TryGetValue(sShengWu_slot, out tmpdata)) { return(EHolyResult.Error); } if (false == tmpdata.m_PartArray.TryGetValue(sBuJian_slot, out tmppartdata)) { return(EHolyResult.Error); } //0 看看要升级的部件阶级是不是已经满级了 if (tmppartdata.m_sSuit >= MAX_HOLY_PART_LEVEL) { return(EHolyResult.PartSuitIsMax); } int nDataID = HolyPartInfo.GetBujianID(sShengWu_slot, sBuJian_slot, (sbyte)tmppartdata.m_sSuit); if (false == _partDataDic.TryGetValue(nDataID, out xmlData)) { return(EHolyResult.Error); } //1 绑金+金币是否足够 if (-1 != xmlData.m_nCostBandJinBi && xmlData.m_nCostBandJinBi > Global.GetTotalBindTongQianAndTongQianVal(client)) { return(EHolyResult.NeedGold); } //2 部件碎片是否足够 if (-1 != xmlData.m_nNeedGoodsCount && xmlData.m_nNeedGoodsCount > tmppartdata.m_nSlice) { return(EHolyResult.NeedHolyItemPart); } //3 以上均满足,判断成功率 bool bSuccess = false; int nRank = Global.GetRandomNumber(0, 100); if (-1 == xmlData.m_sSuccessProbability || tmppartdata.m_nFailCount >= xmlData.m_nMaxFailCount || //[bing] 2015,8,12 达到连续失败最大次数必成功 nRank < (int)(xmlData.m_sSuccessProbability)) { //4 合成成功:消耗金币、消耗部件碎片,阶数+1 bSuccess = true; //扣除金币 if (-1 != xmlData.m_nCostBandJinBi) { if (!Global.SubBindTongQianAndTongQian(client, xmlData.m_nCostBandJinBi, "圣物部件升级消耗")) { return(EHolyResult.Error); } } //扣除部件碎片 if (-1 != xmlData.m_nNeedGoodsCount) { tmppartdata.m_nSlice -= xmlData.m_nNeedGoodsCount; } if (tmppartdata.m_nSlice < 0) { tmppartdata.m_nSlice = 0; return(EHolyResult.Error); } //部件阶级提升 tmppartdata.m_sSuit += 1; //重置失败次数 tmppartdata.m_nFailCount = 0; } else { //5 合成失败:消耗金币、消耗部分部件碎片 //扣除金币 if (-1 != xmlData.m_nCostBandJinBi) { if (!Global.SubBindTongQianAndTongQian(client, xmlData.m_nCostBandJinBi, "圣物部件升级消耗")) { return(EHolyResult.Error); } } //扣除失败时的部件碎片 if (-1 != xmlData.m_nFailCostGoodsCount) { tmppartdata.m_nSlice -= xmlData.m_nFailCostGoodsCount; } if (tmppartdata.m_nSlice < 0) { tmppartdata.m_nSlice = 0; return(EHolyResult.Error); } //失败次数增加1 tmppartdata.m_nFailCount += 1; } if (true == bSuccess) { //计算部件属性 UpdateHolyItemBuJianAttr(client, sShengWu_slot, sBuJian_slot); //计算圣物额外属性 UpdataHolyItemExAttr(client, sShengWu_slot); // 通知客户端属性变化 GameManager.ClientMgr.NotifyUpdateEquipProps(Global._TCPManager.MySocketListener, Global._TCPManager.TcpOutPacketPool, client); // 总生命值和魔法值变化通知(同一个地图才需要通知) GameManager.ClientMgr.NotifyOthersLifeChanged(Global._TCPManager.MySocketListener, Global._TCPManager.TcpOutPacketPool, client); } //更新db UpdateHolyItemData2DB(client, sShengWu_slot, sBuJian_slot, tmppartdata); //发送给客户端更新数据 HolyItemSendToClient(client, sShengWu_slot, sBuJian_slot); //写log做进阶统计 GameManager.logDBCmdMgr.AddDBLogInfo( -1 , SliceNameSet[sShengWu_slot, sBuJian_slot] , /**/ "圣物进阶" , /**/ "系统" , client.ClientData.RoleName , bSuccess == true ? /**/ "成功" : /**/ "失败" , xmlData.m_nCostBandJinBi != -1 ? xmlData.m_nCostBandJinBi : 0 //消耗的金币数 , client.ClientData.ZoneID , client.strUserID , tmppartdata.m_nSlice , client.ServerId); if (client._IconStateMgr.CheckSpecialActivity(client)) { client._IconStateMgr.SendIconStateToClient(client); } return(bSuccess == true ? EHolyResult.Success : EHolyResult.Fail); }
private EHolyResult HolyItem_Suit_Up(GameClient client, sbyte sShengWu_slot, sbyte sBuJian_slot) { EHolyResult result; if (GameFuncControlManager.IsGameFuncDisabled(GameFuncType.System1Dot7)) { result = EHolyResult.NotOpen; } else if (!GameManager.VersionSystemOpenMgr.IsVersionSystemOpen("HolyItem")) { result = EHolyResult.NotOpen; } else if (!GlobalNew.IsGongNengOpened(client, GongNengIDs.HolyItem, true)) { result = EHolyResult.NotOpen; } else if (null == client.ClientData.MyHolyItemDataDic) { result = EHolyResult.Error; } else { Dictionary <sbyte, HolyItemData> holyitemdata = client.ClientData.MyHolyItemDataDic; HolyItemData tmpdata = null; HolyItemPartData tmppartdata = null; HolyPartInfo xmlData = null; if (!holyitemdata.TryGetValue(sShengWu_slot, out tmpdata)) { result = EHolyResult.Error; } else if (!tmpdata.m_PartArray.TryGetValue(sBuJian_slot, out tmppartdata)) { result = EHolyResult.Error; } else if (tmppartdata.m_sSuit >= HolyItemManager.MAX_HOLY_PART_LEVEL) { result = EHolyResult.PartSuitIsMax; } else { int nDataID = HolyPartInfo.GetBujianID(sShengWu_slot, sBuJian_slot, tmppartdata.m_sSuit); if (!this._partDataDic.TryGetValue(nDataID, out xmlData)) { result = EHolyResult.Error; } else if (-1 != xmlData.m_nCostBandJinBi && xmlData.m_nCostBandJinBi > Global.GetTotalBindTongQianAndTongQianVal(client)) { result = EHolyResult.NeedGold; } else if (-1 != xmlData.m_nNeedGoodsCount && xmlData.m_nNeedGoodsCount > tmppartdata.m_nSlice) { result = EHolyResult.NeedHolyItemPart; } else { bool bSuccess = false; int nRank = Global.GetRandomNumber(0, 100); if (-1 == xmlData.m_sSuccessProbability || tmppartdata.m_nFailCount >= xmlData.m_nMaxFailCount || nRank < (int)xmlData.m_sSuccessProbability) { bSuccess = true; for (int i = 0; i < xmlData.NeedGoods.Count; i++) { int goodsId = xmlData.NeedGoods[i][0]; int costCount = xmlData.NeedGoods[i][1]; int haveGoodsCnt = Global.GetTotalGoodsCountByID(client, goodsId); if (haveGoodsCnt < costCount) { return(EHolyResult.NeedGoods); } } if (-1 != xmlData.m_nCostBandJinBi) { if (!Global.SubBindTongQianAndTongQian(client, xmlData.m_nCostBandJinBi, "圣物部件升级消耗")) { return(EHolyResult.Error); } } if (-1 != xmlData.m_nNeedGoodsCount) { tmppartdata.m_nSlice -= xmlData.m_nNeedGoodsCount; } if (tmppartdata.m_nSlice < 0) { tmppartdata.m_nSlice = 0; return(EHolyResult.Error); } bool bUsedBinding_just_placeholder = false; bool bUsedTimeLimited_just_placeholder = false; for (int i = 0; i < xmlData.NeedGoods.Count; i++) { int goodsId = xmlData.NeedGoods[i][0]; int costCount = xmlData.NeedGoods[i][1]; if (!GameManager.ClientMgr.NotifyUseGoods(Global._TCPManager.MySocketListener, Global._TCPManager.tcpClientPool, Global._TCPManager.TcpOutPacketPool, client, goodsId, costCount, false, out bUsedBinding_just_placeholder, out bUsedTimeLimited_just_placeholder, false)) { LogManager.WriteLog(LogTypes.Error, string.Format("圣物部件升级时,消耗{1}个GoodsID={0}的物品失败,但是已设置为升阶成功", goodsId, costCount), null, true); } GoodsData goodsData = new GoodsData(); goodsData.GoodsID = goodsId; goodsData.GCount = costCount; } HolyItemPartData holyItemPartData = tmppartdata; holyItemPartData.m_sSuit += 1; tmppartdata.m_nFailCount = 0; } else { for (int i = 0; i < xmlData.FaildNeedGoods.Count; i++) { int goodsId = xmlData.FaildNeedGoods[i][0]; int costCount = xmlData.FaildNeedGoods[i][1]; int haveGoodsCnt = Global.GetTotalGoodsCountByID(client, goodsId); if (haveGoodsCnt < costCount) { return(EHolyResult.NeedGoods); } } if (-1 != xmlData.m_nCostBandJinBi) { if (!Global.SubBindTongQianAndTongQian(client, xmlData.m_nCostBandJinBi, "圣物部件升级消耗")) { return(EHolyResult.Error); } } bool bUsedBinding_just_placeholder = false; bool bUsedTimeLimited_just_placeholder = false; for (int i = 0; i < xmlData.FaildNeedGoods.Count; i++) { int goodsId = xmlData.FaildNeedGoods[i][0]; int costCount = xmlData.FaildNeedGoods[i][1]; if (!GameManager.ClientMgr.NotifyUseGoods(Global._TCPManager.MySocketListener, Global._TCPManager.tcpClientPool, Global._TCPManager.TcpOutPacketPool, client, goodsId, costCount, false, out bUsedBinding_just_placeholder, out bUsedTimeLimited_just_placeholder, false)) { LogManager.WriteLog(LogTypes.Error, string.Format("圣物部件升级时,消耗{1}个GoodsID={0}的物品失败", goodsId, costCount), null, true); } GoodsData goodsData2 = new GoodsData(); goodsData2.GoodsID = goodsId; goodsData2.GCount = costCount; } if (-1 != xmlData.m_nFailCostGoodsCount) { tmppartdata.m_nSlice -= xmlData.m_nFailCostGoodsCount; } if (tmppartdata.m_nSlice < 0) { tmppartdata.m_nSlice = 0; return(EHolyResult.Error); } tmppartdata.m_nFailCount++; } if (bSuccess) { this.UpdateHolyItemBuJianAttr(client, sShengWu_slot, sBuJian_slot); this.UpdataHolyItemExAttr(client, sShengWu_slot); GameManager.ClientMgr.NotifyUpdateEquipProps(Global._TCPManager.MySocketListener, Global._TCPManager.TcpOutPacketPool, client); GameManager.ClientMgr.NotifyOthersLifeChanged(Global._TCPManager.MySocketListener, Global._TCPManager.TcpOutPacketPool, client, true, false, 7); } this.UpdateHolyItemData2DB(client, sShengWu_slot, sBuJian_slot, tmppartdata); this.HolyItemSendToClient(client, sShengWu_slot, sBuJian_slot); GameManager.logDBCmdMgr.AddDBLogInfo(-1, HolyItemManager.SliceNameSet[(int)sShengWu_slot, (int)sBuJian_slot], "圣物进阶", "系统", client.ClientData.RoleName, bSuccess ? "成功" : "失败", (xmlData.m_nCostBandJinBi != -1) ? xmlData.m_nCostBandJinBi : 0, client.ClientData.ZoneID, client.strUserID, tmppartdata.m_nSlice, client.ServerId, null); if (client._IconStateMgr.CheckSpecialActivity(client) || client._IconStateMgr.CheckEverydayActivity(client)) { client._IconStateMgr.SendIconStateToClient(client); } result = (bSuccess ? EHolyResult.Success : EHolyResult.Fail); } } } return(result); }