From bf7614958d030ba2a1cf016deb3ad47cd47432ca Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期二, 09 十二月 2025 12:12:44 +0800
Subject: [PATCH] 129 【战斗】战斗系统-服务端(等级表增加NPC参数星级;战斗结算增加同步等级、星级、皮肤ID)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py  |    3 +
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py     |   36 +++++++++--------
 PySysDB/PySysDBPY.h                                                                      |    1 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py |   28 ++++++++++---
 4 files changed, 44 insertions(+), 24 deletions(-)

diff --git a/PySysDB/PySysDBPY.h b/PySysDB/PySysDBPY.h
index ce3399e..a445ff6 100644
--- a/PySysDB/PySysDBPY.h
+++ b/PySysDB/PySysDBPY.h
@@ -1035,6 +1035,7 @@
 	DWORD		MaxHP;	//生命
 	DWORD		Atk;	//攻击
 	DWORD		Def;	//防御
+	BYTE		ReHeroStar;	//参考星级
 	BYTE		ReHeroBreakLV;	//参考突破等级
 	BYTE		ReHeroAwakeLV;	//参考觉醒等级
 	DWORD		ReAtk;	//参考攻击
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py
index 8fd45cc..1a3d1bb 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py
@@ -835,6 +835,7 @@
         self.sex = 0
         self.job = 0
         self.lv = 1
+        self._star = 0
         self.fightPower = 0
         self.faction = 0 # 所属阵营,一般只有双方阵营, 1 或 2,发起方默认1
         self.lineupNum = 1 # 阵容位置编号,一般多V多时有用,通常默认1
@@ -963,6 +964,8 @@
     def SetFightPower(self, fightPower): self.fightPower = fightPower
     def GetLV(self): return self.lv
     def SetLV(self, lv): self.lv = lv
+    def GetStar(self): return self._star
+    def SetStar(self, star): self._star = star
     def GetDictByKey(self, key): return self._kvDict.get(key, 0)
     def SetDict(self, key, value): self._kvDict[key] = value
     
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py
index f18bcbc..8f97292 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py
@@ -603,13 +603,15 @@
         hero = lineup.GetLineupHero(posNum)
         heroID = hero.heroID
         itemIndex = hero.itemIndex
-        userData = ""
         heroLV = 1
+        star = 0
         if itemIndex >= 0 and itemIndex < curPack.GetCount():
             heroItem = curPack.GetAt(itemIndex)
             if heroItem and not heroItem.IsEmpty():
-                userData = heroItem.GetUserData()
                 heroLV = heroItem.GetUserAttr(ShareDefine.Def_IudetHeroLV)
+                star = heroItem.GetUserAttr(ShareDefine.Def_IudetHeroStar)
+                #breakLV = heroItem.GetUserAttr(ShareDefine.Def_IudetHeroBreakLV)
+                #awakeLV = heroItem.GetUserAttr(ShareDefine.Def_IudetHeroAwakeLV)
                 
         skillIDlist = []
         skillIDlist += hero.heroSkillIDList
@@ -617,7 +619,9 @@
                                  "HeroID":heroID,
                                  "SkinID":hero.skinID,
                                  "LV":heroLV,
-                                 "Data":userData,
+                                 "Star":star,
+                                 #"BreakLV":breakLV,
+                                 #"AwakeLV":awakeLV,
                                  "FightPower":hero.fightPower,
                                  "AttrDict":{str(k):v for k, v in hero.heroBatAttrDict.items() if v > 0},
                                  "SkillIDList":skillIDlist,
@@ -755,6 +759,7 @@
         return
     heroID = npcData.GetRelatedHeroID()
     npcLV = npcData.GetLV()
+    star, breakLV, awakeLV = 0, 0, 0
     
     lvIpyData = None
     heroIpyData = IpyGameDataPY.GetIpyGameData("Hero", heroID) if heroID else None
@@ -765,11 +770,14 @@
             npcLV = strongerLV
     if not lvIpyData:
         lvIpyData = IpyGameDataPY.GetIpyGameData("PlayerLV", npcLV)
-        
+    if lvIpyData:
+        star = lvIpyData.GetReHeroStar()
+        breakLV = lvIpyData.GetReHeroBreakLV()
+        awakeLV = lvIpyData.GetReHeroAwakeLV()
     if heroIpyData and lvIpyData:
         skinIDList = heroIpyData.GetSkinIDList()
         skinID = skinIDList[0] if skinIDList else 0
-        skillIDList = GetNPCHeroSkillIDList(heroID, heroIpyData, lvIpyData.GetReHeroBreakLV(), lvIpyData.GetReHeroAwakeLV())
+        skillIDList = GetNPCHeroSkillIDList(heroID, heroIpyData, breakLV, awakeLV)
     else:
         heroID = 0
         skinID = 0
@@ -809,6 +817,9 @@
                   "HeroID":heroID,
                   "SkinID":skinID,
                   "LV":npcLV,
+                  "Star":star,
+                  #"BreakLV":breakLV,
+                  #"AwakeLV":awakeLV,
                   "AttrDict":{str(k):v for k, v in batAttrDict.items() if v > 0},
                   "SkillIDList":skillIDList,
                   }
@@ -896,6 +907,7 @@
         heroID = heroInfo.get("HeroID", 0)
         skinID = heroInfo.get("SkinID", 0)
         lv = heroInfo.get("LV", 1)
+        star = heroInfo.get("Star", 0)
         specialty, atkDistType, country, sex, job = 0, 1, 0, 1, 0
         heroIpyData = IpyGameDataPY.GetIpyGameData("Hero", heroID) if heroID else None
         if heroIpyData:
