From 00329abebc6dd6cb0e011531c448c3d96c0edf95 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期三, 27 一月 2021 16:51:48 +0800
Subject: [PATCH] 8716 【主干】【后端】【BT2】H.活动-节日祈愿(增加节日登录奖励活动);

---
 ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py                                  |   32 ++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py               |    6 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py           |  183 +++++++++++++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py             |   49 ++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFeastLogin.py   |  188 +++++++++++++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py           |    6 
 PySysDB/PySysDBPY.h                                                                              |   19 +
 ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py                                    |    6 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py |    4 
 ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py                                |  183 +++++++++++++++
 PySysDB/PySysDBG.h                                                                               |   12 +
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py                  |    7 
 12 files changed, 692 insertions(+), 3 deletions(-)

diff --git a/PySysDB/PySysDBG.h b/PySysDB/PySysDBG.h
index 58f2a85..024b67e 100644
--- a/PySysDB/PySysDBG.h
+++ b/PySysDB/PySysDBG.h
@@ -270,6 +270,18 @@
 	WORD		LVLimit;	//限制等级
 };
 
+//节日登录奖励时间表
+
+struct tagActFeastLogin
+{
+	DWORD		_CfgID;	//配置ID
+	char		ActMark;	//活动组标记
+	list		PlatformList;	//活动平台列表["平台A", "平台A", ...],配[]代表所有
+	list		ServerGroupIDList;	//服务器ID列表
+	char		StartDate;	//开启日期
+	char		EndDate;	//结束日期
+};
+
 //等级开启功能 #tagFuncOpenLV
 
 struct	tagFuncOpenLV
diff --git a/PySysDB/PySysDBPY.h b/PySysDB/PySysDBPY.h
index d3f5c7a..e751ab6 100644
--- a/PySysDB/PySysDBPY.h
+++ b/PySysDB/PySysDBPY.h
@@ -1851,6 +1851,25 @@
 	char		Reward;	//奖励物品
 };
 
+//节日登录奖励时间表
+
+struct tagActFeastLogin
+{
+	DWORD		_CfgID;	//配置ID
+	char		StartDate;	//开启日期
+	char		EndDate;	//结束日期
+	dict		TemplateIDInfo;	//模板信息 {(世界等级A,B):奖励模板编号, ...}
+};
+
+//节日登录奖励模板表
+
+struct tagActFeastLoginAward
+{
+	BYTE		_TemplateID;	//模板ID
+	BYTE		DayNum;	//第X天从1开始
+	list		LoginAwardItemList;	//奖励列表[[物品ID,个数,是否拍品], ...]
+};
+
 //诛仙BOSS表
 
 struct tagZhuXianBoss
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
index a1fbe33..fc031ef 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
@@ -27243,6 +27243,189 @@
 
 
 #------------------------------------------------------
