129 【战斗】战斗系统-服务端(等级表增加NPC参数星级;战斗结算增加同步等级、星级、皮肤ID)
4个文件已修改
68 ■■■■■ 已修改文件
PySysDB/PySysDBPY.h 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py 36 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PySysDB/PySysDBPY.h
@@ -1035,6 +1035,7 @@
    DWORD        MaxHP;    //生命
    DWORD        Atk;    //攻击
    DWORD        Def;    //防御
    BYTE        ReHeroStar;    //参考星级
    BYTE        ReHeroBreakLV;    //参考突破等级
    BYTE        ReHeroAwakeLV;    //参考觉醒等级
    DWORD        ReAtk;    //参考攻击
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
    
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}
    
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():