hxp
2019-01-22 d833cc75e3925841d2c947f2c64944963192faf0
5931 【后端】【1.5.100】诛仙装备开发
12个文件已修改
1个文件已添加
587 ■■■■■ 已修改文件
PySysDB/PySysDBPY.h 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/PrintFightPower.py 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/EquipZhuXian.py 318 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/ItemCommon.py 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PySysDB/PySysDBPY.h
@@ -459,6 +459,12 @@
    DWORD        CftSpeedPer;    //移动速度百分比系数
    DWORD        CftAtkPer;    //攻击百分比系数
    DWORD        CftMaxHPPer;    //生命百分比系数
    DWORD        CftJobAHurtAddPer;    //对目标战士伤害加成
    DWORD        CftJobBHurtAddPer;    //对目标法师伤害加成
    DWORD        CftJobCHurtAddPer;    //对目标弓箭伤害加成
    DWORD        CftJobAAtkReducePer;    //战士攻击伤害减免
    DWORD        CftJobBAtkReducePer;    //法师攻击伤害减免
    DWORD        CftJobCAtkReducePer;    //弓箭攻击伤害减免
};
//NPC掉落表
@@ -623,6 +629,20 @@
    DWORD        SkillAtkRateReduceC;    // 技能减伤百分比系数
    DWORD        HitC;    // 命中系数
    DWORD        MissC;    // 闪避系数
    DWORD        SkillAddPer1C;    // 技能伤害增强1系数
    DWORD        SkillAddPer2C;    // 技能伤害增强2系数
    DWORD        SkillAddPer3C;    // 技能伤害增强3系数
    DWORD        SkillAddPer4C;    // 技能伤害增强4系数
    DWORD        SkillAddPer5C;    // 技能伤害增强5系数
    DWORD        SkillAddPer6C;    // 技能伤害增强6系数
    DWORD        SkillAddPer7C;    // 技能伤害增强7系数
    DWORD        SkillReducePer1C;    // 受到技能伤害减少1系数
    DWORD        SkillReducePer2C;    // 受到技能伤害减少2系数
    DWORD        SkillReducePer3C;    // 受到技能伤害减少3系数
    DWORD        SkillReducePer4C;    // 受到技能伤害减少4系数
    DWORD        SkillReducePer5C;    // 受到技能伤害减少5系数
    DWORD        SkillReducePer6C;    // 受到技能伤害减少6系数
    DWORD        SkillReducePer7C;    // 受到技能伤害减少7系数
};
//成就表
@@ -1581,6 +1601,16 @@
    list        Reward;    //奖励物品
};
//诛仙装备套装属性表
struct tagZhuXianSuitAttr
{
    BYTE        _SuitType;    //套装类型
    BYTE        _SuitLV;    //套装等级
    list        SuitAttrIDList;        //属性ID列表
    list        SuitAttrValueList;    //属性值列表
};
//诛仙BOSS表
struct tagZhuXianBoss
ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
@@ -478,6 +478,36 @@
Def_Effect_NPCHurtAddPer = 89 # 对怪物伤害加成
Def_Effect_JobAHurtAddPer = 90 # 对目标战士伤害加成
Def_Effect_JobBHurtAddPer = 91 # 对目标法师伤害加成
Def_Effect_JobCHurtAddPer = 92 # 对目标弓箭伤害加成
Def_Effect_JobAAtkReducePer = 93 # 战士攻击伤害减免
Def_Effect_JobBAtkReducePer = 94 # 法师攻击伤害减免
Def_Effect_JobCAtkReducePer = 95 # 弓箭攻击伤害减免
Def_Effect_ZXCloakAttrPer = 96 # 诛仙披风属性加成百分比
Def_Effect_ZXMaskAttrPer = 97 # 诛仙面具属性加成百分比
Def_Effect_ZXGloveAttrPer = 98 # 诛仙手套属性加成百分比
Def_Effect_ZXRuyiAttrPer = 99 # 诛仙如意属性加成百分比
Def_Effect_ZXPendantAttrPer = 100 # 诛仙吊坠属性加成百分比
Def_Effect_ZXRingAttrPer = 101 # 诛仙戒指属性加成百分比
Def_Effect_SkillAddPer1 = 102 # 技能伤害增强1
Def_Effect_SkillAddPer2 = 103 # 技能伤害增强2
Def_Effect_SkillAddPer3 = 104 # 技能伤害增强3
Def_Effect_SkillAddPer4 = 105 # 技能伤害增强4
Def_Effect_SkillAddPer5 = 106 # 技能伤害增强5
Def_Effect_SkillAddPer6 = 107 # 技能伤害增强6
Def_Effect_SkillAddPer7 = 108 # 技能伤害增强7
Def_Effect_SkillReducePer1 = 109 # 受到技能伤害减少1
Def_Effect_SkillReducePer2 = 110 # 受到技能伤害减少2
Def_Effect_SkillReducePer3 = 111 # 受到技能伤害减少3
Def_Effect_SkillReducePer4 = 112 # 受到技能伤害减少4
Def_Effect_SkillReducePer5 = 113 # 受到技能伤害减少5
Def_Effect_SkillReducePer6 = 114 # 受到技能伤害减少6
Def_Effect_SkillReducePer7 = 115 # 受到技能伤害减少7
#增加%d物理伤害值,其中a值为伤害值
Def_Effect_AddAtk = 1005
#增加%d魔法伤害值,其中a值为伤害值
@@ -1349,7 +1379,7 @@
)=range(5)
# 战斗力模块类型
Def_MFPType_Max = 28
Def_MFPType_Max = 29
ModuleFightPowerTypeList = (
Def_MFPType_Role, # 角色 0
Def_MFPType_Equip, # 装备(基本装备位) 1
@@ -1376,6 +1406,7 @@
Def_MFPType_GatherSoul, # 聚魂 22
Def_MFPType_MagicWeapon4, # 王者法宝 23
Def_MFPType_Coat, # ʱװ 24
Def_MFPType_ZhuXian, # 诛仙 25
Def_MFPType_Other, # 其他
#以下暂时没用到,改时再处理
@@ -1765,6 +1796,11 @@
    zxetWeapon4,    # 诛仙剑4 132
) = range(121, 121 + 12)
# 共享通用装备位,可装备同一类型装备
ShareEquipPlace = [
                   [zxetGlove, zxetGlove2],
                   [zxetRing, zxetRing2],
                   ]
