#!/usr/bin/python # -*- coding: GBK -*- #------------------------------------------------------------------------------- # ##@package GameWorldLogic.FBProcess.GameLogic_ElderBattlefield # # @todo:ÉϹÅÕ½³¡ # @author xdh # @date 2016-08-29 # @version 1.0 # # # ÏêϸÃèÊö: ÉϹÅÕ½³¡ # #------------------------------------------------------------------------------- #"""Version = 2017-07-12 21:00"" #------------------------------------------------------------------------------- import ChConfig import FBCommon import GameWorld import PlayerControl import IpyGameDataPY import GameWorldProcess import ItemCommon import ItemControler import IPY_GameWorld import ShareDefine import PlayerSuccess import GameMap import BuffSkill import FormulaControl import PyGameData import NPCCustomRefresh import SkillShell import EventReport import random import time #------------------------------------------------------------------------------ # # ¸±±¾Íæ¼Ò×Öµäkey FBPlayerDict_Score = 'FBPD_Score%s' # Íæ¼Òµ±Ç°»ý·Ö FBPlayerDict_KillCnt = 'FBPD_KillCnt' # Íæ¼Òµ±Ç°É±µÐÊý FBPD_LastCheckTick = 'FBPD_LastCheckTick' # ¼ì²éË¢¹Öʱ¼ä FBPlayerDict_ContKillCntEx = 'FBPD_ContKillCntEx' # Íæ¼Òµ±Ç°×ÜÁ¬É±Êý FBPlayerDict_TotalExp = 'FBPlayerDict_TotalExp%s' # »ñµÃµÄ×ܾ­Ñé FBPlayerDict_TotalExpPoint = 'FBPlayerDict_TotalExpPoint%s' # »ñµÃµÄ×ܾ­Ñéµã Map_ElderBattlefield_StartTick = "Map_ElderBattlefield_StartTick" # ¸±±¾¿ªÊ¼Ê±¼ä Map_ElderBattlefield_TopPlayer = "Map_ElderBattlefield_TopPlayer" # »ý·ÖÍõ # #µ±Ç°¸±±¾µØÍ¼µÄ״̬ ( FB_Step_Open, # ¸±±¾¿ªÆô FB_Step_Fighting, # ¸±±¾½øÐÐÖÐ FB_Step_Over, # ¸±±¾½áÊø ) = range(3) def OnElderBattlefieldStateChange(state, tick): #»î¶¯×´Ì¬±ä¸ü 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) return ##¿ªÆô¸±±¾ # @param tick ʱ¼ä´Á # @return ·µ»ØÖµÎÞÒâÒå # @remarks ¿ªÆô¸±±¾ def OnOpenFB(tick): mapID = GameWorld.GetMap().GetMapID() lineID = GameWorld.GetGameWorld().GetPropertyID() - 1 refreshIDList = FBCommon.GetFBLineRefreshNPC(mapID, lineID) #GameWorld.Log(' lineID=%s,refreshIDList=%s'%(lineID, refreshIDList)) if refreshIDList: for refreshID in refreshIDList: NPCCustomRefresh.SetNPCRefreshByID(refreshID) return ##¹Ø±Õ¸±±¾ # @param tick ʱ¼ä´Á # @return ÎÞÒâÒå # @remarks def OnCloseFB(tick): GameWorld.GetGameWorld().SetPropertyID(0) return ## ÊÇ·ñÄܹ»Í¨¹ý»î¶¯²éѯ½øÈë # @param curPlayer Íæ¼ÒʵÀý # @param mapID µØÍ¼ID # @param lineID Ïß·id # @param tick ʱ¼ä´Á # @return ²¼¶ûÖµ def OnEnterFBEvent(curPlayer, mapID, lineID, tick): GameWorld.DebugLog("OnEnterFBEvent map %s - %s" % (mapID, lineID)) return True ##ÊÇ·ñ¿ÉÒÔ½øÈë # @param ask ÇëÇó½á¹¹Ìå # @param tick ʱ¼ä´Á # @return def OnChangeMapAsk(ask, tick): GameWorld.DebugLog("OnChangeMapAsk CopyMapID=%s" % (ask.GetCopyMapID())) #¿É½øÈë return IPY_GameWorld.cmeAccept ##Íæ¼Ò½øÈ븱±¾ # @param curPlayer Íæ¼ÒʵÀý # @param tick ʱ¼ä´Á # @return ÎÞÒâÒå # @remarks Íæ¼Ò½øÈ븱±¾ def DoEnterFB(curPlayer, tick): playerID = curPlayer.GetPlayerID() GameWorld.DebugLog("DoEnterFB...", playerID) gameFB = GameWorld.GetGameFB() fbStep = gameFB.GetFBStep() startTick = GameWorld.GetGameWorld().GetGameWorldDictByKey(Map_ElderBattlefield_StartTick) closeFB_RemainTick = max(0, FBCommon.GetFBLineStepTime(ChConfig.Def_FBMapID_ElderBattlefield) * 1000 - (tick - startTick)) if not closeFB_RemainTick: PlayerControl.PlayerLeaveFB(curPlayer) return curPlayer.Sync_TimeTick(IPY_GameWorld.tttTowerTake, 0, closeFB_RemainTick, True) if not FBCommon.GetHadDelTicket(curPlayer): FBCommon.SetHadDelTicket(curPlayer) 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) GameWorld.GetGameWorld().SetGameWorldDict(FBPlayerDict_TotalExpPoint % playerID, 0) EventReport.WriteEvent_FB(curPlayer, ChConfig.Def_FBMapID_ElderBattlefield, 0, ChConfig.CME_Log_Start) DoFBHelp(curPlayer, tick) return ##¸±±¾Íæ¼Ò½øÈëµã, Íæ¼Ò·ÖÉ¢ÔÚ°ë¾¶3¸ñ·¶Î§ # @param curPlayer Íæ¼ÒʵÀý # @param mapID µØÍ¼ID # @param lineId ·ÖÏßID # @param tick ʱ¼ä´Á # @return ×ø±êÁбí(X,Y) # @remarks ¸±±¾Íæ¼Ò½øÈëµã def OnGetFBEnterPos(curPlayer, mapID, lineId, ipyEnterPosInfo, tick): return random.choice(ipyEnterPosInfo) ## »ñÈ¡²ãËæ»ú×ø±êµã def __GetRandPos(): ipyEnterPosInfo = FBCommon.GetFBLineEnterPosInfo(ChConfig.Def_FBMapID_ElderBattlefield, 0) enterPos = random.choice(ipyEnterPosInfo) dist = 3 if len(enterPos) <= 2 else enterPos[2] posPoint = GameMap.GetEmptyPlaceInArea(enterPos[0], enterPos[1], dist) return posPoint.GetPosX(), posPoint.GetPosY() ##Íæ¼ÒÍ˳ö¸±±¾ # @param curPlayer Íæ¼ÒʵÀý # @param tick ʱ¼ä´Á # @return ÎÞÒâÒå def DoExitFB(curPlayer, tick): 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) return ##¸±±¾×ÜÂß¼­¼ÆÊ±Æ÷ # @param tick ʱ¼ä´Á # @return ÎÞÒâÒå # @remarks ¸±±¾×ÜÂß¼­¼ÆÊ±Æ÷ def OnProcess(tick): fbStep = GameWorld.GetGameFB().GetFBStep() #GameWorld.DebugLog(" OnProcess...") if fbStep == FB_Step_Open: if FBCommon.GetFBFuncOpenState(ChConfig.Def_FBMapID_ElderBattlefield): FBCommon.SetFBStep(FB_Step_Fighting, tick) elif fbStep == FB_Step_Fighting: if not FBCommon.GetFBFuncOpenState(ChConfig.Def_FBMapID_ElderBattlefield): GiveJoinPrize() FBCommon.SetFBStep(FB_Step_Over, tick) FBCommon.DoLogic_FBKickAllPlayer() GameWorldProcess.CloseFB(tick) else: __CheckRefreshBuffNPC(tick) return def __CheckRefreshBuffNPC(tick): #¼ì²ébuffnpcË¢¹Ö gameFB = GameWorld.GetGameFB() lastCheckTick = gameFB.GetGameFBDictByKey(FBPD_LastCheckTick) if lastCheckTick and tick - lastCheckTick < 10000: return gameFB.SetGameFBDict(FBPD_LastCheckTick, tick) allRmark = IpyGameDataPY.GetFuncEvalCfg('ElderBattlefieldBuff',3) maxCnt = IpyGameDataPY.GetFuncCfg('ElderBattlefieldBuff',4) rmarkList = [] #¿ÉË¢¹ÖµÄ±êʶµã npcCnt = 0 gameNPC = GameWorld.GetNPCManager() for i in range(0, gameNPC.GetCustomNPCRefreshCount()): npcRefresh = gameNPC.GetCustomNPCRefreshAt(i) rmark = npcRefresh.GetRefreshMark() if rmark not in allRmark: continue npcCnt += npcRefresh.GetCount() if not npcRefresh.GetCount(): rmarkList.append(rmark) needAddCnt = maxCnt- npcCnt if not needAddCnt: return random.shuffle(rmarkList) npcID = IpyGameDataPY.GetFuncCfg('ElderBattlefieldBuff',2) for rMark in rmarkList[:needAddCnt]: NPCCustomRefresh.SetNPCRefresh(rMark, [(npcID, 1)], 1, 1) 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(): 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): # Íæ¼Ò´¦ÀíÉϹÅÕ½³¡½áËãÐÅÏ¢ GameWorld.DebugLog(' Íæ¼Ò´¦ÀíÉϹÅÕ½³¡½áËãÐÅÏ¢ %s' % curPlayer.GetPlayerID()) lineID = 0 #GameWorld.GetGameWorld().GetPropertyID() -1 fbRewardDict = FBCommon.GetFBLineReward(ChConfig.Def_FBMapID_ElderBattlefield, lineID) curStage = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_ElderBattlefieldStage, 0) itemList = fbRewardDict.get(curStage, []) succIDList = PlayerSuccess.GetCanGetAwardSuccByType(curPlayer, [ShareDefine.SuccType_ElderBattlefieldKill, ShareDefine.SuccType_ElderBattlefieldConKill]) succAwardDict = PlayerSuccess.GiveSuccAward(curPlayer, succIDList, False) if not itemList and not succAwardDict: return rewardItemList = [] for itemID, itemCnt in itemList: 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: 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): playerID = curPlayer.GetPlayerID() gameWorld = GameWorld.GetGameWorld() updScore = gameWorld.GetGameWorldDictByKey(FBPlayerDict_Score % playerID) + addValue gameWorld.SetGameWorldDict(FBPlayerDict_Score % playerID, updScore) #¸üлý·ÖÍõ topPlayerID = gameWorld.GetGameWorldDictByKey(Map_ElderBattlefield_TopPlayer) if not topPlayerID or updScore > gameWorld.GetGameWorldDictByKey(FBPlayerDict_Score % topPlayerID): gameWorld.SetGameWorldDict(Map_ElderBattlefield_TopPlayer, playerID) PyGameData.g_sgzztopPlayerName = curPlayer.GetName() if gameWorld.GetGameWorldDictByKey(Map_ElderBattlefield_TopPlayer) == playerID: playerManager = GameWorld.GetPlayerManager() for i in range(0, playerManager.GetPlayerCount()): player = playerManager.GetPlayerByIndex(i) if player == None or not player.GetInitOK(): continue if player.GetPlayerID() == playerID: continue DoFBHelp(player, 0) curStage = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_ElderBattlefieldStage, 0) stageScoreList = IpyGameDataPY.GetFuncEvalCfg('ElderBattlefieldCfg', 4) if curStage < len(stageScoreList) and updScore >= stageScoreList[curStage]: addTotalExp = 0 reExp = PlayerControl.GetPlayerReExp(curPlayer) expFormulaDict = IpyGameDataPY.GetFuncEvalCfg('ElderBattlefieldExp') for score in stageScoreList[curStage:]: if updScore >= score: updStage = stageScoreList.index(score) + 1 addExp = eval(FormulaControl.GetCompileFormula("ElderBattlefieldExp%s" % updStage, expFormulaDict[updStage])) addTotalExp += addExp GameWorld.DebugLog('curStage=%s,updStage=%s,addTotalExp=%s' % (curStage, updStage, addTotalExp), playerID) PlayerControl.PlayerControl(curPlayer).AddExp(addTotalExp) exp = gameWorld.GetGameWorldDictByKey(FBPlayerDict_TotalExp % playerID) expPoint = gameWorld.GetGameWorldDictByKey(FBPlayerDict_TotalExpPoint % playerID) totalExp = expPoint * ChConfig.Def_PerPointValue + exp updTotalExp = totalExp + addTotalExp updExp = updTotalExp % ChConfig.Def_PerPointValue updExpPoint = updTotalExp / ChConfig.Def_PerPointValue gameWorld.SetGameWorldDict(FBPlayerDict_TotalExp % playerID, updExp) gameWorld.SetGameWorldDict(FBPlayerDict_TotalExpPoint % playerID, updExpPoint) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_ElderBattlefieldStage, updStage) return updScore #--------------------------------------------------------------------- ##»ñµÃ¸±±¾°ïÖúÐÅÏ¢, ÓÃÓÚ֪ͨÕóÓª±È·ÖÌõ # @param curPlayer Íæ¼ÒʵÀý # @param tick ʱ¼ä´Á # @return ÎÞÒâÒå # @remarks ÓÃÓÚ֪ͨÕóÓª±È·ÖÌõ def DoFBHelp(curPlayer, tick): gameWorld = GameWorld.GetGameWorld() playerID = curPlayer.GetPlayerID() score = gameWorld.GetGameWorldDictByKey(FBPlayerDict_Score % playerID) stageScoreList = IpyGameDataPY.GetFuncEvalCfg('ElderBattlefieldCfg', 4) curStage = min(curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_ElderBattlefieldStage, 0) + 1, len(stageScoreList)) #killCnt = gameFB.GetPlayerGameFBDictByKey(playerID, FBPlayerDict_KillCnt) exp = gameWorld.GetGameWorldDictByKey(FBPlayerDict_TotalExp % playerID) expPoint = gameWorld.GetGameWorldDictByKey(FBPlayerDict_TotalExpPoint % playerID) helpDict = {FBCommon.Help_score:score, FBCommon.Help_step:curStage, FBCommon.Help_exp:exp, FBCommon.Help_expPoint:expPoint} topPlayerID = gameWorld.GetGameWorldDictByKey(Map_ElderBattlefield_TopPlayer) topScore = GameWorld.GetGameWorld().GetGameWorldDictByKey(FBPlayerDict_Score % topPlayerID) helpDict['topName'] = PyGameData.g_sgzztopPlayerName if topPlayerID else '' helpDict['topScore'] = topScore if topPlayerID else 0 GameWorld.DebugLog("DoFBHelp %s" % helpDict, playerID) FBCommon.Notify_FBHelp(curPlayer, helpDict) return ##´¦Àí¸±±¾ÖÐɱËÀÍæ¼ÒÂß¼­ # @param curPlayer Íæ¼ÒʵÀý # @param defender ·ÀÊØÕß # @param tick ʱ¼ä´Á # @return ²¼¶ûÖµ # @remarks ´¦Àí¸±±¾ÖÐɱËÀÍæ¼ÒÂß¼­ def DoFBOnKill_Player(curPlayer, defender, tick): gameFB = GameWorld.GetGameFB() playerID = curPlayer.GetPlayerID() GameWorld.DebugLog("DoFBOnKill_Player", playerID) addScore = IpyGameDataPY.GetFuncCfg('ElderBattlefieldCfg', 2) updScore = __AddElderBattlefieldPlayerScore(curPlayer, gameFB, addScore) # »÷ɱ·½´¦Àí killCnt = gameFB.GetPlayerGameFBDictByKey(playerID, FBPlayerDict_KillCnt) + 1 # »÷ɱÊý gameFB.SetPlayerGameFBDict(playerID, FBPlayerDict_KillCnt, killCnt) contKillCntEx = gameFB.GetPlayerGameFBDictByKey(playerID, FBPlayerDict_ContKillCntEx) + 1 # Á¬É±Êý gameFB.SetPlayerGameFBDict(playerID, FBPlayerDict_ContKillCntEx, contKillCntEx) #Á¬É±¹ã²¥ ckillSysList = IpyGameDataPY.GetFuncCfg('ElderBattlefieldSys', 1) baseCnt = IpyGameDataPY.GetFuncCfg('ElderBattlefieldSys', 2) 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]) # »÷ɱ·½³É¾Í 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) GameWorld.DebugLog("»÷É±Íæ¼Ò: »÷ɱ=%s,Á¬É±=%s,tagPlayerID=%s,updScore=%s" % (killCnt, contKillCntEx, tagPlayerID, updScore), playerID) DoFBHelp(curPlayer, tick) DoFBHelp(defender, tick) return True ## Ö´Ðи±±¾É±¹ÖÂß¼­ # @param curPlayer ɱ¹ÖµÄÈË # @param curNPC ±»É±µÄ¹Ö # @param tick µ±Ç°Ê±¼ä # @return None def DoFB_Player_KillNPC(curPlayer, curNPC, tick): gameFB = GameWorld.GetGameFB() fbStep = gameFB.GetFBStep() # if fbStep != FB_State_Fight: # return npcid = curNPC.GetNPCID() killNPCScoreDict = IpyGameDataPY.GetFuncEvalCfg('ElderBattlefieldCfg', 1) addScore = killNPCScoreDict.get(npcid) if not addScore: return __AddElderBattlefieldPlayerScore(curPlayer, gameFB, addScore) DoFBHelp(curPlayer, tick) return def OnMoveTouchNPC(curPlayer, curNPC, tick): #### ´¥ÅöNPC´¦ÀíÂß¼­ npcid = curNPC.GetNPCID() buffNPCID = IpyGameDataPY.GetFuncCfg('ElderBattlefieldBuff', 2) if npcid != buffNPCID: return buffIDList = IpyGameDataPY.GetFuncEvalCfg('ElderBattlefieldBuff') for buffID in buffIDList: #GameWorld.DebugLog('´¥ÅöNPC´¦ÀíÂß¼­ DelBuffBySkillID=%s'%buffID) BuffSkill.DelBuffBySkillID(curPlayer, buffID, tick) addBuffID = random.choice(buffIDList) #GameWorld.DebugLog('´¥ÅöNPC´¦ÀíÂß¼­ addBuffID=%s'%addBuffID) curSkill = GameWorld.GetGameData().GetSkillBySkillID(addBuffID) SkillShell.__DoLogic_AddBuff(curPlayer, curPlayer, curSkill, False, tick, 0, 0) #SkillCommon.AddBuffBySkillType(curPlayer, addBuffID, tick) return #¹ØÏµÓÐ3²ã£¬ÎÞ-ÓѺÃ-µÐÈË ##ÅжÏÊÇ·ñÓѺùØÏµ£¬¸Ã²ãÅж¨ÎªÓѺÃÂß¼­ÖеÄ×îºóÅÐ¶Ï # @param curPlayer Íæ¼ÒʵÀý # @param curTagPlayer Ä¿±êÍæ¼ÒʵÀý # @return ²¼¶ûÖµ def CheckPlayersRelation_IsFriend(curPlayer, curTagPlayer): return not CanAttackPlayer(curPlayer, curTagPlayer) ##¸±±¾ÖÐ,¹¥»÷¶ÓÓÑÂß¼­ # @param curPlayer Íæ¼ÒʵÀý # @param curTagPlayer Ä¿±êÍæ¼ÒʵÀý # @return ²¼¶ûÖµ # @remarks def DoCanAttackTeamer(curPlayer, curTagPlayer): return CanAttackPlayer(curPlayer, curTagPlayer) ##¸±±¾ÖÐ,ÊÇ·ñ¿É¹¥»÷ # @param curPlayer Íæ¼ÒʵÀý # @param curTagPlayer Ä¿±êÍæ¼ÒʵÀý # @return ²¼¶ûÖµ # @remarks ¸±±¾ÖÐ,ÊÇ·ñ¿É¹¥»÷ def CanAttackPlayer(curPlayer, curTagPlayer): gameFB = GameWorld.GetGameFB() fbStep = gameFB.GetFBStep() # if fbStep != FB_State_Fight: # return False return True ## ÊÇ·ñ¸±±¾¸´»î # @param None # @return ÊÇ·ñ¸±±¾¸´»î def OnPlayerReborn(): return True ## ÖØÖø±±¾¸´»îÍæ¼Ò×ø±êµã # @param None # @return ÎÞÒâÒå def OnResetFBRebornPlacePos(curPlayer, rebornPlace, tick): __SetPlayerRandomPos(curPlayer) return ## ÉèÖÃÍæ¼ÒËæ»ú×ø±êµã def __SetPlayerRandomPos(curPlayer): posX, posY = __GetRandPos() curPlayer.ResetPos(posX, posY) return ## »ñÈ¡¸±±¾Ïß·×î´óÍæ¼ÒÈËÊý # @param None # @return def GetFBLineMaxPlayerCount(): return IpyGameDataPY.GetFuncCfg('ElderBattlefieldCfg', 3) ## -------------------------------------------------------------------------------------------------