ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTree.py
@@ -20,9 +20,10 @@
import NetPackCommon
import IpyGameDataPY
import ChPyNetSendPack
import PlayerGoldInvest
import PlayerControl
import IPY_GameWorld
#import PlayerTask
import PlayerTask
import ChConfig
import time
@@ -30,8 +31,17 @@
def OnPlayerLogin(curPlayer):
    treeLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreeLV)
    if not treeLV:
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TreeLV, 1)
        treeLV = 1
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TreeLV, treeLV)
        energyInit = IpyGameDataPY.GetFuncCfg("TreeEnergy", 1)
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TreeEnergy, energyInit)
        GameWorld.DebugLog("初始仙树等级: treeLV=%s,energyInit=%s" % (treeLV, energyInit))
    RefreshTreeEnergyTime(curPlayer)
    RefreshTreeLVUPTime(curPlayer)
    SyncTreeInfo(curPlayer)
    return
def PlayerOnDay(curPlayer):
    SyncTreeInfo(curPlayer)
    return
@@ -152,7 +162,7 @@
                       % (updLVUPRemainTime, treeLV, LVUPRemainTime, passSeconds, lastRefreshTime), curPlayer.GetPlayerID())
    return
def ReduceTreeLVUPTime(curPlayer, reduceTime):
def ReduceTreeLVUPTime(curPlayer, reduceTime, isNotify=True):
    ## 减少仙树升级剩余时间,可能是使用道具或其他功能等
    RefreshTreeLVUPTime(curPlayer)
    lvupState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreeLVUPState)
@@ -165,8 +175,92 @@
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TreeLVUPRemainTime, updLVUPRemainTime)
    GameWorld.DebugLog("减少仙树升级剩余时间! updLVUPRemainTime=%s,LVUPRemainTime=%s,reduceTime=%s" 
                       % (updLVUPRemainTime, LVUPRemainTime, reduceTime), curPlayer.GetPlayerID())
    SyncTreeInfo(curPlayer)
    if isNotify:
        SyncTreeInfo(curPlayer)
    return True
def GetTreeEnergyMax(curPlayer):
    energyMax = IpyGameDataPY.GetFuncCfg("TreeEnergy", 2)
    energyMax += PlayerGoldInvest.GetTreeEnergyAdd(curPlayer)
    return energyMax
def RefreshTreeEnergyTime(curPlayer):
    ## 刷新充能时间
    energy = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreeEnergy)
    energyMax = GetTreeEnergyMax(curPlayer)
    if energy >= energyMax:
        return
    energyTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreeEnergyTimeLast)
    updEnergy = energy
    updEnergyTime = energyTime
    curTime = int(time.time())
    if not updEnergyTime:
        updEnergyTime = curTime
    passSeconds = max(0, curTime - updEnergyTime)
    energyCDSeconds = IpyGameDataPY.GetFuncCfg("TreeEnergy", 3) * 60 # 免费CD,秒
    addEnergy = passSeconds / energyCDSeconds
    if addEnergy > 0:
        updEnergy += addEnergy
        if updEnergy >= energyMax:
            updEnergy = energyMax
            updEnergyTime = 0
        else:
            updEnergyTime = curTime - passSeconds % energyCDSeconds
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TreeEnergy, updEnergy)
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TreeEnergyTimeLast, updEnergyTime)
    GameWorld.DebugLog("仙树充能时间刷新! energy=%s,energyTime=%s,addEnergy=%s,updEnergy=%s/%s,updEnergyTime=%s"
                       % (energy, energyTime, addEnergy, updEnergy, energyMax, updEnergyTime), curPlayer.GetPlayerID())
    return
def GetTreeEnergyAward(curPlayer, useMoney=False):
    ## 领取充能奖励,可消耗货币或广告
    GameWorld.DebugLog("领取祝福树充能奖励! useMoney=%s" % useMoney)
    energy = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreeEnergy)
    if energy <= 0:
        GameWorld.DebugLog("没有充能减时次数!")
        return
    reduceTime = IpyGameDataPY.GetFuncCfg("TreeEnergy", 4) * 60
    if reduceTime <= 0:
        return
    if useMoney:
        moneyType, moneyValue = IpyGameDataPY.GetFuncEvalCfg("TreeEnergy", 5)
        if not PlayerControl.HaveMoney(curPlayer, moneyType, moneyValue):
            return
    if not ReduceTreeLVUPTime(curPlayer, reduceTime, False):
        return
    if useMoney:
        if not PlayerControl.PayMoney(curPlayer, moneyType, moneyValue, "TreeEnergy"):
            return
    energyMax = GetTreeEnergyMax(curPlayer)
    if energy == energyMax:
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TreeEnergyTimeLast, int(time.time()))
        GameWorld.DebugLog("重新开始充能倒计时!")
    energy -= 1
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TreeEnergy, energy)
    GameWorld.DebugLog("领取能量OK剩余能量: %s/%s" % (energy, energyMax))
    SyncTreeInfo(curPlayer)
    return
def FreeReduceTreeLVTime(curPlayer, opType=1):
    ## 仙树领取充能减时
    # 刷新累计充能次数
    if opType == 1:
        RefreshTreeEnergyTime(curPlayer)
        SyncTreeInfo(curPlayer)
        return
    GetTreeEnergyAward(curPlayer, True)
    return
def DoTreeLVUP(curPlayer):
    ## 执行仙树升级
@@ -194,7 +288,7 @@
    GameWorld.DebugLog("执行仙树升级! updTreeLV=%s" % updTreeLV, playerID)
    SyncTreeInfo(curPlayer)
    
    #PlayerTask.UpdTaskValue(curPlayer, ChConfig.TaskType_TreeLV)
    PlayerTask.UpdTaskValue(curPlayer, ChConfig.TaskType_TreeLV)
    return True
def SyncTreeInfo(curPlayer):
@@ -202,5 +296,7 @@
    clientPack.TreeLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreeLV)
    clientPack.LVUPState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreeLVUPState)
    clientPack.LVUPRemainTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreeLVUPRemainTime)
    clientPack.Energy = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreeEnergy)
    clientPack.EnergyTimeLast = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreeEnergyTimeLast)
    NetPackCommon.SendFakePack(curPlayer, clientPack)
    return