6647 【2.0】【开发】查看聊天信息、广播信息和掉落记录里的装备需求(增加查询广播装备详细信息支持)
8个文件已修改
1个文件已添加
651 ■■■■■ 已修改文件
ServerPython/CoreServerGroup/GameServer/PyNetPack.ini 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py 184 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldItem.py 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerQuery.py 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py 184 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_EquipPlus.py 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/ItemCommon.py 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/PyNetPack.ini
@@ -330,6 +330,17 @@
PacketSubCMD_4=0x04
PacketCallFunc_4=OnQueryBossInfo
[GameWorldItem]
ScriptName = GameWorldLogic\GameWorldItem.py
Writer = hxp
Releaser = hxp
RegType = 0
RegisterPackCount = 1
PacketCMD_1=0xA9
PacketSubCMD_1=0x05
PacketCallFunc_1=OnQueryNotifyEquipDetailInfo
[CrossRealmPK]
ScriptName = GameWorldLogic\CrossRealmPK.py
Writer = hxp
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
@@ -1363,6 +1363,63 @@
#------------------------------------------------------
# A9 05 查询广播装备详细信息 #tagCGQueryNotifyEquipDetailInfo
class  tagCGQueryNotifyEquipDetailInfo(Structure):
    Head = tagHead()
    ItemGUID = ""    #(char ItemGUID[40])
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xA9
        self.Head.SubCmd = 0x05
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.ItemGUID,_pos = CommFunc.ReadString(_lpData, _pos,40)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xA9
        self.Head.SubCmd = 0x05
        self.ItemGUID = ""
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 40
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteString(data, 40, self.ItemGUID)
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                ItemGUID:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.ItemGUID
                                )
        return DumpString
