| #!/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)  | 
|     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  |