PGRData/Script/matrix/xmanager/XScratchTicketManager.lua

134 lines
5.1 KiB
Lua
Raw Normal View History

-- 刮刮乐活动管理器
XScratchTicketManagerCreator = function()
local XScratchTicketManager = {}
local AllActivities = {}
XScratchTicketManager.PlayStatus = {
NotStart = 1, --未开始游戏
Playing = 2, --正在游玩
}
local REQUEST_NAMES = {
StartScratch = "ScratchTicketActivityStartRequest", --开始刮刮卡游戏
OpenGrid = "ScratchTicketActivityOpenGridRequest", --预览格子
ExChange = "ScratchTicketActivityEndRequest", --开奖
Reset = "ScratchTicketActivityResetRequest", --重置刮刮卡(完成一局游戏)
}
function XScratchTicketManager.Init()
end
function XScratchTicketManager.UpdateActivity(id, activityDb)
end
--================
--刷新活动数据
--[[
public class ScratchTicketActivityDb
{
public int Id; --对应Activity表Id
//Grid
public List<ScratchTicketActivityOpenGridDb> OpenGrid = new List<ScratchTicketActivityOpenGridDb>();
//
public int LuckNumber { get; set; }
//
public int SelectOpen { get; set; }
public int GridCfgIndex { get; set; } --ScratchTicket表GridIds的序号对应Grid表
public int CfgIndex { get; set; } --Activity表ScratchTicket数组的序号对应ScratchTicket的Id
}
public class ScratchTicketActivityOpenGridDb
{
public int Index;
public int Num;
}
]]
--================
function XScratchTicketManager.UpdateActivities(activityDbs)
for id, activity in pairs(activityDbs) do
if not AllActivities[activity.Id] then
local controllerScript = require("XEntity/XScratchTicket/XScratchTicketActivityController")
AllActivities[activity.Id] = controllerScript.New(activity.Id)
end
AllActivities[activity.Id]:UpdateData(activity)
end
end
function XScratchTicketManager.GetActivityController(id)
if not AllActivities[id] then
local controllerScript = require("XEntity/XScratchTicket/XScratchTicketActivityController")
AllActivities[id] = controllerScript.New(id)
end
return AllActivities[id]
end
function XScratchTicketManager.StartGame(activityId)
if XFunctionManager.DetectionFunction(XFunctionManager.FunctionName.ScratchTicket, true) then
XNetwork.Call(REQUEST_NAMES.StartScratch, { Id = activityId }, function(reply)
if reply.Code ~= XCode.Success then
XUiManager.TipCode(reply.Code)
return
end
AllActivities[activityId]:UpdateData(reply.ActivityDb)
XEventManager.DispatchEvent(XEventId.EVENT_SCRATCH_TICKET_ACTIVITY_START, activityId)
end)
end
end
function XScratchTicketManager.OpenGrid(activityId, gridIndex)
XNetwork.Call(REQUEST_NAMES.OpenGrid, { Id = activityId, GridIndex = gridIndex - 1 }, function(reply)
if reply.Code ~= XCode.Success then
XUiManager.TipCode(reply.Code)
return
end
AllActivities[reply.Id]:OpenGrid(reply.GridIndex + 1, reply.Num)
XEventManager.DispatchEvent(XEventId.EVENT_SCRATCH_TICKET_OPEN_GRID, activityId)
end)
end
function XScratchTicketManager.ExChange(activityId, openIndex)
XNetwork.Call(REQUEST_NAMES.ExChange, { Id = activityId, OpenIndex = openIndex }, function(reply)
if reply.Code ~= XCode.Success then
XUiManager.TipCode(reply.Code)
return
end
AllActivities[reply.ActivityDb.Id]:UpdateData(reply.ActivityDb)
local ticket = AllActivities[reply.ActivityDb.Id]:GetTicket()
local rewardId
local rewardList
if reply.ActivityDb.IsWin then
rewardId = ticket:GetWinRewardId()
else
rewardId = ticket:GetLoseRewardId()
end
if rewardId and rewardId > 0 then
rewardList = XRewardManager.GetRewardList(rewardId)
end
XEventManager.DispatchEvent(XEventId.EVENT_SCRATCH_TICKET_SHOW_RESULT, activityId, rewardList)
end)
end
function XScratchTicketManager.ResetGame(activityId)
XNetwork.Call(REQUEST_NAMES.Reset, { Id = activityId }, function(reply)
if reply.Code ~= XCode.Success then
XUiManager.TipCode(reply.Code)
return
end
AllActivities[activityId]:UpdateData(reply.ActivityDb)
XEventManager.DispatchEvent(XEventId.EVENT_SCRATCH_TICKET_RESET, activityId)
end)
end
XScratchTicketManager.Init()
return XScratchTicketManager
end
--===============
--刮刮乐活动数据推送
--@param db : {List<ScratchTicketActivityDb>}
--===============
XRpc.NotifyScratchTicketActivity = function(db)
XDataCenter.ScratchTicketManager.UpdateActivities(db.ActivityDbs)
end