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