Ejemplo n.º 1
0
        /// <summary>
        /// 处理合成的新物品
        /// </summary>
        /// <param name="client"></param>
        /// <param name="mergeItemID"></param>
        public static int Process(GameClient client, int mergeItemID, int luckyGoodsID, int WingDBID, int CrystalDBID, int nUseBindItemFirst)
        {
            //获取缓存项
            CacheMergeItem cacheMergeItem = GetCacheMergeItem(mergeItemID);

            if (null == cacheMergeItem)
            {
                return(-1000);
            }

            int ret = 0;

            // 翅膀合成 特殊处理! [12/12/2013 LiaoWei]
            if (mergeItemID >= (int)WINGMERGEINFO.WINGMERGE_FIRST_LEVEL_ID && mergeItemID <= (int)WINGMERGEINFO.WINGMERGE_THIRD_LEVEL_ID)
            {
                //检查是否满足合成的条件
                ret = CanMergeNewGoods(client, cacheMergeItem, cacheMergeItem.NewGoodsID[0]);
                if (ret < 0)
                {
                    return(ret);
                }

                ret = ProcessWingMerge(client, mergeItemID, luckyGoodsID, WingDBID, CrystalDBID, cacheMergeItem);
                if (ret < 0)
                {
                    return(ret);
                }

                //成就处理 第一次合成
                ChengJiuManager.OnFirstHeCheng(client);
                ChengJiuManager.OnRoleGoodsHeCheng(client, cacheMergeItem.NewGoodsID[0]);
            }
            else
            {
                //用材料合成新物品
                ret = ProcessMergeNewGoods(client, mergeItemID, cacheMergeItem, luckyGoodsID, nUseBindItemFirst);
                if (ret < 0)
                {
                    return(ret);
                }
            }



            return(0);
        }
Ejemplo n.º 2
0
        public static int Process(GameClient client, int mergeItemID, int luckyGoodsID, int WingDBID, int CrystalDBID, int nUseBindItemFirst)
        {
            CacheMergeItem cacheMergeItem = MergeNewGoods.GetCacheMergeItem(mergeItemID);
            int            result;

            if (null == cacheMergeItem)
            {
                result = -1000;
            }
            else
            {
                if (mergeItemID >= 4 && mergeItemID <= 6)
                {
                    int ret = MergeNewGoods.CanMergeNewGoods(client, cacheMergeItem, cacheMergeItem.NewGoodsID[0], false);
                    if (ret < 0)
                    {
                        return(ret);
                    }
                    ret = MergeNewGoods.ProcessWingMerge(client, mergeItemID, luckyGoodsID, WingDBID, CrystalDBID, cacheMergeItem);
                    if (ret < 0)
                    {
                        return(ret);
                    }
                    ChengJiuManager.OnFirstHeCheng(client);
                    ChengJiuManager.OnRoleGoodsHeCheng(client, cacheMergeItem.NewGoodsID[0]);
                }
                else
                {
                    int ret = MergeNewGoods.ProcessMergeNewGoods(client, mergeItemID, cacheMergeItem, luckyGoodsID, nUseBindItemFirst);
                    if (ret < 0)
                    {
                        return(ret);
                    }
                }
                result = 0;
            }
            return(result);
        }
