From a1ea5474ffd2b081668f9a0cef8d069aa78db85d Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期五, 12 十二月 2025 20:53:42 +0800
Subject: [PATCH] 389 流向记录(战斗服务器不记录流向)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_Arena.py |   98 ++++++++++++++++++++++++++----------------------
 1 files changed, 53 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 fb0c287..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,13 +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
 
@@ -67,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)
@@ -125,14 +132,36 @@
         GameWorld.DebugLog("scoreIndex=%s,winScoreInfo=%s" % (scoreIndex, winScoreInfo), playerID)
         
     # 无论胜负,只要挑战都给固定奖励
-    awardItemList = IpyGameDataPY.GetFuncEvalCfg("ArenaSet", 4)
-    overMsg.update({"tagPlayerID":tagPlayerID, "atkAddScore":atkAddScore, "defDecScore":defDecScore,
+    awardItemList = []
+    awardItemList += IpyGameDataPY.GetFuncEvalCfg("ArenaSet", 4)
+    exItemRate, exItemID = PlayerBeauty.GetBeautyEffInfo(curPlayer, PlayerBeauty.EffType_ArenaItemEx) # 概率额外获得1个物品
+    if exItemRate and exItemID:
+        if GameWorld.CanHappen(exItemRate):
+            awardItemList.append([exItemID, 1])
+            GameWorld.DebugLog("红颜概率额外获得1个物品: exItemRate=%s, exItemID=%s, awardItemList=%s" % (exItemRate, exItemID, awardItemList))
+    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()
@@ -142,7 +171,13 @@
     PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ArenaScore, updScore)
     GameWorld.DebugLog("score=%s,atkAddScore=%s,updScore=%s" % (score, atkAddScore, updScore), playerID)
     
-    tagViewCache = turnFight.tagViewCache
+    if isWin:
+        winCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ArenaWinCnt)
+        updWinCnt = PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ArenaWinCnt, winCnt + 1)
+        GameWorld.DebugLog("updWinCnt=%s" % (updWinCnt), playerID)
+            
+    tagViewCache = PlayerViewCache.FindViewCache(tagPlayerID)
+    
     gameRecMgr = DBDataMgr.GetGameRecMgr()
     atkRecMgr = gameRecMgr.GetRecTypeIDMgr(ShareDefine.Def_GameRecType_ArenaRecord, playerID)
     recData = atkRecMgr.AddRecData(maxCount)
@@ -150,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)
@@ -193,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
-    
-    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