From 7b48b6e603e2eeeacdb737210d74212ed77f7943 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期六, 16 三月 2019 17:38:03 +0800
Subject: [PATCH] 6332 【后端】【2.0】主要是拍品相关规则调整及背包优化(使用拍品数据同步优化)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/ItemCommon.py |   38 ++++++++++++++++++++++++++++++++++++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChItem.py             |   15 ++++-----------
 2 files changed, 42 insertions(+), 11 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChItem.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChItem.py
index 4e52c5d..020bc8b 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChItem.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChItem.py
@@ -1547,9 +1547,8 @@
     ## 玩家使用拍品
     playerID = curPlayer.GetPlayerID()
     itemID = curItem.GetItemTypeID()
-        
+    
     curItem.SetIsBind(0) # 设置为非拍品
-    curItem.ClearUserAttr(ShareDefine.Def_IudetAuctionItemCreateTime)
     GameWorld.DebugLog("玩家使用拍品: itemID=%s" % (itemID), playerID)
     
     if ItemCommon.GetIsEquip(curItem):
@@ -1559,15 +1558,9 @@
             GameWorld.ErrLog("使用装备拍品没有传奇属性!itemID=%s" % (itemID), playerID)
             return
         attrIDList, attrValueList = legendAttrInfo
-        # 传奇属性
-        if attrIDList and attrValueList and len(attrIDList) == len(attrValueList):
-            curItem.ClearUserAttr(ShareDefine.Def_IudetLegendAttrID)
-            curItem.ClearUserAttr(ShareDefine.Def_IudetLegendAttrValue)
-            for i, attrID in enumerate(attrIDList):
-                value = attrValueList[i]
-                curItem.AddUserAttr(ShareDefine.Def_IudetLegendAttrID, attrID)
-                curItem.AddUserAttr(ShareDefine.Def_IudetLegendAttrValue, value)
-        ItemCommon.MakeEquipGS(curItem)
+        updateDict = {ShareDefine.Def_IudetLegendAttrID:attrIDList, ShareDefine.Def_IudetLegendAttrValue:attrValueList}
+        delKeyList = [ShareDefine.Def_IudetAuctionItemCreateTime]
+        ItemCommon.UpdateItemUserData(curItem, updateDict, delKeyList, isUpdateGS=True)
         
     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 dc5f9ab..c1057d7 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
@@ -389,6 +389,44 @@
     #这里返回的是SingleItem , 如果创建了,未使用,会找出C++内存泄露!!!
     return curSingleItem
 
+def UpdateItemUserData(curItem, updateDict={}, delKeyList=[], isUpdateGS=False):
+    ''' 更新物品UserData数据
+    @param curItem: IPY_SingleItem 或  IPY_RoleItem
+    @param updateDict: 需要更新的数据 {key:value, key:valueList, ...}
+    @param delKeyList: 需要删除的数据 key列表[key, ...]
+    @param isUpdateGS: 是否更新评分
+    @note: UserData格式举例 {'17':['65','7','52'],'50':['0'],'19':['420','380','50'],'50':['1552728662']}
+    '''
+    
+    isRoleItem = False
+    if not hasattr(curItem, "SetUserData"):
+        item = curItem.GetItem()
+        isRoleItem = True
+    else:
+        item = curItem
+    userData = item.GetUserData()
+    if not userData:
+        userDataDict = {}
+    else:
+        userDataDict = eval(userData)
+        
+    for delKey in delKeyList:
+        userDataDict.pop(str(delKey), None)
+        
+    for key, value in updateDict.items():
+        if type(value) == int:
+            valueList = ['%s' % value]
+        elif type(value) == list:
+            valueList = ['%s' % v for v in value]
+        userDataDict['%s' % key] = valueList
+        
+    UserData = str(userDataDict).replace(" ", "")
+    item.SetUserData(UserData, len(UserData))
+    if isUpdateGS:
+        MakeEquipGS(curItem)
+    elif isRoleItem:
+        curItem.SetIsBind(curItem.GetIsBind()) # 为了触发物品同步
+    return
 
 def MakeEquipGS(curItem):
     if not CheckNoteEquipGS(curItem):

--
Gitblit v1.8.0