From 00b076d0f6fec2844363efba8f75a1a675086e95 Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期一, 13 十一月 2023 13:14:42 +0800 Subject: [PATCH] 9912 [BT0.1]BOSS凭证(boss历练活动) --- ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldActionControl.py | 8 ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py | 73 ++ ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py | 8 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py | 112 ++++ ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py | 354 +++++++++++++ ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py | 112 ++++ ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py | 354 +++++++++++++ ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerActBossTrial.py | 78 +++ ServerPython/CoreServerGroup/GameServer/Script/GameWorld.py | 7 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini | 16 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py | 61 ++ ServerPython/CoreServerGroup/GameServer/Script/ChConfig.py | 1 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py | 3 PySysDB/PySysDBPY.h | 23 ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/BillboardData.py | 4 ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py | 8 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActBossTrial.py | 267 ++++++++++ ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py | 4 PySysDB/PySysDBG.h | 27 + ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py | 5 20 files changed, 1,517 insertions(+), 8 deletions(-) diff --git a/PySysDB/PySysDBG.h b/PySysDB/PySysDBG.h index 2a0c85f..85968ac 100644 --- a/PySysDB/PySysDBG.h +++ b/PySysDB/PySysDBG.h @@ -539,6 +539,33 @@ BYTE ResetType; //重置类型,0-0点重置;1-5点重置 }; +//Boss历练活动表 + +struct tagActBossTrial +{ + DWORD _CfgID; //配置ID + list PlatformList; //活动平台列表["平台A", "平台A", ...],配[]代表所有 + list ServerGroupIDList; //服务器ID列表 + BYTE ActNum; //活动分组编号, 活动类型 * 10 + 不同界面编号 + char StartDate; //开启日期 + char EndDate; //结束日期 + dict NotifyInfoStart; //全服提示信息 - 相对开始时间 + dict NotifyInfoEnd; //全服提示信息 - 相对结束时间 + list NotifyInfoLoop; //全服提示信息 - 循环广播[间隔分钟, 广播key] + BYTE IsDayReset; //是否每天重置 + BYTE ResetType; //重置类型,0-0点重置;1-5点重置 + list TemplateIDList; //榜单模板编号列表 +}; + +//Boss历练榜单模版表 + +struct tagActBossTrialTemplate +{ + DWORD _TemplateID; //模板编号 + BYTE Rank; //名次 + list AwardItemList; //奖励物品信息列表 [[物品ID,个数,是否拍品], ...] +}; + //仙匣秘境活动时间表 struct tagActXianXiaMJ diff --git a/PySysDB/PySysDBPY.h b/PySysDB/PySysDBPY.h index e45a005..6473b91 100644 --- a/PySysDB/PySysDBPY.h +++ b/PySysDB/PySysDBPY.h @@ -1766,6 +1766,29 @@ list ProduceGarbageRateList; //随机产生垃圾概率饼图 }; +//Boss历练活动表 + +struct tagActBossTrial +{ + DWORD _CfgID; //配置ID + char StartDate; //开启日期 + char EndDate; //结束日期 + WORD LVLimit; //限制等级 + BYTE IsDayReset; //是否每天重置 + BYTE ResetType; //重置类型,0-0点重置;1-5点重置 + dict SubmitItemAwardInfo; //提交凭证个数对应奖励 + list TemplateIDList; //榜单模板编号列表 +}; + +//Boss历练榜单模版表 + +struct tagActBossTrialTemplate +{ + DWORD _TemplateID; //模板编号 + BYTE Rank; //名次 + list AwardItemList; //奖励物品信息列表 [[物品ID,个数,是否拍品], ...] +}; + //仙匣秘境活动时间表 struct tagActXianXiaMJ diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChConfig.py b/ServerPython/CoreServerGroup/GameServer/Script/ChConfig.py index 23d9e2e..1e8b082 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/ChConfig.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/ChConfig.py @@ -595,6 +595,7 @@ ShareDefine.Def_BT_CharmTotal : 100, #魅力总榜 ShareDefine.Def_BT_CharmWeek : 100, #魅力周榜 ShareDefine.Def_BT_CharmDay : 100, #魅力日榜 + ShareDefine.Def_BT_BossTrialSubmit : 20, #boss凭证 (boss历练活动) } #排行榜保存类型(和BillboardType匹配), 默认保存, 如果不保存,可配置进去 diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py index cc8227f..3014e24 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py @@ -15062,6 +15062,118 @@ #------------------------------------------------------ +# AA 24 Boss历练领奖 #tagCMActBossTrialGetAward + +class tagCMActBossTrialGetAward(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ActNum", c_ubyte), #活动编号 + ("SubmitCount", c_ushort), #领取凭证个数对应奖励 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xAA + self.SubCmd = 0x24 + 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 = 0x24 + self.ActNum = 0 + self.SubmitCount = 0 + return + + def GetLength(self): + return sizeof(tagCMActBossTrialGetAward) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 24 Boss历练领奖 //tagCMActBossTrialGetAward: + Cmd:%s, + SubCmd:%s, + ActNum:%d, + SubmitCount:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ActNum, + self.SubmitCount + ) + return DumpString + + +m_NAtagCMActBossTrialGetAward=tagCMActBossTrialGetAward() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActBossTrialGetAward.Cmd,m_NAtagCMActBossTrialGetAward.SubCmd))] = m_NAtagCMActBossTrialGetAward + + +#------------------------------------------------------ +# AA 23 Boss历练提交凭证 #tagCMActBossTrialSubmit + +class tagCMActBossTrialSubmit(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ActNum", c_ubyte), #活动编号 + ("SubmitCount", c_ushort), #提交凭证个数 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xAA + self.SubCmd = 0x23 + 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 = 0x23 + self.ActNum = 0 + self.SubmitCount = 0 + return + + def GetLength(self): + return sizeof(tagCMActBossTrialSubmit) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 23 Boss历练提交凭证 //tagCMActBossTrialSubmit: + Cmd:%s, + SubCmd:%s, + ActNum:%d, + SubmitCount:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ActNum, + self.SubmitCount + ) + return DumpString + + +m_NAtagCMActBossTrialSubmit=tagCMActBossTrialSubmit() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActBossTrialSubmit.Cmd,m_NAtagCMActBossTrialSubmit.SubCmd))] = m_NAtagCMActBossTrialSubmit + + +#------------------------------------------------------ # AA 09 集字活动兑换 #tagCMActCollectWordsExchange class tagCMActCollectWordsExchange(Structure): diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py index eaf1503..71137b8 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py @@ -30633,6 +30633,360 @@ #------------------------------------------------------ +# AA 67 Boss历练活动信息 #tagMCActBossTrialInfo + +class tagMCActBossTrialItem(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(tagMCActBossTrialItem) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 67 Boss历练活动信息 //tagMCActBossTrialInfo: + ItemID:%d, + ItemCount:%d, + IsBind:%d + '''\ + %( + self.ItemID, + self.ItemCount, + self.IsBind + ) + return DumpString + + +class tagMCActBossTrialBillard(Structure): + Rank = 0 #(DWORD Rank)// 名次,1-代表第一名;支持夸段,如1,3 代表第1名,第2~3名 + Count = 0 #(BYTE Count)// 奖励物品数 + AwardItemList = list() #(vector<tagMCActBossTrialItem> AwardItemList)// 奖励物品列表 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.Rank,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.Count): + temAwardItemList = tagMCActBossTrialItem() + _pos = temAwardItemList.ReadData(_lpData, _pos) + self.AwardItemList.append(temAwardItemList) + return _pos + + def Clear(self): + self.Rank = 0 + self.Count = 0 + self.AwardItemList = list() + return + + def GetLength(self): + length = 0 + length += 4 + length += 1 + for i in range(self.Count): + length += self.AwardItemList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.Rank) + data = CommFunc.WriteBYTE(data, self.Count) + for i in range(self.Count): + data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Rank:%d, + Count:%d, + AwardItemList:%s + '''\ + %( + self.Rank, + self.Count, + "..." + ) + return DumpString + + +class tagMCActBossTrialSubmitInfo(Structure): + RecordIndex = 0 #(BYTE RecordIndex)// 记录索引 + NeedCount = 0 #(WORD NeedCount)// 所需提交个数 + Count = 0 #(BYTE Count)// 奖励物品数 + AwardItemList = list() #(vector<tagMCActBossTrialItem> AwardItemList)// 奖励物品列表 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.RecordIndex,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.NeedCount,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.Count): + temAwardItemList = tagMCActBossTrialItem() + _pos = temAwardItemList.ReadData(_lpData, _pos) + self.AwardItemList.append(temAwardItemList) + return _pos + + def Clear(self): + self.RecordIndex = 0 + self.NeedCount = 0 + self.Count = 0 + self.AwardItemList = list() + return + + def GetLength(self): + length = 0 + length += 1 + length += 2 + length += 1 + for i in range(self.Count): + length += self.AwardItemList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteBYTE(data, self.RecordIndex) + data = CommFunc.WriteWORD(data, self.NeedCount) + data = CommFunc.WriteBYTE(data, self.Count) + for i in range(self.Count): + data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + RecordIndex:%d, + NeedCount:%d, + Count:%d, + AwardItemList:%s + '''\ + %( + self.RecordIndex, + self.NeedCount, + self.Count, + "..." + ) + return DumpString + + +class tagMCActBossTrialInfo(Structure): + Head = tagHead() + ActNum = 0 #(BYTE ActNum)// 活动编号 + StartDate = "" #(char StartDate[10])// 开始日期 y-m-d + EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d + IsDayReset = 0 #(BYTE IsDayReset)// 是否每天重置 + ResetType = 0 #(BYTE ResetType)// 重置类型,0-0点重置;1-5点重置 + LimitLV = 0 #(WORD LimitLV)// 限制等级 + SubmitCount = 0 #(BYTE SubmitCount) + SubmitInfoList = list() #(vector<tagMCActBossTrialSubmitInfo> SubmitInfoList)// 提交凭证信息列表 + BillardCount = 0 #(BYTE BillardCount) + BillboardInfoList = list() #(vector<tagMCActBossTrialBillard> BillboardInfoList)// 榜单信息列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x67 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.ActNum,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.IsDayReset,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.ResetType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.SubmitCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.SubmitCount): + temSubmitInfoList = tagMCActBossTrialSubmitInfo() + _pos = temSubmitInfoList.ReadData(_lpData, _pos) + self.SubmitInfoList.append(temSubmitInfoList) + self.BillardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.BillardCount): + temBillboardInfoList = tagMCActBossTrialBillard() + _pos = temBillboardInfoList.ReadData(_lpData, _pos) + self.BillboardInfoList.append(temBillboardInfoList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x67 + self.ActNum = 0 + self.StartDate = "" + self.EndtDate = "" + self.IsDayReset = 0 + self.ResetType = 0 + self.LimitLV = 0 + self.SubmitCount = 0 + self.SubmitInfoList = list() + self.BillardCount = 0 + self.BillboardInfoList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 10 + length += 10 + length += 1 + length += 1 + length += 2 + length += 1 + for i in range(self.SubmitCount): + length += self.SubmitInfoList[i].GetLength() + length += 1 + for i in range(self.BillardCount): + length += self.BillboardInfoList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ActNum) + data = CommFunc.WriteString(data, 10, self.StartDate) + data = CommFunc.WriteString(data, 10, self.EndtDate) + data = CommFunc.WriteBYTE(data, self.IsDayReset) + data = CommFunc.WriteBYTE(data, self.ResetType) + data = CommFunc.WriteWORD(data, self.LimitLV) + data = CommFunc.WriteBYTE(data, self.SubmitCount) + for i in range(self.SubmitCount): + data = CommFunc.WriteString(data, self.SubmitInfoList[i].GetLength(), self.SubmitInfoList[i].GetBuffer()) + data = CommFunc.WriteBYTE(data, self.BillardCount) + for i in range(self.BillardCount): + data = CommFunc.WriteString(data, self.BillboardInfoList[i].GetLength(), self.BillboardInfoList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ActNum:%d, + StartDate:%s, + EndtDate:%s, + IsDayReset:%d, + ResetType:%d, + LimitLV:%d, + SubmitCount:%d, + SubmitInfoList:%s, + BillardCount:%d, + BillboardInfoList:%s + '''\ + %( + self.Head.OutputString(), + self.ActNum, + self.StartDate, + self.EndtDate, + self.IsDayReset, + self.ResetType, + self.LimitLV, + self.SubmitCount, + "...", + self.BillardCount, + "..." + ) + return DumpString + + +m_NAtagMCActBossTrialInfo=tagMCActBossTrialInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActBossTrialInfo.Head.Cmd,m_NAtagMCActBossTrialInfo.Head.SubCmd))] = m_NAtagMCActBossTrialInfo + + +#------------------------------------------------------ +# AA 68 Boss历练活动玩家信息 #tagMCActBossTrialPlayerInfo + +class tagMCActBossTrialPlayerInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ActNum", c_ubyte), # 活动编号 + ("SubmitCount", c_ushort), # 已提交凭证个数 + ("SubmitCountAward", c_int), # 提交凭证奖励领奖状态 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xAA + self.SubCmd = 0x68 + 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 = 0x68 + self.ActNum = 0 + self.SubmitCount = 0 + self.SubmitCountAward = 0 + return + + def GetLength(self): + return sizeof(tagMCActBossTrialPlayerInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 68 Boss历练活动玩家信息 //tagMCActBossTrialPlayerInfo: + Cmd:%s, + SubCmd:%s, + ActNum:%d, + SubmitCount:%d, + SubmitCountAward:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ActNum, + self.SubmitCount, + self.SubmitCountAward + ) + return DumpString + + +m_NAtagMCActBossTrialPlayerInfo=tagMCActBossTrialPlayerInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActBossTrialPlayerInfo.Cmd,m_NAtagMCActBossTrialPlayerInfo.SubCmd))] = m_NAtagMCActBossTrialPlayerInfo + + +#------------------------------------------------------ # AA 65 买一送多活动信息 #tagMCActBuyOneInfo class tagMCActBuyOneInfoFreeItem(Structure): diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/BillboardData.py b/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/BillboardData.py index 00735e4..62f6ba8 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/BillboardData.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/BillboardData.py @@ -27,8 +27,8 @@ GameWorld.DebugAnswer(curPlayer, "删除榜单假数据: BillboardData 类型") GameWorld.DebugAnswer(curPlayer, "榜单类型:0-战力,1-龙魂,2-灵瑶,4-等级,5-坐骑,6-灵宠,7-符印,8-脱机,9-境界,19-助战") GameWorld.DebugAnswer(curPlayer, "开服活动榜类型:11-强化,12-坐骑,13-宝石,14-冲级,15-境界,16-战力,18-符印,20-神兵,21-充值,22-灵宠,24-灵根,25-升星") - GameWorld.DebugAnswer(curPlayer, "运营活动榜类型:17-仙界盛典,23-仙界盛典2") - GameWorld.DebugAnswer(curPlayer, "魅力榜单类型:30-总榜,31-周榜,31-日榜") + GameWorld.DebugAnswer(curPlayer, "运营活动榜类型:17-仙界盛典,23-仙界盛典2,33-boss凭证") + GameWorld.DebugAnswer(curPlayer, "魅力榜单类型:30-总榜,31-周榜,32-日榜") return ## 执行逻辑 diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorld.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorld.py index 721975c..c6504ef 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorld.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorld.py @@ -538,6 +538,13 @@ #--------------------------------------------------------------------- +def GetTemplateID(ipyData, cfgID, dayIndex): + if cfgID == None or dayIndex == None or not ipyData: + return 0 + templateIDList = ipyData.GetTemplateIDList() + templateID = templateIDList[-1] if dayIndex >= len(templateIDList) else templateIDList[dayIndex] + return templateID + def GetOperationActionDateStr(ipyData): ## 获取运营活动对应日期,存数字代表开服天配置,需要转化为对应的日期 curDateTime = datetime.datetime.today() diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldActionControl.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldActionControl.py index ae845c1..f8a3320 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldActionControl.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldActionControl.py @@ -34,6 +34,7 @@ import PlayerFairyCeremony import PlayerNewFairyCeremony import PlayerActGarbageSorting +import PlayerActBossTrial import PlayerUniversalGameRec import GameWorldAverageLv import PlayerFamilyBoss @@ -776,6 +777,11 @@ GameWorld.Log(" dbActID变更: dbActID=%s,curActID=%s" % (dbActID, curActID)) PlayerDBGSEvent.SetDBGSTrig_ByKey(dbOperationActIDKey, curActID) + # 结束旧的 + if dbActID: + if actName == ShareDefine.OperationActionName_BossTrial: + PlayerActBossTrial.OnActEnd(actNum, ipyData, dayIndex) + if curActID: if actName in ShareDefine.NeedWorldLVOperationActNameList: #记录开启时世界等级 @@ -803,6 +809,8 @@ PlayerStore.ResetFlashSaleBuyCnt(ipyData) elif actName == ShareDefine.OperationActionName_GarbageSorting: PlayerActGarbageSorting.OnActStart(actNum) + elif actName == ShareDefine.OperationActionName_BossTrial: + PlayerActBossTrial.OnActStart(actNum) else: if actName == ShareDefine.OperationActionName_GarbageSorting: PlayerActGarbageSorting.OnActEnd(actNum) diff --git a/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py b/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py index 2d96800..74c8c16 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py @@ -449,6 +449,27 @@ ("BYTE", "ResetType", 0), ), + "ActBossTrial":( + ("DWORD", "CfgID", 1), + ("list", "PlatformList", 0), + ("list", "ServerGroupIDList", 0), + ("BYTE", "ActNum", 0), + ("char", "StartDate", 0), + ("char", "EndDate", 0), + ("dict", "NotifyInfoStart", 0), + ("dict", "NotifyInfoEnd", 0), + ("list", "NotifyInfoLoop", 0), + ("BYTE", "IsDayReset", 0), + ("BYTE", "ResetType", 0), + ("list", "TemplateIDList", 0), + ), + + "ActBossTrialTemplate":( + ("DWORD", "TemplateID", 1), + ("BYTE", "Rank", 0), + ("list", "AwardItemList", 0), + ), + "ActXianXiaMJ":( ("DWORD", "CfgID", 1), ("list", "PlatformList", 0), @@ -1796,6 +1817,50 @@ def GetNotifyInfoLoop(self): return self.NotifyInfoLoop # 全服提示信息 - 循环广播[间隔分钟, 广播key] def GetResetType(self): return self.ResetType # 重置类型,0-0点重置;1-5点重置 +# Boss历练活动表 +class IPY_ActBossTrial(): + + def __init__(self): + self.CfgID = 0 + self.PlatformList = [] + self.ServerGroupIDList = [] + self.ActNum = 0 + self.StartDate = "" + self.EndDate = "" + self.NotifyInfoStart = {} + self.NotifyInfoEnd = {} + self.NotifyInfoLoop = [] + self.IsDayReset = 0 + self.ResetType = 0 + self.TemplateIDList = [] + return + + def GetCfgID(self): return self.CfgID # 配置ID + def GetPlatformList(self): return self.PlatformList # 活动平台列表["平台A", "平台A", ...],配[]代表所有 + def GetServerGroupIDList(self): return self.ServerGroupIDList # 服务器ID列表 + def GetActNum(self): return self.ActNum # 活动分组编号, 活动类型 * 10 + 不同界面编号 + 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 GetResetType(self): return self.ResetType # 重置类型,0-0点重置;1-5点重置 + def GetTemplateIDList(self): return self.TemplateIDList # 榜单模板编号列表 + +# Boss历练榜单模版表 +class IPY_ActBossTrialTemplate(): + + def __init__(self): + self.TemplateID = 0 + self.Rank = 0 + self.AwardItemList = [] + return + + def GetTemplateID(self): return self.TemplateID # 模板编号 + def GetRank(self): return self.Rank # 名次 + def GetAwardItemList(self): return self.AwardItemList # 奖励物品信息列表 [[物品ID,个数,是否拍品], ...] + # 仙匣秘境活动时间表 class IPY_ActXianXiaMJ(): @@ -2886,6 +2951,10 @@ self.ipyActCollectWordsLen = len(self.ipyActCollectWordsCache) self.ipyActGarbageSortingCache = self.__LoadFileData("ActGarbageSorting", IPY_ActGarbageSorting) self.ipyActGarbageSortingLen = len(self.ipyActGarbageSortingCache) + self.ipyActBossTrialCache = self.__LoadFileData("ActBossTrial", IPY_ActBossTrial) + self.ipyActBossTrialLen = len(self.ipyActBossTrialCache) + self.ipyActBossTrialTemplateCache = self.__LoadFileData("ActBossTrialTemplate", IPY_ActBossTrialTemplate) + self.ipyActBossTrialTemplateLen = len(self.ipyActBossTrialTemplateCache) self.ipyActXianXiaMJCache = self.__LoadFileData("ActXianXiaMJ", IPY_ActXianXiaMJ) self.ipyActXianXiaMJLen = len(self.ipyActXianXiaMJCache) self.ipyActGodGiftCache = self.__LoadFileData("ActGodGift", IPY_ActGodGift) @@ -3222,6 +3291,10 @@ def GetActCollectWordsByIndex(self, index): return self.ipyActCollectWordsCache[index] def GetActGarbageSortingCount(self): return self.ipyActGarbageSortingLen def GetActGarbageSortingByIndex(self, index): return self.ipyActGarbageSortingCache[index] + def GetActBossTrialCount(self): return self.ipyActBossTrialLen + def GetActBossTrialByIndex(self, index): return self.ipyActBossTrialCache[index] + def GetActBossTrialTemplateCount(self): return self.ipyActBossTrialTemplateLen + def GetActBossTrialTemplateByIndex(self, index): return self.ipyActBossTrialTemplateCache[index] def GetActXianXiaMJCount(self): return self.ipyActXianXiaMJLen def GetActXianXiaMJByIndex(self, index): return self.ipyActXianXiaMJCache[index] def GetActGodGiftCount(self): return self.ipyActGodGiftLen diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerActBossTrial.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerActBossTrial.py new file mode 100644 index 0000000..b2bce75 --- /dev/null +++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerActBossTrial.py @@ -0,0 +1,78 @@ +#!/usr/bin/python +# -*- coding: GBK -*- +#------------------------------------------------------------------------------- +# +##@package PlayerActBossTrial +# +# @todo:boss历练 +# @author hxp +# @date 2023-10-20 +# @version 1.0 +# +# 详细描述: boss历练 +# +#------------------------------------------------------------------------------- +#"""Version = 2023-10-20 16:00""" +#------------------------------------------------------------------------------- + +import ShareDefine +import DataRecordPack +import PlayerCompensation +import PlayerBillboard +import IpyGameDataPY +import GameWorld + +BillboardType = ShareDefine.Def_BT_BossTrialSubmit + +def OnActStart(actNum): + ## 活动开启 + PlayerBillboard.ClearBillboardByIndex(BillboardType) + return + +def OnActEnd(actNum, ipyData, dayIndex): + ## 活动结束 + cfgID = ipyData.GetCfgID() if ipyData else 0 + # 发放排行奖励 + GameWorld.Log("=== boss历练活动结束!发放榜单奖励! === actNum=%s,cfgID=%s,dayIndex=%s" % (actNum, cfgID, dayIndex)) + if not cfgID: + return + billBoard = GameWorld.GetBillboard().FindBillboard(BillboardType) + if not billBoard: + return + templateID = GameWorld.GetTemplateID(ipyData, cfgID, dayIndex) + if not templateID: + return + tempIpyDataList = IpyGameDataPY.GetIpyGameDataList("ActBossTrialTemplate", templateID) + if not tempIpyDataList: + return + + rankAwardDict = {} + for tempIpyData in tempIpyDataList: + rankAwardDict[tempIpyData.GetRank()] = tempIpyData.GetAwardItemList() + + GameWorld.Log(" templateID=%s,rankAwardDict=%s" % (templateID, rankAwardDict)) + billBoard.Sort() + for index in xrange(billBoard.GetCount()): + billBoardData = billBoard.At(index) + if not billBoardData: + continue + + rank = index + 1 + + awardItemList = GameWorld.GetOrderValueByDict(rankAwardDict, rank, False) + if not awardItemList: + break + + playerID = billBoardData.GetID() + name2 = billBoardData.GetName2() + cmpValue = billBoardData.GetCmpValue() + + GameWorld.Log(" 发放boss历练榜单奖励: rank=%s,playerID=%s,cmpValue=%s,awardItemList=%s, %s" + % (rank, playerID, cmpValue, awardItemList, name2)) + + PlayerCompensation.SendMailByKey("BossTrialMail%s" % actNum, [playerID], awardItemList, [rank]) + + DataRecordPack.DR_BillboardData(BillboardType, "BossTrial", {"actNum":actNum, "cfgID":cfgID, "dayIndex":dayIndex, "templateID":templateID}) + PlayerBillboard.ClearBillboardByIndex(BillboardType) + GameWorld.Log("=================================================================================") + return diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py index 90b0787..1e462d0 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py @@ -286,6 +286,7 @@ OperationActionName_XianXiaMJ = "ActXianXiaMJ" # 仙匣秘境活动 OperationActionName_GodGift = "ActGodGift" # 天帝礼包活动 OperationActionName_BuyOne = "ActBuyOne" # 买一送多活动 +OperationActionName_BossTrial = "ActBossTrial" # Boss历练 #节日活动类型列表 - 该类型无视开服天,日期到了就开启 FeastOperationActionNameList = [OperationActionName_FeastWeekParty, OperationActionName_FeastRedPacket, OperationActionName_RechargeRebateGold, OperationActionName_GrowupBuy, @@ -305,7 +306,7 @@ OperationActionName_CollectWords, OperationActionName_ManyDayRecharge, OperationActionName_Turntable, OperationActionName_HorsePetFeast, OperationActionName_GarbageSorting, OperationActionName_XianXiaMJ, OperationActionName_GodGift, - OperationActionName_BuyOne, + OperationActionName_BuyOne, OperationActionName_BossTrial, ] + FeastOperationActionNameList #需要记录开启活动时的世界等级的运营活动 NeedWorldLVOperationActNameList = [OperationActionName_FairyCeremony, OperationActionName_WishingWell, @@ -329,7 +330,7 @@ OperationActionName_ManyDayRecharge, OperationActionName_SingleRecharge, OperationActionName_Turntable, OperationActionName_HorsePetFeast, OperationActionName_GarbageSorting, OperationActionName_XianXiaMJ, OperationActionName_GodGift, - OperationActionName_BuyOne, + OperationActionName_BuyOne, OperationActionName_BossTrial, ] #跨服运营活动表名定义 @@ -794,9 +795,10 @@ Def_BT_CharmTotal, #魅力总榜 30 Def_BT_CharmWeek, #魅力周榜 Def_BT_CharmDay, #魅力日榜 + Def_BT_BossTrialSubmit, #提交boss凭证榜 (boss历练活动) Def_BT_Max, #排行榜最大类型 -) = range(0, 32 + 2) +) = range(0, 33 + 2) ''' 跨服排行榜类型, 从 150 开始 与本服榜单存储的是不一样的数据库表格,理论上类型可以和本服榜单类型重复,为了做下区分防误导,跨服榜单从 150 开始 diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini index bc2e56f..07ad34e 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini @@ -1553,6 +1553,22 @@ PacketSubCMD_2=0x06 PacketCallFunc_2=OnActWishingDrag +;boss历练活动 +[PlayerActBossTrial] +ScriptName = Player\PlayerActBossTrial.py +Writer = hxp +Releaser = hxp +RegType = 0 +RegisterPackCount = 2 + +PacketCMD_1=0xAA +PacketSubCMD_1=0x23 +PacketCallFunc_1=OnActBossTrialSubmit + +PacketCMD_2=0xAA +PacketSubCMD_2=0x24 +PacketCallFunc_2=OnActBossTrialGetAward + ;垃圾分类活动 [PlayerActGarbageSorting] ScriptName = Player\PlayerActGarbageSorting.py diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py index 813fe93..7533117 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py @@ -3964,6 +3964,11 @@ #诛仙BOSS Def_PDict_ZhuXianBossHelpCnt = "ZhuXianBossHelpCnt" # 协助次数 +#boss历练 +Def_PDict_BossTrialID = "BossTrialID_%s" # 玩家身上的活动ID,唯一标识,取活动开始日期time,参数(活动编号) +Def_PDict_BossTrialSubmitCount = "BossTrialSubmitCount_%s" # 提交凭证物品个数,参数(活动编号) +Def_PDict_BossTrialSubmitAward = "BossTrialSubmitAward_%s" # 提交凭证奖励状态,参数(活动编号) + #幸运鉴宝 Def_PDict_LuckyTreasureID = "LuckyTreasureID" # 玩家身上的活动ID,唯一标识,取活动开始日期time值 Def_PDict_LuckyTreasureFree = "LuckyTreasureFree" #是否免费过 diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py index cc8227f..3014e24 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py @@ -15062,6 +15062,118 @@ #------------------------------------------------------ +# AA 24 Boss历练领奖 #tagCMActBossTrialGetAward + +class tagCMActBossTrialGetAward(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ActNum", c_ubyte), #活动编号 + ("SubmitCount", c_ushort), #领取凭证个数对应奖励 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xAA + self.SubCmd = 0x24 + 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 = 0x24 + self.ActNum = 0 + self.SubmitCount = 0 + return + + def GetLength(self): + return sizeof(tagCMActBossTrialGetAward) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 24 Boss历练领奖 //tagCMActBossTrialGetAward: + Cmd:%s, + SubCmd:%s, + ActNum:%d, + SubmitCount:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ActNum, + self.SubmitCount + ) + return DumpString + + +m_NAtagCMActBossTrialGetAward=tagCMActBossTrialGetAward() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActBossTrialGetAward.Cmd,m_NAtagCMActBossTrialGetAward.SubCmd))] = m_NAtagCMActBossTrialGetAward + + +#------------------------------------------------------ +# AA 23 Boss历练提交凭证 #tagCMActBossTrialSubmit + +class tagCMActBossTrialSubmit(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ActNum", c_ubyte), #活动编号 + ("SubmitCount", c_ushort), #提交凭证个数 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xAA + self.SubCmd = 0x23 + 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 = 0x23 + self.ActNum = 0 + self.SubmitCount = 0 + return + + def GetLength(self): + return sizeof(tagCMActBossTrialSubmit) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 23 Boss历练提交凭证 //tagCMActBossTrialSubmit: + Cmd:%s, + SubCmd:%s, + ActNum:%d, + SubmitCount:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ActNum, + self.SubmitCount + ) + return DumpString + + +m_NAtagCMActBossTrialSubmit=tagCMActBossTrialSubmit() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActBossTrialSubmit.Cmd,m_NAtagCMActBossTrialSubmit.SubCmd))] = m_NAtagCMActBossTrialSubmit + + +#------------------------------------------------------ # AA 09 集字活动兑换 #tagCMActCollectWordsExchange class tagCMActCollectWordsExchange(Structure): diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py index eaf1503..71137b8 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py @@ -30633,6 +30633,360 @@ #------------------------------------------------------ +# AA 67 Boss历练活动信息 #tagMCActBossTrialInfo + +class tagMCActBossTrialItem(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(tagMCActBossTrialItem) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 67 Boss历练活动信息 //tagMCActBossTrialInfo: + ItemID:%d, + ItemCount:%d, + IsBind:%d + '''\ + %( + self.ItemID, + self.ItemCount, + self.IsBind + ) + return DumpString + + +class tagMCActBossTrialBillard(Structure): + Rank = 0 #(DWORD Rank)// 名次,1-代表第一名;支持夸段,如1,3 代表第1名,第2~3名 + Count = 0 #(BYTE Count)// 奖励物品数 + AwardItemList = list() #(vector<tagMCActBossTrialItem> AwardItemList)// 奖励物品列表 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.Rank,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.Count): + temAwardItemList = tagMCActBossTrialItem() + _pos = temAwardItemList.ReadData(_lpData, _pos) + self.AwardItemList.append(temAwardItemList) + return _pos + + def Clear(self): + self.Rank = 0 + self.Count = 0 + self.AwardItemList = list() + return + + def GetLength(self): + length = 0 + length += 4 + length += 1 + for i in range(self.Count): + length += self.AwardItemList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.Rank) + data = CommFunc.WriteBYTE(data, self.Count) + for i in range(self.Count): + data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Rank:%d, + Count:%d, + AwardItemList:%s + '''\ + %( + self.Rank, + self.Count, + "..." + ) + return DumpString + + +class tagMCActBossTrialSubmitInfo(Structure): + RecordIndex = 0 #(BYTE RecordIndex)// 记录索引 + NeedCount = 0 #(WORD NeedCount)// 所需提交个数 + Count = 0 #(BYTE Count)// 奖励物品数 + AwardItemList = list() #(vector<tagMCActBossTrialItem> AwardItemList)// 奖励物品列表 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.RecordIndex,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.NeedCount,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.Count): + temAwardItemList = tagMCActBossTrialItem() + _pos = temAwardItemList.ReadData(_lpData, _pos) + self.AwardItemList.append(temAwardItemList) + return _pos + + def Clear(self): + self.RecordIndex = 0 + self.NeedCount = 0 + self.Count = 0 + self.AwardItemList = list() + return + + def GetLength(self): + length = 0 + length += 1 + length += 2 + length += 1 + for i in range(self.Count): + length += self.AwardItemList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteBYTE(data, self.RecordIndex) + data = CommFunc.WriteWORD(data, self.NeedCount) + data = CommFunc.WriteBYTE(data, self.Count) + for i in range(self.Count): + data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + RecordIndex:%d, + NeedCount:%d, + Count:%d, + AwardItemList:%s + '''\ + %( + self.RecordIndex, + self.NeedCount, + self.Count, + "..." + ) + return DumpString + + +class tagMCActBossTrialInfo(Structure): + Head = tagHead() + ActNum = 0 #(BYTE ActNum)// 活动编号 + StartDate = "" #(char StartDate[10])// 开始日期 y-m-d + EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d + IsDayReset = 0 #(BYTE IsDayReset)// 是否每天重置 + ResetType = 0 #(BYTE ResetType)// 重置类型,0-0点重置;1-5点重置 + LimitLV = 0 #(WORD LimitLV)// 限制等级 + SubmitCount = 0 #(BYTE SubmitCount) + SubmitInfoList = list() #(vector<tagMCActBossTrialSubmitInfo> SubmitInfoList)// 提交凭证信息列表 + BillardCount = 0 #(BYTE BillardCount) + BillboardInfoList = list() #(vector<tagMCActBossTrialBillard> BillboardInfoList)// 榜单信息列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x67 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.ActNum,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.IsDayReset,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.ResetType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.SubmitCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.SubmitCount): + temSubmitInfoList = tagMCActBossTrialSubmitInfo() + _pos = temSubmitInfoList.ReadData(_lpData, _pos) + self.SubmitInfoList.append(temSubmitInfoList) + self.BillardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.BillardCount): + temBillboardInfoList = tagMCActBossTrialBillard() + _pos = temBillboardInfoList.ReadData(_lpData, _pos) + self.BillboardInfoList.append(temBillboardInfoList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x67 + self.ActNum = 0 + self.StartDate = "" + self.EndtDate = "" + self.IsDayReset = 0 + self.ResetType = 0 + self.LimitLV = 0 + self.SubmitCount = 0 + self.SubmitInfoList = list() + self.BillardCount = 0 + self.BillboardInfoList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 10 + length += 10 + length += 1 + length += 1 + length += 2 + length += 1 + for i in range(self.SubmitCount): + length += self.SubmitInfoList[i].GetLength() + length += 1 + for i in range(self.BillardCount): + length += self.BillboardInfoList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ActNum) + data = CommFunc.WriteString(data, 10, self.StartDate) + data = CommFunc.WriteString(data, 10, self.EndtDate) + data = CommFunc.WriteBYTE(data, self.IsDayReset) + data = CommFunc.WriteBYTE(data, self.ResetType) + data = CommFunc.WriteWORD(data, self.LimitLV) + data = CommFunc.WriteBYTE(data, self.SubmitCount) + for i in range(self.SubmitCount): + data = CommFunc.WriteString(data, self.SubmitInfoList[i].GetLength(), self.SubmitInfoList[i].GetBuffer()) + data = CommFunc.WriteBYTE(data, self.BillardCount) + for i in range(self.BillardCount): + data = CommFunc.WriteString(data, self.BillboardInfoList[i].GetLength(), self.BillboardInfoList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ActNum:%d, + StartDate:%s, + EndtDate:%s, + IsDayReset:%d, + ResetType:%d, + LimitLV:%d, + SubmitCount:%d, + SubmitInfoList:%s, + BillardCount:%d, + BillboardInfoList:%s + '''\ + %( + self.Head.OutputString(), + self.ActNum, + self.StartDate, + self.EndtDate, + self.IsDayReset, + self.ResetType, + self.LimitLV, + self.SubmitCount, + "...", + self.BillardCount, + "..." + ) + return DumpString + + +m_NAtagMCActBossTrialInfo=tagMCActBossTrialInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActBossTrialInfo.Head.Cmd,m_NAtagMCActBossTrialInfo.Head.SubCmd))] = m_NAtagMCActBossTrialInfo + + +#------------------------------------------------------ +# AA 68 Boss历练活动玩家信息 #tagMCActBossTrialPlayerInfo + +class tagMCActBossTrialPlayerInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ActNum", c_ubyte), # 活动编号 + ("SubmitCount", c_ushort), # 已提交凭证个数 + ("SubmitCountAward", c_int), # 提交凭证奖励领奖状态 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xAA + self.SubCmd = 0x68 + 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 = 0x68 + self.ActNum = 0 + self.SubmitCount = 0 + self.SubmitCountAward = 0 + return + + def GetLength(self): + return sizeof(tagMCActBossTrialPlayerInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 68 Boss历练活动玩家信息 //tagMCActBossTrialPlayerInfo: + Cmd:%s, + SubCmd:%s, + ActNum:%d, + SubmitCount:%d, + SubmitCountAward:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ActNum, + self.SubmitCount, + self.SubmitCountAward + ) + return DumpString + + +m_NAtagMCActBossTrialPlayerInfo=tagMCActBossTrialPlayerInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActBossTrialPlayerInfo.Cmd,m_NAtagMCActBossTrialPlayerInfo.SubCmd))] = m_NAtagMCActBossTrialPlayerInfo + + +#------------------------------------------------------ # AA 65 买一送多活动信息 #tagMCActBuyOneInfo class tagMCActBuyOneInfoFreeItem(Structure): diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py index b721f29..1f32797 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py @@ -1400,6 +1400,23 @@ ("list", "ProduceGarbageRateList", 0), ), + "ActBossTrial":( + ("DWORD", "CfgID", 1), + ("char", "StartDate", 0), + ("char", "EndDate", 0), + ("WORD", "LVLimit", 0), + ("BYTE", "IsDayReset", 0), + ("BYTE", "ResetType", 0), + ("dict", "SubmitItemAwardInfo", 0), + ("list", "TemplateIDList", 0), + ), + + "ActBossTrialTemplate":( + ("DWORD", "TemplateID", 1), + ("BYTE", "Rank", 0), + ("list", "AwardItemList", 0), + ), + "ActXianXiaMJ":( ("DWORD", "CfgID", 1), ("char", "StartDate", 0), @@ -5050,6 +5067,42 @@ def GetAutoProduce(self): return self.AutoProduce # 自动产生垃圾 def GetProduceGarbageRateList(self): return self.ProduceGarbageRateList # 随机产生垃圾概率饼图 +# Boss历练活动表 +class IPY_ActBossTrial(): + + def __init__(self): + self.CfgID = 0 + self.StartDate = "" + self.EndDate = "" + self.LVLimit = 0 + self.IsDayReset = 0 + self.ResetType = 0 + self.SubmitItemAwardInfo = {} + 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 GetResetType(self): return self.ResetType # 重置类型,0-0点重置;1-5点重置 + def GetSubmitItemAwardInfo(self): return self.SubmitItemAwardInfo # 提交凭证个数对应奖励 + def GetTemplateIDList(self): return self.TemplateIDList # 榜单模板编号列表 + +# Boss历练榜单模版表 +class IPY_ActBossTrialTemplate(): + + def __init__(self): + self.TemplateID = 0 + self.Rank = 0 + self.AwardItemList = [] + return + + def GetTemplateID(self): return self.TemplateID # 模板编号 + def GetRank(self): return self.Rank # 名次 + def GetAwardItemList(self): return self.AwardItemList # 奖励物品信息列表 [[物品ID,个数,是否拍品], ...] + # 仙匣秘境活动时间表 class IPY_ActXianXiaMJ(): @@ -6992,6 +7045,10 @@ self.ipyActGarbageSortingLen = len(self.ipyActGarbageSortingCache) self.ipyActGarbageTaskCache = self.__LoadFileData("ActGarbageTask", IPY_ActGarbageTask) self.ipyActGarbageTaskLen = len(self.ipyActGarbageTaskCache) + self.ipyActBossTrialCache = self.__LoadFileData("ActBossTrial", IPY_ActBossTrial) + self.ipyActBossTrialLen = len(self.ipyActBossTrialCache) + self.ipyActBossTrialTemplateCache = self.__LoadFileData("ActBossTrialTemplate", IPY_ActBossTrialTemplate) + self.ipyActBossTrialTemplateLen = len(self.ipyActBossTrialTemplateCache) self.ipyActXianXiaMJCache = self.__LoadFileData("ActXianXiaMJ", IPY_ActXianXiaMJ) self.ipyActXianXiaMJLen = len(self.ipyActXianXiaMJCache) self.ipyActXianXiaMJAwardCache = self.__LoadFileData("ActXianXiaMJAward", IPY_ActXianXiaMJAward) @@ -7604,6 +7661,10 @@ def GetActGarbageSortingByIndex(self, index): return self.ipyActGarbageSortingCache[index] def GetActGarbageTaskCount(self): return self.ipyActGarbageTaskLen def GetActGarbageTaskByIndex(self, index): return self.ipyActGarbageTaskCache[index] + def GetActBossTrialCount(self): return self.ipyActBossTrialLen + def GetActBossTrialByIndex(self, index): return self.ipyActBossTrialCache[index] + def GetActBossTrialTemplateCount(self): return self.ipyActBossTrialTemplateLen + def GetActBossTrialTemplateByIndex(self, index): return self.ipyActBossTrialTemplateCache[index] def GetActXianXiaMJCount(self): return self.ipyActXianXiaMJLen def GetActXianXiaMJByIndex(self, index): return self.ipyActXianXiaMJCache[index] def GetActXianXiaMJAwardCount(self): return self.ipyActXianXiaMJAwardLen diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py index 9d24aa1..9b31933 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py @@ -117,6 +117,7 @@ import PlayerActManyDayRecharge import PlayerActSingleRecharge import PlayerActHorsePetFeast +import PlayerActBossTrial import PlayerSpringSale import PlayerFairyCeremony import PlayerNewFairyCeremony @@ -851,6 +852,8 @@ PlayerFreeGoods.OnLogin(curPlayer) # BOSS复活活动 PlayerBossReborn.OnLogin(curPlayer) + # boss历练 + PlayerActBossTrial.OnPlayerLogin(curPlayer) # 骑宠盛宴活动 PlayerActHorsePetFeast.OnLogin(curPlayer) # 周狂欢活动 diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActBossTrial.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActBossTrial.py new file mode 100644 index 0000000..9ed125d --- /dev/null +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActBossTrial.py @@ -0,0 +1,267 @@ +#!/usr/bin/python +# -*- coding: GBK -*- +#------------------------------------------------------------------------------- +# +##@package Player.PlayerActBossTrial +# +# @todo:boss历练 +# @author hxp +# @date 2023-10-20 +# @version 1.0 +# +# 详细描述: boss历练 +# +#------------------------------------------------------------------------------- +#"""Version = 2023-10-20 16:00""" +#------------------------------------------------------------------------------- + +import PyGameData +import ItemCommon +import ShareDefine +import PlayerControl +import IpyGameDataPY +import ChPyNetSendPack +import PlayerBillboard +import ItemControler +import NetPackCommon +import IPY_GameWorld +import GameWorld +import ChConfig + +def OnPlayerLogin(curPlayer): + + for actInfo in PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_BossTrial, {}).values(): + actNum = actInfo.get(ShareDefine.ActKey_ActNum, 0) + isReset = __CheckPlayerBossTrialAction(curPlayer, actNum) + # 活动中同步活动信息 + if not isReset and actInfo.get(ShareDefine.ActKey_State): + Sync_BossTrialActionInfo(curPlayer, actNum) + Sync_BossTrialPlayerInfo(curPlayer, actNum) + + return + +def RefreshBossTrialActionInfo(actNum): + ## 收到GameServer同步的活动信息,刷新活动信息 + playerManager = GameWorld.GetPlayerManager() + for index in xrange(playerManager.GetPlayerCount()): + curPlayer = playerManager.GetPlayerByIndex(index) + if curPlayer.GetID() == 0: + continue + __CheckPlayerBossTrialAction(curPlayer, actNum) + return + +def __CheckPlayerBossTrialAction(curPlayer, actNum): + ## 检查玩活动数据信息 + + playerID = curPlayer.GetPlayerID() + + actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_BossTrial, actNum) + actID = actInfo.get(ShareDefine.ActKey_ID, 0) + state = actInfo.get(ShareDefine.ActKey_State, 0) + + playerActID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BossTrialID % actNum) # 玩家身上的活动ID + + # 活动ID 相同的话不处理 + if actID == playerActID: + GameWorld.DebugLog("Boss历练活动ID不变,不处理! actID=%s" % actID, curPlayer.GetPlayerID()) + return + GameWorld.DebugLog("Boss历练活动重置! actID=%s,playerActID=%s,state=%s" % (actID, playerActID, state), playerID) + + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_BossTrialID % actNum, actID) + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_BossTrialSubmitCount % actNum, 0) + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_BossTrialSubmitAward % actNum, 0) + + if state: + Sync_BossTrialActionInfo(curPlayer, actNum) + Sync_BossTrialPlayerInfo(curPlayer, actNum) + + return True + +#// AA 23 Boss历练提交凭证 #tagCMActBossTrialSubmit +# +#struct tagCMActBossTrialSubmit +#{ +# tagHead Head; +# BYTE ActNum; //活动编号 +# WORD SubmitCount; //提交凭证个数 +#}; +def OnActBossTrialSubmit(index, clientData, tick): + curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) + actNum = clientData.ActNum + submitCount = clientData.SubmitCount + + playerID = curPlayer.GetPlayerID() + actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_BossTrial, actNum) + if not actInfo.get(ShareDefine.ActKey_State): + GameWorld.DebugLog("Boss历练非活动中: actNum=%s" % actNum, playerID) + return + + itemID = IpyGameDataPY.GetFuncCfg("BossTrial", 1) + itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem) + lackItemDict, delInfoDict = ItemCommon.GetCostItemIndexList({itemID:submitCount}, itemPack) + if lackItemDict: + GameWorld.DebugLog("Boss历练提交凭证物品不足! actNum=%s,itemID=%s,submitCount=%s,lackItemDict=%s" % (actNum, itemID, submitCount, lackItemDict), playerID) + return + ItemCommon.DelCostItem(curPlayer, itemPack, delInfoDict, "BossTrialSubmit") + + nowSubmitCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BossTrialSubmitCount % actNum) + updSubmitCount = nowSubmitCount + submitCount + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_BossTrialSubmitCount % actNum, updSubmitCount) + GameWorld.DebugLog("Boss历练提交凭证: actNum=%s,itemID=%s,submitCount=%s,updSubmitCount=%s" % (actNum, itemID, submitCount, updSubmitCount), playerID) + + PlayerBillboard.UpdatePlayerBillboard(curPlayer, ShareDefine.Def_BT_BossTrialSubmit, updSubmitCount) + + Sync_BossTrialPlayerInfo(curPlayer, actNum) + return + +#// AA 24 Boss历练领奖 #tagCMActBossTrialGetAward +# +#struct tagCMActBossTrialGetAward +#{ +# tagHead Head; +# BYTE ActNum; //活动编号 +# WORD SubmitCount; //领取凭证个数对应奖励 +#}; +def OnActBossTrialGetAward(index, clientData, tick): + curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) + actNum = clientData.ActNum + submitCount = clientData.SubmitCount + + playerID = curPlayer.GetPlayerID() + actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_BossTrial, actNum) + if not actInfo.get(ShareDefine.ActKey_State): + GameWorld.DebugLog("Boss历练非活动中: actNum=%s" % actNum, playerID) + return + + cfgID = actInfo.get(ShareDefine.ActKey_CfgID) + ipyData = IpyGameDataPY.GetIpyGameData("ActBossTrial", cfgID) + if not ipyData: + return + submitItemAwardInfo = ipyData.GetSubmitItemAwardInfo() + if submitCount not in submitItemAwardInfo: + GameWorld.DebugLog("Boss历练没有该奖励: actNum=%s,submitCount=%s not in %s" % (actNum, submitCount, submitItemAwardInfo.keys()), playerID) + return + recordIndex, awardItemList = submitItemAwardInfo[submitCount] + + nowSubmitCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BossTrialSubmitCount % actNum) + if nowSubmitCount < submitCount: + GameWorld.DebugLog("Boss历练提交凭证个数不足,无法领奖: actNum=%s,nowSubmitCount=%s < %s" % (actNum, nowSubmitCount, submitCount), playerID) + return + + awardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BossTrialSubmitAward % actNum) + if awardState & pow(2, recordIndex): + GameWorld.DebugLog("Boss历练领奖已领取过: actNum=%s,submitCount=%s,recordIndex=%s,awardState=%s" % (actNum, submitCount, recordIndex, awardState), playerID) + return + updAwardState = awardState | pow(2, recordIndex) + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_BossTrialSubmitAward % actNum, updAwardState) + GameWorld.DebugLog("Boss历练领奖: actNum=%s,submitCount=%s,recordIndex=%s,awardState=%s,updAwardState=%s" + % (actNum, submitCount, recordIndex, awardState, updAwardState), playerID) + + ItemControler.GivePlayerItemOrMail(curPlayer, awardItemList, event=["BossTrial", False, {}]) + Sync_BossTrialPlayerInfo(curPlayer, actNum) + return + +def GetBossTrialDropItemIDList(curPlayer, limitIndex): + bossIndexList = IpyGameDataPY.GetFuncEvalCfg("BossTrial", 2) + if limitIndex not in bossIndexList: + return + + dropCountTotal = 0 + itemID = IpyGameDataPY.GetFuncCfg("BossTrial", 1) + dropCountRateList = IpyGameDataPY.GetFuncEvalCfg("BossTrial", 3) + + for actInfo in PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_BossTrial, {}).values(): + actNum = actInfo.get(ShareDefine.ActKey_ActNum, 0) + if not actInfo.get(ShareDefine.ActKey_State): + GameWorld.DebugLog("Boss历练非活动中,不掉落! actNum=%s" % actNum) + continue + dropCount = GameWorld.GetResultByRandomList(dropCountRateList) + if not dropCount: + continue + dropCountTotal += dropCount + + return itemID, dropCountTotal + +def Sync_BossTrialPlayerInfo(curPlayer, actNum): + ## 通知玩家数据信息 + actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_BossTrial, actNum) + if not actInfo.get(ShareDefine.ActKey_State): + return + clientPack = ChPyNetSendPack.tagMCActBossTrialPlayerInfo() + clientPack.ActNum = actNum + clientPack.SubmitCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BossTrialSubmitCount % actNum) + clientPack.SubmitCountAward = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BossTrialSubmitAward % actNum) + NetPackCommon.SendFakePack(curPlayer, clientPack) + return + +def Sync_BossTrialActionInfo(curPlayer, actNum): + ## 通知活动信息 + + actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_BossTrial, actNum) + if not actInfo.get(ShareDefine.ActKey_State): + return + + cfgID = actInfo.get(ShareDefine.ActKey_CfgID) + dayIndex = actInfo.get(ShareDefine.ActKey_DayIndex, 0) + ipyData = IpyGameDataPY.GetIpyGameData("ActBossTrial", cfgID) + if not ipyData: + return + templateID = GameWorld.GetTemplateID(ipyData, cfgID, dayIndex) + if not templateID: + return + tempIpyDataList = IpyGameDataPY.GetIpyGameDataList("ActBossTrialTemplate", templateID) + if not tempIpyDataList: + return + + startDateStr, endDateStr = GameWorld.GetOperationActionDateStr(ipyData) + startDateSync = actInfo.get(ShareDefine.ActKey_StartDateSync, startDateStr) + actInfo = ChPyNetSendPack.tagMCActBossTrialInfo() + actInfo.ActNum = actNum + actInfo.StartDate = startDateSync + actInfo.EndtDate = endDateStr + actInfo.IsDayReset = ipyData.GetIsDayReset() + actInfo.ResetType = ipyData.GetResetType() + actInfo.LimitLV = ipyData.GetLVLimit() + + actInfo.SubmitInfoList = [] + submitItemAwardInfo = ipyData.GetSubmitItemAwardInfo() + submitCountList = submitItemAwardInfo.keys() + submitCountList.sort() + for submitCount in submitCountList: + recordIndex, awardItemList = submitItemAwardInfo[submitCount] + subInfo = ChPyNetSendPack.tagMCActBossTrialSubmitInfo() + subInfo.Clear() + subInfo.RecordIndex = recordIndex + subInfo.NeedCount = submitCount + subInfo.AwardItemList = [] + for itemID, itemCount, isAuctionItem in awardItemList: + item = ChPyNetSendPack.tagMCActBossTrialItem() + item.Clear() + item.ItemID = itemID + item.ItemCount = itemCount + item.IsBind = isAuctionItem + subInfo.AwardItemList.append(item) + subInfo.Count = len(subInfo.AwardItemList) + actInfo.SubmitInfoList.append(subInfo) + actInfo.SubmitCount = len(actInfo.SubmitInfoList) + + actInfo.BillboardInfoList = [] + for tempIpyData in tempIpyDataList: + rankInfo = ChPyNetSendPack.tagMCActBossTrialBillard() + rankInfo.Rank = tempIpyData.GetRank() + rankInfo.AwardItemList = [] + + awardItemList = tempIpyData.GetAwardItemList() + for itemID, itemCount, isAuctionItem in awardItemList: + item = ChPyNetSendPack.tagMCActBossTrialItem() + item.Clear() + item.ItemID = itemID + item.ItemCount = itemCount + item.IsBind = isAuctionItem + rankInfo.AwardItemList.append(item) + rankInfo.Count = len(rankInfo.AwardItemList) + actInfo.BillboardInfoList.append(rankInfo) + actInfo.BillardCount = len(actInfo.BillboardInfoList) + + NetPackCommon.SendFakePack(curPlayer, actInfo) + return diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py index fea6218..c074111 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py @@ -89,6 +89,7 @@ import PlayerActRechargePrize import PlayerActGrowupBuy import PlayerActTurntable +import PlayerActBossTrial import PlayerActBuyOne import PlayerSpringSale import PlayerBossReborn @@ -1421,6 +1422,9 @@ elif actionName == ShareDefine.OperationActionName_BossReborn: PlayerBossReborn.RefreshOperationAction_BossReborn() + elif actionName == ShareDefine.OperationActionName_BossTrial: + PlayerActBossTrial.RefreshBossTrialActionInfo(actNum) + elif actionName == ShareDefine.OperationActionName_HorsePetFeast: PlayerActHorsePetFeast.RefreshOperationAction_HorsePetFeast(actNum) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py index 90b0787..1e462d0 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py @@ -286,6 +286,7 @@ OperationActionName_XianXiaMJ = "ActXianXiaMJ" # 仙匣秘境活动 OperationActionName_GodGift = "ActGodGift" # 天帝礼包活动 OperationActionName_BuyOne = "ActBuyOne" # 买一送多活动 +OperationActionName_BossTrial = "ActBossTrial" # Boss历练 #节日活动类型列表 - 该类型无视开服天,日期到了就开启 FeastOperationActionNameList = [OperationActionName_FeastWeekParty, OperationActionName_FeastRedPacket, OperationActionName_RechargeRebateGold, OperationActionName_GrowupBuy, @@ -305,7 +306,7 @@ OperationActionName_CollectWords, OperationActionName_ManyDayRecharge, OperationActionName_Turntable, OperationActionName_HorsePetFeast, OperationActionName_GarbageSorting, OperationActionName_XianXiaMJ, OperationActionName_GodGift, - OperationActionName_BuyOne, + OperationActionName_BuyOne, OperationActionName_BossTrial, ] + FeastOperationActionNameList #需要记录开启活动时的世界等级的运营活动 NeedWorldLVOperationActNameList = [OperationActionName_FairyCeremony, OperationActionName_WishingWell, @@ -329,7 +330,7 @@ OperationActionName_ManyDayRecharge, OperationActionName_SingleRecharge, OperationActionName_Turntable, OperationActionName_HorsePetFeast, OperationActionName_GarbageSorting, OperationActionName_XianXiaMJ, OperationActionName_GodGift, - OperationActionName_BuyOne, + OperationActionName_BuyOne, OperationActionName_BossTrial, ] #跨服运营活动表名定义 @@ -794,9 +795,10 @@ Def_BT_CharmTotal, #魅力总榜 30 Def_BT_CharmWeek, #魅力周榜 Def_BT_CharmDay, #魅力日榜 + Def_BT_BossTrialSubmit, #提交boss凭证榜 (boss历练活动) Def_BT_Max, #排行榜最大类型 -) = range(0, 32 + 2) +) = range(0, 33 + 2) ''' 跨服排行榜类型, 从 150 开始 与本服榜单存储的是不一样的数据库表格,理论上类型可以和本服榜单类型重复,为了做下区分防误导,跨服榜单从 150 开始 -- Gitblit v1.8.0