| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310 |
- local OrderExcel = require("excel.warOrder")
- local Grid = require("bag.Grid")
- local ItemDefine = require("bag.ItemDefine")
- local BagLogic = require("bag.BagLogic")
- ------------------------------------------------------
- -- 战令对应数据
- ------------------------------------------------------
- local battleOrder = 1
- local devilOrder = 2
- local clanOrder = 3
- local arenaOrder = 4
- local passBattleExp = 5
- local passDevilExp = 5
- local passClanBattleExp = 10
- local victoryArenaBattleExp = 2
- local orderExpMap = {
- [battleOrder] = passBattleExp,
- [devilOrder] = passDevilExp,
- [clanOrder] = passClanBattleExp,
- [arenaOrder] = victoryArenaBattleExp,
- }
- local orderNameMap = {
- [battleOrder] = "battleOrder",
- [devilOrder] = "devilOrder",
- [clanOrder] = "clanOrder",
- [arenaOrder] = "arenaOrder",
- }
- local GC_WARORDER_CHANGE = 13
- local isRed = {}
- ------------------------------------------------------
- -- local 函数
- ------------------------------------------------------
- --[[
- warOrder = {
- [battleOrder] = {
- unlock = number
- exp = number
- finish = {
- [lv] = number
- }
- upgradeFinish = {}
- }
- }
- ]]
- local function checkRewardByIdx(human,orderType,idx)
- local orderName = orderNameMap[orderType]
- local orderData = human.db.warOrder[orderName]
- local isUpgradeOk
- if orderData.unlock ~= 0 and not orderData.upgradeFinish[idx] then
- isUpgradeOk = true
- end
- return not orderData.finish[idx] , isUpgradeOk
- end
- local function checkRed(human,orderType)
- if isRed[orderType] then
- return true
- end
- local orderName = orderNameMap[orderType]
- local cfg = OrderExcel[orderName]
- local orderData = human.db.warOrder[orderName]
- local exp = orderData.exp
- local maxFinishIdx = 0
- for _,lv in ipairs(orderData.finish) do
- if maxFinishIdx <= lv then
- maxFinishIdx = lv
- end
- end
- local maxExpIdx = 0
- for _,cfg in pairs(cfg) do
- if cfg.process <= exp and maxExpIdx <= cfg.idx then
- maxExpIdx = cfg.idx
- end
- end
- isRed[orderType] = maxFinishIdx < maxExpIdx
- return (isRed[orderType] == true) and 1 or 0
- end
- local function getWarOrderByType(human,orderType)
- local orderName = orderNameMap[orderType]
- local orderData = human.db.warOrder[orderName]
- local finish = {}
- for lv in pairs(orderData.finish) do
- finish[#finish+1] = lv
- end
- local upgradeFinish = {}
- for lv in pairs(orderData.upgradeFinish) do
- finish[#finish+1] = lv
- end
- return {
- type = orderType,
- exp = orderData.exp,
- isRed = checkRed(human,orderType),
- unlock = orderData.unlock,
- finish = finish,
- upgradeFinish = upgradeFinish,
- }
- end
- ------------------------------------------------------
- -- 对外暴露接口
- ------------------------------------------------------
- function warOrderInfo(human,orderType)
- local orderName = orderNameMap[orderType]
- local cfg = OrderExcel[orderName]
- local langCfg = OrderExcel.desc
- local orderData = human.db.warOrder[orderName]
- if not cfg or not orderData then
- return
- end
- -- 获取配置表相关数据, 发送给客户端
-
- local normal = {}
- local upgrade = {}
- for _,v in pairs(cfg) do
- local cfgData = {
- idx = v.idx,
- process = v.process,
- }
- local content = {}
- local upgradeContent = {}
- if #v.content ~= 0 then
- for _,item in ipairs(v.content) do
- local data = {
- getway = {},
- suipian = {},
- equip = {},
- fuwen = {},
- }
- if not ItemDefine.isEquip(item[1]) then
- Grid.makeItem(data, item[1], item[2])
- end
- content[#content + 1] = data
- end
-
- end
- if #v.upgradeContent ~= 0 then
- for _,item in ipairs(v.upgradeContent) do
- local data = {
- getway = {},
- suipian = {},
- equip = {},
- fuwen = {},
- }
- if not ItemDefine.isEquip(item[1]) then
- Grid.makeItem(data, item[1], item[2])
- end
- upgradeContent[#upgradeContent + 1] = data
- end
- end
- cfgData.content = content
- cfgData.upgradeContent = upgradeContent
- normal[#normal+1] = cfgData
- end
- local language = ""
- for _,v in pairs(langCfg) do
- if v.type == orderType then
- language = v.desc
- break
- end
- end
- -------------------
- local finish = {}
- for lv in pairs(orderData.finish) do
- finish[#finish+1] = lv
- end
- local upgradeFinish = {}
- for lv in pairs(orderData.upgradeFinish) do
- finish[#finish+1] = lv
- end
- return {
- orderType = orderType,
- normal = normal,
- language = language,
- upgrade = upgrade,
- -- 自身的进度问题
- exp = orderData.exp,
- unlock = orderData.unlock,
- finish = finish,
- upgradeFinish = upgradeFinish,
- }
- end
- function warOrderReward(human,orderType)
- local orderName = orderNameMap[orderType]
- local cfg = OrderExcel[orderName]
- local orderData = human.db.warOrder[orderName]
- if not cfg or not orderData then
- return
- end
-
- local process = orderData.exp
- local itemMap = {}
- local finish_copy = table.copy(orderData.finish)
- local upgrade_finish_copy = table.copy(orderData.upgradeFinish)
- for _,v in pairs(cfg) do
- if process >= v.process then
- local isOk,isUpgradeOk = checkRewardByIdx(human,orderType,v.idx)
- if isOk then
- for _,item in ipairs(v.content) do
- itemMap[item[1]] = itemMap[item[1]] or 0
- itemMap[item[1]] = itemMap[item[1]] + item[2]
- end
- finish_copy[v.idx] = 0
- end
- if isUpgradeOk then
- for _,item in ipairs(v.upgradeContent) do
- itemMap[item[1]] = itemMap[item[1]] or 0
- itemMap[item[1]] = itemMap[item[1]] + item[2]
- end
- upgrade_finish_copy[v.idx] = 0
- end
- end
- end
- -- 检查是否有可领取的item
- if not next(itemMap) then
- return
- end
- local itemList = {}
- for id,count in pairs(itemMap) do
- itemList[#itemList+1] = {
- id,count
- }
- end
- BagLogic.addItemList(human,itemList,"war_order_get")
- -- 同步数据
- orderData.finish = finish_copy
- orderData.upgradeFinish = upgrade_finish_copy
- ------------------------------------------------
- local finish = {}
- for lv in pairs(orderData.finish) do
- finish[#finish+1] = lv
- end
- local upgradeFinish = {}
- for lv in pairs(orderData.upgradeFinish) do
- finish[#finish+1] = lv
- end
- isRed[orderType] = nil
- return {
- orderType = orderType,
- exp = orderData.exp,
- unlock = orderData.unlock,
- finish = finish,
- upgradeFinish = upgradeFinish,
- isRed = checkRed(human,orderType),
- }
- end
- -- 解锁战令
- function warOrderUnlock(human,orderType)
- local orderName = orderNameMap[orderType]
- local orderData = human.db.warOrder[orderName]
- if not orderData then
- return
- end
- -- 已经解锁
- if orderData.unlock ~= 0 then
- return
- end
- orderData.unlock = 1
- return true
- end
- -- 触发战令增加经验
- function trigger(human,orderType)
- local orderName = orderNameMap[orderType]
- local orderData = human.db.warOrder[orderName]
- local exp = orderExpMap[orderType]
- orderData.exp = orderData.exp + exp
- -- 是否需要推送?
- local finish = {}
- for lv in pairs(orderData.finish) do
- finish[#finish+1] = lv
- end
- local upgradeFinish = {}
- for lv in pairs(orderData.upgradeFinish) do
- finish[#finish+1] = lv
- end
- local data = {
- orderType = orderType,
- exp = orderData.exp,
- unlock = orderData.unlock,
- finish = finish,
- upgradeFinish = upgradeFinish,
- isRed = checkRed(human,orderType),
- }
- -- 临时require 确保两个文件不会相互引用
- local newLogic = require "role.NewLogic"
- newLogic.PushClient(human,GC_WARORDER_CHANGE,data)
- end
- function getWarOrderInfo(human)
- local ret = {}
- -- 用于遍历
- for orderType in pairs(orderExpMap) do
- ret[#ret + 1] = getWarOrderByType(human,orderType)
- end
- return ret
- end
|