m_NAtagCGQueryNotifyEquipDetailInfo=tagCGQueryNotifyEquipDetailInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGQueryNotifyEquipDetailInfo.Head.Cmd,m_NAtagCGQueryNotifyEquipDetailInfo.Head.SubCmd))] = m_NAtagCGQueryNotifyEquipDetailInfo
#------------------------------------------------------
# A9 A3 查看推荐好友 #tagCGQueryRecommendFriends
class  tagCGQueryRecommendFriends(Structure):
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
@@ -3371,6 +3371,190 @@
#------------------------------------------------------
# A9 05 通知广播装备详细信息 #tagGCNotifyEquipDetailInfo
class  tagGCNotifyEquipClassEquip(Structure):
    _pack_ = 1
    _fields_ = [
                  ("ItemID", c_int),
                  ("Star", c_ubyte),
                  ]
    def __init__(self):
        self.Clear()
        return
    def ReadData(self, stringData, _pos=0, _len=0):
        self.Clear()
        memmove(addressof(self), stringData[_pos:], self.GetLength())
        return _pos + self.GetLength()
    def Clear(self):
        self.ItemID = 0
        self.Star = 0
        return
    def GetLength(self):
        return sizeof(tagGCNotifyEquipClassEquip)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// A9 05 通知广播装备详细信息 //tagGCNotifyEquipDetailInfo:
                                ItemID:%d,
                                Star:%d
                                '''\
                                %(
                                self.ItemID,
                                self.Star
                                )
        return DumpString
class  tagGCNotifyEquipDetailInfo(Structure):
    Head = tagHead()
    ItemGUID = ""    #(char ItemGUID[40])
    ItemID = 0    #(DWORD ItemID)
    Star = 0    #(BYTE Star)//星级
    PlusLV = 0    #(WORD PlusLV)//强化等级
    EvolveLV = 0    #(BYTE EvolveLV)//进化等级
    WashLV = 0    #(BYTE WashLV)//洗练等级
    WashValueCount = 0    #(BYTE WashValueCount)
    WashValueList = list()    #(vector<WORD> WashValueList)//洗练值
    StoneIDCount = 0    #(BYTE StoneIDCount)
    StoneIDList = list()    #(vector<DWORD> StoneIDList)//宝石
    ClassEquipCount = 0    #(BYTE ClassEquipCount)
    ClassEquipList = list()    #(vector<tagGCNotifyEquipClassEquip> ClassEquipList)//本境界穿戴的装备
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xA9
        self.Head.SubCmd = 0x05
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.ItemGUID,_pos = CommFunc.ReadString(_lpData, _pos,40)
        self.ItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.Star,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.PlusLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.EvolveLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.WashLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.WashValueCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.WashValueCount):
            value,_pos=CommFunc.ReadWORD(_lpData,_pos)
            self.WashValueList.append(value)
        self.StoneIDCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.StoneIDCount):
            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
            self.StoneIDList.append(value)
        self.ClassEquipCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.ClassEquipCount):
            temClassEquipList = tagGCNotifyEquipClassEquip()
            _pos = temClassEquipList.ReadData(_lpData, _pos)
            self.ClassEquipList.append(temClassEquipList)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xA9
        self.Head.SubCmd = 0x05
        self.ItemGUID = ""
        self.ItemID = 0
        self.Star = 0
        self.PlusLV = 0
        self.EvolveLV = 0
        self.WashLV = 0
        self.WashValueCount = 0
        self.WashValueList = list()
        self.StoneIDCount = 0
        self.StoneIDList = list()
        self.ClassEquipCount = 0
        self.ClassEquipList = list()
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 40
        length += 4
        length += 1
        length += 2
        length += 1
        length += 1
        length += 1
        length += 2 * self.WashValueCount
        length += 1
        length += 4 * self.StoneIDCount
        length += 1
        for i in range(self.ClassEquipCount):
            length += self.ClassEquipList[i].GetLength()
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteString(data, 40, self.ItemGUID)
        data = CommFunc.WriteDWORD(data, self.ItemID)
        data = CommFunc.WriteBYTE(data, self.Star)
        data = CommFunc.WriteWORD(data, self.PlusLV)
        data = CommFunc.WriteBYTE(data, self.EvolveLV)
        data = CommFunc.WriteBYTE(data, self.WashLV)
        data = CommFunc.WriteBYTE(data, self.WashValueCount)
        for i in range(self.WashValueCount):
            data = CommFunc.WriteWORD(data, self.WashValueList[i])
        data = CommFunc.WriteBYTE(data, self.StoneIDCount)
        for i in range(self.StoneIDCount):
            data = CommFunc.WriteDWORD(data, self.StoneIDList[i])
        data = CommFunc.WriteBYTE(data, self.ClassEquipCount)
        for i in range(self.ClassEquipCount):
            data = CommFunc.WriteString(data, self.ClassEquipList[i].GetLength(), self.ClassEquipList[i].GetBuffer())
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                ItemGUID:%s,
                                ItemID:%d,
                                Star:%d,
                                PlusLV:%d,
                                EvolveLV:%d,
                                WashLV:%d,
                                WashValueCount:%d,
                                WashValueList:%s,
                                StoneIDCount:%d,
                                StoneIDList:%s,
                                ClassEquipCount:%d,
                                ClassEquipList:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.ItemGUID,
                                self.ItemID,
                                self.Star,
                                self.PlusLV,
                                self.EvolveLV,
                                self.WashLV,
                                self.WashValueCount,
                                "...",
                                self.StoneIDCount,
                                "...",
                                self.ClassEquipCount,
                                "..."
                                )
        return DumpString
m_NAtagGCNotifyEquipDetailInfo=tagGCNotifyEquipDetailInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCNotifyEquipDetailInfo.Head.Cmd,m_NAtagGCNotifyEquipDetailInfo.Head.SubCmd))] = m_NAtagGCNotifyEquipDetailInfo
#------------------------------------------------------
#A9 03 开服活动奖励数量刷新#tagGCOpenServerCampaignAwardCount
class  tagGCOpenServerCampaignAwardCount(Structure):
ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldItem.py
New file
@@ -0,0 +1,79 @@
#!/usr/bin/python
# -*- coding: GBK -*-
#-------------------------------------------------------------------------------
#
##@package GameWorldItem
#
# @todo:世界物品管理
# @author hxp
# @date 2019-05-11
# @version 1.0
#
# 详细描述: 世界物品管理
#
#-------------------------------------------------------------------------------
#"""Version = 2019-05-11 10:30"""
#-------------------------------------------------------------------------------
import GameWorld
import PlayerControl
import ChPyNetSendPack
import NetPackCommon
MaxCacheNotifyEquipCount = 100 # 最大缓存个数
g_notifyEquipDetailInfoCache = {} # 装备广播详细信息缓存
g_notifyEquipDetailGUIDList = []
def OnCacheNotifyEquipDetailInfo(cacheInfo, tick):
    ## 装备广播详细信息缓存
    global g_notifyEquipDetailGUIDList
    global g_notifyEquipDetailInfoCache
    guid = cacheInfo[0]
    if guid in g_notifyEquipDetailGUIDList:
        g_notifyEquipDetailGUIDList.remove(guid)
    g_notifyEquipDetailGUIDList.append(guid)
    g_notifyEquipDetailInfoCache[guid] = cacheInfo[1:]
    if len(g_notifyEquipDetailGUIDList) > MaxCacheNotifyEquipCount:
        removeGUID = g_notifyEquipDetailGUIDList[0]
        g_notifyEquipDetailGUIDList.remove(removeGUID)
        g_notifyEquipDetailInfoCache.pop(removeGUID, None)
    return
#// A9 05 查询广播装备详细信息 #tagCGQueryNotifyEquipDetailInfo
#
#struct    tagCGQueryNotifyEquipDetailInfo
#{
#    tagHead        Head;
#    char        ItemGUID[40];
#};
def OnQueryNotifyEquipDetailInfo(index, clientData, tick):
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
    guid = clientData.ItemGUID
    if guid not in g_notifyEquipDetailInfoCache:
        PlayerControl.NotifyCode(curPlayer, "CheckEquip")
        return
    itemID, equipStar, plusLV, plusEvolveLV, washLV, washValueList, stoneIDList, classItems = g_notifyEquipDetailInfoCache[guid]
    equipDetail = ChPyNetSendPack.tagGCNotifyEquipDetailInfo()
    equipDetail.ItemGUID = guid
    equipDetail.ItemID = itemID
    equipDetail.Star = equipStar
    equipDetail.PlusLV = plusLV
    equipDetail.EvolveLV = plusEvolveLV
    equipDetail.WashLV = washLV
    equipDetail.WashValueList = washValueList
    equipDetail.WashValueCount = len(equipDetail.WashValueList)
    equipDetail.StoneIDList = stoneIDList
    equipDetail.StoneIDCount = len(equipDetail.StoneIDList)
    for classItemID, classStar in classItems:
        classEquip = ChPyNetSendPack.tagGCNotifyEquipClassEquip()
        classEquip.ItemID = classItemID
        classEquip.Star = classStar
        equipDetail.ClassEquipList.append(classEquip)
    equipDetail.ClassEquipCount = len(equipDetail.ClassEquipList)
    NetPackCommon.SendFakePack(curPlayer, equipDetail)
    return
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerQuery.py
@@ -73,9 +73,11 @@
import NetPackCommon
import AuctionHouse
import PlayerFairyDomain
import GameWorldItem
import time
import datetime
import json
#---------------------------------------------------------------------
#全局变量
#---------------------------------------------------------------------
@@ -713,6 +715,11 @@
        GameWorldProcess.UpdGlobalKillCount(eval(resultName))
        return
    
    # 缓存装备广播信息中的装备明细信息
    if callName == "NotifyEquipDetailInfo":
        GameWorldItem.OnCacheNotifyEquipDetailInfo(json.loads(resultName), tick)
        return
    #生成仙盟红包
    if callName == "MapServer_CreatRedPacket":
        PlayerFamilyRedPacket.MapServer_CreatRedPacket(eval(resultName))
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
@@ -1363,6 +1363,63 @@
#------------------------------------------------------
# A9 05 查询广播装备详细信息 #tagCGQueryNotifyEquipDetailInfo
class  tagCGQueryNotifyEquipDetailInfo(Structure):
    Head = tagHead()
    ItemGUID = ""    #(char ItemGUID[40])
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xA9
        self.Head.SubCmd = 0x05
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.ItemGUID,_pos = CommFunc.ReadString(_lpData, _pos,40)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xA9
        self.Head.SubCmd = 0x05
        self.ItemGUID = ""
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 40
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteString(data, 40, self.ItemGUID)
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                ItemGUID:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.ItemGUID
                                )
        return DumpString
m_NAtagCGQueryNotifyEquipDetailInfo=tagCGQueryNotifyEquipDetailInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGQueryNotifyEquipDetailInfo.Head.Cmd,m_NAtagCGQueryNotifyEquipDetailInfo.Head.SubCmd))] = m_NAtagCGQueryNotifyEquipDetailInfo
#------------------------------------------------------
# A9 A3 查看推荐好友 #tagCGQueryRecommendFriends
class  tagCGQueryRecommendFriends(Structure):
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -3371,6 +3371,190 @@
#------------------------------------------------------
# A9 05 通知广播装备详细信息 #tagGCNotifyEquipDetailInfo
class  tagGCNotifyEquipClassEquip(Structure):
    _pack_ = 1
    _fields_ = [
                  ("ItemID", c_int),
                  ("Star", c_ubyte),
                  ]
    def __init__(self):
        self.Clear()
        return
    def ReadData(self, stringData, _pos=0, _len=0):
        self.Clear()
        memmove(addressof(self), stringData[_pos:], self.GetLength())
        return _pos + self.GetLength()
    def Clear(self):
        self.ItemID = 0
        self.Star = 0
        return
    def GetLength(self):
        return sizeof(tagGCNotifyEquipClassEquip)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// A9 05 通知广播装备详细信息 //tagGCNotifyEquipDetailInfo:
                                ItemID:%d,
                                Star:%d
                                '''\
                                %(
                                self.ItemID,
                                self.Star
                                )
        return DumpString
