| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304 |
- -- 闯关礼金
- --db
- --[=[
- human.db.battleGift = {
- dailyStoreVal = nil, -- 每日获得的存储礼金
- dailyGetVal = nil, -- 每日已领取的礼金
- buyIdList = nil, -- 充值过的购买项Id列表
- }
- ]=]--
- local Msg = require("core.Msg")
- local Grid = require("bag.Grid")
- local BagLogic = require("bag.BagLogic")
- local Lang = require("common.Lang")
- local Broadcast = require("broadcast.Broadcast")
- local BattleExcel = require("excel.battle")
- local BattleExcel_Elite = require("excel.battle_elite")
- local BattleExcel_Hard = require("excel.battle_hard")
- local BattleLogic = require("battle.BattleLogic")
- local EliteDefine = require("battle.EliteDefine")
- local Util = require("common.Util")
- local BuyLogic = require("topup.BuyLogic")
- local RoleSystemLogic = require("roleSystem.RoleSystemLogic")
- local RoleSystemDefine = require("roleSystem.RoleSystemDefine")
- local LOGTYPE = "BattleGift"
- local function initData(human)
- human.db.battleGift = { dailyStoreVal = 0, dailyGetVal = 0 }
- end
- local function getData(human)
- return human.db.battleGift
- end
- local function addDailyStoreVal(human, val)
- local battleGiftData = getData(human)
- if not battleGiftData then
- initData(human)
- battleGiftData = getData(human)
- end
- battleGiftData.dailyStoreVal = battleGiftData.dailyStoreVal + val
- end
- local function addDailyGetVal(human, val)
- local battleGiftData = getData(human)
- if not battleGiftData then
- initData(human)
- battleGiftData = getData(human)
- end
- battleGiftData.dailyGetVal = battleGiftData.dailyGetVal + val
- end
- local function insertBuyIdList(human, buyId)
- local battleGiftData = getData(human)
- if not battleGiftData then
- initData(human)
- battleGiftData = getData(human)
- end
- battleGiftData.buyIdList = battleGiftData.buyIdList or {}
- table.insert(battleGiftData.buyIdList, buyId)
- end
- local function resetData(human)
- local battleGiftData = getData(human)
- if not battleGiftData then
- return
- end
- battleGiftData.dailyStoreVal = 0
- battleGiftData.dailyGetVal = 0
- end
- -- 获取本关卡能获得的礼金数量
- local function getStageVal(stageType, stageIdx)
- local conf
- if stageType == EliteDefine.COPY_LEVEL_ELITE then
- conf = BattleExcel_Elite.node
- elseif stageType == EliteDefine.COPY_LEVEL_ELITE then
- conf = BattleExcel_Hard.node
- else
- conf = BattleExcel.node
- end
- local stageCfg = conf[stageIdx]
- if stageCfg and stageCfg.giftStoreVal then
- return stageCfg.giftStoreVal
- end
- return 0
- end
- -- 计算当前关卡一共能获得的礼金
- local function calcCurrentStageVal(stageType, stageVal)
- local val = 0
- for i=1, stageVal do
- val = val + getStageVal(stageType, i)
- end
- return val
- end
- -- 处理老号, 把老号之前已经通关的关卡应该获得的礼金算上
- local function calcBeforeVal(human)
- local totalVal = 0
- for i=EliteDefine.COPY_ELITE_NORMAL, EliteDefine.COPY_ELITE_DIFFICULTY do
- local stage = BattleLogic.GetBattleIdByType(human, i)
- if stage and stage > 0 then
- totalVal = totalVal + calcCurrentStageVal(i, stage)
- end
- end
- addDailyStoreVal(human, totalVal)
- end
- -- 计算当前关卡一共增加的"每日可领取上限"
- local function calcStageDailyGeteVal(human)
- local val = 0
- local stage = BattleLogic.GetBattleIdByType(human, EliteDefine.COPY_ELITE_NORMAL)
- for k,v in ipairs(BattleExcel.node) do
- if k > stage then
- break
- end
- if v.dailyLimitVal and v.dailyLimitVal > 0 then
- val = val + v.dailyLimitVal
- end
- end
- return val
- end
- -- 计算每天可领礼金的最大值
- local function calclDailyMaxGetVal(human)
- local val = EliteDefine.BATTLEGIFT_FREE_LIMIT
- local battleGiftData = getData(human)
- if battleGiftData and battleGiftData.buyIdList then
- for _, buyId in ipairs(battleGiftData.buyIdList) do
- val = val + (EliteDefine.BATTLEGIFT_BUYID_2_LIMIT[buyId] or 0)
- end
- end
- val = val + calcStageDailyGeteVal(human)
- return val
- end
- -- 红点刷新
- local function updateRedDot(human)
- RoleSystemLogic.onDot(human, RoleSystemDefine.ROLE_SYS_ID_1106)
- end
- -- 外部调用,跨天处理
- function updateDaily(human)
- local battleGiftData = getData(human)
- if not battleGiftData then
- calcBeforeVal(human)
- updateRedDot(human)
- return
- end
- resetData(human)
- updateRedDot(human)
- end
- -- 外部调用, 登录处理
- function onLogin(human)
- local battleGiftData = getData(human)
- if not battleGiftData then
- calcBeforeVal(human)
- updateRedDot(human)
- end
- end
- -- 外部调用, 通关新的关卡
- function StageClearHandle(human, currentStage, stageType)
- local val = getStageVal(stageType, currentStage)
- if val > 0 then
- addDailyStoreVal(human, val)
- updateRedDot(human)
- end
- end
- -- 外部调用, 入口处是否有红点
- function isDot(human)
- local battleGiftData = getData(human)
- if not battleGiftData then
- return false
- end
- local dailyStoreVal = battleGiftData.dailyStoreVal or 0
- if dailyStoreVal <= 0 then
- return false
- end
- -- local dailyGetVal = battleGiftData.dailyGetVal or 0
- -- local dailyMaxVal = calclDailyMaxGetVal(human)
- -- if dailyGetVal >= dailyMaxVal then
- -- return false
- -- end
- return true
- end
- -- 外部调用, 充值处理接口
- function charge(human, nAllPrice, buyID)
- if not table.find(EliteDefine.BATTLEGIFT_BUYID_LIST, buyID) then
- return
- end
- local battleGiftData = getData(human)
- if battleGiftData and battleGiftData.buyIdList and table.find(battleGiftData.buyIdList, buyID) then
- return
- end
- insertBuyIdList(human, buyID)
- updateRedDot(human)
- BattleGift_Query(human)
- end
- -- 查询
- function BattleGift_Query(human)
- local msgRet = Msg.gc.GC_BATTLEGIFT_QUERY
- msgRet.leftTime = 0
- msgRet.dailyStoreVal = 0
- msgRet.dailyGetVal = 0
- msgRet.dailyMaxVal = 0
- local now = os.time()
- local toDayStartTime = Util.getDayStartTime(now)
- msgRet.leftTime = toDayStartTime + 86400 - now
- local battleGiftData = getData(human)
- msgRet.dailyStoreVal = battleGiftData and battleGiftData.dailyStoreVal or 0
- msgRet.dailyGetVal = battleGiftData and battleGiftData.dailyGetVal or 0
- msgRet.dailyMaxVal = calclDailyMaxGetVal(human)
- msgRet.dailyLimitVal = 0
- local targetBuyId = 0
- for _, buyId in ipairs(EliteDefine.BATTLEGIFT_BUYID_LIST) do
- if not battleGiftData or not battleGiftData.buyIdList or not table.find(battleGiftData.buyIdList, buyId) then
- targetBuyId = buyId
- break
- end
- end
- msgRet.dailyLimitVal = EliteDefine.BATTLEGIFT_BUYID_2_LIMIT[targetBuyId] or 0
- BuyLogic.fontBuyItem(human, msgRet.buyItem, targetBuyId)
- Msg.send(msgRet, human.fd)
- end
- -- 领取
- function BattleGift_Get(human)
- local battleGiftData = getData(human)
- if not battleGiftData then
- return Broadcast.sendErr(human, Lang.BATTLEGIFT_NOT_ENOUGH)
- end
- local dailyStoreVal = battleGiftData.dailyStoreVal or 0
- if dailyStoreVal <= 0 then
- return Broadcast.sendErr(human, Lang.BATTLEGIFT_NOT_ENOUGH)
- end
- local dailyGetVal = battleGiftData.dailyGetVal or 0
- local dailyMaxVal = calclDailyMaxGetVal(human)
- if dailyGetVal >= dailyMaxVal then
- return Broadcast.sendErr(human, Lang.BATTLEGIFT_DAILY_CAN_GET_MAX)
- end
- local getVal = math.min(dailyStoreVal, dailyMaxVal - dailyGetVal)
- if getVal < 100 then
- return Broadcast.sendErr(human, Lang.BATTLEGIFT_DAILY_CAN_GET_MAX)
- end
- addDailyStoreVal(human, -getVal)
- addDailyGetVal(human, getVal)
- local itemId = EliteDefine.BATTLEGIFT_2_ITEMID
- local itemCnt = math.floor(getVal / 100)
- BagLogic.addItem(human, itemId, itemCnt, LOGTYPE)
- BattleGift_Query(human)
- updateRedDot(human)
- end
|