| #!/usr/bin/python  | 
| # -*- coding: GBK -*-  | 
| #-------------------------------------------------------------------------------  | 
| #  | 
| ##@package GameWorldLogic.FBProcess.GameLogic_PersonalBoss  | 
| #  | 
| # @todo:¸öÈËBoss¡¢VIPBoss  | 
| # @author hxp  | 
| # @date 2019-05-23  | 
| # @version 1.0  | 
| #  | 
| # ÏêϸÃèÊö: ¸öÈËBoss¡¢VIPBoss  | 
| # ±¾¸±±¾×öǰ¶Ë×Ô¶¨Ò峡¾°´¦Àí£¬ºó¶ËÎÞʵ¼ÊµØÍ¼  | 
| #  | 
| #-------------------------------------------------------------------------------  | 
| #"""Version = 2019-05-23 17:30"""  | 
| #-------------------------------------------------------------------------------  | 
|   | 
| import FBCommon  | 
| import GameWorld  | 
| import EventReport  | 
| import PlayerBossReborn  | 
| import PlayerNewFairyCeremony  | 
| import PlayerFairyCeremony  | 
| import PlayerFeastTravel  | 
| import IpyGameDataPY  | 
| import NPCCommon  | 
| import ChConfig  | 
|   | 
| ## ÊÇ·ñÄܹ»Í¨¹ý»î¶¯²éѯ½øÈë  | 
| def OnEnterFBEvent(curPlayer, mapID, lineID, tick):  | 
|     return True  | 
|   | 
| ## ÊÇ·ñÐèÒª×ö½øÈ븱±¾Í¨Óüì²éÌõ¼þÂß¼£¬Ä¬ÈÏÐèÒª¼ì²é  | 
| def OnNeedCheckCanEnterFBComm(curPlayer, mapID, lineID):  | 
|     ## ½øÐÐÖеIJ»ÐèÒªÖØ¸´¼ì²é£¬·ÀÖ¹¶ÏÏßÖØÁ¬±»½ûÖ¹½øÈë  | 
|     if FBCommon.GetCustomMapStep(curPlayer, mapID, lineID) == ChConfig.CustomMapStep_Fight:  | 
|         GameWorld.DebugLog("VIPBossÒѾÔÚ½øÐÐÖУ¬±¾´Î½øÈë²»ÐèÒªÖØÐ¼ì²é!")  | 
|         return False  | 
|     return True  | 
|   | 
| ## ¿Í»§¶Ë½øÈë×Ô¶¨Ò峡¾°  | 
| def OnEnterCustomScene(curPlayer, mapID, lineID):  | 
|       | 
|     return  | 
|   | 
| ## ÅжϿɷñÕÙ»½Ä¾×®¹Ö  | 
| def OnCanSummonPriWoodPile(curPlayer, mapID, lineID, npcID, count):  | 
|       | 
|     if FBCommon.GetCustomMapStep(curPlayer, mapID, lineID) != ChConfig.CustomMapStep_Fight:  | 
|         FBCommon.SetCustomMapStep(curPlayer, mapID, lineID, ChConfig.CustomMapStep_Fight)  | 
|         EventReport.WriteEvent_FB(curPlayer, ChConfig.Def_FBMapID_PersonalBoss, 0, ChConfig.CME_Log_Start)  | 
|           | 
|         # ¿ªÊ¼¼ÆÊ±  | 
|         tick = GameWorld.GetGameWorld().GetTick()  | 
|         curPlayer.SetDict(ChConfig.Def_PlayerKey_ClientCustomSceneStepTick, tick)  | 
|         FBCommon.UpdateCustomFBGrade(curPlayer, tick, FBCommon.GetFBLineGrade(mapID, lineID))  | 
|           | 
|     return True  | 
|   | 
| def OnCustomSceneProcess(curPlayer, mapID, lineID, tick):  | 
|       | 
|     if FBCommon.GetCustomMapStep(curPlayer, mapID, lineID) == ChConfig.CustomMapStep_Fight:  | 
|         FBCommon.UpdateCustomFBGrade(curPlayer, tick, FBCommon.GetFBLineGrade(mapID, lineID))  | 
|           | 
|     return  | 
|   | 
| ## ×Ô¶¨Ò峡¾°¸±±¾»÷ɱNPC  | 
| def DoCustomScene_Player_KillNPC(curPlayer, curNPC, mapID, lineID):  | 
|       | 
|     npcID = curNPC.GetNPCID()  | 
|     bossID = __GetPersonalBossID(lineID)  | 
|     GameWorld.DebugLog("¸öÈËboss³¡¾°»÷ɱNPC: npcID=%s,bossID=%s" % (npcID, bossID), curPlayer.GetPlayerID())  | 
|     if npcID != bossID:  | 
|         return  | 
|       | 
|     if FBCommon.GetCustomMapStep(curPlayer, mapID, lineID) != ChConfig.CustomMapStep_Fight:  | 
|         return  | 
|       | 
|     grade = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_ClientCustomSceneGrade)  | 
|     costTime = GameWorld.GetGameWorld().GetTick() - curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_ClientCustomSceneStepTick)  | 
|     GameWorld.DebugLog("¸öÈËboss¹ý¹Ø: grade=%s,costTime=%s" % (grade, costTime))  | 
|     isFree = False  | 
|     curfbStar = GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_PlayerFBStar_MapId, lineID, False, [mapID])  | 
|     # Ê״ιý¹Ø²»¿Û´ÎÊý  | 
|     if not curfbStar:  | 
|         isFree = True  | 
|         GameWorld.DebugLog("    Ê״ιý¹Ø£¡mapID=%s,lineID=%s" % (mapID, lineID), curPlayer.GetPlayerID())  | 
|           | 
|     if curfbStar < grade:  | 
|         GameWorld.DebugLog("    ¸üÐÂÆÀ¼¶£¡curfbStar=%s < grade=%s" % (curfbStar, grade), curPlayer.GetPlayerID())  | 
|         GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_PlayerFBStar_MapId, lineID, grade, False, [mapID])  | 
|         FBCommon.Sync_FBPlayerFBInfoData(curPlayer, mapID) # Í¬²½ÐÅÏ¢  | 
|           | 
|     #Ôö¼Ó½øÈë´ÎÊý  | 
|     FBCommon.AddEnterFBCount(curPlayer, ChConfig.Def_FBMapID_PersonalBoss, isFree=isFree)  | 
|       | 
|     FBCommon.DelFBEnterTicket(curPlayer, ChConfig.Def_FBMapID_PersonalBoss)  | 
|     PlayerBossReborn.AddBossRebornActionCnt(curPlayer, ChConfig.Def_BRAct_VIPBOSS, 1)  | 
|     PlayerFairyCeremony.AddFCPartyActionCnt(curPlayer, ChConfig.Def_PPAct_VIPBoss, 1)  | 
|     PlayerNewFairyCeremony.AddFCPartyActionCnt(curPlayer, ChConfig.Def_PPAct_VIPBoss, 1)  | 
|     PlayerFeastTravel.AddFeastTravelTaskValue(curPlayer, ChConfig.Def_FeastTravel_VIPBoss, 1)  | 
|       | 
|     npcCountDict = {bossID:1}  | 
|     dropItemMapInfo = [0, 0]  | 
|     jsonItemList = NPCCommon.GiveKillNPCDropPrize(curPlayer, mapID, npcCountDict, dropItemMapInfo=dropItemMapInfo, curGrade=grade, isVirtualDrop=True)[0]  | 
|     FBCommon.SetCustomMapStep(curPlayer, mapID, lineID, ChConfig.CustomMapStep_Over)  | 
|     isPass = 1  | 
|     overDict = {FBCommon.Over_itemInfo:jsonItemList, FBCommon.Over_grade:grade, FBCommon.Over_costTime:costTime}  | 
|     FBCommon.NotifyFBOver(curPlayer, mapID, lineID, isPass, overDict)  | 
|     return  | 
|   | 
| def __GetPersonalBossID(lineID):  | 
|     ## VIPbossID  | 
|     ipyData = IpyGameDataPY.GetIpyGameData('PersonalBoss', lineID)  | 
|     if not ipyData:  | 
|         return 0  | 
|     return ipyData.GetNPCID()  | 
|   | 
| ## ¿É·ñɨµ´  | 
| def OnPlayerFBSweepAsk(curPlayer, mapID, lineID, sweepCnt, isFinish, dataEx):  | 
|     if mapID != ChConfig.Def_FBMapID_PersonalBoss:  | 
|         return  | 
|     curGrade = GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_PlayerFBStar_MapId, lineID, False, [mapID])  | 
|     if curGrade < 5:  | 
|         GameWorld.DebugLog("ûÓÐS¼¶²»ÄÜɨµ´! curGrade=%s" % curGrade)  | 
|         return  | 
|       | 
|     return True  | 
|   | 
| ## É¨µ´½á¹û  | 
| def OnPlayerFBSweepResult(curPlayer, mapID, lineID, sweepCnt, isFinish, dataEx):  | 
|       | 
|     bossID = __GetPersonalBossID(lineID)  | 
|     grade = GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_PlayerFBStar_MapId, lineID, False, [mapID])  | 
|       | 
|     GameWorld.DebugLog("¸öÈËbossɨµ´: lineID=%s,bossID=%s,grade=%s,sweepCnt=%s"   | 
|                        % (lineID, bossID, grade, sweepCnt), curPlayer.GetPlayerID())  | 
|       | 
|     PlayerBossReborn.AddBossRebornActionCnt(curPlayer, ChConfig.Def_BRAct_VIPBOSS, sweepCnt)  | 
|     PlayerFairyCeremony.AddFCPartyActionCnt(curPlayer, ChConfig.Def_PPAct_VIPBoss, sweepCnt)  | 
|     PlayerNewFairyCeremony.AddFCPartyActionCnt(curPlayer, ChConfig.Def_PPAct_VIPBoss, sweepCnt)  | 
|     PlayerFeastTravel.AddFeastTravelTaskValue(curPlayer, ChConfig.Def_FeastTravel_VIPBoss, sweepCnt)  | 
|       | 
|     npcCountDict = {bossID:sweepCnt}  | 
|     jsonItemList = NPCCommon.GiveKillNPCDropPrize(curPlayer, mapID, npcCountDict, curGrade=grade)[0]  | 
|     isPass = 1  | 
|     overDict = {FBCommon.Over_itemInfo:jsonItemList, FBCommon.Over_isSweep:1}  | 
|     FBCommon.NotifyFBOver(curPlayer, mapID, lineID, isPass, overDict)  | 
|     return True  | 
|   | 
|   |