From 6d420bca9828729bb814be1ff9a45e4388c7c09d Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期一, 09 九月 2024 15:21:04 +0800
Subject: [PATCH] 0312 家族接口扩展
---
ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldArena.py | 99 +++++++++++++++++++++++++++++++++++++------------
1 files changed, 74 insertions(+), 25 deletions(-)
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldArena.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldArena.py
index 0ca959a..1ea70bf 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldArena.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldArena.py
@@ -29,6 +29,7 @@
import NetPackCommon
import IpyGameDataPY
import PyGameData
+import ChConfig
import random
import time
@@ -578,17 +579,54 @@
# 其他的获得保底奖励
orderPlayerIDList = orderPlayerIDDict.keys()
floorPlayerIDList = []
- for playerID, batRecList in PyGameData.g_arenaPlayerBattleRecDict.items():
- if not batRecList:
- #GameWorld.DebugLog("没有对战记录,不发奖励")
- continue
+ for playerID, battleRecList in PyGameData.g_arenaPlayerBattleRecDict.items():
if playerID in orderPlayerIDList:
+ continue
+ if not battleRecList:
+ #GameWorld.DebugLog("没有对战记录的不发! ", playerID)
continue
floorPlayerIDList.append(playerID)
PlayerCompensation.SendMailByKey("ArenaFloorAward%s" % awardType, [playerID], floorAwardList)
GameWorld.Log(" 奖励保底玩家信息: %s" % floorPlayerIDList)
return
+
+def OnTurnFightRequest(curPlayer, mapID, funcLineID, tagType, tagID, valueList):
+ playerID = curPlayer.GetPlayerID()
+ if not valueList or len(valueList) < 1:
+ GameWorld.DebugLog("没有指定valueList!", playerID)
+ return
+ tagPlayerID = valueList[0]
+
+ isFindTag, tagLV, tagJob, tagScore = __findBattleTag(playerID, tagPlayerID)
+ if not isFindTag:
+ GameWorld.ErrLog("找不到对战对手,不在匹配列表或对战记录里!不能战斗!tagPlayerID=%s" % tagPlayerID, playerID)
+ return
+
+ if tagPlayerID <= MaxRobotID:
+ #验证NPCID是否正确
+ if tagType != ChConfig.TurnBattle_TagType_NPC:
+ GameWorld.ErrLog("竞技场请求回合战斗目标为机器人时tagType错误! tagType=%s != %s"
+ % (tagType, ChConfig.TurnBattle_TagType_NPC), playerID)
+ return
+ robotLVNPCIDDict = IpyGameDataPY.GetFuncEvalCfg("ArenaRobotLVNPC", 1, {})
+ lvList = [int(lvStr) for lvStr in robotLVNPCIDDict.keys()]
+ lvList.sort()
+ tagLVStr = ""
+ for lv in lvList:
+ if tagLV <= lv:
+ tagLVStr = str(lv)
+ break
+ if tagLVStr not in robotLVNPCIDDict:
+ GameWorld.ErrLog("竞技场找不到该等级机器人对应的回合战斗NPCID! tagPlayerID=%s,tagLV=%s" % (tagPlayerID, tagLV), playerID)
+ return
+ npcID = robotLVNPCIDDict[tagLVStr]
+ if npcID != tagID:
+ GameWorld.ErrLog("竞技场请求回合战斗的机器人等级对应的NPCID不一致! tagPlayerID=%s,tagLV=%s,tagID=%s != npcID=%s"
+ % (tagPlayerID, tagLV, tagID, npcID), playerID)
+ return
+
+ return True
def MapServer_Arena(curPlayer, msgList):
GameWorld.DebugLog("MapServer_Arena %s" % str(msgList), curPlayer.GetPlayerID())
@@ -846,6 +884,7 @@
matchInfo.RealmLV = cacheDict["RealmLV"]
matchInfo.FightPower = fightPower % ShareDefine.Def_PerPointValue
matchInfo.FightPowerEx = fightPower / ShareDefine.Def_PerPointValue
+ matchInfo.Face = cacheDict.get("Face", 0)
else:
# 此处机器人的暂忽略等级变化的同步,仅在刷新、更新积分时同步,此处省略查询机器人所属榜单排名
pass
@@ -854,6 +893,33 @@
clientPack.MatchCount = len(clientPack.MatchList)
NetPackCommon.SendFakePack(curPlayer, clientPack)
return
+
+def __findBattleTag(playerID, tagPlayerID):
+ ## 检查查找要战斗的对象是否合法
+
+ isFindTag = False
+ tagLV, tagJob, tagScore = 0, 0, 0
+
+ # 先找匹配列表
+ matchList = PyGameData.g_arenaPlayerMatchDict.get(playerID, [])
+ for matchPlayer in matchList:
+ if matchPlayer.tagPlayerID == tagPlayerID:
+ isFindTag = True
+ tagLV, tagJob, tagScore = matchPlayer.tagLV, matchPlayer.tagJob, matchPlayer.tagScore
+ GameWorld.DebugLog(" 对手在匹配列表中! tagLV=%s, tagJob=%s, tagScore=%s" % (tagLV, tagJob, tagScore), playerID)
+ break
+
+ # 在找对战记录列表
+ curBattleRecList = GetPlayerArenaBattleRecList(playerID)
+ if not isFindTag:
+ for battleRec in curBattleRecList:
+ if battleRec.tagPlayerID == tagPlayerID:
+ isFindTag = True
+ tagLV, tagJob, tagScore = battleRec.tagLV, battleRec.tagJob, battleRec.tagScore
+ GameWorld.DebugLog(" 对手在对战记录中! tagLV=%s, tagJob=%s, tagScore=%s" % (tagLV, tagJob, tagScore), playerID)
+ break
+
+ return isFindTag, tagLV, tagJob, tagScore
def __DoArenaBattleResult(curPlayer, cmdDict):
## 地图玩家同步战斗结果
@@ -884,33 +950,14 @@
'''
curScore = playerScore
- isFindTag = False
- tagLV, tagJob, tagScore = 0, 0, 0
tagRealmLV, tagFightPower, tagAccID = 0, 0, "" # 机器人无值
- # 先找匹配列表
- matchList = PyGameData.g_arenaPlayerMatchDict.get(playerID, [])
- for matchPlayer in matchList:
- if matchPlayer.tagPlayerID == tagPlayerID:
- isFindTag = True
- tagLV, tagJob, tagScore = matchPlayer.tagLV, matchPlayer.tagJob, matchPlayer.tagScore
- GameWorld.DebugLog(" 对手在匹配列表中! tagLV=%s, tagJob=%s, tagScore=%s" % (tagLV, tagJob, tagScore), playerID)
- break
-
- # 在找对战记录列表
- curBattleRecList = GetPlayerArenaBattleRecList(playerID)
- if not isFindTag:
- for battleRec in curBattleRecList:
- if battleRec.tagPlayerID == tagPlayerID:
- isFindTag = True
- tagLV, tagJob, tagScore = battleRec.tagLV, battleRec.tagJob, battleRec.tagScore
- GameWorld.DebugLog(" 对手在对战记录中! tagLV=%s, tagJob=%s, tagScore=%s" % (tagLV, tagJob, tagScore), playerID)
- break
-
+ isFindTag, tagLV, tagJob, tagScore = __findBattleTag(playerID, tagPlayerID)
if not isFindTag:
GameWorld.ErrLog("找不到对战对手,不在匹配列表或对战记录里!不处理结算!tagPlayerID=%s" % tagPlayerID, playerID)
return retDict
+ curBattleRecList = GetPlayerArenaBattleRecList(playerID)
billBoard = GameWorld.GetBillboard().FindBillboard(ShareDefine.Def_BT_Arena)
if not billBoard:
return retDict
@@ -1123,6 +1170,7 @@
recInfo.RealmLV = cacheDict["RealmLV"]
recInfo.FightPower = fightPower % ShareDefine.Def_PerPointValue
recInfo.FightPowerEx = fightPower / ShareDefine.Def_PerPointValue
+ recInfo.Face = cacheDict.get("Face", 0)
clientPack.BattleRecordList.append(recInfo)
@@ -1165,6 +1213,7 @@
clientPack.RealmLV = cacheDict["RealmLV"]
clientPack.FightPower = fightPower % ShareDefine.Def_PerPointValue
clientPack.FightPowerEx = fightPower / ShareDefine.Def_PerPointValue
+ clientPack.Face = cacheDict.get("Face", 0)
NetPackCommon.SendFakePack(curPlayer, clientPack)
return
--
Gitblit v1.8.0