# 请求进入副本通用检查结果,优先提示的放前面(即索引越大,提示优先级越低)
EnterFBAskResult = (
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
@@ -1344,6 +1344,22 @@
PacketSubCMD_5=0xC4
PacketCallFunc_5=OnDogzEquipPlus
;诛仙装备
[EquipZhuXian]
ScriptName = Item\EquipZhuXian.py
Writer = hxp
Releaser = hxp
RegType = 0
RegisterPackCount = 2
PacketCMD_1=0xA3
PacketSubCMD_1=0x30
PacketCallFunc_1=OnEquipZhuXianItem
PacketCMD_2=0xA3
PacketSubCMD_2=0x31
PacketCallFunc_2=OnUnEquipZhuXianItem
;个推
[PlayerGeTui]
ScriptName = Player\PlayerGeTui.py
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py
@@ -1582,7 +1582,7 @@
            # 理论伤害一致, 多加点预算伤害避免计算误差
            #hurtValue = min(ShareDefine.Def_UpperLimit_DWord, hurtValue+10)
            #atkObj.SetDict(ChConfig.Def_PlayerKey_ClientMaxHurtValue, int(hurtValue*1.2))
            hurtValue = atkObj.GetMaxAtk()*atkSkillPer*20   # 加入被动计算不准确改成估算
            hurtValue = atkObj.GetMaxAtk()*atkSkillPer*40   # 加入被动计算不准确改成估算
            
        clientValue, hurtType = SkillShell.GetClientHurtByObj(defObj.GetID(), defObjType)
        if clientValue <= hurtValue:
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -4205,6 +4205,12 @@
    AttrName_SuperHit:[[TYPE_Calc_SuperHit], False, TYPE_Linear],
    AttrName_NPCHurtAddPer:[[TYPE_Calc_NPCHurtAddPer], False, TYPE_Linear],
    ShareDefine.Def_Effect_NPCHurtAddPer:[[TYPE_Calc_NPCHurtAddPer], False, TYPE_Linear],
    ShareDefine.Def_Effect_JobAHurtAddPer:[[TYPE_Calc_JobAHurtAddPer], False, TYPE_Linear],
    ShareDefine.Def_Effect_JobBHurtAddPer:[[TYPE_Calc_JobBHurtAddPer], False, TYPE_Linear],
    ShareDefine.Def_Effect_JobCHurtAddPer:[[TYPE_Calc_JobCHurtAddPer], False, TYPE_Linear],
    ShareDefine.Def_Effect_JobAAtkReducePer:[[TYPE_Calc_JobAAtkReducePer], False, TYPE_Linear],
    ShareDefine.Def_Effect_JobBAtkReducePer:[[TYPE_Calc_JobBAtkReducePer], False, TYPE_Linear],
    ShareDefine.Def_Effect_JobCAtkReducePer:[[TYPE_Calc_JobCAtkReducePer], False, TYPE_Linear],
    AttrName_JobAHurtAddPer:[[TYPE_Calc_JobAHurtAddPer], False, TYPE_Linear],
    AttrName_JobBHurtAddPer:[[TYPE_Calc_JobBHurtAddPer], False, TYPE_Linear],
    AttrName_JobCHurtAddPer:[[TYPE_Calc_JobCHurtAddPer], False, TYPE_Linear],
@@ -4386,7 +4392,9 @@
Def_CalcAttrFunc_GatherSoul, # 聚魂39
Def_CalcAttrFunc_MagicWeapon4, # 王者法宝40
Def_CalcAttrFunc_Coat, # ʱװ41
) = range(42)
Def_CalcAttrFunc_ZXEquip, # 诛仙装备42
Def_CalcAttrFunc_ZXEquipSuit, # 诛仙装备套装43
) = range(44)
# 在此列表中的功能属性,不享受百分比加成,--属性参与战力计算
@@ -4428,8 +4436,9 @@
                            ShareDefine.Def_MFPType_MagicWeaponSoul:[Def_CalcAttrFunc_MagicWeaponSoul],
                            ShareDefine.Def_MFPType_GatherSoul:[Def_CalcAttrFunc_GatherSoul],
                            ShareDefine.Def_MFPType_Coat:[Def_CalcAttrFunc_Coat],
                            # 神兽战力同装备模块战力一致,受评分影响,装备评分相关的战力另外算
                            # 诛仙装备战力、神兽战力同装备模块战力一致,受评分影响,装备评分相关的战力另外算
                            ShareDefine.Def_MFPType_Dogz:[Def_CalcAttrFunc_Dogz, Def_CalcAttrFunc_DogzEquipPlus],
                            ShareDefine.Def_MFPType_ZhuXian:[Def_CalcAttrFunc_ZXEquipSuit],
                            ShareDefine.Def_MFPType_Other:[Def_CalcAttrFunc_Success, Def_CalcAttrFunc_FamilyTech, Def_CalcAttrFunc_EquipDecompose],
                            }
@@ -5068,7 +5077,8 @@
Def_SkillFuncType_SkillRoll,  #10为翻滚    服务端未用到
Def_SkillFuncType_RealmSuppress,  #11为境界压制 目前是NPC在用
Def_SkillFuncType_Dogz,     #12 神兽技能
) = range(13)
Def_SkillFuncType_ZhuXian,     #13 诛仙技能
) = range(14)
# 受技能效果完全影响的怪, 对应 Def_BattleRelationType_CommNoBoss
Def_SkillAttack_NPCIsBoss = [ Def_NPCType_Ogre_Normal     ,  #平凡小怪 0    # c++ 定义为普通NPC视野刷新
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/PrintFightPower.py
@@ -54,6 +54,7 @@
                   ShareDefine.Def_MFPType_MagicWeaponSoul:"法宝之魂",
                   ShareDefine.Def_MFPType_Dogz:"神兽",
                   ShareDefine.Def_MFPType_Coat:"ʱװ",
                   ShareDefine.Def_MFPType_ZhuXian:"诛仙",
                   ShareDefine.Def_MFPType_Other:"其他",
                   }
    
