| | |
| | | curPlayer.Sync_TimeTick(timeType, 0, diffSecond * 1000, True)
|
| | | return updGrade
|
| | |
|
| | | def UpdateCustomFBGrade(curPlayer, tick, gradeTimeList, timeType=IPY_GameWorld.tttFlagTake):
|
| | | '''更新当前副本星级、评级
|
| | | @param gradeTimeList: 评级分段时间列表,单位秒 [最高评级可用时间, 下级可用时间, ..., 最低级可用时间]
|
| | | @param curPlayer: 触发的玩家,一般是DoEnter时调用,会同步更新一次副本评级并将信息通知该玩家
|
| | | @note: 星级:1-1星;2-2星 ... [60, 20, 10]
|
| | | 评级:1-D;2-C;3-B;4-A;5-S; [60, 30, 30, 20, 10]
|
| | | '''
|
| | | lowest = 1
|
| | | curGrade = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_ClientCustomSceneGrade)
|
| | | #最后一个评级了,不再处理
|
| | | if curGrade == lowest:
|
| | | return curGrade
|
| | | |
| | | fbStepTick = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_ClientCustomSceneStepTick)
|
| | | useSecond = int((tick - fbStepTick) / 1000.0) # 战斗阶段已耗总秒数
|
| | | diffSecond = 0
|
| | | updGrade = len(gradeTimeList)
|
| | | gSecondTotal = 0
|
| | | for gSecond in gradeTimeList:
|
| | | gSecondTotal += gSecond
|
| | | diffSecond = gSecondTotal - useSecond
|
| | | # 还在当前评级段
|
| | | if diffSecond > 0:
|
| | | break
|
| | | updGrade -= 1 # 用时超过当前评级段,降级
|
| | | updGrade = max(lowest, updGrade) # 保底最低级
|
| | | if curGrade == updGrade:
|
| | | return curGrade
|
| | | curPlayer.SetDict(ChConfig.Def_PlayerKey_ClientCustomSceneGrade, updGrade)
|
| | | |
| | | GameWorld.DebugLog("UpdateCustomFBGrade useSecond=%s,gradeTimeList=%s,curGrade=%s,updGrade=%s,diffSecond=%s" |
| | | % (useSecond, gradeTimeList, curGrade, updGrade, diffSecond))
|
| | | |
| | | if updGrade != lowest:
|
| | | curPlayer.Sync_TimeTick(timeType, 0, diffSecond * 1000, True)
|
| | | return updGrade
|
| | |
|
| | | def NotifyFBOver(curPlayer, dataMapID, lineID, isPass, overDict={}):
|
| | | ## 通知玩家副本总结, 该函数统一几个必带参数
|
| | | overDict.update({Over_dataMapID:dataMapID, Over_lineID:lineID, Over_isPass:int(isPass)})
|