+# AA 42 节日登录奖励活动信息 #tagMCFeastLoginInfo
+
+class  tagMCFeastLoginDayAwardItem(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("ItemID", c_int),    
+                  ("ItemCount", c_ushort),    
+                  ("IsBind", c_ubyte),    
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.ItemID = 0
+        self.ItemCount = 0
+        self.IsBind = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCFeastLoginDayAwardItem)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AA 42 节日登录奖励活动信息 //tagMCFeastLoginInfo:
+                                ItemID:%d,
+                                ItemCount:%d,
+                                IsBind:%d
+                                '''\
+                                %(
+                                self.ItemID,
+                                self.ItemCount,
+                                self.IsBind
+                                )
+        return DumpString
+
+
+class  tagMCFeastLoginDayAward(Structure):
+    DayNum = 0    #(BYTE DayNum)//天编号,从1开始,活动第X天只能领对应第X天的奖励
+    AwardCount = 0    #(BYTE AwardCount)
+    AwardItemList = list()    #(vector<tagMCFeastLoginDayAwardItem> AwardItemList)// 奖励物品列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.DayNum,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.AwardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.AwardCount):
+            temAwardItemList = tagMCFeastLoginDayAwardItem()
+            _pos = temAwardItemList.ReadData(_lpData, _pos)
+            self.AwardItemList.append(temAwardItemList)
+        return _pos
+
+    def Clear(self):
+        self.DayNum = 0
+        self.AwardCount = 0
+        self.AwardItemList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 1
+        length += 1
+        for i in range(self.AwardCount):
+            length += self.AwardItemList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteBYTE(data, self.DayNum)
+        data = CommFunc.WriteBYTE(data, self.AwardCount)
+        for i in range(self.AwardCount):
+            data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                DayNum:%d,
+                                AwardCount:%d,
+                                AwardItemList:%s
+                                '''\
+                                %(
+                                self.DayNum,
+                                self.AwardCount,
+                                "..."
+                                )
+        return DumpString
+
+
+class  tagMCFeastLoginInfo(Structure):
+    Head = tagHead()
+    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
+    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
+    DayCount = 0    #(BYTE DayCount)// 总共几天
+    DayAwardList = list()    #(vector<tagMCFeastLoginDayAward> DayAwardList)//登录天奖励列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x42
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.DayCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.DayCount):
+            temDayAwardList = tagMCFeastLoginDayAward()
+            _pos = temDayAwardList.ReadData(_lpData, _pos)
+            self.DayAwardList.append(temDayAwardList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x42
+        self.StartDate = ""
+        self.EndtDate = ""
+        self.DayCount = 0
+        self.DayAwardList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 10
+        length += 10
+        length += 1
+        for i in range(self.DayCount):
+            length += self.DayAwardList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteString(data, 10, self.StartDate)
+        data = CommFunc.WriteString(data, 10, self.EndtDate)
+        data = CommFunc.WriteBYTE(data, self.DayCount)
+        for i in range(self.DayCount):
+            data = CommFunc.WriteString(data, self.DayAwardList[i].GetLength(), self.DayAwardList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                StartDate:%s,
+                                EndtDate:%s,
+                                DayCount:%d,
+                                DayAwardList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.StartDate,
+                                self.EndtDate,
+                                self.DayCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCFeastLoginInfo=tagMCFeastLoginInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFeastLoginInfo.Head.Cmd,m_NAtagMCFeastLoginInfo.Head.SubCmd))] = m_NAtagMCFeastLoginInfo
+
+
+#------------------------------------------------------
 # AA 20 节日巡礼活动信息 #tagMCFeastWeekPartyInfo
 
 class  tagMCFeastWeekPartyItem(Structure):
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py b/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py
index d4a76b4..66bde7d 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py
@@ -238,6 +238,15 @@
                         ("WORD", "LVLimit", 0),
                         ),
 