@@ -97,6 +98,8 @@
                     ChConfig.Def_CalcAttrFunc_MagicWeaponSoul:"法宝之魂",
                     ChConfig.Def_CalcAttrFunc_Dogz:"神兽",
                     ChConfig.Def_CalcAttrFunc_Coat:"ʱװ",
                     ChConfig.Def_CalcAttrFunc_ZXEquip:"诛仙装备",
                     ChConfig.Def_CalcAttrFunc_ZXEquipSuit:"诛仙装备套装",
                     }
    
    GameWorld.DebugAnswer(curPlayer, "PrintFightPower 模块类型(可选)")
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -386,6 +386,12 @@
                        ("DWORD", "CftSpeedPer", 0),
                        ("DWORD", "CftAtkPer", 0),
                        ("DWORD", "CftMaxHPPer", 0),
                        ("DWORD", "CftJobAHurtAddPer", 0),
                        ("DWORD", "CftJobBHurtAddPer", 0),
                        ("DWORD", "CftJobCHurtAddPer", 0),
                        ("DWORD", "CftJobAAtkReducePer", 0),
                        ("DWORD", "CftJobBAtkReducePer", 0),
                        ("DWORD", "CftJobCAtkReducePer", 0),
                        ),
                "NPCDropItem":(
@@ -526,6 +532,20 @@
                        ("DWORD", "SkillAtkRateReduceC", 0),
                        ("DWORD", "HitC", 0),
                        ("DWORD", "MissC", 0),
                        ("DWORD", "SkillAddPer1C", 0),
                        ("DWORD", "SkillAddPer2C", 0),
                        ("DWORD", "SkillAddPer3C", 0),
                        ("DWORD", "SkillAddPer4C", 0),
                        ("DWORD", "SkillAddPer5C", 0),
                        ("DWORD", "SkillAddPer6C", 0),
                        ("DWORD", "SkillAddPer7C", 0),
                        ("DWORD", "SkillReducePer1C", 0),
                        ("DWORD", "SkillReducePer2C", 0),
                        ("DWORD", "SkillReducePer3C", 0),
                        ("DWORD", "SkillReducePer4C", 0),
                        ("DWORD", "SkillReducePer5C", 0),
                        ("DWORD", "SkillReducePer6C", 0),
                        ("DWORD", "SkillReducePer7C", 0),
                        ),
                "Success":(
@@ -1240,6 +1260,13 @@
                        ("DWORD", "TotalTimes", 0),
                        ("WORD", "SingleTimes", 0),
                        ("list", "Reward", 0),
                        ),
                "ZhuXianSuitAttr":(
                        ("BYTE", "SuitType", 1),
                        ("BYTE", "SuitLV", 1),
                        ("list", "SuitAttrIDList", 0),
                        ("list", "SuitAttrValueList", 0),
                        ),
                "ZhuXianBoss":(
@@ -1978,6 +2005,12 @@
        self.CftSpeedPer = 0
        self.CftAtkPer = 0
        self.CftMaxHPPer = 0
        self.CftJobAHurtAddPer = 0
        self.CftJobBHurtAddPer = 0
        self.CftJobCHurtAddPer = 0
        self.CftJobAAtkReducePer = 0
        self.CftJobBAtkReducePer = 0
        self.CftJobCAtkReducePer = 0
        return
        
    def GetLV(self): return self.LV # 等级
@@ -2003,6 +2036,12 @@
    def GetCftSpeedPer(self): return self.CftSpeedPer # 移动速度百分比系数
    def GetCftAtkPer(self): return self.CftAtkPer # 攻击百分比系数
    def GetCftMaxHPPer(self): return self.CftMaxHPPer # 生命百分比系数
    def GetCftJobAHurtAddPer(self): return self.CftJobAHurtAddPer # 对目标战士伤害加成
    def GetCftJobBHurtAddPer(self): return self.CftJobBHurtAddPer # 对目标法师伤害加成
    def GetCftJobCHurtAddPer(self): return self.CftJobCHurtAddPer # 对目标弓箭伤害加成
    def GetCftJobAAtkReducePer(self): return self.CftJobAAtkReducePer # 战士攻击伤害减免
    def GetCftJobBAtkReducePer(self): return self.CftJobBAtkReducePer # 法师攻击伤害减免
    def GetCftJobCAtkReducePer(self): return self.CftJobCAtkReducePer # 弓箭攻击伤害减免
# NPC掉落表
class IPY_NPCDropItem():
@@ -2261,6 +2300,20 @@
        self.SkillAtkRateReduceC = 0
        self.HitC = 0
        self.MissC = 0
        self.SkillAddPer1C = 0
        self.SkillAddPer2C = 0
        self.SkillAddPer3C = 0
        self.SkillAddPer4C = 0
        self.SkillAddPer5C = 0
        self.SkillAddPer6C = 0
        self.SkillAddPer7C = 0
        self.SkillReducePer1C = 0
        self.SkillReducePer2C = 0
        self.SkillReducePer3C = 0
        self.SkillReducePer4C = 0
        self.SkillReducePer5C = 0
        self.SkillReducePer6C = 0
        self.SkillReducePer7C = 0
        return
        
    def GetClassLV(self): return self.ClassLV #  装备阶级
@@ -2291,6 +2344,20 @@
    def GetSkillAtkRateReduceC(self): return self.SkillAtkRateReduceC #  技能减伤百分比系数
    def GetHitC(self): return self.HitC #  命中系数
    def GetMissC(self): return self.MissC #  闪避系数
    def GetSkillAddPer1C(self): return self.SkillAddPer1C #  技能伤害增强1系数
    def GetSkillAddPer2C(self): return self.SkillAddPer2C #  技能伤害增强2系数
    def GetSkillAddPer3C(self): return self.SkillAddPer3C #  技能伤害增强3系数
    def GetSkillAddPer4C(self): return self.SkillAddPer4C #  技能伤害增强4系数
    def GetSkillAddPer5C(self): return self.SkillAddPer5C #  技能伤害增强5系数
    def GetSkillAddPer6C(self): return self.SkillAddPer6C #  技能伤害增强6系数
    def GetSkillAddPer7C(self): return self.SkillAddPer7C #  技能伤害增强7系数
    def GetSkillReducePer1C(self): return self.SkillReducePer1C #  受到技能伤害减少1系数
    def GetSkillReducePer2C(self): return self.SkillReducePer2C #  受到技能伤害减少2系数
    def GetSkillReducePer3C(self): return self.SkillReducePer3C #  受到技能伤害减少3系数
    def GetSkillReducePer4C(self): return self.SkillReducePer4C #  受到技能伤害减少4系数
    def GetSkillReducePer5C(self): return self.SkillReducePer5C #  受到技能伤害减少5系数
    def GetSkillReducePer6C(self): return self.SkillReducePer6C #  受到技能伤害减少6系数
    def GetSkillReducePer7C(self): return self.SkillReducePer7C #  受到技能伤害减少7系数
# 成就表
class IPY_Success():
@@ -3799,6 +3866,21 @@
    def GetSingleTimes(self): return self.SingleTimes # 单次领奖需要的次数
    def GetReward(self): return self.Reward # 奖励物品
# 诛仙装备套装属性表
class IPY_ZhuXianSuitAttr():
    def __init__(self):
        self.SuitType = 0
        self.SuitLV = 0
        self.SuitAttrIDList = []
        self.SuitAttrValueList = []
        return
    def GetSuitType(self): return self.SuitType # 套装类型
    def GetSuitLV(self): return self.SuitLV # 套装等级
    def GetSuitAttrIDList(self): return self.SuitAttrIDList # 属性ID列表
    def GetSuitAttrValueList(self): return self.SuitAttrValueList # 属性值列表
# 诛仙BOSS表
class IPY_ZhuXianBoss():
    
@@ -4095,6 +4177,8 @@
        self.ipyActLoginAwardLen = len(self.ipyActLoginAwardCache)
        self.ipyLoginAwardCache = self.__LoadFileData("LoginAward", IPY_LoginAward)
        self.ipyLoginAwardLen = len(self.ipyLoginAwardCache)
        self.ipyZhuXianSuitAttrCache = self.__LoadFileData("ZhuXianSuitAttr", IPY_ZhuXianSuitAttr)
        self.ipyZhuXianSuitAttrLen = len(self.ipyZhuXianSuitAttrCache)
        self.ipyZhuXianBossCache = self.__LoadFileData("ZhuXianBoss", IPY_ZhuXianBoss)
        self.ipyZhuXianBossLen = len(self.ipyZhuXianBossCache)
        self.ipyZhuXianTowerCache = self.__LoadFileData("ZhuXianTower", IPY_ZhuXianTower)
@@ -4501,6 +4585,8 @@
    def GetActLoginAwardByIndex(self, index): return self.ipyActLoginAwardCache[index]
    def GetLoginAwardCount(self): return self.ipyLoginAwardLen
    def GetLoginAwardByIndex(self, index): return self.ipyLoginAwardCache[index]
    def GetZhuXianSuitAttrCount(self): return self.ipyZhuXianSuitAttrLen
    def GetZhuXianSuitAttrByIndex(self, index): return self.ipyZhuXianSuitAttrCache[index]
    def GetZhuXianBossCount(self): return self.ipyZhuXianBossLen
    def GetZhuXianBossByIndex(self, index): return self.ipyZhuXianBossCache[index]
    def GetZhuXianTowerCount(self): return self.ipyZhuXianTowerLen
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/EquipZhuXian.py
New file
@@ -0,0 +1,318 @@
#!/usr/bin/python
# -*- coding: GBK -*-
#-------------------------------------------------------------------------------
#
##@package EquipZhuXian
#
# @todo:诛仙装备
# @author hxp
# @date 2019-01-22
# @version 1.0
#
# 详细描述: 诛仙装备
#
#-------------------------------------------------------------------------------
#"""Version = 2019-01-22 15:30"""
#-------------------------------------------------------------------------------
import GameWorld
import ItemCommon
import ShareDefine
import PlayerControl
import DataRecordPack
import IpyGameDataPY
import SkillCommon
import PyGameData
import ChConfig
def GetZhuXianEquipIndexByPlace(equipPlace):
    ## 获取诛仙装备位对应的索引
    return equipPlace - 1 - 120
def GetZhuXianEquipPlaceByIndex(equipIndex):
    ## 获取诛仙装备索引对应装备位
    return equipIndex + 1 + 120
def GetZhuXianEquipPlaceIndexIsUnlock(curPlayer, equipPlaceIndex):
    ## 获取诛仙装备位是否解锁
    # @param equipPlaceIndex: 注意传入的参数是装备位索引
    equipPlace = GetZhuXianEquipPlaceByIndex(equipPlaceIndex)
    placeUnlockDict = IpyGameDataPY.GetFuncEvalCfg("EquipZhuXian", 1, {}) # 诛仙装备位对应解锁所需诛仙塔层数 {"装备位":诛仙塔层数, ...} 没配的默认解锁
    if str(equipPlace) not in placeUnlockDict:
        return True
    needTowerLV = placeUnlockDict[str(equipPlace)]
    curTowerLV = 20 # 已过关的诛仙塔层数
    return curTowerLV >= needTowerLV
def CheckLearnZhuXianSkill(curPlayer, skillID):
    ## 检查诛仙装备位装备阶数
    zhuxianSkillCondition = IpyGameDataPY.GetFuncEvalCfg("EquipZhuXian", 3, {})
    if str(skillID) not in zhuxianSkillCondition:
        return True
    classLVPlaceListDict = zhuxianSkillCondition[str(skillID)]
    zhuXianEquipPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptZhuXianEquip)
    for classLV, placeList in classLVPlaceListDict.items():
        needClassLV = int(classLV)
        for equipPlace in placeList:
            placeIndex = GetZhuXianEquipIndexByPlace(equipPlace)
            if placeIndex < 0 or placeIndex >= zhuXianEquipPack.GetCount():
                return
            curEquip = zhuXianEquipPack.GetAt(placeIndex)
            if curEquip.IsEmpty():
                GameWorld.DebugLog("诛仙装备位无装备,无法激活神技! equipPlace=%s" % equipPlace)
                return
            curClassLV = ItemCommon.GetItemClassLV(curEquip)
            if curClassLV < needClassLV:
                GameWorld.DebugLog("诛仙装备位装备阶级不足,无法激活神技! equipPlace=%s,curClassLV=%s < needClassLV=%s" % (equipPlace, curClassLV, needClassLV))
                return
    return True
