Esempio n. 1
0
        //发送给客户端某个圣物,部件更新
        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);
        }
Esempio n. 2
0
        //更新数据库资料
        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);
        }
Esempio n. 3
0
        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);
                            }
                        }
                    }
                }
            }
        }
Esempio n. 4
0
        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);
        }
Esempio n. 5
0
 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);
             }
         }
     }
 }
Esempio n. 6
0
        //更新圣物额外属性
        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 作为额外属性用
                }
            }
        }
Esempio n. 7
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);
        }
Esempio n. 8
0
        //得到圣物碎片
        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);
        }
Esempio n. 9
0
        //[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);
        }
Esempio n. 10
0
        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);
                    }
                }
            }
        }
Esempio n. 11
0
 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);
         }
     }
 }
Esempio n. 12
0
        //更新某个圣物某个部件属性
        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);
                    }
                }
            }
        }
Esempio n. 13
0
        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);
                }
            }
        }
Esempio n. 14
0
        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);
                    }
                }
            }
        }
Esempio n. 15
0
        //圣物进阶
        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);
        }
Esempio n. 16
0
        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);
        }