class  tagGCNotifyEquipDetailInfo(Structure):
    Head = tagHead()
    ItemGUID = ""    #(char ItemGUID[40])
    ItemID = 0    #(DWORD ItemID)
    Star = 0    #(BYTE Star)//星级
    PlusLV = 0    #(WORD PlusLV)//强化等级
    EvolveLV = 0    #(BYTE EvolveLV)//进化等级
    WashLV = 0    #(BYTE WashLV)//洗练等级
    WashValueCount = 0    #(BYTE WashValueCount)
    WashValueList = list()    #(vector<WORD> WashValueList)//洗练值
    StoneIDCount = 0    #(BYTE StoneIDCount)
    StoneIDList = list()    #(vector<DWORD> StoneIDList)//宝石
    ClassEquipCount = 0    #(BYTE ClassEquipCount)
    ClassEquipList = list()    #(vector<tagGCNotifyEquipClassEquip> ClassEquipList)//本境界穿戴的装备
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xA9
        self.Head.SubCmd = 0x05
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.ItemGUID,_pos = CommFunc.ReadString(_lpData, _pos,40)
        self.ItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.Star,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.PlusLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.EvolveLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.WashLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.WashValueCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.WashValueCount):
            value,_pos=CommFunc.ReadWORD(_lpData,_pos)
            self.WashValueList.append(value)
        self.StoneIDCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.StoneIDCount):
            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
            self.StoneIDList.append(value)
        self.ClassEquipCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.ClassEquipCount):
            temClassEquipList = tagGCNotifyEquipClassEquip()
            _pos = temClassEquipList.ReadData(_lpData, _pos)
            self.ClassEquipList.append(temClassEquipList)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xA9
        self.Head.SubCmd = 0x05
        self.ItemGUID = ""
        self.ItemID = 0
        self.Star = 0
        self.PlusLV = 0
        self.EvolveLV = 0
        self.WashLV = 0
        self.WashValueCount = 0
        self.WashValueList = list()
        self.StoneIDCount = 0
        self.StoneIDList = list()
        self.ClassEquipCount = 0
        self.ClassEquipList = list()
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 40
        length += 4
        length += 1
        length += 2
        length += 1
        length += 1
        length += 1
        length += 2 * self.WashValueCount
        length += 1
        length += 4 * self.StoneIDCount
        length += 1
        for i in range(self.ClassEquipCount):
            length += self.ClassEquipList[i].GetLength()
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteString(data, 40, self.ItemGUID)
        data = CommFunc.WriteDWORD(data, self.ItemID)
        data = CommFunc.WriteBYTE(data, self.Star)
        data = CommFunc.WriteWORD(data, self.PlusLV)
        data = CommFunc.WriteBYTE(data, self.EvolveLV)
        data = CommFunc.WriteBYTE(data, self.WashLV)
        data = CommFunc.WriteBYTE(data, self.WashValueCount)
        for i in range(self.WashValueCount):
            data = CommFunc.WriteWORD(data, self.WashValueList[i])
        data = CommFunc.WriteBYTE(data, self.StoneIDCount)
        for i in range(self.StoneIDCount):
            data = CommFunc.WriteDWORD(data, self.StoneIDList[i])
        data = CommFunc.WriteBYTE(data, self.ClassEquipCount)
        for i in range(self.ClassEquipCount):
            data = CommFunc.WriteString(data, self.ClassEquipList[i].GetLength(), self.ClassEquipList[i].GetBuffer())
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                ItemGUID:%s,
                                ItemID:%d,
                                Star:%d,
                                PlusLV:%d,
                                EvolveLV:%d,
                                WashLV:%d,
                                WashValueCount:%d,
                                WashValueList:%s,
                                StoneIDCount:%d,
                                StoneIDList:%s,
                                ClassEquipCount:%d,
                                ClassEquipList:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.ItemGUID,
                                self.ItemID,
                                self.Star,
                                self.PlusLV,
                                self.EvolveLV,
                                self.WashLV,
                                self.WashValueCount,
                                "...",
                                self.StoneIDCount,
                                "...",
                                self.ClassEquipCount,
                                "..."
                                )
        return DumpString
