9790 9762 【BT9】【后端】藏宝阁修改(增加领取物品奖励特殊效果)

# Conflicts:
# ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
# ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py
# ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
# ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActivity.py
# ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerArena.py
8个文件已修改
387 ■■■■■ 已修改文件
PySysDB/PySysDBPY.h 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py 112 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py 112 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Gubao.py 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_SealDemon.py 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCrossRealmPK.py 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGubao.py 126 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PySysDB/PySysDBPY.h
@@ -471,6 +471,7 @@
    list        EffFuncAttrIDList;    //提升指定功能属性ID列表
    DWORD        EffAttrID;    //直接增加属性类型
    DWORD        EffAttrValue;    //提升属性值
    list        EffItemAwardList;    //领取物品列表
};
//古宝品质升级表
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
@@ -20857,6 +20857,118 @@
#------------------------------------------------------
# A3 CA 古宝物品特殊效果信息 #tagMCGubaoItemEffInfo
class  tagMCGubaoItemEff(Structure):
    _pack_ = 1
    _fields_ = [
                  ("GubaoID", c_ushort),
                  ("EffType", c_ubyte),    # 不同古宝ID允许拥有相同效果类型,进度值每个古宝ID单独统计
                  ("EffValue", c_int),    # 该效果目前累加值
                  ]
    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.GubaoID = 0
        self.EffType = 0
        self.EffValue = 0
        return
    def GetLength(self):
        return sizeof(tagMCGubaoItemEff)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// A3 CA 古宝物品特殊效果信息 //tagMCGubaoItemEffInfo:
                                GubaoID:%d,
                                EffType:%d,
                                EffValue:%d
                                '''\
                                %(
                                self.GubaoID,
                                self.EffType,
                                self.EffValue
                                )
        return DumpString
class  tagMCGubaoItemEffInfo(Structure):
    Head = tagHead()
    Count = 0    #(WORD Count)
    ItemEffInfoList = list()    #(vector<tagMCGubaoItemEff> ItemEffInfoList)
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xA3
        self.Head.SubCmd = 0xCA
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos)
        for i in range(self.Count):
            temItemEffInfoList = tagMCGubaoItemEff()
            _pos = temItemEffInfoList.ReadData(_lpData, _pos)
            self.ItemEffInfoList.append(temItemEffInfoList)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xA3
        self.Head.SubCmd = 0xCA
        self.Count = 0
        self.ItemEffInfoList = list()
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 2
        for i in range(self.Count):
            length += self.ItemEffInfoList[i].GetLength()
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteWORD(data, self.Count)
        for i in range(self.Count):
            data = CommFunc.WriteString(data, self.ItemEffInfoList[i].GetLength(), self.ItemEffInfoList[i].GetBuffer())
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                Count:%d,
                                ItemEffInfoList:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.Count,
                                "..."
                                )
        return DumpString
m_NAtagMCGubaoItemEffInfo=tagMCGubaoItemEffInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCGubaoItemEffInfo.Head.Cmd,m_NAtagMCGubaoItemEffInfo.Head.SubCmd))] = m_NAtagMCGubaoItemEffInfo
#------------------------------------------------------
# A3 28 历史累积充值奖励领取记录 #tagMCHistoryReChargeAwardRecord
class  tagMCHistoryReChargeAwardRecord(Structure):
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -20857,6 +20857,118 @@
#------------------------------------------------------
# A3 CA 古宝物品特殊效果信息 #tagMCGubaoItemEffInfo
class  tagMCGubaoItemEff(Structure):
    _pack_ = 1
    _fields_ = [
                  ("GubaoID", c_ushort),
                  ("EffType", c_ubyte),    # 不同古宝ID允许拥有相同效果类型,进度值每个古宝ID单独统计
                  ("EffValue", c_int),    # 该效果目前累加值
                  ]
    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.GubaoID = 0
        self.EffType = 0
        self.EffValue = 0
        return
    def GetLength(self):
        return sizeof(tagMCGubaoItemEff)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// A3 CA 古宝物品特殊效果信息 //tagMCGubaoItemEffInfo:
                                GubaoID:%d,
                                EffType:%d,
                                EffValue:%d
                                '''\
                                %(
                                self.GubaoID,
                                self.EffType,
                                self.EffValue
                                )
        return DumpString
