hxp
2024-11-08 2e0dbebc2b1e2dbfea405ac4674c7c50bd92b73d
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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#!/usr/bin/python
# -*- coding: GBK -*-
#-------------------------------------------------------------------------------
#
##@package Player.PlayerActYunshi
#
# @todo:ÔËÊÆ»î¶¯
# @author hxp
# @date 2024-11-08
# @version 1.0
#
# ÏêϸÃèÊö: ÔËÊÆ»î¶¯
#
#-------------------------------------------------------------------------------
#"""Version = 2024-11-08 15:00"""
#-------------------------------------------------------------------------------
 
import PyGameData
import ShareDefine
import PlayerControl
import IpyGameDataPY
import ChPyNetSendPack
import PlayerTreasure
import NetPackCommon
import GameWorld
import ChConfig
 
def OnPlayerLogin(curPlayer):
    
    for actInfo in PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_Yunshi, {}).values():
        actNum = actInfo.get(ShareDefine.ActKey_ActNum, 0)
        isReset = __CheckPlayerActYunshiAction(curPlayer, actNum)
        # »î¶¯ÖÐͬ²½»î¶¯ÐÅÏ¢
        if not isReset and actInfo.get(ShareDefine.ActKey_State):
            Sync_ActYunshiActionInfo(curPlayer, actNum)
    return
 
def RefreshActYunshiActionInfo(actNum):
    ## ÊÕµ½GameServerͬ²½µÄ»î¶¯ÐÅÏ¢£¬Ë¢Ð»ÐÅÏ¢
    playerManager = GameWorld.GetPlayerManager()
    for index in xrange(playerManager.GetPlayerCount()):
        curPlayer = playerManager.GetPlayerByIndex(index)
        if not GameWorld.IsNormalPlayer(curPlayer):
            continue
        __CheckPlayerActYunshiAction(curPlayer, actNum)
    return
 
def __CheckPlayerActYunshiAction(curPlayer, actNum):
    ## ¼ì²éÍæ»î¶¯Êý¾ÝÐÅÏ¢
    
    playerID = curPlayer.GetPlayerID()
    
    actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_Yunshi, actNum)
    actID = actInfo.get(ShareDefine.ActKey_ID, 0)
    state = actInfo.get(ShareDefine.ActKey_State, 0)
    cfgID = actInfo.get(ShareDefine.ActKey_CfgID)
    
    playerActID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActYunshiID % actNum) # Íæ¼ÒÉíÉϵĻID
    lastTreasureType = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActYunshiTreasureType % actNum)
    
    # »î¶¯ID ÏàͬµÄ»°²»´¦Àí
    if actID == playerActID:
        GameWorld.DebugLog("ÔËÊÆ»î¶¯ID²»±ä£¬²»´¦Àí£¡ actNum=%s,cfgID=%s,actID=%s" % (actNum, cfgID, actID), playerID)
        return
    GameWorld.DebugLog("ÔËÊÆ»î¶¯ÖØÖÃ! actNum=%s,cfgID=%s,actID=%s,playerActID=%s,state=%s,lastTreasureType=%s" 
                       % (actNum, cfgID, actID, playerActID, state, lastTreasureType), playerID)
    if lastTreasureType:
        PlayerTreasure.ResetTreasureType(curPlayer, [lastTreasureType])
        
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ActYunshiID % actNum, actID)
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ActYunshiTreasureType % actNum, 0)
    
    if state:
        ipyData = IpyGameDataPY.GetIpyGameData("ActYunshi", cfgID)
        if ipyData:
            treasureType = ipyData.GetTreasureType()
            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ActYunshiTreasureType % actNum, treasureType)
            PlayerTreasure.ResetTreasureType(curPlayer, [treasureType])
            
        Sync_ActYunshiActionInfo(curPlayer, actNum)
    return True
 
def IsActTreasureType(curPlayer, treasureType):
    ## ÊÇ·ñ»î¶¯ÖеÄѰ±¦ÀàÐÍ
    for actInfo in PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_Yunshi, {}).values():
        actNum = actInfo.get(ShareDefine.ActKey_ActNum, 0)
        if not actInfo.get(ShareDefine.ActKey_State):
            continue
        if treasureType == curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActYunshiTreasureType % actNum):
            return True
    return False
 
def Sync_ActYunshiActionInfo(curPlayer, actNum):
    ## Í¨Öª»î¶¯ÐÅÏ¢
    actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_Yunshi, actNum)
    if not actInfo:
        return
    if not actInfo.get(ShareDefine.ActKey_State):
        return
    cfgID = actInfo.get(ShareDefine.ActKey_CfgID)
    ipyData = IpyGameDataPY.GetIpyGameData("ActYunshi", cfgID)
    if not ipyData:
        return
    
    startDateStr, endDateStr = GameWorld.GetOperationActionDateStr(ipyData)
    actPack = ChPyNetSendPack.tagMCActYunshiInfo()
    actPack.Clear()
    actPack.ActNum = actNum
    actPack.StartDate = startDateStr
    actPack.EndtDate = endDateStr
    actPack.ResetType = ipyData.GetResetType()
    actPack.LimitLV = ipyData.GetLVLimit()
    actPack.TreasureType = ipyData.GetTreasureType()
    NetPackCommon.SendFakePack(curPlayer, actPack)
    return