From 180eab3510f793ed008e9504976c3b3063f7ca6d Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期二, 18 十一月 2025 18:21:52 +0800
Subject: [PATCH] 110 【主界面】仙树升级-服务端(免费减时修改为充能减时;特权支持充能额外上限;广告奖励支持领取充能奖励;)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTree.py | 106 ++++++++++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 101 insertions(+), 5 deletions(-)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTree.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTree.py
index 906fea0..24f9521 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTree.py
+++ b/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
--
Gitblit v1.8.0