21个文件已修改
1 文件已重命名
2个文件已删除
2个文件已添加
| | |
| | | {
|
| | | tagHead Head;
|
| | | DWORD Point; // 复活点数
|
| | | DWORD TotalPoint; // 复活总点数
|
| | | };
|
New file |
| | |
| | | AB 04 Boss复活活动信息 #tagMCBossRebornInfo
|
New file |
| | |
| | | // AB 04 Boss复活活动信息 #tagMCBossRebornInfo
|
| | |
|
| | | struct tagMCBossRebornAwardItem
|
| | | {
|
| | | DWORD ItemID;
|
| | | WORD ItemCount;
|
| | | BYTE IsBind;
|
| | | };
|
| | |
|
| | | struct tagMCBossRebornTaskInfo
|
| | | {
|
| | | BYTE TaskID; // id
|
| | | BYTE TotalTimes; // 可完成总次数,0表示不限次数
|
| | | BYTE SingleTimes; // 单次领奖需要次数
|
| | | BYTE AwardItemCount; // 奖励物品数
|
| | | tagMCBossRebornAwardItem AwardItem[AwardItemCount]; // 奖励物品信息
|
| | | };
|
| | |
|
| | | struct tagMCBossRebornInfo
|
| | | {
|
| | | tagHead Head;
|
| | | char StartDate[10]; // 开始日期 y-m-d
|
| | | char EndtDate[10]; // 结束日期 y-m-d
|
| | | WORD LimitLV; // 限制等级
|
| | | BYTE TaskCnt;
|
| | | tagMCBossRebornTaskInfo TaskInfo[TaskCnt]; |
| | | };
|
| | |
| | | dict NotifyInfoStart; //全服提示信息 - 相对开始时间
|
| | | dict NotifyInfoEnd; //全服提示信息 - 相对结束时间
|
| | | WORD LVLimit; //限制等级
|
| | | BYTE TemplateID; //模板编号
|
| | | };
|
| | |
|
| | | //仙界盛典活动时间表
|
| | |
| | |
|
| | | struct tagBossReborn
|
| | | {
|
| | | BYTE _ID; //ID
|
| | | BYTE _TemplateID; //模板ID
|
| | | BYTE _ID; //活动条目ID
|
| | | DWORD TotalTimes; //可完成的总次数,0表示不限次数
|
| | | WORD SingleTimes; //单次领奖需要的次数
|
| | | list RewardItemID1; //奖励物品ID1
|
| | | list RewardItemCnt1; //奖励物品数量1
|
| | | list RewardItemID2; //奖励物品ID2
|
| | | list RewardItemCnt2; //奖励物品数量2
|
| | | list RewardItemID3; //奖励物品ID3
|
| | | list RewardItemCnt3; //奖励物品数量3
|
| | | list WorldLVList; //世界等级
|
| | | list Reward; //奖励物品ID1
|
| | | };
|
| | |
|
| | |
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # AC 07 BOSS复活活动信息 #tagGCBossRebornInfo
|
| | |
|
| | | class tagGCBossRebornInfo(Structure):
|
| | | Head = tagHead()
|
| | | StartDate = "" #(char StartDate[10])// 开始日期 y-m-d
|
| | | EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d
|
| | | WorldLV = 0 #(WORD WorldLV)// 世界等级
|
| | | LimitLV = 0 #(WORD LimitLV)// 限制等级
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xAC
|
| | | self.Head.SubCmd = 0x07
|
| | | 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.WorldLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xAC
|
| | | self.Head.SubCmd = 0x07
|
| | | self.StartDate = ""
|
| | | self.EndtDate = ""
|
| | | self.WorldLV = 0
|
| | | self.LimitLV = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 10
|
| | | length += 10
|
| | | length += 2
|
| | | length += 2
|
| | |
|
| | | 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.WriteWORD(data, self.WorldLV)
|
| | | data = CommFunc.WriteWORD(data, self.LimitLV)
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | StartDate:%s,
|
| | | EndtDate:%s,
|
| | | WorldLV:%d,
|
| | | LimitLV:%d
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.StartDate,
|
| | | self.EndtDate,
|
| | | self.WorldLV,
|
| | | self.LimitLV
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagGCBossRebornInfo=tagGCBossRebornInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCBossRebornInfo.Head.Cmd,m_NAtagGCBossRebornInfo.Head.SubCmd))] = m_NAtagGCBossRebornInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # AC 08 boss复活点数通知 #tagGCBossRebornPoint
|
| | |
|
| | | class tagGCBossRebornPoint(Structure):
|
| | |
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("Point", c_int), # 复活点数
|
| | | ("TotalPoint", c_int), # 复活总点数
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | |
| | | self.Cmd = 0xAC
|
| | | self.SubCmd = 0x08
|
| | | self.Point = 0
|
| | | self.TotalPoint = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | |
| | | DumpString = '''// AC 08 boss复活点数通知 //tagGCBossRebornPoint:
|
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | Point:%d
|
| | | Point:%d,
|
| | | TotalPoint:%d
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.Point
|
| | | self.Point,
|
| | | self.TotalPoint
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # AB 04 Boss复活活动信息 #tagMCBossRebornInfo
|
| | |
|
| | | class tagMCBossRebornAwardItem(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(tagMCBossRebornAwardItem)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// AB 04 Boss复活活动信息 //tagMCBossRebornInfo:
|
| | | ItemID:%d,
|
| | | ItemCount:%d,
|
| | | IsBind:%d
|
| | | '''\
|
| | | %(
|
| | | self.ItemID,
|
| | | self.ItemCount,
|
| | | self.IsBind
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | class tagMCBossRebornTaskInfo(Structure):
|
| | | TaskID = 0 #(BYTE TaskID)// id
|
| | | TotalTimes = 0 #(BYTE TotalTimes)// 可完成总次数,0表示不限次数
|
| | | SingleTimes = 0 #(BYTE SingleTimes)// 单次领奖需要次数
|
| | | AwardItemCount = 0 #(BYTE AwardItemCount)// 奖励物品数
|
| | | AwardItem = list() #(vector<tagMCBossRebornAwardItem> AwardItem)// 奖励物品信息
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | self.TaskID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.TotalTimes,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.SingleTimes,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.AwardItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.AwardItemCount):
|
| | | temAwardItem = tagMCBossRebornAwardItem()
|
| | | _pos = temAwardItem.ReadData(_lpData, _pos)
|
| | | self.AwardItem.append(temAwardItem)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.TaskID = 0
|
| | | self.TotalTimes = 0
|
| | | self.SingleTimes = 0
|
| | | self.AwardItemCount = 0
|
| | | self.AwardItem = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += 1
|
| | | length += 1
|
| | | length += 1
|
| | | length += 1
|
| | | for i in range(self.AwardItemCount):
|
| | | length += self.AwardItem[i].GetLength()
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteBYTE(data, self.TaskID)
|
| | | data = CommFunc.WriteBYTE(data, self.TotalTimes)
|
| | | data = CommFunc.WriteBYTE(data, self.SingleTimes)
|
| | | 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 = '''
|
| | | TaskID:%d,
|
| | | TotalTimes:%d,
|
| | | SingleTimes:%d,
|
| | | AwardItemCount:%d,
|
| | | AwardItem:%s
|
| | | '''\
|
| | | %(
|
| | | self.TaskID,
|
| | | self.TotalTimes,
|
| | | self.SingleTimes,
|
| | | self.AwardItemCount,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | class tagMCBossRebornInfo(Structure):
|
| | | Head = tagHead()
|
| | | StartDate = "" #(char StartDate[10])// 开始日期 y-m-d
|
| | | EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d
|
| | | LimitLV = 0 #(WORD LimitLV)// 限制等级
|
| | | TaskCnt = 0 #(BYTE TaskCnt)
|
| | | TaskInfo = list() #(vector<tagMCBossRebornTaskInfo> TaskInfo)
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xAB
|
| | | self.Head.SubCmd = 0x04
|
| | | 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.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.TaskCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.TaskCnt):
|
| | | temTaskInfo = tagMCBossRebornTaskInfo()
|
| | | _pos = temTaskInfo.ReadData(_lpData, _pos)
|
| | | self.TaskInfo.append(temTaskInfo)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xAB
|
| | | self.Head.SubCmd = 0x04
|
| | | self.StartDate = ""
|
| | | self.EndtDate = ""
|
| | | self.LimitLV = 0
|
| | | self.TaskCnt = 0
|
| | | self.TaskInfo = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 10
|
| | | length += 10
|
| | | length += 2
|
| | | length += 1
|
| | | for i in range(self.TaskCnt):
|
| | | length += self.TaskInfo[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.WriteWORD(data, self.LimitLV)
|
| | | data = CommFunc.WriteBYTE(data, self.TaskCnt)
|
| | | for i in range(self.TaskCnt):
|
| | | data = CommFunc.WriteString(data, self.TaskInfo[i].GetLength(), self.TaskInfo[i].GetBuffer())
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | StartDate:%s,
|
| | | EndtDate:%s,
|
| | | LimitLV:%d,
|
| | | TaskCnt:%d,
|
| | | TaskInfo:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.StartDate,
|
| | | self.EndtDate,
|
| | | self.LimitLV,
|
| | | self.TaskCnt,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagMCBossRebornInfo=tagMCBossRebornInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCBossRebornInfo.Head.Cmd,m_NAtagMCBossRebornInfo.Head.SubCmd))] = m_NAtagMCBossRebornInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # AB 23 摇骰子奖励回包 #tagMCDiceAward
|
| | |
|
| | | class tagMCDiceAward(Structure):
|
| | |
| | | ipyData = operationActionDict[ShareDefine.OperationActionName_ExpRate][0]
|
| | | if ipyData:
|
| | | Sync_OperationAction_ExpRate(ipyData, curPlayer)
|
| | | # BOSS复活活动进行中
|
| | | if ShareDefine.OperationActionName_BossReborn in operationActionDict:
|
| | | ipyData = operationActionDict[ShareDefine.OperationActionName_BossReborn][0]
|
| | | if ipyData:
|
| | | GameWorldBoss.Sync_OperationAction_BossReborn(ipyData, curPlayer)
|
| | |
|
| | | # 仙界盛典活动进行中
|
| | | if ShareDefine.OperationActionName_FairyCeremony in operationActionDict:
|
| | | ipyData = operationActionDict[ShareDefine.OperationActionName_FairyCeremony][0]
|
| | |
| | | ShareDefine.ActKey_ShopTypeList:todayShopType}
|
| | | # Boss复活活动
|
| | | elif actName == ShareDefine.OperationActionName_BossReborn:
|
| | | mapServerInfoDict = {ShareDefine.ActKey_ID:actID}
|
| | | mapServerInfoDict = {ShareDefine.ActKey_ID:actID,
|
| | | ShareDefine.ActKey_TemplateID:ipyData.GetTemplateID(),
|
| | | ShareDefine.ActKey_StartDate:ipyData.GetStartDate(),
|
| | | ShareDefine.ActKey_EndDate:ipyData.GetEndDate(),
|
| | | ShareDefine.ActKey_LVLimit:ipyData.GetLVLimit(),}
|
| | | # 限时礼包活动
|
| | | elif actName == ShareDefine.OperationActionName_FlashGiftbag:
|
| | | isDayReset = ipyData.GetIsDayReset()
|
| | |
| | | PlayerControl.WorldNotify(0, notifyKey, paramList)
|
| | |
|
| | | dictName = ChConfig.Def_WorldKey_OperationActionState % actName
|
| | | if not isReload and gameWorld.GetDictByKey(dictName) == state:
|
| | | preState = gameWorld.GetDictByKey(dictName)
|
| | | if not isReload and preState == state:
|
| | | #已经是这个状态了
|
| | | continue
|
| | | #更新字典值
|
| | |
| | | curActID = sendMapServerMsgDict.get(ShareDefine.ActKey_ID)
|
| | | if state >= 1 and curActID and PlayerDBGSEvent.GetDBGSTrig_ByKey(dbOperationActIDKey) != curActID:
|
| | | PlayerDBGSEvent.SetDBGSTrig_ByKey(dbOperationActIDKey, curActID)
|
| | | if actName in ShareDefine.NeedWorldLVOperationActNameList:
|
| | | #记录开启时世界等级
|
| | | worldLV = PlayerDBGSEvent.GetDBGSTrig_ByKey(ShareDefine.Def_Notify_WorldKey_WorldAverageLv)
|
| | | PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_OActWorldLV % actName, worldLV)
|
| | | |
| | | #此处为活动开启时
|
| | | if actName == ShareDefine.OperationActionName_BossReborn:
|
| | | #重置BOSS复活点
|
| | |
| | | #重置仙界盛典
|
| | | PlayerFairyCeremony.ResetFairyCeremony()
|
| | |
|
| | | if actName in ShareDefine.NeedWorldLVOperationActNameList:
|
| | | #记录开启时世界等级
|
| | | worldLV = PlayerDBGSEvent.GetDBGSTrig_ByKey(ShareDefine.Def_Notify_WorldKey_WorldAverageLv)
|
| | | PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_OActWorldLV % actName, worldLV)
|
| | | |
| | |
|
| | | if state == 1 and actName in ShareDefine.NeedWorldLVOperationActNameList:
|
| | | actWorldLV = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_OActWorldLV % actName)
|
| | |
| | | pass
|
| | | elif actName == ShareDefine.OperationActionName_BossReborn:
|
| | | if isReload and ipyData:
|
| | | GameWorldBoss.Sync_OperationAction_BossReborn(ipyData)
|
| | | GameWorldBoss.SetBossRebornNeedPoint(True)
|
| | |
|
| | | elif actName == ShareDefine.OperationActionName_FairyCeremony:
|
| | | if isReload and ipyData:
|
| | | PlayerFairyCeremony.Sync_OperationAction_FairyCeremony(ipyData)
|
| | | if state == 0:
|
| | | if preState != state and state == 0:
|
| | | PlayerFairyCeremony.OnFairyCeremonyEnd()
|
| | | elif actName == ShareDefine.OperationActionName_RealmPoint:
|
| | | if isReload and ipyData:
|
| | |
| | | sendMapServerMsgDict[ShareDefine.ActKey_State] = state
|
| | | GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_OperationActionInfo % actName, sendMapServerMsgDict)
|
| | |
|
| | | GameWorld.Log("运营活动变更: actName=%s,state=%s,dictName=%s, %s" % (actName, state, dictName, sendMapServerMsgDict))
|
| | | GameWorld.Log("运营活动变更: actName=%s,preState=%s,state=%s,dictName=%s, %s" % (actName, preState, state, dictName, sendMapServerMsgDict))
|
| | | return
|
| | |
|
| | | def Sync_OperationAction_ExpRate(ipyData, curPlayer=None):
|
| | |
| | | return
|
| | | totalPoint = gameWorld.GetDictByKey(ChConfig.Def_WorldKey_BossRebornNeedPoint)
|
| | | if not totalPoint:
|
| | | totalPoint = __SetBossRebornNeedPoint()
|
| | | totalPoint = SetBossRebornNeedPoint()
|
| | | if not totalPoint:
|
| | | GameWorld.Log(' 增加boss复活点 没有总点数!!!!')
|
| | | return
|
| | |
| | | def ResetBossRebornPoint():
|
| | | ## 重置boss复活点
|
| | | PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_BossRebornPoint, 0)
|
| | | Sync_BossRebornPoint()
|
| | | |
| | | # 活动开启时设置参数 服务器人数
|
| | | lvLimit = IpyGameDataPY.GetFuncCfg('ServerActivePlayerCnt')
|
| | | yesterdayPlayerCnt = len([1 for lv in PyGameData.g_yesterdayPlayerLVDict.values() if lv >= lvLimit]) #参数昨日活跃人数
|
| | | serverActivePlayerCnt = eval(IpyGameDataPY.GetFuncCompileCfg('ServerActivePlayerCnt', 2))
|
| | | PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_BRServerPlayerCnt, serverActivePlayerCnt)
|
| | | GameWorld.Log(' boss复活活动开启时设置昨日活跃人数yesterdayPlayerCnt=%s'%yesterdayPlayerCnt)
|
| | | #重新计算需要总点数
|
| | | __SetBossRebornNeedPoint()
|
| | | SetBossRebornNeedPoint()
|
| | | |
| | | Sync_BossRebornPoint()
|
| | | return
|
| | |
|
| | | def __SetBossRebornNeedPoint():
|
| | | def SetBossRebornNeedPoint(isSync=False):
|
| | | totalPointList = IpyGameDataPY.GetFuncEvalCfg('BossRebornTotalPoint')
|
| | | worldLVList = IpyGameDataPY.GetFuncEvalCfg('BossRebornTotalPoint', 2)
|
| | | playerCntList = IpyGameDataPY.GetFuncEvalCfg('BossRebornTotalPoint', 2)
|
| | |
|
| | | actWorldLV = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_OActWorldLV % ShareDefine.OperationActionName_BossReborn)
|
| | | BRServerPlayerCnt = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_BRServerPlayerCnt)
|
| | |
|
| | | index = len(worldLVList)-1
|
| | | for i, lv in enumerate(worldLVList):
|
| | | prelv = 0 if i ==0 else worldLVList[i-1]
|
| | | if prelv <=actWorldLV < lv:
|
| | | index = len(playerCntList)-1
|
| | | for i, cnt in enumerate(playerCntList):
|
| | | preCnt = 0 if i ==0 else playerCntList[i-1]
|
| | | if preCnt <=BRServerPlayerCnt < cnt:
|
| | | index = i
|
| | | break
|
| | |
|
| | | totalPoint = totalPointList[-1] if index >= len(totalPointList) else totalPointList[index]
|
| | | GameWorld.GetGameWorld().SetDict(ChConfig.Def_WorldKey_BossRebornNeedPoint, totalPoint)
|
| | | if isSync:
|
| | | Sync_BossRebornPoint()
|
| | | return totalPoint
|
| | |
|
| | | def BossRebornWorldNotify(curTime):
|
| | |
| | | ##通知BOSS复活点数
|
| | | packData = ChPyNetSendPack.tagGCBossRebornPoint()
|
| | | packData.Point = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_BossRebornPoint)
|
| | | totalPoint = GameWorld.GetGameWorld().GetDictByKey(ChConfig.Def_WorldKey_BossRebornNeedPoint)
|
| | | if not totalPoint:
|
| | | totalPoint = SetBossRebornNeedPoint()
|
| | | packData.TotalPoint = totalPoint
|
| | | playerManager = GameWorld.GetPlayerManager()
|
| | | if not curPlayer:
|
| | | for i in xrange(playerManager.GetActivePlayerCount()):
|
| | |
| | | NetPackCommon.SendFakePack(curPlayer, packData)
|
| | | return
|
| | |
|
| | |
|
| | | def Sync_OperationAction_BossReborn(ipyData, curPlayer=None):
|
| | | ## 通知boss复活活动信息
|
| | | if not ipyData:
|
| | | return
|
| | | |
| | | bossRebornInfo = ChPyNetSendPack.tagGCBossRebornInfo()
|
| | | bossRebornInfo.Clear()
|
| | | bossRebornInfo.StartDate = ipyData.GetStartDate()
|
| | | bossRebornInfo.EndtDate = ipyData.GetEndDate()
|
| | | bossRebornInfo.WorldLV = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_OActWorldLV % ShareDefine.OperationActionName_BossReborn)
|
| | | bossRebornInfo.LimitLV = ipyData.GetLVLimit()
|
| | | if not curPlayer:
|
| | | # 全服广播在线玩家
|
| | | playerManager = GameWorld.GetPlayerManager()
|
| | | for i in xrange(playerManager.GetActivePlayerCount()):
|
| | | curPlayer = playerManager.GetActivePlayerAt(i)
|
| | | if curPlayer == None or not curPlayer.GetInitOK():
|
| | | continue
|
| | | if PlayerControl.GetIsTJG(curPlayer):
|
| | | continue
|
| | | NetPackCommon.SendFakePack(curPlayer, bossRebornInfo)
|
| | | else:
|
| | | if PlayerControl.GetIsTJG(curPlayer):
|
| | | return
|
| | | NetPackCommon.SendFakePack(curPlayer, bossRebornInfo)
|
| | | return
|
| | |
| | | import PlayerXMZZ
|
| | | import PlayerTeam
|
| | | import PyGameData
|
| | | import ChPlayer
|
| | | #---------------------------------------------------------------------
|
| | |
|
| | | #---------------------------------------------------------------------
|
| | |
| | | # GameDataRecord.OnDayResetRecord()
|
| | | # 仙盟红包
|
| | | PlayerFamilyRedPacket.DoOnDay()
|
| | | |
| | | # 玩家等级记录更新
|
| | | ChPlayer.UpdataPlayerLVInfo()
|
| | | # 通知开服天数
|
| | | #openServerDay = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_ServerDay)
|
| | | #GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_ServerDay, openServerDay)
|
| | |
| | | __DoMixServerInit()
|
| | | #仙魔之争
|
| | | PlayerXMZZ.OnGameServerInitOK()
|
| | | #加载活跃玩家等级信息
|
| | | ChPlayer.LoadPlayerLVData()
|
| | | #世界boss被杀次数重置
|
| | | #GameWorldBoss.CheckResetBossKilledCntOnServerInit()
|
| | | #GameWorldActionTeHui.OnGameServerInitOK() # 特惠活动初始化
|
| | |
| | | # @return None
|
| | | def BeforeClose(tick):
|
| | | PlayerTeam.OnServerClose(tick)
|
| | | ChPlayer.SavePlayerLVData()
|
| | | GameWorld.Log("通知C++关服!")
|
| | | GameWorld.GetGameWorld().OnServerClose()
|
| | |
|
| | |
| | | ("dict", "NotifyInfoStart", 0),
|
| | | ("dict", "NotifyInfoEnd", 0),
|
| | | ("WORD", "LVLimit", 0),
|
| | | ("BYTE", "TemplateID", 0),
|
| | | ),
|
| | |
|
| | | "ActFairyCeremony":(
|
| | |
| | | self.EndDate = ""
|
| | | self.NotifyInfoStart = {}
|
| | | self.NotifyInfoEnd = {}
|
| | | self.LVLimit = 0 |
| | | self.LVLimit = 0
|
| | | self.TemplateID = 0 |
| | | return |
| | | |
| | | def GetCfgID(self): return self.CfgID # 配置ID
|
| | |
| | | def GetEndDate(self): return self.EndDate # 结束日期
|
| | | def GetNotifyInfoStart(self): return self.NotifyInfoStart # 全服提示信息 - 相对开始时间
|
| | | def GetNotifyInfoEnd(self): return self.NotifyInfoEnd # 全服提示信息 - 相对结束时间
|
| | | def GetLVLimit(self): return self.LVLimit # 限制等级 |
| | | def GetLVLimit(self): return self.LVLimit # 限制等级
|
| | | def GetTemplateID(self): return self.TemplateID # 模板编号 |
| | | |
| | | # 仙界盛典活动时间表 |
| | | class IPY_ActFairyCeremony(): |
| | |
| | | import PlayerGeTui
|
| | | import GameWorldActionControl
|
| | | import GMT_CTG
|
| | | import PyGameData
|
| | | #---------------------------------------------------------------------
|
| | |
|
| | | #---------------------------------------------------------------------
|
| | |
| | | PlayerGeTui.CleanNewGuyCallBackGeTui(curPlayer.GetID())
|
| | | #活动
|
| | | GameWorldActionControl.OnPlayerLogin(curPlayer)
|
| | | #玩家等级记录
|
| | | PyGameData.g_todayPlayerLVDict[curPlayer.GetID()] = curPlayer.GetLV()
|
| | |
|
| | | GMT_CTG.OnPlayerLogin(curPlayer)
|
| | |
|
| | |
| | | elif packType == IPY_GameServer.CDBPlayerRefresh_LV:
|
| | | curPlayer.SetLV(packValue)
|
| | | PlayerSocial.UpdateSocialInfo(curPlayer, packType, packValue)
|
| | | #玩家等级记录
|
| | | playerID = curPlayer.GetID()
|
| | | if playerID in PyGameData.g_todayPlayerLVDict:
|
| | | PyGameData.g_todayPlayerLVDict[playerID] = packValue
|
| | |
|
| | | elif packType == IPY_GameServer.CDBPlayerRefresh_Job:
|
| | | curPlayer.SetJob(packValue)
|
| | |
| | | NetPackCommon.SendFakePack(curPlayer, serverDateTime)
|
| | | return
|
| | |
|
| | | def UpdataPlayerLVInfo():
|
| | | #Onday更新玩家等级信息
|
| | | PyGameData.g_yesterdayPlayerLVDict = PyGameData.g_todayPlayerLVDict
|
| | | PyGameData.g_todayPlayerLVDict = {}
|
| | | playerManager = GameWorld.GetPlayerManager()
|
| | | for i in xrange(playerManager.GetActivePlayerCount()):
|
| | | curPlayer = playerManager.GetActivePlayerAt(i)
|
| | | if curPlayer == None or not curPlayer.GetInitOK():
|
| | | continue
|
| | | if PlayerControl.GetIsTJG(curPlayer):
|
| | | continue
|
| | | PyGameData.g_todayPlayerLVDict[curPlayer.GetID()] = curPlayer.GetLV()
|
| | | return
|
| | |
|
| | | def LoadPlayerLVData():
|
| | | #服务器开启时加载活跃玩家等级信息
|
| | | universalRecMgr = GameWorld.GetUniversalRecMgr()
|
| | |
|
| | | recDataList = universalRecMgr.GetTypeList(ShareDefine.Def_UniversalGameRecType_TodayPlayerLVInfo)
|
| | | allCnt = recDataList.Count()
|
| | | for index in xrange(allCnt):
|
| | | recData = recDataList.At(index)
|
| | | PyGameData.g_todayPlayerLVDict[recData.GetValue1()] = recData.GetValue2()
|
| | |
|
| | | |
| | | recDataList = universalRecMgr.GetTypeList(ShareDefine.Def_UniversalGameRecType_YesterdayPlayerLVInfo)
|
| | | allCnt = recDataList.Count()
|
| | | for index in xrange(allCnt):
|
| | | recData = recDataList.At(index)
|
| | | PyGameData.g_yesterdayPlayerLVDict[recData.GetValue1()] = recData.GetValue2()
|
| | | GameWorld.DebugLog(' 服务器开启时加载活跃玩家等级信息g_todayPlayerLVDict=%s, g_yesterdayPlayerLVDict=%s'%(PyGameData.g_todayPlayerLVDict,PyGameData.g_yesterdayPlayerLVDict))
|
| | | return
|
| | |
|
| | | def SavePlayerLVData():
|
| | | #服务器关闭前时保存活跃玩家等级信息
|
| | | GameWorld.GetUniversalRecMgr().Delete(ShareDefine.Def_UniversalGameRecType_TodayPlayerLVInfo)
|
| | | GameWorld.GetUniversalRecMgr().Delete(ShareDefine.Def_UniversalGameRecType_YesterdayPlayerLVInfo)
|
| | | universalRecMgr = GameWorld.GetUniversalRecMgr()
|
| | | recDataList = universalRecMgr.GetTypeList(ShareDefine.Def_UniversalGameRecType_TodayPlayerLVInfo)
|
| | | for playerID, lv in PyGameData.g_todayPlayerLVDict.items():
|
| | | recData = recDataList.AddRec()
|
| | | recData.SetValue1(playerID)
|
| | | recData.SetValue2(lv)
|
| | | |
| | | recDataList = universalRecMgr.GetTypeList(ShareDefine.Def_UniversalGameRecType_YesterdayPlayerLVInfo)
|
| | | for playerID, lv in PyGameData.g_yesterdayPlayerLVDict.items():
|
| | | recData = recDataList.AddRec()
|
| | | recData.SetValue1(playerID)
|
| | | recData.SetValue2(lv)
|
| | | return |
| | |
| | | import time
|
| | | import json
|
| | |
|
| | | Def_Sort_IndexList_Interval = IpyGameDataPY.GetFuncCfg('BourseUpdataCD') #五分钟更新一次子索引列表
|
| | |
|
| | | g_lastSortTimeForQueryTypeDict = {} #记录对应查询类型上次更新子索引列表时间
|
| | | g_dict_Of_QueryTypeIndexList = {} #储存对应查询类型的排序列表的字典
|
| | |
|
| | |
| | | lastSortTick = g_lastSortTimeForQueryTypeDict.get(queryType, 0)
|
| | |
|
| | | queryTypeList = g_dict_Of_QueryTypeIndexList.get(queryType, None)
|
| | | Def_Sort_IndexList_Interval = IpyGameDataPY.GetFuncCfg('BourseUpdataCD') #五分钟更新一次子索引列表
|
| | | if queryTypeList == None or tick - lastSortTick > Def_Sort_IndexList_Interval:
|
| | | SortIndexList(queryType)#重新排序指定类型
|
| | | lastSortTick = tick
|
| | |
| | | Def_OActWorldLV = "OActWorldLV_%s"
|
| | | #boss复活活动当前复活点
|
| | | Def_BossRebornPoint = "BossRebornPoint"
|
| | | #boss复活活动参数服务器人数
|
| | | Def_BRServerPlayerCnt = "BRServerPlayerCnt"
|
| | |
|
| | | ## 查找事件
|
| | | # @param findID 查找的ID
|
| | |
| | | g_bossShuntDeadLine = {} # boss分流线路boss已死亡的线路 {bossID:[lineID, ...], ...}
|
| | | g_bossShuntDeadLineChangeBoss = [] # boss分流已死亡线路有变更的boss列表
|
| | |
|
| | | g_ctgOfflinePlayerInfo = {} # {playerID:[[ctgInfo], ...], ...} # 离线玩家CTG信息缓存
|
| | | g_todayPlayerLVDict = {} #今日玩家等级字典 {playerID:lv,..}
|
| | | g_yesterdayPlayerLVDict = {} #昨日玩家等级字典{playerID:lv,..}
|
| | |
|
| | | g_ctgOfflinePlayerInfo = {} # {playerID:[[ctgInfo], ...], ...} # 离线玩家CTG信息缓存
|
| | |
| | | OperationActionName_FlashGiftbag, OperationActionName_FairyCeremony,
|
| | | OperationActionName_RealmPoint]
|
| | | #需要记录开启活动时的世界等级的运营活动
|
| | | NeedWorldLVOperationActNameList = [OperationActionName_BossReborn, OperationActionName_FairyCeremony]
|
| | | NeedWorldLVOperationActNameList = [OperationActionName_FairyCeremony]
|
| | |
|
| | | #活动信息字典key定义
|
| | | ActKey_ID = "ID" # 活动ID,唯一标识的ID,一般是活动开启的time值
|
| | |
| | | Def_UniversalGameRecType_LVAwardRecord, #玩家等级奖励记录 3
|
| | | Def_UniversalGameRecType_LimitFBOpenRecord,#限时副本开启时间记录4
|
| | | Def_UniversalGameRecType_DujieHelpCntRecord, # 渡劫副本护法次数5
|
| | | Def_UniversalGameRecType_6,
|
| | | Def_UniversalGameRecType_7,
|
| | | Def_UniversalGameRecType_TodayPlayerLVInfo, #今日活跃玩家等级信息6
|
| | | Def_UniversalGameRecType_YesterdayPlayerLVInfo,#昨日活跃玩家等级信息7
|
| | | Def_UniversalGameRecType_8,
|
| | | Def_UniversalGameRecType_9,
|
| | | Def_UniversalGameRecType_10,
|
| | |
| | |
|
| | | #BOSS复活
|
| | | Def_PDict_BossRebornID = "BossRebornID" # 玩家身上的BOSS复活活动ID,唯一标识,取活动开始日期time值
|
| | | Def_PDict_BossRebornTemplateID = "BossRebornTemplateID" # 玩家身上的BOSS复活模板ID
|
| | | Def_PDict_BRActionCurTimes = "BRActionCurTimes_%s" #当前完成次数 参数BOSS复活活动ID
|
| | | Def_PDict_BRActionGotTimes = "BRActionGotTimes_%s" #当前已领次数 参数BOSS复活活动ID
|
| | | Def_PDict_BRActionWorldLV = "BRActionWorldLV" #玩家身上的BOSS复活时的世界等级
|
| | |
|
| | | #仙界盛典
|
| | | Def_PDict_FairyCeremonyID = "FairyCeremonyID" # 玩家身上的仙界盛典活动ID,唯一标识,取活动开始日期time值
|
| | |
| | | Def_BRAct_GodArea, #进入古神禁地副本 2
|
| | | Def_BRAct_MoneyPray, #铜钱祈愿 3
|
| | | Def_BRAct_ExpPray, #经验祈愿 4
|
| | | Def_BRAct_Treasure, #寻宝 5
|
| | | Def_BRAct_Treasure, #极品寻宝 5
|
| | | Def_BRAct_WorldBOSS, #击杀世界boss获得掉落归属 6
|
| | | Def_BRAct_BOSSHome, #击杀boss之家获得掉落归属 7
|
| | | Def_BRAct_FMT, #挑战封魔坛BOSS 8
|
| | | Def_BRAct_RunTask, #完成师门悬赏 9
|
| | | Def_BRAct_XJMJ, #完成仙界秘境 10
|
| | | Def_BRAct_KirinHome, #完成麒麟之府 11
|
| | | ) = range(1, 11+1)
|
| | | Def_BRAct_TowerSweep, #符印塔扫荡 12
|
| | | Def_BRAct_RuneTreasure, #符印寻宝 13
|
| | | ) = range(1, 13+1)
|
| | |
|
| | | #全民来嗨活动定义
|
| | | PeoplePartyActIDList = (
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # AC 07 BOSS复活活动信息 #tagGCBossRebornInfo
|
| | |
|
| | | class tagGCBossRebornInfo(Structure):
|
| | | Head = tagHead()
|
| | | StartDate = "" #(char StartDate[10])// 开始日期 y-m-d
|
| | | EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d
|
| | | WorldLV = 0 #(WORD WorldLV)// 世界等级
|
| | | LimitLV = 0 #(WORD LimitLV)// 限制等级
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xAC
|
| | | self.Head.SubCmd = 0x07
|
| | | 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.WorldLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xAC
|
| | | self.Head.SubCmd = 0x07
|
| | | self.StartDate = ""
|
| | | self.EndtDate = ""
|
| | | self.WorldLV = 0
|
| | | self.LimitLV = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 10
|
| | | length += 10
|
| | | length += 2
|
| | | length += 2
|
| | |
|
| | | 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.WriteWORD(data, self.WorldLV)
|
| | | data = CommFunc.WriteWORD(data, self.LimitLV)
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | StartDate:%s,
|
| | | EndtDate:%s,
|
| | | WorldLV:%d,
|
| | | LimitLV:%d
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.StartDate,
|
| | | self.EndtDate,
|
| | | self.WorldLV,
|
| | | self.LimitLV
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagGCBossRebornInfo=tagGCBossRebornInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCBossRebornInfo.Head.Cmd,m_NAtagGCBossRebornInfo.Head.SubCmd))] = m_NAtagGCBossRebornInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # AC 08 boss复活点数通知 #tagGCBossRebornPoint
|
| | |
|
| | | class tagGCBossRebornPoint(Structure):
|
| | |
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("Point", c_int), # 复活点数
|
| | | ("TotalPoint", c_int), # 复活总点数
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | |
| | | self.Cmd = 0xAC
|
| | | self.SubCmd = 0x08
|
| | | self.Point = 0
|
| | | self.TotalPoint = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | |
| | | DumpString = '''// AC 08 boss复活点数通知 //tagGCBossRebornPoint:
|
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | Point:%d
|
| | | Point:%d,
|
| | | TotalPoint:%d
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.Point
|
| | | self.Point,
|
| | | self.TotalPoint
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # AB 04 Boss复活活动信息 #tagMCBossRebornInfo
|
| | |
|
| | | class tagMCBossRebornAwardItem(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(tagMCBossRebornAwardItem)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// AB 04 Boss复活活动信息 //tagMCBossRebornInfo:
|
| | | ItemID:%d,
|
| | | ItemCount:%d,
|
| | | IsBind:%d
|
| | | '''\
|
| | | %(
|
| | | self.ItemID,
|
| | | self.ItemCount,
|
| | | self.IsBind
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | class tagMCBossRebornTaskInfo(Structure):
|
| | | TaskID = 0 #(BYTE TaskID)// id
|
| | | TotalTimes = 0 #(BYTE TotalTimes)// 可完成总次数,0表示不限次数
|
| | | SingleTimes = 0 #(BYTE SingleTimes)// 单次领奖需要次数
|
| | | AwardItemCount = 0 #(BYTE AwardItemCount)// 奖励物品数
|
| | | AwardItem = list() #(vector<tagMCBossRebornAwardItem> AwardItem)// 奖励物品信息
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | self.TaskID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.TotalTimes,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.SingleTimes,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.AwardItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.AwardItemCount):
|
| | | temAwardItem = tagMCBossRebornAwardItem()
|
| | | _pos = temAwardItem.ReadData(_lpData, _pos)
|
| | | self.AwardItem.append(temAwardItem)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.TaskID = 0
|
| | | self.TotalTimes = 0
|
| | | self.SingleTimes = 0
|
| | | self.AwardItemCount = 0
|
| | | self.AwardItem = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += 1
|
| | | length += 1
|
| | | length += 1
|
| | | length += 1
|
| | | for i in range(self.AwardItemCount):
|
| | | length += self.AwardItem[i].GetLength()
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteBYTE(data, self.TaskID)
|
| | | data = CommFunc.WriteBYTE(data, self.TotalTimes)
|
| | | data = CommFunc.WriteBYTE(data, self.SingleTimes)
|
| | | 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 = '''
|
| | | TaskID:%d,
|
| | | TotalTimes:%d,
|
| | | SingleTimes:%d,
|
| | | AwardItemCount:%d,
|
| | | AwardItem:%s
|
| | | '''\
|
| | | %(
|
| | | self.TaskID,
|
| | | self.TotalTimes,
|
| | | self.SingleTimes,
|
| | | self.AwardItemCount,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | class tagMCBossRebornInfo(Structure):
|
| | | Head = tagHead()
|
| | | StartDate = "" #(char StartDate[10])// 开始日期 y-m-d
|
| | | EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d
|
| | | LimitLV = 0 #(WORD LimitLV)// 限制等级
|
| | | TaskCnt = 0 #(BYTE TaskCnt)
|
| | | TaskInfo = list() #(vector<tagMCBossRebornTaskInfo> TaskInfo)
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xAB
|
| | | self.Head.SubCmd = 0x04
|
| | | 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.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.TaskCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.TaskCnt):
|
| | | temTaskInfo = tagMCBossRebornTaskInfo()
|
| | | _pos = temTaskInfo.ReadData(_lpData, _pos)
|
| | | self.TaskInfo.append(temTaskInfo)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xAB
|
| | | self.Head.SubCmd = 0x04
|
| | | self.StartDate = ""
|
| | | self.EndtDate = ""
|
| | | self.LimitLV = 0
|
| | | self.TaskCnt = 0
|
| | | self.TaskInfo = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 10
|
| | | length += 10
|
| | | length += 2
|
| | | length += 1
|
| | | for i in range(self.TaskCnt):
|
| | | length += self.TaskInfo[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.WriteWORD(data, self.LimitLV)
|
| | | data = CommFunc.WriteBYTE(data, self.TaskCnt)
|
| | | for i in range(self.TaskCnt):
|
| | | data = CommFunc.WriteString(data, self.TaskInfo[i].GetLength(), self.TaskInfo[i].GetBuffer())
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | StartDate:%s,
|
| | | EndtDate:%s,
|
| | | LimitLV:%d,
|
| | | TaskCnt:%d,
|
| | | TaskInfo:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.StartDate,
|
| | | self.EndtDate,
|
| | | self.LimitLV,
|
| | | self.TaskCnt,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagMCBossRebornInfo=tagMCBossRebornInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCBossRebornInfo.Head.Cmd,m_NAtagMCBossRebornInfo.Head.SubCmd))] = m_NAtagMCBossRebornInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # AB 23 摇骰子奖励回包 #tagMCDiceAward
|
| | |
|
| | | class tagMCDiceAward(Structure):
|
| | |
| | | # @return None
|
| | | def DoEnterFB(curPlayer, tick):
|
| | | playerID = curPlayer.GetPlayerID()
|
| | |
|
| | | if curPlayer.GetHP() == 0:
|
| | | PlayerControl.PlayerLeaveFB(curPlayer)
|
| | | return
|
| | | # 设置副本公共属性的单独处理,防止队员进入后被修改
|
| | | if not FBCommon.GetHadSetFBPropertyMark():
|
| | | lineID = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_ReqFBFuncLine)
|
| | |
| | | infoDict = {"MapID":mapID,"LineID":lineID}
|
| | | for moneyType, moneyNum in costMoneyList:
|
| | | if not PlayerControl.PayMoney(curPlayer, moneyType, moneyNum, ChConfig.Def_Cost_EnterFB, infoDict):
|
| | | GameWorld.DebugLog("仙玉不足!costGold=%s" % costGold)
|
| | | GameWorld.Log("仙玉不足!costGold=%s" % costGold)
|
| | | PlayerControl.PlayerLeaveFB(curPlayer)
|
| | | return
|
| | | EventReport.WriteEvent_FB(curPlayer, ChConfig.Def_FBMapID_BossHome, lineID, ChConfig.CME_Log_Start)
|
| | |
|
| | |
| | |
|
| | | import random
|
| | | import math
|
| | | import PlayerBossReborn
|
| | |
|
| | | g_runeTypeDict = {}
|
| | | FBDict_Level = 'FBDict_Level' # 副本关卡
|
| | |
| | | FBCommon.Notify_FB_Over(curPlayer, overDict)
|
| | | #成就
|
| | | PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_TowerSD, 1)
|
| | | #BOSS复活活动
|
| | | PlayerBossReborn.AddBossRebornActionCnt(curPlayer, ChConfig.Def_BRAct_TowerSweep, 1)
|
| | | return True |
| | |
| | | ),
|
| | |
|
| | | "BossReborn":(
|
| | | ("BYTE", "TemplateID", 1),
|
| | | ("BYTE", "ID", 1),
|
| | | ("DWORD", "TotalTimes", 0),
|
| | | ("WORD", "SingleTimes", 0),
|
| | | ("list", "RewardItemID1", 0),
|
| | | ("list", "RewardItemCnt1", 0),
|
| | | ("list", "RewardItemID2", 0),
|
| | | ("list", "RewardItemCnt2", 0),
|
| | | ("list", "RewardItemID3", 0),
|
| | | ("list", "RewardItemCnt3", 0),
|
| | | ("list", "WorldLVList", 0),
|
| | | ("list", "Reward", 0),
|
| | | ),
|
| | |
|
| | | "TrialExchange":(
|
| | |
| | | class IPY_BossReborn(): |
| | | |
| | | def __init__(self): |
| | | self.TemplateID = 0
|
| | | self.ID = 0
|
| | | self.TotalTimes = 0
|
| | | self.SingleTimes = 0
|
| | | self.RewardItemID1 = []
|
| | | self.RewardItemCnt1 = []
|
| | | self.RewardItemID2 = []
|
| | | self.RewardItemCnt2 = []
|
| | | self.RewardItemID3 = []
|
| | | self.RewardItemCnt3 = []
|
| | | self.WorldLVList = [] |
| | | self.Reward = [] |
| | | return |
| | | |
| | | def GetID(self): return self.ID # ID
|
| | | def GetTemplateID(self): return self.TemplateID # 模板ID
|
| | | def GetID(self): return self.ID # 活动条目ID
|
| | | def GetTotalTimes(self): return self.TotalTimes # 可完成的总次数,0表示不限次数
|
| | | def GetSingleTimes(self): return self.SingleTimes # 单次领奖需要的次数
|
| | | def GetRewardItemID1(self): return self.RewardItemID1 # 奖励物品ID1
|
| | | def GetRewardItemCnt1(self): return self.RewardItemCnt1 # 奖励物品数量1
|
| | | def GetRewardItemID2(self): return self.RewardItemID2 # 奖励物品ID2
|
| | | def GetRewardItemCnt2(self): return self.RewardItemCnt2 # 奖励物品数量2
|
| | | def GetRewardItemID3(self): return self.RewardItemID3 # 奖励物品ID3
|
| | | def GetRewardItemCnt3(self): return self.RewardItemCnt3 # 奖励物品数量3
|
| | | def GetWorldLVList(self): return self.WorldLVList # 世界等级 |
| | | def GetReward(self): return self.Reward # 奖励物品ID1 |
| | | |
| | | # 宗门试炼兑换表 |
| | | class IPY_TrialExchange(): |
| | |
| | | # 活动中同步活动信息
|
| | | if actCostRebateInfo.get(ShareDefine.ActKey_State):
|
| | | SyncBossRebornInfo(curPlayer)
|
| | | SyncBossRebornPlayerInfo(curPlayer)
|
| | | return
|
| | |
|
| | |
|
| | | def RefreshOperationAction_BossReborn():
|
| | | playerManager = GameWorld.GetPlayerManager()
|
| | |
| | | bossRebornID = actBossRebornInfo.get(ShareDefine.ActKey_ID, 0)
|
| | | state = actBossRebornInfo.get(ShareDefine.ActKey_State, 0)
|
| | |
|
| | | playerBossRebornID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BossRebornID) # 玩家身上的活动ID
|
| | | playerBossRebornID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BossRebornID) # 玩家身上的活动ID
|
| | |
|
| | | # 活动ID 相同的话不处理
|
| | | if bossRebornID == playerBossRebornID:
|
| | | #GameWorld.DebugLog("BOSS复活活动ID不变,不处理!", curPlayer.GetPlayerID())
|
| | | return
|
| | | BRWorldLV = actBossRebornInfo.get(ShareDefine.ActKey_WorldLV, 0)
|
| | | playerBRWorldLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BRActionWorldLV)
|
| | | GameWorld.DebugLog("BOSS复活重置! costRebateID=%s,playerCostRebateID=%s,state=%s,BRWorldLV=%s,playerBRWorldLV=%s" |
| | | % (bossRebornID, playerBossRebornID, state, BRWorldLV, playerBRWorldLV), playerID)
|
| | | templateID = actBossRebornInfo.get(ShareDefine.ActKey_TemplateID, 0)
|
| | | playerTemplateID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BossRebornTemplateID)
|
| | | |
| | | GameWorld.DebugLog("BOSS复活重置! costRebateID=%s,playerCostRebateID=%s,state=%s,templateID=%s,playerTemplateID=%s" |
| | | % (bossRebornID, playerBossRebornID, state, templateID, playerTemplateID), playerID)
|
| | |
|
| | | # 未领取的奖励邮件发放
|
| | | __SendBossRebornMail(curPlayer, playerBRWorldLV)
|
| | | __SendBossRebornMail(curPlayer, playerTemplateID)
|
| | |
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_BossRebornID, bossRebornID)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_BRActionWorldLV, BRWorldLV)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_BossRebornTemplateID, templateID)
|
| | | for brid in ChConfig.BossRebornActIDList:
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_BRActionCurTimes % brid, 0)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_BRActionGotTimes % brid, 0)
|
| | | |
| | | |
| | | SyncBossRebornInfo(curPlayer)
|
| | | SyncBossRebornPlayerInfo(curPlayer)
|
| | | return True
|
| | |
|
| | | def __SendBossRebornMail(curPlayer, playerBRWorldLV):
|
| | | #未领取的奖励邮件发放
|
| | |
|
| | | def __SendBossRebornMail(curPlayer, playerTemplateID):
|
| | | # 未领取的奖励邮件发放
|
| | | ipyDataList = IpyGameDataPY.GetIpyGameDataByCondition("BossReborn", {'TemplateID':playerTemplateID}, True)
|
| | | if not ipyDataList:
|
| | | return
|
| | | |
| | | totalItemDict = {}
|
| | | for brid in ChConfig.BossRebornActIDList:
|
| | | ipyData = IpyGameDataPY.GetIpyGameData('BossReborn', brid)
|
| | | if not ipyData:
|
| | | continue
|
| | | for ipyData in ipyDataList:
|
| | | brid = ipyData.GetID()
|
| | | singleTimes = ipyData.GetSingleTimes()
|
| | | curTimes = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BRActionCurTimes % brid)
|
| | | gotTimes = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BRActionGotTimes % brid)
|
| | | canGotCnt = (curTimes - gotTimes) / singleTimes
|
| | | if not canGotCnt:
|
| | | continue
|
| | | itemDict = __GetAwardItem(curPlayer, playerBRWorldLV, ipyData, canGotCnt)
|
| | | itemDict = __GetAwardItem(curPlayer, ipyData, canGotCnt)
|
| | | GameWorld.AddDictValue(totalItemDict, itemDict)
|
| | |
|
| | | #去掉复活点道具
|
| | |
| | | PlayerControl.SendMailByKey('BossFHUnGetMail', [curPlayer.GetID()], totalItemList)
|
| | | return
|
| | |
|
| | |
|
| | | def AddBossRebornActionCnt(curPlayer, actionID, addCnt=1):
|
| | | '''增加boss复活相关活动完成次数'''
|
| | | #判断活动是否开启
|
| | |
| | | state = actBossRebornInfo.get(ShareDefine.ActKey_State, 0)
|
| | | if not state:
|
| | | return
|
| | | ipyData = IpyGameDataPY.GetIpyGameData('BossReborn', actionID)
|
| | | playerTemplateID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BossRebornTemplateID)
|
| | | ipyData = IpyGameDataPY.GetIpyGameData('BossReborn', playerTemplateID, actionID)
|
| | | if not ipyData:
|
| | | return
|
| | | totalTimes = ipyData.GetTotalTimes()
|
| | |
| | |
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_BRActionCurTimes % actionID, curTimes + addCnt)
|
| | |
|
| | | SyncBossRebornInfo(curPlayer, actionID)
|
| | | SyncBossRebornPlayerInfo(curPlayer, actionID)
|
| | | return
|
| | |
|
| | |
|
| | | def GetBossRebornActionAward(curPlayer, actionID):
|
| | | '''领取boss复活活动奖励'''
|
| | | ipyData = IpyGameDataPY.GetIpyGameData('BossReborn', actionID)
|
| | | playerTemplateID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BossRebornTemplateID)
|
| | | ipyData = IpyGameDataPY.GetIpyGameData('BossReborn', playerTemplateID, actionID)
|
| | | if not ipyData:
|
| | | return
|
| | | singleTimes = ipyData.GetSingleTimes()
|
| | |
| | | return
|
| | |
|
| | | #给奖励
|
| | | curWorldLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BRActionWorldLV)
|
| | | awardDict = __GetAwardItem(curPlayer, curWorldLV, ipyData)
|
| | | awardDict = __GetAwardItem(curPlayer, ipyData)
|
| | | # 检查背包
|
| | | needSpace = len(awardDict)
|
| | | packSpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem, needSpace)
|
| | |
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_BRActionGotTimes % actionID, newGotTimes)
|
| | | for itemID, itemCnt in awardDict.items():
|
| | | ItemControler.GivePlayerItem(curPlayer, itemID, itemCnt, 1, [IPY_GameWorld.rptItem])
|
| | | SyncBossRebornInfo(curPlayer, actionID)
|
| | | SyncBossRebornPlayerInfo(curPlayer, actionID)
|
| | | return
|
| | |
|
| | | def __GetAwardItem(curPlayer, worldLV, ipyData, times=1):
|
| | | worldLVList = ipyData.GetWorldLVList()
|
| | | playerLV = curPlayer.GetLV()
|
| | | |
| | | awardIndex = len(worldLVList) - 1
|
| | | for i, lv in enumerate(worldLVList):
|
| | | prelv = 0 if i ==0 else worldLVList[i-1]
|
| | | if prelv<=playerLV < lv:
|
| | | awardIndex = i
|
| | | break
|
| | |
|
| | | def __GetAwardItem(curPlayer, ipyData, times=1):
|
| | | awardDict = {}
|
| | | for i in xrange(3): #目前配置3个奖励
|
| | | if not hasattr(ipyData, 'GetRewardItemID%s' % (i + 1)):
|
| | | break
|
| | | itemIDList = getattr(ipyData, 'GetRewardItemID%s' % (i + 1))()
|
| | | itemCntList = getattr(ipyData, 'GetRewardItemCnt%s' % (i + 1))()
|
| | | if awardIndex >= len(itemIDList) or awardIndex >= len(itemCntList):
|
| | | GameWorld.ErrLog('BOSS复活表奖励配置错误!')
|
| | | return awardDict
|
| | | itemID, itemCnt = itemIDList[awardIndex], itemCntList[awardIndex]
|
| | | for itemID, itemCnt, isbind in ipyData.GetReward():
|
| | | if not itemID or not itemCnt:
|
| | | continue
|
| | | awardDict[itemID] = awardDict.get(itemID, 0) + itemCnt * times
|
| | |
|
| | | return awardDict
|
| | |
|
| | | def SyncBossRebornInfo(curPlayer, actID= -1):
|
| | |
|
| | | def SyncBossRebornPlayerInfo(curPlayer, actID=-1):
|
| | | #通知当前次数、已领次数
|
| | | packData = ChPyNetSendPack.tagMCBossRebornPlayerInfo()
|
| | | packData.DataList = []
|
| | | if actID !=-1:
|
| | | if actID != -1:
|
| | | syneActIDList = [actID]
|
| | | else:
|
| | | syneActIDList = []
|
| | |
| | | packData.Count = len(packData.DataList)
|
| | | NetPackCommon.SendFakePack(curPlayer, packData)
|
| | | return
|
| | |
|
| | |
|
| | | def SyncBossRebornInfo(curPlayer):
|
| | | actBossRebornInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_BossReborn, {})
|
| | | state = actBossRebornInfo.get(ShareDefine.ActKey_State, 0)
|
| | | if not state:
|
| | | return
|
| | | templateID = actBossRebornInfo.get(ShareDefine.ActKey_TemplateID, 0)
|
| | | if not templateID:
|
| | | return
|
| | | ipyDataList = IpyGameDataPY.GetIpyGameDataByCondition("BossReborn", {'TemplateID':templateID}, True)
|
| | | if not ipyDataList:
|
| | | return
|
| | | actInfo = ChPyNetSendPack.tagMCBossRebornInfo()
|
| | | actInfo.Clear()
|
| | | actInfo.StartDate = actBossRebornInfo.get(ShareDefine.ActKey_StartDate, "")
|
| | | actInfo.EndtDate = actBossRebornInfo.get(ShareDefine.ActKey_EndDate, "")
|
| | | actInfo.LimitLV = actBossRebornInfo.get(ShareDefine.ActKey_LVLimit, 0)
|
| | | actInfo.TaskInfo = []
|
| | | for ipyData in ipyDataList:
|
| | | taskInfo = ChPyNetSendPack.tagMCBossRebornTaskInfo()
|
| | | taskInfo.TaskID = ipyData.GetID()
|
| | | taskInfo.TotalTimes = ipyData.GetTotalTimes()
|
| | | taskInfo.SingleTimes = ipyData.GetSingleTimes()
|
| | | taskInfo.AwardItem = []
|
| | | for itemID, itemCnt, isBind in ipyData.GetReward():
|
| | | awardItem = ChPyNetSendPack.tagMCBossRebornAwardItem()
|
| | | awardItem.ItemID = itemID
|
| | | awardItem.ItemCount = itemCnt
|
| | | awardItem.IsBind = isBind
|
| | | taskInfo.AwardItem.append(awardItem)
|
| | | taskInfo.AwardItemCount = len(taskInfo.AwardItem)
|
| | | actInfo.TaskInfo.append(taskInfo)
|
| | | actInfo.TaskCnt = len(actInfo.TaskInfo)
|
| | | NetPackCommon.SendFakePack(curPlayer, actInfo)
|
| | | return
|
| | |
| | | updLuck = 0
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TreasureLuck % (treasureType), updLuck)
|
| | | PlayerControl.GiveMoney(curPlayer, ShareDefine.TYPE_Price_TreasureScore, addScore)
|
| | | PlayerBossReborn.AddBossRebornActionCnt(curPlayer, ChConfig.Def_BRAct_Treasure, treasureCount)
|
| | | |
| | | if treasureType == 2:
|
| | | PlayerFairyCeremony.AddFCPartyActionCnt(curPlayer, ChConfig.Def_PPAct_RuneTreasure, treasureCount)
|
| | | PlayerBossReborn.AddBossRebornActionCnt(curPlayer, ChConfig.Def_BRAct_RuneTreasure, treasureCount)
|
| | | else:
|
| | | PlayerFairyCeremony.AddFCPartyActionCnt(curPlayer, ChConfig.Def_PPAct_Treasure, treasureCount)
|
| | | PlayerBossReborn.AddBossRebornActionCnt(curPlayer, ChConfig.Def_BRAct_Treasure, treasureCount)
|
| | | # 给物品
|
| | | mailItemList = []
|
| | | itemControl = ItemControler.PlayerItemControler(curPlayer)
|
| | |
| | | OperationActionName_FlashGiftbag, OperationActionName_FairyCeremony,
|
| | | OperationActionName_RealmPoint]
|
| | | #需要记录开启活动时的世界等级的运营活动
|
| | | NeedWorldLVOperationActNameList = [OperationActionName_BossReborn, OperationActionName_FairyCeremony]
|
| | | NeedWorldLVOperationActNameList = [OperationActionName_FairyCeremony]
|
| | |
|
| | | #活动信息字典key定义
|
| | | ActKey_ID = "ID" # 活动ID,唯一标识的ID,一般是活动开启的time值
|
| | |
| | | Def_UniversalGameRecType_LVAwardRecord, #玩家等级奖励记录 3
|
| | | Def_UniversalGameRecType_LimitFBOpenRecord,#限时副本开启时间记录4
|
| | | Def_UniversalGameRecType_DujieHelpCntRecord, # 渡劫副本护法次数5
|
| | | Def_UniversalGameRecType_6,
|
| | | Def_UniversalGameRecType_7,
|
| | | Def_UniversalGameRecType_TodayPlayerLVInfo, #今日活跃玩家等级信息6
|
| | | Def_UniversalGameRecType_YesterdayPlayerLVInfo,#昨日活跃玩家等级信息7
|
| | | Def_UniversalGameRecType_8,
|
| | | Def_UniversalGameRecType_9,
|
| | | Def_UniversalGameRecType_10,
|