m_NAtagGCNotifyEquipDetailInfo=tagGCNotifyEquipDetailInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCNotifyEquipDetailInfo.Head.Cmd,m_NAtagGCNotifyEquipDetailInfo.Head.SubCmd))] = m_NAtagGCNotifyEquipDetailInfo
#------------------------------------------------------
#A9 03 开服活动奖励数量刷新#tagGCOpenServerCampaignAwardCount
class  tagGCOpenServerCampaignAwardCount(Structure):
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_EquipPlus.py
@@ -164,8 +164,9 @@
    #GameWorld.DebugLog("PlusLVChange index=%s,updPlusLV=%s,broadCastLVList=%s" % (index, updPlusLV, broadCastLVList))
    if updPlusLV in broadCastLVList:
        itemID = curEquip.GetItemTypeID()
        superItemInfo = ItemCommon.GetNotifySuperItemInfo(curPlayer, curEquip, index)
        msgParamList = [curPlayer.GetPlayerName(), itemID, superItemInfo, updPlusLV]
        userData = curEquip.GetUserData()
        guid = ItemCommon.CacheNotifyEquipDetailInfo(curPlayer, curEquip)
        msgParamList = [curPlayer.GetPlayerName(), itemID, userData, guid, updPlusLV]
        PlayerControl.WorldNotify(0, "StrengthenCongratulation", msgParamList)
        
    # 成就
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/ItemCommon.py
@@ -709,56 +709,41 @@
def NotifyItemDropByKill(curPlayer, curItem, npcID, notifyMark='', mapID=0):
    return #吕超说此处屏蔽
