From d833cc75e3925841d2c947f2c64944963192faf0 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期二, 22 一月 2019 15:26:49 +0800
Subject: [PATCH] 5931 【后端】【1.5.100】诛仙装备开发
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py | 6
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py | 38 +++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/EquipZhuXian.py | 318 +++++++++++++++++++++++++++++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py | 4
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py | 2
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/PrintFightPower.py | 3
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini | 16 +
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/ItemCommon.py | 18 +
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py | 94 +++++++++
PySysDB/PySysDBPY.h | 30 +++
ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py | 38 +++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py | 14 +
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py | 16 +
13 files changed, 584 insertions(+), 13 deletions(-)
diff --git a/PySysDB/PySysDBPY.h b/PySysDB/PySysDBPY.h
index 58e8825..832ed26 100644
--- a/PySysDB/PySysDBPY.h
+++ b/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
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
index ab6f754..1edec26 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
+++ b/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 = (
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
index 14ea09a..885c20d 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
+++ b/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
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py
index cef9985..b2df452 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py
+++ b/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:
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index e3c76c7..0f289db 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/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视野刷新
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/PrintFightPower.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/PrintFightPower.py
index 7e7c431..6a4209a 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/PrintFightPower.py
+++ b/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 模块类型(可选)")
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
index a7f3b91..c646e09 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
+++ b/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":(
@@ -1977,7 +2004,13 @@
self.CftLuckyHit = 0
self.CftSpeedPer = 0
self.CftAtkPer = 0
- self.CftMaxHPPer = 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 # 等级
@@ -2002,7 +2035,13 @@
def GetCftLuckyHit(self): return self.CftLuckyHit # 会心一击系数
def GetCftSpeedPer(self): return self.CftSpeedPer # 移动速度百分比系数
def GetCftAtkPer(self): return self.CftAtkPer # 攻击百分比系数
- def GetCftMaxHPPer(self): return self.CftMaxHPPer # 生命百分比系数
+ 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():
@@ -2260,7 +2299,21 @@
self.AtkSpeedC = 0
self.SkillAtkRateReduceC = 0
self.HitC = 0
- self.MissC = 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 # 装备阶级
@@ -2290,7 +2343,21 @@
def GetAtkSpeedC(self): return self.AtkSpeedC # 攻击速度系数
def GetSkillAtkRateReduceC(self): return self.SkillAtkRateReduceC # 技能减伤百分比系数
def GetHitC(self): return self.HitC # 命中系数
- def GetMissC(self): return self.MissC # 闪避系数
+ 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
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/EquipZhuXian.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/EquipZhuXian.py
new file mode 100644
index 0000000..8f79049
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/EquipZhuXian.py
@@ -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]
+
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/ItemCommon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/ItemCommon.py
index 1ba3c18..a93cdda 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/ItemCommon.py
+++ b/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)
# 装备技能书、坐骑装备绑定
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
index 17a6cb5..92eeea5 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
+++ b/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)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py
index 37d22ac..b397a8b 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py
@@ -88,4 +88,6 @@
g_crossPlayerItemsChangeInfo = {} #跨服玩家物品变化信息 {playerID:{"背包类型-物品位":itemMD5, ...}, ...}
g_crossPlayerSkillsChangeInfo = {} #跨服玩家技能变化信息 {playerID:[技能ID], ...}
-g_ZhuXianBossPlayerHurtDict = {} #诛仙BOSS玩家伤害排行信息
\ No newline at end of file
+g_ZhuXianBossPlayerHurtDict = {} #诛仙BOSS玩家伤害排行信息
+g_zhuXianSkillAddPerDict = {} # 诛仙装备对技能增强缓存 {playerID:{技能TypeID:数值, ...}, ...}
+g_zhuXianSkillReducePerDict = {} # 诛仙装备对技能减伤缓存 {playerID:{技能TypeID:数值, ...}, ...}
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
index ab6f754..1edec26 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
+++ b/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 = (
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py
index af21d9c..1f5de80 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py
+++ b/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()
--
Gitblit v1.8.0