+                "ActFeastLogin":(
+                        ("DWORD", "CfgID", 1),
+                        ("char", "ActMark", 0),
+                        ("list", "PlatformList", 0),
+                        ("list", "ServerGroupIDList", 0),
+                        ("char", "StartDate", 0),
+                        ("char", "EndDate", 0),
+                        ),
+
                 "FuncOpenLV":(
                         ("DWORD", "FuncId", 1),
                         ("DWORD", "LimitLV", 0),
@@ -1107,6 +1116,25 @@
     def GetResetType(self): return self.ResetType # 重置类型,0-0点重置;1-5点重置
     def GetRedPacketIDList(self): return self.RedPacketIDList # 每日对应红包ID列表[[第一天红包ID列表], ...]
     def GetLVLimit(self): return self.LVLimit # 限制等级
+
+# 节日登录奖励时间表
+class IPY_ActFeastLogin():
+    
+    def __init__(self):
+        self.CfgID = 0
+        self.ActMark = ""
+        self.PlatformList = []
+        self.ServerGroupIDList = []
+        self.StartDate = ""
+        self.EndDate = ""
+        return
+        
+    def GetCfgID(self): return self.CfgID # 配置ID
+    def GetActMark(self): return self.ActMark # 活动组标记
+    def GetPlatformList(self): return self.PlatformList # 活动平台列表["平台A", "平台A", ...],配[]代表所有
+    def GetServerGroupIDList(self): return self.ServerGroupIDList # 服务器ID列表
+    def GetStartDate(self): return self.StartDate # 开启日期
+    def GetEndDate(self): return self.EndDate # 结束日期
 
 # 等级开启功能
 class IPY_FuncOpenLV():
@@ -2083,6 +2111,8 @@
         self.ipyFamilyRedPackLen = len(self.ipyFamilyRedPackCache)
         self.ipyActFeastRedPacketCache = self.__LoadFileData("ActFeastRedPacket", IPY_ActFeastRedPacket)
         self.ipyActFeastRedPacketLen = len(self.ipyActFeastRedPacketCache)
+        self.ipyActFeastLoginCache = self.__LoadFileData("ActFeastLogin", IPY_ActFeastLogin)
+        self.ipyActFeastLoginLen = len(self.ipyActFeastLoginCache)
         self.ipyFuncOpenLVCache = self.__LoadFileData("FuncOpenLV", IPY_FuncOpenLV)
         self.ipyFuncOpenLVLen = len(self.ipyFuncOpenLVCache)
         self.ipyChinNPCCache = self.__LoadFileData("ChinNPC", IPY_ChinNPC)
@@ -2371,6 +2401,8 @@
     def GetFamilyRedPackByIndex(self, index): return self.ipyFamilyRedPackCache[index]
     def GetActFeastRedPacketCount(self): return self.ipyActFeastRedPacketLen
     def GetActFeastRedPacketByIndex(self, index): return self.ipyActFeastRedPacketCache[index]
+    def GetActFeastLoginCount(self): return self.ipyActFeastLoginLen
+    def GetActFeastLoginByIndex(self, index): return self.ipyActFeastLoginCache[index]
     def GetFuncOpenLVCount(self): return self.ipyFuncOpenLVLen
     def GetFuncOpenLVByIndex(self, index): return self.ipyFuncOpenLVCache[index]
     def GetChinNPCCount(self): return self.ipyChinNPCLen
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
index 60cc4ec..232d6ef 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
@@ -224,9 +224,12 @@
 OperationActionName_RechargePrize = "ActRechargePrize" # 充值返利活动
 OperationActionName_RechargeRebateGold = "ActRechargeRebateGold" # 充值返利仙玉活动(活动结束邮件发放,节日活动)
 OperationActionName_GrowupBuy = "ActGrowupBuy" # 成长必买活动
+OperationActionName_FeastLogin = "ActFeastLogin" # 节日登录活动
 #节日活动类型列表 - 该类型无视开服天,日期到了就开启
 FeastOperationActionNameList = [OperationActionName_FeastWeekParty, OperationActionName_FeastRedPacket,
-                                OperationActionName_RechargeRebateGold, OperationActionName_GrowupBuy]
+                                OperationActionName_RechargeRebateGold, OperationActionName_GrowupBuy,
+                                OperationActionName_FeastLogin,
+                                ]
 #所有的运营活动列表,含节日活动
 OperationActionNameList = [OperationActionName_ExpRate, OperationActionName_CostRebate, 
                            OperationActionName_BossReborn,OperationActionName_SpringSale, 
@@ -247,6 +250,7 @@
                                    OperationActionName_DailyGiftbag, OperationActionName_GrowupBuy,
                                    OperationActionName_WeekParty,
                                    OperationActionName_CollectWords, OperationActionName_CollectWords2,
+                                   OperationActionName_FeastLogin,
                                    ]
 
 #跨服运营活动表名定义
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index c9d865d..1e72123 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -3825,6 +3825,10 @@
 Def_PDict_LuckyTreasureFree = "LuckyTreasureFree" #是否免费过
 Def_PDict_LuckyTreasurePoint = "LuckyTreasurePoint" #幸运值
 Def_PDict_LuckyTreasureCnt = "LuckyTreasureCnt" #鉴宝次数
+
+#节日登录活动
+Def_PDict_FeastLoginID = "FeastLoginID"  # 玩家身上的活动ID,唯一标识,取活动开始日期time值
+Def_PDict_FeastLoginAwardState = "FeastLoginAwardState"  # 活动登录领奖记录,按天编号-1为索引进行二进制位运算记录当天是否已领奖
 #-------------------------------------------------------------------------------
 
 #开服活动,Def_PDictType_OpenServerCampaign
