hxp
2026-03-06 2470d825e304e982261afd240d06ef03cd5366e8
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
#!/usr/bin/python
# -*- coding: GBK -*-
#-------------------------------------------------------------------------------
#
##@package Player.PlayerActSign
#
# @todo:ͨÓõĻµÇ¼ǩµ½
# @author hxp
# @date 2026-02-26
# @version 1.0
#
# ÏêϸÃèÊö: Í¨ÓõĻµÇ¼ǩµ½
#
#-------------------------------------------------------------------------------
#"""Version = 2026-02-26 16:00"""
#-------------------------------------------------------------------------------
 
import ShareDefine
import PlayerControl
import IpyGameDataPY
import ChPyNetSendPack
import ItemControler
import NetPackCommon
import GameWorld
import ChConfig
 
def ResetActSign(curPlayer, actName, actNum):
    if actName not in ShareDefine.OperationActTypeDict:
        return
    actType = ShareDefine.OperationActTypeDict[actName]
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ActSignAward % (actType, actNum), 0)
    GameWorld.DebugLog("ÖØÖûǩµ½: %s,actType=%s,actNum=%s" % (actName, actType, actNum), curPlayer.GetPlayerID())
    Sync_ActSignPlayerInfo(curPlayer, actName, actNum)
    return
 
def OnGetActSignAward(curPlayer, dataEx, dataExStr):
    ## ÁìÈ¡»î¶¯Ç©µ½½±Àø
    actType = GameWorld.ToIntDef(dataExStr)
    actNum = dataEx
    
    playerID = curPlayer.GetPlayerID()
    actName = ""
    for aName, aType in ShareDefine.OperationActTypeDict.items():
        if aType == actType:
            actName = aName
            break
        
    actInfo = GameWorld.GetActInfo(actName, actNum)
    if not actInfo or not actInfo.get(ShareDefine.ActKey_State):
        GameWorld.DebugLog("»î¶¯Ç©µ½·Ç»î¶¯ÖÐ: actType=%s,actNum=%s,actName=%s" % (actType, actNum, actName), playerID)
        return
    cfgID = actInfo.get(ShareDefine.ActKey_CfgID)
    dayIndex = actInfo.get(ShareDefine.ActKey_DayIndex)
    ipyData = IpyGameDataPY.GetIpyGameData(actName, cfgID)
    if not ipyData:
        return
    if not hasattr(ipyData, "GetSignTempID"):
        GameWorld.DebugLog("»î¶¯ÎÞÇ©µ½: actType=%s,actNum=%s,actName=%s" % (actType, actNum, actName), playerID)
        return
    signTempID = ipyData.GetSignTempID()
    signIpyDataList = IpyGameDataPY.GetIpyGameDataList("ActSignAward", signTempID)
    if not signIpyDataList:
        return
    
    awardItemList = []
    updAwardRecord = awardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActSignAward % (actType, actNum))
    for dayIpyData in signIpyDataList:
        dayNum = dayIpyData.GetDayNum()
        if (dayIndex + 1) < dayNum:
            break
        if awardRecord & pow(2, dayNum):
            #GameWorld.DebugLog("¸Ã»î¶¯Ç©µ½ÌìÒÑÁìÈ¡! dayNum=%s" % dayNum)
            continue
        awardItemList += dayIpyData.GetSignAwardItemList()
        updAwardRecord |= pow(2, dayNum)
        
    if not awardItemList:
        GameWorld.DebugLog("ûÓпÉÁìÈ¡µÄ»î¶¯Ç©µ½½±Àø! actType=%s,actNum=%s,actName=%s,dayIndex=%s,awardRecord=%s" 
                           % (actType, actNum, actName, dayIndex, awardRecord), playerID)
        return
    
    GameWorld.DebugLog("ÁìÈ¡»î¶¯Ç©µ½½±Àø£¡ actType=%s,actNum=%s,actName=%s,dayIndex=%s,awardRecord=%s,updAwardRecord=%s,%s" 
                           % (actType, actNum, actName, dayIndex, awardRecord, updAwardRecord, awardItemList), playerID)
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ActSignAward % (actType, actNum), updAwardRecord)
    Sync_ActSignPlayerInfo(curPlayer, actName, actNum)
    ItemControler.GivePlayerItemOrMail(curPlayer, awardItemList, event=["ActSign", False, {}])
    return
 
def Sync_ActSignPlayerInfo(curPlayer, actName, actNum):
    if actName not in ShareDefine.OperationActTypeDict:
        return
    actType = ShareDefine.OperationActTypeDict[actName]
    clientPack = ChPyNetSendPack.tagSCActSignPlayerInfo()
    clientPack.ActType = actType
    clientPack.ActNum = actNum
    clientPack.SignAward = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActSignAward % (actType, actNum))
    NetPackCommon.SendFakePack(curPlayer, clientPack)
    return