| | |
| | | needSyncFBData = False
|
| | | 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)
|
| | |
|
| | | overDict = {FBCommon.Over_costTime:costTime, FBCommon.Over_grade:grade}
|
| | | |
| | | if not nextLineID:#没有下一层则给奖励!!
|
| | | rewardRet = __GivePlayerQueenRelicsReward(curPlayer, dataMapID, rewardLine - 1, lineID, grade, maxGrade, rewardRateList)
|
| | | if rewardRet:
|
| | | 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)
|
| | |
| | | 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())
|
| | |
| | | rewardGrade = maxGrade if giveLineID < curLineID else passGrade
|
| | |
|
| | | 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"
|
| | |
| | | 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:
|
| | |
| | | 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 startRewardLineID, totalSP, rewardItemList
|
| | | GameWorld.DebugLog(" 总奖励:rewardItemList=%s" % (rewardItemList), curPlayer.GetPlayerID())
|
| | | return startRewardLineID, rewardItemList
|
| | |
|
| | |
|
| | | ## 副本行为
|