From e25e81a0a62baf5b6df6f9599cf791ef7085baa8 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期三, 08 十一月 2023 14:53:39 +0800
Subject: [PATCH] 0312 【主干】【BT0.1】增加持续回血 按目标最大血量(效果1307)
---
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFB.py | 92 ++++++++++++++++++++++++++++++++++++++-------
1 files changed, 77 insertions(+), 15 deletions(-)
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFB.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFB.py
index 927e896..10bcd77 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFB.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFB.py
@@ -33,6 +33,8 @@
import IPY_PlayerDefine
import CrossBattlefield
import CrossRealmPlayer
+import CrossChampionship
+import DataRecordPack
import CrossRealmMsg
import ShareDefine
import CrossBoss
@@ -146,6 +148,10 @@
mapID = msgData["MapID"]
funcLineID = msgData["FuncLineID"]
playerLV = msgData["LV"]
+
+ if mapID == ChConfig.Def_FBMapID_CrossChampionship:
+ CrossChampionship.OnRequestChampionshipVSRoom(playerID, serverGroupID)
+ return
zoneIpyData = CrossRealmPlayer.GetCrossZoneIpyDataByServerGroupID(mapID, serverGroupID)
if not zoneIpyData:
@@ -261,21 +267,25 @@
if openState == IPY_PlayerDefine.fbosOpen:
funcLineID = tagCopyMapObj.funcLineID
playerIDList = [playerID]
- retInfo = [playerIDList, mapID, realMapID, copyMapID, funcLineID]
+ # 分流地图的地图数据ID直接使用场景ID,因为分流地图实际上是两张不同的地图,所以直接使用场景ID,不然会导致上传跨服玩家数据时坐标为0
+ retInfo = [playerIDList, mapID, realMapID, realMapID, copyMapID, funcLineID]
CrossRealmMsg.SendMsgToClientServer(ShareDefine.CrossServerMsg_EnterFBRet, retInfo, [serverGroupID])
+ dataDict = {}
+ dataDict.update(msgData)
+ dataDict.update({"mapID":mapID, "realMapID":realMapID, "copyMapID":copyMapID, "realFuncLineID":funcLineID, "openState":openState})
+ DataRecordPack.SendEventPack("CrossFBRequest", dataDict)
return tagCopyMapObj
def CrossServerMsg_EnterFBRet(msgData, tick):
## 收到跨服服务器动态分配的跨服副本进入信息
-
- playerIDList, dataMapID, mapID, copyMapID, funcLineID = msgData
+ playerIDList, dataMapID, mapID, realMapID, copyMapID, funcLineID = msgData
for playerID in playerIDList:
curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(playerID)
if not curPlayer:
continue
- CrossRealmPlayer.SendCrossRealmReg(curPlayer, dataMapID, mapID, dataMapID, copyMapID, lineID=funcLineID)
+ CrossRealmPlayer.SendCrossRealmReg(curPlayer, dataMapID, realMapID, mapID, copyMapID, lineID=funcLineID)
return
@@ -464,6 +474,15 @@
GameWorld.GetPlayerManager().MapServer_QueryPlayer(0, 0, 0, realMapID, "OpenFB", msgInfo, len(msgInfo))
return copyMapObj
+def SendMapOpenFBEx(realMapID, copyPropertyList):
+ ## 通知地图开启副本线路
+ # @param realMapID: 地图ID
+ # @param copyPropertyList: [[copyMapID, propertyID], ...]
+ msgInfo = str(copyPropertyList)
+ GameWorld.GetPlayerManager().MapServer_QueryPlayer(0, 0, 0, realMapID, "OpenFBEx", msgInfo, len(msgInfo))
+ GameWorld.Log("SendMapOpenFBEx: realMapID=%s,msgInfo=%s" % (realMapID, msgInfo))
+ return
+
def OpenCrossDynamicLineBySys(zoneID, mapID, funcLineIDList, checkExist):
## 系统开启跨服动态线路
@@ -501,7 +520,7 @@
return 0
def OnCrossDynamicLineStateChange(msgList):
- realMapID, copyMapID, state = msgList[:3]
+ mapID, realMapID, copyMapID, state = msgList[:4]
if state == IPY_PlayerDefine.fbosWaitForClose:
funcLineDataCache = msgList[3]
@@ -509,11 +528,11 @@
elif state == IPY_PlayerDefine.fbosClosed:
OnCrossDynamicLineClose(realMapID, copyMapID)
elif state == IPY_PlayerDefine.fbosOpen:
- OnCrossDynamicLineOpen(realMapID, copyMapID)
+ OnCrossDynamicLineOpen(mapID, realMapID, copyMapID)
return
-def OnCrossDynamicLineOpen(realMapID, copyMapID):
+def OnCrossDynamicLineOpen(mapID, realMapID, copyMapID):
## 动态分配线路的地图虚拟线路启动成功
key = (realMapID, copyMapID)
@@ -532,11 +551,11 @@
playerIDList = serverPlayerIDListDict[serverGroupID]
playerIDList.append(playerID)
- mapID = GetRecordMapID(realMapID)
- GameWorld.Log("动态分配虚拟线路启动成功,通知子服等待玩家可进入: mapID=%s,realMapID=%s,copyMapID=%s,serverPlayerIDListDict=%s"
- % (mapID, realMapID, copyMapID, serverPlayerIDListDict))
+ recordMapID = GetRecordMapID(realMapID)
+ GameWorld.Log("动态分配虚拟线路启动成功,通知子服等待玩家可进入: recordMapID=%s,mapID=%s,realMapID=%s,copyMapID=%s,serverPlayerIDListDict=%s"
+ % (recordMapID, mapID, realMapID, copyMapID, serverPlayerIDListDict))
for serverGroupID, playerIDList in serverPlayerIDListDict.items():
- retInfo = [playerIDList, mapID, realMapID, copyMapID, funcLineID]
+ retInfo = [playerIDList, recordMapID, mapID, realMapID, copyMapID, funcLineID]
CrossRealmMsg.SendMsgToClientServer(ShareDefine.CrossServerMsg_EnterFBRet, retInfo, [serverGroupID])
#GameWorld.DebugLog(" PyGameData.g_crossDynamicLineInfo=%s" % PyGameData.g_crossDynamicLineInfo)
@@ -709,6 +728,7 @@
# @param sendCMD: 请求的命令 根据请求类型和请求命令来决定最终操作
# @return None
def EnterFBLine(curPlayer, queryCallName, sendCMD, tick):
+ playerID = curPlayer.GetPlayerID()
GameWorld.Log("EnterFBLine()...queryCallName=%s,sendCMD=%s" % (queryCallName, sendCMD), curPlayer.GetPlayerID())
playerManager = GameWorld.GetPlayerManager()
try:
@@ -753,10 +773,6 @@
if not GameWorldFamilyWar.CheckPlayerCanEnterFamilyWarFBMap(curPlayer):
return
- elif tagMapID == ChConfig.Def_FBMapID_FamilyBossMap:
- if not PlayerFamilyBoss.CheckIsFamilyBossFBOpen(curPlayer.GetFamilyID(), tagMapID):
- GameWorld.Log("EnterFBLine mapID=%s is familyBossFB, but is not open!" % tagMapID)
- return
#守卫人皇 是否已参加
elif tagMapID == ChConfig.Def_FBMapID_FamilyInvade:
if curPlayer.GetFamilyID() in PyGameData.g_swrhJoinRecord:
@@ -782,3 +798,49 @@
playerManager.MapServer_QueryPlayer(curPlayer.GetPlayerID(), ChConfig.queryType_EnterFB, 0, tagMapID,
queryCallName, sendCMD, len(sendCMD), curPlayer.GetRouteServerIndex())
return
+
+def Send_CrossServerMsg_EnterVSRoomRet(vsRoomDict, serverGroupIDList=None):
+ ## 发送子服跨服对战房间请求进入结果
+ # @param vsRoomDict: {roomID:{playerID:playerInfo, ...}, }
+ # playerInfo key
+ # serverGroupID 所属服务器分组ID
+ # regMapInfo 传送跨服注册信息 [registerMap, mapID, dataMapID, copyMapID, posX, posY]
+ CrossRealmMsg.SendMsgToClientServer(ShareDefine.CrossServerMsg_EnterVSRoomRet, vsRoomDict, serverGroupIDList)
+ return
+
+def CrossServerMsg_EnterVSRoomRet(msgData, tick):
+ ## 跨服对战房间请求进入结果
+
+ curServerGroupID = GameWorld.GetServerGroupID()
+ GameWorld.DebugLog("=== 跨服PK对战房间请求进入结果 === curServerGroupID=%s" % curServerGroupID)
+ vsRoomDict = msgData
+ for roomID, playerDict in vsRoomDict.items():
+ GameWorld.DebugLog(" roomID=%s,playerDict=%s" % (roomID, playerDict))
+ for playerID, playerInfo in playerDict.items():
+ if "serverGroupID" in playerInfo:
+ serverGroupID = playerInfo["serverGroupID"]
+ if serverGroupID != curServerGroupID:
+ GameWorld.DebugLog(" 不是本服玩家,不处理!playerID=%s,serverGroupID=%s" % (playerID, serverGroupID))
+ continue
+
+ player = GameWorld.GetPlayerManager().FindPlayerByID(playerID)
+ if not player:
+ GameWorld.DebugLog(" 玩家不在线, playerID=%s" % (playerID))
+ continue
+ if PlayerControl.GetIsTJG(player):
+ GameWorld.DebugLog(" 玩家脱机中, playerID=%s" % (playerID))
+ continue
+
+ if "regMapInfo" not in playerInfo:
+ continue
+ regMapInfo = playerInfo["regMapInfo"]
+ if len(regMapInfo) != 6:
+ continue
+ registerMap, mapID, dataMapID, copyMapID, posX, posY = regMapInfo
+
+ PlayerControl.SetVsRoomId(player, roomID, True)
+ # 通知地图玩家匹配成功, 上传数据, 准备进入跨服服务器
+ CrossRealmPlayer.SendCrossRealmReg(player, registerMap, mapID, dataMapID, copyMapID, posX, posY)
+
+ return
+
--
Gitblit v1.8.0