| | |
| | | list NotifyInfoLoop; //全服提示信息 - 循环广播[间隔分钟, 广播key]
|
| | | WORD LVLimit; //限制等级
|
| | | }; |
| | |
|
| | | //累计充值活动表
|
| | |
|
| | | struct tagActTotalRecharge
|
| | | {
|
| | | DWORD _CfgID; //配置ID
|
| | | char ActMark; //活动组标记
|
| | | list ServerIDList; //服务器ID列表
|
| | | char StartDate; //开启日期
|
| | | char EndDate; //结束日期
|
| | | dict NotifyInfoStart; //全服提示信息 - 相对开始时间
|
| | | dict NotifyInfoEnd; //全服提示信息 - 相对结束时间
|
| | | list NotifyInfoLoop; //全服提示信息 - 循环广播[间隔分钟, 广播key]
|
| | | BYTE IsDayReset; //是否每天重置
|
| | | }; |
| | |
| | | WORD NeedLV; //所需等级
|
| | | BYTE NeedVIPLVGift; //所需购买VIP等级礼包
|
| | | };
|
| | |
|
| | |
|
| | | //累计充值活动表
|
| | |
|
| | | struct tagActTotalRecharge
|
| | | {
|
| | | DWORD _CfgID; //配置ID
|
| | | char StartDate; //开启日期
|
| | | char EndDate; //结束日期
|
| | | WORD LVLimit; //限制等级
|
| | | BYTE IsDayReset; //是否每天重置
|
| | | list TemplateIDList; //模板ID列表
|
| | | };
|
| | |
|
| | | //累计充值模板表
|
| | |
|
| | | struct tagTotalRechargeTemplate
|
| | | {
|
| | | DWORD _TemplateID; //模板ID
|
| | | DWORD NeedGold; //需要充值仙玉数
|
| | | BYTE AwardIndex; //返利奖励索引0~31,同个模板中不重复
|
| | | dict AwardItem; //返利物品信息列表 {职业:[(物品ID,个数,是否绑定),...]}
|
| | | char NotifyKey; //全服广播key,默认两个参数(玩家名, 档位额度)
|
| | | }; |
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # AA 1D 累计充值活动信息 #tagMCActTotalRechargeInfo
|
| | |
|
| | | class tagMCTotalRechargeAwardItem(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(tagMCTotalRechargeAwardItem)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// AA 1D 累计充值活动信息 //tagMCActTotalRechargeInfo:
|
| | | ItemID:%d,
|
| | | ItemCount:%d,
|
| | | IsBind:%d
|
| | | '''\
|
| | | %(
|
| | | self.ItemID,
|
| | | self.ItemCount,
|
| | | self.IsBind
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | class tagMCTotalRechargeAward(Structure):
|
| | | AwardIndex = 0 #(BYTE AwardIndex)// 奖励索引 0~31
|
| | | NeedGold = 0 #(DWORD NeedGold)// 所需仙玉数
|
| | | AwardItemCount = 0 #(BYTE AwardItemCount)// 奖励物品数
|
| | | AwardItem = list() #(vector<tagMCTotalRechargeAwardItem> AwardItem)// 奖励物品信息
|
| | | 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.NeedGold,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.AwardItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.AwardItemCount):
|
| | | temAwardItem = tagMCTotalRechargeAwardItem()
|
| | | _pos = temAwardItem.ReadData(_lpData, _pos)
|
| | | self.AwardItem.append(temAwardItem)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.AwardIndex = 0
|
| | | self.NeedGold = 0
|
| | | self.AwardItemCount = 0
|
| | | self.AwardItem = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += 1
|
| | | length += 4
|
| | | length += 1
|
| | | for i in range(self.AwardItemCount):
|
| | | length += self.AwardItem[i].GetLength()
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteBYTE(data, self.AwardIndex)
|
| | | data = CommFunc.WriteDWORD(data, self.NeedGold)
|
| | | data = CommFunc.WriteBYTE(data, self.AwardItemCount)
|
| | | for i in range(self.AwardItemCount):
|
| | | data = CommFunc.WriteString(data, self.AwardItem[i].GetLength(), self.AwardItem[i].GetBuffer())
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | AwardIndex:%d,
|
| | | NeedGold:%d,
|
| | | AwardItemCount:%d,
|
| | | AwardItem:%s
|
| | | '''\
|
| | | %(
|
| | | self.AwardIndex,
|
| | | self.NeedGold,
|
| | | self.AwardItemCount,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | class tagMCTotalRechargeAwardDay(Structure):
|
| | | AwardCount = 0 #(BYTE AwardCount)// 奖励档数
|
| | | AwardInfo = list() #(vector<tagMCTotalRechargeAward> AwardInfo)// 奖励档信息
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | self.AwardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.AwardCount):
|
| | | temAwardInfo = tagMCTotalRechargeAward()
|
| | | _pos = temAwardInfo.ReadData(_lpData, _pos)
|
| | | self.AwardInfo.append(temAwardInfo)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.AwardCount = 0
|
| | | self.AwardInfo = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += 1
|
| | | for i in range(self.AwardCount):
|
| | | length += self.AwardInfo[i].GetLength()
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteBYTE(data, self.AwardCount)
|
| | | for i in range(self.AwardCount):
|
| | | data = CommFunc.WriteString(data, self.AwardInfo[i].GetLength(), self.AwardInfo[i].GetBuffer())
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | AwardCount:%d,
|
| | | AwardInfo:%s
|
| | | '''\
|
| | | %(
|
| | | self.AwardCount,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | class tagMCActTotalRechargeInfo(Structure):
|
| | | Head = tagHead()
|
| | | StartDate = "" #(char StartDate[10])// 开始日期 y-m-d
|
| | | EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d
|
| | | IsDayReset = 0 #(BYTE IsDayReset)//是否每天重置
|
| | | LimitLV = 0 #(WORD LimitLV)// 限制等级
|
| | | AwardDays = 0 #(BYTE AwardDays)
|
| | | AwardDayInfo = list() #(vector<tagMCTotalRechargeAwardDay> AwardDayInfo)//每天对应信息; 如果只有一天,但是活动有多天,则代表每天奖励都一样
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xAA
|
| | | self.Head.SubCmd = 0x1D
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | _pos = self.Head.ReadData(_lpData, _pos)
|
| | | self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
|
| | | self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
|
| | | self.IsDayReset,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.AwardDays,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.AwardDays):
|
| | | temAwardDayInfo = tagMCTotalRechargeAwardDay()
|
| | | _pos = temAwardDayInfo.ReadData(_lpData, _pos)
|
| | | self.AwardDayInfo.append(temAwardDayInfo)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xAA
|
| | | self.Head.SubCmd = 0x1D
|
| | | self.StartDate = ""
|
| | | self.EndtDate = ""
|
| | | self.IsDayReset = 0
|
| | | self.LimitLV = 0
|
| | | self.AwardDays = 0
|
| | | self.AwardDayInfo = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 10
|
| | | length += 10
|
| | | length += 1
|
| | | length += 2
|
| | | length += 1
|
| | | for i in range(self.AwardDays):
|
| | | length += self.AwardDayInfo[i].GetLength()
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
|
| | | data = CommFunc.WriteString(data, 10, self.StartDate)
|
| | | data = CommFunc.WriteString(data, 10, self.EndtDate)
|
| | | data = CommFunc.WriteBYTE(data, self.IsDayReset)
|
| | | data = CommFunc.WriteWORD(data, self.LimitLV)
|
| | | data = CommFunc.WriteBYTE(data, self.AwardDays)
|
| | | for i in range(self.AwardDays):
|
| | | data = CommFunc.WriteString(data, self.AwardDayInfo[i].GetLength(), self.AwardDayInfo[i].GetBuffer())
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | StartDate:%s,
|
| | | EndtDate:%s,
|
| | | IsDayReset:%d,
|
| | | LimitLV:%d,
|
| | | AwardDays:%d,
|
| | | AwardDayInfo:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.StartDate,
|
| | | self.EndtDate,
|
| | | self.IsDayReset,
|
| | | self.LimitLV,
|
| | | self.AwardDays,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagMCActTotalRechargeInfo=tagMCActTotalRechargeInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActTotalRechargeInfo.Head.Cmd,m_NAtagMCActTotalRechargeInfo.Head.SubCmd))] = m_NAtagMCActTotalRechargeInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # AA 1B 许愿池拖动结果 #tagMCActWishingDragResult
|
| | |
|
| | | class tagMCPlayerWishingDragInfo(Structure):
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # AA 1C 累计充值玩家活动信息 #tagMCTotalRechargePlayerInfo
|
| | |
|
| | | class tagMCTotalRechargePlayerInfo(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("GoldTotal", c_int), #本次活动已累计充值仙玉数
|
| | | ("AwardRecord", c_int), #奖励领奖记录,按奖励索引二进制位存储是否已领取
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Cmd = 0xAA
|
| | | self.SubCmd = 0x1C
|
| | | 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 = 0x1C
|
| | | self.GoldTotal = 0
|
| | | self.AwardRecord = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagMCTotalRechargePlayerInfo)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// AA 1C 累计充值玩家活动信息 //tagMCTotalRechargePlayerInfo:
|
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | GoldTotal:%d,
|
| | | AwardRecord:%d
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.GoldTotal,
|
| | | self.AwardRecord
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagMCTotalRechargePlayerInfo=tagMCTotalRechargePlayerInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCTotalRechargePlayerInfo.Cmd,m_NAtagMCTotalRechargePlayerInfo.SubCmd))] = m_NAtagMCTotalRechargePlayerInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # AA 14 仙界盛典充值大礼 #tagMCXJSDRecharge
|
| | |
|
| | | class tagMCXJSDRecharge(Structure):
|
| | |
| | | ("list", "NotifyInfoLoop", 0),
|
| | | ("WORD", "LVLimit", 0),
|
| | | ),
|
| | |
|
| | | "ActTotalRecharge":(
|
| | | ("DWORD", "CfgID", 1),
|
| | | ("char", "ActMark", 0),
|
| | | ("list", "ServerIDList", 0),
|
| | | ("char", "StartDate", 0),
|
| | | ("char", "EndDate", 0),
|
| | | ("dict", "NotifyInfoStart", 0),
|
| | | ("dict", "NotifyInfoEnd", 0),
|
| | | ("list", "NotifyInfoLoop", 0),
|
| | | ("BYTE", "IsDayReset", 0),
|
| | | ),
|
| | | }
|
| | |
|
| | | |
| | |
| | | def GetNotifyInfoLoop(self): return self.NotifyInfoLoop # 全服提示信息 - 循环广播[间隔分钟, 广播key]
|
| | | def GetLVLimit(self): return self.LVLimit # 限制等级 |
| | |
|
| | | # 累计充值活动表 |
| | | class IPY_ActTotalRecharge(): |
| | | |
| | | def __init__(self): |
| | | self.CfgID = 0
|
| | | self.ActMark = ""
|
| | | self.ServerIDList = []
|
| | | self.StartDate = ""
|
| | | self.EndDate = ""
|
| | | self.NotifyInfoStart = {}
|
| | | self.NotifyInfoEnd = {}
|
| | | self.NotifyInfoLoop = []
|
| | | self.IsDayReset = 0 |
| | | return |
| | | |
| | | def GetCfgID(self): return self.CfgID # 配置ID
|
| | | def GetActMark(self): return self.ActMark # 活动组标记
|
| | | def GetServerIDList(self): return self.ServerIDList # 服务器ID列表
|
| | | def GetStartDate(self): return self.StartDate # 开启日期
|
| | | def GetEndDate(self): return self.EndDate # 结束日期
|
| | | def GetNotifyInfoStart(self): return self.NotifyInfoStart # 全服提示信息 - 相对开始时间
|
| | | def GetNotifyInfoEnd(self): return self.NotifyInfoEnd # 全服提示信息 - 相对结束时间
|
| | | def GetNotifyInfoLoop(self): return self.NotifyInfoLoop # 全服提示信息 - 循环广播[间隔分钟, 广播key]
|
| | | def GetIsDayReset(self): return self.IsDayReset # 是否每天重置 |
| | |
|
| | |
|
| | | def Log(msg, playerID=0, par=0):
|
| | | LogUI.Msg("%s\t%s\t%s" % (par, playerID, msg))
|
| | |
| | | self.ipyStoreLen = len(self.ipyStoreCache)
|
| | | self.ipyActWishingWellCache = self.__LoadFileData("ActWishingWell", IPY_ActWishingWell)
|
| | | self.ipyActWishingWellLen = len(self.ipyActWishingWellCache)
|
| | | self.ipyActTotalRechargeCache = self.__LoadFileData("ActTotalRecharge", IPY_ActTotalRecharge)
|
| | | self.ipyActTotalRechargeLen = len(self.ipyActTotalRechargeCache)
|
| | | Log("IPY_FuncConfig count=%s" % len(self.ipyFuncConfigDict))
|
| | | Log("IPY_DataMgr InitOK!")
|
| | | return
|
| | |
| | | def GetStoreByIndex(self, index): return self.ipyStoreCache[index]
|
| | | def GetActWishingWellCount(self): return self.ipyActWishingWellLen
|
| | | def GetActWishingWellByIndex(self, index): return self.ipyActWishingWellCache[index]
|
| | | def GetActTotalRechargeCount(self): return self.ipyActTotalRechargeLen
|
| | | def GetActTotalRechargeByIndex(self, index): return self.ipyActTotalRechargeCache[index]
|
| | |
|
| | | IPYData = IPY_DataMgr()
|
| | | def IPY_Data(): return IPYData
|
| | |
| | | OperationActionName_RealmPoint = "ActRealmPoint" # 多倍修行点活动
|
| | | OperationActionName_FlashSale = "ActFlashSale" # 限时抢购活动
|
| | | OperationActionName_WishingWell = "ActWishingWell" # 许愿池活动
|
| | | OperationActionName_TotalRecharge = "ActTotalRecharge" # 累计充值活动
|
| | | OperationActionNameList = [OperationActionName_ExpRate, OperationActionName_CostRebate,
|
| | | OperationActionName_BossReborn,OperationActionName_SpringSale,
|
| | | OperationActionName_FlashGiftbag, OperationActionName_FairyCeremony,
|
| | | OperationActionName_RealmPoint, OperationActionName_FlashSale,
|
| | | OperationActionName_WishingWell]
|
| | | OperationActionName_WishingWell, OperationActionName_TotalRecharge]
|
| | | #需要记录开启活动时的世界等级的运营活动
|
| | | NeedWorldLVOperationActNameList = [OperationActionName_FairyCeremony, OperationActionName_WishingWell]
|
| | |
|
| | |
| | | CDBPlayerRefresh_NPCHurtAddPer, # 对怪物伤害加成
|
| | | CDBPlayerRefresh_FinalHurtPer, # 最终输出伤害百分比
|
| | | CDBPlayerRefresh_TalentPoint, # 天赋点数 190
|
| | | ) = range(146, 191)
|
| | | CDBPlayerRefresh_FBHelpPoint, # 副本助战点数 191
|
| | | ) = range(146, 192)
|
| | |
|
| | | TYPE_Price_Gold_Paper_Money = 5 # 金钱类型,(先用礼券,再用金子)
|
| | | TYPE_Price_Family_Contribution = 6 # 战盟贡献度(活跃度转换得来)
|
| | |
| | | Def_PDict_CostRebateGold = "CostRebateGold" # 消费返利总累计消费仙玉
|
| | | Def_PDict_CostRebateAwardRecord = "CostRebateAwardRecord" # 消费返利领奖记录
|
| | |
|
| | | #累计充值活动
|
| | | Def_PDict_TotalRechargeID = "TotalRechargeID" # 玩家身上的累计充值活动ID,唯一标识,取活动开始日期time值
|
| | | Def_PDict_TotalRechargeTemplateID = "TotalRechargeTemplateID" # 玩家身上的累计充值模板ID
|
| | | Def_PDict_TotalRechargeGold = "TotalRechargeGold" # 消费返利总累计充值仙玉
|
| | | Def_PDict_TotalRechargeAwardRecord = "TotalRechargeAwardRecord" # 累计充值领奖记录
|
| | |
|
| | | #限时特惠活动
|
| | | Def_PDict_SpringSaleID = "SpringSaleID" # 玩家身上的限时特惠活动ID,唯一标识,取活动开始日期time
|
| | | Def_PDict_SpringSaleMailState = "SpringSaleMailState" # 玩家身上的活动更新提醒邮件状态
|
| | |
| | | Def_RewardType_DownLoad, # 分包下载奖励15
|
| | | Def_RewardType_WishingWell, # 许愿池奖励16
|
| | | Def_RewardType_OpenFunc, # 功能开启奖励17
|
| | | )= range(18)
|
| | | Def_RewardType_TotalRecharge, # 累计充值奖励18
|
| | | )= range(19)
|
| | |
|
| | |
|
| | | #boss复活相关活动定义
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # AA 1D 累计充值活动信息 #tagMCActTotalRechargeInfo
|
| | |
|
| | | class tagMCTotalRechargeAwardItem(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(tagMCTotalRechargeAwardItem)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// AA 1D 累计充值活动信息 //tagMCActTotalRechargeInfo:
|
| | | ItemID:%d,
|
| | | ItemCount:%d,
|
| | | IsBind:%d
|
| | | '''\
|
| | | %(
|
| | | self.ItemID,
|
| | | self.ItemCount,
|
| | | self.IsBind
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | class tagMCTotalRechargeAward(Structure):
|
| | | AwardIndex = 0 #(BYTE AwardIndex)// 奖励索引 0~31
|
| | | NeedGold = 0 #(DWORD NeedGold)// 所需仙玉数
|
| | | AwardItemCount = 0 #(BYTE AwardItemCount)// 奖励物品数
|
| | | AwardItem = list() #(vector<tagMCTotalRechargeAwardItem> AwardItem)// 奖励物品信息
|
| | | 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.NeedGold,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.AwardItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.AwardItemCount):
|
| | | temAwardItem = tagMCTotalRechargeAwardItem()
|
| | | _pos = temAwardItem.ReadData(_lpData, _pos)
|
| | | self.AwardItem.append(temAwardItem)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.AwardIndex = 0
|
| | | self.NeedGold = 0
|
| | | self.AwardItemCount = 0
|
| | | self.AwardItem = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += 1
|
| | | length += 4
|
| | | length += 1
|
| | | for i in range(self.AwardItemCount):
|
| | | length += self.AwardItem[i].GetLength()
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteBYTE(data, self.AwardIndex)
|
| | | data = CommFunc.WriteDWORD(data, self.NeedGold)
|
| | | data = CommFunc.WriteBYTE(data, self.AwardItemCount)
|
| | | for i in range(self.AwardItemCount):
|
| | | data = CommFunc.WriteString(data, self.AwardItem[i].GetLength(), self.AwardItem[i].GetBuffer())
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | AwardIndex:%d,
|
| | | NeedGold:%d,
|
| | | AwardItemCount:%d,
|
| | | AwardItem:%s
|
| | | '''\
|
| | | %(
|
| | | self.AwardIndex,
|
| | | self.NeedGold,
|
| | | self.AwardItemCount,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | class tagMCTotalRechargeAwardDay(Structure):
|
| | | AwardCount = 0 #(BYTE AwardCount)// 奖励档数
|
| | | AwardInfo = list() #(vector<tagMCTotalRechargeAward> AwardInfo)// 奖励档信息
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | self.AwardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.AwardCount):
|
| | | temAwardInfo = tagMCTotalRechargeAward()
|
| | | _pos = temAwardInfo.ReadData(_lpData, _pos)
|
| | | self.AwardInfo.append(temAwardInfo)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.AwardCount = 0
|
| | | self.AwardInfo = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += 1
|
| | | for i in range(self.AwardCount):
|
| | | length += self.AwardInfo[i].GetLength()
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteBYTE(data, self.AwardCount)
|
| | | for i in range(self.AwardCount):
|
| | | data = CommFunc.WriteString(data, self.AwardInfo[i].GetLength(), self.AwardInfo[i].GetBuffer())
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | AwardCount:%d,
|
| | | AwardInfo:%s
|
| | | '''\
|
| | | %(
|
| | | self.AwardCount,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | class tagMCActTotalRechargeInfo(Structure):
|
| | | Head = tagHead()
|
| | | StartDate = "" #(char StartDate[10])// 开始日期 y-m-d
|
| | | EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d
|
| | | IsDayReset = 0 #(BYTE IsDayReset)//是否每天重置
|
| | | LimitLV = 0 #(WORD LimitLV)// 限制等级
|
| | | AwardDays = 0 #(BYTE AwardDays)
|
| | | AwardDayInfo = list() #(vector<tagMCTotalRechargeAwardDay> AwardDayInfo)//每天对应信息; 如果只有一天,但是活动有多天,则代表每天奖励都一样
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xAA
|
| | | self.Head.SubCmd = 0x1D
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | _pos = self.Head.ReadData(_lpData, _pos)
|
| | | self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
|
| | | self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
|
| | | self.IsDayReset,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.AwardDays,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.AwardDays):
|
| | | temAwardDayInfo = tagMCTotalRechargeAwardDay()
|
| | | _pos = temAwardDayInfo.ReadData(_lpData, _pos)
|
| | | self.AwardDayInfo.append(temAwardDayInfo)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xAA
|
| | | self.Head.SubCmd = 0x1D
|
| | | self.StartDate = ""
|
| | | self.EndtDate = ""
|
| | | self.IsDayReset = 0
|
| | | self.LimitLV = 0
|
| | | self.AwardDays = 0
|
| | | self.AwardDayInfo = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 10
|
| | | length += 10
|
| | | length += 1
|
| | | length += 2
|
| | | length += 1
|
| | | for i in range(self.AwardDays):
|
| | | length += self.AwardDayInfo[i].GetLength()
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
|
| | | data = CommFunc.WriteString(data, 10, self.StartDate)
|
| | | data = CommFunc.WriteString(data, 10, self.EndtDate)
|
| | | data = CommFunc.WriteBYTE(data, self.IsDayReset)
|
| | | data = CommFunc.WriteWORD(data, self.LimitLV)
|
| | | data = CommFunc.WriteBYTE(data, self.AwardDays)
|
| | | for i in range(self.AwardDays):
|
| | | data = CommFunc.WriteString(data, self.AwardDayInfo[i].GetLength(), self.AwardDayInfo[i].GetBuffer())
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | StartDate:%s,
|
| | | EndtDate:%s,
|
| | | IsDayReset:%d,
|
| | | LimitLV:%d,
|
| | | AwardDays:%d,
|
| | | AwardDayInfo:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.StartDate,
|
| | | self.EndtDate,
|
| | | self.IsDayReset,
|
| | | self.LimitLV,
|
| | | self.AwardDays,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagMCActTotalRechargeInfo=tagMCActTotalRechargeInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActTotalRechargeInfo.Head.Cmd,m_NAtagMCActTotalRechargeInfo.Head.SubCmd))] = m_NAtagMCActTotalRechargeInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # AA 1B 许愿池拖动结果 #tagMCActWishingDragResult
|
| | |
|
| | | class tagMCPlayerWishingDragInfo(Structure):
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # AA 1C 累计充值玩家活动信息 #tagMCTotalRechargePlayerInfo
|
| | |
|
| | | class tagMCTotalRechargePlayerInfo(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("GoldTotal", c_int), #本次活动已累计充值仙玉数
|
| | | ("AwardRecord", c_int), #奖励领奖记录,按奖励索引二进制位存储是否已领取
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Cmd = 0xAA
|
| | | self.SubCmd = 0x1C
|
| | | 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 = 0x1C
|
| | | self.GoldTotal = 0
|
| | | self.AwardRecord = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagMCTotalRechargePlayerInfo)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// AA 1C 累计充值玩家活动信息 //tagMCTotalRechargePlayerInfo:
|
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | GoldTotal:%d,
|
| | | AwardRecord:%d
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.GoldTotal,
|
| | | self.AwardRecord
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagMCTotalRechargePlayerInfo=tagMCTotalRechargePlayerInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCTotalRechargePlayerInfo.Cmd,m_NAtagMCTotalRechargePlayerInfo.SubCmd))] = m_NAtagMCTotalRechargePlayerInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # AA 14 仙界盛典充值大礼 #tagMCXJSDRecharge
|
| | |
|
| | | class tagMCXJSDRecharge(Structure):
|
| | |
| | | PlayerControl.NotifyCode(curPlayer, 'AssistantIntegralFull')
|
| | | return 0
|
| | | addHelpPoint = min(addHelpPoint, dayMaxPoint-curDayPoint)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FBHelpPointCntDay, curDayPoint+addHelpPoint)
|
| | | updHelpPoint = curDayPoint+addHelpPoint
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FBHelpPointCntDay, updHelpPoint)
|
| | | curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_FBHelpPoint, updHelpPoint, False)
|
| | | |
| | | PlayerControl.GiveMoney(curPlayer, ShareDefine.TYPE_Price_FBHelpPoint, addHelpPoint, isSysHint=False)
|
| | | PlayerControl.NotifyCode(curPlayer, 'AssistantIntegral', [addHelpPoint])
|
| | | GameWorld.DebugLog(" 增加副本助战积分!mapID=%s, addHelpPoint=%s"%(mapID, addHelpPoint), curPlayer.GetID())
|
| | |
| | | #重置每日获得的助战积分
|
| | | if onDayType ==ShareDefine.Def_OnEventTypeEx:
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FBHelpPointCntDay, 0)
|
| | | |
| | | curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_FBHelpPoint, 0, False)
|
| | | return
|
| | |
|
| | | ## 玩家通用副本登录处理
|
| | |
| | | NotifyFBCntRegainInfo(curPlayer)
|
| | | #判断副本里离线超过一定时间则退出副本
|
| | | CheckFBPlayerOffine(curPlayer)
|
| | | #通知助战点数
|
| | | curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_FBHelpPoint, 0, False)
|
| | | return
|
| | | def CheckFBPlayerOffine(curPlayer):
|
| | | mapid = curPlayer.GetMapID()
|
| | |
| | | ("WORD", "NeedLV", 0),
|
| | | ("BYTE", "NeedVIPLVGift", 0),
|
| | | ),
|
| | |
|
| | | "ActTotalRecharge":(
|
| | | ("DWORD", "CfgID", 1),
|
| | | ("char", "StartDate", 0),
|
| | | ("char", "EndDate", 0),
|
| | | ("WORD", "LVLimit", 0),
|
| | | ("BYTE", "IsDayReset", 0),
|
| | | ("list", "TemplateIDList", 0),
|
| | | ),
|
| | |
|
| | | "TotalRechargeTemplate":(
|
| | | ("DWORD", "TemplateID", 1),
|
| | | ("DWORD", "NeedGold", 0),
|
| | | ("BYTE", "AwardIndex", 0),
|
| | | ("dict", "AwardItem", 0),
|
| | | ("char", "NotifyKey", 0),
|
| | | ),
|
| | | }
|
| | |
|
| | | |
| | |
| | | def GetNeedLV(self): return self.NeedLV # 所需等级
|
| | | def GetNeedVIPLVGift(self): return self.NeedVIPLVGift # 所需购买VIP等级礼包 |
| | |
|
| | | # 累计充值活动表 |
| | | class IPY_ActTotalRecharge(): |
| | | |
| | | def __init__(self): |
| | | self.CfgID = 0
|
| | | self.StartDate = ""
|
| | | self.EndDate = ""
|
| | | self.LVLimit = 0
|
| | | self.IsDayReset = 0
|
| | | self.TemplateIDList = [] |
| | | return |
| | | |
| | | def GetCfgID(self): return self.CfgID # 配置ID
|
| | | def GetStartDate(self): return self.StartDate # 开启日期
|
| | | def GetEndDate(self): return self.EndDate # 结束日期
|
| | | def GetLVLimit(self): return self.LVLimit # 限制等级
|
| | | def GetIsDayReset(self): return self.IsDayReset # 是否每天重置
|
| | | def GetTemplateIDList(self): return self.TemplateIDList # 模板ID列表 |
| | | |
| | | # 累计充值模板表 |
| | | class IPY_TotalRechargeTemplate(): |
| | | |
| | | def __init__(self): |
| | | self.TemplateID = 0
|
| | | self.NeedGold = 0
|
| | | self.AwardIndex = 0
|
| | | self.AwardItem = {}
|
| | | self.NotifyKey = "" |
| | | return |
| | | |
| | | def GetTemplateID(self): return self.TemplateID # 模板ID
|
| | | def GetNeedGold(self): return self.NeedGold # 需要充值仙玉数
|
| | | def GetAwardIndex(self): return self.AwardIndex # 返利奖励索引0~31,同个模板中不重复
|
| | | def GetAwardItem(self): return self.AwardItem # 返利物品信息列表 {职业:[(物品ID,个数,是否绑定),...]}
|
| | | def GetNotifyKey(self): return self.NotifyKey # 全服广播key,默认两个参数(玩家名, 档位额度) |
| | |
|
| | |
|
| | | def Log(msg, playerID=0, par=0):
|
| | | LogUI.Msg("%s\t%s\t%s" % (par, playerID, msg))
|
| | |
| | | self.ipyFunctionForecastLen = len(self.ipyFunctionForecastCache)
|
| | | self.ipyChatBubbleBoxCache = self.__LoadFileData("ChatBubbleBox", IPY_ChatBubbleBox)
|
| | | self.ipyChatBubbleBoxLen = len(self.ipyChatBubbleBoxCache)
|
| | | self.ipyActTotalRechargeCache = self.__LoadFileData("ActTotalRecharge", IPY_ActTotalRecharge)
|
| | | self.ipyActTotalRechargeLen = len(self.ipyActTotalRechargeCache)
|
| | | self.ipyTotalRechargeTemplateCache = self.__LoadFileData("TotalRechargeTemplate", IPY_TotalRechargeTemplate)
|
| | | self.ipyTotalRechargeTemplateLen = len(self.ipyTotalRechargeTemplateCache)
|
| | | Log("IPY_FuncConfig count=%s" % len(self.ipyFuncConfigDict))
|
| | | Log("IPY_DataMgr InitOK!")
|
| | | return
|
| | |
| | | def GetFunctionForecastByIndex(self, index): return self.ipyFunctionForecastCache[index]
|
| | | def GetChatBubbleBoxCount(self): return self.ipyChatBubbleBoxLen
|
| | | def GetChatBubbleBoxByIndex(self, index): return self.ipyChatBubbleBoxCache[index]
|
| | | def GetActTotalRechargeCount(self): return self.ipyActTotalRechargeLen
|
| | | def GetActTotalRechargeByIndex(self, index): return self.ipyActTotalRechargeCache[index]
|
| | | def GetTotalRechargeTemplateCount(self): return self.ipyTotalRechargeTemplateLen
|
| | | def GetTotalRechargeTemplateByIndex(self, index): return self.ipyTotalRechargeTemplateCache[index]
|
| | |
|
| | | IPYData = IPY_DataMgr()
|
| | | def IPY_Data(): return IPYData
|
| | |
| | | import PlayerFlashSale
|
| | | import PlayerFlashGiftbag
|
| | | import PlayerCostRebate
|
| | | import PlayerActTotalRecharge
|
| | | import PlayerSpringSale
|
| | | import PlayerFairyCeremony
|
| | | import ChNetSendPack
|
| | |
| | |
|
| | | #消费返利
|
| | | PlayerCostRebate.OnPlayerLogin(curPlayer)
|
| | | #累计充值
|
| | | PlayerActTotalRecharge.OnPlayerLogin(curPlayer)
|
| | | #限时特惠
|
| | | PlayerSpringSale.OnPlayerLogin(curPlayer)
|
| | | #限时礼包
|
| | |
| | | # 领取消费返利奖励
|
| | | elif rewardType == ChConfig.Def_RewardType_CostRebate:
|
| | | PlayerCostRebate.OnGetCostRebateAward(curPlayer, dataEx)
|
| | | # 领取累计充值奖励
|
| | | elif rewardType == ChConfig.Def_RewardType_TotalRecharge:
|
| | | PlayerActTotalRecharge.OnGetTotalRechargeAward(curPlayer, dataEx)
|
| | | # 领取boss复活活动奖励
|
| | | elif rewardType == ChConfig.Def_RewardType_BossReborn:
|
| | | PlayerBossReborn.GetBossRebornActionAward(curPlayer, dataEx)
|
New file |
| | |
| | | #!/usr/bin/python
|
| | | # -*- coding: GBK -*-
|
| | | #-------------------------------------------------------------------------------
|
| | | #
|
| | | ##@package Player.PlayerActTotalRecharge
|
| | | #
|
| | | # @todo:累计充值活动
|
| | | # @author hxp
|
| | | # @date 2018-7-16
|
| | | # @version 1.0
|
| | | #
|
| | | # 详细描述: 累计充值活动
|
| | | #
|
| | | #-------------------------------------------------------------------------------
|
| | | #"""Version = 2018-7-16 12:00"""
|
| | | #-------------------------------------------------------------------------------
|
| | |
|
| | | import PyGameData
|
| | | import ShareDefine
|
| | | import PlayerControl
|
| | | import IpyGameDataPY
|
| | | import ItemControler
|
| | | import ChPyNetSendPack
|
| | | import DataRecordPack
|
| | | import IPY_GameWorld
|
| | | import NetPackCommon
|
| | | import ItemCommon
|
| | | import GameWorld
|
| | | import ChConfig
|
| | |
|
| | | def GetTemplateID(cfgID, dayIndex):
|
| | | if cfgID == None or dayIndex == None:
|
| | | return 0
|
| | | ipyData = IpyGameDataPY.GetIpyGameData("ActTotalRecharge", cfgID)
|
| | | if not ipyData:
|
| | | return 0
|
| | | templateIDList = ipyData.GetTemplateIDList()
|
| | | templateID = templateIDList[-1] if dayIndex >= len(templateIDList) else templateIDList[dayIndex]
|
| | | return templateID
|
| | |
|
| | | def OnPlayerLogin(curPlayer):
|
| | | isReset = __CheckPlayerTotalRechargeAction(curPlayer)
|
| | | if not isReset:
|
| | | actTotalRechargeInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_TotalRecharge, {})
|
| | | # 活动中同步活动信息
|
| | | if actTotalRechargeInfo.get(ShareDefine.ActKey_State):
|
| | | Sync_TotalRechargeActionInfo(curPlayer)
|
| | | Sync_TotalRechargeInfo(curPlayer)
|
| | | return
|
| | |
|
| | | def RefreshTotalRechargeActionInfo():
|
| | | ## 收到GameServer同步的活动信息,刷新活动信息
|
| | | playerManager = GameWorld.GetPlayerManager()
|
| | | for index in xrange(playerManager.GetPlayerCount()):
|
| | | curPlayer = playerManager.GetPlayerByIndex(index)
|
| | | if curPlayer.GetID() == 0:
|
| | | continue
|
| | | __CheckPlayerTotalRechargeAction(curPlayer)
|
| | | return
|
| | |
|
| | | def __CheckPlayerTotalRechargeAction(curPlayer):
|
| | | ## 检查玩家累计充值活动数据信息
|
| | | |
| | | playerID = curPlayer.GetPlayerID()
|
| | | |
| | | actTotalRechargeInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_TotalRecharge, {})
|
| | | TotalRechargeID = actTotalRechargeInfo.get(ShareDefine.ActKey_ID, 0)
|
| | | state = actTotalRechargeInfo.get(ShareDefine.ActKey_State, 0)
|
| | | |
| | | playerTotalRechargeID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TotalRechargeID) # 玩家身上的活动ID
|
| | | |
| | | # 活动ID 相同的话不处理
|
| | | if TotalRechargeID == playerTotalRechargeID:
|
| | | #GameWorld.DebugLog("累计充值活动ID不变,不处理!", curPlayer.GetPlayerID())
|
| | | return
|
| | | |
| | | templateID = GetTemplateID(actTotalRechargeInfo.get(ShareDefine.ActKey_CfgID, 0), actTotalRechargeInfo.get(ShareDefine.ActKey_DayIndex, 0))
|
| | | playerTemplateID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TotalRechargeTemplateID)
|
| | | |
| | | GameWorld.DebugLog("累计充值重置! TotalRechargeID=%s,playerTotalRechargeID=%s,state=%s,templateID=%s,playerTemplateID=%s" |
| | | % (TotalRechargeID, playerTotalRechargeID, state, templateID, playerTemplateID), playerID)
|
| | | |
| | | # 未领取的奖励邮件发放
|
| | | __SendTotalRechargeMail(curPlayer, playerTemplateID)
|
| | | |
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TotalRechargeID, TotalRechargeID)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TotalRechargeTemplateID, templateID)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TotalRechargeGold, 0)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TotalRechargeAwardRecord, 0)
|
| | | |
| | | Sync_TotalRechargeActionInfo(curPlayer)
|
| | | Sync_TotalRechargeInfo(curPlayer)
|
| | | return True
|
| | |
|
| | | def __SendTotalRechargeMail(curPlayer, playerTemplateID):
|
| | | # 未领取的奖励邮件发放
|
| | | |
| | | if not playerTemplateID:
|
| | | return
|
| | | |
| | | curRechargeGold = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TotalRechargeGold)
|
| | | if not curRechargeGold:
|
| | | return
|
| | | |
| | | ipyDataList = IpyGameDataPY.GetIpyGameDataList("TotalRechargeTemplate", playerTemplateID)
|
| | | if not ipyDataList:
|
| | | return
|
| | | |
| | | playerID = curPlayer.GetPlayerID()
|
| | | batchPlayerIDList, batchAddItemList, batchParamList = [], [], []
|
| | | awardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TotalRechargeAwardRecord)
|
| | | job = curPlayer.GetJob()
|
| | | for ipyData in ipyDataList:
|
| | | awardIndex = ipyData.GetAwardIndex()
|
| | | if awardRecord & pow(2, awardIndex):
|
| | | continue
|
| | | |
| | | needGold = ipyData.GetNeedGold()
|
| | | if curRechargeGold < needGold:
|
| | | continue
|
| | | awardRecord |= pow(2, awardIndex) |
| | | |
| | | awardItemList = ipyData.GetAwardItem().get(str(job), [])
|
| | | batchPlayerIDList.append([playerID])
|
| | | batchAddItemList.append(awardItemList)
|
| | | batchParamList.append([needGold])
|
| | | |
| | | if batchPlayerIDList:
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TotalRechargeAwardRecord, awardRecord)
|
| | | PlayerControl.SendMailBatch("TotalRechargeMail", batchPlayerIDList, batchAddItemList, batchParamList)
|
| | | |
| | | return
|
| | |
|
| | | def AddTotalRechargeGold(curPlayer, addGold):
|
| | | if addGold <= 0:
|
| | | return
|
| | | |
| | | |
| | | actTotalRechargeInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_TotalRecharge, {})
|
| | | if not actTotalRechargeInfo.get(ShareDefine.ActKey_State):
|
| | | GameWorld.DebugLog("累计充值活动当前未开启!")
|
| | | return
|
| | | |
| | | actID = actTotalRechargeInfo.get(ShareDefine.ActKey_ID)
|
| | | templateID = GetTemplateID(actTotalRechargeInfo.get(ShareDefine.ActKey_CfgID, 0), actTotalRechargeInfo.get(ShareDefine.ActKey_DayIndex, 0))
|
| | | if not actID or not templateID:
|
| | | GameWorld.ErrLog("累计充值活动数据异常!actID=%s,templateID=%s" % (actID, templateID), curPlayer.GetPlayerID())
|
| | | return
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TotalRechargeID, actID)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TotalRechargeTemplateID, templateID)
|
| | | |
| | | curRechargeGold = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TotalRechargeGold)
|
| | | updRechargeGold = curRechargeGold + addGold
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TotalRechargeGold, updRechargeGold)
|
| | | Sync_TotalRechargeInfo(curPlayer)
|
| | | GameWorld.DebugLog("玩家累计充值活动: actID=%s,templateID=%s,curRechargeGold=%s,addGold=%s,updRechargeGold=%s" |
| | | % (actID, templateID, curRechargeGold, addGold, updRechargeGold), curPlayer.GetPlayerID())
|
| | | return
|
| | |
|
| | | def OnGetTotalRechargeAward(curPlayer, awardIndex):
|
| | | ## 领取累计充值奖励
|
| | |
|
| | | playerID = curPlayer.GetPlayerID()
|
| | | |
| | | actTotalRechargeInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_TotalRecharge, {})
|
| | | TotalRechargeID = actTotalRechargeInfo.get(ShareDefine.ActKey_ID, 0)
|
| | | state = actTotalRechargeInfo.get(ShareDefine.ActKey_State, 0)
|
| | | templateID = GetTemplateID(actTotalRechargeInfo.get(ShareDefine.ActKey_CfgID, 0), actTotalRechargeInfo.get(ShareDefine.ActKey_DayIndex, 0))
|
| | | if not state or not templateID:
|
| | | GameWorld.DebugLog("没有累计充值活动,无法领奖!state=%s,templateID=%s" % (state, templateID), playerID)
|
| | | return
|
| | | |
| | | playerTotalRechargeID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TotalRechargeID) # 玩家身上的活动ID
|
| | | if TotalRechargeID != playerTotalRechargeID:
|
| | | return
|
| | | |
| | | awardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TotalRechargeAwardRecord)
|
| | | if awardRecord & pow(2, awardIndex):
|
| | | GameWorld.DebugLog("已经领取过该累计充值活动奖励!awardIndex=%s" % awardIndex, playerID)
|
| | | return
|
| | | |
| | | ipyDataList = IpyGameDataPY.GetIpyGameDataList("TotalRechargeTemplate", templateID)
|
| | | if not ipyDataList:
|
| | | return
|
| | | |
| | | awardIpyData = None
|
| | | for ipyData in ipyDataList:
|
| | | if ipyData.GetAwardIndex() == awardIndex:
|
| | | awardIpyData = ipyData
|
| | | break
|
| | | |
| | | if not awardIpyData:
|
| | | GameWorld.DebugLog("找不到该返利活动档位索引奖励!templateID=%s,awardIndex=%s" % (templateID, awardIndex), playerID)
|
| | | return
|
| | | |
| | | needGold = awardIpyData.GetNeedGold()
|
| | | awardItemList = awardIpyData.GetAwardItem().get(str(curPlayer.GetJob()), [])
|
| | | |
| | | curRechargeGold = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TotalRechargeGold)
|
| | | if curRechargeGold < needGold:
|
| | | GameWorld.DebugLog("所需充值仙玉数不足,无法领取!templateID=%s,awardIndex=%s,needGold=%s,curRechargeGold=%s" |
| | | % (templateID, awardIndex, needGold, curRechargeGold), playerID)
|
| | | return
|
| | | |
| | | needSpace = len(awardItemList)
|
| | | packSpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem, needSpace)
|
| | | if packSpace < needSpace:
|
| | | return
|
| | | |
| | | awardRecord |= pow(2, awardIndex)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TotalRechargeAwardRecord, awardRecord)
|
| | | Sync_TotalRechargeInfo(curPlayer)
|
| | | |
| | | notifyKey = awardIpyData.GetNotifyKey()
|
| | | if notifyKey:
|
| | | PlayerControl.WorldNotify(0, notifyKey, [curPlayer.GetPlayerName(), needGold])
|
| | | |
| | | for itemID, itemCount, isBind in awardItemList:
|
| | | ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, isBind, [IPY_GameWorld.rptItem])
|
| | | |
| | | addDataDict = {"TemplateID":templateID, "NeedGold":needGold, "AwardIndex":awardIndex,
|
| | | "ItemList":str(awardItemList)}
|
| | | DataRecordPack.DR_FuncGiveItem(curPlayer, "TotalRechargeAward", addDataDict)
|
| | | return
|
| | |
|
| | | def Sync_TotalRechargeInfo(curPlayer):
|
| | | ## 通知累计充值玩家数据信息
|
| | | playerActInfo = ChPyNetSendPack.tagMCTotalRechargePlayerInfo()
|
| | | playerActInfo.GoldTotal = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TotalRechargeGold)
|
| | | playerActInfo.AwardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TotalRechargeAwardRecord)
|
| | | NetPackCommon.SendFakePack(curPlayer, playerActInfo)
|
| | | return
|
| | |
|
| | | def Sync_TotalRechargeActionInfo(curPlayer):
|
| | | ## 通知累计充值活动信息
|
| | | actTotalRechargeInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_TotalRecharge, {})
|
| | | if not actTotalRechargeInfo:
|
| | | return
|
| | | |
| | | if not actTotalRechargeInfo.get(ShareDefine.ActKey_State):
|
| | | return
|
| | | |
| | | cfgID = actTotalRechargeInfo.get(ShareDefine.ActKey_CfgID)
|
| | | ipyData = IpyGameDataPY.GetIpyGameData("ActTotalRecharge", cfgID)
|
| | | if not ipyData:
|
| | | return
|
| | | |
| | | templateIDList = ipyData.GetTemplateIDList()
|
| | | if not templateIDList:
|
| | | return
|
| | | job = curPlayer.GetJob()
|
| | | openServerDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ServerDay) + 1
|
| | | actInfo = ChPyNetSendPack.tagMCActTotalRechargeInfo()
|
| | | actInfo.StartDate = GameWorld.GetOperationActionDateStr(ipyData.GetStartDate(), openServerDay)
|
| | | actInfo.EndtDate = GameWorld.GetOperationActionDateStr(ipyData.GetEndDate(), openServerDay)
|
| | | actInfo.LimitLV = ipyData.GetLVLimit()
|
| | | actInfo.IsDayReset = ipyData.GetIsDayReset()
|
| | | actInfo.AwardDayInfo = []
|
| | | for templateID in templateIDList:
|
| | | ipyDataList = IpyGameDataPY.GetIpyGameDataList("TotalRechargeTemplate", templateID)
|
| | | if not ipyDataList:
|
| | | continue
|
| | | |
| | | dayInfo = ChPyNetSendPack.tagMCTotalRechargeAwardDay()
|
| | | dayInfo.AwardInfo = []
|
| | | for ipyData in ipyDataList:
|
| | | awardInfo = ChPyNetSendPack.tagMCTotalRechargeAward()
|
| | | awardInfo.AwardIndex = ipyData.GetAwardIndex()
|
| | | awardInfo.NeedGold = ipyData.GetNeedGold()
|
| | | awardInfo.AwardItem = []
|
| | | awardItemDict = ipyData.GetAwardItem()
|
| | | for itemID, itemCount, isBind in awardItemDict.get(str(job), []):
|
| | | awardItem = ChPyNetSendPack.tagMCTotalRechargeAwardItem()
|
| | | awardItem.ItemID = itemID
|
| | | awardItem.ItemCount = itemCount
|
| | | awardItem.IsBind = isBind
|
| | | awardInfo.AwardItem.append(awardItem)
|
| | | awardInfo.AwardItemCount = len(awardInfo.AwardItem)
|
| | | |
| | | dayInfo.AwardInfo.append(awardInfo)
|
| | | |
| | | dayInfo.AwardCount = len(dayInfo.AwardInfo)
|
| | | actInfo.AwardDayInfo.append(dayInfo)
|
| | | |
| | | actInfo.AwardDays = len(actInfo.AwardDayInfo)
|
| | | NetPackCommon.SendFakePack(curPlayer, actInfo)
|
| | | return
|
| | |
|
| | |
|
| | |
| | | import PlayerFlashGiftbag
|
| | | import PlayerFairyCeremony
|
| | | import PlayerGoldGift
|
| | | import PlayerActTotalRecharge
|
| | | import ItemCommon
|
| | |
|
| | | #---------------------------------------------------------------------
|
| | |
| | | #仙界盛典-充值大礼
|
| | | PlayerFairyCeremony.OnFCRecharge(curPlayer)
|
| | | PlayerGoldGift.DayChargeRedPackAward(curPlayer)
|
| | | PlayerActTotalRecharge.AddTotalRechargeGold(curPlayer, addGold)
|
| | | GameWorld.Log("Billing: eventName=%s, %s" % (eventName, addDRDict), curPlayer.GetPlayerID())
|
| | | return
|
| | |
|
| | |
| | | import GameLogic_Dogz
|
| | | import OpenServerCampaign
|
| | | import PlayerCostRebate
|
| | | import PlayerActTotalRecharge
|
| | | import PlayerSpringSale
|
| | | import PlayerBossReborn
|
| | | import PlayerFlashGiftbag
|
| | |
| | |
|
| | | elif actionName == ShareDefine.OperationActionName_CostRebate:
|
| | | PlayerCostRebate.RefreshCostRebateActionInfo()
|
| | |
|
| | | elif actionName == ShareDefine.OperationActionName_TotalRecharge:
|
| | | PlayerActTotalRecharge.RefreshTotalRechargeActionInfo()
|
| | | elif actionName == ShareDefine.OperationActionName_SpringSale:
|
| | | PlayerSpringSale.RefreshSpringSaleActionInfo()
|
| | |
|
| | |
| | | OperationActionName_RealmPoint = "ActRealmPoint" # 多倍修行点活动
|
| | | OperationActionName_FlashSale = "ActFlashSale" # 限时抢购活动
|
| | | OperationActionName_WishingWell = "ActWishingWell" # 许愿池活动
|
| | | OperationActionName_TotalRecharge = "ActTotalRecharge" # 累计充值活动
|
| | | OperationActionNameList = [OperationActionName_ExpRate, OperationActionName_CostRebate,
|
| | | OperationActionName_BossReborn,OperationActionName_SpringSale,
|
| | | OperationActionName_FlashGiftbag, OperationActionName_FairyCeremony,
|
| | | OperationActionName_RealmPoint, OperationActionName_FlashSale,
|
| | | OperationActionName_WishingWell]
|
| | | OperationActionName_WishingWell, OperationActionName_TotalRecharge]
|
| | | #需要记录开启活动时的世界等级的运营活动
|
| | | NeedWorldLVOperationActNameList = [OperationActionName_FairyCeremony, OperationActionName_WishingWell]
|
| | |
|
| | |
| | | CDBPlayerRefresh_NPCHurtAddPer, # 对怪物伤害加成
|
| | | CDBPlayerRefresh_FinalHurtPer, # 最终输出伤害百分比
|
| | | CDBPlayerRefresh_TalentPoint, # 天赋点数 190
|
| | | ) = range(146, 191)
|
| | | CDBPlayerRefresh_FBHelpPoint, # 副本助战点数 191
|
| | | ) = range(146, 192)
|
| | |
|
| | | TYPE_Price_Gold_Paper_Money = 5 # 金钱类型,(先用礼券,再用金子)
|
| | | TYPE_Price_Family_Contribution = 6 # 战盟贡献度(活跃度转换得来)
|