9719 【越南】【BT7】【主干】跨服全民充值
# Conflicts:
# ServerPython/CoreServerGroup/GameServer/Script/Player/ChPlayer.py
# ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
| | |
| | | list SuperItemWeightInfo; //大奖随机权重信息 [[权重,物品ID,个数,是否拍品,价值货币类型,货币值], ...]
|
| | | };
|
| | |
|
| | | //跨服全民充值时间表
|
| | |
|
| | | struct tagCrossActAllRecharge
|
| | | {
|
| | | DWORD _CfgID; //配置ID
|
| | | char ActGroupName; //活动组名(同组活动的名字需相同)
|
| | | BYTE ZoneID; //组内分组编号
|
| | | list ServerIDRangeList; //活动的账号服务器ID范围列表 [[serverIDA, serverIDB], ...]
|
| | | char StartDate; //开启日期
|
| | | char EndDate; //结束日期
|
| | | dict NotifyInfoStart; //全服提示信息 - 相对开始时间
|
| | | dict NotifyInfoEnd; //全服提示信息 - 相对结束时间
|
| | | list NotifyInfoLoop; //全服提示信息 - 循环广播[循环分钟, 广播key, [广播参数列表可选]]
|
| | | list TemplateIDList; //模板ID列表
|
| | | };
|
| | |
|
| | | //跨服全民充值模板表
|
| | |
|
| | | struct tagCrossActAllRechargeTemplate
|
| | | {
|
| | | DWORD _TemplateID; //模板ID
|
| | | DWORD CTGNeed; //全民充值RMB
|
| | | WORD NeedPlayerCount; //所需充值达到该档玩家数
|
| | | BYTE AwardIndex; //奖励记录索引,从0开始,同个模板不可重复,不可变更
|
| | | list AwardItemList; //奖励物品列表[[物品ID,个数,是否拍品], ...]
|
| | | };
|
| | |
|
| | | //跨服充值排行活动时间表
|
| | |
|
| | | struct tagCrossActCTGBillboard
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # AC 13 跨服全民充值活动信息 #tagGCCrossActAllRechargeInfo
|
| | |
|
| | | class tagGCCrossActAllRechargeItem(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("ItemID", c_int), |
| | | ("ItemCount", c_ushort), |
| | | ("IsBind", c_ubyte), # 是否拍品
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | return
|
| | |
|
| | | def ReadData(self, stringData, _pos=0, _len=0):
|
| | | self.Clear()
|
| | | memmove(addressof(self), stringData[_pos:], self.GetLength())
|
| | | return _pos + self.GetLength()
|
| | |
|
| | | def Clear(self):
|
| | | self.ItemID = 0
|
| | | self.ItemCount = 0
|
| | | self.IsBind = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagGCCrossActAllRechargeItem)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// AC 13 跨服全民充值活动信息 //tagGCCrossActAllRechargeInfo:
|
| | | ItemID:%d,
|
| | | ItemCount:%d,
|
| | | IsBind:%d
|
| | | '''\
|
| | | %(
|
| | | self.ItemID,
|
| | | self.ItemCount,
|
| | | self.IsBind
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | class tagGCCrossActAllRechargeAward(Structure):
|
| | | AwardIndex = 0 #(BYTE AwardIndex)// 奖励索引 0~31
|
| | | NeedRMB = 0 #(DWORD NeedRMB)// 所需全民充值RMB
|
| | | NeedPlayerCount = 0 #(WORD NeedPlayerCount)// 所需充值达到该档玩家数
|
| | | NowPlayerCount = 0 #(WORD NowPlayerCount)// 当前充值达到该档玩家数
|
| | | AwardItemCount = 0 #(BYTE AwardItemCount)// 奖励物品数
|
| | | AwardItemList = list() #(vector<tagGCCrossActAllRechargeItem> AwardItemList)// 奖励物品信息
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | self.AwardIndex,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.NeedRMB,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.NeedPlayerCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.NowPlayerCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.AwardItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.AwardItemCount):
|
| | | temAwardItemList = tagGCCrossActAllRechargeItem()
|
| | | _pos = temAwardItemList.ReadData(_lpData, _pos)
|
| | | self.AwardItemList.append(temAwardItemList)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.AwardIndex = 0
|
| | | self.NeedRMB = 0
|
| | | self.NeedPlayerCount = 0
|
| | | self.NowPlayerCount = 0
|
| | | self.AwardItemCount = 0
|
| | | self.AwardItemList = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += 1
|
| | | length += 4
|
| | | length += 2
|
| | | length += 2
|
| | | length += 1
|
| | | for i in range(self.AwardItemCount):
|
| | | length += self.AwardItemList[i].GetLength()
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteBYTE(data, self.AwardIndex)
|
| | | data = CommFunc.WriteDWORD(data, self.NeedRMB)
|
| | | data = CommFunc.WriteWORD(data, self.NeedPlayerCount)
|
| | | data = CommFunc.WriteWORD(data, self.NowPlayerCount)
|
| | | data = CommFunc.WriteBYTE(data, self.AwardItemCount)
|
| | | for i in range(self.AwardItemCount):
|
| | | data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer())
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | AwardIndex:%d,
|
| | | NeedRMB:%d,
|
| | | NeedPlayerCount:%d,
|
| | | NowPlayerCount:%d,
|
| | | AwardItemCount:%d,
|
| | | AwardItemList:%s
|
| | | '''\
|
| | | %(
|
| | | self.AwardIndex,
|
| | | self.NeedRMB,
|
| | | self.NeedPlayerCount,
|
| | | self.NowPlayerCount,
|
| | | self.AwardItemCount,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | class tagGCCrossActAllRechargeInfo(Structure):
|
| | | Head = tagHead()
|
| | | ServerInfoLen = 0 #(BYTE ServerInfoLen)
|
| | | ServerIDRangeInfo = "" #(String ServerIDRangeInfo)//开放该活动的服务器ID范围列表,json格式 [[IDA, IDB], ...], [] 为全服
|
| | | StartDate = "" #(char StartDate[10])// 开始日期 y-m-d
|
| | | EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d
|
| | | AwardCount = 0 #(BYTE AwardCount)
|
| | | AwardList = list() #(vector<tagGCCrossActAllRechargeAward> AwardList)// 奖励档次信息
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xAC
|
| | | self.Head.SubCmd = 0x13
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | _pos = self.Head.ReadData(_lpData, _pos)
|
| | | self.ServerInfoLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.ServerIDRangeInfo,_pos = CommFunc.ReadString(_lpData, _pos,self.ServerInfoLen)
|
| | | self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
|
| | | self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
|
| | | self.AwardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.AwardCount):
|
| | | temAwardList = tagGCCrossActAllRechargeAward()
|
| | | _pos = temAwardList.ReadData(_lpData, _pos)
|
| | | self.AwardList.append(temAwardList)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xAC
|
| | | self.Head.SubCmd = 0x13
|
| | | self.ServerInfoLen = 0
|
| | | self.ServerIDRangeInfo = ""
|
| | | self.StartDate = ""
|
| | | self.EndtDate = ""
|
| | | self.AwardCount = 0
|
| | | self.AwardList = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 1
|
| | | length += len(self.ServerIDRangeInfo)
|
| | | length += 10
|
| | | length += 10
|
| | | length += 1
|
| | | for i in range(self.AwardCount):
|
| | | length += self.AwardList[i].GetLength()
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
|
| | | data = CommFunc.WriteBYTE(data, self.ServerInfoLen)
|
| | | data = CommFunc.WriteString(data, self.ServerInfoLen, self.ServerIDRangeInfo)
|
| | | data = CommFunc.WriteString(data, 10, self.StartDate)
|
| | | data = CommFunc.WriteString(data, 10, self.EndtDate)
|
| | | data = CommFunc.WriteBYTE(data, self.AwardCount)
|
| | | for i in range(self.AwardCount):
|
| | | data = CommFunc.WriteString(data, self.AwardList[i].GetLength(), self.AwardList[i].GetBuffer())
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | ServerInfoLen:%d,
|
| | | ServerIDRangeInfo:%s,
|
| | | StartDate:%s,
|
| | | EndtDate:%s,
|
| | | AwardCount:%d,
|
| | | AwardList:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.ServerInfoLen,
|
| | | self.ServerIDRangeInfo,
|
| | | self.StartDate,
|
| | | self.EndtDate,
|
| | | self.AwardCount,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagGCCrossActAllRechargeInfo=tagGCCrossActAllRechargeInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossActAllRechargeInfo.Head.Cmd,m_NAtagGCCrossActAllRechargeInfo.Head.SubCmd))] = m_NAtagGCCrossActAllRechargeInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # AC 12 跨服运营活动结束 # tagGCCrossActEnd
|
| | |
|
| | | class tagGCCrossActEnd(Structure):
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # AA 34 跨服全民充值活动玩家信息 #tagMCCrossActAllRechargePlayerInfo
|
| | |
|
| | | class tagMCCrossActAllRechargePlayerInfo(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("CTGRMBTotal", c_int), # 活动已累计充值RMB
|
| | | ("AwardRecord", c_int), # 奖励记录,根据奖励索引位或运算判断是否已领取
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Cmd = 0xAA
|
| | | self.SubCmd = 0x34
|
| | | 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 = 0x34
|
| | | self.CTGRMBTotal = 0
|
| | | self.AwardRecord = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagMCCrossActAllRechargePlayerInfo)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// AA 34 跨服全民充值活动玩家信息 //tagMCCrossActAllRechargePlayerInfo:
|
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | CTGRMBTotal:%d,
|
| | | AwardRecord:%d
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.CTGRMBTotal,
|
| | | self.AwardRecord
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagMCCrossActAllRechargePlayerInfo=tagMCCrossActAllRechargePlayerInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCrossActAllRechargePlayerInfo.Cmd,m_NAtagMCCrossActAllRechargePlayerInfo.SubCmd))] = m_NAtagMCCrossActAllRechargePlayerInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # AA 25 每日礼包活动信息 #tagMCDailyGiftbagInfo
|
| | |
|
| | | class tagMCDailyGiftbagItem(Structure):
|
New file |
| | |
| | | #!/usr/bin/python
|
| | | # -*- coding: GBK -*-
|
| | | #-------------------------------------------------------------------------------
|
| | | #
|
| | | ##@package CrossActAllRecharge
|
| | | #
|
| | | # @todo:跨服全民充值
|
| | | # @author hxp
|
| | | # @date 2022-10-11
|
| | | # @version 1.0
|
| | | #
|
| | | # 详细描述: 跨服全民充值
|
| | | #
|
| | | #-------------------------------------------------------------------------------
|
| | | #"""Version = 2022-10-11 19:00"""
|
| | | #-------------------------------------------------------------------------------
|
| | |
|
| | | import PyGameData
|
| | | import ShareDefine
|
| | | import CrossRealmMsg
|
| | | import DataRecordPack
|
| | | import CrossActionControl
|
| | | import ChPyNetSendPack
|
| | | import NetPackCommon
|
| | | import IpyGameDataPY
|
| | | import GameWorld
|
| | |
|
| | | Def_RecType_CrossActAllRecharge = ShareDefine.Def_UniversalGameRecType_CrossActAllRecharge
|
| | | '''
|
| | | 跨服全民充值活动信息
|
| | | ShareDefine.Def_UniversalGameRecType_CrossActAllRecharge
|
| | | value1:zoneID 分区ID
|
| | | value2:playerID 玩家ID
|
| | | value3:totalRMB 总充值
|
| | | value4:cfgID cfgID
|
| | | StrValue3: 账号
|
| | | '''
|
| | | def GetRecZoneID(recData): return recData.GetValue1()
|
| | | def SetRecZoneID(recData, zoneID): return recData.SetValue1(zoneID)
|
| | | def GetRecPlayerID(recData): return recData.GetValue2()
|
| | | def SetRecPlayerID(recData, playerID): return recData.SetValue2(playerID)
|
| | | def GetRecTotalRecharge(recData): return recData.GetValue3()
|
| | | def SetRecTotalRecharge(recData, totalRMB): return recData.SetValue3(totalRMB)
|
| | | def GetRecCfgID(recData): return recData.GetValue4()
|
| | | def SetRecCfgID(recData, cfgID): return recData.SetValue4(cfgID)
|
| | | def GetRecAccID(recData): return recData.GetStrValue3()
|
| | | def SetRecAccID(recData, accID): return recData.SetStrValue3(accID)
|
| | |
|
| | |
|
| | | def OnPlayerLogin(curPlayer):
|
| | | if GameWorld.IsCrossServer():
|
| | | return
|
| | | Sync_CrossActAllRechargeInfo(curPlayer)
|
| | | return
|
| | |
|
| | | def Sync_AllRechargeDataToClientServer(serverGroupID=0):
|
| | | GameWorld.Log("同步给子服对应的跨服全民充值信息: syncServerGroupID=%s" % (serverGroupID))
|
| | | |
| | | allRechargeInfo = {} # 全民充值信息
|
| | | universalRecMgr = GameWorld.GetUniversalRecMgr()
|
| | | recDataList = universalRecMgr.GetTypeList(Def_RecType_CrossActAllRecharge)
|
| | | for index in range(recDataList.Count()):
|
| | | recData = recDataList.At(index)
|
| | | cfgID = GetRecCfgID(recData)
|
| | | zoneID = GetRecZoneID(recData)
|
| | | playerID = GetRecPlayerID(recData)
|
| | | totalRecharge = GetRecTotalRecharge(recData)
|
| | | |
| | | key = (cfgID, zoneID)
|
| | | if key not in allRechargeInfo:
|
| | | allRechargeInfo[key] = {}
|
| | | zoneInfo = allRechargeInfo[key]
|
| | | zoneInfo[playerID] = totalRecharge
|
| | | |
| | | dataMsg = {"syncType":"All", "allRechargeInfo":allRechargeInfo}
|
| | | CrossRealmMsg.SendMsgToClientServer(ShareDefine.CrossServerMsg_ActAllRechargeInfo, dataMsg)
|
| | | return
|
| | |
|
| | | def OnActIDChange(ipyData, state):
|
| | | ## 活动状态变更
|
| | | |
| | | cfgID = ipyData.GetCfgID()
|
| | | zoneID = ipyData.GetZoneID()
|
| | | |
| | | if not state:
|
| | | actDataInfo = {}
|
| | | universalRecMgr = GameWorld.GetUniversalRecMgr()
|
| | | recDataList = universalRecMgr.GetTypeList(Def_RecType_CrossActAllRecharge)
|
| | | for index in range(recDataList.Count()):
|
| | | recData = recDataList.At(index)
|
| | | recCfgID = GetRecCfgID(recData)
|
| | | recZoneID = GetRecZoneID(recData)
|
| | | if recCfgID != cfgID or recZoneID != zoneID:
|
| | | continue
|
| | | |
| | | playerID = GetRecPlayerID(recData)
|
| | | totalRecharge = GetRecTotalRecharge(recData)
|
| | | accID = GetRecAccID(recData)
|
| | | |
| | | key = (recCfgID, recZoneID)
|
| | | if key not in actDataInfo:
|
| | | actDataInfo[key] = []
|
| | | zoneDataList = actDataInfo[key]
|
| | | zoneDataList.append([totalRecharge, playerID, accID])
|
| | | |
| | | # 输出流向
|
| | | for key, zoneDataList in actDataInfo.items():
|
| | | recCfgID, recZoneID = key
|
| | | zoneDataList.sort(reverse=True)
|
| | | GameWorld.Log("跨服全民充值活动结束! CfgID=%s,ZoneID=%s,DataCount=%s" % (recCfgID, recZoneID, len(zoneDataList)))
|
| | | for dataInfo in zoneDataList:
|
| | | totalRecharge, playerID, accID = dataInfo
|
| | | drDataDict = {"CfgID":recCfgID, "ZoneID":recZoneID, "TotalRecharge":totalRecharge, "PlayerID":playerID, "AccID":accID}
|
| | | DataRecordPack.SendEventPack("CrossActAllRecharge", drDataDict)
|
| | | |
| | | return
|
| | | |
| | | universalRecMgr = GameWorld.GetUniversalRecMgr()
|
| | | recDataList = universalRecMgr.GetTypeList(Def_RecType_CrossActAllRecharge)
|
| | | delDataCount = 0
|
| | | for index in range(recDataList.Count())[::-1]:
|
| | | recData = recDataList.At(index)
|
| | | recZoneID = GetRecZoneID(recData)
|
| | | if recZoneID != zoneID:
|
| | | continue
|
| | | recDataList.Delete(index)
|
| | | delDataCount += 1
|
| | | |
| | | GameWorld.Log("重置跨服全民充值活动信息! cfgID=%s,ZoneID=%s,DataCount=%s" % (cfgID, zoneID, delDataCount))
|
| | | dataMsg = {"syncType":"New", "cfgID":cfgID, "zoneID":zoneID}
|
| | | CrossRealmMsg.SendMsgToClientServer(ShareDefine.CrossServerMsg_ActAllRechargeInfo, dataMsg)
|
| | | return
|
| | |
|
| | | def ClientServerMsg_ActAllRechargeValue(serverGroupID, msgData):
|
| | | ## 收到子服同步信息 - 玩家充值额度
|
| | | |
| | | cfgID = msgData["cfgID"]
|
| | | zoneID = msgData["zoneID"]
|
| | | playerID = msgData["playerID"]
|
| | | totalRMB = msgData["totalRMB"]
|
| | | accID = msgData["accID"]
|
| | | |
| | | crossActInfoDict = CrossActionControl.GetCrossActInfoDict()
|
| | | curActInfoDict = crossActInfoDict.get(ShareDefine.CrossActName_AllRecharge, {})
|
| | | if cfgID not in curActInfoDict:
|
| | | return
|
| | | actInfo = curActInfoDict[cfgID]
|
| | | if not actInfo[ShareDefine.ActKey_State]:
|
| | | return
|
| | | ipyDataDict = actInfo.get(ShareDefine.ActKey_IpyDataInfo, {})
|
| | | if not ipyDataDict:
|
| | | return
|
| | | ipyZoneID = ipyDataDict.get("ZoneID", 0)
|
| | | if zoneID != ipyZoneID:
|
| | | return
|
| | | |
| | | findRec = None
|
| | | universalRecMgr = GameWorld.GetUniversalRecMgr()
|
| | | recDataList = universalRecMgr.GetTypeList(Def_RecType_CrossActAllRecharge)
|
| | | for index in range(recDataList.Count()):
|
| | | recData = recDataList.At(index)
|
| | | recCfgID = GetRecCfgID(recData)
|
| | | recZoneID = GetRecZoneID(recData)
|
| | | recPlayerID = GetRecPlayerID(recData)
|
| | | if recCfgID != cfgID or recZoneID != zoneID or recPlayerID != playerID:
|
| | | continue
|
| | | findRec = recData
|
| | | totalRMBBefore = GetRecTotalRecharge(recData)
|
| | | SetRecTotalRecharge(recData, totalRMB)
|
| | | GameWorld.Log("跨服全民充值玩家充值额度更新: cfgID=%s,zoneID=%s,totalRMBBefore=%s,totalRMB=%s,accID=%s" |
| | | % (cfgID, zoneID, totalRMBBefore, totalRMB, accID), playerID)
|
| | | break
|
| | | |
| | | if not findRec:
|
| | | recData = recDataList.AddRec()
|
| | | SetRecZoneID(recData, zoneID)
|
| | | SetRecPlayerID(recData, playerID)
|
| | | SetRecTotalRecharge(recData, totalRMB)
|
| | | SetRecCfgID(recData, cfgID)
|
| | | SetRecAccID(recData, accID)
|
| | | GameWorld.Log("跨服全民充值玩家充值额度新增: cfgID=%s,zoneID=%s,totalRMB=%s,accID=%s" |
| | | % (cfgID, zoneID, totalRMB, accID), playerID)
|
| | | |
| | | dataMsg = {"syncType":"PlayerAllRechargeValue", "cfgID":cfgID, "zoneID":zoneID, "playerID":playerID, |
| | | "totalRMB":totalRMB, "accID":accID}
|
| | | CrossRealmMsg.SendMsgToClientServer(ShareDefine.CrossServerMsg_ActAllRechargeInfo, dataMsg)
|
| | | return
|
| | |
|
| | | def CrossServerMsg_ActAllRechargeInfo(msgData):
|
| | | |
| | | syncType = msgData.get("syncType")
|
| | | |
| | | # 所有数据同步
|
| | | if syncType == "All":
|
| | | allRechargeInfo = msgData["allRechargeInfo"]
|
| | | for key, zoneInfo in allRechargeInfo.items():
|
| | | PyGameData.g_crossActAllRechargeInfo[key] = zoneInfo
|
| | | Sync_CrossActAllRechargeInfo(syncKey=key)
|
| | | return
|
| | | |
| | | # 新活动
|
| | | if syncType == "New":
|
| | | cfgID = msgData["cfgID"]
|
| | | zoneID = msgData["zoneID"]
|
| | | for key in PyGameData.g_crossActAllRechargeInfo.keys():
|
| | | if zoneID == key[1]:
|
| | | PyGameData.g_crossActAllRechargeInfo.pop(key)
|
| | | newKey = (cfgID, zoneID)
|
| | | PyGameData.g_crossActAllRechargeInfo[newKey] = {}
|
| | | Sync_CrossActAllRechargeInfo(syncKey=newKey)
|
| | | return
|
| | | |
| | | # 玩家充值总额更新
|
| | | if syncType == "PlayerAllRechargeValue":
|
| | | cfgID = msgData["cfgID"]
|
| | | zoneID = msgData["zoneID"] |
| | | playerID = msgData["playerID"]
|
| | | totalRMB = msgData["totalRMB"] |
| | | #accID = msgData["accID"]
|
| | | key = (cfgID, zoneID)
|
| | | if key not in PyGameData.g_crossActAllRechargeInfo:
|
| | | PyGameData.g_crossActAllRechargeInfo[key] = {}
|
| | | zoneInfo = PyGameData.g_crossActAllRechargeInfo[key]
|
| | | playerRMB = zoneInfo.get(playerID, 0)
|
| | | zoneInfo[playerID] = totalRMB
|
| | | |
| | | actInfoDict = PyGameData.g_crossActInfoDict.get(ShareDefine.CrossActName_AllRecharge, {})
|
| | | actInfo = actInfoDict.get(cfgID, {})
|
| | | state = actInfo.get(ShareDefine.ActKey_State, 0)
|
| | | ipyDataDict = actInfo.get(ShareDefine.ActKey_IpyDataInfo, {})
|
| | | if not state or zoneID != ipyDataDict.get("ZoneID"):
|
| | | return
|
| | | templateID = actInfo.get(ShareDefine.ActKey_TemplateID, 0)
|
| | | ipyDataList = IpyGameDataPY.GetIpyGameDataList("CrossActAllRechargeTemplate", templateID)
|
| | | if not ipyDataList:
|
| | | return
|
| | | |
| | | isSync = False
|
| | | for ipyData in ipyDataList:
|
| | | needRMB = ipyData.GetCTGNeed()
|
| | | if playerRMB < needRMB and totalRMB >= needRMB:
|
| | | isSync = True
|
| | | break
|
| | | |
| | | if isSync:
|
| | | Sync_CrossActAllRechargeInfo(syncKey=key)
|
| | | |
| | | return
|
| | | |
| | | return
|
| | |
|
| | |
|
| | | def MapServer_CrossActAllRecharge(curPlayer, msgList):
|
| | | ## |
| | | |
| | | playerID = curPlayer.GetPlayerID()
|
| | | msgType = msgList[0]
|
| | | msgData = msgList[1]
|
| | | |
| | | if msgType == "AllRechargeRMB":
|
| | | cfgID, zoneID, totalRMB = msgData
|
| | | actInfo = CrossActionControl.GetPlayerCrossActInfo(curPlayer, ShareDefine.CrossActName_AllRecharge)
|
| | | if not actInfo.get(ShareDefine.ActKey_State):
|
| | | return
|
| | | key = (cfgID, zoneID)
|
| | | zoneInfo = PyGameData.g_crossActAllRechargeInfo.get(key, {})
|
| | | playerRMB = zoneInfo.get(playerID, 0)
|
| | | if playerRMB == totalRMB:
|
| | | return
|
| | | |
| | | # 同步跨服服务器
|
| | | dataMsg = {"cfgID":cfgID, "zoneID":zoneID, "playerID":playerID, "totalRMB":totalRMB, "accID":curPlayer.GetAccID()}
|
| | | CrossRealmMsg.SendMsgToCrossServer(ShareDefine.ClientServerMsg_ActAllRechargeValue, dataMsg)
|
| | | |
| | | if msgType == "AllRechargeAward":
|
| | | cfgID, zoneID, awardIndex = msgData
|
| | | GameWorld.Log("跨服全民充值玩家领奖: cfgID=%s,zoneID=%s,awardIndex=%s" % (cfgID, zoneID, awardIndex), playerID)
|
| | | actInfo = CrossActionControl.GetPlayerCrossActInfo(curPlayer, ShareDefine.CrossActName_AllRecharge)
|
| | | if not actInfo.get(ShareDefine.ActKey_State):
|
| | | return
|
| | | |
| | | templateID = actInfo.get(ShareDefine.ActKey_TemplateID, 0)
|
| | | ipyDataList = IpyGameDataPY.GetIpyGameDataList("CrossActAllRechargeTemplate", templateID)
|
| | | if not ipyDataList:
|
| | | return
|
| | | |
| | | zoneInfo = PyGameData.g_crossActAllRechargeInfo.get((cfgID, zoneID), {})
|
| | | for ipyData in ipyDataList:
|
| | | if awardIndex != ipyData.GetAwardIndex():
|
| | | continue
|
| | | ctgNeed = ipyData.GetCTGNeed()
|
| | | needPlayerCount = ipyData.GetNeedPlayerCount()
|
| | | nowPlayerCount = 0
|
| | | for totalRMB in zoneInfo.values():
|
| | | if totalRMB >= ctgNeed:
|
| | | nowPlayerCount += 1
|
| | | |
| | | if nowPlayerCount < needPlayerCount:
|
| | | GameWorld.Log("所需全民充值玩家数不足,无法领奖: cfgID=%s,zoneID=%s,awardIndex=%s,ctgNeed=%s,nowPlayerCount=%s < %s" |
| | | % (cfgID, zoneID, awardIndex, ctgNeed, nowPlayerCount, needPlayerCount), playerID)
|
| | | return
|
| | | |
| | | awardItemList = ipyData.GetAwardItemList()
|
| | | sysMsg = str([msgType, awardIndex, awardItemList])
|
| | | curPlayer.MapServer_QueryPlayerResult(0, 0, "CrossActAllRecharge", sysMsg, len(sysMsg))
|
| | | return
|
| | | |
| | | return
|
| | |
|
| | |
|
| | | def Sync_CrossActAllRechargeInfo(curPlayer=None, syncKey=None):
|
| | | ## 通知活动信息
|
| | | |
| | | if curPlayer:
|
| | | actInfo = CrossActionControl.GetPlayerCrossActInfo(curPlayer, ShareDefine.CrossActName_AllRecharge)
|
| | | # 活动中同步活动信息
|
| | | if not actInfo.get(ShareDefine.ActKey_State):
|
| | | return
|
| | | cfgID = actInfo.get(ShareDefine.ActKey_CfgID)
|
| | | ipyDataDict = actInfo.get(ShareDefine.ActKey_IpyDataInfo, {})
|
| | | if not ipyDataDict:
|
| | | return
|
| | | zoneID = ipyDataDict.get("ZoneID")
|
| | | if not cfgID or not zoneID:
|
| | | return
|
| | | |
| | | elif syncKey and len(syncKey) == 2:
|
| | | cfgID, zoneID = syncKey
|
| | | actInfoDict = PyGameData.g_crossActInfoDict.get(ShareDefine.CrossActName_AllRecharge, {})
|
| | | if not actInfoDict:
|
| | | return
|
| | | actInfo = actInfoDict.get(cfgID, {})
|
| | | if not actInfo:
|
| | | return
|
| | | if not actInfo.get(ShareDefine.ActKey_State, 0):
|
| | | return
|
| | | ipyDataDict = actInfo.get(ShareDefine.ActKey_IpyDataInfo, {})
|
| | | if not ipyDataDict:
|
| | | return
|
| | | if not cfgID or zoneID != ipyDataDict.get("ZoneID"):
|
| | | return
|
| | | else:
|
| | | return
|
| | | |
| | | templateID = actInfo.get(ShareDefine.ActKey_TemplateID, 0)
|
| | | ipyDataList = IpyGameDataPY.GetIpyGameDataList("CrossActAllRechargeTemplate", templateID)
|
| | | if not ipyDataList:
|
| | | return
|
| | | |
| | | zoneInfo = PyGameData.g_crossActAllRechargeInfo.get((cfgID, zoneID), {})
|
| | | |
| | | actPack = ChPyNetSendPack.tagGCCrossActAllRechargeInfo()
|
| | | actPack.ServerIDRangeInfo = str(actInfo.get(ShareDefine.ActKey_ServerIDRangeList, []))
|
| | | actPack.ServerInfoLen = len(actPack.ServerIDRangeInfo)
|
| | | actPack.StartDate = ipyDataDict.get("StartDate", "")
|
| | | actPack.EndtDate = ipyDataDict.get("EndDate", "")
|
| | | actPack.AwardList = []
|
| | | |
| | | for ipyData in ipyDataList:
|
| | | award = ChPyNetSendPack.tagGCCrossActAllRechargeAward()
|
| | | award.AwardIndex = ipyData.GetAwardIndex()
|
| | | award.NeedRMB = ipyData.GetCTGNeed()
|
| | | award.NeedPlayerCount = ipyData.GetNeedPlayerCount()
|
| | | award.AwardItemList = []
|
| | | for itemID, itemCount, isAuctionItem in ipyData.GetAwardItemList():
|
| | | item = ChPyNetSendPack.tagGCCrossActAllRechargeItem()
|
| | | item.ItemID = itemID
|
| | | item.ItemCount = itemCount
|
| | | item.IsBind = isAuctionItem
|
| | | award.AwardItemList.append(item)
|
| | | award.AwardItemCount = len(award.AwardItemList)
|
| | | |
| | | nowPlayerCount = 0
|
| | | for totalRMB in zoneInfo.values():
|
| | | if totalRMB >= ipyData.GetCTGNeed():
|
| | | nowPlayerCount += 1
|
| | | award.NowPlayerCount = nowPlayerCount
|
| | | |
| | | actPack.AwardList.append(award)
|
| | | actPack.AwardCount = len(actPack.AwardList)
|
| | | |
| | | if curPlayer:
|
| | | NetPackCommon.SendFakePack(curPlayer, actPack)
|
| | | else:
|
| | | playerManager = GameWorld.GetPlayerManager()
|
| | | for i in xrange(playerManager.GetActivePlayerCount()):
|
| | | curPlayer = playerManager.GetActivePlayerAt(i)
|
| | | if curPlayer == None or not curPlayer.GetInitOK():
|
| | | continue
|
| | | |
| | | actInfo = CrossActionControl.GetPlayerCrossActInfo(curPlayer, ShareDefine.CrossActName_AllRecharge)
|
| | | state = actInfo.get(ShareDefine.ActKey_State)
|
| | | pCfgID = actInfo.get(ShareDefine.ActKey_CfgID)
|
| | | ipyDataDict = actInfo.get(ShareDefine.ActKey_IpyDataInfo, {})
|
| | | pZoneID = ipyDataDict.get("ZoneID")
|
| | | if not state or pCfgID != cfgID or pZoneID != zoneID:
|
| | | continue
|
| | | |
| | | NetPackCommon.SendFakePack(curPlayer, actPack)
|
| | | |
| | | return
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
| | | if actName == ShareDefine.CrossActName_LuckyCloudBuy:
|
| | | import CrossLuckyCloudBuy
|
| | | CrossLuckyCloudBuy.OnLuckyCloudBuyReset(ipyData, state)
|
| | | elif actName == ShareDefine.CrossActName_AllRecharge:
|
| | | import CrossActAllRecharge
|
| | | CrossActAllRecharge.OnActIDChange(ipyData, state)
|
| | | |
| | | return
|
| | |
|
| | | def Sync_CrossActInfoToClientServer(serverGroupID=0):
|
| | |
| | |
|
| | | return
|
| | |
|
| | | def GetPlayerCrossActInfo(curPlayer, actName):
|
| | | ## 获取跨服玩家对应的跨服活动信息
|
| | | actInfoDict = PyGameData.g_crossActInfoDict.get(actName, {})
|
| | | if not actInfoDict:
|
| | | return {}
|
| | | playerServerID = GameWorld.GetPlayerServerID(curPlayer)
|
| | | for actInfo in actInfoDict.values():
|
| | | if not actInfo.get(ShareDefine.ActKey_State, 0):
|
| | | continue
|
| | | if ShareDefine.ActKey_ServerIDRangeList not in actInfo:
|
| | | continue
|
| | | serverIDRangeList = actInfo[ShareDefine.ActKey_ServerIDRangeList]
|
| | | if not serverIDRangeList:
|
| | | # 全服开启
|
| | | return actInfo
|
| | | for serverIDA, serverIDB in serverIDRangeList:
|
| | | if serverIDA <= playerServerID <= serverIDB:
|
| | | return actInfo
|
| | | return {}
|
| | |
|
| | | def SendMapServerCrossActionState():
|
| | | # 地图启动成功时通知跨服活动相关状态 - 本服地图,跨服地图不需要通知
|
| | |
|
| | |
| | | import CrossRealmPlayer
|
| | | import PlayerCompensation
|
| | | import CrossActionControl
|
| | | import CrossActAllRecharge
|
| | | import CrossChampionship
|
| | | import CrossBattlefield
|
| | | import CrossBillboard
|
| | |
| | | elif msgType == ShareDefine.ClientServerMsg_ChampionshipWorship:
|
| | | CrossChampionship.ClientServerMsg_ChampionshipWorship(serverGroupID, msgData)
|
| | |
|
| | | elif msgType == ShareDefine.ClientServerMsg_ActAllRechargeValue:
|
| | | CrossActAllRecharge.ClientServerMsg_ActAllRechargeValue(serverGroupID, msgData)
|
| | | |
| | | # 需要发送到地图服务器处理的
|
| | | elif msgType in [ShareDefine.ClientServerMsg_Reborn, ShareDefine.ClientServerMsg_CollectNPC]:
|
| | | MapServer_CrossServerReceiveMsg(msgType, msgData, serverGroupID)
|
| | |
| | | CrossBoss.Sync_CrossBossInitDataToClientServer(serverGroupID)
|
| | | CrossActionControl.Sync_CrossActInfoToClientServer(serverGroupID)
|
| | | CrossLuckyCloudBuy.Sync_LuckyCloudBuyDataToClientServer(tick, serverGroupID)
|
| | | CrossActAllRecharge.Sync_AllRechargeDataToClientServer(serverGroupID)
|
| | | PlayerCompensation.Sync_CrossMailPlayerIDToClientServer(serverGroupID)
|
| | | return
|
| | |
|
| | |
| | | elif msgType == ShareDefine.CrossServerMsg_ChampionshipDailyOfficial:
|
| | | CrossChampionship.CrossServerMsg_ChampionshipDailyOfficial(msgData)
|
| | |
|
| | | elif msgType == ShareDefine.CrossServerMsg_ActAllRechargeInfo:
|
| | | CrossActAllRecharge.CrossServerMsg_ActAllRechargeInfo(msgData)
|
| | | |
| | | elif msgType == ShareDefine.CrossServerMsg_SyncBillboard:
|
| | | CrossBillboard.CrossServerMsg_SyncBillboard(msgData, tick)
|
| | |
|
| | |
| | | ("list", "SuperItemWeightInfo", 0),
|
| | | ),
|
| | |
|
| | | "CrossActAllRecharge":(
|
| | | ("DWORD", "CfgID", 1),
|
| | | ("char", "ActGroupName", 0),
|
| | | ("BYTE", "ZoneID", 0),
|
| | | ("list", "ServerIDRangeList", 0),
|
| | | ("char", "StartDate", 0),
|
| | | ("char", "EndDate", 0),
|
| | | ("dict", "NotifyInfoStart", 0),
|
| | | ("dict", "NotifyInfoEnd", 0),
|
| | | ("list", "NotifyInfoLoop", 0),
|
| | | ("list", "TemplateIDList", 0),
|
| | | ),
|
| | |
|
| | | "CrossActAllRechargeTemplate":(
|
| | | ("DWORD", "TemplateID", 1),
|
| | | ("DWORD", "CTGNeed", 0),
|
| | | ("WORD", "NeedPlayerCount", 0),
|
| | | ("BYTE", "AwardIndex", 0),
|
| | | ("list", "AwardItemList", 0),
|
| | | ),
|
| | |
|
| | | "CrossActCTGBillboard":(
|
| | | ("DWORD", "CfgID", 1),
|
| | | ("char", "ActGroupName", 0),
|
| | |
| | | def GetRandAwardWeightInfo(self): return self.RandAwardWeightInfo # 每次购买随机奖励权重信息 [[权重,物品ID,个数,是否拍品], ...]
|
| | | def GetSuperItemWeightInfo(self): return self.SuperItemWeightInfo # 大奖随机权重信息 [[权重,物品ID,个数,是否拍品,价值货币类型,货币值], ...] |
| | | |
| | | # 跨服全民充值时间表 |
| | | class IPY_CrossActAllRecharge(): |
| | | |
| | | def __init__(self): |
| | | self.CfgID = 0
|
| | | self.ActGroupName = ""
|
| | | self.ZoneID = 0
|
| | | self.ServerIDRangeList = []
|
| | | self.StartDate = ""
|
| | | self.EndDate = ""
|
| | | self.NotifyInfoStart = {}
|
| | | self.NotifyInfoEnd = {}
|
| | | self.NotifyInfoLoop = []
|
| | | self.TemplateIDList = [] |
| | | return |
| | | |
| | | def GetCfgID(self): return self.CfgID # 配置ID
|
| | | def GetActGroupName(self): return self.ActGroupName # 活动组名(同组活动的名字需相同)
|
| | | def GetZoneID(self): return self.ZoneID # 组内分组编号
|
| | | def GetServerIDRangeList(self): return self.ServerIDRangeList # 活动的账号服务器ID范围列表 [[serverIDA, serverIDB], ...]
|
| | | 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 GetTemplateIDList(self): return self.TemplateIDList # 模板ID列表 |
| | | |
| | | # 跨服全民充值模板表 |
| | | class IPY_CrossActAllRechargeTemplate(): |
| | | |
| | | def __init__(self): |
| | | self.TemplateID = 0
|
| | | self.CTGNeed = 0
|
| | | self.NeedPlayerCount = 0
|
| | | self.AwardIndex = 0
|
| | | self.AwardItemList = [] |
| | | return |
| | | |
| | | def GetTemplateID(self): return self.TemplateID # 模板ID
|
| | | def GetCTGNeed(self): return self.CTGNeed # 全民充值RMB
|
| | | def GetNeedPlayerCount(self): return self.NeedPlayerCount # 所需充值达到该档玩家数
|
| | | def GetAwardIndex(self): return self.AwardIndex # 奖励记录索引,从0开始,同个模板不可重复,不可变更
|
| | | def GetAwardItemList(self): return self.AwardItemList # 奖励物品列表[[物品ID,个数,是否拍品], ...] |
| | | |
| | | # 跨服充值排行活动时间表 |
| | | class IPY_CrossActCTGBillboard(): |
| | | |
| | |
| | | self.ipyCrossActLuckyCloudBuyLen = len(self.ipyCrossActLuckyCloudBuyCache)
|
| | | self.ipyCrossActLuckyCloudBuyTemplateCache = self.__LoadFileData("CrossActLuckyCloudBuyTemplate", IPY_CrossActLuckyCloudBuyTemplate)
|
| | | self.ipyCrossActLuckyCloudBuyTemplateLen = len(self.ipyCrossActLuckyCloudBuyTemplateCache)
|
| | | self.ipyCrossActAllRechargeCache = self.__LoadFileData("CrossActAllRecharge", IPY_CrossActAllRecharge)
|
| | | self.ipyCrossActAllRechargeLen = len(self.ipyCrossActAllRechargeCache)
|
| | | self.ipyCrossActAllRechargeTemplateCache = self.__LoadFileData("CrossActAllRechargeTemplate", IPY_CrossActAllRechargeTemplate)
|
| | | self.ipyCrossActAllRechargeTemplateLen = len(self.ipyCrossActAllRechargeTemplateCache)
|
| | | self.ipyCrossActCTGBillboardCache = self.__LoadFileData("CrossActCTGBillboard", IPY_CrossActCTGBillboard)
|
| | | self.ipyCrossActCTGBillboardLen = len(self.ipyCrossActCTGBillboardCache)
|
| | | self.ipyCrossActCTGBillboardOrderCache = self.__LoadFileData("CrossActCTGBillboardOrder", IPY_CrossActCTGBillboardOrder)
|
| | |
| | | def GetCrossActLuckyCloudBuyByIndex(self, index): return self.ipyCrossActLuckyCloudBuyCache[index]
|
| | | def GetCrossActLuckyCloudBuyTemplateCount(self): return self.ipyCrossActLuckyCloudBuyTemplateLen
|
| | | def GetCrossActLuckyCloudBuyTemplateByIndex(self, index): return self.ipyCrossActLuckyCloudBuyTemplateCache[index]
|
| | | def GetCrossActAllRechargeCount(self): return self.ipyCrossActAllRechargeLen
|
| | | def GetCrossActAllRechargeByIndex(self, index): return self.ipyCrossActAllRechargeCache[index]
|
| | | def GetCrossActAllRechargeTemplateCount(self): return self.ipyCrossActAllRechargeTemplateLen
|
| | | def GetCrossActAllRechargeTemplateByIndex(self, index): return self.ipyCrossActAllRechargeTemplateCache[index]
|
| | | def GetCrossActCTGBillboardCount(self): return self.ipyCrossActCTGBillboardLen
|
| | | def GetCrossActCTGBillboardByIndex(self, index): return self.ipyCrossActCTGBillboardCache[index]
|
| | | def GetCrossActCTGBillboardOrderCount(self): return self.ipyCrossActCTGBillboardOrderLen
|
| | |
| | | import CrossRealmPK
|
| | | import CrossChampionship
|
| | | import CrossBattlefield
|
| | | import CrossActAllRecharge
|
| | | import ChPyNetSendPack
|
| | | import NetPackCommon
|
| | | import AuctionHouse
|
| | |
| | | CrossBattlefield.MapServer_CrossBattlefieldOver(eval(resultName))
|
| | | return
|
| | |
|
| | | # 跨服全民充值
|
| | | if callName == "CrossActAllRecharge":
|
| | | curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID)
|
| | | if not curPlayer:
|
| | | return
|
| | | CrossActAllRecharge.MapServer_CrossActAllRecharge(curPlayer, eval(resultName))
|
| | | return
|
| | | |
| | | #py喇叭聊天
|
| | | if callName == 'PYSpeaker':
|
| | | curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID)
|
| | |
| | |
|
| | | g_championshipMgr = None # 跨服排位争霸赛管理
|
| | |
|
| | | g_crossActAllRechargeInfo = {} # 跨服全民充值信息,本服用 {zoneID:{playerID:总充值, ...}, ...}
|
| | |
|
| | | g_familyTalkCache = {} #{familyID:[[time,content,extras],..]}
|
| | | g_worldTalkCache = [] #[[time,name, playerID, content,extras],..]
|
| | |
|
| | |
| | |
|
| | | #跨服运营活动表名定义
|
| | | CrossActName_CTGBillboard = "CrossActCTGBillboard" # 充值排行榜
|
| | | CrossActName_AllRecharge = "CrossActAllRecharge" # 全民充值
|
| | | CrossActName_LuckyCloudBuy = "CrossActLuckyCloudBuy" # 幸运云购
|
| | |
|
| | | #跨服运营活动列表
|
| | | CrossActNameList = [CrossActName_CTGBillboard, CrossActName_LuckyCloudBuy]
|
| | | CrossActNameList = [CrossActName_CTGBillboard, CrossActName_AllRecharge, CrossActName_LuckyCloudBuy]
|
| | | #需要锁定活动分区分配直到活动结束的跨服运营活动,即使热更分区配置,也不会改变正在活动中的分区设定,直到活动结束
|
| | | CrossActLockServerGroupIDList = [CrossActName_CTGBillboard]
|
| | | CrossActLockServerGroupIDList = [CrossActName_CTGBillboard, CrossActName_AllRecharge]
|
| | |
|
| | | #活动信息字典key定义
|
| | | ActKey_ID = "ID" # 活动ID,唯一标识的ID,一般是活动开启的time值
|
| | |
| | | Def_UniversalGameRecType_CrossChampionshipGuess, # 跨服排位争霸赛竞猜记录信息 34
|
| | | Def_UniversalGameRecType_CrossChampionshipOfficial, # 跨服排位争霸赛最终排名官职信息 35
|
| | | Def_UniversalGameRecType_CrossChampionshipOffChallenge, # 跨服排位争霸赛官职挑战信息 36
|
| | | Def_UniversalGameRecType_37,
|
| | | Def_UniversalGameRecType_CrossActAllRecharge, # 跨服全服充值活动信息 37
|
| | | Def_UniversalGameRecType_38,
|
| | | Def_UniversalGameRecType_39,
|
| | | Def_UniversalGameRecType_40,
|
| | |
| | | CrossServerMsg_ChampionshipGuess = "ChampionshipGuess" # 跨服排位争霸赛竞猜信息
|
| | | CrossServerMsg_ChampionshipOfficial = "ChampionshipOfficial" # 跨服排位争霸赛官职信息
|
| | | CrossServerMsg_ChampionshipDailyOfficial = "ChampionshipDailyOfficial" # 跨服排位争霸赛每日官职信息
|
| | | CrossServerMsg_ActAllRechargeInfo = "ActAllRechargeInfo"# 跨服全民充值信息
|
| | |
|
| | | # 子服发送跨服信息定义
|
| | | ClientServerMsg_ServerInitOK = "ServerInitOK" # 子服启动成功
|
| | |
| | | ClientServerMsg_ChampionshipOfficialChallenge = "ChampionshipOfficialChallenge" # 跨服排位挑战仙官
|
| | | ClientServerMsg_ChampionshipGuess = "ChampionshipGuess" # 跨服排位竞猜
|
| | | ClientServerMsg_ChampionshipWorship = "ChampionshipWorship" # 跨服排位膜拜
|
| | | ClientServerMsg_ActAllRechargeValue = "ActAllRechargeValue" # 跨服全民充值额度
|
| | |
|
| | | #跨服广播类型定义
|
| | | CrossNotify_CrossAct = "CrossAct"
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # AC 13 跨服全民充值活动信息 #tagGCCrossActAllRechargeInfo
|
| | |
|
| | | class tagGCCrossActAllRechargeItem(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("ItemID", c_int), |
| | | ("ItemCount", c_ushort), |
| | | ("IsBind", c_ubyte), # 是否拍品
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | return
|
| | |
|
| | | def ReadData(self, stringData, _pos=0, _len=0):
|
| | | self.Clear()
|
| | | memmove(addressof(self), stringData[_pos:], self.GetLength())
|
| | | return _pos + self.GetLength()
|
| | |
|
| | | def Clear(self):
|
| | | self.ItemID = 0
|
| | | self.ItemCount = 0
|
| | | self.IsBind = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagGCCrossActAllRechargeItem)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// AC 13 跨服全民充值活动信息 //tagGCCrossActAllRechargeInfo:
|
| | | ItemID:%d,
|
| | | ItemCount:%d,
|
| | | IsBind:%d
|
| | | '''\
|
| | | %(
|
| | | self.ItemID,
|
| | | self.ItemCount,
|
| | | self.IsBind
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | class tagGCCrossActAllRechargeAward(Structure):
|
| | | AwardIndex = 0 #(BYTE AwardIndex)// 奖励索引 0~31
|
| | | NeedRMB = 0 #(DWORD NeedRMB)// 所需全民充值RMB
|
| | | NeedPlayerCount = 0 #(WORD NeedPlayerCount)// 所需充值达到该档玩家数
|
| | | NowPlayerCount = 0 #(WORD NowPlayerCount)// 当前充值达到该档玩家数
|
| | | AwardItemCount = 0 #(BYTE AwardItemCount)// 奖励物品数
|
| | | AwardItemList = list() #(vector<tagGCCrossActAllRechargeItem> AwardItemList)// 奖励物品信息
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | self.AwardIndex,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.NeedRMB,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.NeedPlayerCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.NowPlayerCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.AwardItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.AwardItemCount):
|
| | | temAwardItemList = tagGCCrossActAllRechargeItem()
|
| | | _pos = temAwardItemList.ReadData(_lpData, _pos)
|
| | | self.AwardItemList.append(temAwardItemList)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.AwardIndex = 0
|
| | | self.NeedRMB = 0
|
| | | self.NeedPlayerCount = 0
|
| | | self.NowPlayerCount = 0
|
| | | self.AwardItemCount = 0
|
| | | self.AwardItemList = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += 1
|
| | | length += 4
|
| | | length += 2
|
| | | length += 2
|
| | | length += 1
|
| | | for i in range(self.AwardItemCount):
|
| | | length += self.AwardItemList[i].GetLength()
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteBYTE(data, self.AwardIndex)
|
| | | data = CommFunc.WriteDWORD(data, self.NeedRMB)
|
| | | data = CommFunc.WriteWORD(data, self.NeedPlayerCount)
|
| | | data = CommFunc.WriteWORD(data, self.NowPlayerCount)
|
| | | data = CommFunc.WriteBYTE(data, self.AwardItemCount)
|
| | | for i in range(self.AwardItemCount):
|
| | | data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer())
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | AwardIndex:%d,
|
| | | NeedRMB:%d,
|
| | | NeedPlayerCount:%d,
|
| | | NowPlayerCount:%d,
|
| | | AwardItemCount:%d,
|
| | | AwardItemList:%s
|
| | | '''\
|
| | | %(
|
| | | self.AwardIndex,
|
| | | self.NeedRMB,
|
| | | self.NeedPlayerCount,
|
| | | self.NowPlayerCount,
|
| | | self.AwardItemCount,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | class tagGCCrossActAllRechargeInfo(Structure):
|
| | | Head = tagHead()
|
| | | ServerInfoLen = 0 #(BYTE ServerInfoLen)
|
| | | ServerIDRangeInfo = "" #(String ServerIDRangeInfo)//开放该活动的服务器ID范围列表,json格式 [[IDA, IDB], ...], [] 为全服
|
| | | StartDate = "" #(char StartDate[10])// 开始日期 y-m-d
|
| | | EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d
|
| | | AwardCount = 0 #(BYTE AwardCount)
|
| | | AwardList = list() #(vector<tagGCCrossActAllRechargeAward> AwardList)// 奖励档次信息
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xAC
|
| | | self.Head.SubCmd = 0x13
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | _pos = self.Head.ReadData(_lpData, _pos)
|
| | | self.ServerInfoLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.ServerIDRangeInfo,_pos = CommFunc.ReadString(_lpData, _pos,self.ServerInfoLen)
|
| | | self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
|
| | | self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
|
| | | self.AwardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.AwardCount):
|
| | | temAwardList = tagGCCrossActAllRechargeAward()
|
| | | _pos = temAwardList.ReadData(_lpData, _pos)
|
| | | self.AwardList.append(temAwardList)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xAC
|
| | | self.Head.SubCmd = 0x13
|
| | | self.ServerInfoLen = 0
|
| | | self.ServerIDRangeInfo = ""
|
| | | self.StartDate = ""
|
| | | self.EndtDate = ""
|
| | | self.AwardCount = 0
|
| | | self.AwardList = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 1
|
| | | length += len(self.ServerIDRangeInfo)
|
| | | length += 10
|
| | | length += 10
|
| | | length += 1
|
| | | for i in range(self.AwardCount):
|
| | | length += self.AwardList[i].GetLength()
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
|
| | | data = CommFunc.WriteBYTE(data, self.ServerInfoLen)
|
| | | data = CommFunc.WriteString(data, self.ServerInfoLen, self.ServerIDRangeInfo)
|
| | | data = CommFunc.WriteString(data, 10, self.StartDate)
|
| | | data = CommFunc.WriteString(data, 10, self.EndtDate)
|
| | | data = CommFunc.WriteBYTE(data, self.AwardCount)
|
| | | for i in range(self.AwardCount):
|
| | | data = CommFunc.WriteString(data, self.AwardList[i].GetLength(), self.AwardList[i].GetBuffer())
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | ServerInfoLen:%d,
|
| | | ServerIDRangeInfo:%s,
|
| | | StartDate:%s,
|
| | | EndtDate:%s,
|
| | | AwardCount:%d,
|
| | | AwardList:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.ServerInfoLen,
|
| | | self.ServerIDRangeInfo,
|
| | | self.StartDate,
|
| | | self.EndtDate,
|
| | | self.AwardCount,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagGCCrossActAllRechargeInfo=tagGCCrossActAllRechargeInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossActAllRechargeInfo.Head.Cmd,m_NAtagGCCrossActAllRechargeInfo.Head.SubCmd))] = m_NAtagGCCrossActAllRechargeInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # AC 12 跨服运营活动结束 # tagGCCrossActEnd
|
| | |
|
| | | class tagGCCrossActEnd(Structure):
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # AA 34 跨服全民充值活动玩家信息 #tagMCCrossActAllRechargePlayerInfo
|
| | |
|
| | | class tagMCCrossActAllRechargePlayerInfo(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("CTGRMBTotal", c_int), # 活动已累计充值RMB
|
| | | ("AwardRecord", c_int), # 奖励记录,根据奖励索引位或运算判断是否已领取
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Cmd = 0xAA
|
| | | self.SubCmd = 0x34
|
| | | 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 = 0x34
|
| | | self.CTGRMBTotal = 0
|
| | | self.AwardRecord = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagMCCrossActAllRechargePlayerInfo)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// AA 34 跨服全民充值活动玩家信息 //tagMCCrossActAllRechargePlayerInfo:
|
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | CTGRMBTotal:%d,
|
| | | AwardRecord:%d
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.CTGRMBTotal,
|
| | | self.AwardRecord
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagMCCrossActAllRechargePlayerInfo=tagMCCrossActAllRechargePlayerInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCrossActAllRechargePlayerInfo.Cmd,m_NAtagMCCrossActAllRechargePlayerInfo.SubCmd))] = m_NAtagMCCrossActAllRechargePlayerInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # AA 25 每日礼包活动信息 #tagMCDailyGiftbagInfo
|
| | |
|
| | | class tagMCDailyGiftbagItem(Structure):
|
| | |
| | | import PlayerLuckyTreasure
|
| | | import Item_ResetAttrPoint
|
| | | import CrossActCTGBillboard
|
| | | import CrossActAllRecharge
|
| | | import PlayerFuncSysPrivilege
|
| | | import PlayerActTurntable
|
| | | import PlayerTongTianLing
|
| | |
| | |
|
| | | #跨服充值排行
|
| | | CrossActCTGBillboard.OnPlayerLogin(curPlayer)
|
| | | #跨服全民充值
|
| | | CrossActAllRecharge.OnPlayerLogin(curPlayer)
|
| | | #消费返利
|
| | | PlayerCostRebate.OnPlayerLogin(curPlayer)
|
| | | #累计充值
|
| | |
| | | # 领取跨服充值排行活动达标奖励
|
| | | elif rewardType == ChConfig.Def_RewardType_CACTGBillboardDabiao:
|
| | | CrossActCTGBillboard.GetDabiaoAward(curPlayer, dataEx)
|
| | | # 跨服全民充值奖励
|
| | | elif rewardType == ChConfig.Def_RewardType_CAAllRecharge:
|
| | | CrossActAllRecharge.GetCrossActAllRechargeAward(curPlayer, dataEx)
|
| | | #缥缈奇遇领取
|
| | | elif rewardType == ChConfig.Def_RewardType_FairyAdventuresAward:
|
| | | PlayerFairyDomain.GetFairyAdventuresAward(curPlayer, dataEx, dataExStr)
|
New file |
| | |
| | | #!/usr/bin/python
|
| | | # -*- coding: GBK -*-
|
| | | #-------------------------------------------------------------------------------
|
| | | #
|
| | | ##@package Player.CrossActAllRecharge
|
| | | #
|
| | | # @todo:跨服全民充值
|
| | | # @author hxp
|
| | | # @date 2022-10-11
|
| | | # @version 1.0
|
| | | #
|
| | | # 详细描述: 跨服全民充值
|
| | | #
|
| | | #-------------------------------------------------------------------------------
|
| | | #"""Version = 2022-10-11 19:00"""
|
| | | #-------------------------------------------------------------------------------
|
| | |
|
| | | import ChConfig
|
| | | import ShareDefine
|
| | | import PlayerControl
|
| | | import NetPackCommon
|
| | | import CrossRealmPlayer
|
| | | import ChPyNetSendPack
|
| | | import ItemControler
|
| | | import IPY_GameWorld
|
| | | import GameWorld
|
| | |
|
| | | def OnPlayerLogin(curPlayer):
|
| | | isReset = __CheckPlayerCrossActAllRecharge(curPlayer)
|
| | | if not isReset:
|
| | | actInfo = CrossRealmPlayer.GetPlayerCrossActInfo(curPlayer, ShareDefine.CrossActName_AllRecharge)
|
| | | # 活动中同步活动信息
|
| | | if actInfo.get(ShareDefine.ActKey_State):
|
| | | Sync_CrossActAllRechargePlayerInfo(curPlayer)
|
| | | if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CA_AllRechargeRMB):
|
| | | SendGameServerActRechargeRMB(curPlayer, actInfo)
|
| | | return
|
| | |
|
| | | def RefreshCrossActAllRechargeInfo():
|
| | | ## 收到GameServer同步的活动信息,刷新活动信息
|
| | | playerManager = GameWorld.GetPlayerManager()
|
| | | for index in xrange(playerManager.GetPlayerCount()):
|
| | | curPlayer = playerManager.GetPlayerByIndex(index)
|
| | | if curPlayer.GetID() == 0:
|
| | | continue
|
| | | __CheckPlayerCrossActAllRecharge(curPlayer)
|
| | | |
| | | return
|
| | |
|
| | | def __CheckPlayerCrossActAllRecharge(curPlayer):
|
| | | |
| | | playerID = curPlayer.GetPlayerID()
|
| | | |
| | | actInfo = CrossRealmPlayer.GetPlayerCrossActInfo(curPlayer, ShareDefine.CrossActName_AllRecharge)
|
| | | cfgID = actInfo.get(ShareDefine.ActKey_CfgID, 0)
|
| | | actID = actInfo.get(ShareDefine.ActKey_ID, 0)
|
| | | state = actInfo.get(ShareDefine.ActKey_State, 0)
|
| | | dayIndex = actInfo.get(ShareDefine.ActKey_DayIndex, 0)
|
| | | |
| | | playerActID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CA_AllRechargeID) # 玩家身上的活动ID
|
| | | |
| | | # 活动ID 相同的话不处理
|
| | | if actID == playerActID:
|
| | | GameWorld.DebugLog("跨服全民充值活动ID不变,不处理!cfgID=%s,dayIndex=%s,actID=%s" % (cfgID, dayIndex, actID), playerID) |
| | | return
|
| | | |
| | | GameWorld.DebugLog("跨服全民充值活动重置! cfgID=%s,actID=%s,playerActID=%s,state=%s" % (cfgID, actID, playerActID, state), playerID)
|
| | | |
| | | if not state:
|
| | | CrossRealmPlayer.NotifyCrossActEnd(curPlayer, ShareDefine.CrossActName_AllRecharge)
|
| | | |
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CA_AllRechargeID, actID)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CA_AllRechargeRMB, 0)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CA_AllRechargeAward, 0)
|
| | | |
| | | Sync_CrossActAllRechargePlayerInfo(curPlayer)
|
| | | return True
|
| | |
|
| | | def GetCrossActAllRechargeAward(curPlayer, awardIndex):
|
| | | ## 领奖
|
| | | |
| | | actInfo = CrossRealmPlayer.GetPlayerCrossActInfo(curPlayer, ShareDefine.CrossActName_AllRecharge)
|
| | | state = actInfo.get(ShareDefine.ActKey_State, 0)
|
| | | if not state:
|
| | | GameWorld.DebugLog("非活动中")
|
| | | return
|
| | | |
| | | cfgID = actInfo.get(ShareDefine.ActKey_CfgID)
|
| | | ipyDataDict = actInfo.get(ShareDefine.ActKey_IpyDataInfo, {})
|
| | | if not ipyDataDict:
|
| | | return
|
| | | zoneID = ipyDataDict.get("ZoneID", 0)
|
| | | if not zoneID:
|
| | | return
|
| | | |
| | | awardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CA_AllRechargeAward)
|
| | | if awardRecord & pow(2, awardIndex):
|
| | | GameWorld.DebugLog("已领取过该奖励! awardIndex=%s" % awardIndex, curPlayer.GetPlayerID())
|
| | | return
|
| | | |
| | | sendMsg = str(["AllRechargeAward", [cfgID, zoneID, awardIndex]])
|
| | | GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(curPlayer.GetID(), 0, 0, "CrossActAllRecharge", sendMsg, len(sendMsg))
|
| | | return
|
| | |
|
| | | def GameServer_CrossActAllRecharge(curPlayer, msgList):
|
| | | |
| | | msgType = msgList[0]
|
| | | |
| | | if msgType == "AllRechargeAward":
|
| | | awardIndex, awardItemList = msgList[1:]
|
| | | |
| | | awardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CA_AllRechargeAward)
|
| | | if awardRecord & pow(2, awardIndex):
|
| | | GameWorld.DebugLog("已领取过该奖励! awardIndex=%s" % awardIndex, curPlayer.GetPlayerID())
|
| | | return
|
| | | |
| | | if not ItemControler.CheckPackSpaceEnough(curPlayer, awardItemList):
|
| | | return
|
| | | |
| | | updAwardRecord = awardRecord | pow(2, awardIndex)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CA_AllRechargeAward, updAwardRecord)
|
| | | GameWorld.Log("领取全民充值奖励: awardIndex=%s" % (awardIndex), curPlayer.GetPlayerID())
|
| | | |
| | | Sync_CrossActAllRechargePlayerInfo(curPlayer)
|
| | | |
| | | for itemID, itemCount, isAuctionItem in awardItemList:
|
| | | ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, isAuctionItem, [IPY_GameWorld.rptItem], |
| | | event=["CrossActAllRecharge", False, {}])
|
| | | return
|
| | |
|
| | | def AddCTGRMB(curPlayer, addRMB):
|
| | | ## 增加活动已累计充值RMB
|
| | | |
| | | actInfo = CrossRealmPlayer.GetPlayerCrossActInfo(curPlayer, ShareDefine.CrossActName_AllRecharge) |
| | | if not actInfo:
|
| | | return
|
| | | |
| | | if not actInfo.get(ShareDefine.ActKey_State):
|
| | | GameWorld.DebugLog("跨服全民充值非活动中! playerServerID=%s" % GameWorld.GetPlayerServerID(curPlayer), curPlayer.GetPlayerID())
|
| | | return
|
| | | |
| | | totalRMB = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CA_AllRechargeRMB) + addRMB
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CA_AllRechargeRMB, totalRMB)
|
| | | |
| | | GameWorld.DebugLog("跨服全民充值活动增加玩家累计充值RMB: addRMB=%s,totalRMB=%s" % (addRMB, totalRMB), curPlayer.GetPlayerID())
|
| | | Sync_CrossActAllRechargePlayerInfo(curPlayer)
|
| | | SendGameServerActRechargeRMB(curPlayer, actInfo)
|
| | | return
|
| | |
|
| | | def SendGameServerActRechargeRMB(curPlayer, actInfo):
|
| | | cfgID = actInfo.get(ShareDefine.ActKey_CfgID)
|
| | | ipyDataDict = actInfo.get(ShareDefine.ActKey_IpyDataInfo, {})
|
| | | if not ipyDataDict:
|
| | | return
|
| | | zoneID = ipyDataDict.get("ZoneID", 0)
|
| | | if not zoneID:
|
| | | return
|
| | | totalRMB = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CA_AllRechargeRMB)
|
| | | sendMsg = str(["AllRechargeRMB", [cfgID, zoneID, totalRMB]])
|
| | | GameWorld.Log("SendGameServerActRechargeRMB: %s" % sendMsg, curPlayer.GetPlayerID())
|
| | | GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(curPlayer.GetID(), 0, 0, "CrossActAllRecharge", sendMsg, len(sendMsg))
|
| | | return
|
| | |
|
| | | def Sync_CrossActAllRechargePlayerInfo(curPlayer):
|
| | | ## 通知活动玩家数据信息
|
| | | clientPack = ChPyNetSendPack.tagMCCrossActAllRechargePlayerInfo()
|
| | | clientPack.CTGRMBTotal = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CA_AllRechargeRMB)
|
| | | clientPack.AwardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CA_AllRechargeAward)
|
| | | NetPackCommon.SendFakePack(curPlayer, clientPack)
|
| | | return
|
| | |
|
| | |
| | | import PlayerActRechargePrize
|
| | | import PlayerFamilyRedPacket
|
| | | import CrossActCTGBillboard
|
| | | import CrossActAllRecharge
|
| | | import PlayerActGrowupBuy
|
| | | import OpenServerCampaign
|
| | | import PlayerFeastTravel
|
| | |
| | | if coinType in [CoinType_Gold, CoinType_Buy]:
|
| | | #跨服充值排行活动
|
| | | CrossActCTGBillboard.AddCTGRMB(curPlayer, orderCoin)
|
| | | #跨服全民充值
|
| | | CrossActAllRecharge.AddCTGRMB(curPlayer, orderCoin)
|
| | | PlayerActManyDayRecharge.AddManyDayRechargeValue(curPlayer, orderCoin) # 多日连充
|
| | | #红包, 需要真实充值
|
| | | PlayerFamilyRedPacket.OnPlayerRecharge(curPlayer, orderCoin)
|
| | |
| | | import OpenServerCampaign
|
| | | import PlayerCostRebate
|
| | | import CrossActCTGBillboard
|
| | | import CrossActAllRecharge
|
| | | import PlayerActCollectWords
|
| | | import PlayerActTotalRecharge
|
| | | import PlayerActGarbageSorting
|
| | |
| | | if actionName == ShareDefine.CrossActName_CTGBillboard:
|
| | | CrossActCTGBillboard.RefreshCrossActCTGBillboardInfo()
|
| | |
|
| | | elif actionName == ShareDefine.CrossActName_AllRecharge:
|
| | | CrossActAllRecharge.RefreshCrossActAllRechargeInfo()
|
| | | |
| | | return
|
| | |
|
| | | if key == ShareDefine.Def_Notify_WorldKey_CrossZoneName:
|
New file |
| | |
| | | #!/usr/bin/python
|
| | | # -*- coding: GBK -*-
|
| | | #-------------------------------------------------------------------------------
|
| | | #
|
| | | ##@package Player.RemoteQuery.GY_Query_CrossActAllRecharge
|
| | | #
|
| | | # @todo:跨服全民充值
|
| | | # @author hxp
|
| | | # @date 2022-10-11
|
| | | # @version 1.0
|
| | | #
|
| | | # 详细描述: 跨服全民充值
|
| | | #
|
| | | #-------------------------------------------------------------------------------
|
| | | #"""Version = 2022-10-11 19:00"""
|
| | | #-------------------------------------------------------------------------------
|
| | |
|
| | | import GameWorld
|
| | | import CrossActAllRecharge
|
| | |
|
| | | #------------------------------------------------------------------------------ |
| | | ## 跨服赛报名调用接口
|
| | | # @param query_Type 请求类型
|
| | | # @param query_ID 请求的玩家ID
|
| | | # @param packCMDList 发包命令
|
| | | # @param tick 当前时间
|
| | | # @return "True" or "False" or ""
|
| | | # @remarks 函数详细说明.
|
| | | def DoLogic(query_Type, query_ID, packCMDList, tick): |
| | | return
|
| | |
|
| | |
|
| | | #------------------------------------------------------------------------------ |
| | | ## 执行结果
|
| | | # @param curPlayer 发出请求的玩家
|
| | | # @param callFunName 功能名称
|
| | | # @param funResult 查询的结果
|
| | | # @param tick 当前时间
|
| | | # @return None
|
| | | # @remarks 函数详细说明.
|
| | | def DoResult(curPlayer, callFunName, funResult, tick):
|
| | | msgList = eval(funResult)
|
| | | playerID = curPlayer.GetPlayerID()
|
| | | GameWorld.Log("GY_Query_CrossActAllRecharge %s" % (msgList), playerID)
|
| | | CrossActAllRecharge.GameServer_CrossActAllRecharge(curPlayer, msgList)
|
| | | return
|
| | | |
| | | |
| | | |
| | |
| | |
|
| | | #跨服运营活动表名定义
|
| | | CrossActName_CTGBillboard = "CrossActCTGBillboard" # 充值排行榜
|
| | | CrossActName_AllRecharge = "CrossActAllRecharge" # 全民充值
|
| | | CrossActName_LuckyCloudBuy = "CrossActLuckyCloudBuy" # 幸运云购
|
| | |
|
| | | #跨服运营活动列表
|
| | | CrossActNameList = [CrossActName_CTGBillboard, CrossActName_LuckyCloudBuy]
|
| | | CrossActNameList = [CrossActName_CTGBillboard, CrossActName_AllRecharge, CrossActName_LuckyCloudBuy]
|
| | | #需要锁定活动分区分配直到活动结束的跨服运营活动,即使热更分区配置,也不会改变正在活动中的分区设定,直到活动结束
|
| | | CrossActLockServerGroupIDList = [CrossActName_CTGBillboard]
|
| | | CrossActLockServerGroupIDList = [CrossActName_CTGBillboard, CrossActName_AllRecharge]
|
| | |
|
| | | #活动信息字典key定义
|
| | | ActKey_ID = "ID" # 活动ID,唯一标识的ID,一般是活动开启的time值
|
| | |
| | | Def_UniversalGameRecType_CrossChampionshipGuess, # 跨服排位争霸赛竞猜记录信息 34
|
| | | Def_UniversalGameRecType_CrossChampionshipOfficial, # 跨服排位争霸赛最终排名官职信息 35
|
| | | Def_UniversalGameRecType_CrossChampionshipOffChallenge, # 跨服排位争霸赛官职挑战信息 36
|
| | | Def_UniversalGameRecType_37,
|
| | | Def_UniversalGameRecType_CrossActAllRecharge, # 跨服全服充值活动信息 37
|
| | | Def_UniversalGameRecType_38,
|
| | | Def_UniversalGameRecType_39,
|
| | | Def_UniversalGameRecType_40,
|