#!/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 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(curPlayer=None): if curPlayer: realmLV = curPlayer.GetOfficialRank() else: realmLV = GameWorld.GetGameFB().GetGameFBDictByKey(DuJieFB_RealmLV) taskIpyDataList = IpyGameDataPY.GetIpyGameDataListNotLog("RealmLVUPTask", realmLV) if not taskIpyDataList: return for taskIpyData in taskIpyDataList: if taskIpyData.GetTaskType() != PlayerPrestigeSys.RealmTaskType_Dujie: continue taskID = taskIpyData.GetTaskID() if curPlayer: if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmTaskValue % taskID): GameWorld.DebugLog("Íæ¼Ò¶É½ÙbossÒÑÍê³É»÷ɱ! realmLV=%s,taskID=%s" % (realmLV, taskID), curPlayer.GetPlayerID()) return valueList = taskIpyData.GetNeedValueList() return valueList[0] if valueList else 0 return #---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): bossID = GetDuJieBossID(curPlayer) if not bossID: GameWorld.ErrLog("ûÓпÉÌôÕ½µÄ¶É½Ùboss»òÒÑÍê³É: realmLV=%s" % curPlayer.GetOfficialRank(), curPlayer.GetPlayerID()) 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 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) 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.AddRealmTaskValue(curPlayer, PlayerPrestigeSys.RealmTaskType_Dujie, 1) #Çå³ýCD FBCommon.SetFBPDictValue(curPlayer, ChConfig.Def_PDict_LastEnterFBTick % ChConfig.Def_FBMapID_DuJie, 0) FBCommon.SyncFBEnterTick(curPlayer) 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, 0, [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 return realmLV = GameWorld.GetGameFB().GetGameFBDictByKey(DuJieFB_RealmLV) realmIpyData = PlayerPrestigeSys.GetRealmIpyData(realmLV) if not realmIpyData: 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