| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174 |
- -------------------------------------------------------
- -- 竞技场相关活动管理
- -- 列表显示用到
- -- getActState 活动状态
- -- getActDesc 活动描述
- -- isActRed 是否有红点
- -- fontActArgs 额外参数
- -------------------------------------------------------
- local JjcExcel = require("excel.jjc")
- local Msg = require("core.Msg")
- local Grid = require("bag.Grid")
- local RoleSystemLogic = require("roleSystem.RoleSystemLogic")
- local JjcLogic = require("jjc.JjcLogic")
- local RoleSystemDefine = require("roleSystem.RoleSystemDefine")
- -- 活动状态
- STATE_NOOPEN = 0 -- 未开启
- STATE_NORMAL = 1 -- 常驻活动
- STATE_START = 2 -- 赛季进行中
- STATE_READY = 3 -- 新赛季倒计时
- -- id->actInfo
- ID_2_ACTINFO = ID_2_ACTINFO or {}
- ID_2_ACTINFO_MIDDLE = ID_2_ACTINFO_MIDDLE or {}
- local function initActInfo(list, configs)
- for id, cf in pairs(configs) do
- local moduleFn = nil
- if cf.moduleFn ~= "" then
- moduleFn = load("return require(\""..cf.moduleFn.."\")")()
- end
- local actInfo = {}
- actInfo.id = id
- actInfo.config = cf
- actInfo.module = moduleFn
- list[id] = actInfo
- end
- end
- -- 初始
- function init()
- initActInfo(ID_2_ACTINFO, JjcExcel.act)
- initActInfo(ID_2_ACTINFO_MIDDLE, JjcExcel.actMiddle)
- end
- -- 获取actInfo
- function getActInfo(isMiddle, id)
- local list = isMiddle and ID_2_ACTINFO_MIDDLE or ID_2_ACTINFO
- return list[id]
- end
- -- 获取活动状态
- function getActState(isMiddle, id, human)
- local actInfo = getActInfo(isMiddle, id)
- if not actInfo then
- return STATE_NORMAL, 0
- end
- if not actInfo.module or
- not actInfo.module.getActState then
- return STATE_NORMAL, 0
- end
- return actInfo.module.getActState(human)
- end
- -- 额外参数设置
- function fontActArgs(isMiddle, id, args, human)
- args[0] = 0
- local actInfo = getActInfo(isMiddle, id)
- if not actInfo then
- return
- end
- if not actInfo.module or
- not actInfo.module.fontActArgs then
- return
- end
- actInfo.module.fontActArgs(args, human)
- end
- -- 特殊描述
- function getActDesc(isMiddle, id, cf)
- local actInfo = getActInfo(isMiddle, id)
- if not actInfo then
- return cf.desc
- end
- if not actInfo.module or
- not actInfo.module.getActDesc then
- return cf.desc
- end
- return actInfo.module.getActDesc(cf.desc)
- end
- -- 是否显示红点
- function isActRed(isMiddle, id, human)
- local actInfo = getActInfo(isMiddle, id)
- if not actInfo then
- return
- end
- if not actInfo.module or
- not actInfo.module.isActRed then
- return
- end
- return actInfo.module.isActRed(human)
- end
- -- 封装活动结构体
- local function fontJJCActNet(net, isMiddle, id, cf, human)
- net.id = id
- net.panelID = cf.panelID
- net.bg = cf.bg
- net.name = cf.name
- local state, leftTime = getActState(isMiddle, id, human)
- if RoleSystemLogic.isOpen(human, cf.systemID) then
- net.desc = getActDesc(isMiddle, id, cf)
- net.state = state
- net.leftTime = leftTime
- else
- net.desc = RoleSystemLogic.getOpenDesc(cf.systemID)
- net.state = STATE_NOOPEN
- net.leftTime = 0
- end
- net.reward[0] = #cf.reward
- for i = 1, net.reward[0] do
- local itemID = cf.reward[i][1]
- local itemCnt = cf.reward[i][2]
- Grid.makeItem(net.reward[i], itemID, itemCnt)
- end
- net.isRed = isActRed(isMiddle, id, human) and 1 or 0
- fontActArgs(isMiddle, id, net.args, human)
- end
- -- 活动列表
- function sendActList(human)
- local msgRet = Msg.gc.GC_JJC_ACT_LIST
- msgRet.list[0] = 0
- for id, cf in ipairs(JjcExcel.act) do
- msgRet.list[0] = msgRet.list[0] + 1
- local net = msgRet.list[msgRet.list[0]]
- fontJJCActNet(net, false, id, cf, human)
- end
- msgRet.jjcDouble = JjcLogic.getJJCDoubleCnt(human)
- msgRet.worshipCnt = human.db.jjcBeWorship or 0
- Msg.send(msgRet, human.fd)
- end
- -- 跨服争霸活动列表
- function sendMiddleActList(human)
- local msgRet = Msg.gc.GC_JJC_MIDDLE_ACT_LIST
- msgRet.list[0] = 0
- for id, cf in ipairs(JjcExcel.actMiddle) do
- msgRet.list[0] = msgRet.list[0] + 1
- local net = msgRet.list[msgRet.list[0]]
- fontJJCActNet(net, true, id, cf, human)
- end
- --Msg.trace(msgRet)
- Msg.send(msgRet, human.fd)
- end
- -- 只有竞技场冠军试炼的
- function isDot(human)
- if not RoleSystemLogic.isOpen(human, RoleSystemDefine.ROLE_SYS_ID_1301, true) and
- not RoleSystemLogic.isOpen(human, RoleSystemDefine.ROLE_SYS_ID_1302, true) then
- return
- end
- if JjcLogic.championChallengeDot(human) == 1 or
- JjcLogic.championBillboardDot(human) == 1 or
- JjcLogic.championRecordDot(human) == 1 then
- return true
- end
- end
|