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
159
160
161
162
163
164
165
166
167
168
169
170
#!/usr/bin/python
# -*- coding: GBK -*-
#-------------------------------------------------------------------------------
#
##@package Player.PlayerXiangong
#
# @todo:Ïɹ¬
# @author hxp
# @date 2024-09-04
# @version 1.0
#
# ÏêϸÃèÊö: Ïɹ¬
#
#-------------------------------------------------------------------------------
#"""Version = 2024-09-04 16:30"""
#-------------------------------------------------------------------------------
 
import ChConfig
import IpyGameDataPY
import PlayerControl
import ChPyNetSendPack
import DataRecordPack
import NetPackCommon
import ItemControler
import GameWorld
 
def OnPlayerLogin(curPlayer):
    SyncXiangongInfo(curPlayer)
    SyncTiandaoTreeInfo(curPlayer, True)
    return
 
def PlayerOnDay(curPlayer):
    
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_XiangongLikeState % 0, 0)
    
    xiangongIDList = []
    ipyMgr = IpyGameDataPY.IPY_Data()
    for index in range(ipyMgr.GetXiangongCount()):
        ipyData = ipyMgr.GetXiangongByIndex(index)
        xiangongID = ipyData.GetXiangongID()
        if not curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_XiangongLikeState % xiangongID):
            continue
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_XiangongLikeState % xiangongID, 0)
        xiangongIDList.append(xiangongID)
        
    if xiangongIDList:
        SyncXiangongInfo(curPlayer, xiangongIDList)
        
    return
 
def AddTiandaoQiyun(curPlayer, addValue, addDict={}):
    curQiyun = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TiandaoQiyun)
    updQiyun = min(curQiyun + addValue, ChConfig.Def_UpperLimit_DWord)
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TiandaoQiyun, updQiyun)
    PlayerControl.NotifyCode(curPlayer, "AddQiyun", [addValue])
    dataDict = {'PlayerID':curPlayer.GetPlayerID(), "PlayerName":curPlayer.GetPlayerName(), 
                'AccID':curPlayer.GetAccID(), "updQiyun":updQiyun, "addValue":addValue}
    dataDict.update(addDict)
    DataRecordPack.SendEventPack("AddTiandaoQiyun", dataDict, curPlayer)
    SyncTiandaoTreeInfo(curPlayer)
    return updQiyun
 
def GameServer_Xiangong_DoResult(curPlayer, msgData):
    
    msgType = msgData[0]
    dataMsg = msgData[1]
    
    ## µãÔÞÏɹ¬
    if msgType == "LikeXiangong":
        __DoLikeXiangong(curPlayer, dataMsg)
        
    return
 
def __DoLikeXiangong(curPlayer, dataMsg):
    
    xiangongID, moneyType, moneyValue = dataMsg
    
    playerID = curPlayer.GetPlayerID()
    likeState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_XiangongLikeState % xiangongID)
    if likeState:
        GameWorld.DebugLog("¸ÃÏɹ¬ÒѵãÔÞ! xiangongID=%s" % xiangongID, playerID)
        return
    GameWorld.DebugLog("Ïɹ¬µãÔÞ! xiangongID=%s,moneyType=%s,moneyValue=%s" % (xiangongID, moneyType, moneyValue), playerID)
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_XiangongLikeState % xiangongID, 1)
    SyncXiangongInfo(curPlayer, [xiangongID])
    PlayerControl.GiveMoney(curPlayer, moneyType, moneyValue, "LikeXiangong", {"xiangongID":xiangongID})
    return
 
def GetTiandaoTreeAward(curPlayer, awardIndex):
    ## ÁìÈ¡ÌìµÀÊ÷½±Àø
    
    playerID = curPlayer.GetPlayerID()
    ipyData = IpyGameDataPY.GetIpyGameData("TiandaoTree", awardIndex)
    if not ipyData:
        return
    if GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_TiandaoAward, awardIndex):
        GameWorld.DebugLog("¸ÃÌìµÀÊ÷½±ÀøÒÑÁì½±! awardIndex=%s" % awardIndex, playerID)
        return
    
    needQiyun = ipyData.GetNeedQiyun()
    awardItemList = ipyData.GetAwardItemList()
    
    qiyun = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TiandaoQiyun)
    if qiyun < needQiyun:
        GameWorld.DebugLog("µ±Ç°ÌìµÀÊ÷ÆøÔ˲»×㣬ÎÞ·¨Áì½±! awardIndex=%s,qiyun=%s < %s" % (awardIndex, qiyun, needQiyun), playerID)
        return
    
    GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_PDict_TiandaoAward, awardIndex, 1)
    
    ItemControler.GivePlayerItemOrMail(curPlayer, awardItemList)
    
    SyncTiandaoTreeInfo(curPlayer)
    return
 
def SyncXiangongInfo(curPlayer, xiangongIDList=None):
    syncXiangongIDList = []
    if xiangongIDList == None:
        ipyMgr = IpyGameDataPY.IPY_Data()
        for index in range(ipyMgr.GetXiangongCount()):
            ipyData = ipyMgr.GetXiangongByIndex(index)
            syncXiangongIDList.append(ipyData.GetXiangongID())
    else:
        syncXiangongIDList = xiangongIDList
        
    xiangongList = []
    for xiangongID in syncXiangongIDList:
        if not xiangongID:
            continue
        likeState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_XiangongLikeState % xiangongID)
        if not likeState and xiangongIDList == None:
            continue
        xg = ChPyNetSendPack.tagMCXiangong()
        xg.XiangongID = xiangongID
        xg.LikeStateToday = likeState
        xiangongList.append(xg)
        
    likeStateToday = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_XiangongLikeState % 0)
    if xiangongIDList == None and not xiangongList and not likeStateToday:
        return
    
    clientPack = ChPyNetSendPack.tagMCXiangongInfo()
    clientPack.LikeStateToday = likeStateToday
    clientPack.XiangongList = xiangongList
    clientPack.XiangongCount = len(clientPack.XiangongList)
    NetPackCommon.SendFakePack(curPlayer, clientPack)
    return
 
def SyncTiandaoTreeInfo(curPlayer, isLogin=False):
    ipyMgr = IpyGameDataPY.IPY_Data()
    treeCount = ipyMgr.GetTiandaoTreeCount()
    if not treeCount:
        return
    lastIpyData = ipyMgr.GetTiandaoTreeByIndex(treeCount - 1)
    if not lastIpyData:
        return
    keyNumMax = lastIpyData.GetAwardIndex() / 31 + 1
    awardStateList = []
    for keyNum in range(keyNumMax):
        awardStateList.append(curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TiandaoAward % keyNum))
        
    qiyun = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TiandaoQiyun)
    if isLogin and not qiyun and awardStateList.count(0) == len(awardStateList):
        return
    
    clientPack = ChPyNetSendPack.tagMCTiandaoTreeInfo()
    clientPack.Qiyun = qiyun
    clientPack.AwardStateList = awardStateList
    clientPack.AwardCount = len(clientPack.AwardStateList)
    NetPackCommon.SendFakePack(curPlayer, clientPack)
    return