| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196 |
- ---------------------------------------------------
- -- 荣耀峡谷 个人成就/团队成就
- -- db.valleyTask.list 领取记录 [id]=true
- -- db.valleyTask.record 成就进度 [type]=value
- ---------------------------------------------------
- local ValleyExcel = require("excel.valley")
- local Util = require("common.Util")
- local Lang = require("common.Lang")
- local Msg = require("core.Msg")
- local Broadcast = require("broadcast.Broadcast")
- local Grid = require("bag.Grid")
- local BagLogic = require("bag.BagLogic")
- local RoleDBLogic = require("role.RoleDBLogic")
- local ValleyLogic = require("valley.ValleyLogic")
- local TASK_TYPE_KILLCNT = 1 -- 杀敌个数
- local TASK_TYPE_ROADCNT = 2 -- 攻破营地个数
- -- 状态
- local STATE_NONE = 0 -- 不可领
- local STATE_GET = 1 -- 可领
- local STATE_HAD = 2 -- 已领
- -- 封装成就结构体
- local function fontTaskNet(net, id, config, human)
- local descConfig = ValleyExcel.taskDesc[config.taskType]
- net.id = id
- net.desc = Util.format(descConfig.desc, config.taskValue)
- net.state = getTaskState(human, id)
- net.items[0] = #config.items
- for i = 1, net.items[0] do
- local itemID = config.items[i][1]
- local itemCnt = config.items[i][2]
- Grid.makeItem(net.items[i], itemID, itemCnt)
- end
- net.cnt = getValue(human, config.taskType)
- net.maxCnt = config.taskValue
- end
- -- 查看列表
- function sendQuery(human, taskType)
- local msgRet = Msg.gc.GC_VALLEY_TASK_QUERY
- msgRet.taskType = taskType
- msgRet.reds[0] = TASK_TYPE_ROADCNT
- for i = 1, msgRet.reds[0] do
- msgRet.reds[i] = isRedByType(i) and 1 or 0
- end
- local list = getIDsByType(taskType)
- msgRet.list[0] = list and #list or 0
- for i = 1, msgRet.list[0] do
- local id = list[i]
- local config = ValleyExcel.task[id]
- fontTaskNet(msgRet.list[i], id, config, human)
- end
- -- Msg.trace(msgRet)
- Msg.send(msgRet, human.fd)
- end
- -- 领取奖励
- function getReward(human, id)
- local state = getTaskState(human, id)
- if state == STATE_HAD then
- return Broadcast.sendErr(human, Lang.YUNYING_GET_ERR_HADGET)
- end
- if state == STATE_NONE then
- return Broadcast.sendErr(human, Lang.YUNYING_GET_ERR_CONDITION)
- end
- local config = ValleyExcel.task[id]
- setGet(human, id)
- for i = 1, #config.items do
- local itemID = config.items[i][1]
- local itemCnt = config.items[i][2]
- BagLogic.addItem(human, itemID, itemCnt, "valley")
- end
- local msgRet = Msg.gc.GC_VALLEY_TASK_GET
- msgRet.id = id
- msgRet.reds[0] = TASK_TYPE_ROADCNT
- for i = 1, msgRet.reds[0] do
- msgRet.reds[i] = isRedByType(i) and 1 or 0
- end
- Msg.send(msgRet, human.fd)
- if not isRed(human) then -- 刷新主界面红点
- ValleyLogic.query(human)
- end
- end
- -- 是否有红点
- function isRed(human)
- for taskType in pairs(ValleyExcel.taskDesc) do
- if isRedByType(human, taskType) then
- return true
- end
- end
- end
- -- 是否有红点,根据任务类型
- function isRedByType(human, taskType)
- local list = getIDsByType(taskType)
- if not list then return end
- local value = getValue(human, taskType)
- for _, id in ipairs(list) do
- local state = getTaskState(human, id)
- if state == STATE_NONE then
- break
- end
- if state == STATE_GET then
- return true
- end
- end
- end
- -- 获取任务状态
- function getTaskState(human, id)
- local config = ValleyExcel.task[id]
- if not config then
- return STATE_NONE
- end
- if getValue(human, config.taskType) < config.taskValue then
- return STATE_NONE
- end
- if isGet(human, id) then
- return STATE_HAD
- end
- return STATE_GET
- end
- local TASKTYPE_2_IDS = nil
- function getIDsByType(taskType)
- if not TASKTYPE_2_IDS then
- TASKTYPE_2_IDS = {}
- for id, config in Util.pairsByKeys(ValleyExcel.task) do
- if not TASKTYPE_2_IDS[config.taskType] then
- TASKTYPE_2_IDS[config.taskType] = {}
- end
- local len = #TASKTYPE_2_IDS[config.taskType]
- TASKTYPE_2_IDS[config.taskType][len + 1] = id
- end
- end
- return TASKTYPE_2_IDS[taskType]
- end
- -- 是否已领取
- function isGet(human, id)
- if not human.db.valleyTask then
- return
- end
- if not human.db.valleyTask.list then
- return
- end
- return human.db.valleyTask.list[id]
- end
- -- 设置已领取
- function setGet(human, id)
- if not human.db.valleyTask then
- human.db.valleyTask = {}
- end
- if not human.db.valleyTask.list then
- human.db.valleyTask.list = {}
- end
- human.db.valleyTask.list[id] = true
- end
- -- 获取进度值
- function getValue(human, taskType)
- if not human.db.valleyTask then
- return 0
- end
- if not human.db.valleyTask.record then
- return 0
- end
- return human.db.valleyTask.record[taskType] or 0
- end
- -- 刷新任务进度
- function updateValue(uuid, killCnt, winCnt)
- if killCnt < 1 and winCnt < 1 then
- return
- end
- local db = RoleDBLogic.getDb(uuid, "valleyTask")
- if not db then return end
- db.valleyTask = db.valleyTask or {}
- db.valleyTask.record = db.valleyTask.record or {}
- local oldKillCnt = db.valleyTask.record[TASK_TYPE_KILLCNT] or 0
- db.valleyTask.record[TASK_TYPE_KILLCNT] = oldKillCnt + killCnt
- local oldWinCnt = db.valleyTask.record[TASK_TYPE_ROADCNT] or 0
- db.valleyTask.record[TASK_TYPE_ROADCNT] = oldWinCnt + winCnt
- RoleDBLogic.saveRoleSset(db)
- end
|