Ejemplo n.º 3
0
        private static int ProcessMergeNewGoods(GameClient client, int mergeItemID, CacheMergeItem cacheMergeItem, int luckyGoodsID, int nUseBindItemFirst)
        {
            int  newGoodsBinding   = 0;
            int  addSuccessPercent = 0;
            bool bLeftGrid         = false;
            int  nNewGoodsID       = cacheMergeItem.NewGoodsID[0];

            if (cacheMergeItem.NewGoodsID.Count > 1)
            {
                if (!Global.CanAddGoodsNum(client, 1))
                {
                    return(-1);
                }
                nNewGoodsID = cacheMergeItem.NewGoodsID[Global.GetRandomNumber(0, cacheMergeItem.NewGoodsID.Count)];
                bLeftGrid   = true;
            }
            int ret = MergeNewGoods.CanMergeNewGoods(client, cacheMergeItem, nNewGoodsID, bLeftGrid);
            int result;

            if (ret < 0)
            {
                result = ret;
            }
            else
            {
                if (luckyGoodsID > 0)
                {
                    int luckyPercent = Global.GetLuckyValue(luckyGoodsID);
                    if (luckyPercent > 0)
                    {
                        bool usedBinding     = false;
                        bool usedTimeLimited = false;
                        if (GameManager.ClientMgr.NotifyUseGoods(Global._TCPManager.MySocketListener, Global._TCPManager.tcpClientPool, Global._TCPManager.TcpOutPacketPool, client, luckyGoodsID, 1, false, out usedBinding, out usedTimeLimited, false))
                        {
                            if (newGoodsBinding <= 0)
                            {
                                newGoodsBinding = (usedBinding ? 1 : 0);
                            }
                            addSuccessPercent = luckyPercent;
                        }
                    }
                }
                bool success = MergeNewGoods.JugeSucess(mergeItemID, cacheMergeItem, addSuccessPercent);
                for (int i = 0; i < cacheMergeItem.OrigGoodsIDList.Count; i++)
                {
                    int usingGoodsNum   = MergeNewGoods.GetUsingGoodsNum(success, cacheMergeItem, cacheMergeItem.OrigGoodsIDList[i], cacheMergeItem.OrigGoodsNumList[i]);
                    int nBindGoodNum    = Global.GetTotalBindGoodsCountByID(client, cacheMergeItem.OrigGoodsIDList[i]);
                    int nNotBindGoodNum = Global.GetTotalNotBindGoodsCountByID(client, cacheMergeItem.OrigGoodsIDList[i]);
                    if (usingGoodsNum > nBindGoodNum + nNotBindGoodNum)
                    {
                        return(-10);
                    }
                    bool usedBinding     = false;
                    bool usedTimeLimited = false;
                    if (nUseBindItemFirst > 0 && nBindGoodNum > 0)
                    {
                        int nSum;
                        int nSubNum;
                        if (usingGoodsNum > nBindGoodNum)
                        {
                            nSum    = nBindGoodNum;
                            nSubNum = usingGoodsNum - nBindGoodNum;
                        }
                        else
                        {
                            nSum    = usingGoodsNum;
                            nSubNum = 0;
                        }
                        if (nSum > 0)
                        {
                            if (!GameManager.ClientMgr.NotifyUseBindGoods(Global._TCPManager.MySocketListener, Global._TCPManager.tcpClientPool, Global._TCPManager.TcpOutPacketPool, client, cacheMergeItem.OrigGoodsIDList[i], nSum, false, out usedBinding, out usedTimeLimited, true))
                            {
                                return(-10);
                            }
                        }
                        if (nSubNum > 0)
                        {
                            if (!GameManager.ClientMgr.NotifyUseNotBindGoods(Global._TCPManager.MySocketListener, Global._TCPManager.tcpClientPool, Global._TCPManager.TcpOutPacketPool, client, cacheMergeItem.OrigGoodsIDList[i], nSubNum, false, out usedBinding, out usedTimeLimited, true))
                            {
                                return(-10);
                            }
                        }
                        newGoodsBinding = 1;
                    }
                    else
                    {
                        int nSum;
                        int nSubNum;
                        if (usingGoodsNum > nNotBindGoodNum)
                        {
                            nSum    = nNotBindGoodNum;
                            nSubNum = usingGoodsNum - nNotBindGoodNum;
                        }
                        else
                        {
                            nSum    = usingGoodsNum;
                            nSubNum = 0;
                        }
                        if (nSum > 0)
                        {
                            if (!GameManager.ClientMgr.NotifyUseNotBindGoods(Global._TCPManager.MySocketListener, Global._TCPManager.tcpClientPool, Global._TCPManager.TcpOutPacketPool, client, cacheMergeItem.OrigGoodsIDList[i], nSum, false, out usedBinding, out usedTimeLimited, true))
                            {
                                return(-10);
                            }
                        }
                        if (nSubNum > 0)
                        {
                            if (!GameManager.ClientMgr.NotifyUseBindGoods(Global._TCPManager.MySocketListener, Global._TCPManager.tcpClientPool, Global._TCPManager.TcpOutPacketPool, client, cacheMergeItem.OrigGoodsIDList[i], nSubNum, false, out usedBinding, out usedTimeLimited, true))
                            {
                                return(-10);
                            }
                            newGoodsBinding = 1;
                        }
                    }
                }
                if (cacheMergeItem.DianJuan > 0)
                {
                    if (!GameManager.ClientMgr.SubUserMoney(Global._TCPManager.MySocketListener, Global._TCPManager.tcpClientPool, Global._TCPManager.TcpOutPacketPool, client, cacheMergeItem.DianJuan, "合成新物品", true, true, false, DaiBiSySType.None))
                    {
                        return(-11);
                    }
                }
                if (cacheMergeItem.Money > 0)
                {
                    if (!Global.SubBindTongQianAndTongQian(client, cacheMergeItem.Money, "材料合成"))
                    {
                        return(-12);
                    }
                }
                if (cacheMergeItem.JingYuan > 0)
                {
                    GameManager.ClientMgr.ModifyTianDiJingYuanValue(client, -cacheMergeItem.JingYuan, "材料合成", true, true, false);
                }
                if (!success)
                {
                    result = -1000;
                }
                else
                {
                    int dbRet = Global.AddGoodsDBCommand(Global._TCPManager.TcpOutPacketPool, client, nNewGoodsID, 1, 0, "", 0, newGoodsBinding, 0, "", true, 1, "材料合成新物品", "1900-01-01 12:00:00", 0, 0, 0, 0, 0, 0, 0, null, null, 0, true);
                    if (dbRet < 0)
                    {
                        result = -20;
                    }
                    else
                    {
                        if (90 == Global.GetGoodsCatetoriy(nNewGoodsID))
                        {
                            if (Global.GetJewelLevel(nNewGoodsID) >= 6)
                            {
                                Global.BroadcastMergeJewelOk(client, nNewGoodsID);
                            }
                        }
                        if (120 == Global.GetGoodsCatetoriy(nNewGoodsID))
                        {
                        }
                        ChengJiuManager.OnFirstHeCheng(client);
                        ChengJiuManager.OnRoleGoodsHeCheng(client, nNewGoodsID);
                        SevenDayGoalEventObject evObj = SevenDayGoalEvPool.Alloc(client, ESevenDayGoalFuncType.HeChengTimes);
                        evObj.Arg1 = nNewGoodsID;
                        GlobalEventSource.getInstance().fireEvent(evObj);
                        ProcessTask.ProcessAddTaskVal(client, TaskTypes.Merge_GuoShi, cacheMergeItem.MergeType, 1, new object[0]);
                        result = 0;
                    }
                }
            }
            return(result);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// 用材料合成新物品
        /// </summary>
        /// <param name="cacheMergeItem"></param>
        /// <returns></returns>
        private static int ProcessMergeNewGoods(GameClient client, int mergeItemID, CacheMergeItem cacheMergeItem, int luckyGoodsID, int nUseBindItemFirst)
        {
            //新合成的物品是否绑定
            int newGoodsBinding   = 0;
            int addSuccessPercent = 0;

            bool bLeftGrid   = false;
            int  nNewGoodsID = cacheMergeItem.NewGoodsID[0];

            if (cacheMergeItem.NewGoodsID.Count > 1)
            {
                nNewGoodsID = cacheMergeItem.NewGoodsID[Global.GetRandomNumber(0, cacheMergeItem.NewGoodsID.Count)];
                bLeftGrid   = true;
            }

            //检查是否满足合成的条件
            int ret = CanMergeNewGoods(client, cacheMergeItem, nNewGoodsID, bLeftGrid);

            if (ret < 0)
            {
                return(ret);
            }

            if (luckyGoodsID > 0)
            {
                int luckyPercent = Global.GetLuckyValue(luckyGoodsID);
                if (luckyPercent > 0)
                {
                    bool usedBinding     = false;
                    bool usedTimeLimited = false;

                    //从用户物品中扣除消耗的数量
                    if (GameManager.ClientMgr.NotifyUseGoods(Global._TCPManager.MySocketListener, Global._TCPManager.tcpClientPool,
                                                             Global._TCPManager.TcpOutPacketPool, client, luckyGoodsID, 1, false, out usedBinding, out usedTimeLimited))
                    {
                        if (newGoodsBinding <= 0)
                        {
                            newGoodsBinding = usedBinding ? 1 : 0;
                        }

                        addSuccessPercent = luckyPercent;
                    }
                }
            }

            //检查概率
            bool success = JugeSucess(mergeItemID, cacheMergeItem, addSuccessPercent);

            //检查物品
            for (int i = 0; i < cacheMergeItem.OrigGoodsIDList.Count; i++)
            {
                int usingGoodsNum = GetUsingGoodsNum(success, cacheMergeItem, cacheMergeItem.OrigGoodsIDList[i], cacheMergeItem.OrigGoodsNumList[i]);

                int nBindGoodNum    = Global.GetTotalBindGoodsCountByID(client, cacheMergeItem.OrigGoodsIDList[i]);
                int nNotBindGoodNum = Global.GetTotalNotBindGoodsCountByID(client, cacheMergeItem.OrigGoodsIDList[i]);

                if (usingGoodsNum > nBindGoodNum + nNotBindGoodNum)
                {
                    return(-10);
                }

                bool usedBinding     = false;
                bool usedTimeLimited = false;

                int nSubNum = usingGoodsNum;
                int nSum    = 0;

                if (nUseBindItemFirst > 0 && nBindGoodNum > 0)
                {
                    if (usingGoodsNum > nBindGoodNum)
                    {
                        nSum    = nBindGoodNum;
                        nSubNum = usingGoodsNum - nBindGoodNum;
                    }
                    else
                    {
                        nSum    = usingGoodsNum;
                        nSubNum = 0;
                    }

                    if (nSum > 0)
                    {
                        if (!GameManager.ClientMgr.NotifyUseBindGoods(Global._TCPManager.MySocketListener, Global._TCPManager.tcpClientPool,
                                                                      Global._TCPManager.TcpOutPacketPool, client, cacheMergeItem.OrigGoodsIDList[i], nSum, false, out usedBinding, out usedTimeLimited, true))
                        {
                            return(-10);
                        }
                    }

                    if (nSubNum > 0)
                    {
                        if (!GameManager.ClientMgr.NotifyUseNotBindGoods(Global._TCPManager.MySocketListener, Global._TCPManager.tcpClientPool,
                                                                         Global._TCPManager.TcpOutPacketPool, client, cacheMergeItem.OrigGoodsIDList[i], nSubNum, false, out usedBinding, out usedTimeLimited, true))
                        {
                            return(-10);
                        }
                    }

                    newGoodsBinding = 1;
                }
                else
                {
                    if (usingGoodsNum > nNotBindGoodNum)
                    {
                        nSum    = nNotBindGoodNum;
                        nSubNum = usingGoodsNum - nNotBindGoodNum;
                    }
                    else
                    {
                        nSum    = usingGoodsNum;
                        nSubNum = 0;
                    }

                    if (nSum > 0)
                    {
                        if (!GameManager.ClientMgr.NotifyUseNotBindGoods(Global._TCPManager.MySocketListener, Global._TCPManager.tcpClientPool,
                                                                         Global._TCPManager.TcpOutPacketPool, client, cacheMergeItem.OrigGoodsIDList[i], nSum, false, out usedBinding, out usedTimeLimited, true))
                        {
                            return(-10);
                        }
                    }

                    if (nSubNum > 0)
                    {
                        if (!GameManager.ClientMgr.NotifyUseBindGoods(Global._TCPManager.MySocketListener, Global._TCPManager.tcpClientPool,
                                                                      Global._TCPManager.TcpOutPacketPool, client, cacheMergeItem.OrigGoodsIDList[i], nSubNum, false, out usedBinding, out usedTimeLimited, true))
                        {
                            return(-10);
                        }

                        newGoodsBinding = 1;
                    }
                }

//                 if (newGoodsBinding <= 0)
//                 {
//                     newGoodsBinding = usedBinding ? 1 : 0;
//                 }
            }

            //检查点卷
            if (cacheMergeItem.DianJuan > 0)
            {
                //优先扣除金币
                //扣除的金币
                //int hasSubGold = 0;

                //扣除的元宝
                //int hasSubYuanBao = 0;

                if (!GameManager.ClientMgr.SubUserMoney(Global._TCPManager.MySocketListener, Global._TCPManager.tcpClientPool,
                                                        Global._TCPManager.TcpOutPacketPool, client, cacheMergeItem.DianJuan, "合成新物品"))
                {
                    return(-11);
                }

                //if (hasSubGold > 0)
                //{
                //    newGoodsBinding = 1;
                //}
            }

            //检查银两
            if (cacheMergeItem.Money > 0)
            {
                //if (!GameManager.ClientMgr.SubUserYinLiang(Global._TCPManager.MySocketListener, Global._TCPManager.tcpClientPool,
                //    Global._TCPManager.TcpOutPacketPool, client, cacheMergeItem.Money))
                if (!Global.SubBindTongQianAndTongQian(client, cacheMergeItem.Money, "材料合成"))
                {
                    return(-12);
                }
            }

            // 合成改造 -- 注释掉真气和积分 [12/14/2013 LiaoWei]
            //检查真气

            /*if (cacheMergeItem.ZhenQi > 0)
             * {
             *  //扣除角色的真气
             *  GameManager.ClientMgr.ModifyZhenQiValue(client, -cacheMergeItem.ZhenQi, true, true);
             * }*/

            //检查积分

            /*if (cacheMergeItem.JiFen > 0)
             * {
             *  //扣除角色的积分
             *  GameManager.ClientMgr.ModifyZhuangBeiJiFenValue(client, -cacheMergeItem.JiFen, true, true);
             * }*/

            //检查天地精元
            if (cacheMergeItem.JingYuan > 0)
            {
                //扣除角色的天地精元
                GameManager.ClientMgr.ModifyTianDiJingYuanValue(client, -cacheMergeItem.JingYuan, "材料合成", true, true);
            }

            if (!success)
            {
                return(-1000);
            }

            //添加合成的新物品到角色的背包中
            //想DBServer请求加入某个新的物品到背包中
            int dbRet = Global.AddGoodsDBCommand(Global._TCPManager.TcpOutPacketPool, client, nNewGoodsID, 1, 0, "", 0, newGoodsBinding, 0, "", true, 1, "材料合成新物品");

            if (dbRet < 0)
            {
                return(-20);
            }

            //判断如果是宝石,并且超过了4级,则提示
            if ((int)ItemCategories.ItemJewel == Global.GetGoodsCatetoriy(nNewGoodsID))
            {
                //如果是宝石,处理成就
                //ChengJiuManager.OnRoleGoodsHeCheng(client, cacheMergeItem.NewGoodsID[0]);

                if (Global.GetJewelLevel(nNewGoodsID) >= 6) //6级以上
                {
                    //宝石合成
                    Global.BroadcastMergeJewelOk(client, nNewGoodsID);
                }
            }

            //如果是合成强化石,则处理成就
            if ((int)ItemCategories.ItemMaterial == Global.GetGoodsCatetoriy(nNewGoodsID))
            {
                //如果是宝石,处理成就
                //ChengJiuManager.OnRoleGoodsHeCheng(client, cacheMergeItem.NewGoodsID[0]);
            }

            //成就处理 第一次合成
            ChengJiuManager.OnFirstHeCheng(client);
            ChengJiuManager.OnRoleGoodsHeCheng(client, nNewGoodsID);

            return(0);
        }