#// A3 30 装备诛仙装备 #tagCMEquipZhuXianItem
#
#struct    tagCMEquipZhuXianItem
#{
#    tagHead        Head;
#    BYTE        EquipIndex;    //装备在诛仙装备背包中的索引
#    BYTE        ItemIndex;    //装备在诛仙物品背包中的索引
#};
def OnEquipZhuXianItem(index, clientData, tick):
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
    playerID = curPlayer.GetPlayerID()
    reqEquipPlaceIndex = clientData.EquipIndex
    itemIndex = clientData.ItemIndex
    GameWorld.DebugLog("诛仙穿戴装备: EquipIndex=%s,ItemIndex=%s" % (reqEquipPlaceIndex, itemIndex), playerID)
    zhuXianItemPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptZhuXianItem)
    curEquip = zhuXianItemPack.GetAt(itemIndex)
    if not ItemCommon.CheckItemCanUse(curEquip):
        GameWorld.DebugLog("物品为空或不可用: itemIndex=%s" % itemIndex, playerID)
        return
    if not ItemCommon.GetIsZhuXianEquip(curEquip):
        GameWorld.DebugLog("非诛仙装备: itemIndex=%s" % itemIndex, playerID)
        return
    equipPlace = curEquip.GetEquipPlace()
    equipPlaceIndex = GetZhuXianEquipIndexByPlace(equipPlace)
    if reqEquipPlaceIndex != equipPlaceIndex:
        canPlace = False
        for sharePlaceList in ShareDefine.ShareEquipPlace:
            if reqEquipPlaceIndex in sharePlaceList and equipPlaceIndex in sharePlaceList:
                canPlace = True
                break
        if not canPlace:
            GameWorld.DebugLog("该装备位不可装备该物品!equipPlace=%s,equipPlaceIndex=%s != reqEquipPlaceIndex=%s" % (equipPlace, equipPlaceIndex, reqEquipPlaceIndex), playerID)
            return
    zhuXianEquipPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptZhuXianEquip)
    if reqEquipPlaceIndex < 0 or reqEquipPlaceIndex >= zhuXianEquipPack.GetCount():
        GameWorld.ErrLog("诛仙装备背包索引异常: EquipIndex=%s" % (reqEquipPlaceIndex), playerID)
        return
    if not GetZhuXianEquipPlaceIndexIsUnlock(curPlayer, reqEquipPlaceIndex):
        GameWorld.DebugLog("诛仙装备位未解锁: equipPlace=%s,EquipIndex=%s" % (equipPlace, reqEquipPlaceIndex))
        return
    destEquip = zhuXianEquipPack.GetAt(reqEquipPlaceIndex)
    desItemID, desUserData = [0, ''] if destEquip.IsEmpty() else [destEquip.GetItemTypeID(), destEquip.GetUserData()]
    srcItemID, srcUserData = curEquip.GetItemTypeID(), curEquip.GetUserData()
    if not ItemCommon.DoLogicSwitchItem(curPlayer, curEquip, destEquip, ShareDefine.rptZhuXianEquip):
        return
    dataDict = {'dotype':'EquipZhuXianItem', 'desItemID':desItemID, 'desUserData':desUserData, 'srcItemID':srcItemID, 'srcUserData':srcUserData}
    DataRecordPack.Cache_FightPowerChangeInfo(curPlayer, ChConfig.PowerDownType_EquipChange, dataDict)
    RefreshZhuXianAttr(curPlayer)
    return