@@ -932,6 +944,7 @@
         batObj.SetLineupPos(posNum, num)
         batObj.SetFightPower(fightPower)
         batObj.SetLV(lv)
+        batObj.SetStar(star)
         batObj.SetAtkDistType(atkDistType)
         batObj.SetSpecialty(specialty)
         batObj.SetCountry(country)
@@ -946,7 +959,7 @@
             
         batLineup.posObjIDDict[posNum] = objID
         batLineup.heroObjIDDict[heroID] = objID
-        GameWorld.DebugLog("AddBatObj %s,skill=%s" % (GetObjName(batObj), skillManager.GetSkillIDList()))
+        GameWorld.DebugLog("AddBatObj %s,lv=%s,star=%s,skill=%s" % (GetObjName(batObj), lv, star, skillManager.GetSkillIDList()))
         ResetObjSkill(batObj)
         
         if npcID:
@@ -2038,7 +2051,8 @@
                 batFaction.totalHurt += atkHurt
                 GameWorld.DebugLog("    Pos:%s ID=%s,npcID=%s,heroID=%s,HP=%s/%s, 输出=%s,承伤=%s,治疗=%s" 
                                    % (posNum, objID, npcID, heroID, batObj.GetHP(), batObj.GetMaxHP(), atkHurt, defHurt, cureHP))
-                lineupStatInfo[str(posNum)] = {"ObjID":objID, "HeroID":heroID, "NPCID":npcID, "AtkHurt":atkHurt, "DefHurt":defHurt, "CureHP":cureHP}
+                lineupStatInfo[str(posNum)] = {"ObjID":objID, "HeroID":heroID, "NPCID":npcID, "AtkHurt":atkHurt, "DefHurt":defHurt, "CureHP":cureHP, 
+                                               "LV":batObj.GetLV(), "Star":batObj.GetStar(), "Skin":batObj.GetSkinID()}
                 
     statMsg = {"winFaction":winFaction, "statInfo":statInfo}
     
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
index 03bdf94..4dba3d9 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -857,6 +857,7 @@
                         ("DWORD", "MaxHP", 0),
                         ("DWORD", "Atk", 0),
                         ("DWORD", "Def", 0),
+                        ("BYTE", "ReHeroStar", 0),
                         ("BYTE", "ReHeroBreakLV", 0),
                         ("BYTE", "ReHeroAwakeLV", 0),
                         ("DWORD", "ReAtk", 0),
@@ -3398,23 +3399,24 @@
     def GetMaxHP(self): return self.attrTuple[2] # 生命 DWORD
     def GetAtk(self): return self.attrTuple[3] # 攻击 DWORD
     def GetDef(self): return self.attrTuple[4] # 防御 DWORD
-    def GetReHeroBreakLV(self): return self.attrTuple[5] # 参考突破等级 BYTE
-    def GetReHeroAwakeLV(self): return self.attrTuple[6] # 参考觉醒等级 BYTE
-    def GetReAtk(self): return self.attrTuple[7] # 参考攻击 DWORD
-    def GetReDef(self): return self.attrTuple[8] # 防御 DWORD
-    def GetReMaxHP(self): return self.attrTuple[9] # 生命 DWORD
-    def GetReStunRate(self): return self.attrTuple[10] # DWORD
-    def GetReSuperHitRate(self): return self.attrTuple[11] # DWORD
-    def GetReComboRate(self): return self.attrTuple[12] # DWORD
-    def GetReMissRate(self): return self.attrTuple[13] # DWORD
-    def GetReParryRate(self): return self.attrTuple[14] # DWORD
-    def GetReSuckHPPer(self): return self.attrTuple[15] # DWORD
-    def GetReStunRateDef(self): return self.attrTuple[16] # DWORD
-    def GetReSuperHitRateDef(self): return self.attrTuple[17] # DWORD
-    def GetReComboRateDef(self): return self.attrTuple[18] # DWORD
-    def GetReMissRateDef(self): return self.attrTuple[19] # DWORD
-    def GetReParryRateDef(self): return self.attrTuple[20] # DWORD
-    def GetReSuckHPPerDef(self): return self.attrTuple[21] # DWORD
+    def GetReHeroStar(self): return self.attrTuple[5] # 参考星级 BYTE
+    def GetReHeroBreakLV(self): return self.attrTuple[6] # 参考突破等级 BYTE
+    def GetReHeroAwakeLV(self): return self.attrTuple[7] # 参考觉醒等级 BYTE
+    def GetReAtk(self): return self.attrTuple[8] # 参考攻击 DWORD
+    def GetReDef(self): return self.attrTuple[9] # 防御 DWORD
+    def GetReMaxHP(self): return self.attrTuple[10] # 生命 DWORD
+    def GetReStunRate(self): return self.attrTuple[11] # DWORD
+    def GetReSuperHitRate(self): return self.attrTuple[12] # DWORD
+    def GetReComboRate(self): return self.attrTuple[13] # DWORD
+    def GetReMissRate(self): return self.attrTuple[14] # DWORD
+    def GetReParryRate(self): return self.attrTuple[15] # DWORD
+    def GetReSuckHPPer(self): return self.attrTuple[16] # DWORD
+    def GetReStunRateDef(self): return self.attrTuple[17] # DWORD
+    def GetReSuperHitRateDef(self): return self.attrTuple[18] # DWORD
+    def GetReComboRateDef(self): return self.attrTuple[19] # DWORD
+    def GetReMissRateDef(self): return self.attrTuple[20] # DWORD
+    def GetReParryRateDef(self): return self.attrTuple[21] # DWORD
+    def GetReSuckHPPerDef(self): return self.attrTuple[22] # DWORD
 
 # 特殊地图玩家属性公式表
 class IPY_SpecMapPlayerAttrFormat():

--
Gitblit v1.8.0