| | |
| | | import NPCCustomRefresh
|
| | | import SkillShell
|
| | | import EventReport
|
| | | import SkillCommon
|
| | |
|
| | | import random
|
| | | import time
|
| | |
| | | #------------------------------------------------------------------------------
|
| | | #
|
| | |
|
| | |
|
| | | # 副本玩家字典key
|
| | | FBPlayerDict_Score = 'FBPD_Score%s' # 玩家当前积分
|
| | | FBPlayerDict_KillCnt = 'FBPD_KillCnt' # 玩家当前杀敌数
|
| | | FBPD_LastCheckTick = 'FBPD_LastCheckTick' # 检查刷怪时间
|
| | | FBPD_LastCheckTick = 'FBPD_LastCheckTick' # 检查刷buff时间
|
| | | FBPD_LastCheckTick1 = 'FBPD_LastCheckTick1' # 检查刷机器人时间
|
| | | FBPlayerDict_ContKillCntEx = 'FBPD_ContKillCntEx' # 玩家当前总连杀数
|
| | | FBPlayerDict_TotalExp = 'FBPlayerDict_TotalExp%s' # 获得的总经验
|
| | | FBPlayerDict_TotalExpPoint = 'FBPlayerDict_TotalExpPoint%s' # 获得的总经验点
|
| | | FBPlayerDict_EnemyID = 'FBPD_EnemyID' # 玩家最近一个仇敌ID
|
| | | FBPlayerDict_RebornBuffLV = 'RebornBuffLV' # 玩家当前复活BUFFLV
|
| | | Map_ElderBattlefield_StartTick = "Map_ElderBattlefield_StartTick" # 副本开始时间
|
| | | Map_ElderBattlefield_TopPlayer = "Map_ElderBattlefield_TopPlayer" # 积分王
|
| | |
|
| | |
|
| | | #
|
| | | (
|
| | | Def_PlayerCnt, # 真人数量
|
| | | Def_RobotCnt, # 机器人最大数量
|
| | | Def_TotalCnt, # 真人+机器人总和
|
| | | ) = range(3)
|
| | |
|
| | | #当前副本地图的状态
|
| | | (
|
| | |
| | | FB_Step_Over, # 副本结束
|
| | | ) = range(3)
|
| | |
|
| | | def OnLogin(curPlayer):
|
| | | OnElderBattlefieldFBResult(curPlayer, True)
|
| | | return
|
| | |
|
| | | def OnElderBattlefieldStateChange(state, tick):
|
| | | #活动状态变更
|
| | | mapID = GameWorld.GetMap().GetMapID()
|
| | | if mapID != ChConfig.Def_FBMapID_ElderBattlefield:
|
| | | return
|
| | | # mapID = GameWorld.GetMap().GetMapID()
|
| | | # if mapID != ChConfig.Def_FBMapID_ElderBattlefield:
|
| | | # return
|
| | | GameWorld.DebugLog(' 上古战场活动状态变更 state=%s' % state)
|
| | |
|
| | | if state == 1:
|
| | | GameWorld.GetGameWorld().SetGameWorldDict(Map_ElderBattlefield_StartTick, tick)
|
| | | GameWorld.GetGameWorld().SetGameWorldDict(Map_ElderBattlefield_TopPlayer, 0)
|
| | |
|
| | | # else:
|
| | | # GiveJoinPrize()
|
| | | # FBCommon.DoLogic_FBKickAllPlayer()
|
| | | # GameWorldProcess.CloseFB(tick)
|
| | | else:
|
| | | GiveJoinPrize()
|
| | |
|
| | | return
|
| | |
|
| | |
|
| | | ##开启副本
|
| | | # @param tick 时间戳
|
| | |
| | |
|
| | | return True
|
| | |
|
| | |
|
| | | ##是否可以进入
|
| | | # @param ask 请求结构体
|
| | | # @param tick 时间戳
|
| | |
| | |
|
| | | #可进入
|
| | | return IPY_GameWorld.cmeAccept
|
| | |
|
| | |
|
| | | ##玩家进入副本
|
| | | # @param curPlayer 玩家实例
|
| | |
| | |
|
| | | if not FBCommon.GetHadDelTicket(curPlayer):
|
| | | FBCommon.SetHadDelTicket(curPlayer)
|
| | | FBCommon.AddEnterFBCount(curPlayer, ChConfig.Def_FBMapID_ElderBattlefield)
|
| | | if FBCommon.AddEnterFBCount(curPlayer, ChConfig.Def_FBMapID_ElderBattlefield):
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_ElderBattlefieldStage, 0)
|
| | | GameWorld.GetGameWorld().SetGameWorldDict(FBPlayerDict_Score % playerID, 0)
|
| | | GameWorld.GetGameWorld().SetGameWorldDict(FBPlayerDict_TotalExp % playerID, 0)
|
| | |
| | |
|
| | | DoFBHelp(curPlayer, tick)
|
| | | return
|
| | |
|
| | |
|
| | |
|
| | | ##副本玩家进入点, 玩家分散在半径3格范围
|
| | |
| | | def OnGetFBEnterPos(curPlayer, mapID, lineId, ipyEnterPosInfo, tick):
|
| | | return random.choice(ipyEnterPosInfo)
|
| | |
|
| | |
|
| | | ## 获取层随机坐标点
|
| | | def __GetRandPos():
|
| | | ipyEnterPosInfo = FBCommon.GetFBLineEnterPosInfo(ChConfig.Def_FBMapID_ElderBattlefield, 0)
|
| | |
| | | dist = 3 if len(enterPos) <= 2 else enterPos[2]
|
| | | posPoint = GameMap.GetEmptyPlaceInArea(enterPos[0], enterPos[1], dist)
|
| | | return posPoint.GetPosX(), posPoint.GetPosY()
|
| | |
|
| | |
|
| | | ##玩家退出副本
|
| | | # @param curPlayer 玩家实例
|
| | |
| | | buffIDList = IpyGameDataPY.GetFuncEvalCfg('ElderBattlefieldBuff')
|
| | | for buffID in buffIDList:
|
| | | BuffSkill.DelBuffBySkillID(curPlayer, buffID, tick)
|
| | | |
| | | |
| | | return
|
| | |
|
| | |
|
| | | ##玩家主动离开副本.
|
| | | # @param curPlayer 玩家实例
|
| | | # @param tick 时间戳
|
| | | # @return 返回值无意义
|
| | | def DoPlayerLeaveFB(curPlayer, tick):
|
| | | OnElderBattlefieldFBResult(curPlayer)
|
| | |
|
| | | return
|
| | |
|
| | |
|
| | | ##玩家切换地图
|
| | | def DoPlayerChangeMapLogic(curPlayer):
|
| | | OnElderBattlefieldFBResult(curPlayer)
|
| | | #副本的连杀,仇敌,死亡BUFF重置,积分不重置
|
| | | |
| | | playerID = curPlayer.GetID()
|
| | | gameFB = GameWorld.GetGameFB()
|
| | | gameFB.SetPlayerGameFBDict(playerID, FBPlayerDict_ContKillCntEx, 0)
|
| | | gameFB.SetPlayerGameFBDict(playerID, FBPlayerDict_EnemyID, 0)
|
| | | return
|
| | |
|
| | |
|
| | | ##副本总逻辑计时器
|
| | | # @param tick 时间戳
|
| | |
| | | FBCommon.SetFBStep(FB_Step_Fighting, tick)
|
| | | elif fbStep == FB_Step_Fighting:
|
| | | if not FBCommon.GetFBFuncOpenState(ChConfig.Def_FBMapID_ElderBattlefield):
|
| | | GiveJoinPrize()
|
| | | #GiveJoinPrize()
|
| | | #积分王
|
| | | topPlayerID = GameWorld.GetGameWorld().GetGameWorldDictByKey(Map_ElderBattlefield_TopPlayer)
|
| | | if topPlayerID:
|
| | | topAwardList = IpyGameDataPY.GetFuncEvalCfg('ElderBattlefieldTopAward')
|
| | | if topAwardList:
|
| | | PlayerControl.SendMailByKey("ElderBattlefieldTopMail", [topPlayerID], topAwardList) |
| | | PlayerControl.WorldNotify(0, 'ElderBattlefieldBest', [PyGameData.g_sgzztopPlayerName, topAwardList[0][0]])
|
| | | GameWorld.GetGameWorld().SetGameWorldDict(Map_ElderBattlefield_TopPlayer, 0)
|
| | | |
| | | |
| | | FBCommon.SetFBStep(FB_Step_Over, tick)
|
| | | FBCommon.DoLogic_FBKickAllPlayer()
|
| | | GameWorldProcess.CloseFB(tick)
|
| | | else:
|
| | | __CheckRefreshBuffNPC(tick)
|
| | | __RefreshRobot(tick)
|
| | | return
|
| | |
|
| | |
|
| | | def __CheckRefreshBuffNPC(tick):
|
| | | #检查buffnpc刷怪
|
| | |
| | | rmarkList = [] #可刷怪的标识点
|
| | | npcCnt = 0
|
| | | gameNPC = GameWorld.GetNPCManager()
|
| | | for i in range(0, gameNPC.GetCustomNPCRefreshCount()):
|
| | | for i in xrange(gameNPC.GetCustomNPCRefreshCount()):
|
| | | npcRefresh = gameNPC.GetCustomNPCRefreshAt(i)
|
| | | rmark = npcRefresh.GetRefreshMark()
|
| | | if rmark not in allRmark:
|
| | |
| | | npcCnt += npcRefresh.GetCount()
|
| | | if not npcRefresh.GetCount():
|
| | | rmarkList.append(rmark)
|
| | | |
| | |
|
| | | needAddCnt = maxCnt- npcCnt
|
| | | if not needAddCnt:
|
| | |
| | | return
|
| | |
|
| | |
|
| | | def __RefreshRobot(tick):
|
| | | ##刷新机器人
|
| | | gameFB = GameWorld.GetGameFB()
|
| | | lastCheckTick = gameFB.GetGameFBDictByKey(FBPD_LastCheckTick1)
|
| | | if lastCheckTick and tick - lastCheckTick < 2000:
|
| | | return
|
| | | gameFB.SetGameFBDict(FBPD_LastCheckTick1, tick)
|
| | | fblineid = GameWorld.GetGameWorld().GetLineID()
|
| | | g_elderBattleRobotDieList = PyGameData.g_elderBattleRobotDieDict.get(fblineid, [])
|
| | | robotCfgDict = IpyGameDataPY.GetFuncEvalCfg('ElderBattlefieldCfg', 3, {})
|
| | | lineID = GameWorld.GetGameWorld().GetPropertyID() - 1
|
| | | if lineID not in robotCfgDict:
|
| | | return
|
| | | rmarkList = IpyGameDataPY.GetFuncEvalCfg('ElderBattlefieldRobot', 5)
|
| | | curNPCCnt = 0
|
| | | robotCntDict = {}
|
| | | gameNPC = GameWorld.GetNPCManager()
|
| | | for i in xrange(gameNPC.GetCustomNPCRefreshCount()):
|
| | | npcRefresh = gameNPC.GetCustomNPCRefreshAt(i)
|
| | | rmark = npcRefresh.GetRefreshMark()
|
| | | if rmark not in rmarkList:
|
| | | continue
|
| | | cnt = npcRefresh.GetCount()
|
| | | robotCntDict[rmark] = cnt
|
| | | curNPCCnt += cnt
|
| | | |
| | | robotCfg = robotCfgDict[lineID]
|
| | | curPlayerCnt = GameWorld.GetMapCopyPlayerManager().GetPlayerCount()
|
| | | maxRobotCnt = min(robotCfg[Def_TotalCnt] - curPlayerCnt, robotCfg[Def_RobotCnt])
|
| | | extraCnt = maxRobotCnt - curNPCCnt - len(g_elderBattleRobotDieList)
|
| | | rebornTime = IpyGameDataPY.GetFuncCfg('ElderBattlefieldRobot')
|
| | | rebornCnt = 0
|
| | | for dieTick in g_elderBattleRobotDieList:
|
| | | if tick - dieTick < rebornTime * 1000:
|
| | | break
|
| | | rebornCnt += 1
|
| | | PyGameData.g_elderBattleRobotDieDict[fblineid] = g_elderBattleRobotDieList[rebornCnt:]
|
| | | refreshCnt = rebornCnt + extraCnt
|
| | | #GameWorld.DebugLog(' 刷新机器人 rebornCnt=%s,extraCnt=%s,refreshCnt=%s,robotCntDict=%s'%(rebornCnt, extraCnt,refreshCnt,robotCntDict))
|
| | | if refreshCnt > 0:
|
| | | npcID = IpyGameDataPY.GetFuncEvalCfg('ElderBattlefieldRobot', 2, {}).get(lineID, 0)
|
| | | if not npcID:
|
| | | return
|
| | | |
| | | random.shuffle(rmarkList)
|
| | | hasRefreshCnt = 0
|
| | | for i, rMark in enumerate(rmarkList):
|
| | | if hasRefreshCnt >=refreshCnt:
|
| | | break
|
| | | curCnt = robotCntDict.get(rMark, 0)
|
| | | cnt = 1 if i < len(rmarkList)-1 else refreshCnt-hasRefreshCnt
|
| | | hasRefreshCnt += cnt
|
| | | curMaxCnt = curCnt+cnt
|
| | | NPCCustomRefresh.SetNPCRefresh(rMark, [(npcID, cnt)], curMaxCnt, cnt)
|
| | | NPCCustomRefresh.ProcessAllNPCRefresh(tick)
|
| | | |
| | | return
|
| | |
|
| | |
|
| | | ##战斗逻辑
|
| | | # @param tick 时钟
|
| | | # @return 无意义
|
| | | # @remarks 战斗逻辑
|
| | | def GiveJoinPrize():
|
| | | copyMapPlayerManager = GameWorld.GetMapCopyPlayerManager()
|
| | | for i in xrange(copyMapPlayerManager.GetPlayerCount()):
|
| | | |
| | | curPlayer = copyMapPlayerManager.GetPlayerByIndex(i)
|
| | | |
| | | if curPlayer == None or curPlayer.IsEmpty():
|
| | | playerManager = GameWorld.GetPlayerManager()
|
| | | for i in xrange(playerManager.GetPlayerCount()):
|
| | | curPlayer = playerManager.GetPlayerByIndex(i)
|
| | | if curPlayer == None or not curPlayer.GetInitOK():
|
| | | continue
|
| | | OnElderBattlefieldFBResult(curPlayer)
|
| | |
|
| | | #积分王
|
| | | topPlayerID = GameWorld.GetGameWorld().GetGameWorldDictByKey(Map_ElderBattlefield_TopPlayer)
|
| | | if topPlayerID:
|
| | | topAwardList = IpyGameDataPY.GetFuncEvalCfg('ElderBattlefieldTopAward')
|
| | | if topAwardList:
|
| | | PlayerControl.SendMailByKey("ElderBattlefieldTopMail", [topPlayerID], topAwardList) |
| | | PlayerControl.WorldNotify(0, 'ElderBattlefieldBest', [PyGameData.g_sgzztopPlayerName, topAwardList[0][0]])
|
| | | GameWorld.GetGameWorld().SetGameWorldDict(Map_ElderBattlefield_TopPlayer, 0)
|
| | | |
| | | return
|
| | |
|
| | | def OnElderBattlefieldFBResult(curPlayer):
|
| | |
|
| | | def OnElderBattlefieldFBResult(curPlayer, isLogin=False):
|
| | | # 玩家处理上古战场结算信息
|
| | | GameWorld.DebugLog(' 玩家处理上古战场结算信息 %s' % curPlayer.GetPlayerID())
|
| | | GameWorld.DebugLog(' 玩家处理上古战场结算信息 , isLogin=%s' % isLogin, curPlayer.GetPlayerID())
|
| | | lineID = 0 #GameWorld.GetGameWorld().GetPropertyID() -1
|
| | | fbRewardDict = FBCommon.GetFBLineReward(ChConfig.Def_FBMapID_ElderBattlefield, lineID)
|
| | |
|
| | |
| | | rewardItemList.append([itemID, itemCnt, 1])
|
| | | for itemID, itemCnt in succAwardDict.items():
|
| | | rewardItemList.append([itemID, itemCnt, 1])
|
| | | |
| | | needSpace = len(rewardItemList)
|
| | | emptySpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem, needSpace)
|
| | | if emptySpace < needSpace:
|
| | | mapID = GameWorld.GetMap().GetMapID()
|
| | | if mapID != ChConfig.Def_FBMapID_ElderBattlefield or isLogin or emptySpace < needSpace:
|
| | | PlayerControl.SendMailByKey("ElderBattlefieldMail", [curPlayer.GetPlayerID()], rewardItemList)
|
| | | else:
|
| | | for itemID, itemCnt, isBind in rewardItemList:
|
| | | ItemControler.GivePlayerItem(curPlayer, itemID, itemCnt, isBind, [IPY_GameWorld.rptItem], event=["ElderBattlefield", False, {}])
|
| | | |
| | | overDict = {FBCommon.Over_itemInfo:FBCommon.GetJsonItemList(itemList), FBCommon.Over_succItemInfo:FBCommon.GetJsonItemList(succAwardDict.items())}
|
| | | FBCommon.NotifyFBOver(curPlayer, ChConfig.Def_FBMapID_ElderBattlefield, lineID, 1, overDict)
|
| | | #结算过,重置阶段
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_ElderBattlefieldStage, 0)
|
| | | return
|
| | |
|
| | |
|
| | |
|
| | | def __AddElderBattlefieldPlayerScore(curPlayer, gameFB, addValue):
|
| | |
| | |
|
| | | #---------------------------------------------------------------------
|
| | |
|
| | |
|
| | | ##获得副本帮助信息, 用于通知阵营比分条
|
| | | # @param curPlayer 玩家实例
|
| | | # @param tick 时间戳
|
| | |
| | | FBCommon.Notify_FBHelp(curPlayer, helpDict)
|
| | | return
|
| | |
|
| | | def DoFBOnNPCKill_Player(curNPC, curPlayer, tick):
|
| | | if curNPC.GetNPCID() in IpyGameDataPY.GetFuncEvalCfg('ElderBattlefieldRobot', 2, {}).values():
|
| | | DoFBOnKill_Player(curNPC, curPlayer, tick)
|
| | | return
|
| | |
|
| | | ##处理副本中杀死玩家逻辑
|
| | | # @param curPlayer 玩家实例
|
| | |
| | | # @param tick 时间戳
|
| | | # @return 布尔值
|
| | | # @remarks 处理副本中杀死玩家逻辑
|
| | | def DoFBOnKill_Player(curPlayer, defender, tick):
|
| | | def DoFBOnKill_Player(atkobj, defender, tick):
|
| | | gameFB = GameWorld.GetGameFB()
|
| | | playerID = curPlayer.GetPlayerID()
|
| | | atkIsPlayer = atkobj.GetGameObjType() == IPY_GameWorld.gotPlayer
|
| | | addScore = 0
|
| | | if atkIsPlayer:
|
| | | playerID = atkobj.GetPlayerID()
|
| | | GameWorld.DebugLog("DoFBOnKill_Player", playerID)
|
| | |
|
| | | # 击杀方处理
|
| | |
| | | perCnt = IpyGameDataPY.GetFuncCfg('ElderBattlefieldSys', 3)
|
| | | if contKillCntEx >= baseCnt and contKillCntEx % perCnt == 0:
|
| | | sysIndex = min((contKillCntEx - baseCnt) / perCnt, len(ckillSysList)-1)
|
| | | PlayerControl.FBNotify(ckillSysList[sysIndex], [curPlayer.GetName(), contKillCntEx])
|
| | | PlayerControl.NotifyCode(curPlayer, 'AncientBattlefield_10', [contKillCntEx])
|
| | | PlayerControl.FBNotify(ckillSysList[sysIndex], [atkobj.GetName(), contKillCntEx])
|
| | | PlayerControl.NotifyCode(atkobj, 'AncientBattlefield_10', [contKillCntEx])
|
| | | if contKillCntEx == 5:
|
| | | PlayerControl.NotifyCode(curPlayer, 'AncientBattlefield_10', [5])
|
| | | PlayerControl.NotifyCode(atkobj, 'AncientBattlefield_10', [5])
|
| | |
|
| | | # 击杀方成就
|
| | | PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_ElderBattlefieldKill, 1)
|
| | | PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_ElderBattlefieldConKill, 1, [contKillCntEx])
|
| | | |
| | | |
| | | # 被杀方处理
|
| | | tagPlayerID = defender.GetPlayerID()
|
| | | defContKillCntEx = gameFB.GetPlayerGameFBDictByKey(tagPlayerID, FBPlayerDict_ContKillCntEx)
|
| | | if defContKillCntEx >=baseCnt:
|
| | | PlayerControl.FBNotify('AncientBattlefield_7', [curPlayer.GetName(), defender.GetName(),defContKillCntEx])
|
| | | |
| | | gameFB.SetPlayerGameFBDict(tagPlayerID, FBPlayerDict_ContKillCntEx, 0)
|
| | | |
| | | PlayerSuccess.DoAddSuccessProgress(atkobj, ShareDefine.SuccType_ElderBattlefieldKill, 1)
|
| | | PlayerSuccess.DoAddSuccessProgress(atkobj, ShareDefine.SuccType_ElderBattlefieldConKill, 1, [contKillCntEx])
|
| | |
|
| | | addScore = IpyGameDataPY.GetFuncCfg('ElderBattlefieldCfg', 2)
|
| | |
|
| | | # 被杀方处理
|
| | | tagPlayerID = 0
|
| | | if defender.GetGameObjType() == IPY_GameWorld.gotPlayer:
|
| | | tagPlayerID = defender.GetPlayerID()
|
| | | defContKillCntEx = gameFB.GetPlayerGameFBDictByKey(tagPlayerID, FBPlayerDict_ContKillCntEx)
|
| | | if defContKillCntEx >= baseCnt:
|
| | | if atkIsPlayer:
|
| | | PlayerControl.FBNotify('AncientBattlefield_7', [atkobj.GetName(), defender.GetName(), defContKillCntEx])
|
| | | else:
|
| | | PlayerControl.FBNotify('AncientBattlefield_robot', [atkobj.GetNPCID(), atkobj.GetObjID(), defender.GetName(), defContKillCntEx])
|
| | | gameFB.SetPlayerGameFBDict(tagPlayerID, FBPlayerDict_ContKillCntEx, 0)
|
| | | #记录仇人
|
| | | if atkIsPlayer:
|
| | | |
| | | gameFB.SetPlayerGameFBDict(tagPlayerID, FBPlayerDict_EnemyID, playerID)
|
| | | if tagPlayerID == gameFB.GetPlayerGameFBDictByKey(playerID, FBPlayerDict_EnemyID):
|
| | | #击杀仇人广播
|
| | | PlayerControl.NotifyCode(curPlayer, 'AncientBattlefield_8')
|
| | | PlayerControl.NotifyCode(atkobj, 'AncientBattlefield_8')
|
| | | gameFB.SetPlayerGameFBDict(playerID, FBPlayerDict_EnemyID, 0)
|
| | | addScore += IpyGameDataPY.GetFuncCfg('ElderBattlefieldPoint', 2)
|
| | | if tagPlayerID == GameWorld.GetGameWorld().GetGameWorldDictByKey(Map_ElderBattlefield_TopPlayer):
|
| | | addScore += IpyGameDataPY.GetFuncCfg('ElderBattlefieldPoint', 1)
|
| | | updScore = __AddElderBattlefieldPlayerScore(curPlayer, gameFB, addScore)
|
| | | |
| | | if atkIsPlayer:
|
| | | updScore = __AddElderBattlefieldPlayerScore(atkobj, gameFB, addScore)
|
| | | GameWorld.DebugLog("击杀玩家: 击杀=%s,连杀=%s,tagPlayerID=%s,updScore=%s"
|
| | | % (killCnt, contKillCntEx, tagPlayerID, updScore), playerID)
|
| | | |
| | | DoFBHelp(curPlayer, tick)
|
| | | DoFBHelp(atkobj, tick)
|
| | | if defender.GetGameObjType() == IPY_GameWorld.gotPlayer:
|
| | | DoFBHelp(defender, tick)
|
| | | return True
|
| | |
|
| | |
| | | fbStep = gameFB.GetFBStep()
|
| | | # if fbStep != FB_State_Fight:
|
| | | # return
|
| | | |
| | | if curNPC.GetNPCID() in IpyGameDataPY.GetFuncEvalCfg('ElderBattlefieldRobot', 2, {}).values():
|
| | | DoFBOnKill_Player(curPlayer, curNPC, tick)
|
| | | __OnRobotDie(tick)
|
| | | npcid = curNPC.GetNPCID()
|
| | | killNPCScoreDict = IpyGameDataPY.GetFuncEvalCfg('ElderBattlefieldCfg', 1)
|
| | | addScore = killNPCScoreDict.get(npcid)
|
| | |
| | | return
|
| | | __AddElderBattlefieldPlayerScore(curPlayer, gameFB, addScore)
|
| | | DoFBHelp(curPlayer, tick)
|
| | | return
|
| | |
|
| | | def DoFB_Npc_KillNPC(attacker, curNPC, tick):
|
| | | if curNPC.GetNPCID() in IpyGameDataPY.GetFuncEvalCfg('ElderBattlefieldRobot', 2, {}).values():
|
| | | __OnRobotDie(tick)
|
| | | return
|
| | |
|
| | | def __OnRobotDie(tick):
|
| | | #记录机器人死亡时间
|
| | | lineID = GameWorld.GetGameWorld().GetLineID()
|
| | | if lineID in PyGameData.g_elderBattleRobotDieDict:
|
| | | PyGameData.g_elderBattleRobotDieDict[lineID].append(tick)
|
| | | else:
|
| | | PyGameData.g_elderBattleRobotDieDict[lineID] = [tick]
|
| | | return
|
| | |
|
| | | def OnMoveTouchNPC(curPlayer, curNPC, tick):
|
| | |
| | | def CheckPlayersRelation_IsFriend(curPlayer, curTagPlayer):
|
| | | return not CanAttackPlayer(curPlayer, curTagPlayer)
|
| | |
|
| | |
|
| | | ##副本中,攻击队友逻辑
|
| | | # @param curPlayer 玩家实例
|
| | | # @param curTagPlayer 目标玩家实例
|
| | |
| | | # @remarks
|
| | | def DoCanAttackTeamer(curPlayer, curTagPlayer):
|
| | | return CanAttackPlayer(curPlayer, curTagPlayer)
|
| | |
|
| | |
|
| | | ##副本中,是否可攻击
|
| | | # @param curPlayer 玩家实例
|
| | |
| | | def OnPlayerReborn():
|
| | | return True
|
| | |
|
| | |
|
| | | ## 重置副本复活玩家坐标点
|
| | | # @param None
|
| | | # @return 无意义
|
| | | def OnResetFBRebornPlacePos(curPlayer, rebornPlace, tick):
|
| | | __SetPlayerRandomPos(curPlayer)
|
| | | #复活加buff
|
| | | playerID = curPlayer.GetID()
|
| | | rebornBuffLV = GameWorld.GetGameFB().GetPlayerGameFBDictByKey(playerID, FBPlayerDict_RebornBuffLV)
|
| | | if rebornBuffLV >= IpyGameDataPY.GetFuncCfg('ElderBattlefieldRobot', 4):
|
| | | return
|
| | | skillBuffID = IpyGameDataPY.GetFuncCfg('ElderBattlefieldRobot', 3) + rebornBuffLV
|
| | | skillBuff = GameWorld.GetGameData().GetSkillBySkillID(skillBuffID)
|
| | | if not skillBuff:
|
| | | GameWorld.Log("上古复活加buff 找不到技能%s" % skillBuffID)
|
| | | return
|
| | | GameWorld.GetGameFB().SetPlayerGameFBDict(playerID, FBPlayerDict_RebornBuffLV, rebornBuffLV+1)
|
| | | buffType = SkillCommon.GetBuffType(skillBuff)
|
| | | BuffSkill.DoAddBuff(curPlayer, buffType, skillBuff, tick)
|
| | | |
| | | |
| | | return
|
| | |
|
| | |
|
| | | ## 设置玩家随机坐标点
|
| | | def __SetPlayerRandomPos(curPlayer):
|
| | |
| | | ## 获取副本线路最大玩家人数
|
| | | # @param None
|
| | | # @return
|
| | | def GetFBLineMaxPlayerCount():
|
| | | return IpyGameDataPY.GetFuncCfg('ElderBattlefieldCfg', 3)
|
| | |
|
| | | def GetFBLineMaxPlayerCount(lineID):
|
| | | cfg = IpyGameDataPY.GetFuncEvalCfg('ElderBattlefieldCfg', 3, {}).get(lineID)
|
| | | if not cfg:
|
| | | return 20
|
| | | return cfg[Def_PlayerCnt]
|
| | |
|
| | | ## -------------------------------------------------------------------------------------------------
|
| | |
|
| | |
|