#// A3 31 卸下诛仙装备 #tagCMUnEquipZhuXianItem
#
#struct    tagCMUnEquipZhuXianItem
#{
#    tagHead        Head;
#    BYTE        EquipIndex;    //装备在诛仙装备背包中的索引
#};
def OnUnEquipZhuXianItem(index, clientData, tick):
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
    playerID = curPlayer.GetPlayerID()
    EquipIndex = clientData.EquipIndex
    zhuXianEquipPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptZhuXianEquip)
    if EquipIndex < 0 or EquipIndex >= zhuXianEquipPack.GetCount():
        GameWorld.ErrLog("诛仙装备背包索引异常: EquipIndex=%s" % (EquipIndex), playerID)
        return
    curEquip = zhuXianEquipPack.GetAt(EquipIndex)
    if not ItemCommon.CheckItemCanUse(curEquip):
        GameWorld.DebugLog("诛仙装备为空或不可用: EquipIndex=%s" % EquipIndex, playerID)
        return
    emptyIndex = ItemCommon.GetEmptyIndexInPack(curPlayer, ShareDefine.rptZhuXianItem)
    if not ItemCommon.DoLogicSwitchItemEx(curPlayer, ShareDefine.rptZhuXianEquip, ShareDefine.rptZhuXianItem, EquipIndex, emptyIndex):
        GameWorld.DebugLog("诛仙卸下装备失败: EquipIndex=%s" % (EquipIndex), playerID)
        return
    RefreshZhuXianAttr(curPlayer)
    return
def RefreshZhuXianAttr(curPlayer):
    CalcZhuXianAttr(curPlayer)
    PlayerControl.PlayerControl(curPlayer).RefreshPlayerAttrState()
    return
