From cce3ffb8fc917a82db16b7c82afc7d82485c55bd Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期二, 28 五月 2019 19:53:10 +0800 Subject: [PATCH] 6986 【2.0】【后端】宝箱支持开出可上架拍卖行的拍品 --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_AllFamilyBoss.py | 319 +++++++++++++++++++++------------------------------- 1 files changed, 129 insertions(+), 190 deletions(-) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_AllFamilyBoss.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_AllFamilyBoss.py index dea11ce..f3fc7f6 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_AllFamilyBoss.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_AllFamilyBoss.py @@ -21,6 +21,7 @@ import GameWorldProcess import IpyGameDataPY import ChConfig +import PlayerBossReborn import PyGameData import PlayerControl import ShareDefine @@ -29,29 +30,27 @@ import ItemControler import PlayerActivity import EventReport +import GameObj -FBDict_StartTick = 'FBDict_StartTick' #开始时间 -FBDict_Speed = 'FBDict_Speed' #掉血速度 /s -FBDict_RemainHP = 'FBDict_RemainHP' #剩余时间 FBPlayerDict_EncourageLV = 'FBPlayerDict_EncourageLV' # 鼓舞等级 FBDict_IsOver = 'FBDict_IsOver' #是否已结算, 结算时的tick -FBDict_IsReduceing = 'FBDict_IsReduceing' #是否掉血中 -FBPlayerDict_Rank = "FBPlayerDict_Rank" # 玩家排名 -FBDict_BossTotalHP = 'FBDict_BossTotalHP' #BOSS血量 -FBDict_LastHurtTick = 'FBDict_LastHurtTick' #上次伤害时间 +FBDict_IsEncourage = 'FBDict_IsEncourage' #是否鼓舞过 + ( - Def_BossTime, #BOSS时间 - Def_LeaveTime,#离开时间 - ) = range(2) + Def_BossTime, #BOSS时间 + Def_LeaveTime, #离开时间 + Def_HPSpeed, #掉血速度公式 + ) = range(3) #当前副本地图的状态 ( -FB_Step_Open, # 副本开启 -FB_Step_Fighting, # 副本进行中 -FB_Step_Over, # 副本结束 -FB_Step_Close, # 副本关闭 +FB_Step_Open, # 副本开启 +FB_Step_Fighting, # 副本进行中 +FB_Step_Over, # 副本结束 +FB_Step_Close, # 副本关闭 ) = range(4) + def OnFBPlayerOnLogin(curPlayer): @@ -112,8 +111,6 @@ if not bossID: return NPCCustomRefresh.SetNPCRefresh(101, [bossID]) - BossTime = FBCommon.GetFBLineStepTime(ChConfig.Def_FBMapID_AllFamilyBoss, lineID)[Def_BossTime] - GameWorld.GetGameWorld().SetGameWorldDict(FBDict_BossTotalHP, BossTime * 1000) return @@ -125,7 +122,7 @@ GameWorld.DebugLog(' 多仙盟BOSS活动状态变更 state=%s' % state) if not state: - if GameWorld.GetGameWorld().GetGameWorldDictByKey(FBDict_StartTick) and not GameWorld.GetGameFB().GetGameFBDictByKey(FBDict_IsOver): + if not GameWorld.GetGameFB().GetGameFBDictByKey(FBDict_IsOver): GameWorld.GetGameFB().SetGameFBDict(FBDict_IsOver, tick) __DoLogicAllFamilyBossOver(0, tick) return @@ -142,35 +139,37 @@ 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) - if lineID == 0: - PlayerActivity.AddDailyActionFinishCnt(curPlayer, ShareDefine.DailyActionID_FamilyBoss1, 1) - else: - PlayerActivity.AddDailyActionFinishCnt(curPlayer, ShareDefine.DailyActionID_FamilyBoss2, 1) - if GameWorld.GetGameFB().GetFBStep() == FB_Step_Open: + + PlayerActivity.AddDailyActionFinishCnt(curPlayer, ShareDefine.DailyActionID_FamilyBoss1, 1) + PlayerBossReborn.AddBossRebornActionCnt(curPlayer, ChConfig.Def_BRAct_FamilyBoss, 1) + if fbStep == FB_Step_Open: FBCommon.SetFBStep(FB_Step_Fighting, tick) - familyID = curPlayer.GetFamilyID() - 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) EventReport.WriteEvent_FB(curPlayer, ChConfig.Def_FBMapID_AllFamilyBoss, 0, ChConfig.CME_Log_Start) + if fbStep >= FB_Step_Over: + PlayerControl.PlayerLeaveFB(curPlayer) + return + + 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) - UpdateHPReduceSpeed(tick) gameFB = GameWorld.GetGameFB() # 上鼓舞buff - encourageLV = gameFB.GetPlayerGameFBDictByKey(playerID, FBPlayerDict_EncourageLV) + encourageLV = gameFB.GetPlayerGameFBDictByKey(familyID, FBPlayerDict_EncourageLV) if encourageLV > 0: - FBCommon.AddFbEncourageBuff(curPlayer, FBPlayerDict_EncourageLV, tick) + FBCommon.AddFbEncourageBuff(curPlayer, FBPlayerDict_EncourageLV, tick, familyID) else: - FBCommon.SendFBEncourageInfo(curPlayer, encourageLV) + FBCommon.SendFBEncourageInfo(curPlayer, encourageLV, familyID) - #DoFBHelp(curPlayer, tick) + DoFBHelp(curPlayer, tick) return @@ -181,10 +180,6 @@ def OnCloseFB(tick): gameWorld = GameWorld.GetGameWorld() - gameWorld.SetGameWorldDict(FBDict_StartTick, 0) - gameWorld.SetGameWorldDict(FBDict_Speed, 0) - gameWorld.SetGameWorldDict(FBDict_RemainHP, 0) - gameWorld.SetPropertyID(0) PyGameData.g_allfamilyBossDict = {} return @@ -206,8 +201,6 @@ # GameWorldProcess.CloseFB(tick) # return - UpdateHPReduceSpeed(tick, True) - return @@ -217,19 +210,13 @@ # @return 返回值无意义 def DoPlayerLeaveFB(curPlayer, tick): # FBCommon.SetHadDelTicket(curPlayer, 0) -# #主动退出的去掉排行榜信息 -# lineID = GameWorld.GetGameWorld().GetPropertyID() - 1 -# playerHurtDict = PyGameData.g_AllFamilyBossPlayerHurtDict.get(lineID, {}) -# playerHurtDict.pop(curPlayer.GetPlayerID(), 0) -# PyGameData.g_AllFamilyBossPlayerHurtDict[lineID] = playerHurtDict -# if not playerHurtDict: #榜上没人,停止掉血 -# StopReduceHP(lineID, tick) - return - - -##玩家切换地图 -def DoPlayerChangeMapLogic(curPlayer): - #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 @@ -264,19 +251,14 @@ hurtDict["hurt"] = hurt % ChConfig.Def_PerPointValue hurtDict["hurtEx"] = hurt / ChConfig.Def_PerPointValue hurtInfo.append(hurtDict) - - curSpeed = GameWorld.GetGameWorld().GetGameWorldDictByKey(FBDict_Speed) - isReduceing = GameWorld.GetGameWorld().GetGameWorldDictByKey(FBDict_IsReduceing) - remainHP = GetBossRemainHP(tick) - totalHP = __GetBossTotalHP() - hpReduceSpeed = curSpeed * 10000 / totalHP if totalHP else 0 - remainHPPer = min(1000000, remainHP * 1000000 / totalHP) if totalHP else 0 - - fbHelpDict = {"hurtInfo":hurtInfo, 'hpReduceSpeed':hpReduceSpeed, - 'remainHPPer':remainHPPer, 'isReduceing':isReduceing, 'myHurt':myHurt % ChConfig.Def_PerPointValue, + remainHPPer = GetBossRemainHPPer(0, tick) + playerID = curPlayer.GetPlayerID() + IsEncourage = GameWorld.GetGameFB().GetPlayerGameFBDictByKey(playerID, FBDict_IsEncourage) + 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, curPlayer.GetPlayerID()) + GameWorld.DebugLog("DoFBHelp: %s" % fbHelpDict, playerID) FBCommon.Notify_FBHelp(curPlayer, fbHelpDict) return @@ -289,7 +271,17 @@ # @return None def DoFBAction(curPlayer, actionType, actionInfo, tick): if actionType == 0: - FBCommon.FbEncourageBuff(curPlayer, FBPlayerDict_EncourageLV, actionInfo, tick) + playerID = curPlayer.GetID() + gameFB = GameWorld.GetGameFB() + if gameFB.GetPlayerGameFBDictByKey(playerID, FBDict_IsEncourage): + GameWorld.DebugLog('只能鼓舞一次!', playerID) + return + if FBCommon.FbEncourageBuff(curPlayer, FBPlayerDict_EncourageLV, actionInfo, tick, curPlayer.GetFamilyID()): + gameFB.SetPlayerGameFBDict(playerID, FBDict_IsEncourage, 1) + #给鼓舞奖励 + itemList = IpyGameDataPY.GetFuncEvalCfg('LeagueBOSSReward1') + giveItemList = [[itemID, itemCnt, 0] for itemID, itemCnt in itemList] + ItemControler.GivePlayerItemOrMail(curPlayer, giveItemList) return @@ -300,7 +292,6 @@ # @return None def DoFB_Player_HurtNPC(curPlayer, curNPC, hurtHP): UpdateHurtInfo(curPlayer, hurtHP) - GameWorld.GetGameFB().SetGameFBDict(FBDict_LastHurtTick, GameWorld.GetGameWorld().GetTick()) return @@ -313,8 +304,6 @@ PyGameData.g_allfamilyBossDict[familyID][1] += hurtHP - #有人上榜开始掉血 - StartReduceHP(GameWorld.GetGameWorld().GetTick()) return @@ -339,19 +328,12 @@ GameWorldProcess.CloseFB(tick) FBCommon.SetFBStep(FB_Step_Close, tick) return - elif fbStep == FB_Step_Fighting: - startTick = gameWorld.GetGameWorldDictByKey(FBDict_StartTick) - if not startTick or overTick: + if overTick: return - lastHurtTick = gameFB.GetGameFBDictByKey(FBDict_LastHurtTick) - if lastHurtTick and tick - lastHurtTick >= 2000: - StopReduceHP(tick) - gameFB.SetGameFBDict(FBDict_LastHurtTick, 0) FBCommon.NotifyCopyMapPlayerFBHelp(tick, DoFBHelp, 5000) - __CheckBossHP(tick) return @@ -379,32 +361,44 @@ if isPass: worldLV = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_WorldAverageLv) - familyAuctionItemDict = {} #{仙盟ID:[[享受收益的成员ID, ...], [[拍品ID,总个数,拍品组数], ...]], ...} - event=["AllFamilyBoss", False, {}] + familyAuctionItemDict = {} #{仙盟ID:[[享受收益的成员ID, ...], [[拍品ID,总个数,拍品组数], ...]], ...} + batchPlayerIDList, batchAddItemList, batchParamList, batchDetailList = [], [], [], [] + event = ["AllFamilyBoss", False, {}] needMemberCnt = IpyGameDataPY.GetFuncCfg('LeagueBOSSNumber1') for rank, hurtInfo in enumerate(playerHurtList, 1): familyID = hurtInfo[0] memberIDList = hurtInfo[1][2] memberCnt = len(memberIDList) familyAuctionItemList, menberItemList = __GetFamilyBossAward(rank, worldLV) - GameWorld.Log('rank=%s,worldLV=%s,familyAuctionItemList=%s,menberItemList=%s,memberCnt=%s'%(rank, worldLV,familyAuctionItemList,menberItemList, memberCnt), familyID) - if memberCnt >= needMemberCnt and familyAuctionItemList:#仙盟拍品 + GameWorld.Log('rank=%s,worldLV=%s,familyAuctionItemList=%s,menberItemList=%s,memberCnt=%s' % (rank, worldLV, familyAuctionItemList, menberItemList, memberCnt), familyID) + + overDict = {FBCommon.Over_rank:rank, 'memberCnt':len(memberIDList)} + if memberCnt >= needMemberCnt and familyAuctionItemList: #仙盟拍品 familyAuctionItemDict[familyID] = [memberIDList, familyAuctionItemList] - if menberItemList: #成员奖励 - overDict = {FBCommon.Over_rank:rank, - FBCommon.Over_itemInfo:FBCommon.GetJsonItemList(menberItemList), - 'AuctionItem':FBCommon.GetJsonItemList(familyAuctionItemList), - 'memberCnt':len(memberIDList)} - for memberID in memberIDList: - member = playerManager.FindPlayerByID(memberID) - if member: + 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: 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) - else: - PlayerControl.SendMailByKey('LeagueBOSS2', [memberID], menberItemList) + 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) + GameWorld.Log('familyAuctionItemDict=%s' % familyAuctionItemDict) PlayerAuctionHouse.DoAddFamilyAuctionItem(familyAuctionItemDict) else: playerCount = playerManager.GetPlayerCount() @@ -412,14 +406,16 @@ curPlayer = playerManager.GetPlayerByIndex(index) if not curPlayer: continue - member.Sync_TimeTick(IPY_GameWorld.tttLeaveMap, 0, leaveTick, True) - FBCommon.NotifyFBOver(member, ChConfig.Def_FBMapID_AllFamilyBoss, lineID, isPass) + curPlayer.Sync_TimeTick(IPY_GameWorld.tttLeaveMap, 0, leaveTick, True) + FBCommon.NotifyFBOver(curPlayer, ChConfig.Def_FBMapID_AllFamilyBoss, lineID, isPass) return + def __GetFamilyBossAward(rank, worldLV): familyAuctionItemList, menberItemList = [], [] awardRateList = [] + awardPieRateDict = {} ipyMgr = IpyGameDataPY.IPY_Data() for i in xrange(ipyMgr.GetFamilyBossAwardCount()): ipyData = ipyMgr.GetFamilyBossAwardByIndex(i) @@ -429,125 +425,68 @@ rankList = ipyData.GetRank() if rank < rankList[0] or rank > rankList[1]: continue - awardRateList = ipyData.GetAward() - if not awardRateList: - GameWorld.ErrLog('仙盟Boss奖励表 未配置该奖励 rank=%s,worldLV=%s'%(rank, worldLV)) + 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) + 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 __CheckBossHP(tick): - gameFB = GameWorld.GetGameFB() - isOver = gameFB.GetGameFBDictByKey(FBDict_IsOver) - - if not isOver and GetBossRemainHP(tick) == 0: - - #结束 设置BOSS死亡 - FBCommon.ClearFBNPC() - FBCommon.NotifyCopyMapPlayerFBHelp(tick, DoFBHelp, 0) - GameWorld.DebugLog('结束 设置BOSS死亡') - - gameFB.SetGameFBDict(FBDict_IsOver, tick) - - __DoLogicAllFamilyBossOver(1, tick) - +def DoFB_Npc_KillNPC(attacker, curNPC, tick): + __FBNPCOnKilled(curNPC, tick) + return +def DoFB_Player_KillNPC(curPlayer, curNPC, tick): + __FBNPCOnKilled(curNPC, tick) return - -def UpdateHPReduceSpeed(tick, isExit=False): - gameWorld = GameWorld.GetGameWorld() - playerCnt = gameWorld.GetMapCopyPlayerManager().GetPlayerCount() - playerCnt = playerCnt - 1 if isExit else playerCnt - if playerCnt <= 0: - return +## 执行副本杀怪逻辑 +def __FBNPCOnKilled(curNPC, tick): lineID = GameWorld.GetGameWorld().GetPropertyID() - 1 - if lineID < 0: + bossID = CurFBLineBOSSID(lineID) + if curNPC.GetNPCID() != bossID: return - - curSpeed = int(min(1 + 0.08 * (playerCnt - 1), 1.8) * 1000) - gameWorld.SetGameWorldDict(FBDict_Speed, curSpeed) - if not gameWorld.GetGameWorldDictByKey(FBDict_IsReduceing): - return - - startTick = gameWorld.GetGameWorldDictByKey(FBDict_StartTick) - remainHP = gameWorld.GetGameWorldDictByKey(FBDict_RemainHP) - lastSpeed = gameWorld.GetGameWorldDictByKey(FBDict_Speed) - if not startTick: - startTick = tick - lastSpeed = curSpeed - remainHP = __GetBossTotalHP() - remainHP = max(0, int((remainHP - (tick - startTick) / 1000.0 * lastSpeed))) - gameWorld.SetGameWorldDict(FBDict_StartTick, tick) - - gameWorld.SetGameWorldDict(FBDict_RemainHP, remainHP) - GameWorld.DebugLog(' curSpeed=%s, remainHP=%s, passTime=%s, lastSpeed=%s' % (curSpeed, remainHP, tick - startTick, lastSpeed)) FBCommon.NotifyCopyMapPlayerFBHelp(tick, DoFBHelp, 0) - return + GameWorld.DebugLog('结束 设置BOSS死亡') - -def StopReduceHP(tick): - ##暂停BOSS血量减少 - gameWorld = GameWorld.GetGameWorld() - if not gameWorld.GetGameWorldDictByKey(FBDict_IsReduceing): - return - remainHP = GetBossRemainHP(tick) - if not remainHP: - return - gameWorld.SetGameWorldDict(FBDict_IsReduceing, 0) - gameWorld.SetGameWorldDict(FBDict_RemainHP, remainHP) - return - - -def StartReduceHP(tick): - ##开始BOSS掉血 - gameWorld = GameWorld.GetGameWorld() - if gameWorld.GetGameWorldDictByKey(FBDict_IsReduceing): - return - gameWorld.SetGameWorldDict(FBDict_IsReduceing, 1) - startTick = gameWorld.GetGameWorldDictByKey(FBDict_StartTick) - if not startTick: - gameWorld.SetGameWorldDict(FBDict_RemainHP, __GetBossTotalHP()) - gameWorld.SetGameWorldDict(FBDict_StartTick, tick) - FBCommon.NotifyCopyMapPlayerFBHelp(tick, DoFBHelp, 0) - return - - -def __GetBossTotalHP():return GameWorld.GetGameWorld().GetGameWorldDictByKey(FBDict_BossTotalHP) + GameWorld.GetGameFB().SetGameFBDict(FBDict_IsOver, tick) - -def GetBossRemainHP(tick): - gameWorld = GameWorld.GetGameWorld() - - startTick = gameWorld.GetGameWorldDictByKey(FBDict_StartTick) - lastSpeed = gameWorld.GetGameWorldDictByKey(FBDict_Speed) - remainHP = gameWorld.GetGameWorldDictByKey(FBDict_RemainHP) - if not gameWorld.GetGameWorldDictByKey(FBDict_IsReduceing): - return remainHP - if not startTick: - startTick = tick - remainHP = __GetBossTotalHP() - else: - remainHP = max(0, int((remainHP - (tick - startTick) / 1000.0 * lastSpeed))) - return remainHP + __DoLogicAllFamilyBossOver(1, tick) + return -def GetBossRemainHPPer(tick): - remainHP = GetBossRemainHP(tick) - totalHP = __GetBossTotalHP() - if not totalHP: - return 0 - return remainHP * 100 / totalHP + +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): -- Gitblit v1.8.0