@@ -5363,7 +5367,8 @@
 Def_RewardType_ShareGame, #每日分享奖励34
 Def_RewardType_GoodGame, #游戏好评奖励35
 Def_RewardType_CACTGBillboardDabiao, #跨服充值排行活动达标奖励36
-)= range(37)
+Def_RewardType_FeastLogin, #节日登录奖励37
+)= range(38)
 
 
 #boss复活相关活动定义
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
index a1fbe33..fc031ef 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -27243,6 +27243,189 @@
 
 
 #------------------------------------------------------
+# AA 42 节日登录奖励活动信息 #tagMCFeastLoginInfo
+
+class  tagMCFeastLoginDayAwardItem(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("ItemID", c_int),    
+                  ("ItemCount", c_ushort),    
+                  ("IsBind", c_ubyte),    
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.ItemID = 0
+        self.ItemCount = 0
+        self.IsBind = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCFeastLoginDayAwardItem)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AA 42 节日登录奖励活动信息 //tagMCFeastLoginInfo:
+                                ItemID:%d,
+                                ItemCount:%d,
+                                IsBind:%d
+                                '''\
+                                %(
+                                self.ItemID,
+                                self.ItemCount,
+                                self.IsBind
+                                )
+        return DumpString
+
+
+class  tagMCFeastLoginDayAward(Structure):
+    DayNum = 0    #(BYTE DayNum)//天编号,从1开始,活动第X天只能领对应第X天的奖励
+    AwardCount = 0    #(BYTE AwardCount)
+    AwardItemList = list()    #(vector<tagMCFeastLoginDayAwardItem> AwardItemList)// 奖励物品列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.DayNum,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.AwardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.AwardCount):
+            temAwardItemList = tagMCFeastLoginDayAwardItem()
+            _pos = temAwardItemList.ReadData(_lpData, _pos)
+            self.AwardItemList.append(temAwardItemList)
+        return _pos
+
+    def Clear(self):
+        self.DayNum = 0
+        self.AwardCount = 0
+        self.AwardItemList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 1
+        length += 1
+        for i in range(self.AwardCount):
+            length += self.AwardItemList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteBYTE(data, self.DayNum)
+        data = CommFunc.WriteBYTE(data, self.AwardCount)
+        for i in range(self.AwardCount):
+            data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                DayNum:%d,
+                                AwardCount:%d,
+                                AwardItemList:%s
+                                '''\
+                                %(
+                                self.DayNum,
+                                self.AwardCount,
+                                "..."
+                                )
+        return DumpString
+
+
+class  tagMCFeastLoginInfo(Structure):
+    Head = tagHead()
+    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
+    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
+    DayCount = 0    #(BYTE DayCount)// 总共几天
+    DayAwardList = list()    #(vector<tagMCFeastLoginDayAward> DayAwardList)//登录天奖励列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x42
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.DayCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.DayCount):
+            temDayAwardList = tagMCFeastLoginDayAward()
+            _pos = temDayAwardList.ReadData(_lpData, _pos)
+            self.DayAwardList.append(temDayAwardList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x42
+        self.StartDate = ""
+        self.EndtDate = ""
+        self.DayCount = 0
+        self.DayAwardList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 10
+        length += 10
+        length += 1
+        for i in range(self.DayCount):
+            length += self.DayAwardList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteString(data, 10, self.StartDate)
+        data = CommFunc.WriteString(data, 10, self.EndtDate)
+        data = CommFunc.WriteBYTE(data, self.DayCount)
+        for i in range(self.DayCount):
+            data = CommFunc.WriteString(data, self.DayAwardList[i].GetLength(), self.DayAwardList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                StartDate:%s,
+                                EndtDate:%s,
+                                DayCount:%d,
+                                DayAwardList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.StartDate,
+                                self.EndtDate,
+                                self.DayCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCFeastLoginInfo=tagMCFeastLoginInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFeastLoginInfo.Head.Cmd,m_NAtagMCFeastLoginInfo.Head.SubCmd))] = m_NAtagMCFeastLoginInfo
+
+
+#------------------------------------------------------
 # AA 20 节日巡礼活动信息 #tagMCFeastWeekPartyInfo
 
 class  tagMCFeastWeekPartyItem(Structure):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