class  tagMCGubaoItemEffInfo(Structure):
    Head = tagHead()
    Count = 0    #(WORD Count)
    ItemEffInfoList = list()    #(vector<tagMCGubaoItemEff> ItemEffInfoList)
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xA3
        self.Head.SubCmd = 0xCA
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos)
        for i in range(self.Count):
            temItemEffInfoList = tagMCGubaoItemEff()
            _pos = temItemEffInfoList.ReadData(_lpData, _pos)
            self.ItemEffInfoList.append(temItemEffInfoList)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xA3
        self.Head.SubCmd = 0xCA
        self.Count = 0
        self.ItemEffInfoList = list()
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 2
        for i in range(self.Count):
            length += self.ItemEffInfoList[i].GetLength()
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteWORD(data, self.Count)
        for i in range(self.Count):
            data = CommFunc.WriteString(data, self.ItemEffInfoList[i].GetLength(), self.ItemEffInfoList[i].GetBuffer())
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                Count:%d,
                                ItemEffInfoList:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.Count,
                                "..."
                                )
        return DumpString
m_NAtagMCGubaoItemEffInfo=tagMCGubaoItemEffInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCGubaoItemEffInfo.Head.Cmd,m_NAtagMCGubaoItemEffInfo.Head.SubCmd))] = m_NAtagMCGubaoItemEffInfo
#------------------------------------------------------
# A3 28 历史累积充值奖励领取记录 #tagMCHistoryReChargeAwardRecord
class  tagMCHistoryReChargeAwardRecord(Structure):
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Gubao.py
@@ -18,6 +18,8 @@
import GameWorld
import IpyGameDataPY
import PlayerGubao
import PlayerControl
import ChConfig
#---------------------------------------------------------------------
#逻辑实现
@@ -32,10 +34,11 @@
    if not msgList:
        GameWorld.DebugAnswer(curPlayer, "重置古宝: Gubao 0")
        GameWorld.DebugAnswer(curPlayer, "设置古宝: Gubao 古宝ID 等级 星级")
        GameWorld.DebugAnswer(curPlayer, "设置效果: Gubao e 古宝ID 效果类型  进度值")
        return
    
    gubaoIDList = []
    value1 = msgList[0]
    if len(msgList) == 1:
        if msgList[0] == 0:
            ipyDataMgr = IpyGameDataPY.IPY_Data()
@@ -47,6 +50,10 @@
                    continue
                gubaoIDList.append(gubaoID)
                PlayerGubao.SetGubaoLVInfo(curPlayer, gubaoID, 0, 0)
                for effType in PlayerGubao.GubaoEffTtemIypeList:
                    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GubaoItemEffValue % (gubaoID, effType), 0)
            PlayerGubao.Sync_GubaoItemEffInfo(curPlayer, force=True)
            GameWorld.DebugAnswer(curPlayer, "重置古宝OK")
            
    elif len(msgList) == 3:
