| | |
| | | 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)
|
| | |
|
| | | #当前副本地图的状态
|
| | | (
|
| | |
| | | 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
|
| | |
| | |
|
| | | 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)
|
| | |
|
| | |
| | | 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
|
| | |
|
| | |
| | | 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
|
| | |
| | | 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
|
| | |
|
| | |
|
| | |
| | | return playerHurtList
|
| | |
|
| | |
|
| | | def __DoLogicAllFamilyBossOver(isPass, tick):
|
| | | def __DoLogicAllFamilyBossOver(isPass, tick, dropPosX, dropPosY):
|
| | | #结算
|
| | | FBCommon.SetFBStep(FB_Step_Over, tick)
|
| | | msgStr = str([])
|
| | |
| | | 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)
|
| | |
| | | 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:
|
| | |
| | | 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
|
| | |
| | | GameWorld.DebugLog('结束 设置BOSS死亡')
|
| | |
|
| | | GameWorld.GetGameFB().SetGameFBDict(FBDict_IsOver, tick)
|
| | | |
| | | __DoLogicAllFamilyBossOver(1, tick)
|
| | | dropPosX, dropPosY = curNPC.GetPosX(), curNPC.GetPosY()
|
| | | __DoLogicAllFamilyBossOver(1, tick, dropPosX, dropPosY)
|
| | | return
|
| | |
|
| | |
|