8650 【主干】【BT2】活动规则优化(消费返利支持多活动编号同时开启);
| | |
| | | struct tagActCostRebate
|
| | | {
|
| | | DWORD _CfgID; //配置ID
|
| | | char ActMark; //活动组标记
|
| | | list PlatformList; //活动平台列表["平台A", "平台A", ...],配[]代表所有
|
| | | list ServerGroupIDList; //服务器ID列表
|
| | | BYTE ActNum; //活动分组编号, 活动类型 * 10 + 不同界面编号
|
| | | char StartDate; //开启日期
|
| | | char EndDate; //结束日期
|
| | | dict NotifyInfoStart; //全服提示信息 - 相对开始时间
|
| | |
| | |
|
| | | class tagMCCostRebateInfo(Structure):
|
| | | Head = tagHead()
|
| | | ActNum = 0 #(BYTE ActNum)//活动编号
|
| | | StartDate = "" #(char StartDate[10])// 开始日期 y-m-d
|
| | | EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d
|
| | | IsDayReset = 0 #(BYTE IsDayReset)//是否每天重置
|
| | |
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | _pos = self.Head.ReadData(_lpData, _pos)
|
| | | self.ActNum,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
|
| | | self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
|
| | | self.IsDayReset,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | |
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xAA
|
| | | self.Head.SubCmd = 0x09
|
| | | self.ActNum = 0
|
| | | self.StartDate = ""
|
| | | self.EndtDate = ""
|
| | | self.IsDayReset = 0
|
| | |
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 1
|
| | | length += 10
|
| | | length += 10
|
| | | length += 1
|
| | |
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
|
| | | data = CommFunc.WriteBYTE(data, self.ActNum)
|
| | | data = CommFunc.WriteString(data, 10, self.StartDate)
|
| | | data = CommFunc.WriteString(data, 10, self.EndtDate)
|
| | | data = CommFunc.WriteBYTE(data, self.IsDayReset)
|
| | |
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | ActNum:%d,
|
| | | StartDate:%s,
|
| | | EndtDate:%s,
|
| | | IsDayReset:%d,
|
| | |
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.ActNum,
|
| | | self.StartDate,
|
| | | self.EndtDate,
|
| | | self.IsDayReset,
|
| | |
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("ActNum", c_ubyte), #活动编号
|
| | | ("CostGoldTotal", c_int), #本次活动已累计消费仙玉数
|
| | | ("AwardRecord", c_int), #返利奖励领奖记录,按奖励索引二进制位存储是否已领取
|
| | | ]
|
| | |
| | | def Clear(self):
|
| | | self.Cmd = 0xAA
|
| | | self.SubCmd = 0x10
|
| | | self.ActNum = 0
|
| | | self.CostGoldTotal = 0
|
| | | self.AwardRecord = 0
|
| | | return
|
| | |
| | | DumpString = '''// AA 10 消费返利玩家活动信息 //tagMCCostRebatePlayerInfo:
|
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | ActNum:%d,
|
| | | CostGoldTotal:%d,
|
| | | AwardRecord:%d
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.ActNum,
|
| | | self.CostGoldTotal,
|
| | | self.AwardRecord
|
| | | )
|
| | |
| | | PlayerControl.WorldNotify(0, notifyKey, paramList)
|
| | |
|
| | | dictName = ChConfig.Def_WorldKey_OperationActionState % actName
|
| | | if actName in ShareDefine.MultiActNumOperationActNameList: |
| | | if actName in ShareDefine.MultiActNumOperationActNameList:
|
| | | dictName += "_%s" % actNum
|
| | | preState = gameWorld.GetDictByKey(dictName)
|
| | | if not isReload and preState == state:
|
| | |
| | | if isReload and ipyData:
|
| | | Sync_OperationAction_ExpRate(ipyData)
|
| | |
|
| | | elif actName == ShareDefine.OperationActionName_CostRebate:
|
| | | if isReload and ipyData:
|
| | | pass
|
| | | elif actName == ShareDefine.OperationActionName_BossReborn:
|
| | | if isReload and ipyData:
|
| | | GameWorldBoss.SetBossRebornNeedPoint(True)
|
| | |
| | |
|
| | | "ActCostRebate":(
|
| | | ("DWORD", "CfgID", 1),
|
| | | ("char", "ActMark", 0),
|
| | | ("list", "PlatformList", 0),
|
| | | ("list", "ServerGroupIDList", 0),
|
| | | ("BYTE", "ActNum", 0),
|
| | | ("char", "StartDate", 0),
|
| | | ("char", "EndDate", 0),
|
| | | ("dict", "NotifyInfoStart", 0),
|
| | |
| | | |
| | | def __init__(self): |
| | | self.CfgID = 0
|
| | | self.ActMark = ""
|
| | | self.PlatformList = []
|
| | | self.ServerGroupIDList = []
|
| | | self.ActNum = 0
|
| | | self.StartDate = ""
|
| | | self.EndDate = ""
|
| | | self.NotifyInfoStart = {}
|
| | |
| | | return |
| | | |
| | | def GetCfgID(self): return self.CfgID # 配置ID
|
| | | def GetActMark(self): return self.ActMark # 活动组标记
|
| | | 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 # 全服提示信息 - 相对开始时间
|
| | |
| | |
|
| | | #支持多活动分组编号的活动名
|
| | | MultiActNumOperationActNameList = [OperationActionName_TotalRecharge, OperationActionName_CollectWords,
|
| | | OperationActionName_FlashGiftbag,
|
| | | OperationActionName_FlashGiftbag, OperationActionName_CostRebate,
|
| | | ]
|
| | |
|
| | | #跨服运营活动表名定义
|
| | |
| | | Def_PDict_CA_CTGBillboardAward = "CA_CTGBillboardAward" # 活动充值目标领奖状态,按二进制位存储
|
| | |
|
| | | #消费返利活动
|
| | | Def_PDict_CostRebateID = "CostRebateID" # 玩家身上的消费返利活动ID,唯一标识,取活动开始日期time值
|
| | | Def_PDict_CostRebateTemplateID = "CostRebateTemplateID" # 玩家身上的消费返利模板ID
|
| | | Def_PDict_CostRebateGold = "CostRebateGold" # 消费返利总累计消费仙玉
|
| | | Def_PDict_CostRebateAwardRecord = "CostRebateAwardRecord" # 消费返利领奖记录
|
| | | Def_PDict_CostRebateWorldLV = "CostRebateWorldLV" #消费返利活动开启时世界等级
|
| | | Def_PDict_CostRebateID = "CostRebateID_%s" # 玩家身上的消费返利活动ID,唯一标识,取活动开始日期time值,参数(活动编号)
|
| | | Def_PDict_CostRebateTemplateID = "CostRebateTemplateID_%s" # 玩家身上的消费返利模板ID,参数(活动编号)
|
| | | Def_PDict_CostRebateGold = "CostRebateGold_%s" # 消费返利总累计消费仙玉,参数(活动编号)
|
| | | Def_PDict_CostRebateAwardRecord = "CostRebateAwardRecord_%s" # 消费返利领奖记录,参数(活动编号)
|
| | | Def_PDict_CostRebateWorldLV = "CostRebateWorldLV_%s" #消费返利活动开启时世界等级,参数(活动编号)
|
| | |
|
| | | #累计充值活动
|
| | | Def_PDict_TotalRechargeID = "TotalRechargeID_%s" # 玩家身上的累计充值活动ID,唯一标识,取活动开始日期time值,参数:(活动编号)
|
| | |
| | |
|
| | | class tagMCCostRebateInfo(Structure):
|
| | | Head = tagHead()
|
| | | ActNum = 0 #(BYTE ActNum)//活动编号
|
| | | StartDate = "" #(char StartDate[10])// 开始日期 y-m-d
|
| | | EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d
|
| | | IsDayReset = 0 #(BYTE IsDayReset)//是否每天重置
|
| | |
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | _pos = self.Head.ReadData(_lpData, _pos)
|
| | | self.ActNum,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
|
| | | self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
|
| | | self.IsDayReset,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | |
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xAA
|
| | | self.Head.SubCmd = 0x09
|
| | | self.ActNum = 0
|
| | | self.StartDate = ""
|
| | | self.EndtDate = ""
|
| | | self.IsDayReset = 0
|
| | |
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 1
|
| | | length += 10
|
| | | length += 10
|
| | | length += 1
|
| | |
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
|
| | | data = CommFunc.WriteBYTE(data, self.ActNum)
|
| | | data = CommFunc.WriteString(data, 10, self.StartDate)
|
| | | data = CommFunc.WriteString(data, 10, self.EndtDate)
|
| | | data = CommFunc.WriteBYTE(data, self.IsDayReset)
|
| | |
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | ActNum:%d,
|
| | | StartDate:%s,
|
| | | EndtDate:%s,
|
| | | IsDayReset:%d,
|
| | |
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.ActNum,
|
| | | self.StartDate,
|
| | | self.EndtDate,
|
| | | self.IsDayReset,
|
| | |
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("ActNum", c_ubyte), #活动编号
|
| | | ("CostGoldTotal", c_int), #本次活动已累计消费仙玉数
|
| | | ("AwardRecord", c_int), #返利奖励领奖记录,按奖励索引二进制位存储是否已领取
|
| | | ]
|
| | |
| | | def Clear(self):
|
| | | self.Cmd = 0xAA
|
| | | self.SubCmd = 0x10
|
| | | self.ActNum = 0
|
| | | self.CostGoldTotal = 0
|
| | | self.AwardRecord = 0
|
| | | return
|
| | |
| | | DumpString = '''// AA 10 消费返利玩家活动信息 //tagMCCostRebatePlayerInfo:
|
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | ActNum:%d,
|
| | | CostGoldTotal:%d,
|
| | | AwardRecord:%d
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.ActNum,
|
| | | self.CostGoldTotal,
|
| | | self.AwardRecord
|
| | | )
|
| | |
| | | PlayerFreeGoods.OnGetFreeGoods(curPlayer, dataEx)
|
| | | # 领取消费返利奖励
|
| | | elif rewardType == ChConfig.Def_RewardType_CostRebate:
|
| | | PlayerCostRebate.OnGetCostRebateAward(curPlayer, dataEx)
|
| | | PlayerCostRebate.OnGetCostRebateAward(curPlayer, dataEx, dataExStr)
|
| | | # 领取累计充值奖励
|
| | | elif rewardType == ChConfig.Def_RewardType_TotalRecharge:
|
| | | PlayerActTotalRecharge.OnGetTotalRechargeAward(curPlayer, dataEx, dataExStr)
|
| | |
| | | import DataRecordPack
|
| | | import IPY_GameWorld
|
| | | import NetPackCommon
|
| | | import ItemCommon
|
| | | import GameWorld
|
| | | import ChConfig
|
| | |
|
| | |
| | | return templateID
|
| | |
|
| | | def OnPlayerLogin(curPlayer):
|
| | | isReset = __CheckPlayerCostRebateAction(curPlayer)
|
| | | if not isReset:
|
| | | actCostRebateInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_CostRebate, {})
|
| | | # 活动中同步活动信息
|
| | | if actCostRebateInfo.get(ShareDefine.ActKey_State):
|
| | | Sync_CostRebateActionInfo(curPlayer)
|
| | | Sync_CostRebateInfo(curPlayer)
|
| | | |
| | | for actInfo in PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_CostRebate, {}).values():
|
| | | actNum = actInfo.get(ShareDefine.ActKey_ActNum, 0)
|
| | | isReset = __CheckPlayerCostRebateAction(curPlayer, actNum)
|
| | | if not isReset:
|
| | | # 活动中同步活动信息
|
| | | if actInfo.get(ShareDefine.ActKey_State):
|
| | | Sync_CostRebateActionInfo(curPlayer, actNum)
|
| | | Sync_CostRebateInfo(curPlayer, actNum)
|
| | | return
|
| | |
|
| | | def RefreshCostRebateActionInfo():
|
| | | def RefreshCostRebateActionInfo(actNum):
|
| | | ## 收到GameServer同步的活动信息,刷新活动信息
|
| | | playerManager = GameWorld.GetPlayerManager()
|
| | | for index in xrange(playerManager.GetPlayerCount()):
|
| | | curPlayer = playerManager.GetPlayerByIndex(index)
|
| | | if curPlayer.GetID() == 0:
|
| | | continue
|
| | | __CheckPlayerCostRebateAction(curPlayer)
|
| | | __CheckPlayerCostRebateAction(curPlayer, actNum)
|
| | | return
|
| | |
|
| | | def __CheckPlayerCostRebateAction(curPlayer):
|
| | | def __CheckPlayerCostRebateAction(curPlayer, actNum):
|
| | | ## 检查玩家消费返利活动数据信息
|
| | |
|
| | | playerID = curPlayer.GetPlayerID()
|
| | |
|
| | | actCostRebateInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_CostRebate, {})
|
| | | costRebateID = actCostRebateInfo.get(ShareDefine.ActKey_ID, 0)
|
| | | state = actCostRebateInfo.get(ShareDefine.ActKey_State, 0)
|
| | | actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_CostRebate, actNum)
|
| | | actID = actInfo.get(ShareDefine.ActKey_ID, 0)
|
| | | state = actInfo.get(ShareDefine.ActKey_State, 0)
|
| | |
|
| | | playerCostRebateID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CostRebateID) # 玩家身上的活动ID
|
| | | playerActID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CostRebateID % actNum) # 玩家身上的活动ID
|
| | |
|
| | | # 活动ID 相同的话不处理
|
| | | if costRebateID == playerCostRebateID:
|
| | | #GameWorld.DebugLog("消费返利活动ID不变,不处理!", curPlayer.GetPlayerID())
|
| | | if actID == playerActID:
|
| | | GameWorld.DebugLog("消费返利活动ID不变,不处理!actNum=%s,actID=%s" % (actNum, actID), curPlayer.GetPlayerID())
|
| | | return
|
| | | actWorldLV = actCostRebateInfo.get(ShareDefine.ActKey_WorldLV, 0)
|
| | | playerWorldLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CostRebateWorldLV)
|
| | | templateID = GetTemplateID(actCostRebateInfo.get(ShareDefine.ActKey_CfgID, 0), actCostRebateInfo.get(ShareDefine.ActKey_DayIndex, 0))
|
| | | playerTemplateID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CostRebateTemplateID)
|
| | | actWorldLV = actInfo.get(ShareDefine.ActKey_WorldLV, 0)
|
| | | playerWorldLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CostRebateWorldLV % actNum)
|
| | | templateID = GetTemplateID(actInfo.get(ShareDefine.ActKey_CfgID, 0), actInfo.get(ShareDefine.ActKey_DayIndex, 0))
|
| | | playerTemplateID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CostRebateTemplateID % actNum)
|
| | |
|
| | | GameWorld.DebugLog("消费返利重置! costRebateID=%s,playerCostRebateID=%s,state=%s,templateID=%s,playerTemplateID=%s" |
| | | % (costRebateID, playerCostRebateID, state, templateID, playerTemplateID), playerID)
|
| | | GameWorld.DebugLog("消费返利重置! actNum=%s,actID=%s,playerActID=%s,state=%s,templateID=%s,playerTemplateID=%s" |
| | | % (actNum, actID, playerActID, state, templateID, playerTemplateID), playerID)
|
| | |
|
| | | # 未领取的奖励邮件发放
|
| | | __SendCostRebateMail(curPlayer, playerTemplateID, playerWorldLV)
|
| | | __SendCostRebateMail(curPlayer, playerTemplateID, playerWorldLV, actNum)
|
| | |
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CostRebateID, costRebateID)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CostRebateTemplateID, templateID)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CostRebateWorldLV, actWorldLV)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CostRebateGold, 0)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CostRebateAwardRecord, 0)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CostRebateID % actNum, actID)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CostRebateTemplateID % actNum, templateID)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CostRebateWorldLV % actNum, actWorldLV)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CostRebateGold % actNum, 0)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CostRebateAwardRecord % actNum, 0)
|
| | |
|
| | | Sync_CostRebateActionInfo(curPlayer)
|
| | | Sync_CostRebateInfo(curPlayer)
|
| | | Sync_CostRebateActionInfo(curPlayer, actNum)
|
| | | Sync_CostRebateInfo(curPlayer, actNum)
|
| | | return True
|
| | |
|
| | | def __SendCostRebateMail(curPlayer, playerTemplateID, playerWorldLV):
|
| | | def __SendCostRebateMail(curPlayer, playerTemplateID, playerWorldLV, actNum):
|
| | | # 未领取的奖励邮件发放
|
| | |
|
| | | if not playerTemplateID:
|
| | | return
|
| | |
|
| | | costGold = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CostRebateGold)
|
| | | costGold = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CostRebateGold % actNum)
|
| | | if not costGold:
|
| | | return
|
| | |
|
| | |
| | | job = curPlayer.GetJob()
|
| | | playerID = curPlayer.GetPlayerID()
|
| | | batchPlayerIDList, batchAddItemList, batchParamList = [], [], []
|
| | | awardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CostRebateAwardRecord)
|
| | | awardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CostRebateAwardRecord % actNum)
|
| | |
|
| | | for ipyData in ipyDataList:
|
| | | awardIndex = ipyData.GetAwardIndex()
|
| | |
| | | batchParamList.append([needCostGold])
|
| | |
|
| | | if batchPlayerIDList:
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CostRebateAwardRecord, awardRecord)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CostRebateAwardRecord % actNum, awardRecord)
|
| | | PlayerControl.SendMailBatch("ConsumptionRebateMail", batchPlayerIDList, batchAddItemList, batchParamList)
|
| | |
|
| | | return
|
| | |
| | | GameWorld.DebugLog("不计入消费返利的消费类型!costType=%s" % costType, curPlayer.GetPlayerID())
|
| | | return
|
| | |
|
| | | actCostRebateInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_CostRebate, {})
|
| | | if not actCostRebateInfo.get(ShareDefine.ActKey_State):
|
| | | GameWorld.DebugLog("消费返利活动当前未开启!")
|
| | | return
|
| | | |
| | | actID = actCostRebateInfo.get(ShareDefine.ActKey_ID)
|
| | | templateID = GetTemplateID(actCostRebateInfo.get(ShareDefine.ActKey_CfgID, 0), actCostRebateInfo.get(ShareDefine.ActKey_DayIndex, 0))
|
| | | if not actID or not templateID:
|
| | | GameWorld.ErrLog("消费返利活动数据异常!actID=%s,templateID=%s" % (actID, templateID), curPlayer.GetPlayerID())
|
| | | return
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CostRebateID, actID)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CostRebateTemplateID, templateID)
|
| | | |
| | | curCostGold = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CostRebateGold)
|
| | | updCostGold = curCostGold + costGold
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CostRebateGold, updCostGold)
|
| | | Sync_CostRebateInfo(curPlayer)
|
| | | GameWorld.DebugLog("玩家消费返利活动: actID=%s,templateID=%s,curCostGold=%s,costGold=%s,updCostGold=%s" |
| | | % (actID, templateID, curCostGold, costGold, updCostGold), curPlayer.GetPlayerID())
|
| | | for actInfo in PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_CostRebate, {}).values():
|
| | | actNum = actInfo.get(ShareDefine.ActKey_ActNum, 0)
|
| | | |
| | | if not actInfo.get(ShareDefine.ActKey_State):
|
| | | GameWorld.DebugLog("消费返利活动当前未开启!actNum=%s" % actNum)
|
| | | continue
|
| | | |
| | | actID = actInfo.get(ShareDefine.ActKey_ID)
|
| | | templateID = GetTemplateID(actInfo.get(ShareDefine.ActKey_CfgID, 0), actInfo.get(ShareDefine.ActKey_DayIndex, 0))
|
| | | if not actID or not templateID:
|
| | | GameWorld.ErrLog("消费返利活动数据异常!actNum=%s,actID=%s,templateID=%s" % (actNum, actID, templateID), curPlayer.GetPlayerID())
|
| | | continue
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CostRebateID % actNum, actID)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CostRebateTemplateID % actNum, templateID)
|
| | | |
| | | curCostGold = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CostRebateGold % actNum)
|
| | | updCostGold = curCostGold + costGold
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CostRebateGold % actNum, updCostGold)
|
| | | Sync_CostRebateInfo(curPlayer, actNum)
|
| | | GameWorld.DebugLog("玩家消费返利活动: actNum=%s,actID=%s,templateID=%s,curCostGold=%s,costGold=%s,updCostGold=%s" |
| | | % (actNum, actID, templateID, curCostGold, costGold, updCostGold), curPlayer.GetPlayerID())
|
| | | return
|
| | |
|
| | | def OnGetCostRebateAward(curPlayer, awardIndex):
|
| | | def OnGetCostRebateAward(curPlayer, awardIndex, actNum):
|
| | | ## 领取消费返利奖励
|
| | |
|
| | | playerID = curPlayer.GetPlayerID()
|
| | |
|
| | | actCostRebateInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_CostRebate, {})
|
| | | costRebateID = actCostRebateInfo.get(ShareDefine.ActKey_ID, 0)
|
| | | state = actCostRebateInfo.get(ShareDefine.ActKey_State, 0)
|
| | | templateID = GetTemplateID(actCostRebateInfo.get(ShareDefine.ActKey_CfgID, 0), actCostRebateInfo.get(ShareDefine.ActKey_DayIndex, 0))
|
| | | if not state or not templateID:
|
| | | GameWorld.DebugLog("没有消费返利活动,无法领奖!state=%s,templateID=%s" % (state, templateID), playerID)
|
| | | actNum = GameWorld.ToIntDef(actNum, 0)
|
| | | if actNum <= 0:
|
| | | GameWorld.DebugLog("没有该活动编号! actNum=%s" % actNum)
|
| | | return
|
| | |
|
| | | playerCostRebateID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CostRebateID) # 玩家身上的活动ID
|
| | | playerID = curPlayer.GetPlayerID()
|
| | | |
| | | actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_CostRebate, actNum)
|
| | | costRebateID = actInfo.get(ShareDefine.ActKey_ID, 0)
|
| | | state = actInfo.get(ShareDefine.ActKey_State, 0)
|
| | | templateID = GetTemplateID(actInfo.get(ShareDefine.ActKey_CfgID, 0), actInfo.get(ShareDefine.ActKey_DayIndex, 0))
|
| | | if not state or not templateID:
|
| | | GameWorld.DebugLog("没有消费返利活动,无法领奖!actNum=%s,state=%s,templateID=%s" % (actNum, state, templateID), playerID)
|
| | | return
|
| | | |
| | | playerCostRebateID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CostRebateID % actNum) # 玩家身上的活动ID
|
| | | if costRebateID != playerCostRebateID:
|
| | | return
|
| | |
|
| | | awardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CostRebateAwardRecord)
|
| | | awardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CostRebateAwardRecord % actNum)
|
| | | if awardRecord & pow(2, awardIndex):
|
| | | GameWorld.DebugLog("已经领取过该消费返利活动奖励!awardIndex=%s" % awardIndex, playerID)
|
| | | GameWorld.DebugLog("已经领取过该消费返利活动奖励!actNum=%s,awardIndex=%s,awardRecord=%s" % (actNum, awardIndex, awardRecord), playerID)
|
| | | return
|
| | |
|
| | | ipyDataList = IpyGameDataPY.GetIpyGameDataList("CostRebateTemplate", templateID)
|
| | |
| | | return
|
| | |
|
| | | needCostGold = awardIpyData.GetNeedCostGold()
|
| | | actWorldLV = actCostRebateInfo.get(ShareDefine.ActKey_WorldLV, 0)
|
| | | actWorldLV = actInfo.get(ShareDefine.ActKey_WorldLV, 0)
|
| | | awardItemList = __GetItemList(awardIpyData.GetAwardItemList(), curPlayer.GetJob(), actWorldLV)
|
| | |
|
| | | curCostGold = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CostRebateGold)
|
| | | curCostGold = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CostRebateGold % actNum)
|
| | | if curCostGold < needCostGold:
|
| | | GameWorld.DebugLog("所需消费仙玉数不足,无法领取!templateID=%s,awardIndex=%s,needCostGold=%s,curCostGold=%s"
|
| | | % (templateID, awardIndex, needCostGold, curCostGold), playerID)
|
| | | return
|
| | |
|
| | | needSpace = len(awardItemList)
|
| | | packSpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem, needSpace)
|
| | | if packSpace < needSpace:
|
| | | if not ItemControler.CheckPackSpaceEnough(curPlayer, awardItemList):
|
| | | return
|
| | |
|
| | | awardRecord |= pow(2, awardIndex)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CostRebateAwardRecord, awardRecord)
|
| | | Sync_CostRebateInfo(curPlayer)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CostRebateAwardRecord % actNum, awardRecord)
|
| | | Sync_CostRebateInfo(curPlayer, actNum)
|
| | |
|
| | | notifyKey = awardIpyData.GetNotifyKey()
|
| | | if notifyKey:
|
| | | PlayerControl.WorldNotify(0, notifyKey, [curPlayer.GetPlayerName(), needCostGold])
|
| | |
|
| | | for itemID, itemCount, isBind in awardItemList:
|
| | | for itemID, itemCount, _ in awardItemList:
|
| | | ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, 0, [IPY_GameWorld.rptItem])
|
| | |
|
| | | addDataDict = {"TemplateID":templateID, "NeedCostGold":needCostGold, "AwardIndex":awardIndex,
|
| | | "ItemList":str(awardItemList)}
|
| | | "ItemList":str(awardItemList), "ActNum":actNum}
|
| | | DataRecordPack.DR_FuncGiveItem(curPlayer, "CostRebateAward", addDataDict)
|
| | | return
|
| | |
|
| | | def Sync_CostRebateInfo(curPlayer):
|
| | | def Sync_CostRebateInfo(curPlayer, actNum):
|
| | | ## 通知消费返利玩家数据信息
|
| | | playerActInfo = ChPyNetSendPack.tagMCCostRebatePlayerInfo()
|
| | | playerActInfo.CostGoldTotal = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CostRebateGold)
|
| | | playerActInfo.AwardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CostRebateAwardRecord)
|
| | | playerActInfo.ActNum = actNum
|
| | | playerActInfo.CostGoldTotal = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CostRebateGold % actNum)
|
| | | playerActInfo.AwardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CostRebateAwardRecord % actNum)
|
| | | NetPackCommon.SendFakePack(curPlayer, playerActInfo)
|
| | | return
|
| | |
|
| | | def Sync_CostRebateActionInfo(curPlayer):
|
| | | def Sync_CostRebateActionInfo(curPlayer, actNum):
|
| | | ## 通知消费返利活动信息
|
| | | actCostRebateInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_CostRebate, {})
|
| | | |
| | | actCostRebateInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_CostRebate, actNum)
|
| | | if not actCostRebateInfo:
|
| | | return
|
| | |
|
| | |
| | | actWorldLV = actCostRebateInfo.get(ShareDefine.ActKey_WorldLV, 0)
|
| | | openServerDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ServerDay) + 1
|
| | | actInfo = ChPyNetSendPack.tagMCCostRebateInfo()
|
| | | actInfo.ActNum = actNum
|
| | | actInfo.StartDate = GameWorld.GetOperationActionDateStr(ipyData.GetStartDate(), openServerDay)
|
| | | actInfo.EndtDate = GameWorld.GetOperationActionDateStr(ipyData.GetEndDate(), openServerDay)
|
| | | actInfo.LimitLV = ipyData.GetLVLimit()
|
| | |
| | | PlayerControl.RefreshOperationAction_ExpRate()
|
| | |
|
| | | elif actionName == ShareDefine.OperationActionName_CostRebate:
|
| | | PlayerCostRebate.RefreshCostRebateActionInfo()
|
| | | PlayerCostRebate.RefreshCostRebateActionInfo(actNum)
|
| | |
|
| | | elif actionName == ShareDefine.OperationActionName_TotalRecharge:
|
| | | PlayerActTotalRecharge.RefreshTotalRechargeActionInfo(actNum)
|
| | |
| | |
|
| | | #支持多活动分组编号的活动名
|
| | | MultiActNumOperationActNameList = [OperationActionName_TotalRecharge, OperationActionName_CollectWords,
|
| | | OperationActionName_FlashGiftbag,
|
| | | OperationActionName_FlashGiftbag, OperationActionName_CostRebate,
|
| | | ]
|
| | |
|
| | | #跨服运营活动表名定义
|