From 632add2bff0c18c0a28438596be441428dd7889d Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期二, 09 九月 2025 19:34:03 +0800
Subject: [PATCH] 121 【武将】武将系统-服务端(升星材料卡有升级突破时限制升星;遣散增加返还比例设定;重生增加等级消耗、返还比例设定,重生导致觉醒已解锁槽位失效时该槽位天赋属性同步失效;)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py |   83 +++++++++++++----------------------------
 1 files changed, 26 insertions(+), 57 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
index b74e0cb..9ad261d 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
@@ -2499,6 +2499,20 @@
     NetPackCommon.SendFakePack(curPlayer, clientPack)
     return
 
+def GetUnXiantaoCntEquip(curPlayer):
+    '''因为战锤对应装备是1个战锤可能对应多个装备掉落,所以分解装备的时候1个战锤需要支持可拆分
+    所以需要支持小数存储,暂定以支持3位小数存储
+    '''
+    return curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_UnXiantaoCntEquip) / 1000.0
+def AddUnXiantaoCntEquip(curPlayer, addCnt):
+    unXiantaoCntEquip = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_UnXiantaoCntEquip) + addCnt * 1000
+    return NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_UnXiantaoCntEquip, unXiantaoCntEquip)
+def SetUnXiantaoCntEquip(curPlayer, unXiantaoCntEquip):
+    ## 保存装备未结算战锤数,保留3位小数
+    # @param unXiantaoCntEquip: 实际的未结算数量,支持小数
+    unXiantaoCntEquip = int(round(unXiantaoCntEquip, 3) * 1000) # 保留3为小数
+    return NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_UnXiantaoCntEquip, unXiantaoCntEquip)
+
 ##玩家是否有钱款
 # @param curPlayer 玩家实例
 # @param TYPE_Price ,货币类型
@@ -2789,8 +2803,7 @@
         unXiantaoCntExp = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_UnXiantaoCntExp)
         NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_UnXiantaoCntExp, unXiantaoCntExp + price)
         # 累加未结算战锤 - 装备
-        unXiantaoCntEquip = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_UnXiantaoCntEquip)
-        NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_UnXiantaoCntEquip, unXiantaoCntEquip + price)
+        AddUnXiantaoCntEquip(curPlayer, price)
         # 累加未结算战锤 - 战利品
         chapterID = GetMainLevelNowInfo(curPlayer)[0]
         chapterIpyData = IpyGameDataPY.GetIpyGameData("MainChapter", chapterID)
@@ -3312,41 +3325,6 @@
     return IpyGameDataPY.GetFuncCfg("PKConfig", 2)
 
 #---------------------------------------------------------------------
-##获得玩家升级, 获得的属性点
-# @param curPlayer 玩家实例
-# @return 返回值, 获得的属性点
-# @remarks 获得玩家升级, 获得的属性点
-def GetLvUp_AddPoint(curPlayer):
-    curPlayerID = curPlayer.GetID()
-    curLV = curPlayer.GetLV() # 当前等级
-    
-    addPointDict = IpyGameDataPY.GetFuncEvalCfg("LVUPAddPoint", 1, {})
-    addPoint = GameWorld.GetDictValueByRangeKey(addPointDict, curLV, 0)
-    
-    if addPoint == None:
-        raise Exception('玩家获得升级属性点异常, curLV = %s PlayerID = %s' % (curLV, curPlayerID))
-        return
-    return int(addPoint+ GetFabaoAddPoint(curPlayer) + GetTitleAddExtraPoint(curPlayer))
-
-def GetAllPointByLV(curPlayer):
-    ##获取当前等级可得到属性点数
-    openLV = GameFuncComm.GetFuncLimitLV(ShareDefine.GameFuncID_AddPoint)
-    curLV = curPlayer.GetLV()
-    if curLV < openLV:
-        return 0
-    # 初始点+(升级点+法宝效果)*称号效果倍数+境界点
-    setFreePoint = IpyGameDataPY.GetFuncCfg("LVUPAddPoint", 2)
-    fabaoAddPoint = GetFabaoAddPoint(curPlayer)
-    titleAddPoint = GetTitleAddExtraPoint(curPlayer)
-    addPointDict = IpyGameDataPY.GetFuncEvalCfg("LVUPAddPoint", 1, {})
-    for rangLVs, point in addPointDict.items():
-        if curLV < rangLVs[0]:
-            continue
-        setFreePoint += (point + fabaoAddPoint + titleAddPoint) * (min(curLV, rangLVs[1]) - rangLVs[0] + 1)
-    
-    #境界提升点数
-    setFreePoint += curPlayer.GetOfficialRank() * IpyGameDataPY.GetFuncCfg("LVUPAddPoint", 3)
-    return setFreePoint
 
 def GetTitleAddExtraPoint(curPlayer):
     # 称号额外增加玩家每级获得的灵根点
@@ -3354,23 +3332,6 @@
     if titleID and curPlayer.GetDienstgradManager().GetDienstgrad(titleID):
         return IpyGameDataPY.GetFuncCfg("TitleAddPoint", 2)
     return 0
-
-def GetFabaoAddPoint(curPlayer):
-    #法宝额外增加玩家每级获得的灵根点
-    return 0
-
-def DoAddPointOpen(curPlayer):
-    '''加点功能开启'''
-    beforeFreePoint = curPlayer.GetFreePoint()
-    
-    setFreePoint = GetAllPointByLV(curPlayer)
-    curLV = curPlayer.GetLV()
-    addDataDict = {'beforeFreePoint':beforeFreePoint}
-    curPlayer.SetFreePoint(setFreePoint)
-    DataRecordPack.DR_Freepoint(curPlayer, "AddPointOpen", setFreePoint, addDataDict)
-    GameWorld.DebugLog('    加点功能开启处理  beforeFreePoint=%s,curLV=%s, setFreePoint=%s'%(beforeFreePoint, curLV, setFreePoint), curPlayer.GetID())
-    return
-
     
 #---------------------------------------------------------------------
 ###############################################################
@@ -4744,6 +4705,13 @@
         return 0
     return lvIpyData.GetExp()
 
+def GetOpenMaxLV():
+    ## 获取游戏开放的最大等级
+    maxLV = IpyGameDataPY.GetFuncCfg("PlayerMaxLV", 1)
+    ipyDataMgr = IpyGameDataPY.IPY_Data()
+    realmIpyData = ipyDataMgr.GetRealmByIndex(ipyDataMgr.GetRealmCount() - 1)
+    return min(maxLV, realmIpyData.GetLVMax())
+
 def GetPlayerMaxLV(curPlayer):
     ## 获取玩家实际可升的最大等级
     maxLV = IpyGameDataPY.GetFuncCfg("PlayerMaxLV", 1)
@@ -4950,10 +4918,11 @@
         
     if value == 0:
         curPlayer.NomalDictDelProperty(key, dType)
-        return
+        return 0
     # 2^31 - 1
-    curPlayer.NomalDictAddProperty(key, min(value, ChConfig.Def_UpperLimit_DWordEx), dType)
-    return
+    value = max(0, min(value, ChConfig.Def_UpperLimit_DWordEx))
+    curPlayer.NomalDictAddProperty(key, value, dType)
+    return value
 
 ## 通知祝福值
 def Sync_BlessValue(curPlayer, blessType, value, multiple=0):

--
Gitblit v1.8.0