From 84f9abc7067dde4e6b504a1ba2e9f0600a6de46b Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期二, 12 三月 2019 20:58:56 +0800
Subject: [PATCH] 4042 【后端】【2.0】邮件包含附件时不能删除邮件 - 服务端添加防范
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChEquip.py | 258 +++++++++++++++++++--------------------------------
1 files changed, 97 insertions(+), 161 deletions(-)
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 ae1eec5..16da2fa 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChEquip.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChEquip.py
@@ -34,7 +34,6 @@
import IpyGameDataPY
import PlayerWing
import Operate_EquipStone
-import Operate_EquipSuitCompose
import PassiveBuffEffMng
import SkillCommon
import PlayerMagicWeapon
@@ -117,7 +116,7 @@
equipPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip)
curEquip = equipPack.GetAt(equipPackIndex)
- #SetEquipItemSuiteLVInfo(curPlayer, packEquipIndex, curEquip)
+
if curEquip.GetUserAttr(ShareDefine.Def_IudetCreateTime) == 0:
curEquip.SetUserAttr(ShareDefine.Def_IudetCreateTime, int(time.time()))
#---换装成功---
@@ -151,35 +150,6 @@
playControl.RefreshPlayerAttrState()
return True
-
-def SetEquipItemSuiteLVInfo(curPlayer, equipIndex, curItem):
- # 设置部位套装信息
- if not curItem or curItem.IsEmpty():
- return
-
- isSuitePart = False
- equipSuitTypeDict = IpyGameDataPY.GetFuncEvalCfg('EquipSuitType')
- for equipIndexList in equipSuitTypeDict.values():
- if equipIndex in equipIndexList:
- isSuitePart = True
- break
-
- if not isSuitePart:
- return
-
- suiteLVList = GetEquipPartSuiteLVList(curPlayer, equipIndex, curItem)
- attrCount = curItem.GetUserAttrCount(ShareDefine.Def_IudetPartSuiteLV)
-
- if suiteLVList and len(suiteLVList) == attrCount:
- for i, suiteLV in enumerate(suiteLVList):
- if curItem.GetUserAttrByIndex(ShareDefine.Def_IudetPartSuiteLV, i) != suiteLV:
- curItem.UpdataUserAttrByIndex(ShareDefine.Def_IudetPartSuiteLV, i, suiteLV)
- else:
- if attrCount:
- curItem.ClearUserAttr(ShareDefine.Def_IudetPartSuiteLV)
- for suiteLV in suiteLVList:
- curItem.AddUserAttr(ShareDefine.Def_IudetPartSuiteLV, suiteLV)
- return
## 刷新装备对人物属性的改变
@@ -455,10 +425,10 @@
allAttrListStar = [{} for _ in range(4)] # 星数属性
#allAttrListEquip = [{} for _ in range(4)] # 装备其他
- #allAttrListPlusBase = [{} for _ in range(4)] # 基础强化属性
+ allAttrListPlusBase = [{} for _ in range(4)] # 基础强化属性
allAttrListStone = [{} for _ in range(4)] # 宝石属性
allAttrListSuit = [{} for _ in range(4)] # 套装属性
- #allAttrListWash = [{} for _ in range(4)] # 洗练属性
+ allAttrListWash = [{} for _ in range(4)] # 洗练属性
#allAttrListOutOfPrintEquip = [{} for _ in range(4)] # 绝版装备属性 需在等级变化独立计算
packType = IPY_GameWorld.rptEquip
@@ -510,15 +480,6 @@
# PlayerControl.CalcAttrDict_Type(effectID, effectValue, allAttrListEquip)
# baseEquipAttrDict[effectID] = baseEquipAttrDict.get(effectID, 0) + effectValue
-# groupType = GetEquipPartSuiteGroupType(curPlayer, equipIndex)
-# for suiteType in range(1, maxSuiteType + 1):
-# suitelv = GetEquipPartSuiteLV(curPlayer, equipIndex, suiteType)
-# if suitelv:
-# maxSuiteLV = Operate_EquipSuitCompose.GetEquipCanDoMaxSuiteLV(curPlayer, curEquip, suiteType, groupType)
-# suiteLV = min(suitelv, maxSuiteLV)
-# if suiteLV:
-# suiteKey = '%s_%s_%s' % (groupType, suiteType, suitelv)
-# suitCntDict[suiteKey] = suitCntDict.get(suiteKey, 0) + 1
#星数属性
equipPartStar = GetEquipPartStarByRank(curPlayer, equipIndex, curEquip) #生效的星数
@@ -532,20 +493,19 @@
suitCntDict[suiteID] = []
suitCntDict[suiteID].append(equipPartStar)
- #物品强化属性,佩饰强化不同要区分
-# if equipIndex in equipPartStarIndexList:
-# equipPartStarLV = GetEquipPartPlusLVByRank(curPlayer, packType, equipIndex, curEquip)
-# CalcAttr_ItemPlus(curPlayer, curEquip, allAttrListPlusBase, equipPartStarLV)
+ #物品强化属性
+ equipPartPlusLV = GetEquipPartPlusLVByRank(curPlayer, packType, equipIndex, curEquip)
+ equipPartPlusEvolveLV = GetEquipPartPlusEvolveLVByEquip(curPlayer, packType, equipIndex, curEquip)
+ CalcAttr_ItemPlus(curPlayer, curEquip, allAttrListPlusBase, equipPartPlusLV, equipPartPlusEvolveLV)
#传奇属性
#CalcAttr_LegendAttr(curPlayer, curEquip, allAttrListEquip, legendAttrDict)
#绝世属性
#CalcAttr_OutOfPrintAttr(curPlayer, curEquip, allAttrListOutOfPrintEquip)
#洗练属性
- #Operate_EquipWash.CalcAttr_EquipWash(curPlayer, equipIndex, allAttrListWash)
+ Operate_EquipWash.CalcAttr_EquipWash(curPlayer, equipIndex, equipPlace, allAttrListWash)
- #洗练套装属性
- #Operate_EquipWash.CalcAttr_EquipWashSpec(curPlayer, equipPlaceList, allAttrListWash)
+
#套装属性
CalcEquipSuiteAttr(curPlayer, suitCntDict, allAttrListSuit)
#GameWorld.DebugLog("所有传奇属性: %s" % legendAttrDict)
@@ -655,7 +615,7 @@
# @param curPlayer 当前玩家
# @param curPlayer allAttrList 属性缓存
# @return None
-def CalcAttr_ItemPlus(curPlayer, curEquip, allAttrList, equipPartStarLV=None):
+def CalcAttr_ItemPlus(curPlayer, curEquip, allAttrList, equipPartStarLV, equipPartPlusEvolveLV):
if not equipPartStarLV:
return
plusType = GetEquipPlusType(curEquip)
@@ -668,6 +628,14 @@
attrTypeList, attrValueList = ipyData.GetAttrType(), ipyData.GetAttrValue()
for i, attrID in enumerate(attrTypeList):
PlayerControl.CalcAttrDict_Type(attrID, attrValueList[i], allAttrList)
+
+ #进化属性
+ equipPlace = curEquip.GetEquipPlace()
+ ipyData = IpyGameDataPY.GetIpyGameData('EquipPlusEvolve', equipPlace, equipPartPlusEvolveLV)
+ if not ipyData:
+ return
+ for attrID, attrValue in ipyData.GetAttr().items():
+ PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrList)
return
@@ -752,23 +720,25 @@
continue
for ipyData in ipyDataList:
suiteCnt = ipyData.GetSuiteCnt()
- star = ipyData.GetStar()
+ needStar = ipyData.GetStar()
skillID = ipyData.GetSkillID()
- if starList.count(star) >= suiteCnt:
+ if [1 if star >= needStar else 0 for star in starList].count(1) >= suiteCnt:
for attrID, attrValue in ipyData.GetAttrInfo().items():
PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrListSuit)
#技能
if skillID and not skillManager.FindSkillBySkillTypeID(skillID):
learnSkillList.append(skillID)
+ #广播
+ notifyMark = ipyData.GetIsNotify()
+ if notifyMark and not GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_EquipPartSuiteNotify, notifyMark):
+ PlayerControl.WorldNotify(0, 'AllStarLevelUp', [playerName, suiteID, suiteCnt, needStar])
+ GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_PDict_EquipPartSuiteNotify, notifyMark, 1)
+
else:
if skillID and skillManager.FindSkillBySkillTypeID(skillID):
delSkillID.append(skillID)
skillManager.DeleteSkillBySkillTypeID(skillID)
- notifyMark = ipyData.GetIsNotify()
- if notifyMark and not GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_EquipPartSuiteNotify, notifyMark):
- PlayerControl.WorldNotify(0, 'AllStarLevelUp', [playerName, suiteID, suiteCnt, star])
- GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_PDict_EquipPartSuiteNotify, notifyMark, 1)
-
+
for skillID in learnSkillList:
GameWorld.DebugLog(' 激活套装技能 skillResID=%s' % (skillID))
@@ -832,6 +802,8 @@
def CalcEquipStarAttr(curPlayer, classlv, equipPlace, equipPartStar, allAttrListStar):
## 计算装备星数属性
+ if not equipPartStar:
+ return
ipyData = IpyGameDataPY.GetIpyGameData('EquipStarUp', classlv, equipPlace, equipPartStar)
if not ipyData:
return
@@ -886,19 +858,40 @@
oldEquipShowSwitch = curPlayer.GetEquipShowSwitch()
if updEquipShowSwitch == oldEquipShowSwitch:
return
+ classLV, isSuite = updEquipShowSwitch/10, updEquipShowSwitch%10
+ equipPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip)
+ #验证套装
+ realSuit=True
+ for place in ChConfig.Def_SuitEquipPlaceList:
+ ipyData = IpyGameDataPY.GetIpyGameData('EquipPlaceIndexMap', classLV, place)
+ if not ipyData:
+ realSuit = False
+ break
+ gridIndex = ipyData.GetGridIndex()
+ curEquip = equipPack.GetAt(gridIndex)
+ if not ItemCommon.CheckItemCanUse(curEquip):
+ realSuit = False
+ break
+ if not curEquip.GetSuiteID():
+ realSuit = False
+ break
+ if realSuit != isSuite:
+ GameWorld.DebugLog('SetEquipShowSwitch 前端发的isSuite 和实际不一致!')
+ return
#通知外观装备
updFaceEquipIndex = 0
equipIndexList = []
+
for equipPlace in [ShareDefine.retWeapon, ShareDefine.retWeapon2, ShareDefine.retClothes]:
- ipyData = IpyGameDataPY.GetIpyGameData('EquipPlaceIndexMap', 1, equipPlace)
+ ipyData = IpyGameDataPY.GetIpyGameData('EquipPlaceIndexMap', classLV, equipPlace)
if not ipyData:
continue
gridIndex = ipyData.GetGridIndex()
updFaceEquipIndex = updFaceEquipIndex * 1000 + gridIndex
equipIndexList.append(gridIndex)
PlayerControl.SetFaceEquipIndex(curPlayer, updFaceEquipIndex)
- equipPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip)
+
for equipPackIndex in equipIndexList:
curEquip = equipPack.GetAt(equipPackIndex)
if not ItemCommon.CheckItemCanUse(curEquip):
@@ -927,7 +920,7 @@
## 获取公共部位强化星级, 因装备的最高可强化星级影响,用于算当前装备属性使用, 不影响全身星级
def GetEquipPartPlusLVByRank(curPlayer, packType, index, curEquip):
- maxStarLV = ItemCommon.GetItemMaxPlusLV(curEquip)
+ maxStarLV = ItemCommon.GetItemMaxPlusLV(curPlayer, index, curEquip)
return min(curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipPartPlusLV % (packType, index)), maxStarLV)
@@ -950,9 +943,27 @@
return
+## 获取公共部位强化进化等级, 用于算当前装备属性使用, 不影响全身星级
+def GetEquipPartPlusEvolveLVByEquip(curPlayer, packType, index, curEquip):
+ maxEvolveLV = ItemCommon.GetItemMaxPlusEvolveLV(curPlayer, index, curEquip)
+ return min(curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipPartPlusEvolveLV % (packType, index)), maxEvolveLV)
+
+
+## 获取公共部位强化进化等级
+def GetEquipPartPlusEvolveLV(curPlayer, packType, index):
+ return curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipPartPlusEvolveLV % (packType, index))
+
+
+## 设置公共部位强化进化等级
+def SetEquipPartPlusEvolveLV(curPlayer, packType, index, evolveLV):
+ if GetEquipPartPlusEvolveLV(curPlayer, packType, index) == evolveLV:
+ return
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_EquipPartPlusEvolveLV % (packType, index), evolveLV)
+ return
+
## 通知公共部位强化等级
def NotifyEquipPartPlusLV(curPlayer, packType=None, index=None):
- ePartStarLVPack = ChPyNetSendPack.tagMCEquipPartStarLVInfo()
+ ePartStarLVPack = ChPyNetSendPack.tagMCEquipPartPlusInfo()
ePartStarLVPack.Clear()
ePartStarLVPack.InfoList = []
@@ -966,12 +977,13 @@
if index != None and index != i:
continue
- ePartStarLV = ChPyNetSendPack.tagMCEquipPartStarLV()
+ ePartStarLV = ChPyNetSendPack.tagMCEquipPartPlusLV()
ePartStarLV.Clear()
ePartStarLV.PackType = pType
ePartStarLV.EquipIndex = i
ePartStarLV.EquipPartStarLV = GetEquipPartPlusLV(curPlayer, pType, i)
ePartStarLV.Proficiency = GetEquipPartProficiency(curPlayer, pType, i)
+ ePartStarLV.EvolveLV = GetEquipPartPlusEvolveLV(curPlayer, pType, i)
ePartStarLVPack.InfoList.append(ePartStarLV)
ePartStarLVPack.Count = len(ePartStarLVPack.InfoList)
@@ -998,109 +1010,33 @@
# 获取装备的强化类型
def GetEquipPlusType(curEquip):
equipPlace = curEquip.GetEquipPlace()
- plusTypeDict = IpyGameDataPY.GetFuncEvalCfg("StrengthenLevelLimit", 2)
+ plusTypeDict = IpyGameDataPY.GetFuncEvalCfg("StrengthenLevelLimit", 1)
if not plusTypeDict:
GameWorld.ErrLog("没有强化类型映射表")
- return -1
+ return
- return plusTypeDict.get(equipPlace, -1)
-
-
-def SetEquipPartSuiteLV(curPlayer, index, suiteType, suiteLV):
- #设置公共部位套装等级
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_EquipPartSuiteLV % (index, suiteType), suiteLV)
- equipPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip)
- SetEquipItemSuiteLVInfo(curPlayer, index, equipPack.GetAt(index))
- return
-
-
-def GetEquipPartSuiteLV(curPlayer, index, suiteType):
- #获取公共部位套装等级
- return curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipPartSuiteLV % (index, suiteType))
-
-
-def GetEquipPartSuiteGroupType(curPlayer, equipIndex):
- #获取公共部位套装组合类型
- findGroupType = 0
- equipSuitTypeDict = IpyGameDataPY.GetFuncEvalCfg('EquipSuitType')
- for groupType, indexList in equipSuitTypeDict.items():
- if equipIndex in indexList:
- findGroupType = int(groupType)
- break
- return findGroupType
+ return plusTypeDict.get(equipPlace)
# 获取满套装化的最低阶数,如5件套,4件5级,1件3级,则返回3
def GetEquipSuitsLVByType(curPlayer, suitType, groupType):
- suiteLV = 999
- equipSuitTypeDict = IpyGameDataPY.GetFuncEvalCfg('EquipSuitType')
- if groupType not in equipSuitTypeDict:
- return 0
- maxCnt = len(equipSuitTypeDict[groupType])
- cnt = 0
- for equipPlace in equipSuitTypeDict[groupType]:
- curSuiteLV = GetEquipPartSuiteLV(curPlayer, equipPlace, suitType)
- if curSuiteLV > 0:
- cnt += 1
- suiteLV = min(curSuiteLV, suiteLV)
-
- if cnt != maxCnt:
- return 0
- return 0 if suiteLV == 999 else suiteLV
+ return 0
+# suiteLV = 999
+# equipSuitTypeDict = IpyGameDataPY.GetFuncEvalCfg('EquipSuitType')
+# if groupType not in equipSuitTypeDict:
+# return 0
+# maxCnt = len(equipSuitTypeDict[groupType])
+# cnt = 0
+# for equipPlace in equipSuitTypeDict[groupType]:
+# curSuiteLV = GetEquipPartSuiteLV(curPlayer, equipPlace, suitType)
+# if curSuiteLV > 0:
+# cnt += 1
+# suiteLV = min(curSuiteLV, suiteLV)
+#
+# if cnt != maxCnt:
+# return 0
+# return 0 if suiteLV == 999 else suiteLV
-
-## 通知公共部位套装等级
-def NotifyEquipPartSuiteLV(curPlayer, index=None):
- ePartSuitePack = ChPyNetSendPack.tagMCEquipPartSuiteLVInfo()
- ePartSuitePack.Clear()
- ePartSuitePack.InfoList = []
-
- equipSuitTypeDict = IpyGameDataPY.GetFuncEvalCfg('EquipSuitType')
- for equipIndexList in equipSuitTypeDict.values():
- for i in equipIndexList:
- if index != None and index != i:
- continue
- ePartSuiteInfo = ChPyNetSendPack.tagMCEquipPartSuiteLV()
- ePartSuiteInfo.Clear()
- ePartSuiteInfo.EquipIndex = i
- suiteInfo = GetSuiteInfoByPlace(curPlayer, i)
- ePartSuiteInfo.SuiteLVInfo = json.dumps(suiteInfo, ensure_ascii=False)
- ePartSuiteInfo.Len = len(ePartSuiteInfo.SuiteLVInfo)
- ePartSuitePack.InfoList.append(ePartSuiteInfo)
-
- ePartSuitePack.Count = len(ePartSuitePack.InfoList)
- NetPackCommon.SendFakePack(curPlayer, ePartSuitePack)
- return
-
-
-def GetSuiteInfoByPlace(curPlayer, equipPlace, curEquip=None):
- suiteInfo = {} #{套装类型:等级}
- groupType = GetEquipPartSuiteGroupType(curPlayer, equipPlace)
- maxSuiteType = IpyGameDataPY.GetFuncCfg('EquipSuitColorStar', 2)
- for suiteType in range(1, maxSuiteType + 1):
- suiteLV = GetEquipPartSuiteLV(curPlayer, equipPlace, suiteType)
- if suiteLV:
- if curEquip:
- maxSuiteLV = Operate_EquipSuitCompose.GetEquipCanDoMaxSuiteLV(curPlayer, curEquip, suiteType, groupType)
- suiteLV = min(suiteLV, maxSuiteLV)
- suiteInfo[suiteType] = suiteLV
- return suiteInfo
-
-
-def GetEquipPartSuiteLVList(curPlayer, equipPlace, curEquip=None):
- ## 部位套装等级列表
- groupType = GetEquipPartSuiteGroupType(curPlayer, equipPlace)
-
- suiteLVList = []
- maxSuiteType = IpyGameDataPY.GetFuncCfg('EquipSuitColorStar', 2)
- for suiteType in xrange(1, maxSuiteType + 1):
- suiteLV = GetEquipPartSuiteLV(curPlayer, equipPlace, suiteType)
- if curEquip and suiteLV:
- maxSuiteLV = Operate_EquipSuitCompose.GetEquipCanDoMaxSuiteLV(curPlayer, curEquip, suiteType, groupType)
- suiteLV = min(suiteLV, maxSuiteLV)
-
- suiteLVList.append(suiteLV)
- return suiteLVList
def SetEquipPartStar(curPlayer, equipPackindex, star):
@@ -1164,8 +1100,8 @@
activeCnt = clientData.Cnt
if activeType == 0:
key = ChConfig.Def_PDict_EquipActiveStarLV
- elif activeType == 1:
- key = ChConfig.Def_PDict_EquipActiveStars
+# elif activeType == 1:
+# key = ChConfig.Def_PDict_EquipActiveStars
else:
return
curCnt = curPlayer.NomalDictGetProperty(key)
@@ -1196,8 +1132,8 @@
continue
if aType == 0:
key = ChConfig.Def_PDict_EquipActiveStarLV
- elif aType == 1:
- key = ChConfig.Def_PDict_EquipActiveStars
+# elif aType == 1:
+# key = ChConfig.Def_PDict_EquipActiveStars
else:
return
curCnt = curPlayer.NomalDictGetProperty(key)
--
Gitblit v1.8.0