#!/usr/bin/python
|
# -*- coding: GBK -*-
|
#-------------------------------------------------------------------------------
|
#
|
##@package Player.PlayerTree
|
#
|
# @todo:ÏÉÊ÷
|
# @author hxp
|
# @date 2025-05-28
|
# @version 1.0
|
#
|
# ÏêϸÃèÊö: ÏÉÊ÷
|
#
|
#-------------------------------------------------------------------------------
|
#"""Version = 2025-05-28 12:00"""
|
#-------------------------------------------------------------------------------
|
|
import GameWorld
|
import ItemCommon
|
import NetPackCommon
|
import IpyGameDataPY
|
import ChPyNetSendPack
|
import PlayerControl
|
import IPY_GameWorld
|
#import PlayerTask
|
import ChConfig
|
|
import time
|
|
def OnPlayerLogin(curPlayer):
|
treeLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreeLV)
|
if not treeLV:
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TreeLV, 1)
|
RefreshTreeLVUPTime(curPlayer)
|
SyncTreeInfo(curPlayer)
|
return
|
|
#// B2 23 ÏÉÊ÷Éý¼¶ #tagCMTreeLVUP
|
#
|
#struct tagCMTreeLVUP
|
#{
|
# tagHead Head;
|
# BYTE Type; // 0-¿ªÊ¼Éý¼¶£¨ÇëÇó¿Û³ýÏûºÄ£¬¿ªÊ¼Éý¼¶µ¹¼ÆÊ±£©£»1-Ö´ÐÐÉý¼¶£¨µ¹¼ÆÊ±Ê±¼äµ½ºó·¢Ë͸ÃÀàÐÍ£©
|
#};
|
def OnTreeLVUP(index, clientData, tick):
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
upType = clientData.Type
|
if upType == 1:
|
if not DoTreeLVUP(curPlayer):
|
SyncTreeInfo(curPlayer)
|
return
|
|
playerID = curPlayer.GetPlayerID()
|
lvupState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreeLVUPState)
|
if lvupState:
|
GameWorld.DebugLog("ÏÉÊ÷ÒѾÔÚÉý¼¶ÖÐ! lvupState=%s" % lvupState, playerID)
|
return
|
|
treeLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreeLV)
|
ipyData = IpyGameDataPY.GetIpyGameData("TreeLV", treeLV)
|
if not ipyData:
|
return
|
needMoney = ipyData.GetLVUPNeedMoney()
|
nextTreeLV = treeLV + 1
|
nextIpyData = IpyGameDataPY.GetIpyGameDataNotLog("TreeLV", nextTreeLV)
|
if needMoney <= 0 or not nextIpyData:
|
GameWorld.DebugLog("ÏÉÊ÷ÒÑÂú¼¶! treeLV=%s" % treeLV, playerID)
|
return
|
|
moneyType = IpyGameDataPY.GetFuncCfg("TreeLVUP", 1)
|
if not PlayerControl.PayMoney(curPlayer, moneyType, needMoney, "TreeLVUP", {"treeLV":treeLV}):
|
return
|
needTime = ipyData.GetLVUPNeedTime()
|
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TreeLVUPState, 1)
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TreeLVUPRemainTime, needTime)
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TreeLVUPRefreshTime, int(time.time()))
|
GameWorld.DebugLog("ÏÉÊ÷ÇëÇó¿ªÊ¼Éý¼¶! treeLV=%s,nextTreeLV=%s,needTime=%s" % (treeLV, nextTreeLV, needTime), playerID)
|
SyncTreeInfo(curPlayer)
|
return
|
|
#// B2 24 ʹÓÃÏÉÊ÷Éý¼¶¼õʱÎïÆ· #tagCMUseTreeLVUPTimeItem
|
#
|
#struct tagCMUseTreeLVUPTimeItem
|
#{
|
# tagHead Head;
|
# DWORD UseCount; // ʹÓøöÊý
|
# BYTE IsAutoBuy; // ²»×ã¸öÊýÊÇ·ñ×Ô¶¯¹ºÂò
|
#};
|
def OnUseTreeLVUPTimeItem(index, clientData, tick):
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
useCount = clientData.UseCount
|
isAutoBuy = clientData.IsAutoBuy
|
|
playerID = curPlayer.GetPlayerID()
|
lvupState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreeLVUPState)
|
LVUPRemainTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreeLVUPRemainTime)
|
if not lvupState or not LVUPRemainTime:
|
GameWorld.DebugLog("ÏÉÊ÷·ÇÉý¼¶ÖлòÊ£Óàʱ¼äΪ0£¬²»ÐèÒª¼õÉÙʱ¼ä! lvupState=%s,LVUPRemainTime=%s"
|
% (lvupState, LVUPRemainTime), playerID)
|
return
|
|
costItemID, reduceSeconds = IpyGameDataPY.GetFuncEvalCfg("TreeLVUP", 2)
|
GameWorld.DebugLog("ʹÓÃÏÉÊ÷Éý¼¶¼õʱÎïÆ·! costItemID=%s,reduceSeconds=%s,useCount=%s" % (costItemID, reduceSeconds, useCount), playerID)
|
if not costItemID or not useCount:
|
return
|
|
costItemIndexList, bindCnt, unBindCnt = ItemCommon.GetPackItemBindStateIndexInfo(curPlayer, costItemID, useCount)
|
lackCnt = useCount - bindCnt - unBindCnt
|
if lackCnt > 0 and not isAutoBuy:
|
GameWorld.DebugLog("ÏûºÄµÀ¾ß²»×ã! costItemID=%s,useCount=%s,bindCnt=%s,unBindCnt=%s,lackCnt=%s"
|
% (costItemID, useCount, bindCnt, unBindCnt, lackCnt), playerID)
|
return
|
|
delCnt = useCount
|
if lackCnt > 0:
|
moneyType = IPY_GameWorld.TYPE_Price_Gold_Money
|
lackCost = ItemCommon.GetAutoBuyItemNeedGold({costItemID:lackCnt})
|
if lackCost <= 0:
|
return
|
GameWorld.DebugLog("×Ô¶¯¹ºÂòµÀ¾ß: lackCnt=%s,moneyType=%s,lackCost=%s" % (lackCnt, moneyType, lackCost), playerID)
|
infoDict = {ChConfig.Def_Cost_Reason_SonKey:costItemID}
|
if not PlayerControl.PayMoney(curPlayer, moneyType, lackCost, ChConfig.Def_Cost_BuyStoreItem, infoDict):
|
return
|
delCnt -= lackCnt
|
|
# ¿Û³ýÏûºÄ
|
if delCnt:
|
ItemCommon.DelCostItemByBind(curPlayer, costItemIndexList, bindCnt, unBindCnt, delCnt, "TreeLVUPTimeItem")
|
|
reduceTime = reduceSeconds * useCount
|
ReduceTreeLVUPTime(curPlayer, reduceTime)
|
return
|
|
def RefreshTreeLVUPTime(curPlayer):
|
## Ë¢ÐÂÏÉÊ÷Éý¼¶Ê£Óàʱ¼ä
|
lvupState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreeLVUPState)
|
LVUPRemainTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreeLVUPRemainTime)
|
if not lvupState or not LVUPRemainTime:
|
return
|
curTime = int(time.time())
|
lastRefreshTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreeLVUPRefreshTime)
|
if not lastRefreshTime:
|
lastRefreshTime = curTime
|
passSeconds = max(0, curTime - lastRefreshTime)
|
updLVUPRemainTime = max(0, LVUPRemainTime - passSeconds)
|
|
treeLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreeLV)
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TreeLVUPRemainTime, updLVUPRemainTime)
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TreeLVUPRefreshTime, curTime)
|
GameWorld.DebugLog("Ë¢ÐÂÏÉÊ÷Éý¼¶Ê£Óàʱ¼ä! updLVUPRemainTime=%s,treeLV=%s,LVUPRemainTime=%s,passSeconds=%s,lastRefreshTime=%s"
|
% (updLVUPRemainTime, treeLV, LVUPRemainTime, passSeconds, lastRefreshTime), curPlayer.GetPlayerID())
|
return
|
|
def ReduceTreeLVUPTime(curPlayer, reduceTime):
|
## ¼õÉÙÏÉÊ÷Éý¼¶Ê£Óàʱ¼ä£¬¿ÉÄÜÊÇʹÓõÀ¾ß»òÆäËû¹¦ÄܵÈ
|
RefreshTreeLVUPTime(curPlayer)
|
lvupState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreeLVUPState)
|
LVUPRemainTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreeLVUPRemainTime)
|
if not lvupState or not LVUPRemainTime:
|
GameWorld.DebugLog("ÏÉÊ÷·ÇÉý¼¶ÖлòÊ£Óàʱ¼äΪ0£¬²»ÐèÒª¼õÉÙʱ¼ä! lvupState=%s,LVUPRemainTime=%s"
|
% (lvupState, LVUPRemainTime), curPlayer.GetPlayerID())
|
return
|
updLVUPRemainTime = max(0, LVUPRemainTime - reduceTime)
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TreeLVUPRemainTime, updLVUPRemainTime)
|
GameWorld.DebugLog("¼õÉÙÏÉÊ÷Éý¼¶Ê£Óàʱ¼ä! updLVUPRemainTime=%s,LVUPRemainTime=%s,reduceTime=%s"
|
% (updLVUPRemainTime, LVUPRemainTime, reduceTime), curPlayer.GetPlayerID())
|
SyncTreeInfo(curPlayer)
|
return True
|
|
def DoTreeLVUP(curPlayer):
|
## Ö´ÐÐÏÉÊ÷Éý¼¶
|
RefreshTreeLVUPTime(curPlayer)
|
playerID = curPlayer.GetPlayerID()
|
lvupState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreeLVUPState)
|
if not lvupState:
|
GameWorld.DebugLog("ÏÉÊ÷·ÇÉý¼¶ÖУ¬ÎÞ·¨Ö´ÐÐÉý¼¶! lvupState=%s" % lvupState, playerID)
|
return
|
LVUPRemainTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreeLVUPRemainTime)
|
if LVUPRemainTime > 0:
|
GameWorld.DebugLog("ÏÉÊ÷Éý¼¶Ê£Óàʱ¼äδµ½£¬ÎÞ·¨Ö´ÐÐÉý¼¶! LVUPRemainTime=%s" % LVUPRemainTime, playerID)
|
return
|
|
treeLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreeLV)
|
updTreeLV = treeLV + 1
|
ipyData = IpyGameDataPY.GetIpyGameData("TreeLV", updTreeLV)
|
if not ipyData:
|
return
|
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TreeLV, updTreeLV)
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TreeLVUPState, 0)
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TreeLVUPRemainTime, 0)
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TreeLVUPRefreshTime, 0)
|
GameWorld.DebugLog("Ö´ÐÐÏÉÊ÷Éý¼¶! updTreeLV=%s" % updTreeLV, playerID)
|
SyncTreeInfo(curPlayer)
|
|
#PlayerTask.UpdTaskValue(curPlayer, ChConfig.TaskType_TreeLV)
|
return True
|
|
def SyncTreeInfo(curPlayer):
|
clientPack = ChPyNetSendPack.tagMCTreeInfo()
|
clientPack.TreeLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreeLV)
|
clientPack.LVUPState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreeLVUPState)
|
clientPack.LVUPRemainTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreeLVUPRemainTime)
|
NetPackCommon.SendFakePack(curPlayer, clientPack)
|
return
|