@@ -67,6 +74,20 @@
        GameWorld.DebugAnswer(curPlayer, "设置古宝:%s,等级(%s),星(%s)" % (gubaoID, lv, star))
        PlayerGubao.SetGubaoLVInfo(curPlayer, gubaoID, lv, star)
        gubaoIDList.append(gubaoID)
    elif value1 == "e":
        if len(msgList) != 4:
            return
        _, gubaoID, effType, effValue = msgList
        if effType not in PlayerGubao.GubaoEffTtemIypeList:
            GameWorld.DebugAnswer(curPlayer, "古宝物品效果类型仅包含:%s" % str(PlayerGubao.GubaoEffTtemIypeList))
            return
        ipyData = IpyGameDataPY.GetIpyGameData("Gubao", gubaoID)
        if not ipyData:
            GameWorld.DebugAnswer(curPlayer, "不存在该古宝!gubaoID=%s" % gubaoID)
            return
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GubaoItemEffValue % (gubaoID, effType), effValue)
        PlayerGubao.Sync_GubaoItemEffInfo(curPlayer, gubaoID, effType, True)
        GameWorld.DebugAnswer(curPlayer, "设置古宝:%s,效果类型(%s),值(%s)" % (gubaoID, effType, effValue))
    else:
        return
    
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_SealDemon.py
@@ -41,6 +41,7 @@
import GameWorldProcess
import PetControl
import AttackCommon
import PlayerGubao
#当前副本地图的状态
(
@@ -307,7 +308,8 @@
    if rank == 1:
        PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_FMTFirst, addCnt)
    PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_SealDemon, addCnt)
    PlayerGubao.AddGubaoItemEffValue(curPlayer, PlayerGubao.GubaoEffType_KillSealDemonBoss, addCnt)
    #击杀特定NPC成就
    PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_KillSpecificNPC, addCnt, [bossID])
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -387,6 +387,7 @@
                        ("list", "EffFuncAttrIDList", 0),
                        ("DWORD", "EffAttrID", 0),
                        ("DWORD", "EffAttrValue", 0),
                        ("list", "EffItemAwardList", 0),
                        ),
                "GubaoLV":(
@@ -2831,7 +2832,8 @@
        self.IsPer = 0
        self.EffFuncAttrIDList = []
        self.EffAttrID = 0
        self.EffAttrValue = 0
        self.EffAttrValue = 0
        self.EffItemAwardList = []
        return
        
    def GetGubaoEffID(self): return self.GubaoEffID # 古宝特殊效果ID
@@ -2842,7 +2844,8 @@
    def GetIsPer(self): return self.IsPer # 是否百分比提升
    def GetEffFuncAttrIDList(self): return self.EffFuncAttrIDList # 提升指定功能属性ID列表
    def GetEffAttrID(self): return self.EffAttrID # 直接增加属性类型
    def GetEffAttrValue(self): return self.EffAttrValue # 提升属性值
    def GetEffAttrValue(self): return self.EffAttrValue # 提升属性值
    def GetEffItemAwardList(self): return self.EffItemAwardList # 领取物品列表
# 古宝品质升级表
class IPY_GubaoLV():
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCrossRealmPK.py
@@ -34,6 +34,7 @@
import GameWorld
import ChConfig
import GameObj
import PlayerGubao
## 是否匹配中
def SetIsCrossPKMatching(curPlayer, isMatching):
@@ -366,6 +367,7 @@
        PlayerActivity.AddDailyActionFinishCnt(curPlayer, ShareDefine.DailyActionID_CrossReamPK)
        PlayerWeekParty.AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_CrossPK, 1)
        PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_FeastRedPack_CrossPK, 1)
        PlayerGubao.AddGubaoItemEffValue(curPlayer, PlayerGubao.GubaoEffType_CrossRealmPK, 1)
        PlayerActGarbageSorting.AddActGarbageTaskProgress(curPlayer, ChConfig.Def_GarbageTask_CrossPK)
        PlayerTongTianLing.AddTongTianTaskValue(curPlayer, ChConfig.TTLTaskType_CrossPK, 1)
    else:
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGubao.py
@@ -28,6 +28,22 @@
import PlayerDogz
import PlayerPet
import ChConfig
import ItemControler
GubaoEffType_ActivityPlace = 33 # 活跃修炼x次可领取物品    x次
GubaoEffType_Arena = 34 # 竞技场挑战x次可领取物品    x次
GubaoEffType_KillWorldBoss = 35 # 击杀世界bossx次可领取物品    x次
GubaoEffType_KillBossHome = 36 # 击杀boss之家bossx次可领取物品    x次
GubaoEffType_KillCrossPenglaiBoss = 37 # 击杀蓬莱仙境bossx次可领取物品    x次
GubaoEffType_KillCrossDemonLandBoss = 38 # 击杀魔化之地bossx次可领取物品    x次
GubaoEffType_KillSealDemonBoss = 39 # 击杀封魔坛bossx次可领取物品    x次
GubaoEffType_CrossRealmPK = 40 # 参与跨服天梯赛x次可领取物品    x次
# 古宝领取物品特殊效果列表
GubaoEffTtemIypeList = [GubaoEffType_ActivityPlace, GubaoEffType_Arena, GubaoEffType_KillWorldBoss, GubaoEffType_KillBossHome,
                        GubaoEffType_KillCrossPenglaiBoss, GubaoEffType_KillCrossDemonLandBoss, GubaoEffType_KillSealDemonBoss,
                        GubaoEffType_CrossRealmPK,
                        ]
