|  |  |  | 
|---|
|  |  |  | GameWorld.DebugLog("上一层非最大评级过关,无法挑战下一层!lineID=%s,preLineID=%s,preLineGrade=%s,maxGrade=%s" | 
|---|
|  |  |  | % (lineId, preLineID, preLineGrade, maxGrade), curPlayer.GetPlayerID()) | 
|---|
|  |  |  | return False | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #判断战力是否满足本层要求 | 
|---|
|  |  |  | helpIpyData = IpyGameDataPY.GetIpyGameData("FBHelpBattle", mapID, lineId) | 
|---|
|  |  |  | if helpIpyData: | 
|---|
|  |  |  | if curPlayer.GetFightPower() < helpIpyData.GetFightPowerMin(): | 
|---|
|  |  |  | GameWorld.DebugLog("战力不足%s,无法挑战本层!lineID=%s" % (helpIpyData.GetFightPowerMin(), lineId), curPlayer.GetPlayerID()) | 
|---|
|  |  |  | return False | 
|---|
|  |  |  | return True | 
|---|
|  |  |  |  | 
|---|
|  |  |  | ## 进入传送点 | 
|---|
|  |  |  | 
|---|
|  |  |  | helpIpyData = IpyGameDataPY.GetIpyGameData("FBHelpBattle", ChConfig.Def_FBMapID_QueenRelics, lineID) | 
|---|
|  |  |  | if helpIpyData: | 
|---|
|  |  |  | gameFB.SetGameFBDict(ChConfig.FBPD_HelpBattleFBBaseHurt, helpIpyData.GetRobotBaseHurt()) | 
|---|
|  |  |  | gameFB.SetGameFBDict(ChConfig.FBPD_HelpBattleFBFightPower, helpIpyData.GetFightPowerMin()) | 
|---|
|  |  |  | gameFB.SetGameFBDict(ChConfig.FBPD_HelpBattleFBFightPower, helpIpyData.GetGetFightPowerMin()) | 
|---|
|  |  |  | GameWorld.DebugLog("    更新副本助战机器人基础伤害: lineID=%s,RobotBaseHurt=%s,fbFightPower=%s" | 
|---|
|  |  |  | % (lineID, helpIpyData.GetRobotBaseHurt(), helpIpyData.GetFightPowerMin())) | 
|---|
|  |  |  | % (lineID, helpIpyData.GetRobotBaseHurt(), helpIpyData.GetGetFightPowerMin())) | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | ##副本总逻辑计时器 | 
|---|
|  |  |  | 
|---|
|  |  |  | fbLineTime = FBCommon.GetFBLineStepTime(ChConfig.Def_FBMapID_QueenRelics, lineID) | 
|---|
|  |  |  | rewardRateList = FBCommon.GetFBGradeRewardRateList(mapID) | 
|---|
|  |  |  | maxGrade = len(rewardRateList) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | curPlayer = FBCommon.GetCurSingleFBPlayer() | 
|---|
|  |  |  | if not curPlayer: | 
|---|
|  |  |  | return | 
|---|
|  |  |  | nextLineID = 0 | 
|---|
|  |  |  | # 最高评级过关,可挑战下一关 | 
|---|
|  |  |  | if isPass and grade >= maxGrade: | 
|---|
|  |  |  | nextLineIpyData = FBCommon.GetFBLineIpyData(mapID, lineID + 1, False) | 
|---|
|  |  |  | nextLineID = 0 if not nextLineIpyData else (lineID + 1) # 找不到想下一层数据代表通关 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if nextLineID: | 
|---|
|  |  |  | helpIpyData = IpyGameDataPY.GetIpyGameData("FBHelpBattle", mapID, nextLineID) | 
|---|
|  |  |  | if helpIpyData and curPlayer.GetFightPower() < helpIpyData.GetFightPowerMin(): | 
|---|
|  |  |  | nextLineID = 0 #战力不足,则不可挑战下一关 | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | gameFB = GameWorld.GetGameFB() | 
|---|
|  |  |  | gameFB.SetGameFBDict(FBKey_NextLineID, nextLineID) | 
|---|
|  |  |  | GameWorld.DebugLog("开始过关结算: lineID=%s,grade=%s,isPass=%s,nextLineID=%s" % (lineID, grade, isPass, nextLineID)) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | playerManager = GameWorld.GetMapCopyPlayerManager() | 
|---|
|  |  |  | for index in xrange(playerManager.GetPlayerCount()): | 
|---|
|  |  |  | curPlayer = playerManager.GetPlayerByIndex(index) | 
|---|
|  |  |  | if not curPlayer: | 
|---|
|  |  |  | continue | 
|---|
|  |  |  | DoFBHelp(curPlayer, tick) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | playerID = curPlayer.GetPlayerID() | 
|---|
|  |  |  | rewardLine = gameFB.GetPlayerGameFBDictByKey(playerID, FBPKey_RewardLine) | 
|---|
|  |  |  | needSyncFBData = False | 
|---|
|  |  |  | overDict = {} | 
|---|
|  |  |  | if isPass: | 
|---|
|  |  |  | overDict = {FBCommon.Over_costTime:costTime, FBCommon.Over_grade:grade} | 
|---|
|  |  |  | #    playerManager = GameWorld.GetMapCopyPlayerManager() | 
|---|
|  |  |  | #    for index in xrange(playerManager.GetPlayerCount()): | 
|---|
|  |  |  | #        curPlayer = playerManager.GetPlayerByIndex(index) | 
|---|
|  |  |  | #        if not curPlayer: | 
|---|
|  |  |  | #            continue | 
|---|
|  |  |  | DoFBHelp(curPlayer, tick) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | playerID = curPlayer.GetPlayerID() | 
|---|
|  |  |  | rewardLine = lineID #gameFB.GetPlayerGameFBDictByKey(playerID, FBPKey_RewardLine) 改成只给本层奖励 | 
|---|
|  |  |  | needSyncFBData = False | 
|---|
|  |  |  | overDict = {} | 
|---|
|  |  |  | if isPass: | 
|---|
|  |  |  | overDict = {FBCommon.Over_costTime:costTime, FBCommon.Over_grade:grade} | 
|---|
|  |  |  | 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":startRewardLineID}) | 
|---|
|  |  |  | if lineID+1 > curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FBHistoryMaxLine % dataMapID): | 
|---|
|  |  |  | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FBHistoryMaxLine % dataMapID, lineID+1) | 
|---|
|  |  |  | #成就 | 
|---|
|  |  |  | if grade >= maxGrade: | 
|---|
|  |  |  | PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_QueenRelics, 1, [lineID+1]) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | EventShell.EventRespons_PassQueenRelecs(curPlayer, lineID, grade) | 
|---|
|  |  |  | #任务 | 
|---|
|  |  |  | EventShell.EventRespons_FBEvent(curPlayer, "queenrelics_pass") | 
|---|
|  |  |  | if lineID+1 > curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FBHistoryMaxLine % dataMapID): | 
|---|
|  |  |  | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FBHistoryMaxLine % dataMapID, lineID+1) | 
|---|
|  |  |  | #成就 | 
|---|
|  |  |  | if grade >= maxGrade: | 
|---|
|  |  |  | PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_QueenRelics, 1, [lineID+1]) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | # 记录结算到的线路层,记录值+1 | 
|---|
|  |  |  | updRewardLine = lineID + 1 | 
|---|
|  |  |  | gameFB.SetPlayerGameFBDict(playerID, FBPKey_RewardLine, updRewardLine) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if isPass and not rewardLine: | 
|---|
|  |  |  | isInFBOnDay = gameFB.GetPlayerGameFBDictByKey(playerID, FBPKey_IsInFBOnDay) | 
|---|
|  |  |  | if not isInFBOnDay: | 
|---|
|  |  |  | GameWorld.DebugLog("首次结算奖励,增加挑战次数!", playerID) | 
|---|
|  |  |  | needSyncFBData = True | 
|---|
|  |  |  | FBCommon.AddEnterFBCount(curPlayer, dataMapID) | 
|---|
|  |  |  | addXianyuanCoin, reason = FBHelpBattle.DoFBAddXianyuanCoin(curPlayer, mapID, lineID) | 
|---|
|  |  |  | overDict[FBCommon.Over_xianyuanCoin] = [addXianyuanCoin, reason] | 
|---|
|  |  |  | else: | 
|---|
|  |  |  | GameWorld.DebugLog("副本中过天,不增加挑战次数!", playerID) | 
|---|
|  |  |  | PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_QueenRelicsEx, 1) | 
|---|
|  |  |  | PlayerWeekParty.AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_QueenRelices, 1) | 
|---|
|  |  |  | PlayerActLogin.AddLoginAwardActionCnt(curPlayer, ChConfig.Def_LoginAct_QueenRelices, 1) | 
|---|
|  |  |  | # 不可再挑战下一关了 | 
|---|
|  |  |  | if not nextLineID: | 
|---|
|  |  |  | curPlayer.Sync_TimeTick(IPY_GameWorld.tttLeaveMap, 0, fbLineTime[Def_LeaveTime] * 1000, True) | 
|---|
|  |  |  | EventShell.EventRespons_PassQueenRelecs(curPlayer, lineID, grade) | 
|---|
|  |  |  | #任务 | 
|---|
|  |  |  | EventShell.EventRespons_FBEvent(curPlayer, "queenrelics_pass") | 
|---|
|  |  |  |  | 
|---|
|  |  |  | # 记录结算到的线路层,记录值+1 | 
|---|
|  |  |  | updRewardLine = lineID + 1 | 
|---|
|  |  |  | gameFB.SetPlayerGameFBDict(playerID, FBPKey_RewardLine, updRewardLine) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if isPass and not nextLineID: | 
|---|
|  |  |  | isInFBOnDay = gameFB.GetPlayerGameFBDictByKey(playerID, FBPKey_IsInFBOnDay) | 
|---|
|  |  |  | if not isInFBOnDay: | 
|---|
|  |  |  | GameWorld.DebugLog("首次结算奖励,增加挑战次数!", playerID) | 
|---|
|  |  |  | needSyncFBData = True | 
|---|
|  |  |  | FBCommon.AddEnterFBCount(curPlayer, dataMapID) | 
|---|
|  |  |  | addXianyuanCoin, reason = FBHelpBattle.DoFBAddXianyuanCoin(curPlayer, mapID, lineID) | 
|---|
|  |  |  | overDict[FBCommon.Over_xianyuanCoin] = [addXianyuanCoin, reason] | 
|---|
|  |  |  | else: | 
|---|
|  |  |  | curPlayer.Sync_TimeTick(IPY_GameWorld.tttFBAddTime, 0, fbLineTime[Def_LeaveTime] * 1000, True) | 
|---|
|  |  |  | GameWorld.DebugLog("    可进入下一关: updRewardLine=%s,nextLineID=%s" % (updRewardLine, nextLineID), playerID) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if needSyncFBData: | 
|---|
|  |  |  | FBCommon.Sync_FBPlayerFBInfoData(curPlayer, dataMapID) # 同步信息 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | FBCommon.NotifyFBOver(curPlayer, dataMapID, lineID, isPass, overDict) | 
|---|
|  |  |  | GameWorld.DebugLog("副本中过天,不增加挑战次数!", playerID) | 
|---|
|  |  |  | PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_QueenRelicsEx, 1) | 
|---|
|  |  |  | PlayerWeekParty.AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_QueenRelices, 1) | 
|---|
|  |  |  | PlayerActLogin.AddLoginAwardActionCnt(curPlayer, ChConfig.Def_LoginAct_QueenRelices, 1) | 
|---|
|  |  |  | # 不可再挑战下一关了 | 
|---|
|  |  |  | if not nextLineID: | 
|---|
|  |  |  | curPlayer.Sync_TimeTick(IPY_GameWorld.tttLeaveMap, 0, fbLineTime[Def_LeaveTime] * 1000, True) | 
|---|
|  |  |  | else: | 
|---|
|  |  |  | curPlayer.Sync_TimeTick(IPY_GameWorld.tttFBAddTime, 0, fbLineTime[Def_LeaveTime] * 1000, True) | 
|---|
|  |  |  | GameWorld.DebugLog("    可进入下一关: updRewardLine=%s,nextLineID=%s" % (updRewardLine, nextLineID), playerID) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if needSyncFBData: | 
|---|
|  |  |  | FBCommon.Sync_FBPlayerFBInfoData(curPlayer, dataMapID) # 同步信息 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | FBCommon.NotifyFBOver(curPlayer, dataMapID, lineID, isPass, overDict) | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __GivePlayerQueenRelicsReward(curPlayer, dataMapID, rewardLineID, curLineID, passGrade, maxGrade, rewardRateList): | 
|---|
|  |  |  | 
|---|
|  |  |  | if not toLineIpyData: | 
|---|
|  |  |  | GameWorld.ErrLog("没有目标功能线路!toLineID=%s" % toLineID) | 
|---|
|  |  |  | return | 
|---|
|  |  |  | #判断战力是否满足本层要求 | 
|---|
|  |  |  | helpIpyData = IpyGameDataPY.GetIpyGameData("FBHelpBattle", mapID, toLineID) | 
|---|
|  |  |  | if helpIpyData: | 
|---|
|  |  |  | if curPlayer.GetFightPower() < helpIpyData.GetFightPowerMin(): | 
|---|
|  |  |  | GameWorld.DebugLog("战力不足%s,无法挑战下一层!toLineID=%s" % (helpIpyData.GetFightPowerMin(), toLineID), curPlayer.GetPlayerID()) | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if curPlayer.GetPlayerAction() == IPY_GameWorld.paDie: | 
|---|
|  |  |  | GameWorld.Log("进入下一层时玩家是死亡状态,先复活!", curPlayer.GetPlayerID()) | 
|---|