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