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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
#!/usr/bin/python
# -*- coding: GBK -*-
#-------------------------------------------------------------------------------
#
##@package Player.PlayerFeastRedPacket
#
# @todo:½ÚÈÕºì°ü
# @author hxp
# @date 2019-01-29
# @version 1.0
#
# ÏêϸÃèÊö: ½ÚÈÕºì°ü
#
#-------------------------------------------------------------------------------
#"""Version = 2019-01-29 16:00"""
#-------------------------------------------------------------------------------
 
import GameWorld
import PyGameData
import PlayerControl
import IpyGameDataPY
import PlayerSuccess
import ChPyNetSendPack
import NetPackCommon
import ShareDefine
import ChConfig
 
def DoPlayerOnLogin(curPlayer):
    if not GetFeastRedPacketState():
        return
    isReset = __CheckPlayerFeastRedPacketAction(curPlayer)
    if not isReset:
        Sync_FeastRedPackInfo(curPlayer)
    return
 
def RefreshOperationAction_FeastRedPacket():
    __UpdTodayFeastSuccIDList()
    
    playerManager = GameWorld.GetPlayerManager()
    for i in xrange(playerManager.OnlineCount()):
        curPlayer = playerManager.OnlineAt(i)
        if not GameWorld.IsNormalPlayer(curPlayer):
            continue
        __CheckPlayerFeastRedPacketAction(curPlayer)
        
    return
 
def __UpdTodayFeastSuccIDList():
    feastRedPacketInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_FeastRedPacket, {})
    state = feastRedPacketInfo.get(ShareDefine.ActKey_State, 0)
    dayIndex = feastRedPacketInfo.get(ShareDefine.ActKey_DayIndex, 0)
    if not state:
        return
    
    feastDay = dayIndex + 1
    feastIpyDataList = IpyGameDataPY.GetIpyGameDataList("ActFeastRedPacketSucc", feastDay)
    if not feastIpyDataList:
        return
    
    succIDList = []
    for feastIpyData in feastIpyDataList:
        succIDList += list(feastIpyData.GetFeastSuccIDList())
        
    GameWorld.DebugLog("    ¸üнñÈÕ½ÚÈÕºì°ü³É¾ÍIDÁбí: %s" % succIDList)
    IpyGameDataPY.SetConfigEx("TodayFeastSuccIDList", succIDList)
    return
def GetTodayFeastSuccIDList(): return IpyGameDataPY.GetConfigEx("TodayFeastSuccIDList")
 