def CalcZhuXianAttr(curPlayer):
    ## 刷新诛仙属性
    playerID = curPlayer.GetPlayerID()
    PyGameData.g_zhuXianSkillAddPerDict.pop(playerID, None)
    PyGameData.g_zhuXianSkillReducePerDict.pop(playerID, None)
    allAttrList = [{} for _ in range(4)]
    allAttrListZXSuit = [{} for _ in range(4)]
    equipScoreTotal = 0 #为解决装备评分、战力不一致的情况,装备战力改为由评分作为参数计算战力
    equipPlaceClassLVDict = {} #装备位对应装备阶 {装备位:阶, ...}
    equipPlaceBaseAttrDict = {} #装备位对应基础属性字典 {装备位:{属性ID:value, ...}, ...}
    attrIDSkillPlusDict = IpyGameDataPY.GetFuncEvalCfg("SkillPlusAttrID", 1, {}) # 属性ID对应影响的技能TypeID列表 {属性ID:[技能TypeID列表, ...], ...}
    addAttrIDList = range(ShareDefine.Def_Effect_SkillAddPer1, ShareDefine.Def_Effect_SkillAddPer7 + 1)
    reduceAttrIDList = range(ShareDefine.Def_Effect_SkillReducePer1, ShareDefine.Def_Effect_SkillReducePer7 + 1)
    zxSkillPlusAttrDict = {} # 玩家诛仙装备影响技能TypeID属性字典 {属性ID:值, ...}
    zhuXianEquipPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptZhuXianEquip)
    equipPackCount = zhuXianEquipPack.GetCount()
    for equipIndex in range(len(ShareDefine.ZhuXianEquipPlace)):
        if equipIndex < 0 or equipIndex >= equipPackCount:
            break
        curEquip = zhuXianEquipPack.GetAt(equipIndex)
        if curEquip.IsEmpty():
            continue
        equipScoreTotal += ItemCommon.GetEquipGearScore(curEquip)
        equipPlace = GetZhuXianEquipPlaceByIndex(equipIndex)
        equipPlaceClassLVDict[equipPlace] = ItemCommon.GetItemClassLV(curEquip)
        # 基础属性
        baseAttrDict = {}
        for effIndex in xrange(curEquip.GetEffectCount()):
            curEffect = curEquip.GetEffectByIndex(effIndex)
            if not curEffect or not curEffect.GetEffectID():
                break
            effID = curEffect.GetEffectID()
            if not effID:
                continue
            effValue = curEffect.GetEffectValue(0)
            PlayerControl.CalcAttrDict_Type(effID, effValue, allAttrList)
            baseAttrDict[effID] = baseAttrDict.get(effID, 0) + effValue
        equipPlaceBaseAttrDict[equipPlace] = baseAttrDict
        # 传奇属性
        if curEquip.GetUserAttrCount(ShareDefine.Def_IudetLegendAttrID) == curEquip.GetUserAttrCount(ShareDefine.Def_IudetLegendAttrValue):
            for i in xrange(curEquip.GetUserAttrCount(ShareDefine.Def_IudetLegendAttrID)):
                legendAttrID = curEquip.GetUserAttrByIndex(ShareDefine.Def_IudetLegendAttrID, i)
                legendAttrValue = curEquip.GetUserAttrByIndex(ShareDefine.Def_IudetLegendAttrValue, i)
                if legendAttrID in attrIDSkillPlusDict:
                    zxSkillPlusAttrDict[legendAttrID] = zxSkillPlusAttrDict.get(legendAttrID, 0) + legendAttrValue
                else:
                    PlayerControl.CalcAttrDict_Type(legendAttrID, legendAttrValue, allAttrList)
    GameWorld.DebugLog("诛仙装备属性: allAttrList=%s" % (allAttrList))
    GameWorld.DebugLog("    zxSkillPlusAttrDict=%s" % (zxSkillPlusAttrDict))
    # 缓存技能增强比例,目前暂写死对指定技能伤害百分比提升
    for attrID, plusValue in zxSkillPlusAttrDict.items():
        if attrID not in attrIDSkillPlusDict:
            continue
        skillTypeIDList = attrIDSkillPlusDict[attrID]
        effSkillTypeID = 0
        for skillTypeID in skillTypeIDList:
            skillData = curPlayer.GetSkillManager().FindSkillBySkillTypeID(skillTypeID)
            if not skillData:
                continue
            if SkillCommon.CheckSkillJob(curPlayer, skillData):
                effSkillTypeID = skillTypeID
                break
        if not effSkillTypeID:
            continue
        if attrID in addAttrIDList:
            skillAddPerDict = PyGameData.g_zhuXianSkillAddPerDict.get(playerID, {})
            skillAddPerDict[effSkillTypeID] = plusValue
            PyGameData.g_zhuXianSkillAddPerDict[playerID] = skillAddPerDict
        elif attrID in reduceAttrIDList:
            skillReducePerDict = PyGameData.g_zhuXianSkillReducePerDict.get(playerID, {})
            skillReducePerDict[effSkillTypeID] = plusValue
            PyGameData.g_zhuXianSkillReducePerDict[playerID] = skillReducePerDict
    # 计算套装,目前暂写死对诛仙装备部位基础属性提升
    suitAttrIDPlusPlaceDict = {
                               ShareDefine.Def_Effect_ZXCloakAttrPer:ShareDefine.zxetCloak,
                               ShareDefine.Def_Effect_ZXMaskAttrPer:ShareDefine.zxetMask,
                               ShareDefine.Def_Effect_ZXGloveAttrPer:ShareDefine.zxetGlove,
                               ShareDefine.Def_Effect_ZXRuyiAttrPer:ShareDefine.zxetRuyi,
                               ShareDefine.Def_Effect_ZXPendantAttrPer:ShareDefine.zxetPendant,
                               ShareDefine.Def_Effect_ZXRingAttrPer:ShareDefine.zxetRing,
                               }
    suitPlaceGroupDict = IpyGameDataPY.GetFuncEvalCfg("EquipZhuXian", 2, {})
    for suitType, placeGroupList in suitPlaceGroupDict.items():
        suitType = int(suitType)
        suitLV = 0
        isSuit = True
        for place in placeGroupList:
            if place not in equipPlaceClassLVDict:
                isSuit = False
                GameWorld.DebugLog("    未穿戴装备,无法激活诛仙套装! suitType=%s,placeGroupList=%s,place=%s" % (suitType, placeGroupList, place))
                break
            if not suitLV:
                suitLV = equipPlaceClassLVDict[place]
            else:
                suitLV = min(suitLV, equipPlaceClassLVDict[place])
        if not isSuit or not suitLV:
            continue
        suitAttrIpyData = IpyGameDataPY.GetIpyGameData("ZhuXianSuitAttr", suitType, suitLV)
        if not suitAttrIpyData:
            continue
        suitAttrIDList = suitAttrIpyData.GetSuitAttrIDList()
        suitAttrValueList = suitAttrIpyData.GetSuitAttrValueList()
        if len(suitAttrIDList) != len(suitAttrValueList):
            continue
        for i, suitEffID in enumerate(suitAttrIDList):
            suitEffValue = suitAttrValueList[i]
            if suitEffID in suitAttrIDPlusPlaceDict:
                plusPlace = suitAttrIDPlusPlaceDict[suitEffID]
                if plusPlace not in equipPlaceBaseAttrDict:
                    continue
                plusEffDict = equipPlaceBaseAttrDict[plusPlace]
                for plusEffID, plusEffValue in plusEffDict.items():
                    addValue = int(plusEffValue * (10000 + suitEffValue) / 10000.0)
                    PlayerControl.CalcAttrDict_Type(plusEffID, addValue, allAttrListZXSuit)
            else:
                PlayerControl.CalcAttrDict_Type(suitEffID, suitEffValue, allAttrListZXSuit)
    # 保存计算值
    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_ZXEquip, allAttrList)
    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_ZXEquipSuit, allAttrListZXSuit)
    #计算装备基础属性附加战力 (目前组成: 评分战力 + ...)
    equipFightPowerEx = eval(IpyGameDataPY.GetFuncCompileCfg("FightpowerFormula", 2))
    GameWorld.DebugLog("诛仙装备评分战力: equipScoreTotal=%s,equipFightPowerEx=%s" % (equipScoreTotal, equipFightPowerEx))
    curPlayer.SetDict(ChConfig.Def_PlayerKey_MFPEx % ShareDefine.Def_MFPType_ZhuXian, equipFightPowerEx)
    return
