#!/usr/bin/python
|
# -*- coding: GBK -*-
|
#-------------------------------------------------------------------------------
|
#
|
##@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 MirrorAttack
|
import PlayerViewCacheTube
|
import PlayerControl
|
import ChConfig
|
#---------------------------------------------------------------------
|
|
# @param query_Type ÇëÇóÀàÐÍ
|
# @param query_ID ÇëÇóµÄÍæ¼ÒID
|
# @param packCMDList ·¢°üÃüÁî
|
# @param tick µ±Ç°Ê±¼ä
|
# @return "True" or "False" or ""
|
def DoLogic(query_Type, query_ID, packCMDList, tick):
|
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
|
|
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
|
|
|
|