hxp
2019-10-18 e36d3d08ba14c81bfc159a2797d7c36b5f159ebc
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_AllFamilyBoss.py
@@ -30,6 +30,8 @@
import ItemControler
import PlayerWeekParty
import PlayerActivity
import PlayerFairyCeremony
import PlayerNewFairyCeremony
import NPCCommon
import EventReport
import GameObj
@@ -37,13 +39,12 @@
FBPlayerDict_EncourageLV = 'FBPlayerDict_EncourageLV'  # 鼓舞等级
FBDict_IsOver = 'FBDict_IsOver'  #是否已结算, 结算时的tick
FBDict_EncourageCnt = 'FBDict_EncourageCnt'  #鼓舞过次数
Map_FB_StartTick = 'Map_FB_StartTick' #活动开始时间
(
    Def_BossTime,  #BOSS时间
    Def_LeaveTime,  #离开时间
    Def_HPSpeed,  #掉血速度公式
    ) = range(3)
    ) = range(2)
#当前副本地图的状态
(
@@ -122,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, 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
@@ -151,6 +162,8 @@
        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)
@@ -171,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
@@ -287,6 +302,7 @@
            itemList = IpyGameDataPY.GetFuncEvalCfg('LeagueBOSSReward1')
            giveItemList = [[itemID, itemCnt, 0] for itemID, itemCnt in itemList]
            ItemControler.GivePlayerItemOrMail(curPlayer, giveItemList)
            DoFBHelp(curPlayer, tick)
    return
@@ -370,17 +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)
@@ -390,7 +408,7 @@
                member = playerManager.FindPlayerByID(memberID)
                if member:
                    if menberItemList:
                        NPCCommon.DoGiveItemByVirtualDrop(member, menberItemList, bossID, dropPosX, dropPosY, mailTypeKey='LeagueBOSS1')
                        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)
@@ -419,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