From 8f7a29d699d30c14695a1a47a6fb70f45f9f4177 Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期四, 17 十月 2024 16:50:18 +0800 Subject: [PATCH] 10263 【越南】【英文】后端支持NPC仿真实玩家战斗和快速战斗 --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_PlayerMirror.py | 98 +++++++++++++++++++++++++++++++++++++----------- 1 files changed, 75 insertions(+), 23 deletions(-) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_PlayerMirror.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_PlayerMirror.py index 5375ace..7ff3583 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_PlayerMirror.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_PlayerMirror.py @@ -1,14 +1,25 @@ #!/usr/bin/python # -*- coding: GBK -*- -#--------------------------------------------------------------------- +#------------------------------------------------------------------------------- # -#--------------------------------------------------------------------- -##@package GY_Query_PlayerMirror +##@package Player.RemoteQuery.GY_Query_PlayerMirror +# +# @todo:玩家镜像打包数据 +# @author hxp +# @date 2024-10-17 +# @version 1.0 +# +# 详细描述: 玩家镜像打包数据 +# +#------------------------------------------------------------------------------- +#"""Version = 2024-10-17 15:00""" +#------------------------------------------------------------------------------- import GameWorld -import PlayerEventCounter -import ChPlayer -import GameServerRefresh +import MirrorAttack +import PlayerViewCacheTube +import PlayerControl +import ChConfig #--------------------------------------------------------------------- # @param query_Type 请求类型 @@ -17,26 +28,67 @@ # @param tick 当前时间 # @return "True" or "False" or "" def DoLogic(query_Type, query_ID, packCMDList, tick): - curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(query_ID) + GameWorld.DebugLog("GY_Query_PlayerMirror DoLogic", query_ID) + msgInfo, packDataDict = packCMDList + msgType = msgInfo["msgType"] + # 镜像战斗 + if msgType == "MirrorBattle": + curPlayer = None + playerID = msgInfo.get("playerID", 0) + if playerID: + curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(playerID) + if not curPlayer or curPlayer.IsEmpty(): + return '' + MirrorAttack.OnMirrorBattleInit(msgInfo, packDataDict, curPlayer) + + # 其他功能 + elif msgType == "": + pass - if not curPlayer or curPlayer.IsEmpty(): - return '' - playerData = packCMDList['playerData'] - # playerData为base64后的数据 - mirrorPlayer = GameWorld.GetGameWorld().CreateMirrorPlayer(playerData, curPlayer.GetPosX(), curPlayer.GetPosY()) - - - #CreateMirrorPlayer 中会调用到 ChPlayer.PlayerLogin - #是否镜像玩家 判断 mirrorPlayer.GetRealPlayerID()是否为0 - #python自己处理,以下逻辑,可以在DoPlayerLogin函数最后 判断是镜像玩家后统一处理 - - index = mirrorPlayer.GetIndex() - tick = GameWorld.GetGameWorld().GetTick() - PlayerEventCounter.GameServer_InitOK(index, tick) - ChPlayer.LoadMapOK(index, tick) - GameServerRefresh.GameSever_PlayerInitOK(index, tick) return '' +def DoResult(curPlayer , callFunName , funResult , tick): + GameWorld.DebugLog("GY_Query_PlayerMirror DoResult %s" % str(funResult), curPlayer.GetPlayerID()) + funResult = eval(funResult) + if not funResult: + return + msgType = funResult[0] + msgData = funResult[1] + + if msgType == "PackDataSyncState": + isCross, isNeed = msgData + __UpdPackDataSyncState(curPlayer, isCross, isNeed) + + elif msgType == "PullPlayerPackData": + msgInfo = msgData + __DoPullPlayerPackData(curPlayer, msgInfo, tick) + + return + +def __UpdPackDataSyncState(curPlayer, isCross, isNeed): + ## 更新打包数据同步状态,这里只更新状态即可,具体同步由定时同步处理 + syncState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_PackDataSyncState) + if isCross: + updSyncState = (1 if isNeed else 0) * 10 + syncState % 10 + else: + updSyncState = syncState / 10 + (1 if isNeed else 0) + if syncState == updSyncState: + return + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_PackDataSyncState, syncState) + GameWorld.DebugLog("更新打包数据同步状态: isCross=%s,isNeed=%s,syncState=%s,updSyncState=%s" + % (isCross, isNeed, syncState, updSyncState), curPlayer.GetPlayerID()) + return + +def __DoPullPlayerPackData(curPlayer, msgInfo, tick): + pullFrom = msgInfo.get("pullFrom") + isCross = False + # 0 或 非本服代表跨服需要 + if pullFrom == 0 or (pullFrom > 0 and pullFrom != GameWorld.GetServerGroupID()): + isCross = True + __UpdPackDataSyncState(curPlayer, isCross, 1) + PlayerViewCacheTube.UpdateGameServerPlayerCache(curPlayer, tick, forcePackData=True, packMsg=msgInfo) + return + -- Gitblit v1.8.0