def GetNotifySuperItemInfo(curPlayer, curEquip, place=None):
    '''装备提示超链接信息汇总
        <a><Word info=item id=%s0/>|showitem=%s0 itemPlus=%s0</a>
        {"ItemID":物品ID, "UserData":..., "Star":星级, "EvolveLV":进化等级,"PlusLV":强化等级,"Stone":[宝石ID,...], "Wash":{"LV":洗练等级,"Value":[洗练值, ...]}, "Equips":[itemID, itemID, ...]}
def CacheNotifyEquipDetailInfo(curPlayer, curEquip):
    ''' 缓存装备广播信息中的装备明细信息
            因为本版本需要的查看的内容相对较多,为了减少全服广播流量消耗,所以先进行缓存,玩家点击查看时再进行查询
    '''
    
    guid = curEquip.GetGUID()
    packType = curEquip.GetItemPlaceType()
    packIndex = curEquip.GetItemPlaceIndex()
    if packType != IPY_GameWorld.rptEquip:
        return "{}"
        return guid
    
    classLV = GetItemClassLV(curEquip)
    if not classLV:
        return "{}"
        return guid
    
    packType = IPY_GameWorld.rptEquip
    itemDict = {}
    itemDict["ItemID"] = curEquip.GetItemTypeID()
    userData = curEquip.GetUserData()
    if userData and userData != "{}":
        itemDict["UserData"] = userData
    #部位升星数据
    itemID = curEquip.GetItemTypeID()
    #部位星级
    equipStar = ChEquip.GetEquipPartStarByRank(curPlayer, packIndex, curEquip)
    if equipStar:
        itemDict["Star"] = equipStar
    #部位强化数据
    equipPartPlusLV = ChEquip.GetEquipPartPlusLVByRank(curPlayer, packType, packIndex, curEquip)
    equipPartPlusEvolveLV = ChEquip.GetEquipPartPlusEvolveLVByEquip(curPlayer, packType, packIndex, curEquip)
    if equipPartPlusLV:
        itemDict["PlusLV"] = equipPartPlusLV
    if equipPartPlusEvolveLV:
        itemDict["EvolveLV"] = equipPartPlusEvolveLV
    plusLV = ChEquip.GetEquipPartPlusLVByRank(curPlayer, packType, packIndex, curEquip)
    plusEvolveLV = ChEquip.GetEquipPartPlusEvolveLVByEquip(curPlayer, packType, packIndex, curEquip)
    #部位洗练数据
    washLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipWashLV % packIndex)
    washValueList = []
    for attrNum in xrange(1, Operate_EquipWash.Def_EquipWashMaxAttrCount + 1):
        value = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipWashValue % (packIndex, attrNum))
        washValueList.append(value)
        
    #部位宝石数据
    stoneIDList = Operate_EquipStone.GetEquipIndexStoneIDList(curPlayer, packIndex)
    if stoneIDList and stoneIDList.count(0) != len(stoneIDList):
        itemDict["Stone"] = stoneIDList
    #部位洗练数据
    washLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipWashLV % packIndex)
    valueList = []
    for attrNum in xrange(1, Operate_EquipWash.Def_EquipWashMaxAttrCount + 1):
        value = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipWashValue % (packIndex, attrNum))
        valueList.append(value)
    if valueList and valueList.count(0) != len(valueList):
        itemDict["Wash"] = {"LV":washLV, "Value":valueList}
    classItems = [] # 本阶已穿装备ID
    #本阶已穿装备ID [[itemID,star], ...]
    classItems = []
    ipyDataList = IpyGameDataPY.GetIpyGameDataByCondition('EquipPlaceIndexMap', {'ClassLV':classLV}, True)
    if ipyDataList:
        equipPack = curPlayer.GetItemManager().GetPack(packType)
@@ -770,11 +755,11 @@
            equipID = classEquip.GetItemTypeID()
            equipStar = ChEquip.GetEquipPartStarByRank(curPlayer, index, classEquip)
            classItems.append([equipID, equipStar])
    if classItems:
        itemDict["Equips"] = classItems
    return json.dumps(itemDict, ensure_ascii=False).replace(" ", "")
    cacheInfo = [guid, itemID, equipStar, plusLV, plusEvolveLV, washLV, washValueList, stoneIDList, classItems]
    cacheInfo = json.dumps(cacheInfo, ensure_ascii=False)
    GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(0, 0, 0, "NotifyEquipDetailInfo", cacheInfo, len(cacheInfo))
    return guid
## 使用物品的特殊提示
#  @param curPlayer 当前玩家