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