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