def GetZhuXianEquipSkillAddPer(playerID, skillTypeID):
    ## 获取诛仙装备伤害百分比提升值
    if playerID not in PyGameData.g_zhuXianSkillAddPerDict:
        return 0
    skillAddPerDict = PyGameData.g_zhuXianSkillAddPerDict[playerID]
    if skillTypeID not in skillAddPerDict:
        return 0
    return skillAddPerDict[skillTypeID]
def GetZhuXianEquipSkillReducePer(playerID, skillTypeID):
    ## 获取诛仙装备减伤百分比提升值
    if playerID not in PyGameData.g_zhuXianSkillReducePerDict:
        return 0
    skillReducePerDict = PyGameData.g_zhuXianSkillReducePerDict[playerID]
    if skillTypeID not in skillReducePerDict:
        return 0
    return skillReducePerDict[skillTypeID]
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/ItemCommon.py
@@ -458,6 +458,20 @@
    SkillAtkRateReduce = attrDict.get(ShareDefine.Def_Effect_SkillAtkRateReduce, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillAtkRateReduceC())
    Hit = attrDict.get(ShareDefine.Def_Effect_Hit, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetHitC())
    Miss = attrDict.get(ShareDefine.Def_Effect_Miss, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetMissC())
    SkillAddPer1 = attrDict.get(ShareDefine.Def_Effect_SkillAddPer1, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillAddPer1C())
    SkillAddPer2 = attrDict.get(ShareDefine.Def_Effect_SkillAddPer2, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillAddPer2C())
    SkillAddPer3 = attrDict.get(ShareDefine.Def_Effect_SkillAddPer3, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillAddPer3C())
    SkillAddPer4 = attrDict.get(ShareDefine.Def_Effect_SkillAddPer4, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillAddPer4C())
    SkillAddPer5 = attrDict.get(ShareDefine.Def_Effect_SkillAddPer5, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillAddPer5C())
    SkillAddPer6 = attrDict.get(ShareDefine.Def_Effect_SkillAddPer6, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillAddPer6C())
    SkillAddPer7 = attrDict.get(ShareDefine.Def_Effect_SkillAddPer7, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillAddPer7C())
    SkillReducePer1 = attrDict.get(ShareDefine.Def_Effect_SkillReducePer1, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillReducePer1C())
    SkillReducePer2 = attrDict.get(ShareDefine.Def_Effect_SkillReducePer2, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillReducePer2C())
    SkillReducePer3 = attrDict.get(ShareDefine.Def_Effect_SkillReducePer3, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillReducePer3C())
    SkillReducePer4 = attrDict.get(ShareDefine.Def_Effect_SkillReducePer4, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillReducePer4C())
    SkillReducePer5 = attrDict.get(ShareDefine.Def_Effect_SkillReducePer5, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillReducePer5C())
    SkillReducePer6 = attrDict.get(ShareDefine.Def_Effect_SkillReducePer6, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillReducePer6C())
    SkillReducePer7 = attrDict.get(ShareDefine.Def_Effect_SkillReducePer7, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillReducePer7C())
    
    # 攻速不默认乘,仅作为参数提供策划使用
    AtkSpeed = attrDict.get(ShareDefine.Def_Effect_AtkSpeed, 0)
@@ -1692,7 +1706,7 @@
#  @remarks 函数详细说明.
def SwitchItem(curPlayer, curItem, switchItem, putInPackIndex):
    ##物品绑定字段判定 -> 装备绑定
    if putInPackIndex == IPY_GameWorld.rptEquip:
    if putInPackIndex in [IPY_GameWorld.rptEquip, ShareDefine.rptZhuXianEquip]:
        DoLogic_ItemBindType(curPlayer, switchItem, ChConfig.Def_BindType_DoEquipBind)
        
    # 装备技能书、坐骑装备绑定
@@ -1717,7 +1731,7 @@
        return
    
    ##物品绑定字段判定 -> 装备绑定
    if putInPackIndex == IPY_GameWorld.rptEquip:
    if putInPackIndex in [IPY_GameWorld.rptEquip, ShareDefine.rptZhuXianEquip]:
        DoLogic_ItemBindType(curPlayer, switchItem, ChConfig.Def_BindType_DoEquipBind)
    
    # 装备技能书、坐骑装备绑定
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
@@ -89,6 +89,7 @@
import CrossRealmPlayer
import CrossPlayerData
import ChNetSendPack
import EquipZhuXian
import PlayerCoat
import PlayerState
import QuestCommon
@@ -1213,6 +1214,11 @@
    
    if not isDisconnect:
        CrossPlayerData.ClearCrossSyncDataCache(curPlayer)
    #清除地图玩家缓存
    playerID = curPlayer.GetPlayerID()
    PyGameData.g_zhuXianSkillAddPerDict.pop(playerID, None)
    PyGameData.g_zhuXianSkillReducePerDict.pop(playerID, None)
    return
##更新保存玩家在线时间
@@ -3541,6 +3547,13 @@
        FinalHurtReduce = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_FinalHurtReduce) # 最终固定伤害减少
        DamagePerPVP = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_DamagePerPVP) * fpParam.GetCftDamagePerPVP() # 伤害输出计算百分比PVP
        DamagePerPVPReduce = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_DamagePerPVPReduce) * fpParam.GetCftDamagePerPVPReduce() # 伤害输出计算百分比PVP减少
        JobAHurtAddPer = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_JobAHurtAddPer) * fpParam.GetCftJobAHurtAddPer() # 对目标战士伤害加成
        JobBHurtAddPer = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_JobBHurtAddPer) * fpParam.GetCftJobBHurtAddPer() # 对目标法师伤害加成
        JobCHurtAddPer = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_JobCHurtAddPer) * fpParam.GetCftJobCHurtAddPer() # 对目标弓箭伤害加成
        JobAAtkReducePer = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_JobAAtkReducePer) * fpParam.GetCftJobAAtkReducePer() # 战士攻击伤害减免
        JobBAtkReducePer = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_JobBAtkReducePer) * fpParam.GetCftJobBAtkReducePer() # 法师攻击伤害减免
        JobCAtkReducePer = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_JobCAtkReducePer) * fpParam.GetCftJobCAtkReducePer() # 弓箭攻击伤害减免
        ComboRate = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_ComboRate) # 连击几率
        ComboDamPer = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_ComboDamPer) # 连击伤害
        #MaxProDef = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_MaxProDef) # 最大防护值
