| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365 |
- local OrderExcel = require("excel.warOrder")
- local Grid = require("bag.Grid")
- local ItemDefine = require("bag.ItemDefine")
- local BagLogic = require("bag.BagLogic")
- local BuyLogic = require("topup.BuyLogic")
- local Json = require("common.Json")
- local RoleSystemLogic = require("roleSystem.RoleSystemLogic")
- local RoleSystemDefine = require("roleSystem.RoleSystemDefine")
- ------------------------------------------------------
- -- 战令对应数据
- ------------------------------------------------------
- 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 1
- end
- local orderName = orderNameMap[orderType]
- local cfg = OrderExcel[orderName]
- local orderData = human.db.warOrder[orderName]
- local nBuy = orderData.unlock
- local exp = orderData.exp
- local maxFinishIdx = 0
- for lv in ipairs(orderData.finish) do
- if maxFinishIdx <= lv then
- maxFinishIdx = lv
- end
- end
- local maxUpgradeFinishIdx = 0
- for lv in ipairs(orderData.upgradeFinish) do
- if maxUpgradeFinishIdx <= lv then
- maxUpgradeFinishIdx = lv
- end
- end
- if 1 == nBuy then
- maxFinishIdx = (maxFinishIdx > maxUpgradeFinishIdx) and maxUpgradeFinishIdx or maxFinishIdx
- 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] and 1 or 0
- end
- local function push2Client(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
- upgradeFinish[#upgradeFinish+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
- local function genBuyItem()
- return {
- buyID = 0,
- region = "",
- cost = 0,
- icon = 0,
- name = "",
- desc = "",
- isFirst = 0,
- doubleCnt = 0,
- actDoubleCnt = 0,
- buyCnt = 0,
- vipExp = 0,
- zhekou = 0,
- yuanjia = 0,
- }
- end
- ------------------------------------------------------
- -- 对外暴露接口
- ------------------------------------------------------
- function isDot(human)
- local isDot = false
- for orderType in pairs(orderNameMap) do
- if checkRed(human,orderType) == 1 then
- isDot = true
- break
- end
- end
- return isDot
- 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 = {}
- 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 = ""
- local buyItem = genBuyItem()
- local buyId
- for _,v in pairs(langCfg) do
- if v.type == orderType then
- language = v.desc
- buyId = v.buyId
- break
- end
- end
- if buyId then
- BuyLogic.fontBuyItem(human,buyItem,buyId)
- end
- -------------------
- local finish = {}
- for lv in pairs(orderData.finish) do
- finish[#finish+1] = lv
- end
- local upgradeFinish = {}
- for lv in pairs(orderData.upgradeFinish) do
- upgradeFinish[#upgradeFinish+1] = lv
- end
- return {
- orderType = orderType,
- normal = normal,
- language = language,
- buyItem = buyItem,
- -- 自身的进度问题
- 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
- orderData.finish[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
- orderData.upgradeFinish[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
- upgradeFinish[#upgradeFinish+1] = lv
- end
- isRed[orderType] = nil
- -- 通知外层红点取消
- RoleSystemLogic.onDot(human, RoleSystemDefine.ROLE_SYS_ID_2005)
- return {
- orderType = orderType,
- exp = orderData.exp,
- unlock = orderData.unlock,
- finish = finish,
- upgradeFinish = upgradeFinish,
- isRed = 0,
- }
- end
- -- 解锁战令
- function warOrderUnlock(human,orderType)
- local orderName = orderNameMap[orderType]
- local orderData = human.db.warOrder[orderName]
- if not orderData then
- print(" invalid orderType,not found data ")
- return
- end
- -- 已经解锁
- if orderData.unlock ~= 0 then
- print(" invalid op, warOrder unlocked ")
- return
- end
- orderData.unlock = 1
- push2Client(human,orderType)
- return true
- end
- -- 触发战令增加经验
- function trigger(human,orderType,cnt)
- cnt = cnt or 1 --默认触发一次
- local orderName = orderNameMap[orderType]
- local orderData = human.db.warOrder[orderName]
- local exp = orderExpMap[orderType]
- orderData.exp = orderData.exp + (exp * cnt)
- -- 是否需要推送?
- push2Client(human,orderType)
- -- 通知外层红点变更
- RoleSystemLogic.onDot(human, RoleSystemDefine.ROLE_SYS_ID_2005)
- end
- function getWarOrderInfo(human,orderType,net)
- local orderName = orderNameMap[orderType]
- local orderData = human.db.warOrder[orderName]
- net.type = orderType
- net.exp = orderData.exp
- net.unlock = orderData.unlock
- net.isRed = checkRed(human,orderType)
- local finishIdx = 0
- for lv in pairs(orderData.finish) do
- finishIdx = finishIdx + 1
- net.finish[finishIdx] = lv
- end
- net.finish[0] = finishIdx
- local upgradeFinishIdx = 0
- for lv in pairs(orderData.upgradeFinish) do
- upgradeFinishIdx = upgradeFinishIdx + 1
- net.upgradeFinish[upgradeFinishIdx] = lv
- end
- net.upgradeFinish[0] = upgradeFinishIdx
- end
|