/// <summary> /// generates unique name by adding prefix. /// </summary> /// <param name="excludeCurrent"> /// set to true when renaming /// set to false when cloning. /// </param> public static string GetUniqueNetInfoName(string name, bool excludeCurrent = false) { string strippedName = PackageHelper.StripName(name); if (excludeCurrent && strippedName == name) { return(name); } string finalName = strippedName; for (int i = 0; PrefabCollection <NetInfo> .LoadedExists(finalName); i++) { finalName = $"instance{i}." + strippedName; if (i > 1000) { throw new Exception("Infinite loop"); } } return(finalName); }
/// <summary> /// 刷新建筑里程碑 /// </summary> /// <param name="name">建筑名称</param> /// <param name="milestoneInfo">新的里程碑进度</param> /// <param name="config">配置信息</param> /// <param name="inGroup">是否在组</param> private void RefreshBuildingMilestone(string name, MilestoneInfo milestoneInfo, ModConfigModel config, bool inGroup = false) { if (config.BuildingExistsRoads.Contains(name) || config.BuildingContainedRoads.Contains(name)) { RefreshRoadMilestone(name, milestoneInfo, config); } else if (config.BuildingGroups.TryGetValue(name, out List <string> buildingGroup) && !inGroup) { foreach (string buildingName in buildingGroup) { RefreshBuildingMilestone(buildingName, milestoneInfo, config, true); } } else if (PrefabCollection <BuildingInfo> .LoadedExists(name)) { BuildingInfo building = PrefabCollection <BuildingInfo> .FindLoaded(name); if (milestoneInfo.GetLevel() < building.GetUnlockMilestone().GetLevel()) { building.m_UnlockMilestone = milestoneInfo; } RefreshRelatedMilestone(name, building.category, building.m_class.m_service, building.m_class.m_subService, milestoneInfo); } }
/// <summary> /// 刷新道路里程碑 /// </summary> /// <param name="name">道路名称</param> /// <param name="milestoneInfo">新的里程碑进度</param> /// <param name="config">配置信息</param> /// <param name="inGroup">是否在组</param> private void RefreshRoadMilestone(string name, MilestoneInfo milestoneInfo, ModConfigModel config, bool inGroup = false) { if (config.RoadExistsBuildings.Contains(name)) { RefreshBuildingMilestone(name, milestoneInfo, config); } else if (config.RoadGroups.TryGetValue(name, out List <string> roadGroup) && !inGroup) { foreach (string roadName in roadGroup) { RefreshRoadMilestone(roadName, milestoneInfo, config, true); } } else if (PrefabCollection <NetInfo> .LoadedExists(name)) { NetInfo net = PrefabCollection <NetInfo> .FindLoaded(name); if (milestoneInfo.GetLevel() < net.GetUnlockMilestone().GetLevel()) { net.m_UnlockMilestone = milestoneInfo; } RefreshRelatedMilestone(name, net.category, net.m_class.m_service, net.m_class.m_subService, net.m_UnlockMilestone); } }