From 8e1a8e9db62b3409e6e0dcc244f1285547cae587 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期四, 29 六月 2023 16:35:35 +0800
Subject: [PATCH] 9790 9762 【BT9】【后端】藏宝阁修改(增加领取物品奖励特殊效果)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGubao.py                           |  126 ++++++++++++++++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py                              |  112 ++++++++++++++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_SealDemon.py |    4 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py                                |    7 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Gubao.py                            |   23 +++
 PySysDB/PySysDBPY.h                                                                                                 |    1 
 ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py                                                   |  112 ++++++++++++++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCrossRealmPK.py                    |    2 
 8 files changed, 383 insertions(+), 4 deletions(-)

diff --git a/PySysDB/PySysDBPY.h b/PySysDB/PySysDBPY.h
index 93c2387..06281d9 100644
--- a/PySysDB/PySysDBPY.h
+++ b/PySysDB/PySysDBPY.h
@@ -471,6 +471,7 @@
 	list		EffFuncAttrIDList;	//提升指定功能属性ID列表
 	DWORD		EffAttrID;	//直接增加属性类型
 	DWORD		EffAttrValue;	//提升属性值
+	list		EffItemAwardList;	//领取物品列表
 };
 
 //古宝品质升级表
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
index f4e1af6..b8a04cc 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
+++ b/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):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
index f4e1af6..b8a04cc 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
+++ b/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):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Gubao.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Gubao.py
index 99d6be2..65b8eaa 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Gubao.py
+++ b/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
     
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_SealDemon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_SealDemon.py
index 0fdffd1..0d87627 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_SealDemon.py
+++ b/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])
 
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
index 3b84d2a..1b2a0a5 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
+++ b/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():
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCrossRealmPK.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCrossRealmPK.py
index 867631e..12edae5 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCrossRealmPK.py
+++ b/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:
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGubao.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGubao.py
index aff637e..ee9c386 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGubao.py
+++ b/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
+

--
Gitblit v1.8.0