def GetGubaoLVInfo(curPlayer, gubaoID):
    lvInfo = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GubaoLVInfo % gubaoID)
@@ -40,6 +56,7 @@
def OnPlayerLogin(curPlayer):
    Sync_GubaoInfo(curPlayer)
    Sync_GubaoItemEffInfo(curPlayer)
    return
#// B2 16 古宝激活 #tagCMGubaoActivate
@@ -482,6 +499,80 @@
            effAttrInfo[attrID] = effAttrInfo.get(attrID, 0) + addAttrValue
    return
def AddGubaoItemEffValue(curPlayer, effType, addCnt):
    if effType not in GubaoEffTtemIypeList:
        return
    ipyDataMgr = IpyGameDataPY.IPY_Data()
    for index in xrange(ipyDataMgr.GetGubaoCount()):
        ipyData = ipyDataMgr.GetGubaoByIndex(index)
        gubaoID = ipyData.GetGubaoID()
        _, star = GetGubaoLVInfo(curPlayer, gubaoID)
        if not star:
            continue
        starIpyData = IpyGameDataPY.GetIpyGameData("GubaoStar", gubaoID, star)
        if not starIpyData:
            continue
        starEffIDList = starIpyData.GetStarEffIDList()
        for effID in starEffIDList:
            effIpyData = IpyGameDataPY.GetIpyGameData("GubaoEffAttr", effID)
            if not effIpyData:
                continue
            if effType != effIpyData.GetGubaoEffType():
                continue
            effValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GubaoItemEffValue % (gubaoID, effType))
            updValue = min(effValue + addCnt, ChConfig.Def_UpperLimit_DWord)
            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GubaoItemEffValue % (gubaoID, effType), updValue)
            GameWorld.DebugLog("更新古宝物品效果类型进度值: gubaoID=%s,effID=%s,effType=%s,effValue=%s,addCnt=%s,updValue=%s"
                               % (gubaoID, effID, effType, effValue, addCnt, updValue), curPlayer.GetPlayerID())
            Sync_GubaoItemEffInfo(curPlayer, gubaoID, effType, True)
    return
