protected override void PrepareConstructionConfig( ConstructionTileRequirements tileRequirements, ConstructionStageConfig build, ConstructionStageConfig repair, ConstructionUpgradeConfig upgrade, out ProtoStructureCategory category) { // Lithium salt extractor requires each tile to contain a geothermal spring. tileRequirements .Clear() .Add(ValidatorForPvP) .Add(ValidatorForPvE) .Add(ConstructionTileRequirements.BasicRequirements) .Add(ConstructionTileRequirements.ValidatorClientOnlyNoCurrentPlayer) .Add(ConstructionTileRequirements.ValidatorNoPhysicsBodyDynamic) .Add(ConstructionTileRequirements.ErrorNoFreeSpace, c => !ConstructionTileRequirements.TileHasAnyPhysicsObjectsWhere( c.Tile, t => t.PhysicsBody.IsStatic && !(t.PhysicsBody.AssociatedWorldObject?.ProtoWorldObject is ObjectDepositGeothermalSpring))) .Add(ConstructionTileRequirements.ErrorNoFreeSpace, c => c.Tile.StaticObjects.All(o => o.ProtoWorldObject is ObjectDepositGeothermalSpring)) .Add(ConstructionTileRequirements.ValidatorNotRestrictedArea) .Add(LandClaimSystem.ValidatorIsOwnedOrFreeArea); this.PrepareConstructionConfig(build, repair, out category); }
protected sealed override void PrepareConstructionConfig( ConstructionTileRequirements tileRequirements, ConstructionStageConfig build, ConstructionStageConfig repair, ConstructionUpgradeConfig upgrade, out ProtoStructureCategory category) { tileRequirements .Clear() .Add(ConstructionTileRequirements.DefaultForPlayerStructuresOwnedOrFreeLand) // land-claim specific requirements .Add(LandClaimSystem.ValidatorNewLandClaimNoLandClaimIntersectionsWithShieldProtection) .Add(LandClaimSystem.ValidatorNewLandClaimNoLandClaimIntersections) .Add(LandClaimSystem.ValidatorCheckCharacterLandClaimAmountLimit) .Add(LandClaimSystem.ValidatorNewLandClaimNoLandClaimIntersectionsWithDemoPlayers) .Add(LandClaimSystem.ValidatorNewLandClaimNoLandClaimsTooClose) .Add(LandClaimSystem.ValidatorCheckLandClaimDepositRequireXenogeology) .Add(LandClaimSystem.ValidatorCheckLandClaimDepositCooldown) .Add(LandClaimSystem.ValidatorCheckLandClaimBaseSizeLimitNotExceeded) .Add(LandClaimSystem.ValidatorNewLandClaimSafeStorageCapacityNotExceeded) .Add(ObjectMineralPragmiumSource.ValidatorCheckNoPragmiumSourceNearbyOnPvE); this.PrepareLandClaimConstructionConfig(tileRequirements, build, repair, upgrade, out category); var landClaimSize = this.LandClaimSize; Api.Assert(landClaimSize % 2 == 0, "Land claim size should be an even number"); }
protected sealed override void PrepareConstructionConfig( ConstructionTileRequirements tileRequirements, ConstructionStageConfig build, ConstructionStageConfig repair, ConstructionUpgradeConfig upgrade, out ProtoStructureCategory category) { // Oil pump requires each tile to contain an oil seep. // Notice: technically it will be possible to construct one oil pump on two oil seeps if they're nearby, // so there should be the oil spawn limitation to avoid that case! tileRequirements .Clear() .Add(ValidatorForPvP) .Add(ValidatorForPvE) .Add(ConstructionTileRequirements.BasicRequirements) .Add(ConstructionTileRequirements.ValidatorClientOnlyNoCurrentPlayer) .Add(ConstructionTileRequirements.ValidatorNoPhysicsBodyDynamic) .Add(ConstructionTileRequirements.ErrorNoFreeSpace, c => !ConstructionTileRequirements.TileHasAnyPhysicsObjectsWhere( c.Tile, o => o.PhysicsBody.IsStatic && !(o.PhysicsBody.AssociatedWorldObject?.ProtoWorldObject is ObjectDepositOilSeep))) .Add(ConstructionTileRequirements.ErrorNoFreeSpace, c => c.Tile.StaticObjects.All(o => o.ProtoWorldObject is ObjectDepositOilSeep)) .Add(ConstructionTileRequirements.ValidatorNotRestrictedArea) .Add(LandClaimSystem.ValidatorIsOwnedOrFreeArea); this.PrepareConstructionConfig(build, repair, out category); }
protected override void PrepareLandClaimConstructionConfig( ConstructionTileRequirements tileRequirements, ConstructionStageConfig build, ConstructionStageConfig repair, ConstructionUpgradeConfig upgrade, out ProtoStructureCategory category) { category = GetCategory <StructureCategoryOther>(); // build is not allowed - it's an upgrade from previous level // for requirements for the upgrade see construction upgrade config from previous level build.IsAllowed = false; repair.StagesCount = 10; repair.StageDurationSeconds = BuildDuration.Short; repair.AddStageRequiredItem <ItemIngotIron>(count: 3); repair.AddStageRequiredItem <ItemIngotCopper>(count: 3); repair.AddStageRequiredItem <ItemComponentsElectronic>(count: 1); upgrade.AddUpgrade <ObjectLandClaimT4>() .AddRequiredItem <ItemPlastic>(count: 50) .AddRequiredItem <ItemIngotCopper>(count: 100) .AddRequiredItem <ItemComponentsHighTech>(count: 20) .AddRequiredItem <ItemPowerCell>(count: 5); }
protected sealed override void PrepareConstructionConfig( ConstructionTileRequirements tileRequirements, ConstructionStageConfig build, ConstructionStageConfig repair, ConstructionUpgradeConfig upgrade, out ProtoStructureCategory category) { category = GetCategory <StructureCategoryBuildings>(); // can build only if there is no floor or floor of different prototype var validatorNoFloorOfTheSameType = new ConstructionTileRequirements.Validator( ConstructionTileRequirements.ErrorCannotBuildOnFloor, c => c.Tile.StaticObjects.All( o => o.ProtoStaticWorldObject != this)); // Tile requirements is not overridable for floors implementations: // require solid ground, no built floor, no static (non-structure) objects, no farms tileRequirements .Clear() .Add(ConstructionTileRequirements.BasicRequirements) .Add(ConstructionTileRequirements.ValidatorNoStaticObjectsExceptPlayersStructures) .Add(ConstructionTileRequirements.ValidatorNoFarmPlot) .Add(validatorNoFloorOfTheSameType) .Add(ConstructionTileRequirements.ValidatorNotRestrictedArea) .Add(ConstructionTileRequirements.ValidatorNoNpcsAround) .Add(ConstructionTileRequirements.ValidatorNoPlayersNearby) .Add(LandClaimSystem.ValidatorIsOwnedLandInPvEOnly) .Add(LandClaimSystem.ValidatorNoRaid) .Add(LandClaimSystem.ValidatorNoShieldProtection); build.StagesCount = 1; this.PrepareFloorConstructionConfig(build, repair); }
protected sealed override void PrepareConstructionConfig( ConstructionTileRequirements tileRequirements, ConstructionStageConfig build, ConstructionStageConfig repair, ConstructionUpgradeConfig upgrade, out ProtoStructureCategory category) { category = GetCategory <StructureCategoryFood>(); this.PrepareFarmConstructionConfig(tileRequirements, build, repair); }
protected sealed override void PrepareConstructionConfig( ConstructionTileRequirements tileRequirements, ConstructionStageConfig build, ConstructionStageConfig repair, ConstructionUpgradeConfig upgrade, out ProtoStructureCategory category) { build.IsAllowed = false; repair.IsAllowed = false; category = GetCategory <StructureCategoryBuildings>(); }
protected override void PrepareConstructionConfig( ConstructionTileRequirements tileRequirements, ConstructionStageConfig build, ConstructionStageConfig repair, ConstructionUpgradeConfig upgrade, out ProtoStructureCategory category) { category = GetCategory <StructureCategoryBuildings>(); build.StagesCount = 1; }
protected override void PrepareConstructionConfig( ConstructionStageConfig build, ConstructionStageConfig repair, ConstructionUpgradeConfig upgrade, out ProtoStructureCategory category) { // it's not buildable build.IsAllowed = false; category = Api.GetProtoEntity <StructureCategoryOther>(); repair.IsAllowed = false; }
protected override void PrepareConstructionConfig( ConstructionTileRequirements tileRequirements, ConstructionStageConfig build, ConstructionStageConfig repair, ConstructionUpgradeConfig upgrade, out ProtoStructureCategory category) { // not constructable from the construction menu build.IsAllowed = false; category = GetCategory <StructureCategoryOther>(); }
protected override void PrepareConstructionConfig( ConstructionTileRequirements tileRequirements, ConstructionStageConfig build, ConstructionStageConfig repair, ConstructionUpgradeConfig upgrade, out ProtoStructureCategory category) { tileRequirements.Add(ErrorWellNotAllowed, c => c.Tile.ProtoTile is IProtoTileWellAllowed); this.PrepareConstructionConfigWell(tileRequirements, build, repair, upgrade, out category); }
protected sealed override void PrepareConstructionConfig( ConstructionTileRequirements tileRequirements, ConstructionStageConfig build, ConstructionStageConfig repair, ConstructionUpgradeConfig upgrade, out ProtoStructureCategory category) { this.PrepareConstructionConfig(build, repair, upgrade, out category); }
protected override void PrepareConstructionConfig( ConstructionTileRequirements tileRequirements, ConstructionStageConfig build, ConstructionStageConfig repair, ConstructionUpgradeConfig upgrade, out ProtoStructureCategory category) { tileRequirements.Add(ErrorBuildingAllowedOnlyInDesert, c => c.Tile.ProtoTile is TileBarren); this.PrepareConstructionConfigWell(tileRequirements, build, repair, upgrade, out category); }
protected sealed override void PrepareConstructionConfig( ConstructionTileRequirements tileRequirements, ConstructionStageConfig build, ConstructionStageConfig repair, ConstructionUpgradeConfig upgrade, out ProtoStructureCategory category) { category = GetCategory <StructureCategoryDecorations>(); build.StagesCount = 1; this.PrepareDecorationConstructionConfig(tileRequirements, build, repair); }
protected sealed override void PrepareConstructionConfig( ConstructionTileRequirements tileRequirements, ConstructionStageConfig build, ConstructionStageConfig repair, ConstructionUpgradeConfig upgrade, out ProtoStructureCategory category) { tileRequirements.Add(LandClaimSystem.ValidatorNewLandClaimNoLandClaimIntersections); tileRequirements.Add(LandClaimSystem.ValidatorCheckCharacterLandClaimAmountLimit); tileRequirements.Add(LandClaimSystem.ValidatorCheckCharacterLandClaimDepositClaimLimit); this.PrepareLandClaimConstructionConfig(tileRequirements, build, repair, upgrade, out category); }
protected sealed override void PrepareTileRequirements(ConstructionTileRequirements tileRequirements) { var configBuild = new ConstructionStageConfig(); var configRepair = new ConstructionStageConfig(); var configUpgrade = new ConstructionUpgradeConfig(); tileRequirements.Add(ConstructionTileRequirements.ValidatorNotRestrictedArea) .Add(ConstructionTileRequirements.ValidatorNoNpcsAround) .Add(ConstructionTileRequirements.ValidatorNoPlayersNearby) .Add(LandClaimSystem.ValidatorIsOwnedOrFreeArea) .Add(LandClaimSystem.ValidatorNoRaid); this.PrepareConstructionConfig( tileRequirements, configBuild, configRepair, configUpgrade, out var category); configBuild.ApplyRates(StructureConstants.BuildItemsCountMultiplier); configUpgrade.ApplyRates(StructureConstants.BuildItemsCountMultiplier); configRepair.ApplyRates(StructureConstants.RepairItemsCountMultiplier); this.Category = category ?? throw new Exception( "Structure category is not set during " + nameof(this.PrepareConstructionConfig) + " call"); foreach (var upgradeEntry in configUpgrade.Entries) { if (upgradeEntry.RequiredItems.Count > 4) { // we don't allow more than 4 items for upgrades (the upgrade UI space is strictly limited) throw new Exception(this.ShortId + " requires more than 4 items to upgrade to " + upgradeEntry.ProtoStructure.ShortId + ". Max 4 items allowed"); } } if (configRepair.IsAllowed) { this.ValidateRepairConfig(configRepair, configBuild); } this.ConfigBuild = configBuild; this.ConfigRepair = configRepair; this.ConfigUpgrade = configUpgrade; }
protected sealed override void PrepareConstructionConfig( ConstructionTileRequirements tileRequirements, ConstructionStageConfig build, ConstructionStageConfig repair, ConstructionUpgradeConfig upgrade, out ProtoStructureCategory category) { tileRequirements.Add(LandClaimSystem.ValidatorIsOwnedLand); this.PrepareConstructionConfig(build, repair, upgrade, out category); }
protected override void PrepareConstructionConfig( ConstructionStageConfig build, ConstructionStageConfig repair, ConstructionUpgradeConfig upgrade, out ProtoStructureCategory category) { category = GetCategory <StructureCategoryBuildings>(); build.StagesCount = 3; build.StageDurationSeconds = BuildDuration.Short; build.AddStageRequiredItem <ItemIngotIron>(count: 1); repair.StagesCount = 3; repair.StageDurationSeconds = BuildDuration.Short; repair.AddStageRequiredItem <ItemIngotIron>(count: 1); }
protected override void PrepareConstructionConfig( ConstructionStageConfig build, ConstructionStageConfig repair, ConstructionUpgradeConfig upgrade, out ProtoStructureCategory category) { category = GetCategory <StructureCategoryDecorations>(); build.StagesCount = 5; build.StageDurationSeconds = BuildDuration.Medium; build.AddStageRequiredItem <ItemPlanks>(count: 5); repair.StagesCount = 5; repair.StageDurationSeconds = BuildDuration.Medium; repair.AddStageRequiredItem <ItemPlanks>(count: 3); }
protected override void PrepareConstructionConfig( ConstructionTileRequirements tileRequirements, ConstructionStageConfig build, ConstructionStageConfig repair, ConstructionUpgradeConfig upgrade, out ProtoStructureCategory category) { var buildAdditionalReactor = new InputItems(); this.PrepareConstructionConfigGenerator(tileRequirements, build, repair, buildAdditionalReactor, out category); this.BuildAdditionalReactorRequiredItems = buildAdditionalReactor.AsReadOnly(); }
protected override void PrepareLaunchpadConstructionConfig( ConstructionStageConfig build, ConstructionStageConfig repair, ConstructionUpgradeConfig upgrade) { // build is not allowed - it's an upgrade from previous level build.IsAllowed = false; repair.StagesCount = 10; repair.StageDurationSeconds = BuildDuration.VeryLong; repair.AddStageRequiredItem <ItemIngotSteel>(count: 4); repair.AddStageRequiredItem <ItemComponentsElectronic>(count: 2); upgrade.AddUpgrade <ObjectLaunchpadStage5>(); // please note: the upgrade is free but requires finishing the tasks defined below }
protected override void PrepareConstructionConfig( ConstructionStageConfig build, ConstructionStageConfig repair, ConstructionUpgradeConfig upgrade, out ProtoStructureCategory category) { category = GetCategory <StructureCategoryOther>(); build.StagesCount = 10; build.StageDurationSeconds = BuildDuration.Short; build.AddStageRequiredItem <ItemPlanks>(count: 4); repair.StagesCount = 10; repair.StageDurationSeconds = BuildDuration.Short; repair.AddStageRequiredItem <ItemPlanks>(count: 2); }
protected override void PrepareConstructionConfigWell( ConstructionTileRequirements tileRequirements, ConstructionStageConfig build, ConstructionStageConfig repair, ConstructionUpgradeConfig upgrade, out ProtoStructureCategory category) { category = GetCategory <StructureCategoryIndustry>(); build.StagesCount = 5; build.StageDurationSeconds = BuildDuration.Short; build.AddStageRequiredItem <ItemStone>(count: 12); repair.StagesCount = 10; repair.StageDurationSeconds = BuildDuration.Short; repair.AddStageRequiredItem <ItemStone>(count: 3); }
protected override void PrepareConstructionConfig( ConstructionStageConfig build, ConstructionStageConfig repair, ConstructionUpgradeConfig upgrade, out ProtoStructureCategory category) { category = GetCategory <StructureCategoryBuildings>(); build.StagesCount = 5; build.StageDurationSeconds = BuildDuration.VeryLong; build.AddStageRequiredItem <ItemCement>(count: 10); build.AddStageRequiredItem <ItemIngotSteel>(count: 5); repair.StagesCount = 5; repair.StageDurationSeconds = BuildDuration.Short; repair.AddStageRequiredItem <ItemIngotSteel>(count: 4); }
protected override void PrepareConstructionConfig( ConstructionTileRequirements tileRequirements, ConstructionStageConfig build, ConstructionStageConfig repair, ConstructionUpgradeConfig upgrade, out ProtoStructureCategory category) { category = GetCategory <StructureCategoryStorage>(); build.StagesCount = 10; build.StageDurationSeconds = BuildDuration.Short; build.AddStageRequiredItem <ItemIngotSteel>(count: 2); repair.StagesCount = 10; repair.StageDurationSeconds = BuildDuration.Short; repair.AddStageRequiredItem <ItemIngotSteel>(count: 1); }
protected override void PrepareConstructionConfigSprinkler( ConstructionStageConfig build, ConstructionStageConfig repair, ConstructionUpgradeConfig upgrade, out ProtoStructureCategory category) { category = GetCategory <StructureCategoryFood>(); build.StagesCount = 5; build.StageDurationSeconds = BuildDuration.Short; build.AddStageRequiredItem <ItemIngotSteel>(count: 2); build.AddStageRequiredItem <ItemGlassRaw>(count: 2); build.AddStageRequiredItem <ItemComponentsElectronic>(count: 1); repair.StagesCount = 10; repair.StageDurationSeconds = BuildDuration.Short; repair.AddStageRequiredItem <ItemIngotSteel>(count: 1); }
protected override void PrepareConstructionConfig( ConstructionTileRequirements tileRequirements, ConstructionStageConfig build, ConstructionStageConfig repair, ConstructionUpgradeConfig upgrade, out ProtoStructureCategory category) { category = GetCategory <StructureCategoryIndustry>(); build.StagesCount = 5; build.StageDurationSeconds = BuildDuration.Short; build.AddStageRequiredItem <ItemPlanks>(count: 10); build.AddStageRequiredItem <ItemBottleWater>(count: 1); repair.StagesCount = 5; repair.StageDurationSeconds = BuildDuration.Short; repair.AddStageRequiredItem <ItemPlanks>(count: 5); }
protected override void PrepareLandClaimConstructionConfig( ConstructionTileRequirements tileRequirements, ConstructionStageConfig build, ConstructionStageConfig repair, ConstructionUpgradeConfig upgrade, out ProtoStructureCategory category) { category = GetCategory <StructureCategoryOther>(); // build is not allowed - it's an upgrade from previous level // for requirements for the upgrade see construction upgrade config from previous level build.IsAllowed = false; repair.StagesCount = 10; repair.StageDurationSeconds = BuildDuration.Short; repair.AddStageRequiredItem <ItemIngotSteel>(count: 5); repair.AddStageRequiredItem <ItemIngotCopper>(count: 5); }
protected override void PrepareConstructionConfigTurret( ConstructionTileRequirements tileRequirements, ConstructionStageConfig build, ConstructionStageConfig repair, ConstructionUpgradeConfig upgrade) { build.StagesCount = 5; build.StageDurationSeconds = BuildDuration.Short; build.AddStageRequiredItem <ItemIngotSteel>(count: 4); build.AddStageRequiredItem <ItemWire>(count: 4); build.AddStageRequiredItem <ItemComponentsHighTech>(count: 1); build.AddStageRequiredItem <ItemComponentsWeapon>(count: 1); repair.StagesCount = 5; repair.StageDurationSeconds = BuildDuration.Short; repair.AddStageRequiredItem <ItemIngotSteel>(count: 4); repair.AddStageRequiredItem <ItemWire>(count: 4); }
protected override void PrepareConstructionConfig( ConstructionStageConfig build, ConstructionStageConfig repair, ConstructionUpgradeConfig upgrade, out ProtoStructureCategory category) { category = GetCategory <StructureCategoryBuildings>(); build.StagesCount = 10; build.StageDurationSeconds = BuildDuration.Medium; build.AddStageRequiredItem <ItemIngotSteel>(count: 4); build.AddStageRequiredItem <ItemCement>(count: 3); build.AddStageRequiredItem <ItemComponentsMechanical>(count: 1); repair.StagesCount = 10; repair.StageDurationSeconds = BuildDuration.Medium; repair.AddStageRequiredItem <ItemIngotSteel>(count: 2); }