From 34fec42a90f2b3f726afa3e104e3e3112d9dc819 Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期三, 26 五月 2021 11:41:12 +0800 Subject: [PATCH] 8921 【主干】【BT2】【后端】H.活动-节日活动-垃圾分类(1.删除引导任务;2.环保抽奖改为独立的活动仙匣秘境;3.活动结束销毁剩余垃圾物品、重置祝福值;) --- ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py | 51 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py | 10 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py | 364 +++--- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py | 535 +++++---- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetMoney.py | 8 ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py | 364 +++--- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/PrintMoney.py | 5 ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py | 535 +++++---- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActGarbageSorting.py | 574 ---------- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini | 30 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py | 59 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/QuestCommon.py | 3 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py | 3 PySysDB/PySysDBPY.h | 19 ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py | 10 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py | 4 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActXianXiaMJ.py | 596 +++++++++++ PySysDB/PySysDBG.h | 17 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py | 14 19 files changed, 1,735 insertions(+), 1,466 deletions(-) diff --git a/PySysDB/PySysDBG.h b/PySysDB/PySysDBG.h index 62192a0..407da7a 100644 --- a/PySysDB/PySysDBG.h +++ b/PySysDB/PySysDBG.h @@ -480,6 +480,23 @@ dict NotifyInfoStart; //全服提示信息 - 相对开始时间 dict NotifyInfoEnd; //全服提示信息 - 相对结束时间 list NotifyInfoLoop; //全服提示信息 - 循环广播[间隔分钟, 广播key] + BYTE ResetType; //重置类型,0-0点重置;1-5点重置 +}; + +//仙匣秘境活动时间表 + +struct tagActXianXiaMJ +{ + 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 ResetType; //重置类型,0-0点重置;1-5点重置 }; //骑宠盛宴活动 diff --git a/PySysDB/PySysDBPY.h b/PySysDB/PySysDBPY.h index c0be2ce..bd0ab04 100644 --- a/PySysDB/PySysDBPY.h +++ b/PySysDB/PySysDBPY.h @@ -1439,9 +1439,9 @@ DWORD _CfgID; //配置ID char StartDate; //开启日期 char EndDate; //结束日期 + BYTE ResetType; //重置类型,0-0点重置;1-5点重置 WORD LVLimit; //限制等级 BYTE CTGTypeEffValue; //充值有效类型值 - BYTE TemplateID; //模板ID }; //垃圾分类任务产出表 @@ -1455,9 +1455,22 @@ list ProduceGarbageRateList; //随机产生垃圾概率饼图 }; -//垃圾分类环保奖池表 +//仙匣秘境活动时间表 -struct tagActGarbageAward +struct tagActXianXiaMJ +{ + DWORD _CfgID; //配置ID + char StartDate; //开启日期 + char EndDate; //结束日期 + BYTE ResetType; //重置类型,0-0点重置;1-5点重置 + WORD LVLimit; //限制等级 + list UseMoneyInfo; //消耗货币信息 + BYTE TemplateID; //模板ID +}; + +//仙匣秘境奖池表 + +struct tagActXianXiaMJAward { DWORD _TemplateID; //奖池模板编号 BYTE AwardLibType; //奖励库类型 diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py index 0a29534..f1676de 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py @@ -13321,80 +13321,6 @@ #------------------------------------------------------ -# AA 16 垃圾分类活动选择大奖 #tagCMActGarbageChooseSuperItem - -class tagCMActGarbageChooseSuperItem(Structure): - Head = tagHead() - ActNum = 0 #(BYTE ActNum)//活动编号 - SuperItemCount = 0 #(BYTE SuperItemCount)//选择物品数量 - SuperItemIDList = list() #(vector<DWORD> SuperItemIDList)//选择的大奖库物品ID列表,每次重新选择需要发送全部已选择的大奖物品ID,不能只发单个物品ID; - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xAA - self.Head.SubCmd = 0x16 - 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.SuperItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.SuperItemCount): - value,_pos=CommFunc.ReadDWORD(_lpData,_pos) - self.SuperItemIDList.append(value) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xAA - self.Head.SubCmd = 0x16 - self.ActNum = 0 - self.SuperItemCount = 0 - self.SuperItemIDList = list() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 1 - length += 1 - length += 4 * self.SuperItemCount - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteBYTE(data, self.ActNum) - data = CommFunc.WriteBYTE(data, self.SuperItemCount) - for i in range(self.SuperItemCount): - data = CommFunc.WriteDWORD(data, self.SuperItemIDList[i]) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - ActNum:%d, - SuperItemCount:%d, - SuperItemIDList:%s - '''\ - %( - self.Head.OutputString(), - self.ActNum, - self.SuperItemCount, - "..." - ) - return DumpString - - -m_NAtagCMActGarbageChooseSuperItem=tagCMActGarbageChooseSuperItem() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActGarbageChooseSuperItem.Head.Cmd,m_NAtagCMActGarbageChooseSuperItem.Head.SubCmd))] = m_NAtagCMActGarbageChooseSuperItem - - -#------------------------------------------------------ # AA 15 垃圾分类活动收集已完成的任务垃圾 #tagCMActGarbageGetTaskAward class tagCMActGarbageGetTaskAward(Structure): @@ -13448,62 +13374,6 @@ m_NAtagCMActGarbageGetTaskAward=tagCMActGarbageGetTaskAward() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActGarbageGetTaskAward.Cmd,m_NAtagCMActGarbageGetTaskAward.SubCmd))] = m_NAtagCMActGarbageGetTaskAward - - -#------------------------------------------------------ -# AA 17 垃圾分类活动抽奖 #tagCMActGarbageLottery - -class tagCMActGarbageLottery(Structure): - _pack_ = 1 - _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), - ("ActNum", c_ubyte), #活动编号 - ("PosNum", c_ubyte), #玩家点击的奖励位置编号,从1开始 - ] - - def __init__(self): - self.Clear() - self.Cmd = 0xAA - self.SubCmd = 0x17 - 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 = 0x17 - self.ActNum = 0 - self.PosNum = 0 - return - - def GetLength(self): - return sizeof(tagCMActGarbageLottery) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''// AA 17 垃圾分类活动抽奖 //tagCMActGarbageLottery: - Cmd:%s, - SubCmd:%s, - ActNum:%d, - PosNum:%d - '''\ - %( - self.Cmd, - self.SubCmd, - self.ActNum, - self.PosNum - ) - return DumpString - - -m_NAtagCMActGarbageLottery=tagCMActGarbageLottery() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActGarbageLottery.Cmd,m_NAtagCMActGarbageLottery.SubCmd))] = m_NAtagCMActGarbageLottery #------------------------------------------------------ @@ -13783,6 +13653,188 @@ #------------------------------------------------------ +# AA 18 仙匣秘境活动奖池刷新 #tagCMActXianXiaMJAwardPoolRefresh + +class tagCMActXianXiaMJAwardPoolRefresh(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ActNum", c_ubyte), #活动编号 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xAA + self.SubCmd = 0x18 + 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 = 0x18 + self.ActNum = 0 + return + + def GetLength(self): + return sizeof(tagCMActXianXiaMJAwardPoolRefresh) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 18 仙匣秘境活动奖池刷新 //tagCMActXianXiaMJAwardPoolRefresh: + Cmd:%s, + SubCmd:%s, + ActNum:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ActNum + ) + return DumpString + + +m_NAtagCMActXianXiaMJAwardPoolRefresh=tagCMActXianXiaMJAwardPoolRefresh() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActXianXiaMJAwardPoolRefresh.Cmd,m_NAtagCMActXianXiaMJAwardPoolRefresh.SubCmd))] = m_NAtagCMActXianXiaMJAwardPoolRefresh + + +#------------------------------------------------------ +# AA 17 仙匣秘境活动抽奖 #tagCMActXianXiaMJLottery + +class tagCMActXianXiaMJLottery(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ActNum", c_ubyte), #活动编号 + ("PosNum", c_ubyte), #玩家点击的奖励位置编号,从1开始 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xAA + self.SubCmd = 0x17 + 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 = 0x17 + self.ActNum = 0 + self.PosNum = 0 + return + + def GetLength(self): + return sizeof(tagCMActXianXiaMJLottery) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 17 仙匣秘境活动抽奖 //tagCMActXianXiaMJLottery: + Cmd:%s, + SubCmd:%s, + ActNum:%d, + PosNum:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ActNum, + self.PosNum + ) + return DumpString + + +m_NAtagCMActXianXiaMJLottery=tagCMActXianXiaMJLottery() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActXianXiaMJLottery.Cmd,m_NAtagCMActXianXiaMJLottery.SubCmd))] = m_NAtagCMActXianXiaMJLottery + + +#------------------------------------------------------ +# AA 16 仙匣秘境活动选择大奖 #tagCMActXianXiaMJSuperItem + +class tagCMActXianXiaMJSuperItem(Structure): + Head = tagHead() + ActNum = 0 #(BYTE ActNum)//活动编号 + SuperItemCount = 0 #(BYTE SuperItemCount)//选择物品数量 + SuperItemIDList = list() #(vector<DWORD> SuperItemIDList)//选择的大奖库物品ID列表,每次重新选择需要发送全部已选择的大奖物品ID,不能只发单个物品ID; + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x16 + 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.SuperItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.SuperItemCount): + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) + self.SuperItemIDList.append(value) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x16 + self.ActNum = 0 + self.SuperItemCount = 0 + self.SuperItemIDList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 1 + length += 4 * self.SuperItemCount + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ActNum) + data = CommFunc.WriteBYTE(data, self.SuperItemCount) + for i in range(self.SuperItemCount): + data = CommFunc.WriteDWORD(data, self.SuperItemIDList[i]) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ActNum:%d, + SuperItemCount:%d, + SuperItemIDList:%s + '''\ + %( + self.Head.OutputString(), + self.ActNum, + self.SuperItemCount, + "..." + ) + return DumpString + + +m_NAtagCMActXianXiaMJSuperItem=tagCMActXianXiaMJSuperItem() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActXianXiaMJSuperItem.Head.Cmd,m_NAtagCMActXianXiaMJSuperItem.Head.SubCmd))] = m_NAtagCMActXianXiaMJSuperItem + + +#------------------------------------------------------ # AA 06 许愿池活动许愿 #tagCMActWishing class tagCMActWishing(Structure): @@ -14012,58 +14064,6 @@ m_NAtagCMFlashSaleAppointment=tagCMFlashSaleAppointment() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMFlashSaleAppointment.Cmd,m_NAtagCMFlashSaleAppointment.SubCmd))] = m_NAtagCMFlashSaleAppointment - - -#------------------------------------------------------ -# AA 18 垃圾分类活动奖池刷新 #tagCMGarbageAwardPoolRefresh - -class tagCMGarbageAwardPoolRefresh(Structure): - _pack_ = 1 - _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), - ("ActNum", c_ubyte), #活动编号 - ] - - def __init__(self): - self.Clear() - self.Cmd = 0xAA - self.SubCmd = 0x18 - 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 = 0x18 - self.ActNum = 0 - return - - def GetLength(self): - return sizeof(tagCMGarbageAwardPoolRefresh) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''// AA 18 垃圾分类活动奖池刷新 //tagCMGarbageAwardPoolRefresh: - Cmd:%s, - SubCmd:%s, - ActNum:%d - '''\ - %( - self.Cmd, - self.SubCmd, - self.ActNum - ) - return DumpString - - -m_NAtagCMGarbageAwardPoolRefresh=tagCMGarbageAwardPoolRefresh() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMGarbageAwardPoolRefresh.Cmd,m_NAtagCMGarbageAwardPoolRefresh.SubCmd))] = m_NAtagCMGarbageAwardPoolRefresh #------------------------------------------------------ diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py index 219c323..ea699ce 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py @@ -24638,203 +24638,7 @@ #------------------------------------------------------ -# AA 57 垃圾收集活动玩家信息 #tagMCActGarbagePlayerInfo - -class tagMCActGarbageAwardItemResult(Structure): - _pack_ = 1 - _fields_ = [ - ("ItemLibType", c_ubyte), #物品库类型;9-固定为大奖库,非9-策划自定义库 - ("ItemID", c_int), # 注意: 不同库物品ID可能相同,但个数不同 - ("ItemCount", c_ushort), - ("PosNum", c_ubyte), # 被抽中时的位置编号,1~99,前端自定义展示位置编号,0代表未被抽中; - ("TotalTimesNow", c_ubyte), #当前已产出次数,不限制次数时不记录,即同样为0 - ] - - 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.ItemLibType = 0 - self.ItemID = 0 - self.ItemCount = 0 - self.PosNum = 0 - self.TotalTimesNow = 0 - return - - def GetLength(self): - return sizeof(tagMCActGarbageAwardItemResult) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''// AA 57 垃圾收集活动玩家信息 //tagMCActGarbagePlayerInfo: - ItemLibType:%d, - ItemID:%d, - ItemCount:%d, - PosNum:%d, - TotalTimesNow:%d - '''\ - %( - self.ItemLibType, - self.ItemID, - self.ItemCount, - self.PosNum, - self.TotalTimesNow - ) - return DumpString - - -class tagMCActGarbagePlayerInfo(Structure): - Head = tagHead() - ActNum = 0 #(BYTE ActNum)//活动编号 - GuideTaskFinish = 0 #(BYTE GuideTaskFinish)//引导任务是否已完成,有需要NPC对话引导任务时,则需要先完成才显示活动界面 - EnvironmentValue = 0 #(DWORD EnvironmentValue)//当前可用环保值 - EnvironmentValueHis = 0 #(DWORD EnvironmentValueHis)//历史环保值 - AwardItemResult=tagMCActGarbageAwardItemResult() #(tagMCActGarbageAwardItemResult AwardItemResult)//本次抽奖结果物品信息,可能为空 - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xAA - self.Head.SubCmd = 0x57 - 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.GuideTaskFinish,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.EnvironmentValue,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.EnvironmentValueHis,_pos = CommFunc.ReadDWORD(_lpData, _pos) - _pos = self.AwardItemResult.ReadData(_lpData,_pos) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xAA - self.Head.SubCmd = 0x57 - self.ActNum = 0 - self.GuideTaskFinish = 0 - self.EnvironmentValue = 0 - self.EnvironmentValueHis = 0 - self.AwardItemResult=tagMCActGarbageAwardItemResult() - self.AwardItemResult.Clear() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 1 - length += 1 - length += 4 - length += 4 - length += self.AwardItemResult.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.WriteBYTE(data, self.GuideTaskFinish) - data = CommFunc.WriteDWORD(data, self.EnvironmentValue) - data = CommFunc.WriteDWORD(data, self.EnvironmentValueHis) - data = CommFunc.WriteString(data,self.AwardItemResult.GetLength(),self.AwardItemResult.GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - ActNum:%d, - GuideTaskFinish:%d, - EnvironmentValue:%d, - EnvironmentValueHis:%d, - AwardItemResult:%s - '''\ - %( - self.Head.OutputString(), - self.ActNum, - self.GuideTaskFinish, - self.EnvironmentValue, - self.EnvironmentValueHis, - self.AwardItemResult.OutputString() - ) - return DumpString - - -m_NAtagMCActGarbagePlayerInfo=tagMCActGarbagePlayerInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActGarbagePlayerInfo.Head.Cmd,m_NAtagMCActGarbagePlayerInfo.Head.SubCmd))] = m_NAtagMCActGarbagePlayerInfo - - -#------------------------------------------------------ # AA 55 垃圾收集活动信息 #tagMCActGarbageSortingInfo - -class tagMCActGarbageAwardItem(Structure): - _pack_ = 1 - _fields_ = [ - ("ItemLibType", c_ubyte), #物品库类型;9-固定为大奖库,非9-策划自定义库 - ("ItemID", c_int), # 注意: 不同库物品ID可能相同,但个数不同 - ("ItemCount", c_ushort), - ("PosNum", c_ubyte), # 被抽中时的位置编号,1~99,前端自定义展示位置编号,0代表未被抽中; - ("TotalTimesNow", c_ubyte), #当前已产出次数,不限制次数时不记录,即同样为0 - ("TotalTimesMax", c_ubyte), #最大可产出次数,0不限 - ("LayerLimit", c_ubyte), #大于等于X层后可产出,0不限 - ] - - 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.ItemLibType = 0 - self.ItemID = 0 - self.ItemCount = 0 - self.PosNum = 0 - self.TotalTimesNow = 0 - self.TotalTimesMax = 0 - self.LayerLimit = 0 - return - - def GetLength(self): - return sizeof(tagMCActGarbageAwardItem) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''// AA 55 垃圾收集活动信息 //tagMCActGarbageSortingInfo: - ItemLibType:%d, - ItemID:%d, - ItemCount:%d, - PosNum:%d, - TotalTimesNow:%d, - TotalTimesMax:%d, - LayerLimit:%d - '''\ - %( - self.ItemLibType, - self.ItemID, - self.ItemCount, - self.PosNum, - self.TotalTimesNow, - self.TotalTimesMax, - self.LayerLimit - ) - return DumpString - class tagMCActGarbageSortingInfo(Structure): Head = tagHead() @@ -24842,12 +24646,7 @@ StartDate = "" #(char StartDate[10])// 开始日期 y-m-d EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d LimitLV = 0 #(WORD LimitLV)// 限制等级 - LayerNum = 0 #(BYTE LayerNum)//当前奖池第几层 - AwardItemCount = 0 #(BYTE AwardItemCount) - AwardItemList = list() #(vector<tagMCActGarbageAwardItem> AwardItemList)// 奖池物品列表,已生成的,包含已选择的大奖物品 - SuperItemCount = 0 #(BYTE SuperItemCount) - SuperItemList = list() #(vector<tagMCActGarbageAwardItem> SuperItemList)// 大奖物品待选择库,由玩家从库中选择放入奖池的物品; - SuperItemCanChooseCount = 0 #(BYTE SuperItemCanChooseCount)// 大奖物品可选择个数 + ResetType = 0 #(BYTE ResetType)// 重置类型,0-0点重置;1-5点开,5点重置;2-5点开,0点重置 data = None def __init__(self): @@ -24863,18 +24662,7 @@ self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10) self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10) self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.LayerNum,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.AwardItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.AwardItemCount): - temAwardItemList = tagMCActGarbageAwardItem() - _pos = temAwardItemList.ReadData(_lpData, _pos) - self.AwardItemList.append(temAwardItemList) - self.SuperItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.SuperItemCount): - temSuperItemList = tagMCActGarbageAwardItem() - _pos = temSuperItemList.ReadData(_lpData, _pos) - self.SuperItemList.append(temSuperItemList) - self.SuperItemCanChooseCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.ResetType,_pos = CommFunc.ReadBYTE(_lpData, _pos) return _pos def Clear(self): @@ -24886,12 +24674,7 @@ self.StartDate = "" self.EndtDate = "" self.LimitLV = 0 - self.LayerNum = 0 - self.AwardItemCount = 0 - self.AwardItemList = list() - self.SuperItemCount = 0 - self.SuperItemList = list() - self.SuperItemCanChooseCount = 0 + self.ResetType = 0 return def GetLength(self): @@ -24901,13 +24684,6 @@ length += 10 length += 10 length += 2 - length += 1 - length += 1 - for i in range(self.AwardItemCount): - length += self.AwardItemList[i].GetLength() - length += 1 - for i in range(self.SuperItemCount): - length += self.SuperItemList[i].GetLength() length += 1 return length @@ -24919,14 +24695,7 @@ 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.LayerNum) - data = CommFunc.WriteBYTE(data, self.AwardItemCount) - for i in range(self.AwardItemCount): - data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer()) - data = CommFunc.WriteBYTE(data, self.SuperItemCount) - for i in range(self.SuperItemCount): - data = CommFunc.WriteString(data, self.SuperItemList[i].GetLength(), self.SuperItemList[i].GetBuffer()) - data = CommFunc.WriteBYTE(data, self.SuperItemCanChooseCount) + data = CommFunc.WriteBYTE(data, self.ResetType) return data def OutputString(self): @@ -24936,12 +24705,7 @@ StartDate:%s, EndtDate:%s, LimitLV:%d, - LayerNum:%d, - AwardItemCount:%d, - AwardItemList:%s, - SuperItemCount:%d, - SuperItemList:%s, - SuperItemCanChooseCount:%d + ResetType:%d '''\ %( self.Head.OutputString(), @@ -24949,12 +24713,7 @@ self.StartDate, self.EndtDate, self.LimitLV, - self.LayerNum, - self.AwardItemCount, - "...", - self.SuperItemCount, - "...", - self.SuperItemCanChooseCount + self.ResetType ) return DumpString @@ -27934,6 +27693,288 @@ #------------------------------------------------------ +# AA 59 仙匣秘境抽奖结果 #tagMCActXianXiaMJAwardItemResult + +class tagMCActXianXiaMJAwardItemResult(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ActNum", c_ubyte), # 活动编号 + ("ItemLibType", c_ubyte), #物品库类型;9-固定为大奖库,非9-策划自定义库 + ("ItemID", c_int), # 注意: 不同库物品ID可能相同,但个数不同 + ("ItemCount", c_ushort), + ("PosNum", c_ubyte), # 被抽中时的位置编号,1~99,前端自定义展示位置编号,0代表未被抽中; + ("TotalTimesNow", c_ubyte), #当前已产出次数,不限制次数时不记录,即同样为0 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xAA + self.SubCmd = 0x59 + 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 = 0x59 + self.ActNum = 0 + self.ItemLibType = 0 + self.ItemID = 0 + self.ItemCount = 0 + self.PosNum = 0 + self.TotalTimesNow = 0 + return + + def GetLength(self): + return sizeof(tagMCActXianXiaMJAwardItemResult) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 59 仙匣秘境抽奖结果 //tagMCActXianXiaMJAwardItemResult: + Cmd:%s, + SubCmd:%s, + ActNum:%d, + ItemLibType:%d, + ItemID:%d, + ItemCount:%d, + PosNum:%d, + TotalTimesNow:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ActNum, + self.ItemLibType, + self.ItemID, + self.ItemCount, + self.PosNum, + self.TotalTimesNow + ) + return DumpString + + +m_NAtagMCActXianXiaMJAwardItemResult=tagMCActXianXiaMJAwardItemResult() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActXianXiaMJAwardItemResult.Cmd,m_NAtagMCActXianXiaMJAwardItemResult.SubCmd))] = m_NAtagMCActXianXiaMJAwardItemResult + + +#------------------------------------------------------ +# AA 58 仙匣秘境活动信息 #tagMCActXianXiaMJInfo + +class tagMCActXianXiaMJAwardItem(Structure): + _pack_ = 1 + _fields_ = [ + ("ItemLibType", c_ubyte), #物品库类型;9-固定为大奖库,非9-策划自定义库 + ("ItemID", c_int), # 注意: 不同库物品ID可能相同,但个数不同 + ("ItemCount", c_ushort), + ("PosNum", c_ubyte), # 被抽中时的位置编号,1~99,前端自定义展示位置编号,0代表未被抽中; + ("TotalTimesNow", c_ubyte), #当前已产出次数,不限制次数时不记录,即同样为0 + ("TotalTimesMax", c_ubyte), #最大可产出次数,0不限 + ("LayerLimit", c_ubyte), #大于等于X层后可产出,0不限 + ] + + 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.ItemLibType = 0 + self.ItemID = 0 + self.ItemCount = 0 + self.PosNum = 0 + self.TotalTimesNow = 0 + self.TotalTimesMax = 0 + self.LayerLimit = 0 + return + + def GetLength(self): + return sizeof(tagMCActXianXiaMJAwardItem) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 58 仙匣秘境活动信息 //tagMCActXianXiaMJInfo: + ItemLibType:%d, + ItemID:%d, + ItemCount:%d, + PosNum:%d, + TotalTimesNow:%d, + TotalTimesMax:%d, + LayerLimit:%d + '''\ + %( + self.ItemLibType, + self.ItemID, + self.ItemCount, + self.PosNum, + self.TotalTimesNow, + self.TotalTimesMax, + self.LayerLimit + ) + return DumpString + + +class tagMCActXianXiaMJInfo(Structure): + Head = tagHead() + ActNum = 0 #(BYTE ActNum)// 活动编号 + StartDate = "" #(char StartDate[10])// 开始日期 y-m-d + EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d + LimitLV = 0 #(WORD LimitLV)// 限制等级 + ResetType = 0 #(BYTE ResetType)// 重置类型,0-0点重置;1-5点开,5点重置;2-5点开,0点重置 + MoneyType = 0 #(BYTE MoneyType)//消耗货币类型 + MoneyValue = 0 #(WORD MoneyValue)//消耗货币值 + LayerNum = 0 #(BYTE LayerNum)//当前奖池第几层 + AwardItemCount = 0 #(BYTE AwardItemCount) + AwardItemList = list() #(vector<tagMCActXianXiaMJAwardItem> AwardItemList)// 奖池物品列表,已生成的,包含已选择的大奖物品 + SuperItemCount = 0 #(BYTE SuperItemCount) + SuperItemList = list() #(vector<tagMCActXianXiaMJAwardItem> SuperItemList)// 大奖物品待选择库,由玩家从库中选择放入奖池的物品; + SuperItemCanChooseCount = 0 #(BYTE SuperItemCanChooseCount)// 大奖物品可选择个数 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x58 + 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.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.ResetType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.MoneyType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.MoneyValue,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.LayerNum,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.AwardItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.AwardItemCount): + temAwardItemList = tagMCActXianXiaMJAwardItem() + _pos = temAwardItemList.ReadData(_lpData, _pos) + self.AwardItemList.append(temAwardItemList) + self.SuperItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.SuperItemCount): + temSuperItemList = tagMCActXianXiaMJAwardItem() + _pos = temSuperItemList.ReadData(_lpData, _pos) + self.SuperItemList.append(temSuperItemList) + self.SuperItemCanChooseCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x58 + self.ActNum = 0 + self.StartDate = "" + self.EndtDate = "" + self.LimitLV = 0 + self.ResetType = 0 + self.MoneyType = 0 + self.MoneyValue = 0 + self.LayerNum = 0 + self.AwardItemCount = 0 + self.AwardItemList = list() + self.SuperItemCount = 0 + self.SuperItemList = list() + self.SuperItemCanChooseCount = 0 + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 10 + length += 10 + length += 2 + length += 1 + length += 1 + length += 2 + length += 1 + length += 1 + for i in range(self.AwardItemCount): + length += self.AwardItemList[i].GetLength() + length += 1 + for i in range(self.SuperItemCount): + length += self.SuperItemList[i].GetLength() + length += 1 + + 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.WriteWORD(data, self.LimitLV) + data = CommFunc.WriteBYTE(data, self.ResetType) + data = CommFunc.WriteBYTE(data, self.MoneyType) + data = CommFunc.WriteWORD(data, self.MoneyValue) + data = CommFunc.WriteBYTE(data, self.LayerNum) + data = CommFunc.WriteBYTE(data, self.AwardItemCount) + for i in range(self.AwardItemCount): + data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer()) + data = CommFunc.WriteBYTE(data, self.SuperItemCount) + for i in range(self.SuperItemCount): + data = CommFunc.WriteString(data, self.SuperItemList[i].GetLength(), self.SuperItemList[i].GetBuffer()) + data = CommFunc.WriteBYTE(data, self.SuperItemCanChooseCount) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ActNum:%d, + StartDate:%s, + EndtDate:%s, + LimitLV:%d, + ResetType:%d, + MoneyType:%d, + MoneyValue:%d, + LayerNum:%d, + AwardItemCount:%d, + AwardItemList:%s, + SuperItemCount:%d, + SuperItemList:%s, + SuperItemCanChooseCount:%d + '''\ + %( + self.Head.OutputString(), + self.ActNum, + self.StartDate, + self.EndtDate, + self.LimitLV, + self.ResetType, + self.MoneyType, + self.MoneyValue, + self.LayerNum, + self.AwardItemCount, + "...", + self.SuperItemCount, + "...", + self.SuperItemCanChooseCount + ) + return DumpString + + +m_NAtagMCActXianXiaMJInfo=tagMCActXianXiaMJInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActXianXiaMJInfo.Head.Cmd,m_NAtagMCActXianXiaMJInfo.Head.SubCmd))] = m_NAtagMCActXianXiaMJInfo + + +#------------------------------------------------------ # AA 15 仙界盛典全民来嗨玩家信息 #tagMCAllPeoplePartyInfo class tagMCAllPeoplePartyCount(Structure): diff --git a/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py b/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py index 45ea84a..714c0ed 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py @@ -405,6 +405,20 @@ ("dict", "NotifyInfoStart", 0), ("dict", "NotifyInfoEnd", 0), ("list", "NotifyInfoLoop", 0), + ("BYTE", "ResetType", 0), + ), + + "ActXianXiaMJ":( + ("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", "ResetType", 0), ), "ActHorsePetFeast":( @@ -1531,7 +1545,8 @@ self.EndDate = "" self.NotifyInfoStart = {} self.NotifyInfoEnd = {} - self.NotifyInfoLoop = [] + self.NotifyInfoLoop = [] + self.ResetType = 0 return def GetCfgID(self): return self.CfgID # 配置ID @@ -1542,7 +1557,35 @@ 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 GetNotifyInfoLoop(self): return self.NotifyInfoLoop # 全服提示信息 - 循环广播[间隔分钟, 广播key] + def GetResetType(self): return self.ResetType # 重置类型,0-0点重置;1-5点重置 + +# 仙匣秘境活动时间表 +class IPY_ActXianXiaMJ(): + + def __init__(self): + self.CfgID = 0 + self.PlatformList = [] + self.ServerGroupIDList = [] + self.ActNum = 0 + self.StartDate = "" + self.EndDate = "" + self.NotifyInfoStart = {} + self.NotifyInfoEnd = {} + self.NotifyInfoLoop = [] + self.ResetType = 0 + 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 GetResetType(self): return self.ResetType # 重置类型,0-0点重置;1-5点重置 # 骑宠盛宴活动 class IPY_ActHorsePetFeast(): @@ -2370,6 +2413,8 @@ self.ipyActCollectWordsLen = len(self.ipyActCollectWordsCache) self.ipyActGarbageSortingCache = self.__LoadFileData("ActGarbageSorting", IPY_ActGarbageSorting) self.ipyActGarbageSortingLen = len(self.ipyActGarbageSortingCache) + self.ipyActXianXiaMJCache = self.__LoadFileData("ActXianXiaMJ", IPY_ActXianXiaMJ) + self.ipyActXianXiaMJLen = len(self.ipyActXianXiaMJCache) self.ipyActHorsePetFeastCache = self.__LoadFileData("ActHorsePetFeast", IPY_ActHorsePetFeast) self.ipyActHorsePetFeastLen = len(self.ipyActHorsePetFeastCache) self.ipyActBossRebornCache = self.__LoadFileData("ActBossReborn", IPY_ActBossReborn) @@ -2672,6 +2717,8 @@ def GetActCollectWordsByIndex(self, index): return self.ipyActCollectWordsCache[index] def GetActGarbageSortingCount(self): return self.ipyActGarbageSortingLen def GetActGarbageSortingByIndex(self, index): return self.ipyActGarbageSortingCache[index] + def GetActXianXiaMJCount(self): return self.ipyActXianXiaMJLen + def GetActXianXiaMJByIndex(self, index): return self.ipyActXianXiaMJCache[index] def GetActHorsePetFeastCount(self): return self.ipyActHorsePetFeastLen def GetActHorsePetFeastByIndex(self, index): return self.ipyActHorsePetFeastCache[index] def GetActBossRebornCount(self): return self.ipyActBossRebornLen diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py index 680b7c2..edf8b61 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py @@ -237,6 +237,7 @@ OperationActionName_Turntable = "ActTurntable" # 转盘活动 OperationActionName_HorsePetFeast = "ActHorsePetFeast" # 骑宠盛宴活动 OperationActionName_GarbageSorting = "ActGarbageSorting" # 垃圾分类活动 +OperationActionName_XianXiaMJ = "ActXianXiaMJ" # 仙匣秘境活动 #节日活动类型列表 - 该类型无视开服天,日期到了就开启 FeastOperationActionNameList = [OperationActionName_FeastWeekParty, OperationActionName_FeastRedPacket, OperationActionName_RechargeRebateGold, OperationActionName_GrowupBuy, @@ -255,6 +256,7 @@ OperationActionName_DailyGiftbag, OperationActionName_SingleRecharge, OperationActionName_CollectWords, OperationActionName_ManyDayRecharge, OperationActionName_Turntable, OperationActionName_HorsePetFeast, OperationActionName_GarbageSorting, + OperationActionName_XianXiaMJ, ] + FeastOperationActionNameList #需要记录开启活动时的世界等级的运营活动 NeedWorldLVOperationActNameList = [OperationActionName_FairyCeremony, OperationActionName_WishingWell, @@ -265,7 +267,7 @@ OperationActionName_DailyGiftbag, OperationActionName_GrowupBuy, OperationActionName_WeekParty, OperationActionName_Turntable, OperationActionName_CollectWords, OperationActionName_GarbageSorting, - OperationActionName_FeastLogin, + OperationActionName_FeastLogin, OperationActionName_XianXiaMJ, OperationActionName_FeastWish, OperationActionName_FeastTravel, OperationActionName_ManyDayRecharge, OperationActionName_SingleRecharge, ] @@ -276,6 +278,7 @@ OperationActionName_SpringSale, OperationActionName_FlashSale, OperationActionName_ManyDayRecharge, OperationActionName_SingleRecharge, OperationActionName_Turntable, OperationActionName_HorsePetFeast, OperationActionName_GarbageSorting, + OperationActionName_XianXiaMJ, ] #跨服运营活动表名定义 @@ -955,7 +958,8 @@ CDBPlayerRefresh_ExAttr17, # ExAttr17 CDBPlayerRefresh_BossActScore, # boss 活动积分 230 CDBPlayerRefresh_FuncSysPrivilege, # 功能特权令 231 -) = range(146, 232) +CDBPlayerRefresh_Environment, # 环保值 232 +) = range(146, 233) TYPE_Price_Gold_Paper_Money = 5 # 金钱类型,(先用礼券,再用金子) TYPE_Price_Family_Contribution = 6 # 战盟贡献度(活跃度转换得来) @@ -975,6 +979,7 @@ TYPE_Price_SoulSplinters = 29 # 聚魂碎片 TYPE_Price_SoulCore = 30 # 核心环 TYPE_Price_FuncSysPrivilege = 31 # 功能系统特权令 +TYPE_Price_Environment = 32 # 环保值 #以下是旧的金钱类型 TYPE_Price_Magic_Integral = 101 # 魔方寻宝积分 @@ -999,6 +1004,7 @@ TYPE_Price_Honor:CDBPlayerRefresh_Honor, TYPE_Price_BossActScore:CDBPlayerRefresh_BossActScore, TYPE_Price_FuncSysPrivilege:CDBPlayerRefresh_FuncSysPrivilege, + TYPE_Price_Environment:CDBPlayerRefresh_Environment, } # 高效战斗状态 diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini index 67c1ef2..3473081 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini @@ -1388,7 +1388,7 @@ Writer = hxp Releaser = hxp RegType = 0 -RegisterPackCount = 5 +RegisterPackCount = 2 PacketCMD_1=0xAA PacketSubCMD_1=0x14 @@ -1398,17 +1398,25 @@ PacketSubCMD_2=0x15 PacketCallFunc_2=OnActGarbageGetTaskAward +;仙匣秘境活动 +[PlayerActXianXiaMJ] +ScriptName = Player\PlayerActXianXiaMJ.py +Writer = hxp +Releaser = hxp +RegType = 0 +RegisterPackCount = 3 + +PacketCMD_1=0xAA +PacketSubCMD_1=0x16 +PacketCallFunc_1=OnActXianXiaMJSuperItem + +PacketCMD_2=0xAA +PacketSubCMD_2=0x17 +PacketCallFunc_2=OnActXianXiaMJLottery + PacketCMD_3=0xAA -PacketSubCMD_3=0x16 -PacketCallFunc_3=OnActGarbageChooseSuperItem - -PacketCMD_4=0xAA -PacketSubCMD_4=0x17 -PacketCallFunc_4=OnActGarbageLottery - -PacketCMD_5=0xAA -PacketSubCMD_5=0x18 -PacketCallFunc_5=OnActGarbageAwardPoolRefresh +PacketSubCMD_3=0x18 +PacketCallFunc_3=OnActXianXiaMJAwardPoolRefresh ;集字活动 [PlayerActCollectWords] diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py index c651a40..dad59d5 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py @@ -3892,14 +3892,16 @@ #垃圾分类活动 Def_PDict_GarbageSortingID = "ActGSID_%s" # 玩家身上的活动ID,唯一标识,取活动开始日期time值,参数:(活动编号) Def_PDict_GarbageSortingWorldLV = "ActGSWorldLV_%s" #玩家身上的活动世界等级,参数:(活动编号) -Def_PDict_GarbageGuideState = "ActGSGuideState_%s" #活动引导任务状态,不影响活动数据,仅前端展示需要用到,参数:(活动编号) Def_PDict_GarbageTaskValue = "ActGSTaskValue_%s_%s" # 任务总进度值,参数(活动编号, 任务ID) Def_PDict_GarbageTaskFinishCount = "ActGSTaskFinishCount_%s_%s" # 任务已完成次数,参数(活动编号, 任务ID) -Def_PDict_GarbageEnvironmentValue = "ActGSEnvValue_%s" # 当前可用环保值,参数(活动编号) -Def_PDict_GarbageEnvironmentValueHis = "ActGSEnvValueHis_%s" # 历史最高环保值,参数(活动编号) -Def_PDict_GarbageAwardLayerInfo = "ActGSAwardLayerInfo_%s" # 奖池层级信息: 累计抽奖次数*100+层数,参数:(活动编号) -Def_PDict_GarbageAwardItemInfo = "ActGSItemInfo_%s_%s_%s" # 奖池物品ID*100+抽中位置编号,参数:(活动编号, 库类型, 物品编号) -Def_PDict_GarbageAwardItemTimes = "ActGSItemTimes_%s_%s_%s" # 奖池物品累计产出次数,有限制次数的才记录,参数:(活动编号, 库类型, 物品ID) +Def_PDict_GarbageEnvironmentValue = "ActGSEnvValue_%s" # 活动累计获得环保值,参数(活动编号) + +#仙匣秘境活动 +Def_PDict_XianXiaMJID = "ActXXMJID_%s" # 玩家身上的活动ID,唯一标识,取活动开始日期time值,参数:(活动编号) +Def_PDict_XianXiaMJWorldLV = "ActXXMJWorldLV_%s" #玩家身上的活动世界等级,参数:(活动编号) +Def_PDict_XianXiaMJAwardLayerInfo = "ActXXMJAwardLayerInfo_%s" # 奖池层级信息: 累计抽奖次数*100+层数,参数:(活动编号) +Def_PDict_XianXiaMJAwardItemInfo = "ActXXMJItemInfo_%s_%s_%s" # 奖池物品ID*100+抽中位置编号,参数:(活动编号, 库类型, 物品编号) +Def_PDict_XianXiaMJAwardItemTimes = "ActXXMJItemTimes_%s_%s_%s" # 奖池物品累计产出次数,有限制次数的才记录,参数:(活动编号, 库类型, 物品ID) #------------------------------------------------------------------------------- #开服活动,Def_PDictType_OpenServerCampaign diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py index 0a29534..f1676de 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py @@ -13321,80 +13321,6 @@ #------------------------------------------------------ -# AA 16 垃圾分类活动选择大奖 #tagCMActGarbageChooseSuperItem - -class tagCMActGarbageChooseSuperItem(Structure): - Head = tagHead() - ActNum = 0 #(BYTE ActNum)//活动编号 - SuperItemCount = 0 #(BYTE SuperItemCount)//选择物品数量 - SuperItemIDList = list() #(vector<DWORD> SuperItemIDList)//选择的大奖库物品ID列表,每次重新选择需要发送全部已选择的大奖物品ID,不能只发单个物品ID; - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xAA - self.Head.SubCmd = 0x16 - 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.SuperItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.SuperItemCount): - value,_pos=CommFunc.ReadDWORD(_lpData,_pos) - self.SuperItemIDList.append(value) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xAA - self.Head.SubCmd = 0x16 - self.ActNum = 0 - self.SuperItemCount = 0 - self.SuperItemIDList = list() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 1 - length += 1 - length += 4 * self.SuperItemCount - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteBYTE(data, self.ActNum) - data = CommFunc.WriteBYTE(data, self.SuperItemCount) - for i in range(self.SuperItemCount): - data = CommFunc.WriteDWORD(data, self.SuperItemIDList[i]) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - ActNum:%d, - SuperItemCount:%d, - SuperItemIDList:%s - '''\ - %( - self.Head.OutputString(), - self.ActNum, - self.SuperItemCount, - "..." - ) - return DumpString - - -m_NAtagCMActGarbageChooseSuperItem=tagCMActGarbageChooseSuperItem() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActGarbageChooseSuperItem.Head.Cmd,m_NAtagCMActGarbageChooseSuperItem.Head.SubCmd))] = m_NAtagCMActGarbageChooseSuperItem - - -#------------------------------------------------------ # AA 15 垃圾分类活动收集已完成的任务垃圾 #tagCMActGarbageGetTaskAward class tagCMActGarbageGetTaskAward(Structure): @@ -13448,62 +13374,6 @@ m_NAtagCMActGarbageGetTaskAward=tagCMActGarbageGetTaskAward() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActGarbageGetTaskAward.Cmd,m_NAtagCMActGarbageGetTaskAward.SubCmd))] = m_NAtagCMActGarbageGetTaskAward - - -#------------------------------------------------------ -# AA 17 垃圾分类活动抽奖 #tagCMActGarbageLottery - -class tagCMActGarbageLottery(Structure): - _pack_ = 1 - _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), - ("ActNum", c_ubyte), #活动编号 - ("PosNum", c_ubyte), #玩家点击的奖励位置编号,从1开始 - ] - - def __init__(self): - self.Clear() - self.Cmd = 0xAA - self.SubCmd = 0x17 - 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 = 0x17 - self.ActNum = 0 - self.PosNum = 0 - return - - def GetLength(self): - return sizeof(tagCMActGarbageLottery) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''// AA 17 垃圾分类活动抽奖 //tagCMActGarbageLottery: - Cmd:%s, - SubCmd:%s, - ActNum:%d, - PosNum:%d - '''\ - %( - self.Cmd, - self.SubCmd, - self.ActNum, - self.PosNum - ) - return DumpString - - -m_NAtagCMActGarbageLottery=tagCMActGarbageLottery() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActGarbageLottery.Cmd,m_NAtagCMActGarbageLottery.SubCmd))] = m_NAtagCMActGarbageLottery #------------------------------------------------------ @@ -13783,6 +13653,188 @@ #------------------------------------------------------ +# AA 18 仙匣秘境活动奖池刷新 #tagCMActXianXiaMJAwardPoolRefresh + +class tagCMActXianXiaMJAwardPoolRefresh(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ActNum", c_ubyte), #活动编号 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xAA + self.SubCmd = 0x18 + 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 = 0x18 + self.ActNum = 0 + return + + def GetLength(self): + return sizeof(tagCMActXianXiaMJAwardPoolRefresh) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 18 仙匣秘境活动奖池刷新 //tagCMActXianXiaMJAwardPoolRefresh: + Cmd:%s, + SubCmd:%s, + ActNum:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ActNum + ) + return DumpString + + +m_NAtagCMActXianXiaMJAwardPoolRefresh=tagCMActXianXiaMJAwardPoolRefresh() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActXianXiaMJAwardPoolRefresh.Cmd,m_NAtagCMActXianXiaMJAwardPoolRefresh.SubCmd))] = m_NAtagCMActXianXiaMJAwardPoolRefresh + + +#------------------------------------------------------ +# AA 17 仙匣秘境活动抽奖 #tagCMActXianXiaMJLottery + +class tagCMActXianXiaMJLottery(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ActNum", c_ubyte), #活动编号 + ("PosNum", c_ubyte), #玩家点击的奖励位置编号,从1开始 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xAA + self.SubCmd = 0x17 + 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 = 0x17 + self.ActNum = 0 + self.PosNum = 0 + return + + def GetLength(self): + return sizeof(tagCMActXianXiaMJLottery) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 17 仙匣秘境活动抽奖 //tagCMActXianXiaMJLottery: + Cmd:%s, + SubCmd:%s, + ActNum:%d, + PosNum:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ActNum, + self.PosNum + ) + return DumpString + + +m_NAtagCMActXianXiaMJLottery=tagCMActXianXiaMJLottery() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActXianXiaMJLottery.Cmd,m_NAtagCMActXianXiaMJLottery.SubCmd))] = m_NAtagCMActXianXiaMJLottery + + +#------------------------------------------------------ +# AA 16 仙匣秘境活动选择大奖 #tagCMActXianXiaMJSuperItem + +class tagCMActXianXiaMJSuperItem(Structure): + Head = tagHead() + ActNum = 0 #(BYTE ActNum)//活动编号 + SuperItemCount = 0 #(BYTE SuperItemCount)//选择物品数量 + SuperItemIDList = list() #(vector<DWORD> SuperItemIDList)//选择的大奖库物品ID列表,每次重新选择需要发送全部已选择的大奖物品ID,不能只发单个物品ID; + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x16 + 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.SuperItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.SuperItemCount): + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) + self.SuperItemIDList.append(value) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x16 + self.ActNum = 0 + self.SuperItemCount = 0 + self.SuperItemIDList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 1 + length += 4 * self.SuperItemCount + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ActNum) + data = CommFunc.WriteBYTE(data, self.SuperItemCount) + for i in range(self.SuperItemCount): + data = CommFunc.WriteDWORD(data, self.SuperItemIDList[i]) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ActNum:%d, + SuperItemCount:%d, + SuperItemIDList:%s + '''\ + %( + self.Head.OutputString(), + self.ActNum, + self.SuperItemCount, + "..." + ) + return DumpString + + +m_NAtagCMActXianXiaMJSuperItem=tagCMActXianXiaMJSuperItem() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActXianXiaMJSuperItem.Head.Cmd,m_NAtagCMActXianXiaMJSuperItem.Head.SubCmd))] = m_NAtagCMActXianXiaMJSuperItem + + +#------------------------------------------------------ # AA 06 许愿池活动许愿 #tagCMActWishing class tagCMActWishing(Structure): @@ -14012,58 +14064,6 @@ m_NAtagCMFlashSaleAppointment=tagCMFlashSaleAppointment() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMFlashSaleAppointment.Cmd,m_NAtagCMFlashSaleAppointment.SubCmd))] = m_NAtagCMFlashSaleAppointment - - -#------------------------------------------------------ -# AA 18 垃圾分类活动奖池刷新 #tagCMGarbageAwardPoolRefresh - -class tagCMGarbageAwardPoolRefresh(Structure): - _pack_ = 1 - _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), - ("ActNum", c_ubyte), #活动编号 - ] - - def __init__(self): - self.Clear() - self.Cmd = 0xAA - self.SubCmd = 0x18 - 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 = 0x18 - self.ActNum = 0 - return - - def GetLength(self): - return sizeof(tagCMGarbageAwardPoolRefresh) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''// AA 18 垃圾分类活动奖池刷新 //tagCMGarbageAwardPoolRefresh: - Cmd:%s, - SubCmd:%s, - ActNum:%d - '''\ - %( - self.Cmd, - self.SubCmd, - self.ActNum - ) - return DumpString - - -m_NAtagCMGarbageAwardPoolRefresh=tagCMGarbageAwardPoolRefresh() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMGarbageAwardPoolRefresh.Cmd,m_NAtagCMGarbageAwardPoolRefresh.SubCmd))] = m_NAtagCMGarbageAwardPoolRefresh #------------------------------------------------------ diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py index 219c323..ea699ce 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py @@ -24638,203 +24638,7 @@ #------------------------------------------------------ -# AA 57 垃圾收集活动玩家信息 #tagMCActGarbagePlayerInfo - -class tagMCActGarbageAwardItemResult(Structure): - _pack_ = 1 - _fields_ = [ - ("ItemLibType", c_ubyte), #物品库类型;9-固定为大奖库,非9-策划自定义库 - ("ItemID", c_int), # 注意: 不同库物品ID可能相同,但个数不同 - ("ItemCount", c_ushort), - ("PosNum", c_ubyte), # 被抽中时的位置编号,1~99,前端自定义展示位置编号,0代表未被抽中; - ("TotalTimesNow", c_ubyte), #当前已产出次数,不限制次数时不记录,即同样为0 - ] - - 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.ItemLibType = 0 - self.ItemID = 0 - self.ItemCount = 0 - self.PosNum = 0 - self.TotalTimesNow = 0 - return - - def GetLength(self): - return sizeof(tagMCActGarbageAwardItemResult) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''// AA 57 垃圾收集活动玩家信息 //tagMCActGarbagePlayerInfo: - ItemLibType:%d, - ItemID:%d, - ItemCount:%d, - PosNum:%d, - TotalTimesNow:%d - '''\ - %( - self.ItemLibType, - self.ItemID, - self.ItemCount, - self.PosNum, - self.TotalTimesNow - ) - return DumpString - - -class tagMCActGarbagePlayerInfo(Structure): - Head = tagHead() - ActNum = 0 #(BYTE ActNum)//活动编号 - GuideTaskFinish = 0 #(BYTE GuideTaskFinish)//引导任务是否已完成,有需要NPC对话引导任务时,则需要先完成才显示活动界面 - EnvironmentValue = 0 #(DWORD EnvironmentValue)//当前可用环保值 - EnvironmentValueHis = 0 #(DWORD EnvironmentValueHis)//历史环保值 - AwardItemResult=tagMCActGarbageAwardItemResult() #(tagMCActGarbageAwardItemResult AwardItemResult)//本次抽奖结果物品信息,可能为空 - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xAA - self.Head.SubCmd = 0x57 - 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.GuideTaskFinish,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.EnvironmentValue,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.EnvironmentValueHis,_pos = CommFunc.ReadDWORD(_lpData, _pos) - _pos = self.AwardItemResult.ReadData(_lpData,_pos) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xAA - self.Head.SubCmd = 0x57 - self.ActNum = 0 - self.GuideTaskFinish = 0 - self.EnvironmentValue = 0 - self.EnvironmentValueHis = 0 - self.AwardItemResult=tagMCActGarbageAwardItemResult() - self.AwardItemResult.Clear() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 1 - length += 1 - length += 4 - length += 4 - length += self.AwardItemResult.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.WriteBYTE(data, self.GuideTaskFinish) - data = CommFunc.WriteDWORD(data, self.EnvironmentValue) - data = CommFunc.WriteDWORD(data, self.EnvironmentValueHis) - data = CommFunc.WriteString(data,self.AwardItemResult.GetLength(),self.AwardItemResult.GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - ActNum:%d, - GuideTaskFinish:%d, - EnvironmentValue:%d, - EnvironmentValueHis:%d, - AwardItemResult:%s - '''\ - %( - self.Head.OutputString(), - self.ActNum, - self.GuideTaskFinish, - self.EnvironmentValue, - self.EnvironmentValueHis, - self.AwardItemResult.OutputString() - ) - return DumpString - - -m_NAtagMCActGarbagePlayerInfo=tagMCActGarbagePlayerInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActGarbagePlayerInfo.Head.Cmd,m_NAtagMCActGarbagePlayerInfo.Head.SubCmd))] = m_NAtagMCActGarbagePlayerInfo - - -#------------------------------------------------------ # AA 55 垃圾收集活动信息 #tagMCActGarbageSortingInfo - -class tagMCActGarbageAwardItem(Structure): - _pack_ = 1 - _fields_ = [ - ("ItemLibType", c_ubyte), #物品库类型;9-固定为大奖库,非9-策划自定义库 - ("ItemID", c_int), # 注意: 不同库物品ID可能相同,但个数不同 - ("ItemCount", c_ushort), - ("PosNum", c_ubyte), # 被抽中时的位置编号,1~99,前端自定义展示位置编号,0代表未被抽中; - ("TotalTimesNow", c_ubyte), #当前已产出次数,不限制次数时不记录,即同样为0 - ("TotalTimesMax", c_ubyte), #最大可产出次数,0不限 - ("LayerLimit", c_ubyte), #大于等于X层后可产出,0不限 - ] - - 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.ItemLibType = 0 - self.ItemID = 0 - self.ItemCount = 0 - self.PosNum = 0 - self.TotalTimesNow = 0 - self.TotalTimesMax = 0 - self.LayerLimit = 0 - return - - def GetLength(self): - return sizeof(tagMCActGarbageAwardItem) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''// AA 55 垃圾收集活动信息 //tagMCActGarbageSortingInfo: - ItemLibType:%d, - ItemID:%d, - ItemCount:%d, - PosNum:%d, - TotalTimesNow:%d, - TotalTimesMax:%d, - LayerLimit:%d - '''\ - %( - self.ItemLibType, - self.ItemID, - self.ItemCount, - self.PosNum, - self.TotalTimesNow, - self.TotalTimesMax, - self.LayerLimit - ) - return DumpString - class tagMCActGarbageSortingInfo(Structure): Head = tagHead() @@ -24842,12 +24646,7 @@ StartDate = "" #(char StartDate[10])// 开始日期 y-m-d EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d LimitLV = 0 #(WORD LimitLV)// 限制等级 - LayerNum = 0 #(BYTE LayerNum)//当前奖池第几层 - AwardItemCount = 0 #(BYTE AwardItemCount) - AwardItemList = list() #(vector<tagMCActGarbageAwardItem> AwardItemList)// 奖池物品列表,已生成的,包含已选择的大奖物品 - SuperItemCount = 0 #(BYTE SuperItemCount) - SuperItemList = list() #(vector<tagMCActGarbageAwardItem> SuperItemList)// 大奖物品待选择库,由玩家从库中选择放入奖池的物品; - SuperItemCanChooseCount = 0 #(BYTE SuperItemCanChooseCount)// 大奖物品可选择个数 + ResetType = 0 #(BYTE ResetType)// 重置类型,0-0点重置;1-5点开,5点重置;2-5点开,0点重置 data = None def __init__(self): @@ -24863,18 +24662,7 @@ self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10) self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10) self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.LayerNum,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.AwardItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.AwardItemCount): - temAwardItemList = tagMCActGarbageAwardItem() - _pos = temAwardItemList.ReadData(_lpData, _pos) - self.AwardItemList.append(temAwardItemList) - self.SuperItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.SuperItemCount): - temSuperItemList = tagMCActGarbageAwardItem() - _pos = temSuperItemList.ReadData(_lpData, _pos) - self.SuperItemList.append(temSuperItemList) - self.SuperItemCanChooseCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.ResetType,_pos = CommFunc.ReadBYTE(_lpData, _pos) return _pos def Clear(self): @@ -24886,12 +24674,7 @@ self.StartDate = "" self.EndtDate = "" self.LimitLV = 0 - self.LayerNum = 0 - self.AwardItemCount = 0 - self.AwardItemList = list() - self.SuperItemCount = 0 - self.SuperItemList = list() - self.SuperItemCanChooseCount = 0 + self.ResetType = 0 return def GetLength(self): @@ -24901,13 +24684,6 @@ length += 10 length += 10 length += 2 - length += 1 - length += 1 - for i in range(self.AwardItemCount): - length += self.AwardItemList[i].GetLength() - length += 1 - for i in range(self.SuperItemCount): - length += self.SuperItemList[i].GetLength() length += 1 return length @@ -24919,14 +24695,7 @@ 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.LayerNum) - data = CommFunc.WriteBYTE(data, self.AwardItemCount) - for i in range(self.AwardItemCount): - data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer()) - data = CommFunc.WriteBYTE(data, self.SuperItemCount) - for i in range(self.SuperItemCount): - data = CommFunc.WriteString(data, self.SuperItemList[i].GetLength(), self.SuperItemList[i].GetBuffer()) - data = CommFunc.WriteBYTE(data, self.SuperItemCanChooseCount) + data = CommFunc.WriteBYTE(data, self.ResetType) return data def OutputString(self): @@ -24936,12 +24705,7 @@ StartDate:%s, EndtDate:%s, LimitLV:%d, - LayerNum:%d, - AwardItemCount:%d, - AwardItemList:%s, - SuperItemCount:%d, - SuperItemList:%s, - SuperItemCanChooseCount:%d + ResetType:%d '''\ %( self.Head.OutputString(), @@ -24949,12 +24713,7 @@ self.StartDate, self.EndtDate, self.LimitLV, - self.LayerNum, - self.AwardItemCount, - "...", - self.SuperItemCount, - "...", - self.SuperItemCanChooseCount + self.ResetType ) return DumpString @@ -27934,6 +27693,288 @@ #------------------------------------------------------ +# AA 59 仙匣秘境抽奖结果 #tagMCActXianXiaMJAwardItemResult + +class tagMCActXianXiaMJAwardItemResult(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ActNum", c_ubyte), # 活动编号 + ("ItemLibType", c_ubyte), #物品库类型;9-固定为大奖库,非9-策划自定义库 + ("ItemID", c_int), # 注意: 不同库物品ID可能相同,但个数不同 + ("ItemCount", c_ushort), + ("PosNum", c_ubyte), # 被抽中时的位置编号,1~99,前端自定义展示位置编号,0代表未被抽中; + ("TotalTimesNow", c_ubyte), #当前已产出次数,不限制次数时不记录,即同样为0 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xAA + self.SubCmd = 0x59 + 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 = 0x59 + self.ActNum = 0 + self.ItemLibType = 0 + self.ItemID = 0 + self.ItemCount = 0 + self.PosNum = 0 + self.TotalTimesNow = 0 + return + + def GetLength(self): + return sizeof(tagMCActXianXiaMJAwardItemResult) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 59 仙匣秘境抽奖结果 //tagMCActXianXiaMJAwardItemResult: + Cmd:%s, + SubCmd:%s, + ActNum:%d, + ItemLibType:%d, + ItemID:%d, + ItemCount:%d, + PosNum:%d, + TotalTimesNow:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ActNum, + self.ItemLibType, + self.ItemID, + self.ItemCount, + self.PosNum, + self.TotalTimesNow + ) + return DumpString + + +m_NAtagMCActXianXiaMJAwardItemResult=tagMCActXianXiaMJAwardItemResult() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActXianXiaMJAwardItemResult.Cmd,m_NAtagMCActXianXiaMJAwardItemResult.SubCmd))] = m_NAtagMCActXianXiaMJAwardItemResult + + +#------------------------------------------------------ +# AA 58 仙匣秘境活动信息 #tagMCActXianXiaMJInfo + +class tagMCActXianXiaMJAwardItem(Structure): + _pack_ = 1 + _fields_ = [ + ("ItemLibType", c_ubyte), #物品库类型;9-固定为大奖库,非9-策划自定义库 + ("ItemID", c_int), # 注意: 不同库物品ID可能相同,但个数不同 + ("ItemCount", c_ushort), + ("PosNum", c_ubyte), # 被抽中时的位置编号,1~99,前端自定义展示位置编号,0代表未被抽中; + ("TotalTimesNow", c_ubyte), #当前已产出次数,不限制次数时不记录,即同样为0 + ("TotalTimesMax", c_ubyte), #最大可产出次数,0不限 + ("LayerLimit", c_ubyte), #大于等于X层后可产出,0不限 + ] + + 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.ItemLibType = 0 + self.ItemID = 0 + self.ItemCount = 0 + self.PosNum = 0 + self.TotalTimesNow = 0 + self.TotalTimesMax = 0 + self.LayerLimit = 0 + return + + def GetLength(self): + return sizeof(tagMCActXianXiaMJAwardItem) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 58 仙匣秘境活动信息 //tagMCActXianXiaMJInfo: + ItemLibType:%d, + ItemID:%d, + ItemCount:%d, + PosNum:%d, + TotalTimesNow:%d, + TotalTimesMax:%d, + LayerLimit:%d + '''\ + %( + self.ItemLibType, + self.ItemID, + self.ItemCount, + self.PosNum, + self.TotalTimesNow, + self.TotalTimesMax, + self.LayerLimit + ) + return DumpString + + +class tagMCActXianXiaMJInfo(Structure): + Head = tagHead() + ActNum = 0 #(BYTE ActNum)// 活动编号 + StartDate = "" #(char StartDate[10])// 开始日期 y-m-d + EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d + LimitLV = 0 #(WORD LimitLV)// 限制等级 + ResetType = 0 #(BYTE ResetType)// 重置类型,0-0点重置;1-5点开,5点重置;2-5点开,0点重置 + MoneyType = 0 #(BYTE MoneyType)//消耗货币类型 + MoneyValue = 0 #(WORD MoneyValue)//消耗货币值 + LayerNum = 0 #(BYTE LayerNum)//当前奖池第几层 + AwardItemCount = 0 #(BYTE AwardItemCount) + AwardItemList = list() #(vector<tagMCActXianXiaMJAwardItem> AwardItemList)// 奖池物品列表,已生成的,包含已选择的大奖物品 + SuperItemCount = 0 #(BYTE SuperItemCount) + SuperItemList = list() #(vector<tagMCActXianXiaMJAwardItem> SuperItemList)// 大奖物品待选择库,由玩家从库中选择放入奖池的物品; + SuperItemCanChooseCount = 0 #(BYTE SuperItemCanChooseCount)// 大奖物品可选择个数 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x58 + 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.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.ResetType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.MoneyType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.MoneyValue,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.LayerNum,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.AwardItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.AwardItemCount): + temAwardItemList = tagMCActXianXiaMJAwardItem() + _pos = temAwardItemList.ReadData(_lpData, _pos) + self.AwardItemList.append(temAwardItemList) + self.SuperItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.SuperItemCount): + temSuperItemList = tagMCActXianXiaMJAwardItem() + _pos = temSuperItemList.ReadData(_lpData, _pos) + self.SuperItemList.append(temSuperItemList) + self.SuperItemCanChooseCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x58 + self.ActNum = 0 + self.StartDate = "" + self.EndtDate = "" + self.LimitLV = 0 + self.ResetType = 0 + self.MoneyType = 0 + self.MoneyValue = 0 + self.LayerNum = 0 + self.AwardItemCount = 0 + self.AwardItemList = list() + self.SuperItemCount = 0 + self.SuperItemList = list() + self.SuperItemCanChooseCount = 0 + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 10 + length += 10 + length += 2 + length += 1 + length += 1 + length += 2 + length += 1 + length += 1 + for i in range(self.AwardItemCount): + length += self.AwardItemList[i].GetLength() + length += 1 + for i in range(self.SuperItemCount): + length += self.SuperItemList[i].GetLength() + length += 1 + + 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.WriteWORD(data, self.LimitLV) + data = CommFunc.WriteBYTE(data, self.ResetType) + data = CommFunc.WriteBYTE(data, self.MoneyType) + data = CommFunc.WriteWORD(data, self.MoneyValue) + data = CommFunc.WriteBYTE(data, self.LayerNum) + data = CommFunc.WriteBYTE(data, self.AwardItemCount) + for i in range(self.AwardItemCount): + data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer()) + data = CommFunc.WriteBYTE(data, self.SuperItemCount) + for i in range(self.SuperItemCount): + data = CommFunc.WriteString(data, self.SuperItemList[i].GetLength(), self.SuperItemList[i].GetBuffer()) + data = CommFunc.WriteBYTE(data, self.SuperItemCanChooseCount) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ActNum:%d, + StartDate:%s, + EndtDate:%s, + LimitLV:%d, + ResetType:%d, + MoneyType:%d, + MoneyValue:%d, + LayerNum:%d, + AwardItemCount:%d, + AwardItemList:%s, + SuperItemCount:%d, + SuperItemList:%s, + SuperItemCanChooseCount:%d + '''\ + %( + self.Head.OutputString(), + self.ActNum, + self.StartDate, + self.EndtDate, + self.LimitLV, + self.ResetType, + self.MoneyType, + self.MoneyValue, + self.LayerNum, + self.AwardItemCount, + "...", + self.SuperItemCount, + "...", + self.SuperItemCanChooseCount + ) + return DumpString + + +m_NAtagMCActXianXiaMJInfo=tagMCActXianXiaMJInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActXianXiaMJInfo.Head.Cmd,m_NAtagMCActXianXiaMJInfo.Head.SubCmd))] = m_NAtagMCActXianXiaMJInfo + + +#------------------------------------------------------ # AA 15 仙界盛典全民来嗨玩家信息 #tagMCAllPeoplePartyInfo class tagMCAllPeoplePartyCount(Structure): diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/QuestCommon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/QuestCommon.py index 15fa16f..da87f73 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/QuestCommon.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/QuestCommon.py @@ -35,7 +35,6 @@ import ChPyNetSendPack import NetPackCommon import EventShell -import PlayerActGarbageSorting #--------------------------------------------------------------------- #所有任务的索引 FindQuestFunc = None @@ -207,8 +206,6 @@ # 剧情任务完成处理 OnStoryMissionFinish(curPlayer, missionID) - - PlayerActGarbageSorting.OnFinishTask(curPlayer, missionID) EventReport.WriteEvent_mission_log(curPlayer, curQuestData, 1, isFinish, failReason) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/PrintMoney.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/PrintMoney.py index 6e5be71..4b9b3e5 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/PrintMoney.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/PrintMoney.py @@ -31,7 +31,10 @@ return GameWorld.DebugAnswer(curPlayer, "--------------------") - for moneyType, name in SetMoney.moneyNameDict.items(): + moneyTypeList = SetMoney.moneyNameDict.keys() + moneyTypeList.sort() + for moneyType in moneyTypeList: + name = SetMoney.moneyNameDict[moneyType] GameWorld.DebugAnswer(curPlayer, "%s%s=%s" % (moneyType, name, PlayerControl.GetMoney(curPlayer, moneyType))) return diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetMoney.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetMoney.py index 1dfaf04..0eca5f9 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetMoney.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetMoney.py @@ -28,7 +28,7 @@ moneyNameDict = { 1:"仙玉", 2:"绑玉", 3:"铜钱", 6:"战盟贡献度", 10:"战盟仓库积分", 13:"境界修行点", 14:"符印融合石", 15:"仙盟活跃令", 16:"助战积分", 18:"荣誉", 19:"Boss积分", 23:"符印精华", 24:"符印碎片", 25:"寻宝积分", 26:"集市额度", 27:"丹精", 28:"魂尘", - 29:"聚魂碎片", 30:"核心环", 31:"功能特权令" + 29:"聚魂碎片", 30:"核心环", 31:"功能特权令", 32:"环保值" } ## GM命令执行入口 @@ -42,6 +42,7 @@ moneyType = List[0] if moneyType == 0: moneyList = moneyNameDict.keys() + moneyList.sort() else: moneyList = [moneyType] for moneyType in moneyList: @@ -54,8 +55,9 @@ GameWorld.DebugAnswer(curPlayer, "设置货币: SetMoney 货币类型 数值") GameWorld.DebugAnswer(curPlayer, "显示货币: SetMoney 货币类型") helpStr = "" - for moneyType, name in moneyNameDict.items(): - helpStr += "%s-%s;" % (moneyType, name) + moneyTypeList = moneyNameDict.keys() + for moneyType in moneyTypeList: + helpStr += "%s-%s;" % (moneyType, moneyNameDict[moneyType]) GameWorld.DebugAnswer(curPlayer, helpStr) return #钱币类型 diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py index f566635..ea652aa 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py @@ -1147,9 +1147,9 @@ ("DWORD", "CfgID", 1), ("char", "StartDate", 0), ("char", "EndDate", 0), + ("BYTE", "ResetType", 0), ("WORD", "LVLimit", 0), ("BYTE", "CTGTypeEffValue", 0), - ("BYTE", "TemplateID", 0), ), "ActGarbageTask":( @@ -1160,7 +1160,17 @@ ("list", "ProduceGarbageRateList", 0), ), - "ActGarbageAward":( + "ActXianXiaMJ":( + ("DWORD", "CfgID", 1), + ("char", "StartDate", 0), + ("char", "EndDate", 0), + ("BYTE", "ResetType", 0), + ("WORD", "LVLimit", 0), + ("list", "UseMoneyInfo", 0), + ("BYTE", "TemplateID", 0), + ), + + "ActXianXiaMJAward":( ("DWORD", "TemplateID", 1), ("BYTE", "AwardLibType", 0), ("BYTE", "AwardItemCount", 0), @@ -4180,17 +4190,17 @@ self.CfgID = 0 self.StartDate = "" self.EndDate = "" + self.ResetType = 0 self.LVLimit = 0 - self.CTGTypeEffValue = 0 - self.TemplateID = 0 + self.CTGTypeEffValue = 0 return def GetCfgID(self): return self.CfgID # 配置ID def GetStartDate(self): return self.StartDate # 开启日期 def GetEndDate(self): return self.EndDate # 结束日期 + def GetResetType(self): return self.ResetType # 重置类型,0-0点重置;1-5点重置 def GetLVLimit(self): return self.LVLimit # 限制等级 - def GetCTGTypeEffValue(self): return self.CTGTypeEffValue # 充值有效类型值 - def GetTemplateID(self): return self.TemplateID # 模板ID + def GetCTGTypeEffValue(self): return self.CTGTypeEffValue # 充值有效类型值 # 垃圾分类任务产出表 class IPY_ActGarbageTask(): @@ -4209,8 +4219,29 @@ def GetAutoProduce(self): return self.AutoProduce # 自动产生垃圾 def GetProduceGarbageRateList(self): return self.ProduceGarbageRateList # 随机产生垃圾概率饼图 -# 垃圾分类环保奖池表 -class IPY_ActGarbageAward(): +# 仙匣秘境活动时间表 +class IPY_ActXianXiaMJ(): + + def __init__(self): + self.CfgID = 0 + self.StartDate = "" + self.EndDate = "" + self.ResetType = 0 + self.LVLimit = 0 + self.UseMoneyInfo = [] + self.TemplateID = 0 + return + + def GetCfgID(self): return self.CfgID # 配置ID + def GetStartDate(self): return self.StartDate # 开启日期 + def GetEndDate(self): return self.EndDate # 结束日期 + def GetResetType(self): return self.ResetType # 重置类型,0-0点重置;1-5点重置 + def GetLVLimit(self): return self.LVLimit # 限制等级 + def GetUseMoneyInfo(self): return self.UseMoneyInfo # 消耗货币信息 + def GetTemplateID(self): return self.TemplateID # 模板ID + +# 仙匣秘境奖池表 +class IPY_ActXianXiaMJAward(): def __init__(self): self.TemplateID = 0 @@ -5898,8 +5929,10 @@ self.ipyActGarbageSortingLen = len(self.ipyActGarbageSortingCache) self.ipyActGarbageTaskCache = self.__LoadFileData("ActGarbageTask", IPY_ActGarbageTask) self.ipyActGarbageTaskLen = len(self.ipyActGarbageTaskCache) - self.ipyActGarbageAwardCache = self.__LoadFileData("ActGarbageAward", IPY_ActGarbageAward) - self.ipyActGarbageAwardLen = len(self.ipyActGarbageAwardCache) + self.ipyActXianXiaMJCache = self.__LoadFileData("ActXianXiaMJ", IPY_ActXianXiaMJ) + self.ipyActXianXiaMJLen = len(self.ipyActXianXiaMJCache) + self.ipyActXianXiaMJAwardCache = self.__LoadFileData("ActXianXiaMJAward", IPY_ActXianXiaMJAward) + self.ipyActXianXiaMJAwardLen = len(self.ipyActXianXiaMJAwardCache) self.ipyActHorsePetFeastCache = self.__LoadFileData("ActHorsePetFeast", IPY_ActHorsePetFeast) self.ipyActHorsePetFeastLen = len(self.ipyActHorsePetFeastCache) self.ipyActBossRebornCache = self.__LoadFileData("ActBossReborn", IPY_ActBossReborn) @@ -6440,8 +6473,10 @@ def GetActGarbageSortingByIndex(self, index): return self.ipyActGarbageSortingCache[index] def GetActGarbageTaskCount(self): return self.ipyActGarbageTaskLen def GetActGarbageTaskByIndex(self, index): return self.ipyActGarbageTaskCache[index] - def GetActGarbageAwardCount(self): return self.ipyActGarbageAwardLen - def GetActGarbageAwardByIndex(self, index): return self.ipyActGarbageAwardCache[index] + def GetActXianXiaMJCount(self): return self.ipyActXianXiaMJLen + def GetActXianXiaMJByIndex(self, index): return self.ipyActXianXiaMJCache[index] + def GetActXianXiaMJAwardCount(self): return self.ipyActXianXiaMJAwardLen + def GetActXianXiaMJAwardByIndex(self, index): return self.ipyActXianXiaMJAwardCache[index] def GetActHorsePetFeastCount(self): return self.ipyActHorsePetFeastLen def GetActHorsePetFeastByIndex(self, index): return self.ipyActHorsePetFeastCache[index] def GetActBossRebornCount(self): return self.ipyActBossRebornLen 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 89670e8..153db11 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py @@ -107,6 +107,7 @@ import PlayerActTotalRecharge import PlayerActRechargePrize import PlayerActGarbageSorting +import PlayerActXianXiaMJ import PlayerActRechargeRebateGold import PlayerActManyDayRecharge import PlayerActSingleRecharge @@ -723,6 +724,8 @@ PlayerActLogin.OnLogin(curPlayer) # 垃圾分类活动 PlayerActGarbageSorting.OnPlayerLogin(curPlayer) + # 仙匣秘境活动 + PlayerActXianXiaMJ.OnPlayerLogin(curPlayer) # 多日连充活动 PlayerActManyDayRecharge.OnPlayerLogin(curPlayer) # 单笔累充活动 diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActGarbageSorting.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActGarbageSorting.py index 177a4ce..9fbfda5 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActGarbageSorting.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActGarbageSorting.py @@ -26,9 +26,6 @@ import ChConfig import ItemCommon import PlayerBillboard -import QuestCommon - -Def_SuperLibType = 9 # 大奖库类型固定为9 def OnPlayerLogin(curPlayer): @@ -39,7 +36,6 @@ # 活动中同步活动信息 if actInfo.get(ShareDefine.ActKey_State): Sync_GarbageSortingActionInfo(curPlayer, actNum) - Sync_GarbageSortingPlayerInfo(curPlayer, actNum) Sync_GarbageTaskInfo(curPlayer, actNum) return @@ -74,64 +70,20 @@ GameWorld.DebugLog("垃圾分类重置! actNum=%s,actID=%s,playerActID=%s,state=%s,cfgID=%s" % (actNum, actID, playerActID, state, cfgID), playerID) - guideTaskID = IpyGameDataPY.GetFuncCfg("GarbageSorting", 1) - if guideTaskID: - if state: - curMission = QuestCommon.AddNewMission(curPlayer, guideTaskID) - if curMission: - QuestCommon.SetPlayerMissionState(curPlayer, curMission, 1) - else: - QuestCommon.DeleteMission(curPlayer, guideTaskID) - PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GarbageSortingID % actNum, actID) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GarbageSortingWorldLV % actNum, actWorldLV) - PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GarbageGuideState % actNum, 0) for taskID in ChConfig.GarbageTaskList: PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GarbageTaskValue % (actNum, taskID), 0) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GarbageTaskFinishCount % (actNum, taskID), 0) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GarbageEnvironmentValue % actNum, 0) - PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GarbageEnvironmentValueHis % actNum, 0) - PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GarbageAwardLayerInfo % actNum, 0) - ipyData = IpyGameDataPY.GetIpyGameData("ActGarbageSorting", cfgID) if cfgID else None - templateID = ipyData.GetTemplateID() if ipyData else 0 - awardIpyDataList = IpyGameDataPY.GetIpyGameDataList("ActGarbageAward", templateID) if templateID else [] - if awardIpyDataList: - for awardIpyData in awardIpyDataList: - libType = awardIpyData.GetAwardLibType() - libItemCount = awardIpyData.GetAwardItemCount() - for num in xrange(libItemCount): - PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GarbageAwardItemInfo % (actNum, libType, num), 0) - - itemAwardTimesTotalInfo = awardIpyData.GetItemAwardTimesTotalInfo() - for itemID in itemAwardTimesTotalInfo.keys(): - PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GarbageAwardItemTimes % (actNum, libType, itemID), 0) - - # 活动中,生成新奖池 - if state: - __RefreshGarbageAwardPool(curPlayer, actInfo, awardIpyDataList) - + # 清除垃圾背包物品、重置环保值 + ItemControler.ClearPack(curPlayer, ShareDefine.rptGarbage) + PlayerControl.SetPlayerCurrency(curPlayer, ShareDefine.TYPE_Price_Environment, 0) + Sync_GarbageSortingActionInfo(curPlayer, actNum) - Sync_GarbageSortingPlayerInfo(curPlayer, actNum) Sync_GarbageTaskInfo(curPlayer, actNum) return True - -def OnFinishTask(curPlayer, taskID): - guideTaskID = IpyGameDataPY.GetFuncCfg("GarbageSorting", 1) - if not guideTaskID: - return - - if taskID != guideTaskID: - return - - for actInfo in PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_GarbageSorting, {}).values(): - if not actInfo.get(ShareDefine.ActKey_State): - continue - actNum = actInfo.get(ShareDefine.ActKey_ActNum, 0) - PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GarbageGuideState % actNum, 1) - Sync_GarbageSortingPlayerInfo(curPlayer, actNum) - - return def AddActGarbageTaskProgress(curPlayer, taskID, addValue=1, valueInfo=None): ## 增加垃圾收集任务进度 @@ -281,17 +233,13 @@ if not addEnvValueTotal: return - curEnvValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GarbageEnvironmentValue % actNum) + addEnvValueTotal - hisEnvValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GarbageEnvironmentValueHis % actNum) + addEnvValueTotal + PlayerControl.GiveMoney(curPlayer, ShareDefine.TYPE_Price_Environment, addEnvValueTotal) + actEnvValueTotal = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GarbageEnvironmentValue % actNum) + addEnvValueTotal + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GarbageEnvironmentValue % actNum, actEnvValueTotal) + GameWorld.DebugLog(" addEnvValueTotal=%s,actEnvValueTotal=%s,curEnvValue=%s" + % (addEnvValueTotal, actEnvValueTotal, PlayerControl.GetMoney(curPlayer, ShareDefine.TYPE_Price_Environment)), playerID) - GameWorld.DebugLog(" addEnvValueTotal=%s,curEnvValue=%s,hisEnvValue=%s" % (addEnvValueTotal, curEnvValue, hisEnvValue), playerID) - - PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GarbageEnvironmentValue % actNum, curEnvValue) - PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GarbageEnvironmentValueHis % actNum, hisEnvValue) - - PlayerBillboard.UpdatePlayerBillboard(curPlayer, ShareDefine.Def_BT_Environment, hisEnvValue) - - Sync_GarbageSortingPlayerInfo(curPlayer, actNum) + PlayerBillboard.UpdatePlayerBillboard(curPlayer, ShareDefine.Def_BT_Environment, actEnvValueTotal) return @@ -308,411 +256,6 @@ actNum = clientData.ActNum taskID = clientData.GarbageTaskID __DoCheckFinishGarbageTask(curPlayer, actNum, taskID) - return - - -#// AA 16 垃圾分类活动选择大奖 #tagCMActGarbageChooseSuperItem -# -#struct tagCMActGarbageChooseSuperItem -#{ -# tagHead Head; -# BYTE ActNum; //活动编号 -# BYTE SuperItemCount; //选择物品数量 -# DWORD SuperItemIDList[SuperItemCount]; //选择的大奖库物品ID列表,每次重新选择需要发送全部已选择的大奖物品ID,不能只发单个物品ID; -#}; -def OnActGarbageChooseSuperItem(index, clientData, tick): - curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) - actNum = clientData.ActNum - superItemIDList = clientData.SuperItemIDList - - GameWorld.DebugLog("垃圾分类活动选择大奖: actNum=%s,superItemIDList=%s" % (actNum, superItemIDList)) - - actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_GarbageSorting, actNum) - if not actInfo.get(ShareDefine.ActKey_State): - return - - cfgID = actInfo.get(ShareDefine.ActKey_CfgID) - ipyData = IpyGameDataPY.GetIpyGameData("ActGarbageSorting", cfgID) - if not ipyData: - return - - templateID = ipyData.GetTemplateID() - if not templateID: - return - - actWorldLV = actInfo.get(ShareDefine.ActKey_WorldLV, 0) - awardIpyDataList = IpyGameDataPY.GetIpyGameDataList("ActGarbageAward", templateID) - if not awardIpyDataList: - return - - superAwardIpyData = None - for awardIpyData in awardIpyDataList: - libType = awardIpyData.GetAwardLibType() - if libType == Def_SuperLibType: - superAwardIpyData = awardIpyData - break - - if not superAwardIpyData: - GameWorld.ErrLog("没有配置垃圾分类活动大奖库! cfgID=%s,actNum=%s,templateID=%s" % (cfgID, actNum, templateID)) - return - - superLibItemCount = superAwardIpyData.GetAwardItemCount() - if len(superItemIDList) != superLibItemCount: - GameWorld.ErrLog("垃圾分类活动选择大奖个数错误! cfgID=%s,actNum=%s,templateID=%s,superLibItemCount=%s,reqSuperItemIDList=%s" - % (cfgID, actNum, templateID, superLibItemCount, superItemIDList)) - return - - posNumItemIDList = [] # 已抽中的大奖物品ID - libType = superAwardIpyData.GetAwardLibType() - for num in xrange(superLibItemCount): - itemInfoValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GarbageAwardItemInfo % (actNum, libType, num)) - if not itemInfoValue: - break - itemID, posNum = itemInfoValue / 100, itemInfoValue % 100 - if posNum and itemID not in superItemIDList: - GameWorld.ErrLog("垃圾分类活动选择大奖ID错误! 已抽中的大奖ID为必选ID! posNum=%s, itemID=%s not in superItemIDList=%s" - % (posNum, itemID, superItemIDList)) - return - - if posNum: - posNumItemIDList.append(itemID) - - GameWorld.DebugLog(" 已抽中的大奖ID! %s" % posNumItemIDList) - - layerInfoValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GarbageAwardLayerInfo % actNum) - layerNum = layerInfoValue % 100 - - libItemDict = __GetGarbageAwardLibItem(superAwardIpyData.GetLibItemInfo(), actWorldLV) - layerLimitInfo = superAwardIpyData.GetItemLayerLimitInfo() - awardTimesTotalInfo = superAwardIpyData.GetItemAwardTimesTotalInfo() - - replaceSuperItemIDList = [] # 需要替换的大奖ID列表 - - for selectItemID in superItemIDList: - if selectItemID in posNumItemIDList: - GameWorld.DebugLog(" 已抽中的大奖ID,不验证!selectItemID=%s" % (selectItemID)) - continue - - if selectItemID not in libItemDict: - GameWorld.ErrLog("垃圾分类活动选择大奖ID错误! 大奖ID不存在大奖库中! selectItemID=%s not in libItemDict=%s" - % (selectItemID, libItemDict)) - return - - layerLimit = layerLimitInfo.get(selectItemID, 0) - if layerLimit > layerNum: - GameWorld.ErrLog("垃圾分类活动选择大奖ID错误! 大奖ID该层不能选择! selectItemID=%s layerLimit(%s) > layerNum(%s)" - % (selectItemID, layerLimit, layerNum)) - return - - totalTimesLimit = awardTimesTotalInfo.get(selectItemID, 0) - if totalTimesLimit: - totalTimesNow = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GarbageAwardItemTimes % (actNum, libType, selectItemID)) - if totalTimesNow >= totalTimesLimit: - GameWorld.ErrLog("垃圾分类活动选择大奖ID错误! 大奖ID已达到最大奖励次数,不能选择! selectItemID=%s totalTimesNow(%s) >= totalTimesLimit(%s)" - % (selectItemID, totalTimesNow, totalTimesLimit)) - return - - replaceSuperItemIDList.append(selectItemID) - - GameWorld.DebugLog(" 验证通过,可替换大奖ID! replaceSuperItemIDList=%s" % replaceSuperItemIDList) - if not replaceSuperItemIDList: - return - - for num in xrange(superLibItemCount): - itemInfoValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GarbageAwardItemInfo % (actNum, libType, num)) - itemID, posNum = itemInfoValue / 100, itemInfoValue % 100 - if itemID in posNumItemIDList: - GameWorld.DebugLog(" 已抽中的大奖ID,不替换!itemID=%s" % (itemID)) - continue - replaceSuperItemID = replaceSuperItemIDList.pop(0) - updItemInfoValue = replaceSuperItemID * 100 + posNum - PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GarbageAwardItemInfo % (actNum, libType, num), updItemInfoValue) - GameWorld.DebugLog(" 替换大奖ID选择!num=%s,itemID=%s,posNum=%s,replaceSuperItemID=%s,updItemInfoValue=%s" - % (num, itemID, posNum, replaceSuperItemID, updItemInfoValue)) - - if not replaceSuperItemIDList: - break - - Sync_GarbageSortingActionInfo(curPlayer, actNum) - return - -#// AA 18 垃圾分类活动奖池刷新 #tagCMGarbageAwardPoolRefresh -# -#struct tagCMGarbageAwardPoolRefresh -#{ -# tagHead Head; -# BYTE ActNum; //活动编号 -#}; -def OnActGarbageAwardPoolRefresh(index, clientData, tick): - curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) - actNum = clientData.ActNum - - GameWorld.DebugLog("垃圾分类活动奖池刷新: actNum=%s" % (actNum)) - - actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_GarbageSorting, actNum) - if not actInfo.get(ShareDefine.ActKey_State): - return - - cfgID = actInfo.get(ShareDefine.ActKey_CfgID) - ipyData = IpyGameDataPY.GetIpyGameData("ActGarbageSorting", cfgID) - if not ipyData: - return - - templateID = ipyData.GetTemplateID() - if not templateID: - return - - awardIpyDataList = IpyGameDataPY.GetIpyGameDataList("ActGarbageAward", templateID) - if not awardIpyDataList: - return - - if not __RefreshGarbageAwardPool(curPlayer, actInfo, awardIpyDataList): - return - - Sync_GarbageSortingActionInfo(curPlayer, actNum) - return - -def __RefreshGarbageAwardPool(curPlayer, actInfo, awardIpyDataList): - ## 刷新垃圾收集环保奖池物品 - - cfgID = actInfo.get(ShareDefine.ActKey_CfgID) - actNum = actInfo.get(ShareDefine.ActKey_ActNum, 0) - actWorldLV = actInfo.get(ShareDefine.ActKey_WorldLV, 0) - - layerInfoValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GarbageAwardLayerInfo % actNum) - layerNum = layerInfoValue % 100 - - GameWorld.DebugLog("刷新垃圾收集环保奖池物品: cfgID=%s,actNum=%s,actWorldLV=%s,layerNum=%s" % (cfgID, actNum, actWorldLV, layerNum)) - - if layerNum: - # 非0层,验证大奖是否已抽完,抽完才可以刷新奖池层 - superLib = False - for awardIpyData in awardIpyDataList: - libType = awardIpyData.GetAwardLibType() - if libType != Def_SuperLibType: - continue - superLib = True - libItemCount = awardIpyData.GetAwardItemCount() - for num in xrange(libItemCount): - itemInfoValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GarbageAwardItemInfo % (actNum, libType, num)) - itemID, posNum = itemInfoValue / 100, itemInfoValue % 100 - if itemID and not posNum: - GameWorld.ErrLog("有大奖未抽中!无法刷新环保奖池! cfgID=%s,actNum=%s,layerNum=%s,num=%s,itemID=%s,posNum=%s" - % (cfgID, actNum, layerNum, num, itemID, posNum)) - return - break - if not superLib: - GameWorld.ErrLog("奖池配置没有大奖库!无法刷新环保奖池! cfgID=%s,actNum=%s,layerNum=%s,superLib=%s" % (cfgID, actNum, layerNum, superLib)) - return - - layerNum += 1 # 可刷新奖池,默认+1层 - GameWorld.DebugLog(" 可刷新奖池!下一层: layerNum=%s" % (layerNum)) - - refreshLibDict = {} - for awardIpyData in awardIpyDataList: - libType = awardIpyData.GetAwardLibType() - libItemCount = awardIpyData.GetAwardItemCount() - libItemDict = __GetGarbageAwardLibItem(awardIpyData.GetLibItemInfo(), actWorldLV) - layerLimitInfo = awardIpyData.GetItemLayerLimitInfo() - awardTimesTotalInfo = awardIpyData.GetItemAwardTimesTotalInfo() - - canRandItemDict = {} - for itemID, libItemInfo in libItemDict.items(): - _, weight = libItemInfo - - layerLimit = layerLimitInfo.get(itemID, 0) - if layerLimit > layerNum: - GameWorld.DebugLog(" 该层不能选择该奖品! itemID=%s layerLimit(%s) > layerNum(%s)" - % (itemID, layerLimit, layerNum)) - continue - - totalTimesLimit = awardTimesTotalInfo.get(itemID, 0) - if totalTimesLimit: - totalTimesNow = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GarbageAwardItemTimes % (actNum, libType, itemID)) - if totalTimesNow >= totalTimesLimit: - GameWorld.DebugLog(" 奖品ID已达到最大奖励次数,不能选择! itemID=%s totalTimesNow(%s) >= totalTimesLimit(%s)" - % (itemID, totalTimesNow, totalTimesLimit)) - continue - - canRandItemDict[itemID] = [weight, itemID] - - if libItemCount > len(canRandItemDict): - GameWorld.ErrLog("奖品库配置可选择奖品个数不够!无法刷新环保奖池! cfgID=%s,actNum=%s,libType=%s,layerNum=%s,libItemCount=%s > %s canRandItemDict(%s)" - % (cfgID, actNum, libType, layerNum, libItemCount, len(canRandItemDict), canRandItemDict)) - return - - refreshLibDict[libType] = [libItemCount, canRandItemDict] - - for libType, refreshInfo in refreshLibDict.items(): - libItemCount, canRandItemDict = refreshInfo - GameWorld.DebugLog(" 随机奖池物品: libType=%s,libItemCount=%s,canRandItemDict=%s, %s" % (libType, libItemCount, len(canRandItemDict), canRandItemDict)) - - if libType == Def_SuperLibType: - # 大奖直接重置,系统不生成,由玩家手动选择 - for num in xrange(libItemCount): - PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GarbageAwardItemInfo % (actNum, libType, num), 0) - continue - - for num in xrange(libItemCount): - weightList = canRandItemDict.values() - randItemID = GameWorld.GetResultByWeightList(weightList) - canRandItemDict.pop(randItemID, None) - - posNum = 0 - itemInfoValue = randItemID * 100 + posNum - PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GarbageAwardItemInfo % (actNum, libType, num), itemInfoValue) - GameWorld.DebugLog(" 随机生成奖品! libType=%s,num=%s,randItemID=%s" % (libType, num, randItemID)) - - playCount = 0 # 每层重置抽奖次数 - layerInfoValue = playCount * 100 + layerNum - PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GarbageAwardLayerInfo % actNum, layerInfoValue) - GameWorld.DebugLog(" 刷新完成! playCount=%s,layerNum=%s,layerInfoValue=%s" % (playCount, layerNum, layerInfoValue)) - return True - -#// AA 17 垃圾分类活动抽奖 #tagCMActGarbageLottery -# -#struct tagCMActGarbageLottery -#{ -# tagHead Head; -# BYTE ActNum; //活动编号 -# BYTE PosNum; //玩家点击的奖励位置编号,从1开始 -#}; -def OnActGarbageLottery(index, clientData, tick): - curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) - actNum = clientData.ActNum - reqPosNum = clientData.PosNum - - GameWorld.DebugLog("垃圾分类活动抽奖: actNum=%s,reqPosNum=%s" % (actNum, reqPosNum)) - - if reqPosNum <= 0: - return - - actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_GarbageSorting, actNum) - if not actInfo.get(ShareDefine.ActKey_State): - return - - cfgID = actInfo.get(ShareDefine.ActKey_CfgID) - ipyData = IpyGameDataPY.GetIpyGameData("ActGarbageSorting", cfgID) - if not ipyData: - return - - templateID = ipyData.GetTemplateID() - if not templateID: - return - - actWorldLV = actInfo.get(ShareDefine.ActKey_WorldLV, 0) - awardIpyDataList = IpyGameDataPY.GetIpyGameDataList("ActGarbageAward", templateID) - if not awardIpyDataList: - return - - costEnvValue = IpyGameDataPY.GetFuncCfg("GarbageSorting", 3) - curEnvValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GarbageEnvironmentValue % actNum) - if curEnvValue < costEnvValue: - GameWorld.DebugLog(" 环保值不足,无法抽奖! curEnvValue(%s) < costEnvValue(%s)" % (curEnvValue, costEnvValue)) - return - - layerInfoValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GarbageAwardLayerInfo % actNum) - playCount, layerNum = layerInfoValue / 100, layerInfoValue % 100 - - posNumMax = 0 - randLibItemDict = {} - for awardIpyData in awardIpyDataList: - libType = awardIpyData.GetAwardLibType() - libItemCount = awardIpyData.GetAwardItemCount() - unlockLimitTimes = awardIpyData.GetUnlockAwardLimitTimes() - libWeight = awardIpyData.GetAwardLibWeight() - posNumMax += libItemCount - - if libType == Def_SuperLibType: - for num in xrange(libItemCount): - itemInfoValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GarbageAwardItemInfo % (actNum, libType, num)) - if not itemInfoValue: - GameWorld.DebugLog(" 未选择大奖!无法抽奖! libType=%s,num=%s,itemInfoValue=%s" % (libType, num, itemInfoValue)) - return - - if unlockLimitTimes and playCount < unlockLimitTimes: - GameWorld.DebugLog(" 该库当前抽奖次数无法解锁! libType=%s,playCount(%s) < unlockLimitTimes(%s)" % (libType, playCount, unlockLimitTimes)) - continue - - awardTimesTotalInfo = awardIpyData.GetItemAwardTimesTotalInfo() - libItemDict = __GetGarbageAwardLibItem(awardIpyData.GetLibItemInfo(), actWorldLV) - canRandItemList = [] - for num in xrange(libItemCount): - itemInfoValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GarbageAwardItemInfo % (actNum, libType, num)) - if not itemInfoValue: - return - - itemID, posNum = itemInfoValue / 100, itemInfoValue % 100 - if itemID not in libItemDict: - continue - - if posNum: - GameWorld.DebugLog(" 该奖品已被抽中! libType=%s,itemID=%s,posNum=%s" % (libType, itemID, posNum)) - if posNum == reqPosNum: - GameWorld.ErrLog(" 该位置已经有抽奖结果,无法重复选择抽奖! libType=%s,num=%s,itemInfoValue=%s,posNum=%s" - % (libType, num, itemInfoValue, posNum)) - return - continue - - itemCount, weight = libItemDict[itemID] - isAddTimes = (itemID in awardTimesTotalInfo) - canRandItemList.append([weight, itemID, itemCount, num, isAddTimes]) - - if canRandItemList: - randLibItemDict[libType] = [libWeight, libType, canRandItemList] - GameWorld.DebugLog(" 该库有机会抽到物品: libType=%s,libWeight=%s,canRandItemList=%s" % (libType, libWeight, canRandItemList)) - else: - GameWorld.DebugLog(" 该库物品已全被抽完: libType=%s,libWeight=%s,canRandItemList=%s" % (libType, libWeight, canRandItemList)) - - if reqPosNum > posNumMax: - GameWorld.DebugLog(" 请求位置异常,无法抽奖! reqPosNum(%s) > posNumMax(%s)" % (reqPosNum, posNumMax)) - return - - if not randLibItemDict: - GameWorld.DebugLog(" 没有可抽奖的奖品了,无法抽奖!") - return - - randLibInfo = GameWorld.GetResultByWeightList(randLibItemDict.values()) - if not randLibInfo: - return - libType, canRandItemList = randLibInfo - randItemInfo = GameWorld.GetResultByWeightList(canRandItemList) - if not randItemInfo: - return - itemID, itemCount, num, isAddTimes = randItemInfo - - # 扣除抽奖消耗环保值 - updEnvValue = curEnvValue - costEnvValue - PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GarbageEnvironmentValue % actNum, updEnvValue) - - # 更新已抽中值 - updItemInfoValue = itemID * 100 + reqPosNum - PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GarbageAwardItemInfo % (actNum, libType, num), updItemInfoValue) - - totalTimesNow = 0 - if isAddTimes: - totalTimesNow = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GarbageAwardItemTimes % (actNum, libType, itemID)) + 1 - PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GarbageAwardItemTimes % (actNum, libType, itemID), totalTimesNow) - - playCount += 1 - layerInfoValue = playCount * 100 + layerNum - PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GarbageAwardLayerInfo % actNum, layerInfoValue) - - GameWorld.DebugLog(" 抽中物品: layerNum=%s,libType=%s,itemID=%s,itemCount=%s,num=%s,reqPosNum=%s,updItemInfoValue=%s,totalTimesNow=%s,updEnvValue=%s,playCount=%s(%s)" - % (layerNum, libType, itemID, itemCount, num, reqPosNum, updItemInfoValue, totalTimesNow, updEnvValue, playCount, layerInfoValue)) - - # 给物品 - isAuctionItem = 0 - itemList = [[itemID, itemCount, isAuctionItem]] - ItemControler.GivePlayerItemOrMail(curPlayer, itemList, event=["ActGarbageLottery", False, {}]) - - # 广播 - if libType == Def_SuperLibType: - PlayerControl.WorldNotify(0, "GarbageSorting%s" % actNum, [curPlayer.GetPlayerName(), itemID, itemCount]) - - # 通知 - awardItemInfo = [libType, itemID, itemCount, reqPosNum, totalTimesNow] - Sync_GarbageSortingPlayerInfo(curPlayer, actNum, awardItemInfo) return def Sync_GarbageTaskInfo(curPlayer, actNum, taskID=0, awardItemList=None): @@ -739,39 +282,6 @@ NetPackCommon.SendFakePack(curPlayer, clientPack) return -def Sync_GarbageSortingPlayerInfo(curPlayer, actNum, awardItemInfo=None): - ## 通知玩家数据信息 - # @param awardItemInfo: 抽奖物品信息 [libType, itemID, itemCount, posNum, totalTimesNow] - - actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_GarbageSorting, actNum) - if not actInfo.get(ShareDefine.ActKey_State): - return - - cfgID = actInfo.get(ShareDefine.ActKey_CfgID) - ipyData = IpyGameDataPY.GetIpyGameData("ActGarbageSorting", cfgID) - if not ipyData: - return - - guideTaskID = IpyGameDataPY.GetFuncCfg("GarbageSorting", 1) - - clientPack = ChPyNetSendPack.tagMCActGarbagePlayerInfo() - clientPack.ActNum = actNum - clientPack.GuideTaskFinish = 1 if not guideTaskID else curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GarbageGuideState % actNum) - clientPack.EnvironmentValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GarbageEnvironmentValue % actNum) - clientPack.EnvironmentValueHis = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GarbageEnvironmentValueHis % actNum) - - if awardItemInfo: - libType, itemID, itemCount, posNum, totalTimesNow = awardItemInfo - awardItem = ChPyNetSendPack.tagMCActGarbageAwardItemResult() - awardItem.ItemLibType = libType - awardItem.ItemID = itemID - awardItem.ItemCount = itemCount - awardItem.PosNum = posNum - awardItem.TotalTimesNow = totalTimesNow - clientPack.AwardItemResult = awardItem - NetPackCommon.SendFakePack(curPlayer, clientPack) - return - def Sync_GarbageSortingActionInfo(curPlayer, actNum): ## 通知活动信息 @@ -784,75 +294,13 @@ if not ipyData: return - templateID = ipyData.GetTemplateID() - if not templateID: - return - - actWorldLV = actInfo.get(ShareDefine.ActKey_WorldLV, 0) openServerDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ServerDay) + 1 - - layerInfoValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GarbageAwardLayerInfo % actNum) - layerNum = layerInfoValue % 100 - clientPack = ChPyNetSendPack.tagMCActGarbageSortingInfo() clientPack.ActNum = actNum clientPack.StartDate = GameWorld.GetOperationActionDateStr(ipyData.GetStartDate(), openServerDay) clientPack.EndtDate = GameWorld.GetOperationActionDateStr(ipyData.GetEndDate(), openServerDay) clientPack.LimitLV = ipyData.GetLVLimit() - clientPack.LayerNum = layerNum - clientPack.AwardItemList = [] # 奖池物品列表 - awardIpyDataList = IpyGameDataPY.GetIpyGameDataList("ActGarbageAward", templateID) - if awardIpyDataList: - for awardIpyData in awardIpyDataList: - libType = awardIpyData.GetAwardLibType() - libItemCount = awardIpyData.GetAwardItemCount() - libItemDict = __GetGarbageAwardLibItem(awardIpyData.GetLibItemInfo(), actWorldLV) - layerLimitInfo = awardIpyData.GetItemLayerLimitInfo() - awardTimesTotalInfo = awardIpyData.GetItemAwardTimesTotalInfo() - - # 奖池物品列表,已生成的,包含已选择的大奖物品 - for num in xrange(libItemCount): - itemInfoValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GarbageAwardItemInfo % (actNum, libType, num)) - if not itemInfoValue: - break - itemID, posNum = itemInfoValue / 100, itemInfoValue % 100 - if itemID not in libItemDict: - continue - libItemInfo = libItemDict[itemID] - - awardItem = ChPyNetSendPack.tagMCActGarbageAwardItem() - awardItem.ItemLibType = libType - awardItem.ItemID = itemID - awardItem.ItemCount = libItemInfo[0] - awardItem.PosNum = posNum - awardItem.TotalTimesMax = awardTimesTotalInfo.get(itemID, 0) - awardItem.TotalTimesNow = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GarbageAwardItemTimes % (actNum, libType, itemID)) - awardItem.LayerLimit = layerLimitInfo.get(itemID, 0) - clientPack.AwardItemList.append(awardItem) - - # 大奖物品待选择库,全部同步 - if libType == Def_SuperLibType: - for itemID, libItemInfo in libItemDict.items(): - awardItem = ChPyNetSendPack.tagMCActGarbageAwardItem() - awardItem.ItemLibType = libType - awardItem.ItemID = itemID - awardItem.ItemCount = libItemInfo[0] - awardItem.TotalTimesMax = awardTimesTotalInfo.get(itemID, 0) - awardItem.LayerLimit = layerLimitInfo.get(itemID, 0) - clientPack.SuperItemList.append(awardItem) - clientPack.SuperItemCount = len(clientPack.SuperItemList) - clientPack.SuperItemCanChooseCount = libItemCount - - clientPack.AwardItemCount = len(clientPack.AwardItemList) + clientPack.ResetType = ipyData.GetResetType() NetPackCommon.SendFakePack(curPlayer, clientPack) return - -def __GetGarbageAwardLibItem(libItemInfo, actWorldLV): - ## 获取奖励库物品信息字典,支持按世界等级范围配置的格式 - keyList = libItemInfo.keys() - if not keyList: - return {} - if isinstance(keyList[0], tuple) and len(keyList[0]) == 2: - return GameWorld.GetDictValueByRangeKey(libItemInfo, actWorldLV, {}) - return libItemInfo diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActXianXiaMJ.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActXianXiaMJ.py new file mode 100644 index 0000000..20b10db --- /dev/null +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActXianXiaMJ.py @@ -0,0 +1,596 @@ +#!/usr/bin/python +# -*- coding: GBK -*- +#------------------------------------------------------------------------------- +# +##@package Player.PlayerActXianXiaMJ +# +# @todo:仙匣秘境 +# @author hxp +# @date 2021-05-26 +# @version 1.0 +# +# 详细描述: 仙匣秘境 +# +#------------------------------------------------------------------------------- +#"""Version = 2021-05-26 11:30""" +#------------------------------------------------------------------------------- + +import PyGameData +import ShareDefine +import PlayerControl +import IpyGameDataPY +import ItemControler +import ChPyNetSendPack +import NetPackCommon +import GameWorld +import ChConfig + +Def_SuperLibType = 9 # 大奖库类型固定为9 + +def OnPlayerLogin(curPlayer): + + for actInfo in PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_XianXiaMJ, {}).values(): + actNum = actInfo.get(ShareDefine.ActKey_ActNum, 0) + isReset = __CheckPlayerXianXiaMJAction(curPlayer, actNum) + if not isReset: + # 活动中同步活动信息 + if actInfo.get(ShareDefine.ActKey_State): + Sync_XianXiaMJActionInfo(curPlayer, actNum) + return + +def RefreshXianXiaMJActionInfo(actNum): + ## 收到GameServer同步的活动信息,刷新活动信息 + playerManager = GameWorld.GetPlayerManager() + for index in xrange(playerManager.GetPlayerCount()): + curPlayer = playerManager.GetPlayerByIndex(index) + if curPlayer.GetID() == 0: + continue + __CheckPlayerXianXiaMJAction(curPlayer, actNum) + return + +def __CheckPlayerXianXiaMJAction(curPlayer, actNum): + ## 检查玩家活动数据信息 + + playerID = curPlayer.GetPlayerID() + actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_XianXiaMJ, actNum) + actID = actInfo.get(ShareDefine.ActKey_ID, 0) + state = actInfo.get(ShareDefine.ActKey_State, 0) + cfgID = actInfo.get(ShareDefine.ActKey_CfgID, 0) + + playerActID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_XianXiaMJID % actNum) # 玩家身上的活动ID + + # 活动ID 相同的话不处理 + if actID == playerActID: + GameWorld.DebugLog("仙匣秘境活动ID不变,不处理!actNum=%s,actID=%s" % (actNum, actID), playerID) + return + + actWorldLV = actInfo.get(ShareDefine.ActKey_WorldLV, 0) + + GameWorld.DebugLog("仙匣秘境重置! actNum=%s,actID=%s,playerActID=%s,state=%s,cfgID=%s" + % (actNum, actID, playerActID, state, cfgID), playerID) + + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_XianXiaMJID % actNum, actID) + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_XianXiaMJWorldLV % actNum, actWorldLV) + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_XianXiaMJAwardLayerInfo % actNum, 0) + + ipyData = IpyGameDataPY.GetIpyGameData("ActXianXiaMJ", cfgID) if cfgID else None + templateID = ipyData.GetTemplateID() if ipyData else 0 + awardIpyDataList = IpyGameDataPY.GetIpyGameDataList("ActXianXiaMJAward", templateID) if templateID else [] + if awardIpyDataList: + for awardIpyData in awardIpyDataList: + libType = awardIpyData.GetAwardLibType() + libItemCount = awardIpyData.GetAwardItemCount() + for num in xrange(libItemCount): + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_XianXiaMJAwardItemInfo % (actNum, libType, num), 0) + + itemAwardTimesTotalInfo = awardIpyData.GetItemAwardTimesTotalInfo() + for itemID in itemAwardTimesTotalInfo.keys(): + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_XianXiaMJAwardItemTimes % (actNum, libType, itemID), 0) + + # 活动中,生成新奖池 + if state: + __RefreshXianXiaMJAwardPool(curPlayer, actInfo, awardIpyDataList) + + Sync_XianXiaMJActionInfo(curPlayer, actNum) + return True + +#// AA 16 仙匣秘境活动选择大奖 #tagCMActXianXiaMJSuperItem +# +#struct tagCMActXianXiaMJSuperItem +#{ +# tagHead Head; +# BYTE ActNum; //活动编号 +# BYTE SuperItemCount; //选择物品数量 +# DWORD SuperItemIDList[SuperItemCount]; //选择的大奖库物品ID列表,每次重新选择需要发送全部已选择的大奖物品ID,不能只发单个物品ID; +#}; +def OnActXianXiaMJSuperItem(index, clientData, tick): + curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) + actNum = clientData.ActNum + superItemIDList = clientData.SuperItemIDList + + GameWorld.DebugLog("仙匣秘境活动选择大奖: actNum=%s,superItemIDList=%s" % (actNum, superItemIDList)) + + actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_XianXiaMJ, actNum) + if not actInfo.get(ShareDefine.ActKey_State): + GameWorld.DebugLog(" 非活动中!") + return + + cfgID = actInfo.get(ShareDefine.ActKey_CfgID) + ipyData = IpyGameDataPY.GetIpyGameData("ActXianXiaMJ", cfgID) + if not ipyData: + return + + templateID = ipyData.GetTemplateID() + if not templateID: + return + + actWorldLV = actInfo.get(ShareDefine.ActKey_WorldLV, 0) + awardIpyDataList = IpyGameDataPY.GetIpyGameDataList("ActXianXiaMJAward", templateID) + if not awardIpyDataList: + return + + superAwardIpyData = None + for awardIpyData in awardIpyDataList: + libType = awardIpyData.GetAwardLibType() + if libType == Def_SuperLibType: + superAwardIpyData = awardIpyData + break + + if not superAwardIpyData: + GameWorld.ErrLog("没有配置仙匣秘境活动大奖库! cfgID=%s,actNum=%s,templateID=%s" % (cfgID, actNum, templateID)) + return + + superLibItemCount = superAwardIpyData.GetAwardItemCount() + if len(superItemIDList) != superLibItemCount: + GameWorld.ErrLog("仙匣秘境活动选择大奖个数错误! cfgID=%s,actNum=%s,templateID=%s,superLibItemCount=%s,reqSuperItemIDList=%s" + % (cfgID, actNum, templateID, superLibItemCount, superItemIDList)) + return + + posNumItemIDList = [] # 已抽中的大奖物品ID + libType = superAwardIpyData.GetAwardLibType() + for num in xrange(superLibItemCount): + itemInfoValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_XianXiaMJAwardItemInfo % (actNum, libType, num)) + if not itemInfoValue: + break + itemID, posNum = itemInfoValue / 100, itemInfoValue % 100 + if posNum and itemID not in superItemIDList: + GameWorld.ErrLog("仙匣秘境活动选择大奖ID错误! 已抽中的大奖ID为必选ID! posNum=%s, itemID=%s not in superItemIDList=%s" + % (posNum, itemID, superItemIDList)) + return + + if posNum: + posNumItemIDList.append(itemID) + + GameWorld.DebugLog(" 已抽中的大奖ID! %s" % posNumItemIDList) + + layerInfoValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_XianXiaMJAwardLayerInfo % actNum) + layerNum = layerInfoValue % 100 + + libItemDict = __GetXianXiaMJAwardLibItem(superAwardIpyData.GetLibItemInfo(), actWorldLV) + layerLimitInfo = superAwardIpyData.GetItemLayerLimitInfo() + awardTimesTotalInfo = superAwardIpyData.GetItemAwardTimesTotalInfo() + + replaceSuperItemIDList = [] # 需要替换的大奖ID列表 + + for selectItemID in superItemIDList: + if selectItemID in posNumItemIDList: + GameWorld.DebugLog(" 已抽中的大奖ID,不验证!selectItemID=%s" % (selectItemID)) + continue + + if selectItemID not in libItemDict: + GameWorld.ErrLog("仙匣秘境活动选择大奖ID错误! 大奖ID不存在大奖库中! selectItemID=%s not in libItemDict=%s" + % (selectItemID, libItemDict)) + return + + layerLimit = layerLimitInfo.get(selectItemID, 0) + if layerLimit > layerNum: + GameWorld.ErrLog("仙匣秘境活动选择大奖ID错误! 大奖ID该层不能选择! selectItemID=%s layerLimit(%s) > layerNum(%s)" + % (selectItemID, layerLimit, layerNum)) + return + + totalTimesLimit = awardTimesTotalInfo.get(selectItemID, 0) + if totalTimesLimit: + totalTimesNow = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_XianXiaMJAwardItemTimes % (actNum, libType, selectItemID)) + if totalTimesNow >= totalTimesLimit: + GameWorld.ErrLog("仙匣秘境活动选择大奖ID错误! 大奖ID已达到最大奖励次数,不能选择! selectItemID=%s totalTimesNow(%s) >= totalTimesLimit(%s)" + % (selectItemID, totalTimesNow, totalTimesLimit)) + return + + replaceSuperItemIDList.append(selectItemID) + + GameWorld.DebugLog(" 验证通过,可替换大奖ID! replaceSuperItemIDList=%s" % replaceSuperItemIDList) + if not replaceSuperItemIDList: + return + + for num in xrange(superLibItemCount): + itemInfoValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_XianXiaMJAwardItemInfo % (actNum, libType, num)) + itemID, posNum = itemInfoValue / 100, itemInfoValue % 100 + if itemID in posNumItemIDList: + GameWorld.DebugLog(" 已抽中的大奖ID,不替换!itemID=%s" % (itemID)) + continue + replaceSuperItemID = replaceSuperItemIDList.pop(0) + updItemInfoValue = replaceSuperItemID * 100 + posNum + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_XianXiaMJAwardItemInfo % (actNum, libType, num), updItemInfoValue) + GameWorld.DebugLog(" 替换大奖ID选择!num=%s,itemID=%s,posNum=%s,replaceSuperItemID=%s,updItemInfoValue=%s" + % (num, itemID, posNum, replaceSuperItemID, updItemInfoValue)) + + if not replaceSuperItemIDList: + break + + Sync_XianXiaMJActionInfo(curPlayer, actNum) + return + +#// AA 18 仙匣秘境活动奖池刷新 #tagCMActXianXiaMJAwardPoolRefresh +# +#struct tagCMActXianXiaMJAwardPoolRefresh +#{ +# tagHead Head; +# BYTE ActNum; //活动编号 +#}; +def OnActXianXiaMJAwardPoolRefresh(index, clientData, tick): + curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) + actNum = clientData.ActNum + + GameWorld.DebugLog("仙匣秘境活动奖池刷新: actNum=%s" % (actNum)) + + actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_XianXiaMJ, actNum) + if not actInfo.get(ShareDefine.ActKey_State): + GameWorld.DebugLog(" 非活动中!") + return + + cfgID = actInfo.get(ShareDefine.ActKey_CfgID) + ipyData = IpyGameDataPY.GetIpyGameData("ActXianXiaMJ", cfgID) + if not ipyData: + return + + templateID = ipyData.GetTemplateID() + if not templateID: + return + + awardIpyDataList = IpyGameDataPY.GetIpyGameDataList("ActXianXiaMJAward", templateID) + if not awardIpyDataList: + return + + if not __RefreshXianXiaMJAwardPool(curPlayer, actInfo, awardIpyDataList): + return + + Sync_XianXiaMJActionInfo(curPlayer, actNum) + return + +def __RefreshXianXiaMJAwardPool(curPlayer, actInfo, awardIpyDataList): + ## 刷新奖池物品 + + cfgID = actInfo.get(ShareDefine.ActKey_CfgID) + actNum = actInfo.get(ShareDefine.ActKey_ActNum, 0) + actWorldLV = actInfo.get(ShareDefine.ActKey_WorldLV, 0) + + layerInfoValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_XianXiaMJAwardLayerInfo % actNum) + layerNum = layerInfoValue % 100 + + GameWorld.DebugLog("刷新仙匣秘境奖池物品: cfgID=%s,actNum=%s,actWorldLV=%s,layerNum=%s" % (cfgID, actNum, actWorldLV, layerNum)) + + if layerNum: + # 非0层,验证大奖是否已抽完,抽完才可以刷新奖池层 + superLib = False + for awardIpyData in awardIpyDataList: + libType = awardIpyData.GetAwardLibType() + if libType != Def_SuperLibType: + continue + superLib = True + libItemCount = awardIpyData.GetAwardItemCount() + for num in xrange(libItemCount): + itemInfoValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_XianXiaMJAwardItemInfo % (actNum, libType, num)) + itemID, posNum = itemInfoValue / 100, itemInfoValue % 100 + if itemID and not posNum: + GameWorld.ErrLog("有大奖未抽中!无法刷新奖池! cfgID=%s,actNum=%s,layerNum=%s,num=%s,itemID=%s,posNum=%s" + % (cfgID, actNum, layerNum, num, itemID, posNum)) + return + break + if not superLib: + GameWorld.ErrLog("奖池配置没有大奖库!无法刷新奖池! cfgID=%s,actNum=%s,layerNum=%s,superLib=%s" % (cfgID, actNum, layerNum, superLib)) + return + + layerNum += 1 # 可刷新奖池,默认+1层 + GameWorld.DebugLog(" 可刷新奖池!下一层: layerNum=%s" % (layerNum)) + + refreshLibDict = {} + for awardIpyData in awardIpyDataList: + libType = awardIpyData.GetAwardLibType() + libItemCount = awardIpyData.GetAwardItemCount() + libItemDict = __GetXianXiaMJAwardLibItem(awardIpyData.GetLibItemInfo(), actWorldLV) + layerLimitInfo = awardIpyData.GetItemLayerLimitInfo() + awardTimesTotalInfo = awardIpyData.GetItemAwardTimesTotalInfo() + + canRandItemDict = {} + for itemID, libItemInfo in libItemDict.items(): + _, weight = libItemInfo + + layerLimit = layerLimitInfo.get(itemID, 0) + if layerLimit > layerNum: + GameWorld.DebugLog(" 该层不能选择该奖品! itemID=%s layerLimit(%s) > layerNum(%s)" + % (itemID, layerLimit, layerNum)) + continue + + totalTimesLimit = awardTimesTotalInfo.get(itemID, 0) + if totalTimesLimit: + totalTimesNow = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_XianXiaMJAwardItemTimes % (actNum, libType, itemID)) + if totalTimesNow >= totalTimesLimit: + GameWorld.DebugLog(" 奖品ID已达到最大奖励次数,不能选择! itemID=%s totalTimesNow(%s) >= totalTimesLimit(%s)" + % (itemID, totalTimesNow, totalTimesLimit)) + continue + + canRandItemDict[itemID] = [weight, itemID] + + if libItemCount > len(canRandItemDict): + GameWorld.ErrLog("奖品库配置可选择奖品个数不够!无法刷新奖池! cfgID=%s,actNum=%s,libType=%s,layerNum=%s,libItemCount=%s > %s canRandItemDict(%s)" + % (cfgID, actNum, libType, layerNum, libItemCount, len(canRandItemDict), canRandItemDict)) + return + + refreshLibDict[libType] = [libItemCount, canRandItemDict] + + for libType, refreshInfo in refreshLibDict.items(): + libItemCount, canRandItemDict = refreshInfo + GameWorld.DebugLog(" 随机奖池物品: libType=%s,libItemCount=%s,canRandItemDict=%s, %s" % (libType, libItemCount, len(canRandItemDict), canRandItemDict)) + + if libType == Def_SuperLibType: + # 大奖直接重置,系统不生成,由玩家手动选择 + for num in xrange(libItemCount): + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_XianXiaMJAwardItemInfo % (actNum, libType, num), 0) + continue + + for num in xrange(libItemCount): + weightList = canRandItemDict.values() + randItemID = GameWorld.GetResultByWeightList(weightList) + canRandItemDict.pop(randItemID, None) + + posNum = 0 + itemInfoValue = randItemID * 100 + posNum + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_XianXiaMJAwardItemInfo % (actNum, libType, num), itemInfoValue) + GameWorld.DebugLog(" 随机生成奖品! libType=%s,num=%s,randItemID=%s" % (libType, num, randItemID)) + + playCount = 0 # 每层重置抽奖次数 + layerInfoValue = playCount * 100 + layerNum + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_XianXiaMJAwardLayerInfo % actNum, layerInfoValue) + GameWorld.DebugLog(" 刷新完成! playCount=%s,layerNum=%s,layerInfoValue=%s" % (playCount, layerNum, layerInfoValue)) + return True + +#// AA 17 仙匣秘境活动抽奖 #tagCMActXianXiaMJLottery +# +#struct tagCMActXianXiaMJLottery +#{ +# tagHead Head; +# BYTE ActNum; //活动编号 +# BYTE PosNum; //玩家点击的奖励位置编号,从1开始 +#}; +def OnActXianXiaMJLottery(index, clientData, tick): + curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) + actNum = clientData.ActNum + reqPosNum = clientData.PosNum + + GameWorld.DebugLog("仙匣秘境活动抽奖: actNum=%s,reqPosNum=%s" % (actNum, reqPosNum)) + + if reqPosNum <= 0: + return + + actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_XianXiaMJ, actNum) + if not actInfo.get(ShareDefine.ActKey_State): + GameWorld.DebugLog(" 非活动中!") + return + + cfgID = actInfo.get(ShareDefine.ActKey_CfgID) + ipyData = IpyGameDataPY.GetIpyGameData("ActXianXiaMJ", cfgID) + if not ipyData: + return + + templateID = ipyData.GetTemplateID() + if not templateID: + return + + actWorldLV = actInfo.get(ShareDefine.ActKey_WorldLV, 0) + awardIpyDataList = IpyGameDataPY.GetIpyGameDataList("ActXianXiaMJAward", templateID) + if not awardIpyDataList: + return + + costMoneyType, costMoneyValue = ipyData.GetUseMoneyInfo() + if not PlayerControl.HaveMoney(curPlayer, costMoneyType, costMoneyValue): + GameWorld.DebugLog(" 货币不足,无法抽奖! costMoneyType=%s,costMoneyValue(%s) > curMoneyValue(%s)" + % (costMoneyType, costMoneyValue, PlayerControl.GetMoney(curPlayer, costMoneyType))) + return + + layerInfoValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_XianXiaMJAwardLayerInfo % actNum) + playCount, layerNum = layerInfoValue / 100, layerInfoValue % 100 + + posNumMax = 0 + randLibItemDict = {} + for awardIpyData in awardIpyDataList: + libType = awardIpyData.GetAwardLibType() + libItemCount = awardIpyData.GetAwardItemCount() + unlockLimitTimes = awardIpyData.GetUnlockAwardLimitTimes() + libWeight = awardIpyData.GetAwardLibWeight() + posNumMax += libItemCount + + if libType == Def_SuperLibType: + for num in xrange(libItemCount): + itemInfoValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_XianXiaMJAwardItemInfo % (actNum, libType, num)) + if not itemInfoValue: + GameWorld.DebugLog(" 未选择大奖!无法抽奖! libType=%s,num=%s,itemInfoValue=%s" % (libType, num, itemInfoValue)) + return + + if unlockLimitTimes and playCount < unlockLimitTimes: + GameWorld.DebugLog(" 该库当前抽奖次数无法解锁! libType=%s,playCount(%s) < unlockLimitTimes(%s)" % (libType, playCount, unlockLimitTimes)) + continue + + awardTimesTotalInfo = awardIpyData.GetItemAwardTimesTotalInfo() + libItemDict = __GetXianXiaMJAwardLibItem(awardIpyData.GetLibItemInfo(), actWorldLV) + canRandItemList = [] + for num in xrange(libItemCount): + itemInfoValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_XianXiaMJAwardItemInfo % (actNum, libType, num)) + if not itemInfoValue: + return + + itemID, posNum = itemInfoValue / 100, itemInfoValue % 100 + if itemID not in libItemDict: + continue + + if posNum: + GameWorld.DebugLog(" 该奖品已被抽中! libType=%s,itemID=%s,posNum=%s" % (libType, itemID, posNum)) + if posNum == reqPosNum: + GameWorld.ErrLog(" 该位置已经有抽奖结果,无法重复选择抽奖! libType=%s,num=%s,itemInfoValue=%s,posNum=%s" + % (libType, num, itemInfoValue, posNum)) + return + continue + + itemCount, weight = libItemDict[itemID] + isAddTimes = (itemID in awardTimesTotalInfo) + canRandItemList.append([weight, itemID, itemCount, num, isAddTimes]) + + if canRandItemList: + randLibItemDict[libType] = [libWeight, libType, canRandItemList] + GameWorld.DebugLog(" 该库有机会抽到物品: libType=%s,libWeight=%s,canRandItemList=%s" % (libType, libWeight, canRandItemList)) + else: + GameWorld.DebugLog(" 该库物品已全被抽完: libType=%s,libWeight=%s,canRandItemList=%s" % (libType, libWeight, canRandItemList)) + + if reqPosNum > posNumMax: + GameWorld.DebugLog(" 请求位置异常,无法抽奖! reqPosNum(%s) > posNumMax(%s)" % (reqPosNum, posNumMax)) + return + + if not randLibItemDict: + GameWorld.DebugLog(" 没有可抽奖的奖品了,无法抽奖!") + return + + randLibInfo = GameWorld.GetResultByWeightList(randLibItemDict.values()) + if not randLibInfo: + return + libType, canRandItemList = randLibInfo + randItemInfo = GameWorld.GetResultByWeightList(canRandItemList) + if not randItemInfo: + return + itemID, itemCount, num, isAddTimes = randItemInfo + + # 扣除抽奖消耗环保值 + PlayerControl.PayMoney(curPlayer, costMoneyType, costMoneyValue, "ActXianXiaMJ") + + # 更新已抽中值 + updItemInfoValue = itemID * 100 + reqPosNum + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_XianXiaMJAwardItemInfo % (actNum, libType, num), updItemInfoValue) + + totalTimesNow = 0 + if isAddTimes: + totalTimesNow = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_XianXiaMJAwardItemTimes % (actNum, libType, itemID)) + 1 + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_XianXiaMJAwardItemTimes % (actNum, libType, itemID), totalTimesNow) + + playCount += 1 + layerInfoValue = playCount * 100 + layerNum + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_XianXiaMJAwardLayerInfo % actNum, layerInfoValue) + + GameWorld.DebugLog(" 抽中物品: layerNum=%s,libType=%s,itemID=%s,itemCount=%s,num=%s,reqPosNum=%s,updItemInfoValue=%s,totalTimesNow=%s,playCount=%s(%s)" + % (layerNum, libType, itemID, itemCount, num, reqPosNum, updItemInfoValue, totalTimesNow, playCount, layerInfoValue)) + + # 给物品 + isAuctionItem = 0 + itemList = [[itemID, itemCount, isAuctionItem]] + ItemControler.GivePlayerItemOrMail(curPlayer, itemList, event=["tagActXianXiaMJLottery", False, {}]) + + # 广播 + if libType == Def_SuperLibType: + PlayerControl.WorldNotify(0, "XianXiaMJ%s" % actNum, [curPlayer.GetPlayerName(), itemID, itemCount]) + + # 通知抽奖结果 + clientPack = ChPyNetSendPack.tagMCActXianXiaMJAwardItemResult() + clientPack.ActNum = actNum + clientPack.ItemLibType = libType + clientPack.ItemID = itemID + clientPack.ItemCount = itemCount + clientPack.PosNum = reqPosNum + clientPack.TotalTimesNow = totalTimesNow + NetPackCommon.SendFakePack(curPlayer, clientPack) + return + +def Sync_XianXiaMJActionInfo(curPlayer, actNum): + ## 通知活动信息 + + actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_XianXiaMJ, actNum) + if not actInfo.get(ShareDefine.ActKey_State): + return + + cfgID = actInfo.get(ShareDefine.ActKey_CfgID) + ipyData = IpyGameDataPY.GetIpyGameData("ActXianXiaMJ", cfgID) + if not ipyData: + return + + templateID = ipyData.GetTemplateID() + if not templateID: + return + costMoneyType, costMoneyValue = ipyData.GetUseMoneyInfo() + + actWorldLV = actInfo.get(ShareDefine.ActKey_WorldLV, 0) + openServerDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ServerDay) + 1 + + layerInfoValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_XianXiaMJAwardLayerInfo % actNum) + layerNum = layerInfoValue % 100 + + clientPack = ChPyNetSendPack.tagMCActXianXiaMJInfo() + clientPack.ActNum = actNum + clientPack.StartDate = GameWorld.GetOperationActionDateStr(ipyData.GetStartDate(), openServerDay) + clientPack.EndtDate = GameWorld.GetOperationActionDateStr(ipyData.GetEndDate(), openServerDay) + clientPack.LimitLV = ipyData.GetLVLimit() + clientPack.ResetType = ipyData.GetResetType() + clientPack.MoneyType = costMoneyType + clientPack.MoneyValue = costMoneyValue + clientPack.LayerNum = layerNum + clientPack.AwardItemList = [] # 奖池物品列表 + awardIpyDataList = IpyGameDataPY.GetIpyGameDataList("ActXianXiaMJAward", templateID) + if awardIpyDataList: + for awardIpyData in awardIpyDataList: + libType = awardIpyData.GetAwardLibType() + libItemCount = awardIpyData.GetAwardItemCount() + libItemDict = __GetXianXiaMJAwardLibItem(awardIpyData.GetLibItemInfo(), actWorldLV) + layerLimitInfo = awardIpyData.GetItemLayerLimitInfo() + awardTimesTotalInfo = awardIpyData.GetItemAwardTimesTotalInfo() + + # 奖池物品列表,已生成的,包含已选择的大奖物品 + for num in xrange(libItemCount): + itemInfoValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_XianXiaMJAwardItemInfo % (actNum, libType, num)) + if not itemInfoValue: + break + itemID, posNum = itemInfoValue / 100, itemInfoValue % 100 + if itemID not in libItemDict: + continue + libItemInfo = libItemDict[itemID] + + awardItem = ChPyNetSendPack.tagMCActXianXiaMJAwardItem() + awardItem.ItemLibType = libType + awardItem.ItemID = itemID + awardItem.ItemCount = libItemInfo[0] + awardItem.PosNum = posNum + awardItem.TotalTimesMax = awardTimesTotalInfo.get(itemID, 0) + awardItem.TotalTimesNow = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_XianXiaMJAwardItemTimes % (actNum, libType, itemID)) + awardItem.LayerLimit = layerLimitInfo.get(itemID, 0) + clientPack.AwardItemList.append(awardItem) + + # 大奖物品待选择库,全部同步 + if libType == Def_SuperLibType: + for itemID, libItemInfo in libItemDict.items(): + awardItem = ChPyNetSendPack.tagMCActXianXiaMJAwardItem() + awardItem.ItemLibType = libType + awardItem.ItemID = itemID + awardItem.ItemCount = libItemInfo[0] + awardItem.TotalTimesMax = awardTimesTotalInfo.get(itemID, 0) + awardItem.LayerLimit = layerLimitInfo.get(itemID, 0) + clientPack.SuperItemList.append(awardItem) + clientPack.SuperItemCount = len(clientPack.SuperItemList) + clientPack.SuperItemCanChooseCount = libItemCount + + clientPack.AwardItemCount = len(clientPack.AwardItemList) + NetPackCommon.SendFakePack(curPlayer, clientPack) + return + +def __GetXianXiaMJAwardLibItem(libItemInfo, actWorldLV): + ## 获取奖励库物品信息字典,支持按世界等级范围配置的格式 + keyList = libItemInfo.keys() + if not keyList: + return {} + if isinstance(keyList[0], tuple) and len(keyList[0]) == 2: + return GameWorld.GetDictValueByRangeKey(libItemInfo, actWorldLV, {}) + return libItemInfo + 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 159b497..5fdb102 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py @@ -78,6 +78,7 @@ import PlayerActCollectWords import PlayerActTotalRecharge import PlayerActGarbageSorting +import PlayerActXianXiaMJ import PlayerActRechargeRebateGold import PlayerActManyDayRecharge import PlayerActSingleRecharge @@ -1371,6 +1372,9 @@ elif actionName == ShareDefine.OperationActionName_GarbageSorting: PlayerActGarbageSorting.RefreshGarbageSortingActionInfo(actNum) + elif actionName == ShareDefine.OperationActionName_XianXiaMJ: + PlayerActXianXiaMJ.RefreshXianXiaMJActionInfo(actNum) + elif actionName == ShareDefine.OperationActionName_ManyDayRecharge: PlayerActManyDayRecharge.RefreshManyDayRechargeActionInfo(actNum) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py index 680b7c2..edf8b61 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py @@ -237,6 +237,7 @@ OperationActionName_Turntable = "ActTurntable" # 转盘活动 OperationActionName_HorsePetFeast = "ActHorsePetFeast" # 骑宠盛宴活动 OperationActionName_GarbageSorting = "ActGarbageSorting" # 垃圾分类活动 +OperationActionName_XianXiaMJ = "ActXianXiaMJ" # 仙匣秘境活动 #节日活动类型列表 - 该类型无视开服天,日期到了就开启 FeastOperationActionNameList = [OperationActionName_FeastWeekParty, OperationActionName_FeastRedPacket, OperationActionName_RechargeRebateGold, OperationActionName_GrowupBuy, @@ -255,6 +256,7 @@ OperationActionName_DailyGiftbag, OperationActionName_SingleRecharge, OperationActionName_CollectWords, OperationActionName_ManyDayRecharge, OperationActionName_Turntable, OperationActionName_HorsePetFeast, OperationActionName_GarbageSorting, + OperationActionName_XianXiaMJ, ] + FeastOperationActionNameList #需要记录开启活动时的世界等级的运营活动 NeedWorldLVOperationActNameList = [OperationActionName_FairyCeremony, OperationActionName_WishingWell, @@ -265,7 +267,7 @@ OperationActionName_DailyGiftbag, OperationActionName_GrowupBuy, OperationActionName_WeekParty, OperationActionName_Turntable, OperationActionName_CollectWords, OperationActionName_GarbageSorting, - OperationActionName_FeastLogin, + OperationActionName_FeastLogin, OperationActionName_XianXiaMJ, OperationActionName_FeastWish, OperationActionName_FeastTravel, OperationActionName_ManyDayRecharge, OperationActionName_SingleRecharge, ] @@ -276,6 +278,7 @@ OperationActionName_SpringSale, OperationActionName_FlashSale, OperationActionName_ManyDayRecharge, OperationActionName_SingleRecharge, OperationActionName_Turntable, OperationActionName_HorsePetFeast, OperationActionName_GarbageSorting, + OperationActionName_XianXiaMJ, ] #跨服运营活动表名定义 @@ -955,7 +958,8 @@ CDBPlayerRefresh_ExAttr17, # ExAttr17 CDBPlayerRefresh_BossActScore, # boss 活动积分 230 CDBPlayerRefresh_FuncSysPrivilege, # 功能特权令 231 -) = range(146, 232) +CDBPlayerRefresh_Environment, # 环保值 232 +) = range(146, 233) TYPE_Price_Gold_Paper_Money = 5 # 金钱类型,(先用礼券,再用金子) TYPE_Price_Family_Contribution = 6 # 战盟贡献度(活跃度转换得来) @@ -975,6 +979,7 @@ TYPE_Price_SoulSplinters = 29 # 聚魂碎片 TYPE_Price_SoulCore = 30 # 核心环 TYPE_Price_FuncSysPrivilege = 31 # 功能系统特权令 +TYPE_Price_Environment = 32 # 环保值 #以下是旧的金钱类型 TYPE_Price_Magic_Integral = 101 # 魔方寻宝积分 @@ -999,6 +1004,7 @@ TYPE_Price_Honor:CDBPlayerRefresh_Honor, TYPE_Price_BossActScore:CDBPlayerRefresh_BossActScore, TYPE_Price_FuncSysPrivilege:CDBPlayerRefresh_FuncSysPrivilege, + TYPE_Price_Environment:CDBPlayerRefresh_Environment, } # 高效战斗状态 -- Gitblit v1.8.0