def GetGubaoItemEffAward(curPlayer, gubaoID, effIDStr):
    _, star = GetGubaoLVInfo(curPlayer, gubaoID)
    if not star:
        #GameWorld.DebugLog("古宝物品效果领奖! 没有星级! gubaoID=%s" % (gubaoID), curPlayer.GetPlayerID())
        return
    starIpyData = IpyGameDataPY.GetIpyGameData("GubaoStar", gubaoID, star)
    if not starIpyData:
        return
    starEffIDList = starIpyData.GetStarEffIDList()
    effID = GameWorld.ToIntDef(effIDStr)
    if not effID or effID not in starEffIDList:
        GameWorld.DebugLog("古宝物品效果领奖! 该星级不存在该效果ID! gubaoID=%s,star=%s,effID=%s"
                           % (gubaoID, star, effID), curPlayer.GetPlayerID())
        return
    effIpyData = IpyGameDataPY.GetIpyGameData("GubaoEffAttr", effID)
    if not effIpyData:
        return
    effType = effIpyData.GetGubaoEffType()
    if effType not in GubaoEffTtemIypeList:
        GameWorld.DebugLog("古宝物品效果领奖! 非物品效果类型! gubaoID=%s,star=%s,effID=%s,effType=%s"
                           % (gubaoID, star, effID, effType), curPlayer.GetPlayerID())
        return
    condValue = effIpyData.GetEffCond()
    awardItemList = effIpyData.GetEffItemAwardList()
    if not condValue or not awardItemList:
        return
    effValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GubaoItemEffValue % (gubaoID, effType))
    getTimes = effValue / condValue
    if getTimes <= 0:
        GameWorld.DebugLog("古宝物品效果领奖! 未达到领奖条件! gubaoID=%s,star=%s,effID=%s,effType=%s,effValue=%s,condValue=%s"
                           % (gubaoID, star, effID, effType, effValue, condValue), curPlayer.GetPlayerID())
        return
    awardItemTotalList = []
    if getTimes > 1:
        for itemID, itemCount, isAuctionItem in awardItemList:
            awardItemTotalList.append([itemID, int(itemCount * getTimes), isAuctionItem])
    else:
        awardItemTotalList = awardItemList
    updValue = effValue % condValue
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GubaoItemEffValue % (gubaoID, effType), updValue)
    Sync_GubaoItemEffInfo(curPlayer, gubaoID, effType, True)
    GameWorld.DebugLog("古宝物品效果领奖: gubaoID=%s,star=%s,effID=%s,effType=%s,effValue=%s,condValue=%s,getTimes=%s,updValue=%s,awardItemTotalList=%s"
                       % (gubaoID, star, effID, effType, effValue, condValue, getTimes, updValue, awardItemTotalList), curPlayer.GetPlayerID())
    ItemControler.GivePlayerItemOrMail(curPlayer, awardItemTotalList, event=["Gubao", False, {}])
    return
def Sync_GubaoInfo(curPlayer, gubaoIDList=None):
    if gubaoIDList == None:
        syncIDList = []
@@ -512,3 +603,38 @@
    clientPack.Count = len(clientPack.GubaoInfoList)
    NetPackCommon.SendFakePack(curPlayer, clientPack)
    return
def Sync_GubaoItemEffInfo(curPlayer, gubaoID=0, effType=0, force=False):
    syncIDList = []
    if not gubaoID:
        ipyDataMgr = IpyGameDataPY.IPY_Data()
        for index in range(ipyDataMgr.GetGubaoCount()):
            ipyData = ipyDataMgr.GetGubaoByIndex(index)
            syncIDList.append(ipyData.GetGubaoID())
    else:
        syncIDList = [gubaoID]
    syncEffTypeList = [effType] if effType else GubaoEffTtemIypeList
    itemEffInfoList = []
    for gubaoID in syncIDList:
        for effType in syncEffTypeList:
            effValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GubaoItemEffValue % (gubaoID, effType))
            if not effValue and not force:
                # 非强制同步情况下只同步有值的
                continue
            eff = ChPyNetSendPack.tagMCGubaoItemEff()
            eff.GubaoID = gubaoID
            eff.EffType = effType
            eff.EffValue = effValue
            itemEffInfoList.append(eff)
    if not itemEffInfoList:
        return
    clientPack = ChPyNetSendPack.tagMCGubaoItemEffInfo()
    clientPack.ItemEffInfoList = itemEffInfoList
    clientPack.Count = len(clientPack.ItemEffInfoList)
    NetPackCommon.SendFakePack(curPlayer, clientPack)
    return