From 2b91d1223f3d78bd2efa970478d1ed63666e131c Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期三, 10 十二月 2025 11:40:43 +0800
Subject: [PATCH] 129 【战斗】战斗系统-服务端(优化演武场匹配逻辑;)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_Arena.py | 86 ++++++++++++++++++++----------------------
1 files changed, 41 insertions(+), 45 deletions(-)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_Arena.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_Arena.py
index f9d3308..c1697cc 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_Arena.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_Arena.py
@@ -21,14 +21,17 @@
import ShareDefine
import PlayerControl
import IpyGameDataPY
+import PlayerSuccess
import PlayerActivity
import PlayerBillboard
+import PlayerViewCache
import PlayerZhanling
import ItemControler
import PlayerBeauty
import PlayerArena
import PlayerGubao
import PyGameData
+import PlayerTask
import FBCommon
import ChConfig
@@ -68,21 +71,24 @@
if not PlayerControl.HaveMoney(curPlayer, ShareDefine.TYPE_Price_ArenaTicket, 1):
return
+ PlayerTask.AddTaskValue(curPlayer, ChConfig.TaskType_ArenaBattle)
+ PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_OSAArenaBattle, 1)
+
return True, funcLineID
def GetFBPlayerLineupID(curPlayer, mapID, funcLineID):
## 获取玩家使用的攻防阵容ID
# @return: 攻击方阵容ID, 防守方阵容ID
- return ShareDefine.Lineup_Arena, ShareDefine.Lineup_ArenaDef
+ return ShareDefine.Lineup_ArenaAtk, ShareDefine.Lineup_ArenaDef
-def OnTurnFightOver(curPlayer, turnFight, mapID, funcLineID, overMsg):
- ## 回合战斗结束
+def OnTurnFightAward(curPlayer, guid, mapID, funcLineID, winFaction, statMsg, dateStr, reqData, awardDict):
+ ## 回合战斗结算奖励
if not curPlayer:
return
playerID = curPlayer.GetPlayerID()
- tagPlayerID = turnFight.tagPlayerID
- isWin = turnFight.isWin
+ tagPlayerID = reqData[1]
+ isWin = winFaction == ChConfig.Def_FactionA
canAtkRet = __checkCanAtkTagPlayer(curPlayer, tagPlayerID)
GameWorld.DebugLog("结算竞技场! isWin=%s,tagPlayerID=%s,canAtkRet=%s" % (isWin, tagPlayerID, canAtkRet), playerID)
@@ -133,13 +139,29 @@
if GameWorld.CanHappen(exItemRate):
awardItemList.append([exItemID, 1])
GameWorld.DebugLog("红颜概率额外获得1个物品: exItemRate=%s, exItemID=%s, awardItemList=%s" % (exItemRate, exItemID, awardItemList))
- overMsg.update({"tagPlayerID":tagPlayerID, "atkAddScore":atkAddScore, "defDecScore":defDecScore,
+ awardDict.update({"tagPlayerID":tagPlayerID, "atkAddScore":atkAddScore, "defDecScore":defDecScore,
FBCommon.Over_itemInfo:FBCommon.GetJsonItemList(awardItemList)})
- turnFight.awardData = [tagPlayerID, isWin, atkAddScore, defDecScore, awardItemList]
+ GameWorld.DebugLog("竞技场结算奖励: tagPlayerID=%s,isWin=%s,atkAddScore=%s,defDecScore=%s,awardItemList=%s" % (tagPlayerID, isWin, atkAddScore, defDecScore, awardItemList))
+ if not PlayerControl.PayMoney(curPlayer, ShareDefine.TYPE_Price_ArenaTicket, 1):
+ return
+
+ # 无论胜负,只要挑战都给固定奖励
+ ItemControler.GivePlayerItemOrMail(curPlayer, awardItemList, event=["Arena", False, {}], isNotifyAward=False)
+
+ __updArenaBatRecord(curPlayer, tagPlayerID, isWin, atkAddScore, defDecScore)
+
+ PlayerArena.Sync_ArenaInfo(curPlayer)
+
+ # 战斗结束系统强制刷新匹配
+ PlayerArena.DoArenaMatchRefresh(curPlayer, True, isSys=True)
+
+ PlayerZhanling.AddZhanlingValue(curPlayer, PlayerZhanling.ZhanlingType_ArenaCnt, 1)
+ PlayerGubao.AddGubaoSpecEffLayer(curPlayer, PlayerGubao.GubaoEffType_Arena, 1)
+ PlayerActivity.AddDailyTaskValue(curPlayer, ChConfig.DailyTask_Arena, 1)
return
-def __updArenaBatRecord(curPlayer, turnFight, tagPlayerID, isWin, atkAddScore, defDecScore):
+def __updArenaBatRecord(curPlayer, tagPlayerID, isWin, atkAddScore, defDecScore):
## 更新战斗相关日志、榜单等
playerID = curPlayer.GetPlayerID()
@@ -153,8 +175,9 @@
winCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ArenaWinCnt)
updWinCnt = PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ArenaWinCnt, winCnt + 1)
GameWorld.DebugLog("updWinCnt=%s" % (updWinCnt), playerID)
-
- tagViewCache = turnFight.tagViewCache
+
+ tagViewCache = PlayerViewCache.FindViewCache(tagPlayerID)
+
gameRecMgr = DBDataMgr.GetGameRecMgr()
atkRecMgr = gameRecMgr.GetRecTypeIDMgr(ShareDefine.Def_GameRecType_ArenaRecord, playerID)
recData = atkRecMgr.AddRecData(maxCount)
@@ -162,14 +185,15 @@
PlayerArena.SetRecAtkType(recData, PlayerArena.RecAtkType_Atk)
PlayerArena.SetRecTagPlayerID(recData, tagPlayerID)
PlayerArena.SetRecIsWin(recData, isWin)
- PlayerArena.SetRecFace(recData, tagViewCache.GetFace())
- PlayerArena.SetRecFacePic(recData, tagViewCache.GetFacePic())
- PlayerArena.SetRecRealmLV(recData, tagViewCache.GetRealmLV())
- PlayerArena.SetRecLV(recData, tagViewCache.GetLV())
+ PlayerArena.SetRecFace(recData, tagViewCache.GetFace() if tagViewCache else 0)
+ PlayerArena.SetRecFacePic(recData, tagViewCache.GetFacePic() if tagViewCache else 0)
+ PlayerArena.SetRecRealmLV(recData, tagViewCache.GetRealmLV() if tagViewCache else 1)
+ PlayerArena.SetRecLV(recData, tagViewCache.GetLV() if tagViewCache else 1)
# 名字、变更积分 +-、战力
# 战力统一记录防守阵容
- fightPower = TurnAttack.GetCacheLineupFightPower(tagViewCache, ShareDefine.Lineup_ArenaDef)
- recData.SetUserData({"Name":tagViewCache.GetPlayerName(), "AddScore":atkAddScore, "FightPower":fightPower})
+ fightPower = TurnAttack.GetCacheLineupFightPower(tagViewCache, ShareDefine.Lineup_ArenaDef) if tagViewCache else 0
+ tagPlayerName = tagViewCache.GetPlayerName() if tagViewCache else ""
+ recData.SetUserData({"Name":tagPlayerName, "AddScore":atkAddScore, "FightPower":fightPower})
# 攻击方仅在积分变更或者初始积分时更新榜单
if atkAddScore or updScore == IpyGameDataPY.GetFuncCfg("ArenaSet", 1):
PlayerBillboard.UpdatePlayerBillboard(curPlayer, ShareDefine.Def_BT_Arena, updScore)
@@ -205,36 +229,8 @@
PlayerArena.SetRecRealmLV(recData, curPlayer.GetOfficialRank())
PlayerArena.SetRecLV(recData, curPlayer.GetLV())
# 名字、变更积分 +-、战力
- fightPower = TurnAttack.GetPlayerLineupFightPower(curPlayer, ShareDefine.Lineup_ArenaDef)
+ fightPower = TurnAttack.GetPlayerLineupFightPower(curPlayer, ShareDefine.Lineup_ArenaAtk)
recData.SetUserData({"Name":curPlayer.GetPlayerName(), "AddScore":-defDecScore, "FightPower":fightPower})
if defDecScore: # 防守方仅变更时更新
PlayerBillboard.UpdateBillboardByID(tagPlayerID, ShareDefine.Def_BT_Arena, updScore)
- return
-
-def OnTurnFightAward(curPlayer, turnFight, mapID, funcLineID, awardData):
- ## 回合战斗结算奖励
- if not curPlayer:
- return
-
- if not awardData:
- return
-
- tagPlayerID, isWin, atkAddScore, defDecScore, awardItemList = awardData
- GameWorld.DebugLog("竞技场结算奖励: tagPlayerID=%s,isWin=%s,atkAddScore=%s,defDecScore=%s,awardItemList=%s" % (tagPlayerID, isWin, atkAddScore, defDecScore, awardItemList))
- if not PlayerControl.PayMoney(curPlayer, ShareDefine.TYPE_Price_ArenaTicket, 1):
- return
-
- # 无论胜负,只要挑战都给固定奖励
- ItemControler.GivePlayerItemOrMail(curPlayer, awardItemList, event=["Arena", False, {}], isNotifyAward=False)
-
- __updArenaBatRecord(curPlayer, turnFight, tagPlayerID, isWin, atkAddScore, defDecScore)
-
- PlayerArena.Sync_ArenaInfo(curPlayer)
-
- # 战斗结束系统强制刷新匹配
- PlayerArena.DoArenaMatchRefresh(curPlayer, True, isSys=True)
-
- PlayerZhanling.AddZhanlingValue(curPlayer, PlayerZhanling.ZhanlingType_ArenaCnt, 1)
- PlayerGubao.AddGubaoSpecEffLayer(curPlayer, PlayerGubao.GubaoEffType_Arena, 1)
- PlayerActivity.AddDailyTaskValue(curPlayer, ChConfig.DailyTask_Arena, 1)
return
--
Gitblit v1.8.0