From 8a0a247299265f7a2ba4ef3af1594ca5bd696d9c Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期一, 14 七月 2025 10:55:50 +0800
Subject: [PATCH] 121 【武将】武将系统-服务端(武将升级消耗改为由品质跟武将等级决定;)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHero.py |   12 ++++--
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py     |   47 +++++++++++++++++------
 PySysDB/PySysDBPY.h                                                                      |    9 ++++
 3 files changed, 51 insertions(+), 17 deletions(-)

diff --git a/PySysDB/PySysDBPY.h b/PySysDB/PySysDBPY.h
index 907256c..513a1e7 100644
--- a/PySysDB/PySysDBPY.h
+++ b/PySysDB/PySysDBPY.h
@@ -98,7 +98,6 @@
 struct	HeroQuality
 {
 	DWORD		_Quality;	//品质
-	list		UPCostItem;	// 升级消耗道具
 	list		InitTalentWeight;	// 初始天赋数权重
 	BYTE		InitStarUpper;	// 初始星级上限
 	DWORD		InitAddPer;	// 上阵初始加成万分率
@@ -128,6 +127,14 @@
 	list		UPCostItem;	// 觉醒到下级消耗道具
 };
 
+//品质武将升级表
+struct	HeroQualityLV
+{
+	DWORD		_Quality;	//品质
+	DWORD		_HeroLV;	//武将等级
+	list		UPCostItem;	// 升级到下级消耗道具
+};
+
 //主线章节表
 struct	MainChapter
 {
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
index 7ccbec3..29411cc 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -114,7 +114,6 @@
 
                 "HeroQuality":(
                         ("DWORD", "Quality", 1),
-                        ("list", "UPCostItem", 0),
                         ("list", "InitTalentWeight", 0),
                         ("BYTE", "InitStarUpper", 0),
                         ("DWORD", "InitAddPer", 0),
@@ -137,6 +136,12 @@
                 "HeroQualityAwake":(
                         ("DWORD", "Quality", 1),
                         ("DWORD", "AwakeLV", 1),
+                        ("list", "UPCostItem", 0),
+                        ),
+
+                "HeroQualityLV":(
+                        ("DWORD", "Quality", 1),
+                        ("DWORD", "HeroLV", 1),
                         ("list", "UPCostItem", 0),
                         ),
 
@@ -2940,17 +2945,16 @@
         return
         
     def GetQuality(self): return self.attrTuple[0] # 品质 DWORD
-    def GetUPCostItem(self): return self.attrTuple[1] #  升级消耗道具 list
-    def GetInitTalentWeight(self): return self.attrTuple[2] #  初始天赋数权重 list
-    def GetInitStarUpper(self): return self.attrTuple[3] #  初始星级上限 BYTE
-    def GetInitAddPer(self): return self.attrTuple[4] #  上阵初始加成万分率 DWORD
-    def GetLVAddPer(self): return self.attrTuple[5] #  上阵每等级加成 DWORD
-    def GetBreakLVAddPer(self): return self.attrTuple[6] #  上阵每突破等级加成 DWORD
-    def GetStarAddPer(self): return self.attrTuple[7] #  上阵每星级加成 DWORD
-    def GetBookActAwardMoney(self): return self.attrTuple[8] #  图鉴激活奖励货币 类型|值 list
-    def GetBookInitAddPer(self): return self.attrTuple[9] #  图鉴初始加成 DWORD
-    def GetBookStarAddPer(self): return self.attrTuple[10] #  图鉴每星级加成 DWORD
-    def GetBookBreakLVAddPer(self): return self.attrTuple[11] #  图鉴每突破等级加成 DWORD
+    def GetInitTalentWeight(self): return self.attrTuple[1] #  初始天赋数权重 list
+    def GetInitStarUpper(self): return self.attrTuple[2] #  初始星级上限 BYTE
+    def GetInitAddPer(self): return self.attrTuple[3] #  上阵初始加成万分率 DWORD
+    def GetLVAddPer(self): return self.attrTuple[4] #  上阵每等级加成 DWORD
+    def GetBreakLVAddPer(self): return self.attrTuple[5] #  上阵每突破等级加成 DWORD
+    def GetStarAddPer(self): return self.attrTuple[6] #  上阵每星级加成 DWORD
+    def GetBookActAwardMoney(self): return self.attrTuple[7] #  图鉴激活奖励货币 类型|值 list
+    def GetBookInitAddPer(self): return self.attrTuple[8] #  图鉴初始加成 DWORD
+    def GetBookStarAddPer(self): return self.attrTuple[9] #  图鉴每星级加成 DWORD
+    def GetBookBreakLVAddPer(self): return self.attrTuple[10] #  图鉴每突破等级加成 DWORD
 
 # 武将品质突破表
 class IPY_HeroQualityBreak():
@@ -2974,6 +2978,17 @@
     def GetQuality(self): return self.attrTuple[0] # 品质 DWORD
     def GetAwakeLV(self): return self.attrTuple[1] # 觉醒等级 DWORD
     def GetUPCostItem(self): return self.attrTuple[2] #  觉醒到下级消耗道具 list
+
+# 品质武将升级表
+class IPY_HeroQualityLV():
+    
+    def __init__(self):
+        self.attrTuple = None
+        return
+        
+    def GetQuality(self): return self.attrTuple[0] # 品质 DWORD
+    def GetHeroLV(self): return self.attrTuple[1] # 武将等级 DWORD
+    def GetUPCostItem(self): return self.attrTuple[2] #  升级到下级消耗道具 list
 
 # 主线章节表
 class IPY_MainChapter():
@@ -7090,6 +7105,7 @@
         self.__LoadFileData("HeroQuality", onlyCheck)
         self.__LoadFileData("HeroQualityBreak", onlyCheck)
         self.__LoadFileData("HeroQualityAwake", onlyCheck)
+        self.__LoadFileData("HeroQualityLV", onlyCheck)
         self.__LoadFileData("MainChapter", onlyCheck)
         self.__LoadFileData("MainLevel", onlyCheck)
         self.__LoadFileData("NPCLineup", onlyCheck)
@@ -7661,6 +7677,13 @@
         self.CheckLoadData("HeroQualityAwake")
         return self.ipyHeroQualityAwakeCache[index]
 
+    def GetHeroQualityLVCount(self):
+        self.CheckLoadData("HeroQualityLV")
+        return self.ipyHeroQualityLVLen
+    def GetHeroQualityLVByIndex(self, index):
+        self.CheckLoadData("HeroQualityLV")
+        return self.ipyHeroQualityLVCache[index]
+
     def GetMainChapterCount(self):
         self.CheckLoadData("MainChapter")
         return self.ipyMainChapterLen
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHero.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHero.py
index efac7e6..e0515cf 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHero.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHero.py
@@ -234,10 +234,14 @@
     if heroLV >= LVMax:
         GameWorld.DebugLog("该武将已满级!LVMax=%s" % (LVMax), playerID)
         return
-    qualityIpyData = IpyGameDataPY.GetIpyGameData("HeroQuality", quality)
-    if not qualityIpyData:
+    qualityLVIpyData = IpyGameDataPY.GetIpyGameData("HeroQualityLV", quality, heroLV)
+    if not qualityLVIpyData:
         return
-    costItemInfo = qualityIpyData.GetUPCostItem()
+    nextHeroLV = heroLV + 1
+    if not IpyGameDataPY.GetIpyGameData("HeroQualityLV", quality, nextHeroLV):
+        GameWorld.DebugLog("不存在该武将等级: quality=%s,nextHeroLV=%s" % (quality, nextHeroLV), playerID)
+        return
+    costItemInfo = qualityLVIpyData.GetUPCostItem()
     if not costItemInfo:
         return
     costItemID, costItemCount = costItemInfo
@@ -250,7 +254,7 @@
         return
     ItemCommon.ReduceItem(curPlayer, itemPack, itemIndexList, costItemCount, True, "HeroLVUP")
     
-    updHeroLV = heroLV + 1
+    updHeroLV = nextHeroLV
     GameWorld.DebugLog("武将升级: itemIndex=%s,heroID=%s,updHeroLV=%s" % (itemIndex, heroID, updHeroLV), playerID)
     heroItem.SetUserAttr(ShareDefine.Def_IudetHeroLV, updHeroLV)
     

--
Gitblit v1.8.0