PGRData/Script/matrix/xmanager/XFubenRogueLikeManager.lua

1193 lines
No EOL
43 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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