From 8d8cc593c3057c9b53a3678476f3dfc9cd83f67f Mon Sep 17 00:00:00 2001
From: xdh <xiefantasy@qq.com>
Date: 星期三, 30 一月 2019 18:52:16 +0800
Subject: [PATCH] 6105 【后端】【1.5.200】诛仙宝石开发
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/PrintFightPower.py | 1
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_EquipStone.py | 134 +++++++++++++++-----------
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChEquip.py | 8 +
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py | 5 +
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py | 26 +++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/EquipZhuXian.py | 51 +++++++++
PySysDB/PySysDBPY.h | 10 ++
ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py | 5 +
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py | 5
9 files changed, 181 insertions(+), 64 deletions(-)
diff --git a/PySysDB/PySysDBPY.h b/PySysDB/PySysDBPY.h
index e0da52f..eaf0828 100644
--- a/PySysDB/PySysDBPY.h
+++ b/PySysDB/PySysDBPY.h
@@ -1694,4 +1694,14 @@
DWORD _Index; //索引
DWORD NeedPoint; //需要点数
dict Award; //奖励 {"职业":[[物品ID,个数,是否绑定],...], ...}
+};
+
+//诛仙宝石共鸣属性表
+
+struct tagZhuXianStoneAttr
+{
+ BYTE _SuitType; //套装类型
+ BYTE _ShareSoneLV; //共鸣等级
+ list AttrIDList; //属性ID列表
+ list AttrValueList; //属性值列表
};
\ No newline at end of file
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
index 6680a4f..75f8d7b 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
@@ -518,6 +518,11 @@
Def_Effect_SkillReducePer6 = 114 # 受到技能伤害减少6
Def_Effect_SkillReducePer7 = 115 # 受到技能伤害减少7
+Def_Effect_ZXWeaponAttrPer = 116 # 诛仙剑1属性加成百分比
+Def_Effect_LXWeaponAttrPer = 117 # 诛仙剑2属性加成百分比
+Def_Effect_XXWeaponAttrPer = 118 # 诛仙剑3属性加成百分比
+Def_Effect_JXWeaponAttrPer = 119 # 诛仙剑4属性加成百分比
+
#增加%d物理伤害值,其中a值为伤害值
Def_Effect_AddAtk = 1005
#增加%d魔法伤害值,其中a值为伤害值
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index 034e420..070e8a7 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -4415,7 +4415,8 @@
Def_CalcAttrFunc_Coat, # 时装41
Def_CalcAttrFunc_ZXEquip, # 诛仙装备42
Def_CalcAttrFunc_ZXEquipSuit, # 诛仙装备套装43
-) = range(44)
+Def_CalcAttrFunc_ZXEquipStone, # 诛仙宝石属性44
+) = range(45)
# 在此列表中的功能属性,不享受百分比加成,--属性参与战力计算
@@ -4459,7 +4460,7 @@
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_ZhuXian:[Def_CalcAttrFunc_ZXEquipSuit, Def_CalcAttrFunc_ZXEquipStone],
ShareDefine.Def_MFPType_Other:[Def_CalcAttrFunc_Success, Def_CalcAttrFunc_FamilyTech, Def_CalcAttrFunc_EquipDecompose],
}
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_EquipStone.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_EquipStone.py
index d416a88..94ead76 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_EquipStone.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_EquipStone.py
@@ -30,6 +30,7 @@
import PlayerSuccess
import PlayerWeekParty
import ShareDefine
+import EquipZhuXian
@@ -47,8 +48,10 @@
stoneCanPlaceList = []
for stoneTypeIndex in xrange(1, GemTypeCount + 1):
#循环宝石类型对应的装备位
- stoneCanPlaceList += IpyGameDataPY.GetFuncEvalCfg("GemType%s" % stoneTypeIndex, 1)
-
+ placeList = IpyGameDataPY.GetFuncEvalCfg("GemType%s" % stoneTypeIndex, 1)
+ for place in placeList:
+ if place not in stoneCanPlaceList:
+ stoneCanPlaceList.append(place)
return stoneCanPlaceList
def GetAllEquipPlaceHoleIndex():
@@ -89,6 +92,17 @@
changeStoneID * ChConfig.Def_Stone_SaveStoneInfoXNumber + isBind)
return
+def GetPackTypeByEquipPlace(equipPlace):
+ ##目前支持镶嵌普通装备、诛仙装备
+ if equipPlace in ShareDefine.ZhuXianEquipPlace:
+ equipPackType = ShareDefine.rptZhuXianEquip
+ stonePackType = ShareDefine.rptZhuXianItem
+ placeIndex = EquipZhuXian.GetZhuXianEquipIndexByPlace(equipPlace)
+ else:
+ equipPackType = IPY_GameWorld.rptEquip
+ stonePackType = IPY_GameWorld.rptItem
+ placeIndex = equipPlace
+ return equipPackType, stonePackType, placeIndex
#//A3 04 宝石镶嵌或替换 #tagCMEquipEnchase
#struct tagCMEquipEnchase
@@ -103,22 +117,23 @@
playerID = curPlayer.GetPlayerID()
# 验证背包类型合法性
- equipIndex = clientData.EquipIndex
+ equipPlace = clientData.EquipIndex
stoneIndex = clientData.StoneIndex
holeIndex = clientData.HoleIndex
- GameWorld.DebugLog("宝石镶嵌: equipIndex=%s,stoneIndex=%s,holeIndex=%s" % (equipIndex, stoneIndex, holeIndex), playerID)
+ GameWorld.DebugLog("宝石镶嵌: equipPlace=%s,stoneIndex=%s,holeIndex=%s" % (equipPlace, stoneIndex, holeIndex), playerID)
+ equipPackType, stonePackType, placeIndex = GetPackTypeByEquipPlace(equipPlace)
#获得装备位装备实例
- equipPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip)
- curEquip = equipPack.GetAt(equipIndex)
+ equipPack = curPlayer.GetItemManager().GetPack(equipPackType)
+ curEquip = equipPack.GetAt(placeIndex)
if not ItemCommon.CheckItemCanUse(curEquip):
GameWorld.Log("目标装备为空或不可用,无法镶嵌!", playerID)
return
#获得宝石实例
- itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
+ itemPack = curPlayer.GetItemManager().GetPack(stonePackType)
curStone = itemPack.GetAt(stoneIndex)
if not ItemCommon.CheckItemCanUse(curStone):
@@ -137,32 +152,32 @@
stoneEffType = curStoneEff.GetEffectValue(0)
stoneCanPlaceList = IpyGameDataPY.GetFuncEvalCfg("GemType%s" % stoneEffType, 1)
- if equipIndex not in stoneCanPlaceList:
+ if equipPlace not in stoneCanPlaceList:
GameWorld.Log("该宝石不可镶嵌在该装备位!stoneItemID=%s,stoneEffType=%s,stoneCanPlaceList=%s,equipPlace=%s"
- % (stoneItemID, stoneEffType, stoneCanPlaceList, equipIndex), playerID)
+ % (stoneItemID, stoneEffType, stoneCanPlaceList, equipPlace), playerID)
return
equipClassLV = ItemCommon.GetItemClassLV(curEquip)
- if not __CheckStoneHoleCanUse(curPlayer, equipClassLV, holeIndex):
+ if not __CheckStoneHoleCanUse(curPlayer, equipClassLV, holeIndex, equipPackType):
return
# 扣除宝石
- ItemCommon.DelItem(curPlayer, curStone, 1, True, ChConfig.ItemDel_EquipEnchase, {"EquipPlace":equipIndex, "HoleIndex":holeIndex})
+ ItemCommon.DelItem(curPlayer, curStone, 1, True, ChConfig.ItemDel_EquipEnchase, {"EquipPlace":equipPlace, "HoleIndex":holeIndex})
isBind = 1 if isBind else 0
# 变更宝石孔宝石信息
- __DoChangeEquipHoleStone(curPlayer, equipIndex, holeIndex, stoneItemID, isBind, "EquipStone", True)
+ __DoChangeEquipHoleStone(curPlayer, equipPlace, holeIndex, stoneItemID, isBind, "EquipStone", True)
# #镶嵌成功
# if not curEquip.GetIsBind():
# ItemControler.SetItemIsBind(curEquip, True)
# 刷新属性
- RefreshAttrByStoneAction(curPlayer, IPY_GameWorld.rptEquip, True)
+ RefreshAttrByStoneAction(curPlayer, equipPackType, True)
#同步客户端
- Sycn_StoneHoleInfo(curPlayer, [equipIndex])
+ Sycn_StoneHoleInfo(curPlayer, [equipPlace])
#成就
DoStoneSuccess(curPlayer)
return
@@ -213,36 +228,37 @@
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(playerIndex)
playerID = curPlayer.GetPlayerID()
# 验证背包类型合法性
- equipIndex = clientData.EquipIndex
+ equipPlace = clientData.EquipIndex
holeIndex = clientData.HoleIndex
- GameWorld.DebugLog("宝石摘除: equipIndex=%s,holeIndex=%s" % (equipIndex, holeIndex), playerID)
+ GameWorld.DebugLog("宝石摘除: equipPlace=%s,holeIndex=%s" % (equipPlace, holeIndex), playerID)
+ equipPackType, stonePackType, placeIndex = GetPackTypeByEquipPlace(equipPlace)
#获得装备位装备实例
- equipPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip)
- curEquip = equipPack.GetAt(equipIndex)
+ equipPack = curPlayer.GetItemManager().GetPack(equipPackType)
+ curEquip = equipPack.GetAt(placeIndex)
if not ItemCommon.CheckItemCanUse(curEquip):
GameWorld.Log("目标装备为空或不可用,无法镶嵌!", playerID)
return
#验证背包空间
- if not ItemCommon.CheckPackHasSpace(curPlayer, IPY_GameWorld.rptItem, True):
+ if not ItemCommon.CheckPackHasSpace(curPlayer, stonePackType, True):
return
# 验证宝石
- stoneID = GetEquipIndexStoneIDAndIsBand(curPlayer, equipIndex, holeIndex)[0]
+ stoneID = GetEquipIndexStoneIDAndIsBand(curPlayer, equipPlace, holeIndex)[0]
if not stoneID:
GameWorld.DebugLog("孔为空或不存在宝石!")
return
- __DoChangeEquipHoleStone(curPlayer, equipIndex, holeIndex, 0, 0, "StonePick", True)
+ __DoChangeEquipHoleStone(curPlayer, equipPlace, holeIndex, 0, 0, "StonePick", True)
# 刷新属性
- RefreshAttrByStoneAction(curPlayer, IPY_GameWorld.rptEquip, False)
+ RefreshAttrByStoneAction(curPlayer, equipPackType, False)
#同步客户端
- Sycn_StoneHoleInfo(curPlayer, [equipIndex])
+ Sycn_StoneHoleInfo(curPlayer, [equipPlace])
totalStoneLV = GetTotalStoneLV(curPlayer)
# 记录开服活动宝石总等级
@@ -283,21 +299,21 @@
playerID = curPlayer.GetPlayerID()
# 验证背包类型合法性
- equipIndex = clientData.EquipIndex
+ equipPlace = clientData.EquipIndex
holeIndex = clientData.HoleIndex
upWay = clientData.UpWay
- GameWorld.DebugLog("宝石升级: equipPlace=%s,holeIndex=%s" % (equipIndex, holeIndex), playerID)
-
+ GameWorld.DebugLog("宝石升级: equipPlace=%s,holeIndex=%s" % (equipPlace, holeIndex), playerID)
+ equipPackType, stonePackType, placeIndex = GetPackTypeByEquipPlace(equipPlace)
#获得装备位装备实例
- equipPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip)
- curEquip = equipPack.GetAt(equipIndex)
+ equipPack = curPlayer.GetItemManager().GetPack(equipPackType)
+ curEquip = equipPack.GetAt(placeIndex)
if not ItemCommon.CheckItemCanUse(curEquip):
GameWorld.Log("目标装备为空或不可用,无法镶嵌!", playerID)
return
#升级宝石ID
- stoneID, stoneIsBind = GetEquipIndexStoneIDAndIsBand(curPlayer, equipIndex, holeIndex)
+ stoneID, stoneIsBind = GetEquipIndexStoneIDAndIsBand(curPlayer, equipPlace, holeIndex)
if stoneID == 0:
GameWorld.DebugLog("孔为空或不存在宝石!")
return
@@ -349,25 +365,25 @@
costIndexList = (costItemIndexList[0]+costItemIndexList[1])[:2]
else:
costIndexList = (costItemIndexList[1]+costItemIndexList[0])[:2]
- itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
+ itemPack = curPlayer.GetItemManager().GetPack(stonePackType)
hasBind = ItemCommon.ReduceItem(curPlayer, itemPack, costIndexList, needCount-1, False, ChConfig.ItemDel_StoneUpgrade,
- {"EquipPlace":equipIndex, "HoleIndex":holeIndex})
+ {"EquipPlace":equipPlace, "HoleIndex":holeIndex})
if hasBind:
stoneIsBind = True
- __DoChangeEquipHoleStone(curPlayer, equipIndex, holeIndex, upgradeStoneID, stoneIsBind, "StoneUpgrade", False)
+ __DoChangeEquipHoleStone(curPlayer, equipPlace, holeIndex, upgradeStoneID, stoneIsBind, "StoneUpgrade", False)
# 刷新属性
- RefreshAttrByStoneAction(curPlayer, IPY_GameWorld.rptEquip, False)
+ RefreshAttrByStoneAction(curPlayer, equipPackType, False)
#同步客户端
- Sycn_StoneHoleInfo(curPlayer, [equipIndex])
+ Sycn_StoneHoleInfo(curPlayer, [equipPlace])
DoStoneSuccess(curPlayer)
return
-def __CheckStoneHoleCanUse(curPlayer, equipClassLV, holeIndex):
+def __CheckStoneHoleCanUse(curPlayer, equipClassLV, holeIndex, equipPackType):
##验证孔合法性
holeIndexList = GetAllEquipPlaceHoleIndex()
@@ -376,7 +392,10 @@
return False
openCommHoleCnt = 0 # 已经开放装备常规孔数
- gemOpenClassLVList = IpyGameDataPY.GetFuncEvalCfg("GemOpen", 1)
+ if equipPackType == ShareDefine.rptZhuXianEquip:
+ gemOpenClassLVList = IpyGameDataPY.GetFuncEvalCfg("GemOpen", 2)
+ else:
+ gemOpenClassLVList = IpyGameDataPY.GetFuncEvalCfg("GemOpen", 1)
for holeCnt, openClassLV in enumerate(gemOpenClassLVList, 1):
if equipClassLV >= openClassLV:
openCommHoleCnt = holeCnt
@@ -413,32 +432,33 @@
return True
-def __DoChangeEquipHoleStone(curPlayer, equipIndex, holeIndex, changeStoneID, isBind, eventName, isPickoff):
+def __DoChangeEquipHoleStone(curPlayer, equipPlace, holeIndex, changeStoneID, isBind, eventName, isPickoff):
## 变更玩家装备孔宝石
#获得装备位孔索引宝石存储信息
- stoneID, stoneIsBind = GetEquipIndexStoneIDAndIsBand(curPlayer, equipIndex, holeIndex)
+ stoneID, stoneIsBind = GetEquipIndexStoneIDAndIsBand(curPlayer, equipPlace, holeIndex)
#保存装备位孔位上宝石ID和绑定状态
- SetEquipIndexStoneIDAndIsBand(curPlayer, equipIndex, holeIndex, changeStoneID, isBind)
+ SetEquipIndexStoneIDAndIsBand(curPlayer, equipPlace, holeIndex, changeStoneID, isBind)
if isPickoff and stoneID:
+ equipPackType, stonePackType, placeIndex = GetPackTypeByEquipPlace(equipPlace)
itemCount = 1
# 摘除的宝石都绑定
- if ItemCommon.CheckPackHasSpace(curPlayer, IPY_GameWorld.rptItem):
+ if ItemCommon.CheckPackHasSpace(curPlayer, stonePackType):
ItemControler.GivePlayerItem(curPlayer, stoneID, itemCount, True if stoneIsBind else False,
- [IPY_GameWorld.rptItem, IPY_GameWorld.rptAnyWhere],
- event=[ChConfig.ItemGive_StonePickoff, False, {"EquipPlace":equipIndex, "HoleIndex":holeIndex}])
+ [stonePackType],
+ event=[ChConfig.ItemGive_StonePickoff, False, {"EquipPlace":equipPlace, "HoleIndex":holeIndex}])
else:
PlayerControl.SendMailByKey("GemToPlayer", [curPlayer.GetPlayerID()], [[stoneID, 1, stoneIsBind]])
- DataRecordPack.DR_StoneItemChange(curPlayer, eventName, {'equipIndex':equipIndex,"holeIndex":holeIndex, "stoneID":stoneID, 'changeStoneID':changeStoneID})
+ DataRecordPack.DR_StoneItemChange(curPlayer, eventName, {'equipPlace':equipPlace,"holeIndex":holeIndex, "stoneID":stoneID, 'changeStoneID':changeStoneID})
return
def RefreshAttrByStoneAction(curPlayer, packType, isNeedNotify):
## 宝石刷新属性
# 装备等级改变,判断是否为玩家身上的装备,如果是的话刷新玩家属性
- if packType in [IPY_GameWorld.rptEquip, IPY_GameWorld.rptHorseEquip]:
+ if packType in [IPY_GameWorld.rptEquip]:
#先刷装备BUFF 再计算属性
if isNeedNotify:
curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrActivatyNotify, ChConfig.Def_AttrActivatyNotify_Stone)
@@ -447,14 +467,16 @@
#刷新所有属性
playControl = PlayerControl.PlayerControl(curPlayer)
playControl.RefreshPlayerAttrState()
-
+ elif packType == ShareDefine.rptZhuXianEquip:
+ EquipZhuXian.RefreshZhuXianAttr(curPlayer)
return
-def DoMoveEquipStone(curPlayer, equipIndex):
+def DoMoveEquipStone(curPlayer, equipPlace):
###替换装备时宝石转移
- equipPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip)
- curEquip = equipPack.GetAt(equipIndex)
+ equipPackType, stonePackType, placeIndex = GetPackTypeByEquipPlace(equipPlace)
+ equipPack = curPlayer.GetItemManager().GetPack(equipPackType)
+ curEquip = equipPack.GetAt(placeIndex)
if not ItemCommon.CheckItemCanUse(curEquip):
return
@@ -475,10 +497,10 @@
for holeIndex in xrange(maxEquipHoleCnt):
if holeIndex < openEquipHoleCnt:
continue
- curGemID = GetEquipIndexStoneIDAndIsBand(curPlayer, equipIndex, holeIndex)[0]
+ curGemID = GetEquipIndexStoneIDAndIsBand(curPlayer, equipPlace, holeIndex)[0]
if curGemID == 0:
continue
- pickoffHoleList.append([equipIndex, holeIndex])
+ pickoffHoleList.append([equipPlace, holeIndex])
#没有开启普通装备孔,需摘除VIP孔
if not openEquipHoleCnt:
@@ -487,13 +509,13 @@
maxVipHoleCnt = len(gemOpenVipList)# 最大VIP开放孔数
#判断VIP等级孔信息
for holeIndex in xrange(ChConfig.Def_Stone_VipHole, ChConfig.Def_Stone_VipHole + maxVipHoleCnt):
- curGemID = GetEquipIndexStoneIDAndIsBand(curPlayer, equipIndex, holeIndex)[0]
+ curGemID = GetEquipIndexStoneIDAndIsBand(curPlayer, equipPlace, holeIndex)[0]
if curGemID == 0:
continue
- pickoffHoleList.append([equipIndex, holeIndex])
+ pickoffHoleList.append([equipPlace, holeIndex])
# 脱装备的外层刷属性, 这里不刷
- __DoSysPickoffEquipStone(curPlayer, pickoffHoleList, "EquipChange", False)
+ __DoSysPickoffEquipStone(curPlayer, equipPackType, stonePackType, pickoffHoleList, "EquipChange", False)
return
def OnVIPTimeOut(curPlayer):
@@ -519,7 +541,7 @@
#===============================================================================================
return
-def __DoSysPickoffEquipStone(curPlayer, pickoffHoleList, eventName, isRefreshAttr):
+def __DoSysPickoffEquipStone(curPlayer, equipPackType, stonePackType, pickoffHoleList, eventName, isRefreshAttr):
## 系统摘除宝石
if not pickoffHoleList:
@@ -529,7 +551,7 @@
equipIndexList = []
stoneCount = len(pickoffHoleList)
- packSpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem, stoneCount)
+ packSpace = ItemCommon.GetItemPackSpace(curPlayer, stonePackType, stoneCount)
if packSpace >= stoneCount:
for equipIndex, holeIndex in pickoffHoleList:
__DoChangeEquipHoleStone(curPlayer, equipIndex, holeIndex, 0, 0, eventName, True)
@@ -548,7 +570,7 @@
PlayerControl.SendMailByKey("GemToPlayer", [curPlayer.GetPlayerID()], mailItemInfoList)
if isRefreshAttr:
- RefreshAttrByStoneAction(curPlayer, IPY_GameWorld.rptEquip, False)
+ RefreshAttrByStoneAction(curPlayer, equipPackType, False)
if equipIndexList:
Sycn_StoneHoleInfo(curPlayer, equipIndexList)
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 6a4209a..38316fd 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
@@ -100,6 +100,7 @@
ChConfig.Def_CalcAttrFunc_Coat:"时装",
ChConfig.Def_CalcAttrFunc_ZXEquip:"诛仙装备",
ChConfig.Def_CalcAttrFunc_ZXEquipSuit:"诛仙装备套装",
+ ChConfig.Def_CalcAttrFunc_ZXEquipStone:"诛仙装备宝石",
}
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 87e5e86..6b31701 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -1329,6 +1329,13 @@
("DWORD", "NeedPoint", 0),
("dict", "Award", 0),
),
+
+ "ZhuXianStoneAttr":(
+ ("BYTE", "SuitType", 1),
+ ("BYTE", "ShareSoneLV", 1),
+ ("list", "AttrIDList", 0),
+ ("list", "AttrValueList", 0),
+ ),
}
@@ -4054,6 +4061,21 @@
def GetIndex(self): return self.Index # 索引
def GetNeedPoint(self): return self.NeedPoint # 需要点数
def GetAward(self): return self.Award # 奖励 {"职业":[[物品ID,个数,是否绑定],...], ...}
+
+# 诛仙宝石共鸣属性表
+class IPY_ZhuXianStoneAttr():
+
+ def __init__(self):
+ self.SuitType = 0
+ self.ShareSoneLV = 0
+ self.AttrIDList = []
+ self.AttrValueList = []
+ return
+
+ def GetSuitType(self): return self.SuitType # 套装类型
+ def GetShareSoneLV(self): return self.ShareSoneLV # 共鸣等级
+ def GetAttrIDList(self): return self.AttrIDList # 属性ID列表
+ def GetAttrValueList(self): return self.AttrValueList # 属性值列表
def Log(msg, playerID=0, par=0):
@@ -4333,6 +4355,8 @@
self.ipyNewAllPeoplePartyLen = len(self.ipyNewAllPeoplePartyCache)
self.ipyNewAllPeoplePartyAwardCache = self.__LoadFileData("NewAllPeoplePartyAward", IPY_NewAllPeoplePartyAward)
self.ipyNewAllPeoplePartyAwardLen = len(self.ipyNewAllPeoplePartyAwardCache)
+ self.ipyZhuXianStoneAttrCache = self.__LoadFileData("ZhuXianStoneAttr", IPY_ZhuXianStoneAttr)
+ self.ipyZhuXianStoneAttrLen = len(self.ipyZhuXianStoneAttrCache)
Log("IPY_FuncConfig count=%s" % len(self.ipyFuncConfigDict))
Log("IPY_DataMgr InitOK!")
return
@@ -4753,6 +4777,8 @@
def GetNewAllPeoplePartyByIndex(self, index): return self.ipyNewAllPeoplePartyCache[index]
def GetNewAllPeoplePartyAwardCount(self): return self.ipyNewAllPeoplePartyAwardLen
def GetNewAllPeoplePartyAwardByIndex(self, index): return self.ipyNewAllPeoplePartyAwardCache[index]
+ def GetZhuXianStoneAttrCount(self): return self.ipyZhuXianStoneAttrLen
+ def GetZhuXianStoneAttrByIndex(self, index): return self.ipyZhuXianStoneAttrCache[index]
IPYData = IPY_DataMgr()
def IPY_Data(): return IPYData
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChEquip.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChEquip.py
index 1f0c471..d0b6f3d 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChEquip.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChEquip.py
@@ -803,7 +803,7 @@
gameData = GameWorld.GetGameData()
effIndexList = [1, 2, 3, 4] # 第一个效果值是类型等级效果值,非属性效果值
-
+ gemLVList = []
for holeIndex in Operate_EquipStone.GetAllEquipPlaceHoleIndex():
curGemID = Operate_EquipStone.GetEquipIndexStoneIDAndIsBand(curPlayer, equipIndex, holeIndex)[0]
@@ -818,8 +818,10 @@
effectID, effectValue = curGemEffect.GetEffectID(), curGemEffect.GetEffectValue(0)
if effectID and effectValue:
PlayerControl.CalcAttrDict_Type(effectID, effectValue, allAttrList)
-
- return
+ gemEffect = curGem.GetEffectByIndex(0)
+ gemLV = gemEffect.GetEffectValue(1)
+ gemLVList.append(gemLV)
+ return gemLVList
#---------------------------------------------------------------------
## 装备添加Buff
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/EquipZhuXian.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/EquipZhuXian.py
index 77fcb45..c55b09d 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/EquipZhuXian.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/EquipZhuXian.py
@@ -28,6 +28,7 @@
import SkillCommon
import PyGameData
import ChConfig
+import ChEquip
import random
@@ -196,10 +197,11 @@
allAttrList = [{} for _ in range(4)]
allAttrListZXSuit = [{} for _ in range(4)]
+ allAttrListZXStone = [{} for _ in range(4)]
equipScoreTotal = 0 #为解决装备评分、战力不一致的情况,装备战力改为由评分作为参数计算战力
equipPlaceClassLVDict = {} #装备位对应装备阶 {装备位:阶, ...}
equipPlaceBaseAttrDict = {} #装备位对应基础属性字典 {装备位:{属性ID:value, ...}, ...}
-
+ equipPlaceStoneLVDict = {} #装备位对应宝石等级 {装备位:[宝石等级,..], ...}
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)
@@ -241,7 +243,11 @@
zxSkillPlusAttrDict[legendAttrID] = zxSkillPlusAttrDict.get(legendAttrID, 0) + legendAttrValue
else:
PlayerControl.CalcAttrDict_Type(legendAttrID, legendAttrValue, allAttrList)
-
+ #宝石属性
+ gemlvList = ChEquip.CalcEquipStone_Effect(curPlayer, equipIndex, allAttrListZXStone)
+ equipPlaceStoneLVDict[equipIndex] = gemlvList
+
+
# GameWorld.DebugLog("诛仙装备属性: allAttrList=%s" % (allAttrList))
# GameWorld.DebugLog(" zxSkillPlusAttrDict=%s" % (zxSkillPlusAttrDict))
# GameWorld.DebugLog(" equipPlaceClassLVDict=%s" % (equipPlaceClassLVDict))
@@ -272,6 +278,10 @@
ShareDefine.Def_Effect_ZXRuyiAttrPer:ShareDefine.zxetRuyi,
ShareDefine.Def_Effect_ZXPendantAttrPer:ShareDefine.zxetPendant,
ShareDefine.Def_Effect_ZXRingAttrPer:ShareDefine.zxetRing,
+ ShareDefine.Def_Effect_ZXWeaponAttrPer:ShareDefine.zxetWeapon1,
+ ShareDefine.Def_Effect_LXWeaponAttrPer:ShareDefine.zxetWeapon2,
+ ShareDefine.Def_Effect_XXWeaponAttrPer:ShareDefine.zxetWeapon3,
+ ShareDefine.Def_Effect_JXWeaponAttrPer:ShareDefine.zxetWeapon4,
}
suitPlaceGroupDict = IpyGameDataPY.GetFuncEvalCfg("EquipZhuXian", 2, {})
for suitType, placeGroupList in suitPlaceGroupDict.items():
@@ -314,10 +324,45 @@
PlayerControl.CalcAttrDict_Type(plusEffID, addValue, allAttrListZXSuit)
else:
PlayerControl.CalcAttrDict_Type(suitEffID, suitEffValue, allAttrListZXSuit)
-
+ #宝石共鸣属性
+ needStoneCnt = IpyGameDataPY.GetFuncCfg('GemResonance')
+ for suitType, placeGroupList in suitPlaceGroupDict.items():
+ suitType = int(suitType)
+ groupStoneLVList = []
+ for place in placeGroupList:
+ groupStoneLVList += equipPlaceStoneLVDict.get(place, [])
+
+ if len(groupStoneLVList) < needStoneCnt:
+ continue
+ groupStoneLVList.sort(reverse=True)
+ shareStoneLV = min(groupStoneLVList[needStoneCnt:])
+ GameWorld.DebugLog(" 激活诛仙宝石共鸣: suitType=%s, shareStoneLV=%s" % (suitType, shareStoneLV))
+ stoneAttrIpyData = IpyGameDataPY.GetIpyGameData("ZhuXianStoneAttr", suitType, shareStoneLV)
+ if not stoneAttrIpyData:
+ continue
+ attrIDList = stoneAttrIpyData.GetAttrIDList()
+ attrValueList = stoneAttrIpyData.GetAttrValueList()
+ if len(attrIDList) != len(attrValueList):
+ continue
+ for i, effID in enumerate(attrIDList):
+ effValue = attrValueList[i]
+ if effID in suitAttrIDPlusPlaceDict:
+ plusPlace = suitAttrIDPlusPlaceDict[effID]
+ if plusPlace not in equipPlaceBaseAttrDict:
+ continue
+ plusEffDict = equipPlaceBaseAttrDict[plusPlace]
+ #GameWorld.DebugLog(" plusPlace=%s,plusEffDict=%s" % (plusPlace, plusEffDict))
+ for plusEffID, plusEffValue in plusEffDict.items():
+ addValue = int(plusEffValue * (10000 + suitEffValue) / 10000.0)
+ #GameWorld.DebugLog(" plusEffID=%s,plusEffValue=%s,addValue=%s" % (plusEffID, plusEffValue, addValue))
+ PlayerControl.CalcAttrDict_Type(plusEffID, addValue, allAttrListZXStone)
+ else:
+ PlayerControl.CalcAttrDict_Type(effID, effValue, allAttrListZXStone)
+
# 保存计算值
PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_ZXEquip, allAttrList)
PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_ZXEquipSuit, allAttrListZXSuit)
+ PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_ZXEquipStone, allAttrListZXStone)
#计算装备基础属性附加战力 (目前组成: 评分战力 + ...)
equipFightPowerEx = eval(IpyGameDataPY.GetFuncCompileCfg("FightpowerFormula", 2))
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
index 6680a4f..75f8d7b 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
@@ -518,6 +518,11 @@
Def_Effect_SkillReducePer6 = 114 # 受到技能伤害减少6
Def_Effect_SkillReducePer7 = 115 # 受到技能伤害减少7
+Def_Effect_ZXWeaponAttrPer = 116 # 诛仙剑1属性加成百分比
+Def_Effect_LXWeaponAttrPer = 117 # 诛仙剑2属性加成百分比
+Def_Effect_XXWeaponAttrPer = 118 # 诛仙剑3属性加成百分比
+Def_Effect_JXWeaponAttrPer = 119 # 诛仙剑4属性加成百分比
+
#增加%d物理伤害值,其中a值为伤害值
Def_Effect_AddAtk = 1005
#增加%d魔法伤害值,其中a值为伤害值
--
Gitblit v1.8.0