| | |
| | | import PlayerControl
|
| | | import EventReport
|
| | | import PlayerGoldGift
|
| | |
|
| | | import PlayerMagicWeapon
|
| | |
|
| | | #---副本配置对应key值---
|
| | | (
|
| | |
| | | DL_RefreshCD, # 刷新间隔
|
| | | ) = range(7)
|
| | |
|
| | |
|
| | | #当前副本地图的状态
|
| | | (
|
| | | FB_Step_Open, # 副本开启
|
| | |
| | | FBPlayerDict_NPCRemainCnt = 'FBPlayerDict_NPCRemainCnt_%s' # NPC剩余数量
|
| | | FBPlayerDict_TotalExp = 'FBPlayerDict_TotalExp' # 获得的总经验
|
| | | FBPlayerDict_TotalExpPoint = 'FBPlayerDict_TotalExpPoint' # 获得的总经验点
|
| | | FBPlayerDict_Level = 'FBPlayerDict_Level' #关卡
|
| | | FBPlayerDict_MaxLevel = 'FBPlayerDict_MaxLevel' #最大关卡
|
| | |
|
| | |
|
| | | ##---获得副本配置---
|
| | |
| | |
|
| | |
|
| | | def GetClearDevilNPCCfg(lineID):
|
| | | level = GameWorld.GetGameFB().GetGameFBDictByKey(FBPlayerDict_Level)
|
| | | if level:
|
| | | ipyData = IpyGameDataPY.GetIpyGameDataByCondition('MagicWeaponFB', {'LineID':lineID, 'Level':level})
|
| | | if not ipyData:
|
| | | return []
|
| | | return ipyData.GetRefreshNPC()
|
| | | |
| | | mapID = GameWorld.GetMap().GetMapID()
|
| | | return FBCommon.GetFBLineRefreshNPC(mapID, lineID)
|
| | |
|
| | |
|
| | | def GetPointByNPCID(npcid):
|
| | | '''通过NPCID获取对应的积分'''
|
| | | npcPointDict = IpyGameDataPY.GetFuncEvalCfg('ClearDevilPoint', 2)
|
| | | return npcPointDict.get(npcid, 0)
|
| | |
|
| | |
|
| | | def GetIsPointFBType(lineID):
|
| | | #是否积分类副本
|
| | |
| | | if not FBLineStepTimeCfg:
|
| | | return
|
| | | return FBLineStepTimeCfg[Def_IsPointType]
|
| | |
|
| | |
|
| | | ## 是否能够通过活动查询进入
|
| | | # @param curPlayer 玩家实例
|
| | |
| | | mapID = FBCommon.GetRecordMapID(mapID)
|
| | | gameFB = GameWorld.GetGameFB()
|
| | | lineID = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_ReqFBFuncLine)
|
| | | GameWorld.DebugLog("DoEnterFB...lineID=%s,playerLV=%s" % (lineID, playerLV), playerID)
|
| | | level, maxLevel = 0, 0
|
| | | ipyDataList = IpyGameDataPY.GetIpyGameDataByCondition('MagicWeaponFB', {'LineID':lineID}, True)
|
| | | if ipyDataList:
|
| | | mwID = ipyDataList[0].GetMWID()
|
| | | level = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MWFBPassLevel % mwID)
|
| | | maxLevel = ipyDataList[-1].GetLevel()
|
| | | if level >= maxLevel:
|
| | | GameWorld.Log('DoEnterFB 已通关该线路最大关卡!! lineID=%s, maxLevel=%s' % (lineID, maxLevel))
|
| | | PlayerControl.PlayerLeaveFB(curPlayer)
|
| | | return
|
| | | level +=1
|
| | | GameWorld.DebugLog("DoEnterFB...lineID=%s,playerLV=%s, level=%s" % (lineID, playerLV, level), playerID)
|
| | | hadDelTicket = FBCommon.GetHadDelTicket(curPlayer)
|
| | | if not hadDelTicket:
|
| | | |
| | | gameFB.SetGameFBDict(FBPlayerDict_Level, level)
|
| | | gameFB.SetGameFBDict(FBPlayerDict_MaxLevel, maxLevel)
|
| | | |
| | | FBCommon.SetHadDelTicket(curPlayer)
|
| | | FBCommon.SetFBPropertyMark(lineID)
|
| | | |
| | | EventReport.WriteEvent_FB(curPlayer, mapID, 0, ChConfig.CME_Log_Start)
|
| | | # if mapID == ChConfig.Def_FBMapID_ClearDevil2:
|
| | | # # 新手剧情副本重置所有技能CD
|
| | |
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_ReqFBMissionID, 0)
|
| | |
|
| | | if not hadDelTicket \
|
| | | and IpyGameDataPY.GetIpyGameDataByCondition("NPCShow", {"MapID":mapID, "LineID":lineID}, isLogNone=False):
|
| | | and IpyGameDataPY.GetIpyGameDataByCondition("NPCShow", {"MapID":mapID, "LineID":lineID}, isLogNone=False) and level == maxLevel:
|
| | | GameWorld.DebugLog("法宝挑战刚进入时不直接开始,需等前端通知开始才开始!", playerID) # 掉线重上强制开始
|
| | | return
|
| | |
|
| | |
| | | DoFBHelp(curPlayer, tick, not hadDelTicket)
|
| | | return
|
| | |
|
| | |
|
| | | ## 客户端发送开始副本
|
| | | def OnClientStartFB(curPlayer, tick):
|
| | | gameFB = GameWorld.GetGameFB()
|
| | |
| | | DoFBHelp(curPlayer, tick, True)
|
| | | return
|
| | |
|
| | |
|
| | | ##玩家退出副本
|
| | | # @param curPlayer 玩家实例
|
| | | # @param tick 时间戳
|
| | |
| | | # GameWorldProcess.CloseFB(tick)
|
| | | return
|
| | |
|
| | |
|
| | | ##玩家主动离开副本.
|
| | | # @param curPlayer 玩家实例
|
| | | # @param tick 时间戳
|
| | | # @return 返回值无意义
|
| | | def DoPlayerLeaveFB(curPlayer, tick):
|
| | | return
|
| | |
|
| | |
|
| | | ## 获得副本帮助信息
|
| | | # @param curPlayer 当前玩家(被通知对象)
|
| | |
| | | __DoLogic_FB_Fighting(tick)
|
| | | # 副本结束
|
| | | elif fbStep == FB_Step_Over:
|
| | | pass
|
| | | __DoLogic_FB_Over(tick)
|
| | |
|
| | | return
|
| | |
|
| | |
|
| | | ## 副本准备逻辑
|
| | | # @param tick:时间戳
|
| | |
| | | return
|
| | |
|
| | | #副本关闭
|
| | | GameWorldProcess.CloseFB(tick)
|
| | | FBCommon.SetFBStep(FB_Step_Close, tick)
|
| | | #GameWorldProcess.CloseFB(tick)
|
| | | #FBCommon.SetFBStep(FB_Step_Close, tick)
|
| | | return
|
| | |
|
| | |
|
| | | ## 获得经验
|
| | | # @param curPlayer 当前玩家
|
| | |
| | | gameFB.SetPlayerGameFBDict(playerID, FBPlayerDict_TotalExp, updExp)
|
| | | gameFB.SetPlayerGameFBDict(playerID, FBPlayerDict_TotalExpPoint, updExpPoint)
|
| | |
|
| | | |
| | | GameWorld.DebugLog("OnGetExp() totalExp=%s,addExp=%s,updTotalExp=%s"
|
| | | % (totalExp, addExp, updTotalExp), playerID)
|
| | |
|
| | | return
|
| | |
|
| | |
|
| | | ## 执行副本杀怪逻辑
|
| | | # @param curPlayer 杀怪的人
|
| | |
| | | if fbMissionID:
|
| | | EventShell.EventRespons_FBEvent(curPlayer, "cleardevil_pass_%s" % fbMissionID)
|
| | | # 成就
|
| | | PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_PassWagicWeapon, 1, [lineID+1])
|
| | | level = gameFB.GetGameFBDictByKey(FBPlayerDict_Level)
|
| | | PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_PassWagicWeapon, 1, [lineID + 1, level])
|
| | | # 更新关卡
|
| | | if level:
|
| | | ipyData = IpyGameDataPY.GetIpyGameDataByCondition('MagicWeaponFB', {'LineID':lineID, 'Level':level})
|
| | | if ipyData:
|
| | | mwID = ipyData.GetMWID()
|
| | | PlayerMagicWeapon.UptateMWFBPasslv(curPlayer, mwID, level)
|
| | |
|
| | |
|
| | | DoFBHelp(curPlayer, tick)
|
| | |
| | | __SendOverInfo(curPlayer, awardDict)
|
| | | return
|
| | |
|
| | |
|
| | | ## 是否副本复活
|
| | | # @param None
|
| | | # @return 是否副本复活
|
| | | def OnPlayerReborn():
|
| | | return True
|
| | |
|
| | |
|
| | | ##玩家死亡.
|
| | | # @param curPlayer:死亡的玩家
|
| | |
| | | __DoClearDevilOver(False)
|
| | | return
|
| | |
|
| | |
|
| | | ## 检查是否可攻击, 主判定不可攻击的情况,其他逻辑由外层决定
|
| | | # @param attacker 攻击方
|
| | | # @param defender 防守方
|
| | |
| | | if gameFB.GetFBStep() != Def_FightTime:
|
| | | return False
|
| | | return True
|
| | |
|
| | |
|
| | | ## 副本行为
|
| | | # @param curPlayer 玩家
|
| | | # @param actionType 行为类型
|
| | | # @param actionInfo 行为信息
|
| | | # @param tick 当前时间
|
| | | # @return None
|
| | | def DoFBAction(curPlayer, actionType, actionInfo, tick):
|
| | | gameFB = GameWorld.GetGameFB()
|
| | | fbStep = gameFB.GetFBStep()
|
| | | if fbStep != FB_Step_Over:
|
| | | return
|
| | | |
| | | level = gameFB.GetGameFBDictByKey(FBPlayerDict_Level)
|
| | | maxLevel = gameFB.GetGameFBDictByKey(FBPlayerDict_MaxLevel)
|
| | | if level <= 0 or maxLevel <= 0:
|
| | | return
|
| | | if level >= maxLevel:
|
| | | return
|
| | | gameFB.SetGameFBDict(FBPlayerDict_Level, level+1)
|
| | | playerID = curPlayer.GetID()
|
| | | FBCommon.SetFBStep(FB_Step_Open, tick)
|
| | | lineID = FBCommon.GetFBPropertyMark()
|
| | | if level+1 == maxLevel and IpyGameDataPY.GetIpyGameDataByCondition("NPCShow", {"MapID":ChConfig.Def_FBMapID_MagicWeapon, "LineID":lineID}, isLogNone=False):
|
| | | GameWorld.DebugLog(" 副本行为 法宝挑战刚进入时不直接开始,需等前端通知开始才开始!", playerID) # 掉线重上强制开始
|
| | | return
|
| | | OnClientStartFB(curPlayer, tick)
|
| | | return
|
| | |
|
| | |
|
| | | ## 副本结束处理
|
| | | def __DoClearDevilOver(isPass):
|
| | |
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FirstGoldTry, 0)
|
| | | return
|
| | |
|
| | |
|
| | | ## 发送挑战结果信息
|
| | | def __SendOverInfo(curPlayer, overDict):
|
| | | overDict[FBCommon.Over_dataMapID] = FBCommon.GetRecordMapID(GameWorld.GetMap().GetMapID())
|
| | | overDict[FBCommon.Over_lineID] = FBCommon.GetFBPropertyMark()
|
| | | overDict[FBCommon.Over_wheel] = GameWorld.GetGameFB().GetGameFBDictByKey(FBPlayerDict_Level)
|
| | | GameWorld.DebugLog("__SendOverInfo overDict=%s" % (str(overDict)), curPlayer.GetPlayerID())
|
| | | FBCommon.Notify_FB_Over(curPlayer, overDict)
|
| | | return
|