From 09f7856ed26cb659933e761f4641f0511b7cab0f Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期一, 06 五月 2024 16:21:11 +0800
Subject: [PATCH] 10033 【后端】砍树(回合战斗副本支持任务类型4副本过关、类型12挑战副本;回合副本可重复挑战奖励及首通奖励支持;修复回合战斗NPC不存在时报错bug;)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py |   35 ++++++++++++++++++++++++++++++-----
 1 files changed, 30 insertions(+), 5 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py
index 4eb4384..828d3f5 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py
@@ -36,6 +36,8 @@
 import ItemControler
 import PassiveBuffEffMng
 import FBLogic
+import ShareDefine
+import PlayerTask
 
 # 回合战斗流程状态
 (
@@ -85,6 +87,12 @@
     if tagPlayerID:
         if playerID == tagPlayerID:
             GameWorld.DebugLog("不能打自己!", playerID)
+            return
+        
+    fbIpyData = FBCommon.GetFBIpyData(mapID)
+    fbLineIpyData = FBCommon.GetFBLineIpyData(mapID, funcLineID)
+    if fbIpyData or fbLineIpyData:
+        if FBCommon.CheckCanEnterFBComm(curPlayer, mapID, funcLineID, fbIpyData, fbLineIpyData) != ShareDefine.EntFBAskRet_OK:
             return
         
     if not FBLogic.OnTurnFightRequest(curPlayer, mapID, funcLineID, tagPlayerID, valueList):
@@ -180,15 +188,24 @@
     if overRet != None:
         needSendGameServer, awardItemList, awardWay = overRet
         
-    if isWin and ipyData:
+    isFirstPass = None
+    if isWin and ipyData:    
+        passLineID = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FBPassLineID % mapID)
+        if funcLineID == passLineID + 1:
+            isFirstPass = True
+            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FBPassLineID % mapID, funcLineID)
+            FBCommon.Sync_FBPlayerFBInfoData(curPlayer, mapID)
+        else:
+            isFirstPass = False
+            
         if awardWay == 1 and not awardItemList:
             # 山寨测试先默认都是首次奖励,正式后需删除
-            awardItemList = ipyData.GetAwardItemListFirst()
+            awardItemList = ipyData.GetAwardItemListFirst() if isFirstPass else ipyData.GetAwardItemList()
             
     if awardItemList == None:
         awardItemList = []
         
-    GameWorld.DebugLog("奖励物品: %s" % awardItemList)
+    GameWorld.DebugLog("奖励物品: %s, isFirstPass=%s" % (awardItemList, isFirstPass))
     if awardWay == 1 and awardItemList:
         ItemControler.GivePlayerItemOrMail(curPlayer, awardItemList, event=["TurnFight", False, {"mapID":mapID, "funcLineID":funcLineID}])
         
@@ -198,6 +215,11 @@
     overMsg = {"isWin":isWin, "itemInfo":FBCommon.GetJsonItemList(awardItemList), "totalHurt":factionTotalHurtDict.get(1, 0)}
     playbackID and overMsg.update({"playbackID":playbackID})
     SyncTurnFightState(curPlayer, mapID, funcLineID, tagPlayerID, FightState_Award, turnNum, turnMax, overMsg)
+    
+    # 其他...
+    PlayerTask.AddTaskValue(curPlayer, ChConfig.TaskType_FBChallenge, 1, [mapID])
+    if isWin:
+        PlayerTask.UpdTaskValue(curPlayer, ChConfig.TaskType_FBPass)
     return
 
 def GetPlayerFactionInfoByCache(playerID):
@@ -238,9 +260,12 @@
     factionA, factionB, mainRolePlace = 1, 2, 1
     objRetA = __SummonFactionObjs(factionA, mainRolePlace, factionInfoA, sightLevel, posX, posY)
     objRetB = __SummonFactionObjs(factionB, mainRolePlace, factionInfoB, sightLevel, posX, posY)
-    objA, petObjListA, factionSyncInfoA = objRetA if objRetA else (None, [])
-    objB, petObjListB, factionSyncInfoB = objRetB if objRetB else (None, [])
+    objA, petObjListA, factionSyncInfoA = objRetA if objRetA else (None, [], {})
+    objB, petObjListB, factionSyncInfoB = objRetB if objRetB else (None, [], {})
     if not objA or not objB:
+        fightObjList = petObjListA + [objA] + petObjListB + [objB]
+        for gameObj in fightObjList:
+            TurnFightObjOverReset(gameObj, tick)
         return
     playerIDA = objA.GetDictByKey(ChConfig.Def_NPC_Dict_MirrorPlayerID) # 可能为0,非玩家镜像时为0
     playerIDB = objB.GetDictByKey(ChConfig.Def_NPC_Dict_MirrorPlayerID) # 可能为0,非玩家镜像时为0

--
Gitblit v1.8.0