From ba773b0ebfa18e9049234dba5bd16e791067ea84 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期二, 06 一月 2026 16:11:16 +0800
Subject: [PATCH] 271 【内政】古宝系统-服务端(品质等级属性支持;效果层级调整为最大9999;)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGubao.py | 24 ++++++++---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py | 2
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py | 31 ++++++++++++++-
PySysDB/PySysDBPY.h | 11 +++++
4 files changed, 56 insertions(+), 12 deletions(-)
diff --git a/PySysDB/PySysDBPY.h b/PySysDB/PySysDBPY.h
index 6e63716..7288ff0 100644
--- a/PySysDB/PySysDBPY.h
+++ b/PySysDB/PySysDBPY.h
@@ -937,7 +937,6 @@
BYTE SpecEffLayerMax; //特殊效果最大层数
BYTE SpecAttrID; //特殊属性ID
DWORD SpecAttrValue; //特殊属性初始值
- DWORD SpecAttrPerLVAdd; //特殊属性每级成长
DWORD SpecAttrPerStarAdd; //特殊属性每星成长
};
@@ -978,6 +977,16 @@
list LVUPNeedItemInfo; //升级所需物品 [[物品ID,个数], ...]
};
+//品质升级属性表
+
+struct GubaoLVAttr
+{
+ BYTE _GubaoQuality; //古宝品质
+ BYTE _GubaoLV; //古宝等级
+ list SpecAttrIDList; //特殊属性ID列表
+ list SpecAttrValueList; //特殊总属性值列表
+};
+
//红颜表
struct Beauty
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
index edb273c..0b200ef 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -5412,7 +5412,7 @@
("GubaoID", c_ushort),
("GubaoStar", c_ubyte),
("GubaoLV", c_ubyte),
- ("EffLayer", c_ubyte), # 该特殊效果累加层值
+ ("EffLayer", c_ushort), # 该特殊效果累加层值
]
def __init__(self):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
index 9f0122e..7ebe0c5 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -785,7 +785,6 @@
("BYTE", "SpecEffLayerMax", 0),
("BYTE", "SpecAttrID", 0),
("DWORD", "SpecAttrValue", 0),
- ("DWORD", "SpecAttrPerLVAdd", 0),
("DWORD", "SpecAttrPerStarAdd", 0),
),
@@ -812,6 +811,13 @@
("BYTE", "GubaoQuality", 1),
("BYTE", "LessEqualLV", 0),
("list", "LVUPNeedItemInfo", 0),
+ ),
+
+ "GubaoLVAttr":(
+ ("BYTE", "GubaoQuality", 1),
+ ("BYTE", "GubaoLV", 1),
+ ("list", "SpecAttrIDList", 0),
+ ("list", "SpecAttrValueList", 0),
),
"Beauty":(
@@ -3339,8 +3345,7 @@
def GetSpecEffLayerMax(self): return self.attrTuple[8] # 特殊效果最大层数 BYTE
def GetSpecAttrID(self): return self.attrTuple[9] # 特殊属性ID BYTE
def GetSpecAttrValue(self): return self.attrTuple[10] # 特殊属性初始值 DWORD
- def GetSpecAttrPerLVAdd(self): return self.attrTuple[11] # 特殊属性每级成长 DWORD
- def GetSpecAttrPerStarAdd(self): return self.attrTuple[12] # 特殊属性每星成长 DWORD
+ def GetSpecAttrPerStarAdd(self): return self.attrTuple[11] # 特殊属性每星成长 DWORD
# 古宝共鸣属性表
class IPY_GubaoResonanceAttr():
@@ -3386,6 +3391,18 @@
def GetGubaoQuality(self): return self.attrTuple[0] # 古宝品质 BYTE
def GetLessEqualLV(self): return self.attrTuple[1] # 小于等于等级 BYTE
def GetLVUPNeedItemInfo(self): return self.attrTuple[2] # 升级所需物品 [[物品ID,个数], ...] list
+
+# 品质升级属性表
+class IPY_GubaoLVAttr():
+
+ def __init__(self):
+ self.attrTuple = None
+ return
+
+ def GetGubaoQuality(self): return self.attrTuple[0] # 古宝品质 BYTE
+ def GetGubaoLV(self): return self.attrTuple[1] # 古宝等级 BYTE
+ def GetSpecAttrIDList(self): return self.attrTuple[2] # 特殊属性ID列表 list
+ def GetSpecAttrValueList(self): return self.attrTuple[3] # 特殊总属性值列表 list
# 红颜表
class IPY_Beauty():
@@ -5721,6 +5738,7 @@
self.__LoadFileData("GubaoResonance", onlyCheck)
self.__LoadFileData("GubaoStar", onlyCheck)
self.__LoadFileData("GubaoLV", onlyCheck)
+ self.__LoadFileData("GubaoLVAttr", onlyCheck)
self.__LoadFileData("Beauty", onlyCheck)
self.__LoadFileData("BeautyQualityLV", onlyCheck)
self.__LoadFileData("BeautySkin", onlyCheck)
@@ -6598,6 +6616,13 @@
self.CheckLoadData("GubaoLV")
return self.ipyGubaoLVCache[index]
+ def GetGubaoLVAttrCount(self):
+ self.CheckLoadData("GubaoLVAttr")
+ return self.ipyGubaoLVAttrLen
+ def GetGubaoLVAttrByIndex(self, index):
+ self.CheckLoadData("GubaoLVAttr")
+ return self.ipyGubaoLVAttrCache[index]
+
def GetBeautyCount(self):
self.CheckLoadData("Beauty")
return self.ipyBeautyLen
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 b35c897..1114e28 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGubao.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGubao.py
@@ -37,7 +37,7 @@
return lv, star, layer
def SetGubaoInfo(curPlayer, gubaoID, lv, star, layer):
## 特殊效果层*100000 + 等级*100 + 星级
- info = min(layer, 99) * 100000 + min(lv, 999) * 100 + min(star, 99)
+ info = min(layer, 9999) * 100000 + min(lv, 999) * 100 + min(star, 99)
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GubaoInfo % gubaoID, info)
return
@@ -257,6 +257,8 @@
if not IsGubaoActivated(curPlayer, gubaoID):
continue
+ quality = ipyData.GetGubaoQuality()
+
lv, star, layer = GetGubaoInfo(curPlayer, gubaoID)
gubaoStarDict[gubaoID] = star
@@ -275,15 +277,23 @@
# 特殊属性
attrID = ipyData.GetSpecAttrID()
effType = ipyData.GetSpecEffType()
+ layerMax = ipyData.GetSpecEffLayerMax()
SpecAttrValue = ipyData.GetSpecAttrValue()
- SpecAttrPerLVAdd = ipyData.GetSpecAttrPerLVAdd()
SpecAttrPerStarAdd = ipyData.GetSpecAttrPerStarAdd()
- attrValue = SpecAttrValue + SpecAttrPerLVAdd * max(lv - 1, 0) + SpecAttrPerStarAdd * star
- if effType: # 有特殊效果类型的
- attrValue *= layer
+ 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,lv=%s,star=%s,effType=%s,layer=%s,attrID=%s,v=%s,perLV=%s,perStar=%s,attrValue=%s,%s"
- % (gubaoID, lv, star, effType, layer, attrID, SpecAttrValue, SpecAttrPerLVAdd, SpecAttrPerStarAdd, attrValue, attrDict), playerID)
+ 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)
# 共鸣
for index in range(ipyDataMgr.GetGubaoResonanceCount()):
--
Gitblit v1.8.0