From b765ceca4dc1bbdb4e3ff595d5acc0fd04d15401 Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期三, 30 一月 2019 20:09:34 +0800
Subject: [PATCH] 6154 【后端】【1.5.200】击晕属性优化
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/EquipZhuXian.py | 99 ++++++++++++++++++++++++++++++++++++-------------
1 files changed, 73 insertions(+), 26 deletions(-)
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 92d5fd1..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
@@ -46,10 +47,22 @@
## 获取诛仙装备位是否解锁
# @param equipPlaceIndex: 注意传入的参数是装备位索引
equipPlace = GetZhuXianEquipPlaceByIndex(equipPlaceIndex)
- placeUnlockDict = IpyGameDataPY.GetFuncEvalCfg("EquipZhuXian", 1, {}) # 诛仙装备位对应解锁所需诛仙塔层数 {"装备位":诛仙塔层数, ...} 没配的默认解锁
- if str(equipPlace) not in placeUnlockDict:
+ placeUnlockDict = IpyGameDataPY.GetConfigEx("EquipZhuXianUnlock") # 诛仙装备位对应解锁所需诛仙塔层数 {"装备位":诛仙塔层数, ...} 没配的默认解锁
+ if not placeUnlockDict:
+ placeUnlockDict = {}
+ ipyDataMgr = IpyGameDataPY.IPY_Data()
+ for index in xrange(ipyDataMgr.GetZhuXianTowerCount()):
+ ipyData = ipyDataMgr.GetZhuXianTowerByIndex(index)
+ unlockEquipPlace = ipyData.GetUnLockEquipPlace()
+ if not unlockEquipPlace:
+ continue
+ towerID = ipyData.GetID()
+ placeUnlockDict[unlockEquipPlace] = towerID
+ IpyGameDataPY.SetConfigEx("EquipZhuXianUnlock", placeUnlockDict)
+ GameWorld.DebugLog("加载诛仙塔解锁装备位: placeUnlockDict=%s" % placeUnlockDict)
+ if equipPlace not in placeUnlockDict:
return True
- needTowerLV = placeUnlockDict[str(equipPlace)]
+ needTowerLV = placeUnlockDict[equipPlace]
curTowerLV = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_ZhuXianTowerPassLV) # 已过关的诛仙塔层数
return curTowerLV >= needTowerLV
@@ -130,7 +143,7 @@
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):
+ if not ItemCommon.DoLogicSwitchItem(curPlayer, destEquip, curEquip, ShareDefine.rptZhuXianEquip):
return
dataDict = {'dotype':'EquipZhuXianItem', 'desItemID':desItemID, 'desUserData':desUserData, 'srcItemID':srcItemID, 'srcUserData':srcUserData}
DataRecordPack.Cache_FightPowerChangeInfo(curPlayer, ChConfig.PowerDownType_EquipChange, dataDict)
@@ -184,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)
@@ -229,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))
@@ -239,26 +257,16 @@
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
-
+ if attrID in addAttrIDList:
+ skillAddPerDict = PyGameData.g_zhuXianSkillAddPerDict.get(playerID, {})
+ skillAddPerDict[skillTypeID] = plusValue
+ PyGameData.g_zhuXianSkillAddPerDict[playerID] = skillAddPerDict
+ elif attrID in reduceAttrIDList:
+ skillReducePerDict = PyGameData.g_zhuXianSkillReducePerDict.get(playerID, {})
+ skillReducePerDict[skillTypeID] = plusValue
+ PyGameData.g_zhuXianSkillReducePerDict[playerID] = skillReducePerDict
+
# GameWorld.DebugLog(" PyGameData.g_zhuXianSkillAddPerDict=%s" % PyGameData.g_zhuXianSkillAddPerDict)
# GameWorld.DebugLog(" PyGameData.g_zhuXianSkillReducePerDict=%s" % PyGameData.g_zhuXianSkillReducePerDict)
@@ -270,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():
@@ -312,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))
--
Gitblit v1.8.0