From e612ef874bdecbd9c946ce0f0f2ff41d13193f28 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期五, 20 八月 2021 16:48:36 +0800
Subject: [PATCH] 8585 【BT3】【主干】竞技场(优化竞技场命令; 新增调整获得获得物品可配置广播)

---
 ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldArena.py          |   23 +++++++----
 ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/Arena.py                      |   73 ++++++++++++++++++++++++++++++++++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Arena.py |   17 ++++----
 3 files changed, 95 insertions(+), 18 deletions(-)

diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/Arena.py b/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/Arena.py
new file mode 100644
index 0000000..a0b3226
--- /dev/null
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/Arena.py
@@ -0,0 +1,73 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package GM.Commands.Arena
+#
+# @todo:竞技场
+# @author hxp
+# @date 2021-08-20
+# @version 1.0
+#
+# 详细描述: 竞技场
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2021-08-20 17:00"""
+#-------------------------------------------------------------------------------
+
+import GameWorld
+import GameWorldArena
+import ShareDefine
+
+#---------------------------------------------------------------------
+#全局变量
+#---------------------------------------------------------------------
+
+#---------------------------------------------------------------------
+#逻辑实现
+## 执行逻辑
+#  @param curPlayer 当前玩家
+#  @param gmList [cmdIndex gmAccID msg]
+#  @return None
+#  @remarks 函数详细说明.
+def OnExec(curPlayer, msgList):
+    
+    playerID = curPlayer.GetPlayerID()
+    
+    value1 = msgList[0]
+    if len(msgList) == 1 and value1 > 0:
+        updScore = value1
+        __UpdArenaScore(curPlayer, playerID, updScore)
+        
+    elif len(msgList) >= 3 and value1 == 2:
+        tagPlayerID, updScore = msgList[1], msgList[2]
+        __UpdArenaScore(curPlayer, tagPlayerID, updScore)
+        
+    return
+
+def __UpdArenaScore(curPlayer, playerID, updScore):
+    
+    # 更新榜单
+    billBoard = GameWorld.GetBillboard().FindBillboard(ShareDefine.Def_BT_Arena)
+    if billBoard:
+        billBoardData = billBoard.FindByID(playerID)
+        if billBoardData:
+            billBoardData.SetCmpValue(updScore)
+            billBoard.Sort()
+            GameWorld.DebugAnswer(curPlayer, "更新榜单积分playerID=%s,积分=%s" % (playerID, updScore))
+        else:
+            GameWorld.DebugAnswer(curPlayer, "未上榜不需要更新积分!")
+            
+    # 更新对战记录
+    battleRecList = GameWorldArena.GetPlayerArenaBattleRecList(playerID)
+    if len(battleRecList) > 0:
+        tagBattleRec = battleRecList[-1]
+        tagBattleRec.updScore = updScore
+        GameWorld.DebugAnswer(curPlayer, "对战记录积分更新playerID=%s,积分=%s" % (playerID, updScore))
+    else:
+        GameWorld.DebugAnswer(curPlayer, "无对战记录不需要更新积分!")
+        
+    return
+
+
+
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldArena.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldArena.py
index 19de738..b82040b 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldArena.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldArena.py
@@ -847,7 +847,7 @@
     
     opInfo = ""
     # 结算自己
-    addScore = __CalcBattleAddScore(curScore, tagScore, isWin)
+    addScore = __CalcBattleAddScore(playerID, curScore, tagScore, isWin)
     updScore = max(0, playerScore + addScore)
     GameWorld.DebugLog("    更新自身积分: addScore=%s,updScore=%s" % (addScore, updScore), playerID)
     
@@ -860,11 +860,14 @@
         randItemList = IpyGameDataPY.GetFuncEvalCfg("ArenaBattleAward", 3)
         awardItemInfo = GameWorld.GetResultByRandomList(randItemList)
         if awardItemInfo:
-            awardItemList.append(awardItemInfo)
-            
+            awardItemList.append(awardItemInfo[:3])
+            isWorldNotify = awardItemInfo[3] if len(awardItemInfo) > 3 else 0
+            if isWorldNotify:
+                PlayerControl.WorldNotify(0, "ArenaWinerItem", [curPlayer.GetName(), awardItemInfo[0], "", awardItemInfo[1]])
+                
     # 结算对手,仅玩家时结算,机器人不处理
     if tagPlayerID > MaxRobotID:
-        tagAddScore = __CalcBattleAddScore(tagScore, curScore, not isWin)
+        tagAddScore = __CalcBattleAddScore(tagPlayerID, tagScore, curScore, not isWin)
         updTagScore = max(0, tagScore + tagAddScore)
         GameWorld.DebugLog("    更新对手积分: tagAddScore=%s,updTagScore=%s" % (tagAddScore, updTagScore), playerID)
         tagCache = PlayerViewCache.FindViewCache(tagPlayerID)
@@ -943,26 +946,28 @@
                                                        cmdStr, len(cmdStr), curPlayer.GetRouteServerIndex())
     return
 
-def __CalcBattleAddScore(curScore, tagScore, isWin):
+def __CalcBattleAddScore(playerID, curScore, tagScore, isWin):
     ## 计算对战增加积分
     diffScore = curScore - tagScore # 积分差,有正负
     calcScoreFormatDict = IpyGameDataPY.GetFuncEvalCfg("ArenaBattleAward", 1) if isWin else IpyGameDataPY.GetFuncEvalCfg("ArenaBattleAward", 2)
     scoreKeyList = calcScoreFormatDict.keys()
     scoreKeyList.sort()
-    calcKey = ""
+    calcKey = None
     for scoreKey in scoreKeyList:
         if diffScore <= scoreKey:
             calcKey = scoreKey
             break
         
-    if not calcKey:
+    if calcKey == None:
+        GameWorld.ErrLog("    计算得分公式: playerID=%s,diffScore=%s,scoreKeyList=%s,isWin=%s 找不到对应key公式" 
+                           % (playerID, diffScore, scoreKeyList, isWin))
         return 0
     
     compileKey = "ArenaBattleScore_%s_%s" % (int(isWin), str(calcKey))
     formatStr = calcScoreFormatDict[calcKey]
     addScore = eval(FormulaControl.GetCompileFormula(compileKey, formatStr))
-    GameWorld.DebugLog("    计算得分公式: diffScore=%s,isWin=%s,compileKey=%s,formatStr=%s,addScore=%s" 
-                       % (diffScore, isWin, compileKey, formatStr, addScore))
+    GameWorld.DebugLog("    计算得分公式: playerID=%s,diffScore=%s,scoreKeyList=%s,isWin=%s,compileKey=%s,formatStr=%s,addScore=%s" 
+                       % (playerID, diffScore, scoreKeyList, isWin, compileKey, formatStr, addScore))
     return addScore
 
 #// A9 A8 查看竞技场对战记录 #tagCGQueryArenaBattleRecord
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Arena.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Arena.py
index 08134ed..0dd8d9e 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Arena.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Arena.py
@@ -18,7 +18,6 @@
 import GameWorld
 import ShareDefine
 import PlayerControl
-import PlayerBillboard
 import GameFuncComm
 import PlayerArena
 import ChConfig
@@ -33,6 +32,7 @@
     if not msgList:
         GameWorld.DebugAnswer(curPlayer, "重置玩家竞技场: Arena 0")
         GameWorld.DebugAnswer(curPlayer, "设置玩家榜积分: Arena 积分")
+        GameWorld.DebugAnswer(curPlayer, "设置玩家榜积分: Arena 2 对手ID 积分")
         GameWorld.DebugAnswer(curPlayer, "直接匹配到目标: Arena 1 对手ID 对手ID ...")
         GameWorld.DebugAnswer(curPlayer, "重置赛季直接用 test_OnWeek (需开服7天后)")
         return
@@ -41,6 +41,7 @@
         GameWorld.DebugAnswer(curPlayer, "竞技场功能未开启!")
         return
     
+    isSendGameServer = False
     value1 = msgList[0]
     if value1 <= 0:
         PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ArenaOSSeasonState, 0)
@@ -54,20 +55,18 @@
         PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ArenaScore, value1)
         PlayerArena.Sync_ArenaInfo(curPlayer)
         
-        # 同步排行榜
-        cmpValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ArenaScore)
-        cmpValue2 = curPlayer.GetFightPower()
-        cmpValue3 = 0
-        value1 = curPlayer.GetOfficialRank()
-        value2 = curPlayer.GetLV()
-        PlayerBillboard.UpdatePlayerBillboard(curPlayer, ShareDefine.Def_BT_Arena, cmpValue, cmpValue2, cmpValue3, value1, value2, autoSort=True)
+        isSendGameServer = True
         
     elif len(msgList) >= 2 and value1 == 1:
         gmMatchIDList = msgList[1:]
         PlayerArena.GMArenaMatch(curPlayer, gmMatchIDList)
         
+    elif len(msgList) >= 3 and value1 == 2:
+        
+        isSendGameServer = True
+        
     else:
         pass
     
-    return
+    return isSendGameServer
 

--
Gitblit v1.8.0