@@ -4133,6 +4146,7 @@
        PlayerFamilyTech.CalcFamilyTechAttr(curPlayer)
        PlayerEquipDecompose.RefreshEDAttr(curPlayer)
        PlayerDogz.RefreshDogzAttr(curPlayer)
        EquipZhuXian.CalcZhuXianAttr(curPlayer)
        PlayerGatherSoul.RefreshGatherSoulAttr(curPlayer)
        PlayerCoat.CalcClothesCoatSkinAttr(curPlayer)
        self.RefreshAllState(isForce=True)
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py
@@ -89,3 +89,5 @@
g_crossPlayerSkillsChangeInfo = {} #跨服玩家技能变化信息 {playerID:[技能ID], ...}
g_ZhuXianBossPlayerHurtDict = {} #诛仙BOSS玩家伤害排行信息
g_zhuXianSkillAddPerDict = {} # 诛仙装备对技能增强缓存 {playerID:{技能TypeID:数值, ...}, ...}
g_zhuXianSkillReducePerDict = {} # 诛仙装备对技能减伤缓存 {playerID:{技能TypeID:数值, ...}, ...}
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
@@ -478,6 +478,36 @@
Def_Effect_NPCHurtAddPer = 89 # 对怪物伤害加成
Def_Effect_JobAHurtAddPer = 90 # 对目标战士伤害加成
Def_Effect_JobBHurtAddPer = 91 # 对目标法师伤害加成
Def_Effect_JobCHurtAddPer = 92 # 对目标弓箭伤害加成
Def_Effect_JobAAtkReducePer = 93 # 战士攻击伤害减免
Def_Effect_JobBAtkReducePer = 94 # 法师攻击伤害减免
Def_Effect_JobCAtkReducePer = 95 # 弓箭攻击伤害减免
Def_Effect_ZXCloakAttrPer = 96 # 诛仙披风属性加成百分比
Def_Effect_ZXMaskAttrPer = 97 # 诛仙面具属性加成百分比
Def_Effect_ZXGloveAttrPer = 98 # 诛仙手套属性加成百分比
Def_Effect_ZXRuyiAttrPer = 99 # 诛仙如意属性加成百分比
Def_Effect_ZXPendantAttrPer = 100 # 诛仙吊坠属性加成百分比
Def_Effect_ZXRingAttrPer = 101 # 诛仙戒指属性加成百分比
Def_Effect_SkillAddPer1 = 102 # 技能伤害增强1
Def_Effect_SkillAddPer2 = 103 # 技能伤害增强2
Def_Effect_SkillAddPer3 = 104 # 技能伤害增强3
Def_Effect_SkillAddPer4 = 105 # 技能伤害增强4
Def_Effect_SkillAddPer5 = 106 # 技能伤害增强5
Def_Effect_SkillAddPer6 = 107 # 技能伤害增强6
Def_Effect_SkillAddPer7 = 108 # 技能伤害增强7
Def_Effect_SkillReducePer1 = 109 # 受到技能伤害减少1
Def_Effect_SkillReducePer2 = 110 # 受到技能伤害减少2
Def_Effect_SkillReducePer3 = 111 # 受到技能伤害减少3
Def_Effect_SkillReducePer4 = 112 # 受到技能伤害减少4
Def_Effect_SkillReducePer5 = 113 # 受到技能伤害减少5
Def_Effect_SkillReducePer6 = 114 # 受到技能伤害减少6
Def_Effect_SkillReducePer7 = 115 # 受到技能伤害减少7
#增加%d物理伤害值,其中a值为伤害值
Def_Effect_AddAtk = 1005
#增加%d魔法伤害值,其中a值为伤害值
@@ -1349,7 +1379,7 @@
)=range(5)
# 战斗力模块类型
Def_MFPType_Max = 28
Def_MFPType_Max = 29
ModuleFightPowerTypeList = (
Def_MFPType_Role, # 角色 0
Def_MFPType_Equip, # 装备(基本装备位) 1
@@ -1376,6 +1406,7 @@
Def_MFPType_GatherSoul, # 聚魂 22
Def_MFPType_MagicWeapon4, # 王者法宝 23
Def_MFPType_Coat, # ʱװ 24
Def_MFPType_ZhuXian, # 诛仙 25
Def_MFPType_Other, # 其他
#以下暂时没用到,改时再处理
@@ -1765,6 +1796,11 @@
    zxetWeapon4,    # 诛仙剑4 132
) = range(121, 121 + 12)
# 共享通用装备位,可装备同一类型装备
ShareEquipPlace = [
                   [zxetGlove, zxetGlove2],
                   [zxetRing, zxetRing2],
                   ]
# 请求进入副本通用检查结果,优先提示的放前面(即索引越大,提示优先级越低)
EnterFBAskResult = (
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py
@@ -46,6 +46,7 @@
import SkillShell
import FBCommon
import IpyGameDataPY
import EquipZhuXian
#---------------------------------------------------------------------
GameWorld.ImportAll("Script\\Skill\\" , "GameSkills")
GameWorld.ImportAll("Script\\Skill\\" , "GameBuffs")
@@ -1878,6 +1879,11 @@
    if upSkill.GetFuncType() == ChConfig.Def_SkillFuncType_GiftSkill:
        if not PlayerGreatMaster.GetGreatMasterFreeSkillPoint(curPlayer):
            return False
    #诛仙技能学习判断
    if upSkill.GetFuncType() == ChConfig.Def_SkillFuncType_ZhuXian:
        if not EquipZhuXian.CheckLearnZhuXianSkill(curPlayer, curSkillTypeID):
            return False
    #经验检测
    skillLvUpNeedExp = upSkill.GetLVUpCostExp()