10297 【越南】【英语】【砍树】【tqxbqy】轮回殿-服务端
| | |
| | | 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
|
| | |
| | | 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
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # 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):
|
| | |
| | | ("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),
|
| | |
| | | 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(): |
| | | |
| | |
| | | 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)
|
| | |
| | | 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
|
| | |
| | | OperationActionName_Gubao = "ActGubao" # 古宝养成活动
|
| | | OperationActionName_HorsePetTrain = "ActHorsePetTrain" # 骑宠养成活动
|
| | | OperationActionName_Yunshi = "ActYunshi" # 运势活动
|
| | | OperationActionName_Lunhuidian = "ActLunhuidian" # 轮回殿活动
|
| | | #节日活动类型列表 - 该类型无视开服天,日期到了就开启
|
| | | FeastOperationActionNameList = [OperationActionName_FeastWeekParty, OperationActionName_FeastRedPacket,
|
| | | OperationActionName_RechargeRebateGold, OperationActionName_GrowupBuy,
|
| | |
| | | OperationActionName_ActLoginNew, OperationActionName_ActTask,
|
| | | OperationActionName_BuyCountGift, OperationActionName_FamilyCTGAssist,
|
| | | OperationActionName_Gubao, OperationActionName_HorsePetTrain, OperationActionName_Yunshi,
|
| | | OperationActionName_Lunhuidian,
|
| | | ] + FeastOperationActionNameList
|
| | | #需要记录开启活动时的世界等级的运营活动
|
| | | NeedWorldLVOperationActNameList = [OperationActionName_FairyCeremony, OperationActionName_WishingWell,
|
| | |
| | | OperationActionName_ActLoginNew, OperationActionName_ActTask,
|
| | | OperationActionName_BuyCountGift, OperationActionName_FamilyCTGAssist,
|
| | | OperationActionName_Gubao, OperationActionName_HorsePetTrain, OperationActionName_Yunshi,
|
| | | OperationActionName_Lunhuidian,
|
| | | ]
|
| | |
|
| | | #跨服运营活动表名定义
|
| | |
| | | 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" # 礼包奖励记录,按位记录是否已领取,参数(活动编号)
|
| | |
| | | Def_RewardType_TiandaoTree, # 仙宫天道树奖励 75
|
| | | Def_RewardType_OpenServerDailyAward, # 开服每日奖励 76
|
| | | Def_RewardType_TreasureCntAward, # 寻宝累计次数奖励 77
|
| | | )= range(78)
|
| | | Def_RewardType_LunhuidianAward, # 轮回殿奖励 78
|
| | | )= range(79)
|
| | |
|
| | | #boss复活相关活动定义
|
| | | BossRebornActIDList = (
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # 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):
|
| | |
| | | ("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),
|
| | |
| | | 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(): |
| | | |
| | |
| | | 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)
|
| | |
| | | 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
|
| | |
| | | import PlayerMineArea
|
| | | import PlayerActLoginNew
|
| | | import PlayerActBuyCountGift
|
| | | import PlayerActLunhuidian
|
| | | import PlayerActYunshi
|
| | | import PlayerActTask
|
| | |
|
| | |
| | | PlayerActTask.OnPlayerLogin(curPlayer)
|
| | | # 运势活动
|
| | | PlayerActYunshi.OnPlayerLogin(curPlayer)
|
| | | # 轮回殿活动
|
| | | PlayerActLunhuidian.OnPlayerLogin(curPlayer)
|
| | | # 登录活动
|
| | | PlayerActLoginNew.OnPlayerLogin(curPlayer)
|
| | | # 节日巡礼活动
|
| | |
| | | # 寻宝累计次数奖励
|
| | | 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)
|
New file |
| | |
| | | #!/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
|
| | |
| | | import PlayerFamilyTech
|
| | | import PlayerFamilyZhenfa
|
| | | import PlayerCostRebate
|
| | | import PlayerActLunhuidian
|
| | | import PlayerActGarbageSorting
|
| | | import GY_Query_CrossRealmReg
|
| | | import PlayerTongTianLing
|
| | |
| | | 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
|
| | |
| | | import PlayerFeastWish
|
| | | import PlayerActTask
|
| | | import PlayerActYunshi
|
| | | import PlayerActLunhuidian
|
| | | import PlayerActBuyCountGift
|
| | | import PlayerActLoginNew
|
| | | import PlayerActLogin
|
| | |
| | | elif actionName == ShareDefine.OperationActionName_Yunshi:
|
| | | PlayerActYunshi.RefreshActYunshiActionInfo(actNum)
|
| | |
|
| | | elif actionName == ShareDefine.OperationActionName_Lunhuidian:
|
| | | PlayerActLunhuidian.RefreshActLunhuidianActionInfo(actNum)
|
| | | |
| | | elif actionName == ShareDefine.OperationActionName_LoginAward:
|
| | | PlayerActLogin.RefreshOperationAction_LoginAward()
|
| | |
|
| | |
| | | import PlayerFeastTravel
|
| | | import PlayerFairyCeremony
|
| | | import PlayerNewFairyCeremony
|
| | | import PlayerActLunhuidian
|
| | | import PlayerActYunshi
|
| | | import PlayerActTask
|
| | | import ItemCommon
|
| | |
| | | elif treasureType == TreasureType_Gubao:
|
| | | PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_TreasureGubao, treasureCount)
|
| | |
|
| | | PlayerActLunhuidian.AddLunhuidianValue(curPlayer, PlayerActLunhuidian.AwardType_Treasure, treasureType, treasureCount)
|
| | | |
| | | # 给物品
|
| | | mailItemList = []
|
| | | itemControl = ItemControler.PlayerItemControler(curPlayer)
|
| | |
| | | OperationActionName_Gubao = "ActGubao" # 古宝养成活动
|
| | | OperationActionName_HorsePetTrain = "ActHorsePetTrain" # 骑宠养成活动
|
| | | OperationActionName_Yunshi = "ActYunshi" # 运势活动
|
| | | OperationActionName_Lunhuidian = "ActLunhuidian" # 轮回殿活动
|
| | | #节日活动类型列表 - 该类型无视开服天,日期到了就开启
|
| | | FeastOperationActionNameList = [OperationActionName_FeastWeekParty, OperationActionName_FeastRedPacket,
|
| | | OperationActionName_RechargeRebateGold, OperationActionName_GrowupBuy,
|
| | |
| | | OperationActionName_ActLoginNew, OperationActionName_ActTask,
|
| | | OperationActionName_BuyCountGift, OperationActionName_FamilyCTGAssist,
|
| | | OperationActionName_Gubao, OperationActionName_HorsePetTrain, OperationActionName_Yunshi,
|
| | | OperationActionName_Lunhuidian,
|
| | | ] + FeastOperationActionNameList
|
| | | #需要记录开启活动时的世界等级的运营活动
|
| | | NeedWorldLVOperationActNameList = [OperationActionName_FairyCeremony, OperationActionName_WishingWell,
|
| | |
| | | OperationActionName_ActLoginNew, OperationActionName_ActTask,
|
| | | OperationActionName_BuyCountGift, OperationActionName_FamilyCTGAssist,
|
| | | OperationActionName_Gubao, OperationActionName_HorsePetTrain, OperationActionName_Yunshi,
|
| | | OperationActionName_Lunhuidian,
|
| | | ]
|
| | |
|
| | | #跨服运营活动表名定义
|