-------------------------------- -- 成神之路-君临天下 -- db.kingworld[id] = state -------------------------------- local Lang = require("common.Lang") local Util = require("common.Util") local OpenActLogic = require("present.OpenAct") local OpenServerExcel = require("excel.openAct") local MailExcel = require("excel.mail") local Msg = require("core.Msg") local ObjHuman = require("core.ObjHuman") local MailManager = require("mail.MailManager") local Grid = require("bag.Grid") local ChatPaoMaLogic = require("chat.ChatPaoMaLogic") local BattleLogic = require("battle.BattleLogic") local SceneHandler = require("scene.Handler") local HeroGrid = require("hero.HeroGrid") local MonthCardLogic = require("present.MonthCard") local BagLogic = require("bag.BagLogic") local YunYingLogic = require("yunying.YunYingLogic") local PanelDefine = require("broadcast.PanelDefine") local OpenServerGiftLogic = require("present.OpenServerGiftLogic") local ChengjiuExcel = require("excel.chengjiu").chengjiu KING_TYPE_1 = 1 -- 关卡必须75 KING_TYPE_2 = 2 -- 次日登录 KING_TYPE_3 = 3 -- 激活至尊月卡 KING_TYPE_4 = 4 -- 总览 STATE_NONE = 0 STATE_FINISH = 1 -- 可领取 STATE_GET = 2 -- 已领取 -- 第二版需求出了 之后 有的服已经上线了 所以 维持原有的 DB 格式去修改 -- local function initDB(human) if not human.db.kingworld then human.db.kingworld = { } for i = 1, KING_TYPE_4 do human.db.kingworld[i] = human.db.kingworld[i] or { } human.db.kingworld[i].status = human.db.kingworld[i].status or STATE_NONE end end end -- 是否开放 function isOpen(human) if not SceneHandler.canCharge(human) then return end local isOpen, leftTime = OpenActLogic.getOpenActTime(OpenActLogic.OPEN_ACT_KING_WORLD) return isOpen, leftTime end -- 返回时间 function getLeftTime(human) local isOpen, leftTime = OpenActLogic.getOpenActTime(OpenActLogic.OPEN_ACT_KING_WORLD) return leftTime end -- 发送奖励 local function mailReward(human, id, mailId) local config = OpenServerExcel.kingWorld[id] if not config then return end local items = { } for z, v in ipairs(config.reward) do items[#items + 1] = { v[1], v[2] } end local title = MailExcel.mail[mailId].title local content = MailExcel.mail[mailId].content local senderName = MailExcel.mail[mailId].senderName MailManager.add(MailManager.SYSTEM, human.db._id, title, content, items, senderName) end function fontChengJiuNet(human, net, id) local config = ChengjiuExcel[id] net.maxCnt = config.param net.nowCnt = 0 net.state = 0 if human.db.chengjiu.type and human.db.chengjiu.type[config.type] then net.nowCnt = human.db.chengjiu.type[config.type] end if human.db.chengjiu.task and human.db.chengjiu.task[id] == STATE_GET then net.state = human.db.chengjiu.task[id] end end function query(human) local open, leftTime = isOpen(human) if not open then return end local msgRet = Msg.gc.GC_PRESENT_KING_WORLD_QUERY msgRet.leftTime = leftTime msgRet.list[0] = KING_TYPE_3 for i = KING_TYPE_1, KING_TYPE_3 do local net = msgRet.list[i] local cf = OpenServerExcel.kingWorld[i] net.id = i net.sort = cf.sort net.desc = cf.desc net.panelID = cf.panelID net.tubiao = cf.tubiaoID net.item[0] = #cf.reward for j = 1, net.item[0] do local itemID = cf.reward[j][1] local itemCnt = cf.reward[j][2] Grid.makeItem(net.item[j], itemID, itemCnt) end fontChengJiuNet(human, net, cf.chengJiuID) end local fconfig = OpenServerExcel.kingWorld[KING_TYPE_4] msgRet.finalId = KING_TYPE_4 msgRet.finalReward[0] = #fconfig.reward for j = 1, msgRet.finalReward[0] do local itemID = fconfig.reward[j][1] local itemCnt = fconfig.reward[j][2] Grid.makeItem(msgRet.finalReward[j], itemID, itemCnt) end HeroGrid.makeHeroSimpleByID(msgRet.hero, fconfig.reward[1][1]) msgRet.finalState = getState(human, KING_TYPE_4) Msg.send(msgRet, human.fd) end -- 领奖 function getReward(human, id, mail) if not isOpen(human) then return end local cf = OpenServerExcel.kingWorld[id] if not cf then return end -- 不在这个界面领取 if id ~= KING_TYPE_4 then return end local status = getState(human, id) if status ~= STATE_FINISH then return end human.db.kingworld = human.db.kingworld or {} -- 标识状态 human.db.kingworld[id] = human.db.kingworld[id] or {} human.db.kingworld[id].status = STATE_GET if not mail then BagLogic.addItemList(human, cf.reward, "kingworld") else mailReward(human, id, 1012) end for k, v in pairs(funcID) do YunYingLogic.updateIcon(YYInfo[k], human) YunYingLogic.sendGroupUpdate(YYInfo[k], human, PanelDefine.PANEL_ID_3603) break end query(human) end -- 获取当前进度 function canFinish(human, id) if id ~= KING_TYPE_4 then local cf = OpenServerExcel.kingWorld[id] local config = ChengjiuExcel[cf.chengJiuID] if human.db.chengjiu.type and human.db.chengjiu.type[config.type] then if human.db.chengjiu.task and human.db.chengjiu.task[cf.chengJiuID] and human.db.chengjiu.task[cf.chengJiuID] == STATE_GET then return true end end return false else return isFinishAll(human) end end -- 是否领取 function getState(human, id) local cf = OpenServerExcel.kingWorld[id] if not cf then return end if id == KING_TYPE_4 then local state = isFinishAll(human) if not state then return STATE_NONE end if not human.db.kingworld then return STATE_FINISH end if human.db.kingworld[id] and human.db.kingworld[id].status == STATE_GET then return STATE_GET else return STATE_FINISH end end --[[ if human.db.kingworld[id].status == STATE_NONE then if canFinish(human, id) then return STATE_FINISH end return STATE_NONE end return human.db.kingworld[id].status ]] end function setState(human,id) if not isOpen(human) then return end initDB(human) human.db.kingworld[id].status = STATE_GET for k, v in pairs(funcID) do YunYingLogic.sendGroupUpdate(YYInfo[k], human, PanelDefine.PANEL_ID_3603) break end end -- 1-3都完成 function isFinishAll(human) for i = 1, KING_TYPE_3 do if not canFinish(human, i) then return end end return true end function updateDaily(human) if not isOpen(human) then -- 活动结束推送没有领取的奖励 if human.db.kingworld then for i = KING_TYPE_1, KING_TYPE_4 do getReward(human, i, true) end human.db.kingworld = nil end return end initDB(human) end function isRed(human) if not isOpen(human) then return end for i = KING_TYPE_1, KING_TYPE_4 do if getState(human, i) == STATE_FINISH then return true end end end