#!/usr/bin/python # -*- coding: GBK -*- #------------------------------------------------------------------------------- # ##@package GameWorldLogic.FBProcess.GameLogic_AllFamilyBoss # # @todo:¶àÏÉÃËBOSS # @author xdh # @date 2019-01-18 # @version 1.0 # # ÏêϸÃèÊö: ¶àÏÉÃËBOSS # #------------------------------------------------------------------------------- #"""Version = 2019-01-18 14:30""" #------------------------------------------------------------------------------- import FBCommon import GameWorld import IPY_GameWorld import GameWorldProcess import IpyGameDataPY import ChConfig import PlayerBossReborn import PyGameData import PlayerControl import ShareDefine import NPCCustomRefresh import ItemControler import PlayerFeastTravel import PlayerWeekParty import PlayerActivity import PlayerFairyCeremony import PlayerNewFairyCeremony import NPCCommon import EventReport import GameObj FBPlayerDict_EncourageLV = 'FBPlayerDict_EncourageLV' # ¹ÄÎèµÈ¼¶ FBDict_IsOver = 'FBDict_IsOver' #ÊÇ·ñÒѽáËã, ½áËãʱµÄtick FBDict_EncourageCnt = 'FBDict_EncourageCnt' #¹ÄÎè¹ý´ÎÊý Map_FB_StartTick = 'Map_FB_StartTick' #»î¶¯¿ªÊ¼Ê±¼ä Map_SightLevelCounter = 'Map_SightLevelCounter' #ÊÓÒ°²ã¼¶ÈËÊý¼ÆÊýÆ÷ ( Def_BossTime, #BOSSʱ¼ä Def_LeaveTime, #À뿪ʱ¼ä ) = range(2) #µ±Ç°¸±±¾µØÍ¼µÄ״̬ ( FB_Step_Open, # ¸±±¾¿ªÆô FB_Step_Fighting, # ¸±±¾½øÐÐÖÐ FB_Step_Over, # ¸±±¾½áÊø FB_Step_Close, # ¸±±¾¹Ø±Õ ) = range(4) def OnFBPlayerOnLogin(curPlayer): return def OnFBPlayerOnDay(curPlayer): return ## ÊÇ·ñÄܹ»Í¨¹ý»î¶¯²éѯ½øÈë # @param curPlayer Íæ¼ÒʵÀý # @param mapID µØÍ¼ID # @param lineID Ïß·id # @param tick ʱ¼ä´Á # @return ²¼¶ûÖµ def OnEnterFBEvent(curPlayer, mapID, lineID, tick): if not curPlayer.GetFamilyID(): GameWorld.DebugLog("OnEnterFBEvent not family!") return False return True ##¸±±¾Íæ¼Ò½øÈëµã # @param curPlayer Íæ¼ÒʵÀý # @param mapID µØÍ¼ID # @param lineId ·ÖÏßID # @param ipyEnterPosInfo ¹¦ÄÜÏß·IPYÅäÖÃ×ø±êÐÅÏ¢ # @param tick ʱ¼ä´Á # @return posX, posY, Ëæ»ú°ë¾¶(¿ÉÑ¡) def OnGetFBEnterPos(curPlayer, mapID, lineId, ipyEnterPosInfo, tick): return ipyEnterPosInfo ### ²éѯµØÍ¼ÊÇ·ñ¿ªÆô ## @param tick ʱ¼ä´Á ## @return ²¼¶ûÖµ def OnCanOpen(tick): return ##²éѯÊÇ·ñ¿ÉÒÔ½øÈëµØÍ¼ # @param ask:ÇëÇó½á¹¹Ìå(IPY_BMChangeMapAsk) # @param tick:ʱ¼ä´Á # @return IPY_GameWorld.cme ö¾Ù def OnChangeMapAsk(ask, tick): return IPY_GameWorld.cmeAccept ##¿ªÆô¸±±¾ # @param tick ʱ¼ä´Á # @return ·µ»ØÖµÎÞÒâÒå # @remarks ¿ªÆô¸±±¾ def OnOpenFB(tick): lineID = GameWorld.GetGameWorld().GetPropertyID() - 1 bossID = CurFBLineBOSSID(lineID) if not bossID: return NPCCustomRefresh.SetNPCRefresh(101, [bossID]) return def OnAllFamilyBossStateChange(state, tick): #»î¶¯×´Ì¬±ä¸ü mapID = GameWorld.GetMap().GetMapID() if mapID != ChConfig.Def_FBMapID_AllFamilyBoss: return GameWorld.DebugLog(' ¶àÏÉÃËBOSS»î¶¯×´Ì¬±ä¸ü state=%s' % state) if state: if not GameWorld.GetGameWorld().GetGameWorldDictByKey(Map_FB_StartTick): GameWorld.GetGameWorld().SetGameWorldDict(Map_FB_StartTick, tick) GameWorld.GetGameWorld().SetGameWorldDict(Map_SightLevelCounter, 0) else: GameWorld.GetGameWorld().SetGameWorldDict(Map_FB_StartTick, 0) if not GameWorld.GetGameFB().GetGameFBDictByKey(FBDict_IsOver): GameWorld.GetGameFB().SetGameFBDict(FBDict_IsOver, tick) __DoLogicAllFamilyBossOver(0, tick, 0, 0) return def __GetRemainTick(tick): ##»î¶¯Ê£ÓàºÁÃë mapID = GameWorld.GetMap().GetMapID() startTick = GameWorld.GetGameWorld().GetGameWorldDictByKey(Map_FB_StartTick) closeFB_RemainTick = max(0, FBCommon.GetFBLineStepTime(mapID)[Def_BossTime] * 1000 - (tick - startTick)) return closeFB_RemainTick ## ½ø¸±±¾ # @param curPlayer # @param tick # @return None def DoEnterFB(curPlayer, tick): playerID = curPlayer.GetPlayerID() lineID = GameWorld.GetGameWorld().GetPropertyID() - 1 playerCnt = GameWorld.GetGameWorld().GetMapCopyPlayerManager().GetPlayerCount() GameWorld.DebugLog("DoEnterFB...playerCnt=%s,lineID=%s" % (playerCnt, lineID), playerID) familyID = curPlayer.GetFamilyID() fbStep = GameWorld.GetGameFB().GetFBStep() hadDelTicket = FBCommon.GetHadDelTicket(curPlayer) if not hadDelTicket: FBCommon.SetHadDelTicket(curPlayer) FBCommon.AddEnterFBCount(curPlayer, ChConfig.Def_FBMapID_AllFamilyBoss, 1) PlayerActivity.AddDailyActionFinishCnt(curPlayer, ShareDefine.DailyActionID_FamilyBoss1, 1) PlayerBossReborn.AddBossRebornActionCnt(curPlayer, ChConfig.Def_BRAct_FamilyBoss, 1) PlayerWeekParty.AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_FamilyBoss, 1) PlayerFeastTravel.AddFeastTravelTaskValue(curPlayer, ChConfig.Def_FeastTravel_FamilyBoss, 1) PlayerFairyCeremony.AddFCPartyActionCnt(curPlayer, ChConfig.Def_PPAct_FamilyBoss, 1) PlayerNewFairyCeremony.AddFCPartyActionCnt(curPlayer, ChConfig.Def_PPAct_FamilyBoss, 1) if fbStep == FB_Step_Open: FBCommon.SetFBStep(FB_Step_Fighting, tick) EventReport.WriteEvent_FB(curPlayer, ChConfig.Def_FBMapID_AllFamilyBoss, 0, ChConfig.CME_Log_Start) if fbStep >= FB_Step_Over: PlayerControl.PlayerLeaveFB(curPlayer) return sightPlayerCount = IpyGameDataPY.GetFuncCfg("LeagueBOSSSight", 1) counter = GameWorld.GetGameWorld().GetGameWorldDictByKey(Map_SightLevelCounter) + 1 GameWorld.GetGameWorld().SetGameWorldDict(Map_SightLevelCounter, counter) sightLevel = (counter - 1) / sightPlayerCount + 10 # ×Ô¶¨ÒåÊÓÒ°²ã¼¶´Ó10¿ªÊ¼£¬1Ϊ¹«¹²ÊÓÒ°²ã PlayerControl.SetPlayerSightLevel(curPlayer, sightLevel) GameWorld.DebugLog("counter=%s,SetPlayerSightLevel=%s" % (counter, sightLevel), playerID) if familyID not in PyGameData.g_allfamilyBossDict: PyGameData.g_allfamilyBossDict[familyID] = [curPlayer.GetFamilyName(), 0, [playerID]] elif playerID not in PyGameData.g_allfamilyBossDict[familyID][2]: PyGameData.g_allfamilyBossDict[familyID][2].append(playerID) gameFB = GameWorld.GetGameFB() # ÉϹÄÎèbuff encourageLV = gameFB.GetPlayerGameFBDictByKey(familyID, FBPlayerDict_EncourageLV) if encourageLV > 0: FBCommon.AddFbEncourageBuff(curPlayer, FBPlayerDict_EncourageLV, tick, familyID) else: FBCommon.SendFBEncourageInfo(curPlayer, encourageLV, familyID) closeFB_RemainTick = __GetRemainTick(tick) curPlayer.Sync_TimeTick(IPY_GameWorld.tttTowerTake, 0, closeFB_RemainTick, True) DoFBHelp(curPlayer, tick) return ##¹Ø±Õ¸±±¾ # @param tick ʱ¼ä´Á # @return ÎÞÒâÒå # @remarks def OnCloseFB(tick): gameWorld = GameWorld.GetGameWorld() gameWorld.SetPropertyID(0) PyGameData.g_allfamilyBossDict = {} return ##Íæ¼ÒÍ˳ö¸±±¾ # @param curPlayer Íæ¼ÒʵÀý # @param tick ʱ¼ä´Á # @return ÎÞÒâÒå def DoExitFB(curPlayer, tick): # Çå³ý¹ÄÎèbuff FBCommon.ClearEncourageBuff(curPlayer, tick) # #×îºóÒ»ÈË # if gameWorld.GetMapCopyPlayerManager().GetPlayerCount() == 1: # lineID = gameWorld.GetPropertyID() - 1 # PyGameData.g_AllFamilyBossPlayerHurtDict[lineID] = {} # gameWorld.SetGameWorldDict(FBDict_StartTick, 0) # GameWorld.GetGameFB().ClearGameFBDict() # GameWorldProcess.CloseFB(tick) # return return ##Íæ¼ÒÖ÷¶¯À뿪¸±±¾. # @param curPlayer Íæ¼ÒʵÀý # @param tick ʱ¼ä´Á # @return ·µ»ØÖµÎÞÒâÒå def DoPlayerLeaveFB(curPlayer, tick): # FBCommon.SetHadDelTicket(curPlayer, 0) #Ö÷¶¯Í˳öµÄÈ¥µôÅÅÐаñÐÅÏ¢ familyHurtInfo = PyGameData.g_allfamilyBossDict.get(curPlayer.GetFamilyID(), []) if familyHurtInfo: playerID = curPlayer.GetPlayerID() if playerID in familyHurtInfo[2]: familyHurtInfo[2].remove(playerID) FBCommon.NotifyCopyMapPlayerFBHelp(tick, DoFBHelp, 0) return ## ÊÇ·ñ¸±±¾¸´»î # @param None # @return ÊÇ·ñ¸±±¾¸´»î def OnPlayerReborn(): return True ## »ñµÃ¸±±¾°ïÖúÐÅÏ¢ # @param curPlayer µ±Ç°Íæ¼Ò£¨±»Í¨Öª¶ÔÏó£© # @param tick µ±Ç°Ê±¼ä # @return None def DoFBHelp(curPlayer, tick): #É˺¦ÅÅÐÐÐÅÏ¢ if GameWorld.GetGameFB().GetGameFBDictByKey(FBDict_IsOver): return hurtInfo = [] familyHurtList = __GetSortHurtList() myFamilyID = curPlayer.GetFamilyID() myRank, myHurt, myMenberCnt = 0, 0, 0 for i, info in enumerate(familyHurtList, 1): familyID = info[0] name, hurt, menberList = info[1][:3] if myFamilyID == familyID: myRank, myHurt, myMenberCnt = i, hurt, len(menberList) if i <= 3: hurtDict = {} hurtDict["rank"] = i hurtDict["playerName"] = name hurtDict["hurt"] = hurt % ChConfig.Def_PerPointValue hurtDict["hurtEx"] = hurt / ChConfig.Def_PerPointValue hurtInfo.append(hurtDict) remainHPPer = GetBossRemainHPPer(0, tick) playerID = curPlayer.GetPlayerID() IsEncourage = GameWorld.GetGameFB().GetPlayerGameFBDictByKey(playerID, FBDict_EncourageCnt) fbHelpDict = {"hurtInfo":hurtInfo, 'IsEncourage':IsEncourage,'remainHPPer':remainHPPer, 'myHurt':myHurt % ChConfig.Def_PerPointValue, 'myHurtEx':myHurt / ChConfig.Def_PerPointValue, 'myRank':myRank, 'myMenberCnt':myMenberCnt } GameWorld.DebugLog("DoFBHelp: %s" % fbHelpDict, playerID) FBCommon.Notify_FBHelp(curPlayer, fbHelpDict) return ## ¸±±¾ÐÐΪ # @param curPlayer Íæ¼Ò # @param actionType ÐÐΪÀàÐÍ # @param actionInfo ÐÐΪÐÅÏ¢ # @param tick µ±Ç°Ê±¼ä # @return None def DoFBAction(curPlayer, actionType, actionInfo, tick): if actionType == 0: playerID = curPlayer.GetID() gameFB = GameWorld.GetGameFB() maxEncourageCnt = IpyGameDataPY.GetFuncCfg('LeagueBOSSReward1', 2) curEncourageCnt = gameFB.GetPlayerGameFBDictByKey(playerID, FBDict_EncourageCnt) if curEncourageCnt >= maxEncourageCnt: GameWorld.DebugLog('Ö»ÄܹÄÎè%s´Î£¡'%maxEncourageCnt, playerID) return if FBCommon.FbEncourageBuff(curPlayer, FBPlayerDict_EncourageLV, actionInfo, tick, curPlayer.GetFamilyID()): gameFB.SetPlayerGameFBDict(playerID, FBDict_EncourageCnt, curEncourageCnt+1) #¸ø¹ÄÎè½±Àø itemList = IpyGameDataPY.GetFuncEvalCfg('LeagueBOSSReward1') giveItemList = [[itemID, itemCnt, 0] for itemID, itemCnt in itemList] ItemControler.GivePlayerItemOrMail(curPlayer, giveItemList) DoFBHelp(curPlayer, tick) return ## Íæ¼Ò¶ÔNPCÔì³ÉÉ˺¦ # @param curPlayer µ±Ç°Íæ¼Ò # @param curNPC # @param hurtHP # @return None def DoFB_Player_HurtNPC(curPlayer, curNPC, hurtHP): UpdateHurtInfo(curPlayer, hurtHP) return # def UpdateHurtInfo(curPlayer, hurtHP, isAdd=False): familyID = curPlayer.GetFamilyID() if familyID not in PyGameData.g_allfamilyBossDict: GameWorld.DebugLog('PyGameData.g_allfamilyBossDict ûÓиüÒ×壡£¡') return PyGameData.g_allfamilyBossDict[familyID][1] += hurtHP return ##---¸±±¾×ÜÂß¼­¼ÆÊ±Æ÷--- # @param tick:ʱ¼ä´Á # @return ÎÞÒâÒå # @remarks ¸±±¾×ÜÂß¼­¼ÆÊ±Æ÷ def OnProcess(tick): gameFB = GameWorld.GetGameFB() gameWorld = GameWorld.GetGameWorld() overTick = gameFB.GetGameFBDictByKey(FBDict_IsOver) fbStep = gameFB.GetFBStep() lineID = gameWorld.GetPropertyID() - 1 if lineID < 0: return if fbStep == FB_Step_Over: mapID = GameWorld.GetMap().GetMapID() leaveTick = FBCommon.GetFBLineStepTime(mapID, lineID)[Def_LeaveTime] * 1000 if tick - GameWorld.GetGameFB().GetFBStepTick() > leaveTick: GameWorld.Log("Ç¿ÖÆÌß³öÍæ¼Ò¹Ø±Õ¸±±¾: overTick=%s,tick=%s" % (overTick, tick)) gameWorld.SetGameWorldDict(ShareDefine.Def_Notify_WorldKey_FBCanEnter % ChConfig.Def_FBMapID_AllFamilyBoss, 0) GameWorldProcess.CloseFB(tick) FBCommon.SetFBStep(FB_Step_Close, tick) return elif fbStep == FB_Step_Fighting: if overTick: return FBCommon.NotifyCopyMapPlayerFBHelp(tick, DoFBHelp, 5000) return def __GetSortHurtList(): playerHurtList = sorted(PyGameData.g_allfamilyBossDict.iteritems(), key=lambda asd:asd[1][1], reverse=True) return playerHurtList def __DoLogicAllFamilyBossOver(isPass, tick, dropPosX, dropPosY): #½áËã FBCommon.SetFBStep(FB_Step_Over, tick) msgStr = str([]) GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(0, 0, 0, 'AllFamilyBossOver', msgStr, len(msgStr)) mapID = GameWorld.GetMap().GetMapID() lineID = GameWorld.GetGameWorld().GetPropertyID() - 1 leaveTick = FBCommon.GetFBLineStepTime(mapID, lineID)[Def_LeaveTime] * 1000 playerHurtList = __GetSortHurtList() if not playerHurtList: GameWorld.Log(' __DoLogicAllFamilyBossOver£¬ É˺¦°ñÉÏûÓÐÈË£¡£¡lineID=%s') return playerManager = GameWorld.GetMapCopyPlayerManager() if isPass: worldLV = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_WorldAverageLv) familyAuctionItemDict = {} #{ÏÉÃËID:[[ÏíÊÜÊÕÒæµÄ³ÉÔ±ID, ...], [[ÅÄÆ·ID,×ܸöÊý,ÅÄÆ·×éÊý], ...]], ...} batchPlayerIDList, batchAddItemList, batchParamList, batchDetailList = [], [], [], [] event = ["AllFamilyBoss", False, {}] needMemberCnt = IpyGameDataPY.GetFuncCfg('LeagueBOSSNumber1') unlimitRank = IpyGameDataPY.GetFuncCfg('LeagueBOSSNumber1', 2) bossID = CurFBLineBOSSID(lineID) for rank, hurtInfo in enumerate(playerHurtList, 1): familyID = hurtInfo[0] memberIDList = hurtInfo[1][2] memberCnt = len(memberIDList) familyAuctionItemList, menberItemList = __GetFamilyBossAward(bossID, rank, worldLV) GameWorld.Log('rank=%s,worldLV=%s,familyAuctionItemList=%s,menberItemList=%s,memberCnt=%s' % (rank, worldLV, familyAuctionItemList, menberItemList, memberCnt), familyID) extraVirtualItemList = [] #¶îÍâչʾ¼ÙµôÂäµÄÎïÆ· overDict = {FBCommon.Over_rank:rank, 'memberCnt':len(memberIDList)} if familyAuctionItemList and (rank <= unlimitRank or memberCnt >= needMemberCnt): #ÏÉÃËÅÄÆ· familyAuctionItemDict[familyID] = [memberIDList, familyAuctionItemList] extraVirtualItemList = familyAuctionItemList overDict['AuctionItem'] = FBCommon.GetJsonItemList(familyAuctionItemList) if menberItemList: #³ÉÔ±½±Àø overDict[FBCommon.Over_itemInfo] = FBCommon.GetJsonItemList(menberItemList) mailPlayerIDList = [] for memberID in memberIDList: member = playerManager.FindPlayerByID(memberID) if member: if menberItemList: NPCCommon.DoGiveItemByVirtualDrop(member, menberItemList, bossID, dropPosX, dropPosY, False, 'LeagueBOSS1', extraVirtualItemList) #ItemControler.GivePlayerItemOrMail(member, menberItemList, 'LeagueBOSS1', event) member.Sync_TimeTick(IPY_GameWorld.tttLeaveMap, 0, leaveTick, True) FBCommon.NotifyFBOver(member, ChConfig.Def_FBMapID_AllFamilyBoss, lineID, isPass, overDict) elif menberItemList: mailPlayerIDList.append(memberID) if mailPlayerIDList: batchPlayerIDList.append(mailPlayerIDList) batchAddItemList.append(menberItemList) batchParamList.append([]) batchDetailList.append({'rank':rank}) if batchPlayerIDList: PlayerControl.SendMailBatch("LeagueBOSS2", batchPlayerIDList, batchAddItemList, batchParamList, batchDetail=batchDetailList) if familyAuctionItemDict: GameWorld.Log('familyAuctionItemDict=%s' % familyAuctionItemDict) #ÅÄÂôÐÐɾ³ý else: playerCount = playerManager.GetPlayerCount() for index in xrange(playerCount): curPlayer = playerManager.GetPlayerByIndex(index) if not curPlayer: continue curPlayer.Sync_TimeTick(IPY_GameWorld.tttLeaveMap, 0, leaveTick, True) FBCommon.NotifyFBOver(curPlayer, ChConfig.Def_FBMapID_AllFamilyBoss, lineID, isPass) return def __GetFamilyBossAward(bossID, rank, worldLV): familyAuctionItemList, menberItemList = [], [] awardRateList = [] awardPieRateDict = {} ipyDataList = IpyGameDataPY.GetIpyGameDataList('FamilyBossAward', bossID) if not ipyDataList: return familyAuctionItemList, menberItemList for ipyData in ipyDataList: worldLVList = ipyData.GetWorldLV() if worldLV < worldLVList[0] or worldLV > worldLVList[1]: continue rankList = ipyData.GetRank() if rank < rankList[0] or rank > rankList[1]: continue awardRateList = ipyData.GetAward1() awardPieRateDict = ipyData.GetAward2() if not awardRateList and not awardPieRateDict: GameWorld.ErrLog('ÏÉÃËBoss½±Àø±í δÅäÖøý±Àø rank=%s,worldLV=%s' % (rank, worldLV)) return familyAuctionItemList, menberItemList for rate, itemInfo in awardRateList: if not GameWorld.CanHappen(rate, 10000): continue if len(itemInfo) != 3: GameWorld.ErrLog('ÏÉÃËBoss½±Àø±íÅäÖôíÎó itemInfo=%s' % itemInfo) continue if not itemInfo[0]: continue if itemInfo[2]: familyAuctionItemList.append(itemInfo) else: menberItemList.append(itemInfo) for doCnt, awardPieRateList in awardPieRateDict.items(): for _ in xrange(doCnt): resultItem = GameWorld.GetResultByRandomList(awardPieRateList) if len(resultItem) != 3: GameWorld.ErrLog('ÏÉÃËBoss½±Àø±íÅäÖôíÎó itemInfo=%s' % resultItem) continue if not resultItem[0]: continue if resultItem[2]: familyAuctionItemList.append(resultItem) else: menberItemList.append(resultItem) return familyAuctionItemList, menberItemList def DoFB_Npc_KillNPC(attacker, curNPC, tick): __FBNPCOnKilled(curNPC, tick) return def DoFB_Player_KillNPC(curPlayer, curNPC, tick): __FBNPCOnKilled(curNPC, tick) return ## Ö´Ðи±±¾É±¹ÖÂß¼­ def __FBNPCOnKilled(curNPC, tick): lineID = GameWorld.GetGameWorld().GetPropertyID() - 1 bossID = CurFBLineBOSSID(lineID) if curNPC.GetNPCID() != bossID: return FBCommon.NotifyCopyMapPlayerFBHelp(tick, DoFBHelp, 0) GameWorld.DebugLog('½áÊø ÉèÖÃBOSSËÀÍö') GameWorld.GetGameFB().SetGameFBDict(FBDict_IsOver, tick) dropPosX, dropPosY = curNPC.GetPosX(), curNPC.GetPosY() __DoLogicAllFamilyBossOver(1, tick, dropPosX, dropPosY) return def DoFBRebornNPC(curNPC, tick): ##¸±±¾ÓÐNPCÕÙ³ö lineID = GameWorld.GetGameWorld().GetPropertyID() - 1 bossID = CurFBLineBOSSID(lineID) if curNPC.GetNPCID() == bossID: curNPC.SetSightLevel(ChConfig.SightLevel_Public) # ÉèÖÃbossΪ¹«¹²ÊÓÒ°²ã¼¶ return def GetBossRemainHPPer(copyMapID, tick): bossID = CurFBLineBOSSID() curBoss = GameWorld.FindNPCByNPCIDEx(copyMapID, bossID) if not curBoss: return 100 return GameObj.GetHP(curBoss) * 100 / GameObj.GetMaxHP(curBoss) def CurFBLineBOSSID(lineID=-1): #¸Ã·ÖÏßË¢µÄBOSSID if lineID == -1: lineID = GameWorld.GetGameWorld().GetPropertyID() - 1 refreshNPCInfo = FBCommon.GetFBLineRefreshNPC(ChConfig.Def_FBMapID_AllFamilyBoss, lineID) if not refreshNPCInfo: return 0 bossID = int(refreshNPCInfo) return bossID ##Íæ¼ÒËÀÍö. # @param curPlayer:ËÀÍöµÄÍæ¼Ò # @param tick ʱ¼ä´Á # @return ·µ»ØÖµÎÞÒâÒå # @remarks Íæ¼ÒÖ÷¶¯À뿪¸±±¾. def DoPlayerDead(curPlayer): return ## ¼ì²éÊÇ·ñ¿É¹¥»÷£¬ Ö÷Åж¨²»¿É¹¥»÷µÄÇé¿ö£¬ÆäËûÂß¼­ÓÉÍâ²ã¾ö¶¨ # @param attacker ¹¥»÷·½ # @param defender ·ÀÊØ·½ # @return bool def CheckCanAttackTagObjInFB(attacker, defender): return True ##´¦Àí¸±±¾ÖÐɱËÀÍæ¼ÒÂß¼­ # @param curPlayer Íæ¼ÒʵÀý # @param defender ·ÀÊØÕß # @param tick ʱ¼ä´Á # @return ²¼¶ûÖµ # @remarks ´¦Àí¸±±¾ÖÐɱËÀÍæ¼ÒÂß¼­ def DoFBOnKill_Player(atkobj, defender, tick): return True