From 99cc9156388d474f9923e4ee6308ce1886c9595b Mon Sep 17 00:00:00 2001 From: xdh <xiefantasy@qq.com> Date: 星期四, 16 八月 2018 13:42:09 +0800 Subject: [PATCH] fix:2589 装备分解满级后分解处理 --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEquipDecompose.py | 65 ++++++++++++-------------------- 1 files changed, 24 insertions(+), 41 deletions(-) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEquipDecompose.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEquipDecompose.py index 912a040..36db689 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEquipDecompose.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEquipDecompose.py @@ -70,15 +70,14 @@ # 吞噬物品, 返回被吞数量 def EatItems(curPlayer, eatIndexList): - eatItemList, totalAddExp = __GetCanEatItemInfo(curPlayer, eatIndexList) + drDelItemList, totalAddExp, delAllCnt = __GetCanEatItemInfo(curPlayer, eatIndexList) if not totalAddExp: GameWorld.DebugLog(" 装备吸收 没有可吞噬物品!") return 0, 0 LV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipDecomposeLV) Exp = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipDecomposeExp) reduceTotalExp, updLV, updExp = __GetEatItemResult(curPlayer, LV, Exp, totalAddExp) - # 扣除吞噬物品 - drDelItemList, delAllCnt = __DelEatItem(curPlayer, reduceTotalExp, eatItemList) + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_EquipDecomposeExp, updExp) if LV != updLV: PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_EquipDecomposeLV, updLV) @@ -129,6 +128,7 @@ def __GetCanEatItemInfo(curPlayer, expIndexList): eatItemList = [] totalAddExp = 0 + allitemCnt = 0 petEatItemAddExpPer = PlayerVip.GetPrivilegeValue(curPlayer, ChConfig.VIPPrivilege_EatItem) itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem) for index in expIndexList: @@ -149,19 +149,24 @@ GameWorld.DebugLog(" tagPetEatEquip.txt,未配置该物品! eatItemID=%s, EquipColor=%s,EquipClass=%s" % (eatItemID, itemColor, itemClass)) continue baseExp = ipyData.GetExp() - if petEatItemAddExpPer: - baseExp += baseExp * petEatItemAddExpPer / ChConfig.Def_MaxRateValue + itemCnt = eatItem.GetCount() # 装备一般默认1,如是经验道具则一般可叠加 addExp = baseExp * itemCnt totalAddExp += addExp + allitemCnt += itemCnt + ItemCommon.DelItem(curPlayer, eatItem, itemCnt, True, ChConfig.ItemDel_EquipDecompose) - GameWorld.DebugLog(" i=%s,baseExp=%s,itemCnt=%s,addExp=%s,totalAddExp=%s" + + GameWorld.DebugLog(" 吸收 删除物品 i=%s,baseExp=%s,itemCnt=%s,addExp=%s,totalAddExp=%s" % (index, baseExp, itemCnt, addExp, totalAddExp)) # 先检索可吃列表,防止升级过程中吃掉原来不可吃的[index, 物品实例, 基础经验] - eatItemList.append([index, eatItem, baseExp]) - - return eatItemList, totalAddExp + eatItemList.append([eatItemID, itemCnt, baseExp, addExp]) + if petEatItemAddExpPer: + totalAddExp += totalAddExp * petEatItemAddExpPer / ChConfig.Def_MaxRateValue + + PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_DecomposeEquip, allitemCnt) + return eatItemList, totalAddExp, allitemCnt ##获取吞噬结果 @@ -170,12 +175,17 @@ def __GetEatItemResult(curPlayer, LV, Exp, totalAddExp): remainExp = totalAddExp # 剩余可用经验 reduceTotalExp = 0 # 真正需要扣除的经验 + ipyMgr = IpyGameDataPY.IPY_Data() + maxLV = ipyMgr.GetEquipDecomposeByIndex(ipyMgr.GetEquipDecomposeCount()-1).GetLV() # 经验检查 while remainExp > 0: + if LV +1 >= maxLV: + break maxExp = __GetLvUpNeedExp(LV) if not maxExp: break + needExp = max(0, maxExp - Exp) if remainExp >= needExp: Exp = 0 @@ -187,46 +197,19 @@ reduceTotalExp += remainExp remainExp = 0 + #等级满后也可以分解加经验,故所有装备都分解 + Exp += remainExp + reduceTotalExp = totalAddExp GameWorld.DebugLog("总可加经验=%s,实际总扣除经验=%s,newLV=%s,最终经验=%s" % (totalAddExp, reduceTotalExp, LV, Exp)) return reduceTotalExp, LV, Exp -##扣除吞噬物品 -# @param curPlayer: 玩家实例 -# @return -def __DelEatItem(curPlayer, reduceTotalExp, eatItemList): - drDelItemList = [] - delAllCnt = 0 #删除物品总个数 - # 扣物品 - for index, eatItem, baseExp in eatItemList: - eatItemID = eatItem.GetItemTypeID() - curItemCnt = eatItem.GetCount() - curItemTotalExp = baseExp * curItemCnt - if reduceTotalExp >= curItemTotalExp: - delCnt = curItemCnt - reduceTotalExp -= curItemTotalExp - else: - delCnt = int(math.ceil(reduceTotalExp / float(baseExp))) - reduceTotalExp = 0 - - addExp = delCnt * baseExp - delAllCnt += delCnt - # 这里不记录流向, 在外部统一记录 - ItemCommon.DelItem(curPlayer, eatItem, delCnt, True, ChConfig.ItemDel_EquipDecompose) - GameWorld.DebugLog(" 吸收 删除物品 i=%s,delCnt=%s,addExp=%s" % (index, delCnt, addExp)) - PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_DecomposeEquip, delCnt) - drDelItemList.append((eatItemID, delCnt, baseExp, addExp)) - if reduceTotalExp <= 0: - break - - return drDelItemList, delAllCnt - def __GetLvUpNeedExp(lv): """获取装备分解升级需要经验""" - lv += 1 #配置的等级从1开始 - ipyData = IpyGameDataPY.GetIpyGameData("EquipDecompose", lv) + #配置的等级从1开始 + ipyData = IpyGameDataPY.GetIpyGameData("EquipDecompose", lv+1) if not ipyData: return 0 return ipyData.GetUpNeedExp() -- Gitblit v1.8.0