From 71a26587b4adb83f1ce0810a1b67b1a48c525a8b Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期二, 17 十二月 2024 14:19:17 +0800
Subject: [PATCH] 10337 【越南】【英文】【BT】【砍树】爬塔通关类的支持一键过关
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFB.py | 50 +++++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBLogic.py | 30 ++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_SkyTower.py | 69 +++++++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini | 6
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py | 56 ++++++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_RealmTower.py | 58 +++++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_TrialTower.py | 78 ++++++++++
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py | 56 ++++++++
8 files changed, 393 insertions(+), 10 deletions(-)
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
index 80b6ad4..27aa94f 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
@@ -18984,6 +18984,62 @@
#------------------------------------------------------
+# B1 08 快速一键过关副本 #tagCMFBQuickPass
+
+class tagCMFBQuickPass(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Cmd", c_ubyte),
+ ("SubCmd", c_ubyte),
+ ("MapID", c_int),
+ ("LineID", c_ushort),
+ ]
+
+ def __init__(self):
+ self.Clear()
+ self.Cmd = 0xB1
+ self.SubCmd = 0x08
+ return
+
+ def ReadData(self, stringData, _pos=0, _len=0):
+ self.Clear()
+ memmove(addressof(self), stringData[_pos:], self.GetLength())
+ return _pos + self.GetLength()
+
+ def Clear(self):
+ self.Cmd = 0xB1
+ self.SubCmd = 0x08
+ self.MapID = 0
+ self.LineID = 0
+ return
+
+ def GetLength(self):
+ return sizeof(tagCMFBQuickPass)
+
+ def GetBuffer(self):
+ return string_at(addressof(self), self.GetLength())
+
+ def OutputString(self):
+ DumpString = '''// B1 08 快速一键过关副本 //tagCMFBQuickPass:
+ Cmd:%s,
+ SubCmd:%s,
+ MapID:%d,
+ LineID:%d
+ '''\
+ %(
+ self.Cmd,
+ self.SubCmd,
+ self.MapID,
+ self.LineID
+ )
+ return DumpString
+
+
+m_NAtagCMFBQuickPass=tagCMFBQuickPass()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMFBQuickPass.Cmd,m_NAtagCMFBQuickPass.SubCmd))] = m_NAtagCMFBQuickPass
+
+
+#------------------------------------------------------
# B1 06 助战召唤 #tagCMHelpBattleCall
class tagCMHelpBattleCall(Structure):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
index dee19f4..4538b16 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
@@ -476,9 +476,9 @@
PacketSubCMD_8=0x04
PacketCallFunc_8=OnClientStartFB
-PacketCMD_9=
-PacketSubCMD_9=
-PacketCallFunc_9=
+PacketCMD_9=0xB1
+PacketSubCMD_9=0x08
+PacketCallFunc_9=OnFBQuickPass
PacketCMD_10=
PacketSubCMD_10=
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
index 80b6ad4..27aa94f 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
@@ -18984,6 +18984,62 @@
#------------------------------------------------------
+# B1 08 快速一键过关副本 #tagCMFBQuickPass
+
+class tagCMFBQuickPass(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Cmd", c_ubyte),
+ ("SubCmd", c_ubyte),
+ ("MapID", c_int),
+ ("LineID", c_ushort),
+ ]
+
+ def __init__(self):
+ self.Clear()
+ self.Cmd = 0xB1
+ self.SubCmd = 0x08
+ return
+
+ def ReadData(self, stringData, _pos=0, _len=0):
+ self.Clear()
+ memmove(addressof(self), stringData[_pos:], self.GetLength())
+ return _pos + self.GetLength()
+
+ def Clear(self):
+ self.Cmd = 0xB1
+ self.SubCmd = 0x08
+ self.MapID = 0
+ self.LineID = 0
+ return
+
+ def GetLength(self):
+ return sizeof(tagCMFBQuickPass)
+
+ def GetBuffer(self):
+ return string_at(addressof(self), self.GetLength())
+
+ def OutputString(self):
+ DumpString = '''// B1 08 快速一键过关副本 //tagCMFBQuickPass:
+ Cmd:%s,
+ SubCmd:%s,
+ MapID:%d,
+ LineID:%d
+ '''\
+ %(
+ self.Cmd,
+ self.SubCmd,
+ self.MapID,
+ self.LineID
+ )
+ return DumpString
+
+
+m_NAtagCMFBQuickPass=tagCMFBQuickPass()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMFBQuickPass.Cmd,m_NAtagCMFBQuickPass.SubCmd))] = m_NAtagCMFBQuickPass
+
+
+#------------------------------------------------------
# B1 06 助战召唤 #tagCMHelpBattleCall
class tagCMHelpBattleCall(Structure):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBLogic.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBLogic.py
index a543acd..6ef3d49 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBLogic.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBLogic.py
@@ -1668,6 +1668,36 @@
return callFunc(curPlayer, mapID, lineID, cnt, dataEx)
+def OnPlayerFBQuickPass(curPlayer, mapID, lineID):
+ '''副本快速过关验证
+ @param mapID: 数据地图ID
+ @param lineID: 目标关卡线路ID,可一次性跳多关,由前端发包决定
+ @return: (bossID, quickCnt) 或 None
+ @note: bossID 目标NPCID - 目标关卡所需要挑战的主NPCID,一般是boss,用于验证战力是否满足快速过关
+ @note: quickCnt 本次总共跳过几关 - 默认1
+ '''
+ do_FBLogic_ID = __GetFBLogic_MapID(mapID)
+
+ callFunc = GameWorld.GetExecFunc(FBProcess, "GameLogic_%s.%s" % (do_FBLogic_ID, "OnPlayerFBQuickPass"))
+
+ # 没有额外条件判断默认返回True
+ if callFunc == None:
+ return
+
+ return callFunc(curPlayer, mapID, lineID)
+
+def OnPlayerFBQuickPassResult(curPlayer, mapID, lineID):
+ '''副本快速过关结果
+ '''
+ do_FBLogic_ID = __GetFBLogic_MapID(mapID)
+
+ callFunc = GameWorld.GetExecFunc(FBProcess, "GameLogic_%s.%s" % (do_FBLogic_ID, "OnPlayerFBQuickPassResult"))
+
+ if callFunc == None:
+ return
+
+ return callFunc(curPlayer, mapID, lineID)
+
#---------------------------------------------------------------------
## 切换地图询问(只询问第一条线) 判断是否可以进入副本
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_RealmTower.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_RealmTower.py
index 25a083f..80776a2 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_RealmTower.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_RealmTower.py
@@ -67,7 +67,7 @@
return __CheckCanChallenge(curPlayer, nextFloorID)
## 检查可否进行挑战
-def __CheckCanChallenge(curPlayer, floorID):
+def __CheckCanChallenge(curPlayer, floorID, checkPre=True):
playerID = curPlayer.GetPlayerID()
ipyData = GetTowerIpyData(floorID)
if not ipyData:
@@ -79,7 +79,7 @@
GameWorld.DebugLog("该境界塔层已过关: floorID=%s" % floorID, playerID)
return False
- if floorID > curFloorID + 1:
+ if checkPre and floorID > curFloorID + 1:
GameWorld.DebugLog("上一层未过关: floorID=%s > curFloorID=%s+1" % (floorID, curFloorID), playerID)
return False
@@ -138,9 +138,10 @@
return
## 获取BossID
-def __GetRealmTowerBossID():
- gameFB = GameWorld.GetGameFB()
- floorID = gameFB.GetGameFBDictByKey(FBDict_Floor)
+def __GetRealmTowerBossID(floorID=-1):
+ if floorID == -1:
+ gameFB = GameWorld.GetGameFB()
+ floorID = gameFB.GetGameFBDictByKey(FBDict_Floor)
ipyData = GetTowerIpyData(floorID)
if not ipyData:
GameWorld.ErrLog("__GetRealmTowerBossID() can not find %s in RealmTowerNPC.txt" % floorID)
@@ -308,3 +309,50 @@
StartfloorID(curPlayer, floorID, tick)
return
+
+def OnPlayerFBQuickPass(curPlayer, mapID, lineID):
+ '''副本快速过关验证
+ @param mapID: 数据地图ID
+ @param lineID: 目标关卡线路ID,可一次性跳多关,由前端发包决定
+ @return: (bossID, quickCnt) 或 None
+ @note: bossID 目标NPCID - 目标关卡所需要挑战的主NPCID,一般是boss,用于验证战力是否满足快速过关
+ @note: quickCnt 本次总共跳过几关 - 默认1
+ '''
+
+ if not __CheckCanChallenge(curPlayer, lineID, False):
+ return
+ curLineID = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_RealmTowerFloor)
+ bossID = __GetRealmTowerBossID(lineID)
+ quickCnt = lineID - curLineID
+
+ return bossID, quickCnt
+
+def OnPlayerFBQuickPassResult(curPlayer, mapID, lineID):
+ '''副本快速过关结果
+ '''
+
+ playerID = curPlayer.GetPlayerID()
+ curLineID = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_RealmTowerFloor)
+ fromLineID = curLineID + 1
+ GameWorld.DebugLog("处理快速过关结算: mapID=%s,fromLineID=%s to %s" % (mapID, fromLineID, lineID), playerID)
+
+ itemListTotal = []
+ for floorID in range(fromLineID, lineID + 1):
+ ipyData = GetTowerIpyData(floorID)
+ if not ipyData:
+ continue
+
+ #更新关卡
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_RealmTowerFloor, floorID)
+ GameWorld.DebugLog('更新境界塔快速过关: floorID=%s' % floorID, playerID)
+
+ # 给过关奖励
+ giveItemList = ipyData.GetRewardItemList()
+ itemListTotal += giveItemList
+
+ prizeItemList = GameWorld.MergeItemList(itemListTotal)
+ ItemControler.GivePlayerItemOrMail(curPlayer, prizeItemList, None, ["RealmTower", False, {}])
+ quickPassDict = {FBCommon.Over_itemInfo:FBCommon.GetJsonItemList(prizeItemList), "quickPass":1}
+ __SendRealmTowerOverInfo(curPlayer, floorID, True, quickPassDict)
+ SyncRealmTowerInfo(curPlayer)
+ return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_SkyTower.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_SkyTower.py
index e3212f3..a8d0845 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_SkyTower.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_SkyTower.py
@@ -570,4 +570,73 @@
return
+def OnPlayerFBQuickPass(curPlayer, mapID, lineID):
+ '''副本快速过关验证
+ @param mapID: 数据地图ID
+ @param lineID: 目标关卡线路ID,可一次性跳多关,由前端发包决定
+ @return: (bossID, quickCnt) 或 None
+ @note: bossID 目标NPCID - 目标关卡所需要挑战的主NPCID,一般是boss,用于验证战力是否满足快速过关
+ @note: quickCnt 本次总共跳过几关 - 默认1
+ '''
+
+ if not __CheckCanChallenge(curPlayer, lineID):
+ return
+ curLineID = __GetSkyTowerCurFloor(curPlayer)
+ bossID = __GetSkyTowerBossID(lineID)
+ quickCnt = lineID - curLineID
+
+ return bossID, quickCnt
+def OnPlayerFBQuickPassResult(curPlayer, mapID, lineID):
+ '''副本快速过关结果
+ '''
+
+ playerID = curPlayer.GetPlayerID()
+ curLineID = __GetSkyTowerCurFloor(curPlayer)
+ fromLineID = curLineID + 1
+ GameWorld.DebugLog("处理快速过关结算: mapID=%s,fromLineID=%s to %s" % (mapID, fromLineID, lineID), playerID)
+
+ itemListTotal = []
+ for floorID in range(fromLineID, lineID + 1):
+ ipyData = GetTowerIpyData(floorID)
+ if not ipyData:
+ continue
+
+ if ipyData.GetIsNotify():
+ sysMark = 'KillGodTowerInfo_1'# if floorID == maxLevel else 'GeRen_liubo_471172'
+ PlayerControl.WorldNotify(0, sysMark, [curPlayer.GetPlayerName(), floorID])
+
+ #更新关卡
+ SetSkyTowerCurfloorID(curPlayer, floorID)
+
+ #过关奖励
+ giveItemDict = ipyData.GetReward()
+ giveItemList = [[itemID, itemCnt, 0] for itemID, itemCnt in giveItemDict.items()]
+ itemListTotal += giveItemList
+
+ PlayerActivity.AddDailyActionFinishCnt(curPlayer, ShareDefine.DailyActionID_SkyTower)
+
+ # 全服目标
+ ipyDataServer = IpyGameDataPY.GetIpyGameDataNotLog("SkyTowerServerChallenge", floorID)
+ if ipyDataServer:
+ maxNeedPassCount = 0
+ rankRewardInfo = ipyDataServer.GetPassRankRewardInfo()
+ for rank in rankRewardInfo.keys():
+ maxNeedPassCount = max(maxNeedPassCount, int(rank))
+ for needPlayerCount in ipyDataServer.GetServerRewardInfo().keys():
+ maxNeedPassCount = max(maxNeedPassCount, int(needPlayerCount))
+ playerID = curPlayer.GetPlayerID()
+ msgInfo = str(["ServerChallengePass", [floorID, maxNeedPassCount, rankRewardInfo]])
+ GameWorld.DebugLog("全服过关信息同步GameServer: %s" % msgInfo, playerID)
+ GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(playerID, 0, 0, "SkyTower", msgInfo, len(msgInfo))
+
+ prizeItemList = GameWorld.MergeItemList(itemListTotal)
+ ItemControler.GivePlayerItemOrMail(curPlayer, prizeItemList, None, ["SKYTower", False, {}])
+
+ quickPassDict = {FBCommon.Over_itemInfo:FBCommon.GetJsonItemList(prizeItemList), "quickPass":1}
+ __SendSkyTowerOverInfo(curPlayer, floorID, True, quickPassDict)
+ SyncSkyTowerInfo(curPlayer, 0) # 同步最新关卡信息
+ if floorID >= 10:
+ PlayerBillboard.UpdatePlayerBillboard(curPlayer, ShareDefine.Def_BT_SkyTower, floorID)
+
+ return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_TrialTower.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_TrialTower.py
index 2a292a0..aaeb8ce 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_TrialTower.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_TrialTower.py
@@ -355,7 +355,7 @@
## 给过关奖励
-def __GiveFBPassPrize(curPlayer, fbLevel):
+def __GiveFBPassPrize(curPlayer, fbLevel, moneyDictTotal=None, itemListTotal=None):
ipyData = GetTowerIpyData(fbLevel)
if not ipyData:
return {}
@@ -406,6 +406,11 @@
moneyDict = {ShareDefine.TYPE_Price_Rune:addJH, ShareDefine.TYPE_Price_Ysog:RuneMagicEssence}
prizeDict = {FBCommon.Over_money:FBCommon.GetJsonMoneyList(moneyDict), FBCommon.Over_itemInfo:FBCommon.GetJsonItemList(prizeItemList)}
+ if isinstance(moneyDictTotal, dict):
+ for moneyType, addValue in moneyDict.items():
+ moneyDictTotal[moneyType] = moneyDictTotal.get(moneyType, 0) + addValue
+ if isinstance(itemListTotal, list):
+ itemListTotal += prizeItemList
# for _ in xrange(challengeCnt):
# EventReport.WriteEvent_custom_mission_log(curPlayer, ChConfig.CME_FB_TrialTower, ChConfig.CME_Log_End, 1, cmeInfoEx=bossName)
return prizeDict
@@ -659,4 +664,73 @@
#BOSS复活活动
PlayerBossReborn.AddBossRebornActionCnt(curPlayer, ChConfig.Def_BRAct_TowerSweep, 1)
PlayerActLogin.AddLoginAwardActionCnt(curPlayer, ChConfig.Def_LoginAct_TowerSweep, 1)
- return True
\ No newline at end of file
+ return True
+
+def OnPlayerFBQuickPass(curPlayer, mapID, lineID):
+ '''副本快速过关验证
+ @param mapID: 数据地图ID
+ @param lineID: 目标关卡线路ID,可一次性跳多关,由前端发包决定
+ @return: (bossID, quickCnt) 或 None
+ @note: bossID 目标NPCID - 目标关卡所需要挑战的主NPCID,一般是boss,用于验证战力是否满足快速过关
+ @note: quickCnt 本次总共跳过几关 - 默认1
+ '''
+
+ ipyData = GetTowerIpyData(lineID)
+ if not ipyData:
+ return
+ curLineID = __GetTrialLevelCurPassLV(curPlayer)
+ if lineID <= curLineID:
+ GameWorld.DebugLog("符印塔本关已过关, 无法挑战! lineID=%s" % lineID, curPlayer.GetPlayerID())
+ return
+ bossID = ipyData.GetNPCID()
+ quickCnt = 0 #lineID - curLineID
+
+ fromLineID = curLineID + 1
+ for passLineID in range(fromLineID, lineID + 1):
+ # 符印塔lineID可能会跳,这里遍历不输出找不到的lineID
+ ipyData = IpyGameDataPY.GetIpyGameDataNotLog('RuneTower', passLineID)
+ if not ipyData:
+ continue
+ quickCnt += 1
+
+ return bossID, quickCnt
+
+def OnPlayerFBQuickPassResult(curPlayer, mapID, lineID):
+ '''副本快速过关结果
+ '''
+
+ playerID = curPlayer.GetPlayerID()
+ curLineID = __GetTrialLevelCurPassLV(curPlayer)
+ fromLineID = curLineID + 1
+ GameWorld.DebugLog("处理快速过关结算: mapID=%s,fromLineID=%s to %s" % (mapID, fromLineID, lineID), playerID)
+
+ moneyDictTotal = {}
+ itemListTotal = []
+ for passLineID in range(fromLineID, lineID + 1):
+ ipyData = IpyGameDataPY.GetIpyGameDataNotLog('RuneTower', passLineID)
+ if not ipyData:
+ continue
+
+ if ipyData.GetIsNotify():
+ IPY_Data = IpyGameDataPY.IPY_Data()
+ maxLevel = IPY_Data.GetRuneTowerByIndex(IPY_Data.GetRuneTowerCount()-1).GetID()
+ sysMark = 'RuneTowerInfo_1' if passLineID == maxLevel else 'GeRen_liubo_471172'
+ PlayerControl.WorldNotify(0, sysMark, [curPlayer.GetPlayerName(), passLineID / 100])
+
+ #更新关卡
+ SetTrialLevelCurPassLV(curPlayer, passLineID)
+ # 给过关奖励
+ __GiveFBPassPrize(curPlayer, passLineID, moneyDictTotal, itemListTotal)
+
+ #任务
+ EventShell.EventRespons_TrialTowerCnt(curPlayer, passLineID)
+ #每日任务
+ PlayerActivity.AddDailyActionFinishCnt(curPlayer, ShareDefine.DailyActionID_Tower)
+
+ prizeItemList = GameWorld.MergeItemList(itemListTotal)
+ quickPassDict = {FBCommon.Over_money:FBCommon.GetJsonMoneyList(moneyDictTotal),
+ FBCommon.Over_itemInfo:FBCommon.GetJsonItemList(prizeItemList),
+ "quickPass":1}
+ __SendTrialTowerOverInfo(curPlayer, passLineID, True, quickPassDict)
+ SyncTrialLevelInfo(curPlayer) # 同步最新关卡信息
+ return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFB.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFB.py
index 029f675..8213c7e 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFB.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFB.py
@@ -626,3 +626,53 @@
packData.Cnt = len(packData.InfoList)
NetPackCommon.SendFakePack(curPlayer, packData)
return
+
+#// B1 08 快速一键过关副本 #tagCMFBQuickPass
+#
+#struct tagCMFBQuickPass
+#{
+# tagHead Head;
+# DWORD MapID;
+# WORD LineID;
+#};
+def OnFBQuickPass(playerIndex, clientData, tick):
+ curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(playerIndex)
+ playerID = curPlayer.GetPlayerID()
+ mapID = clientData.MapID
+ lineID = clientData.LineID
+ GameWorld.DebugLog("玩家请求快速一键过关副本: mapID=%s,lineID=%s" % (mapID, lineID), playerID)
+
+ fbIpyData = FBCommon.GetFBIpyData(mapID)
+ fbLineIpyData = FBCommon.GetFBLineIpyData(mapID, lineID)
+ if FBCommon.CheckCanEnterFBComm(curPlayer, mapID, lineID, fbIpyData, fbLineIpyData) != ShareDefine.EntFBAskRet_OK:
+ return
+
+ reqRet = FBLogic.OnPlayerFBQuickPass(curPlayer, mapID, lineID)
+ if not reqRet or len(reqRet) != 2:
+ GameWorld.DebugLog("无法一键过关副本: mapID=%s,lineID=%s" % (mapID, lineID), playerID)
+ return
+ bossID, quickCnt = reqRet
+ if bossID:
+ npcData = GameWorld.GetGameData().FindNPCDataByID(bossID)
+ if not npcData:
+ return
+ npcFightPower = NPCCommon.GetSuppressFightPower(npcData)
+ quickNeedRatio = IpyGameDataPY.GetFuncCfg("FBQuickPass", 1)
+ quickNeedFightPower = int(npcFightPower * quickNeedRatio)
+ curFightPower = PlayerControl.GetFightPower(curPlayer)
+ if quickNeedFightPower and curFightPower < quickNeedFightPower:
+ GameWorld.DebugLog("无法一键过关副本! 战力限制: mapID=%s,lineID=%s,bossID=%s,npcFightPower=%s,quickNeedFightPower=%s > %s"
+ % (mapID, lineID, bossID, npcFightPower, quickNeedFightPower, curFightPower), playerID)
+ return
+
+ #增加副本进入次数
+ if fbIpyData and fbIpyData.GetDayTimes() and quickCnt:
+ # 跳关超过1关的要重新验证下
+ if quickCnt > 1 and FBCommon.CheckCanEnterFBComm(curPlayer, mapID, lineID, fbIpyData, fbLineIpyData, quickCnt) != ShareDefine.EntFBAskRet_OK:
+ return
+ FBCommon.AddEnterFBCount(curPlayer, mapID, quickCnt)
+
+ #扫荡结果给奖励等
+ FBLogic.OnPlayerFBQuickPassResult(curPlayer, mapID, lineID)
+ return
+
--
Gitblit v1.8.0