From 69388f905d074efd8fea82dcceb29de10eda9291 Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期日, 30 十二月 2018 15:00:24 +0800 Subject: [PATCH] 5531 【后端】【1.4】高级守护合成 --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_ItemCompound.py | 78 +++++++++++++++++++++++++++++--------- 1 files changed, 59 insertions(+), 19 deletions(-) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_ItemCompound.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_ItemCompound.py index f87e025..4e6acb2 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_ItemCompound.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_ItemCompound.py @@ -124,6 +124,7 @@ decompoundItemInfo = [] # 拆解返还物品列表 [装备ID,材料1ID,个数,是否绑定,材料2ID,个数,是否绑定,...] itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem) + itemExpireTime = 0 wingItemExpInfo = None #材料翅膀精炼信息 dogzEquipPlusExp = 0 #神兽装备强化熟练度 # 检查不固定消耗道具 @@ -139,22 +140,28 @@ unfixedItemIDList, needUnfixedItemCount) if not unfixedItemCostInfo: return - unfixedItemCostList, wingItemExpInfo, dogzEquipPlusExp = unfixedItemCostInfo - + unfixedItemCostList, wingItemExpInfo, dogzEquipPlusExp, expireTime = unfixedItemCostInfo + if expireTime: + itemExpireTime = expireTime if not itemExpireTime else min(itemExpireTime, expireTime) + # 检查固定消耗道具 if fixedItemIDList: fixedItemInfo = __CheckFixedItem(playerID, compoundID, itemPack, fixedItemIndexList, fixedItemIDList, fixedItemCountList, compoundCnt) if not fixedItemInfo: return - fixedItemIndexDict, fixedItemNeedCntDict, compoundBindCnt = fixedItemInfo - + fixedItemIndexDict, fixedItemNeedCntDict, compoundBindCnt, expireTime = fixedItemInfo + if expireTime: + itemExpireTime = expireTime if not itemExpireTime else min(itemExpireTime, expireTime) + # 检查附加道具增加成功率消耗 addSuccRate, addSuccRateItemInfo = 0, [] if addonsCountMax > 0: addSuccRateInfo = __CheckAddonsItem(playerID, compoundID, itemPack, addonsItemIndexList, addonsItemCountList, addonsCountMax) if addSuccRateInfo == None: return - addSuccRate, addSuccRateItemInfo = addSuccRateInfo + addSuccRate, addSuccRateItemInfo, expireTime = addSuccRateInfo + if expireTime: + itemExpireTime = expireTime if not itemExpireTime else min(itemExpireTime, expireTime) # 检查提升概率道具 incRateItemCostList, needIncRateItemCount, incRate = [], 0, 0 @@ -163,13 +170,15 @@ incRateItemInfo = __CheckIncRateItem(playerID, compoundID, itemPack, incRateItemIndexList, incRateItemID, needIncRateItemCount) if not incRateItemInfo: return - incRateItemCostList = incRateItemInfo + incRateItemCostList, expireTime = incRateItemInfo + if expireTime: + itemExpireTime = expireTime if not itemExpireTime else min(itemExpireTime, expireTime) # 扣铜钱 PlayerControl.PayMoney(curPlayer, IPY_GameWorld.TYPE_Price_Silver_Money, totalNeedMoney, ChConfig.Def_Cost_ItemProduce, {ChConfig.Def_Cost_Reason_SonKey:makeItemID, "CompoundCount":compoundCnt}) - drDict = {"CompoundID":compoundID, "MakeItemID":makeItemID, "CompoundCount":compoundCnt} + drDict = {"CompoundID":compoundID, "MakeItemID":makeItemID, "CompoundCount":compoundCnt, "itemExpireTime":itemExpireTime} makeItemBind = False # 扣不固定消耗物品 @@ -250,8 +259,8 @@ DataRecordPack.SendEventPack("ItemCompound", drDict, curPlayer) if canHappen: - GameWorld.DebugLog("合成成功: makeItemID=%s,compoundCnt=%s,compoundBindCnt=%s" % (makeItemID, compoundCnt, compoundBindCnt), playerID) - userData = GiveNewCompoundItem(curPlayer, makeItemID, compoundCnt, compoundBindCnt, wingItemExpInfo, dogzEquipPlusExp, decompoundItemInfo) + GameWorld.DebugLog("合成成功: makeItemID=%s,compoundCnt=%s,compoundBindCnt=%s,itemExpireTime=%s" % (makeItemID, compoundCnt, compoundBindCnt, itemExpireTime), playerID) + userData = GiveNewCompoundItem(curPlayer, makeItemID, compoundCnt, compoundBindCnt, wingItemExpInfo, dogzEquipPlusExp, decompoundItemInfo, itemExpireTime) msgMark = ipyData.GetSysMark() paramType = ipyData.GetSysMarkParamType() @@ -290,6 +299,7 @@ def __CheckUnfixedItem(playerID, compoundID, makeItemData, itemPack, unfixedItemIndexList, unfixedItemIDList, needUnfixedItemCount): ## 检查不固定消耗道具, 只要客户端提交的数据有不符合要求的,则直接返回 None + expireTime = 0 wingItemExpInfo = None dogzEquipPlusExp = 0 unfixedItemTotalCount = 0 @@ -309,6 +319,13 @@ % (compoundID, index, itemID, unfixedItemIDList), playerID) return + isExpireItem, remainingTime = ItemCommon.GetItemRemainingTime(curItem) + if isExpireItem: + if not remainingTime: + GameWorld.Log("不固定消耗道具时效物品已失效,无法合成! index=%s,itemID=%s" % (index, itemID), playerID) + return + expireTime = remainingTime if not expireTime else min(expireTime, remainingTime) + isBind = curItem.GetIsBind() itemCount = curItem.GetCount() unfixedItemTotalCount += itemCount @@ -329,7 +346,7 @@ % (compoundID, unfixedItemIDList, needUnfixedItemCount, unfixedItemTotalCount), playerID) return - return unfixedItemCostList, wingItemExpInfo, dogzEquipPlusExp + return unfixedItemCostList, wingItemExpInfo, dogzEquipPlusExp, expireTime def __CheckFixedItem(playerID, compoundID, itemPack, fixedItemIndexList, fixedItemIDList, fixedItemCountList, compoundCnt): @@ -343,6 +360,7 @@ % (fixedItemIDList, fixedItemCountList), playerID) return + expireTime = 0 for index in fixedItemIndexList: if index >= maxPackCount: GameWorld.Log("该物品格子索引不存在!无法合成!index=%s,maxPackCount=%s" % (index, maxPackCount), playerID) @@ -357,6 +375,13 @@ % (compoundID, index, fixedItemID, fixedItemIDList), playerID) return + isExpireItem, remainingTime = ItemCommon.GetItemRemainingTime(curItem) + if isExpireItem: + if not remainingTime: + GameWorld.Log("固定消耗道具时效物品已失效,无法合成! index=%s,fixedItemID=%s" % (index, fixedItemID), playerID) + return + expireTime = remainingTime if not expireTime else min(expireTime, remainingTime) + isBind = curItem.GetIsBind() itemCount = curItem.GetCount() bindIndex = 0 if isBind else 1 @@ -440,7 +465,7 @@ return GameWorld.DebugLog("最终消耗材料个数: %s" % (fixedItemNeedCntDict)) - return fixedItemIndexDict, fixedItemNeedCntDict, compoundBindCnt + return fixedItemIndexDict, fixedItemNeedCntDict, compoundBindCnt, expireTime def __CheckAddonsItem(playerID, compoundID, itemPack, addonsItemIndexList, addonsItemCountList, addonsCountMax): @@ -461,6 +486,7 @@ % (addonsItemIndexList, addonsItemCountList), playerID) return + expireTime = 0 useCount = 0 addTotalSuccRate = 0 for i, index in enumerate(addonsItemIndexList): @@ -500,14 +526,22 @@ GameWorld.Log("附加物品总个数超出限制,无法合成! useCount=%s > addonsCountMax=%s" % (useCount, addonsCountMax), playerID) return + isExpireItem, remainingTime = ItemCommon.GetItemRemainingTime(curItem) + if isExpireItem: + if not remainingTime: + GameWorld.Log("附加材料时效物品已失效,无法合成! index=%s,itemID=%s" % (index, itemID), playerID) + return + expireTime = remainingTime if not expireTime else min(expireTime, remainingTime) + addSuccRate = eval(FormulaControl.GetCompileFormula("ComposeAddonsFormula", ComposeAddonsFormula)) addTotalSuccRate += (addSuccRate*costCount) addSuccRateItemInfo.append({"ItemID":itemID, "ItemColor":itemColor, "ItemClassLV":itemClassLV, "addSuccRate":addSuccRate, "costCount":costCount}) - return int(addTotalSuccRate), addSuccRateItemInfo + return int(addTotalSuccRate), addSuccRateItemInfo, expireTime def __CheckIncRateItem(playerID, compoundID, itemPack, incRateItemIndexList, incRateItemID, needIncRateItemCount): ## 检查提升概率道具, 只要客户端提交的数据有不符合要求的,则直接返回 None + expireTime = 0 incRateItemTotalCount = 0 incRateItemCostList = [[], []] # [[绑定索引], [非绑定索引]] maxPackCount = itemPack.GetCount() @@ -524,7 +558,13 @@ GameWorld.Log("该物品不可用于提升合成目标物品概率!ID=%s,index=%s,itemID=%s != incRateItemID=%s" % (compoundID, index, itemID, incRateItemID), playerID) return - + isExpireItem, remainingTime = ItemCommon.GetItemRemainingTime(curItem) + if isExpireItem: + if not remainingTime: + GameWorld.Log("提升概率时效物品已失效,无法合成! index=%s,itemID=%s" % (index, itemID), playerID) + return + expireTime = remainingTime if not expireTime else min(expireTime, remainingTime) + isBind = curItem.GetIsBind() itemCount = curItem.GetCount() incRateItemTotalCount += itemCount @@ -535,7 +575,7 @@ % (compoundID, incRateItemID, needIncRateItemCount, incRateItemTotalCount), playerID) return - return incRateItemCostList + return incRateItemCostList, expireTime def __CheckItemCanUseCompound(playerID, index, curItem): if not ItemCommon.CheckItemCanUse(curItem): @@ -561,21 +601,21 @@ # @param newItem: 新物品 # @param itemCount: 合成数量 # @return None -def GiveNewCompoundItem(curPlayer, newItemID, itemCount, compoundBindCnt, wingItemExpInfo, dogzEquipPlusExp, decompoundItemInfo): +def GiveNewCompoundItem(curPlayer, newItemID, itemCount, compoundBindCnt, wingItemExpInfo, dogzEquipPlusExp, decompoundItemInfo, itemExpireTime): compoundUnBindCnt = itemCount - compoundBindCnt if compoundBindCnt > 0: - userData = __GivePlayerCompoundItem(curPlayer, newItemID, compoundBindCnt, True, wingItemExpInfo, dogzEquipPlusExp, decompoundItemInfo) + userData = __GivePlayerCompoundItem(curPlayer, newItemID, compoundBindCnt, True, wingItemExpInfo, dogzEquipPlusExp, decompoundItemInfo, itemExpireTime) if compoundUnBindCnt > 0: - userData = __GivePlayerCompoundItem(curPlayer, newItemID, compoundUnBindCnt, False, wingItemExpInfo, dogzEquipPlusExp, decompoundItemInfo) + userData = __GivePlayerCompoundItem(curPlayer, newItemID, compoundUnBindCnt, False, wingItemExpInfo, dogzEquipPlusExp, decompoundItemInfo, itemExpireTime) if not userData: return "" return userData -def __GivePlayerCompoundItem(curPlayer, newItemID, itemCount, isBind, wingItemExpInfo, dogzEquipPlusExp, decompoundItemInfo): +def __GivePlayerCompoundItem(curPlayer, newItemID, itemCount, isBind, wingItemExpInfo, dogzEquipPlusExp, decompoundItemInfo, expireTime): playerID = curPlayer.GetPlayerID() - curSingleItem = ItemControler.GetOutPutItemObj(newItemID, itemCount, isBind) + curSingleItem = ItemControler.GetOutPutItemObj(newItemID, itemCount, isBind, expireTime) if not curSingleItem: GameWorld.ErrLog("创造物品失败, give item itemid:%s,count:%s" % (newItemID, itemCount), playerID) return -- Gitblit v1.8.0