From f9d4f2df388e88767c36641b6f1a06af7b032053 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期二, 18 十月 2022 18:05:29 +0800
Subject: [PATCH] 9437 【越南】【后端】天帝礼包
---
ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py | 44 +
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActGodGift.py | 478 ++++++++++++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini | 20
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py | 235 +++++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py | 411 ++++++++++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py | 76 ++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py | 3
PySysDB/PySysDBPY.h | 28
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py | 235 +++++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py | 4
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py | 411 ++++++++++++
PySysDB/PySysDBG.h | 16
12 files changed, 1,961 insertions(+), 0 deletions(-)
diff --git a/PySysDB/PySysDBG.h b/PySysDB/PySysDBG.h
index 6a68711..d2d2d0b 100644
--- a/PySysDB/PySysDBG.h
+++ b/PySysDB/PySysDBG.h
@@ -510,6 +510,22 @@
BYTE ResetType; //重置类型,0-0点重置;1-5点重置
};
+//天帝礼包活动时间表
+
+struct tagActGodGift
+{
+ DWORD _CfgID; //配置ID
+ list PlatformList; //活动平台列表["平台A", "平台A", ...],配[]代表所有
+ list ServerGroupIDList; //服务器ID列表
+ BYTE ActNum; //活动分组编号, 活动类型 * 10 + 不同界面编号
+ char StartDate; //开启日期
+ char EndDate; //结束日期
+ dict NotifyInfoStart; //全服提示信息 - 相对开始时间
+ dict NotifyInfoEnd; //全服提示信息 - 相对结束时间
+ list NotifyInfoLoop; //全服提示信息 - 循环广播[间隔分钟, 广播key]
+ BYTE IsDayReset; //是否每天重置
+};
+
//骑宠盛宴活动
struct tagActHorsePetFeast
diff --git a/PySysDB/PySysDBPY.h b/PySysDB/PySysDBPY.h
index 7e07bc7..8df5233 100644
--- a/PySysDB/PySysDBPY.h
+++ b/PySysDB/PySysDBPY.h
@@ -1626,6 +1626,34 @@
dict ItemAwardTimesTotalInfo; //物品产出次数限制(所有层){物品ID:总产出次数, ...}
};
+//天帝礼包活动时间表
+
+struct tagActGodGift
+{
+ DWORD _CfgID; //配置ID
+ char StartDate; //开启日期
+ char EndDate; //结束日期
+ BYTE IsDayReset; //是否每天重置
+ WORD LVLimit; //限制等级
+ list UseGoldList; //抽奖消耗仙玉列表
+ list PrizeMoneyList; //奖励灵石列表
+ BYTE ResetLimitTimes; //至少抽几次可重置
+ BYTE ResetCountMax; //可重置次数
+ dict TemplateIDInfo; //奖池模板信息 {(世界等级A,B):[模板编号列表, ...], ...}
+};
+
+//天帝礼包奖池表
+
+struct tagActGodGiftAward
+{
+ DWORD _TemplateID; //奖池模板编号
+ BYTE AwardLibType; //奖励库类型
+ BYTE UnlockAwardLimitTimes; //抽X次后可产出本库
+ BYTE ChooseItemCount; //选择个数
+ dict LibItemInfo; //物品编号对应物品信息 {物品编号:[物品ID,个数,是否拍品,可选次数], ...} 0不限次数
+ list NotifyItemNumList; //需要广播的编号列表
+};
+
//骑宠盛宴活动
struct tagActHorsePetFeast
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
index 809c331..f27cb3e 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
@@ -14911,6 +14911,241 @@
#------------------------------------------------------
+# AA 20 天帝礼包选择物品 #tagCMActGodGiftChooseItem
+
+class tagCMActGodGiftChooseItemInfo(Structure):
+ ItemLibType = 0 #(BYTE ItemLibType)//物品库类型
+ Count = 0 #(BYTE Count)//选择个数
+ ItemNumList = list() #(vector<BYTE> ItemNumList)//选择物品编号列表
+ data = None
+
+ def __init__(self):
+ self.Clear()
+ return
+
+ def ReadData(self, _lpData, _pos=0, _Len=0):
+ self.Clear()
+ self.ItemLibType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ for i in range(self.Count):
+ value,_pos=CommFunc.ReadBYTE(_lpData,_pos)
+ self.ItemNumList.append(value)
+ return _pos
+
+ def Clear(self):
+ self.ItemLibType = 0
+ self.Count = 0
+ self.ItemNumList = list()
+ return
+
+ def GetLength(self):
+ length = 0
+ length += 1
+ length += 1
+ length += 1 * self.Count
+
+ return length
+
+ def GetBuffer(self):
+ data = ''
+ data = CommFunc.WriteBYTE(data, self.ItemLibType)
+ data = CommFunc.WriteBYTE(data, self.Count)
+ for i in range(self.Count):
+ data = CommFunc.WriteBYTE(data, self.ItemNumList[i])
+ return data
+
+ def OutputString(self):
+ DumpString = '''
+ ItemLibType:%d,
+ Count:%d,
+ ItemNumList:%s
+ '''\
+ %(
+ self.ItemLibType,
+ self.Count,
+ "..."
+ )
+ return DumpString
+
+
+class tagCMActGodGiftChooseItem(Structure):
+ Head = tagHead()
+ ActNum = 0 #(BYTE ActNum)//活动编号
+ ChooseLibCount = 0 #(BYTE ChooseLibCount)//选择库个数
+ ChooseItemList = list() #(vector<tagCMActGodGiftChooseItemInfo> ChooseItemList)//选择库物品信息列表
+ data = None
+
+ def __init__(self):
+ self.Clear()
+ self.Head.Cmd = 0xAA
+ self.Head.SubCmd = 0x20
+ return
+
+ def ReadData(self, _lpData, _pos=0, _Len=0):
+ self.Clear()
+ _pos = self.Head.ReadData(_lpData, _pos)
+ self.ActNum,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.ChooseLibCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ for i in range(self.ChooseLibCount):
+ temChooseItemList = tagCMActGodGiftChooseItemInfo()
+ _pos = temChooseItemList.ReadData(_lpData, _pos)
+ self.ChooseItemList.append(temChooseItemList)
+ return _pos
+
+ def Clear(self):
+ self.Head = tagHead()
+ self.Head.Clear()
+ self.Head.Cmd = 0xAA
+ self.Head.SubCmd = 0x20
+ self.ActNum = 0
+ self.ChooseLibCount = 0
+ self.ChooseItemList = list()
+ return
+
+ def GetLength(self):
+ length = 0
+ length += self.Head.GetLength()
+ length += 1
+ length += 1
+ for i in range(self.ChooseLibCount):
+ length += self.ChooseItemList[i].GetLength()
+
+ return length
+
+ def GetBuffer(self):
+ data = ''
+ data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+ data = CommFunc.WriteBYTE(data, self.ActNum)
+ data = CommFunc.WriteBYTE(data, self.ChooseLibCount)
+ for i in range(self.ChooseLibCount):
+ data = CommFunc.WriteString(data, self.ChooseItemList[i].GetLength(), self.ChooseItemList[i].GetBuffer())
+ return data
+
+ def OutputString(self):
+ DumpString = '''
+ Head:%s,
+ ActNum:%d,
+ ChooseLibCount:%d,
+ ChooseItemList:%s
+ '''\
+ %(
+ self.Head.OutputString(),
+ self.ActNum,
+ self.ChooseLibCount,
+ "..."
+ )
+ return DumpString
+
+
+m_NAtagCMActGodGiftChooseItem=tagCMActGodGiftChooseItem()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActGodGiftChooseItem.Head.Cmd,m_NAtagCMActGodGiftChooseItem.Head.SubCmd))] = m_NAtagCMActGodGiftChooseItem
+
+
+#------------------------------------------------------
+# AA 21 天帝礼包抽奖 #tagCMActGodGiftlottery
+
+class tagCMActGodGiftlottery(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Cmd", c_ubyte),
+ ("SubCmd", c_ubyte),
+ ("ActNum", c_ubyte), #活动编号
+ ]
+
+ def __init__(self):
+ self.Clear()
+ self.Cmd = 0xAA
+ self.SubCmd = 0x21
+ 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.Cmd = 0xAA
+ self.SubCmd = 0x21
+ self.ActNum = 0
+ return
+
+ def GetLength(self):
+ return sizeof(tagCMActGodGiftlottery)
+
+ def GetBuffer(self):
+ return string_at(addressof(self), self.GetLength())
+
+ def OutputString(self):
+ DumpString = '''// AA 21 天帝礼包抽奖 //tagCMActGodGiftlottery:
+ Cmd:%s,
+ SubCmd:%s,
+ ActNum:%d
+ '''\
+ %(
+ self.Cmd,
+ self.SubCmd,
+ self.ActNum
+ )
+ return DumpString
+
+
+m_NAtagCMActGodGiftlottery=tagCMActGodGiftlottery()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActGodGiftlottery.Cmd,m_NAtagCMActGodGiftlottery.SubCmd))] = m_NAtagCMActGodGiftlottery
+
+
+#------------------------------------------------------
+# AA 22 天帝礼包重置 #tagCMActGodGiftReset
+
+class tagCMActGodGiftReset(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Cmd", c_ubyte),
+ ("SubCmd", c_ubyte),
+ ("ActNum", c_ubyte), #活动编号
+ ]
+
+ def __init__(self):
+ self.Clear()
+ self.Cmd = 0xAA
+ self.SubCmd = 0x22
+ 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.Cmd = 0xAA
+ self.SubCmd = 0x22
+ self.ActNum = 0
+ return
+
+ def GetLength(self):
+ return sizeof(tagCMActGodGiftReset)
+
+ def GetBuffer(self):
+ return string_at(addressof(self), self.GetLength())
+
+ def OutputString(self):
+ DumpString = '''// AA 22 天帝礼包重置 //tagCMActGodGiftReset:
+ Cmd:%s,
+ SubCmd:%s,
+ ActNum:%d
+ '''\
+ %(
+ self.Cmd,
+ self.SubCmd,
+ self.ActNum
+ )
+ return DumpString
+
+
+m_NAtagCMActGodGiftReset=tagCMActGodGiftReset()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActGodGiftReset.Cmd,m_NAtagCMActGodGiftReset.SubCmd))] = m_NAtagCMActGodGiftReset
+
+
+#------------------------------------------------------
# AA 12 选择转盘活动物品 #tagCMActTurntableChooseItem
class tagCMActTurntableChooseItem(Structure):
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
index 1d50803..ddc5b16 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
@@ -29199,6 +29199,417 @@
#------------------------------------------------------
+# AA 60 天帝礼包活动信息 #tagMCActGodGiftInfo
+
+class tagMCActGodGiftItem(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("ItemNum", c_ubyte), # 物品在本库中的编号
+ ("ItemID", c_int),
+ ("ItemCount", c_ushort),
+ ("IsBind", c_ubyte),
+ ("CanChooseTimes", c_ubyte), #可选择次数,0代表不限次数
+ ("ChooseTimes", c_ubyte), #已选次数
+ ("IsChoose", 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.ItemNum = 0
+ self.ItemID = 0
+ self.ItemCount = 0
+ self.IsBind = 0
+ self.CanChooseTimes = 0
+ self.ChooseTimes = 0
+ self.IsChoose = 0
+ return
+
+ def GetLength(self):
+ return sizeof(tagMCActGodGiftItem)
+
+ def GetBuffer(self):
+ return string_at(addressof(self), self.GetLength())
+
+ def OutputString(self):
+ DumpString = '''// AA 60 天帝礼包活动信息 //tagMCActGodGiftInfo:
+ ItemNum:%d,
+ ItemID:%d,
+ ItemCount:%d,
+ IsBind:%d,
+ CanChooseTimes:%d,
+ ChooseTimes:%d,
+ IsChoose:%d
+ '''\
+ %(
+ self.ItemNum,
+ self.ItemID,
+ self.ItemCount,
+ self.IsBind,
+ self.CanChooseTimes,
+ self.ChooseTimes,
+ self.IsChoose
+ )
+ return DumpString
+
+
+class tagMCActGodGiftItemLib(Structure):
+ ItemLibType = 0 #(BYTE ItemLibType)//物品库类型
+ ChooseItemCount = 0 #(BYTE ChooseItemCount)//可选择物品个数
+ ChooseItemList = list() #(vector<tagMCActGodGiftItem> ChooseItemList)//可选物品列表
+ data = None
+
+ def __init__(self):
+ self.Clear()
+ return
+
+ def ReadData(self, _lpData, _pos=0, _Len=0):
+ self.Clear()
+ self.ItemLibType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.ChooseItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ for i in range(self.ChooseItemCount):
+ temChooseItemList = tagMCActGodGiftItem()
+ _pos = temChooseItemList.ReadData(_lpData, _pos)
+ self.ChooseItemList.append(temChooseItemList)
+ return _pos
+
+ def Clear(self):
+ self.ItemLibType = 0
+ self.ChooseItemCount = 0
+ self.ChooseItemList = list()
+ return
+
+ def GetLength(self):
+ length = 0
+ length += 1
+ length += 1
+ for i in range(self.ChooseItemCount):
+ length += self.ChooseItemList[i].GetLength()
+
+ return length
+
+ def GetBuffer(self):
+ data = ''
+ data = CommFunc.WriteBYTE(data, self.ItemLibType)
+ data = CommFunc.WriteBYTE(data, self.ChooseItemCount)
+ for i in range(self.ChooseItemCount):
+ data = CommFunc.WriteString(data, self.ChooseItemList[i].GetLength(), self.ChooseItemList[i].GetBuffer())
+ return data
+
+ def OutputString(self):
+ DumpString = '''
+ ItemLibType:%d,
+ ChooseItemCount:%d,
+ ChooseItemList:%s
+ '''\
+ %(
+ self.ItemLibType,
+ self.ChooseItemCount,
+ "..."
+ )
+ return DumpString
+
+
+class tagMCActGodGiftInfo(Structure):
+ Head = tagHead()
+ ActNum = 0 #(BYTE ActNum)// 活动编号
+ StartDate = "" #(char StartDate[10])// 开始日期 y-m-d
+ EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d
+ IsDayReset = 0 #(BYTE IsDayReset)// 是否每日重置
+ LimitLV = 0 #(WORD LimitLV)// 限制等级
+ CostMoneyType = 0 #(BYTE CostMoneyType)//消耗货币类型
+ CostMoneyValueCount = 0 #(BYTE CostMoneyValueCount)
+ CostMoneyValueList = list() #(vector<DWORD> CostMoneyValueList)//消耗货币值列表
+ PrizeMoneyType = 0 #(BYTE PrizeMoneyType)//奖励货币类型
+ PrizeMoneyValueCount = 0 #(BYTE PrizeMoneyValueCount)
+ PrizeMoneyValueList = list() #(vector<DWORD> PrizeMoneyValueList)//奖励货币值列表
+ ResetLimitTimes = 0 #(BYTE ResetLimitTimes)//至少抽几次才可重置奖池
+ ResetCountMax = 0 #(BYTE ResetCountMax)//最大可重置奖池次数
+ IsAwardPoolOK = 0 #(BYTE IsAwardPoolOK)//奖池是否选择完毕,否的话需要先选择奖池才可抽奖
+ ItemLibCount = 0 #(BYTE ItemLibCount)//奖池库个数
+ ItemLibList = list() #(vector<tagMCActGodGiftItemLib> ItemLibList)//奖池库信息列表
+ data = None
+
+ def __init__(self):
+ self.Clear()
+ self.Head.Cmd = 0xAA
+ self.Head.SubCmd = 0x60
+ return
+
+ def ReadData(self, _lpData, _pos=0, _Len=0):
+ self.Clear()
+ _pos = self.Head.ReadData(_lpData, _pos)
+ self.ActNum,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+ self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+ self.IsDayReset,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ self.CostMoneyType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.CostMoneyValueCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ for i in range(self.CostMoneyValueCount):
+ value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
+ self.CostMoneyValueList.append(value)
+ self.PrizeMoneyType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.PrizeMoneyValueCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ for i in range(self.PrizeMoneyValueCount):
+ value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
+ self.PrizeMoneyValueList.append(value)
+ self.ResetLimitTimes,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.ResetCountMax,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.IsAwardPoolOK,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.ItemLibCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ for i in range(self.ItemLibCount):
+ temItemLibList = tagMCActGodGiftItemLib()
+ _pos = temItemLibList.ReadData(_lpData, _pos)
+ self.ItemLibList.append(temItemLibList)
+ return _pos
+
+ def Clear(self):
+ self.Head = tagHead()
+ self.Head.Clear()
+ self.Head.Cmd = 0xAA
+ self.Head.SubCmd = 0x60
+ self.ActNum = 0
+ self.StartDate = ""
+ self.EndtDate = ""
+ self.IsDayReset = 0
+ self.LimitLV = 0
+ self.CostMoneyType = 0
+ self.CostMoneyValueCount = 0
+ self.CostMoneyValueList = list()
+ self.PrizeMoneyType = 0
+ self.PrizeMoneyValueCount = 0
+ self.PrizeMoneyValueList = list()
+ self.ResetLimitTimes = 0
+ self.ResetCountMax = 0
+ self.IsAwardPoolOK = 0
+ self.ItemLibCount = 0
+ self.ItemLibList = list()
+ return
+
+ def GetLength(self):
+ length = 0
+ length += self.Head.GetLength()
+ length += 1
+ length += 10
+ length += 10
+ length += 1
+ length += 2
+ length += 1
+ length += 1
+ length += 4 * self.CostMoneyValueCount
+ length += 1
+ length += 1
+ length += 4 * self.PrizeMoneyValueCount
+ length += 1
+ length += 1
+ length += 1
+ length += 1
+ for i in range(self.ItemLibCount):
+ length += self.ItemLibList[i].GetLength()
+
+ return length
+
+ def GetBuffer(self):
+ data = ''
+ data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+ data = CommFunc.WriteBYTE(data, self.ActNum)
+ data = CommFunc.WriteString(data, 10, self.StartDate)
+ data = CommFunc.WriteString(data, 10, self.EndtDate)
+ data = CommFunc.WriteBYTE(data, self.IsDayReset)
+ data = CommFunc.WriteWORD(data, self.LimitLV)
+ data = CommFunc.WriteBYTE(data, self.CostMoneyType)
+ data = CommFunc.WriteBYTE(data, self.CostMoneyValueCount)
+ for i in range(self.CostMoneyValueCount):
+ data = CommFunc.WriteDWORD(data, self.CostMoneyValueList[i])
+ data = CommFunc.WriteBYTE(data, self.PrizeMoneyType)
+ data = CommFunc.WriteBYTE(data, self.PrizeMoneyValueCount)
+ for i in range(self.PrizeMoneyValueCount):
+ data = CommFunc.WriteDWORD(data, self.PrizeMoneyValueList[i])
+ data = CommFunc.WriteBYTE(data, self.ResetLimitTimes)
+ data = CommFunc.WriteBYTE(data, self.ResetCountMax)
+ data = CommFunc.WriteBYTE(data, self.IsAwardPoolOK)
+ data = CommFunc.WriteBYTE(data, self.ItemLibCount)
+ for i in range(self.ItemLibCount):
+ data = CommFunc.WriteString(data, self.ItemLibList[i].GetLength(), self.ItemLibList[i].GetBuffer())
+ return data
+
+ def OutputString(self):
+ DumpString = '''
+ Head:%s,
+ ActNum:%d,
+ StartDate:%s,
+ EndtDate:%s,
+ IsDayReset:%d,
+ LimitLV:%d,
+ CostMoneyType:%d,
+ CostMoneyValueCount:%d,
+ CostMoneyValueList:%s,
+ PrizeMoneyType:%d,
+ PrizeMoneyValueCount:%d,
+ PrizeMoneyValueList:%s,
+ ResetLimitTimes:%d,
+ ResetCountMax:%d,
+ IsAwardPoolOK:%d,
+ ItemLibCount:%d,
+ ItemLibList:%s
+ '''\
+ %(
+ self.Head.OutputString(),
+ self.ActNum,
+ self.StartDate,
+ self.EndtDate,
+ self.IsDayReset,
+ self.LimitLV,
+ self.CostMoneyType,
+ self.CostMoneyValueCount,
+ "...",
+ self.PrizeMoneyType,
+ self.PrizeMoneyValueCount,
+ "...",
+ self.ResetLimitTimes,
+ self.ResetCountMax,
+ self.IsAwardPoolOK,
+ self.ItemLibCount,
+ "..."
+ )
+ return DumpString
+
+
+m_NAtagMCActGodGiftInfo=tagMCActGodGiftInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActGodGiftInfo.Head.Cmd,m_NAtagMCActGodGiftInfo.Head.SubCmd))] = m_NAtagMCActGodGiftInfo
+
+
+#------------------------------------------------------
+# AA 61 天帝礼包活动玩家信息 #tagMCActGodGiftPlayerInfo
+
+class tagMCActGodGiftAwardItem(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("ItemLibType", c_ubyte), #物品库类型
+ ("ItemNum", 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.ItemLibType = 0
+ self.ItemNum = 0
+ return
+
+ def GetLength(self):
+ return sizeof(tagMCActGodGiftAwardItem)
+
+ def GetBuffer(self):
+ return string_at(addressof(self), self.GetLength())
+
+ def OutputString(self):
+ DumpString = '''// AA 61 天帝礼包活动玩家信息 //tagMCActGodGiftPlayerInfo:
+ ItemLibType:%d,
+ ItemNum:%d
+ '''\
+ %(
+ self.ItemLibType,
+ self.ItemNum
+ )
+ return DumpString
+
+
+class tagMCActGodGiftPlayerInfo(Structure):
+ Head = tagHead()
+ ActNum = 0 #(BYTE ActNum)// 活动编号
+ ResetCount = 0 #(BYTE ResetCount)// 本次活动已重置次数
+ AwardItemCount = 0 #(BYTE AwardItemCount)// 本次奖池已抽中奖品个数,也代表本次奖池已抽奖次数
+ AwardItemList = list() #(vector<tagMCActGodGiftAwardItem> AwardItemList)// 本次奖池已抽中物品列表
+ data = None
+
+ def __init__(self):
+ self.Clear()
+ self.Head.Cmd = 0xAA
+ self.Head.SubCmd = 0x61
+ return
+
+ def ReadData(self, _lpData, _pos=0, _Len=0):
+ self.Clear()
+ _pos = self.Head.ReadData(_lpData, _pos)
+ self.ActNum,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.ResetCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.AwardItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ for i in range(self.AwardItemCount):
+ temAwardItemList = tagMCActGodGiftAwardItem()
+ _pos = temAwardItemList.ReadData(_lpData, _pos)
+ self.AwardItemList.append(temAwardItemList)
+ return _pos
+
+ def Clear(self):
+ self.Head = tagHead()
+ self.Head.Clear()
+ self.Head.Cmd = 0xAA
+ self.Head.SubCmd = 0x61
+ self.ActNum = 0
+ self.ResetCount = 0
+ self.AwardItemCount = 0
+ self.AwardItemList = list()
+ return
+
+ def GetLength(self):
+ length = 0
+ length += self.Head.GetLength()
+ length += 1
+ length += 1
+ length += 1
+ for i in range(self.AwardItemCount):
+ length += self.AwardItemList[i].GetLength()
+
+ return length
+
+ def GetBuffer(self):
+ data = ''
+ data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+ data = CommFunc.WriteBYTE(data, self.ActNum)
+ data = CommFunc.WriteBYTE(data, self.ResetCount)
+ data = CommFunc.WriteBYTE(data, self.AwardItemCount)
+ for i in range(self.AwardItemCount):
+ data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer())
+ return data
+
+ def OutputString(self):
+ DumpString = '''
+ Head:%s,
+ ActNum:%d,
+ ResetCount:%d,
+ AwardItemCount:%d,
+ AwardItemList:%s
+ '''\
+ %(
+ self.Head.OutputString(),
+ self.ActNum,
+ self.ResetCount,
+ self.AwardItemCount,
+ "..."
+ )
+ return DumpString
+
+
+m_NAtagMCActGodGiftPlayerInfo=tagMCActGodGiftPlayerInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActGodGiftPlayerInfo.Head.Cmd,m_NAtagMCActGodGiftPlayerInfo.Head.SubCmd))] = m_NAtagMCActGodGiftPlayerInfo
+
+
+#------------------------------------------------------
# AA 31 成长必买活动信息 #tagMCActGrowupBuyInfo
class tagMCActGrowupBuyCTGItem(Structure):
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py b/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py
index b86addc..1758c54 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py
@@ -429,6 +429,19 @@
("BYTE", "ResetType", 0),
),
+ "ActGodGift":(
+ ("DWORD", "CfgID", 1),
+ ("list", "PlatformList", 0),
+ ("list", "ServerGroupIDList", 0),
+ ("BYTE", "ActNum", 0),
+ ("char", "StartDate", 0),
+ ("char", "EndDate", 0),
+ ("dict", "NotifyInfoStart", 0),
+ ("dict", "NotifyInfoEnd", 0),
+ ("list", "NotifyInfoLoop", 0),
+ ("BYTE", "IsDayReset", 0),
+ ),
+
"ActHorsePetFeast":(
("DWORD", "CfgID", 1),
("list", "PlatformList", 0),
@@ -1704,6 +1717,33 @@
def GetNotifyInfoLoop(self): return self.NotifyInfoLoop # 全服提示信息 - 循环广播[间隔分钟, 广播key]
def GetResetType(self): return self.ResetType # 重置类型,0-0点重置;1-5点重置
+# 天帝礼包活动时间表
+class IPY_ActGodGift():
+
+ def __init__(self):
+ self.CfgID = 0
+ self.PlatformList = []
+ self.ServerGroupIDList = []
+ self.ActNum = 0
+ self.StartDate = ""
+ self.EndDate = ""
+ self.NotifyInfoStart = {}
+ self.NotifyInfoEnd = {}
+ self.NotifyInfoLoop = []
+ self.IsDayReset = 0
+ return
+
+ def GetCfgID(self): return self.CfgID # 配置ID
+ def GetPlatformList(self): return self.PlatformList # 活动平台列表["平台A", "平台A", ...],配[]代表所有
+ def GetServerGroupIDList(self): return self.ServerGroupIDList # 服务器ID列表
+ def GetActNum(self): return self.ActNum # 活动分组编号, 活动类型 * 10 + 不同界面编号
+ def GetStartDate(self): return self.StartDate # 开启日期
+ def GetEndDate(self): return self.EndDate # 结束日期
+ def GetNotifyInfoStart(self): return self.NotifyInfoStart # 全服提示信息 - 相对开始时间
+ def GetNotifyInfoEnd(self): return self.NotifyInfoEnd # 全服提示信息 - 相对结束时间
+ def GetNotifyInfoLoop(self): return self.NotifyInfoLoop # 全服提示信息 - 循环广播[间隔分钟, 广播key]
+ def GetIsDayReset(self): return self.IsDayReset # 是否每天重置
+
# 骑宠盛宴活动
class IPY_ActHorsePetFeast():
@@ -2728,6 +2768,8 @@
self.ipyActGarbageSortingLen = len(self.ipyActGarbageSortingCache)
self.ipyActXianXiaMJCache = self.__LoadFileData("ActXianXiaMJ", IPY_ActXianXiaMJ)
self.ipyActXianXiaMJLen = len(self.ipyActXianXiaMJCache)
+ self.ipyActGodGiftCache = self.__LoadFileData("ActGodGift", IPY_ActGodGift)
+ self.ipyActGodGiftLen = len(self.ipyActGodGiftCache)
self.ipyActHorsePetFeastCache = self.__LoadFileData("ActHorsePetFeast", IPY_ActHorsePetFeast)
self.ipyActHorsePetFeastLen = len(self.ipyActHorsePetFeastCache)
self.ipyActBossRebornCache = self.__LoadFileData("ActBossReborn", IPY_ActBossReborn)
@@ -3054,6 +3096,8 @@
def GetActGarbageSortingByIndex(self, index): return self.ipyActGarbageSortingCache[index]
def GetActXianXiaMJCount(self): return self.ipyActXianXiaMJLen
def GetActXianXiaMJByIndex(self, index): return self.ipyActXianXiaMJCache[index]
+ def GetActGodGiftCount(self): return self.ipyActGodGiftLen
+ def GetActGodGiftByIndex(self, index): return self.ipyActGodGiftCache[index]
def GetActHorsePetFeastCount(self): return self.ipyActHorsePetFeastLen
def GetActHorsePetFeastByIndex(self, index): return self.ipyActHorsePetFeastCache[index]
def GetActBossRebornCount(self): return self.ipyActBossRebornLen
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
index 4ae43d3..3999fca 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
@@ -1541,6 +1541,26 @@
PacketSubCMD_3=0x18
PacketCallFunc_3=OnActXianXiaMJAwardPoolRefresh
+;天帝礼包活动
+[PlayerActGodGift]
+ScriptName = Player\PlayerActGodGift.py
+Writer = hxp
+Releaser = hxp
+RegType = 0
+RegisterPackCount = 3
+
+PacketCMD_1=0xAA
+PacketSubCMD_1=0x20
+PacketCallFunc_1=OnActGodGiftChooseItem
+
+PacketCMD_2=0xAA
+PacketSubCMD_2=0x21
+PacketCallFunc_2=OnActGodGiftlottery
+
+PacketCMD_3=0xAA
+PacketSubCMD_3=0x22
+PacketCallFunc_3=OnActGodGiftReset
+
;集字活动
[PlayerActCollectWords]
ScriptName = Player\PlayerActCollectWords.py
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
index 809c331..f27cb3e 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
@@ -14911,6 +14911,241 @@
#------------------------------------------------------
+# AA 20 天帝礼包选择物品 #tagCMActGodGiftChooseItem
+
+class tagCMActGodGiftChooseItemInfo(Structure):
+ ItemLibType = 0 #(BYTE ItemLibType)//物品库类型
+ Count = 0 #(BYTE Count)//选择个数
+ ItemNumList = list() #(vector<BYTE> ItemNumList)//选择物品编号列表
+ data = None
+
+ def __init__(self):
+ self.Clear()
+ return
+
+ def ReadData(self, _lpData, _pos=0, _Len=0):
+ self.Clear()
+ self.ItemLibType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ for i in range(self.Count):
+ value,_pos=CommFunc.ReadBYTE(_lpData,_pos)
+ self.ItemNumList.append(value)
+ return _pos
+
+ def Clear(self):
+ self.ItemLibType = 0
+ self.Count = 0
+ self.ItemNumList = list()
+ return
+
+ def GetLength(self):
+ length = 0
+ length += 1
+ length += 1
+ length += 1 * self.Count
+
+ return length
+
+ def GetBuffer(self):
+ data = ''
+ data = CommFunc.WriteBYTE(data, self.ItemLibType)
+ data = CommFunc.WriteBYTE(data, self.Count)
+ for i in range(self.Count):
+ data = CommFunc.WriteBYTE(data, self.ItemNumList[i])
+ return data
+
+ def OutputString(self):
+ DumpString = '''
+ ItemLibType:%d,
+ Count:%d,
+ ItemNumList:%s
+ '''\
+ %(
+ self.ItemLibType,
+ self.Count,
+ "..."
+ )
+ return DumpString
+
+
+class tagCMActGodGiftChooseItem(Structure):
+ Head = tagHead()
+ ActNum = 0 #(BYTE ActNum)//活动编号
+ ChooseLibCount = 0 #(BYTE ChooseLibCount)//选择库个数
+ ChooseItemList = list() #(vector<tagCMActGodGiftChooseItemInfo> ChooseItemList)//选择库物品信息列表
+ data = None
+
+ def __init__(self):
+ self.Clear()
+ self.Head.Cmd = 0xAA
+ self.Head.SubCmd = 0x20
+ return
+
+ def ReadData(self, _lpData, _pos=0, _Len=0):
+ self.Clear()
+ _pos = self.Head.ReadData(_lpData, _pos)
+ self.ActNum,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.ChooseLibCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ for i in range(self.ChooseLibCount):
+ temChooseItemList = tagCMActGodGiftChooseItemInfo()
+ _pos = temChooseItemList.ReadData(_lpData, _pos)
+ self.ChooseItemList.append(temChooseItemList)
+ return _pos
+
+ def Clear(self):
+ self.Head = tagHead()
+ self.Head.Clear()
+ self.Head.Cmd = 0xAA
+ self.Head.SubCmd = 0x20
+ self.ActNum = 0
+ self.ChooseLibCount = 0
+ self.ChooseItemList = list()
+ return
+
+ def GetLength(self):
+ length = 0
+ length += self.Head.GetLength()
+ length += 1
+ length += 1
+ for i in range(self.ChooseLibCount):
+ length += self.ChooseItemList[i].GetLength()
+
+ return length
+
+ def GetBuffer(self):
+ data = ''
+ data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+ data = CommFunc.WriteBYTE(data, self.ActNum)
+ data = CommFunc.WriteBYTE(data, self.ChooseLibCount)
+ for i in range(self.ChooseLibCount):
+ data = CommFunc.WriteString(data, self.ChooseItemList[i].GetLength(), self.ChooseItemList[i].GetBuffer())
+ return data
+
+ def OutputString(self):
+ DumpString = '''
+ Head:%s,
+ ActNum:%d,
+ ChooseLibCount:%d,
+ ChooseItemList:%s
+ '''\
+ %(
+ self.Head.OutputString(),
+ self.ActNum,
+ self.ChooseLibCount,
+ "..."
+ )
+ return DumpString
+
+
+m_NAtagCMActGodGiftChooseItem=tagCMActGodGiftChooseItem()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActGodGiftChooseItem.Head.Cmd,m_NAtagCMActGodGiftChooseItem.Head.SubCmd))] = m_NAtagCMActGodGiftChooseItem
+
+
+#------------------------------------------------------
+# AA 21 天帝礼包抽奖 #tagCMActGodGiftlottery
+
+class tagCMActGodGiftlottery(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Cmd", c_ubyte),
+ ("SubCmd", c_ubyte),
+ ("ActNum", c_ubyte), #活动编号
+ ]
+
+ def __init__(self):
+ self.Clear()
+ self.Cmd = 0xAA
+ self.SubCmd = 0x21
+ 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.Cmd = 0xAA
+ self.SubCmd = 0x21
+ self.ActNum = 0
+ return
+
+ def GetLength(self):
+ return sizeof(tagCMActGodGiftlottery)
+
+ def GetBuffer(self):
+ return string_at(addressof(self), self.GetLength())
+
+ def OutputString(self):
+ DumpString = '''// AA 21 天帝礼包抽奖 //tagCMActGodGiftlottery:
+ Cmd:%s,
+ SubCmd:%s,
+ ActNum:%d
+ '''\
+ %(
+ self.Cmd,
+ self.SubCmd,
+ self.ActNum
+ )
+ return DumpString
+
+
+m_NAtagCMActGodGiftlottery=tagCMActGodGiftlottery()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActGodGiftlottery.Cmd,m_NAtagCMActGodGiftlottery.SubCmd))] = m_NAtagCMActGodGiftlottery
+
+
+#------------------------------------------------------
+# AA 22 天帝礼包重置 #tagCMActGodGiftReset
+
+class tagCMActGodGiftReset(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Cmd", c_ubyte),
+ ("SubCmd", c_ubyte),
+ ("ActNum", c_ubyte), #活动编号
+ ]
+
+ def __init__(self):
+ self.Clear()
+ self.Cmd = 0xAA
+ self.SubCmd = 0x22
+ 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.Cmd = 0xAA
+ self.SubCmd = 0x22
+ self.ActNum = 0
+ return
+
+ def GetLength(self):
+ return sizeof(tagCMActGodGiftReset)
+
+ def GetBuffer(self):
+ return string_at(addressof(self), self.GetLength())
+
+ def OutputString(self):
+ DumpString = '''// AA 22 天帝礼包重置 //tagCMActGodGiftReset:
+ Cmd:%s,
+ SubCmd:%s,
+ ActNum:%d
+ '''\
+ %(
+ self.Cmd,
+ self.SubCmd,
+ self.ActNum
+ )
+ return DumpString
+
+
+m_NAtagCMActGodGiftReset=tagCMActGodGiftReset()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActGodGiftReset.Cmd,m_NAtagCMActGodGiftReset.SubCmd))] = m_NAtagCMActGodGiftReset
+
+
+#------------------------------------------------------
# AA 12 选择转盘活动物品 #tagCMActTurntableChooseItem
class tagCMActTurntableChooseItem(Structure):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
index 1d50803..ddc5b16 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -29199,6 +29199,417 @@
#------------------------------------------------------
+# AA 60 天帝礼包活动信息 #tagMCActGodGiftInfo
+
+class tagMCActGodGiftItem(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("ItemNum", c_ubyte), # 物品在本库中的编号
+ ("ItemID", c_int),
+ ("ItemCount", c_ushort),
+ ("IsBind", c_ubyte),
+ ("CanChooseTimes", c_ubyte), #可选择次数,0代表不限次数
+ ("ChooseTimes", c_ubyte), #已选次数
+ ("IsChoose", 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.ItemNum = 0
+ self.ItemID = 0
+ self.ItemCount = 0
+ self.IsBind = 0
+ self.CanChooseTimes = 0
+ self.ChooseTimes = 0
+ self.IsChoose = 0
+ return
+
+ def GetLength(self):
+ return sizeof(tagMCActGodGiftItem)
+
+ def GetBuffer(self):
+ return string_at(addressof(self), self.GetLength())
+
+ def OutputString(self):
+ DumpString = '''// AA 60 天帝礼包活动信息 //tagMCActGodGiftInfo:
+ ItemNum:%d,
+ ItemID:%d,
+ ItemCount:%d,
+ IsBind:%d,
+ CanChooseTimes:%d,
+ ChooseTimes:%d,
+ IsChoose:%d
+ '''\
+ %(
+ self.ItemNum,
+ self.ItemID,
+ self.ItemCount,
+ self.IsBind,
+ self.CanChooseTimes,
+ self.ChooseTimes,
+ self.IsChoose
+ )
+ return DumpString
+
+
+class tagMCActGodGiftItemLib(Structure):
+ ItemLibType = 0 #(BYTE ItemLibType)//物品库类型
+ ChooseItemCount = 0 #(BYTE ChooseItemCount)//可选择物品个数
+ ChooseItemList = list() #(vector<tagMCActGodGiftItem> ChooseItemList)//可选物品列表
+ data = None
+
+ def __init__(self):
+ self.Clear()
+ return
+
+ def ReadData(self, _lpData, _pos=0, _Len=0):
+ self.Clear()
+ self.ItemLibType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.ChooseItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ for i in range(self.ChooseItemCount):
+ temChooseItemList = tagMCActGodGiftItem()
+ _pos = temChooseItemList.ReadData(_lpData, _pos)
+ self.ChooseItemList.append(temChooseItemList)
+ return _pos
+
+ def Clear(self):
+ self.ItemLibType = 0
+ self.ChooseItemCount = 0
+ self.ChooseItemList = list()
+ return
+
+ def GetLength(self):
+ length = 0
+ length += 1
+ length += 1
+ for i in range(self.ChooseItemCount):
+ length += self.ChooseItemList[i].GetLength()
+
+ return length
+
+ def GetBuffer(self):
+ data = ''
+ data = CommFunc.WriteBYTE(data, self.ItemLibType)
+ data = CommFunc.WriteBYTE(data, self.ChooseItemCount)
+ for i in range(self.ChooseItemCount):
+ data = CommFunc.WriteString(data, self.ChooseItemList[i].GetLength(), self.ChooseItemList[i].GetBuffer())
+ return data
+
+ def OutputString(self):
+ DumpString = '''
+ ItemLibType:%d,
+ ChooseItemCount:%d,
+ ChooseItemList:%s
+ '''\
+ %(
+ self.ItemLibType,
+ self.ChooseItemCount,
+ "..."
+ )
+ return DumpString
+
+
+class tagMCActGodGiftInfo(Structure):
+ Head = tagHead()
+ ActNum = 0 #(BYTE ActNum)// 活动编号
+ StartDate = "" #(char StartDate[10])// 开始日期 y-m-d
+ EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d
+ IsDayReset = 0 #(BYTE IsDayReset)// 是否每日重置
+ LimitLV = 0 #(WORD LimitLV)// 限制等级
+ CostMoneyType = 0 #(BYTE CostMoneyType)//消耗货币类型
+ CostMoneyValueCount = 0 #(BYTE CostMoneyValueCount)
+ CostMoneyValueList = list() #(vector<DWORD> CostMoneyValueList)//消耗货币值列表
+ PrizeMoneyType = 0 #(BYTE PrizeMoneyType)//奖励货币类型
+ PrizeMoneyValueCount = 0 #(BYTE PrizeMoneyValueCount)
+ PrizeMoneyValueList = list() #(vector<DWORD> PrizeMoneyValueList)//奖励货币值列表
+ ResetLimitTimes = 0 #(BYTE ResetLimitTimes)//至少抽几次才可重置奖池
+ ResetCountMax = 0 #(BYTE ResetCountMax)//最大可重置奖池次数
+ IsAwardPoolOK = 0 #(BYTE IsAwardPoolOK)//奖池是否选择完毕,否的话需要先选择奖池才可抽奖
+ ItemLibCount = 0 #(BYTE ItemLibCount)//奖池库个数
+ ItemLibList = list() #(vector<tagMCActGodGiftItemLib> ItemLibList)//奖池库信息列表
+ data = None
+
+ def __init__(self):
+ self.Clear()
+ self.Head.Cmd = 0xAA
+ self.Head.SubCmd = 0x60
+ return
+
+ def ReadData(self, _lpData, _pos=0, _Len=0):
+ self.Clear()
+ _pos = self.Head.ReadData(_lpData, _pos)
+ self.ActNum,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+ self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+ self.IsDayReset,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ self.CostMoneyType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.CostMoneyValueCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ for i in range(self.CostMoneyValueCount):
+ value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
+ self.CostMoneyValueList.append(value)
+ self.PrizeMoneyType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.PrizeMoneyValueCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ for i in range(self.PrizeMoneyValueCount):
+ value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
+ self.PrizeMoneyValueList.append(value)
+ self.ResetLimitTimes,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.ResetCountMax,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.IsAwardPoolOK,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.ItemLibCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ for i in range(self.ItemLibCount):
+ temItemLibList = tagMCActGodGiftItemLib()
+ _pos = temItemLibList.ReadData(_lpData, _pos)
+ self.ItemLibList.append(temItemLibList)
+ return _pos
+
+ def Clear(self):
+ self.Head = tagHead()
+ self.Head.Clear()
+ self.Head.Cmd = 0xAA
+ self.Head.SubCmd = 0x60
+ self.ActNum = 0
+ self.StartDate = ""
+ self.EndtDate = ""
+ self.IsDayReset = 0
+ self.LimitLV = 0
+ self.CostMoneyType = 0
+ self.CostMoneyValueCount = 0
+ self.CostMoneyValueList = list()
+ self.PrizeMoneyType = 0
+ self.PrizeMoneyValueCount = 0
+ self.PrizeMoneyValueList = list()
+ self.ResetLimitTimes = 0
+ self.ResetCountMax = 0
+ self.IsAwardPoolOK = 0
+ self.ItemLibCount = 0
+ self.ItemLibList = list()
+ return
+
+ def GetLength(self):
+ length = 0
+ length += self.Head.GetLength()
+ length += 1
+ length += 10
+ length += 10
+ length += 1
+ length += 2
+ length += 1
+ length += 1
+ length += 4 * self.CostMoneyValueCount
+ length += 1
+ length += 1
+ length += 4 * self.PrizeMoneyValueCount
+ length += 1
+ length += 1
+ length += 1
+ length += 1
+ for i in range(self.ItemLibCount):
+ length += self.ItemLibList[i].GetLength()
+
+ return length
+
+ def GetBuffer(self):
+ data = ''
+ data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+ data = CommFunc.WriteBYTE(data, self.ActNum)
+ data = CommFunc.WriteString(data, 10, self.StartDate)
+ data = CommFunc.WriteString(data, 10, self.EndtDate)
+ data = CommFunc.WriteBYTE(data, self.IsDayReset)
+ data = CommFunc.WriteWORD(data, self.LimitLV)
+ data = CommFunc.WriteBYTE(data, self.CostMoneyType)
+ data = CommFunc.WriteBYTE(data, self.CostMoneyValueCount)
+ for i in range(self.CostMoneyValueCount):
+ data = CommFunc.WriteDWORD(data, self.CostMoneyValueList[i])
+ data = CommFunc.WriteBYTE(data, self.PrizeMoneyType)
+ data = CommFunc.WriteBYTE(data, self.PrizeMoneyValueCount)
+ for i in range(self.PrizeMoneyValueCount):
+ data = CommFunc.WriteDWORD(data, self.PrizeMoneyValueList[i])
+ data = CommFunc.WriteBYTE(data, self.ResetLimitTimes)
+ data = CommFunc.WriteBYTE(data, self.ResetCountMax)
+ data = CommFunc.WriteBYTE(data, self.IsAwardPoolOK)
+ data = CommFunc.WriteBYTE(data, self.ItemLibCount)
+ for i in range(self.ItemLibCount):
+ data = CommFunc.WriteString(data, self.ItemLibList[i].GetLength(), self.ItemLibList[i].GetBuffer())
+ return data
+
+ def OutputString(self):
+ DumpString = '''
+ Head:%s,
+ ActNum:%d,
+ StartDate:%s,
+ EndtDate:%s,
+ IsDayReset:%d,
+ LimitLV:%d,
+ CostMoneyType:%d,
+ CostMoneyValueCount:%d,
+ CostMoneyValueList:%s,
+ PrizeMoneyType:%d,
+ PrizeMoneyValueCount:%d,
+ PrizeMoneyValueList:%s,
+ ResetLimitTimes:%d,
+ ResetCountMax:%d,
+ IsAwardPoolOK:%d,
+ ItemLibCount:%d,
+ ItemLibList:%s
+ '''\
+ %(
+ self.Head.OutputString(),
+ self.ActNum,
+ self.StartDate,
+ self.EndtDate,
+ self.IsDayReset,
+ self.LimitLV,
+ self.CostMoneyType,
+ self.CostMoneyValueCount,
+ "...",
+ self.PrizeMoneyType,
+ self.PrizeMoneyValueCount,
+ "...",
+ self.ResetLimitTimes,
+ self.ResetCountMax,
+ self.IsAwardPoolOK,
+ self.ItemLibCount,
+ "..."
+ )
+ return DumpString
+
+
+m_NAtagMCActGodGiftInfo=tagMCActGodGiftInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActGodGiftInfo.Head.Cmd,m_NAtagMCActGodGiftInfo.Head.SubCmd))] = m_NAtagMCActGodGiftInfo
+
+
+#------------------------------------------------------
+# AA 61 天帝礼包活动玩家信息 #tagMCActGodGiftPlayerInfo
+
+class tagMCActGodGiftAwardItem(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("ItemLibType", c_ubyte), #物品库类型
+ ("ItemNum", 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.ItemLibType = 0
+ self.ItemNum = 0
+ return
+
+ def GetLength(self):
+ return sizeof(tagMCActGodGiftAwardItem)
+
+ def GetBuffer(self):
+ return string_at(addressof(self), self.GetLength())
+
+ def OutputString(self):
+ DumpString = '''// AA 61 天帝礼包活动玩家信息 //tagMCActGodGiftPlayerInfo:
+ ItemLibType:%d,
+ ItemNum:%d
+ '''\
+ %(
+ self.ItemLibType,
+ self.ItemNum
+ )
+ return DumpString
+
+
+class tagMCActGodGiftPlayerInfo(Structure):
+ Head = tagHead()
+ ActNum = 0 #(BYTE ActNum)// 活动编号
+ ResetCount = 0 #(BYTE ResetCount)// 本次活动已重置次数
+ AwardItemCount = 0 #(BYTE AwardItemCount)// 本次奖池已抽中奖品个数,也代表本次奖池已抽奖次数
+ AwardItemList = list() #(vector<tagMCActGodGiftAwardItem> AwardItemList)// 本次奖池已抽中物品列表
+ data = None
+
+ def __init__(self):
+ self.Clear()
+ self.Head.Cmd = 0xAA
+ self.Head.SubCmd = 0x61
+ return
+
+ def ReadData(self, _lpData, _pos=0, _Len=0):
+ self.Clear()
+ _pos = self.Head.ReadData(_lpData, _pos)
+ self.ActNum,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.ResetCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.AwardItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ for i in range(self.AwardItemCount):
+ temAwardItemList = tagMCActGodGiftAwardItem()
+ _pos = temAwardItemList.ReadData(_lpData, _pos)
+ self.AwardItemList.append(temAwardItemList)
+ return _pos
+
+ def Clear(self):
+ self.Head = tagHead()
+ self.Head.Clear()
+ self.Head.Cmd = 0xAA
+ self.Head.SubCmd = 0x61
+ self.ActNum = 0
+ self.ResetCount = 0
+ self.AwardItemCount = 0
+ self.AwardItemList = list()
+ return
+
+ def GetLength(self):
+ length = 0
+ length += self.Head.GetLength()
+ length += 1
+ length += 1
+ length += 1
+ for i in range(self.AwardItemCount):
+ length += self.AwardItemList[i].GetLength()
+
+ return length
+
+ def GetBuffer(self):
+ data = ''
+ data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+ data = CommFunc.WriteBYTE(data, self.ActNum)
+ data = CommFunc.WriteBYTE(data, self.ResetCount)
+ data = CommFunc.WriteBYTE(data, self.AwardItemCount)
+ for i in range(self.AwardItemCount):
+ data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer())
+ return data
+
+ def OutputString(self):
+ DumpString = '''
+ Head:%s,
+ ActNum:%d,
+ ResetCount:%d,
+ AwardItemCount:%d,
+ AwardItemList:%s
+ '''\
+ %(
+ self.Head.OutputString(),
+ self.ActNum,
+ self.ResetCount,
+ self.AwardItemCount,
+ "..."
+ )
+ return DumpString
+
+
+m_NAtagMCActGodGiftPlayerInfo=tagMCActGodGiftPlayerInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActGodGiftPlayerInfo.Head.Cmd,m_NAtagMCActGodGiftPlayerInfo.Head.SubCmd))] = m_NAtagMCActGodGiftPlayerInfo
+
+
+#------------------------------------------------------
# AA 31 成长必买活动信息 #tagMCActGrowupBuyInfo
class tagMCActGrowupBuyCTGItem(Structure):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
index c69e5e7..637e926 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -1296,6 +1296,28 @@
("dict", "ItemAwardTimesTotalInfo", 0),
),
+ "ActGodGift":(
+ ("DWORD", "CfgID", 1),
+ ("char", "StartDate", 0),
+ ("char", "EndDate", 0),
+ ("BYTE", "IsDayReset", 0),
+ ("WORD", "LVLimit", 0),
+ ("list", "UseGoldList", 0),
+ ("list", "PrizeMoneyList", 0),
+ ("BYTE", "ResetLimitTimes", 0),
+ ("BYTE", "ResetCountMax", 0),
+ ("dict", "TemplateIDInfo", 0),
+ ),
+
+ "ActGodGiftAward":(
+ ("DWORD", "TemplateID", 1),
+ ("BYTE", "AwardLibType", 0),
+ ("BYTE", "UnlockAwardLimitTimes", 0),
+ ("BYTE", "ChooseItemCount", 0),
+ ("dict", "LibItemInfo", 0),
+ ("list", "NotifyItemNumList", 0),
+ ),
+
"ActHorsePetFeast":(
("DWORD", "CfgID", 1),
("char", "StartDate", 0),
@@ -4658,6 +4680,52 @@
def GetItemLayerLimitInfo(self): return self.ItemLayerLimitInfo # 物品产出奖池层限制 {物品ID:大于等于X层可产出, ...}
def GetItemAwardTimesTotalInfo(self): return self.ItemAwardTimesTotalInfo # 物品产出次数限制(所有层){物品ID:总产出次数, ...}
+# 天帝礼包活动时间表
+class IPY_ActGodGift():
+
+ def __init__(self):
+ self.CfgID = 0
+ self.StartDate = ""
+ self.EndDate = ""
+ self.IsDayReset = 0
+ self.LVLimit = 0
+ self.UseGoldList = []
+ self.PrizeMoneyList = []
+ self.ResetLimitTimes = 0
+ self.ResetCountMax = 0
+ self.TemplateIDInfo = {}
+ return
+
+ def GetCfgID(self): return self.CfgID # 配置ID
+ def GetStartDate(self): return self.StartDate # 开启日期
+ def GetEndDate(self): return self.EndDate # 结束日期
+ def GetIsDayReset(self): return self.IsDayReset # 是否每天重置
+ def GetLVLimit(self): return self.LVLimit # 限制等级
+ def GetUseGoldList(self): return self.UseGoldList # 抽奖消耗仙玉列表
+ def GetPrizeMoneyList(self): return self.PrizeMoneyList # 奖励灵石列表
+ def GetResetLimitTimes(self): return self.ResetLimitTimes # 至少抽几次可重置
+ def GetResetCountMax(self): return self.ResetCountMax # 可重置次数
+ def GetTemplateIDInfo(self): return self.TemplateIDInfo # 奖池模板信息 {(世界等级A,B):[模板编号列表, ...], ...}
+
+# 天帝礼包奖池表
+class IPY_ActGodGiftAward():
+
+ def __init__(self):
+ self.TemplateID = 0
+ self.AwardLibType = 0
+ self.UnlockAwardLimitTimes = 0
+ self.ChooseItemCount = 0
+ self.LibItemInfo = {}
+ self.NotifyItemNumList = []
+ return
+
+ def GetTemplateID(self): return self.TemplateID # 奖池模板编号
+ def GetAwardLibType(self): return self.AwardLibType # 奖励库类型
+ def GetUnlockAwardLimitTimes(self): return self.UnlockAwardLimitTimes # 抽X次后可产出本库
+ def GetChooseItemCount(self): return self.ChooseItemCount # 选择个数
+ def GetLibItemInfo(self): return self.LibItemInfo # 物品编号对应物品信息 {物品编号:[物品ID,个数,是否拍品,可选次数], ...} 0不限次数
+ def GetNotifyItemNumList(self): return self.NotifyItemNumList # 需要广播的编号列表
+
# 骑宠盛宴活动
class IPY_ActHorsePetFeast():
@@ -6433,6 +6501,10 @@
self.ipyActXianXiaMJLen = len(self.ipyActXianXiaMJCache)
self.ipyActXianXiaMJAwardCache = self.__LoadFileData("ActXianXiaMJAward", IPY_ActXianXiaMJAward)
self.ipyActXianXiaMJAwardLen = len(self.ipyActXianXiaMJAwardCache)
+ self.ipyActGodGiftCache = self.__LoadFileData("ActGodGift", IPY_ActGodGift)
+ self.ipyActGodGiftLen = len(self.ipyActGodGiftCache)
+ self.ipyActGodGiftAwardCache = self.__LoadFileData("ActGodGiftAward", IPY_ActGodGiftAward)
+ self.ipyActGodGiftAwardLen = len(self.ipyActGodGiftAwardCache)
self.ipyActHorsePetFeastCache = self.__LoadFileData("ActHorsePetFeast", IPY_ActHorsePetFeast)
self.ipyActHorsePetFeastLen = len(self.ipyActHorsePetFeastCache)
self.ipyActBossRebornCache = self.__LoadFileData("ActBossReborn", IPY_ActBossReborn)
@@ -7007,6 +7079,10 @@
def GetActXianXiaMJByIndex(self, index): return self.ipyActXianXiaMJCache[index]
def GetActXianXiaMJAwardCount(self): return self.ipyActXianXiaMJAwardLen
def GetActXianXiaMJAwardByIndex(self, index): return self.ipyActXianXiaMJAwardCache[index]
+ def GetActGodGiftCount(self): return self.ipyActGodGiftLen
+ def GetActGodGiftByIndex(self, index): return self.ipyActGodGiftCache[index]
+ def GetActGodGiftAwardCount(self): return self.ipyActGodGiftAwardLen
+ def GetActGodGiftAwardByIndex(self, index): return self.ipyActGodGiftAwardCache[index]
def GetActHorsePetFeastCount(self): return self.ipyActHorsePetFeastLen
def GetActHorsePetFeastByIndex(self, index): return self.ipyActHorsePetFeastCache[index]
def GetActBossRebornCount(self): return self.ipyActBossRebornLen
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
index 5aeb561..ff599fd 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
@@ -110,6 +110,7 @@
import PlayerActRechargePrize
import PlayerActGarbageSorting
import PlayerActXianXiaMJ
+import PlayerActGodGift
import PlayerActRechargeRebateGold
import PlayerActManyDayRecharge
import PlayerActSingleRecharge
@@ -826,6 +827,8 @@
PlayerActGarbageSorting.OnPlayerLogin(curPlayer)
# 仙匣秘境活动
PlayerActXianXiaMJ.OnPlayerLogin(curPlayer)
+ # 天帝礼包活动
+ PlayerActGodGift.OnPlayerLogin(curPlayer)
# 多日连充活动
PlayerActManyDayRecharge.OnPlayerLogin(curPlayer)
# 单笔累充活动
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActGodGift.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActGodGift.py
new file mode 100644
index 0000000..c675a90
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActGodGift.py
@@ -0,0 +1,478 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package Player.PlayerActGodGift
+#
+# @todo:天帝礼包活动
+# @author hxp
+# @date 2022-01-14
+# @version 1.0
+#
+# 详细描述: 天帝礼包活动
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2022-01-14 15:00"""
+#-------------------------------------------------------------------------------
+
+import PyGameData
+import ShareDefine
+import PlayerControl
+import IpyGameDataPY
+import ItemControler
+import ChPyNetSendPack
+import NetPackCommon
+import IPY_GameWorld
+import ItemCommon
+import GameWorld
+import ChConfig
+
+CostMoneyType = IPY_GameWorld.TYPE_Price_Gold_Money
+PrizeMoneyType = IPY_GameWorld.TYPE_Price_Gold_Paper
+
+def OnPlayerLogin(curPlayer):
+
+ for actInfo in PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_GodGift, {}).values():
+ actNum = actInfo.get(ShareDefine.ActKey_ActNum, 0)
+ __CheckPlayerGodGiftAction(curPlayer, actNum)
+
+ return
+
+def RefreshGodGiftActionInfo(actNum):
+ ## 收到GameServer同步的活动信息,刷新活动信息
+ playerManager = GameWorld.GetPlayerManager()
+ for index in xrange(playerManager.GetPlayerCount()):
+ curPlayer = playerManager.GetPlayerByIndex(index)
+ if curPlayer.GetID() == 0:
+ continue
+ __CheckPlayerGodGiftAction(curPlayer, actNum)
+ return
+
+def __CheckPlayerGodGiftAction(curPlayer, actNum):
+ ## 检查玩家活动数据信息
+
+ playerID = curPlayer.GetPlayerID()
+ actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_GodGift, actNum)
+ actID = actInfo.get(ShareDefine.ActKey_ID, 0)
+ state = actInfo.get(ShareDefine.ActKey_State, 0)
+ cfgID = actInfo.get(ShareDefine.ActKey_CfgID, 0)
+
+ playerActID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GodGiftID % actNum) # 玩家身上的活动ID
+
+ # 活动ID 相同的话不处理
+ if actID == playerActID:
+ GameWorld.DebugLog("天帝礼包活动ID不变,不处理!actNum=%s,actID=%s" % (actNum, actID), playerID)
+ else:
+ actWorldLV = actInfo.get(ShareDefine.ActKey_WorldLV, 0)
+ templateID = __GetActTemplateID(actInfo)
+ GameWorld.DebugLog("天帝礼包重置! actNum=%s,actID=%s,playerActID=%s,state=%s,cfgID=%s,actWorldLV=%s,templateID=%s"
+ % (actNum, actID, playerActID, state, cfgID, actWorldLV, templateID), playerID)
+
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GodGiftID % actNum, actID)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GodGiftWorldLV % actNum, actWorldLV)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GodGiftResetCount % actNum, 0)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GodGiftAwardPool % actNum, 0)
+
+ awardIpyDataList = IpyGameDataPY.GetIpyGameDataList("ActGodGiftAward", templateID) if templateID else []
+ if awardIpyDataList:
+ for awardIpyData in awardIpyDataList:
+ libType = awardIpyData.GetAwardLibType()
+ libItemInfoDict = awardIpyData.GetLibItemInfo()
+ for num in libItemInfoDict.keys():
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GodGiftItemState % (actNum, libType, num), 0)
+
+ if state:
+ Sync_GodGifActionInfo(curPlayer, actNum)
+ Sync_GodGiftPlayerInfo(curPlayer, actNum)
+
+ return True
+
+def __GetActTemplateID(actInfo):
+ cfgID = actInfo.get(ShareDefine.ActKey_CfgID, 0)
+ dayIndex = actInfo.get(ShareDefine.ActKey_DayIndex, 0)
+ worldLV = actInfo.get(ShareDefine.ActKey_WorldLV, 0)
+ if cfgID == None or dayIndex == None:
+ return 0
+ ipyData = IpyGameDataPY.GetIpyGameData("ActGodGift", cfgID)
+ if not ipyData:
+ return 0
+ templateIDInfo = ipyData.GetTemplateIDInfo()
+ templateIDList = GameWorld.GetDictValueByRangeKey(templateIDInfo, worldLV)
+ if not templateIDList:
+ return 0
+ templateID = templateIDList[-1] if dayIndex >= len(templateIDList) else templateIDList[dayIndex]
+ return templateID
+
+def GetGodGiftItemState(curPlayer, actNum, libType, num):
+ itemState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GodGiftItemState % (actNum, libType, num))
+ chooseTimes = itemState / 100
+ isChoose = (itemState - chooseTimes * 100) / 10
+ isGot = itemState % 10
+ return chooseTimes, isChoose, isGot
+
+def SetGodGiftItemState(curPlayer, actNum, libType, num, chooseTimes, isChoose, isGot):
+ updItemState = chooseTimes * 100 + isChoose * 10 + isGot
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GodGiftItemState % (actNum, libType, num), updItemState)
+ return updItemState
+
+
+#// AA 20 天帝礼包选择物品 #tagCMActGodGiftChooseItem
+#
+#struct tagCMActGodGiftChooseItemInfo
+#{
+# BYTE ItemLibType; //物品库类型
+# BYTE Count; //选择个数
+# BYTE ItemNumList[Count]; //选择物品编号列表
+#};
+#
+#struct tagCMActGodGiftChooseItem
+#{
+# tagHead Head;
+# BYTE ActNum; //活动编号
+# BYTE ChooseLibCount; //选择库个数
+# tagCMActGodGiftChooseItemInfo ChooseItemList[ChooseLibCount]; //选择库物品信息列表
+#};
+def OnActGodGiftChooseItem(index, clientData, tick):
+ curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
+ playerID = curPlayer.GetPlayerID()
+ actNum = clientData.ActNum
+ chooseItemNumDict = {info.ItemLibType:info.ItemNumList for info in clientData.ChooseItemList}
+ actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_GodGift, actNum)
+ state = actInfo.get(ShareDefine.ActKey_State, 0)
+ cfgID = actInfo.get(ShareDefine.ActKey_CfgID, 0)
+ templateID = __GetActTemplateID(actInfo)
+ GameWorld.DebugLog("天帝礼包选择物品: actNum=%s,state=%s,cfgID=%s,templateID=%s,chooseItemNumDict=%s"
+ % (actNum, state, cfgID, templateID, chooseItemNumDict), playerID)
+ if not state or not cfgID or not templateID:
+ GameWorld.DebugLog("天帝礼包活动状态异常!", playerID)
+ return
+
+ if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GodGiftAwardPool % actNum):
+ GameWorld.DebugLog("天帝礼包奖池已经选择完毕,无法重复选择!", playerID)
+ return
+
+ awardIpyDataList = IpyGameDataPY.GetIpyGameDataList("ActGodGiftAward", templateID) if templateID else []
+ if not awardIpyDataList:
+ return
+
+ chooseOKLibList = []
+ for awardIpyData in awardIpyDataList:
+ libType = awardIpyData.GetAwardLibType()
+ chooseItemNumList = chooseItemNumDict.get(libType, [])
+
+ libItemInfoDict = awardIpyData.GetLibItemInfo()
+ needChooseCount = awardIpyData.GetChooseItemCount()
+ hadChooseNumList, canChooseNumList = [], []
+ for num, itemInfo in libItemInfoDict.items():
+ canChooseTimes = itemInfo[4]
+ chooseTimes, isChoose, _ = GetGodGiftItemState(curPlayer, actNum, libType, num)
+ if isChoose:
+ hadChooseNumList.append(num)
+ elif not canChooseTimes or chooseTimes < canChooseTimes:
+ canChooseNumList.append(num)
+
+ GameWorld.DebugLog("天帝礼包选择库奖品! libType=%s,chooseItemNumList=%s" % (libType, chooseItemNumList), playerID)
+ GameWorld.DebugLog(" needChooseCount=%s,hadChooseNumList=%s,canChooseNumList=%s" % (needChooseCount, hadChooseNumList, str(canChooseNumList)), playerID)
+ hadChooseCount = len(hadChooseNumList)
+ if hadChooseCount >= needChooseCount:
+ GameWorld.DebugLog(" 该库已超过选择完毕! libType=%s" % libType, playerID)
+ chooseOKLibList.append(libType)
+ continue
+
+ for num in chooseItemNumList:
+ if num in hadChooseNumList:
+ GameWorld.DebugLog(" 已被选择! libType=%s,num=%s" % (libType, num), playerID)
+ continue
+ if num not in canChooseNumList:
+ GameWorld.DebugLog(" 不可选择! libType=%s,num=%s not in %s" % (libType, num, canChooseNumList), playerID)
+ continue
+
+ chooseTimes, isChoose, isGot = GetGodGiftItemState(curPlayer, actNum, libType, num)
+ chooseTimes += 1
+ isChoose = 1
+ updItemState = SetGodGiftItemState(curPlayer, actNum, libType, num, chooseTimes, isChoose, isGot)
+ GameWorld.DebugLog(" 选择奖品! libType=%s,num=%s,chooseTimes=%s,isChoose=%s,isGot=%s,updItemState=%s"
+ % (libType, num, chooseTimes, isChoose, isGot, updItemState), playerID)
+
+ canChooseNumList.remove(num)
+ hadChooseCount += 1
+ if hadChooseCount >= needChooseCount or not canChooseNumList:
+ chooseOKLibList.append(libType)
+ break
+
+ if chooseOKLibList and len(chooseOKLibList) == len(awardIpyDataList):
+ GameWorld.DebugLog("天帝礼包生成奖池OK!", playerID)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GodGiftAwardPool % actNum, 1)
+ else:
+ GameWorld.DebugLog("天帝礼包奖池未选择完毕! chooseOKLibList=%s" % chooseOKLibList, playerID)
+
+ Sync_GodGifActionInfo(curPlayer, actNum)
+ return
+
+#// AA 21 天帝礼包抽奖 #tagCMActGodGiftlottery
+#
+#struct tagCMActGodGiftlottery
+#{
+# tagHead Head;
+# BYTE ActNum; //活动编号
+#};
+def OnActGodGiftlottery(index, clientData, tick):
+ curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
+ playerID = curPlayer.GetPlayerID()
+ actNum = clientData.ActNum
+
+ actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_GodGift, actNum)
+ state = actInfo.get(ShareDefine.ActKey_State, 0)
+ cfgID = actInfo.get(ShareDefine.ActKey_CfgID, 0)
+ templateID = __GetActTemplateID(actInfo)
+ GameWorld.DebugLog("天帝礼包活动抽奖: actNum=%s,state=%s,cfgID=%s,templateID=%s" % (actNum, state, cfgID, templateID), playerID)
+ if not state or not cfgID or not templateID:
+ GameWorld.DebugLog("天帝礼包活动状态异常!", playerID)
+ return
+
+ if not curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GodGiftAwardPool % actNum):
+ GameWorld.DebugLog("天帝礼包奖池未选择完毕,无法抽奖!", playerID)
+ return
+
+ ipyData = IpyGameDataPY.GetIpyGameData("ActGodGift", cfgID)
+ if not ipyData:
+ return
+ costMoneyValueList = ipyData.GetUseGoldList()
+ prizeMoneyValueList = ipyData.GetPrizeMoneyList()
+
+ awardIpyDataList = IpyGameDataPY.GetIpyGameDataList("ActGodGiftAward", templateID) if templateID else []
+ if not awardIpyDataList:
+ return
+
+ gotAwardList = [] # 已抽奖品次数
+ randItemWeightList = []
+ for awardIpyData in awardIpyDataList:
+ libType = awardIpyData.GetAwardLibType()
+ libItemInfoDict = awardIpyData.GetLibItemInfo()
+ notifyItemNumList = awardIpyData.GetNotifyItemNumList()
+
+ for num, itemInfo in libItemInfoDict.items():
+ weight, itemID, itemCount, isBind = itemInfo[:4]
+ chooseTimes, isChoose, isGot = GetGodGiftItemState(curPlayer, actNum, libType, num)
+ if isGot:
+ gotAwardList.append([libType, num])
+ continue
+ if not isChoose:
+ continue
+ isNotify = num in notifyItemNumList
+ randItemWeightList.append([weight, libType, num, itemID, itemCount, isBind, chooseTimes, isChoose, isGot, isNotify])
+
+ if not randItemWeightList:
+ GameWorld.DebugLog("本次奖池已抽完!", playerID)
+ return
+
+ awardCount = len(gotAwardList) # 已抽奖次数
+
+ costMoneyValue = costMoneyValueList[awardCount] if awardCount < len(costMoneyValueList) else costMoneyValueList[-1]
+ prizeMoneyValue = prizeMoneyValueList[awardCount] if awardCount < len(prizeMoneyValueList) else prizeMoneyValueList[-1]
+
+ if not PlayerControl.HaveMoney(curPlayer, CostMoneyType, costMoneyValue):
+ return
+
+ if not ItemCommon.CheckPackHasSpace(curPlayer, IPY_GameWorld.rptItem, True):
+ return
+
+ GameWorld.DebugLog(" 已抽库,编号列表: awardCount=%s, %s" % (awardCount, gotAwardList), playerID)
+ GameWorld.DebugLog(" costMoneyValue=%s,prizeMoneyValue=%s" % (costMoneyValue, prizeMoneyValue), playerID)
+ GameWorld.DebugLog(" randItemWeightList=%s" % randItemWeightList, playerID)
+ randItemInfo = GameWorld.GetResultByWeightList(randItemWeightList)
+ if not randItemInfo:
+ return
+ libType, num, itemID, itemCount, isBind, chooseTimes, isChoose, isGot, isNotify = randItemInfo
+ GameWorld.DebugLog(" 抽中: libType=%s,num=%s,itemID=%s,itemCount=%s,isBind=%s,chooseTimes=%s,isChoose=%s,isGot=%s"
+ % (libType, num, itemID, itemCount, isBind, chooseTimes, isChoose, isGot), playerID)
+
+ infoDict = {"actNum":actNum, "awardCount":awardCount}
+ if not PlayerControl.PayMoney(curPlayer, CostMoneyType, costMoneyValue, ChConfig.Def_Cost_ActGodGift, infoDict):
+ return
+
+ isGot = 1
+ updItemState = SetGodGiftItemState(curPlayer, actNum, libType, num, chooseTimes, isChoose, isGot)
+ GameWorld.DebugLog(" 更新库编号物品状态: libType=%s,num=%s,updItemState=%s" % (libType, num, updItemState), playerID)
+ Sync_GodGiftPlayerInfo(curPlayer, actNum)
+
+ addDataDict = {"actNum":actNum, "awardCount":awardCount}
+ PlayerControl.GiveMoney(curPlayer, PrizeMoneyType, prizeMoneyValue, ChConfig.Def_GiveMoney_ActGodGift, addDataDict)
+
+ if ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, isBind, [IPY_GameWorld.rptItem], event=["ActGodGift", False, {}]):
+ if isNotify:
+ PlayerControl.WorldNotify(0, "ActGodGiftNotify", [curPlayer.GetPlayerName(), itemID, itemCount])
+
+ if len(randItemWeightList) == 1:
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GodGiftAwardPool % actNum, 2)
+ GameWorld.DebugLog(" 奖池已被抽完!", playerID)
+
+ return
+
+#// AA 22 天帝礼包重置 #tagCMActGodGiftReset
+#
+#struct tagCMActGodGiftReset
+#{
+# tagHead Head;
+# BYTE ActNum; //活动编号
+#};
+def OnActGodGiftReset(index, clientData, tick):
+ curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
+ playerID = curPlayer.GetPlayerID()
+ actNum = clientData.ActNum
+
+ actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_GodGift, actNum)
+ state = actInfo.get(ShareDefine.ActKey_State, 0)
+ cfgID = actInfo.get(ShareDefine.ActKey_CfgID, 0)
+ templateID = __GetActTemplateID(actInfo)
+ GameWorld.DebugLog("天帝礼包重置奖池: actNum=%s,state=%s,cfgID=%s,templateID=%s" % (actNum, state, cfgID, templateID), playerID)
+ if not state or not cfgID or not templateID:
+ GameWorld.DebugLog("天帝礼包活动状态异常!", playerID)
+ return
+
+ ipyData = IpyGameDataPY.GetIpyGameData("ActGodGift", cfgID)
+ if not ipyData:
+ return
+ resetLimitTimes = ipyData.GetResetLimitTimes()
+ resetCountMax = ipyData.GetResetCountMax()
+
+ resetCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GodGiftResetCount % actNum)
+ if resetCount >= resetCountMax:
+ GameWorld.DebugLog("天帝礼包已超过最大重置奖池次数! cfgID=%s,resetCount=%s >= %s" % (cfgID, resetCount, resetCountMax), playerID)
+ return
+
+ awardIpyDataList = IpyGameDataPY.GetIpyGameDataList("ActGodGiftAward", templateID) if templateID else []
+ if not awardIpyDataList:
+ return
+
+ if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GodGiftAwardPool % actNum) != 2:
+ awardCount = 0
+ for awardIpyData in awardIpyDataList:
+ libType = awardIpyData.GetAwardLibType()
+ libItemInfoDict = awardIpyData.GetLibItemInfo()
+ for num in libItemInfoDict.keys():
+ _, _, isGot = GetGodGiftItemState(curPlayer, actNum, libType, num)
+ if isGot:
+ awardCount += 1
+
+ if awardCount < resetLimitTimes:
+ GameWorld.DebugLog("天帝礼包已抽奖次数不足,无法重置奖池! cfgID=%s,awardCount=%s < %s" % (cfgID, awardCount, resetLimitTimes), playerID)
+ return
+ else:
+ GameWorld.DebugLog("奖池已抽完,重置时不需要判断次数!", playerID)
+
+ # 重置奖池
+ for awardIpyData in awardIpyDataList:
+ libType = awardIpyData.GetAwardLibType()
+ libItemInfoDict = awardIpyData.GetLibItemInfo()
+ for num in libItemInfoDict.keys():
+ chooseTimes, isChoose, isGot = GetGodGiftItemState(curPlayer, actNum, libType, num)
+ if not isChoose and not isGot:
+ continue
+ isChoose, isGot = 0, 0
+ updItemState = SetGodGiftItemState(curPlayer, actNum, libType, num, chooseTimes, isChoose, isGot)
+ GameWorld.DebugLog(" 重置库奖品状态: libType=%s,num=%s,chooseTimes=%s,updItemState=%s"
+ % (libType, num, chooseTimes, updItemState), playerID)
+
+ updResetCount = resetCount + 1
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GodGiftResetCount % actNum, updResetCount)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GodGiftAwardPool % actNum, 0)
+ GameWorld.DebugLog(" 重置奖池成功: updResetCount=%s" % updResetCount, playerID)
+
+ Sync_GodGifActionInfo(curPlayer, actNum)
+ Sync_GodGiftPlayerInfo(curPlayer, actNum)
+ return
+
+def Sync_GodGifActionInfo(curPlayer, actNum):
+ actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_GodGift, actNum)
+ state = actInfo.get(ShareDefine.ActKey_State, 0)
+ cfgID = actInfo.get(ShareDefine.ActKey_CfgID, 0)
+ if not state or not cfgID:
+ return
+
+ templateID = __GetActTemplateID(actInfo)
+ if not templateID:
+ return
+
+ ipyData = IpyGameDataPY.GetIpyGameData("ActGodGift", cfgID)
+ if not ipyData:
+ return 0
+
+ startDateStr, endDateStr = GameWorld.GetOperationActionDateStr(ipyData)
+ clientPack = ChPyNetSendPack.tagMCActGodGiftInfo()
+ clientPack.ActNum = actNum
+ clientPack.StartDate = startDateStr
+ clientPack.EndtDate = endDateStr
+ clientPack.IsDayReset = ipyData.GetIsDayReset()
+ clientPack.LimitLV = ipyData.GetLVLimit()
+ clientPack.CostMoneyType = CostMoneyType
+ clientPack.CostMoneyValueList = ipyData.GetUseGoldList()
+ clientPack.CostMoneyValueCount = len(clientPack.CostMoneyValueList)
+ clientPack.PrizeMoneyType = PrizeMoneyType
+ clientPack.PrizeMoneyValueList = ipyData.GetPrizeMoneyList()
+ clientPack.PrizeMoneyValueCount = len(clientPack.PrizeMoneyValueList)
+ clientPack.ResetLimitTimes = ipyData.GetResetLimitTimes()
+ clientPack.ResetCountMax = ipyData.GetResetCountMax()
+ clientPack.ItemLibList = []
+ awardIpyDataList = IpyGameDataPY.GetIpyGameDataList("ActGodGiftAward", templateID) if templateID else []
+ if awardIpyDataList:
+ for awardIpyData in awardIpyDataList:
+ libType = awardIpyData.GetAwardLibType()
+ libItemInfoDict = awardIpyData.GetLibItemInfo()
+
+ itemLib = ChPyNetSendPack.tagMCActGodGiftItemLib()
+ itemLib.ItemLibType = libType
+ itemLib.ChooseItemList = []
+ for num, itemInfo in libItemInfoDict.items():
+ _, itemID, itemCount, isBind, canChooseTimes = itemInfo
+ chooseTimes, isChoose, _ = GetGodGiftItemState(curPlayer, actNum, libType, num)
+ item = ChPyNetSendPack.tagMCActGodGiftItem()
+ item.ItemNum = num
+ item.ItemID = itemID
+ item.ItemCount = itemCount
+ item.IsBind = isBind
+ item.CanChooseTimes = canChooseTimes
+ item.ChooseTimes = chooseTimes
+ item.IsChoose = isChoose
+ itemLib.ChooseItemList.append(item)
+
+ itemLib.ChooseItemCount = len(itemLib.ChooseItemList)
+ clientPack.ItemLibList.append(itemLib)
+
+ clientPack.ItemLibCount = len(clientPack.ItemLibList)
+ clientPack.IsAwardPoolOK = 1 if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GodGiftAwardPool % actNum) == 1 else 0
+ NetPackCommon.SendFakePack(curPlayer, clientPack)
+ return
+
+def Sync_GodGiftPlayerInfo(curPlayer, actNum):
+ actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_GodGift, actNum)
+ state = actInfo.get(ShareDefine.ActKey_State, 0)
+ if not state:
+ return
+
+ templateID = __GetActTemplateID(actInfo)
+ if not templateID:
+ return
+
+ clientPack = ChPyNetSendPack.tagMCActGodGiftPlayerInfo()
+ clientPack.ActNum = actNum
+ clientPack.ResetCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GodGiftResetCount % actNum)
+ clientPack.AwardItemList = []
+
+ awardIpyDataList = IpyGameDataPY.GetIpyGameDataList("ActGodGiftAward", templateID) if templateID else []
+ if awardIpyDataList:
+ for awardIpyData in awardIpyDataList:
+ libType = awardIpyData.GetAwardLibType()
+ libItemInfoDict = awardIpyData.GetLibItemInfo()
+ for num in libItemInfoDict.keys():
+ _, _, isGot = GetGodGiftItemState(curPlayer, actNum, libType, num)
+ if not isGot:
+ continue
+ awardItem = ChPyNetSendPack.tagMCActGodGiftAwardItem()
+ awardItem.ItemLibType = libType
+ awardItem.ItemNum = num
+ clientPack.AwardItemList.append(awardItem)
+
+ clientPack.AwardItemCount = len(clientPack.AwardItemList)
+ NetPackCommon.SendFakePack(curPlayer, clientPack)
+ return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
index 3dbc8df..9581f80 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
@@ -82,6 +82,7 @@
import PlayerActTotalRecharge
import PlayerActGarbageSorting
import PlayerActXianXiaMJ
+import PlayerActGodGift
import PlayerActRechargeRebateGold
import PlayerActManyDayRecharge
import PlayerActSingleRecharge
@@ -1400,6 +1401,9 @@
elif actionName == ShareDefine.OperationActionName_XianXiaMJ:
PlayerActXianXiaMJ.RefreshXianXiaMJActionInfo(actNum)
+ elif actionName == ShareDefine.OperationActionName_GodGift:
+ PlayerActGodGift.RefreshGodGiftActionInfo(actNum)
+
elif actionName == ShareDefine.OperationActionName_ManyDayRecharge:
PlayerActManyDayRecharge.RefreshManyDayRechargeActionInfo(actNum)
--
Gitblit v1.8.0