From e8d3e73b9a40493afcc000b2844791bab2ff1629 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期六, 11 一月 2020 20:36:21 +0800
Subject: [PATCH] 8346 【恺英】【后端】协助系统(修复封魔坛在同一boss场景中无法直接协助的bug,在不同封魔坛boss无法直接协助)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py | 157 ++++++++++++++++++++++++++++++++++++++++++++--------
1 files changed, 133 insertions(+), 24 deletions(-)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py
index 3670097..ce582b0 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py
@@ -1002,12 +1002,15 @@
return False
return True
- def DoTransformItem(self, curPlayer, tagItem):
+ def DoTransformItem(self, curPlayer, tagItem, event=["", False, {}]):
## 将特殊物品转化为对应数值
itemID = tagItem.GetItemTypeID()
if itemID not in ChConfig.Def_TransformItemIDList:
return False
itemCount = max(tagItem.GetUserAttr(ShareDefine.Def_IudetItemCount), tagItem.GetCount())
+ eventName, isForceEvent, addDict = event
+ if isForceEvent:
+ pass
if itemID == ChConfig.Def_ItemID_FamilyContribution:
PlayerFamily.AddPlayerFamilyActiveValue(curPlayer, itemCount, True, ShareDefine.Def_AddFAVReason_UseItem, True)
@@ -1017,8 +1020,8 @@
PlayerControl.GiveMoney(curPlayer, ShareDefine.TYPE_Price_FamilyActivity, itemCount)
elif itemID == ChConfig.Def_ItemID_SP:
PlayerControl.PlayerAddZhenQi(curPlayer, itemCount)
- #elif itemID == ChConfig.Def_ItemID_GoldPaper:
- # PlayerControl.GiveMoney(curPlayer, IPY_GameWorld.TYPE_Price_Gold_Paper, itemCount, eventName, addDict)
+ elif itemID == ChConfig.Def_ItemID_GoldPaper:
+ PlayerControl.GiveMoney(curPlayer, IPY_GameWorld.TYPE_Price_Gold_Paper, itemCount, eventName, addDict)
elif itemID == ChConfig.Def_ItemID_RealmPoint:
PlayerControl.GiveMoney(curPlayer, ShareDefine.TYPE_Price_RealmPoint, itemCount)
elif itemID == ChConfig.Def_ItemID_BossReborn:
@@ -1036,8 +1039,6 @@
PlayerControl.GiveMoney(curPlayer, ShareDefine.TYPE_Price_Honor, itemCount)
elif itemID == ChConfig.Def_ItemID_GoldMoney:
PlayerControl.GiveMoney(curPlayer, IPY_GameWorld.TYPE_Price_Gold_Money, itemCount)
- elif itemID == ChConfig.Def_ItemID_XianyuanCoin:
- PlayerControl.GiveMoney(curPlayer, ShareDefine.TYPE_Price_XianyuanCoin, itemCount)
return True
def __CrossServerPutInItem(self, packIndex, tagItem, event=["", False, {}]):
@@ -1092,7 +1093,7 @@
if itemID in ChConfig.Def_TransformItemIDList:
# 直接转化为对应货币的物品仅在放入背包时直接转化,否则还是以真实物品的形式存在,但堆叠上限需要做特殊处理
if packIndex == IPY_GameWorld.rptItem:
- self.DoTransformItem(curPlayer, tagItem)
+ self.DoTransformItem(curPlayer, tagItem, event)
tagItem.Clear() # 需清除,不然会导致内存泄露
return True
defaultPile = True
@@ -1230,16 +1231,11 @@
curPlayer = self.__Player
srcScore = ItemCommon.GetEquipGearScore(curItem)
- legendAttrIDList, legendAttrValueList = legendAttrInfo
- curItem.ClearUserAttr(ShareDefine.Def_IudetLegendAttrID)
- curItem.ClearUserAttr(ShareDefine.Def_IudetLegendAttrValue)
- for i in xrange(len(legendAttrIDList)):
- curItem.AddUserAttr(ShareDefine.Def_IudetLegendAttrID, legendAttrIDList[i])
- curItem.AddUserAttr(ShareDefine.Def_IudetLegendAttrValue, legendAttrValueList[i])
+ SetEquipLegendAttr(curItem, legendAttrInfo)
ItemCommon.MakeEquipGS(curItem)
updScore = ItemCommon.GetEquipGearScore(curItem)
- GameWorld.DebugLog("传奇属性异常,重新刷新一次属性: packType=%s,itemID=%s,legendAttrIDList=%s,legendAttrValueList=%s,srcScore=%s,updScore=%s"
- % (packType, curItem.GetItemTypeID(), legendAttrIDList, legendAttrValueList, srcScore, updScore), curPlayer.GetPlayerID())
+ GameWorld.DebugLog("传奇属性异常,重新刷新一次属性: packType=%s,itemID=%s,srcScore=%s,updScore=%s"
+ % (packType, curItem.GetItemTypeID(), srcScore, updScore), curPlayer.GetPlayerID())
return
def CheckRolePackEquipAttr(self):
@@ -2189,19 +2185,29 @@
legendAttrIDCnt = curItem.GetUserAttrCount(ShareDefine.Def_IudetLegendAttrID)
legendAttrValueCnt = curItem.GetUserAttrCount(ShareDefine.Def_IudetLegendAttrValue)
if legendAttrIDCnt and legendAttrIDCnt == legendAttrValueCnt:
- attrIDList, attrValueList = [], []
- for legendIndex in xrange(legendAttrIDCnt):
- attrIDList.append(curItem.GetUserAttrByIndex(ShareDefine.Def_IudetLegendAttrID, legendIndex))
- attrValueList.append(curItem.GetUserAttrByIndex(ShareDefine.Def_IudetLegendAttrValue, legendIndex))
- #GameWorld.DebugLog("已经有传奇属性的拍品: %s, %s" % (attrIDList, attrValueList))
+ legendAttrInfo = GetEquipLegendAttrGroup(curItem)
+ #GameWorld.DebugLog("已经有传奇属性的拍品: %s" % str(legendAttrInfo))
else:
# 生成传奇属性
legendAttrInfo = GetAddEquipLegendAttr(curItem, curPlayer)
+ #GameWorld.DebugLog("重新生成传奇属性的拍品: %s" % str(legendAttrInfo))
if not legendAttrInfo:
return
- attrIDList, attrValueList = legendAttrInfo
- #GameWorld.DebugLog("重新生成传奇属性的拍品: %s, %s" % (attrIDList, attrValueList))
- updateDict = {ShareDefine.Def_IudetLegendAttrID:attrIDList, ShareDefine.Def_IudetLegendAttrValue:attrValueList}
+
+ updateDict = {}
+ if legendAttrInfo[0]:
+ updateDict[ShareDefine.Def_IudetLegendAttrID] = legendAttrInfo[0]
+ updateDict[ShareDefine.Def_IudetLegendAttrValue] = legendAttrInfo[1]
+ if legendAttrInfo[2]:
+ updateDict[ShareDefine.Def_IudetLegendAttrIDShen] = legendAttrInfo[2]
+ updateDict[ShareDefine.Def_IudetLegendAttrValueShen] = legendAttrInfo[3]
+ if legendAttrInfo[4]:
+ updateDict[ShareDefine.Def_IudetLegendAttrIDXian] = legendAttrInfo[4]
+ updateDict[ShareDefine.Def_IudetLegendAttrValueXian] = legendAttrInfo[5]
+ if legendAttrInfo[6]:
+ updateDict[ShareDefine.Def_IudetLegendAttrIDJi] = legendAttrInfo[6]
+ updateDict[ShareDefine.Def_IudetLegendAttrValueJi] = legendAttrInfo[7]
+
delKeyList = [ShareDefine.Def_IudetAuctionItemCreateTime]
ItemCommon.UpdateItemUserData(curItem, updateDict, delKeyList, isUpdateGS=True)
@@ -2318,6 +2324,12 @@
if legendAttrInfo:
tmpEquipData.legendAttrIDList = legendAttrInfo[0]
tmpEquipData.legendAttrValueList = legendAttrInfo[1]
+ tmpEquipData.legendAttrIDListShen = legendAttrInfo[2]
+ tmpEquipData.legendAttrValueListShen = legendAttrInfo[3]
+ tmpEquipData.legendAttrIDListXian = legendAttrInfo[4]
+ tmpEquipData.legendAttrValueListXian = legendAttrInfo[5]
+ tmpEquipData.legendAttrIDListJi = legendAttrInfo[6]
+ tmpEquipData.legendAttrValueListJi = legendAttrInfo[7]
# 其他装备属性
ChItem.EquipAddAdditionEx(curItem, tmpEquipData)
@@ -2325,7 +2337,7 @@
def GetAddEquipLegendAttr(curItem, curPlayer, isAllAttr=False):
'''获取生成到装备上的传奇属性
- @return: None 或者 [[传奇属性效果ID列表], [属性值列表]]
+ @return: None 或者 [传奇属性效果ID列表], [属性值列表], [神ID], [神值], [仙ID], [仙值], [极ID], [极值]
'''
# if GetIsAuctionItem(curItem):
# #GameWorld.DebugLog("拍品无法生成传奇属性!")
@@ -2335,6 +2347,14 @@
itemColor = curItem.GetItemColor()
itemQuality = curItem.GetItemQuality()
isSuit = 1 if curItem.GetSuiteID() else 0
+
+ ipyData = IpyGameDataPY.GetIpyGameDataNotLog("EquipShenAttr", itemID)
+ if ipyData:
+ return ipyData.GetLegendAttrIDList(), ipyData.GetLegendAttrValueList(), \
+ ipyData.GetShenAttrIDList(), ipyData.GetShenAttrValueList(), \
+ ipyData.GetXianAttrIDList(), ipyData.GetXianAttrValueList(), \
+ ipyData.GetJiAttrIDList(), ipyData.GetJiAttrValueList()
+
# 1. 定条数
attrCountIpyData = IpyGameDataPY.GetIpyGameDataNotLog("EquipLegendAttrCount", itemType, itemColor, isSuit, itemQuality)
if not attrCountIpyData:
@@ -2421,8 +2441,91 @@
curLegAttrValueList.append(attrValue)
#GameWorld.DebugLog(" 随机属性: attrID=%s,attrValue=%s,playerLV=%s,curLibNum=%s,valueList=%s"
# % (attrID, attrValue, playerLV, curLibNum, valueList), playerID)
- return [curLegAttrIDList, curLegAttrValueList]
+ return curLegAttrIDList, curLegAttrValueList, [], [], [], [], [], []
+def GetEquipLegendAttrAll(curItem):
+ ## 获取装备传奇属性 - 所有分组合并返回
+ legendAttrInfo = GetEquipLegendAttrGroup(curItem)
+ legAttrIDList = legendAttrInfo[0] + legendAttrInfo[2] + legendAttrInfo[4] + legendAttrInfo[6]
+ legAttrValueList = legendAttrInfo[1] + legendAttrInfo[3] + legendAttrInfo[5] + legendAttrInfo[7]
+ return legAttrIDList, legAttrValueList
+
+def GetEquipLegendAttrGroup(curItem):
+ ## 获取装备传奇属性 - 按类型分组返回
+
+ legAttrIDList, legAttrValueList = [], []
+ legendAttrIDCnt = curItem.GetUserAttrCount(ShareDefine.Def_IudetLegendAttrID)
+ legendAttrValueCnt = curItem.GetUserAttrCount(ShareDefine.Def_IudetLegendAttrValue)
+ if legendAttrIDCnt == legendAttrValueCnt:
+ for i in xrange(legendAttrIDCnt):
+ legAttrIDList.append(curItem.GetUserAttrByIndex(ShareDefine.Def_IudetLegendAttrID, i))
+ legAttrValueList.append(curItem.GetUserAttrByIndex(ShareDefine.Def_IudetLegendAttrValue, i))
+
+ shenAttrIDList, shenAttrValueList = [], []
+ shenAttrIDCnt = curItem.GetUserAttrCount(ShareDefine.Def_IudetLegendAttrIDShen)
+ shenAttrValueCnt = curItem.GetUserAttrCount(ShareDefine.Def_IudetLegendAttrValueShen)
+ if shenAttrIDCnt == shenAttrValueCnt:
+ for i in xrange(shenAttrIDCnt):
+ shenAttrIDList.append(curItem.GetUserAttrByIndex(ShareDefine.Def_IudetLegendAttrIDShen, i))
+ shenAttrValueList.append(curItem.GetUserAttrByIndex(ShareDefine.Def_IudetLegendAttrValueShen, i))
+
+ xianAttrIDList, xianAttrValueList = [], []
+ xianAttrIDCnt = curItem.GetUserAttrCount(ShareDefine.Def_IudetLegendAttrIDXian)
+ xianAttrValueCnt = curItem.GetUserAttrCount(ShareDefine.Def_IudetLegendAttrValueXian)
+ if xianAttrIDCnt == xianAttrValueCnt:
+ for i in xrange(xianAttrIDCnt):
+ xianAttrIDList.append(curItem.GetUserAttrByIndex(ShareDefine.Def_IudetLegendAttrIDXian, i))
+ xianAttrValueList.append(curItem.GetUserAttrByIndex(ShareDefine.Def_IudetLegendAttrValueXian, i))
+
+ jiAttrIDList, jiAttrValueList = [], []
+ jiAttrIDCnt = curItem.GetUserAttrCount(ShareDefine.Def_IudetLegendAttrIDJi)
+ jiAttrValueCnt = curItem.GetUserAttrCount(ShareDefine.Def_IudetLegendAttrValueJi)
+ if jiAttrIDCnt == jiAttrValueCnt:
+ for i in xrange(jiAttrIDCnt):
+ jiAttrIDList.append(curItem.GetUserAttrByIndex(ShareDefine.Def_IudetLegendAttrIDJi, i))
+ jiAttrValueList.append(curItem.GetUserAttrByIndex(ShareDefine.Def_IudetLegendAttrValueJi, i))
+
+ return legAttrIDList, legAttrValueList, shenAttrIDList, shenAttrValueList, xianAttrIDList, xianAttrValueList, jiAttrIDList, jiAttrValueList
+
+def SetEquipLegendAttr(curItem, legendAttrInfo):
+ ## 设置装备传奇属性
+
+ legAttrIDList, legAttrValueList, shenAttrIDList, shenAttrValueList, \
+ xianAttrIDList, xianAttrValueList, jiAttrIDList, jiAttrValueList = legendAttrInfo
+
+ # 普通传奇属性
+ if legAttrIDList and legAttrValueList and len(legAttrIDList) == len(legAttrValueList):
+ curItem.ClearUserAttr(ShareDefine.Def_IudetLegendAttrID)
+ curItem.ClearUserAttr(ShareDefine.Def_IudetLegendAttrValue)
+ for i in xrange(len(legAttrIDList)):
+ curItem.AddUserAttr(ShareDefine.Def_IudetLegendAttrID, legAttrIDList[i])
+ curItem.AddUserAttr(ShareDefine.Def_IudetLegendAttrValue, legAttrValueList[i])
+
+ # 神 传奇属性
+ if shenAttrIDList and shenAttrValueList and len(shenAttrIDList) == len(shenAttrValueList):
+ curItem.ClearUserAttr(ShareDefine.Def_IudetLegendAttrIDShen)
+ curItem.ClearUserAttr(ShareDefine.Def_IudetLegendAttrValueShen)
+ for i in xrange(len(shenAttrIDList)):
+ curItem.AddUserAttr(ShareDefine.Def_IudetLegendAttrIDShen, shenAttrIDList[i])
+ curItem.AddUserAttr(ShareDefine.Def_IudetLegendAttrValueShen, shenAttrValueList[i])
+
+ # 仙 传奇属性
+ if xianAttrIDList and xianAttrValueList and len(xianAttrIDList) == len(xianAttrValueList):
+ curItem.ClearUserAttr(ShareDefine.Def_IudetLegendAttrIDXian)
+ curItem.ClearUserAttr(ShareDefine.Def_IudetLegendAttrValueXian)
+ for i in xrange(len(xianAttrIDList)):
+ curItem.AddUserAttr(ShareDefine.Def_IudetLegendAttrIDXian, xianAttrIDList[i])
+ curItem.AddUserAttr(ShareDefine.Def_IudetLegendAttrValueXian, xianAttrValueList[i])
+
+ # 极 传奇属性
+ if jiAttrIDList and jiAttrValueList and len(jiAttrIDList) == len(jiAttrValueList):
+ curItem.ClearUserAttr(ShareDefine.Def_IudetLegendAttrIDJi)
+ curItem.ClearUserAttr(ShareDefine.Def_IudetLegendAttrValueJi)
+ for i in xrange(len(jiAttrIDList)):
+ curItem.AddUserAttr(ShareDefine.Def_IudetLegendAttrIDJi, jiAttrIDList[i])
+ curItem.AddUserAttr(ShareDefine.Def_IudetLegendAttrValueJi, jiAttrValueList[i])
+
+ return
##创建物品所需的动态数据
#
@@ -2443,6 +2546,12 @@
self.source = ShareDefine.Item_Source_Unkown #物品来源
self.legendAttrIDList = [] # 传奇属性ID
self.legendAttrValueList = [] # 传奇属性值
+ self.legendAttrIDListShen = [] # 传奇属性ID - 神
+ self.legendAttrValueListShen = [] # 传奇属性值 - 神
+ self.legendAttrIDListXian = [] # 传奇属性ID - 仙
+ self.legendAttrValueListXian = [] # 传奇属性值 - 仙
+ self.legendAttrIDListJi = [] # 传奇属性ID - 极
+ self.legendAttrValueListJi = [] # 传奇属性值 - 极
return
def ClearPack(curPlayer, packType):
--
Gitblit v1.8.0