| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332 |
- --------------------------------
- -- 文件名 : WeekendLoopActUseGuYu.lua
- -- 文件说明 : 周末冲刺活动-消费古玉
- -- 创建时间 : 2024/12/02
- -- 创建人 : FC
- --------------------------------
- local Util = require("common.Util")
- local Lang = require("common.Lang")
- local Broadcast = require("broadcast.Broadcast")
- local MailExcel = require("excel.mail")
- local Msg = require("core.Msg")
- local ObjHuman = require("core.ObjHuman")
- local WeekLoopActDef = require("WeekendLoopActivity.WeekendLoopActDefine")
- local WeekLoopActCof = require("excel.WeekLoopAct")
- local CommonDB = require("common.CommonDB")
- local MailManager = require("mail.MailManager")
- local Grid = require("bag.Grid")
- local HeroGrid = require("hero.HeroGrid")
- local HeroLogic = require("hero.HeroLogic")
- local BagLogic = require("bag.BagLogic")
- local Log = require("common.Log")
- local HeroExcel = require("excel.hero")
- local WeekendLoopActManger = require("WeekendLoopActivity.WeekendLoopActManager")
- ----------------------------------------- 内部处理开始 -------------------------------------
- -- 写日志
- local function WeekActGuYu_WriteLog(human, szFuncName, sztext)
- Log.write(Log.LOGID_OSS_WEEKLOOP_ACT, szFuncName..sztext.." _id = "..human.db._id.." name = "..human.db.name)
- end
- -- 下发数据
- local function WeekActGuYu_SendData(tMsgData, fd)
- Msg.send(tMsgData, fd)
- end
- -- 获取配置
- local function WeekActGuYu_GetConfig()
- if not WeekLoopActCof then
- return nil
- end
- return WeekLoopActCof.GuYu
- end
- -- 初始化古玉数量
- local function WeekActHeroStar_ResetGuYuNum(human)
- if not human then
- print("[WeekActHeroStar_SetHeroID] 参数不正确")
- return false
- end
- human.db.nWeekUseGuYu = 0
- return true
- end
- -- 获取古玉数量
- local function WeekActHeroStar_GetGuYuNum(human)
- if not human then
- print("[WeekActHeroStar_SetHeroID] 参数不正确")
- return -1
- end
- if not human.db.nWeekUseGuYu then
- local bRet = WeekActHeroStar_ResetGuYuNum(human)
- if false == bRet then
- WeekActGuYu_WriteLog(human, "[WeekActHeroStar_GetGuYuNum]", "获取古玉数量,不存在对应字段,重新初始化失败")
- return -1
- end
- WeekActGuYu_WriteLog(human, "[WeekActHeroStar_GetGuYuNum]", "获取古玉数量,不存在对应字段,初始化顺序有问题, 重新初始化成功")
- end
- return human.db.nWeekUseGuYu
- end
- -- 设置古玉数量
- local function WeekActHeroStar_SetGuYuNum(human, nValue)
- if not human then
- print("[WeekActHeroStar_SetHeroID] 参数不正确")
- return
- end
- local nNowGuYu = WeekActHeroStar_GetGuYuNum(human)
- if -1 >= nNowGuYu then
- WeekActGuYu_WriteLog(human, "[WeekActHeroStar_SetGuYuNum]", "获取古玉数量失败")
- return
- end
- local nNewGuYu = nNowGuYu + nValue
- if 0 > nNewGuYu then
- nNewGuYu = 0
- end
- human.db.nWeekUseGuYu = nNewGuYu
- end
- -- 初始化奖励信息
- local function WeekActGuYu_ResetPrize(human)
- if not human then
- return false
- end
- local tConfig = WeekActGuYu_GetConfig()
- if not tConfig then
- return false
- end
- if not human.db.tWeekGuYuPrize then
- human.db.tWeekGuYuPrize = {}
- end
- for nID, v in pairs(tConfig) do
- human.db.tWeekGuYuPrize[nID] = WeekLoopActDef.WEEKACT_STATE_NONE
- end
-
- return true
- end
- -- 获取奖励表
- local function WeekActGuYu_GetDBPrize(human)
- if not human then
- return nil
- end
- if not human.db.tWeekGuYuPrize then
- return nil
- end
-
- return human.db.tWeekGuYuPrize
- end
- -- 获取奖励ID状态
- local function WeekActGuYu_GetPrizeStatus(human, nID)
- if not human then
- return WeekLoopActDef.WEEKACT_STATE_NONE
- end
- local tPrize = WeekActGuYu_GetDBPrize(human)
- if not tPrize or not tPrize[nID] then
- print("[WeekActGuYu_GetPrizeStatus] 不存在对应的ID nID = "..nID)
- return WeekLoopActDef.WEEKACT_STATE_NONE
- end
-
- return tPrize[nID]
- end
- -- 设置奖励ID状态
- local function WeekActGuYu_SetPrizeStatus(human, nID, nStatus)
- if not human then
- return false
- end
- local tPrize = WeekActGuYu_GetDBPrize(human)
- if not tPrize or not tPrize[nID] then
- return false
- end
- tPrize[nID] = nStatus
- return true
- end
- ----------------------------------------- 外部调用 -------------------------------------
- -- 重置数据
- function WeekActGuYu_ResetData(human)
- if not human then
- return
- end
- -- 重置奖励信息
- if false == WeekActGuYu_ResetPrize(human) then
- print("[WeekActGuYu_ResetData] 重置古玉奖励数据失败")
- return
- end
- -- 重置消耗古玉数量
- WeekActHeroStar_ResetGuYuNum(human)
- WeekActGuYu_WriteLog(human, "[WeekActGuYu_ResetData]", "古玉奖励相关重置完成")
- print("[WeekActGuYu_ResetData] 古玉 数据重置结束 ")
- end
- -- 是否有红点
- function isRed(human)
- local tPrize = WeekActGuYu_GetConfig()
- if not tPrize then
- return false
- end
- for nID, v in pairs(tPrize) do
- if WeekLoopActDef.WEEKACT_STATE_CANGET == WeekActGuYu_GetPrizeStatus(human, nID) then
- return true
- end
- end
- return false
- end
- -- 消耗古玉回调
- function WeekActGuYu_UseGuYu(human, nGuYu)
- if not human or 0 >= nGuYu then
- return
- end
- local DBID = human.db._id
- local szName = human.db.name
- local tConfig = WeekActGuYu_GetConfig()
- if not tConfig then
- print("[WeekActGuYu_UseGuYu] 获取不到配置 DBID = "..DBID.." name = "..szName)
- return
- end
- WeekActHeroStar_SetGuYuNum(human, nGuYu)
-
- local nNowGuYu = WeekActHeroStar_GetGuYuNum(human)
- print("[onDecZuanshi] 消耗古玉回调开始 nNowGuYu = "..nNowGuYu)
- local bChange = false
- for nID, v in pairs(tConfig) do
- local nStatus = WeekActGuYu_GetPrizeStatus(human, nID)
- print("[onDecZuanshi] 消耗古玉回调开始 nNowGuYu = "..nNowGuYu.." nStatus = "..nStatus)
-
- if nNowGuYu >= v.guyu and WeekLoopActDef.WEEKACT_STATE_NONE == nStatus then
- bChange = true
- WeekActGuYu_SetPrizeStatus(human, nID, WeekLoopActDef.WEEKACT_STATE_CANGET)
- end
- end
- print("[onDecZuanshi] 古玉回调处理完成 nNowGuYu = "..nNowGuYu)
- if true == bChange then
- print("[onDecZuanshi] 古玉回调处理完成 开始请求 nNowGuYu = "..nNowGuYu)
- WeekActGuYu_Query(human)
- WeekendLoopActManger.WeekLoopACT_SendActInfo(human)
- end
- end
- ----------------------------------------- 客户端请求 -------------------------------------
- -- 客户端请求-古玉信息
- function WeekActGuYu_Query(human)
- if not human then
- return
- end
- local DBID = human.db._id
- local szName = human.db.name
- local tConfig = WeekActGuYu_GetConfig()
- if not tConfig then
- print("[WeekActGuYu_Query] 获取不到配置 DBID = "..DBID.." name = "..szName)
- return
- end
- local tMsgData = Msg.gc.GC_WEEKLOOP_ACT_GUYUQUERY
- tMsgData.nGuYu = WeekActHeroStar_GetGuYuNum(human)
- tMsgData.list[0] = 0
- for nID, v in pairs(tConfig) do
- tMsgData.list[0] = tMsgData.list[0] + 1
- local tData = tMsgData.list[tMsgData.list[0]]
- tData.nID = nID
- tData.nGuYu = v.guyu
- tData.nState = WeekActGuYu_GetPrizeStatus(human, nID)
- tData.item[0] = #v.prize
- for nIndex, tItem in ipairs(v.prize) do
- local nGoodsID = tItem[1]
- local nGoodsNum = tItem[2]
- Grid.makeItem(tData.item[nIndex], nGoodsID, nGoodsNum)
- end
- end
- WeekActGuYu_SendData(tMsgData, human.fd)
- end
- -- 客户端请求领取奖励
- function WeekActGuYu_GetPrize(human)
- if not human then
- return
- end
- local DBID = human.db._id
- local szName = human.db.name
- local tConfig = WeekActGuYu_GetConfig()
- if not tConfig then
- print("[WeekActGuYu_GetPrize] 获取不到配置 DBID = "..DBID.." name = "..szName)
- return
- end
- local tItemList = {}
- for nID, v in pairs(tConfig) do
- if WeekLoopActDef.WEEKACT_STATE_CANGET == WeekActGuYu_GetPrizeStatus(human, nID) then
- if false == WeekActGuYu_SetPrizeStatus(human, nID, WeekLoopActDef.WEEKACT_STATE_FINISH) then
- print("[WeekActGuYu_GetPrize] 奖励领取失败 nID = "..nID)
- WeekActGuYu_WriteLog(human, "[WeekActHeroStar_GetPrize]", "领取奖励, 设置奖励状态失败 nID = "..nID)
- break
- end
- for _, data in ipairs(v.prize) do
- local nItemID = data[1]
- local nItemNum = data[2]
- tItemList[nItemID] = tItemList[nItemID] or 0
- tItemList[nItemID] = tItemList[nItemID] + nItemNum
- end
- end
- end
- if nil ~= _G.next(tItemList) then
- local tGoodsInfo = {}
- for k, v in pairs(tItemList) do
- table.insert(tGoodsInfo, {k,v})
- -- 获取奖励写日志
- WeekActGuYu_WriteLog(human, "[WeekActHeroStar_GetPrize]", "玩家获取奖励 nGoodsID = "..k.." nGoodsNum = "..v)
- end
- BagLogic.addItemList(human, tGoodsInfo, "week_loop_act")
- BagLogic.sendItemGetList(human, tItemList, "week_loop_act")
- end
- WeekActGuYu_Query(human)
- WeekendLoopActManger.WeekLoopACT_SendActInfo(human)
- end
|