#!/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 PlayerActGarbageSorting
|
import PlayerFairyCeremony
|
import PlayerFeastTravel
|
import IpyGameDataPY
|
import EventShell
|
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)
|
PlayerActGarbageSorting.AddActGarbageTaskProgress(curPlayer, ChConfig.Def_GarbageTask_KillBoss)
|
|
EventShell.EventRespons_FBEvent(curPlayer, 'passvipboss')
|
|
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)
|
PlayerActGarbageSorting.AddActGarbageTaskProgress(curPlayer, ChConfig.Def_GarbageTask_KillBoss)
|
|
EventShell.EventRespons_FBEvent(curPlayer, 'passvipboss')
|
|
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
|
|
|