From 82cfe894a6fab9122e2f558522e583ad4fde6acc Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期四, 16 一月 2025 18:12:01 +0800 Subject: [PATCH] 10263 【越南】【英文】【BT】【砍树】后端支持NPC仿真实玩家战斗和快速战斗(优化切图同步功能地图ID数据A126 A127 ExAttr3) --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py | 39 ++++++++++++++++++++++----------------- 1 files changed, 22 insertions(+), 17 deletions(-) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py index c90b515..4b5b358 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py @@ -1940,7 +1940,7 @@ SendToGameServerEnterFB(curPlayer, mapID, lineID, tick, extendParamList) return - PlayerResetWorldPosFB(curPlayer, sceneMapID, posX, posY, False, fbID, funcLineID=lineID) + PlayerResetWorldPosFB(curPlayer, mapID, posX, posY, False, fbID, funcLineID=lineID) return ##发送到GameServer请求进入副本 @@ -2120,6 +2120,7 @@ if curPlayer.GetMapID() != mapID: return + reqMapID = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_ReqFBMapID) # 由于后端地图不变所以不修改直接读 NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_ReqFBFuncLine, funcLineID) GameWorld.Log("玩家副本中变更功能线路虚拟切地图: mapID=%s,posX=%s,posY=%s,funcLineID=%s" % (mapID, posX, posY, funcLineID), curPlayer.GetPlayerID()) @@ -2127,7 +2128,7 @@ curPlayer.SetDict(ChConfig.Def_PlayerKey_ResetFBLinePosX, posX) curPlayer.SetDict(ChConfig.Def_PlayerKey_ResetFBLinePosY, posY) - NotifyPrepareChangeMap(curPlayer, mapID, funcLineID) + NotifyPrepareChangeMap(curPlayer) NotifyStartChangeMap(curPlayer) ## 发送 04 01 人物所在的场景初始化#tagPlayerMapInit @@ -2140,7 +2141,7 @@ curPlayer.SetSight(0) # 视野置0,切成功后恢复视野,防止接下来提前设置坐标导致前端视野刷新异常 curPlayer.ResetPos(posX, posY) # 这里直接设置坐标,防止前端未加载场景成功掉线导致重登后坐标错误 - SetFBFuncLineID(curPlayer, funcLineID) # 这里直接设置成目标功能线路ID,防止前端未加载场景成功掉线导致重登后加载场景异常 + SetFBFuncLineID(curPlayer, reqMapID, funcLineID) # 这里直接设置成目标功能线路ID,防止前端未加载场景成功掉线导致重登后加载场景异常 ## 发送 01 09 服务器准备就绪#tagServerPrepareOK prepareOK = ChNetSendPack.tagServerPrepareOK() @@ -2189,14 +2190,10 @@ return curPlayer.SetDict(ChConfig.Def_PlayerKey_TransTick, tick) - sceneMapID = mapID - if GameWorld.GetMap().GetMapFBTypeByMapID(mapID) != IPY_GameWorld.fbtNull: - # 副本功能场景地图 - mapID = FBCommon.GetRecordMapID(mapID) - fbLineIpyData = FBCommon.GetFBLineIpyData(mapID, funcLineID) - if fbLineIpyData: - sceneMapID = fbLineIpyData.GetMapID() - + mapID = FBCommon.GetRecordMapID(mapID) + fbLineIpyData = FBCommon.GetFBLineIpyData(mapID, funcLineID) + sceneMapID = mapID if not fbLineIpyData else fbLineIpyData.GetMapID() + # 地图分流, 减少单地图压力 FBMapShuntDict = ReadChConfig.GetEvalChConfig("FBMapShunt") if mapID in FBMapShuntDict: @@ -2217,6 +2214,7 @@ #获取副本传入副本需要携带的信息 msg = FBLogic.GetPlayerResetWorldPosFBMsg(curPlayer, mapID, funcLineID) + NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_ReqFBMapID, mapID) NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_ReqFBFuncLine, funcLineID) GameWorld.Log("玩家请求开始切图: sceneMapID=%s,posX=%s,posY=%s,takeTruck=%s,fbID=%s,msg=%s,funcLineID=%s,tick=%s,lastTransTick=%s" % (sceneMapID, posX, posY, takeTruck, fbID, msg, funcLineID, tick, lastTransTick), curPlayer.GetPlayerID()) @@ -2229,16 +2227,17 @@ #切地图处理玩家时钟纠正问题(需要一直通过玩家时钟计算的) RefreshPlayerTick(curPlayer) - NotifyPrepareChangeMap(curPlayer, sceneMapID, funcLineID) + NotifyPrepareChangeMap(curPlayer) return # 通知准备切换地图 -def NotifyPrepareChangeMap(curPlayer, sceneMapID, funcLineID): +def NotifyPrepareChangeMap(curPlayer): curPlayer.SetVisible(False) sendPack = ChPyNetSendPack.tagMCPrepareChangeMap() sendPack.Clear() - sendPack.MapID = GameWorld.GetMapDataMapID(sceneMapID) - sendPack.FuncLineID = funcLineID + sendPack.MapID = GameWorld.GetMapDataMapID(curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_ChangeMapID)) + sendPack.FuncLineID = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_ReqFBFuncLine) + sendPack.FuncMapID = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_ReqFBMapID) NetPackCommon.SendFakePack(curPlayer, sendPack) GameWorld.Log("准备切换地图", curPlayer.GetID()) @@ -2250,6 +2249,7 @@ sendPack.Clear() sendPack.MapID = GameWorld.GetMapDataMapID(curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_ChangeMapID)) sendPack.FuncLineID = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_ReqFBFuncLine) + sendPack.FuncMapID = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_ReqFBMapID) NetPackCommon.SendFakePack(curPlayer, sendPack) GameWorld.Log("通知开始切换地图", curPlayer.GetID()) @@ -6406,8 +6406,13 @@ def GetTeamCheckState(curPlayer): return curPlayer.GetExAttr2() ## 副本功能线路ID, 这里做db存储,防止在合并地图副本中掉线重上时前端无法加载正确的场景资源,登录加载场景时机为0102包 -def SetFBFuncLineID(curPlayer, funcLineID): return curPlayer.SetExAttr3(funcLineID, False, True) -def GetFBFuncLineID(curPlayer): return curPlayer.GetExAttr3() +def SetFBFuncLineID(curPlayer, mapID, funcLineID): + value = mapID * 1000 + funcLineID + if value != curPlayer.GetExAttr3(): + curPlayer.SetExAttr3(value, False, True) + return +def GetFBFuncMapID(curPlayer): return curPlayer.GetExAttr3() / 1000 +def GetFBFuncLineID(curPlayer): return curPlayer.GetExAttr3() % 1000 ## 跨服状态所在地图ID: 0-非跨服状态,非0-跨服状态对应的地图ID def GetCrossMapID(curPlayer): return curPlayer.GetExAttr5() -- Gitblit v1.8.0