def __CheckPlayerFeastRedPacketAction(curPlayer):
    ## ¼ì²éÍæ¼Ò½ÚÈÕºì°ü»î¶¯Êý¾ÝÐÅÏ¢
    
    playerID = curPlayer.GetPlayerID()
    
    feastRedPacketInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_FeastRedPacket, {})
    curActID = feastRedPacketInfo.get(ShareDefine.ActKey_ID, 0)
    state = feastRedPacketInfo.get(ShareDefine.ActKey_State, 0)
    dayIndex = feastRedPacketInfo.get(ShareDefine.ActKey_DayIndex, 0)
    
    playerActID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FeastRedPacketActID) # Íæ¼ÒÉíÉϵĻID
    
    # »î¶¯ID ÏàͬµÄ»°²»´¦Àí
    if curActID == playerActID:
        GameWorld.DebugLog("ºì°ü½ÚÈջID²»±ä£¬²»´¦Àí£¡", playerID)
        return
    GameWorld.DebugLog("ÖØÖÃÍæ¼Òºì°ü½ÚÈջ! curActID=%s,playerActID=%s,state=%s,dayIndex=%s" % (curActID, playerActID, state, dayIndex), playerID)
    
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FeastRedPacketActID, curActID)
    dayCanGrabCount = IpyGameDataPY.GetFuncCfg('FeastRedPacket', 1)
    # ·ÇµÚÒ»ÌìÖ»ÖØÖÃÿÈÕ´ÎÊý£¬ÇÒ´ÎÊý¿ÉÒÔÀÛ¼Ó
    if dayIndex == 0:
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FeastRedPacketGrabMoney, 0)
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FeastRedPacketCanGrabCnt, dayCanGrabCount)
        GameWorld.DebugLog("    Ê×ÈÕÖØÖôÎÊý¼°½ð¶î!", playerID)
    else:
        canAddRemainCnt = IpyGameDataPY.GetFuncCfg('FeastRedPacket', 4)
        remainGrabCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FeastRedPacketCanGrabCnt)
        setTotalCanGrabCnt = (remainGrabCnt + dayCanGrabCount) if canAddRemainCnt else dayCanGrabCount
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FeastRedPacketCanGrabCnt, setTotalCanGrabCnt)
        GameWorld.DebugLog("    ·ÇÊ×ÈÕÖØÖôÎÊý! canAddRemainCnt=%s,remainGrabCnt=%s,setTotalCanGrabCnt=%s" % (canAddRemainCnt, remainGrabCnt, setTotalCanGrabCnt), playerID)
        
    # ÖØÖÃÏà¹Ø³É¾Í
    resetSuccIDList = []
    ipyDataMgr = IpyGameDataPY.IPY_Data()
    for index in xrange(ipyDataMgr.GetActFeastRedPacketSuccCount()):
        ipyData = ipyDataMgr.GetActFeastRedPacketSuccByIndex(index)
        feastDay = ipyData.GetFeastDay()
        feastDayIndex = feastDay - 1
        if dayIndex == 0 or feastDayIndex == dayIndex:
            for succID in ipyData.GetFeastSuccIDList():
                if succID not in resetSuccIDList:
                    resetSuccIDList.append(succID)
    PlayerSuccess.DoResetSuccessIDList(curPlayer, resetSuccIDList)
    
    Sync_FeastRedPackInfo(curPlayer)
    return True
 
def GetFeastRedPacketState():
    ## ½ÚÈÕºì°ü»î¶¯×´Ì¬
    feastRedPacketInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_FeastRedPacket, {})
    return feastRedPacketInfo.get(ShareDefine.ActKey_State, 0)
 
def GetFeastSuccRedPacketCanGrabCnt(curPlayer):
    ## ½ÚÈճɾͺì°ü¿ÉÁìÈ¡´ÎÊý
    return curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FeastRedPacketCanGrabCnt)
 
def GrabFeastRedPacketResult(curPlayer, moneyNum, getWay, isSelf):
    ##ÇÀ½ÚÈÕºì°ü½á¹û
    grabNum = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FeastRedPacketGrabMoney)
    newGrabNum = grabNum + moneyNum
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FeastRedPacketGrabMoney, newGrabNum)
    
    #¹ã²¥
    needSysOSRAllMoneyList = IpyGameDataPY.GetFuncEvalCfg('FeastRedPacket', 3)
    lastIndex = -1
    newIndex = -1
    for i, num in enumerate(needSysOSRAllMoneyList):
        if grabNum >= num:
            lastIndex = i
        if newGrabNum >= num:
            newIndex = i
    if newIndex != -1 and newIndex > lastIndex:
        PlayerControl.WorldNotify(0, 'ActivityOpenRedBag1', [curPlayer.GetName(), newGrabNum])
        
    if not isSelf and getWay == ShareDefine.RedPackType_FeastSucc: #ÇÀ×Ô¼ºµÄºì°ü²»¿Û´ÎÊý
        grabCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FeastRedPacketCanGrabCnt)
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FeastRedPacketCanGrabCnt, max(0, grabCnt - 1))
        
    Sync_FeastRedPackInfo(curPlayer)
    return
 
def Sync_FeastRedPackInfo(curPlayer):
    #// AB 25 ½ÚÈÕºì°üÐÅÏ¢ #tagMCFeastRedPackInfo
    pack = ChPyNetSendPack.tagMCFeastRedPackInfo()
    pack.MoneyNum = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FeastRedPacketGrabMoney)
    pack.GrabCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FeastRedPacketCanGrabCnt)
    NetPackCommon.SendFakePack(curPlayer, pack)
    return