/// <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); }
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); }
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); }
/// <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); }