#!/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