Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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");
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
        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);
        }
Ejemplo n.º 6
0
 protected sealed override void PrepareConstructionConfig(
     ConstructionTileRequirements tileRequirements,
     ConstructionStageConfig build,
     ConstructionStageConfig repair,
     ConstructionUpgradeConfig upgrade,
     out ProtoStructureCategory category)
 {
     category = GetCategory <StructureCategoryFood>();
     this.PrepareFarmConstructionConfig(tileRequirements, build, repair);
 }
Ejemplo n.º 7
0
 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>();
 }
Ejemplo n.º 8
0
        protected override void PrepareConstructionConfig(
            ConstructionTileRequirements tileRequirements,
            ConstructionStageConfig build,
            ConstructionStageConfig repair,
            ConstructionUpgradeConfig upgrade,
            out ProtoStructureCategory category)
        {
            category = GetCategory <StructureCategoryBuildings>();

            build.StagesCount = 1;
        }
Ejemplo n.º 9
0
 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;
 }
Ejemplo n.º 10
0
 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>();
 }
Ejemplo n.º 11
0
        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);
        }
Ejemplo n.º 12
0
 protected sealed override void PrepareConstructionConfig(
     ConstructionTileRequirements tileRequirements,
     ConstructionStageConfig build,
     ConstructionStageConfig repair,
     ConstructionUpgradeConfig upgrade,
     out ProtoStructureCategory category)
 {
     this.PrepareConstructionConfig(build,
                                    repair,
                                    upgrade,
                                    out category);
 }
Ejemplo n.º 13
0
        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);
        }
Ejemplo n.º 14
0
        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);
        }
Ejemplo n.º 15
0
 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);
 }
Ejemplo n.º 16
0
        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;
        }
Ejemplo n.º 17
0
        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);
        }
Ejemplo n.º 18
0
        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);
        }
Ejemplo n.º 19
0
        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);
        }
Ejemplo n.º 20
0
        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();
        }
Ejemplo n.º 21
0
        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
        }
Ejemplo n.º 22
0
        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);
        }
Ejemplo n.º 23
0
        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);
        }
Ejemplo n.º 24
0
        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);
        }
Ejemplo n.º 25
0
        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);
        }
Ejemplo n.º 26
0
        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);
        }
Ejemplo n.º 27
0
        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);
        }
Ejemplo n.º 28
0
        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);
        }
Ejemplo n.º 29
0
        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);
        }
Ejemplo n.º 30
0
        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);
        }