From 5619e084f4f0e33e30d92cfe5c9ab78c13243171 Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期四, 12 九月 2019 19:53:48 +0800 Subject: [PATCH] 8262 【主干】【后端】仙盟宴会及传功优化 --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_QueenRelics.py | 53 +++++++++++++++++++++++++++-------------------------- 1 files changed, 27 insertions(+), 26 deletions(-) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_QueenRelics.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_QueenRelics.py index bdf641a..2a47654 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_QueenRelics.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_QueenRelics.py @@ -504,11 +504,24 @@ overDict = {} if isPass: overDict = {FBCommon.Over_costTime:costTime, FBCommon.Over_grade:grade} + curGrade = GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_PlayerFBStar_MapId, lineID, False, [dataMapID]) + if curGrade < grade: + GameWorld.DebugLog(" 更新过关评级: dataMapID=%s,lineID=%s,curGrade=%s,rewardGrade=%s" + % (dataMapID, lineID, curGrade, grade), curPlayer.GetPlayerID()) + GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_PlayerFBStar_MapId, lineID, grade, False, [dataMapID]) + needSyncFBData = True + if grade >= maxGrade: #首次S级奖励 + lineReward = FBCommon.GetFBLineReward(dataMapID, lineID) + firstrewardItemList = [[itemID,itemCnt,0] for itemID,itemCnt in lineReward[0]] + ItemControler.GivePlayerItemOrMail(curPlayer, firstrewardItemList, 'QueenRelicsMail', event=["QueenRelics", False, {}]) + overDict[FBCommon.Over_firstPassItem] = FBCommon.GetJsonItemList(firstrewardItemList) + + if not nextLineID:#没有下一层则给奖励!! rewardRet = __GivePlayerQueenRelicsReward(curPlayer, dataMapID, rewardLine - 1, lineID, grade, maxGrade, rewardRateList) if rewardRet: - needSyncFBData, startRewardLineID, totalSP, rewardItemList = rewardRet - overDict.update({FBCommon.Over_sp:totalSP, FBCommon.Over_itemInfo:FBCommon.GetJsonItemList(rewardItemList), + startRewardLineID, rewardItemList = rewardRet + overDict.update({FBCommon.Over_itemInfo:FBCommon.GetJsonItemList(rewardItemList), "startRewardLineID":startRewardLineID}) if lineID+1 > curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FBHistoryMaxLine % dataMapID): PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FBHistoryMaxLine % dataMapID, lineID+1) @@ -528,7 +541,7 @@ isInFBOnDay = gameFB.GetPlayerGameFBDictByKey(playerID, FBPKey_IsInFBOnDay) if not isInFBOnDay: GameWorld.DebugLog("首次结算奖励,增加挑战次数!", playerID) - needSyncFBData = True + needSyncFBData = False FBCommon.AddEnterFBCount(curPlayer, dataMapID) addXianyuanCoin, reason = FBHelpBattle.DoFBAddXianyuanCoin(curPlayer, mapID, lineID) overDict[FBCommon.Over_xianyuanCoin] = [addXianyuanCoin, reason] @@ -553,30 +566,21 @@ def __GivePlayerQueenRelicsReward(curPlayer, dataMapID, rewardLineID, curLineID, passGrade, maxGrade, rewardRateList): ## 给玩家过关奖励 - totalSP = 0 totalItemCountDict = {} - # 一般是不可能,这里做个理论数值防范 if rewardLineID >= curLineID: GameWorld.ErrLog("玩家重复结算娲皇过关奖励!rewardLineID=%s >= curLineID=%s" % (rewardLineID, curLineID), curPlayer.GetPlayerID()) return startRewardLineID = rewardLineID + 1 - needSyncFBData = False + # 统计奖励,本关卡之前的都给最高级奖励, 当前层以本次评级为准 for giveLineID in xrange(startRewardLineID, curLineID + 1): rewardGrade = maxGrade if giveLineID < curLineID else passGrade - curGrade = GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_PlayerFBStar_MapId, giveLineID, False, [dataMapID]) - if curGrade < rewardGrade: - GameWorld.DebugLog(" 更新过关评级: dataMapID=%s,giveLineID=%s,curGrade=%s,rewardGrade=%s" - % (dataMapID, giveLineID, curGrade, rewardGrade), curPlayer.GetPlayerID()) - GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_PlayerFBStar_MapId, giveLineID, rewardGrade, False, [dataMapID]) - needSyncFBData = True - + lineReward = FBCommon.GetFBLineReward(dataMapID, giveLineID) - rewardSP = lineReward[0] - rewardItemList = lineReward[1:] + rewardItemList = lineReward[1] rewardRateIndex = 0 if rewardGrade >= maxGrade else maxGrade - rewardGrade if rewardRateIndex < 0 or rewardRateIndex >= len(rewardRateList): GameWorld.ErrLog(" 评级对应奖励比例索引异常: giveLineID=%s,rewardGrade=%s,rewardRateList=%s,maxGrade=%s,rewardRateIndex=%s" @@ -585,29 +589,26 @@ rewardRate = rewardRateList[rewardRateIndex] if rewardRate < 100: - addSP = int(round(rewardSP * rewardRate / 100.0)) giveItemList = [] for itemID, itemCount in rewardItemList: rewardCount = max(1, int(round(itemCount * rewardRate / 100.0))) # 确保至少1个 giveItemList.append([itemID, rewardCount]) else: - addSP = rewardSP giveItemList = rewardItemList - GameWorld.DebugLog(" 给关卡奖励: giveLineID=%s,rewardGrade=%s,rewardRateList=%s,rewardRate=%s,addSP=%s,giveItemList=%s" - % (giveLineID, rewardGrade, rewardRateList, rewardRate, addSP, giveItemList), curPlayer.GetPlayerID()) + GameWorld.DebugLog(" 给关卡奖励: giveLineID=%s,rewardGrade=%s,rewardRateList=%s,rewardRate=%s,giveItemList=%s" + % (giveLineID, rewardGrade, rewardRateList, rewardRate, giveItemList), curPlayer.GetPlayerID()) - totalSP += addSP + for itemID, itemCount in giveItemList: totalItemCountDict[itemID] = totalItemCountDict.get(itemID, 0) + itemCount + # 给奖励 - PlayerControl.PlayerAddZhenQi(curPlayer, totalSP, eventName="QueenRelics") - rewardItemList = [] for itemID, itemCount in totalItemCountDict.items(): - rewardItemList.append([itemID, itemCount, 1]) - + rewardItemList.append([itemID, itemCount, 0]) + needSpace = len(rewardItemList) emptySpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem, needSpace) if emptySpace < needSpace: @@ -616,8 +617,8 @@ for itemID, itemCount, isBind in rewardItemList: ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, 0, [IPY_GameWorld.rptItem], event=["QueenRelics", False, {}]) - GameWorld.DebugLog(" 总奖励:totalSP=%s,rewardItemList=%s" % (totalSP, rewardItemList), curPlayer.GetPlayerID()) - return needSyncFBData, startRewardLineID, totalSP, rewardItemList + GameWorld.DebugLog(" 总奖励:rewardItemList=%s" % (rewardItemList), curPlayer.GetPlayerID()) + return startRewardLineID, rewardItemList ## 副本行为 -- Gitblit v1.8.0