hxp
2024-11-25 59e5195763ed490b491ad5fb9a2e39cfde7d5f1f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#!/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