From 6c76bfd0f116288640f9b98efa8ffaa7df5214d8 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期三, 10 十二月 2025 09:34:51 +0800
Subject: [PATCH] 16 卡牌服务端(真实玩家起始ID3000000起,公会ID1000000起,与外网同步;)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTree.py | 105 +++++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 102 insertions(+), 3 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 e104f94..cf3c585 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTree.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTree.py
@@ -20,8 +20,11 @@
import NetPackCommon
import IpyGameDataPY
import ChPyNetSendPack
+import PlayerGoldInvest
import PlayerControl
import IPY_GameWorld
+import PlayerSuccess
+import ShareDefine
import PlayerTask
import ChConfig
@@ -30,8 +33,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 +164,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 +177,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):
## 执行仙树升级
@@ -195,6 +291,7 @@
SyncTreeInfo(curPlayer)
PlayerTask.UpdTaskValue(curPlayer, ChConfig.TaskType_TreeLV)
+ PlayerSuccess.UptateSuccessProgress(curPlayer, ShareDefine.SuccType_OSATreeLV, updTreeLV)
return True
def SyncTreeInfo(curPlayer):
@@ -202,5 +299,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