123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449 |
- --- 幸运周末运营活动
- WeekActives = {}
- local this = {}
- local CONDITION = {
- TIME_TYPE = 971,
- MAIN_DURATION_TYPE = 980,
- SUB_DURATION_TYPE = 981,
- CHECK_WEEK = 991,
- }
- CURRENT_WEEKEN_ACTIVE = "R$_CURRENT_WEEKEN_ACTIVE"
- -- @description 判断子活动是否在关闭状态
- -- @param 活动类型
- -- @return
- function WeekActives.judgeActiveClose(actor, activeType)
- local currentActive = getsysvar(actor, CURRENT_WEEKEN_ACTIVE)
- if table.isNullOrEmpty(currentActive) then
- return false
- end
- local currentTime = getbaseinfo(actor, "now")
- if currentTime > currentActive.mainActive.closeTime then
- return false
- end
- local mainGroup = currentActive.mainActive.mainGroup
- local closeCondition = ConfigDataManager.getTableValue("cfg_OperateActivity_subActivity", "closeCondition",
- "mainGroup", mainGroup, "subType", activeType)
- if closeCondition == nil then
- return false
- end
- return ConditionManager.Check(actor, closeCondition)
- end
- -- 登录时整理主活动信息
- function this.getMainActive(actor, currentActive, currentActiveInfoTable)
- local currentActiveInfo = currentActiveInfoTable[1]
- local currentTime = getbaseinfo(actor, "now")
- local isShow = true
- if currentTime > currentActive.mainActive.closeTime then
- isShow = false
- end
- local mainActiveInfo = {
- activeId = tonumber(currentActiveInfo.id),
- mainGroup = tonumber(currentActiveInfo.maingroup),
- startTime = currentActive.mainActive.startTime,
- closeTime = currentActive.mainActive.closeTime,
- isShow = isShow
- }
- return mainActiveInfo
- end
- -- 玩家登录时向玩家发送当前运营活动信息
- function WeekActives.openActive(actor, currentActive)
- local activeInfo = {}
- if table.isNullOrEmpty(currentActive) then
- currentActive = getsysvar(actor, CURRENT_WEEKEN_ACTIVE)
- end
- if table.isNullOrEmpty(currentActive) then
- return activeInfo
- end
- local mainActive = currentActive.mainActive
- local currentActiveInfoTable = ConfigDataManager.getTable("cfg_OperateActivity_week", "id", mainActive.activeId)
- if table.isNullOrEmpty(currentActiveInfoTable) then
- error("主活动配置错误")
- return activeInfo
- end
- local mainActiveInfo = this.getMainActive(actor, currentActive, currentActiveInfoTable)
- activeInfo["mainActive"] = mainActiveInfo
- if not mainActiveInfo.isShow then
- -- 当前主活动不展示,不用去整理字子活动信息
- sendluamsg(actor, LuaMessageIdToClient.RES_WEEKEN_GIFT, activeInfo)
- return activeInfo
- end
- local subActive = currentActive.subActive
- local allSubActiveInfo = {}
- if not table.isNullOrEmpty(subActive) then
- for id, subActiveDetail in pairs(subActive) do
- local subActivity = ConfigDataManager.getTable("cfg_OperateActivity_subActivity", "id", subActiveDetail.id)
- if subActiveDetail.openState and not subActiveDetail.closeState and not table.isNullOrEmpty(subActivity) then
- local subActiveInfo = {}
- subActiveInfo["id"] = subActiveDetail.id
- subActiveInfo["openTime"] = subActiveDetail.openTime
- table.insert(allSubActiveInfo, subActiveInfo)
- end
- end
- end
- activeInfo["subActive"] = allSubActiveInfo
- WeekActives.subActiveDetail(actor, activeInfo, currentActive)
- sendluamsg(actor, LuaMessageIdToClient.RES_WEEKEN_GIFT, activeInfo)
- return activeInfo
- end
- -- 玩家打开子活动页签
- function WeekActives.openSubActive(actor, msgData)
- local activeInfo = {}
- local currentActive = getsysvar(actor, CURRENT_WEEKEN_ACTIVE)
- if table.isNullOrEmpty(currentActive) then
- return
- end
- local mainActive = currentActive.mainActive
- local currentActiveInfoTable = ConfigDataManager.getTable("cfg_OperateActivity_week", "id", mainActive.activeId)
- if table.isNullOrEmpty(currentActiveInfoTable) then
- error("主活动配置错误")
- return
- end
- local mainActiveInfo = this.getMainActive(actor, currentActive, currentActiveInfoTable)
- activeInfo["mainActive"] = mainActiveInfo
- local subActive = currentActive.subActive
- local allSubActiveInfo = {}
- local currentTime = getbaseinfo(actor, "now")
- if not table.isNullOrEmpty(subActive) then
- for id, subActiveDetail in pairs(subActive) do
- local subActivity = ConfigDataManager.getTable("cfg_OperateActivity_subActivity", "id", subActiveDetail.id)
- if currentTime > subActiveDetail.openTime and currentTime < subActiveDetail.closeTime and not table.isNullOrEmpty(subActivity) then
- local subActiveInfo = {}
- subActiveInfo["id"] = subActiveDetail.id
- subActiveInfo["openTime"] = subActiveDetail.openTime
- table.insert(allSubActiveInfo, subActiveInfo)
- end
- end
- end
- activeInfo["subActive"] = allSubActiveInfo
- local subType = msgData.subType
- WeekActives.subActiveDetail(actor, activeInfo, currentActive, subType)
- sendluamsg(actor, LuaMessageIdToClient.RES_WEEKEN_GIFT, activeInfo)
- end
- -- 获取子活动类型
- function WeekActives.subActiveDetail(actor, activeInfo, currentActive, subType)
- if subType ~= nil then
- this.setSubActiveInfo(actor, subType, currentActive, activeInfo)
- else
- -- 没有类型的时候就放全部活动数据
- local allSubActiveInfo = ConfigDataManager.getTable("cfg_OperateActivity_subActivity", "mainGroup",
- activeInfo.mainActive.mainGroup)
- if not table.isNullOrEmpty(allSubActiveInfo) then
- for _, subActiveInfo in pairs(allSubActiveInfo) do
- this.setSubActiveInfo(actor, tonumber(subActiveInfo.subtype), currentActive, activeInfo)
- end
- end
- end
- end
- -- 设置子活动信息
- function this.setSubActiveInfo(actor, subType, currentActive, activeInfo)
- if WeekActives.judgeActiveClose(actor, subType) then
- -- 活动开启
- if subType == ACTIVE_TYPE.DIRECT then
- -- 直购开启
- local directInfo = DirectPurchase.reqRechargeAction(actor, currentActive.mainActive.mainGroup)
- activeInfo["directSubActive"] = directInfo
- elseif subType == ACTIVE_TYPE.TOTAL_RECHARGE then
- -- 累充活动
- local directInfo = AccumulatedRecharge.reqRechargeAction(actor, currentActive.mainActive.mainGroup)
- activeInfo["totalSubActive"] = directInfo
- elseif subType == ACTIVE_TYPE.PRIZE_DRAW then
- -- 轮盘抽奖
- local turntableRaffleInfo = WeekTurntableRaffle.getPanelInfo(actor, currentActive.mainActive.mainGroup)
- activeInfo["turntableRaffleActive"] = turntableRaffleInfo
- elseif subType == ACTIVE_TYPE.DIAMOND_PACK then
- -- 钻石礼包
- local diamondPackInfo = DiamondPack.reqRechargeAction(actor, currentActive.mainActive.mainGroup)
- activeInfo["diamondPackInfo"] = diamondPackInfo
- elseif subType == ACTIVE_TYPE.CONSUMER_RANK then
- -- 消费排行
- local diamondPackInfo = ConsumerRank.reqRechargeAction(actor, currentActive.mainActive.mainGroup)
- activeInfo["consumerRank"] = diamondPackInfo
- end
- end
- end
- -- 不同的时间段检查当前有没有活动要开启
- function WeekActives.checkActive()
- local currentActive = getsysvar(CURRENT_WEEKEN_ACTIVE)
- if table.isNullOrEmpty(currentActive) then
- -- 检测当前有没有新活动开始
- this.mainActiveChange()
- return
- end
- local currentTime = getbaseinfo("now")
- local mainActive = currentActive["mainActive"]
- if mainActive.closeTime ~= nil and mainActive.closeTime > currentTime then
- -- 当前活动还没有结束,无需添加新的活动
- local send = this.checkSubActiveChange(currentActive)
- setsysvar(CURRENT_WEEKEN_ACTIVE, currentActive)
- if send then
- this.activeChange(currentActive)
- end
- return
- end
- this.checkSubActiveChange(currentActive)
- setsysvar(CURRENT_WEEKEN_ACTIVE, currentActive)
- this.mainActiveChange()
- end
- -- 主活动变化
- function this.mainActiveChange()
- local mainActiveTable = ConfigDataManager.getList("cfg_OperateActivity_week")
- if table.isNullOrEmpty(mainActiveTable) then
- -- 没有主活动信息,不用检查
- return
- end
- local canOpenActive = {}
- for _, mainActive in pairs(mainActiveTable) do
- local openCondition = mainActive.opencondition
- if openCondition ~= nil then
- if ConditionManager.Check(111, openCondition) then
- print("可以开启活动信息", mainActive.id)
- table.insert(canOpenActive, mainActive)
- end
- end
- end
- if table.isNullOrEmpty(canOpenActive) then
- return
- end
- this.openMainActive(canOpenActive)
- this.activeChange()
- end
- -- 检查子活动是否变化
- function this.checkSubActiveChange(currentActive)
- local allSubActiveInfo = currentActive.subActive
- local send = false
- local currentTime = getbaseinfo("now")
- local currentSecTime = tonumber(getbaseinfo("nowsec"))
- if not table.isNullOrEmpty(allSubActiveInfo) then
- for _, subActiveInfo in pairs(allSubActiveInfo) do
- -- 判断当前子活动有没有关闭
- if not subActiveInfo.closeState and subActiveInfo.closeTime <= currentTime then
- subActiveInfo.closeState = true
- this.closeSubActive(subActiveInfo.id)
- send = true
- end
- end
- end
- local mainGroup = currentActive.mainActive.mainGroup
- local allSubActiveTable = ConfigDataManager.getTable("cfg_OperateActivity_subActivity", "mainGroup", mainGroup)
- if not table.isNullOrEmpty(allSubActiveTable) then
- for _, subActiveTable in pairs(allSubActiveTable) do
- local have = false
- for _, subActiveInfo in pairs(allSubActiveInfo) do
- if subActiveInfo.id == tonumber(subActiveTable.id) then
- have = true
- end
- end
- if not have and ConditionManager.Check(111, subActiveTable.opencondition) then
- -- 开启子活动
- jprint("allSubActiveTable", subActiveTable)
- local subActiveInfo = {}
- subActiveInfo["id"] = subActiveTable.id
- subActiveInfo["openTime"] = currentSecTime * 1000
- local durationDay = this.getSubActiveDay(subActiveTable.closecondition)
- local closeTime = TimeUtil.addDayEnd(currentSecTime, durationDay - 1)
- subActiveInfo["closeTime"] = closeTime * 1000
- subActiveInfo["openState"] = true
- subActiveInfo["closeState"] = false
- table.insert(allSubActiveInfo, subActiveInfo)
- send = true
- end
- end
- end
- currentActive.subActive = allSubActiveInfo
- return send
- end
- function this.closeSubActive(subActiveId)
- -- 处理子活动关闭信息
- local tableValue = ConfigDataManager.getTable("cfg_OperateActivity_subActivity", "id", subActiveId)
- if not table.isNullOrEmpty(tableValue) then
- -- 活动类型
- local subType = tonumber(tableValue[1]["subtype"])
- if string.isNullOrEmpty(subType) then
- error("子活动id为空:", subActiveId)
- return
- end
- -- 主活动组
- local mainGroup = tonumber(tableValue[1]["maingroup"])
- if string.isNullOrEmpty(mainGroup) then
- error("子活动的主组号为空:", subActiveId)
- return
- end
- if subType == ACTIVE_TYPE.DIRECT then
- -- 直购
- DirectPurchase.closeActive(mainGroup)
- elseif subType == ACTIVE_TYPE.TOTAL_RECHARGE then
- -- 累充
- WeekAccumulatedRecharge.closeActive(mainGroup)
- elseif subType == ACTIVE_TYPE.PRIZE_DRAW then
- -- 抽奖
- WeekTurntableRaffle.sendUnReceiveRewards(mainGroup)
- elseif subType == ACTIVE_TYPE.DIAMOND_PACK then
- -- 钻石礼包
- DiamondPack.closeActive(mainGroup)
- elseif subType == ACTIVE_TYPE.CONSUMER_RANK then
- -- 消费排名
- ConsumerRank.closeActive(mainGroup)
- end
- end
- end
- -- 开启主活动
- function this.openMainActive(canOpenActive)
- local currentTime = getbaseinfo("nowsec")
- if table.isNullOrEmpty(canOpenActive) then
- return
- end
- local maxLevel = 0
- local mainActive = {}
- for _, openActive in pairs(canOpenActive) do
- if maxLevel < tonumber(openActive.priority) then
- maxLevel = tonumber(openActive.priority)
- mainActive = openActive
- end
- end
- if table.isNullOrEmpty(mainActive) then
- return
- end
- info("可以开启主活动Id:" .. mainActive.id .. "当前时间是:" .. currentTime)
- local currentActive = {}
- -- 添加主活动
- local mainActiveInfo = {}
- -- 活动开启
- local mainActiveId = mainActive.id
- mainActiveInfo["activeId"] = mainActiveId
- mainActiveInfo["mainGroup"] = mainActive.maingroup
- local currentData = TimeUtil.timeToDate(currentTime)
- local mainStartTime = TimeUtil.earlyOneMorning(currentData.year, currentData.month, currentData.day)
- mainActiveInfo["startTime"] = mainStartTime * 1000
- local durationDay = 0
- local closeCondition = mainActive.closecondition
- local groupStrs = string.split(closeCondition, '/')
- for _, groupStr in pairs(groupStrs) do
- local singleStrs = string.split(groupStr, '&')
- for _, singleStr in pairs(singleStrs) do
- local singleStrInfo = string.split(singleStr, '#')
- if tonumber(singleStrInfo[1]) == CONDITION.MAIN_DURATION_TYPE then
- durationDay = tonumber(singleStrInfo[3])
- local closeTime = TimeUtil.addDayEnd(mainStartTime, durationDay - 1)
- mainActiveInfo["closeTime"] = closeTime * 1000
- end
- end
- end
- currentActive["mainActive"] = mainActiveInfo
- -- 整理页签到期时间
- local mainGroup = tonumber(mainActive.maingroup)
- local subActivityTable = ConfigDataManager.getTable("cfg_OperateActivity_subActivity", "mainGroup", mainGroup)
- if table.isNullOrEmpty(subActivityTable) then
- currentActive["subActive"] = {}
- setsysvar(CURRENT_WEEKEN_ACTIVE, currentActive)
- return
- end
- local subActive = {}
- for k, subActivityInfo in pairs(subActivityTable) do
- jprint("subActivityInfo", subActivityInfo)
- local subActiveInfo = {}
- local openCondition = subActivityInfo.opencondition
- -- if ConditionManager.Check(111, openCondition) then
- subActiveInfo["id"] = tonumber(subActivityInfo.id)
- local currentTime = getbaseinfo("nowsec")
- subActiveInfo["openTime"] = currentTime * 1000
- local durationDay = this.getSubActiveDay(subActivityInfo.closecondition)
- local closeTime = TimeUtil.addDayEnd(currentTime, durationDay - 1)
- subActiveInfo["closeTime"] = closeTime * 1000
- subActiveInfo["openState"] = true
- subActiveInfo["closeState"] = false
- table.insert(subActive, subActiveInfo)
- -- end
- end
- currentActive["subActive"] = subActive
- lg("当前活动信息", currentActive)
- setsysvar(CURRENT_WEEKEN_ACTIVE, currentActive)
- end
- -- 获取子活动持续天数
- function this.getSubActiveDay(closeCondition)
- if string.isNullOrEmpty(closeCondition) then
- return 0
- end
- local groupStrs = string.split(closeCondition, '/')
- for k, groupStr in pairs(groupStrs) do
- local singleStrs = string.split(groupStr, '&')
- for k, singleStr in pairs(singleStrs) do
- local singleStrInfo = string.split(singleStr, '#')
- if tonumber(singleStrInfo[1]) == CONDITION.SUB_DURATION_TYPE then
- return tonumber(singleStrInfo[4])
- end
- end
- end
- return 0
- end
- -- 给当前在线玩家发送活动已经改变
- function this.activeChange(currentActive)
- local allRoleInfos = getallrolesummaryinfos()
- local activeInfo = {}
- if not table.isNullOrEmpty(allRoleInfos) then
- for k, roleInfo in pairs(allRoleInfos) do
- local actor = roleInfo["actor"]
- local onlineState = getbaseinfo(actor, "onlinestate")
- if onlineState == 1 then
- if table.isNullOrEmpty(activeInfo) then
- activeInfo = WeekActives.openActive(actor, currentActive)
- else
- sendluamsg(actor, LuaMessageIdToClient.RES_WEEKEN_GIFT, activeInfo)
- end
- end
- end
- end
- end
- --- 获取当前活动期数
- function WeekActives.getCurrentMainGroup(actor)
- local currentActive = getsysvar(actor, CURRENT_WEEKEN_ACTIVE)
- if table.isNullOrEmpty(currentActive) then
- return 0
- end
- return tonumber(currentActive.mainActive.mainGroup)
- end
- --- 合服时清除活动信息
- function WeekActives.combine()
- setsysvar(CURRENT_WEEKEN_ACTIVE, {})
- end
- function clearactive1(actor)
- setsysvar(actor, CURRENT_WEEKEN_ACTIVE, {})
- end
- function lookactive1(actor)
- local activity = getsysvar(actor, CURRENT_WEEKEN_ACTIVE)
- lg("activity", activity)
- end
- function checkactive1(actor)
- WeekActives.checkActive()
- end
- function sendmsgactive1(actor)
- WeekActives.openSubActive(actor, 111)
- end
- LoginEventListerTable:eventLister("0", "幸运周末框架", WeekActives.openActive)
|