From 63f6f44ec2a38eaec9f39bbe26edb07daed49b49 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期二, 16 九月 2025 17:36:50 +0800
Subject: [PATCH] 129 【战斗】战斗系统-服务端(王元姬技能,弹射待处理;支持被动变更伤害倍值;)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py |   92 ++++++++++++++++-----------------------------
 1 files changed, 33 insertions(+), 59 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..97e58b5 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)
@@ -2968,7 +2981,7 @@
 # @return 返回值真, 给钱成功
 # @param isSysHint 是否系统提示(默认是)
 # @remarks 玩家获得金钱
-def GiveMoney(curPlayer, priceType, value, giveType=ChConfig.Def_GiveMoney_Unknown, addDataDict={}, isSysHint=True, isGiveBourseMoney=True):
+def GiveMoney(curPlayer, priceType, value, giveType=ChConfig.Def_GiveMoney_Unknown, addDataDict={}, isSysHint=True, isGiveBourseMoney=True, notifyAward=False):
     if value == 0:
         return True
     
@@ -3047,6 +3060,9 @@
     #        NotifyCode(curPlayer, "GetMoney", [priceType, str(round(value/100.0, 2))])
     #    else:
     #        NotifyCode(curPlayer, "GetMoney", [priceType, value])
+    if notifyAward:
+        ItemControler.NotifyGiveAwardInfo(curPlayer, [], giveType, moneyInfo={priceType:value})
+        
     __GiveMoneyAfter(curPlayer, priceType, value, giveType, addDataDict)
     
     if befMoney == 0:
@@ -3312,41 +3328,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 +3335,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
-
     
 #---------------------------------------------------------------------
 ###############################################################
@@ -4409,6 +4373,8 @@
     value = ComMainLevelValue(chapterID, levelNum, wave)
     SetMainLevelPassValue(curPlayer, value)
     if wave == 0:
+        lvID = chapterID * 100 + levelNum
+        PlayerBillboard.UpdatePlayerBillboard(curPlayer, ShareDefine.Def_BT_MainLevel, lvID)
         PlayerTask.UpdTaskValue(curPlayer, ChConfig.TaskType_MainLevel)
     return value
 def GetMainLevelPassInfo(curPlayer):
@@ -4595,7 +4561,7 @@
         NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FightPower_HighestEx, highestFightPower / ChConfig.Def_PerPointValue)
         
     GameWorld.DebugLog("总战力: %s, 历史最高战力: %s, beforeFightPower=%s" % (value, highestFightPower, beforeFightPower), curPlayer.GetPlayerID())
-    PlayerBillboard.UpdatePlayerFPTotalBillboard(curPlayer)
+    #PlayerBillboard.UpdatePlayerFPTotalBillboard(curPlayer)
     # 记录开服活动数据
     #OpenServerCampaign.UpdOpenServerCampaignRecordData(curPlayer, ShareDefine.Def_Campaign_Type_FightPower, totalFightPower)
     #if beforeFightPower != totalFightPower:
@@ -4743,6 +4709,13 @@
     if not lvIpyData:
         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):
     ## 获取玩家实际可升的最大等级
@@ -4950,10 +4923,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