PGRData/Script/matrix/xconfig/XDoomsdayConfigs.lua

368 lines
14 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.

local tonumber = tonumber
local tableInsert = table.insert
local tableSort = table.sort
local ipairs = ipairs
local pairs = pairs
XDoomsdayConfigs = XDoomsdayConfigs or {}
function XDoomsdayConfigs.Init()
XDoomsdayConfigs.ActivityConfig =
XConfig.New("Share/MiniActivity/Doomsday/DoomsdayActivity.tab", XTable.XTableDoomsdayActivity) --活动配置
XDoomsdayConfigs.StageConfig =
XConfig.New("Share/MiniActivity/Doomsday/DoomsdayStage.tab", XTable.XTableDoomsdayStage) --关卡配置
XDoomsdayConfigs.PlaceConfig =
XConfig.New("Share/MiniActivity/Doomsday/DoomsdayStagePlace.tab", XTable.XTableDoomsdayStagePlace) --探索地点配置
XDoomsdayConfigs.ResourceConfig =
XConfig.New("Share/MiniActivity/Doomsday/DoomsdayResource.tab", XTable.XTableDoomsdayResource) --资源配置
XDoomsdayConfigs.EventConfig =
XConfig.New("Share/MiniActivity/Doomsday/DoomsdayEvent.tab", XTable.XTableDoomsdayEvent) --关卡事件配置
XDoomsdayConfigs.CreatTeamConfig =
XConfig.New("Share/MiniActivity/Doomsday/DoomsdayCreateTeam.tab", XTable.XTableDoomsdayCreateTeam) --探索队伍创建消耗配置
XDoomsdayConfigs.BuildingConfig =
XConfig.New("Share/MiniActivity/Doomsday/DoomsdayBuilding.tab", XTable.XTableDoomsdayBuilding) --建筑配置
XDoomsdayConfigs.AttributeConfig =
XConfig.New("Share/MiniActivity/Doomsday/DoomsdayAttribute.tab", XTable.XTableDoomsdayAttribute) --属性配置
XDoomsdayConfigs.TargetConfig =
XConfig.New("Share/MiniActivity/Doomsday/DoomsdayTask.tab", XTable.XTableDoomsdayTask) --关卡目标配置
XDoomsdayConfigs.AttributeTypeConfig =
XConfig.New("Share/MiniActivity/Doomsday/DoomsdayAttributeType.tab", XTable.XTableDoomsdayAttributeType) --属性类型配置
XDoomsdayConfigs.ReportConfig =
XConfig.New("Client/MiniActivity/Doomsday/DoomsdayReportText.tab", XTable.XTableDoomsdayReportText) --报告内容随机文本库配置
XDoomsdayConfigs.ResourceAllotConfig =
XConfig.New("Client/MiniActivity/Doomsday/DoomsdayResourceAllot.tab", XTable.XTableDoomsdayResourceAllot) --资源分配方式配置
XDoomsdayConfigs.InitText()
end
-----------------活动相关 begin-----------------
function XDoomsdayConfigs.GetDefaultActivityId()
local defaultActivityId = 0
for activityId, config in pairs(XDoomsdayConfigs.ActivityConfig:GetConfigs()) do
defaultActivityId = activityId
if XTool.IsNumberValid(config.TimeId) and XFunctionManager.CheckInTimeByTimeId(config.TimeId) then
break
end
end
return defaultActivityId
end
--获取后置关卡Id
function XDoomsdayConfigs.GetAfterStageId(activityId, stageId)
for _, inStageId in pairs(XDoomsdayConfigs.ActivityConfig:GetProperty(activityId, "StageId") or {}) do
if XDoomsdayConfigs.StageConfig:GetProperty(inStageId, "PreStage") == stageId then
return inStageId
end
end
return 0
end
---------------活动相关 end-------------------
--居民属性类型
XDoomsdayConfigs.ATTRUBUTE_TYPE = {
HEALTH = 1, --健康值
HUNGER = 2, --饱腹值
SAN = 3 --精神值
}
XDoomsdayConfigs.HOMELESS_ATTR_TYPE = 4 --无家可归属性类型(策划要放到其他居民属性一起展示)
function XDoomsdayConfigs.GetSortedAttrTypes()
return {
XDoomsdayConfigs.ATTRUBUTE_TYPE.HEALTH,
XDoomsdayConfigs.ATTRUBUTE_TYPE.HUNGER,
XDoomsdayConfigs.ATTRUBUTE_TYPE.SAN
}
end
--获取关卡每日单居民需求资源数量(仅分配资源使用)
function XDoomsdayConfigs.GetStageDailyRequireResourceCount(stageId, resourceId)
for index, inResourceId in pairs(XDoomsdayConfigs.StageConfig:GetProperty(stageId, "DailyConsumeResouceId")) do
if inResourceId == resourceId then
return XDoomsdayConfigs.StageConfig:GetProperty(stageId, "DailyConsumeResouceCount")[index] or 0
end
end
return 0
end
--根据资源Id获取关联的居民属性Type
function XDoomsdayConfigs.GetRelatedAttrIdByResourceId(stageId, resourceId)
for _, attrId in pairs(XDoomsdayConfigs.StageConfig:GetProperty(stageId, "AttributeId")) do
if XDoomsdayConfigs.AttributeConfig:GetProperty(attrId, "ResourceId") == resourceId then
return attrId
end
end
return 0
end
--关卡事件类型
XDoomsdayConfigs.EVENT_TYPE = {
MAIN = 1, --主要事件
NORMAL = 2, --普通事件
EXPLORE = 3 --探索事件
}
function XDoomsdayConfigs.GetEventTypeRemindDesc(eventType)
if eventType == XDoomsdayConfigs.EVENT_TYPE.MAIN then
return CsXTextManagerGetText("DoomsdayEventTypeRemindDescMain")
elseif eventType == XDoomsdayConfigs.EVENT_TYPE.EXPLORE then
return CsXTextManagerGetText("DoomsdayEventTypeRemindDescExplore")
end
return CsXTextManagerGetText("DoomsdayEventTypeRemindDescNormal")
end
--获取资源Id列表brief简明模式只显示前两种资源
function XDoomsdayConfigs.GetResourceIds(brief)
local ids = {}
local limitCount = brief and 2 or XMath.IntMax()
for id in ipairs(XDoomsdayConfigs.ResourceConfig:GetConfigs()) do
if id > limitCount then
break
end
tableInsert(ids, id)
end
return ids
end
local function CreateReourceList(ids, counts, daily)
local resources = {}
for index, id in ipairs(ids) do
if XTool.IsNumberValid(id) then
tableInsert(
resources,
{
Id = id,
Count = counts[index],
Daily = daily
}
)
end
end
return resources
end
--获取建筑建造消耗资源列表
function XDoomsdayConfigs.GetBuildingConstructResourceInfos(buildingId)
return CreateReourceList(
XDoomsdayConfigs.BuildingConfig:GetProperty(buildingId, "SpendResourceType"),
XDoomsdayConfigs.BuildingConfig:GetProperty(buildingId, "SpendResourceCount")
)
end
--获取建筑工作中每日消耗资源列表
function XDoomsdayConfigs.GetBuildingDailyConsumeResourceInfos(buildingId)
return CreateReourceList(
XDoomsdayConfigs.BuildingConfig:GetProperty(buildingId, "WorkingDailyConsumeResourceId"),
XDoomsdayConfigs.BuildingConfig:GetProperty(buildingId, "WorkingDailyConsumeResourceCount"),
true
)
end
--获取建筑工作中每日获得资源列表
function XDoomsdayConfigs.GetBuildingDailyGainResourceInfos(buildingId)
return CreateReourceList(
XDoomsdayConfigs.BuildingConfig:GetProperty(buildingId, "WorkingDailyGainResourceId"),
XDoomsdayConfigs.BuildingConfig:GetProperty(buildingId, "WorkingDailyGainResourceCount"),
true
)
end
--建筑类型(一期只区分简单建筑类型)
XDoomsdayConfigs.BUILDING_TYPE = {
NORMAL = 0, --普通
RUINS = 1, --废墟
INOPERABLE = 2, --不可操作类型
TEAM = 3 --哨站(用于解锁探索小队)
}
function XDoomsdayConfigs.IsBuildingRuins(buildingId)
return XDoomsdayConfigs.BuildingConfig:GetProperty(buildingId, "Type") == XDoomsdayConfigs.BUILDING_TYPE.RUINS
end
function XDoomsdayConfigs.IsBuildingInOperable(buildingId)
if not XTool.IsNumberValid(buildingId) then
return false
end
return XDoomsdayConfigs.BuildingConfig:GetProperty(buildingId, "Type") == XDoomsdayConfigs.BUILDING_TYPE.INOPERABLE
end
--建筑状态
XDoomsdayConfigs.BUILDING_STATE = {
EMPTY = 0, --空
WAITING = 1, --等待分配
WORKING = 2, --工作中
PENDING = 3 --工作中断
}
--不同建筑状态的图标
local CSXGameClientConfig = CS.XGame.ClientConfig
XDoomsdayConfigs.BuildingTypeIcon = {
[XDoomsdayConfigs.BUILDING_STATE.EMPTY] = CSXGameClientConfig:GetString("DoomsdayBuildingStateIconEmpty"),
[XDoomsdayConfigs.BUILDING_STATE.WAITING] = CSXGameClientConfig:GetString("DoomsdayBuildingStateIconWaiting"),
[XDoomsdayConfigs.BUILDING_STATE.WORKING] = CSXGameClientConfig:GetString("DoomsdayBuildingStateIconWorking"),
[XDoomsdayConfigs.BUILDING_STATE.PENDING] = CSXGameClientConfig:GetString("DoomsdayBuildingStateIconPending")
}
XDoomsdayConfigs.EmptyBuildingIcon = CSXGameClientConfig:GetString("DoomsdayBuildingIconEmpty")
--资源类型
XDoomsdayConfigs.RESOURCE_TYPE = {
WOOD = 1, --木材
STEEL = 2, --钢材
MEDICINE = 3, --血清
FOOD = 4 --食物
}
XDoomsdayConfigs.SPECIAL_RESOURCE_TYPE_INHANBITANT = -1 --特殊资源类型:居民
--资源分配方式
XDoomsdayConfigs.RESOURCE_ALLOCTION_FUNC_NAME = {
ALL = "GetResourceAllocationByAllocateToAll", --给所有人分配
HALF = "GetResourceAllocationByAllocateToHalf", --给一半人分配
MOST = "GetResourceAllocationByAllocateToMost", --给尽可能多的人分配
NONE = "GetResourceAllocationByAllocateToNone" --不分配
}
--获取加减不同颜色的数字文本 +50-50
function XDoomsdayConfigs.GetNumerText(num)
if num > 0 then
return CsXTextManagerGetText("DoomsdayNumberUp", math.abs(num))
end
if num < 0 then
return CsXTextManagerGetText("DoomsdayNumberDown", math.abs(num))
end
return ""
end
--获取加减不同颜色的数字文本 50/100 红色100/100 蓝色)
function XDoomsdayConfigs.GetRequireNumerText(cur, max)
if cur < max then
return CsXTextManagerGetText("DoomsdayRequireNumberDown", cur, max)
else
return CsXTextManagerGetText("DoomsdayRequireNumberUp", cur, max)
end
end
--每日结算报告
XDoomsdayConfigs.REPORT_ID = {
BUILDING_ADD = 1, --营地增加资源
TEAM_ADD = 2, --探索小队增加资源/居民数量
DEAD = 3, --死去居民文本显示
HOMELESS = 4, --不良状态随机文本(无家可归)
UNHEALTHY = 5, --不良状态随机文本(不健康)
HUNGER = 6, --不良状态随机文本(饥饿)
LOW_SAN = 7, --不良状态随机文本(精神值过低)
HOMELESS_RT = 8, --不良状态随机文本(无家可归)【反向判断】
UNHEALTHY_RT = 9, --不良状态随机文本(不健康)【反向判断】
HUNGER_RT = 10, --不良状态随机文本(饥饿)【反向判断】
LOW_SAN_RT = 11, --不良状态随机文本(精神值过低)【反向判断】
BUILDING_ADD_RT = 12 --营地增加资源【反向判断】
}
--获取随机文本报告
local function GetRandomReportText(reportId)
local descs = XDoomsdayConfigs.ReportConfig:GetProperty(reportId, "Desc")
return descs[XTool.GetRandomNumbers(#descs, 1)[1]]
end
--获取异常状态/死亡居民随机文本报告
function XDoomsdayConfigs.GetRandomReportTextBad(reportId, addInhabitantCount)
local desc, addText = GetRandomReportText(reportId), ""
if XTool.IsNumberValid(addInhabitantCount) then
addText =
CsXTextManagerGetText(
"DoomsdayReportResource",
addInhabitantCount,
CsXTextManagerGetText("DoomsdayInhabitantName")
)
end
if not string.IsNilOrEmpty(addText) then
desc = string.gsub(desc, "{0}", addText)
end
return desc
end
--获取获得资源随机文本报告
function XDoomsdayConfigs.GetRandomReportTextFix(reportId, addResourceDic, addInhabitantCount)
local desc, addText = "", ""
if XTool.IsNumberValid(addInhabitantCount) then
addText =
CsXTextManagerGetText(
"DoomsdayReportResource",
addInhabitantCount,
CsXTextManagerGetText("DoomsdayInhabitantName")
)
end
if not XTool.IsTableEmpty(addResourceDic) then
for resourceId, resource in pairs(addResourceDic) do
local count = resource:GetProperty("_Count")
if XTool.IsNumberValid(count) then
local newText =
CsXTextManagerGetText(
"DoomsdayReportResource",
count,
XDoomsdayConfigs.ResourceConfig:GetProperty(resourceId, "Name")
)
addText = string.IsNilOrEmpty(addText) and newText or addText .. "" .. newText
end
end
end
if not string.IsNilOrEmpty(addText) then
desc = GetRandomReportText(reportId)
desc = string.gsub(desc, "{0}", addText)
else
if reportId == XDoomsdayConfigs.REPORT_ID.BUILDING_ADD then
desc = GetRandomReportText(XDoomsdayConfigs.REPORT_ID.BUILDING_ADD_RT)
end
end
return desc
end
--检查指定地点Id是否为大本营
function XDoomsdayConfigs.CheckPlaceIsCamp(stageId, placeId)
return XDoomsdayConfigs.StageConfig:GetProperty(stageId, "FirstPlace") == placeId
end
function XDoomsdayConfigs.GetCreateTeamCostResourceList(teamId)
local infoList = {}
local countList = XDoomsdayConfigs.CreatTeamConfig:GetProperty(teamId, "SpendResourceCount")
for index, resourceId in pairs(XDoomsdayConfigs.CreatTeamConfig:GetProperty(teamId, "SpendResourceType")) do
tableInsert(
infoList,
{
ResourceId = resourceId,
Count = countList[index] or 0
}
)
end
return infoList
end
--关卡失败原因
XDoomsdayConfigs.SETTLE_LOSE_REASON = {
INHABITANT_DIE_OUT = 1, --居民死光
INHABITANT_CRAZY = 2, --居民SAN值全部降为0
INHABITANT_TIME_OUT = 3 --时间用尽未达成主目标
}
--关卡失败描述文本
function XDoomsdayConfigs.InitText()
XDoomsdayConfigs.LOSE_REASON_TEXT = {
[XDoomsdayConfigs.SETTLE_LOSE_REASON.INHABITANT_DIE_OUT] = CsXTextManagerGetText("DoomsdayLoseReasonDieOut"), --居民死光
[XDoomsdayConfigs.SETTLE_LOSE_REASON.INHABITANT_CRAZY] = CsXTextManagerGetText("DoomsdayLoseReasonCrazy"), --居民SAN值全部降为0
[XDoomsdayConfigs.SETTLE_LOSE_REASON.INHABITANT_TIME_OUT] = CsXTextManagerGetText("DoomsdayLoseReasonTimeOut") --时间用尽未达成主目标
}
end
--探索小队状态
XDoomsdayConfigs.TEAM_STATE = {
WAITING = 1, --待命
MOVING = 2, --行进中
BUSY = 3 --事件中
}