#!/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
|