From 369e52f7a7b980c882ca322615b1995796fe9223 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期二, 06 十一月 2018 21:38:13 +0800
Subject: [PATCH] 4595 【1.2】【后端】装备战力、评分优化(角色装备、神兽装备 )
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_550.py | 2
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChEquip.py | 15 ++---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/ItemCommon.py | 4 +
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerDogz.py | 24 ++++++--
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py | 17 +++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py | 40 ++++++------
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/CalcNoLineEffect.py | 6 --
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py | 15 +++-
8 files changed, 73 insertions(+), 50 deletions(-)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index 14b2ba6..d4a9ccf 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -4257,7 +4257,9 @@
Def_CalcAttrFunc_MagicWeaponSoul, # 法宝之魂属性34
Def_CalcAttrFunc_Dogz, # 神兽35
Def_CalcAttrFunc_DogzBattleSkill, # 助战神兽技能36
-) = range(37)
+Def_CalcAttrFunc_DogzEquip, # 神兽装备37
+Def_CalcAttrFunc_DogzEquipPlus, # 神兽装备强化38
+) = range(39)
# 在此列表中的功能属性,不享受百分比加成,--属性参与战力计算
@@ -4272,9 +4274,11 @@
#战斗力分组类型对应功能点属性分类索引列表,并不是一一对应的,有些战斗力类型可由多个功能点组成
MFPTypeAttrFuncIndexDict = {ShareDefine.Def_MFPType_Role:[Def_CalcAttrFunc_RoleBase],
- ShareDefine.Def_MFPType_Equip:[Def_CalcAttrFunc_EquipBaseWeapon, Def_CalcAttrFunc_EquipBaseRelics,
- Def_CalcAttrFunc_EquipBaseArmor, Def_CalcAttrFunc_Equip,
- Def_CalcAttrFunc_EquipOutOfPrint, Def_CalcAttrFunc_EquipAllStars],
+# 因为装备评分和实际战力一直出现不匹配的情况,所以装备战力修改为直接由装备评分做为参数计算战力,所以装备评分计算的所有属性不列入战力计算,祥见评分计算函数 ItemCommom.CalcEquipGS
+# ShareDefine.Def_MFPType_Equip:[Def_CalcAttrFunc_EquipBaseWeapon, Def_CalcAttrFunc_EquipBaseRelics,
+# Def_CalcAttrFunc_EquipBaseArmor, Def_CalcAttrFunc_Equip,
+# Def_CalcAttrFunc_EquipOutOfPrint, Def_CalcAttrFunc_EquipAllStars],
+ ShareDefine.Def_MFPType_Equip:[Def_CalcAttrFunc_EquipAllStars],
ShareDefine.Def_MFPType_Plus:[Def_CalcAttrFunc_PlusBase, Def_CalcAttrFunc_PlusEx],
ShareDefine.Def_MFPType_Stone:[Def_CalcAttrFunc_Stone],
ShareDefine.Def_MFPType_Suit:[Def_CalcAttrFunc_Suit],
@@ -4294,7 +4298,8 @@
ShareDefine.Def_MFPType_MagicWeapon3:[Def_CalcAttrFunc_MagicWeapon3, Def_CalcAttrFunc_Stove, Def_CalcAttrFunc_VIP],
ShareDefine.Def_MFPType_StoveYao:[Def_CalcAttrFunc_StoveYao],
ShareDefine.Def_MFPType_MagicWeaponSoul:[Def_CalcAttrFunc_MagicWeaponSoul],
- ShareDefine.Def_MFPType_Dogz:[Def_CalcAttrFunc_Dogz],
+ # 神兽战力同装备模块战力一致,受评分影响,装备评分相关的战力另外算
+ ShareDefine.Def_MFPType_Dogz:[Def_CalcAttrFunc_Dogz, Def_CalcAttrFunc_DogzEquipPlus],
ShareDefine.Def_MFPType_Other:[Def_CalcAttrFunc_Success, Def_CalcAttrFunc_FamilyTech, Def_CalcAttrFunc_EquipDecompose],
}
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 49cd1c6..03ace23 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChEquip.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChEquip.py
@@ -452,6 +452,7 @@
equipPlaceList = [] # 有穿戴装备的装备位列表
suitCntDict = {} #套装数量字典
legendAttrDict = {} #所有传奇属性
+ equipScoreTotal = 0 #为解决装备评分、战力不一致的情况,装备战力改为由评分作为参数计算战力
#玩家当前可装备的装备类型
for equipIndex in xrange(playerEquip.GetCount()):
@@ -471,6 +472,7 @@
continue
equipPlaceList.append(equipIndex)
+ equipScoreTotal += ItemCommon.GetEquipGearScore(curEquip)
#基础属性效果
for i in range(0, curEquip.GetEffectCount()):
@@ -542,15 +544,10 @@
PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Wash, allAttrListWash)
PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_EquipOutOfPrint, allAttrListOutOfPrintEquip)
- #计算装备基础属性附加战力
- LV = curPlayer.GetLV()
- Atk = baseEquipAttrDict.get(ShareDefine.Def_Effect_Atk, 0)
- MinAtk = baseEquipAttrDict.get(ShareDefine.Def_Effect_MinAtk, 0) + Atk
- MaxAtk = baseEquipAttrDict.get(ShareDefine.Def_Effect_MaxAtk, 0) + Atk
- MaxHP = baseEquipAttrDict.get(ShareDefine.Def_Effect_MaxHP, 0)
- Def = baseEquipAttrDict.get(ShareDefine.Def_Effect_Def, 0)
- fightPowerEx = eval(IpyGameDataPY.GetFuncCompileCfg("FightpowerFormula", 2))
- curPlayer.SetDict(ChConfig.Def_PlayerKey_MFPEx % ShareDefine.Def_MFPType_Equip, fightPowerEx)
+ #计算装备基础属性附加战力 (目前组成: 评分战力 + ...)
+ equipFightPowerEx = eval(IpyGameDataPY.GetFuncCompileCfg("FightpowerFormula", 2))
+ #GameWorld.DebugLog("装备评分战力: equipScoreTotal=%s,equipFightPowerEx=%s" % (equipScoreTotal, equipFightPowerEx))
+ curPlayer.SetDict(ChConfig.Def_PlayerKey_MFPEx % ShareDefine.Def_MFPType_Equip, equipFightPowerEx)
return
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 7c94fdb..4a9bff8 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
@@ -392,7 +392,9 @@
return
def CalcEquipGS(curItem):
- ##计算装备评分
+ '''计算装备评分
+ 评分组成:装备基础 + 传奇属性 + 绝版属性
+ '''
if not CheckNoteEquipGS(curItem):
#GameWorld.DebugLog("不设置装备评分")
return 0
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
index 8cd64f1..0108dab 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
@@ -687,8 +687,21 @@
itemManager = curPlayer.GetItemManager()
for packIndex in ChConfig.Def_PlayerLoginInitPackIndexList:
- itemManager.GetPack(packIndex).Sync_Refresh()
-
+ rolePack = itemManager.GetPack(packIndex)
+ rolePack.Sync_Refresh()
+
+ # 刷下装备评分,仓库可以暂不处理,取出装备后登录触发刷新
+ for i in xrange(rolePack.GetCount()):
+ curItem = rolePack.GetAt(i)
+ if curItem.IsEmpty():
+ continue
+ newScore = ItemCommon.CalcEquipGS(curItem)
+ hisScore = ItemCommon.GetEquipGearScore(curItem)
+ if hisScore != newScore:
+ ItemCommon.SetEquipGearScore(curItem, newScore)
+ GameWorld.Log("登录更新装备评分: packType=%s,i=%s,hisScore=%s,newScore=%s,itemID=%s,guid=%s"
+ % (packIndex, i, hisScore, newScore, curItem.GetItemTypeID(), curItem.GetGUID()), curPlayer.GetPlayerID())
+
for packIndex in ChConfig.Def_VPackCnt_Dict.keys():
ItemControler.Sync_VPackItem_Refresh(curPlayer, packIndex)
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 bb43579..4ee7cda 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
@@ -3395,8 +3395,7 @@
__AttrName = "%s" # 参数为ChConfig.Def_Calc_AllAttrType_MAX对应所有属性列表索引
__AttrNameNoline = "Noline_%s" # 参数为ChConfig.Def_Calc_AllAttrType_MAX对应所有属性列表索引
- __NolineAttrList = [ChConfig.TYPE_Calc_AttrSpeed, ChConfig.TYPE_Calc_AttrATKMin, ChConfig.TYPE_Calc_AttrATKMax,
- ChConfig.TYPE_Calc_AttrMaxHP] # 需要记录的非线性战斗属性
+ __NolineAttrList = [ChConfig.TYPE_Calc_AttrSpeed] # 需要记录的非线性战斗属性
## 初始化
# @param self 类实例
@@ -3504,21 +3503,10 @@
#其他需作为公式参数的系数
AtkSpeedParameter = fpParam.GetCftAtkSpeed()
LuckyHitParameter = fpParam.GetCftLuckyHit()
-
- fpEx = 0
- #装备模块特殊处理
- if self.mfpType == ShareDefine.Def_MFPType_Equip:
- AtkPer = getattr(self, self.__AttrNameNoline % ChConfig.TYPE_Calc_AttrATKMax) * fpParam.GetCftAtkPer() # 攻击百分比系数
- MaxHPPer = getattr(self, self.__AttrNameNoline % ChConfig.TYPE_Calc_AttrMaxHP) * fpParam.GetCftMaxHPPer() # 生命百分比系数
- fpEx = eval(IpyGameDataPY.GetFuncCompileCfg("FightpowerFormula", 3))
- GameWorld.DebugLog("装备模块攻击生命百分比传奇属性战力: fpEx=%s" % fpEx)
- else:
- AtkPer = 0
- MaxHPPer = 0
#获取策划配置的表格
FightpowerFormula = IpyGameDataPY.GetFuncCfg("FightpowerFormula")
- totalFightPower = eval(FormulaControl.GetCompileFormula("FightpowerFormula", FightpowerFormula)) + fpEx
+ totalFightPower = eval(FormulaControl.GetCompileFormula("FightpowerFormula", FightpowerFormula))
#GameWorld.DebugLog("MfpType=%s,FightPower=%s, %s" % (self.mfpType, totalFightPower, self.GetMFPAttrStr()))
if totalFightPower > ShareDefine.Def_UpperLimit_DWord:
@@ -6655,12 +6643,24 @@
def GetCalcAttrListValue(curPlayer, funcIndex):
## 获取功能点预先计算的所加属性值
attrList = [{} for _ in range(4)]
- for attrIndex, attrDict in enumerate(attrList):
- for i in xrange(Def_MaxAddAttrTypeCnt):
- attrType = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_CalcAddAttrType % (funcIndex, attrIndex, i))
- if attrType == 0:
- break
- attrDict[attrType] = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_CalcAddAttrValue % (funcIndex, attrIndex, i))
+ if isinstance(funcIndex, int):
+ funcIndexList = [funcIndex]
+ elif isinstance(funcIndex, list):
+ funcIndexList = funcIndex
+ else:
+ return attrList
+
+ for funcIndex in funcIndexList:
+ for attrIndex, attrDict in enumerate(attrList):
+ for i in xrange(Def_MaxAddAttrTypeCnt):
+ attrType = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_CalcAddAttrType % (funcIndex, attrIndex, i))
+ if attrType == 0:
+ break
+ attrValue = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_CalcAddAttrValue % (funcIndex, attrIndex, i))
+ if attrType in attrDict:
+ attrDict[attrType] = attrValue + attrDict[attrType]
+ else:
+ attrDict[attrType] = attrValue
return attrList
## 刷属性时累加功能事先计算好的属性值
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerDogz.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerDogz.py
index a4adcd0..79917ff 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerDogz.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerDogz.py
@@ -510,6 +510,9 @@
totalPlusLv = 0 #出战神兽装备总强化等级
fightPowerEx = 0
allAttrList = [{} for _ in range(4)]
+ allAttrListEquip = [{} for _ in range(4)]
+ allAttrListEquipPlus = [{} for _ in range(4)]
+ equipScoreTotal = 0 #为解决装备评分、战力不一致的情况,装备战力改为由评分作为参数计算战力
dogzEquipPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptDogzEquip)
equipPackCount = dogzEquipPack.GetCount()
@@ -540,6 +543,8 @@
if curEquip.IsEmpty():
continue
+ equipScoreTotal += ItemCommon.GetEquipGearScore(curEquip)
+
#itemID = curEquip.GetItemTypeID()
# 装备基础属性
for effIndex in xrange(curEquip.GetEffectCount()):
@@ -550,8 +555,8 @@
if not effID or effID == ChConfig.Def_Effect_DogzEquipPlusExp:
continue
effValue = curEffect.GetEffectValue(0)
- PlayerControl.CalcAttrDict_Type(effID, effValue, allAttrList)
- #GameWorld.DebugLog(" 装备基础: itemID=%s,effID=%s,effValue=%s, %s" % (itemID, effID, effValue, allAttrList))
+ PlayerControl.CalcAttrDict_Type(effID, effValue, allAttrListEquip)
+ #GameWorld.DebugLog(" 装备基础: itemID=%s,effID=%s,effValue=%s, %s" % (itemID, effID, effValue, allAttrListEquip))
# 强化属性
curPlusLV = curEquip.GetUserAttrByIndex(ShareDefine.Def_IudetDogzEquipPlus, 0)
@@ -563,18 +568,25 @@
if plusAttrTypeList and len(plusAttrTypeList) == len(plusAttrValueList):
for plusIndex, plusAttrID in enumerate(plusAttrTypeList):
plusAttrValue = plusAttrValueList[plusIndex]
- PlayerControl.CalcAttrDict_Type(plusAttrID, plusAttrValue, allAttrList)
- #GameWorld.DebugLog(" 装备强化: itemID=%s,plusAttrID=%s, plusAttrValue=%s, %s" % (itemID, plusAttrID, plusAttrValue, allAttrList))
+ PlayerControl.CalcAttrDict_Type(plusAttrID, plusAttrValue, allAttrListEquipPlus)
+ #GameWorld.DebugLog(" 装备强化: itemID=%s,plusAttrID=%s, plusAttrValue=%s, %s" % (itemID, plusAttrID, plusAttrValue, allAttrListEquipPlus))
# 传奇属性
- ChEquip.CalcAttr_LegendAttr(curPlayer, curEquip, allAttrList)
- #GameWorld.DebugLog(" 装备传奇: itemID=%s,%s" % (itemID, allAttrList))
+ ChEquip.CalcAttr_LegendAttr(curPlayer, curEquip, allAttrListEquip)
+ #GameWorld.DebugLog(" 装备传奇: itemID=%s,%s" % (itemID, allAttrListEquip))
# 附加战力
fightPowerEx += ipyData.GetFightPowerEx()
# 保存计算值
PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Dogz, allAttrList)
+ PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_DogzEquip, allAttrListEquip)
+ PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_DogzEquipPlus, allAttrListEquipPlus)
+
+ #计算装备基础属性附加战力 (目前组成: 评分战力 + ...)
+ equipFightPowerEx = eval(IpyGameDataPY.GetFuncCompileCfg("FightpowerFormula", 2))
+ #GameWorld.DebugLog("神兽装备评分战力: equipScoreTotal=%s,equipFightPowerEx=%s" % (equipScoreTotal, equipFightPowerEx))
+ fightPowerEx += equipFightPowerEx
curPlayer.SetDict(ChConfig.Def_PlayerKey_MFPEx % ShareDefine.Def_MFPType_Dogz, fightPowerEx)
# 技能属性,从Def_CalcAttrFunc_Dogz获取
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/CalcNoLineEffect.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/CalcNoLineEffect.py
index 67fea1e..ca8511d 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/CalcNoLineEffect.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/CalcNoLineEffect.py
@@ -21,7 +21,6 @@
import ChConfig
import EffGetSet
import GameWorld
-import ShareDefine
#---------------------------------------------------------------------
## 给玩家添加非线性Buff效果
@@ -69,11 +68,6 @@
for mfpObj, attrDict in mfpObjAttrDict.items():
#if not attrDict.has_key(key): # 如果该模块没有增加该属性,则跳过
if key not in attrDict: # 如果该模块没有增加该属性,则跳过
- continue
- #装备模块攻击、生命非线性属性提升的属性不计算战力,战力另外算
- if mfpObj.mfpType == ShareDefine.Def_MFPType_Equip \
- and key in [ChConfig.TYPE_Calc_AttrATKMin, ChConfig.TYPE_Calc_AttrATKMax, ChConfig.TYPE_Calc_AttrMaxHP]:
- GameWorld.DebugLog("装备模块某些属性不计入战力计算: key=%s,value=%s" % (key, attrDict[key]))
continue
curMValue = attrDict[key]
curMAddValue = curValue * curMValue / ChConfig.Def_MaxRateValue # 相对增加值
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_550.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_550.py
index dd1f9d1..e9b5042 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_550.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_550.py
@@ -22,7 +22,7 @@
# @return None
def OnCalcBuffEx(defender, curEffect, calcDict, curBuff):
attrType = curEffect.GetEffectValue(1)
- attrList = PlayerControl.GetCalcAttrListValue(defender, ChConfig.Def_CalcAttrFunc_Dogz)
+ attrList = PlayerControl.GetCalcAttrListValue(defender, [ChConfig.Def_CalcAttrFunc_Dogz, ChConfig.Def_CalcAttrFunc_DogzEquip, ChConfig.Def_CalcAttrFunc_DogzEquipPlus])
value = int(attrList[2].get(attrType, 0)*curEffect.GetEffectValue(0)*1.0/ChConfig.Def_MaxRateValue)
calcDict[attrType] = calcDict.get(attrType, 0) + value
--
Gitblit v1.8.0