hxp
2019-10-18 e36d3d08ba14c81bfc159a2797d7c36b5f159ebc
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_AllFamilyBoss.py
@@ -21,26 +21,30 @@
import GameWorldProcess
import IpyGameDataPY
import ChConfig
import PlayerBossReborn
import PyGameData
import PlayerControl
import ShareDefine
import NPCCustomRefresh
import PlayerAuctionHouse
import ItemControler
import PlayerWeekParty
import PlayerActivity
import PlayerFairyCeremony
import PlayerNewFairyCeremony
import NPCCommon
import EventReport
import GameObj
FBPlayerDict_EncourageLV = 'FBPlayerDict_EncourageLV'  # 鼓舞等级
FBDict_IsOver = 'FBDict_IsOver'  #是否已结算, 结算时的tick
FBDict_IsEncourage = 'FBDict_IsEncourage'  #是否鼓舞过
FBDict_EncourageCnt = 'FBDict_EncourageCnt'  #鼓舞过次数
Map_FB_StartTick = 'Map_FB_StartTick' #活动开始时间
(
    Def_BossTime,  #BOSS时间
    Def_LeaveTime,  #离开时间
    Def_HPSpeed,  #掉血速度公式
    ) = range(3)
    ) = range(2)
#当前副本地图的状态
(
@@ -119,13 +123,23 @@
    if mapID != ChConfig.Def_FBMapID_AllFamilyBoss:
        return
    GameWorld.DebugLog('    多仙盟BOSS活动状态变更 state=%s' % state)
    if not state:
    if state:
        if not GameWorld.GetGameWorld().GetGameWorldDictByKey(Map_FB_StartTick):
            GameWorld.GetGameWorld().SetGameWorldDict(Map_FB_StartTick, tick)
    else:
        GameWorld.GetGameWorld().SetGameWorldDict(Map_FB_StartTick, 0)
        if not GameWorld.GetGameFB().GetGameFBDictByKey(FBDict_IsOver):
            GameWorld.GetGameFB().SetGameFBDict(FBDict_IsOver, tick)
            __DoLogicAllFamilyBossOver(0, 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
@@ -146,7 +160,10 @@
        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)
        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)
@@ -167,7 +184,9 @@
        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
@@ -252,7 +271,7 @@
            hurtInfo.append(hurtDict)
    remainHPPer = GetBossRemainHPPer(0, tick)
    playerID = curPlayer.GetPlayerID()
    IsEncourage = GameWorld.GetGameFB().GetPlayerGameFBDictByKey(playerID, FBDict_IsEncourage)
    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
@@ -272,15 +291,18 @@
    if actionType == 0:
        playerID = curPlayer.GetID()
        gameFB = GameWorld.GetGameFB()
        if gameFB.GetPlayerGameFBDictByKey(playerID, FBDict_IsEncourage):
            GameWorld.DebugLog('只能鼓舞一次!', playerID)
        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_IsEncourage, 1)
            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
@@ -342,7 +364,7 @@
    return playerHurtList
def __DoLogicAllFamilyBossOver(isPass, tick):
def __DoLogicAllFamilyBossOver(isPass, tick, dropPosX, dropPosY):
    #结算
    FBCommon.SetFBStep(FB_Step_Over, tick)
    msgStr = str([])
@@ -364,16 +386,19 @@
        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(rank, worldLV)
            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 memberCnt >= needMemberCnt and familyAuctionItemList:  #仙盟拍品
            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)
@@ -383,7 +408,8 @@
                member = playerManager.FindPlayerByID(memberID)
                if member:
                    if menberItemList:
                        ItemControler.GivePlayerItemOrMail(member, menberItemList, 'LeagueBOSS1', event)
                        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:
@@ -411,13 +437,15 @@
    return
def __GetFamilyBossAward(rank, worldLV):
def __GetFamilyBossAward(bossID, rank, worldLV):
    familyAuctionItemList, menberItemList = [], []
    awardRateList = []
    awardPieRateDict = {}
    ipyMgr = IpyGameDataPY.IPY_Data()
    for i in xrange(ipyMgr.GetFamilyBossAwardCount()):
        ipyData = ipyMgr.GetFamilyBossAwardByIndex(i)
    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
@@ -435,6 +463,8 @@
        if len(itemInfo) != 3:
            GameWorld.ErrLog('仙盟Boss奖励表配置错误 itemInfo=%s' % itemInfo)
            continue
        if not itemInfo[0]:
            continue
        if itemInfo[2]:
            familyAuctionItemList.append(itemInfo)
        else:
@@ -444,6 +474,8 @@
            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)
@@ -470,8 +502,8 @@
    GameWorld.DebugLog('结束 设置BOSS死亡')
    GameWorld.GetGameFB().SetGameFBDict(FBDict_IsOver, tick)
    __DoLogicAllFamilyBossOver(1, tick)
    dropPosX, dropPosY = curNPC.GetPosX(), curNPC.GetPosY()
    __DoLogicAllFamilyBossOver(1, tick, dropPosX, dropPosY)
    return