#!/usr/bin/python # -*- coding: GBK -*- #------------------------------------------------------------------------------- # #------------------------------------------------------------------------------- # ##@package GameWorldLogic.FBProcess.GameLogic_DuJie # # @todo:¶É½Ù¸±±¾ # @author xdh # @date 2017-10-10 14:30 # @version 1.0 # # ÏêϸÃèÊö: ¶É½Ù¸±±¾ # #--------------------------------------------------------------------- """Version = 2017-10-10 14:30""" import FBCommon import ChConfig import IPY_GameWorld import PlayerControl import GameWorld import NPCCustomRefresh import IpyGameDataPY import PlayerPrestigeSys import GameFuncComm import ItemCommon import ShareDefine import ItemControler import PlayerSuccess import EventShell import EventReport import FBHelpBattle import math import time #µ±Ç°¸±±¾µØÍ¼µÄ״̬ ( FB_Step_CallHelp, # ÖúÕ½ÕÙ»½ FB_Step_MapPrepare, # µØÍ¼×¼±¸ FB_Step_Fighting, # Õ½¶·ÖÐ FB_Step_LeaveTime, # ×ÔÓÉʱ¼ä ) = range(4) #---¶É½Ù¸±±¾--- DuJieFB_Star = 'DuJieFB_Star' #ÆÀ¼¶ DuJieFB_RealmLV = "DuJieFB_RealmLV" # ¾³½çµÈ¼¶ DuJieFB_LeaderPlayerID = "DuJieFB_LeaderPlayerID" # ¶Ó³¤ID ( Def_Time_MapPrepare, # ×¼±¸Ê±¼ä, Ãë Def_Time_Fight, # ³ÖÐøÊ±¼ä, Ãë Def_Time_Leave, # ½áÊøÊ±¼ä, Ãë Def_StarTime, # ÐǼ¶¶ÔÓ¦ºÄʱÅäÖÃ, Ãë Def_HelpAddAttrID, #»¤·¨¿ÉÔö¼ÓµÄÊôÐÔ ) = range(5) def GetRealmFBTimeCfg(): lineID = 1 if FBCommon.GetFBPropertyMark() else 0 return FBCommon.GetFBLineStepTime(ChConfig.Def_FBMapID_DuJie, lineID) def GetDuJieBossID(): realmLV = GameWorld.GetGameFB().GetGameFBDictByKey(DuJieFB_RealmLV) realmIpyData = PlayerPrestigeSys.GetRealmIpyData(realmLV) if not realmIpyData: GameWorld.ErrLog("ûÓиþ³½çµÈ¼¶Êý¾Ý! Lv=%s" % realmLV) return return realmIpyData.GetBossID() #---FB½Ó¿Ú---------- ##¸±±¾³õʼ»¯ # @param tick:ʱ¼ä´Á # @return ·µ»ØÖµÎÞÒâÒå def DoFBInit(tick): #GameWorld.GetGameFB().GameServer_RegisterFBInfo(GetRealmFBTimeCfg()[Def_MaxPlayerCnt], '') return ##¿ªÆô¸±±¾ # @param tick ʱ¼ä´Á # @return ·µ»ØÖµÎÞÒâÒå # @remarks ¿ªÆô¸±±¾ def OnOpenFB(tick): gameFB = GameWorld.GetGameFB() gameFB.SetGameFBDict(DuJieFB_RealmLV, 0) gameFB.SetGameFBDict(DuJieFB_Star, 0) gameFB.SetGameFBDict(DuJieFB_LeaderPlayerID, 0) return ##¹Ø±Õ¸±±¾ # @param tick ʱ¼ä´Á # @return ÎÞÒâÒå # @remarks def OnCloseFB(tick): #¸±±¾Ìß³öÍæ¼Ò FBCommon.DoLogic_FBKickAllPlayer() return ##Íæ¼ÒËÀÍö. # @param curPlayer:ËÀÍöµÄÍæ¼Ò # @param tick ʱ¼ä´Á # @return ·µ»ØÖµÎÞÒâÒå # @remarks Íæ¼ÒÖ÷¶¯À뿪¸±±¾. def DoPlayerDead(curPlayer): if curPlayer.GetID() == GameWorld.GetGameFB().GetGameFBDictByKey(DuJieFB_LeaderPlayerID): __DoDoJieFBOver(False, GameWorld.GetGameWorld().GetTick()) return ## ÊÇ·ñÄܹ»Í¨¹ý»î¶¯²éѯ½øÈë # @param curPlayer Íæ¼ÒʵÀý # @param mapID µØÍ¼ID # @param lineID Ïß·id # @param tick ʱ¼ä´Á # @return ²¼¶ûÖµ def OnEnterFBEvent(curPlayer, mapID, lineID, tick): return __CheckEnter(curPlayer, mapID, lineID) ##½øÈ븱±¾¼ì²é # @param curPlayer Íæ¼ÒʵÀý # @param mapID µØÍ¼ID # @param lineID Ïß·id # @return None def __CheckEnter(curPlayer, mapID, lineID): if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_Official): GameWorld.DebugLog("¾ôλ¾³½ç¹¦ÄÜ먦Æô, ÎÞ·¨¿ªÆô¶É½Ù!curLV=%s" % curPlayer.GetLV()) return False if lineID == 0 or curPlayer.GetTeamLV() == IPY_GameWorld.tmlLeader or (lineID == 1 and curPlayer.GetTeamID() == 0): curRealmLV = curPlayer.GetOfficialRank() realmIpyData = PlayerPrestigeSys.GetRealmIpyData(curRealmLV) if not realmIpyData: GameWorld.ErrLog("ûÓиþ³½çµÈ¼¶Êý¾Ý! Lv=%s" % curRealmLV) return False needRealmPoint = realmIpyData.GetNeedPoint() if not needRealmPoint: GameWorld.DebugLog("¾³½çÒÑÊÇ×î´óµÈ¼¶£¬²»ÄÜÉý¼¶! Lv=%s" % curRealmLV, curPlayer.GetPlayerID()) return False if not PlayerControl.HaveMoney(curPlayer, ShareDefine.TYPE_Price_RealmPoint, needRealmPoint, False): GameWorld.DebugLog("¾³½çÐÞÁ¶µã²»×㣬ÎÞ·¨¿ªÆô¶É½Ù£¡needRealmPoint=%s" % (needRealmPoint), curPlayer.GetPlayerID()) return False # if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmFBIsOpen) != 1: # return False return True ##¸±±¾Íæ¼Ò½øÈëµã # @param curPlayer Íæ¼ÒʵÀý # @param mapID µØÍ¼ID # @param lineId ·ÖÏßID # @param ipyEnterPosInfo ¹¦ÄÜÏß·IPYÅäÖÃ×ø±êÐÅÏ¢ # @param tick ʱ¼ä´Á # @return posX, posY, Ëæ»ú°ë¾¶(¿ÉÑ¡) def OnGetFBEnterPos(curPlayer, mapID, lineId, ipyEnterPosInfo, tick): return ipyEnterPosInfo ##ÊÇ·ñ¿ÉÒÔ½øÈë # @param ask ÇëÇó½á¹¹Ìå # @param tick ʱ¼ä´Á # @return TChangeMapError # @remarks def OnChangeMapAsk(ask, tick): return IPY_GameWorld.cmeAccept ##Íæ¼Ò½øÈ븱±¾ # @param curPlayer Íæ¼ÒʵÀý # @param tick ʱ¼ä´Á # @return ÎÞÒâÒå # @remarks Íæ¼Ò½øÈ븱±¾ def DoEnterFB(curPlayer, tick): gameFB = GameWorld.GetGameFB() fbStep = gameFB.GetFBStep() if fbStep == FB_Step_LeaveTime: PlayerControl.PlayerLeaveFB(curPlayer) return lineID = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_ReqFBFuncLine) if not FBCommon.GetHadSetFBPropertyMark(): #´Ë´¦¸±±¾ÊôÐԺ͹¦ÄÜÏß·ID²»Í¬£¬¹Ê·Ö¿ªÉèÖà propertyMark = curPlayer.GetOfficialRank() if lineID else lineID #С¾³½ç0 ´ó¾³½çΪ¾³½çµÈ¼¶ GameWorld.GetGameFB().SetGameFBDict(ChConfig.Map_FBDict_PropertyMark, propertyMark + 1) PlayerControl.SetFBFuncLineID(curPlayer, lineID) #FBCommon.SetFBPropertyMark(lineID) if lineID == 0: FBCommon.SetFBStep(FB_Step_MapPrepare, tick) fbPlayerCnt = gameFB.GetGameFBDictByKey(ChConfig.Def_FB_NPCStrengthenPlayerCnt) DuJieFBCfg = GetRealmFBTimeCfg() if not gameFB.GetGameFBDictByKey(DuJieFB_LeaderPlayerID): #ÖØÖÃÊôÐÔ¼Ó³É for attrID in DuJieFBCfg[Def_HelpAddAttrID]: PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmFBAttrAdd % attrID, 0) GameWorld.DebugLog('Íæ¼Ò½øÈ븱±¾') #if lineID == 0 or fbPlayerCnt == 1 or curPlayer.GetTeamLV() == IPY_GameWorld.tmlLeader: __SetFBLeaderPlayer(curPlayer) # if gameFB.GetFBStep() == FB_Step_Fighting: # __OnDuJieFBStart(tick) fbStep = gameFB.GetFBStep() if lineID !=0 and fbStep == FB_Step_CallHelp: FBHelpBattle.SendGameServer_RefreshHelpBattlePlayer(curPlayer, ChConfig.Def_FBMapID_DuJie) return if fbStep == FB_Step_MapPrepare: #³õʼ»¯²¢Í¨ÖªµÈ´ýµ¹¼ÆÊ± __EnterFBInPrepare(curPlayer, DuJieFBCfg[Def_Time_MapPrepare] * 1000, gameFB, tick) elif fbStep == FB_Step_Fighting: #֪ͨ½øÈëʱ¼ä notifyTick = max(DuJieFBCfg[Def_Time_Fight] * 1000 - (tick - gameFB.GetFBStepTick()), 0) curPlayer.Sync_TimeTick(IPY_GameWorld.tttTowerTake, 0, notifyTick, True) #__UpdDuJieFBStar(tick, True) DoFBHelp(curPlayer, tick) return ## ÕÙ»½ÖúÕ½Íê³É def OnCallHelpBattleOK(curPlayer, tick): lineID = 1 if FBCommon.GetFBPropertyMark() else 0 EventReport.WriteEvent_FB(curPlayer, ChConfig.Def_FBMapID_DuJie, lineID, ChConfig.CME_Log_Start, 0) DuJieFBCfg = GetRealmFBTimeCfg() FBCommon.SetFBStep(FB_Step_MapPrepare, tick) __EnterFBInPrepare(curPlayer, DuJieFBCfg[Def_Time_MapPrepare] * 1000, GameWorld.GetGameFB(), tick) return def __SetFBLeaderPlayer(curPlayer): ##ÉèÖø±±¾¶É½ÙÖ÷ÈË gameFB = GameWorld.GetGameFB() gameFB.SetGameFBDict(DuJieFB_LeaderPlayerID, curPlayer.GetPlayerID()) gameFB.SetGameFBDict(DuJieFB_RealmLV, curPlayer.GetOfficialRank()) PlayerPrestigeSys.SyncRealmFBState(curPlayer) FBCommon.UpdateFBEnterTick(curPlayer) #ÇëÇ󻤷¨ OnGetMemberForHelpDujie(curPlayer, False) return ##¸±±¾¶¨Ê±Æ÷ # @param tick ʱ¼ä´Á # @return ·µ»ØÖµÎÞÒâÒå # @remarks ¸±±¾¶¨Ê±Æ÷ def OnProcess(tick): fbStep = GameWorld.GetGameFB().GetFBStep() if fbStep == FB_Step_MapPrepare: __DoLogic_MapPrepare(tick) elif fbStep == FB_Step_Fighting: __DoLogic_MapFighting(tick) elif fbStep == FB_Step_LeaveTime: __DoLogic_MapLeave(tick) return ## ¸üе±Ç°¸±±¾ÐǼ¶ def __UpdDuJieFBStar(tick, isForce=False): return gameFB = GameWorld.GetGameFB() curStar = gameFB.GetGameFBDictByKey(DuJieFB_Star) if curStar == 1: return curStar useSecond = int(math.ceil((tick - gameFB.GetFBStepTick()) / 1000.0)) DuJieFBCfg = GetRealmFBTimeCfg() starTimeList = DuJieFBCfg[Def_StarTime] diffSecond = 0 updStar = 1 # ĬÈÏÖÁÉÙ1ÐÇ for star, starTime in enumerate(starTimeList, 2): if useSecond <= starTime: updStar = star diffSecond = starTime - useSecond if curStar == updStar and not isForce: return curStar gameFB.SetGameFBDict(DuJieFB_Star, updStar) GameWorld.DebugLog("__UpdDuJieFBStar useSecond=%s,curStar=%s,updStar=%s, diffSecond=%s" % (useSecond, curStar, updStar, diffSecond)) playerManager = GameWorld.GetMapCopyPlayerManager() for index in xrange(playerManager.GetPlayerCount()): curPlayer = playerManager.GetPlayerByIndex(index) if not curPlayer: continue DoFBHelp(curPlayer, tick) if updStar != 1: curPlayer.Sync_TimeTick(IPY_GameWorld.tttFlagTake, 0, diffSecond * 1000, True) return updStar def __EnterFBInPrepare(curPlayer, downTime, gameFB, tick, notifyEff=False): #֪ͨ׼±¸µ¹¼ÆÊ± notifyTick = max(downTime - (tick - gameFB.GetFBStepTick()), 0) curPlayer.Sync_TimeTick(IPY_GameWorld.tttWaitStart, 0, notifyTick, True) if notifyEff: curPlayer.Sync_TimeTick(IPY_GameWorld.tttAddUpTime, 0, notifyTick, True) return def __DoLogic_MapPrepare(tick): invadeCfg = GetRealmFBTimeCfg() if tick - GameWorld.GetGameFB().GetFBStepTick() < invadeCfg[Def_Time_MapPrepare] * 1000: return FBCommon.SetFBStep(FB_Step_Fighting, tick) __OnDuJieFBStart(tick) return def __DoLogic_MapFighting(tick): invadeCfg = GetRealmFBTimeCfg() if tick - GameWorld.GetGameFB().GetFBStepTick() >= invadeCfg[Def_Time_Fight] * 1000: __DoDoJieFBOver(False, tick) return __UpdDuJieFBStar(tick) return def __DoLogic_MapLeave(tick): invadeCfg = GetRealmFBTimeCfg() if tick - GameWorld.GetGameFB().GetFBStepTick() < invadeCfg[Def_Time_Leave] * 1000: return # ʱ¼äµ½£¬Ìß³ö»¹ÔÚ¸±±¾µÄÍæ¼ÒµÈ... #FBCommon.DoLogic_FBKickAllPlayer() return def __OnDuJieFBStart(tick): lineID = 1 if FBCommon.GetFBPropertyMark() else 0 if not GameWorld.GetGameFB().GetGameFBDictByKey(DuJieFB_LeaderPlayerID): findLeader = False playerManager = GameWorld.GetMapCopyPlayerManager() for index in xrange(playerManager.GetPlayerCount()): curPlayer = playerManager.GetPlayerByIndex(index) if not curPlayer: continue if curPlayer.GetTeamLV() == IPY_GameWorld.tmlLeader or (lineID == 1 and curPlayer.GetTeamID() == 0): __SetFBLeaderPlayer(curPlayer) findLeader = True break if not findLeader: GameWorld.Log(' ×¼±¸µ¹¼ÆÊ±Òѹý£¬¶Ó³¤ÈÔδ½øÈ븱±¾£¡£¡£¡ ') FBCommon.DoLogic_FBKickAllPlayer() return DuJieFBCfg = GetRealmFBTimeCfg() bossID = GetDuJieBossID() if not bossID: return mapID = GameWorld.GetMap().GetMapID() refreshBossMark = FBCommon.GetFBLineRefreshNPC(mapID, lineID) NPCCustomRefresh.SetNPCRefresh(refreshBossMark, [bossID]) # ֪ͨ¿ªÊ¼ FBCommon.Sync_Player_TimeTick(IPY_GameWorld.tttTowerTake, DuJieFBCfg[Def_Time_Fight] * 1000) FBCommon.NotifyCopyMapPlayerFBHelp(tick, DoFBHelp) __UpdDuJieFBStar(tick) return def __DoDoJieFBOver(isPass, tick): # ¸±±¾½áÊøÂß¼­ gameFB = GameWorld.GetGameFB() if gameFB.GetFBStep() != FB_Step_Fighting: return GameWorld.DebugLog("´¦Àí¶É½Ù¸±±¾½áÊøÂß¼­") invadeCfg = GetRealmFBTimeCfg() costTime = tick - gameFB.GetFBStepTick() FBCommon.SetFBStep(FB_Step_LeaveTime, tick) leaderPlayerID = gameFB.GetGameFBDictByKey(DuJieFB_LeaderPlayerID) copyMapPlayerManager = GameWorld.GetMapCopyPlayerManager() leaderPlayer = copyMapPlayerManager.FindPlayerByID(leaderPlayerID) if not leaderPlayer: #¶É½ÙµÄÈ˲»ÔÚÔòËãʧ°Ü isPass = False # ֪ͨGameServer¸±±¾½áÊø msgStr = str([isPass, leaderPlayerID]) GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(0, 0, 0, 'DuJieFBOver', msgStr, len(msgStr)) curStar = gameFB.GetGameFBDictByKey(DuJieFB_Star) realmLV = gameFB.GetGameFBDictByKey(DuJieFB_RealmLV) realmIpyData = PlayerPrestigeSys.GetRealmIpyData(realmLV) FBPropertyMark = FBCommon.GetFBPropertyMark() lineID = 1 if FBPropertyMark else 0 leaveTick = invadeCfg[Def_Time_Leave] * 1000 overDict = {FBCommon.Over_costTime:costTime,FBCommon.Over_grade:curStar, FBCommon.Over_leaderID:leaderPlayerID} playerCnt = copyMapPlayerManager.GetPlayerCount() for i in xrange(playerCnt): curPlayer = copyMapPlayerManager.GetPlayerByIndex(i) if curPlayer == None or curPlayer.IsEmpty(): continue # isHelpFight = lineID == 1 and curPlayer.GetPlayerID() != leaderPlayerID # joinType = FBCommon.GetFBJoinType(curPlayer, isHelpFight) EventReport.WriteEvent_FB(curPlayer, ChConfig.Def_FBMapID_DuJie, lineID, ChConfig.CME_Log_End, 0, isPass) curPlayer.Sync_TimeTick(IPY_GameWorld.tttLeaveMap, 0, leaveTick, True) if isPass and leaderPlayer: if curPlayer.GetPlayerID() == leaderPlayerID: #¶É½Ùͨ¹ý´¦Àí PlayerPrestigeSys.DologicDujieFBPass(curPlayer, realmLV, curStar) #Çå³ýCD FBCommon.SetFBPDictValue(curPlayer, ChConfig.Def_PDict_LastEnterFBTick % ChConfig.Def_FBMapID_DuJie, 0) FBCommon.SyncFBEnterTick(curPlayer) if lineID: addXianyuanCoin, reason = FBHelpBattle.DoFBAddXianyuanCoin(curPlayer, ChConfig.Def_FBMapID_DuJie, FBPropertyMark) overDict[FBCommon.Over_xianyuanCoin] = [addXianyuanCoin, reason] if realmIpyData and realmIpyData.GetIsBigRealm(): #³É¾Í PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_DujieFBHelpPass, 1) if playerCnt > 1: #¶àÈË×é¶Ó¶É½Ù EventShell.EventRespons_FBEvent(curPlayer, 'teamdujie') FBCommon.NotifyFBOver(curPlayer, ChConfig.Def_FBMapID_DuJie, lineID, isPass, overDict) return def __GiveTeamAward(curPlayer, leaderPlayer, realmIpyData, curStar): #°ïæ´òµÄ¸ø½±Àø if not realmIpyData: return teamAwardDict = realmIpyData.GetTeamAward() if not teamAwardDict: return prizeItemList = teamAwardDict.get(curStar, []) needSpace = len(prizeItemList) emptySpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem, needSpace) isSendMail = int(needSpace > emptySpace) # ÊÇ·ñ·¢ËÍÓʼþ if isSendMail: PlayerControl.SendMailByKey("RealmFBTeam", [curPlayer.GetPlayerID()], prizeItemList, [leaderPlayer.GetPlayerName()]) GameWorld.DebugLog("±³°ü¿Õ¼ä²»¹»£¬·¢ËÍÓʼþ: mailItemList=%s" % str(prizeItemList), curPlayer.GetPlayerID()) else: for itemID, itemCnt, isBind in prizeItemList: ItemControler.GivePlayerItem(curPlayer, itemID, itemCnt, isBind, [IPY_GameWorld.rptItem], event=["Dojie", False, {}]) return ##»ñµÃ¸±±¾°ïÖúÐÅÏ¢ # @param curPlayer Íæ¼ÒʵÀý # @param tick ʱ¼ä´Á # @return ÎÞÒâÒå # @remarks ÓÃÓÚ֪ͨÕóÓª±È·ÖÌõ def DoFBHelp(curPlayer, tick, helpDict={}): gameFB = GameWorld.GetGameFB() leaderPlayerID = gameFB.GetGameFBDictByKey(DuJieFB_LeaderPlayerID) # curStar = gameFB.GetGameFBDictByKey(DuJieFB_Star) helpDict[FBCommon.Help_leaderID] = leaderPlayerID FBCommon.Notify_FBHelp(curPlayer, helpDict) return def DoFB_Npc_KillNPC(attacker, curNPC, tick): __FBNPCOnKilled(curNPC, tick) return ## Ö´Ðи±±¾É±¹ÖÂß¼­ # @param curPlayer ɱ¹ÖµÄÈË # @param curNPC ±»É±µÄ¹Ö # @param tick µ±Ç°Ê±¼ä # @return None def DoFB_Player_KillNPC(curPlayer, curNPC, tick): __FBNPCOnKilled(curNPC, tick) return def __FBNPCOnKilled(curNPC, tick): bossID = curNPC.GetNPCID() if bossID != GetDuJieBossID(): return GameWorld.DebugLog('¶É½ÙÒѱ»»÷ɱ£¡') # # È«·þ¹ã²¥ # PlayerControl.WorldNotify(0, "jiazu_liubo_202580", [curPlayer.GetFamilyName(), mapID, bossID]) __DoDoJieFBOver(True, tick) return ## ¼ì²éÊÇ·ñ¿É¹¥»÷£¬ Ö÷Åж¨²»¿É¹¥»÷µÄÇé¿ö£¬ÆäËûÂß¼­ÓÉÍâ²ã¾ö¶¨ # @param attacker ¹¥»÷·½ # @param defender ·ÀÊØ·½ # @return bool def CheckCanAttackTagObjInFB(attacker, defender): gameFB = GameWorld.GetGameFB() if gameFB.GetFBStep() != FB_Step_Fighting: return False return True ## ¸±±¾ÐÐΪ # @param curPlayer Íæ¼Ò # @param actionType ÐÐΪÀàÐÍ # @param actionInfo ÐÐΪÐÅÏ¢ # @param tick µ±Ç°Ê±¼ä # @return None def DoFBAction(curPlayer, actionType, actionInfo, tick): if curPlayer.GetPlayerID() != GameWorld.GetGameFB().GetGameFBDictByKey(DuJieFB_LeaderPlayerID): return #ÑéÖ¤¼ä¸ô if tick - curPlayer.GetTickByType(ChConfig.TYPE_Player_Tick_DuJieInspire) < IpyGameDataPY.GetFuncCfg('RealmFBHelpAttr', 3): #ûµ½¼ä¸ô GameWorld.DebugLog("µã»÷¹ÄÎè¼ä¸ô") return curPlayer.SetTickByType(ChConfig.TYPE_Player_Tick_DuJieInspire, tick) OnGetMemberForHelpDujie(curPlayer, True) return def OnGetMemberForHelpDujie(curPlayer, isInspire): #ÏòÃËÓÑѰÇóÊØ»¤ # if curPlayer.GetFamilyID() <= 0: # GameWorld.DebugLog("ûÓÐÕ½ÃË£¬²»ÄÜÇëÇóÊØ»¤£¡") # return realmLV = GameWorld.GetGameFB().GetGameFBDictByKey(DuJieFB_RealmLV) realmIpyData = PlayerPrestigeSys.GetRealmIpyData(realmLV) if not realmIpyData: return if realmIpyData.GetIsBigRealm(): GameWorld.DebugLog("´ó¾³½ç¶É½Ù£¬²»ÄÜÇëÇóÊØ»¤£¡") return GameWorld.DebugLog("ÏòÃËÓÑѰÇó¶É½ÙÊØ»¤£¡") atkAdd = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmFBAttrAdd % ShareDefine.Def_Effect_BaseAtkAddPer) msgStr = str([atkAdd, isInspire]) GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(curPlayer.GetID(), 0, 0, 'GetMemberForHelpDujie', msgStr, len(msgStr)) return def OnGetDuJieHelpInfo(curPlayer, helpInfo): #ÊÕµ½ÊØ»¤ÐÅÏ¢ realmFBHelpAttrDict = IpyGameDataPY.GetFuncEvalCfg('RealmFBHelpAttr') totalAttrDict = {} fbhelpInfo = '' for helpType, name in helpInfo: attrDict = realmFBHelpAttrDict.get(str(helpType), {}) for attrID, attrValue in attrDict.items(): totalAttrDict[attrID] = totalAttrDict.get(attrID, 0) + attrValue fbhelpInfo +='%s|%s,' % (helpType, name) for attrID, attrValue in totalAttrDict.items(): if int(attrID) in GetRealmFBTimeCfg()[Def_HelpAddAttrID]: PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmFBAttrAdd % attrID, attrValue) #Ë¢ÊôÐÔ PlayerControl.PlayerControl(curPlayer).RefreshPlayerAttrByBuff() #¸±±¾°ïÖúÐÅÏ¢ if fbhelpInfo: fbhelpInfo = fbhelpInfo[:-1] helpDict = {'helpInfo':fbhelpInfo} DoFBHelp(curPlayer, 0, helpDict) return def CalcDujieFBAttrAdd(curPlayer, allAttrList): #»¤·¨ÊôÐÔ¼ÆËã if FBCommon.GetRecordMapID(curPlayer.GetMapID()) != ChConfig.Def_FBMapID_DuJie: return leaderPlayerID = GameWorld.GetGameFB().GetGameFBDictByKey(DuJieFB_LeaderPlayerID) if curPlayer.GetID() != leaderPlayerID: return # fbStep = GameWorld.GetGameFB().GetFBStep() # if fbStep != FB_Step_Fighting: # return fbcfg = GetRealmFBTimeCfg() if not fbcfg: return GameWorld.DebugLog('»¤·¨ÊôÐÔ¼ÆËã allAttrList=%s'%allAttrList) for attrID in GetRealmFBTimeCfg()[Def_HelpAddAttrID]: attrValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmFBAttrAdd % attrID) PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrList) GameWorld.DebugLog('»¤·¨ÊôÐÔ¼ÆËã½á¹û allAttrList=%s'%allAttrList) return ## ÊÇ·ñ¸±±¾¸´»î # @param None # @return ÊÇ·ñ¸±±¾¸´»î def OnPlayerReborn(): return True