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