| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404 |
- --------------------------------
- -- 文件名 : OpenServerActPowerUp.lua
- -- 文件说明 : 开服7天活动 - 战力冲刺
- -- 创建时间 : 2024/11/14
- -- 创建人 : FC
- --------------------------------
- local Util = require("common.Util")
- local Lang = require("common.Lang")
- local Broadcast = require("broadcast.Broadcast")
- local OpenAct = require("present.OpenAct")
- local PresentExcel = require("excel.present")
- local OpenActExcel = require("excel.openAct")
- local MailExcel = require("excel.mail")
- local Msg = require("core.Msg")
- local ObjHuman = require("core.ObjHuman")
- local MailManager = require("mail.MailManager")
- local BagLogic = require("bag.BagLogic")
- local Grid = require("bag.Grid")
- local KingWorldLogic = require("present.KingWorldLogic")
- local YunYingLogic = require("yunying.YunYingLogic")
- local PanelDefine = require("broadcast.PanelDefine")
- local SevenDayGiftLogic = require("present.SevenDayGiftLogic")
- local CommonDB = require("common.CommonDB")
- local BuyLogic = require("topup.BuyLogic")
- local GuideLogic = require("guide.GuideLogic")
- local Log = require("common.Log")
- local tPrizeByID = nil
- POWERGIFT_STATE_NONE = 0 -- 不可领取
- POWERGIFT_STATE_CANGET = 1 -- 可领取
- POWERGIFT_STATE_FINISH = 2 -- 已领取
- ----------------------------------------- DB数据操作 -------------------------------------
- -- 初始化DB数据
- local function ActPowerUp_InitDB(human)
- if not human then
- return false
- end
- human.db.PowerGift = {}
- return true
- end
- -- 获取DB数据
- local function ActPowerUp_GetDB(human)
- if not human or not human.db.PowerGift then
- return nil
- end
-
- return human.db.PowerGift
- end
- -- 删除DB数据
- local function ActPowerUp_DelDB(human)
- if not human or not human.db.PowerGift then
- return
- end
-
- human.db.PowerGift = nil
- end
- -- 创建DB数据
- local function ActPowerUp_CreateDB(human)
- if not human then
- return false
- end
- if not human.db.PowerGift then
- local bRet = ActPowerUp_InitDB(human)
- if false == bRet then
- print("[ActPowerUp_CreateDB] 初始化BD数据失败")
- return false
- end
- if tPrizeByID then
- for nID, value in pairs(tPrizeByID) do
- human.db.PowerGift[nID] = POWERGIFT_STATE_NONE
- end
- else
- print("[ActPowerUp_CreateDB] 不存在对应的ID对应配置")
- return false
- end
- end
- return true
- end
- -- 获取某个数据状态
- local function ActPowerUp_GetDBIDState(human, nID)
- if not human or 0 >= nID then
- return POWERGIFT_STATE_NONE
- end
- local tDBPrize = ActPowerUp_GetDB(human)
- if nil == tDBPrize then
- return POWERGIFT_STATE_NONE
- end
- return tDBPrize[nID]
- end
- -- 设置某个数据状态
- local function ActPowerUp_SetDBIDState(human, nID, nState)
- if not human or 0 >= nID then
- return false
- end
- local tDBPrize = ActPowerUp_GetDB(human)
- if nil == tDBPrize then
- return false
- end
- tDBPrize[nID] = nState
- return true
- end
- ----------------------------------------- 内部函数判断 -------------------------------------
- -- 获取配置
- local function ActPowerUp_GetConfig()
- return OpenActExcel.PowerUp
- end
- -- 日志写入
- local function ActPowerUp_WriteLog(szText)
- Log.write(Log.LOGID_OSS_OPENSERVER_ACT, szText)
- end
- -- 报错打印
- local function ActPowerUp_PrintInfo(szFuncName,szText)
- print(szFuncName.." "..szText)
- end
- -- 客户端回包
- local function ActPowerUp_SendClient(fd, data)
- Msg.send(data, fd)
- ActPowerUp_PrintInfo("[ActPowerUp_SendClient]", "发送给客户端结束")
- end
- -- 活动是否开启
- local function ActPowerUp_IsOpen(human)
- local szFuncName = "ActPowerUp_IsOpen"
- local szText = ""
- if not human then
- szText = "参数不正确 "
- ActPowerUp_PrintInfo(szFuncName, szText)
- return false
- end
- local nOpenLv = YunYingLogic.getOpenLvByPanelID(PanelDefine.PANEL_ID_3609)
- if human.db.lv < nOpenLv then
- return false
- end
- local flag = OpenAct.getOpenActTime(OpenAct.OPEN_ACT_SERVER_GIFT)
- if not flag then
- return false
- end
- return true
- end
- -- 活动剩余时间
- local function ActPowerUp_GetLeftTime()
- local openDay = CommonDB.getServerOpenDay()
- if openDay == nil then
- return 0
- end
- local OpenActConfig = OpenActExcel.openAct[1]
- if not OpenActConfig then return 0 end
- local sDay = OpenActConfig.sDay
- local eDay = OpenActConfig.eDay
- if openDay >= sDay and openDay <= eDay then
- local time = os.time()
- local openTime = CommonDB.getServerOpenTime()
- if openTime == 0 then
- return 0
- end
- local endTime = Util.getDayStartTime(openTime) + eDay * 86400
- return endTime - time
- end
- return 0
- end
- -- 红点
- local function ActPowerUp_CheckRed(human)
- local szFuncName = "ActPowerUp_CheckRed"
- local szText = ""
- if not human then
- szText = "参数不正确"
- ActPowerUp_PrintInfo(szFuncName, szText)
- return false
- end
- ActPowerUp_CreateDB(human)
- local tDBData = ActPowerUp_GetDB(human)
- if not tDBData then
- szText = "获取玩家DB奖励数据状态表失败"
- ActPowerUp_PrintInfo(szFuncName, szText)
- return false
- end
- for k, v in pairs(tDBData) do
- if POWERGIFT_STATE_CANGET == v then
- return true
- end
- end
- return false
- end
- ----------------------------------------- 活动模板调用 -------------------------------------
- -- 是否开启
- function isOpen(human, YYInfo, funcConfig)
- print("[ActPowerUp_isOpen] 进入了判断")
- return ActPowerUp_IsOpen(human)
- end
- -- 活动剩余时间
- function getLeftTime()
- print("[ActPowerUp_getLeftTime] 获取剩余时间")
- return ActPowerUp_GetLeftTime()
- end
- -- 是否存在红点
- function isRed(human)
- print("[ActPowerUp_isRed] 获取红点")
- return ActPowerUp_CheckRed(human)
- end
- ----------------------------------------- 客户端协议请求 -------------------------------------
- -- 请求活动协议
- function ActPowerUp_Query(human)
- if not human then
- return
- end
- local nCreatRet = ActPowerUp_CreateDB(human)
- if false == nCreatRet then
- ActPowerUp_PrintInfo("[ActPowerUp_Query]", "初始化DB数据失败")
- return
- end
- local tPrize = ActPowerUp_GetConfig()
- if not tPrize then
- return
- end
- local tMsgData = Msg.gc.GC_PRESENT_OPEN_POWERUP_QUERY
- tMsgData.nNowPower = human.db.zhandouli
- tMsgData.list[0] = 0
- for nID, v in pairs(tPrize) do
- tMsgData.list[0] = tMsgData.list[0] + 1
-
- local tPrizeData = tMsgData.list[tMsgData.list[0]]
- tPrizeData.nID = nID
- tPrizeData.nNeedPower = v.nPower
- tPrizeData.nState = ActPowerUp_GetDBIDState(human, nID)
-
- local nPrizeLne = #v.tPrize
- tPrizeData.item[0] = nPrizeLne
-
- -- ActPowerUp_PrintInfo("[ActPowerUp_Query]", "遍历的奖励信息 nID = "
- -- .. nID .." nPower = "..v.nPower .. " nState = ".. tPrizeData.nState.." nPrizeLne = "..nPrizeLne)
- for j = 1, nPrizeLne do
- local nGoodsID = v.tPrize[j][1]
- local nGoodsNum = v.tPrize[j][2]
- ActPowerUp_PrintInfo("[ActPowerUp_Query]", "物品信息 nGoodsID = "..nGoodsID .. " nGoodsNum = "..nGoodsNum)
- Grid.makeItem(tPrizeData.item[j], nGoodsID, nGoodsNum)
- end
- end
- -- local tPrintTable = Util.printTable(tMsgData)
- Msg.send(tMsgData, human.fd)
- ActPowerUp_PrintInfo("[ActPowerUp_Query]", "获取到的奖励长度为 nIndex = "..tMsgData.list[0])
- end
- -- 请求领取奖励
- function ActPowerUp_GetPrize(human, nID)
- if not human or 0 >= nID then
- return
- end
- if not tPrizeByID or not tPrizeByID[nID] then
- return
- end
- local nNowPower = human.db.zhandouli
- local tMsgData = Msg.gc.GC_PRESENT_OPEN_POWERUP_GETPRIZE
- tMsgData.nID = nID
- local nNowState = ActPowerUp_GetDBIDState(human, nID)
- if POWERGIFT_STATE_CANGET ~= nNowState then
- ActPowerUp_PrintInfo("ActPowerUp_GetPrize", "请求领取的奖励状态不正确 nID = "..nID)
- tMsgData.nState = 0
- ActPowerUp_SendClient(human.fd, tMsgData)
- return
- end
- local tGoodsInfo = tPrizeByID[nID].tPrize
- -- if nNowPower < tGoodsInfo.nPower then
- -- ActPowerUp_PrintInfo("ActPowerUp_GetPrize", "战斗力不足不应该领取 nID = "..nID)
- -- return
- -- end
- tMsgData.nState = 1
- -- 设置状态
- if false == ActPowerUp_SetDBIDState(human, nID, POWERGIFT_STATE_FINISH) then
- ActPowerUp_PrintInfo("ActPowerUp_GetPrize", "设置数据状态失败 nID = "..nID)
- tMsgData.nState = 0
- ActPowerUp_SendClient(human.fd, tMsgData)
- return
- end
- -- 发奖励
- for i = 1, #tGoodsInfo do
- local nGoodsID = tGoodsInfo[i][1]
- local nGoodsNum = tGoodsInfo[i][2]
- BagLogic.addItem(human, nGoodsID, nGoodsNum,"open_server_PowerUpPrize")
- end
- BagLogic.sendItemGetList(human, tGoodsInfo, "open_server_PowerUpPrize")
- for k, v in pairs(funcID) do
- YunYingLogic.updateIcon(YYInfo[k], human)
- YunYingLogic.sendGroupUpdate(YYInfo[k], human, PanelDefine.PANEL_ID_3605)
- break
- end
-
- ActPowerUp_Query(human)
- end
- ----------------------------------------- 其他模块调用 -------------------------------------
- -- 用于起服时映射奖励ID对应配置
- function Init()
- local tPrize = ActPowerUp_GetConfig()
- if not tPrize then
- ActPowerUp_PrintInfo("Init", "起服获取不到配置")
- return
- end
-
- tPrizeByID = {}
- -- Util.printTable(tPrize)
- for nID, v in pairs(tPrize) do
- if tPrizeByID[nID] then
- ActPowerUp_PrintInfo("Init", "配置了重复的奖励ID")
- return
- end
- tPrizeByID[nID] = v
- end
- end
- -- 战力改变回调
- function ActPowerUp_PowerChange(human, nNewPower)
- -- 活动未开启
- if false == ActPowerUp_IsOpen(human) then
- return
- end
- if not human or 0 >= nNewPower then
- return
- end
- local tPrizeConfig = ActPowerUp_GetConfig()
- if not tPrizeConfig then
- return
- end
- local nSendClient = false
- for nID, v in pairs(tPrizeConfig) do
- local nState = ActPowerUp_GetDBIDState(human, nID)
- if POWERGIFT_STATE_NONE == nState then
- if nNewPower >= v.nPower then
- ActPowerUp_SetDBIDState(human, nID, POWERGIFT_STATE_CANGET)
- nSendClient = true
- end
- end
- end
- if true == nSendClient then
- ActPowerUp_Query(human)
- end
- return true
- end
|