| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330 |
- -------------------------------------------------------
- -- VIP逻辑
- -- db.vipLv
- -- db.vipExp
- -- db.vipLibao
- -- db.vipYueka
- -------------------------------------------------------
- local VipExcel = require("excel.vip")
- local Util = require("common.Util")
- local Lang = require("common.Lang")
- local Msg = require("core.Msg")
- local ObjHuman = require("core.ObjHuman")
- local Grid = require("bag.Grid")
- local BagLogic = require("bag.BagLogic")
- local Broadcast = require("broadcast.Broadcast")
- local ChatPaoMaLogic = require("chat.ChatPaoMaLogic")
- local HeroLogic = require("hero.HeroLogic")
- local RoleHeadLogic = require("role.RoleHeadLogic")
- local RoleSystemLogic = require("roleSystem.RoleSystemLogic")
- local RoleSystemDefine = require("roleSystem.RoleSystemDefine")
- local MonthCard = require("present.MonthCard")
- -- vip特权
- VIP_POWER1 = 1 -- x皇冠联赛(冠军联赛)次数购买x次
- VIP_POWER2 = 2 -- o快速作战(征战扫荡)次数x次
- VIP_POWER3 = 3 -- o通天塔(恶魔之塔)购买次数x次
- VIP_POWER4 = 4 -- o黑市刷新次数x次
- VIP_POWER5 = 5 -- x圣树挑战每天复活x次
- VIP_POWER6 = 6 -- x女神精力值上限x点
- VIP_POWER7 = 7 -- o征战挂机经验+x%
- VIP_POWER8 = 8 -- o征战挂机金币+x%
- VIP_POWER9 = 9 -- o征战挂机武将经验+x%
- VIP_POWER10 = 10 -- o离线挂机收益时长x小时
- VIP_POWER11 = 11 -- o摇钱树(点金手)额外金币加成+x%
- VIP_POWER12 = 12 -- o英雄背包数量上限+x
- VIP_POWER13 = 13 -- o日常副本(黄金圣树)购买各加x次
- VIP_POWER14 = 14 -- o道具商城高级召唤券1折购买(某些商品限定vip等级,在shop表中配置)
- VIP_POWER15 = 15 -- o开启许愿池(寻宝)多连抽
- VIP_POWER16 = 16 -- o激活专属头像
- VIP_POWER17 = 17 -- o激活专属头像框
- VIP_POWER18 = 18 -- x至尊段位赛战斗跳过
- VIP_POWER19 = 19 -- o征战挂机情报+x%
- -- VIP_POWER20 = 21 -- o激活专属背景
- VIP_POWER21 = 21 -- o抽卡 卷轴折扣特权
- VIP_POWER22 = 22 -- o抽卡 钻石特权
- -- 礼包状态
- local LIBAO_STATE_CANT = 0 -- 不可购买
- local LIBAO_STATE_CAN = 1 -- 可购买
- local LIBAO_STATE_HAD = 2 -- 已购买
- -- 月卡额外奖励状态
- local YUEKAITEM_STATE_NONE = 0 -- 未激活
- local YUEKAITEM_STATE_CAN = 1 -- 可领取
- local YUEKAITEM_STATE_HAD = 2 -- 已领取
- -- 获取vip等级
- function getVipLv(human)
- return human.db.vipLv or 0 --
- end
- -- 加vip经验
- function addExp(human, exp)
- do return end
- local oldLv = getVipLv(human)
- local newLv = 0
- local newExp = (human.db.vipExp or 0) + exp
- for lv, config in ipairs(VipExcel.vip) do
- if newExp < config.exp then
- break
- end
- newLv = lv
- end
- human.db.vipExp = newExp
- human.db.vipLv = newLv
- if oldLv ~= newLv then
- onVipLvChange(human, oldLv, newLv)
- end
- sendQuery(human)
- end
- -- vip等级改变回调
- function onVipLvChange(human, oldLv, newLv)
- -- 激活专属头像/头像框
- for lv = oldLv + 1, newLv do
- --[[local headID = getPowerArgsByLv(VIP_POWER16, lv)
- if headID and headID > 0 then
- RoleHeadLogic.active(human, RoleHeadLogic.HEAD_TYPE_1, headID)
- end
- local headFrameID = getPowerArgsByLv(VIP_POWER17, lv)
- if headFrameID and headFrameID > 0 then
- RoleHeadLogic.active(human, RoleHeadLogic.HEAD_TYPE_2, headFrameID)
- end
- local backGroundID = getPowerArgsByLv(VIP_POWER20,lv)
- if backGroundID and backGroundID > 0 then
- RoleHeadLogic.active(human, RoleHeadLogic.HEAD_TYPE_6, backGroundID)
- end]]
- end
- HeroLogic.sendHeroBagCap(human)
- -- ChatPaoMaLogic.broadcast(human, ChatPaoMaLogic.PAOMA_TYPE_BROAD_TYPE18, newLv)
- end
- -- 是否购买礼包
- function isBuyLibao(human, lv)
- if not human.db.vipLibao then
- return
- end
- return Util.getBit(human.db.vipLibao, lv) > 0
- end
- -- 设置已购买
- function setBuyLibao(human, lv)
- human.db.vipLibao = human.db.vipLibao or 0
- human.db.vipLibao = Util.setBit(human.db.vipLibao, lv)
- end
- -- 获取礼包状态
- function getLibaoState(human, lv)
- if getVipLv(human) < lv then
- return LIBAO_STATE_CANT
- end
- if isBuyLibao(human, lv) then
- return LIBAO_STATE_HAD
- end
- return LIBAO_STATE_CAN
- end
- -- 获取月卡每日奖励状态
- function getYuekaItemState(human)
- -- todo 是否激活月卡
- -- YUEKAITEM_STATE_NONE
- if human.db.vipYueka then
- return YUEKAITEM_STATE_HAD
- end
- return YUEKAITEM_STATE_CAN
- end
- function getPowerArgsByLv(human, powerType, vipLv)
- local config = VipExcel.vip[0]
- if not config then return end
- local vipNum = config[powerType]
- local monthNum = MonthCard.getPowerArgs(human, powerType)
- return vipNum + monthNum
- end
- -- 特权参数
- function getPowerArgs(human, powerType)
- local vipLv = getVipLv(human)
- return getPowerArgsByLv(human, powerType, vipLv)
- end
- -- 激活特权需要VIP等级
- local POWERTYPE_2_NEEDLV = nil
- function getPowerNeedLv(powerType)
- if not POWERTYPE_2_NEEDLV then
- POWERTYPE_2_NEEDLV = {}
- for vipLv, config in ipairs(VipExcel.vip) do
- for ptype, value in pairs(config) do
- if type(ptype) == "number" and type(value) == "number" then
- POWERTYPE_2_NEEDLV[vipLv] = POWERTYPE_2_NEEDLV[vipLv] or {}
- POWERTYPE_2_NEEDLV[vipLv][ptype] = POWERTYPE_2_NEEDLV[vipLv][ptype] or value
- end
- end
- end
- end
- for vipLv, v in pairs(POWERTYPE_2_NEEDLV) do
- if v[powerType] == 1 then
- return vipLv
- end
- end
- return 0
- end
- -- 获取下级提升属性所需vip等级
- function getUpPowerNeedLv(human, powerType)
- local nowVipLv = getVipLv(human)
- local nowValue = getPowerArgsByLv(human, powerType, nowVipLv)
- if type(nowValue) ~= "number" then return end
- local maxVipLv = #VipExcel.vip
- for i = nowVipLv + 1, maxVipLv do
- local value = getPowerArgsByLv(human, powerType, i)
- if value > nowValue then
- return i
- end
- end
- end
- ----------------------------------- msg ---------------------------------------------
- -- vip基础信息
- sendQueryNet = nil
- function sendQuery(human)
- local vipLv = getVipLv(human)
- local nextConfig = VipExcel.vip[vipLv + 1]
- local msgRet = Msg.gc.GC_VIP_INFO
- msgRet.lv = vipLv
- msgRet.maxLv = #VipExcel.vip
- msgRet.curExp = human.db.vipExp or 0
- msgRet.nextExp = nextConfig and nextConfig.exp or 0
- if not sendQueryNet then
- local config = VipExcel.vip
- local len = 0
- for k, v in pairs(config) do
- len = len + 1
- local net = msgRet.vipList[len]
- net.lv = k
- net.vipTab = v.vipTab
- net.exp = v.exp
- end
- msgRet.vipList[0] = len
- sendQueryNet = 1
- end
- Msg.send(msgRet, human.fd)
- end
- -- VIP特权详情
- function sendPowerQuery(human,lv)
- local config = VipExcel.vip[lv]
- if config == nil then
- return
- end
- local msgRet = Msg.gc.GC_VIP_POWER_QUERY
- local len = #VipExcel.vip
- local net = msgRet.data
- net.lv = lv
- net.descs[0] = #config.descs
- for i = 1, net.descs[0] do
- local descNet = net.descs[i]
- descNet.desc = config.descs[i]
- descNet.isNew = config.news[i]
- end
- net.libaoItems[0] = #config.libaoItems
- for i = 1, net.libaoItems[0] do
- local itemID = config.libaoItems[i][1]
- local itemCnt = config.libaoItems[i][2]
- Grid.makeItem(net.libaoItems[i], itemID, itemCnt)
- end
-
- net.libaoPriceNew = config.libaoPriceNew
- net.libaoPriceOld = config.libaoPriceOld
-
- net.yuekaItems[0] = #config.yuekaItems
- for i = 1, net.yuekaItems[0] do
- local itemID = config.yuekaItems[i][1]
- local itemCnt = config.yuekaItems[i][2]
- Grid.makeItem(net.yuekaItems[i], itemID, itemCnt)
- end
- net.libaoState = getLibaoState(human, lv)
- net.yuekaState = getYuekaItemState(human)
- for i = 0,len - 1 do
- msgRet.dot[i + 1] = getLibaoState(human, i)
- end
- msgRet.dot[0] = len
- Msg.send(msgRet, human.fd)
- end
- -- 购买VIP礼包
- function buyLibao(human, lv)
- local config = VipExcel.vip[lv]
- if not config then return end
- local state = getLibaoState(human, lv)
- if state == LIBAO_STATE_CANT then
- return Broadcast.sendErr(human, Lang.YUNYING_BUY_ERR_VIP)
- end
- if state == LIBAO_STATE_HAD then
- return Broadcast.sendErr(human, Lang.YUNYING_BUY_ERR_HAD)
- end
- if not ObjHuman.checkRMB(human, config.libaoPriceNew) then
- return
- end
- setBuyLibao(human, lv)
- ObjHuman.decZuanshi(human, -config.libaoPriceNew, "vip_libao")
- for _, item in ipairs(config.libaoItems) do
- local itemID = item[1]
- local itemCnt = item[2]
- BagLogic.addItem(human, itemID, itemCnt, "vip_libao")
- end
- BagLogic.sendItemGetList(human, config.libaoItems, "vip_libao")
- sendPowerQuery(human, lv)
- RoleSystemLogic.onDot(human, RoleSystemDefine.ROLE_SYS_ID_105)
- end
- -- 领取月卡每日奖励
- function getYuekaItem(human)
- local vipLv = getVipLv(human)
- local config = VipExcel.vip[vipLv]
- if not config then return end
-
- local state = getYuekaItemState(human)
- if state == YUEKAITEM_STATE_NONE then
- return Broadcast.sendErr(human, Lang.VIP_YUEKA_ITEM_ERR_GET)
- end
- if state == YUEKAITEM_STATE_HAD then
- return Broadcast.sendErr(human, Lang.YUNYING_GET_ERR_HADGET)
- end
- human.db.vipYueka = true
- for _, item in ipairs(config.yuekaItems) do
- local itemID = item[1]
- local itemCnt = item[2]
- BagLogic.addItem(human, itemID, itemCnt, "vip_yueka")
- end
- BagLogic.sendItemGetList(human, config.yuekaItems, "vip_yueka")
- sendPowerQuery(human, vipLv)
- end
- -- 登陆回调
- function onLogin(human)
- sendQuery(human)
- end
- -- 每日刷新
- function updateDaily(human)
- human.db.vipYueka = nil
- end
- function isDot(human)
- if isBuyLibao(human, 0) then
- return
- end
- return true
- end
|