#!/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}) ItemControler.NotifyGiveAwardInfo(curPlayer, [], "LikeXiangong", moneyInfo={moneyType:moneyValue}) 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, event=["TiandaoTree", False, {}]) 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