PGRData/Script/matrix/xmanager/XFubenRogueLikeManager.lua

1193 lines
43 KiB
Lua
Raw Normal View History

XFubenRogueLikeManagerCreator = function()
local XFubenRogueLikeManager = {}
local RogueLikeRpc = {
GetBlackShopData = "GetBlackShopDataRequest", --获取黑市商店数据
BuyBlackShopItem = "BuyBlackShopItemRequest", --黑市商店购买
FinishNode = "FinishNodeRequest", --完成节点
OpenBox = "OpenBoxRequest", --打开宝箱
Recover = "RecoverRequest", --休息点回复行动力
IntensifyBuff = "IntensifyBuffRequest", --增强buff
SelectNode = "SelectNodeRequest", --选择节点
NodeBuy = "NodeBuyRequest", --节点商店购买
SelectSpecialEvent = "SelectSpecialEventRequest", --选择特殊事件
SupportCall = "SupportCallRequest", --支援请求
SelectSpecialEventGroup = "SelectSpecialEventGroupRequest", --选择特殊事件组
TeamSet = "RogueLikeTeamSetRequest", --设置队伍
ResetHardNode = "ResetHardNodeRequest",--重置副本次数
OpenTrialPoint = "OpenTrialPointRequest",--刷新试炼积分信息
}
local CheckUiName = {
[1] = "UiRogueLikeMain",
[2] = "UiRogueLikeHelpRole",
[3] = "UiRogueLikeIllegalShop",
[4] = "UiRogueLikeObtainBuff",
[5] = "UiRogueLikeRoomCharacter",
[6] = "UiRogueLikeShop",
[7] = "UiRogueLikeStoryResult",
[8] = "UiRogueLikeThemeTips",
[9] = "UiRogueLikeTask",
[10] = "UiRogueLikeFightTips",
}
-- 活动信息
local ActivityId -- 活动id
local CurSectionId = 0 -- 当前章节
local ActionPoint = 0
local SectionInfo = {} -- 选择的节点信息//TierSectionInfo
local AssistRobots = {} -- 助战机器人//int
local BuffIds = {} -- 获得的buff//int
local CharacterInfos = {} -- 参战列表//RLCharacterInfo
local NodeShopInfos = {} -- 节点商店信息//RLNodeShopInfo
-- local DayBuffIds = {} -- 每日buff//int
local TeamEffectId = 0 -- 队伍效果id
local DayRefreshTime = 0 -- 每日刷新时间
local WeekRefreshTime = 0 -- 每周刷新时间
local SupportInfos = {} -- 支援终端
local NewBuffIds = {} -- 最新获得的buff,用来显示
local NewRobots = {} -- 最新获得的支援角色,显示用
local ShowSelectNodeInfo = {} -- 选择过的节点//[nodeId = nodeInfo]
local IsFinal = false -- 是否为最后的层级
local HistoryMaxTier = 0 -- 历史达到最高层数
local Id2SectionMap = {} -- SecionId对应SectionInfo
local RogueLikeStageRobots = {} -- 助战阵容{stageId = {IsAssis=,RobotId}}
local RogueLikeTrialPoint = 0 --试炼模式积分
local RogueLikeResetNum = 0 --重置试炼次数
local NeedShowTrialTips = false --是否需要显示试炼开启
local TrialPointDatas = {}
local NeedShowTrialPointView = false --是否需要显示积分页面
local RogueLikeTrialPointLast = -1
local RogueLikeTrialPointShowByTween = 0
function XFubenRogueLikeManager.InitStageInfo()
local allNodes = XFubenRogueLikeConfig.GetAllNodes()
for _, nodeDatas in pairs(allNodes) do
if nodeDatas.Type == XFubenRogueLikeConfig.XRLNodeType.Fight then
local stageId = nodeDatas.Param[1]
local stageInfo = XDataCenter.FubenManager.GetStageInfo(stageId)
if stageInfo then
stageInfo.Type = XDataCenter.FubenManager.StageType.RogueLike
end
local stageDiffcultId = nodeDatas.Param[2]
if stageDiffcultId and stageDiffcultId > 0 then
local stageDiffcultInfo = XDataCenter.FubenManager.GetStageInfo(stageDiffcultId)
if stageDiffcultInfo then
stageDiffcultInfo.Type = XDataCenter.FubenManager.StageType.RogueLike
end
end
end
end
end
-- [胜利]
function XFubenRogueLikeManager.ShowReward(winData)
if not winData then return end
XLuaUiManager.Open("UiSettleWin", winData)
end
function XFubenRogueLikeManager.AsyncRogueLikeInfo(notifyData)
if not notifyData then return end
ActivityId = notifyData.Id
CurSectionId = notifyData.CurSectionId
ActionPoint = notifyData.ActionPoint
SectionInfo = notifyData.SectionInfo
AssistRobots = notifyData.AssistRobots
RogueLikeTrialPoint = notifyData.TrialPoint
RogueLikeResetNum = notifyData.HardNodeResetCount
if RogueLikeTrialPointLast > -1 and RogueLikeTrialPointLast < RogueLikeTrialPoint then
RogueLikeTrialPointShowByTween = RogueLikeTrialPointLast
end
RogueLikeTrialPointLast = RogueLikeTrialPoint
if not next(AssistRobots) then
XFubenRogueLikeManager.ResetNewRobots()
end
BuffIds = notifyData.BuffIds
if not next(BuffIds) then
XFubenRogueLikeManager.ResetNewBuffs()
end
CharacterInfos = notifyData.CharacterInfos
HistoryMaxTier = notifyData.MaxTier
NodeShopInfos = {}
for i = 1, #notifyData.ShopInfos do
local shopInfo = notifyData.ShopInfos[i]
NodeShopInfos[shopInfo.Id] = shopInfo
end
TeamEffectId = notifyData.TeamEffectId
DayRefreshTime = math.floor(notifyData.DayRefreshTime)
WeekRefreshTime = math.floor(notifyData.WeekRefreshTime)
SupportInfos = {}
for _, v in pairs(notifyData.SupportInfos or {}) do
SupportInfos[v.Id] = v.Count
end
for k, v in pairs(SectionInfo) do
Id2SectionMap[v.Id] = {}
Id2SectionMap[v.Id].Index = k
Id2SectionMap[v.Id].Id = v.Id
Id2SectionMap[v.Id].Group = v.Group
Id2SectionMap[v.Id].FinishNode = {}
for _, node in pairs(v.FinishNode or {}) do
Id2SectionMap[v.Id].FinishNode[node] = true
end
Id2SectionMap[v.Id].SelectNodeInfo = {}
for _, nodeInfo in pairs(v.SelectNodeInfos or {}) do
Id2SectionMap[v.Id].SelectNodeInfo[nodeInfo.SelectId] = nodeInfo
end
end
-- 日重置、 周重置刷新界面
XEventManager.DispatchEvent(XEventId.EVENT_ROGUELIKE_REFRESH_ALLNODES)
XEventManager.DispatchEvent(XEventId.EVENT_ROGUELIKE_ACTIONPOINT_CHARACTER_CHANGED)
XEventManager.DispatchEvent(XEventId.EVENT_ROGUELIKE_ASSISTROBOT_CHANGED)
XEventManager.DispatchEvent(XEventId.EVENT_ROGUELIKE_BUFFIDS_CHANGES)
XEventManager.DispatchEvent(XEventId.EVENT_ROGUELIKE_TEAMEFFECT_CHANGES)
XEventManager.DispatchEvent(XEventId.EVENT_ROGUELIKE_TASK_RESET)
XEventManager.DispatchEvent(XEventId.EVENT_ROGUELIKE_ILLEGAL_SHOP_RESET)
-- 检查是否需要重置角色
XFubenRogueLikeManager.CheckCharacterReset()
end
function XFubenRogueLikeManager.AsyncBuffData(notifyData)
if not notifyData then return end
BuffIds = notifyData.BuffIds
if notifyData.NewId > 0 then
NewBuffIds[notifyData.NewId] = true
end
XEventManager.DispatchEvent(XEventId.EVENT_ROGUELIKE_BUFFIDS_CHANGES)
end
function XFubenRogueLikeManager.ResetDataByInPurgatory()
NeedShowTrialTips = true
BuffIds = {}
XFubenRogueLikeManager.ResetNewBuffs()
XEventManager.DispatchEvent(XEventId.EVENT_ROGUELIKE_BUFFIDS_CHANGES)
XEventManager.DispatchEvent(XEventId.EVENT_ROGUELIKE_SECTIONTYPE_CHANGE)
end
-- 章节选择同步
function XFubenRogueLikeManager.AsyncSectionInfoChange(notifyData)
if not notifyData then return end
local lastSectionType = XFubenRogueLikeConfig.GetTierSectionTierTypeById(CurSectionId) or 0
CurSectionId = notifyData.CurSectionId
local curSectionType = XFubenRogueLikeConfig.GetTierSectionTierTypeById(CurSectionId)
if lastSectionType == XFubenRogueLikeConfig.TierType.Normal and curSectionType == XFubenRogueLikeConfig.TierType.Purgatory then
XFubenRogueLikeManager.ResetDataByInPurgatory()
end
for k, v in pairs(SectionInfo) do
if v.Id == notifyData.SectionInfo.Id then
SectionInfo[k] = notifyData.SectionInfo
end
end
local sectionId = notifyData.SectionInfo.Id
Id2SectionMap[sectionId].FinishNode = {}
for _, node in pairs(notifyData.SectionInfo.FinishNode or {}) do
Id2SectionMap[sectionId].FinishNode[node] = true
end
Id2SectionMap[sectionId].SelectNodeInfo = {}
for _, nodeInfo in pairs(notifyData.SectionInfo.SelectNodeInfos or {}) do
Id2SectionMap[sectionId].SelectNodeInfo[nodeInfo.SelectId] = nodeInfo
end
XEventManager.DispatchEvent(XEventId.EVENT_ROGUELIKE_REFRESH_ALLNODES)
IsFinal = XFubenRogueLikeManager.GetRogueLikeLevel() == XFubenRogueLikeManager.GetMaxTier()
local currTier = XFubenRogueLikeManager.GetRogueLikeLevel()
if currTier > HistoryMaxTier then
HistoryMaxTier = currTier
end
end
function XFubenRogueLikeManager.AsyncNodeShopInfo(notifyData)
if not notifyData then return end
local shopId = notifyData.ShopInfo.Id
NodeShopInfos[shopId] = notifyData.ShopInfo
end
-- 通知助战机器人改变
function XFubenRogueLikeManager.AsyncAssistRobot(notifyData)
if not notifyData then return end
local new_assisRobots = {}
for _, robotId in pairs(notifyData.AssistRobots) do
new_assisRobots[robotId] = true
end
for _, robotId in pairs(AssistRobots) do
new_assisRobots[robotId] = nil
end
local receiveNewRobot = false
local robot_names = ""
for robotId, _ in pairs(new_assisRobots) do
receiveNewRobot = true
NewRobots[robotId] = true
local characterId = XRobotManager.GetCharacterId(robotId)
local fullName = XCharacterConfigs.GetCharacterFullNameStr(characterId)
if robot_names == "" then
robot_names = fullName
else
robot_names = string.format("%s %s", robot_names, fullName)
end
end
if receiveNewRobot and robot_names ~= "" then
XUiManager.TipMsg(CS.XTextManager.GetText("RogueLikeGetAssistRobot", robot_names))
end
AssistRobots = notifyData.AssistRobots
XEventManager.DispatchEvent(XEventId.EVENT_ROGUELIKE_ASSISTROBOT_CHANGED)
end
-- 刷新行动点和角色信息
function XFubenRogueLikeManager.AsyncActionPointAndCharacterInfo(notifyData)
if not notifyData then return end
local newActionPoint = notifyData.ActionPoint
local isAdd = newActionPoint > ActionPoint
ActionPoint = notifyData.ActionPoint
RogueLikeTrialPoint = notifyData.TrialPoint
if RogueLikeTrialPointLast > -1 and RogueLikeTrialPointLast < RogueLikeTrialPoint then
RogueLikeTrialPointShowByTween = RogueLikeTrialPointLast
end
RogueLikeTrialPointLast = RogueLikeTrialPoint
local newCharacterInfos = notifyData.CharacterInfos
for i = 1, #newCharacterInfos do
if newCharacterInfos[i] and CharacterInfos[i] then
if newCharacterInfos[i].HpLeft ~= CharacterInfos[i].HpLeft then
newCharacterInfos[i].EffectUp = true
end
end
end
CharacterInfos = notifyData.CharacterInfos
XEventManager.DispatchEvent(XEventId.EVENT_ROGUELIKE_ACTIONPOINT_CHARACTER_CHANGED, isAdd)
end
-- 刷新队伍效果
function XFubenRogueLikeManager.AsyncTeamEffect(notifyData)
if not notifyData then return end
TeamEffectId = notifyData.TeamEffectId
XEventManager.DispatchEvent(XEventId.EVENT_ROGUELIKE_TEAMEFFECT_CHANGES)
end
--刷新获得积分数据
function XFubenRogueLikeManager.AsyncTrialPoint(notifyData)
TrialPointDatas = notifyData.pointInfo or {}
table.sort(TrialPointDatas,function(a,b)
return a.PointType < b.PointType
end)
NeedShowTrialPointView = true
XEventManager.DispatchEvent(XEventId.EVENT_ROGUELIKE_TRIALPOINT_CHANGE)
end
--刷新获得积分数据(回调)
function XFubenRogueLikeManager.AsyncTrialPointRequest(pointInfo)
TrialPointDatas = pointInfo
table.sort(TrialPointDatas,function(a,b)
return a.PointType < b.PointType
end)
end
-- 活动id
function XFubenRogueLikeManager.GetRogueLikeActivityId()
return ActivityId
end
-- 行动点
function XFubenRogueLikeManager.GetRogueLikeActionPoint()
return ActionPoint
end
-- 日常buff
function XFubenRogueLikeManager.GetRogueLikeDayBuffs()
return XFubenRogueLikeManager.GetDayBuffByTeamEffect(TeamEffectId, CharacterInfos)
end
-- 锁定的出站角色
function XFubenRogueLikeManager.GetCharacterInfos()
return CharacterInfos
end
-- 如果有出站人数为3则视为已经锁定
function XFubenRogueLikeManager.IsRogueLikeCharacterLock()
return XFubenRogueLikeManager.GetTeamMemberCount() == #CharacterInfos
end
-- 助战机器人
function XFubenRogueLikeManager.GetAssistRobots(characterType)
local robots = {}
for _, v in pairs(AssistRobots or {}) do
local characterId = XRobotManager.GetCharacterId(v)
local charType = XCharacterConfigs.GetCharacterType(characterId)
if not characterType or charType == characterType then
table.insert(robots, { Id = v })
end
end
return robots
end
-- 助战角色达到3人则视为可以切换助战
function XFubenRogueLikeManager.CanSwitch2Assist()
return #AssistRobots >= XFubenRogueLikeManager.GetTeamMemberCount()
end
-- 获得助战人数,默认3
function XFubenRogueLikeManager.GetTeamMemberCount()
local activityId = XFubenRogueLikeManager.GetRogueLikeActivityId()
if not activityId then return XFubenRogueLikeConfig.TEAM_NUMBER end
local activityTemplate = XFubenRogueLikeConfig.GetRougueLikeTemplateById(activityId)
if not activityTemplate then return XFubenRogueLikeConfig.TEAM_NUMBER end
return activityTemplate.TeamMemberCount or XFubenRogueLikeConfig.TEAM_NUMBER
end
-- 当前章节
function XFubenRogueLikeManager.GetCurSectionInfo()
return Id2SectionMap[CurSectionId]
end
-- 获取当前活动最大层数
function XFubenRogueLikeManager.GetMaxTier()
local maxTier = 0
local maxTierNormal = 0
local maxTierPurgatory = 0
local curSectionType = XFubenRogueLikeConfig.GetTierSectionTierTypeById(CurSectionId)
for _, v in pairs(SectionInfo) do
local tierSectionTemplate = XFubenRogueLikeConfig.GetTierSectionTemplateById(v.Id)
if tierSectionTemplate.MaxTier > maxTier then
if XFubenRogueLikeConfig.GetTierSectionTierTypeById(v.Id) == XFubenRogueLikeConfig.TierType.Normal then
maxTierNormal = tierSectionTemplate.MaxTier
else
maxTierPurgatory = tierSectionTemplate.MaxTier
end
--maxTier = tierSectionTemplate.MaxTier
end
end
maxTierPurgatory = maxTierPurgatory - maxTierNormal
if XFubenRogueLikeManager.IsSectionPurgatory() then
return maxTierPurgatory
else
return maxTierNormal
end
return maxTier
end
function XFubenRogueLikeManager.GetRogueLikeLevel()
if not SectionInfo then return 0 end
local rogueLikeLevel = 0
local curSectionType = XFubenRogueLikeConfig.GetTierSectionTierTypeById(CurSectionId)
for i = 1, #SectionInfo do
local section = SectionInfo[i]
if section and section.Id then
local sectionType = XFubenRogueLikeConfig.GetTierSectionTierTypeById(section.Id)
for _, v in pairs(section.FinishNode) do
local finishNode = Id2SectionMap[section.Id].FinishNode or {}
if finishNode[v] and curSectionType == sectionType then
rogueLikeLevel = rogueLikeLevel + 1
end
end
end
end
return rogueLikeLevel
end
-- 获取我的buffs//排序规则:新获得的(20) > 正面的(10) > 负面的(5)
function XFubenRogueLikeManager.GetMyBuffs()
local myBuffs = {}
for _, v in pairs(BuffIds) do
local buffConfig = XFubenRogueLikeConfig.GetBuffConfigById(v)
local weight = 5
if XFubenRogueLikeConfig.BuffType.PositiveBuff == buffConfig.BuffType then
weight = 10
end
weight = XFubenRogueLikeManager.IsBuffNew(v) and 20 or weight
table.insert(myBuffs, {
BuffId = v,
IsSelect = false,
BuffType = buffConfig.BuffType,
Priority = buffConfig.Priority,
SortWeight = weight,
})
end
table.sort(myBuffs, function(a, b)
return a.BuffId < b.BuffId
end)
return myBuffs
end
-- 获得节点商店数据
function XFubenRogueLikeManager.GetNodeShopInfoById(shopId)
return NodeShopInfos[shopId]
end
-- 队伍效果id
function XFubenRogueLikeManager.GetTeamEffectId()
return TeamEffectId
end
-- 是否为队伍效果id中配置的角色
function XFubenRogueLikeManager.IsTeamEffectCharacter(cid)
local teamEffectId = XFubenRogueLikeManager.GetTeamEffectId()
if XFubenRogueLikeManager.IsSectionPurgatory() then return false end
if teamEffectId <= 0 then return false end
local teamEffectTemplate = XFubenRogueLikeConfig.GetTeamEffectTemplateById(teamEffectId)
if not teamEffectTemplate then
return false
end
for _, characterId in pairs(teamEffectTemplate.CharacterId) do
if characterId == cid then
return true
end
end
return false
end
-- 日刷新时间
function XFubenRogueLikeManager.GetDayRefreshTime()
return DayRefreshTime
end
-- 周刷新时间
function XFubenRogueLikeManager.GetWeekRefreshTime()
return WeekRefreshTime
end
-- 获取支援终端的东西
function XFubenRogueLikeManager.GetSupportInfos()
return SupportInfos
end
-- 是否有新的buffId
function XFubenRogueLikeManager.HasNewBuffs()
local newBuffCount = 0
for _, _ in pairs(NewBuffIds) do
newBuffCount = newBuffCount + 1
end
return newBuffCount
end
-- 重置新效果
function XFubenRogueLikeManager.ResetNewBuffs()
NewBuffIds = {}
end
-- 是否为新获得的buff
function XFubenRogueLikeManager.IsBuffNew(buffId)
return NewBuffIds[buffId]
end
-- 是否有新获得的支援角色
function XFubenRogueLikeManager.HasNewRobots()
local newRobotCount = 0
for _, _ in pairs(NewRobots) do
newRobotCount = newRobotCount + 1
end
return newRobotCount > 0
end
function XFubenRogueLikeManager.ResetNewRobots()
NewRobots = {}
end
function XFubenRogueLikeManager.UpdateNewRobots(robotId)
NewRobots[robotId] = nil
end
function XFubenRogueLikeManager.IsRobotNew(robotId)
return NewRobots[robotId]
end
-- 获取是否选择过节点
function XFubenRogueLikeManager.GetShowSelectNodeById(nodeId)
return ShowSelectNodeInfo[nodeId]
end
-- 获得主题buff
function XFubenRogueLikeManager.GetDayBuffByTeamEffect(id, characterInfos)
local day_buffs = {}
local teamEffectTemplate = XFubenRogueLikeConfig.GetTeamEffectTemplateById(id)
if not teamEffectTemplate then
return day_buffs
end
local lock_character = {}
for _, characterInfo in pairs(characterInfos or {}) do
lock_character[characterInfo.Id] = true
end
local buff_count = 0
for _, characterId in pairs(teamEffectTemplate.CharacterId) do
if lock_character[characterId] then
buff_count = buff_count + 1
end
end
for i, buffId in pairs(teamEffectTemplate.BuffId) do
table.insert(day_buffs, {
BuffId = buffId,
IsActive = i <= buff_count
})
end
return day_buffs
end
-- 获得折扣:队伍buff/系统buff
function XFubenRogueLikeManager.GetNodeShopDiscount()
-- 默认100没有打折
local discount = 100
local curSectionType = XFubenRogueLikeConfig.GetTierSectionTierTypeById(CurSectionId)
if curSectionType == XFubenRogueLikeConfig.TierType.Purgatory then
return discount
end
for _, buffId in pairs(BuffIds) do
local buffTemplate = XFubenRogueLikeConfig.GetBuffTemplateById(buffId)
if buffTemplate then
if buffTemplate.Discount > 0 and buffTemplate.Discount < discount then
discount = buffTemplate.Discount
end
end
end
local day_Buff = XFubenRogueLikeManager.GetDayBuffByTeamEffect(TeamEffectId, CharacterInfos)
for _, buffInfo in pairs(day_Buff) do
local buffTemplate = XFubenRogueLikeConfig.GetBuffTemplateById(buffInfo.BuffId)
if buffTemplate and buffInfo.IsActive then
if buffTemplate.Discount > 0 and buffTemplate.Discount < discount then
discount = buffTemplate.Discount
end
end
end
return discount
end
-- 是否在显示等级的时间段
function XFubenRogueLikeManager.IsInActivity()
local activityId = XFubenRogueLikeManager.GetRogueLikeActivityId()
if not activityId then return false end
local activityTemplate = XFubenRogueLikeConfig.GetRougueLikeTemplateById(activityId)
if not activityTemplate then return false end
local now = XTime.GetServerNowTimestamp()
local beginTime, endTime = XFunctionManager.GetTimeByTimeId(activityTemplate.ActivityTimeId)
if not beginTime or not endTime then return false end
return now >= beginTime and now <= endTime
end
-- 是否在挑战时间
function XFubenRogueLikeManager.IsInFight()
local activityId = XFubenRogueLikeManager.GetRogueLikeActivityId()
if not activityId then return false end
local activityTemplate = XFubenRogueLikeConfig.GetRougueLikeTemplateById(activityId)
if not activityTemplate then return false end
local now = XTime.GetServerNowTimestamp()
local beginTime = XFunctionManager.GetStartTimeByTimeId(activityTemplate.ActivityTimeId)
local endTime = XFunctionManager.GetEndTimeByTimeId(activityTemplate.FightTimeId)
if not beginTime or not endTime then return false end
return now >= beginTime and now <= endTime
end
-- 获取入口数据
function XFubenRogueLikeManager.GetRogueLikeSection()
local sections = {}
local activityId = XFubenRogueLikeManager.GetRogueLikeActivityId()
if activityId and XFubenRogueLikeManager.IsInActivity() then
local section = {
Id = activityId,
Type = XDataCenter.FubenManager.ChapterType.RogueLike,
BannerBg = CS.XGame.ClientConfig:GetString("FubenRogueLikeBannerBg"),
}
table.insert(sections, section)
end
return sections
end
-- 选择特殊节点
function XFubenRogueLikeManager.SelectSpecialEvent(nodeId, eventId, func)
XNetwork.Call(RogueLikeRpc.SelectSpecialEvent, {
NodeId = nodeId,
EventId = eventId
}, function(res)
if res.Code ~= XCode.Success then
XUiManager.TipCode(res.Code)
return
end
if func then
func()
end
-- response
-- public XCode Code;
end)
end
-- 神秘商店购买
function XFubenRogueLikeManager.NodeBuy(nodeId, itemId, itemCount, func)
XNetwork.Call(RogueLikeRpc.NodeBuy, {
NodeId = nodeId,
ItemId = itemId,
Count = itemCount
}, function(res)
if res.Code ~= XCode.Success then
XUiManager.TipCode(res.Code)
return
end
if func then
func()
end
-- 奖励通知
local shopItemTemplate = XFubenRogueLikeConfig.GetShopItemTemplateById(itemId)
if not shopItemTemplate then return end
if shopItemTemplate.Type == XFubenRogueLikeConfig.XRLShopItemType.Item then
local list = {}
table.insert(list, XRewardManager.CreateRewardGoodsByTemplate({ TemplateId = shopItemTemplate.Param[1], Count = shopItemTemplate.Param[2] or 1 }))
XUiManager.OpenUiObtain(list)
elseif shopItemTemplate.Type == XFubenRogueLikeConfig.XRLShopItemType.Buff then
local buffIds = {}
table.insert(buffIds, {
Id = shopItemTemplate.Param[1]
})
XLuaUiManager.Open("UiRogueLikeObtainBuff", buffIds)
end
end)
end
-- 选择节点
function XFubenRogueLikeManager.SelectNode(nodeId, func)
XNetwork.Call(RogueLikeRpc.SelectNode, {
NodeId = nodeId
}, function(res)
if res.Code ~= XCode.Success then
XUiManager.TipCode(res.Code)
return
end
-- 记下选择过的节点{IdSelectId, Value, SubValue}
if res.SelectInfo then
ShowSelectNodeInfo[res.SelectInfo.SelectId] = res.SelectInfo
end
if func then
func()
end
-- response
-- public XCode Code;
end)
end
-- 增强buff
function XFubenRogueLikeManager.IntensifyBuff(nodeId, buffId, func)
XNetwork.Call(RogueLikeRpc.IntensifyBuff, {
NodeId = nodeId,
BuffId = buffId
}, function(res)
if res.Code ~= XCode.Success then
XUiManager.TipCode(res.Code)
return
end
local buffTemplate = XFubenRogueLikeConfig.GetBuffTemplateById(buffId)
local update_buffs = {}
for _, v in pairs(BuffIds or {}) do
if v ~= buffId and v ~= buffTemplate.IntensifyId then
table.insert(update_buffs, v)
end
end
if buffTemplate.IntensifyId > 0 then
table.insert(update_buffs, buffTemplate.IntensifyId)
end
BuffIds = update_buffs
XEventManager.DispatchEvent(XEventId.EVENT_ROGUELIKE_BUFFIDS_CHANGES)
if func then
func()
end
-- response
-- public XCode Code;
end)
end
-- 休息点回复行动力
function XFubenRogueLikeManager.Recover(nodeId, func)
XNetwork.Call(RogueLikeRpc.Recover, {
NodeId = nodeId,
}, function(res)
if res.Code ~= XCode.Success then
XUiManager.TipCode(res.Code)
return
end
if func then
func()
end
-- response
-- public XCode Code;
end)
end
-- 打开宝箱
function XFubenRogueLikeManager.OpenBox(nodeId, eventNode, func)
XNetwork.Call(RogueLikeRpc.OpenBox, {
NodeId = nodeId,
}, function(res)
if res.Code ~= XCode.Success then
XUiManager.TipCode(res.Code)
return
end
-- 判断宝箱类型
local nodeTemplate = XFubenRogueLikeConfig.GetNodeTemplateById(eventNode.Id)
for i = 1, #nodeTemplate.Param do
local boxId = nodeTemplate.Param[i]
local boxTemplate = XFubenRogueLikeConfig.GetBoxTemplateById(boxId)
if boxTemplate.Type == XFubenRogueLikeConfig.XRLBoxType.Item then
if func then
func()
end
XUiManager.OpenUiObtain(res.RewardGoodsList or {})
elseif boxTemplate.Type == XFubenRogueLikeConfig.XRLBoxType.Buff then
local buffIds = {}
for i2 = 1, #boxTemplate.Param do
table.insert(buffIds, {
Id = boxTemplate.Param[i2]
})
end
XLuaUiManager.Open("UiRogueLikeObtainBuff", buffIds)
if func then
func()
end
end
break
end
-- response
-- public XCode Code;
-- public List<XRewardGoods> RewardGoodsList;
end)
end
-- 完成节点:离开
function XFubenRogueLikeManager.FinishNode(nodeId, func)
XNetwork.Call(RogueLikeRpc.FinishNode, {
NodeId = nodeId,
}, function(res)
if res.Code ~= XCode.Success then
XUiManager.TipCode(res.Code)
return
end
if func then
func(res)
end
-- response
-- public XCode Code;
end)
end
-- 黑市商店购买
function XFubenRogueLikeManager.BuyBlackShopItem()
end
-- 支援请求
function XFubenRogueLikeManager.RequestSupportCall(id, count, func)
XNetwork.Call(RogueLikeRpc.SupportCall, {
Id = id,
Count = count
}, function(res)
if res.Code ~= XCode.Success then
XUiManager.TipCode(res.Code)
return
end
SupportInfos[id] = (SupportInfos[id] or 0) + 1
local supportTemplate = XFubenRogueLikeConfig.GetSupportStationTemplateById(id)
local specialEventTemplate = XFubenRogueLikeConfig.GetSpecialEventTemplateById(supportTemplate.SpecialEvent)
if XFubenRogueLikeConfig.XRLOtherEventType.AddRobot ~= specialEventTemplate.Type then
XLuaUiManager.Open("UiRogueLikeStoryResult", supportTemplate.SpecialEvent, XFubenRogueLikeConfig.SpecialResultType.SingleEvent)
end
if func then
func()
end
end)
end
-- 选择特殊事件组
function XFubenRogueLikeManager.SelectSpecialEventGroup(nodeId, groupId, func)
XNetwork.Call(RogueLikeRpc.SelectSpecialEventGroup,
{
NodeId = nodeId,
GroupId = groupId
}, function(res)
if res.Code ~= XCode.Success then
XUiManager.TipCode(res.Code)
return
end
if func then
func()
end
if #res.ResultInfos > 0 then
XLuaUiManager.Open("UiRogueLikeStoryResult", res.ResultInfos, XFubenRogueLikeConfig.SpecialResultType.MultipleEvent)
end
end)
end
-- 当天第一次进入时,保存今日队伍
function XFubenRogueLikeManager.RogueLikeSetTeam(characterList, func)
XNetwork.Call(RogueLikeRpc.TeamSet,
{
CharacterList = characterList
}, function(res)
if res.Code ~= XCode.Success then
XUiManager.TipCode(res.Code)
return
end
for i = 1, #characterList do
CharacterInfos[i] = {}
CharacterInfos[i].Id = characterList[i]
CharacterInfos[i].HpLeft = 100
CharacterInfos[i].TeamPos = i
CharacterInfos[i].Captain = 0
CharacterInfos[i].FirstFight = 0
end
XEventManager.DispatchEvent(XEventId.EVENT_ROGUELIKE_ACTIONPOINT_CHARACTER_CHANGED)
if func then
func()
end
end)
end
function XFubenRogueLikeManager.UpdateRogueLikeStageRobots(stageId, isAssis, robotId)
RogueLikeStageRobots[stageId] = {}
RogueLikeStageRobots[stageId].IsAssis = isAssis == 1
local robots = (isAssis == 1) and robotId or {}
RogueLikeStageRobots[stageId].RobotId = robots
end
function XFubenRogueLikeManager.GetRogueLikeStageRobots(stageId)
return RogueLikeStageRobots[stageId]
end
function XFubenRogueLikeManager.GetActivityBeginTime()
local activityTemplate = XFubenRogueLikeConfig.GetLastRogueLikeConfig()
return XFunctionManager.GetStartTimeByTimeId(activityTemplate.ActivityTimeId)
end
function XFubenRogueLikeManager.GetFightEndTime()
local activityTemplate = XFubenRogueLikeConfig.GetLastRogueLikeConfig()
return XFunctionManager.GetEndTimeByTimeId(activityTemplate.FightTimeId)
end
function XFubenRogueLikeManager.GetActivityEndTime()
local activityTemplate = XFubenRogueLikeConfig.GetLastRogueLikeConfig()
return XFunctionManager.GetEndTimeByTimeId(activityTemplate.ActivityTimeId)
end
function XFubenRogueLikeManager.GetFunctionalOpenId()
local activityConfig = XFubenRogueLikeConfig.GetRogueLikeConfigById(ActivityId)
return activityConfig.FunctionalOpenId
end
function XFubenRogueLikeManager.ShowRogueLikeTipsOnce()
local value = XFubenRogueLikeManager.GetRogueLikePrefs(XFubenRogueLikeConfig.KEY_SHOW_TIPS, 0)
local hasShow = value == 1
if not hasShow then
XUiManager.ShowHelpTip("RogueLike")
XFubenRogueLikeManager.SaveRogueLikePrefs(XFubenRogueLikeConfig.KEY_SHOW_TIPS, 1)
end
end
-- 打开爬塔之前检查是否需要播剧情
function XFubenRogueLikeManager.OpenRogueLikeCheckStory()
local value = XFubenRogueLikeManager.GetRogueLikePrefs(XFubenRogueLikeConfig.KEY_PLAY_STORY, 0)
local activityId = XFubenRogueLikeManager.GetRogueLikeActivityId()
local hasPlay = value == 1
if not hasPlay and activityId then
local activityConfig = XFubenRogueLikeConfig.GetRogueLikeConfigById(activityId)
-- -- 播放剧情
if activityConfig and activityConfig.BeginStoryId then
XDataCenter.MovieManager.PlayMovie(activityConfig.BeginStoryId, function()
XLuaUiManager.Open("UiRogueLikeMain")
end)
else
XLuaUiManager.Open("UiRogueLikeMain")
end
XFubenRogueLikeManager.SaveRogueLikePrefs(XFubenRogueLikeConfig.KEY_PLAY_STORY, 1)
else
XLuaUiManager.Open("UiRogueLikeMain")
end
end
-- 保存本地数据
function XFubenRogueLikeManager.SaveRogueLikePrefs(key, value)
local activityId = XFubenRogueLikeManager.GetRogueLikeActivityId()
if XPlayer.Id and activityId then
key = string.format("%s_%s_%s", key, tostring(XPlayer.Id), tostring(activityId))
CS.UnityEngine.PlayerPrefs.SetInt(key, value)
CS.UnityEngine.PlayerPrefs.Save()
end
end
function XFubenRogueLikeManager.GetRogueLikePrefs(key, defaultValue)
local activityId = XFubenRogueLikeManager.GetRogueLikeActivityId()
if XPlayer.Id and activityId then
key = string.format("%s_%s_%s", key, tostring(XPlayer.Id), tostring(activityId))
if CS.UnityEngine.PlayerPrefs.HasKey(key) then
local rogueLikePref = CS.UnityEngine.PlayerPrefs.GetInt(key)
return (rogueLikePref == nil or rogueLikePref == 0) and defaultValue or rogueLikePref
end
end
return defaultValue
end
-- 检查活动结束
function XFubenRogueLikeManager.CheckRogueLikeActivityEndOnUi(uiName)
if not XFubenRogueLikeManager.IsInActivity() and XLuaUiManager.IsUiShow(uiName) then
XUiManager.TipMsg(CS.XTextManager.GetText("RougeLikeNotInActivityTime"))
XLuaUiManager.RunMain()
end
end
-- 检查天重置-修改为活动过期提示
function XFubenRogueLikeManager.CheckRogueLikeDayResetOnUi(uiName)
if CS.XFight.IsRunning or XLuaUiManager.IsUiLoad("UiLoading") then
return
end
if XLuaUiManager.IsUiShow(uiName) then
local notChars = #CharacterInfos <= 0
local notInActivity = not XFubenRogueLikeManager.IsInActivity()
if notChars or notInActivity then
if notChars then
XUiManager.TipMsg(CS.XTextManager.GetText("RogueLikeDayReset"))
elseif notInActivity then
XUiManager.TipMsg(CS.XTextManager.GetText("RougeLikeNotInActivityTime"))
end
XScheduleManager.ScheduleOnce(function()
XLuaUiManager.RunMain()
end, 1000)
end
end
end
function XFubenRogueLikeManager.CheckCharacterReset()
-- 战斗模式
if CS.XFight.IsRunning or XLuaUiManager.IsUiLoad("UiLoading") then
return
end
if XFubenRogueLikeManager.IsTargetUiShow() and not XFubenRogueLikeManager.IsSectionPurgatory() then
local notChars = #CharacterInfos <= 0
local notInActivity = not XFubenRogueLikeManager.IsInActivity()
if notChars or notInActivity then
if notInActivity then
XUiManager.TipMsg(CS.XTextManager.GetText("RougeLikeNotInActivityTime"))
elseif notChars then
XUiManager.TipMsg(CS.XTextManager.GetText("RogueLikeDayReset"))
end
XScheduleManager.ScheduleOnce(function()
XLuaUiManager.RunMain()
end, 1000)
end
end
end
function XFubenRogueLikeManager.IsTargetUiShow()
for _, uiName in pairs(CheckUiName) do
if XLuaUiManager.IsUiShow(uiName) then
return true
end
end
return false
end
function XFubenRogueLikeManager.IsFinalTier()
return IsFinal
end
-- 获取历史最高层级
function XFubenRogueLikeManager.GetHistoryMaxTier()
return HistoryMaxTier
end
function XFubenRogueLikeManager.ResetIsFinalTier()
IsFinal = false
end
-- 最多获得机器人数量
function XFubenRogueLikeManager.GetMaxRobotCount()
local activityId = XFubenRogueLikeManager.GetRogueLikeActivityId()
if not activityId then return 3 end
local activityTemplate = XFubenRogueLikeConfig.GetRougueLikeTemplateById(activityId)
if not activityTemplate then return 3 end
return activityTemplate.RobotMax or 3
end
-- 机器人是否已经到达最大值
function XFubenRogueLikeManager.IsAssistRobotFull()
local ownCount = #AssistRobots
local needCount = XFubenRogueLikeManager.GetMaxRobotCount()
return ownCount >= needCount
end
--试炼模式尽量放在这里
--试炼模式重置数据
function XFubenRogueLikeManager.ResetHardNode(resetType, func)
XNetwork.Call(RogueLikeRpc.ResetHardNode, {
Type = resetType,
}, function(res)
if res.Code ~= XCode.Success then
XUiManager.TipCode(res.Code)
return
end
XDataCenter.FubenRogueLikeManager.AsyncRogueLikeInfo(res.Data)
XEventManager.DispatchEvent(XEventId.EVENT_ROGUELIKE_SECTION_REFRESH)
if func then
func()
end
end)
end
function XFubenRogueLikeManager.OpenTrialPoint(func)
XNetwork.Call(RogueLikeRpc.OpenTrialPoint, {
CurSectionId = CurSectionId
}, function(res)
if res.Code ~= XCode.Success then
XUiManager.TipCode(res.Code)
return
end
XDataCenter.FubenRogueLikeManager.AsyncTrialPointRequest(res.PointInfo)
if func then
func()
end
end)
end
function XFubenRogueLikeManager.GetRogueLikeTrialPoint()
return RogueLikeTrialPoint
end
function XFubenRogueLikeManager.SetRogueLikeTrialPointShowByTween(value)
RogueLikeTrialPointShowByTween = value
end
function XFubenRogueLikeManager.GetRogueLikeTrialPointShowByTween()
return RogueLikeTrialPointShowByTween
end
function XFubenRogueLikeManager.IsSectionPurgatory()
local CurSectionTierType = XFubenRogueLikeConfig.GetTierSectionTierTypeById(CurSectionId)
return CurSectionTierType == XFubenRogueLikeConfig.TierType.Purgatory
end
function XFubenRogueLikeManager.GetNeedShowTrialTips()
return NeedShowTrialTips
end
--是否需要显示试炼开启页面
function XFubenRogueLikeManager.SetNeedShowTrialTips(value)
NeedShowTrialTips = value
end
function XFubenRogueLikeManager.GetRogueLikeResetNum()
return RogueLikeResetNum
end
--获取最终得分的数据
function XFubenRogueLikeManager.GetRogueLikeTrialPointDatas()
return TrialPointDatas
end
--是否需要显示最终得分页面
function XFubenRogueLikeManager.SetNeedShowTrialPointView(value)
NeedShowTrialPointView = value
end
function XFubenRogueLikeManager.GetNeedShowTrialPointView()
return NeedShowTrialPointView
end
function XFubenRogueLikeManager.Init()
end
XFubenRogueLikeManager.Init()
return XFubenRogueLikeManager
end
-- 通知玩法数据
XRpc.NotifyRogueLikeData = function(notifyData)
XDataCenter.FubenRogueLikeManager.AsyncRogueLikeInfo(notifyData)
end
-- 通知buff
XRpc.NotifyBuffData = function(notifyData)
XDataCenter.FubenRogueLikeManager.AsyncBuffData(notifyData)
end
-- 更新章节数据
XRpc.NotifySectionInfoChange = function(notifyData)
XDataCenter.FubenRogueLikeManager.AsyncSectionInfoChange(notifyData)
end
XRpc.NotifyNodeShopInfo = function(notifyData)
XDataCenter.FubenRogueLikeManager.AsyncNodeShopInfo(notifyData)
end
-- 通知助战机器人改变
XRpc.NotifyAssistRobot = function(notifyData)
XDataCenter.FubenRogueLikeManager.AsyncAssistRobot(notifyData)
end
-- 刷新行动点和角色信息
XRpc.NotifyActionPointAndCharacterInfo = function(notifyData)
XDataCenter.FubenRogueLikeManager.AsyncActionPointAndCharacterInfo(notifyData)
end
-- 刷新队伍效果
XRpc.NotifyTeamEffect = function(notifyData)
XDataCenter.FubenRogueLikeManager.AsyncTeamEffect(notifyData)
end
--通关显示试炼积分
XRpc.NotifyTrialPoint = function(notifyData)
XDataCenter.FubenRogueLikeManager.AsyncTrialPoint(notifyData)
end