From 1579f778ac32e4a62e830f52611715c5c7c5a307 Mon Sep 17 00:00:00 2001 From: xdh <xiefantasy@qq.com> Date: 星期四, 04 七月 2019 11:48:21 +0800 Subject: [PATCH] 7803 【2.0.200】【后端】灵根升品显示特效 --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTreasure.py | 71 ++++++++++++++++++++++------------- 1 files changed, 45 insertions(+), 26 deletions(-) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTreasure.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTreasure.py index 7efc8a7..0a9481c 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTreasure.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTreasure.py @@ -28,6 +28,7 @@ import NetPackCommon import PlayerBossReborn import PlayerFairyCeremony +import PlayerNewFairyCeremony import ItemCommon import ChConfig @@ -70,7 +71,7 @@ treasureType = clientData.TreasureType treasureIndex = clientData.TreasureIndex costType = clientData.CostType - + isFreeType = 1 if costType == 1 else 0 GameWorld.DebugLog("玩家寻宝: treasureType=%s,treasureIndex=%s,costType=%s,playerLV=%s" % (treasureType, treasureIndex, costType, playerLV), playerID) @@ -89,8 +90,8 @@ return packType = ShareDefine.rptTreasure - if treasureType == 2: - packType = ShareDefine.rptRune + #if treasureType == 2: + # packType = ShareDefine.rptRune if not ItemCommon.CheckPackHasSpace(curPlayer, packType, True): GameWorld.DebugLog("对应寻宝背包没有空格子!packType=%s" % packType, playerID) @@ -113,15 +114,27 @@ # 寻宝道具, 目前默认消耗1个 elif costType == 2: costItemList = IpyGameDataPY.GetFuncEvalCfg(TreasureSet1, 3) # 消耗道具物品ID列表 - costItemID = costItemList[treasureIndex] - if not costItemID: + if not costItemList: GameWorld.ErrLog("该寻宝类型索引不支持消耗道具寻宝!treasureType=%s,treasureIndex=%s" % (treasureType, treasureIndex), playerID) return - - costItem = ItemCommon.FindItemInPackByItemID(curPlayer, costItemID, IPY_GameWorld.rptItem) - if not costItem: - GameWorld.DebugLog("寻宝消耗道具不足!costItemID=%s" % (costItemID), playerID) + costItemID, costItemNeedCount = costItemList[treasureIndex] + if not costItemID or not costItemNeedCount: return + costItemIndexList, bindCnt, unBindCnt = ItemCommon.GetPackItemBindStateIndexInfo(curPlayer, costItemID) + lackCount = max(0, costItemNeedCount - bindCnt - unBindCnt) + delCostItemCount = costItemNeedCount - lackCount + lackCountCostMoney = 0 + if lackCount > 0: + lackCountCostMoney = ItemCommon.GetAutoBuyItemNeedGold({costItemID:lackCount}) + if lackCountCostMoney: + moneyType = IPY_GameWorld.TYPE_Price_Gold_Money + infoDict = {ChConfig.Def_Cost_Reason_SonKey:costItemID} + if not PlayerControl.HaveMoney(curPlayer, moneyType, lackCountCostMoney): + return + else: + GameWorld.DebugLog("寻宝消耗道具不足!costItemID=%s,costItemNeedCount=%s,bindCnt=%s,unBindCnt=%s" + % (costItemID, costItemNeedCount, bindCnt, unBindCnt), playerID) + return # 仙玉寻宝 else: @@ -147,19 +160,18 @@ commItemRateList = GetUpdLuckyItemRateList(ipyData, curLuck, luckFormula, costType) # 常规产出物品格子饼图,幸运物品概率已变更 - curTreasureCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreasureCount % (treasureType)) # 当前已寻宝次数 + curTreasureCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreasureCount % (treasureType, isFreeType)) # 当前已寻宝次数 updTreasureCount = curTreasureCount + treasureCount - beSureCountDict = ipyData.GetGridItemRateList3() # 第x次必出产出格子编号饼图 + beSureCountDict = ipyData.GetFreeGridItemRateList3() if isFreeType else ipyData.GetGridItemRateList3() # 第x次必出产出格子编号饼图 GameWorld.DebugLog("已经寻宝次数=%s,当前幸运=%s,commItemRateList=%s" % (curTreasureCount, curLuck, commItemRateList), playerID) - - addScore = IpyGameDataPY.GetFuncEvalCfg(TreasureSet1, 5)[treasureIndex] # 增加积分 - ensureCount = IpyGameDataPY.GetFuncCfg("TreasureSet", 1) # 每多少次触发保底产出库 - + addScore = 0 if isFreeType else IpyGameDataPY.GetFuncEvalCfg(TreasureSet1, 5)[treasureIndex] # 增加积分 + ensureCount = IpyGameDataPY.GetFuncEvalCfg("TreasureSet", 1, {})[isFreeType] # 每多少次触发保底产出库 + ensureRateList = ipyData.GetFreeGridItemRateList2() if isFreeType else ipyData.GetGridItemRateList2() goodGridNumList = [ipyData.GetLuckyGridNum()] # 好物品格子编号 (幸运物品 + 必出 + 保底) - for gridRateList in ipyData.GetGridItemRateList3().values(): + for gridRateList in beSureCountDict.values(): for gridRateInfo in gridRateList: goodGridNumList.append(gridRateInfo[1]) - for gridRateInfo in ipyData.GetGridItemRateList2(): + for gridRateInfo in ensureRateList: goodGridNumList.append(gridRateInfo[1]) GameWorld.DebugLog("goodGridNumList=%s" % goodGridNumList, playerID) @@ -180,7 +192,7 @@ gridNum = GameWorld.GetResultByRandomList(gridNumRateList) GameWorld.DebugLog("到达次数必出,updTreasureCount=%s,gridNumRateList=%s,gridNum=%s" % (updTreasureCount, gridNumRateList, gridNum), playerID) elif updTreasureCount % ensureCount == 0: - gridNumRateList = ipyData.GetGridItemRateList2() + gridNumRateList = ensureRateList gridNum = GameWorld.GetResultByRandomList(gridNumRateList) GameWorld.DebugLog("满次数保底出,updTreasureCount=%s,gridNumRateList=%s,gridNum=%s" % (updTreasureCount, gridNumRateList, gridNum), playerID) else: @@ -204,11 +216,11 @@ # 3. 次数保底 ensureGridNumList = [] if updTreasureCount / ensureCount > curTreasureCount / ensureCount: - for gridInfo in ipyData.GetGridItemRateList2(): + for gridInfo in ensureRateList: ensureGridNumList.append(gridInfo[1]) - gridNum = GameWorld.GetResultByRandomList(ipyData.GetGridItemRateList2()) + gridNum = GameWorld.GetResultByRandomList(ensureRateList) getGridResult.append(gridNum) - GameWorld.DebugLog("满次数保底出,updTreasureCount=%s,gridNumRateList=%s,gridNum=%s" % (updTreasureCount, ipyData.GetGridItemRateList2(), gridNum), playerID) + GameWorld.DebugLog("满次数保底出,updTreasureCount=%s,gridNumRateList=%s,gridNum=%s" % (updTreasureCount, ensureRateList, gridNum), playerID) # 4. 常规产出 doCount = 200 @@ -296,29 +308,36 @@ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TreasureFreeTime % (treasureType, treasureIndex), curTime) GameWorld.DebugLog("消耗免费次数,更新免费CD计算时间: %s" % curTime, playerID) elif costType == 2: - ItemCommon.DelItem(curPlayer, costItem, 1, True, ChConfig.ItemDel_Treasure) - GameWorld.DebugLog("扣除寻宝道具,costItemID=%s" % costItemID, playerID) + ItemCommon.DelCostItemByBind(curPlayer, costItemIndexList, bindCnt, unBindCnt, delCostItemCount, ChConfig.ItemDel_Treasure) + GameWorld.DebugLog("扣除寻宝道具,costItemID=%s,delCostItemCount=%s" % (costItemID, delCostItemCount), playerID) + if lackCountCostMoney: + infoDict = {"TreasureType":treasureType, "TreasureIndex":treasureIndex, "CostItemID":costItemID, "LackCount":lackCount} + PlayerControl.PayMoney(curPlayer, moneyType, lackCountCostMoney, ChConfig.Def_Cost_Treasure, infoDict, lackCount) else: infoDict = {"TreasureType":treasureType, "TreasureIndex":treasureIndex} PlayerControl.PayMoney(curPlayer, IPY_GameWorld.TYPE_Price_Gold_Money, costGold, ChConfig.Def_Cost_Treasure, infoDict) GameWorld.DebugLog("扣除仙玉,costGold=%s" % costGold, playerID) # 加数据 - PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TreasureCount % (treasureType), updTreasureCount) + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TreasureCount % (treasureType, isFreeType), updTreasureCount) if ipyData.GetLuckyGridNum() in getGridResult: updLuck = 0 PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TreasureLuck % (treasureType), updLuck) PlayerControl.GiveMoney(curPlayer, ShareDefine.TYPE_Price_TreasureScore, addScore) - PlayerBossReborn.AddBossRebornActionCnt(curPlayer, ChConfig.Def_BRAct_Treasure, treasureCount) + if treasureType == 2: PlayerFairyCeremony.AddFCPartyActionCnt(curPlayer, ChConfig.Def_PPAct_RuneTreasure, treasureCount) + PlayerNewFairyCeremony.AddFCPartyActionCnt(curPlayer, ChConfig.Def_PPAct_RuneTreasure, treasureCount) + PlayerBossReborn.AddBossRebornActionCnt(curPlayer, ChConfig.Def_BRAct_RuneTreasure, treasureCount) else: PlayerFairyCeremony.AddFCPartyActionCnt(curPlayer, ChConfig.Def_PPAct_Treasure, treasureCount) + PlayerNewFairyCeremony.AddFCPartyActionCnt(curPlayer, ChConfig.Def_PPAct_Treasure, treasureCount) + PlayerBossReborn.AddBossRebornActionCnt(curPlayer, ChConfig.Def_BRAct_Treasure, treasureCount) # 给物品 mailItemList = [] itemControl = ItemControler.PlayerItemControler(curPlayer) for gridNum, itemID, itemCount, isBind in treasureResult: - itemObj = ItemControler.GetOutPutItemObj(itemID, itemCount, isBind) + itemObj = ItemControler.GetOutPutItemObj(itemID, itemCount, False, curPlayer=curPlayer) mailItemDict = ItemCommon.GetMailItemDict(itemObj) if int(gridNum) in goodGridNumList: -- Gitblit v1.8.0