From a9415978e2c4b94debfb59787771e1434a1adf19 Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期三, 10 四月 2024 13:58:44 +0800 Subject: [PATCH] 10130 【后端】福地争夺资源功能(增加摇人功能) --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py | 90 +++++++++++++++++++++++++++++++++++++------- 1 files changed, 75 insertions(+), 15 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 a8caea7..4eb4384 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py @@ -35,6 +35,7 @@ import FBCommon import ItemControler import PassiveBuffEffMng +import FBLogic # 回合战斗流程状态 ( @@ -69,13 +70,60 @@ # tagHead Head; # DWORD MapID; // 自定义地图ID,可用于绑定战斗场景功能(如野外关卡,爬塔功能,竞技场等) # WORD FuncLineID; -# DWORD PlayerID; // 对应玩家ID,可为0,某些功能可能有用,如竞技场 +# DWORD PlayerID; // 战斗目标玩家ID,可为0,某些功能可能有用,如竞技场 +# BYTE ValueCount; +# DWORD ValueList[ValueCount]; // 附加值列表,可选,具体含义由MapID决定 #}; def OnTurnFight(index, clientData, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) mapID = clientData.MapID funcLineID = clientData.FuncLineID tagPlayerID = clientData.PlayerID + valueList = clientData.ValueList + + playerID = curPlayer.GetPlayerID() + if tagPlayerID: + if playerID == tagPlayerID: + GameWorld.DebugLog("不能打自己!", playerID) + return + + if not FBLogic.OnTurnFightRequest(curPlayer, mapID, funcLineID, tagPlayerID, valueList): + return + + # 需要发送到GameServer验证 + if mapID in ChConfig.Def_TFMapID_SendToGameServer: + SendToGameServer_TurnFight(curPlayer, "TurnFightRequest", [mapID, funcLineID, tagPlayerID, valueList]) + return + + DoTurnFightProcess(curPlayer, mapID, funcLineID, tagPlayerID, valueList, tick) + return + +def SendToGameServer_TurnFight(curPlayer, msgType, dataMsg=""): + playerID = curPlayer.GetPlayerID() + msgList = str([msgType, dataMsg]) + GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(playerID, 0, 0, "TurnFight", msgList, len(msgList)) + GameWorld.Log("回合战斗发送GameServer: %s, %s" % (msgType, dataMsg), playerID) + return + +def GameServer_TurnFight_DoResult(curPlayer, msgData, tick): + + msgType, dataMsg, ret = msgData + + if not ret: + return + + if msgType == "TurnFightRequest": + mapID, funcLineID, tagPlayerID, valueList = dataMsg + DoTurnFightProcess(curPlayer, mapID, funcLineID, tagPlayerID, valueList, tick) + + elif msgType == "TurnFightOver": + mapID, funcLineID, tagPlayerID, valueList, fightRet, awardItemList = dataMsg + FBLogic.OnTurnFightOver_GameServerRet(curPlayer, mapID, funcLineID, tagPlayerID, valueList, fightRet, awardItemList, ret) + + return + +def DoTurnFightProcess(curPlayer, mapID, funcLineID, tagPlayerID, valueList, tick): + ## 执行回合制战斗的完整流程 if curPlayer.GetSightLevel() != curPlayer.GetID(): PlayerControl.SetPlayerSightLevel(curPlayer, curPlayer.GetID()) @@ -83,23 +131,23 @@ SyncTurnFightState(curPlayer, mapID, funcLineID, tagPlayerID, FightState_Start) if tagPlayerID: - PlayerViewCacheTube.GetPlayerPropDataCall(curPlayer, tagPlayerID, DoTrunFightVSPlayer, [mapID, funcLineID], True) + PlayerViewCacheTube.GetPlayerPropDataCall(curPlayer, tagPlayerID, DoTrunFightVSPlayer, [mapID, funcLineID, valueList], True) return - DoTrunFight(curPlayer, mapID, funcLineID, tagPlayerID, tick) + DoTrunFight(curPlayer, mapID, funcLineID, tagPlayerID, valueList, tick) SyncTurnFightState(curPlayer, mapID, funcLineID, tagPlayerID, FightState_Over) return def DoTrunFightVSPlayer(curPlayer, tagPlayerID, callData, PropDict): - mapID, funcLineID = callData + mapID, funcLineID, valueList = callData if PropDict and curPlayer.GetPlayerID() != tagPlayerID: tick = GameWorld.GetGameWorld().GetTick() - DoTrunFight(curPlayer, mapID, funcLineID, tagPlayerID, tick) + DoTrunFight(curPlayer, mapID, funcLineID, tagPlayerID, valueList, tick) SyncTurnFightState(curPlayer, mapID, funcLineID, tagPlayerID, FightState_Over) return -def DoTrunFight(curPlayer, mapID, funcLineID, tagPlayerID, tick): +def DoTrunFight(curPlayer, mapID, funcLineID, tagPlayerID, valueList, tick): playerID = curPlayer.GetPlayerID() factionInfoA = GetPlayerFactionInfoByCache(playerID) ipyData = None @@ -121,20 +169,32 @@ skillIDExList.extend(ipyData.GetSTSkillIDList()) factionInfoB = {"npcID":npcID, "pet":petCacheInfo, "skillIDExList":skillIDExList} - ret = ProcessAutoTurnFight(mapID, funcLineID, factionInfoA, factionInfoB, tick, curPlayer) - if not ret: + fightRet = ProcessAutoTurnFight(mapID, funcLineID, factionInfoA, factionInfoB, tick, curPlayer) + if not fightRet: return - isWin, turnNum, turnMax, factionTotalHurtDict, playbackID = ret + isWin, turnNum, turnMax, factionTotalHurtDict, playbackID = fightRet - # 结算奖励...待扩展 - awardItemList = [] + # 结算奖励, awardWay-发放方式(0-不发放, 1-TurnAttack模块统一发放, 2-功能自己决定发放逻辑) + needSendGameServer, awardItemList, awardWay = False, [], 1 + overRet = FBLogic.OnTurnFightOver(curPlayer, mapID, funcLineID, tagPlayerID, valueList, fightRet) + if overRet != None: + needSendGameServer, awardItemList, awardWay = overRet + if isWin and ipyData: - # 山寨测试先默认都是首次奖励,正式后需删除 - awardItemList = ipyData.GetAwardItemListFirst() + if awardWay == 1 and not awardItemList: + # 山寨测试先默认都是首次奖励,正式后需删除 + awardItemList = ipyData.GetAwardItemListFirst() + + if awardItemList == None: + awardItemList = [] GameWorld.DebugLog("奖励物品: %s" % awardItemList) - ItemControler.GivePlayerItemOrMail(curPlayer, awardItemList, event=["TurnFight", False, {"mapID":mapID, "funcLineID":funcLineID}]) - + if awardWay == 1 and awardItemList: + ItemControler.GivePlayerItemOrMail(curPlayer, awardItemList, event=["TurnFight", False, {"mapID":mapID, "funcLineID":funcLineID}]) + + if needSendGameServer or mapID in ChConfig.Def_TFMapID_SendToGameServer: + SendToGameServer_TurnFight(curPlayer, "TurnFightOver", [mapID, funcLineID, tagPlayerID, valueList, fightRet, awardItemList]) + 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) -- Gitblit v1.8.0