From 9f30bc4785beb84ff4ab1504a2279b4a82f9ebd1 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期一, 11 十一月 2024 17:56:03 +0800
Subject: [PATCH] 10297 【越南】【英语】【砍树】【tqxbqy】轮回殿-服务端
---
ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py | 33 +
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActLunhuidian.py | 269 ++++++++++++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py | 3
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py | 357 ++++++++++++++++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTreasure.py | 3
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py | 357 ++++++++++++++++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py | 58 +++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py | 6
PySysDB/PySysDBPY.h | 22 +
ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py | 3
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py | 3
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py | 4
PySysDB/PySysDBG.h | 13
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py | 9
14 files changed, 1,139 insertions(+), 1 deletions(-)
diff --git a/PySysDB/PySysDBG.h b/PySysDB/PySysDBG.h
index 23311ec..0d0fe41 100644
--- a/PySysDB/PySysDBG.h
+++ b/PySysDB/PySysDBG.h
@@ -1192,6 +1192,19 @@
BYTE ResetType; //重置类型,0-0点重置;1-5点重置
};
+//轮回殿活动时间表
+
+struct tagActLunhuidian
+{
+ DWORD _CfgID; //配置ID
+ list PlatformList; //活动平台列表["平台A", "平台A", ...],配[]代表所有
+ list ServerGroupIDList; //服务器ID列表
+ BYTE ActNum; //活动分组编号, 活动类型 * 10 + 不同界面编号
+ char StartDate; //开启日期
+ char EndDate; //结束日期
+ BYTE ResetType; //重置类型,0-0点重置;1-5点重置
+};
+
//购买次数礼包活动时间表
struct tagActBuyCountGift
diff --git a/PySysDB/PySysDBPY.h b/PySysDB/PySysDBPY.h
index 823074e..eff47cc 100644
--- a/PySysDB/PySysDBPY.h
+++ b/PySysDB/PySysDBPY.h
@@ -2674,6 +2674,28 @@
DWORD TreasureType; //商城类型
};
+//轮回殿活动时间表
+
+struct tagActLunhuidian
+{
+ DWORD _CfgID; //配置ID
+ char StartDate; //开启日期
+ char EndDate; //结束日期
+ WORD LVLimit; //限制等级
+ BYTE ResetType; //重置类型,0-0点重置;1-5点重置
+ dict RoundSetInfo; //开放轮回设定
+};
+
+//轮回殿活动奖励表
+
+struct tagActLunhuidianAward
+{
+ BYTE _RoundType; //轮回类型
+ DWORD NeedValue; //奖励所需值
+ BYTE AwardIndex; //奖励记录索引 0~30
+ list AwardItemList; //奖励物品信息列表 [[物品ID,个数,是否拍品],...]
+};
+
//购买次数礼包活动时间表
struct tagActBuyCountGift
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
index 5709403..2c3f608 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
@@ -38322,6 +38322,363 @@
#------------------------------------------------------
+# AA 88 轮回殿活动信息 #tagMCActLunhuidianInfo
+
+class tagMCActLunhuidianItem(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(tagMCActLunhuidianItem)
+
+ def GetBuffer(self):
+ return string_at(addressof(self), self.GetLength())
+
+ def OutputString(self):
+ DumpString = '''// AA 88 轮回殿活动信息 //tagMCActLunhuidianInfo:
+ ItemID:%d,
+ ItemCount:%d,
+ IsBind:%d
+ '''\
+ %(
+ self.ItemID,
+ self.ItemCount,
+ self.IsBind
+ )
+ return DumpString
+
+
+class tagMCActLunhuidianAward(Structure):
+ AwardIndex = 0 #(BYTE AwardIndex)// 奖励记录索引 0~30
+ NeedValue = 0 #(DWORD NeedValue)// 奖励所需值
+ Count = 0 #(BYTE Count)// 奖励物品数
+ AwardItemList = list() #(vector<tagMCActLunhuidianItem> AwardItemList)// 奖励物品列表
+ data = None
+
+ def __init__(self):
+ self.Clear()
+ return
+
+ def ReadData(self, _lpData, _pos=0, _Len=0):
+ self.Clear()
+ self.AwardIndex,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.NeedValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+ self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ for i in range(self.Count):
+ temAwardItemList = tagMCActLunhuidianItem()
+ _pos = temAwardItemList.ReadData(_lpData, _pos)
+ self.AwardItemList.append(temAwardItemList)
+ return _pos
+
+ def Clear(self):
+ self.AwardIndex = 0
+ self.NeedValue = 0
+ self.Count = 0
+ self.AwardItemList = list()
+ return
+
+ def GetLength(self):
+ length = 0
+ length += 1
+ length += 4
+ length += 1
+ for i in range(self.Count):
+ length += self.AwardItemList[i].GetLength()
+
+ return length
+
+ def GetBuffer(self):
+ data = ''
+ data = CommFunc.WriteBYTE(data, self.AwardIndex)
+ data = CommFunc.WriteDWORD(data, self.NeedValue)
+ data = CommFunc.WriteBYTE(data, self.Count)
+ for i in range(self.Count):
+ data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer())
+ return data
+
+ def OutputString(self):
+ DumpString = '''
+ AwardIndex:%d,
+ NeedValue:%d,
+ Count:%d,
+ AwardItemList:%s
+ '''\
+ %(
+ self.AwardIndex,
+ self.NeedValue,
+ self.Count,
+ "..."
+ )
+ return DumpString
+
+
+class tagMCActLunhuidianRound(Structure):
+ RoundType = 0 #(BYTE RoundType)// 轮回类型
+ AwardType = 0 #(BYTE AwardType)// 奖励类型 1-消耗货币;2-寻宝次数
+ AwardTypeValue = 0 #(DWORD AwardTypeValue)// 奖励类型对应值,消耗货币时为对应的货币类型,寻宝时为对应的寻宝类型
+ RoundMax = 0 #(BYTE RoundMax)// 最大可循环轮次
+ AwardCount = 0 #(BYTE AwardCount)
+ AwardList = list() #(vector<tagMCActLunhuidianAward> AwardList)// 每轮奖励列表
+ data = None
+
+ def __init__(self):
+ self.Clear()
+ return
+
+ def ReadData(self, _lpData, _pos=0, _Len=0):
+ self.Clear()
+ self.RoundType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.AwardType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.AwardTypeValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+ self.RoundMax,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.AwardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ for i in range(self.AwardCount):
+ temAwardList = tagMCActLunhuidianAward()
+ _pos = temAwardList.ReadData(_lpData, _pos)
+ self.AwardList.append(temAwardList)
+ return _pos
+
+ def Clear(self):
+ self.RoundType = 0
+ self.AwardType = 0
+ self.AwardTypeValue = 0
+ self.RoundMax = 0
+ self.AwardCount = 0
+ self.AwardList = list()
+ return
+
+ def GetLength(self):
+ length = 0
+ length += 1
+ length += 1
+ length += 4
+ length += 1
+ length += 1
+ for i in range(self.AwardCount):
+ length += self.AwardList[i].GetLength()
+
+ return length
+
+ def GetBuffer(self):
+ data = ''
+ data = CommFunc.WriteBYTE(data, self.RoundType)
+ data = CommFunc.WriteBYTE(data, self.AwardType)
+ data = CommFunc.WriteDWORD(data, self.AwardTypeValue)
+ data = CommFunc.WriteBYTE(data, self.RoundMax)
+ data = CommFunc.WriteBYTE(data, self.AwardCount)
+ for i in range(self.AwardCount):
+ data = CommFunc.WriteString(data, self.AwardList[i].GetLength(), self.AwardList[i].GetBuffer())
+ return data
+
+ def OutputString(self):
+ DumpString = '''
+ RoundType:%d,
+ AwardType:%d,
+ AwardTypeValue:%d,
+ RoundMax:%d,
+ AwardCount:%d,
+ AwardList:%s
+ '''\
+ %(
+ self.RoundType,
+ self.AwardType,
+ self.AwardTypeValue,
+ self.RoundMax,
+ self.AwardCount,
+ "..."
+ )
+ return DumpString
+
+
+class tagMCActLunhuidianInfo(Structure):
+ Head = tagHead()
+ ActNum = 0 #(BYTE ActNum)// 活动编号
+ StartDate = "" #(char StartDate[10])// 开始日期 y-m-d
+ EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d
+ ResetType = 0 #(BYTE ResetType)// 重置类型,0-0点重置;1-5点重置
+ LimitLV = 0 #(WORD LimitLV)// 限制等级
+ RoundCount = 0 #(BYTE RoundCount)
+ RoundList = list() #(vector<tagMCActLunhuidianRound> RoundList)// 轮回列表,支持多个不同类型轮回同时开启
+ data = None
+
+ def __init__(self):
+ self.Clear()
+ self.Head.Cmd = 0xAA
+ self.Head.SubCmd = 0x88
+ 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.ResetType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ self.RoundCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ for i in range(self.RoundCount):
+ temRoundList = tagMCActLunhuidianRound()
+ _pos = temRoundList.ReadData(_lpData, _pos)
+ self.RoundList.append(temRoundList)
+ return _pos
+
+ def Clear(self):
+ self.Head = tagHead()
+ self.Head.Clear()
+ self.Head.Cmd = 0xAA
+ self.Head.SubCmd = 0x88
+ self.ActNum = 0
+ self.StartDate = ""
+ self.EndtDate = ""
+ self.ResetType = 0
+ self.LimitLV = 0
+ self.RoundCount = 0
+ self.RoundList = list()
+ return
+
+ def GetLength(self):
+ length = 0
+ length += self.Head.GetLength()
+ length += 1
+ length += 10
+ length += 10
+ length += 1
+ length += 2
+ length += 1
+ for i in range(self.RoundCount):
+ length += self.RoundList[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.ResetType)
+ data = CommFunc.WriteWORD(data, self.LimitLV)
+ data = CommFunc.WriteBYTE(data, self.RoundCount)
+ for i in range(self.RoundCount):
+ data = CommFunc.WriteString(data, self.RoundList[i].GetLength(), self.RoundList[i].GetBuffer())
+ return data
+
+ def OutputString(self):
+ DumpString = '''
+ Head:%s,
+ ActNum:%d,
+ StartDate:%s,
+ EndtDate:%s,
+ ResetType:%d,
+ LimitLV:%d,
+ RoundCount:%d,
+ RoundList:%s
+ '''\
+ %(
+ self.Head.OutputString(),
+ self.ActNum,
+ self.StartDate,
+ self.EndtDate,
+ self.ResetType,
+ self.LimitLV,
+ self.RoundCount,
+ "..."
+ )
+ return DumpString
+
+
+m_NAtagMCActLunhuidianInfo=tagMCActLunhuidianInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActLunhuidianInfo.Head.Cmd,m_NAtagMCActLunhuidianInfo.Head.SubCmd))] = m_NAtagMCActLunhuidianInfo
+
+
+#------------------------------------------------------
+# AA 89 轮回殿活动玩家信息 #tagMCActLunhuidianPlayerInfo
+
+class tagMCActLunhuidianPlayerInfo(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Cmd", c_ubyte),
+ ("SubCmd", c_ubyte),
+ ("ActNum", c_ubyte), # 活动编号
+ ("RoundType", c_ubyte), # 轮回类型
+ ("CurRound", c_ubyte), # 当前轮次
+ ("CurValue", c_int), # 累计值
+ ("AwardRecord", c_int), # 当前轮次奖励领奖记录,按奖励索引二进制位存储是否已领取,所有奖励已领取后自动进入下一轮,且重置该奖励状态
+ ]
+
+ def __init__(self):
+ self.Clear()
+ self.Cmd = 0xAA
+ self.SubCmd = 0x89
+ 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 = 0x89
+ self.ActNum = 0
+ self.RoundType = 0
+ self.CurRound = 0
+ self.CurValue = 0
+ self.AwardRecord = 0
+ return
+
+ def GetLength(self):
+ return sizeof(tagMCActLunhuidianPlayerInfo)
+
+ def GetBuffer(self):
+ return string_at(addressof(self), self.GetLength())
+
+ def OutputString(self):
+ DumpString = '''// AA 89 轮回殿活动玩家信息 //tagMCActLunhuidianPlayerInfo:
+ Cmd:%s,
+ SubCmd:%s,
+ ActNum:%d,
+ RoundType:%d,
+ CurRound:%d,
+ CurValue:%d,
+ AwardRecord:%d
+ '''\
+ %(
+ self.Cmd,
+ self.SubCmd,
+ self.ActNum,
+ self.RoundType,
+ self.CurRound,
+ self.CurValue,
+ self.AwardRecord
+ )
+ return DumpString
+
+
+m_NAtagMCActLunhuidianPlayerInfo=tagMCActLunhuidianPlayerInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActLunhuidianPlayerInfo.Cmd,m_NAtagMCActLunhuidianPlayerInfo.SubCmd))] = m_NAtagMCActLunhuidianPlayerInfo
+
+
+#------------------------------------------------------
# AA 48 多日连充活动信息 #tagMCActManyDayRechargeInfo
class tagMCActManyDayRechargeItem(Structure):
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py b/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py
index 7e446ed..1eb464e 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py
@@ -958,6 +958,16 @@
("BYTE", "ResetType", 0),
),
+ "ActLunhuidian":(
+ ("DWORD", "CfgID", 1),
+ ("list", "PlatformList", 0),
+ ("list", "ServerGroupIDList", 0),
+ ("BYTE", "ActNum", 0),
+ ("char", "StartDate", 0),
+ ("char", "EndDate", 0),
+ ("BYTE", "ResetType", 0),
+ ),
+
"ActBuyCountGift":(
("DWORD", "CfgID", 1),
("list", "PlatformList", 0),
@@ -2575,6 +2585,21 @@
def GetEndDate(self): return self.attrTuple[5] # 结束日期 char
def GetResetType(self): return self.attrTuple[6] # 重置类型,0-0点重置;1-5点重置 BYTE
+# 轮回殿活动时间表
+class IPY_ActLunhuidian():
+
+ def __init__(self):
+ self.attrTuple = None
+ return
+
+ def GetCfgID(self): return self.attrTuple[0] # 配置ID DWORD
+ def GetPlatformList(self): return self.attrTuple[1] # 活动平台列表["平台A", "平台A", ...],配[]代表所有 list
+ def GetServerGroupIDList(self): return self.attrTuple[2] # 服务器ID列表 list
+ def GetActNum(self): return self.attrTuple[3] # 活动分组编号, 活动类型 * 10 + 不同界面编号 BYTE
+ def GetStartDate(self): return self.attrTuple[4] # 开启日期 char
+ def GetEndDate(self): return self.attrTuple[5] # 结束日期 char
+ def GetResetType(self): return self.attrTuple[6] # 重置类型,0-0点重置;1-5点重置 BYTE
+
# 购买次数礼包活动时间表
class IPY_ActBuyCountGift():
@@ -3079,6 +3104,7 @@
self.__LoadFileData("CrossFamilyFlagwarZoneMap", onlyCheck)
self.__LoadFileData("ActWeekParty", onlyCheck)
self.__LoadFileData("ActYunshi", onlyCheck)
+ self.__LoadFileData("ActLunhuidian", onlyCheck)
self.__LoadFileData("ActBuyCountGift", onlyCheck)
self.__LoadFileData("ActTask", onlyCheck)
self.__LoadFileData("ActLoginNew", onlyCheck)
@@ -3930,6 +3956,13 @@
self.CheckLoadData("ActYunshi")
return self.ipyActYunshiCache[index]
+ def GetActLunhuidianCount(self):
+ self.CheckLoadData("ActLunhuidian")
+ return self.ipyActLunhuidianLen
+ def GetActLunhuidianByIndex(self, index):
+ self.CheckLoadData("ActLunhuidian")
+ return self.ipyActLunhuidianCache[index]
+
def GetActBuyCountGiftCount(self):
self.CheckLoadData("ActBuyCountGift")
return self.ipyActBuyCountGiftLen
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
index 2cc0d68..0fca079 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
@@ -297,6 +297,7 @@
OperationActionName_Gubao = "ActGubao" # 古宝养成活动
OperationActionName_HorsePetTrain = "ActHorsePetTrain" # 骑宠养成活动
OperationActionName_Yunshi = "ActYunshi" # 运势活动
+OperationActionName_Lunhuidian = "ActLunhuidian" # 轮回殿活动
#节日活动类型列表 - 该类型无视开服天,日期到了就开启
FeastOperationActionNameList = [OperationActionName_FeastWeekParty, OperationActionName_FeastRedPacket,
OperationActionName_RechargeRebateGold, OperationActionName_GrowupBuy,
@@ -320,6 +321,7 @@
OperationActionName_ActLoginNew, OperationActionName_ActTask,
OperationActionName_BuyCountGift, OperationActionName_FamilyCTGAssist,
OperationActionName_Gubao, OperationActionName_HorsePetTrain, OperationActionName_Yunshi,
+ OperationActionName_Lunhuidian,
] + FeastOperationActionNameList
#需要记录开启活动时的世界等级的运营活动
NeedWorldLVOperationActNameList = [OperationActionName_FairyCeremony, OperationActionName_WishingWell,
@@ -347,6 +349,7 @@
OperationActionName_ActLoginNew, OperationActionName_ActTask,
OperationActionName_BuyCountGift, OperationActionName_FamilyCTGAssist,
OperationActionName_Gubao, OperationActionName_HorsePetTrain, OperationActionName_Yunshi,
+ OperationActionName_Lunhuidian,
]
#跨服运营活动表名定义
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index 9105b74..432d841 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -4201,6 +4201,12 @@
Def_PDict_ActYunshiID = "ActYunshiID_%s" # 玩家身上的活动ID,唯一标识,取活动开始日期time值,参数:(活动编号)
Def_PDict_ActYunshiTreasureType = "ActYunshiTreasureType_%s" # 活动寻宝类型,参数:(活动编号)
+#轮回殿活动
+Def_PDict_ActLunhuidianID = "ActLunhuidianID_%s" # 玩家身上的活动ID,唯一标识,取活动开始日期time值,参数:(活动编号)
+Def_PDict_ActLunhuidianValue = "ActLunhuidianValue_%s_%s" # 活动当前累计值,参数:(活动编号, 轮回类型)
+Def_PDict_ActLunhuidianRound = "ActLunhuidianRound_%s_%s" # 活动当前轮次,参数:(活动编号, 轮回类型)
+Def_PDict_ActLunhuidianAward = "ActLunhuidianAward_%s_%s" # 领奖记录,按奖励索引二进制记录是否已领取,参数:(活动编号, 轮回类型)
+
#购买次数礼包活动
Def_PDict_BuyCountGiftID = "BuyCountGiftID_%s" # 玩家身上的活动ID,唯一标识,取活动开始日期time,参数(活动编号)
Def_PDict_BuyCountGiftAward = "BuyCountGiftAward_%s" # 礼包奖励记录,按位记录是否已领取,参数(活动编号)
@@ -6040,7 +6046,8 @@
Def_RewardType_TiandaoTree, # 仙宫天道树奖励 75
Def_RewardType_OpenServerDailyAward, # 开服每日奖励 76
Def_RewardType_TreasureCntAward, # 寻宝累计次数奖励 77
-)= range(78)
+Def_RewardType_LunhuidianAward, # 轮回殿奖励 78
+)= range(79)
#boss复活相关活动定义
BossRebornActIDList = (
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
index 5709403..2c3f608 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -38322,6 +38322,363 @@
#------------------------------------------------------
+# AA 88 轮回殿活动信息 #tagMCActLunhuidianInfo
+
+class tagMCActLunhuidianItem(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(tagMCActLunhuidianItem)
+
+ def GetBuffer(self):
+ return string_at(addressof(self), self.GetLength())
+
+ def OutputString(self):
+ DumpString = '''// AA 88 轮回殿活动信息 //tagMCActLunhuidianInfo:
+ ItemID:%d,
+ ItemCount:%d,
+ IsBind:%d
+ '''\
+ %(
+ self.ItemID,
+ self.ItemCount,
+ self.IsBind
+ )
+ return DumpString
+
+
+class tagMCActLunhuidianAward(Structure):
+ AwardIndex = 0 #(BYTE AwardIndex)// 奖励记录索引 0~30
+ NeedValue = 0 #(DWORD NeedValue)// 奖励所需值
+ Count = 0 #(BYTE Count)// 奖励物品数
+ AwardItemList = list() #(vector<tagMCActLunhuidianItem> AwardItemList)// 奖励物品列表
+ data = None
+
+ def __init__(self):
+ self.Clear()
+ return
+
+ def ReadData(self, _lpData, _pos=0, _Len=0):
+ self.Clear()
+ self.AwardIndex,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.NeedValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+ self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ for i in range(self.Count):
+ temAwardItemList = tagMCActLunhuidianItem()
+ _pos = temAwardItemList.ReadData(_lpData, _pos)
+ self.AwardItemList.append(temAwardItemList)
+ return _pos
+
+ def Clear(self):
+ self.AwardIndex = 0
+ self.NeedValue = 0
+ self.Count = 0
+ self.AwardItemList = list()
+ return
+
+ def GetLength(self):
+ length = 0
+ length += 1
+ length += 4
+ length += 1
+ for i in range(self.Count):
+ length += self.AwardItemList[i].GetLength()
+
+ return length
+
+ def GetBuffer(self):
+ data = ''
+ data = CommFunc.WriteBYTE(data, self.AwardIndex)
+ data = CommFunc.WriteDWORD(data, self.NeedValue)
+ data = CommFunc.WriteBYTE(data, self.Count)
+ for i in range(self.Count):
+ data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer())
+ return data
+
+ def OutputString(self):
+ DumpString = '''
+ AwardIndex:%d,
+ NeedValue:%d,
+ Count:%d,
+ AwardItemList:%s
+ '''\
+ %(
+ self.AwardIndex,
+ self.NeedValue,
+ self.Count,
+ "..."
+ )
+ return DumpString
+
+
+class tagMCActLunhuidianRound(Structure):
+ RoundType = 0 #(BYTE RoundType)// 轮回类型
+ AwardType = 0 #(BYTE AwardType)// 奖励类型 1-消耗货币;2-寻宝次数
+ AwardTypeValue = 0 #(DWORD AwardTypeValue)// 奖励类型对应值,消耗货币时为对应的货币类型,寻宝时为对应的寻宝类型
+ RoundMax = 0 #(BYTE RoundMax)// 最大可循环轮次
+ AwardCount = 0 #(BYTE AwardCount)
+ AwardList = list() #(vector<tagMCActLunhuidianAward> AwardList)// 每轮奖励列表
+ data = None
+
+ def __init__(self):
+ self.Clear()
+ return
+
+ def ReadData(self, _lpData, _pos=0, _Len=0):
+ self.Clear()
+ self.RoundType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.AwardType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.AwardTypeValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+ self.RoundMax,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.AwardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ for i in range(self.AwardCount):
+ temAwardList = tagMCActLunhuidianAward()
+ _pos = temAwardList.ReadData(_lpData, _pos)
+ self.AwardList.append(temAwardList)
+ return _pos
+
+ def Clear(self):
+ self.RoundType = 0
+ self.AwardType = 0
+ self.AwardTypeValue = 0
+ self.RoundMax = 0
+ self.AwardCount = 0
+ self.AwardList = list()
+ return
+
+ def GetLength(self):
+ length = 0
+ length += 1
+ length += 1
+ length += 4
+ length += 1
+ length += 1
+ for i in range(self.AwardCount):
+ length += self.AwardList[i].GetLength()
+
+ return length
+
+ def GetBuffer(self):
+ data = ''
+ data = CommFunc.WriteBYTE(data, self.RoundType)
+ data = CommFunc.WriteBYTE(data, self.AwardType)
+ data = CommFunc.WriteDWORD(data, self.AwardTypeValue)
+ data = CommFunc.WriteBYTE(data, self.RoundMax)
+ data = CommFunc.WriteBYTE(data, self.AwardCount)
+ for i in range(self.AwardCount):
+ data = CommFunc.WriteString(data, self.AwardList[i].GetLength(), self.AwardList[i].GetBuffer())
+ return data
+
+ def OutputString(self):
+ DumpString = '''
+ RoundType:%d,
+ AwardType:%d,
+ AwardTypeValue:%d,
+ RoundMax:%d,
+ AwardCount:%d,
+ AwardList:%s
+ '''\
+ %(
+ self.RoundType,
+ self.AwardType,
+ self.AwardTypeValue,
+ self.RoundMax,
+ self.AwardCount,
+ "..."
+ )
+ return DumpString
+
+
+class tagMCActLunhuidianInfo(Structure):
+ Head = tagHead()
+ ActNum = 0 #(BYTE ActNum)// 活动编号
+ StartDate = "" #(char StartDate[10])// 开始日期 y-m-d
+ EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d
+ ResetType = 0 #(BYTE ResetType)// 重置类型,0-0点重置;1-5点重置
+ LimitLV = 0 #(WORD LimitLV)// 限制等级
+ RoundCount = 0 #(BYTE RoundCount)
+ RoundList = list() #(vector<tagMCActLunhuidianRound> RoundList)// 轮回列表,支持多个不同类型轮回同时开启
+ data = None
+
+ def __init__(self):
+ self.Clear()
+ self.Head.Cmd = 0xAA
+ self.Head.SubCmd = 0x88
+ 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.ResetType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ self.RoundCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ for i in range(self.RoundCount):
+ temRoundList = tagMCActLunhuidianRound()
+ _pos = temRoundList.ReadData(_lpData, _pos)
+ self.RoundList.append(temRoundList)
+ return _pos
+
+ def Clear(self):
+ self.Head = tagHead()
+ self.Head.Clear()
+ self.Head.Cmd = 0xAA
+ self.Head.SubCmd = 0x88
+ self.ActNum = 0
+ self.StartDate = ""
+ self.EndtDate = ""
+ self.ResetType = 0
+ self.LimitLV = 0
+ self.RoundCount = 0
+ self.RoundList = list()
+ return
+
+ def GetLength(self):
+ length = 0
+ length += self.Head.GetLength()
+ length += 1
+ length += 10
+ length += 10
+ length += 1
+ length += 2
+ length += 1
+ for i in range(self.RoundCount):
+ length += self.RoundList[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.ResetType)
+ data = CommFunc.WriteWORD(data, self.LimitLV)
+ data = CommFunc.WriteBYTE(data, self.RoundCount)
+ for i in range(self.RoundCount):
+ data = CommFunc.WriteString(data, self.RoundList[i].GetLength(), self.RoundList[i].GetBuffer())
+ return data
+
+ def OutputString(self):
+ DumpString = '''
+ Head:%s,
+ ActNum:%d,
+ StartDate:%s,
+ EndtDate:%s,
+ ResetType:%d,
+ LimitLV:%d,
+ RoundCount:%d,
+ RoundList:%s
+ '''\
+ %(
+ self.Head.OutputString(),
+ self.ActNum,
+ self.StartDate,
+ self.EndtDate,
+ self.ResetType,
+ self.LimitLV,
+ self.RoundCount,
+ "..."
+ )
+ return DumpString
+
+
+m_NAtagMCActLunhuidianInfo=tagMCActLunhuidianInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActLunhuidianInfo.Head.Cmd,m_NAtagMCActLunhuidianInfo.Head.SubCmd))] = m_NAtagMCActLunhuidianInfo
+
+
+#------------------------------------------------------
+# AA 89 轮回殿活动玩家信息 #tagMCActLunhuidianPlayerInfo
+
+class tagMCActLunhuidianPlayerInfo(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Cmd", c_ubyte),
+ ("SubCmd", c_ubyte),
+ ("ActNum", c_ubyte), # 活动编号
+ ("RoundType", c_ubyte), # 轮回类型
+ ("CurRound", c_ubyte), # 当前轮次
+ ("CurValue", c_int), # 累计值
+ ("AwardRecord", c_int), # 当前轮次奖励领奖记录,按奖励索引二进制位存储是否已领取,所有奖励已领取后自动进入下一轮,且重置该奖励状态
+ ]
+
+ def __init__(self):
+ self.Clear()
+ self.Cmd = 0xAA
+ self.SubCmd = 0x89
+ 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 = 0x89
+ self.ActNum = 0
+ self.RoundType = 0
+ self.CurRound = 0
+ self.CurValue = 0
+ self.AwardRecord = 0
+ return
+
+ def GetLength(self):
+ return sizeof(tagMCActLunhuidianPlayerInfo)
+
+ def GetBuffer(self):
+ return string_at(addressof(self), self.GetLength())
+
+ def OutputString(self):
+ DumpString = '''// AA 89 轮回殿活动玩家信息 //tagMCActLunhuidianPlayerInfo:
+ Cmd:%s,
+ SubCmd:%s,
+ ActNum:%d,
+ RoundType:%d,
+ CurRound:%d,
+ CurValue:%d,
+ AwardRecord:%d
+ '''\
+ %(
+ self.Cmd,
+ self.SubCmd,
+ self.ActNum,
+ self.RoundType,
+ self.CurRound,
+ self.CurValue,
+ self.AwardRecord
+ )
+ return DumpString
+
+
+m_NAtagMCActLunhuidianPlayerInfo=tagMCActLunhuidianPlayerInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActLunhuidianPlayerInfo.Cmd,m_NAtagMCActLunhuidianPlayerInfo.SubCmd))] = m_NAtagMCActLunhuidianPlayerInfo
+
+
+#------------------------------------------------------
# AA 48 多日连充活动信息 #tagMCActManyDayRechargeInfo
class tagMCActManyDayRechargeItem(Structure):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
index 6352007..b096221 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -2083,6 +2083,22 @@
("DWORD", "TreasureType", 0),
),
+ "ActLunhuidian":(
+ ("DWORD", "CfgID", 1),
+ ("char", "StartDate", 0),
+ ("char", "EndDate", 0),
+ ("WORD", "LVLimit", 0),
+ ("BYTE", "ResetType", 0),
+ ("dict", "RoundSetInfo", 0),
+ ),
+
+ "ActLunhuidianAward":(
+ ("BYTE", "RoundType", 1),
+ ("DWORD", "NeedValue", 0),
+ ("BYTE", "AwardIndex", 0),
+ ("list", "AwardItemList", 0),
+ ),
+
"ActBuyCountGift":(
("DWORD", "CfgID", 1),
("char", "StartDate", 0),
@@ -5599,6 +5615,32 @@
def GetResetType(self): return self.attrTuple[4] # 重置类型,0-0点重置;1-5点重置 BYTE
def GetTreasureType(self): return self.attrTuple[5] # 商城类型 DWORD
+# 轮回殿活动时间表
+class IPY_ActLunhuidian():
+
+ def __init__(self):
+ self.attrTuple = None
+ return
+
+ def GetCfgID(self): return self.attrTuple[0] # 配置ID DWORD
+ def GetStartDate(self): return self.attrTuple[1] # 开启日期 char
+ def GetEndDate(self): return self.attrTuple[2] # 结束日期 char
+ def GetLVLimit(self): return self.attrTuple[3] # 限制等级 WORD
+ def GetResetType(self): return self.attrTuple[4] # 重置类型,0-0点重置;1-5点重置 BYTE
+ def GetRoundSetInfo(self): return self.attrTuple[5] # 开放轮回设定 dict
+
+# 轮回殿活动奖励表
+class IPY_ActLunhuidianAward():
+
+ def __init__(self):
+ self.attrTuple = None
+ return
+
+ def GetRoundType(self): return self.attrTuple[0] # 轮回类型 BYTE
+ def GetNeedValue(self): return self.attrTuple[1] # 奖励所需值 DWORD
+ def GetAwardIndex(self): return self.attrTuple[2] # 奖励记录索引 0~30 BYTE
+ def GetAwardItemList(self): return self.attrTuple[3] # 奖励物品信息列表 [[物品ID,个数,是否拍品],...] list
+
# 购买次数礼包活动时间表
class IPY_ActBuyCountGift():
@@ -6577,6 +6619,8 @@
self.__LoadFileData("ActWeekParty", onlyCheck)
self.__LoadFileData("WeekParty", onlyCheck)
self.__LoadFileData("ActYunshi", onlyCheck)
+ self.__LoadFileData("ActLunhuidian", onlyCheck)
+ self.__LoadFileData("ActLunhuidianAward", onlyCheck)
self.__LoadFileData("ActBuyCountGift", onlyCheck)
self.__LoadFileData("ActTask", onlyCheck)
self.__LoadFileData("ActTaskTemp", onlyCheck)
@@ -8265,6 +8309,20 @@
self.CheckLoadData("ActYunshi")
return self.ipyActYunshiCache[index]
+ def GetActLunhuidianCount(self):
+ self.CheckLoadData("ActLunhuidian")
+ return self.ipyActLunhuidianLen
+ def GetActLunhuidianByIndex(self, index):
+ self.CheckLoadData("ActLunhuidian")
+ return self.ipyActLunhuidianCache[index]
+
+ def GetActLunhuidianAwardCount(self):
+ self.CheckLoadData("ActLunhuidianAward")
+ return self.ipyActLunhuidianAwardLen
+ def GetActLunhuidianAwardByIndex(self, index):
+ self.CheckLoadData("ActLunhuidianAward")
+ return self.ipyActLunhuidianAwardCache[index]
+
def GetActBuyCountGiftCount(self):
self.CheckLoadData("ActBuyCountGift")
return self.ipyActBuyCountGiftLen
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 3cad6b4..4ab45e1 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
@@ -167,6 +167,7 @@
import PlayerMineArea
import PlayerActLoginNew
import PlayerActBuyCountGift
+import PlayerActLunhuidian
import PlayerActYunshi
import PlayerActTask
@@ -885,6 +886,8 @@
PlayerActTask.OnPlayerLogin(curPlayer)
# 运势活动
PlayerActYunshi.OnPlayerLogin(curPlayer)
+ # 轮回殿活动
+ PlayerActLunhuidian.OnPlayerLogin(curPlayer)
# 登录活动
PlayerActLoginNew.OnPlayerLogin(curPlayer)
# 节日巡礼活动
@@ -5696,6 +5699,9 @@
# 寻宝累计次数奖励
elif rewardType == ChConfig.Def_RewardType_TreasureCntAward:
PlayerTreasure.GetTreasureCntAward(curPlayer, dataEx, dataExStr)
+ # 轮回殿奖励
+ elif rewardType == ChConfig.Def_RewardType_LunhuidianAward:
+ PlayerActLunhuidian.GetLunhuidianAward(curPlayer, dataEx, dataExStr)
#缥缈奇遇领取
elif rewardType == ChConfig.Def_RewardType_FairyAdventuresAward:
PlayerFairyDomain.GetFairyAdventuresAward(curPlayer, dataEx, dataExStr)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActLunhuidian.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActLunhuidian.py
new file mode 100644
index 0000000..4ae3247
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActLunhuidian.py
@@ -0,0 +1,269 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package Player.PlayerActLunhuidian
+#
+# @todo:轮回殿
+# @author hxp
+# @date 2024-11-11
+# @version 1.0
+#
+# 详细描述: 轮回殿
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2024-11-11 18:00"""
+#-------------------------------------------------------------------------------
+
+import PyGameData
+import ShareDefine
+import PlayerControl
+import IpyGameDataPY
+import ChPyNetSendPack
+import NetPackCommon
+import ItemControler
+import GameWorld
+import ChConfig
+
+# 轮回设定配置索引
+RoundSetIndex = (
+RoundSetIndex_AwardType, # 0 奖励类型
+RoundSetIndex_AwardTypeValue, # 1 奖励类型对应值
+RoundSetIndex_RoundMax, # 2 最大轮回次数
+) = range(3)
+
+# 轮回奖励类型
+AwardType_PayMoney = 1
+AwardType_Treasure = 2
+
+def OnPlayerLogin(curPlayer):
+
+ for actInfo in PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_Lunhuidian, {}).values():
+ actNum = actInfo.get(ShareDefine.ActKey_ActNum, 0)
+ isReset = __CheckPlayerActLunhuidianAction(curPlayer, actNum)
+ # 活动中同步活动信息
+ if not isReset and actInfo.get(ShareDefine.ActKey_State):
+ Sync_ActLunhuidianActionInfo(curPlayer, actNum)
+ cfgID = actInfo.get(ShareDefine.ActKey_CfgID, 0)
+ ipyData = IpyGameDataPY.GetIpyGameData("ActLunhuidian", cfgID)
+ if ipyData:
+ roundSetDict = ipyData.GetRoundSetInfo()
+ for roundType in roundSetDict.keys():
+ Sync_ActLunhuidianPlayerInfo(curPlayer, actNum, roundType)
+ return
+
+def RefreshActLunhuidianActionInfo(actNum):
+ ## 收到GameServer同步的活动信息,刷新活动信息
+ playerManager = GameWorld.GetPlayerManager()
+ for index in xrange(playerManager.GetPlayerCount()):
+ curPlayer = playerManager.GetPlayerByIndex(index)
+ if not GameWorld.IsNormalPlayer(curPlayer):
+ continue
+ __CheckPlayerActLunhuidianAction(curPlayer, actNum)
+ return
+
+def __CheckPlayerActLunhuidianAction(curPlayer, actNum):
+ ## 检查玩活动数据信息
+
+ playerID = curPlayer.GetPlayerID()
+
+ actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_Lunhuidian, actNum)
+ actID = actInfo.get(ShareDefine.ActKey_ID, 0)
+ state = actInfo.get(ShareDefine.ActKey_State, 0)
+ cfgID = actInfo.get(ShareDefine.ActKey_CfgID)
+
+ playerActID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActLunhuidianID % actNum) # 玩家身上的活动ID
+
+ # 活动ID 相同的话不处理
+ if actID == playerActID:
+ GameWorld.DebugLog("轮回殿活动ID不变,不处理! actNum=%s,cfgID=%s,actID=%s" % (actNum, cfgID, actID), playerID)
+ return
+ GameWorld.DebugLog("轮回殿活动重置! actNum=%s,cfgID=%s,actID=%s,playerActID=%s,state=%s"
+ % (actNum, cfgID, actID, playerActID, state), playerID)
+
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ActLunhuidianID % actNum, actID)
+
+ if state:
+ Sync_ActLunhuidianActionInfo(curPlayer, actNum)
+ ipyData = IpyGameDataPY.GetIpyGameData("ActLunhuidian", cfgID)
+ if ipyData:
+ roundSetDict = ipyData.GetRoundSetInfo()
+ for roundType in roundSetDict.keys():
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ActLunhuidianValue % (actNum, roundType), 0)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ActLunhuidianRound % (actNum, roundType), 1) # 从第1轮开始
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ActLunhuidianAward % (actNum, roundType), 0)
+ Sync_ActLunhuidianPlayerInfo(curPlayer, actNum, roundType)
+ return True
+
+def GetRoundSetValue(roundSet, setIndex): return roundSet[setIndex] if len(roundSet) > setIndex else 0
+
+def AddLunhuidianValue(curPlayer, awardType, awardTypeValue, addValue):
+ ## 增加轮回殿进度值
+ playerID = curPlayer.GetPlayerID()
+ for actInfo in PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_Lunhuidian, {}).values():
+ if not actInfo.get(ShareDefine.ActKey_State):
+ continue
+ cfgID = actInfo.get(ShareDefine.ActKey_CfgID)
+ actNum = actInfo.get(ShareDefine.ActKey_ActNum, 0)
+ ipyData = IpyGameDataPY.GetIpyGameData("ActLunhuidian", cfgID)
+ if not ipyData:
+ continue
+ roundSetDict = ipyData.GetRoundSetInfo()
+ for roundType, roundSet in roundSetDict.items():
+ if awardType != GetRoundSetValue(roundSet, RoundSetIndex_AwardType):
+ continue
+ if awardTypeValue != GetRoundSetValue(roundSet, RoundSetIndex_AwardTypeValue):
+ continue
+
+ curValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActLunhuidianValue % (actNum, roundType))
+ updValue = min(curValue + addValue, ChConfig.Def_UpperLimit_DWord)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ActLunhuidianValue % (actNum, roundType), updValue)
+ GameWorld.DebugLog("更新轮回殿累计值: actNum=%s,cfgID=%s,roundType=%s,awardType=%s,awardTypeValue=%s,addValue=%s,curValue=%s,updValue=%s"
+ % (actNum, cfgID, roundType, awardType, awardTypeValue, addValue, curValue, updValue), playerID)
+ Sync_ActLunhuidianPlayerInfo(curPlayer, actNum, roundType)
+
+ return
+
+def GetLunhuidianAward(curPlayer, dataEx, dataExStr):
+ ## 领取奖励
+ # @param awardInfo: 要领取的奖励信息 roundType|needValue
+ actNum = dataEx
+ awardSplitList = dataExStr.split("|")
+ if len(awardSplitList) != 2:
+ GameWorld.DebugLog("发送领取格式错误: dataExStr=%s" % dataExStr)
+ return
+ roundType = GameWorld.ToIntDef(awardSplitList[0], 0)
+ needValue = GameWorld.ToIntDef(awardSplitList[1], 0)
+
+ playerID = curPlayer.GetPlayerID()
+ actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_Lunhuidian, actNum)
+ if not actInfo or not actInfo.get(ShareDefine.ActKey_State):
+ GameWorld.DebugLog("该轮回殿非活动中: actNum=%s" % actNum)
+ return
+ cfgID = actInfo.get(ShareDefine.ActKey_CfgID)
+ ipyData = IpyGameDataPY.GetIpyGameData("ActLunhuidian", cfgID)
+ if not ipyData:
+ return
+ roundSetDict = ipyData.GetRoundSetInfo()
+ if roundType not in roundSetDict:
+ GameWorld.DebugLog("该轮回殿类型不在本次活动中: actNum=%s,roundType=%s not in %s" % (actNum, roundType, roundSetDict))
+ return
+ roundSet = roundSetDict[roundType]
+ roundMax = GetRoundSetValue(roundSet, RoundSetIndex_RoundMax)
+
+ awardIpyDataList = IpyGameDataPY.GetIpyGameDataList("ActLunhuidianAward", roundType)
+ if not awardIpyDataList:
+ return
+
+ curRound = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActLunhuidianRound % (actNum, roundType))
+ curValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActLunhuidianValue % (actNum, roundType))
+ awardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActLunhuidianAward % (actNum, roundType))
+
+ roundValueMax = 0
+ unGetIndexList = []
+ awardIndex, awardItemList = None, []
+ for awardIpyData in awardIpyDataList:
+ needV = awardIpyData.GetNeedValue()
+ roundValueMax = max(roundValueMax, needV)
+ aIndex = awardIpyData.GetAwardIndex()
+ if needValue == needV:
+ awardIndex = aIndex
+ awardItemList = awardIpyData.GetAwardItemList()
+ else:
+ if not awardState&pow(2, aIndex):
+ unGetIndexList.append(aIndex)
+
+ if awardIndex == None:
+ GameWorld.DebugLog("轮回殿没有该奖励! actNum=%s,roundType=%s,needValue=%s" % (actNum, roundType, needValue), playerID)
+ return
+
+ if awardState&pow(2, awardIndex):
+ GameWorld.DebugLog("轮回殿奖励已领奖! actNum=%s,roundType=%s,needValue=%s,awardIndex=%s"
+ % (actNum, roundType, needValue, awardIndex), playerID)
+ return
+
+ if curValue < needValue:
+ GameWorld.DebugLog("轮回殿当前值不足,无法领奖! actNum=%s,roundType=%s,curRound=%s,curValue=%s < %s"
+ % (actNum, roundType, curRound, curValue, needValue), playerID)
+ return
+
+ updState = awardState|pow(2, awardIndex)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ActLunhuidianAward % (actNum, roundType), updState)
+ GameWorld.DebugLog("领取轮回殿奖励! actNum=%s,roundType=%s,needValue=%s,awardIndex=%s,awardState=%s,updState=%s,curRound=%s"
+ % (actNum, roundType, needValue, awardIndex, awardState, updState, curRound), playerID)
+ ItemControler.GivePlayerItemOrMail(curPlayer, awardItemList)
+
+ GameWorld.DebugLog(" curRound=%s/%s,unGetIndexList=%s,curValue=%s,roundValueMax=%s"
+ % (curRound, roundMax, unGetIndexList, curValue, roundValueMax), playerID)
+ if not unGetIndexList and curRound < roundMax:
+ updRound = curRound + 1
+ updValue = max(0, curValue - roundValueMax)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ActLunhuidianRound % (actNum, roundType), updRound)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ActLunhuidianValue % (actNum, roundType), updValue)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ActLunhuidianAward % (actNum, roundType), 0)
+ GameWorld.DebugLog(" 本轮次所有奖励已经领取完毕,进入下一轮! updRound=%s,updValue=%s" % (updRound, updValue), playerID)
+
+ Sync_ActLunhuidianPlayerInfo(curPlayer, actNum, roundType)
+ return
+
+def Sync_ActLunhuidianPlayerInfo(curPlayer, actNum, roundType):
+ clientPack = ChPyNetSendPack.tagMCActLunhuidianPlayerInfo()
+ clientPack.ActNum = actNum
+ clientPack.RoundType = roundType
+ clientPack.CurRound = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActLunhuidianRound % (actNum, roundType))
+ clientPack.CurValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActLunhuidianValue % (actNum, roundType))
+ clientPack.AwardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActLunhuidianAward % (actNum, roundType))
+ NetPackCommon.SendFakePack(curPlayer, clientPack)
+ return
+
+def Sync_ActLunhuidianActionInfo(curPlayer, actNum, roundType=0):
+ ## 通知活动信息
+ actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_Lunhuidian, actNum)
+ if not actInfo:
+ return
+ if not actInfo.get(ShareDefine.ActKey_State):
+ return
+ cfgID = actInfo.get(ShareDefine.ActKey_CfgID)
+ ipyData = IpyGameDataPY.GetIpyGameData("ActLunhuidian", cfgID)
+ if not ipyData:
+ return
+
+ startDateStr, endDateStr = GameWorld.GetOperationActionDateStr(ipyData)
+ clientPack = ChPyNetSendPack.tagMCActLunhuidianInfo()
+ clientPack.Clear()
+ clientPack.ActNum = actNum
+ clientPack.StartDate = startDateStr
+ clientPack.EndtDate = endDateStr
+ clientPack.ResetType = ipyData.GetResetType()
+ clientPack.LimitLV = ipyData.GetLVLimit()
+
+ roundSetDict = ipyData.GetRoundSetInfo()
+ for roundType, roundSet in roundSetDict.items():
+ roundInfo = ChPyNetSendPack.tagMCActLunhuidianRound()
+ roundInfo.RoundType = roundType
+ roundInfo.AwardType = GetRoundSetValue(roundSet, RoundSetIndex_AwardType)
+ roundInfo.AwardTypeValue = GetRoundSetValue(roundSet, RoundSetIndex_AwardTypeValue)
+ roundInfo.RoundMax = GetRoundSetValue(roundSet, RoundSetIndex_RoundMax)
+ roundInfo.AwardList = []
+
+ awardIpyDataList = IpyGameDataPY.GetIpyGameDataList("ActLunhuidianAward", roundType)
+ if awardIpyDataList:
+ for awardIpyData in awardIpyDataList:
+ award = ChPyNetSendPack.tagMCActLunhuidianAward()
+ award.AwardIndex = awardIpyData.GetAwardIndex()
+ award.NeedValue = awardIpyData.GetNeedValue()
+ for itemID, itemCount, isAuctionItem in awardIpyData.GetAwardItemList():
+ item = ChPyNetSendPack.tagMCActLunhuidianItem()
+ item.ItemID = itemID
+ item.ItemCount = itemCount
+ item.IsBind = isAuctionItem
+ award.AwardItemList.append(item)
+ award.Count = len(award.AwardItemList)
+
+ roundInfo.AwardList.append(award)
+ roundInfo.AwardCount = len(roundInfo.AwardList)
+
+ clientPack.RoundList.append(roundInfo)
+ clientPack.RoundCount = len(clientPack.RoundList)
+ NetPackCommon.SendFakePack(curPlayer, clientPack)
+ return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
index c9b4cb6..f868563 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
@@ -83,6 +83,7 @@
import PlayerFamilyTech
import PlayerFamilyZhenfa
import PlayerCostRebate
+import PlayerActLunhuidian
import PlayerActGarbageSorting
import GY_Query_CrossRealmReg
import PlayerTongTianLing
@@ -3333,6 +3334,8 @@
PlayerActivity.OnPayMoneyActivity(curPlayer, type_Price, price)
#转盘活动
PlayerActTurntable.OnPlayerUseGold(curPlayer, type_Price, price)
+ #轮回殿
+ PlayerActLunhuidian.AddLunhuidianValue(curPlayer, PlayerActLunhuidian.AwardType_PayMoney, type_Price, price)
unitPrice = price if quantity == 1 else int(math.ceil(price * 1.0 / quantity)) # 单价
#reason_name = "Unknown" if not costType else costType
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 caa8ccc..71ab13f 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
@@ -103,6 +103,7 @@
import PlayerFeastWish
import PlayerActTask
import PlayerActYunshi
+import PlayerActLunhuidian
import PlayerActBuyCountGift
import PlayerActLoginNew
import PlayerActLogin
@@ -1501,6 +1502,9 @@
elif actionName == ShareDefine.OperationActionName_Yunshi:
PlayerActYunshi.RefreshActYunshiActionInfo(actNum)
+ elif actionName == ShareDefine.OperationActionName_Lunhuidian:
+ PlayerActLunhuidian.RefreshActLunhuidianActionInfo(actNum)
+
elif actionName == ShareDefine.OperationActionName_LoginAward:
PlayerActLogin.RefreshOperationAction_LoginAward()
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTreasure.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTreasure.py
index 4220e01..d5326fc 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTreasure.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTreasure.py
@@ -30,6 +30,7 @@
import PlayerFeastTravel
import PlayerFairyCeremony
import PlayerNewFairyCeremony
+import PlayerActLunhuidian
import PlayerActYunshi
import PlayerActTask
import ItemCommon
@@ -400,6 +401,8 @@
elif treasureType == TreasureType_Gubao:
PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_TreasureGubao, treasureCount)
+ PlayerActLunhuidian.AddLunhuidianValue(curPlayer, PlayerActLunhuidian.AwardType_Treasure, treasureType, treasureCount)
+
# 给物品
mailItemList = []
itemControl = ItemControler.PlayerItemControler(curPlayer)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
index 2cc0d68..0fca079 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
@@ -297,6 +297,7 @@
OperationActionName_Gubao = "ActGubao" # 古宝养成活动
OperationActionName_HorsePetTrain = "ActHorsePetTrain" # 骑宠养成活动
OperationActionName_Yunshi = "ActYunshi" # 运势活动
+OperationActionName_Lunhuidian = "ActLunhuidian" # 轮回殿活动
#节日活动类型列表 - 该类型无视开服天,日期到了就开启
FeastOperationActionNameList = [OperationActionName_FeastWeekParty, OperationActionName_FeastRedPacket,
OperationActionName_RechargeRebateGold, OperationActionName_GrowupBuy,
@@ -320,6 +321,7 @@
OperationActionName_ActLoginNew, OperationActionName_ActTask,
OperationActionName_BuyCountGift, OperationActionName_FamilyCTGAssist,
OperationActionName_Gubao, OperationActionName_HorsePetTrain, OperationActionName_Yunshi,
+ OperationActionName_Lunhuidian,
] + FeastOperationActionNameList
#需要记录开启活动时的世界等级的运营活动
NeedWorldLVOperationActNameList = [OperationActionName_FairyCeremony, OperationActionName_WishingWell,
@@ -347,6 +349,7 @@
OperationActionName_ActLoginNew, OperationActionName_ActTask,
OperationActionName_BuyCountGift, OperationActionName_FamilyCTGAssist,
OperationActionName_Gubao, OperationActionName_HorsePetTrain, OperationActionName_Yunshi,
+ OperationActionName_Lunhuidian,
]
#跨服运营活动表名定义
--
Gitblit v1.8.0