index 13e85bd..3bbcc32 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -1447,6 +1447,19 @@
                         ("char", "Reward", 0),
                         ),
 
+                "ActFeastLogin":(
+                        ("DWORD", "CfgID", 1),
+                        ("char", "StartDate", 0),
+                        ("char", "EndDate", 0),
+                        ("dict", "TemplateIDInfo", 0),
+                        ),
+
+                "ActFeastLoginAward":(
+                        ("BYTE", "TemplateID", 1),
+                        ("BYTE", "DayNum", 0),
+                        ("list", "LoginAwardItemList", 0),
+                        ),
+
                 "ZhuXianBoss":(
                         ("DWORD", "NPCID", 0),
                         ("BYTE", "LineID", 1),
@@ -4658,6 +4671,34 @@
     def GetSingleTimes(self): return self.SingleTimes # 单次领奖需要的次数
     def GetReward(self): return self.Reward # 奖励物品
 
+# 节日登录奖励时间表
+class IPY_ActFeastLogin():
+    
+    def __init__(self):
+        self.CfgID = 0
+        self.StartDate = ""
+        self.EndDate = ""
+        self.TemplateIDInfo = {}
+        return
+        
+    def GetCfgID(self): return self.CfgID # 配置ID
+    def GetStartDate(self): return self.StartDate # 开启日期
+    def GetEndDate(self): return self.EndDate # 结束日期
+    def GetTemplateIDInfo(self): return self.TemplateIDInfo # 模板信息 {(世界等级A,B):奖励模板编号, ...}
+
+# 节日登录奖励模板表
+class IPY_ActFeastLoginAward():
+    
+    def __init__(self):
+        self.TemplateID = 0
+        self.DayNum = 0
+        self.LoginAwardItemList = []
+        return
+        
+    def GetTemplateID(self): return self.TemplateID # 模板ID
+    def GetDayNum(self): return self.DayNum # 第X天从1开始
+    def GetLoginAwardItemList(self): return self.LoginAwardItemList # 奖励列表[[物品ID,个数,是否拍品], ...]
+
 # 诛仙BOSS表
 class IPY_ZhuXianBoss():
     
@@ -5469,6 +5510,10 @@
         self.ipyActLoginAwardLen = len(self.ipyActLoginAwardCache)
         self.ipyLoginAwardCache = self.__LoadFileData("LoginAward", IPY_LoginAward)
         self.ipyLoginAwardLen = len(self.ipyLoginAwardCache)
+        self.ipyActFeastLoginCache = self.__LoadFileData("ActFeastLogin", IPY_ActFeastLogin)
+        self.ipyActFeastLoginLen = len(self.ipyActFeastLoginCache)
+        self.ipyActFeastLoginAwardCache = self.__LoadFileData("ActFeastLoginAward", IPY_ActFeastLoginAward)
+        self.ipyActFeastLoginAwardLen = len(self.ipyActFeastLoginAwardCache)
         self.ipyZhuXianBossCache = self.__LoadFileData("ZhuXianBoss", IPY_ZhuXianBoss)
         self.ipyZhuXianBossLen = len(self.ipyZhuXianBossCache)
         self.ipyActFeastWeekPartyCache = self.__LoadFileData("ActFeastWeekParty", IPY_ActFeastWeekParty)
@@ -5975,6 +6020,10 @@
     def GetActLoginAwardByIndex(self, index): return self.ipyActLoginAwardCache[index]
     def GetLoginAwardCount(self): return self.ipyLoginAwardLen
     def GetLoginAwardByIndex(self, index): return self.ipyLoginAwardCache[index]
+    def GetActFeastLoginCount(self): return self.ipyActFeastLoginLen
+    def GetActFeastLoginByIndex(self, index): return self.ipyActFeastLoginCache[index]
+    def GetActFeastLoginAwardCount(self): return self.ipyActFeastLoginAwardLen
+    def GetActFeastLoginAwardByIndex(self, index): return self.ipyActFeastLoginAwardCache[index]
     def GetZhuXianBossCount(self): return self.ipyZhuXianBossLen
     def GetZhuXianBossByIndex(self, index): return self.ipyZhuXianBossCache[index]
     def GetActFeastWeekPartyCount(self): return self.ipyActFeastWeekPartyLen
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 a62af50..8ce412e 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
@@ -80,6 +80,7 @@
 import PlayerBossReborn
 import PlayerWeekParty
 import PlayerFeastWeekParty
+import PlayerFeastLogin
 import PlayerActLogin
 import PlayerTreasure
 import GameLogic_GodArea
@@ -697,6 +698,8 @@
     PlayerWeekParty.OnLogin(curPlayer)
     # 节日巡礼活动
     PlayerFeastWeekParty.OnLogin(curPlayer)
+    # 节日登录活动
+    PlayerFeastLogin.OnPlayerLogin(curPlayer)
     # 登录奖励活动
     PlayerActLogin.OnLogin(curPlayer)
     # 仙界盛典活动
@@ -5401,6 +5404,9 @@
     # 领取节日巡礼积分奖励
     elif rewardType == ChConfig.Def_RewardType_FeastWeekPartyPoint:
         PlayerFeastWeekParty.GetFeastWeekPartyPointAward(curPlayer, dataEx, dataExStr)
+    # 领取节日登录奖励
+    elif rewardType == ChConfig.Def_RewardType_FeastLogin:
+        PlayerFeastLogin.GetFeastLoginAward(curPlayer, dataEx)
     # 领取跨服充值排行活动达标奖励
     elif rewardType == ChConfig.Def_RewardType_CACTGBillboardDabiao:
         CrossActCTGBillboard.GetDabiaoAward(curPlayer, dataEx)
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 28bddf2..3bbe755 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
@@ -83,6 +83,7 @@
 import PlayerBossReborn
 import PlayerWeekParty
 import PlayerFeastWeekParty
+import PlayerFeastLogin
 import PlayerActLogin
 import PlayerFlashGiftbag
 import PlayerDailyGiftbag
@@ -1382,6 +1383,9 @@
             elif actionName == ShareDefine.OperationActionName_LoginAward:
                 PlayerActLogin.RefreshOperationAction_LoginAward()
                 
+            elif actionName == ShareDefine.OperationActionName_FeastLogin:
+                PlayerFeastLogin.RefreshFeastLoginActionInfo()
+                
             elif actionName == ShareDefine.OperationActionName_FeastWeekParty:
                 PlayerFeastWeekParty.RefreshOperationAction_FeastWeekParty()
                 
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFeastLogin.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFeastLogin.py
new file mode 100644
index 0000000..ea11272
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFeastLogin.py
@@ -0,0 +1,188 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package Player.PlayerFeastLogin
+#
+# @todo:节日登录
+# @author hxp
+# @date 2021-01-27
+# @version 1.0
+#
+# 详细描述: 节日登录
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2021-01-27 17:00"""
+#-------------------------------------------------------------------------------
+
+import PyGameData
+import ShareDefine
+import PlayerControl
+import IpyGameDataPY
+import ChPyNetSendPack
+import ItemControler
+import IPY_GameWorld
+import NetPackCommon
+import GameWorld
+import ChConfig
+import ChPlayer
+
+def OnPlayerLogin(curPlayer):
+    isReset = __CheckPlayerFeastLoginAction(curPlayer)
+    if not isReset:
+        actInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_FeastLogin, {})
+        # 活动中同步活动信息
+        if actInfo.get(ShareDefine.ActKey_State):
+            Sync_FeastLoginActionInfo(curPlayer)
+            Sync_FeastLoginPlayerInfo(curPlayer)
+    return
+
+def RefreshFeastLoginActionInfo():
+    ## 收到GameServer同步的活动信息,刷新活动信息
+    playerManager = GameWorld.GetPlayerManager()
+    for index in xrange(playerManager.GetPlayerCount()):
+        curPlayer = playerManager.GetPlayerByIndex(index)
+        if curPlayer.GetID() == 0:
+            continue
+        __CheckPlayerFeastLoginAction(curPlayer)
+    return
+
+def __CheckPlayerFeastLoginAction(curPlayer):
+    ## 检查玩家活动信息
+    
+    playerID = curPlayer.GetPlayerID()
+    
+    actInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_FeastLogin, {})
+    actID = actInfo.get(ShareDefine.ActKey_ID, 0)
+    state = actInfo.get(ShareDefine.ActKey_State, 0)
+    
+    playerActID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FeastLoginID) # 玩家身上的活动ID
+    # 活动ID 相同的话不处理
+    if actID == playerActID:
+        GameWorld.DebugLog("节日登录活动ID不变,不处理!", curPlayer.GetPlayerID())
+        return
+    GameWorld.DebugLog("节日登录活动重置! actID=%s,playerActID=%s,state=%s" % (actID, playerActID, state), playerID)
+    
+    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FeastLoginID, actID)
+    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FeastLoginAwardState, 0)
+    
+    Sync_FeastLoginActionInfo(curPlayer)
+    Sync_FeastLoginPlayerInfo(curPlayer)
+    return True
+
+def GetFeastLoginAward(curPlayer, dayNum):
+    ## 领取活动奖励
+    
+    actInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_FeastLogin, {})
+    if not actInfo:
+        return
+    
+    if not actInfo.get(ShareDefine.ActKey_State):
+        GameWorld.DebugLog("非节日登录活动中!")
+        return
+    
+    cfgID = actInfo.get(ShareDefine.ActKey_CfgID)
+    
+    ipyData = IpyGameDataPY.GetIpyGameData("ActFeastLogin", cfgID)
+    if not ipyData:
+        return
+    
+    worldLV = actInfo.get(ShareDefine.ActKey_WorldLV)
+    templateID = GameWorld.GetDictValueByRangeKey(ipyData.GetTemplateIDInfo(), worldLV, 0)
+    if not templateID:
+        return
+    
+    dayIpyDataList = IpyGameDataPY.GetIpyGameDataList("ActFeastLoginAward", templateID)
+    if not dayIpyDataList:
+        return
+    
+    findIpyData = None
+    for dayIpyData in dayIpyDataList:
+        if dayIpyData.GetDayNum() == dayNum:
+            findIpyData = dayIpyData
+            break
+        
+    if not findIpyData:
+        GameWorld.DebugLog("找不到对应的天奖励! dayNum=%s" % dayNum)
+        return
+    
+    awardIndex = dayNum - 1
+    dayIndex = actInfo.get(ShareDefine.ActKey_DayIndex)
+    if awardIndex != dayIndex:
+        GameWorld.DebugLog("非当天奖励,不可领奖! dayNum=%s, awardIndex=%s != dayIndex=%s" % (dayNum, awardIndex, dayIndex))
+        return
+    
+    awardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FeastLoginAwardState)
+    if awardRecord & pow(2, awardIndex):
+        GameWorld.DebugLog("节日登录活动该天已领奖!dayNum=%s" % dayNum)
+        return
+    
+    awardItemList = findIpyData.GetLoginAwardItemList()
+    if not ItemControler.CheckPackSpaceEnough(curPlayer, awardItemList):
+        return
+    
+    updAwardRecord = awardRecord | pow(2, awardIndex)
+    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FeastLoginAwardState, updAwardRecord)
+    Sync_FeastLoginPlayerInfo(curPlayer)
+    
+    GameWorld.DebugLog("领取节日登录奖励!dayNum=%s,awardIndex=%s,awardItemList=%s" % (dayNum, awardIndex, awardItemList))
+    
+    for itemID, itemCount, isAuctionItem in awardItemList:
+        ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, isAuctionItem, [IPY_GameWorld.rptItem], 
+                                     event=["FeastLogin", False, {}])
+        
+    return
+
+def Sync_FeastLoginPlayerInfo(curPlayer):
+    ## 通知活动玩家信息
+    awardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FeastLoginAwardState)
+    ChPlayer.Sync_RewardGetRecordInfo(curPlayer, ChConfig.Def_RewardType_FeastLogin, awardState)
+    return
+
+def Sync_FeastLoginActionInfo(curPlayer):
+    ## 通知活动信息
+    actInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_FeastLogin, {})
+    if not actInfo:
+        return
+    
+    if not actInfo.get(ShareDefine.ActKey_State):
+        return
+    
+    cfgID = actInfo.get(ShareDefine.ActKey_CfgID)
+    
+    ipyData = IpyGameDataPY.GetIpyGameData("ActFeastLogin", cfgID)
+    if not ipyData:
+        return
+    
+    worldLV = actInfo.get(ShareDefine.ActKey_WorldLV)
+    templateID = GameWorld.GetDictValueByRangeKey(ipyData.GetTemplateIDInfo(), worldLV, 0)
+    if not templateID:
+        return
+    
+    dayIpyDataList = IpyGameDataPY.GetIpyGameDataList("ActFeastLoginAward", templateID)
+    if not dayIpyDataList:
+        return
+    
+    openServerDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ServerDay) + 1
+    actPack = ChPyNetSendPack.tagMCFeastLoginInfo()
+    actPack.Clear()
+    actPack.StartDate = GameWorld.GetOperationActionDateStr(ipyData.GetStartDate(), openServerDay)
+    actPack.EndtDate = GameWorld.GetOperationActionDateStr(ipyData.GetEndDate(), openServerDay)
+    actPack.DayAwardList = []
+    for dayIpyData in dayIpyDataList:
+        dayInfo = ChPyNetSendPack.tagMCFeastLoginDayAward()
+        dayInfo.DayNum = dayIpyData.GetDayNum()
+        dayInfo.AwardItemList = []
+        for itemID, itemCount, isAuctionItem in dayIpyData.GetLoginAwardItemList():
+            itemInfo = ChPyNetSendPack.tagMCFeastLoginDayAwardItem()
+            itemInfo.ItemID = itemID
+            itemInfo.ItemCount = itemCount
+            itemInfo.IsBind = isAuctionItem
+            dayInfo.AwardItemList.append(itemInfo)
+        dayInfo.AwardCount = len(dayInfo.AwardItemList)
+        
+        actPack.DayAwardList.append(dayInfo)
+    actPack.DayCount = len(actPack.DayAwardList)
+    NetPackCommon.SendFakePack(curPlayer, actPack)
+    return
+
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
index 60cc4ec..232d6ef 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
@@ -224,9 +224,12 @@
 OperationActionName_RechargePrize = "ActRechargePrize" # 充值返利活动
 OperationActionName_RechargeRebateGold = "ActRechargeRebateGold" # 充值返利仙玉活动(活动结束邮件发放,节日活动)
 OperationActionName_GrowupBuy = "ActGrowupBuy" # 成长必买活动
+OperationActionName_FeastLogin = "ActFeastLogin" # 节日登录活动
 #节日活动类型列表 - 该类型无视开服天,日期到了就开启
 FeastOperationActionNameList = [OperationActionName_FeastWeekParty, OperationActionName_FeastRedPacket,
-                                OperationActionName_RechargeRebateGold, OperationActionName_GrowupBuy]
+                                OperationActionName_RechargeRebateGold, OperationActionName_GrowupBuy,
+                                OperationActionName_FeastLogin,
+                                ]
 #所有的运营活动列表,含节日活动
 OperationActionNameList = [OperationActionName_ExpRate, OperationActionName_CostRebate, 
                            OperationActionName_BossReborn,OperationActionName_SpringSale, 
@@ -247,6 +250,7 @@
                                    OperationActionName_DailyGiftbag, OperationActionName_GrowupBuy,
                                    OperationActionName_WeekParty,
                                    OperationActionName_CollectWords, OperationActionName_CollectWords2,
+                                   OperationActionName_FeastLogin,
                                    ]
 
 #跨服运营活动表名定义

--
Gitblit v1.8.0