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 | 98 +++++++++++++++++++++++++++++++++++++++----------
1 files changed, 78 insertions(+), 20 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 ae4a7e6..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,6 +20,7 @@
import NetPackCommon
import IpyGameDataPY
import ChPyNetSendPack
+import PlayerGoldInvest
import PlayerControl
import IPY_GameWorld
import PlayerTask
@@ -30,13 +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):
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TreeFreeTimeCnt, 0)
SyncTreeInfo(curPlayer)
return
@@ -174,34 +179,87 @@
SyncTreeInfo(curPlayer)
return True
-def FreeReduceTreeLVTime(curPlayer):
- ## 仙树免费减时
- dailyFreeCntMax = IpyGameDataPY.GetFuncCfg("TreeLVUP", 3)
- freeCDSeconds = IpyGameDataPY.GetFuncCfg("TreeLVUP", 4) * 60 # 免费CD,秒
-
- freeTimeCntToday = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreeFreeTimeCnt)
- freeTimeLast = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreeFreeTimeLast)
-
- if dailyFreeCntMax and freeTimeCntToday >= dailyFreeCntMax:
- GameWorld.DebugLog("已达今日免费仙树减时次数! freeTimeCntToday=%s >= %s" % (freeTimeCntToday, dailyFreeCntMax))
+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 freeCDSeconds and freeTimeLast and (curTime - freeTimeLast) < freeCDSeconds:
- GameWorld.DebugLog("免费仙树减时CD未到! passSeconds=%s < %s" % (curTime - freeTimeLast, freeCDSeconds))
+ 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("TreeLVUP", 5) * 60
+ 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
- freeTimeCntToday += 1
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TreeFreeTimeCnt, freeTimeCntToday)
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TreeFreeTimeLast, curTime)
+ 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):
@@ -238,7 +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.FreeTimeCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreeFreeTimeCnt)
- clientPack.FreeTimeLast = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreeFreeTimeLast)
+ 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