From 62986bb30351731bddecd141607cf4dc8c58d54c Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期一, 19 一月 2026 11:41:36 +0800
Subject: [PATCH] 423 【内政】命格系统-服务端(命格卦玉战斗属性增加感悟等级对应基础值配置;品质表改为加成随机值范围;)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGubao.py |   58 +++++++++++++++++++++++++++++++++++++++-------------------
 1 files changed, 39 insertions(+), 19 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGubao.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGubao.py
index 3b63218..5a9df8e 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGubao.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGubao.py
@@ -37,6 +37,7 @@
 # 特权效果类型
 GubaoPowerType_TravelMultiRate = 1 # 游历双倍奖励概率
 GubaoPowerType_InvestMonthAwardPer = 2 # 月卡领取额外奖励
+GubaoPowerType_InvestLifeAwardPer = 3 # 永久卡领取额外奖励
 
 def GetGubaoInfo(curPlayer, gubaoID):
     info = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GubaoInfo % gubaoID)
@@ -135,9 +136,24 @@
     if not nextIpyData:
         GameWorld.DebugLog("古宝已满星! gubaoID=%s,quality=%s,star=%s" % (gubaoID, quality, star), playerID)
         return
+    qualityStarCond = nextIpyData.GetQualityStarCond() # 需同品质X个X星
     needSelfCnt = nextIpyData.GetStarUPNeedSelfCnt()
     needItemList = nextIpyData.GetStarUPNeedItemList()
     
+    if qualityStarCond and len(qualityStarCond) == 2:
+        needGBCnt, needGBStar = qualityStarCond
+        condGubaoCnt = 0
+        ipyDataMgr = IpyGameDataPY.IPY_Data()
+        for index in xrange(ipyDataMgr.GetGubaoCount()):
+            gbIpyData = ipyDataMgr.GetGubaoByIndex(index)
+            _, gbStar, _ = GetGubaoInfo(curPlayer, gbIpyData.GetGubaoID())
+            if gbIpyData.GetGubaoQuality() == quality and gbStar >= needGBStar:
+                condGubaoCnt += 1
+        if condGubaoCnt < needGBCnt:
+            GameWorld.DebugLog("古宝升星所需同品质星级古宝数不足! quality=%s,nextStar=%s,condGubaoCnt=%s < %s,needGBStar=%s" 
+                               % (quality, nextStar, condGubaoCnt, needGBCnt, needGBStar), playerID)
+            return
+        
     if needItemList:
         itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
         lackItemDict, delInfoDict = ItemCommon.GetCostItemIndexList(needItemList, itemPack)
@@ -286,24 +302,25 @@
         
         # 特殊属性
         attrID = ipyData.GetSpecAttrID()
-        #effType = ipyData.GetSpecEffType()
-        layerMax = ipyData.GetSpecEffLayerMax()
-        SpecAttrValue = ipyData.GetSpecAttrValue()
-        SpecAttrPerStarAdd = ipyData.GetSpecAttrPerStarAdd()
-        specLVAttr = 0
-        lvAttrIpyData = IpyGameDataPY.GetIpyGameData("GubaoLVAttr", quality, lv)
-        if lvAttrIpyData:
-            specAttrIDList = lvAttrIpyData.GetSpecAttrIDList()
-            specAttrValueList = lvAttrIpyData.GetSpecAttrValueList()
-            for sIndex in range(min(len(specAttrIDList), len(specAttrValueList))):
-                if specAttrIDList[sIndex] == attrID:
-                    specLVAttr = specAttrValueList[sIndex]
-        if not layerMax:
-            layer, layerMax = 1, 1 # 无层级限制的默认1层
-        attrValue = int((SpecAttrValue + SpecAttrPerStarAdd * star + specLVAttr / float(layerMax)) * layer)
-        attrDict[attrID] = attrDict.get(attrID, 0) + attrValue
-        #GameWorld.DebugLog("古宝特殊属性! gubaoID=%s,quality=%s,lv=%s,star=%s,effType=%s,layer=%s/%s,attrID=%s,v=%s,perStar=%s,specLVAttr=%s,attrValue=%s,%s" 
-        #                   % (gubaoID, quality, lv, star, effType, layer, layerMax, attrID, SpecAttrValue, SpecAttrPerStarAdd, specLVAttr, attrValue, attrDict), playerID)
+        if attrID:
+            effType = ipyData.GetSpecEffType()
+            layerMax = ipyData.GetSpecEffLayerMax()
+            SpecAttrValue = ipyData.GetSpecAttrValue()
+            SpecAttrPerStarAdd = ipyData.GetSpecAttrPerStarAdd()
+            specLVAttr = 0
+            lvAttrIpyData = IpyGameDataPY.GetIpyGameData("GubaoLVAttr", quality, lv)
+            if lvAttrIpyData:
+                specAttrIDList = lvAttrIpyData.GetSpecAttrIDList()
+                specAttrValueList = lvAttrIpyData.GetSpecAttrValueList()
+                for sIndex in range(min(len(specAttrIDList), len(specAttrValueList))):
+                    if specAttrIDList[sIndex] == attrID:
+                        specLVAttr = specAttrValueList[sIndex]
+            if not layerMax or not effType:
+                layer, layerMax = 1, 1 # 无层级限制的默认1层
+            attrValue = int((SpecAttrValue + SpecAttrPerStarAdd * star + specLVAttr / float(layerMax)) * layer)
+            attrDict[attrID] = attrDict.get(attrID, 0) + attrValue
+            #GameWorld.DebugLog("古宝特殊属性! gubaoID=%s,quality=%s,lv=%s,star=%s,effType=%s,layer=%s/%s,attrID=%s,v=%s,perStar=%s,specLVAttr=%s,attrValue=%s,%s" 
+            #                   % (gubaoID, quality, lv, star, effType, layer, layerMax, attrID, SpecAttrValue, SpecAttrPerStarAdd, specLVAttr, attrValue, attrDict), playerID)
         
         # 特权
         powerType = ipyData.GetPowerType()
@@ -322,8 +339,11 @@
         gubaoIDList = ipyData.GetGubaoIDList()
         if not gubaoIDList:
             continue
-        starList = [gubaoStarDict.get(gubaoID, 0) for gubaoID in gubaoIDList]
+        starList = [gubaoStarDict.get(gubaoID, -1) for gubaoID in gubaoIDList]
         minStar = min(starList) # 共鸣星级,取组合中最低古宝星级
+        if minStar < 0:
+            #GameWorld.DebugLog("共鸣存在未激活的古宝,无效")
+            continue
         
         attrIpyDataList = IpyGameDataPY.GetIpyGameDataList("GubaoResonanceAttr", resonanceID)
         if not attrIpyDataList:

--
Gitblit v1.8.0