121 【武将】武将系统-服务端(武将表、NPC表关联优化:武将表可配置NPC怪物,增加是否开放玩家的配置,NPC表去除字段:国家、远近、性别、技能、特长,统一取关联武将的相关数据;)
5个文件已修改
103 ■■■■ 已修改文件
PySysDB/PySysDBPY.h 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Hero.py 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHero.py 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PySysDB/PySysDBPY.h
@@ -33,15 +33,11 @@
    DWORD        _NPCID;    //NPCID
    char        NPCName;    //名称
    DWORD        RelatedHeroID;    //关联武将ID
    BYTE        Country;    //国家
    BYTE        AtkDistType;    //远近类型;1-近战;2-远程
    BYTE        Sex;    //性别;1-男,2-女
    WORD        LV;    //等级
    BYTE        BossType;    //Boss类型
    DWORD        Atk;    //攻击力
    DWORD        Def;    //防御值
    DWORD        MaxHP;    //最大生命值,可超过20E
    list        SkillIDList;    //技能ID列表
    DWORD        FinalDamPer;    //最终增伤
    DWORD        FinalDamPerDef;    //最终减伤
    DWORD        MissRate;    //闪避概率
@@ -57,7 +53,6 @@
    DWORD        SuckHPPer;    //吸血比率
    DWORD        SuckHPPerDef;    //抗吸血比率
    dict        SpecAttrInfo;    //特殊属性信息 {"属性ID":值, ...}
    BYTE        Specialty;    // 特长
};
//NPC成长表
@@ -132,6 +127,7 @@
{
    DWORD        _HeroID;    //英雄ID
    char        Name;    //名称
    BYTE        PlayerCanUse;    //玩家可用
    BYTE        Country;    // 国家
    BYTE        Quality;    // 品质
    BYTE        AtkDistType;    //远近类型;1-近战;2-远程
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py
@@ -618,7 +618,7 @@
    else:
        heroID = 0
        skinID = 0
        skillIDList = [] + npcData.GetSkillIDList()
        skillIDList = []# + npcData.GetSkillIDList()
        
    # boss额外随机技能
    bossID = lineupIpyData.GetBossID()
@@ -664,7 +664,7 @@
    angerSkillID = heroIpyData.GetAngerSkillID()
    skillIDList = [normalSkillID, angerSkillID]
    
    breakIpyDataList = IpyGameDataPY.GetIpyGameDataList("HeroBreak", heroID)
    breakIpyDataList = IpyGameDataPY.GetIpyGameDataListNotLog("HeroBreak", heroID)
    if breakIpyDataList:
        for breakIpyData in breakIpyDataList:
            if breakIpyData.GetBreakLV() > breakLV:
@@ -740,11 +740,12 @@
        heroID = heroInfo.get("HeroID", 0)
        skinID = heroInfo.get("SkinID", 0)
        lv = heroInfo.get("LV", 1)
        specialty, atkDistType, country, sex = 0, 1, 0, 1
        heroIpyData = IpyGameDataPY.GetIpyGameData("Hero", heroID) if heroID else None
        if heroIpyData:
            objName = heroIpyData.GetName()
            specialty = heroIpyData.GetSpecialty()
            atkDistType = heroIpyData.GetAtkDistType()
            objName = heroIpyData.GetName()
            country = heroIpyData.GetCountry()
            sex = heroIpyData.GetSex()
            
@@ -758,11 +759,7 @@
            if not npcDataEx:
                continue
            if not heroIpyData:
                specialty = npcDataEx.GetSpecialty()
                atkDistType = npcDataEx.GetAtkDistType()
                objName = npcDataEx.GetNPCName()
                country = npcDataEx.GetCountry()
                sex = npcDataEx.GetSex()
                
        batObj = batObjMgr.addBatObj()
        if not batObj:
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Hero.py
@@ -71,6 +71,8 @@
            ipyDataMgr = IpyGameDataPY.IPY_Data()
            for index in range(ipyDataMgr.GetHeroCount()):
                ipyData = ipyDataMgr.GetHeroByIndex(index)
                if not ipyData.GetPlayerCanUse():
                    continue
                heroIDList.append(ipyData.GetHeroID())
        else:
            heroIDList = [value2]
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -60,15 +60,11 @@
                        ("DWORD", "NPCID", 1),
                        ("char", "NPCName", 0),
                        ("DWORD", "RelatedHeroID", 0),
                        ("BYTE", "Country", 0),
                        ("BYTE", "AtkDistType", 0),
                        ("BYTE", "Sex", 0),
                        ("WORD", "LV", 0),
                        ("BYTE", "BossType", 0),
                        ("DWORD", "Atk", 0),
                        ("DWORD", "Def", 0),
                        ("DWORD", "MaxHP", 0),
                        ("list", "SkillIDList", 0),
                        ("DWORD", "FinalDamPer", 0),
                        ("DWORD", "FinalDamPerDef", 0),
                        ("DWORD", "MissRate", 0),
@@ -84,7 +80,6 @@
                        ("DWORD", "SuckHPPer", 0),
                        ("DWORD", "SuckHPPerDef", 0),
                        ("dict", "SpecAttrInfo", 0),
                        ("BYTE", "Specialty", 0),
                        ),
                "NPCStronger":(
@@ -152,6 +147,7 @@
                "Hero":(
                        ("DWORD", "HeroID", 1),
                        ("char", "Name", 0),
                        ("BYTE", "PlayerCanUse", 0),
                        ("BYTE", "Country", 0),
                        ("BYTE", "Quality", 0),
                        ("BYTE", "AtkDistType", 0),
@@ -2622,31 +2618,26 @@
    def GetNPCID(self): return self.attrTuple[0] # NPCID DWORD
    def GetNPCName(self): return self.attrTuple[1] # 名称 char
    def GetRelatedHeroID(self): return self.attrTuple[2] # 关联武将ID DWORD
    def GetCountry(self): return self.attrTuple[3] # 国家 BYTE
    def GetAtkDistType(self): return self.attrTuple[4] # 远近类型;1-近战;2-远程 BYTE
    def GetSex(self): return self.attrTuple[5] # 性别;1-男,2-女 BYTE
    def GetLV(self): return self.attrTuple[6] # 等级 WORD
    def GetBossType(self): return self.attrTuple[7] # Boss类型 BYTE
    def GetAtk(self): return self.attrTuple[8] # 攻击力 DWORD
    def GetDef(self): return self.attrTuple[9] # 防御值 DWORD
    def GetMaxHP(self): return self.attrTuple[10] # 最大生命值,可超过20E DWORD
    def GetSkillIDList(self): return self.attrTuple[11] # 技能ID列表 list
    def GetFinalDamPer(self): return self.attrTuple[12] # 最终增伤 DWORD
    def GetFinalDamPerDef(self): return self.attrTuple[13] # 最终减伤 DWORD
    def GetMissRate(self): return self.attrTuple[14] # 闪避概率 DWORD
    def GetMissRateDef(self): return self.attrTuple[15] # 抗闪避概率 DWORD
    def GetSuperHitRate(self): return self.attrTuple[16] # 暴击概率 DWORD
    def GetSuperHitRateDef(self): return self.attrTuple[17] # 抗暴击概率 DWORD
    def GetStunRate(self): return self.attrTuple[18] # 击晕概率 DWORD
    def GetStunRateDef(self): return self.attrTuple[19] # 抗击晕概率 DWORD
    def GetComboRate(self): return self.attrTuple[20] # 连击概率 DWORD
    def GetComboRateDef(self): return self.attrTuple[21] # 抗连击概率 DWORD
    def GetParryRate(self): return self.attrTuple[22] # 格挡概率 DWORD
    def GetParryRateDef(self): return self.attrTuple[23] # 抗格挡概率 DWORD
    def GetSuckHPPer(self): return self.attrTuple[24] # 吸血比率 DWORD
    def GetSuckHPPerDef(self): return self.attrTuple[25] # 抗吸血比率 DWORD
    def GetSpecAttrInfo(self): return self.attrTuple[26] # 特殊属性信息 {"属性ID":值, ...} dict
    def GetSpecialty(self): return self.attrTuple[27] #  特长 BYTE
    def GetLV(self): return self.attrTuple[3] # 等级 WORD
    def GetBossType(self): return self.attrTuple[4] # Boss类型 BYTE
    def GetAtk(self): return self.attrTuple[5] # 攻击力 DWORD
    def GetDef(self): return self.attrTuple[6] # 防御值 DWORD
    def GetMaxHP(self): return self.attrTuple[7] # 最大生命值,可超过20E DWORD
    def GetFinalDamPer(self): return self.attrTuple[8] # 最终增伤 DWORD
    def GetFinalDamPerDef(self): return self.attrTuple[9] # 最终减伤 DWORD
    def GetMissRate(self): return self.attrTuple[10] # 闪避概率 DWORD
    def GetMissRateDef(self): return self.attrTuple[11] # 抗闪避概率 DWORD
    def GetSuperHitRate(self): return self.attrTuple[12] # 暴击概率 DWORD
    def GetSuperHitRateDef(self): return self.attrTuple[13] # 抗暴击概率 DWORD
    def GetStunRate(self): return self.attrTuple[14] # 击晕概率 DWORD
    def GetStunRateDef(self): return self.attrTuple[15] # 抗击晕概率 DWORD
    def GetComboRate(self): return self.attrTuple[16] # 连击概率 DWORD
    def GetComboRateDef(self): return self.attrTuple[17] # 抗连击概率 DWORD
    def GetParryRate(self): return self.attrTuple[18] # 格挡概率 DWORD
    def GetParryRateDef(self): return self.attrTuple[19] # 抗格挡概率 DWORD
    def GetSuckHPPer(self): return self.attrTuple[20] # 吸血比率 DWORD
    def GetSuckHPPerDef(self): return self.attrTuple[21] # 抗吸血比率 DWORD
    def GetSpecAttrInfo(self): return self.attrTuple[22] # 特殊属性信息 {"属性ID":值, ...} dict
# NPC成长表
class IPY_NPCStronger():
@@ -2729,20 +2720,21 @@
        
    def GetHeroID(self): return self.attrTuple[0] # 英雄ID DWORD
    def GetName(self): return self.attrTuple[1] # 名称 char
    def GetCountry(self): return self.attrTuple[2] #  国家 BYTE
    def GetQuality(self): return self.attrTuple[3] #  品质 BYTE
    def GetAtkDistType(self): return self.attrTuple[4] # 远近类型;1-近战;2-远程 BYTE
    def GetSex(self): return self.attrTuple[5] # 性别;1-男,2-女 BYTE
    def GetSkinIDList(self): return self.attrTuple[6] #  皮肤ID列表 list
    def GetNormalSkillID(self): return self.attrTuple[7] # 普攻技能ID DWORD
    def GetAngerSkillID(self): return self.attrTuple[8] # 怒气技能ID DWORD
    def GetAtkInheritPer(self): return self.attrTuple[9] # 攻击继承 WORD
    def GetDefInheritPer(self): return self.attrTuple[10] # 防御继承 WORD
    def GetHPInheritPer(self): return self.attrTuple[11] # 生命继承 WORD
    def GetBatAttrDict(self): return self.attrTuple[12] # 其他战斗属性字典 {"属性ID":值, ...} dict
    def GetFetterIDList(self): return self.attrTuple[13] # 羁绊ID列表 list
    def GetRecruitBySelf(self): return self.attrTuple[14] #  招募需要本体 BYTE
    def GetSpecialty(self): return self.attrTuple[15] #  武将特长 BYTE
    def GetPlayerCanUse(self): return self.attrTuple[2] # 玩家可用 BYTE
    def GetCountry(self): return self.attrTuple[3] #  国家 BYTE
    def GetQuality(self): return self.attrTuple[4] #  品质 BYTE
    def GetAtkDistType(self): return self.attrTuple[5] # 远近类型;1-近战;2-远程 BYTE
    def GetSex(self): return self.attrTuple[6] # 性别;1-男,2-女 BYTE
    def GetSkinIDList(self): return self.attrTuple[7] #  皮肤ID列表 list
    def GetNormalSkillID(self): return self.attrTuple[8] # 普攻技能ID DWORD
    def GetAngerSkillID(self): return self.attrTuple[9] # 怒气技能ID DWORD
    def GetAtkInheritPer(self): return self.attrTuple[10] # 攻击继承 WORD
    def GetDefInheritPer(self): return self.attrTuple[11] # 防御继承 WORD
    def GetHPInheritPer(self): return self.attrTuple[12] # 生命继承 WORD
    def GetBatAttrDict(self): return self.attrTuple[13] # 其他战斗属性字典 {"属性ID":值, ...} dict
    def GetFetterIDList(self): return self.attrTuple[14] # 羁绊ID列表 list
    def GetRecruitBySelf(self): return self.attrTuple[15] #  招募需要本体 BYTE
    def GetSpecialty(self): return self.attrTuple[16] #  武将特长 BYTE
# 武将星级天赋表
class IPY_HeroTalent():
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHero.py
@@ -1448,6 +1448,8 @@
    for index in range(ipyDataMgr.GetHeroCount()):
        ipyData = ipyDataMgr.GetHeroByIndex(index)
        heroID = ipyData.GetHeroID()
        if not ipyData.GetPlayerCanUse():
            continue
        if not GetHeroBookInitState(curPlayer, heroID):
            # 图鉴未激活
            continue
@@ -1476,6 +1478,8 @@
        ipyDataMgr = IpyGameDataPY.IPY_Data()
        for index in range(ipyDataMgr.GetHeroCount()):
            ipyData = ipyDataMgr.GetHeroByIndex(index)
            if not ipyData.GetPlayerCanUse():
                continue
            syncHeroIDList.append(ipyData.GetHeroID())
    
    if not syncHeroIDList: