From 0fd1c1acf2f0e2e949a62e91101130ea452fe78d Mon Sep 17 00:00:00 2001 From: hhofmann Date: Sat, 2 Jul 2022 13:02:05 +0200 Subject: [PATCH] Gitlab to Gitea Migration --- AutoGen/Clothing/BasicBackpack.cs | 56 ++++++ AutoGen/Clothing/Bearpack.cs | 57 ++++++ AutoGen/Clothing/BigBackpack.cs | 56 ++++++ AutoGen/Clothing/LightBackpack.cs | 57 ++++++ AutoGen/Clothing/RunningShoes.cs | 56 ++++++ AutoGen/Clothing/WorkBackpack.cs | 57 ++++++ AutoGen/Clothing/WorkBoots.cs | 56 ++++++ AutoGen/Food/BaconCheeseBurger.cs | 54 ++++++ AutoGen/Food/BakedSalmon.cs | 53 ++++++ AutoGen/Food/BurritoSupreme.cs | 53 ++++++ AutoGen/Food/Cake.cs | 54 ++++++ AutoGen/Food/ElkTaco.cs | 52 ++++++ AutoGen/Food/FishFillet.cs | 51 ++++++ AutoGen/Food/FishHeadSoup.cs | 52 ++++++ AutoGen/Food/FishTaco.cs | 52 ++++++ AutoGen/Food/Fishsticks.cs | 52 ++++++ AutoGen/Food/GrillSalmon.cs | 53 ++++++ AutoGen/Food/Milk.cs | 51 ++++++ AutoGen/Food/ModTest.cs | 55 ++++++ AutoGen/Food/Oil.cs | 162 ++++++++++++++++ AutoGen/Food/RicePilaf.cs | 52 ++++++ AutoGen/Food/RicePudding.cs | 51 ++++++ AutoGen/Food/SpicyClamChowder.cs | 52 ++++++ AutoGen/Food/Tallow.cs | 33 ++++ AutoGen/Food/Tortilla.cs | 57 ++++++ AutoGen/Food/TunaCasserole.cs | 52 ++++++ AutoGen/Food/TunaSalad.cs | 52 ++++++ AutoGen/Food/TunafishSandwich.cs | 53 ++++++ AutoGen/Item/AsphaltRamp.cs | 51 ++++++ AutoGen/Item/AsphaltRampUpgrade.cs | 51 ++++++ AutoGen/Item/AsphaltRoad.cs | 64 +++++++ AutoGen/Item/AsphaltRoadUpgrade.cs | 64 +++++++ AutoGen/Item/Barrel.cs | 63 +++++++ AutoGen/Item/Biodiesel.cs | 63 +++++++ AutoGen/Item/Board.cs | 54 ++++++ AutoGen/Item/Charcoal.cs | 54 ++++++ AutoGen/Item/Coal.cs | 56 ++++++ AutoGen/Item/CombustionEngine.cs | 56 ++++++ AutoGen/Item/Concrete.cs | 55 ++++++ AutoGen/Item/CopperIngot.cs | 54 ++++++ AutoGen/Item/CopperOre.cs | 55 ++++++ AutoGen/Item/CopperWiring.cs | 54 ++++++ AutoGen/Item/Gearbox.cs | 54 ++++++ AutoGen/Item/GoldIngot.cs | 54 ++++++ AutoGen/Item/GoldOre.cs | 55 ++++++ AutoGen/Item/HewnLog.cs | 72 ++++++++ AutoGen/Item/IronIngot.cs | 54 ++++++ AutoGen/Item/IronOre.cs | 55 ++++++ AutoGen/Item/Log.cs | 54 ++++++ AutoGen/Item/Lumber.cs | 76 ++++++++ AutoGen/Item/MortaredStone.cs | 72 ++++++++ AutoGen/Item/Piston.cs | 54 ++++++ AutoGen/Item/ReinforcedConcrete.cs | 76 ++++++++ AutoGen/Item/Steel.cs | 55 ++++++ AutoGen/Item/StoneRampUpgrade.cs | 51 ++++++ AutoGen/Recipe/BakedPitch.cs | 32 ++++ AutoGen/Recipe/ButcherBison.cs | 35 ++++ AutoGen/Recipe/ButcherElk.cs | 35 ++++ AutoGen/Recipe/ButcherFox.cs | 35 ++++ AutoGen/Recipe/ButcherHare.cs | 35 ++++ AutoGen/Recipe/ButcherTurkey.cs | 35 ++++ AutoGen/Recipe/ButcherWolf.cs | 35 ++++ AutoGen/Recipe/CampfireBison.cs | 35 ++++ AutoGen/Recipe/CampfireElk.cs | 35 ++++ AutoGen/Recipe/CampfireFox.cs | 35 ++++ AutoGen/Recipe/CampfireHare.cs | 34 ++++ AutoGen/Recipe/CampfireSalmon.cs | 34 ++++ AutoGen/Recipe/CampfireTrout.cs | 34 ++++ AutoGen/Recipe/CampfireTuna.cs | 34 ++++ AutoGen/Recipe/CampfireTurkey.cs | 35 ++++ AutoGen/Recipe/CampfireWolf.cs | 35 ++++ AutoGen/Recipe/CleanSalmon.cs | 34 ++++ AutoGen/Recipe/CleanTrout.cs | 34 ++++ AutoGen/Recipe/CleanTuna.cs | 34 ++++ AutoGen/Recipe/ExoticFruitSalad.cs | 35 ++++ AutoGen/Recipe/ExoticSalad.cs | 36 ++++ AutoGen/Recipe/ExoticVegetableMedley.cs | 36 ++++ AutoGen/Recipe/ForestSalad.cs | 36 ++++ AutoGen/Recipe/GrasslandSalad.cs | 36 ++++ AutoGen/Recipe/GrindStoneToDirt.cs | 32 ++++ AutoGen/Recipe/GrindStoneToSand.cs | 32 ++++ AutoGen/Recipe/MassCutWire.cs | 32 ++++ AutoGen/Recipe/MixedFruitSalad.cs | 35 ++++ AutoGen/Recipe/MixedSalad.cs | 36 ++++ AutoGen/Recipe/MixedVegetableMedley.cs | 35 ++++ AutoGen/Recipe/SmeltCopper.cs | 32 ++++ AutoGen/Recipe/SmeltGold.cs | 32 ++++ AutoGen/Recipe/SmeltIron.cs | 32 ++++ AutoGen/Tool/UpgradeIronAx.cs | 43 +++++ AutoGen/Tool/UpgradeIronHammer.cs | 42 +++++ AutoGen/Tool/UpgradeIronHoe.cs | 42 +++++ AutoGen/Tool/UpgradeIronPickaxe.cs | 42 +++++ AutoGen/Tool/UpgradeIronScythe.cs | 42 +++++ AutoGen/Tool/UpgradeIronShovel.cs | 42 +++++ AutoGen/Tool/UpgradeSteelAx.cs | 42 +++++ AutoGen/Tool/UpgradeSteelHammer.cs | 42 +++++ AutoGen/Tool/UpgradeSteelHoe.cs | 42 +++++ AutoGen/Tool/UpgradeSteelPickaxe.cs | 42 +++++ AutoGen/Tool/UpgradeSteelScythe.cs | 42 +++++ AutoGen/Tool/UpgradeSteelShovel.cs | 42 +++++ AutoGen/Tool/UpgradeStoneAx.cs | 42 +++++ AutoGen/Tool/UpgradeStoneHammer.cs | 42 +++++ AutoGen/Tool/UpgradeStonePickaxe.cs | 42 +++++ AutoGen/Tool/UpgradeStoneScythe.cs | 42 +++++ AutoGen/Tool/UpgradeWoodenHoe.cs | 42 +++++ AutoGen/Tool/UpgradeWoodenShovel.cs | 42 +++++ AutoGen/Vehicle/PoweredCart.cs | 86 +++++++++ AutoGen/Vehicle/SmallWoodCart.cs | 75 ++++++++ AutoGen/Vehicle/WoodCart.cs | 74 ++++++++ AutoGen/WorldObject/Anvil.cs | 106 +++++++++++ AutoGen/WorldObject/BakeryOven.cs | 125 +++++++++++++ AutoGen/WorldObject/BlastFurnace.cs | 134 ++++++++++++++ AutoGen/WorldObject/Bloomery.cs | 121 ++++++++++++ AutoGen/WorldObject/Bookshelf.cs | 111 +++++++++++ AutoGen/WorldObject/Brazier.cs | 120 ++++++++++++ AutoGen/WorldObject/ButcheryTable.cs | 112 ++++++++++++ AutoGen/WorldObject/Campfire.cs | 111 +++++++++++ AutoGen/WorldObject/CandleStand.cs | 116 ++++++++++++ AutoGen/WorldObject/CarpentryTable.cs | 101 ++++++++++ AutoGen/WorldObject/CastIronStove.cs | 127 +++++++++++++ AutoGen/WorldObject/CeilingCandle.cs | 116 ++++++++++++ AutoGen/WorldObject/CementKiln.cs | 139 ++++++++++++++ AutoGen/WorldObject/CombustionGenerator.cs | 127 +++++++++++++ AutoGen/WorldObject/ComputerLab.cs | 72 ++++++++ AutoGen/WorldObject/ConstructionPost.cs | 97 ++++++++++ AutoGen/WorldObject/ContractBoard.cs | 95 ++++++++++ AutoGen/WorldObject/Couch.cs | 108 +++++++++++ AutoGen/WorldObject/CurrencyExchange.cs | 100 ++++++++++ AutoGen/WorldObject/Door.cs | 96 ++++++++++ AutoGen/WorldObject/EckoStatue.cs | 98 ++++++++++ AutoGen/WorldObject/ElectricWallLamp.cs | 111 +++++++++++ AutoGen/WorldObject/ElectronicsAssembly.cs | 111 +++++++++++ AutoGen/WorldObject/FramedGlassDoor.cs | 94 ++++++++++ AutoGen/WorldObject/Icebox.cs | 112 ++++++++++++ AutoGen/WorldObject/Kiln.cs | 116 ++++++++++++ AutoGen/WorldObject/Kitchen.cs | 113 ++++++++++++ AutoGen/WorldObject/Laboratory.cs | 106 +++++++++++ AutoGen/WorldObject/Laser.cs | 80 ++++++++ AutoGen/WorldObject/MachineShop.cs | 112 ++++++++++++ AutoGen/WorldObject/OilRefinery.cs | 136 ++++++++++++++ AutoGen/WorldObject/PaddedChair.cs | 108 +++++++++++ AutoGen/WorldObject/PlanterPotRound.cs | 106 +++++++++++ AutoGen/WorldObject/PlanterPotSquare.cs | 106 +++++++++++ AutoGen/WorldObject/PumpJack.cs | 112 ++++++++++++ AutoGen/WorldObject/Refrigerator.cs | 117 ++++++++++++ AutoGen/WorldObject/ResearchTable.cs | 104 +++++++++++ AutoGen/WorldObject/RollingMill.cs | 106 +++++++++++ AutoGen/WorldObject/Sawmill.cs | 106 +++++++++++ AutoGen/WorldObject/ShelfCabinet.cs | 112 ++++++++++++ AutoGen/WorldObject/SmallTable.cs | 106 +++++++++++ AutoGen/WorldObject/SmallWoodSign.cs | 70 +++++++ AutoGen/WorldObject/SolarGenerator.cs | 112 ++++++++++++ AutoGen/WorldObject/SteelCeilingLight.cs | 111 +++++++++++ AutoGen/WorldObject/SteelFloorLamp.cs | 112 ++++++++++++ AutoGen/WorldObject/SteelTableLamp.cs | 111 +++++++++++ AutoGen/WorldObject/StoneBrazier.cs | 120 ++++++++++++ AutoGen/WorldObject/StoneWell.cs | 66 +++++++ AutoGen/WorldObject/StorageChest.cs | 100 ++++++++++ AutoGen/WorldObject/Store.cs | 101 ++++++++++ AutoGen/WorldObject/Stove.cs | 143 +++++++++++++++ AutoGen/WorldObject/Streetlamp.cs | 112 ++++++++++++ AutoGen/WorldObject/Table.cs | 104 +++++++++++ AutoGen/WorldObject/TailoringTable.cs | 102 +++++++++++ AutoGen/WorldObject/TallowCandle.cs | 117 ++++++++++++ AutoGen/WorldObject/TallowLamp.cs | 114 ++++++++++++ AutoGen/WorldObject/TallowWallLamp.cs | 116 ++++++++++++ AutoGen/WorldObject/TorchStand.cs | 116 ++++++++++++ AutoGen/WorldObject/WainwrightTable.cs | 103 +++++++++++ AutoGen/WorldObject/WallCandle.cs | 116 ++++++++++++ AutoGen/WorldObject/Washboard.cs | 105 +++++++++++ AutoGen/WorldObject/WashingMachine.cs | 111 +++++++++++ AutoGen/WorldObject/Waterwheel.cs | 106 +++++++++++ AutoGen/WorldObject/WindTurbine.cs | 113 ++++++++++++ AutoGen/WorldObject/Windmill.cs | 108 +++++++++++ AutoGen/WorldObject/WoodSign.cs | 97 ++++++++++ AutoGen/WorldObject/WoodenFabricBed.cs | 107 +++++++++++ AutoGen/WorldObject/WoodenStrawBed.cs | 107 +++++++++++ AutoGen/WorldObject/Workbench.cs | 98 ++++++++++ Items/Tailings.cs | 112 ++++++++++++ .../BetterLoggingProfession.unity3d | Bin 0 -> 110376 bytes .../BetterLoggingProfession/LoggingsSkill.cs | 51 ++++++ KirthosMods/BetterMining/BetterMining.unity3d | Bin 0 -> 113461 bytes KirthosMods/BetterMining/MiningSkills.cs | 52 ++++++ KirthosMods/Utils/RubbleUtils.cs | 154 ++++++++++++++++ KirthosMods/Utils/SkillsUtil.cs | 40 ++++ KirthosMods/Utils/TreeUtils.cs | 47 +++++ Objects/StockpileObject.cs | 62 +++++++ Objects/StorageChestObject.cs | 44 +++++ Player/PlayerDefaults.cs | 121 ++++++++++++ README.md | 173 +++++++++++++++++- Tools/AxeItem.cs | 59 ++++++ Tools/HammerItem.cs | 61 ++++++ Tools/HoeItem.cs | 58 ++++++ Tools/PickaxeItem.cs | 81 ++++++++ Tools/ScytheItem.cs | 67 +++++++ Tools/ShovelItem.cs | 83 +++++++++ 196 files changed, 14059 insertions(+), 1 deletion(-) create mode 100644 AutoGen/Clothing/BasicBackpack.cs create mode 100644 AutoGen/Clothing/Bearpack.cs create mode 100644 AutoGen/Clothing/BigBackpack.cs create mode 100644 AutoGen/Clothing/LightBackpack.cs create mode 100644 AutoGen/Clothing/RunningShoes.cs create mode 100644 AutoGen/Clothing/WorkBackpack.cs create mode 100644 AutoGen/Clothing/WorkBoots.cs create mode 100644 AutoGen/Food/BaconCheeseBurger.cs create mode 100644 AutoGen/Food/BakedSalmon.cs create mode 100644 AutoGen/Food/BurritoSupreme.cs create mode 100644 AutoGen/Food/Cake.cs create mode 100644 AutoGen/Food/ElkTaco.cs create mode 100644 AutoGen/Food/FishFillet.cs create mode 100644 AutoGen/Food/FishHeadSoup.cs create mode 100644 AutoGen/Food/FishTaco.cs create mode 100644 AutoGen/Food/Fishsticks.cs create mode 100644 AutoGen/Food/GrillSalmon.cs create mode 100644 AutoGen/Food/Milk.cs create mode 100644 AutoGen/Food/ModTest.cs create mode 100644 AutoGen/Food/Oil.cs create mode 100644 AutoGen/Food/RicePilaf.cs create mode 100644 AutoGen/Food/RicePudding.cs create mode 100644 AutoGen/Food/SpicyClamChowder.cs create mode 100644 AutoGen/Food/Tallow.cs create mode 100644 AutoGen/Food/Tortilla.cs create mode 100644 AutoGen/Food/TunaCasserole.cs create mode 100644 AutoGen/Food/TunaSalad.cs create mode 100644 AutoGen/Food/TunafishSandwich.cs create mode 100644 AutoGen/Item/AsphaltRamp.cs create mode 100644 AutoGen/Item/AsphaltRampUpgrade.cs create mode 100644 AutoGen/Item/AsphaltRoad.cs create mode 100644 AutoGen/Item/AsphaltRoadUpgrade.cs create mode 100644 AutoGen/Item/Barrel.cs create mode 100644 AutoGen/Item/Biodiesel.cs create mode 100644 AutoGen/Item/Board.cs create mode 100644 AutoGen/Item/Charcoal.cs create mode 100644 AutoGen/Item/Coal.cs create mode 100644 AutoGen/Item/CombustionEngine.cs create mode 100644 AutoGen/Item/Concrete.cs create mode 100644 AutoGen/Item/CopperIngot.cs create mode 100644 AutoGen/Item/CopperOre.cs create mode 100644 AutoGen/Item/CopperWiring.cs create mode 100644 AutoGen/Item/Gearbox.cs create mode 100644 AutoGen/Item/GoldIngot.cs create mode 100644 AutoGen/Item/GoldOre.cs create mode 100644 AutoGen/Item/HewnLog.cs create mode 100644 AutoGen/Item/IronIngot.cs create mode 100644 AutoGen/Item/IronOre.cs create mode 100644 AutoGen/Item/Log.cs create mode 100644 AutoGen/Item/Lumber.cs create mode 100644 AutoGen/Item/MortaredStone.cs create mode 100644 AutoGen/Item/Piston.cs create mode 100644 AutoGen/Item/ReinforcedConcrete.cs create mode 100644 AutoGen/Item/Steel.cs create mode 100644 AutoGen/Item/StoneRampUpgrade.cs create mode 100644 AutoGen/Recipe/BakedPitch.cs create mode 100644 AutoGen/Recipe/ButcherBison.cs create mode 100644 AutoGen/Recipe/ButcherElk.cs create mode 100644 AutoGen/Recipe/ButcherFox.cs create mode 100644 AutoGen/Recipe/ButcherHare.cs create mode 100644 AutoGen/Recipe/ButcherTurkey.cs create mode 100644 AutoGen/Recipe/ButcherWolf.cs create mode 100644 AutoGen/Recipe/CampfireBison.cs create mode 100644 AutoGen/Recipe/CampfireElk.cs create mode 100644 AutoGen/Recipe/CampfireFox.cs create mode 100644 AutoGen/Recipe/CampfireHare.cs create mode 100644 AutoGen/Recipe/CampfireSalmon.cs create mode 100644 AutoGen/Recipe/CampfireTrout.cs create mode 100644 AutoGen/Recipe/CampfireTuna.cs create mode 100644 AutoGen/Recipe/CampfireTurkey.cs create mode 100644 AutoGen/Recipe/CampfireWolf.cs create mode 100644 AutoGen/Recipe/CleanSalmon.cs create mode 100644 AutoGen/Recipe/CleanTrout.cs create mode 100644 AutoGen/Recipe/CleanTuna.cs create mode 100644 AutoGen/Recipe/ExoticFruitSalad.cs create mode 100644 AutoGen/Recipe/ExoticSalad.cs create mode 100644 AutoGen/Recipe/ExoticVegetableMedley.cs create mode 100644 AutoGen/Recipe/ForestSalad.cs create mode 100644 AutoGen/Recipe/GrasslandSalad.cs create mode 100644 AutoGen/Recipe/GrindStoneToDirt.cs create mode 100644 AutoGen/Recipe/GrindStoneToSand.cs create mode 100644 AutoGen/Recipe/MassCutWire.cs create mode 100644 AutoGen/Recipe/MixedFruitSalad.cs create mode 100644 AutoGen/Recipe/MixedSalad.cs create mode 100644 AutoGen/Recipe/MixedVegetableMedley.cs create mode 100644 AutoGen/Recipe/SmeltCopper.cs create mode 100644 AutoGen/Recipe/SmeltGold.cs create mode 100644 AutoGen/Recipe/SmeltIron.cs create mode 100644 AutoGen/Tool/UpgradeIronAx.cs create mode 100644 AutoGen/Tool/UpgradeIronHammer.cs create mode 100644 AutoGen/Tool/UpgradeIronHoe.cs create mode 100644 AutoGen/Tool/UpgradeIronPickaxe.cs create mode 100644 AutoGen/Tool/UpgradeIronScythe.cs create mode 100644 AutoGen/Tool/UpgradeIronShovel.cs create mode 100644 AutoGen/Tool/UpgradeSteelAx.cs create mode 100644 AutoGen/Tool/UpgradeSteelHammer.cs create mode 100644 AutoGen/Tool/UpgradeSteelHoe.cs create mode 100644 AutoGen/Tool/UpgradeSteelPickaxe.cs create mode 100644 AutoGen/Tool/UpgradeSteelScythe.cs create mode 100644 AutoGen/Tool/UpgradeSteelShovel.cs create mode 100644 AutoGen/Tool/UpgradeStoneAx.cs create mode 100644 AutoGen/Tool/UpgradeStoneHammer.cs create mode 100644 AutoGen/Tool/UpgradeStonePickaxe.cs create mode 100644 AutoGen/Tool/UpgradeStoneScythe.cs create mode 100644 AutoGen/Tool/UpgradeWoodenHoe.cs create mode 100644 AutoGen/Tool/UpgradeWoodenShovel.cs create mode 100644 AutoGen/Vehicle/PoweredCart.cs create mode 100644 AutoGen/Vehicle/SmallWoodCart.cs create mode 100644 AutoGen/Vehicle/WoodCart.cs create mode 100644 AutoGen/WorldObject/Anvil.cs create mode 100644 AutoGen/WorldObject/BakeryOven.cs create mode 100644 AutoGen/WorldObject/BlastFurnace.cs create mode 100644 AutoGen/WorldObject/Bloomery.cs create mode 100644 AutoGen/WorldObject/Bookshelf.cs create mode 100644 AutoGen/WorldObject/Brazier.cs create mode 100644 AutoGen/WorldObject/ButcheryTable.cs create mode 100644 AutoGen/WorldObject/Campfire.cs create mode 100644 AutoGen/WorldObject/CandleStand.cs create mode 100644 AutoGen/WorldObject/CarpentryTable.cs create mode 100644 AutoGen/WorldObject/CastIronStove.cs create mode 100644 AutoGen/WorldObject/CeilingCandle.cs create mode 100644 AutoGen/WorldObject/CementKiln.cs create mode 100644 AutoGen/WorldObject/CombustionGenerator.cs create mode 100644 AutoGen/WorldObject/ComputerLab.cs create mode 100644 AutoGen/WorldObject/ConstructionPost.cs create mode 100644 AutoGen/WorldObject/ContractBoard.cs create mode 100644 AutoGen/WorldObject/Couch.cs create mode 100644 AutoGen/WorldObject/CurrencyExchange.cs create mode 100644 AutoGen/WorldObject/Door.cs create mode 100644 AutoGen/WorldObject/EckoStatue.cs create mode 100644 AutoGen/WorldObject/ElectricWallLamp.cs create mode 100644 AutoGen/WorldObject/ElectronicsAssembly.cs create mode 100644 AutoGen/WorldObject/FramedGlassDoor.cs create mode 100644 AutoGen/WorldObject/Icebox.cs create mode 100644 AutoGen/WorldObject/Kiln.cs create mode 100644 AutoGen/WorldObject/Kitchen.cs create mode 100644 AutoGen/WorldObject/Laboratory.cs create mode 100644 AutoGen/WorldObject/Laser.cs create mode 100644 AutoGen/WorldObject/MachineShop.cs create mode 100644 AutoGen/WorldObject/OilRefinery.cs create mode 100644 AutoGen/WorldObject/PaddedChair.cs create mode 100644 AutoGen/WorldObject/PlanterPotRound.cs create mode 100644 AutoGen/WorldObject/PlanterPotSquare.cs create mode 100644 AutoGen/WorldObject/PumpJack.cs create mode 100644 AutoGen/WorldObject/Refrigerator.cs create mode 100644 AutoGen/WorldObject/ResearchTable.cs create mode 100644 AutoGen/WorldObject/RollingMill.cs create mode 100644 AutoGen/WorldObject/Sawmill.cs create mode 100644 AutoGen/WorldObject/ShelfCabinet.cs create mode 100644 AutoGen/WorldObject/SmallTable.cs create mode 100644 AutoGen/WorldObject/SmallWoodSign.cs create mode 100644 AutoGen/WorldObject/SolarGenerator.cs create mode 100644 AutoGen/WorldObject/SteelCeilingLight.cs create mode 100644 AutoGen/WorldObject/SteelFloorLamp.cs create mode 100644 AutoGen/WorldObject/SteelTableLamp.cs create mode 100644 AutoGen/WorldObject/StoneBrazier.cs create mode 100644 AutoGen/WorldObject/StoneWell.cs create mode 100644 AutoGen/WorldObject/StorageChest.cs create mode 100644 AutoGen/WorldObject/Store.cs create mode 100644 AutoGen/WorldObject/Stove.cs create mode 100644 AutoGen/WorldObject/Streetlamp.cs create mode 100644 AutoGen/WorldObject/Table.cs create mode 100644 AutoGen/WorldObject/TailoringTable.cs create mode 100644 AutoGen/WorldObject/TallowCandle.cs create mode 100644 AutoGen/WorldObject/TallowLamp.cs create mode 100644 AutoGen/WorldObject/TallowWallLamp.cs create mode 100644 AutoGen/WorldObject/TorchStand.cs create mode 100644 AutoGen/WorldObject/WainwrightTable.cs create mode 100644 AutoGen/WorldObject/WallCandle.cs create mode 100644 AutoGen/WorldObject/Washboard.cs create mode 100644 AutoGen/WorldObject/WashingMachine.cs create mode 100644 AutoGen/WorldObject/Waterwheel.cs create mode 100644 AutoGen/WorldObject/WindTurbine.cs create mode 100644 AutoGen/WorldObject/Windmill.cs create mode 100644 AutoGen/WorldObject/WoodSign.cs create mode 100644 AutoGen/WorldObject/WoodenFabricBed.cs create mode 100644 AutoGen/WorldObject/WoodenStrawBed.cs create mode 100644 AutoGen/WorldObject/Workbench.cs create mode 100644 Items/Tailings.cs create mode 100644 KirthosMods/BetterLoggingProfession/BetterLoggingProfession.unity3d create mode 100644 KirthosMods/BetterLoggingProfession/LoggingsSkill.cs create mode 100644 KirthosMods/BetterMining/BetterMining.unity3d create mode 100644 KirthosMods/BetterMining/MiningSkills.cs create mode 100644 KirthosMods/Utils/RubbleUtils.cs create mode 100644 KirthosMods/Utils/SkillsUtil.cs create mode 100644 KirthosMods/Utils/TreeUtils.cs create mode 100644 Objects/StockpileObject.cs create mode 100644 Objects/StorageChestObject.cs create mode 100644 Player/PlayerDefaults.cs create mode 100644 Tools/AxeItem.cs create mode 100644 Tools/HammerItem.cs create mode 100644 Tools/HoeItem.cs create mode 100644 Tools/PickaxeItem.cs create mode 100644 Tools/ScytheItem.cs create mode 100644 Tools/ShovelItem.cs diff --git a/AutoGen/Clothing/BasicBackpack.cs b/AutoGen/Clothing/BasicBackpack.cs new file mode 100644 index 0000000..d82306a --- /dev/null +++ b/AutoGen/Clothing/BasicBackpack.cs @@ -0,0 +1,56 @@ +namespace Eco.Mods.TechTree +{ + using System.Collections.Generic; + using System.ComponentModel; + using System.Linq; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Players; + using Eco.Gameplay.Skills; + using Eco.Mods.TechTree; + using Eco.Shared.Items; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + + [Serialized] + [Weight(100)] + public partial class BasicBackpackItem : + ClothingItem + { + + public override string FriendlyName { get { return "Basic Backpack"; } } + public override string Description { get { return "Can Carry 10KG more with this one little helper"; } } + public override string Slot { get { return ClothingSlot.Back; } } + public override bool Starter { get { return false ; } } + + private static Dictionary flatStats = new Dictionary() + { + { UserStatType.MaxCarryWeight, 10000f }, + }; +public override Dictionary GetFlatStats() { return flatStats; } + } + + + [RequiresSkill(typeof(ClothesmakingSkill), 1)] + public class BasicBackpackRecipe : Recipe + { + public BasicBackpackRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(ClothesmakingEfficiencySkill), 4, ClothesmakingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(ClothesmakingEfficiencySkill), 5, ClothesmakingEfficiencySkill.MultiplicativeStrategy), + }; + this.CraftMinutes = new ConstantValue(1); + this.Initialize("Basic Backpack", typeof(BasicBackpackRecipe)); + CraftingComponent.AddRecipe(typeof(TailoringTableObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/Clothing/Bearpack.cs b/AutoGen/Clothing/Bearpack.cs new file mode 100644 index 0000000..27479ba --- /dev/null +++ b/AutoGen/Clothing/Bearpack.cs @@ -0,0 +1,57 @@ +namespace Eco.Mods.TechTree +{ + using System.Collections.Generic; + using System.ComponentModel; + using System.Linq; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Players; + using Eco.Gameplay.Skills; + using Eco.Mods.TechTree; + using Eco.Shared.Items; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + + [Serialized] + [Weight(100)] + public partial class BearpackItem : + ClothingItem + { + + public override string FriendlyName { get { return "Bearpack"; } } + public override string Description { get { return "Lets you carry as much as a bear! Not really, but it does help you carry 20KG more."; } } + public override string Slot { get { return ClothingSlot.Back; } } + public override bool Starter { get { return false ; } } + + private static Dictionary flatStats = new Dictionary() + { + { UserStatType.MaxCarryWeight, 20000f }, + }; +public override Dictionary GetFlatStats() { return flatStats; } + } + + + [RequiresSkill(typeof(ClothesmakingSkill), 4)] + public class BearpackRecipe : Recipe + { + public BearpackRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(ClothesmakingEfficiencySkill), 40, ClothesmakingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(ClothesmakingEfficiencySkill), 30, ClothesmakingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(ClothesmakingEfficiencySkill), 50, ClothesmakingEfficiencySkill.MultiplicativeStrategy), + }; + this.CraftMinutes = new ConstantValue(1); + this.Initialize("Bearpack", typeof(BearpackRecipe)); + CraftingComponent.AddRecipe(typeof(TailoringTableObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/Clothing/BigBackpack.cs b/AutoGen/Clothing/BigBackpack.cs new file mode 100644 index 0000000..70f443e --- /dev/null +++ b/AutoGen/Clothing/BigBackpack.cs @@ -0,0 +1,56 @@ +namespace Eco.Mods.TechTree +{ + using System.Collections.Generic; + using System.ComponentModel; + using System.Linq; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Players; + using Eco.Gameplay.Skills; + using Eco.Mods.TechTree; + using Eco.Shared.Items; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + + [Serialized] + [Weight(100)] + public partial class BigBackpackItem : + ClothingItem + { + + public override string FriendlyName { get { return "Big Backpack"; } } + public override string Description { get { return "A normal Backpack. Just... bigger. Let's you carry 15KG more"; } } + public override string Slot { get { return ClothingSlot.Back; } } + public override bool Starter { get { return false ; } } + + private static Dictionary flatStats = new Dictionary() + { + { UserStatType.MaxCarryWeight, 15000f }, + }; +public override Dictionary GetFlatStats() { return flatStats; } + } + + + [RequiresSkill(typeof(ClothesmakingSkill), 2)] + public class BigBackpackRecipe : Recipe + { + public BigBackpackRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(ClothesmakingEfficiencySkill), 4, ClothesmakingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(ClothesmakingEfficiencySkill), 10, ClothesmakingEfficiencySkill.MultiplicativeStrategy), + }; + this.CraftMinutes = new ConstantValue(1); + this.Initialize("Big Backpack", typeof(BigBackpackRecipe)); + CraftingComponent.AddRecipe(typeof(TailoringTableObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/Clothing/LightBackpack.cs b/AutoGen/Clothing/LightBackpack.cs new file mode 100644 index 0000000..b7a8a44 --- /dev/null +++ b/AutoGen/Clothing/LightBackpack.cs @@ -0,0 +1,57 @@ +namespace Eco.Mods.TechTree +{ + using System.Collections.Generic; + using System.ComponentModel; + using System.Linq; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Players; + using Eco.Gameplay.Skills; + using Eco.Mods.TechTree; + using Eco.Shared.Items; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + + [Serialized] + [Weight(100)] + public partial class LightBackpackItem : + ClothingItem + { + + public override string FriendlyName { get { return "Light Backpack"; } } + public override string Description { get { return "Light Backpack. Increasing Movement Speed by 150% but you just can carry 5KG"; } } + public override string Slot { get { return ClothingSlot.Back; } } + public override bool Starter { get { return false ; } } + + private static Dictionary flatStats = new Dictionary() + { + { UserStatType.MaxCarryWeight, 5000f }, + { UserStatType.MovementSpeed, 1.5f }, + }; +public override Dictionary GetFlatStats() { return flatStats; } + } + + + [RequiresSkill(typeof(ClothesmakingSkill), 3)] + public class LightBackpackRecipe : Recipe + { + public LightBackpackRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(ClothesmakingEfficiencySkill), 20, ClothesmakingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(ClothesmakingEfficiencySkill), 20, ClothesmakingEfficiencySkill.MultiplicativeStrategy), + }; + this.CraftMinutes = new ConstantValue(1); + this.Initialize("Light Backpack", typeof(LightBackpackRecipe)); + CraftingComponent.AddRecipe(typeof(TailoringTableObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/Clothing/RunningShoes.cs b/AutoGen/Clothing/RunningShoes.cs new file mode 100644 index 0000000..a8948b6 --- /dev/null +++ b/AutoGen/Clothing/RunningShoes.cs @@ -0,0 +1,56 @@ +namespace Eco.Mods.TechTree +{ + using System.Collections.Generic; + using System.ComponentModel; + using System.Linq; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Players; + using Eco.Gameplay.Skills; + using Eco.Mods.TechTree; + using Eco.Shared.Items; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + + [Serialized] + [Weight(100)] + public partial class RunningShoesItem : + ClothingItem + { + + public override string FriendlyName { get { return "Running Shoes"; } } + public override string Description { get { return "Running Shoes. Increasing Movement Speed by 70%"; } } + public override string Slot { get { return ClothingSlot.Shoes; } } + public override bool Starter { get { return false ; } } + + private static Dictionary flatStats = new Dictionary() + { + { UserStatType.MovementSpeed, 0.7f }, + }; +public override Dictionary GetFlatStats() { return flatStats; } + } + + + [RequiresSkill(typeof(ClothesmakingSkill), 1)] + public class RunningShoesRecipe : Recipe + { + public RunningShoesRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(ClothesmakingEfficiencySkill), 10, ClothesmakingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(ClothesmakingEfficiencySkill), 5, ClothesmakingEfficiencySkill.MultiplicativeStrategy), + }; + this.CraftMinutes = new ConstantValue(1); + this.Initialize("Running Shoes", typeof(RunningShoesRecipe)); + CraftingComponent.AddRecipe(typeof(TailoringTableObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/Clothing/WorkBackpack.cs b/AutoGen/Clothing/WorkBackpack.cs new file mode 100644 index 0000000..50d542d --- /dev/null +++ b/AutoGen/Clothing/WorkBackpack.cs @@ -0,0 +1,57 @@ +namespace Eco.Mods.TechTree +{ + using System.Collections.Generic; + using System.ComponentModel; + using System.Linq; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Players; + using Eco.Gameplay.Skills; + using Eco.Mods.TechTree; + using Eco.Shared.Items; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + + [Serialized] + [Weight(100)] + public partial class WorkBackpackItem : + ClothingItem + { + + public override string FriendlyName { get { return "Work Backpack"; } } + public override string Description { get { return "Lighter pack that causes lower calorie consumption by -20%. Let's you carry 8KG"; } } + public override string Slot { get { return ClothingSlot.Back; } } + public override bool Starter { get { return false ; } } + + private static Dictionary flatStats = new Dictionary() + { + { UserStatType.MaxCarryWeight, 8000f }, + { UserStatType.CalorieRate, -0.2f }, + }; +public override Dictionary GetFlatStats() { return flatStats; } + } + + + [RequiresSkill(typeof(ClothesmakingSkill), 3)] + public class WorkBackpackRecipe : Recipe + { + public WorkBackpackRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(ClothesmakingEfficiencySkill), 10, ClothesmakingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(ClothesmakingEfficiencySkill), 20, ClothesmakingEfficiencySkill.MultiplicativeStrategy), + }; + this.CraftMinutes = new ConstantValue(1); + this.Initialize("Work Backpack", typeof(WorkBackpackRecipe)); + CraftingComponent.AddRecipe(typeof(TailoringTableObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/Clothing/WorkBoots.cs b/AutoGen/Clothing/WorkBoots.cs new file mode 100644 index 0000000..eda1475 --- /dev/null +++ b/AutoGen/Clothing/WorkBoots.cs @@ -0,0 +1,56 @@ +namespace Eco.Mods.TechTree +{ + using System.Collections.Generic; + using System.ComponentModel; + using System.Linq; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Players; + using Eco.Gameplay.Skills; + using Eco.Mods.TechTree; + using Eco.Shared.Items; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + + [Serialized] + [Weight(100)] + public partial class WorkBootsItem : + ClothingItem + { + + public override string FriendlyName { get { return "Work Boots"; } } + public override string Description { get { return "Sport shoes. Decreasing Calorie Consumption by 15%"; } } + public override string Slot { get { return ClothingSlot.Shoes; } } + public override bool Starter { get { return false ; } } + + private static Dictionary flatStats = new Dictionary() + { + { UserStatType.CalorieRate, -0.15f }, + }; +public override Dictionary GetFlatStats() { return flatStats; } + } + + + [RequiresSkill(typeof(ClothesmakingSkill), 3)] + public class WorkBootsRecipe : Recipe + { + public WorkBootsRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(ClothesmakingEfficiencySkill), 20, ClothesmakingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(ClothesmakingEfficiencySkill), 30, ClothesmakingEfficiencySkill.MultiplicativeStrategy), + }; + this.CraftMinutes = new ConstantValue(1); + this.Initialize("Work Boots", typeof(WorkBootsRecipe)); + CraftingComponent.AddRecipe(typeof(TailoringTableObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/Food/BaconCheeseBurger.cs b/AutoGen/Food/BaconCheeseBurger.cs new file mode 100644 index 0000000..f1f3e90 --- /dev/null +++ b/AutoGen/Food/BaconCheeseBurger.cs @@ -0,0 +1,54 @@ +namespace Eco.Mods.TechTree +{ + using System.Collections.Generic; + using System.Linq; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Players; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Mods.TechTree; + using Eco.Shared.Localization; + using Eco.Shared.Items; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + + [Serialized] + [Weight(10)] + public partial class BaconCheeseBurgerItem : + FoodItem + { + public override string FriendlyName { get { return "Bacon CheeseBurger"; } } + public override string FriendlyNamePlural { get { return "Bacon CheeseBurger"; } } + public override string Description { get { return "We HAVE the skill to make the best burgers, with the best meat and now.. with CHEESE!"; } } + + private static Nutrients nutrition = new Nutrients() { Carbs = 20, Fat = 22, Protein = 20, Vitamins = 16}; + public override float Calories { get { return 2100; } } + public override Nutrients Nutrition { get { return nutrition; } } + } + [RequiresSkill(typeof(MolecularGastronomySkill), 4)] + public partial class BaconCheeseBurgerRecipe : Recipe + { + public BaconCheeseBurgerRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(MolecularGastronomyEfficiencySkill), 20, MolecularGastronomyEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(MolecularGastronomyEfficiencySkill), 10, MolecularGastronomyEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(MolecularGastronomyEfficiencySkill), 20, MolecularGastronomyEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(MolecularGastronomyEfficiencySkill), 10, MolecularGastronomyEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(MolecularGastronomyEfficiencySkill), 5, MolecularGastronomyEfficiencySkill.MultiplicativeStrategy), + }; + this.CraftMinutes = CreateCraftTimeValue(typeof(BaconCheeseBurgerRecipe), Item.Get().UILink(), 10, typeof(MolecularGastronomySpeedSkill)); + this.Initialize("Bacon CheeseBurger", typeof(BaconCheeseBurgerRecipe)); + CraftingComponent.AddRecipe(typeof(KitchenObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/Food/BakedSalmon.cs b/AutoGen/Food/BakedSalmon.cs new file mode 100644 index 0000000..5506af2 --- /dev/null +++ b/AutoGen/Food/BakedSalmon.cs @@ -0,0 +1,53 @@ +namespace Eco.Mods.TechTree +{ + using System.Collections.Generic; + using System.Linq; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Players; + using Eco.Gameplay.Skills; + using Eco.Shared.Localization; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Mods.TechTree; + using Eco.Shared.Items; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + + [Serialized] + [Weight(500)] + public partial class BakedSalmonItem : + FoodItem + { + public override string FriendlyName { get { return "Baked Salmon"; } } + public override string FriendlyNamePlural { get { return "Baked Salmon"; } } + public override string Description { get { return "You ARE cooking this with Salmon....Right?"; } } + + private static Nutrients nutrition = new Nutrients() { Carbs = 8, Fat = 12, Protein = 18, Vitamins = 8}; + public override float Calories { get { return 1200; } } + public override Nutrients Nutrition { get { return nutrition; } } + } + + [RequiresSkill(typeof(LeavenedBakingSkill), 4)] + public partial class BakedSalmonRecipe : Recipe + { + public BakedSalmonRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(LeavenedBakingEfficiencySkill), 10, LeavenedBakingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(LeavenedBakingEfficiencySkill), 5, LeavenedBakingEfficiencySkill.MultiplicativeStrategy), + + }; + this.CraftMinutes = CreateCraftTimeValue(typeof(BakedSalmonRecipe), Item.Get().UILink(), 3, typeof(LeavenedBakingSpeedSkill)); + this.Initialize("Baked Salmon", typeof(BakedSalmonRecipe)); + CraftingComponent.AddRecipe(typeof(BakeryOvenObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/Food/BurritoSupreme.cs b/AutoGen/Food/BurritoSupreme.cs new file mode 100644 index 0000000..4c04779 --- /dev/null +++ b/AutoGen/Food/BurritoSupreme.cs @@ -0,0 +1,53 @@ +namespace Eco.Mods.TechTree +{ + using System.Collections.Generic; + using System.Linq; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Players; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Mods.TechTree; + using Eco.Shared.Items; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + using Eco.Shared.Localization; + [Serialized] + [Weight(10)] + public partial class BurritoSupremeItem : + FoodItem + { + public override string FriendlyName { get { return "Burrito Supreme"; } } + public override string FriendlyNamePlural { get { return "Burrito Supreme"; } } + public override string Description { get { return "Tacos may make you run to the Latrine, but this won't, I hope..."; } } + + private static Nutrients nutrition = new Nutrients() { Carbs = 17, Fat = 28, Protein = 26, Vitamins = 18}; + public override float Calories { get { return 2000; } } + public override Nutrients Nutrition { get { return nutrition; } } + } + [RequiresSkill(typeof(MolecularGastronomySkill), 4)] + public partial class BurritoSupremeRecipe : Recipe + { + public BurritoSupremeRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(MolecularGastronomyEfficiencySkill), 20, MolecularGastronomyEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(MolecularGastronomyEfficiencySkill), 10, MolecularGastronomyEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(MolecularGastronomyEfficiencySkill), 5, MolecularGastronomyEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(MolecularGastronomyEfficiencySkill), 20, MolecularGastronomyEfficiencySkill.MultiplicativeStrategy), + + }; + this.CraftMinutes = CreateCraftTimeValue(typeof(BurritoSupremeRecipe), Item.Get().UILink(), 10, typeof(MolecularGastronomySpeedSkill)); + this.Initialize("Burrito Supreme", typeof(BurritoSupremeRecipe)); + CraftingComponent.AddRecipe(typeof(KitchenObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/Food/Cake.cs b/AutoGen/Food/Cake.cs new file mode 100644 index 0000000..702a893 --- /dev/null +++ b/AutoGen/Food/Cake.cs @@ -0,0 +1,54 @@ +namespace Eco.Mods.TechTree +{ + using System.Collections.Generic; + using System.Linq; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Players; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Mods.TechTree; + using Eco.Shared.Items; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + using Eco.Shared.Localization; + + [Serialized] + [Weight(10)] + public partial class CakeItem : + FoodItem + { + public override string FriendlyName { get { return "Cake"; } } + public override string FriendlyNamePlural { get { return "Cake"; } } + public override string Description { get { return "After all this time, it is STILL a lie."; } } + + private static Nutrients nutrition = new Nutrients() { Carbs = 19, Fat = 25, Protein = 15, Vitamins = 20}; + public override float Calories { get { return 1800; } } + public override Nutrients Nutrition { get { return nutrition; } } + } + [RequiresSkill(typeof(MolecularGastronomySkill), 3)] + public partial class CakeRecipe : Recipe + { + public CakeRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(MolecularGastronomyEfficiencySkill), 20, MolecularGastronomyEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(MolecularGastronomyEfficiencySkill), 30, MolecularGastronomyEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(MolecularGastronomyEfficiencySkill), 20, MolecularGastronomyEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(MolecularGastronomyEfficiencySkill), 10, MolecularGastronomyEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(MolecularGastronomyEfficiencySkill), 10, MolecularGastronomyEfficiencySkill.MultiplicativeStrategy), + }; + this.CraftMinutes = CreateCraftTimeValue(typeof(CakeRecipe), Item.Get().UILink(), 30, typeof(MolecularGastronomySpeedSkill)); + this.Initialize("Cake", typeof(CakeRecipe)); + CraftingComponent.AddRecipe(typeof(KitchenObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/Food/ElkTaco.cs b/AutoGen/Food/ElkTaco.cs new file mode 100644 index 0000000..eedb1a5 --- /dev/null +++ b/AutoGen/Food/ElkTaco.cs @@ -0,0 +1,52 @@ +namespace Eco.Mods.TechTree +{ + using System.Collections.Generic; + using System.Linq; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Players; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Mods.TechTree; + using Eco.Shared.Items; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + + [Serialized] + [Weight(200)] + public partial class ElkTacoItem : + FoodItem + { + public override string FriendlyName { get { return "Elk Cookie Taco"; } } + public override string Description { get { return "A tasty treat made from cookies, corn tortillas and meat.\n\nPart of STC custom ECO tweaks by Atoru"; } } + + private static Nutrients nutrition = new Nutrients() { Carbs = 12, Fat = 7, Protein = 8, Vitamins = 13}; + public override float Calories { get { return 650; } } + public override Nutrients Nutrition { get { return nutrition; } } + } + + [RequiresSkill(typeof(CulinaryArtsSkill), 3)] + public partial class ElkTacoRecipe : Recipe + { + public ElkTacoRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(CulinaryArtsEfficiencySkill), 30, CulinaryArtsEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(CulinaryArtsEfficiencySkill), 5, CulinaryArtsEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(CulinaryArtsEfficiencySkill), 5, CulinaryArtsEfficiencySkill.MultiplicativeStrategy), + }; + this.CraftMinutes = CreateCraftTimeValue(typeof(ElkTacoRecipe), Item.Get().UILink(), 15, typeof(CulinaryArtsSpeedSkill)); + this.Initialize("Elk Cookie Taco", typeof(ElkTacoRecipe)); + CraftingComponent.AddRecipe(typeof(StoveObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/Food/FishFillet.cs b/AutoGen/Food/FishFillet.cs new file mode 100644 index 0000000..841cf19 --- /dev/null +++ b/AutoGen/Food/FishFillet.cs @@ -0,0 +1,51 @@ +namespace Eco.Mods.TechTree +{ + using System.Collections.Generic; + using System.Linq; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Players; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Mods.TechTree; + using Eco.Shared.Items; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + using Eco.Shared.Localization; + + [Serialized] + [Weight(500)] + public partial class FishFilletItem : + FoodItem + { + public override string FriendlyName { get { return "FishFillet"; } } + public override string Description { get { return "Carefully butchered fish, ready to cook."; } } + + private static Nutrients nutrition = new Nutrients() { Carbs = 0, Fat = 6, Protein = 4, Vitamins = 0}; + public override float Calories { get { return 600; } } + public override Nutrients Nutrition { get { return nutrition; } } + } + + [RequiresSkill(typeof(MeatPrepSkill), 3)] + public partial class FishFilletRecipe : Recipe + { + public FishFilletRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + + + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(MeatPrepEfficiencySkill), 20, MeatPrepEfficiencySkill.MultiplicativeStrategy), + }; + this.CraftMinutes = CreateCraftTimeValue(typeof(FishFilletRecipe), Item.Get().UILink(), 2, typeof(MeatPrepSpeedSkill)); + this.Initialize("Fish Fillet", typeof(FishFilletRecipe)); + CraftingComponent.AddRecipe(typeof(ButcheryTableObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/Food/FishHeadSoup.cs b/AutoGen/Food/FishHeadSoup.cs new file mode 100644 index 0000000..06b4f94 --- /dev/null +++ b/AutoGen/Food/FishHeadSoup.cs @@ -0,0 +1,52 @@ +namespace Eco.Mods.TechTree +{ + using System.Collections.Generic; + using System.Linq; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Players; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Mods.TechTree; + using Eco.Shared.Items; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + using Eco.Shared.Localization; + + [Serialized] + [Weight(500)] + public partial class FishHeadSoupItem : + FoodItem + { + public override string FriendlyName { get { return "Fish Head Soup"; } } + public override string FriendlyNamePlural { get { return "Fish Head Soup"; } } + public override string Description { get { return "Fish heads, fish heads, rolly polly fish heads!"; } } + + private static Nutrients nutrition = new Nutrients() { Carbs = 3, Fat = 3, Protein = 12, Vitamins = 6}; + public override float Calories { get { return 800; } } + public override Nutrients Nutrition { get { return nutrition; } } + } + + [RequiresSkill(typeof(HomeCookingSkill), 3)] + public partial class FishHeadSoupRecipe : Recipe + { + public FishHeadSoupRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(HomeCookingEfficiencySkill), 5, HomeCookingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(HomeCookingEfficiencySkill), 5, HomeCookingEfficiencySkill.MultiplicativeStrategy), + }; + this.CraftMinutes = CreateCraftTimeValue(typeof(FishHeadSoupRecipe), Item.Get().UILink(), 3, typeof(HomeCookingSpeedSkill)); + this.Initialize("Fish Head Soup", typeof(FishHeadSoupRecipe)); + CraftingComponent.AddRecipe(typeof(CastIronStoveObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/Food/FishTaco.cs b/AutoGen/Food/FishTaco.cs new file mode 100644 index 0000000..4aa8790 --- /dev/null +++ b/AutoGen/Food/FishTaco.cs @@ -0,0 +1,52 @@ +namespace Eco.Mods.TechTree +{ + using System.Collections.Generic; + using System.Linq; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Players; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Mods.TechTree; + using Eco.Shared.Items; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + + [Serialized] + [Weight(200)] + public partial class FishTacoItem : + FoodItem + { + public override string FriendlyName { get { return "Fish Cookie Taco"; } } + public override string Description { get { return "A tasty treat made from cookies, corn tortillas and fish.\n\nPart of STC custom ECO tweaks by Atoru"; } } + + private static Nutrients nutrition = new Nutrients() { Carbs = 13, Fat = 3, Protein = 10, Vitamins = 14 }; + public override float Calories { get { return 650; } } + public override Nutrients Nutrition { get { return nutrition; } } + } + + [RequiresSkill(typeof(CulinaryArtsSkill), 4)] + public partial class FishTacoRecipe : Recipe + { + public FishTacoRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(CulinaryArtsEfficiencySkill), 30, CulinaryArtsEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(CulinaryArtsEfficiencySkill), 5, CulinaryArtsEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(CulinaryArtsEfficiencySkill), 5, CulinaryArtsEfficiencySkill.MultiplicativeStrategy), + }; + this.CraftMinutes = CreateCraftTimeValue(typeof(FishTacoRecipe), Item.Get().UILink(), 15, typeof(CulinaryArtsSpeedSkill)); + this.Initialize("Fish Cookie Taco", typeof(FishTacoRecipe)); + CraftingComponent.AddRecipe(typeof(StoveObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/Food/Fishsticks.cs b/AutoGen/Food/Fishsticks.cs new file mode 100644 index 0000000..a967cde --- /dev/null +++ b/AutoGen/Food/Fishsticks.cs @@ -0,0 +1,52 @@ +namespace Eco.Mods.TechTree +{ + using System.Collections.Generic; + using System.Linq; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Players; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Mods.TechTree; + using Eco.Shared.Items; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + using Eco.Shared.Localization; + + [Serialized] + [Weight(500)] + public partial class FishsticksItem : + FoodItem + { + public override string FriendlyName { get { return "Fishsticks"; } } + public override string FriendlyNamePlural { get { return "Fishsticks"; } } + public override string Description { get { return "Kanye West still does not understand this."; } } + + private static Nutrients nutrition = new Nutrients() { Carbs = 10, Fat = 6, Protein = 10, Vitamins = 3}; + public override float Calories { get { return 1000; } } + public override Nutrients Nutrition { get { return nutrition; } } + } + + [RequiresSkill(typeof(BasicBakingSkill), 2)] + public partial class FishsticksRecipe : Recipe + { + public FishsticksRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(BasicBakingEfficiencySkill), 5, BasicBakingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(BasicBakingEfficiencySkill), 20, BasicBakingEfficiencySkill.MultiplicativeStrategy), + }; + this.CraftMinutes = CreateCraftTimeValue(typeof(FishsticksRecipe), Item.Get().UILink(), 3, typeof(BasicBakingSpeedSkill)); + this.Initialize("Fishsticks", typeof(FishsticksRecipe)); + CraftingComponent.AddRecipe(typeof(BakeryOvenObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/Food/GrillSalmon.cs b/AutoGen/Food/GrillSalmon.cs new file mode 100644 index 0000000..7b95a88 --- /dev/null +++ b/AutoGen/Food/GrillSalmon.cs @@ -0,0 +1,53 @@ +namespace Eco.Mods.TechTree +{ + using System.Collections.Generic; + using System.Linq; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Players; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Mods.TechTree; + using Eco.Shared.Items; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + using Eco.Shared.Localization; + + [Serialized] + [Weight(500)] + public partial class GrillSalmonItem : + FoodItem + { + public override string FriendlyName { get { return "Grilled Salmon"; } } + public override string FriendlyNamePlural { get { return "Grill Salmon"; } } + public override string Description { get { return "You ARE cooking this with Salmon....Right, Pam?"; } } + + private static Nutrients nutrition = new Nutrients() { Carbs = 12, Fat = 3, Protein = 4, Vitamins = 8}; + public override float Calories { get { return 1100; } } + public override Nutrients Nutrition { get { return nutrition; } } + } + + [RequiresSkill(typeof(CampfireCreationsSkill), 4)] + public partial class GrillSalmonRecipe : Recipe + { + public GrillSalmonRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(CampfireCreationsEfficiencySkill), 10, CampfireCreationsEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(CampfireCreationsEfficiencySkill), 5, CampfireCreationsEfficiencySkill.MultiplicativeStrategy), + + }; + this.CraftMinutes = CreateCraftTimeValue(typeof(GrillSalmonRecipe), Item.Get().UILink(), 3, typeof(CampfireCreationsSpeedSkill)); + this.Initialize("Grill Salmon", typeof(GrillSalmonRecipe)); + CraftingComponent.AddRecipe(typeof(CampfireObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/Food/Milk.cs b/AutoGen/Food/Milk.cs new file mode 100644 index 0000000..a80f64e --- /dev/null +++ b/AutoGen/Food/Milk.cs @@ -0,0 +1,51 @@ +namespace Eco.Mods.TechTree +{ + using System.Collections.Generic; + using System.Linq; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Players; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Mods.TechTree; + using Eco.Shared.Items; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + using Eco.Shared.Localization; + + [Serialized] + [Weight(10)] + public partial class MilkItem : + FoodItem + { + public override string FriendlyName { get { return "Milk"; } } + public override string FriendlyNamePlural { get { return "Milk"; } } + public override string Description { get { return "Milk, although maybe not from an animal."; } } + + private static Nutrients nutrition = new Nutrients() { Carbs = 3, Fat = 7, Protein = 10, Vitamins = 0}; + public override float Calories { get { return 120; } } + public override Nutrients Nutrition { get { return nutrition; } } + } + [RequiresSkill(typeof(MolecularGastronomySkill), 2)] + public partial class MilkRecipe : Recipe + { + public MilkRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(MolecularGastronomyEfficiencySkill), 24, MolecularGastronomyEfficiencySkill.MultiplicativeStrategy), + + }; + this.CraftMinutes = CreateCraftTimeValue(typeof(MilkRecipe), Item.Get().UILink(), 10, typeof(MolecularGastronomySpeedSkill)); + this.Initialize("Soy Milk", typeof(MilkRecipe)); + CraftingComponent.AddRecipe(typeof(KitchenObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/Food/ModTest.cs b/AutoGen/Food/ModTest.cs new file mode 100644 index 0000000..e2dbb42 --- /dev/null +++ b/AutoGen/Food/ModTest.cs @@ -0,0 +1,55 @@ +namespace Eco.Mods.TechTree +{ + using System.Collections.Generic; + using System.Linq; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Players; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Mods.TechTree; + using Eco.Shared.Items; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + + [Serialized] + [Weight(5)] + public partial class ModTestItem : + FoodItem + { + public override string FriendlyName { get { return "ModTest"; } } //Name des Produkts + public override string Description { get { return "Ich teste neue Nahrungsoptionen"; } } //Beschreibung des Produkts + + private static Nutrients nutrition = new Nutrients() { Carbs = 25, Fat = 25, Protein = 25, Vitamins = 25}; //Selbsterklärend + public override float Calories { get { return 500; } } //Siehe eine Zeile weiter oben + public override Nutrients Nutrition { get { return nutrition; } } + } + + //[RequiresSkill(typeof(CulinaryArtsSkill), 2)] <- Skill muss gelernt sein zum herstellen + //Recipe muss Umbenannt werden + public partial class ModTestRecipe : Recipe + { + public ModTestRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), //Item das dabei rauskommt brauch einen Namen (auch bei Item.get weiter unten) + + }; + this.Ingredients = new CraftingElement[] + { + // Material das gebraucht wird + Effizienz eines Skills + Anzahl + Anweisung für die Effizienz Berechnung + // new CraftingElement(typeof(MolecularGastronomyEfficiencySkill), 20, MolecularGastronomyEfficiencySkill.MultiplicativeStrategy), + }; + //default crafting speed 5 + var craftingspeed = 5.0f; + this.CraftMinutes = CreateCraftTimeValue(typeof(ModTestRecipe), Item.Get().UILink(), craftingspeed, typeof(CulinaryArtsSpeedSkill)); + //Initialize & Serialized muss umbenannt werden + this.Initialize("ModTest", typeof(ModTestRecipe)); + //CraftingComponent.AddRecipe(typeof(KitchenObject), this); Wo das Objekt/Item hergestellt werden soll + } + } +} \ No newline at end of file diff --git a/AutoGen/Food/Oil.cs b/AutoGen/Food/Oil.cs new file mode 100644 index 0000000..2298eae --- /dev/null +++ b/AutoGen/Food/Oil.cs @@ -0,0 +1,162 @@ +namespace Eco.Mods.TechTree +{ + using System.Collections.Generic; + using System.Linq; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Players; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Mods.TechTree; + using Eco.Shared.Items; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + using Eco.Shared.Localization; + + [Serialized] + [Weight(100)] + [Fuel(4000)] + public partial class OilItem : + FoodItem + { + public override string FriendlyName { get { return "Oil"; } } + public override string FriendlyNamePlural { get { return "Oil"; } } + public override string Description { get { return "A plant fat extracted for use in cooking."; } } + + private static Nutrients nutrition = new Nutrients() { Carbs = 0, Fat = 15, Protein = 0, Vitamins = 0}; + public override float Calories { get { return 120; } } + public override Nutrients Nutrition { get { return nutrition; } } + } + + [RequiresSkill(typeof(MillProcessingSkill), 2)] + + public partial class OilRecipe : Recipe + { + public OilRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(MillProcessingEfficiencySkill), 30, MillProcessingEfficiencySkill.MultiplicativeStrategy), + }; + this.CraftMinutes = CreateCraftTimeValue(typeof(OilRecipe), Item.Get().UILink(), 5, typeof(MillProcessingSpeedSkill)); + this.Initialize("Oil", typeof(OilRecipe)); + CraftingComponent.AddRecipe(typeof(MillObject), this); + } + } + public partial class OilRecipe2 : Recipe + { + public OilRecipe2() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(MillProcessingEfficiencySkill), 40, MillProcessingEfficiencySkill.MultiplicativeStrategy), + }; + this.CraftMinutes = CreateCraftTimeValue(typeof(OilRecipe2), Item.Get().UILink(), 5, typeof(MillProcessingSpeedSkill)); + this.Initialize("Oil from Huckberry Seeds", typeof(OilRecipe2)); + CraftingComponent.AddRecipe(typeof(MillObject), this); + } + } + public partial class OilRecipe3 : Recipe + { + public OilRecipe3() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(MillProcessingEfficiencySkill), 40, MillProcessingEfficiencySkill.MultiplicativeStrategy), + }; + this.CraftMinutes = CreateCraftTimeValue(typeof(OilRecipe3), Item.Get().UILink(), 5, typeof(MillProcessingSpeedSkill)); + this.Initialize("Oil from Wheat Seeds", typeof(OilRecipe3)); + CraftingComponent.AddRecipe(typeof(MillObject), this); + } + } + public partial class OilRecipe4 : Recipe + { + public OilRecipe4() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(MillProcessingEfficiencySkill), 40, MillProcessingEfficiencySkill.MultiplicativeStrategy), + }; + this.CraftMinutes = CreateCraftTimeValue(typeof(OilRecipe4), Item.Get().UILink(), 5, typeof(MillProcessingSpeedSkill)); + this.Initialize("Oil from Corn Seeds", typeof(OilRecipe4)); + CraftingComponent.AddRecipe(typeof(MillObject), this); + } + } + public partial class OilRecipe5 : Recipe + { + public OilRecipe5() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(MillProcessingEfficiencySkill), 40, MillProcessingEfficiencySkill.MultiplicativeStrategy), + }; + this.CraftMinutes = CreateCraftTimeValue(typeof(OilRecipe5), Item.Get().UILink(), 5, typeof(MillProcessingSpeedSkill)); + this.Initialize("Oil from Beet Seeds", typeof(OilRecipe5)); + CraftingComponent.AddRecipe(typeof(MillObject), this); + } + } + public partial class OilRecipe6 : Recipe + { + public OilRecipe6() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(MillProcessingEfficiencySkill), 40, MillProcessingEfficiencySkill.MultiplicativeStrategy), + }; + this.CraftMinutes = CreateCraftTimeValue(typeof(OilRecipe6), Item.Get().UILink(), 5, typeof(MillProcessingSpeedSkill)); + this.Initialize("Oil from Tomato Seeds", typeof(OilRecipe6)); + CraftingComponent.AddRecipe(typeof(MillObject), this); + } + } + + public partial class OilRecipe7 : Recipe + { + public OilRecipe7() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(MillProcessingEfficiencySkill), 40, MillProcessingEfficiencySkill.MultiplicativeStrategy), + }; + this.CraftMinutes = CreateCraftTimeValue(typeof(OilRecipe7), Item.Get().UILink(), 5, typeof(MillProcessingSpeedSkill)); + this.Initialize("Oil from Prickly Pear Seed", typeof(OilRecipe7)); + CraftingComponent.AddRecipe(typeof(MillObject), this); + } + } +} diff --git a/AutoGen/Food/RicePilaf.cs b/AutoGen/Food/RicePilaf.cs new file mode 100644 index 0000000..303fbf8 --- /dev/null +++ b/AutoGen/Food/RicePilaf.cs @@ -0,0 +1,52 @@ +namespace Eco.Mods.TechTree +{ + using System.Collections.Generic; + using System.Linq; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Players; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Mods.TechTree; + using Eco.Shared.Items; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + using Eco.Shared.Localization; + + [Serialized] + [Weight(10)] + public partial class RicePilafItem : + FoodItem + { + public override string FriendlyName { get { return "Rice Pilaf"; } } + public override string FriendlyNamePlural { get { return "Rice Pilaf"; } } + public override string Description { get { return "Pilaf is a dish in which rice is cooked in a seasoned broth."; } } + + private static Nutrients nutrition = new Nutrients() { Carbs = 17, Fat = 13, Protein = 20, Vitamins = 10}; + public override float Calories { get { return 650; } } + public override Nutrients Nutrition { get { return nutrition; } } + } + [RequiresSkill(typeof(MolecularGastronomySkill), 2)] + public partial class RicePilafRecipe : Recipe + { + public RicePilafRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(MolecularGastronomyEfficiencySkill), 30, MolecularGastronomyEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(MolecularGastronomyEfficiencySkill), 20, MolecularGastronomyEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(MolecularGastronomyEfficiencySkill), 20, MolecularGastronomyEfficiencySkill.MultiplicativeStrategy), + }; + this.CraftMinutes = CreateCraftTimeValue(typeof(RicePilafRecipe), Item.Get().UILink(), 10, typeof(MolecularGastronomySpeedSkill)); + this.Initialize("Rice Pilaf", typeof(RicePilafRecipe)); + CraftingComponent.AddRecipe(typeof(KitchenObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/Food/RicePudding.cs b/AutoGen/Food/RicePudding.cs new file mode 100644 index 0000000..5f40dc4 --- /dev/null +++ b/AutoGen/Food/RicePudding.cs @@ -0,0 +1,51 @@ +namespace Eco.Mods.TechTree +{ + using System.Collections.Generic; + using System.Linq; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Players; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Mods.TechTree; + using Eco.Shared.Items; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + using Eco.Shared.Localization; + [Serialized] + [Weight(10)] + public partial class RicePuddingItem : + FoodItem + { + public override string FriendlyName { get { return "Rice Pudding"; } } + public override string FriendlyNamePlural { get { return "Rice Pudding"; } } + public override string Description { get { return "Using Rice and Milk, you made Rice Pudding, not some kid's cereal."; } } + + private static Nutrients nutrition = new Nutrients() { Carbs = 21, Fat = 10, Protein = 17, Vitamins = 10}; + public override float Calories { get { return 500; } } + public override Nutrients Nutrition { get { return nutrition; } } + } + [RequiresSkill(typeof(MolecularGastronomySkill), 1)] + public partial class RicePuddingRecipe : Recipe + { + public RicePuddingRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(MolecularGastronomyEfficiencySkill), 20, MolecularGastronomyEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(MolecularGastronomyEfficiencySkill), 10, MolecularGastronomyEfficiencySkill.MultiplicativeStrategy), + + }; + this.CraftMinutes = CreateCraftTimeValue(typeof(RicePuddingRecipe), Item.Get().UILink(), 5, typeof(MolecularGastronomySpeedSkill)); + this.Initialize("Rice Pudding", typeof(RicePuddingRecipe)); + CraftingComponent.AddRecipe(typeof(KitchenObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/Food/SpicyClamChowder.cs b/AutoGen/Food/SpicyClamChowder.cs new file mode 100644 index 0000000..6cbb983 --- /dev/null +++ b/AutoGen/Food/SpicyClamChowder.cs @@ -0,0 +1,52 @@ +namespace Eco.Mods.TechTree +{ + using System.Collections.Generic; + using System.Linq; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Players; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Mods.TechTree; + using Eco.Shared.Items; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + using Eco.Shared.Localization; + [Serialized] + [Weight(600)] + public partial class SpicyClamChowderItem : + FoodItem + { + public override string FriendlyName { get { return "Spicy Clam Chowder"; } } + public override string Description { get { return "Spicy!!(also Clam and Chowder)"; } } + + private static Nutrients nutrition = new Nutrients() { Carbs = 10, Fat = 14, Protein = 15, Vitamins = 18 }; + public override float Calories { get { return 1500; } } + public override Nutrients Nutrition { get { return nutrition; } } + } + + [RequiresSkill(typeof(CulinaryArtsSkill), 4)] + public partial class SpicyClamChowderRecipe : Recipe + { + public SpicyClamChowderRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(CulinaryArtsEfficiencySkill), 20, CulinaryArtsEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(CulinaryArtsEfficiencySkill), 10, CulinaryArtsEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(CulinaryArtsEfficiencySkill), 5, CulinaryArtsEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(CulinaryArtsEfficiencySkill), 10, CulinaryArtsEfficiencySkill.MultiplicativeStrategy), + }; + this.CraftMinutes = CreateCraftTimeValue(typeof(SpicyClamChowderRecipe), Item.Get().UILink(), 10, typeof(CulinaryArtsSpeedSkill)); + this.Initialize("Spicy Clam Chowder", typeof(SpicyClamChowderRecipe)); + CraftingComponent.AddRecipe(typeof(KitchenObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/Food/Tallow.cs b/AutoGen/Food/Tallow.cs new file mode 100644 index 0000000..640fd9b --- /dev/null +++ b/AutoGen/Food/Tallow.cs @@ -0,0 +1,33 @@ +namespace Eco.Mods.TechTree +{ + using System.Collections.Generic; + using System.Linq; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Players; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Mods.TechTree; + using Eco.Shared.Items; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + + [Serialized] + [Weight(20)] + [Fuel(10000)] + public partial class TallowItem : + FoodItem + { + public override string FriendlyName { get { return "Tallow"; } } + public override string FriendlyNamePlural { get { return "Tallow"; } } + public override string Description { get { return "Rendered animal fat useful for more than just cooking."; } } + + private static Nutrients nutrition = new Nutrients() { Carbs = 0, Fat = 20, Protein = 0, Vitamins = 0}; + public override float Calories { get { return 200; } } + public override Nutrients Nutrition { get { return nutrition; } } + } + +} \ No newline at end of file diff --git a/AutoGen/Food/Tortilla.cs b/AutoGen/Food/Tortilla.cs new file mode 100644 index 0000000..f753a56 --- /dev/null +++ b/AutoGen/Food/Tortilla.cs @@ -0,0 +1,57 @@ +namespace Eco.Mods.TechTree +{ + using System.Collections.Generic; + using System.Linq; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Players; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Mods.TechTree; + using Eco.Shared.Items; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + + [Serialized] + [Weight(100)] + public partial class TortillaItem : + FoodItem + { + public override string FriendlyName { get { return "Cookie"; } } + public override string Description { get { return "Just the perfect food to start a day!\n\nPart of STC custom ECO tweaks by Atoru"; } } + + private static Nutrients nutrition = new Nutrients() { Carbs = 25, Fat = 1, Protein = 25, Vitamins = 35}; + public override float Calories { get { return 666; } } + public override Nutrients Nutrition { get { return nutrition; } } + } + + [RequiresSkill(typeof(CulinaryArtsSkill), 2)] + public partial class TortillaRecipe : Recipe + { + public TortillaRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(CulinaryArtsEfficiencySkill), 3, CulinaryArtsEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(CulinaryArtsEfficiencySkill), 2, CulinaryArtsEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(MolecularGastronomyEfficiencySkill), 1, MolecularGastronomyEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(MolecularGastronomyEfficiencySkill), 1, MolecularGastronomyEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(MolecularGastronomyEfficiencySkill), 1, MolecularGastronomyEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(MolecularGastronomyEfficiencySkill), 2, MolecularGastronomyEfficiencySkill.MultiplicativeStrategy), + }; + //default crafting speed 5 + var craftingspeed = 2.5f; + this.CraftMinutes = CreateCraftTimeValue(typeof(TortillaRecipe), Item.Get().UILink(), craftingspeed, typeof(CulinaryArtsSpeedSkill)); + this.Initialize("Cookie", typeof(TortillaRecipe)); + CraftingComponent.AddRecipe(typeof(KitchenObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/Food/TunaCasserole.cs b/AutoGen/Food/TunaCasserole.cs new file mode 100644 index 0000000..a0c0fd3 --- /dev/null +++ b/AutoGen/Food/TunaCasserole.cs @@ -0,0 +1,52 @@ +namespace Eco.Mods.TechTree +{ + using System.Collections.Generic; + using System.Linq; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Players; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Mods.TechTree; + using Eco.Shared.Items; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + using Eco.Shared.Localization; + [Serialized] + [Weight(500)] + public partial class TunaCasseroleItem : + FoodItem + { + public override string FriendlyName { get { return "Tuna Casserole"; } } + public override string FriendlyNamePlural { get { return "Tuna Casserole"; } } + public override string Description { get { return "A fishy smelling casserole."; } } + + private static Nutrients nutrition = new Nutrients() { Carbs = 15, Fat = 10, Protein = 10, Vitamins = 1}; + public override float Calories { get { return 1250; } } + public override Nutrients Nutrition { get { return nutrition; } } + } + + [RequiresSkill(typeof(CulinaryArtsSkill), 3)] + public partial class TunaCasseroleRecipe : Recipe + { + public TunaCasseroleRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(CulinaryArtsEfficiencySkill), 5, CulinaryArtsEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(CulinaryArtsEfficiencySkill), 20, CulinaryArtsEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(CulinaryArtsEfficiencySkill), 20, CulinaryArtsEfficiencySkill.MultiplicativeStrategy), + }; + this.CraftMinutes = CreateCraftTimeValue(typeof(TunaCasseroleRecipe), Item.Get().UILink(), 3, typeof(CulinaryArtsSpeedSkill)); + this.Initialize("Tuna Casserole", typeof(TunaCasseroleRecipe)); + CraftingComponent.AddRecipe(typeof(StoveObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/Food/TunaSalad.cs b/AutoGen/Food/TunaSalad.cs new file mode 100644 index 0000000..9f558aa --- /dev/null +++ b/AutoGen/Food/TunaSalad.cs @@ -0,0 +1,52 @@ +namespace Eco.Mods.TechTree +{ + using System.Collections.Generic; + using System.Linq; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Players; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Mods.TechTree; + using Eco.Shared.Items; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + using Eco.Shared.Localization; + + [Serialized] + [Weight(500)] + public partial class TunaSaladItem : + FoodItem + { + public override string FriendlyName { get { return "Tuna Salad"; } } + public override string FriendlyNamePlural { get { return "Tuna Salad"; } } + public override string Description { get { return "Don't be a Tuna head, eat more green!"; } } + + private static Nutrients nutrition = new Nutrients() { Carbs = 3, Fat = 3, Protein = 8, Vitamins = 8 }; + public override float Calories { get { return 600; } } + public override Nutrients Nutrition { get { return nutrition; } } + } + + [RequiresSkill(typeof(HomeCookingSkill), 4)] + public partial class TunaSaladRecipe : Recipe + { + public TunaSaladRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(HomeCookingEfficiencySkill), 10, HomeCookingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(HomeCookingEfficiencySkill), 5, HomeCookingEfficiencySkill.MultiplicativeStrategy), + }; + this.CraftMinutes = CreateCraftTimeValue(typeof(TunaSaladRecipe), Item.Get().UILink(), 3, typeof(HomeCookingSpeedSkill)); + this.Initialize("Tuna Salad", typeof(TunaSaladRecipe)); + CraftingComponent.AddRecipe(typeof(CastIronStoveObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/Food/TunafishSandwich.cs b/AutoGen/Food/TunafishSandwich.cs new file mode 100644 index 0000000..6cd490e --- /dev/null +++ b/AutoGen/Food/TunafishSandwich.cs @@ -0,0 +1,53 @@ +namespace Eco.Mods.TechTree +{ + using System.Collections.Generic; + using System.Linq; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Players; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Mods.TechTree; + using Eco.Shared.Items; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + using Eco.Shared.Localization; + + [Serialized] + [Weight(600)] + public partial class TunafishSandwichItem : + FoodItem + { + public override string FriendlyName { get { return "Tunafish Sandwich"; } } + public override string Description { get { return "Sure beats Hucklebutter and Jelly Sandwiches!"; } } + + private static Nutrients nutrition = new Nutrients() { Carbs = 10, Fat = 14, Protein = 20, Vitamins = 21 }; + public override float Calories { get { return 1200; } } + public override Nutrients Nutrition { get { return nutrition; } } + } + + [RequiresSkill(typeof(CulinaryArtsSkill), 1)] + public partial class TunafishSandwichRecipe : Recipe + { + public TunafishSandwichRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(CulinaryArtsEfficiencySkill), 5, CulinaryArtsEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(CulinaryArtsEfficiencySkill), 5, CulinaryArtsEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(CulinaryArtsEfficiencySkill), 5, CulinaryArtsEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(CulinaryArtsEfficiencySkill), 10, CulinaryArtsEfficiencySkill.MultiplicativeStrategy), + }; + this.CraftMinutes = CreateCraftTimeValue(typeof(TunafishSandwichRecipe), Item.Get().UILink(), 10, typeof(CulinaryArtsSpeedSkill)); + this.Initialize("Tunafish Sandwich", typeof(TunafishSandwichRecipe)); + CraftingComponent.AddRecipe(typeof(KitchenObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/Item/AsphaltRamp.cs b/AutoGen/Item/AsphaltRamp.cs new file mode 100644 index 0000000..be18fa8 --- /dev/null +++ b/AutoGen/Item/AsphaltRamp.cs @@ -0,0 +1,51 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.World; + using Eco.World.Blocks; + using Eco.Gameplay.Pipes; + + [RequiresSkill(typeof(RoadConstructionSkill), 3)] + public partial class AsphaltRampRecipe : Recipe + { + public AsphaltRampRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(RoadConstructionEfficiencySkill), 3, RoadConstructionEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(RoadConstructionEfficiencySkill), 3, RoadConstructionEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(RoadConstructionEfficiencySkill), 3, RoadConstructionEfficiencySkill.MultiplicativeStrategy), + }; + this.CraftMinutes = CreateCraftTimeValue(typeof(AsphaltRampRecipe), Item.Get().UILink(), 5, typeof(RoadConstructionSkill)); + this.Initialize("Asphalt Ramp", typeof(AsphaltRampRecipe)); + + CraftingComponent.AddRecipe(typeof(WainwrightTableObject), this); + } + } + + [Serialized] + [Constructed] + [Road(1)] + [RequiresSkill(typeof(RoadConstructionEfficiencySkill), 3)] + public partial class AsphaltRampBlock : + Block + { } + +} \ No newline at end of file diff --git a/AutoGen/Item/AsphaltRampUpgrade.cs b/AutoGen/Item/AsphaltRampUpgrade.cs new file mode 100644 index 0000000..13a4709 --- /dev/null +++ b/AutoGen/Item/AsphaltRampUpgrade.cs @@ -0,0 +1,51 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.World; + using Eco.World.Blocks; + using Eco.Gameplay.Pipes; + + [RequiresSkill(typeof(RoadConstructionSkill), 3)] + public partial class AsphaltRampUpgradeRecipe : Recipe + { + public AsphaltRampUpgradeRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(RoadConstructionEfficiencySkill), 3, RoadConstructionEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(RoadConstructionEfficiencySkill), 3, RoadConstructionEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(RoadConstructionEfficiencySkill), 3, RoadConstructionEfficiencySkill.MultiplicativeStrategy), + }; + this.CraftMinutes = CreateCraftTimeValue(typeof(AsphaltRampUpgradeRecipe), Item.Get().UILink(), 5, typeof(RoadConstructionSkill)); + this.Initialize("Asphalt Ramp Upgrade", typeof(AsphaltRampUpgradeRecipe)); + + CraftingComponent.AddRecipe(typeof(WainwrightTableObject), this); + } + } + + [Serialized] + [Constructed] + [Road(1)] + [RequiresSkill(typeof(RoadConstructionEfficiencySkill), 3)] + public partial class AsphaltRampUpgradeBlock : + Block + { } + +} \ No newline at end of file diff --git a/AutoGen/Item/AsphaltRoad.cs b/AutoGen/Item/AsphaltRoad.cs new file mode 100644 index 0000000..fe75034 --- /dev/null +++ b/AutoGen/Item/AsphaltRoad.cs @@ -0,0 +1,64 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.World; + using Eco.World.Blocks; + using Eco.Gameplay.Pipes; + + [RequiresSkill(typeof(RoadConstructionSkill), 3)] + public partial class AsphaltRoadRecipe : Recipe + { + public AsphaltRoadRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(RoadConstructionEfficiencySkill), 1, RoadConstructionEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(RoadConstructionEfficiencySkill), 1, RoadConstructionEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(RoadConstructionEfficiencySkill), 1, RoadConstructionEfficiencySkill.MultiplicativeStrategy), + }; + this.CraftMinutes = CreateCraftTimeValue(typeof(AsphaltRoadRecipe), Item.Get().UILink(), 1, typeof(RoadConstructionSkill)); + this.Initialize("Asphalt Road", typeof(AsphaltRoadRecipe)); + + CraftingComponent.AddRecipe(typeof(WainwrightTableObject), this); + } + } + + [Serialized] + [Solid, Wall, Constructed] + [Road(1)] + [UsesRamp(typeof(AsphaltRoadWorldObjectBlock))] + [RequiresSkill(typeof(RoadConstructionEfficiencySkill), 3)] + public partial class AsphaltRoadBlock : + Block + { } + + [Serialized] + [MaxStackSize(10)] + [Weight(10000)] + [MakesRoads] + public partial class AsphaltRoadItem : + RoadItem + { + public override string FriendlyName { get { return "Asphalt Road"; } } + public override string Description { get { return "A paved surface constructed with asphalt and concrete. It's durable and extremely efficient for any wheeled vehicle."; } } + + } + +} \ No newline at end of file diff --git a/AutoGen/Item/AsphaltRoadUpgrade.cs b/AutoGen/Item/AsphaltRoadUpgrade.cs new file mode 100644 index 0000000..b962e15 --- /dev/null +++ b/AutoGen/Item/AsphaltRoadUpgrade.cs @@ -0,0 +1,64 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.World; + using Eco.World.Blocks; + using Eco.Gameplay.Pipes; + + [RequiresSkill(typeof(RoadConstructionSkill), 3)] + public partial class AsphaltRoadUpgradeRecipe : Recipe + { + public AsphaltRoadUpgradeRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(RoadConstructionEfficiencySkill), 1, RoadConstructionEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(RoadConstructionEfficiencySkill), 1, RoadConstructionEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(RoadConstructionEfficiencySkill), 1, RoadConstructionEfficiencySkill.MultiplicativeStrategy), + }; + this.CraftMinutes = CreateCraftTimeValue(typeof(AsphaltRoadUpgradeRecipe), Item.Get().UILink(), 1, typeof(RoadConstructionSkill)); + this.Initialize("Asphalt Road", typeof(AsphaltRoadUpgradeRecipe)); + + CraftingComponent.AddRecipe(typeof(WainwrightTableObject), this); + } + } + + [Serialized] + [Solid, Wall, Constructed] + [Road(1)] + [UsesRamp(typeof(AsphaltRoadWorldObjectBlock))] + [RequiresSkill(typeof(RoadConstructionEfficiencySkill), 3)] + public partial class AsphaltRoadUpgradeBlock : + Block + { } + + [Serialized] + [MaxStackSize(10)] + [Weight(10000)] + [MakesRoads] + public partial class AsphaltRoadUpgradeItem : + RoadItem + { + public override string FriendlyName { get { return "Asphalt Road"; } } + public override string Description { get { return "A paved surface constructed with asphalt and concrete. It's durable and extremely efficient for any wheeled vehicle."; } } + + } + +} \ No newline at end of file diff --git a/AutoGen/Item/Barrel.cs b/AutoGen/Item/Barrel.cs new file mode 100644 index 0000000..dd877a6 --- /dev/null +++ b/AutoGen/Item/Barrel.cs @@ -0,0 +1,63 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.World; + using Eco.World.Blocks; + using Eco.Gameplay.Pipes; + using Eco.Gameplay.Pipes.LiquidComponents; + + [RequiresSkill(typeof(PetrolRefiningSkill), 0)] + public partial class BarrelRecipe : Recipe + { + public BarrelRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(PetrolRefiningEfficiencySkill), 5, PetrolRefiningEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(PetrolRefiningEfficiencySkill), 3, PetrolRefiningEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(PetrolRefiningEfficiencySkill), 6, PetrolRefiningEfficiencySkill.MultiplicativeStrategy), + }; + this.CraftMinutes = CreateCraftTimeValue(typeof(BarrelRecipe), Item.Get().UILink(), 1, typeof(PetrolRefiningSpeedSkill)); + this.Initialize("Barrel", typeof(BarrelRecipe)); + + CraftingComponent.AddRecipe(typeof(MachineShopObject), this); + } + } + + [Serialized] + [Solid] + [RequiresSkill(typeof(PetrolRefiningEfficiencySkill), 0)] + public partial class BarrelBlock : + PickupableBlock + { } + + [Serialized] + [MaxStackSize(10)] + [Weight(2000)] + [Currency] + public partial class BarrelItem : + BlockItem + { + public override string FriendlyName { get { return "Barrel"; } } + public override string Description { get { return "Expertly crafted from smoothed boards and metal bands, this can carry a variety of substances."; } } + + } + +} \ No newline at end of file diff --git a/AutoGen/Item/Biodiesel.cs b/AutoGen/Item/Biodiesel.cs new file mode 100644 index 0000000..f099ead --- /dev/null +++ b/AutoGen/Item/Biodiesel.cs @@ -0,0 +1,63 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.World; + using Eco.World.Blocks; + using Eco.Gameplay.Pipes; + using Eco.Gameplay.Pipes.LiquidComponents; + + [RequiresSkill(typeof(PetrolRefiningSkill), 2)] + public partial class BiodieselRecipe : Recipe + { + public BiodieselRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(PetrolRefiningEfficiencySkill), 10, PetrolRefiningEfficiencySkill.MultiplicativeStrategy), + }; + this.CraftMinutes = CreateCraftTimeValue(typeof(BiodieselRecipe), Item.Get().UILink(), 2, typeof(PetrolRefiningSpeedSkill)); + this.Initialize("Biodiesel", typeof(BiodieselRecipe)); + + CraftingComponent.AddRecipe(typeof(OilRefineryObject), this); + } + } + + [Serialized] + [Solid] + [RequiresSkill(typeof(PetrolRefiningEfficiencySkill), 2)] + public partial class BiodieselBlock : + PickupableBlock + { } + + [Serialized] + [MaxStackSize(10)] + [Weight(30000)] + [Fuel(60000)] + [Currency] + public partial class BiodieselItem : + BlockItem + { + public override string FriendlyName { get { return "Biodiesel"; } } + public override string FriendlyNamePlural { get { return "Biodiesel"; } } + public override string Description { get { return "A vegetable or animal fat-based diesel fuel."; } } + + } + +} \ No newline at end of file diff --git a/AutoGen/Item/Board.cs b/AutoGen/Item/Board.cs new file mode 100644 index 0000000..cd2aedb --- /dev/null +++ b/AutoGen/Item/Board.cs @@ -0,0 +1,54 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.World; + using Eco.World.Blocks; + using Eco.Gameplay.Pipes; + + [RequiresSkill(typeof(WoodworkingSkill), 0)] + public partial class BoardRecipe : Recipe + { + public BoardRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(2), + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(WoodworkingEfficiencySkill), 4, WoodworkingEfficiencySkill.MultiplicativeStrategy), + }; + this.CraftMinutes = CreateCraftTimeValue(typeof(BoardRecipe), Item.Get().UILink(), 0.5f, typeof(WoodworkingSpeedSkill)); + this.Initialize("Board", typeof(BoardRecipe)); + + CraftingComponent.AddRecipe(typeof(CarpentryTableObject), this); + } + } + + + [Serialized] + [Weight(500)] + [Fuel(2500)] + [Currency] + public partial class BoardItem : + Item + { + public override string FriendlyName { get { return "Board"; } } + public override string Description { get { return "Can be used in simple crafts, or used to create workbenches."; } } + + } + +} \ No newline at end of file diff --git a/AutoGen/Item/Charcoal.cs b/AutoGen/Item/Charcoal.cs new file mode 100644 index 0000000..2137862 --- /dev/null +++ b/AutoGen/Item/Charcoal.cs @@ -0,0 +1,54 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.World; + using Eco.World.Blocks; + using Eco.Gameplay.Pipes; + + [RequiresSkill(typeof(AdvancedSmeltingSkill), 1)] + public partial class CharcoalRecipe : Recipe + { + public CharcoalRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(2), + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(AlloySmeltingEfficiencySkill), 10, AlloySmeltingEfficiencySkill.MultiplicativeStrategy), + }; + this.CraftMinutes = CreateCraftTimeValue(typeof(CharcoalRecipe), Item.Get().UILink(), 1, typeof(AlloySmeltingEfficiencySkill)); + this.Initialize("Charcoal", typeof(CharcoalRecipe)); + + CraftingComponent.AddRecipe(typeof(BlastFurnaceObject), this); + } + } + + + [Serialized] + [Weight(1000)] + [Fuel(25000)] + [Currency] + public partial class CharcoalItem : + Item + { + public override string FriendlyName { get { return "Charcoal"; } } + public override string Description { get { return "A black residue, consisting of carbon and any remaining ash."; } } + + } + +} \ No newline at end of file diff --git a/AutoGen/Item/Coal.cs b/AutoGen/Item/Coal.cs new file mode 100644 index 0000000..3535752 --- /dev/null +++ b/AutoGen/Item/Coal.cs @@ -0,0 +1,56 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.World; + using Eco.World.Blocks; + using Eco.Gameplay.Pipes; + + + [Serialized] + [Minable, Solid,Wall] + public partial class CoalBlock : + Block + { } + + [Serialized] + [MaxStackSize(20)] + [Weight(5000)] + [Fuel(20000)] + [ResourcePile] + [Currency] + public partial class CoalItem : + BlockItem + { + public override string FriendlyName { get { return "Coal"; } } + public override string FriendlyNamePlural { get { return "Coal"; } } + public override string Description { get { return "A combustible mineral which when used as a fuel provides lots of energy but generates lots of pollution."; } } + + public override bool CanStickToWalls { get { return false; } } + + private static Type[] blockTypes = new Type[] { + typeof(CoalStacked1Block), + typeof(CoalStacked2Block), + typeof(CoalStacked3Block), + typeof(CoalStacked4Block) + }; + public override Type[] BlockTypes { get { return blockTypes; } } + } + + [Serialized, Solid] public class CoalStacked1Block : PickupableBlock { } + [Serialized, Solid] public class CoalStacked2Block : PickupableBlock { } + [Serialized, Solid] public class CoalStacked3Block : PickupableBlock { } + [Serialized, Solid,Wall] public class CoalStacked4Block : PickupableBlock { } //Only a wall if it's all 4 Coal +} \ No newline at end of file diff --git a/AutoGen/Item/CombustionEngine.cs b/AutoGen/Item/CombustionEngine.cs new file mode 100644 index 0000000..e6856bc --- /dev/null +++ b/AutoGen/Item/CombustionEngine.cs @@ -0,0 +1,56 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.World; + using Eco.World.Blocks; + using Eco.Gameplay.Pipes; + + [RequiresSkill(typeof(MechanicalEngineeringSkill), 3)] + public partial class CombustionEngineRecipe : Recipe + { + public CombustionEngineRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(MechanicsAssemblyEfficiencySkill), 10, MechanicsAssemblyEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(MechanicsAssemblyEfficiencySkill), 5, MechanicsAssemblyEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(MechanicsAssemblyEfficiencySkill), 20, MechanicsAssemblyEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(MechanicsAssemblyEfficiencySkill), 5, MechanicsAssemblyEfficiencySkill.MultiplicativeStrategy), + }; + this.CraftMinutes = CreateCraftTimeValue(typeof(CombustionEngineRecipe), Item.Get().UILink(), 5, typeof(MechanicsAssemblySpeedSkill)); + this.Initialize("Combustion Engine", typeof(CombustionEngineRecipe)); + + CraftingComponent.AddRecipe(typeof(MachineShopObject), this); + } + } + + + [Serialized] + [Weight(1000)] + [Currency] + public partial class CombustionEngineItem : + Item + { + public override string FriendlyName { get { return "Combustion Engine"; } } + public override string Description { get { return "An engine that generates power by combustion of fuel."; } } + + } + +} \ No newline at end of file diff --git a/AutoGen/Item/Concrete.cs b/AutoGen/Item/Concrete.cs new file mode 100644 index 0000000..4807620 --- /dev/null +++ b/AutoGen/Item/Concrete.cs @@ -0,0 +1,55 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.World; + using Eco.World.Blocks; + using Eco.Gameplay.Pipes; + + [RequiresSkill(typeof(CementSkill), 1)] + public partial class ConcreteRecipe : Recipe + { + public ConcreteRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(CementProductionEfficiencySkill), 40, CementProductionEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(CementProductionEfficiencySkill), 25, CementProductionEfficiencySkill.MultiplicativeStrategy), + }; + this.CraftMinutes = CreateCraftTimeValue(typeof(ConcreteRecipe), Item.Get().UILink(), 2, typeof(CementProductionSpeedSkill)); + this.Initialize("Concrete", typeof(ConcreteRecipe)); + + CraftingComponent.AddRecipe(typeof(CementKilnObject), this); + } + } + + + [Serialized] + [Weight(10000)] + [Currency] + public partial class ConcreteItem : + Item + { + public override string FriendlyName { get { return "Concrete"; } } + public override string FriendlyNamePlural { get { return "Concrete"; } } + public override string Description { get { return "A very strong building material made from cement and an aggregate like crushed stone."; } } + + } + +} \ No newline at end of file diff --git a/AutoGen/Item/CopperIngot.cs b/AutoGen/Item/CopperIngot.cs new file mode 100644 index 0000000..98ffc02 --- /dev/null +++ b/AutoGen/Item/CopperIngot.cs @@ -0,0 +1,54 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.World; + using Eco.World.Blocks; + using Eco.Gameplay.Pipes; + + [RequiresSkill(typeof(BasicSmeltingSkill), 1)] + public partial class CopperIngotRecipe : Recipe + { + public CopperIngotRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + new CraftingElement(3), + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(BasicSmeltingEfficiencySkill), 25, BasicSmeltingEfficiencySkill.MultiplicativeStrategy), + }; + this.CraftMinutes = CreateCraftTimeValue(typeof(CopperIngotRecipe), Item.Get().UILink(), 2, typeof(BasicSmeltingSpeedSkill)); + this.Initialize("Copper Ingot", typeof(CopperIngotRecipe)); + + CraftingComponent.AddRecipe(typeof(BloomeryObject), this); + } + } + + + [Serialized] + [Weight(4000)] + [Currency] + public partial class CopperIngotItem : + Item + { + public override string FriendlyName { get { return "Copper Ingot"; } } + public override string Description { get { return "A hefty block of copper."; } } + + } + +} \ No newline at end of file diff --git a/AutoGen/Item/CopperOre.cs b/AutoGen/Item/CopperOre.cs new file mode 100644 index 0000000..3e38279 --- /dev/null +++ b/AutoGen/Item/CopperOre.cs @@ -0,0 +1,55 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.World; + using Eco.World.Blocks; + using Eco.Gameplay.Pipes; + + + [Serialized] + [Minable, Solid,Wall] + public partial class CopperOreBlock : + Block + { } + + [Serialized] + [MaxStackSize(20)] + [Weight(10000)] + [ResourcePile] + [Currency] + public partial class CopperOreItem : + BlockItem + { + public override string FriendlyName { get { return "Copper Ore"; } } + public override string FriendlyNamePlural { get { return "Copper Ore"; } } + public override string Description { get { return "Unrefined ore with traces of copper."; } } + + public override bool CanStickToWalls { get { return false; } } + + private static Type[] blockTypes = new Type[] { + typeof(CopperOreStacked1Block), + typeof(CopperOreStacked2Block), + typeof(CopperOreStacked3Block), + typeof(CopperOreStacked4Block) + }; + public override Type[] BlockTypes { get { return blockTypes; } } + } + + [Serialized, Solid] public class CopperOreStacked1Block : PickupableBlock { } + [Serialized, Solid] public class CopperOreStacked2Block : PickupableBlock { } + [Serialized, Solid] public class CopperOreStacked3Block : PickupableBlock { } + [Serialized, Solid,Wall] public class CopperOreStacked4Block : PickupableBlock { } //Only a wall if it's all 4 CopperOre +} \ No newline at end of file diff --git a/AutoGen/Item/CopperWiring.cs b/AutoGen/Item/CopperWiring.cs new file mode 100644 index 0000000..b70d711 --- /dev/null +++ b/AutoGen/Item/CopperWiring.cs @@ -0,0 +1,54 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.World; + using Eco.World.Blocks; + using Eco.Gameplay.Pipes; + + [RequiresSkill(typeof(MechanicalEngineeringSkill), 2)] + public partial class CopperWiringRecipe : Recipe + { + public CopperWiringRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(4), + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(MechanicsComponentsEfficiencySkill), 5, MechanicsComponentsEfficiencySkill.MultiplicativeStrategy), + }; + this.CraftMinutes = CreateCraftTimeValue(typeof(CopperWiringRecipe), Item.Get().UILink(), 2, typeof(MechanicsComponentsSpeedSkill)); + this.Initialize("Copper Wiring", typeof(CopperWiringRecipe)); + + CraftingComponent.AddRecipe(typeof(MachineShopObject), this); + } + } + + + [Serialized] + [Weight(200)] + [Currency] + public partial class CopperWiringItem : + Item + { + public override string FriendlyName { get { return "Copper Wiring"; } } + public override string FriendlyNamePlural { get { return "Copper Wiring"; } } + public override string Description { get { return "A length of conductive wire useful for a variety of purposes."; } } + + } + +} \ No newline at end of file diff --git a/AutoGen/Item/Gearbox.cs b/AutoGen/Item/Gearbox.cs new file mode 100644 index 0000000..df23f01 --- /dev/null +++ b/AutoGen/Item/Gearbox.cs @@ -0,0 +1,54 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.World; + using Eco.World.Blocks; + using Eco.Gameplay.Pipes; + + [RequiresSkill(typeof(MechanicalEngineeringSkill), 1)] + public partial class GearboxRecipe : Recipe + { + public GearboxRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(MechanicsAssemblyEfficiencySkill), 7, MechanicsAssemblyEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(MechanicsAssemblyEfficiencySkill), 5, MechanicsAssemblyEfficiencySkill.MultiplicativeStrategy), + }; + this.CraftMinutes = CreateCraftTimeValue(typeof(GearboxRecipe), Item.Get().UILink(), 2, typeof(MechanicsAssemblySpeedSkill)); + this.Initialize("Gearbox", typeof(GearboxRecipe)); + + CraftingComponent.AddRecipe(typeof(MachineShopObject), this); + } + } + + + [Serialized] + [Weight(1000)] + [Currency] + public partial class GearboxItem : + Item + { + public override string FriendlyName { get { return "Gearbox"; } } + public override string Description { get { return "Provides speed and torque conversions from a rotating power source to another device"; } } + + } + +} \ No newline at end of file diff --git a/AutoGen/Item/GoldIngot.cs b/AutoGen/Item/GoldIngot.cs new file mode 100644 index 0000000..6bd699c --- /dev/null +++ b/AutoGen/Item/GoldIngot.cs @@ -0,0 +1,54 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.World; + using Eco.World.Blocks; + using Eco.Gameplay.Pipes; + + [RequiresSkill(typeof(BasicSmeltingSkill), 3)] + public partial class GoldIngotRecipe : Recipe + { + public GoldIngotRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + new CraftingElement(3), + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(BasicSmeltingEfficiencySkill), 25, BasicSmeltingEfficiencySkill.MultiplicativeStrategy), + }; + this.CraftMinutes = CreateCraftTimeValue(typeof(GoldIngotRecipe), Item.Get().UILink(), 2, typeof(BasicSmeltingSpeedSkill)); + this.Initialize("Gold Ingot", typeof(GoldIngotRecipe)); + + CraftingComponent.AddRecipe(typeof(BloomeryObject), this); + } + } + + + [Serialized] + [Weight(4000)] + [Currency] + public partial class GoldIngotItem : + Item + { + public override string FriendlyName { get { return "Gold Ingot"; } } + public override string Description { get { return "A shiny, refined gold ingot."; } } + + } + +} \ No newline at end of file diff --git a/AutoGen/Item/GoldOre.cs b/AutoGen/Item/GoldOre.cs new file mode 100644 index 0000000..b3abd1f --- /dev/null +++ b/AutoGen/Item/GoldOre.cs @@ -0,0 +1,55 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.World; + using Eco.World.Blocks; + using Eco.Gameplay.Pipes; + + + [Serialized] + [Minable, Solid,Wall] + public partial class GoldOreBlock : + Block + { } + + [Serialized] + [MaxStackSize(20)] + [Weight(10000)] + [ResourcePile] + [Currency] + public partial class GoldOreItem : + BlockItem + { + public override string FriendlyName { get { return "Gold Ore"; } } + public override string FriendlyNamePlural { get { return "Gold Ore"; } } + public override string Description { get { return "Unrefined ore with traces of gold."; } } + + public override bool CanStickToWalls { get { return false; } } + + private static Type[] blockTypes = new Type[] { + typeof(GoldOreStacked1Block), + typeof(GoldOreStacked2Block), + typeof(GoldOreStacked3Block), + typeof(GoldOreStacked4Block) + }; + public override Type[] BlockTypes { get { return blockTypes; } } + } + + [Serialized, Solid] public class GoldOreStacked1Block : PickupableBlock { } + [Serialized, Solid] public class GoldOreStacked2Block : PickupableBlock { } + [Serialized, Solid] public class GoldOreStacked3Block : PickupableBlock { } + [Serialized, Solid,Wall] public class GoldOreStacked4Block : PickupableBlock { } //Only a wall if it's all 4 GoldOre +} \ No newline at end of file diff --git a/AutoGen/Item/HewnLog.cs b/AutoGen/Item/HewnLog.cs new file mode 100644 index 0000000..cd5ecdc --- /dev/null +++ b/AutoGen/Item/HewnLog.cs @@ -0,0 +1,72 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.World; + using Eco.World.Blocks; + using Eco.Gameplay.Pipes; + + [RequiresSkill(typeof(BasicCraftingSkill), 0)] + public partial class HewnLogRecipe : Recipe + { + public HewnLogRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(HewnLogProcessingEfficiencySkill), 2, HewnLogProcessingEfficiencySkill.MultiplicativeStrategy), + }; + this.CraftMinutes = CreateCraftTimeValue(typeof(HewnLogRecipe), Item.Get().UILink(), 0.2f, typeof(HewnLogProcessingSpeedSkill)); + this.Initialize("Hewn Log", typeof(HewnLogRecipe)); + + CraftingComponent.AddRecipe(typeof(WorkbenchObject), this); + } + } + + [Serialized] + [Solid, Wall, Constructed,BuildRoomMaterialOption] + [Tier(1)] + [RequiresSkill(typeof(HewnLogProcessingEfficiencySkill), 0)] + public partial class HewnLogBlock : + Block + { } + + [Serialized] + [MaxStackSize(20)] + [Weight(10000)] + [Fuel(2000)] + [Currency] + public partial class HewnLogItem : + BlockItem + { + public override string FriendlyName { get { return "Hewn Log"; } } + public override string Description { get { return "A log hewn and shaped to be a building material."; } } + + + private static Type[] blockTypes = new Type[] { + typeof(HewnLogStacked1Block), + typeof(HewnLogStacked2Block), + typeof(HewnLogStacked3Block) + }; + public override Type[] BlockTypes { get { return blockTypes; } } + } + + [Serialized, Solid] public class HewnLogStacked1Block : PickupableBlock { } + [Serialized, Solid] public class HewnLogStacked2Block : PickupableBlock { } + [Serialized, Solid,Wall] public class HewnLogStacked3Block : PickupableBlock { } //Only a wall if it's all 4 HewnLog +} \ No newline at end of file diff --git a/AutoGen/Item/IronIngot.cs b/AutoGen/Item/IronIngot.cs new file mode 100644 index 0000000..eecb6db --- /dev/null +++ b/AutoGen/Item/IronIngot.cs @@ -0,0 +1,54 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.World; + using Eco.World.Blocks; + using Eco.Gameplay.Pipes; + + [RequiresSkill(typeof(BasicSmeltingSkill), 2)] + public partial class IronIngotRecipe : Recipe + { + public IronIngotRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + new CraftingElement(3), + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(BasicSmeltingEfficiencySkill), 25, BasicSmeltingEfficiencySkill.MultiplicativeStrategy), + }; + this.CraftMinutes = CreateCraftTimeValue(typeof(IronIngotRecipe), Item.Get().UILink(), 2, typeof(BasicSmeltingSpeedSkill)); + this.Initialize("Iron Ingot", typeof(IronIngotRecipe)); + + CraftingComponent.AddRecipe(typeof(BloomeryObject), this); + } + } + + + [Serialized] + [Weight(4000)] + [Currency] + public partial class IronIngotItem : + Item + { + public override string FriendlyName { get { return "Iron Ingot"; } } + public override string Description { get { return "Refined block of iron."; } } + + } + +} diff --git a/AutoGen/Item/IronOre.cs b/AutoGen/Item/IronOre.cs new file mode 100644 index 0000000..0160fa0 --- /dev/null +++ b/AutoGen/Item/IronOre.cs @@ -0,0 +1,55 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.World; + using Eco.World.Blocks; + using Eco.Gameplay.Pipes; + + + [Serialized] + [Minable, Solid,Wall] + public partial class IronOreBlock : + Block + { } + + [Serialized] + [MaxStackSize(20)] + [Weight(10000)] + [ResourcePile] + [Currency] + public partial class IronOreItem : + BlockItem + { + public override string FriendlyName { get { return "Iron Ore"; } } + public override string FriendlyNamePlural { get { return "Iron Ore"; } } + public override string Description { get { return "Unrefined ore with traces of iron."; } } + + public override bool CanStickToWalls { get { return false; } } + + private static Type[] blockTypes = new Type[] { + typeof(IronOreStacked1Block), + typeof(IronOreStacked2Block), + typeof(IronOreStacked3Block), + typeof(IronOreStacked4Block) + }; + public override Type[] BlockTypes { get { return blockTypes; } } + } + + [Serialized, Solid] public class IronOreStacked1Block : PickupableBlock { } + [Serialized, Solid] public class IronOreStacked2Block : PickupableBlock { } + [Serialized, Solid] public class IronOreStacked3Block : PickupableBlock { } + [Serialized, Solid,Wall] public class IronOreStacked4Block : PickupableBlock { } //Only a wall if it's all 4 IronOre +} \ No newline at end of file diff --git a/AutoGen/Item/Log.cs b/AutoGen/Item/Log.cs new file mode 100644 index 0000000..8c7d236 --- /dev/null +++ b/AutoGen/Item/Log.cs @@ -0,0 +1,54 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.World; + using Eco.World.Blocks; + using Eco.Gameplay.Pipes; + + + [Serialized] + [Solid, Wall, Constructed] + public partial class LogBlock : + Block + { } + + [Serialized] + [MaxStackSize(20)] + [Weight(5000)] + [Fuel(2000)] + [ResourcePile] + [Currency] + public partial class LogItem : + BlockItem + { + public override string FriendlyName { get { return "Log"; } } + public override string Description { get { return "A stack of logs."; } } + + + private static Type[] blockTypes = new Type[] { + typeof(LogStacked1Block), + typeof(LogStacked2Block), + typeof(LogStacked3Block), + typeof(LogStacked4Block) + }; + public override Type[] BlockTypes { get { return blockTypes; } } + } + + [Serialized, Solid] public class LogStacked1Block : PickupableBlock { } + [Serialized, Solid] public class LogStacked2Block : PickupableBlock { } + [Serialized, Solid] public class LogStacked3Block : PickupableBlock { } + [Serialized, Solid,Wall] public class LogStacked4Block : PickupableBlock { } //Only a wall if it's all 4 Log +} \ No newline at end of file diff --git a/AutoGen/Item/Lumber.cs b/AutoGen/Item/Lumber.cs new file mode 100644 index 0000000..cf0cac4 --- /dev/null +++ b/AutoGen/Item/Lumber.cs @@ -0,0 +1,76 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.World; + using Eco.World.Blocks; + using Eco.Gameplay.Pipes; + + [RequiresSkill(typeof(LumberSkill), 1)] + public partial class LumberRecipe : Recipe + { + public LumberRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + new CraftingElement(3), + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(LumberProcessingEfficiencySkill), 4, LumberProcessingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(LumberProcessingEfficiencySkill), 5, LumberProcessingEfficiencySkill.MultiplicativeStrategy), + }; + this.CraftMinutes = CreateCraftTimeValue(typeof(LumberRecipe), Item.Get().UILink(), 1, typeof(LumberProcessingSpeedSkill)); + this.Initialize("Lumber", typeof(LumberRecipe)); + + CraftingComponent.AddRecipe(typeof(SawmillObject), this); + } + } + + [Serialized] + [Solid, Wall, Constructed,BuildRoomMaterialOption] + [Tier(2)] + [RequiresSkill(typeof(LumberProcessingEfficiencySkill), 1)] + public partial class LumberBlock : + Block + { } + + [Serialized] + [MaxStackSize(20)] + [Weight(10000)] + [Fuel(4000)] + [Currency] + public partial class LumberItem : + BlockItem + { + public override string FriendlyName { get { return "Lumber"; } } + public override string Description { get { return "Can be fashioned into various usable equipment."; } } + + + private static Type[] blockTypes = new Type[] { + typeof(LumberStacked1Block), + typeof(LumberStacked2Block), + typeof(LumberStacked3Block), + typeof(LumberStacked4Block) + }; + public override Type[] BlockTypes { get { return blockTypes; } } + } + + [Serialized, Solid] public class LumberStacked1Block : PickupableBlock { } + [Serialized, Solid] public class LumberStacked2Block : PickupableBlock { } + [Serialized, Solid] public class LumberStacked3Block : PickupableBlock { } + [Serialized, Solid,Wall] public class LumberStacked4Block : PickupableBlock { } //Only a wall if it's all 4 Lumber +} \ No newline at end of file diff --git a/AutoGen/Item/MortaredStone.cs b/AutoGen/Item/MortaredStone.cs new file mode 100644 index 0000000..17f5ec8 --- /dev/null +++ b/AutoGen/Item/MortaredStone.cs @@ -0,0 +1,72 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.World; + using Eco.World.Blocks; + using Eco.Gameplay.Pipes; + + [RequiresSkill(typeof(MortarProductionSkill), 0)] + public partial class MortaredStoneRecipe : Recipe + { + public MortaredStoneRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(MortarProductionEfficiencySkill), 8, MortarProductionEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(MortarProductionEfficiencySkill), 3, MortarProductionEfficiencySkill.MultiplicativeStrategy), + }; + this.CraftMinutes = CreateCraftTimeValue(typeof(MortaredStoneRecipe), Item.Get().UILink(), 0.3f, typeof(MortarProductionSpeedSkill)); + this.Initialize("Mortared Stone", typeof(MortaredStoneRecipe)); + + CraftingComponent.AddRecipe(typeof(MasonryTableObject), this); + } + } + + [Serialized] + [Solid, Wall, Constructed,BuildRoomMaterialOption] + [Tier(1)] + [RequiresSkill(typeof(MortarProductionEfficiencySkill), 0)] + public partial class MortaredStoneBlock : + Block + { } + + [Serialized] + [MaxStackSize(20)] + [Weight(10000)] + [Currency] + public partial class MortaredStoneItem : + BlockItem + { + public override string FriendlyName { get { return "Mortared Stone"; } } + public override string Description { get { return "Used to create tough but rudimentary buildings."; } } + + + private static Type[] blockTypes = new Type[] { + typeof(MortaredStoneStacked1Block), + typeof(MortaredStoneStacked2Block), + typeof(MortaredStoneStacked3Block) + }; + public override Type[] BlockTypes { get { return blockTypes; } } + } + + [Serialized, Solid] public class MortaredStoneStacked1Block : PickupableBlock { } + [Serialized, Solid] public class MortaredStoneStacked2Block : PickupableBlock { } + [Serialized, Solid,Wall] public class MortaredStoneStacked3Block : PickupableBlock { } //Only a wall if it's all 4 MortaredStone +} \ No newline at end of file diff --git a/AutoGen/Item/Piston.cs b/AutoGen/Item/Piston.cs new file mode 100644 index 0000000..502a52b --- /dev/null +++ b/AutoGen/Item/Piston.cs @@ -0,0 +1,54 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.World; + using Eco.World.Blocks; + using Eco.Gameplay.Pipes; + + [RequiresSkill(typeof(MechanicalEngineeringSkill), 2)] + public partial class PistonRecipe : Recipe + { + public PistonRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(MechanicsComponentsEfficiencySkill), 5, MechanicsComponentsEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(MechanicsComponentsEfficiencySkill), 7, MechanicsComponentsEfficiencySkill.MultiplicativeStrategy), + }; + this.CraftMinutes = CreateCraftTimeValue(typeof(PistonRecipe), Item.Get().UILink(), 2, typeof(MechanicsComponentsSpeedSkill)); + this.Initialize("Piston", typeof(PistonRecipe)); + + CraftingComponent.AddRecipe(typeof(MachineShopObject), this); + } + } + + + [Serialized] + [Weight(1000)] + [Currency] + public partial class PistonItem : + Item + { + public override string FriendlyName { get { return "Piston"; } } + public override string Description { get { return "A moving component that transfers force. Can also function as a valve occasionally."; } } + + } + +} \ No newline at end of file diff --git a/AutoGen/Item/ReinforcedConcrete.cs b/AutoGen/Item/ReinforcedConcrete.cs new file mode 100644 index 0000000..9300f9c --- /dev/null +++ b/AutoGen/Item/ReinforcedConcrete.cs @@ -0,0 +1,76 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.World; + using Eco.World.Blocks; + using Eco.Gameplay.Pipes; + + [RequiresSkill(typeof(CementSkill), 1)] + public partial class ReinforcedConcreteRecipe : Recipe + { + public ReinforcedConcreteRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(CementProductionEfficiencySkill), 1, CementProductionEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(CementProductionEfficiencySkill), 2, CementProductionEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(CementProductionEfficiencySkill), 2, CementProductionEfficiencySkill.MultiplicativeStrategy), + }; + this.CraftMinutes = CreateCraftTimeValue(typeof(ReinforcedConcreteRecipe), Item.Get().UILink(), 2, typeof(CementProductionSpeedSkill)); + this.Initialize("Reinforced Concrete", typeof(ReinforcedConcreteRecipe)); + + CraftingComponent.AddRecipe(typeof(CementKilnObject), this); + } + } + + [Serialized] + [Solid, Wall, Constructed,BuildRoomMaterialOption] + [Tier(3)] + [RequiresSkill(typeof(CementProductionEfficiencySkill), 1)] + public partial class ReinforcedConcreteBlock : + Block + { } + + [Serialized] + [MaxStackSize(20)] + [Weight(10000)] + [Currency] + public partial class ReinforcedConcreteItem : + BlockItem + { + public override string FriendlyName { get { return "Reinforced Concrete"; } } + public override string FriendlyNamePlural { get { return "Reinforced Concrete"; } } + public override string Description { get { return "A study construction material poured around a latice of rebar."; } } + + + private static Type[] blockTypes = new Type[] { + typeof(ReinforcedConcreteStacked1Block), + typeof(ReinforcedConcreteStacked2Block), + typeof(ReinforcedConcreteStacked3Block), + typeof(ReinforcedConcreteStacked4Block) + }; + public override Type[] BlockTypes { get { return blockTypes; } } + } + + [Serialized, Solid] public class ReinforcedConcreteStacked1Block : PickupableBlock { } + [Serialized, Solid] public class ReinforcedConcreteStacked2Block : PickupableBlock { } + [Serialized, Solid] public class ReinforcedConcreteStacked3Block : PickupableBlock { } + [Serialized, Solid,Wall] public class ReinforcedConcreteStacked4Block : PickupableBlock { } //Only a wall if it's all 4 ReinforcedConcrete +} \ No newline at end of file diff --git a/AutoGen/Item/Steel.cs b/AutoGen/Item/Steel.cs new file mode 100644 index 0000000..ab250a4 --- /dev/null +++ b/AutoGen/Item/Steel.cs @@ -0,0 +1,55 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.World; + using Eco.World.Blocks; + using Eco.Gameplay.Pipes; + + [RequiresSkill(typeof(AlloySmeltingSkill), 2)] + public partial class SteelRecipe : Recipe + { + public SteelRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(AlloySmeltingEfficiencySkill), 6, AlloySmeltingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(AlloySmeltingEfficiencySkill), 2, AlloySmeltingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(AlloySmeltingEfficiencySkill), 2, AlloySmeltingEfficiencySkill.MultiplicativeStrategy), + }; + this.CraftMinutes = CreateCraftTimeValue(typeof(SteelRecipe), Item.Get().UILink(), 5, typeof(AlloySmeltingSpeedSkill)); + this.Initialize("Steel", typeof(SteelRecipe)); + + CraftingComponent.AddRecipe(typeof(BlastFurnaceObject), this); + } + } + + + [Serialized] + [Weight(4000)] + [Currency] + public partial class SteelItem : + Item + { + public override string FriendlyName { get { return "Steel"; } } + public override string Description { get { return "A strong alloy of iron and other elements."; } } + + } + +} \ No newline at end of file diff --git a/AutoGen/Item/StoneRampUpgrade.cs b/AutoGen/Item/StoneRampUpgrade.cs new file mode 100644 index 0000000..ace9978 --- /dev/null +++ b/AutoGen/Item/StoneRampUpgrade.cs @@ -0,0 +1,51 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.World; + using Eco.World.Blocks; + using Eco.Gameplay.Pipes; + + [RequiresSkill(typeof(RoadConstructionSkill), 1)] + public partial class StoneRampUpgradeRecipe : Recipe + { + public StoneRampUpgradeRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(RoadConstructionEfficiencySkill), 20, RoadConstructionEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(RoadConstructionEfficiencySkill), 3, RoadConstructionEfficiencySkill.MultiplicativeStrategy), + }; + this.CraftMinutes = CreateCraftTimeValue(typeof(StoneRampUpgradeRecipe), Item.Get().UILink(), 1, typeof(RoadConstructionSkill)); + this.Initialize("Stone Ramp", typeof(StoneRampUpgradeRecipe)); + + CraftingComponent.AddRecipe(typeof(WainwrightTableObject), this); + CraftingComponent.AddRecipe(typeof(MasonryTableObject), this); + } + } + + [Serialized] + [Constructed] + [Road(1)] + [RequiresSkill(typeof(RoadConstructionEfficiencySkill), 1)] + public partial class StoneRampUpgradeBlock : + Block + { } + +} \ No newline at end of file diff --git a/AutoGen/Recipe/BakedPitch.cs b/AutoGen/Recipe/BakedPitch.cs new file mode 100644 index 0000000..37f33e1 --- /dev/null +++ b/AutoGen/Recipe/BakedPitch.cs @@ -0,0 +1,32 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Skills; + using Eco.Shared.Utils; + using Eco.World; + using Eco.World.Blocks; + using Gameplay.Systems.TextLinks; + + [RequiresSkill(typeof(MortarProductionSkill), 3)] + public class BakedPitchRecipe : Recipe + { + public BakedPitchRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(1), + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(BasicCraftingEfficiencySkill), 20, BasicCraftingEfficiencySkill.MultiplicativeStrategy), + }; + this.Initialize("Baked Pitch", typeof(BakedPitchRecipe)); + this.CraftMinutes = CreateCraftTimeValue(typeof(BakedPitchRecipe), this.UILink(), 0.1f, typeof(BasicCraftingEfficiencySkill)); + CraftingComponent.AddRecipe(typeof(BakeryOvenObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/Recipe/ButcherBison.cs b/AutoGen/Recipe/ButcherBison.cs new file mode 100644 index 0000000..38dc231 --- /dev/null +++ b/AutoGen/Recipe/ButcherBison.cs @@ -0,0 +1,35 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Skills; + using Eco.Shared.Utils; + using Eco.World; + using Eco.World.Blocks; + using Gameplay.Systems.TextLinks; + + [RequiresSkill(typeof(LargeButcherySkill), 3)] + public class ButcherBisonRecipe : Recipe + { + public ButcherBisonRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(20), + new CraftingElement(3), + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(LargeButcheryEfficiencySkill), 1, LargeButcheryEfficiencySkill.MultiplicativeStrategy), + }; + this.Initialize("Butcher Bison", typeof(ButcherBisonRecipe)); + //default crafting speed 3 + var craftingspeed = 1; + this.CraftMinutes = CreateCraftTimeValue(typeof(ButcherBisonRecipe), this.UILink(), craftingspeed, typeof(LargeButcherySpeedSkill)); + CraftingComponent.AddRecipe(typeof(ButcheryTableObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/Recipe/ButcherElk.cs b/AutoGen/Recipe/ButcherElk.cs new file mode 100644 index 0000000..f53f435 --- /dev/null +++ b/AutoGen/Recipe/ButcherElk.cs @@ -0,0 +1,35 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Skills; + using Eco.Shared.Utils; + using Eco.World; + using Eco.World.Blocks; + using Gameplay.Systems.TextLinks; + + [RequiresSkill(typeof(LargeButcherySkill), 1)] + public class ButcherElkRecipe : Recipe + { + public ButcherElkRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(10), + new CraftingElement(2), + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(LargeButcheryEfficiencySkill), 1, LargeButcheryEfficiencySkill.MultiplicativeStrategy), + }; + this.Initialize("Butcher Elk", typeof(ButcherElkRecipe)); + //default crafting speed 1 + var craftingspeed = 1; + this.CraftMinutes = CreateCraftTimeValue(typeof(ButcherElkRecipe), this.UILink(), craftingspeed, typeof(LargeButcherySpeedSkill)); + CraftingComponent.AddRecipe(typeof(ButcheryTableObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/Recipe/ButcherFox.cs b/AutoGen/Recipe/ButcherFox.cs new file mode 100644 index 0000000..f80a048 --- /dev/null +++ b/AutoGen/Recipe/ButcherFox.cs @@ -0,0 +1,35 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Skills; + using Eco.Shared.Utils; + using Eco.World; + using Eco.World.Blocks; + using Gameplay.Systems.TextLinks; + + [RequiresSkill(typeof(SmallButcherySkill), 3)] + public class ButcherFoxRecipe : Recipe + { + public ButcherFoxRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(3), + new CraftingElement(2), + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(SmallButcheryEfficiencySkill), 1, SmallButcheryEfficiencySkill.MultiplicativeStrategy), + }; + this.Initialize("Butcher Fox", typeof(ButcherFoxRecipe)); + //default crafting speed 1 + var craftingspeed = 1; + this.CraftMinutes = CreateCraftTimeValue(typeof(ButcherFoxRecipe), this.UILink(), craftingspeed, typeof(SmallButcherySpeedSkill)); + CraftingComponent.AddRecipe(typeof(ButcheryTableObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/Recipe/ButcherHare.cs b/AutoGen/Recipe/ButcherHare.cs new file mode 100644 index 0000000..b663554 --- /dev/null +++ b/AutoGen/Recipe/ButcherHare.cs @@ -0,0 +1,35 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Skills; + using Eco.Shared.Utils; + using Eco.World; + using Eco.World.Blocks; + using Gameplay.Systems.TextLinks; + + [RequiresSkill(typeof(SmallButcherySkill), 1)] + public class ButcherHareRecipe : Recipe + { + public ButcherHareRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(1), + new CraftingElement(1), + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(SmallButcheryEfficiencySkill), 1, SmallButcheryEfficiencySkill.MultiplicativeStrategy), + }; + this.Initialize("Butcher Hare", typeof(ButcherHareRecipe)); + //default crafting speed 1 + var craftingspeed = 1; + this.CraftMinutes = CreateCraftTimeValue(typeof(ButcherHareRecipe), this.UILink(), craftingspeed, typeof(SmallButcherySpeedSkill)); + CraftingComponent.AddRecipe(typeof(ButcheryTableObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/Recipe/ButcherTurkey.cs b/AutoGen/Recipe/ButcherTurkey.cs new file mode 100644 index 0000000..755f92b --- /dev/null +++ b/AutoGen/Recipe/ButcherTurkey.cs @@ -0,0 +1,35 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Skills; + using Eco.Shared.Utils; + using Eco.World; + using Eco.World.Blocks; + using Gameplay.Systems.TextLinks; + + [RequiresSkill(typeof(SmallButcherySkill), 1)] + public class ButcherTurkeyRecipe : Recipe + { + public ButcherTurkeyRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(2), + new CraftingElement(1), + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(SmallButcheryEfficiencySkill), 1, SmallButcheryEfficiencySkill.MultiplicativeStrategy), + }; + this.Initialize("Butcher Turkey", typeof(ButcherTurkeyRecipe)); + //default crafting speed 1 + var craftingspeed = 1; + this.CraftMinutes = CreateCraftTimeValue(typeof(ButcherTurkeyRecipe), this.UILink(), craftingspeed, typeof(SmallButcherySpeedSkill)); + CraftingComponent.AddRecipe(typeof(ButcheryTableObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/Recipe/ButcherWolf.cs b/AutoGen/Recipe/ButcherWolf.cs new file mode 100644 index 0000000..a5267ef --- /dev/null +++ b/AutoGen/Recipe/ButcherWolf.cs @@ -0,0 +1,35 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Skills; + using Eco.Shared.Utils; + using Eco.World; + using Eco.World.Blocks; + using Gameplay.Systems.TextLinks; + + [RequiresSkill(typeof(LargeButcherySkill), 2)] + public class ButcherWolfRecipe : Recipe + { + public ButcherWolfRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(4), + new CraftingElement(3), + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(LargeButcheryEfficiencySkill), 1, LargeButcheryEfficiencySkill.MultiplicativeStrategy), + }; + this.Initialize("Butcher Wolf", typeof(ButcherWolfRecipe)); + //default crafting speed 1.5f + var craftingspeed = 1.5f; + this.CraftMinutes = CreateCraftTimeValue(typeof(ButcherWolfRecipe), this.UILink(), craftingspeed, typeof(LargeButcherySpeedSkill)); + CraftingComponent.AddRecipe(typeof(ButcheryTableObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/Recipe/CampfireBison.cs b/AutoGen/Recipe/CampfireBison.cs new file mode 100644 index 0000000..68d0ff7 --- /dev/null +++ b/AutoGen/Recipe/CampfireBison.cs @@ -0,0 +1,35 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Skills; + using Eco.Shared.Utils; + using Eco.World; + using Eco.World.Blocks; + using Gameplay.Systems.TextLinks; + + [RequiresSkill(typeof(CampfireCookingSkill), 4)] + public class CampfireBisonRecipe : Recipe + { + public CampfireBisonRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(16), + new CraftingElement(7), + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(CampfireCookingEfficiencySkill), 1, CampfireCookingEfficiencySkill.MultiplicativeStrategy), + }; + this.Initialize("Campfire Bison", typeof(CampfireBisonRecipe)); + //default crafting speed 20 + var craftingspeed = 2; + this.CraftMinutes = CreateCraftTimeValue(typeof(CampfireBisonRecipe), this.UILink(), craftingspeed, typeof(CampfireCookingSpeedSkill)); + CraftingComponent.AddRecipe(typeof(CampfireObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/Recipe/CampfireElk.cs b/AutoGen/Recipe/CampfireElk.cs new file mode 100644 index 0000000..29989f0 --- /dev/null +++ b/AutoGen/Recipe/CampfireElk.cs @@ -0,0 +1,35 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Skills; + using Eco.Shared.Utils; + using Eco.World; + using Eco.World.Blocks; + using Gameplay.Systems.TextLinks; + + [RequiresSkill(typeof(CampfireCookingSkill), 2)] + public class CampfireElkRecipe : Recipe + { + public CampfireElkRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(7), + new CraftingElement(4), + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(CampfireCookingEfficiencySkill), 1, CampfireCookingEfficiencySkill.MultiplicativeStrategy), + }; + this.Initialize("Campfire Elk", typeof(CampfireElkRecipe)); + //default crafting speed 10 + var craftingspeed = 1.5f; + this.CraftMinutes = CreateCraftTimeValue(typeof(CampfireElkRecipe), this.UILink(), craftingspeed, typeof(CampfireCookingSpeedSkill)); + CraftingComponent.AddRecipe(typeof(CampfireObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/Recipe/CampfireFox.cs b/AutoGen/Recipe/CampfireFox.cs new file mode 100644 index 0000000..f61b172 --- /dev/null +++ b/AutoGen/Recipe/CampfireFox.cs @@ -0,0 +1,35 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Skills; + using Eco.Shared.Utils; + using Eco.World; + using Eco.World.Blocks; + using Gameplay.Systems.TextLinks; + + [RequiresSkill(typeof(CampfireCookingSkill), 3)] + public class CampfireFoxRecipe : Recipe + { + public CampfireFoxRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(2), + new CraftingElement(1), + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(CampfireCookingEfficiencySkill), 1, CampfireCookingEfficiencySkill.MultiplicativeStrategy), + }; + this.Initialize("Campfire Fox", typeof(CampfireFoxRecipe)); + //default crafting speed 4 + var craftingspeed = 1; + this.CraftMinutes = CreateCraftTimeValue(typeof(CampfireFoxRecipe), this.UILink(), craftingspeed, typeof(CampfireCookingSpeedSkill)); + CraftingComponent.AddRecipe(typeof(CampfireObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/Recipe/CampfireHare.cs b/AutoGen/Recipe/CampfireHare.cs new file mode 100644 index 0000000..439d15a --- /dev/null +++ b/AutoGen/Recipe/CampfireHare.cs @@ -0,0 +1,34 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Skills; + using Eco.Shared.Utils; + using Eco.World; + using Eco.World.Blocks; + using Gameplay.Systems.TextLinks; + + [RequiresSkill(typeof(CampfireCookingSkill), 1)] + public class CampfireHareRecipe : Recipe + { + public CampfireHareRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(1), + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(CampfireCookingEfficiencySkill), 1, CampfireCookingEfficiencySkill.MultiplicativeStrategy), + }; + this.Initialize("Campfire Hare", typeof(CampfireHareRecipe)); + //default crafting speed 1 + var craftingspeed = 0.5f; + this.CraftMinutes = CreateCraftTimeValue(typeof(CampfireHareRecipe), this.UILink(), craftingspeed, typeof(CampfireCookingSpeedSkill)); + CraftingComponent.AddRecipe(typeof(CampfireObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/Recipe/CampfireSalmon.cs b/AutoGen/Recipe/CampfireSalmon.cs new file mode 100644 index 0000000..c11a6cb --- /dev/null +++ b/AutoGen/Recipe/CampfireSalmon.cs @@ -0,0 +1,34 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Skills; + using Eco.Shared.Utils; + using Eco.World; + using Eco.World.Blocks; + using Gameplay.Systems.TextLinks; + + [RequiresSkill(typeof(CampfireCookingSkill), 2)] + public class CampfireSalmonRecipe : Recipe + { + public CampfireSalmonRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(2), + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(CampfireCookingEfficiencySkill), 1, CampfireCookingEfficiencySkill.MultiplicativeStrategy), + }; + this.Initialize("Campfire Salmon", typeof(CampfireSalmonRecipe)); + //default crafting speed 5 + var craftingspeed = 2; + this.CraftMinutes = CreateCraftTimeValue(typeof(CampfireSalmonRecipe), this.UILink(), craftingspeed, typeof(CampfireCookingSpeedSkill)); + CraftingComponent.AddRecipe(typeof(CampfireObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/Recipe/CampfireTrout.cs b/AutoGen/Recipe/CampfireTrout.cs new file mode 100644 index 0000000..e1b1a1f --- /dev/null +++ b/AutoGen/Recipe/CampfireTrout.cs @@ -0,0 +1,34 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Skills; + using Eco.Shared.Utils; + using Eco.World; + using Eco.World.Blocks; + using Gameplay.Systems.TextLinks; + + [RequiresSkill(typeof(CampfireCookingSkill), 1)] + public class CampfireTroutRecipe : Recipe + { + public CampfireTroutRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(1), + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(CampfireCookingEfficiencySkill), 1, CampfireCookingEfficiencySkill.MultiplicativeStrategy), + }; + this.Initialize("Campfire Trout", typeof(CampfireTroutRecipe)); + //default crafting speed 3 + var craftingspeed = 1.1f; + this.CraftMinutes = CreateCraftTimeValue(typeof(CampfireTroutRecipe), this.UILink(), craftingspeed, typeof(CampfireCookingSpeedSkill)); + CraftingComponent.AddRecipe(typeof(CampfireObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/Recipe/CampfireTuna.cs b/AutoGen/Recipe/CampfireTuna.cs new file mode 100644 index 0000000..761a49a --- /dev/null +++ b/AutoGen/Recipe/CampfireTuna.cs @@ -0,0 +1,34 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Skills; + using Eco.Shared.Utils; + using Eco.World; + using Eco.World.Blocks; + using Gameplay.Systems.TextLinks; + + [RequiresSkill(typeof(CampfireCookingSkill), 4)] + public class CampfireTunaRecipe : Recipe + { + public CampfireTunaRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(3), + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(CampfireCookingEfficiencySkill), 1, CampfireCookingEfficiencySkill.MultiplicativeStrategy), + }; + this.Initialize("Campfire Tuna", typeof(CampfireTunaRecipe)); + //default crafting speed 10 + var craftingspeed = 2.5f; + this.CraftMinutes = CreateCraftTimeValue(typeof(CampfireTunaRecipe), this.UILink(), craftingspeed, typeof(CampfireCookingSpeedSkill)); + CraftingComponent.AddRecipe(typeof(CampfireObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/Recipe/CampfireTurkey.cs b/AutoGen/Recipe/CampfireTurkey.cs new file mode 100644 index 0000000..7ac090a --- /dev/null +++ b/AutoGen/Recipe/CampfireTurkey.cs @@ -0,0 +1,35 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Skills; + using Eco.Shared.Utils; + using Eco.World; + using Eco.World.Blocks; + using Gameplay.Systems.TextLinks; + + [RequiresSkill(typeof(CampfireCookingSkill), 1)] + public class CampfireTurkeyRecipe : Recipe + { + public CampfireTurkeyRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(2), + new CraftingElement(1), + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(CampfireCookingEfficiencySkill), 1, CampfireCookingEfficiencySkill.MultiplicativeStrategy), + }; + this.Initialize("Campfire Turkey", typeof(CampfireTurkeyRecipe)); + //default crafting speed 5 + var craftingspeed = 1.2f; + this.CraftMinutes = CreateCraftTimeValue(typeof(CampfireTurkeyRecipe), this.UILink(), craftingspeed, typeof(CampfireCookingSpeedSkill)); + CraftingComponent.AddRecipe(typeof(CampfireObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/Recipe/CampfireWolf.cs b/AutoGen/Recipe/CampfireWolf.cs new file mode 100644 index 0000000..a77d08e --- /dev/null +++ b/AutoGen/Recipe/CampfireWolf.cs @@ -0,0 +1,35 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Skills; + using Eco.Shared.Utils; + using Eco.World; + using Eco.World.Blocks; + using Gameplay.Systems.TextLinks; + + [RequiresSkill(typeof(CampfireCookingSkill), 3)] + public class CampfireWolfRecipe : Recipe + { + public CampfireWolfRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(3), + new CraftingElement(2), + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(CampfireCookingEfficiencySkill), 1, CampfireCookingEfficiencySkill.MultiplicativeStrategy), + }; + this.Initialize("Campfire Wolf", typeof(CampfireWolfRecipe)); + //default crafting speed 2 + var craftingspeed = 0.5f; + this.CraftMinutes = CreateCraftTimeValue(typeof(CampfireWolfRecipe), this.UILink(), craftingspeed, typeof(CampfireCookingSpeedSkill)); + CraftingComponent.AddRecipe(typeof(CampfireObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/Recipe/CleanSalmon.cs b/AutoGen/Recipe/CleanSalmon.cs new file mode 100644 index 0000000..be5c0bc --- /dev/null +++ b/AutoGen/Recipe/CleanSalmon.cs @@ -0,0 +1,34 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Skills; + using Eco.Shared.Utils; + using Eco.World; + using Eco.World.Blocks; + using Gameplay.Systems.TextLinks; + + [RequiresSkill(typeof(SmallButcherySkill), 2)] + public class CleanSalmonRecipe : Recipe + { + public CleanSalmonRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(5), + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(SmallButcheryEfficiencySkill), 1, SmallButcheryEfficiencySkill.MultiplicativeStrategy), + }; + this.Initialize("Clean Salmon", typeof(CleanSalmonRecipe)); + //default crafting speed 1 + var craftingspeed = 1; + this.CraftMinutes = CreateCraftTimeValue(typeof(CleanSalmonRecipe), this.UILink(), craftingspeed, typeof(SmallButcherySpeedSkill)); + CraftingComponent.AddRecipe(typeof(ButcheryTableObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/Recipe/CleanTrout.cs b/AutoGen/Recipe/CleanTrout.cs new file mode 100644 index 0000000..1f01b2b --- /dev/null +++ b/AutoGen/Recipe/CleanTrout.cs @@ -0,0 +1,34 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Skills; + using Eco.Shared.Utils; + using Eco.World; + using Eco.World.Blocks; + using Gameplay.Systems.TextLinks; + + [RequiresSkill(typeof(SmallButcherySkill), 1)] + public class CleanTroutRecipe : Recipe + { + public CleanTroutRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(3), + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(SmallButcheryEfficiencySkill), 1, SmallButcheryEfficiencySkill.MultiplicativeStrategy), + }; + this.Initialize("Clean Trout", typeof(CleanTroutRecipe)); + //default crafting speed 1.5 + var craftingspeed = 1; + this.CraftMinutes = CreateCraftTimeValue(typeof(CleanTroutRecipe), this.UILink(), craftingspeed, typeof(SmallButcherySpeedSkill)); + CraftingComponent.AddRecipe(typeof(ButcheryTableObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/Recipe/CleanTuna.cs b/AutoGen/Recipe/CleanTuna.cs new file mode 100644 index 0000000..6b47383 --- /dev/null +++ b/AutoGen/Recipe/CleanTuna.cs @@ -0,0 +1,34 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Skills; + using Eco.Shared.Utils; + using Eco.World; + using Eco.World.Blocks; + using Gameplay.Systems.TextLinks; + + [RequiresSkill(typeof(SmallButcherySkill), 3)] + public class CleanTunaRecipe : Recipe + { + public CleanTunaRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(10), + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(SmallButcheryEfficiencySkill), 1, SmallButcheryEfficiencySkill.MultiplicativeStrategy), + }; + this.Initialize("Clean Tuna", typeof(CleanTunaRecipe)); + //default crafting speed 2 + var craftingspeed = 1; + this.CraftMinutes = CreateCraftTimeValue(typeof(CleanTunaRecipe), this.UILink(), craftingspeed, typeof(SmallButcherySpeedSkill)); + CraftingComponent.AddRecipe(typeof(ButcheryTableObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/Recipe/ExoticFruitSalad.cs b/AutoGen/Recipe/ExoticFruitSalad.cs new file mode 100644 index 0000000..4dabf17 --- /dev/null +++ b/AutoGen/Recipe/ExoticFruitSalad.cs @@ -0,0 +1,35 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Skills; + using Eco.Shared.Utils; + using Eco.World; + using Eco.World.Blocks; + using Gameplay.Systems.TextLinks; + + [RequiresSkill(typeof(HomeCookingSkill), 3)] + public class ExoticFruitSaladRecipe : Recipe + { + public ExoticFruitSaladRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(1), + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(HomeCookingEfficiencySkill), 15, HomeCookingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(HomeCookingEfficiencySkill), 20, HomeCookingEfficiencySkill.MultiplicativeStrategy), + }; + this.Initialize("Exotic Fruit Salad", typeof(ExoticFruitSaladRecipe)); + //default crafting speed 2 + var craftingspeed = 1.5f; + this.CraftMinutes = CreateCraftTimeValue(typeof(ExoticFruitSaladRecipe), this.UILink(), craftingspeed, typeof(HomeCookingSpeedSkill)); + CraftingComponent.AddRecipe(typeof(CastIronStoveObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/Recipe/ExoticSalad.cs b/AutoGen/Recipe/ExoticSalad.cs new file mode 100644 index 0000000..91c7163 --- /dev/null +++ b/AutoGen/Recipe/ExoticSalad.cs @@ -0,0 +1,36 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Skills; + using Eco.Shared.Utils; + using Eco.World; + using Eco.World.Blocks; + using Gameplay.Systems.TextLinks; + + [RequiresSkill(typeof(HomeCookingSkill), 2)] + public class ExoticSaladRecipe : Recipe + { + public ExoticSaladRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(1), + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(HomeCookingEfficiencySkill), 10, HomeCookingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(HomeCookingEfficiencySkill), 10, HomeCookingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(HomeCookingEfficiencySkill), 20, HomeCookingEfficiencySkill.MultiplicativeStrategy), + }; + this.Initialize("Exotic Salad", typeof(ExoticSaladRecipe)); + //default crafting speed 2 + var craftingspeed = 1.5f; + this.CraftMinutes = CreateCraftTimeValue(typeof(ExoticSaladRecipe), this.UILink(), craftingspeed, typeof(HomeCookingSpeedSkill)); + CraftingComponent.AddRecipe(typeof(CastIronStoveObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/Recipe/ExoticVegetableMedley.cs b/AutoGen/Recipe/ExoticVegetableMedley.cs new file mode 100644 index 0000000..ec9b4c0 --- /dev/null +++ b/AutoGen/Recipe/ExoticVegetableMedley.cs @@ -0,0 +1,36 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Skills; + using Eco.Shared.Utils; + using Eco.World; + using Eco.World.Blocks; + using Gameplay.Systems.TextLinks; + + [RequiresSkill(typeof(HomeCookingSkill), 3)] + public class ExoticVegetableMedleyRecipe : Recipe + { + public ExoticVegetableMedleyRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(1), + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(HomeCookingEfficiencySkill), 20, HomeCookingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(HomeCookingEfficiencySkill), 15, HomeCookingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(HomeCookingEfficiencySkill), 10, HomeCookingEfficiencySkill.MultiplicativeStrategy), + }; + this.Initialize("Exotic Vegetable Medley", typeof(ExoticVegetableMedleyRecipe)); + //default crafting speed 2 + var craftingspeed = 1.5f; + this.CraftMinutes = CreateCraftTimeValue(typeof(ExoticVegetableMedleyRecipe), this.UILink(), craftingspeed, typeof(HomeCookingSpeedSkill)); + CraftingComponent.AddRecipe(typeof(CastIronStoveObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/Recipe/ForestSalad.cs b/AutoGen/Recipe/ForestSalad.cs new file mode 100644 index 0000000..8d2c896 --- /dev/null +++ b/AutoGen/Recipe/ForestSalad.cs @@ -0,0 +1,36 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Skills; + using Eco.Shared.Utils; + using Eco.World; + using Eco.World.Blocks; + using Gameplay.Systems.TextLinks; + + [RequiresSkill(typeof(HomeCookingSkill), 1)] + public class ForestSaladRecipe : Recipe + { + public ForestSaladRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(1), + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(HomeCookingEfficiencySkill), 20, HomeCookingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(HomeCookingEfficiencySkill), 30, HomeCookingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(HomeCookingEfficiencySkill), 20, HomeCookingEfficiencySkill.MultiplicativeStrategy), + }; + this.Initialize("Forest Salad", typeof(ForestSaladRecipe)); + //default crafting speed 2 + var craftingspeed = 1.5f; + this.CraftMinutes = CreateCraftTimeValue(typeof(ForestSaladRecipe), this.UILink(), craftingspeed, typeof(HomeCookingSpeedSkill)); + CraftingComponent.AddRecipe(typeof(CastIronStoveObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/Recipe/GrasslandSalad.cs b/AutoGen/Recipe/GrasslandSalad.cs new file mode 100644 index 0000000..d2e6d68 --- /dev/null +++ b/AutoGen/Recipe/GrasslandSalad.cs @@ -0,0 +1,36 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Skills; + using Eco.Shared.Utils; + using Eco.World; + using Eco.World.Blocks; + using Gameplay.Systems.TextLinks; + + [RequiresSkill(typeof(HomeCookingSkill), 1)] + public class GrasslandSaladRecipe : Recipe + { + public GrasslandSaladRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(1), + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(HomeCookingEfficiencySkill), 15, HomeCookingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(HomeCookingEfficiencySkill), 15, HomeCookingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(HomeCookingEfficiencySkill), 15, HomeCookingEfficiencySkill.MultiplicativeStrategy), + }; + this.Initialize("Grassland Salad", typeof(GrasslandSaladRecipe)); + //default crafting speed 2 + var craftingspeed = 1.5f; + this.CraftMinutes = CreateCraftTimeValue(typeof(GrasslandSaladRecipe), this.UILink(), craftingspeed, typeof(HomeCookingSpeedSkill)); + CraftingComponent.AddRecipe(typeof(CastIronStoveObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/Recipe/GrindStoneToDirt.cs b/AutoGen/Recipe/GrindStoneToDirt.cs new file mode 100644 index 0000000..78bda22 --- /dev/null +++ b/AutoGen/Recipe/GrindStoneToDirt.cs @@ -0,0 +1,32 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Skills; + using Eco.Shared.Utils; + using Eco.World; + using Eco.World.Blocks; + using Gameplay.Systems.TextLinks; + + [RequiresSkill(typeof(MortarProductionSkill), 1)] + public class GrindStoneToDirtRecipe : Recipe + { + public GrindStoneToDirtRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(2), + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(MortarProductionEfficiencySkill), 4, MortarProductionEfficiencySkill.MultiplicativeStrategy), + }; + this.Initialize("Grind Stone To Dirt", typeof(GrindStoneToDirtRecipe)); + this.CraftMinutes = CreateCraftTimeValue(typeof(GrindStoneToDirtRecipe), this.UILink(), 3, typeof(MortarProductionSpeedSkill)); + CraftingComponent.AddRecipe(typeof(MasonryTableObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/Recipe/GrindStoneToSand.cs b/AutoGen/Recipe/GrindStoneToSand.cs new file mode 100644 index 0000000..d9449a2 --- /dev/null +++ b/AutoGen/Recipe/GrindStoneToSand.cs @@ -0,0 +1,32 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Skills; + using Eco.Shared.Utils; + using Eco.World; + using Eco.World.Blocks; + using Gameplay.Systems.TextLinks; + + [RequiresSkill(typeof(MortarProductionSkill), 1)] + public class GrindStoneToSandRecipe : Recipe + { + public GrindStoneToSandRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(1), + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(MortarProductionEfficiencySkill), 5, MortarProductionEfficiencySkill.MultiplicativeStrategy), + }; + this.Initialize("Grind Stone To Sand", typeof(GrindStoneToSandRecipe)); + this.CraftMinutes = CreateCraftTimeValue(typeof(GrindStoneToSandRecipe), this.UILink(), 5, typeof(MortarProductionSpeedSkill)); + CraftingComponent.AddRecipe(typeof(MasonryTableObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/Recipe/MassCutWire.cs b/AutoGen/Recipe/MassCutWire.cs new file mode 100644 index 0000000..4412617 --- /dev/null +++ b/AutoGen/Recipe/MassCutWire.cs @@ -0,0 +1,32 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Skills; + using Eco.Shared.Utils; + using Eco.World; + using Eco.World.Blocks; + using Gameplay.Systems.TextLinks; + + [RequiresSkill(typeof(IndustrialEngineeringSkill), 2)] + public class MassCutWireRecipe : Recipe + { + public MassCutWireRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(20), + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(IndustrialEngineeringEfficiencySkill), 20, IndustrialEngineeringEfficiencySkill.MultiplicativeStrategy), + }; + this.Initialize("Mass Cut Wire", typeof(MassCutWireRecipe)); + this.CraftMinutes = CreateCraftTimeValue(typeof(MassCutWireRecipe), this.UILink(), 5, typeof(IndustrialEngineeringSpeedSkill)); + CraftingComponent.AddRecipe(typeof(FactoryObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/Recipe/MixedFruitSalad.cs b/AutoGen/Recipe/MixedFruitSalad.cs new file mode 100644 index 0000000..40c291f --- /dev/null +++ b/AutoGen/Recipe/MixedFruitSalad.cs @@ -0,0 +1,35 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Skills; + using Eco.Shared.Utils; + using Eco.World; + using Eco.World.Blocks; + using Gameplay.Systems.TextLinks; + + [RequiresSkill(typeof(HomeCookingSkill), 2)] + public class MixedFruitSaladRecipe : Recipe + { + public MixedFruitSaladRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(1), + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(HomeCookingEfficiencySkill), 40, HomeCookingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(HomeCookingEfficiencySkill), 20, HomeCookingEfficiencySkill.MultiplicativeStrategy), + }; + this.Initialize("Mixed Fruit Salad", typeof(MixedFruitSaladRecipe)); + //default crafting speed 2 + var craftingspeed = 1.5f; + this.CraftMinutes = CreateCraftTimeValue(typeof(MixedFruitSaladRecipe), this.UILink(), craftingspeed, typeof(HomeCookingSpeedSkill)); + CraftingComponent.AddRecipe(typeof(CastIronStoveObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/Recipe/MixedSalad.cs b/AutoGen/Recipe/MixedSalad.cs new file mode 100644 index 0000000..288a333 --- /dev/null +++ b/AutoGen/Recipe/MixedSalad.cs @@ -0,0 +1,36 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Skills; + using Eco.Shared.Utils; + using Eco.World; + using Eco.World.Blocks; + using Gameplay.Systems.TextLinks; + + [RequiresSkill(typeof(HomeCookingSkill), 2)] + public class MixedSaladRecipe : Recipe + { + public MixedSaladRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(1), + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(HomeCookingEfficiencySkill), 20, HomeCookingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(HomeCookingEfficiencySkill), 15, HomeCookingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(HomeCookingEfficiencySkill), 15, HomeCookingEfficiencySkill.MultiplicativeStrategy), + }; + this.Initialize("Mixed Salad", typeof(MixedSaladRecipe)); + //default crafting speed 2 + var craftingspeed = 1.5f; + this.CraftMinutes = CreateCraftTimeValue(typeof(MixedSaladRecipe), this.UILink(), craftingspeed, typeof(HomeCookingSpeedSkill)); + CraftingComponent.AddRecipe(typeof(CastIronStoveObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/Recipe/MixedVegetableMedley.cs b/AutoGen/Recipe/MixedVegetableMedley.cs new file mode 100644 index 0000000..05fa849 --- /dev/null +++ b/AutoGen/Recipe/MixedVegetableMedley.cs @@ -0,0 +1,35 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Skills; + using Eco.Shared.Utils; + using Eco.World; + using Eco.World.Blocks; + using Gameplay.Systems.TextLinks; + + [RequiresSkill(typeof(HomeCookingSkill), 2)] + public class MixedVegetableMedleyRecipe : Recipe + { + public MixedVegetableMedleyRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(1), + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(HomeCookingEfficiencySkill), 15, HomeCookingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(HomeCookingEfficiencySkill), 15, HomeCookingEfficiencySkill.MultiplicativeStrategy), + }; + this.Initialize("Mixed Vegetable Medley", typeof(MixedVegetableMedleyRecipe)); + //default crafting speed 2 + var craftingspeed = 1.5f; + this.CraftMinutes = CreateCraftTimeValue(typeof(MixedVegetableMedleyRecipe), this.UILink(), craftingspeed, typeof(HomeCookingSpeedSkill)); + CraftingComponent.AddRecipe(typeof(CastIronStoveObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/Recipe/SmeltCopper.cs b/AutoGen/Recipe/SmeltCopper.cs new file mode 100644 index 0000000..ba2e442 --- /dev/null +++ b/AutoGen/Recipe/SmeltCopper.cs @@ -0,0 +1,32 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Skills; + using Eco.Shared.Utils; + using Eco.World; + using Eco.World.Blocks; + using Gameplay.Systems.TextLinks; + + [RequiresSkill(typeof(BasicSmeltingSkill), 2)] + public class SmeltCopperRecipe : Recipe + { + public SmeltCopperRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(1), + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(BasicSmeltingEfficiencySkill), 20, BasicSmeltingEfficiencySkill.MultiplicativeStrategy), + }; + this.Initialize("Smelt Copper", typeof(SmeltCopperRecipe)); + this.CraftMinutes = CreateCraftTimeValue(typeof(SmeltCopperRecipe), this.UILink(), 0.5f, typeof(BasicSmeltingSpeedSkill)); + CraftingComponent.AddRecipe(typeof(BlastFurnaceObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/Recipe/SmeltGold.cs b/AutoGen/Recipe/SmeltGold.cs new file mode 100644 index 0000000..39e9e4a --- /dev/null +++ b/AutoGen/Recipe/SmeltGold.cs @@ -0,0 +1,32 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Skills; + using Eco.Shared.Utils; + using Eco.World; + using Eco.World.Blocks; + using Gameplay.Systems.TextLinks; + + [RequiresSkill(typeof(BasicSmeltingSkill), 4)] + public class SmeltGoldRecipe : Recipe + { + public SmeltGoldRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(1), + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(BasicSmeltingEfficiencySkill), 20, BasicSmeltingEfficiencySkill.MultiplicativeStrategy), + }; + this.Initialize("Smelt Gold", typeof(SmeltGoldRecipe)); + this.CraftMinutes = CreateCraftTimeValue(typeof(SmeltGoldRecipe), this.UILink(), 0.5f, typeof(BasicSmeltingSpeedSkill)); + CraftingComponent.AddRecipe(typeof(BlastFurnaceObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/Recipe/SmeltIron.cs b/AutoGen/Recipe/SmeltIron.cs new file mode 100644 index 0000000..3da67d3 --- /dev/null +++ b/AutoGen/Recipe/SmeltIron.cs @@ -0,0 +1,32 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Skills; + using Eco.Shared.Utils; + using Eco.World; + using Eco.World.Blocks; + using Gameplay.Systems.TextLinks; + + [RequiresSkill(typeof(BasicSmeltingSkill), 3)] + public class SmeltIronRecipe : Recipe + { + public SmeltIronRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(1), + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(BasicSmeltingEfficiencySkill), 20, BasicSmeltingEfficiencySkill.MultiplicativeStrategy), + }; + this.Initialize("Smelt Iron", typeof(SmeltIronRecipe)); + this.CraftMinutes = CreateCraftTimeValue(typeof(SmeltIronRecipe), this.UILink(), 0.5f, typeof(BasicSmeltingSpeedSkill)); + CraftingComponent.AddRecipe(typeof(BlastFurnaceObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/Tool/UpgradeIronAx.cs b/AutoGen/Tool/UpgradeIronAx.cs new file mode 100644 index 0000000..27d374d --- /dev/null +++ b/AutoGen/Tool/UpgradeIronAx.cs @@ -0,0 +1,43 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Players; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.World; + using Eco.World.Blocks; + using Eco.Gameplay.Pipes; + + [RequiresSkill(typeof(SteelworkingSkill), 1)] + + public partial class UpgradeIronAxeRecipe : Recipe + { + public UpgradeIronAxeRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(1), + new CraftingElement(typeof(SteelworkingEfficiencySkill), 20 ,SteelworkingEfficiencySkill.MultiplicativeStrategy) + }; + this.CraftMinutes = new MultiDynamicValue(MultiDynamicOps.Multiply + , CreateCraftTimeValue(typeof(UpgradeIronAxeRecipe), Item.Get().UILink(), .5f, typeof(SteelworkingSpeedSkill)) + + ); + this.Initialize("Upgrade Iron Axe", typeof(UpgradeIronAxeRecipe)); + + CraftingComponent.AddRecipe(typeof(AnvilObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/Tool/UpgradeIronHammer.cs b/AutoGen/Tool/UpgradeIronHammer.cs new file mode 100644 index 0000000..d782c7f --- /dev/null +++ b/AutoGen/Tool/UpgradeIronHammer.cs @@ -0,0 +1,42 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Players; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.World; + using Eco.World.Blocks; + using Eco.Gameplay.Pipes; + + [RequiresSkill(typeof(SteelworkingSkill), 4)] + public partial class UpgradeIronHammerRecipe : Recipe + { + public UpgradeIronHammerRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(1), + new CraftingElement(typeof(SteelworkingEfficiencySkill), 20 ,SteelworkingEfficiencySkill.MultiplicativeStrategy) + }; + this.CraftMinutes = new MultiDynamicValue(MultiDynamicOps.Multiply + , CreateCraftTimeValue(typeof(UpgradeIronHammerRecipe), Item.Get().UILink(), .5f, typeof(SteelworkingSpeedSkill)) + + ); + this.Initialize("Upgrade Iron Hammer", typeof(UpgradeIronHammerRecipe)); + + CraftingComponent.AddRecipe(typeof(AnvilObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/Tool/UpgradeIronHoe.cs b/AutoGen/Tool/UpgradeIronHoe.cs new file mode 100644 index 0000000..16f1351 --- /dev/null +++ b/AutoGen/Tool/UpgradeIronHoe.cs @@ -0,0 +1,42 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Players; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.World; + using Eco.World.Blocks; + using Eco.Gameplay.Pipes; + + [RequiresSkill(typeof(SteelworkingSkill), 3)] + public partial class UpgradeIronHoeRecipe : Recipe + { + public UpgradeIronHoeRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(1), + new CraftingElement(typeof(SteelworkingEfficiencySkill), 20 ,SteelworkingEfficiencySkill.MultiplicativeStrategy) + }; + this.CraftMinutes = new MultiDynamicValue(MultiDynamicOps.Multiply + , CreateCraftTimeValue(typeof(UpgradeIronHoeRecipe), Item.Get().UILink(), .5f, typeof(SteelworkingSpeedSkill)) + + ); + this.Initialize("Upgrade Iron Hoe", typeof(UpgradeIronHoeRecipe)); + + CraftingComponent.AddRecipe(typeof(AnvilObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/Tool/UpgradeIronPickaxe.cs b/AutoGen/Tool/UpgradeIronPickaxe.cs new file mode 100644 index 0000000..1b64cd7 --- /dev/null +++ b/AutoGen/Tool/UpgradeIronPickaxe.cs @@ -0,0 +1,42 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Players; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.World; + using Eco.World.Blocks; + using Eco.Gameplay.Pipes; + + [RequiresSkill(typeof(SteelworkingSkill), 1)] + public partial class UpgradeIronPickaxeRecipe : Recipe + { + public UpgradeIronPickaxeRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(1), + new CraftingElement(typeof(SteelworkingEfficiencySkill), 20 ,SteelworkingEfficiencySkill.MultiplicativeStrategy) + }; + this.CraftMinutes = new MultiDynamicValue(MultiDynamicOps.Multiply + , CreateCraftTimeValue(typeof(UpgradeIronPickaxeRecipe), Item.Get().UILink(), .5f, typeof(SteelworkingSpeedSkill)) + + ); + this.Initialize("Upgrade Iron Pickaxe", typeof(UpgradeIronPickaxeRecipe)); + + CraftingComponent.AddRecipe(typeof(AnvilObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/Tool/UpgradeIronScythe.cs b/AutoGen/Tool/UpgradeIronScythe.cs new file mode 100644 index 0000000..4b28eda --- /dev/null +++ b/AutoGen/Tool/UpgradeIronScythe.cs @@ -0,0 +1,42 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Players; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.World; + using Eco.World.Blocks; + using Eco.Gameplay.Pipes; + + [RequiresSkill(typeof(SteelworkingSkill), 3)] + public partial class UpgradeIronScytheRecipe : Recipe + { + public UpgradeIronScytheRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(1), + new CraftingElement(typeof(SteelworkingEfficiencySkill), 20 ,SteelworkingEfficiencySkill.MultiplicativeStrategy) + }; + this.CraftMinutes = new MultiDynamicValue(MultiDynamicOps.Multiply + , CreateCraftTimeValue(typeof(UpgradeIronScytheRecipe), Item.Get().UILink(), .5f, typeof(SteelworkingSpeedSkill)) + + ); + this.Initialize("Upgrade Iron Scythe", typeof(UpgradeIronScytheRecipe)); + + CraftingComponent.AddRecipe(typeof(AnvilObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/Tool/UpgradeIronShovel.cs b/AutoGen/Tool/UpgradeIronShovel.cs new file mode 100644 index 0000000..686c282 --- /dev/null +++ b/AutoGen/Tool/UpgradeIronShovel.cs @@ -0,0 +1,42 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Players; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.World; + using Eco.World.Blocks; + using Eco.Gameplay.Pipes; + + [RequiresSkill(typeof(SteelworkingSkill), 2)] + public partial class UpgradeIronShovelRecipe : Recipe + { + public UpgradeIronShovelRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(1), + new CraftingElement(typeof(SteelworkingEfficiencySkill), 20 ,SteelworkingEfficiencySkill.MultiplicativeStrategy) + }; + this.CraftMinutes = new MultiDynamicValue(MultiDynamicOps.Multiply + , CreateCraftTimeValue(typeof(UpgradeIronShovelRecipe), Item.Get().UILink(), .5f, typeof(SteelworkingSpeedSkill)) + + ); + this.Initialize("Upgrade Iron Shovel", typeof(UpgradeIronShovelRecipe)); + + CraftingComponent.AddRecipe(typeof(AnvilObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/Tool/UpgradeSteelAx.cs b/AutoGen/Tool/UpgradeSteelAx.cs new file mode 100644 index 0000000..dd72516 --- /dev/null +++ b/AutoGen/Tool/UpgradeSteelAx.cs @@ -0,0 +1,42 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Players; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.World; + using Eco.World.Blocks; + using Eco.Gameplay.Pipes; + + [RequiresSkill(typeof(SteelworkingSkill), 3)] + public partial class UpgradeSteelAxeRecipe : Recipe + { + public UpgradeSteelAxeRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(1), + new CraftingElement(typeof(SteelworkingEfficiencySkill), 20 ,SteelworkingEfficiencySkill.MultiplicativeStrategy) + }; + this.CraftMinutes = new MultiDynamicValue(MultiDynamicOps.Multiply + , CreateCraftTimeValue(typeof(UpgradeSteelAxeRecipe), Item.Get().UILink(), .5f, typeof(SteelworkingSpeedSkill)) + + ); + this.Initialize("Upgrade Steel Axe", typeof(UpgradeSteelAxeRecipe)); + + CraftingComponent.AddRecipe(typeof(FactoryObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/Tool/UpgradeSteelHammer.cs b/AutoGen/Tool/UpgradeSteelHammer.cs new file mode 100644 index 0000000..b98fe64 --- /dev/null +++ b/AutoGen/Tool/UpgradeSteelHammer.cs @@ -0,0 +1,42 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Players; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.World; + using Eco.World.Blocks; + using Eco.Gameplay.Pipes; + + [RequiresSkill(typeof(SteelworkingSkill), 3)] + public partial class UpgradeSteelHammerRecipe : Recipe + { + public UpgradeSteelHammerRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(1), + new CraftingElement(typeof(SteelworkingEfficiencySkill), 20 ,SteelworkingEfficiencySkill.MultiplicativeStrategy) + }; + this.CraftMinutes = new MultiDynamicValue(MultiDynamicOps.Multiply + , CreateCraftTimeValue(typeof(UpgradeSteelHammerRecipe), Item.Get().UILink(), .5f, typeof(SteelworkingSpeedSkill)) + + ); + this.Initialize("Upgrade Steel Hammer", typeof(UpgradeSteelHammerRecipe)); + + CraftingComponent.AddRecipe(typeof(FactoryObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/Tool/UpgradeSteelHoe.cs b/AutoGen/Tool/UpgradeSteelHoe.cs new file mode 100644 index 0000000..6a04bfc --- /dev/null +++ b/AutoGen/Tool/UpgradeSteelHoe.cs @@ -0,0 +1,42 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Players; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.World; + using Eco.World.Blocks; + using Eco.Gameplay.Pipes; + + [RequiresSkill(typeof(SteelworkingSkill), 3)] + public partial class UpgradeSteelHoeRecipe : Recipe + { + public UpgradeSteelHoeRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(1), + new CraftingElement(typeof(SteelworkingEfficiencySkill), 20 ,SteelworkingEfficiencySkill.MultiplicativeStrategy) + }; + this.CraftMinutes = new MultiDynamicValue(MultiDynamicOps.Multiply + , CreateCraftTimeValue(typeof(UpgradeSteelHoeRecipe), Item.Get().UILink(), .5f, typeof(SteelworkingSpeedSkill)) + + ); + this.Initialize("Upgrade Steel Hoe", typeof(UpgradeSteelHoeRecipe)); + + CraftingComponent.AddRecipe(typeof(FactoryObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/Tool/UpgradeSteelPickaxe.cs b/AutoGen/Tool/UpgradeSteelPickaxe.cs new file mode 100644 index 0000000..b8b8704 --- /dev/null +++ b/AutoGen/Tool/UpgradeSteelPickaxe.cs @@ -0,0 +1,42 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Players; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.World; + using Eco.World.Blocks; + using Eco.Gameplay.Pipes; + + [RequiresSkill(typeof(SteelworkingSkill), 3)] + public partial class UpgradeSteelPickaxeRecipe : Recipe + { + public UpgradeSteelPickaxeRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(1), + new CraftingElement(typeof(SteelworkingEfficiencySkill), 20 ,SteelworkingEfficiencySkill.MultiplicativeStrategy) + }; + this.CraftMinutes = new MultiDynamicValue(MultiDynamicOps.Multiply + , CreateCraftTimeValue(typeof(UpgradeSteelPickaxeRecipe), Item.Get().UILink(), .5f, typeof(SteelworkingSpeedSkill)) + + ); + this.Initialize("Upgrade Steel Pickaxe", typeof(UpgradeSteelPickaxeRecipe)); + + CraftingComponent.AddRecipe(typeof(FactoryObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/Tool/UpgradeSteelScythe.cs b/AutoGen/Tool/UpgradeSteelScythe.cs new file mode 100644 index 0000000..a17f107 --- /dev/null +++ b/AutoGen/Tool/UpgradeSteelScythe.cs @@ -0,0 +1,42 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Players; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.World; + using Eco.World.Blocks; + using Eco.Gameplay.Pipes; + + [RequiresSkill(typeof(SteelworkingSkill), 3)] + public partial class UpgradeSteelScytheRecipe : Recipe + { + public UpgradeSteelScytheRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(1), + new CraftingElement(typeof(SteelworkingEfficiencySkill), 20 ,SteelworkingEfficiencySkill.MultiplicativeStrategy) + }; + this.CraftMinutes = new MultiDynamicValue(MultiDynamicOps.Multiply + , CreateCraftTimeValue(typeof(UpgradeSteelScytheRecipe), Item.Get().UILink(), .5f, typeof(SteelworkingSpeedSkill)) + + ); + this.Initialize("Upgrade Steel Scythe", typeof(UpgradeSteelScytheRecipe)); + + CraftingComponent.AddRecipe(typeof(FactoryObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/Tool/UpgradeSteelShovel.cs b/AutoGen/Tool/UpgradeSteelShovel.cs new file mode 100644 index 0000000..6ce276c --- /dev/null +++ b/AutoGen/Tool/UpgradeSteelShovel.cs @@ -0,0 +1,42 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Players; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.World; + using Eco.World.Blocks; + using Eco.Gameplay.Pipes; + + [RequiresSkill(typeof(SteelworkingSkill), 3)] + public partial class UpgradeSteelShovelRecipe : Recipe + { + public UpgradeSteelShovelRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(1), + new CraftingElement(typeof(SteelworkingEfficiencySkill), 20 ,SteelworkingEfficiencySkill.MultiplicativeStrategy) + }; + this.CraftMinutes = new MultiDynamicValue(MultiDynamicOps.Multiply + , CreateCraftTimeValue(typeof(UpgradeSteelShovelRecipe), Item.Get().UILink(), .5f, typeof(SteelworkingSpeedSkill)) + + ); + this.Initialize("Upgrade Steel Shovel", typeof(UpgradeSteelShovelRecipe)); + + CraftingComponent.AddRecipe(typeof(FactoryObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/Tool/UpgradeStoneAx.cs b/AutoGen/Tool/UpgradeStoneAx.cs new file mode 100644 index 0000000..c58744f --- /dev/null +++ b/AutoGen/Tool/UpgradeStoneAx.cs @@ -0,0 +1,42 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Players; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.World; + using Eco.World.Blocks; + using Eco.Gameplay.Pipes; + + [RequiresSkill(typeof(MetalworkingSkill), 1)] + public partial class UpgradeStoneAxeRecipe : Recipe + { + public UpgradeStoneAxeRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(1), + new CraftingElement(typeof(MetalworkingEfficiencySkill), 20 ,MetalworkingEfficiencySkill.MultiplicativeStrategy) + }; + this.CraftMinutes = new MultiDynamicValue(MultiDynamicOps.Multiply + , CreateCraftTimeValue(typeof(UpgradeStoneAxeRecipe), Item.Get().UILink(), .5f, typeof(MetalworkingSpeedSkill)) + + ); + this.Initialize("Upgrade Stone Axe", typeof(UpgradeStoneAxeRecipe)); + + CraftingComponent.AddRecipe(typeof(AnvilObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/Tool/UpgradeStoneHammer.cs b/AutoGen/Tool/UpgradeStoneHammer.cs new file mode 100644 index 0000000..1f8e996 --- /dev/null +++ b/AutoGen/Tool/UpgradeStoneHammer.cs @@ -0,0 +1,42 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Players; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.World; + using Eco.World.Blocks; + using Eco.Gameplay.Pipes; + + [RequiresSkill(typeof(MetalworkingSkill), 4)] + public partial class UpgradeStoneHammerRecipe : Recipe + { + public UpgradeStoneHammerRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(1), + new CraftingElement(typeof(MetalworkingEfficiencySkill), 20 ,MetalworkingEfficiencySkill.MultiplicativeStrategy) + }; + this.CraftMinutes = new MultiDynamicValue(MultiDynamicOps.Multiply + , CreateCraftTimeValue(typeof(UpgradeStoneHammerRecipe), Item.Get().UILink(), .5f, typeof(MetalworkingSpeedSkill)) + + ); + this.Initialize("Upgrade Stone Hammer", typeof(UpgradeStoneHammerRecipe)); + + CraftingComponent.AddRecipe(typeof(AnvilObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/Tool/UpgradeStonePickaxe.cs b/AutoGen/Tool/UpgradeStonePickaxe.cs new file mode 100644 index 0000000..e6ccbbc --- /dev/null +++ b/AutoGen/Tool/UpgradeStonePickaxe.cs @@ -0,0 +1,42 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Players; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.World; + using Eco.World.Blocks; + using Eco.Gameplay.Pipes; + + [RequiresSkill(typeof(MetalworkingSkill), 1)] + public partial class UpgradeStonePickaxeRecipe : Recipe + { + public UpgradeStonePickaxeRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(1), + new CraftingElement(typeof(MetalworkingEfficiencySkill), 20 ,MetalworkingEfficiencySkill.MultiplicativeStrategy) + }; + this.CraftMinutes = new MultiDynamicValue(MultiDynamicOps.Multiply + , CreateCraftTimeValue(typeof(UpgradeStonePickaxeRecipe), Item.Get().UILink(), .5f, typeof(MetalworkingSpeedSkill)) + + ); + this.Initialize("Upgrade Stone Pickaxe", typeof(UpgradeStonePickaxeRecipe)); + + CraftingComponent.AddRecipe(typeof(AnvilObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/Tool/UpgradeStoneScythe.cs b/AutoGen/Tool/UpgradeStoneScythe.cs new file mode 100644 index 0000000..a2390aa --- /dev/null +++ b/AutoGen/Tool/UpgradeStoneScythe.cs @@ -0,0 +1,42 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Players; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.World; + using Eco.World.Blocks; + using Eco.Gameplay.Pipes; + + [RequiresSkill(typeof(MetalworkingSkill), 3)] + public partial class UpgradeStoneScytheRecipe : Recipe + { + public UpgradeStoneScytheRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(1), + new CraftingElement(typeof(MetalworkingEfficiencySkill), 20 ,MetalworkingEfficiencySkill.MultiplicativeStrategy) + }; + this.CraftMinutes = new MultiDynamicValue(MultiDynamicOps.Multiply + , CreateCraftTimeValue(typeof(UpgradeStoneScytheRecipe), Item.Get().UILink(), .5f, typeof(MetalworkingSpeedSkill)) + + ); + this.Initialize("Upgrade Stone Scythe", typeof(UpgradeStoneScytheRecipe)); + + CraftingComponent.AddRecipe(typeof(AnvilObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/Tool/UpgradeWoodenHoe.cs b/AutoGen/Tool/UpgradeWoodenHoe.cs new file mode 100644 index 0000000..553f3ab --- /dev/null +++ b/AutoGen/Tool/UpgradeWoodenHoe.cs @@ -0,0 +1,42 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Players; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.World; + using Eco.World.Blocks; + using Eco.Gameplay.Pipes; + + [RequiresSkill(typeof(MetalworkingSkill), 3)] + public partial class UpgradeWoodenHoeRecipe : Recipe + { + public UpgradeWoodenHoeRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(1), + new CraftingElement(typeof(MetalworkingEfficiencySkill), 20 ,MetalworkingEfficiencySkill.MultiplicativeStrategy) + }; + this.CraftMinutes = new MultiDynamicValue(MultiDynamicOps.Multiply + , CreateCraftTimeValue(typeof(UpgradeWoodenHoeRecipe), Item.Get().UILink(), .5f, typeof(MetalworkingSpeedSkill)) + + ); + this.Initialize("Upgrade Wooden Hoe", typeof(UpgradeWoodenHoeRecipe)); + + CraftingComponent.AddRecipe(typeof(AnvilObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/Tool/UpgradeWoodenShovel.cs b/AutoGen/Tool/UpgradeWoodenShovel.cs new file mode 100644 index 0000000..5e00b1f --- /dev/null +++ b/AutoGen/Tool/UpgradeWoodenShovel.cs @@ -0,0 +1,42 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Players; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.World; + using Eco.World.Blocks; + using Eco.Gameplay.Pipes; + + [RequiresSkill(typeof(MetalworkingSkill), 2)] + public partial class UpgradeWoodenShovelRecipe : Recipe + { + public UpgradeWoodenShovelRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(1), + new CraftingElement(typeof(MetalworkingEfficiencySkill), 20 ,MetalworkingEfficiencySkill.MultiplicativeStrategy) + }; + this.CraftMinutes = new MultiDynamicValue(MultiDynamicOps.Multiply + , CreateCraftTimeValue(typeof(UpgradeWoodenShovelRecipe), Item.Get().UILink(), .5f, typeof(MetalworkingSpeedSkill)) + + ); + this.Initialize("Upgrade Wooden Shovel", typeof(UpgradeWoodenShovelRecipe)); + + CraftingComponent.AddRecipe(typeof(AnvilObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/Vehicle/PoweredCart.cs b/AutoGen/Vehicle/PoweredCart.cs new file mode 100644 index 0000000..3b6a865 --- /dev/null +++ b/AutoGen/Vehicle/PoweredCart.cs @@ -0,0 +1,86 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using Eco.Gameplay.Components; + using Eco.Gameplay.Components.Auth; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Shared.Math; + using Eco.Shared.Networking; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + + [Serialized] + [Weight(15000)] + public class PoweredCartItem : WorldObjectItem + { + public override string FriendlyName { get { return "Powered Cart"; } } + public override string Description { get { return "Large cart for hauling sizable loads."; } } + } + + [RequiresSkill(typeof(MechanicalEngineeringSkill), 0)] + public class PoweredCartRecipe : Recipe + { + public PoweredCartRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(MechanicsAssemblyEfficiencySkill), 20, MechanicsAssemblyEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(MechanicsAssemblyEfficiencySkill), 20, MechanicsAssemblyEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(MechanicsAssemblyEfficiencySkill), 1, MechanicsAssemblyEfficiencySkill.MultiplicativeStrategy), + }; + this.CraftMinutes = new ConstantValue(25); + + this.Initialize("Powered Cart", typeof(PoweredCartRecipe)); + CraftingComponent.AddRecipe(typeof(WainwrightTableObject), this); + } + } + [Serialized] + [RequireComponent(typeof(StandaloneAuthComponent))] + [RequireComponent(typeof(PublicStorageComponent))] + [RequireComponent(typeof(MovableLinkComponent))] + [RequireComponent(typeof(FuelSupplyComponent))] + [RequireComponent(typeof(FuelConsumptionComponent))] + [RequireComponent(typeof(AirPollutionComponent))] + [RequireComponent(typeof(VehicleComponent))] + [RequireComponent(typeof(TailingsReportComponent))] + public class PoweredCartObject : PhysicsWorldObject + { + private static Dictionary roadEfficiency = new Dictionary() + { + { typeof(DirtRoadBlock), 1.0f }, { typeof(DirtRoadWorldObjectBlock), 1.0f }, + { typeof(StoneRoadBlock), 1.4f }, { typeof(StoneRoadWorldObjectBlock), 1.4f }, + { typeof(AsphaltRoadBlock), 1.8f }, { typeof(AsphaltRoadWorldObjectBlock), 1.8f } + }; + public override string FriendlyName { get { return "Powered Cart"; } } + + private static Type[] fuelTypeList = new Type[] + { + typeof(PetroleumItem), +typeof(GasolineItem), + }; + + private PoweredCartObject() { } + + protected override void Initialize() + { + base.Initialize(); + + this.GetComponent().Initialize(20, 3000000); + this.GetComponent().Initialize(2, fuelTypeList); + this.GetComponent().Initialize(25); + this.GetComponent().Initialize(0.1f); + this.GetComponent().Initialize(20, 1, roadEfficiency); + } + } +} \ No newline at end of file diff --git a/AutoGen/Vehicle/SmallWoodCart.cs b/AutoGen/Vehicle/SmallWoodCart.cs new file mode 100644 index 0000000..2e184ea --- /dev/null +++ b/AutoGen/Vehicle/SmallWoodCart.cs @@ -0,0 +1,75 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using Eco.Gameplay.Components; + using Eco.Gameplay.Components.Auth; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Shared.Math; + using Eco.Shared.Networking; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + + [Serialized] + [Weight(10000)] + public class SmallWoodCartItem : WorldObjectItem + { + public override string FriendlyName { get { return "Small Wood Cart"; } } + public override string Description { get { return "A tiny cart for tiny things."; } } + } + + [RequiresSkill(typeof(WoodworkingSkill), 1)] + public class SmallWoodCartRecipe : Recipe + { + public SmallWoodCartRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(WoodworkingEfficiencySkill), 20, WoodworkingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(WoodworkingEfficiencySkill), 30, WoodworkingEfficiencySkill.MultiplicativeStrategy), + }; + this.CraftMinutes = new ConstantValue(2); + + this.Initialize("Small Wood Cart", typeof(SmallWoodCartRecipe)); + CraftingComponent.AddRecipe(typeof(WorkbenchObject), this); + } + } + [Serialized] + [RequireComponent(typeof(StandaloneAuthComponent))] + [RequireComponent(typeof(PublicStorageComponent))] + [RequireComponent(typeof(MovableLinkComponent))] + [RequireComponent(typeof(VehicleComponent))] + [RequireComponent(typeof(TailingsReportComponent))] + public class SmallWoodCartObject : PhysicsWorldObject + { + private static Dictionary roadEfficiency = new Dictionary() + { + { typeof(DirtRoadBlock), 1 }, { typeof(DirtRoadWorldObjectBlock), 1 }, + { typeof(StoneRoadBlock), 1.4f }, { typeof(StoneRoadWorldObjectBlock), 1.4f }, + { typeof(AsphaltRoadBlock), 1.6f }, { typeof(AsphaltRoadWorldObjectBlock), 1.6f } + }; + public override string FriendlyName { get { return "Small Wood Cart"; } } + + + private SmallWoodCartObject() { } + + protected override void Initialize() + { + base.Initialize(); + + this.GetComponent().Initialize(6, 750000); + this.GetComponent().Initialize(8, 1, roadEfficiency); + this.GetComponent().HumanPowered(0.5f); + } + } +} \ No newline at end of file diff --git a/AutoGen/Vehicle/WoodCart.cs b/AutoGen/Vehicle/WoodCart.cs new file mode 100644 index 0000000..9a547d3 --- /dev/null +++ b/AutoGen/Vehicle/WoodCart.cs @@ -0,0 +1,74 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using Eco.Gameplay.Components; + using Eco.Gameplay.Components.Auth; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Items; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Shared.Math; + using Eco.Shared.Networking; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + + [Serialized] + [Weight(15000)] + public class WoodCartItem : WorldObjectItem + { + public override string FriendlyName { get { return "Wood Cart"; } } + public override string Description { get { return "Small wheelbarrow for hauling minimal loads."; } } + } + + [RequiresSkill(typeof(PrimitiveMechanicsSkill), 1)] + public class WoodCartRecipe : Recipe + { + public WoodCartRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(PrimitiveMechanicsEfficiencySkill), 50, PrimitiveMechanicsEfficiencySkill.MultiplicativeStrategy), + }; + this.CraftMinutes = new ConstantValue(5); + + this.Initialize("Wood Cart", typeof(WoodCartRecipe)); + CraftingComponent.AddRecipe(typeof(WainwrightTableObject), this); + } + } + [Serialized] + [RequireComponent(typeof(StandaloneAuthComponent))] + [RequireComponent(typeof(PublicStorageComponent))] + [RequireComponent(typeof(MovableLinkComponent))] + [RequireComponent(typeof(VehicleComponent))] + [RequireComponent(typeof(TailingsReportComponent))] + public class WoodCartObject : PhysicsWorldObject + { + private static Dictionary roadEfficiency = new Dictionary() + { + { typeof(DirtRoadBlock), 1.2f }, { typeof(DirtRoadWorldObjectBlock), 1.2f }, + { typeof(StoneRoadBlock), 1.4f }, { typeof(StoneRoadWorldObjectBlock), 1.4f }, + { typeof(AsphaltRoadBlock), 1.6f }, { typeof(AsphaltRoadWorldObjectBlock), 1.6f } + }; + public override string FriendlyName { get { return "Wood Cart"; } } + + + private WoodCartObject() { } + + protected override void Initialize() + { + base.Initialize(); + + this.GetComponent().Initialize(12, 1500000); + this.GetComponent().Initialize(10, 1, roadEfficiency); + this.GetComponent().HumanPowered(1); + } + } +} \ No newline at end of file diff --git a/AutoGen/WorldObject/Anvil.cs b/AutoGen/WorldObject/Anvil.cs new file mode 100644 index 0000000..fdc0ed5 --- /dev/null +++ b/AutoGen/WorldObject/Anvil.cs @@ -0,0 +1,106 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.Components.Auth; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Economy; + using Eco.Gameplay.Housing; + using Eco.Gameplay.Interactions; + using Eco.Gameplay.Items; + using Eco.Gameplay.Minimap; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Property; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Gameplay.Pipes.LiquidComponents; + using Eco.Gameplay.Pipes.Gases; + using Eco.Gameplay.Systems.Tooltip; + using Eco.Shared; + using Eco.Shared.Math; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + using Eco.Shared.Items; + using Eco.Gameplay.Pipes; + using Eco.World.Blocks; + + [Serialized] + [RequireComponent(typeof(PropertyAuthComponent))] + [RequireComponent(typeof(MinimapComponent))] + [RequireComponent(typeof(LinkComponent))] + [RequireComponent(typeof(CraftingComponent))] + [RequireComponent(typeof(HousingComponent))] + [RequireComponent(typeof(SolidGroundComponent))] + public partial class AnvilObject : + WorldObject + { + public override string FriendlyName { get { return "Anvil"; } } + + + protected override void Initialize() + { + this.GetComponent().Initialize("Crafting"); + this.GetComponent().Set(AnvilItem.HousingVal); + + + + } + + public override void Destroy() + { + base.Destroy(); + } + + } + + [Serialized] + public partial class AnvilItem : WorldObjectItem + { + public override string FriendlyName { get { return "Anvil"; } } + public override string Description { get { return "A solid shaped piece of metal used to hammer ingots into tools and other useful things."; } } + + static AnvilItem() + { + + } + + [TooltipChildren] public HousingValue HousingTooltip { get { return HousingVal; } } + [TooltipChildren] public static HousingValue HousingVal { get { return new HousingValue() + { + Category = "Industrial", + TypeForRoomLimit = "", + };}} + } + + + [RequiresSkill(typeof(MetalworkingSkill), 1)] + public partial class AnvilRecipe : Recipe + { + public AnvilRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(MetalworkingEfficiencySkill), 20, MetalworkingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(MetalworkingEfficiencySkill), 20, MetalworkingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(MetalworkingEfficiencySkill), 20, MetalworkingEfficiencySkill.MultiplicativeStrategy), + }; + SkillModifiedValue value = new SkillModifiedValue(20, MetalworkingSpeedSkill.MultiplicativeStrategy, typeof(MetalworkingSpeedSkill), Localizer.Do("craft time")); + SkillModifiedValueManager.AddBenefitForObject(typeof(AnvilRecipe), Item.Get().UILink(), value); + SkillModifiedValueManager.AddSkillBenefit(Item.Get().UILink(), value); + this.CraftMinutes = value; + this.Initialize("Anvil", typeof(AnvilRecipe)); + CraftingComponent.AddRecipe(typeof(BloomeryObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/WorldObject/BakeryOven.cs b/AutoGen/WorldObject/BakeryOven.cs new file mode 100644 index 0000000..7308bdf --- /dev/null +++ b/AutoGen/WorldObject/BakeryOven.cs @@ -0,0 +1,125 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.Components.Auth; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Economy; + using Eco.Gameplay.Housing; + using Eco.Gameplay.Interactions; + using Eco.Gameplay.Items; + using Eco.Gameplay.Minimap; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Property; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Gameplay.Pipes.LiquidComponents; + using Eco.Gameplay.Pipes.Gases; + using Eco.Gameplay.Systems.Tooltip; + using Eco.Shared; + using Eco.Shared.Math; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + using Eco.Shared.Items; + using Eco.Gameplay.Pipes; + using Eco.World.Blocks; + + [Serialized] + [RequireComponent(typeof(PropertyAuthComponent))] + [RequireComponent(typeof(MinimapComponent))] + [RequireComponent(typeof(LinkComponent))] + [RequireComponent(typeof(CraftingComponent))] + [RequireComponent(typeof(FuelSupplyComponent))] + [RequireComponent(typeof(FuelConsumptionComponent))] + [RequireComponent(typeof(HousingComponent))] + [RequireComponent(typeof(SolidGroundComponent))] + [RequireComponent(typeof(RoomRequirementsComponent))] + [RequireRoomContainment] + [RequireRoomVolume(45)] + [RequireRoomMaterialTier(2, 32)] + public partial class BakeryOvenObject : + WorldObject + { + public override string FriendlyName { get { return "Bakery Oven"; } } + + private static Type[] fuelTypeList = new Type[] + { + typeof(LogItem), + typeof(LumberItem), + typeof(CharcoalItem), + typeof(ArrowItem), + typeof(BoardItem), + typeof(CoalItem), + }; + + protected override void Initialize() + { + this.GetComponent().Initialize("Cooking"); + this.GetComponent().Initialize(2, fuelTypeList); + this.GetComponent().Initialize(10); + this.GetComponent().Set(BakeryOvenItem.HousingVal); + + + + } + + public override void Destroy() + { + base.Destroy(); + } + + } + + [Serialized] + public partial class BakeryOvenItem : WorldObjectItem + { + public override string FriendlyName { get { return "Bakery Oven"; } } + public override string Description { get { return "A solidly built brick oven useful for baking all manner of treats."; } } + + static BakeryOvenItem() + { + + } + + [TooltipChildren] public HousingValue HousingTooltip { get { return HousingVal; } } + [TooltipChildren] public static HousingValue HousingVal { get { return new HousingValue() + { + Category = "Kitchen", + Val = 3, + TypeForRoomLimit = "Baking", + DiminishingReturnPercent = 0.3f + };}} + } + + + [RequiresSkill(typeof(StoneworkingSkill), 2)] + public partial class BakeryOvenRecipe : Recipe + { + public BakeryOvenRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(StoneworkingEfficiencySkill), 30, StoneworkingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(StoneworkingEfficiencySkill), 10, StoneworkingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(StoneworkingEfficiencySkill), 20, StoneworkingEfficiencySkill.MultiplicativeStrategy), + }; + SkillModifiedValue value = new SkillModifiedValue(20, StoneworkingSpeedSkill.MultiplicativeStrategy, typeof(StoneworkingSpeedSkill), Localizer.Do("craft time")); + SkillModifiedValueManager.AddBenefitForObject(typeof(BakeryOvenRecipe), Item.Get().UILink(), value); + SkillModifiedValueManager.AddSkillBenefit(Item.Get().UILink(), value); + this.CraftMinutes = value; + this.Initialize("Bakery Oven", typeof(BakeryOvenRecipe)); + CraftingComponent.AddRecipe(typeof(MasonryTableObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/WorldObject/BlastFurnace.cs b/AutoGen/WorldObject/BlastFurnace.cs new file mode 100644 index 0000000..1ec5c17 --- /dev/null +++ b/AutoGen/WorldObject/BlastFurnace.cs @@ -0,0 +1,134 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.Components.Auth; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Economy; + using Eco.Gameplay.Housing; + using Eco.Gameplay.Interactions; + using Eco.Gameplay.Items; + using Eco.Gameplay.Minimap; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Property; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Gameplay.Pipes.LiquidComponents; + using Eco.Gameplay.Pipes.Gases; + using Eco.Gameplay.Systems.Tooltip; + using Eco.Shared; + using Eco.Shared.Math; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + using Eco.Shared.Items; + using Eco.Gameplay.Pipes; + using Eco.World.Blocks; + + [Serialized] + [RequireComponent(typeof(PipeComponent))] + [RequireComponent(typeof(AttachmentComponent))] + [RequireComponent(typeof(PropertyAuthComponent))] + [RequireComponent(typeof(MinimapComponent))] + [RequireComponent(typeof(LinkComponent))] + [RequireComponent(typeof(CraftingComponent))] + [RequireComponent(typeof(FuelSupplyComponent))] + [RequireComponent(typeof(FuelConsumptionComponent))] + [RequireComponent(typeof(HousingComponent))] + [RequireComponent(typeof(SolidGroundComponent))] + public partial class BlastFurnaceObject : + WorldObject + { + public override string FriendlyName { get { return "Blast Furnace"; } } + + private static Type[] fuelTypeList = new Type[] + { + typeof(LogItem), + typeof(HewnLogItem), + typeof(LumberItem), + typeof(CharcoalItem), + typeof(ArrowItem), + typeof(BoardItem), + typeof(CoalItem), + }; + + protected override void Initialize() + { + this.GetComponent().Initialize("Crafting"); + this.GetComponent().Initialize(2, fuelTypeList); + this.GetComponent().Initialize(50); + this.GetComponent().Set(BlastFurnaceItem.HousingVal); + + + var tankList = new List(); + + tankList.Add(new LiquidProducer("Chimney", typeof(SmogItem), 100, + null, + this.Occupancy.Find(x => x.Name == "ChimneyOut"), + (float)(0.25f * SmogItem.SmogItemsPerCO2PPM) / TimeUtil.SecondsPerHour)); + + + + this.GetComponent().Initialize(tankList); + + } + + public override void Destroy() + { + base.Destroy(); + } + + } + + [Serialized] + public partial class BlastFurnaceItem : WorldObjectItem + { + public override string FriendlyName { get { return "Blast Furnace"; } } + public override string Description { get { return "A superior replacement for the bloomery that can produce steel."; } } + + static BlastFurnaceItem() + { + + + + + } + + [TooltipChildren] public HousingValue HousingTooltip { get { return HousingVal; } } + [TooltipChildren] public static HousingValue HousingVal { get { return new HousingValue() + { + Category = "Industrial", + TypeForRoomLimit = "", + };}} + } + + + [RequiresSkill(typeof(MetalworkingSkill), 4)] + public partial class BlastFurnaceRecipe : Recipe + { + public BlastFurnaceRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(MetalworkingEfficiencySkill), 10, MetalworkingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(MetalworkingEfficiencySkill), 25, MetalworkingEfficiencySkill.MultiplicativeStrategy), + }; + SkillModifiedValue value = new SkillModifiedValue(60, MetalworkingSpeedSkill.MultiplicativeStrategy, typeof(MetalworkingSpeedSkill), Localizer.Do("craft time")); + SkillModifiedValueManager.AddBenefitForObject(typeof(BlastFurnaceRecipe), Item.Get().UILink(), value); + SkillModifiedValueManager.AddSkillBenefit(Item.Get().UILink(), value); + this.CraftMinutes = value; + this.Initialize("Blast Furnace", typeof(BlastFurnaceRecipe)); + CraftingComponent.AddRecipe(typeof(AnvilObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/WorldObject/Bloomery.cs b/AutoGen/WorldObject/Bloomery.cs new file mode 100644 index 0000000..e9da4d8 --- /dev/null +++ b/AutoGen/WorldObject/Bloomery.cs @@ -0,0 +1,121 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.Components.Auth; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Economy; + using Eco.Gameplay.Housing; + using Eco.Gameplay.Interactions; + using Eco.Gameplay.Items; + using Eco.Gameplay.Minimap; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Property; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Gameplay.Pipes.LiquidComponents; + using Eco.Gameplay.Pipes.Gases; + using Eco.Gameplay.Systems.Tooltip; + using Eco.Shared; + using Eco.Shared.Math; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + using Eco.Shared.Items; + using Eco.Gameplay.Pipes; + using Eco.World.Blocks; + + [Serialized] + [RequireComponent(typeof(PropertyAuthComponent))] + [RequireComponent(typeof(MinimapComponent))] + [RequireComponent(typeof(LinkComponent))] + [RequireComponent(typeof(CraftingComponent))] + [RequireComponent(typeof(FuelSupplyComponent))] + [RequireComponent(typeof(FuelConsumptionComponent))] + [RequireComponent(typeof(HousingComponent))] + [RequireComponent(typeof(SolidGroundComponent))] + public partial class BloomeryObject : + WorldObject + { + public override string FriendlyName { get { return "Bloomery"; } } + + private static Type[] fuelTypeList = new Type[] + { + typeof(LogItem), + typeof(HewnLogItem), + typeof(LumberItem), + typeof(CharcoalItem), + typeof(ArrowItem), + typeof(BoardItem), + typeof(CoalItem), + }; + + protected override void Initialize() + { + this.GetComponent().Initialize("Crafting"); + this.GetComponent().Initialize(2, fuelTypeList); + this.GetComponent().Initialize(10); + this.GetComponent().Set(BloomeryItem.HousingVal); + + + + } + + public override void Destroy() + { + base.Destroy(); + } + + } + + [Serialized] + public partial class BloomeryItem : WorldObjectItem + { + public override string FriendlyName { get { return "Bloomery"; } } + public override string Description { get { return "A chimney-shaped furnace for smelting ores."; } } + + static BloomeryItem() + { + + } + + [TooltipChildren] public HousingValue HousingTooltip { get { return HousingVal; } } + [TooltipChildren] public static HousingValue HousingVal { get { return new HousingValue() + { + Category = "Industrial", + TypeForRoomLimit = "", + };}} + } + + + [RequiresSkill(typeof(StoneworkingSkill), 2)] + public partial class BloomeryRecipe : Recipe + { + public BloomeryRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(StoneworkingEfficiencySkill), 20, StoneworkingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(StoneworkingEfficiencySkill), 10, StoneworkingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(StoneworkingEfficiencySkill), 50, StoneworkingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(StoneworkingEfficiencySkill), 10, StoneworkingEfficiencySkill.MultiplicativeStrategy), + }; + SkillModifiedValue value = new SkillModifiedValue(10, StoneworkingSpeedSkill.MultiplicativeStrategy, typeof(StoneworkingSpeedSkill), Localizer.Do("craft time")); + SkillModifiedValueManager.AddBenefitForObject(typeof(BloomeryRecipe), Item.Get().UILink(), value); + SkillModifiedValueManager.AddSkillBenefit(Item.Get().UILink(), value); + this.CraftMinutes = value; + this.Initialize("Bloomery", typeof(BloomeryRecipe)); + CraftingComponent.AddRecipe(typeof(KilnObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/WorldObject/Bookshelf.cs b/AutoGen/WorldObject/Bookshelf.cs new file mode 100644 index 0000000..7475aef --- /dev/null +++ b/AutoGen/WorldObject/Bookshelf.cs @@ -0,0 +1,111 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.Components.Auth; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Economy; + using Eco.Gameplay.Housing; + using Eco.Gameplay.Interactions; + using Eco.Gameplay.Items; + using Eco.Gameplay.Minimap; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Property; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Gameplay.Pipes.LiquidComponents; + using Eco.Gameplay.Pipes.Gases; + using Eco.Gameplay.Systems.Tooltip; + using Eco.Shared; + using Eco.Shared.Math; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + using Eco.Shared.Items; + using Eco.Gameplay.Pipes; + using Eco.World.Blocks; + + [Serialized] + [RequireComponent(typeof(PropertyAuthComponent))] + [RequireComponent(typeof(MinimapComponent))] + [RequireComponent(typeof(LinkComponent))] + [RequireComponent(typeof(HousingComponent))] + [RequireComponent(typeof(PublicStorageComponent))] + [RequireComponent(typeof(SolidGroundComponent))] + public partial class BookshelfObject : + WorldObject + { + public override string FriendlyName { get { return "Bookshelf"; } } + + + protected override void Initialize() + { + this.GetComponent().Initialize("Misc"); + this.GetComponent().Set(BookshelfItem.HousingVal); + + var storage = this.GetComponent(); + storage.Initialize(8); + storage.Storage.AddRestriction(new NotCarriedRestriction()); // can't store block or large items + + + } + + public override void Destroy() + { + base.Destroy(); + } + + } + + [Serialized] + public partial class BookshelfItem : WorldObjectItem + { + public override string FriendlyName { get { return "Bookshelf"; } } + public override string Description { get { return "A place to store knowledge and information; leads to the town hall."; } } + + static BookshelfItem() + { + + } + + [TooltipChildren] public HousingValue HousingTooltip { get { return HousingVal; } } + [TooltipChildren] public static HousingValue HousingVal { get { return new HousingValue() + { + Category = "General", + Val = 2, + TypeForRoomLimit = "Shelves", + DiminishingReturnPercent = 0.7f + };}} + } + + + [RequiresSkill(typeof(LumberWoodworkingSkill), 2)] + public partial class BookshelfRecipe : Recipe + { + public BookshelfRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(LumberWoodworkingEfficiencySkill), 20, LumberWoodworkingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(LumberWoodworkingEfficiencySkill), 100, LumberWoodworkingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(LumberWoodworkingEfficiencySkill), 5, LumberWoodworkingEfficiencySkill.MultiplicativeStrategy), + }; + SkillModifiedValue value = new SkillModifiedValue(1, LumberWoodworkingSpeedSkill.MultiplicativeStrategy, typeof(LumberWoodworkingSpeedSkill), Localizer.Do("craft time")); + SkillModifiedValueManager.AddBenefitForObject(typeof(BookshelfRecipe), Item.Get().UILink(), value); + SkillModifiedValueManager.AddSkillBenefit(Item.Get().UILink(), value); + this.CraftMinutes = value; + this.Initialize("Bookshelf", typeof(BookshelfRecipe)); + CraftingComponent.AddRecipe(typeof(SawmillObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/WorldObject/Brazier.cs b/AutoGen/WorldObject/Brazier.cs new file mode 100644 index 0000000..fec8ab1 --- /dev/null +++ b/AutoGen/WorldObject/Brazier.cs @@ -0,0 +1,120 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.Components.Auth; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Economy; + using Eco.Gameplay.Housing; + using Eco.Gameplay.Interactions; + using Eco.Gameplay.Items; + using Eco.Gameplay.Minimap; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Property; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Gameplay.Pipes.LiquidComponents; + using Eco.Gameplay.Pipes.Gases; + using Eco.Gameplay.Systems.Tooltip; + using Eco.Shared; + using Eco.Shared.Math; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + using Eco.Shared.Items; + using Eco.Gameplay.Pipes; + using Eco.World.Blocks; + + [Serialized] + [RequireComponent(typeof(OnOffComponent))] + [RequireComponent(typeof(PropertyAuthComponent))] + [RequireComponent(typeof(MinimapComponent))] + [RequireComponent(typeof(FuelSupplyComponent))] + [RequireComponent(typeof(FuelConsumptionComponent))] + [RequireComponent(typeof(HousingComponent))] + [RequireComponent(typeof(SolidGroundComponent))] + public partial class BrazierObject : + WorldObject + { + public override string FriendlyName { get { return "Brazier"; } } + + private static Type[] fuelTypeList = new Type[] + { + typeof(LogItem), + typeof(HewnLogItem), + typeof(LumberItem), + typeof(CharcoalItem), + typeof(ArrowItem), + typeof(BoardItem), + typeof(CoalItem), + }; + + protected override void Initialize() + { + this.GetComponent().Initialize("Lights"); + this.GetComponent().Initialize(2, fuelTypeList); + this.GetComponent().Initialize(1); + this.GetComponent().Set(BrazierItem.HousingVal); + + + + } + + public override void Destroy() + { + base.Destroy(); + } + + } + + [Serialized] + public partial class BrazierItem : WorldObjectItem + { + public override string FriendlyName { get { return "Brazier"; } } + public override string Description { get { return "A metal stand which can hold burning fuel to provide light."; } } + + static BrazierItem() + { + + } + + [TooltipChildren] public HousingValue HousingTooltip { get { return HousingVal; } } + [TooltipChildren] public static HousingValue HousingVal { get { return new HousingValue() + { + Category = "General", + Val = 2, + TypeForRoomLimit = "Lights", + DiminishingReturnPercent = 0.8f + };}} + } + + + [RequiresSkill(typeof(MetalworkingSkill), 4)] + public partial class BrazierRecipe : Recipe + { + public BrazierRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(MetalworkingEfficiencySkill), 10, MetalworkingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(MetalworkingEfficiencySkill), 5, MetalworkingEfficiencySkill.MultiplicativeStrategy), + }; + SkillModifiedValue value = new SkillModifiedValue(1, MetalworkingSpeedSkill.MultiplicativeStrategy, typeof(MetalworkingSpeedSkill), Localizer.Do("craft time")); + SkillModifiedValueManager.AddBenefitForObject(typeof(BrazierRecipe), Item.Get().UILink(), value); + SkillModifiedValueManager.AddSkillBenefit(Item.Get().UILink(), value); + this.CraftMinutes = value; + this.Initialize("Brazier", typeof(BrazierRecipe)); + CraftingComponent.AddRecipe(typeof(AnvilObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/WorldObject/ButcheryTable.cs b/AutoGen/WorldObject/ButcheryTable.cs new file mode 100644 index 0000000..7a5dae7 --- /dev/null +++ b/AutoGen/WorldObject/ButcheryTable.cs @@ -0,0 +1,112 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.Components.Auth; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Economy; + using Eco.Gameplay.Housing; + using Eco.Gameplay.Interactions; + using Eco.Gameplay.Items; + using Eco.Gameplay.Minimap; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Property; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Gameplay.Pipes.LiquidComponents; + using Eco.Gameplay.Pipes.Gases; + using Eco.Gameplay.Systems.Tooltip; + using Eco.Shared; + using Eco.Shared.Math; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + using Eco.Shared.Items; + using Eco.Gameplay.Pipes; + using Eco.World.Blocks; + + [Serialized] + [RequireComponent(typeof(PropertyAuthComponent))] + [RequireComponent(typeof(MinimapComponent))] + [RequireComponent(typeof(LinkComponent))] + [RequireComponent(typeof(CraftingComponent))] + [RequireComponent(typeof(HousingComponent))] + [RequireComponent(typeof(SolidGroundComponent))] + [RequireComponent(typeof(RoomRequirementsComponent))] + [RequireRoomContainment] + [RequireRoomVolume(25)] + [RequireRoomMaterialTier(1, 18)] + public partial class ButcheryTableObject : + WorldObject + { + public override string FriendlyName { get { return "Butchery Table"; } } + + + protected override void Initialize() + { + this.GetComponent().Initialize("Cooking"); + this.GetComponent().Set(ButcheryTableItem.HousingVal); + + + + } + + public override void Destroy() + { + base.Destroy(); + } + + } + + [Serialized] + public partial class ButcheryTableItem : WorldObjectItem + { + public override string FriendlyName { get { return "Butchery Table"; } } + public override string Description { get { return "A block and cleaver to process raw meat into fancier dishes."; } } + + static ButcheryTableItem() + { + + } + + [TooltipChildren] public HousingValue HousingTooltip { get { return HousingVal; } } + [TooltipChildren] public static HousingValue HousingVal { get { return new HousingValue() + { + Category = "Kitchen", + Val = 2, + TypeForRoomLimit = "Cooking", + DiminishingReturnPercent = 0.3f + };}} + } + + + [RequiresSkill(typeof(WoodworkingSkill), 3)] + public partial class ButcheryTableRecipe : Recipe + { + public ButcheryTableRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(WoodworkingEfficiencySkill), 20, WoodworkingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(WoodworkingEfficiencySkill), 20, WoodworkingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(WoodworkingEfficiencySkill), 20, WoodworkingEfficiencySkill.MultiplicativeStrategy), + }; + SkillModifiedValue value = new SkillModifiedValue(5, WoodworkingSpeedSkill.MultiplicativeStrategy, typeof(WoodworkingSpeedSkill), Localizer.Do("craft time")); + SkillModifiedValueManager.AddBenefitForObject(typeof(ButcheryTableRecipe), Item.Get().UILink(), value); + SkillModifiedValueManager.AddSkillBenefit(Item.Get().UILink(), value); + this.CraftMinutes = value; + this.Initialize("Butchery Table", typeof(ButcheryTableRecipe)); + CraftingComponent.AddRecipe(typeof(CarpentryTableObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/WorldObject/Campfire.cs b/AutoGen/WorldObject/Campfire.cs new file mode 100644 index 0000000..a60041a --- /dev/null +++ b/AutoGen/WorldObject/Campfire.cs @@ -0,0 +1,111 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.Components.Auth; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Economy; + using Eco.Gameplay.Housing; + using Eco.Gameplay.Interactions; + using Eco.Gameplay.Items; + using Eco.Gameplay.Minimap; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Property; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Gameplay.Pipes.LiquidComponents; + using Eco.Gameplay.Pipes.Gases; + using Eco.Gameplay.Systems.Tooltip; + using Eco.Shared; + using Eco.Shared.Math; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + using Eco.Shared.Items; + using Eco.Gameplay.Pipes; + using Eco.World.Blocks; + + [Serialized] + [RequireComponent(typeof(PropertyAuthComponent))] + [RequireComponent(typeof(MinimapComponent))] + [RequireComponent(typeof(LinkComponent))] + [RequireComponent(typeof(CraftingComponent))] + [RequireComponent(typeof(FuelSupplyComponent))] + [RequireComponent(typeof(FuelConsumptionComponent))] + [RequireComponent(typeof(SolidGroundComponent))] + public partial class CampfireObject : + WorldObject + { + public override string FriendlyName { get { return "Campfire"; } } + + private static Type[] fuelTypeList = new Type[] + { + typeof(LogItem), + typeof(HewnLogItem), + typeof(LumberItem), + typeof(CharcoalItem), + typeof(ArrowItem), + typeof(BoardItem), + typeof(CoalItem), + }; + + protected override void Initialize() + { + this.GetComponent().Initialize("Cooking"); + this.GetComponent().Initialize(2, fuelTypeList); + this.GetComponent().Initialize(10); + + + + } + + public override void Destroy() + { + base.Destroy(); + } + + } + + [Serialized] + public partial class CampfireItem : WorldObjectItem + { + public override string FriendlyName { get { return "Campfire"; } } + public override string Description { get { return "Cook like a caveman on an uneven fire."; } } + + static CampfireItem() + { + + } + + } + + + [RequiresSkill(typeof(BasicCraftingSkill), 0)] + public partial class CampfireRecipe : Recipe + { + public CampfireRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(BasicCraftingEfficiencySkill), 5, BasicCraftingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(BasicCraftingEfficiencySkill), 10, BasicCraftingEfficiencySkill.MultiplicativeStrategy), + }; + SkillModifiedValue value = new SkillModifiedValue(1, BasicCraftingSpeedSkill.MultiplicativeStrategy, typeof(BasicCraftingSpeedSkill), Localizer.Do("craft time")); + SkillModifiedValueManager.AddBenefitForObject(typeof(CampfireRecipe), Item.Get().UILink(), value); + SkillModifiedValueManager.AddSkillBenefit(Item.Get().UILink(), value); + this.CraftMinutes = value; + this.Initialize("Campfire", typeof(CampfireRecipe)); + CraftingComponent.AddRecipe(typeof(WorkbenchObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/WorldObject/CandleStand.cs b/AutoGen/WorldObject/CandleStand.cs new file mode 100644 index 0000000..81f636a --- /dev/null +++ b/AutoGen/WorldObject/CandleStand.cs @@ -0,0 +1,116 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.Components.Auth; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Economy; + using Eco.Gameplay.Housing; + using Eco.Gameplay.Interactions; + using Eco.Gameplay.Items; + using Eco.Gameplay.Minimap; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Property; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Gameplay.Pipes.LiquidComponents; + using Eco.Gameplay.Pipes.Gases; + using Eco.Gameplay.Systems.Tooltip; + using Eco.Shared; + using Eco.Shared.Math; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + using Eco.Shared.Items; + using Eco.Gameplay.Pipes; + using Eco.World.Blocks; + + [Serialized] + [RequireComponent(typeof(OnOffComponent))] + [RequireComponent(typeof(PropertyAuthComponent))] + [RequireComponent(typeof(MinimapComponent))] + [RequireComponent(typeof(FuelSupplyComponent))] + [RequireComponent(typeof(FuelConsumptionComponent))] + [RequireComponent(typeof(HousingComponent))] + [RequireComponent(typeof(SolidGroundComponent))] + public partial class CandleStandObject : + WorldObject + { + public override string FriendlyName { get { return "Candle Stand"; } } + + private static Type[] fuelTypeList = new Type[] + { + typeof(TallowItem), + typeof(OilItem), + }; + + protected override void Initialize() + { + this.GetComponent().Initialize("Lights"); + this.GetComponent().Initialize(2, fuelTypeList); + this.GetComponent().Initialize(1); + this.GetComponent().Set(CandleStandItem.HousingVal); + + + + } + + public override void Destroy() + { + base.Destroy(); + } + + } + + [Serialized] + public partial class CandleStandItem : WorldObjectItem + { + public override string FriendlyName { get { return "Candle Stand"; } } + public override string Description { get { return "A fancy candelabra for providing small amounts of light."; } } + + static CandleStandItem() + { + + } + + [TooltipChildren] public HousingValue HousingTooltip { get { return HousingVal; } } + [TooltipChildren] public static HousingValue HousingVal { get { return new HousingValue() + { + Category = "General", + Val = 2, + TypeForRoomLimit = "Lights", + DiminishingReturnPercent = 0.8f + };}} + } + + + [RequiresSkill(typeof(MetalworkingSkill), 1)] + public partial class CandleStandRecipe : Recipe + { + public CandleStandRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(MetalworkingEfficiencySkill), 5, MetalworkingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(MetalworkingEfficiencySkill), 5, MetalworkingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(MetalworkingEfficiencySkill), 2, MetalworkingEfficiencySkill.MultiplicativeStrategy), + }; + SkillModifiedValue value = new SkillModifiedValue(1, MetalworkingSpeedSkill.MultiplicativeStrategy, typeof(MetalworkingSpeedSkill), Localizer.Do("craft time")); + SkillModifiedValueManager.AddBenefitForObject(typeof(CandleStandRecipe), Item.Get().UILink(), value); + SkillModifiedValueManager.AddSkillBenefit(Item.Get().UILink(), value); + this.CraftMinutes = value; + this.Initialize("Candle Stand", typeof(CandleStandRecipe)); + CraftingComponent.AddRecipe(typeof(AnvilObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/WorldObject/CarpentryTable.cs b/AutoGen/WorldObject/CarpentryTable.cs new file mode 100644 index 0000000..574fe25 --- /dev/null +++ b/AutoGen/WorldObject/CarpentryTable.cs @@ -0,0 +1,101 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.Components.Auth; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Economy; + using Eco.Gameplay.Housing; + using Eco.Gameplay.Interactions; + using Eco.Gameplay.Items; + using Eco.Gameplay.Minimap; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Property; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Gameplay.Pipes.LiquidComponents; + using Eco.Gameplay.Pipes.Gases; + using Eco.Gameplay.Systems.Tooltip; + using Eco.Shared; + using Eco.Shared.Math; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + using Eco.Shared.Items; + using Eco.Gameplay.Pipes; + using Eco.World.Blocks; + + [Serialized] + + [RequireComponent(typeof(PropertyAuthComponent))] + [RequireComponent(typeof(MinimapComponent))] + [RequireComponent(typeof(LinkComponent))] + [RequireComponent(typeof(CraftingComponent))] + [RequireComponent(typeof(SolidGroundComponent))] + [RequireComponent(typeof(RoomRequirementsComponent))] + [RequireRoomContainment] + [RequireRoomVolume(25)] + public partial class CarpentryTableObject : + WorldObject + { + public override string FriendlyName { get { return "Carpentry Table"; } } + + + protected override void Initialize() + { + this.GetComponent().Initialize("Crafting"); + + + + } + + public override void Destroy() + { + base.Destroy(); + } + + } + + [Serialized] + public partial class CarpentryTableItem : WorldObjectItem + { + public override string FriendlyName { get { return "Carpentry Table"; } } + public override string Description { get { return "A table for basic wooden crafts for home improvement and progress."; } } + + static CarpentryTableItem() + { + + } + + } + + + [RequiresSkill(typeof(WoodworkingSkill), 0)] + public partial class CarpentryTableRecipe : Recipe + { + public CarpentryTableRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(WoodworkingEfficiencySkill), 20, WoodworkingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(WoodworkingEfficiencySkill), 20, WoodworkingEfficiencySkill.MultiplicativeStrategy), + }; + SkillModifiedValue value = new SkillModifiedValue(1, WoodworkingSpeedSkill.MultiplicativeStrategy, typeof(WoodworkingSpeedSkill), Localizer.Do("craft time")); + SkillModifiedValueManager.AddBenefitForObject(typeof(CarpentryTableRecipe), Item.Get().UILink(), value); + SkillModifiedValueManager.AddSkillBenefit(Item.Get().UILink(), value); + this.CraftMinutes = value; + this.Initialize("Carpentry Table", typeof(CarpentryTableRecipe)); + CraftingComponent.AddRecipe(typeof(WorkbenchObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/WorldObject/CastIronStove.cs b/AutoGen/WorldObject/CastIronStove.cs new file mode 100644 index 0000000..0b1d1d7 --- /dev/null +++ b/AutoGen/WorldObject/CastIronStove.cs @@ -0,0 +1,127 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.Components.Auth; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Economy; + using Eco.Gameplay.Housing; + using Eco.Gameplay.Interactions; + using Eco.Gameplay.Items; + using Eco.Gameplay.Minimap; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Property; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Gameplay.Pipes.LiquidComponents; + using Eco.Gameplay.Pipes.Gases; + using Eco.Gameplay.Systems.Tooltip; + using Eco.Shared; + using Eco.Shared.Math; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + using Eco.Shared.Items; + using Eco.Gameplay.Pipes; + using Eco.World.Blocks; + + [Serialized] + + [RequireComponent(typeof(PropertyAuthComponent))] + [RequireComponent(typeof(MinimapComponent))] + [RequireComponent(typeof(LinkComponent))] + [RequireComponent(typeof(CraftingComponent))] + [RequireComponent(typeof(FuelSupplyComponent))] + [RequireComponent(typeof(FuelConsumptionComponent))] + [RequireComponent(typeof(HousingComponent))] + [RequireComponent(typeof(SolidGroundComponent))] + [RequireComponent(typeof(RoomRequirementsComponent))] + [RequireRoomContainment] + [RequireRoomVolume(45)] + [RequireRoomMaterialTier(2, 32)] + public partial class CastIronStoveObject : + WorldObject + { + public override string FriendlyName { get { return "Cast Iron Stove"; } } + + private static Type[] fuelTypeList = new Type[] + { + typeof(LogItem), + typeof(HewnLogItem), + typeof(LumberItem), + typeof(CharcoalItem), + typeof(ArrowItem), + typeof(BoardItem), + typeof(CoalItem), + }; + + protected override void Initialize() + { + this.GetComponent().Initialize("Cooking"); + this.GetComponent().Initialize(2, fuelTypeList); + this.GetComponent().Initialize(10); + this.GetComponent().Set(CastIronStoveItem.HousingVal); + + + + } + + public override void Destroy() + { + base.Destroy(); + } + + } + + [Serialized] + public partial class CastIronStoveItem : WorldObjectItem + { + public override string FriendlyName { get { return "Cast Iron Stove"; } } + public override string Description { get { return "The perfect stove for the fledgling chef."; } } + + static CastIronStoveItem() + { + + } + + [TooltipChildren] public HousingValue HousingTooltip { get { return HousingVal; } } + [TooltipChildren] public static HousingValue HousingVal { get { return new HousingValue() + { + Category = "Kitchen", + Val = 2, + TypeForRoomLimit = "Cooking", + DiminishingReturnPercent = 0.3f + };}} + } + + + [RequiresSkill(typeof(MetalworkingSkill), 1)] + public partial class CastIronStoveRecipe : Recipe + { + public CastIronStoveRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(MetalworkingEfficiencySkill), 20, MetalworkingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(MetalworkingEfficiencySkill), 20, MetalworkingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(MetalworkingEfficiencySkill), 20, MetalworkingEfficiencySkill.MultiplicativeStrategy), + }; + SkillModifiedValue value = new SkillModifiedValue(15, MetalworkingSpeedSkill.MultiplicativeStrategy, typeof(MetalworkingSpeedSkill), Localizer.Do("craft time")); + SkillModifiedValueManager.AddBenefitForObject(typeof(CastIronStoveRecipe), Item.Get().UILink(), value); + SkillModifiedValueManager.AddSkillBenefit(Item.Get().UILink(), value); + this.CraftMinutes = value; + this.Initialize("Cast Iron Stove", typeof(CastIronStoveRecipe)); + CraftingComponent.AddRecipe(typeof(AnvilObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/WorldObject/CeilingCandle.cs b/AutoGen/WorldObject/CeilingCandle.cs new file mode 100644 index 0000000..ae6c63e --- /dev/null +++ b/AutoGen/WorldObject/CeilingCandle.cs @@ -0,0 +1,116 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.Components.Auth; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Economy; + using Eco.Gameplay.Housing; + using Eco.Gameplay.Interactions; + using Eco.Gameplay.Items; + using Eco.Gameplay.Minimap; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Property; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Gameplay.Pipes.LiquidComponents; + using Eco.Gameplay.Pipes.Gases; + using Eco.Gameplay.Systems.Tooltip; + using Eco.Shared; + using Eco.Shared.Math; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + using Eco.Shared.Items; + using Eco.Gameplay.Pipes; + using Eco.World.Blocks; + + [Serialized] + [RequireComponent(typeof(OnOffComponent))] + + [RequireComponent(typeof(PropertyAuthComponent))] + [RequireComponent(typeof(MinimapComponent))] + [RequireComponent(typeof(FuelSupplyComponent))] + [RequireComponent(typeof(FuelConsumptionComponent))] + [RequireComponent(typeof(HousingComponent))] + public partial class CeilingCandleObject : + WorldObject + { + public override string FriendlyName { get { return "Ceiling Candle"; } } + + private static Type[] fuelTypeList = new Type[] + { + typeof(TallowItem), + typeof(OilItem), + }; + + protected override void Initialize() + { + this.GetComponent().Initialize("Lights"); + this.GetComponent().Initialize(2, fuelTypeList); + this.GetComponent().Initialize(1); + this.GetComponent().Set(CeilingCandleItem.HousingVal); + + + + } + + public override void Destroy() + { + base.Destroy(); + } + + } + + [Serialized] + public partial class CeilingCandleItem : WorldObjectItem + { + public override string FriendlyName { get { return "Ceiling Candle"; } } + public override string Description { get { return "A fancy hanging candelabra."; } } + + static CeilingCandleItem() + { + + } + + [TooltipChildren] public HousingValue HousingTooltip { get { return HousingVal; } } + [TooltipChildren] public static HousingValue HousingVal { get { return new HousingValue() + { + Category = "General", + Val = 2, + TypeForRoomLimit = "Lights", + DiminishingReturnPercent = 0.8f + };}} + } + + + [RequiresSkill(typeof(MetalworkingSkill), 3)] + public partial class CeilingCandleRecipe : Recipe + { + public CeilingCandleRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(MetalworkingEfficiencySkill), 5, MetalworkingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(MetalworkingEfficiencySkill), 5, MetalworkingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(MetalworkingEfficiencySkill), 2, MetalworkingEfficiencySkill.MultiplicativeStrategy), + }; + SkillModifiedValue value = new SkillModifiedValue(1, MetalworkingSpeedSkill.MultiplicativeStrategy, typeof(MetalworkingSpeedSkill), Localizer.Do("craft time")); + SkillModifiedValueManager.AddBenefitForObject(typeof(CeilingCandleRecipe), Item.Get().UILink(), value); + SkillModifiedValueManager.AddSkillBenefit(Item.Get().UILink(), value); + this.CraftMinutes = value; + this.Initialize("Ceiling Candle", typeof(CeilingCandleRecipe)); + CraftingComponent.AddRecipe(typeof(AnvilObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/WorldObject/CementKiln.cs b/AutoGen/WorldObject/CementKiln.cs new file mode 100644 index 0000000..f05c563 --- /dev/null +++ b/AutoGen/WorldObject/CementKiln.cs @@ -0,0 +1,139 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.Components.Auth; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Economy; + using Eco.Gameplay.Housing; + using Eco.Gameplay.Interactions; + using Eco.Gameplay.Items; + using Eco.Gameplay.Minimap; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Property; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Gameplay.Pipes.LiquidComponents; + using Eco.Gameplay.Pipes.Gases; + using Eco.Gameplay.Systems.Tooltip; + using Eco.Shared; + using Eco.Shared.Math; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + using Eco.Shared.Items; + using Eco.Gameplay.Pipes; + using Eco.World.Blocks; + + [Serialized] + [RequireComponent(typeof(PipeComponent))] + [RequireComponent(typeof(AttachmentComponent))] + [RequireComponent(typeof(PropertyAuthComponent))] + [RequireComponent(typeof(MinimapComponent))] + [RequireComponent(typeof(LinkComponent))] + [RequireComponent(typeof(CraftingComponent))] + [RequireComponent(typeof(FuelSupplyComponent))] + [RequireComponent(typeof(FuelConsumptionComponent))] + [RequireComponent(typeof(HousingComponent))] + [RequireComponent(typeof(SolidGroundComponent))] + [RequireComponent(typeof(RoomRequirementsComponent))] + [RequireRoomContainment] + [RequireRoomVolume(45)] + [RequireRoomMaterialTier(2, 32)] + public partial class CementKilnObject : + WorldObject + { + public override string FriendlyName { get { return "Cement Kiln"; } } + + private static Type[] fuelTypeList = new Type[] + { + typeof(LogItem), + typeof(LumberItem), + typeof(CharcoalItem), + typeof(ArrowItem), + typeof(BoardItem), + typeof(CoalItem), + }; + + protected override void Initialize() + { + this.GetComponent().Initialize("Crafting"); + this.GetComponent().Initialize(2, fuelTypeList); + this.GetComponent().Initialize(50); + this.GetComponent().Set(CementKilnItem.HousingVal); + + + var tankList = new List(); + + tankList.Add(new LiquidProducer("Chimney", typeof(SmogItem), 100, + null, + this.Occupancy.Find(x => x.Name == "ChimneyOut"), + (float)(0.2f * SmogItem.SmogItemsPerCO2PPM) / TimeUtil.SecondsPerHour)); + + + + this.GetComponent().Initialize(tankList); + + } + + public override void Destroy() + { + base.Destroy(); + } + + } + + [Serialized] + public partial class CementKilnItem : WorldObjectItem + { + public override string FriendlyName { get { return "Cement Kiln"; } } + public override string Description { get { return "A rotary kiln that produces cement and concrete products."; } } + + static CementKilnItem() + { + + + + + } + + [TooltipChildren] public HousingValue HousingTooltip { get { return HousingVal; } } + [TooltipChildren] public static HousingValue HousingVal { get { return new HousingValue() + { + Category = "Industrial", + TypeForRoomLimit = "", + };}} + } + + + [RequiresSkill(typeof(MetalworkingSkill), 1)] + public partial class CementKilnRecipe : Recipe + { + public CementKilnRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(MetalworkingEfficiencySkill), 50, MetalworkingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(MetalworkingEfficiencySkill), 30, MetalworkingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(MetalworkingEfficiencySkill), 10, MetalworkingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(MetalworkingEfficiencySkill), 5, MetalworkingEfficiencySkill.MultiplicativeStrategy), + }; + SkillModifiedValue value = new SkillModifiedValue(240, MetalworkingSpeedSkill.MultiplicativeStrategy, typeof(MetalworkingSpeedSkill), Localizer.Do("craft time")); + SkillModifiedValueManager.AddBenefitForObject(typeof(CementKilnRecipe), Item.Get().UILink(), value); + SkillModifiedValueManager.AddSkillBenefit(Item.Get().UILink(), value); + this.CraftMinutes = value; + this.Initialize("Cement Kiln", typeof(CementKilnRecipe)); + CraftingComponent.AddRecipe(typeof(AnvilObject), this); + } + } +} diff --git a/AutoGen/WorldObject/CombustionGenerator.cs b/AutoGen/WorldObject/CombustionGenerator.cs new file mode 100644 index 0000000..6464317 --- /dev/null +++ b/AutoGen/WorldObject/CombustionGenerator.cs @@ -0,0 +1,127 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.Components.Auth; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Economy; + using Eco.Gameplay.Housing; + using Eco.Gameplay.Interactions; + using Eco.Gameplay.Items; + using Eco.Gameplay.Minimap; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Property; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Gameplay.Pipes.LiquidComponents; + using Eco.Gameplay.Pipes.Gases; + using Eco.Gameplay.Systems.Tooltip; + using Eco.Shared; + using Eco.Shared.Math; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + using Eco.Shared.Items; + using Eco.Gameplay.Pipes; + using Eco.World.Blocks; + + [Serialized] + [RequireComponent(typeof(OnOffComponent))] + + [RequireComponent(typeof(PropertyAuthComponent))] + [RequireComponent(typeof(MinimapComponent))] + [RequireComponent(typeof(LinkComponent))] + [RequireComponent(typeof(FuelSupplyComponent))] + [RequireComponent(typeof(FuelConsumptionComponent))] + [RequireComponent(typeof(PowerGridComponent))] + [RequireComponent(typeof(PowerGeneratorComponent))] + [RequireComponent(typeof(HousingComponent))] + [RequireComponent(typeof(SolidGroundComponent))] + public partial class CombustionGeneratorObject : + WorldObject + { + public override string FriendlyName { get { return "Combustion Generator"; } } + + private static Type[] fuelTypeList = new Type[] + { + typeof(LogItem), + typeof(LumberItem), + typeof(CharcoalItem), + typeof(ArrowItem), + typeof(BoardItem), + typeof(CoalItem), + typeof(PetroleumItem), + typeof(GasolineItem), + }; + + protected override void Initialize() + { + this.GetComponent().Initialize("Power"); + this.GetComponent().Initialize(2, fuelTypeList); + this.GetComponent().Initialize(100); + this.GetComponent().Initialize(30, new ElectricPower()); + this.GetComponent().Initialize(1500); + this.GetComponent().Set(CombustionGeneratorItem.HousingVal); + + + + } + + public override void Destroy() + { + base.Destroy(); + } + + } + + [Serialized] + public partial class CombustionGeneratorItem : WorldObjectItem + { + public override string FriendlyName { get { return "Combustion Generator"; } } + public override string Description { get { return "Consumes most fuels to produce energy."; } } + + static CombustionGeneratorItem() + { + + } + + [TooltipChildren] public HousingValue HousingTooltip { get { return HousingVal; } } + [TooltipChildren] public static HousingValue HousingVal { get { return new HousingValue() + { + Category = "Industrial", + TypeForRoomLimit = "", + };}} + } + + + [RequiresSkill(typeof(MechanicalEngineeringSkill), 3)] + public partial class CombustionGeneratorRecipe : Recipe + { + public CombustionGeneratorRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(MechanicsAssemblyEfficiencySkill), 20, MechanicsAssemblyEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(MechanicsAssemblyEfficiencySkill), 5, MechanicsAssemblyEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(MechanicsAssemblyEfficiencySkill), 10, MechanicsAssemblyEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(MechanicsAssemblyEfficiencySkill), 1, MechanicsAssemblyEfficiencySkill.MultiplicativeStrategy), + }; + SkillModifiedValue value = new SkillModifiedValue(30, MechanicsAssemblySpeedSkill.MultiplicativeStrategy, typeof(MechanicsAssemblySpeedSkill), Localizer.Do("craft time")); + SkillModifiedValueManager.AddBenefitForObject(typeof(CombustionGeneratorRecipe), Item.Get().UILink(), value); + SkillModifiedValueManager.AddSkillBenefit(Item.Get().UILink(), value); + this.CraftMinutes = value; + this.Initialize("Combustion Generator", typeof(CombustionGeneratorRecipe)); + CraftingComponent.AddRecipe(typeof(MachineShopObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/WorldObject/ComputerLab.cs b/AutoGen/WorldObject/ComputerLab.cs new file mode 100644 index 0000000..2abe1a2 --- /dev/null +++ b/AutoGen/WorldObject/ComputerLab.cs @@ -0,0 +1,72 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.Components.Auth; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Economy; + using Eco.Gameplay.Housing; + using Eco.Gameplay.Interactions; + using Eco.Gameplay.Items; + using Eco.Gameplay.Minimap; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Property; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Gameplay.Pipes.LiquidComponents; + using Eco.Gameplay.Pipes.Gases; + using Eco.Gameplay.Systems.Tooltip; + using Eco.Shared; + using Eco.Shared.Math; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + using Eco.Shared.Items; + using Eco.Gameplay.Pipes; + using Eco.World.Blocks; + + + [Serialized] + public partial class ComputerLabItem : WorldObjectItem + { + public override string FriendlyName { get { return "Computer Lab"; } } + public override string Description { get { return "A place where you can sit all day and play video games! Or work on expert-level research."; } } + + static ComputerLabItem() + { + + } + + } + + + [RequiresSkill(typeof(IndustrialEngineeringSkill), 4)] + public partial class ComputerLabRecipe : Recipe + { + public ComputerLabRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(IndustrialEngineeringEfficiencySkill), 50, IndustrialEngineeringEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(IndustrialEngineeringEfficiencySkill), 30, IndustrialEngineeringEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(IndustrialEngineeringEfficiencySkill), 40, IndustrialEngineeringEfficiencySkill.MultiplicativeStrategy), + }; + SkillModifiedValue value = new SkillModifiedValue(260, ElectronicEngineeringSpeedSkill.MultiplicativeStrategy, typeof(ElectronicEngineeringSpeedSkill), Localizer.Do("craft time")); + SkillModifiedValueManager.AddBenefitForObject(typeof(ComputerLabRecipe), Item.Get().UILink(), value); + SkillModifiedValueManager.AddSkillBenefit(Item.Get().UILink(), value); + this.CraftMinutes = value; + this.Initialize("Computer Lab", typeof(ComputerLabRecipe)); + CraftingComponent.AddRecipe(typeof(FactoryObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/WorldObject/ConstructionPost.cs b/AutoGen/WorldObject/ConstructionPost.cs new file mode 100644 index 0000000..1683ccd --- /dev/null +++ b/AutoGen/WorldObject/ConstructionPost.cs @@ -0,0 +1,97 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.Components.Auth; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Economy; + using Eco.Gameplay.Housing; + using Eco.Gameplay.Interactions; + using Eco.Gameplay.Items; + using Eco.Gameplay.Minimap; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Property; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Gameplay.Pipes.LiquidComponents; + using Eco.Gameplay.Pipes.Gases; + using Eco.Gameplay.Systems.Tooltip; + using Eco.Shared; + using Eco.Shared.Math; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + using Eco.Shared.Items; + using Eco.Gameplay.Pipes; + using Eco.World.Blocks; + + [Serialized] + + [RequireComponent(typeof(PropertyAuthComponent))] + [RequireComponent(typeof(MinimapComponent))] + [RequireComponent(typeof(SolidGroundComponent))] + public partial class ConstructionPostObject : + WorldObject + { + public override string FriendlyName { get { return "Construction Post"; } } + + + protected override void Initialize() + { + this.GetComponent().Initialize("Economy"); + + + + this.AddAsPOI("Marker"); + } + + public override void Destroy() + { + base.Destroy(); + this.RemoveAsPOI("Marker"); + } + + } + + [Serialized] + public partial class ConstructionPostItem : WorldObjectItem + { + public override string FriendlyName { get { return "Construction Post"; } } + public override string Description { get { return "For contruction contracts."; } } + + static ConstructionPostItem() + { + + } + + } + + + [RequiresSkill(typeof(BasicCraftingSkill), 1)] + public partial class ConstructionPostRecipe : Recipe + { + public ConstructionPostRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(BasicCraftingEfficiencySkill), 1, BasicCraftingEfficiencySkill.MultiplicativeStrategy), + }; + SkillModifiedValue value = new SkillModifiedValue(2, BasicCraftingSpeedSkill.MultiplicativeStrategy, typeof(BasicCraftingSpeedSkill), Localizer.Do("craft time")); + SkillModifiedValueManager.AddBenefitForObject(typeof(ConstructionPostRecipe), Item.Get().UILink(), value); + SkillModifiedValueManager.AddSkillBenefit(Item.Get().UILink(), value); + this.CraftMinutes = value; + this.Initialize("Construction Post", typeof(ConstructionPostRecipe)); + CraftingComponent.AddRecipe(typeof(WorkbenchObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/WorldObject/ContractBoard.cs b/AutoGen/WorldObject/ContractBoard.cs new file mode 100644 index 0000000..993a384 --- /dev/null +++ b/AutoGen/WorldObject/ContractBoard.cs @@ -0,0 +1,95 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.Components.Auth; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Economy; + using Eco.Gameplay.Housing; + using Eco.Gameplay.Interactions; + using Eco.Gameplay.Items; + using Eco.Gameplay.Minimap; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Property; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Gameplay.Pipes.LiquidComponents; + using Eco.Gameplay.Pipes.Gases; + using Eco.Gameplay.Systems.Tooltip; + using Eco.Shared; + using Eco.Shared.Math; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + using Eco.Shared.Items; + using Eco.Gameplay.Pipes; + using Eco.World.Blocks; + + [Serialized] + + [RequireComponent(typeof(PropertyAuthComponent))] + [RequireComponent(typeof(MinimapComponent))] + [RequireComponent(typeof(SolidGroundComponent))] + public partial class ContractBoardObject : + WorldObject + { + public override string FriendlyName { get { return "Contract Board"; } } + + + protected override void Initialize() + { + this.GetComponent().Initialize("Economy"); + + + + } + + public override void Destroy() + { + base.Destroy(); + } + + } + + [Serialized] + public partial class ContractBoardItem : WorldObjectItem + { + public override string FriendlyName { get { return "Contract Board"; } } + public override string Description { get { return "A board to post contracts."; } } + + static ContractBoardItem() + { + + } + + } + + + [RequiresSkill(typeof(WoodworkingSkill), 1)] + public partial class ContractBoardRecipe : Recipe + { + public ContractBoardRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(WoodworkingEfficiencySkill), 20, WoodworkingEfficiencySkill.MultiplicativeStrategy), + }; + SkillModifiedValue value = new SkillModifiedValue(15, WoodworkingSpeedSkill.MultiplicativeStrategy, typeof(WoodworkingSpeedSkill), Localizer.Do("craft time")); + SkillModifiedValueManager.AddBenefitForObject(typeof(ContractBoardRecipe), Item.Get().UILink(), value); + SkillModifiedValueManager.AddSkillBenefit(Item.Get().UILink(), value); + this.CraftMinutes = value; + this.Initialize("Contract Board", typeof(ContractBoardRecipe)); + CraftingComponent.AddRecipe(typeof(CarpentryTableObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/WorldObject/Couch.cs b/AutoGen/WorldObject/Couch.cs new file mode 100644 index 0000000..3aee3e3 --- /dev/null +++ b/AutoGen/WorldObject/Couch.cs @@ -0,0 +1,108 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.Components.Auth; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Economy; + using Eco.Gameplay.Housing; + using Eco.Gameplay.Interactions; + using Eco.Gameplay.Items; + using Eco.Gameplay.Minimap; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Property; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Gameplay.Pipes.LiquidComponents; + using Eco.Gameplay.Pipes.Gases; + using Eco.Gameplay.Systems.Tooltip; + using Eco.Shared; + using Eco.Shared.Math; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + using Eco.Shared.Items; + using Eco.Gameplay.Pipes; + using Eco.World.Blocks; + + [Serialized] + + [RequireComponent(typeof(PropertyAuthComponent))] + [RequireComponent(typeof(MinimapComponent))] + [RequireComponent(typeof(HousingComponent))] + [RequireComponent(typeof(SolidGroundComponent))] + public partial class CouchObject : + WorldObject + { + public override string FriendlyName { get { return "Couch"; } } + + + protected override void Initialize() + { + this.GetComponent().Initialize("Housing"); + this.GetComponent().Set(CouchItem.HousingVal); + + + + } + + public override void Destroy() + { + base.Destroy(); + } + + } + + [Serialized] + public partial class CouchItem : WorldObjectItem + { + public override string FriendlyName { get { return "Couch"; } } + public override string Description { get { return "A sweet couch to lounge on. Now with room for your friends!"; } } + + static CouchItem() + { + + } + + [TooltipChildren] public HousingValue HousingTooltip { get { return HousingVal; } } + [TooltipChildren] public static HousingValue HousingVal { get { return new HousingValue() + { + Category = "Living", + Val = 3, + TypeForRoomLimit = "Seating", + DiminishingReturnPercent = 0.6f + };}} + } + + + [RequiresSkill(typeof(ClothProductionSkill), 4)] + public partial class CouchRecipe : Recipe + { + public CouchRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(ClothProductionEfficiencySkill), 10, ClothProductionEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(ClothProductionEfficiencySkill), 20, ClothProductionEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(ClothProductionEfficiencySkill), 10, ClothProductionEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(ClothProductionEfficiencySkill), 20, ClothProductionEfficiencySkill.MultiplicativeStrategy), + }; + SkillModifiedValue value = new SkillModifiedValue(5, ClothProductionSpeedSkill.MultiplicativeStrategy, typeof(ClothProductionSpeedSkill), Localizer.Do("craft time")); + SkillModifiedValueManager.AddBenefitForObject(typeof(CouchRecipe), Item.Get().UILink(), value); + SkillModifiedValueManager.AddSkillBenefit(Item.Get().UILink(), value); + this.CraftMinutes = value; + this.Initialize("Couch", typeof(CouchRecipe)); + CraftingComponent.AddRecipe(typeof(TailoringTableObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/WorldObject/CurrencyExchange.cs b/AutoGen/WorldObject/CurrencyExchange.cs new file mode 100644 index 0000000..d36db10 --- /dev/null +++ b/AutoGen/WorldObject/CurrencyExchange.cs @@ -0,0 +1,100 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.Components.Auth; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Economy; + using Eco.Gameplay.Housing; + using Eco.Gameplay.Interactions; + using Eco.Gameplay.Items; + using Eco.Gameplay.Minimap; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Property; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Gameplay.Pipes.LiquidComponents; + using Eco.Gameplay.Pipes.Gases; + using Eco.Gameplay.Systems.Tooltip; + using Eco.Shared; + using Eco.Shared.Math; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + using Eco.Shared.Items; + using Eco.Gameplay.Pipes; + using Eco.World.Blocks; + + [Serialized] + + [RequireComponent(typeof(PropertyAuthComponent))] + [RequireComponent(typeof(MinimapComponent))] + [RequireComponent(typeof(SolidGroundComponent))] + [RequireComponent(typeof(RoomRequirementsComponent))] + [RequireRoomContainment] + [RequireRoomVolume(45)] + [RequireRoomMaterialTier(2, 32)] + public partial class CurrencyExchangeObject : + WorldObject + { + public override string FriendlyName { get { return "Currency Exchange"; } } + + + protected override void Initialize() + { + this.GetComponent().Initialize("Economy"); + + + + } + + public override void Destroy() + { + base.Destroy(); + } + + } + + [Serialized] + public partial class CurrencyExchangeItem : WorldObjectItem + { + public override string FriendlyName { get { return "Currency Exchange"; } } + public override string Description { get { return "Allows players to exchange currency."; } } + + static CurrencyExchangeItem() + { + + } + + } + + + [RequiresSkill(typeof(MetalworkingSkill), 3)] + public partial class CurrencyExchangeRecipe : Recipe + { + public CurrencyExchangeRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(MetalworkingEfficiencySkill), 20, MetalworkingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(MetalworkingEfficiencySkill), 20, MetalworkingEfficiencySkill.MultiplicativeStrategy), + }; + SkillModifiedValue value = new SkillModifiedValue(30, MetalworkingSpeedSkill.MultiplicativeStrategy, typeof(MetalworkingSpeedSkill), Localizer.Do("craft time")); + SkillModifiedValueManager.AddBenefitForObject(typeof(CurrencyExchangeRecipe), Item.Get().UILink(), value); + SkillModifiedValueManager.AddSkillBenefit(Item.Get().UILink(), value); + this.CraftMinutes = value; + this.Initialize("Currency Exchange", typeof(CurrencyExchangeRecipe)); + CraftingComponent.AddRecipe(typeof(FactoryObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/WorldObject/Door.cs b/AutoGen/WorldObject/Door.cs new file mode 100644 index 0000000..7b29970 --- /dev/null +++ b/AutoGen/WorldObject/Door.cs @@ -0,0 +1,96 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.Components.Auth; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Economy; + using Eco.Gameplay.Housing; + using Eco.Gameplay.Interactions; + using Eco.Gameplay.Items; + using Eco.Gameplay.Minimap; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Property; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Gameplay.Pipes.LiquidComponents; + using Eco.Gameplay.Pipes.Gases; + using Eco.Gameplay.Systems.Tooltip; + using Eco.Shared; + using Eco.Shared.Math; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + using Eco.Shared.Items; + using Eco.Gameplay.Pipes; + using Eco.World.Blocks; + + [Serialized] + + [RequireComponent(typeof(PropertyAuthComponent))] + [RequireComponent(typeof(MinimapComponent))] + [RequireComponent(typeof(CraftingComponent))] + [RequireComponent(typeof(SolidGroundComponent))] + public partial class DoorObject : + WorldObject + { + public override string FriendlyName { get { return "Door"; } } + + + protected override void Initialize() + { + this.GetComponent().Initialize("Misc"); + + + + } + + public override void Destroy() + { + base.Destroy(); + } + + } + + [Serialized] + public partial class DoorItem : WorldObjectItem + { + public override string FriendlyName { get { return "Door"; } } + public override string Description { get { return "A sturdy wooden door. Can be locked for certain players."; } } + + static DoorItem() + { + + } + + } + + + [RequiresSkill(typeof(WoodworkingSkill), 0)] + public partial class DoorRecipe : Recipe + { + public DoorRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(WoodworkingEfficiencySkill), 6, WoodworkingEfficiencySkill.MultiplicativeStrategy), + }; + SkillModifiedValue value = new SkillModifiedValue(5, WoodworkingSpeedSkill.MultiplicativeStrategy, typeof(WoodworkingSpeedSkill), Localizer.Do("craft time")); + SkillModifiedValueManager.AddBenefitForObject(typeof(DoorRecipe), Item.Get().UILink(), value); + SkillModifiedValueManager.AddSkillBenefit(Item.Get().UILink(), value); + this.CraftMinutes = value; + this.Initialize("Door", typeof(DoorRecipe)); + CraftingComponent.AddRecipe(typeof(CarpentryTableObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/WorldObject/EckoStatue.cs b/AutoGen/WorldObject/EckoStatue.cs new file mode 100644 index 0000000..7f8bd4e --- /dev/null +++ b/AutoGen/WorldObject/EckoStatue.cs @@ -0,0 +1,98 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.Components.Auth; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Economy; + using Eco.Gameplay.Housing; + using Eco.Gameplay.Interactions; + using Eco.Gameplay.Items; + using Eco.Gameplay.Minimap; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Property; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Gameplay.Pipes.LiquidComponents; + using Eco.Gameplay.Pipes.Gases; + using Eco.Gameplay.Systems.Tooltip; + using Eco.Shared; + using Eco.Shared.Math; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + using Eco.Shared.Items; + using Eco.Gameplay.Pipes; + using Eco.World.Blocks; + + [Serialized] + + [RequireComponent(typeof(PropertyAuthComponent))] + [RequireComponent(typeof(HousingComponent))] + [RequireComponent(typeof(SolidGroundComponent))] + public partial class EckoStatueObject : + WorldObject + { + public override string FriendlyName { get { return "Ecko Statue"; } } + + + protected override void Initialize() + { + this.GetComponent().Set(EckoStatueItem.HousingVal); + + + + } + + public override void Destroy() + { + base.Destroy(); + } + + } + + [Serialized] + public partial class EckoStatueItem : WorldObjectItem + { + public override string FriendlyName { get { return "Ecko Statue"; } } + public override string Description { get { return "A statue of a dolphin. What could it mean?"; } } + + static EckoStatueItem() + { + + } + + [TooltipChildren] public HousingValue HousingTooltip { get { return HousingVal; } } + [TooltipChildren] public static HousingValue HousingVal { get { return new HousingValue() + { + Category = "General", + Val = 100, + TypeForRoomLimit = "Decoration", + DiminishingReturnPercent = 1.5f + };}} + } + + + public partial class EckoStatueRecipe : Recipe + { + public EckoStatueRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + + this.Ingredients = new CraftingElement[] + { + }; + this.CraftMinutes = new ConstantValue(); + this.Initialize("Ecko Statue", typeof(EckoStatueRecipe)); + CraftingComponent.AddRecipe(typeof(Object), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/WorldObject/ElectricWallLamp.cs b/AutoGen/WorldObject/ElectricWallLamp.cs new file mode 100644 index 0000000..b9f8e1a --- /dev/null +++ b/AutoGen/WorldObject/ElectricWallLamp.cs @@ -0,0 +1,111 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.Components.Auth; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Economy; + using Eco.Gameplay.Housing; + using Eco.Gameplay.Interactions; + using Eco.Gameplay.Items; + using Eco.Gameplay.Minimap; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Property; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Gameplay.Pipes.LiquidComponents; + using Eco.Gameplay.Pipes.Gases; + using Eco.Gameplay.Systems.Tooltip; + using Eco.Shared; + using Eco.Shared.Math; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + using Eco.Shared.Items; + using Eco.Gameplay.Pipes; + using Eco.World.Blocks; + + [Serialized] + [RequireComponent(typeof(OnOffComponent))] + + [RequireComponent(typeof(PropertyAuthComponent))] + [RequireComponent(typeof(MinimapComponent))] + [RequireComponent(typeof(PowerGridComponent))] + [RequireComponent(typeof(PowerConsumptionComponent))] + [RequireComponent(typeof(HousingComponent))] + public partial class ElectricWallLampObject : + WorldObject + { + public override string FriendlyName { get { return "Electric Wall Lamp"; } } + + + protected override void Initialize() + { + this.GetComponent().Initialize("Lights"); + this.GetComponent().Initialize(35); + this.GetComponent().Initialize(10, new ElectricPower()); + this.GetComponent().Set(ElectricWallLampItem.HousingVal); + + + + } + + public override void Destroy() + { + base.Destroy(); + } + + } + + [Serialized] + public partial class ElectricWallLampItem : WorldObjectItem + { + public override string FriendlyName { get { return "Electric Wall Lamp"; } } + public override string Description { get { return "A wall mounted lamp that requires electricity to turn on."; } } + + static ElectricWallLampItem() + { + + } + + [TooltipChildren] public HousingValue HousingTooltip { get { return HousingVal; } } + [TooltipChildren] public static HousingValue HousingVal { get { return new HousingValue() + { + Category = "General", + Val = 4, + TypeForRoomLimit = "Lights", + DiminishingReturnPercent = 0.8f + };}} + } + + + [RequiresSkill(typeof(ElectronicEngineeringSkill), 3)] + public partial class ElectricWallLampRecipe : Recipe + { + public ElectricWallLampRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(ElectronicEngineeringEfficiencySkill), 10, ElectronicEngineeringEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(ElectronicEngineeringEfficiencySkill), 4, ElectronicEngineeringEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(ElectronicEngineeringEfficiencySkill), 4, ElectronicEngineeringEfficiencySkill.MultiplicativeStrategy), + }; + SkillModifiedValue value = new SkillModifiedValue(1, ElectronicEngineeringSpeedSkill.MultiplicativeStrategy, typeof(ElectronicEngineeringSpeedSkill), Localizer.Do("craft time")); + SkillModifiedValueManager.AddBenefitForObject(typeof(ElectricWallLampRecipe), Item.Get().UILink(), value); + SkillModifiedValueManager.AddSkillBenefit(Item.Get().UILink(), value); + this.CraftMinutes = value; + this.Initialize("Electric Wall Lamp", typeof(ElectricWallLampRecipe)); + CraftingComponent.AddRecipe(typeof(FactoryObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/WorldObject/ElectronicsAssembly.cs b/AutoGen/WorldObject/ElectronicsAssembly.cs new file mode 100644 index 0000000..0a0bf80 --- /dev/null +++ b/AutoGen/WorldObject/ElectronicsAssembly.cs @@ -0,0 +1,111 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.Components.Auth; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Economy; + using Eco.Gameplay.Housing; + using Eco.Gameplay.Interactions; + using Eco.Gameplay.Items; + using Eco.Gameplay.Minimap; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Property; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Gameplay.Pipes.LiquidComponents; + using Eco.Gameplay.Pipes.Gases; + using Eco.Gameplay.Systems.Tooltip; + using Eco.Shared; + using Eco.Shared.Math; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + using Eco.Shared.Items; + using Eco.Gameplay.Pipes; + using Eco.World.Blocks; + + [Serialized] + + [RequireComponent(typeof(PropertyAuthComponent))] + [RequireComponent(typeof(MinimapComponent))] + [RequireComponent(typeof(LinkComponent))] + [RequireComponent(typeof(CraftingComponent))] + [RequireComponent(typeof(HousingComponent))] + [RequireComponent(typeof(SolidGroundComponent))] + [RequireComponent(typeof(RoomRequirementsComponent))] + [RequireRoomContainment] + [RequireRoomVolume(25)] + [RequireRoomMaterialTier(2, 18)] + public partial class ElectronicsAssemblyObject : + WorldObject + { + public override string FriendlyName { get { return "Electronics Assembly"; } } + + + protected override void Initialize() + { + this.GetComponent().Initialize("Crafting"); + this.GetComponent().Set(ElectronicsAssemblyItem.HousingVal); + + + + } + + public override void Destroy() + { + base.Destroy(); + } + + } + + [Serialized] + public partial class ElectronicsAssemblyItem : WorldObjectItem + { + public override string FriendlyName { get { return "Electronics Assembly"; } } + public override string Description { get { return "A set of machinery to create electronics."; } } + + static ElectronicsAssemblyItem() + { + + } + + [TooltipChildren] public HousingValue HousingTooltip { get { return HousingVal; } } + [TooltipChildren] public static HousingValue HousingVal { get { return new HousingValue() + { + Category = "Industrial", + TypeForRoomLimit = "", + };}} + } + + + [RequiresSkill(typeof(ElectronicEngineeringSkill), 0)] + public partial class ElectronicsAssemblyRecipe : Recipe + { + public ElectronicsAssemblyRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(ElectronicEngineeringEfficiencySkill), 20, ElectronicEngineeringEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(ElectronicEngineeringEfficiencySkill), 2, ElectronicEngineeringEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(ElectronicEngineeringEfficiencySkill), 6, ElectronicEngineeringEfficiencySkill.MultiplicativeStrategy), + }; + SkillModifiedValue value = new SkillModifiedValue(60, ElectronicEngineeringSpeedSkill.MultiplicativeStrategy, typeof(ElectronicEngineeringSpeedSkill), Localizer.Do("craft time")); + SkillModifiedValueManager.AddBenefitForObject(typeof(ElectronicsAssemblyRecipe), Item.Get().UILink(), value); + SkillModifiedValueManager.AddSkillBenefit(Item.Get().UILink(), value); + this.CraftMinutes = value; + this.Initialize("Electronics Assembly", typeof(ElectronicsAssemblyRecipe)); + CraftingComponent.AddRecipe(typeof(MachineShopObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/WorldObject/FramedGlassDoor.cs b/AutoGen/WorldObject/FramedGlassDoor.cs new file mode 100644 index 0000000..4ce8142 --- /dev/null +++ b/AutoGen/WorldObject/FramedGlassDoor.cs @@ -0,0 +1,94 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.Components.Auth; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Economy; + using Eco.Gameplay.Housing; + using Eco.Gameplay.Interactions; + using Eco.Gameplay.Items; + using Eco.Gameplay.Minimap; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Property; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Gameplay.Pipes.LiquidComponents; + using Eco.Gameplay.Pipes.Gases; + using Eco.Gameplay.Systems.Tooltip; + using Eco.Shared; + using Eco.Shared.Math; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + using Eco.Shared.Items; + using Eco.Gameplay.Pipes; + using Eco.World.Blocks; + + [Serialized] + + [RequireComponent(typeof(PropertyAuthComponent))] + [RequireComponent(typeof(SolidGroundComponent))] + public partial class FramedGlassDoorObject : + DoorObject + { + public override string FriendlyName { get { return "Framed Glass Door"; } } + + + protected override void Initialize() + { + + + + } + + public override void Destroy() + { + base.Destroy(); + } + + } + + [Serialized] + public partial class FramedGlassDoorItem : WorldObjectItem + { + public override string FriendlyName { get { return "Framed Glass Door"; } } + public override string Description { get { return "A beautiful glass door made of steel and glass."; } } + + static FramedGlassDoorItem() + { + + } + + } + + + [RequiresSkill(typeof(GlassworkingSkill), 1)] + public partial class FramedGlassDoorRecipe : Recipe + { + public FramedGlassDoorRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(GlassProductionEfficiencySkill), 10, GlassProductionEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(GlassProductionEfficiencySkill), 5, GlassProductionEfficiencySkill.MultiplicativeStrategy), + }; + SkillModifiedValue value = new SkillModifiedValue(20, GlassProductionSpeedSkill.MultiplicativeStrategy, typeof(GlassProductionSpeedSkill), Localizer.Do("craft time")); + SkillModifiedValueManager.AddBenefitForObject(typeof(FramedGlassDoorRecipe), Item.Get().UILink(), value); + SkillModifiedValueManager.AddSkillBenefit(Item.Get().UILink(), value); + this.CraftMinutes = value; + this.Initialize("Framed Glass Door", typeof(FramedGlassDoorRecipe)); + CraftingComponent.AddRecipe(typeof(FactoryObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/WorldObject/Icebox.cs b/AutoGen/WorldObject/Icebox.cs new file mode 100644 index 0000000..03306c6 --- /dev/null +++ b/AutoGen/WorldObject/Icebox.cs @@ -0,0 +1,112 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.Components.Auth; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Economy; + using Eco.Gameplay.Housing; + using Eco.Gameplay.Interactions; + using Eco.Gameplay.Items; + using Eco.Gameplay.Minimap; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Property; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Gameplay.Pipes.LiquidComponents; + using Eco.Gameplay.Pipes.Gases; + using Eco.Gameplay.Systems.Tooltip; + using Eco.Shared; + using Eco.Shared.Math; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + using Eco.Shared.Items; + using Eco.Gameplay.Pipes; + using Eco.World.Blocks; + + [Serialized] + + [RequireComponent(typeof(PropertyAuthComponent))] + [RequireComponent(typeof(MinimapComponent))] + [RequireComponent(typeof(LinkComponent))] + [RequireComponent(typeof(HousingComponent))] + [RequireComponent(typeof(PublicStorageComponent))] + [RequireComponent(typeof(SolidGroundComponent))] + public partial class IceboxObject : + WorldObject + { + public override string FriendlyName { get { return "Icebox"; } } + + + protected override void Initialize() + { + this.GetComponent().Initialize("Housing"); + this.GetComponent().Set(IceboxItem.HousingVal); + + var storage = this.GetComponent(); + storage.Initialize(8); + storage.Storage.AddRestriction(new NotCarriedRestriction()); // can't store block or large items + + + } + + public override void Destroy() + { + base.Destroy(); + } + + } + + [Serialized] + public partial class IceboxItem : WorldObjectItem + { + public override string FriendlyName { get { return "Icebox"; } } + public override string Description { get { return "A box of ice. It's in the name!"; } } + + static IceboxItem() + { + + } + + [TooltipChildren] public HousingValue HousingTooltip { get { return HousingVal; } } + [TooltipChildren] public static HousingValue HousingVal { get { return new HousingValue() + { + Category = "Kitchen", + Val = 2, + TypeForRoomLimit = "Food Storage", + DiminishingReturnPercent = 0.3f + };}} + } + + + [RequiresSkill(typeof(WoodworkingSkill), 4)] + public partial class IceboxRecipe : Recipe + { + public IceboxRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(WoodworkingEfficiencySkill), 10, WoodworkingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(WoodworkingEfficiencySkill), 10, WoodworkingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(WoodworkingEfficiencySkill), 10, WoodworkingEfficiencySkill.MultiplicativeStrategy), + }; + SkillModifiedValue value = new SkillModifiedValue(5, WoodworkingSpeedSkill.MultiplicativeStrategy, typeof(WoodworkingSpeedSkill), Localizer.Do("craft time")); + SkillModifiedValueManager.AddBenefitForObject(typeof(IceboxRecipe), Item.Get().UILink(), value); + SkillModifiedValueManager.AddSkillBenefit(Item.Get().UILink(), value); + this.CraftMinutes = value; + this.Initialize("Icebox", typeof(IceboxRecipe)); + CraftingComponent.AddRecipe(typeof(CarpentryTableObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/WorldObject/Kiln.cs b/AutoGen/WorldObject/Kiln.cs new file mode 100644 index 0000000..33e18e5 --- /dev/null +++ b/AutoGen/WorldObject/Kiln.cs @@ -0,0 +1,116 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.Components.Auth; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Economy; + using Eco.Gameplay.Housing; + using Eco.Gameplay.Interactions; + using Eco.Gameplay.Items; + using Eco.Gameplay.Minimap; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Property; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Gameplay.Pipes.LiquidComponents; + using Eco.Gameplay.Pipes.Gases; + using Eco.Gameplay.Systems.Tooltip; + using Eco.Shared; + using Eco.Shared.Math; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + using Eco.Shared.Items; + using Eco.Gameplay.Pipes; + using Eco.World.Blocks; + + [Serialized] + + [RequireComponent(typeof(PropertyAuthComponent))] + [RequireComponent(typeof(MinimapComponent))] + [RequireComponent(typeof(LinkComponent))] + [RequireComponent(typeof(CraftingComponent))] + [RequireComponent(typeof(FuelSupplyComponent))] + [RequireComponent(typeof(FuelConsumptionComponent))] + [RequireComponent(typeof(SolidGroundComponent))] + [RequireComponent(typeof(RoomRequirementsComponent))] + [RequireRoomContainment] + [RequireRoomVolume(45)] + [RequireRoomMaterialTier(1, 32)] + public partial class KilnObject : + WorldObject + { + public override string FriendlyName { get { return "Kiln"; } } + + private static Type[] fuelTypeList = new Type[] + { + typeof(LogItem), + typeof(LumberItem), + typeof(CharcoalItem), + typeof(ArrowItem), + typeof(BoardItem), + typeof(CoalItem), + }; + + protected override void Initialize() + { + this.GetComponent().Initialize("Crafting"); + this.GetComponent().Initialize(2, fuelTypeList); + this.GetComponent().Initialize(50); + + + + } + + public override void Destroy() + { + base.Destroy(); + } + + } + + [Serialized] + public partial class KilnItem : WorldObjectItem + { + public override string FriendlyName { get { return "Kiln"; } } + public override string Description { get { return "Useful for baking bricks and finishing pottery."; } } + + static KilnItem() + { + + } + + } + + + [RequiresSkill(typeof(StoneworkingSkill), 4)] + public partial class KilnRecipe : Recipe + { + public KilnRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(StoneworkingEfficiencySkill), 10, StoneworkingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(StoneworkingEfficiencySkill), 10, StoneworkingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(StoneworkingEfficiencySkill), 20, StoneworkingEfficiencySkill.MultiplicativeStrategy), + }; + SkillModifiedValue value = new SkillModifiedValue(30, StoneworkingSpeedSkill.MultiplicativeStrategy, typeof(StoneworkingSpeedSkill), Localizer.Do("craft time")); + SkillModifiedValueManager.AddBenefitForObject(typeof(KilnRecipe), Item.Get().UILink(), value); + SkillModifiedValueManager.AddSkillBenefit(Item.Get().UILink(), value); + this.CraftMinutes = value; + this.Initialize("Kiln", typeof(KilnRecipe)); + CraftingComponent.AddRecipe(typeof(MasonryTableObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/WorldObject/Kitchen.cs b/AutoGen/WorldObject/Kitchen.cs new file mode 100644 index 0000000..00e8490 --- /dev/null +++ b/AutoGen/WorldObject/Kitchen.cs @@ -0,0 +1,113 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.Components.Auth; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Economy; + using Eco.Gameplay.Housing; + using Eco.Gameplay.Interactions; + using Eco.Gameplay.Items; + using Eco.Gameplay.Minimap; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Property; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Gameplay.Pipes.LiquidComponents; + using Eco.Gameplay.Pipes.Gases; + using Eco.Gameplay.Systems.Tooltip; + using Eco.Shared; + using Eco.Shared.Math; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + using Eco.Shared.Items; + using Eco.Gameplay.Pipes; + using Eco.World.Blocks; + + [Serialized] + + [RequireComponent(typeof(PropertyAuthComponent))] + [RequireComponent(typeof(MinimapComponent))] + [RequireComponent(typeof(LinkComponent))] + [RequireComponent(typeof(CraftingComponent))] + [RequireComponent(typeof(HousingComponent))] + [RequireComponent(typeof(SolidGroundComponent))] + [RequireComponent(typeof(RoomRequirementsComponent))] + [RequireRoomContainment] + [RequireRoomVolume(25)] + [RequireRoomMaterialTier(2, 18)] + public partial class KitchenObject : + WorldObject + { + public override string FriendlyName { get { return "Kitchen"; } } + + + protected override void Initialize() + { + this.GetComponent().Initialize("Cooking"); + this.GetComponent().Set(KitchenItem.HousingVal); + + + + } + + public override void Destroy() + { + base.Destroy(); + } + + } + + [Serialized] + public partial class KitchenItem : WorldObjectItem + { + public override string FriendlyName { get { return "Kitchen"; } } + public override string Description { get { return "A prep area for food which allows for more complex dishes."; } } + + static KitchenItem() + { + + } + + [TooltipChildren] public HousingValue HousingTooltip { get { return HousingVal; } } + [TooltipChildren] public static HousingValue HousingVal { get { return new HousingValue() + { + Category = "Kitchen", + Val = 3, + TypeForRoomLimit = "Cooking", + DiminishingReturnPercent = 0.3f + };}} + } + + + [RequiresSkill(typeof(LumberWoodworkingSkill), 1)] + public partial class KitchenRecipe : Recipe + { + public KitchenRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(LumberWoodworkingEfficiencySkill), 20, LumberWoodworkingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(LumberWoodworkingEfficiencySkill), 40, LumberWoodworkingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(LumberWoodworkingEfficiencySkill), 10, LumberWoodworkingEfficiencySkill.MultiplicativeStrategy), + }; + SkillModifiedValue value = new SkillModifiedValue(120, LumberWoodworkingSpeedSkill.MultiplicativeStrategy, typeof(LumberWoodworkingSpeedSkill), Localizer.Do("craft time")); + SkillModifiedValueManager.AddBenefitForObject(typeof(KitchenRecipe), Item.Get().UILink(), value); + SkillModifiedValueManager.AddSkillBenefit(Item.Get().UILink(), value); + this.CraftMinutes = value; + this.Initialize("Kitchen", typeof(KitchenRecipe)); + CraftingComponent.AddRecipe(typeof(SawmillObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/WorldObject/Laboratory.cs b/AutoGen/WorldObject/Laboratory.cs new file mode 100644 index 0000000..15a75dc --- /dev/null +++ b/AutoGen/WorldObject/Laboratory.cs @@ -0,0 +1,106 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.Components.Auth; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Economy; + using Eco.Gameplay.Housing; + using Eco.Gameplay.Interactions; + using Eco.Gameplay.Items; + using Eco.Gameplay.Minimap; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Property; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Gameplay.Pipes.LiquidComponents; + using Eco.Gameplay.Pipes.Gases; + using Eco.Gameplay.Systems.Tooltip; + using Eco.Shared; + using Eco.Shared.Math; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + using Eco.Shared.Items; + using Eco.Gameplay.Pipes; + using Eco.World.Blocks; + + [Serialized] + + [RequireComponent(typeof(PropertyAuthComponent))] + [RequireComponent(typeof(MinimapComponent))] + [RequireComponent(typeof(LinkComponent))] + [RequireComponent(typeof(CraftingComponent))] + [RequireComponent(typeof(PowerGridComponent))] + [RequireComponent(typeof(PowerConsumptionComponent))] + [RequireComponent(typeof(SolidGroundComponent))] + [RequireComponent(typeof(RoomRequirementsComponent))] + [RequireRoomContainment] + [RequireRoomVolume(25)] + [RequireRoomMaterialTier(3, 18)] + public partial class LaboratoryObject : + WorldObject + { + public override string FriendlyName { get { return "Laboratory"; } } + + + protected override void Initialize() + { + this.GetComponent().Initialize("Cooking"); + this.GetComponent().Initialize(250); + this.GetComponent().Initialize(10, new ElectricPower()); + + + + } + + public override void Destroy() + { + base.Destroy(); + } + + } + + [Serialized] + public partial class LaboratoryItem : WorldObjectItem + { + public override string FriendlyName { get { return "Laboratory"; } } + public override string Description { get { return "For researching the science side of cooking. Science rules!"; } } + + static LaboratoryItem() + { + + } + + } + + + [RequiresSkill(typeof(IndustrialEngineeringSkill), 2)] + public partial class LaboratoryRecipe : Recipe + { + public LaboratoryRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(IndustrialEngineeringEfficiencySkill), 30, IndustrialEngineeringEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(IndustrialEngineeringEfficiencySkill), 20, IndustrialEngineeringEfficiencySkill.MultiplicativeStrategy), + }; + SkillModifiedValue value = new SkillModifiedValue(120, IndustrialEngineeringSpeedSkill.MultiplicativeStrategy, typeof(IndustrialEngineeringSpeedSkill), Localizer.Do("craft time")); + SkillModifiedValueManager.AddBenefitForObject(typeof(LaboratoryRecipe), Item.Get().UILink(), value); + SkillModifiedValueManager.AddSkillBenefit(Item.Get().UILink(), value); + this.CraftMinutes = value; + this.Initialize("Laboratory", typeof(LaboratoryRecipe)); + CraftingComponent.AddRecipe(typeof(FactoryObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/WorldObject/Laser.cs b/AutoGen/WorldObject/Laser.cs new file mode 100644 index 0000000..8b8b994 --- /dev/null +++ b/AutoGen/WorldObject/Laser.cs @@ -0,0 +1,80 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.Components.Auth; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Economy; + using Eco.Gameplay.Housing; + using Eco.Gameplay.Interactions; + using Eco.Gameplay.Items; + using Eco.Gameplay.Minimap; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Property; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Gameplay.Pipes.LiquidComponents; + using Eco.Gameplay.Pipes.Gases; + using Eco.Gameplay.Systems.Tooltip; + using Eco.Shared; + using Eco.Shared.Math; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + using Eco.Shared.Items; + using Eco.Gameplay.Pipes; + using Eco.World.Blocks; + + + [Serialized] + public partial class LaserItem : WorldObjectItem + { + public override string FriendlyName { get { return "Laser"; } } + public override string Description { get { return "AVOID DIRECT EYE EXPOSURE"; } } + + static LaserItem() + { + + } + + [TooltipChildren] public HousingValue HousingTooltip { get { return HousingVal; } } + [TooltipChildren] public static HousingValue HousingVal { get { return new HousingValue() + { + Category = "Industrial", + TypeForRoomLimit = "", + };}} + } + + + [RequiresSkill(typeof(ElectronicEngineeringSkill), 4)] + public partial class LaserRecipe : Recipe + { + public LaserRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(ElectronicEngineeringEfficiencySkill), 150, ElectronicEngineeringEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(ElectronicEngineeringEfficiencySkill), 150, ElectronicEngineeringEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(ElectronicEngineeringEfficiencySkill), 150, ElectronicEngineeringEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(ElectronicEngineeringEfficiencySkill), 150, ElectronicEngineeringEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(ElectronicEngineeringEfficiencySkill), 150, ElectronicEngineeringEfficiencySkill.MultiplicativeStrategy), + }; + SkillModifiedValue value = new SkillModifiedValue(240, ElectronicEngineeringSpeedSkill.MultiplicativeStrategy, typeof(ElectronicEngineeringSpeedSkill), Localizer.Do("craft time")); + SkillModifiedValueManager.AddBenefitForObject(typeof(LaserRecipe), Item.Get().UILink(), value); + SkillModifiedValueManager.AddSkillBenefit(Item.Get().UILink(), value); + this.CraftMinutes = value; + this.Initialize("Laser", typeof(LaserRecipe)); + CraftingComponent.AddRecipe(typeof(FactoryObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/WorldObject/MachineShop.cs b/AutoGen/WorldObject/MachineShop.cs new file mode 100644 index 0000000..b8dbadc --- /dev/null +++ b/AutoGen/WorldObject/MachineShop.cs @@ -0,0 +1,112 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.Components.Auth; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Economy; + using Eco.Gameplay.Housing; + using Eco.Gameplay.Interactions; + using Eco.Gameplay.Items; + using Eco.Gameplay.Minimap; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Property; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Gameplay.Pipes.LiquidComponents; + using Eco.Gameplay.Pipes.Gases; + using Eco.Gameplay.Systems.Tooltip; + using Eco.Shared; + using Eco.Shared.Math; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + using Eco.Shared.Items; + using Eco.Gameplay.Pipes; + using Eco.World.Blocks; + + [Serialized] + + [RequireComponent(typeof(PropertyAuthComponent))] + [RequireComponent(typeof(MinimapComponent))] + [RequireComponent(typeof(LinkComponent))] + [RequireComponent(typeof(CraftingComponent))] + [RequireComponent(typeof(HousingComponent))] + [RequireComponent(typeof(SolidGroundComponent))] + [RequireComponent(typeof(RoomRequirementsComponent))] + [RequireRoomContainment] + [RequireRoomVolume(25)] + [RequireRoomMaterialTier(2, 18)] + public partial class MachineShopObject : + WorldObject + { + public override string FriendlyName { get { return "Machine Shop"; } } + + + protected override void Initialize() + { + this.GetComponent().Initialize("Crafting"); + this.GetComponent().Set(MachineShopItem.HousingVal); + + + + } + + public override void Destroy() + { + base.Destroy(); + } + + } + + [Serialized] + public partial class MachineShopItem : WorldObjectItem + { + public override string FriendlyName { get { return "Machine Shop"; } } + public override string Description { get { return "A fancy toolbench that creates equally fancy toys."; } } + + static MachineShopItem() + { + + } + + [TooltipChildren] public HousingValue HousingTooltip { get { return HousingVal; } } + [TooltipChildren] public static HousingValue HousingVal { get { return new HousingValue() + { + Category = "Industrial", + TypeForRoomLimit = "", + };}} + } + + + [RequiresSkill(typeof(MechanicalEngineeringSkill), 0)] + public partial class MachineShopRecipe : Recipe + { + public MachineShopRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(MechanicsAssemblyEfficiencySkill), 20, MechanicsAssemblyEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(MechanicsAssemblyEfficiencySkill), 30, MechanicsAssemblyEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(MechanicsAssemblyEfficiencySkill), 15, MechanicsAssemblyEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(MechanicsAssemblyEfficiencySkill), 40, MechanicsAssemblyEfficiencySkill.MultiplicativeStrategy), + }; + SkillModifiedValue value = new SkillModifiedValue(120, MechanicsAssemblySpeedSkill.MultiplicativeStrategy, typeof(MechanicsAssemblySpeedSkill), Localizer.Do("craft time")); + SkillModifiedValueManager.AddBenefitForObject(typeof(MachineShopRecipe), Item.Get().UILink(), value); + SkillModifiedValueManager.AddSkillBenefit(Item.Get().UILink(), value); + this.CraftMinutes = value; + this.Initialize("Machine Shop", typeof(MachineShopRecipe)); + CraftingComponent.AddRecipe(typeof(AnvilObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/WorldObject/OilRefinery.cs b/AutoGen/WorldObject/OilRefinery.cs new file mode 100644 index 0000000..4c4cf44 --- /dev/null +++ b/AutoGen/WorldObject/OilRefinery.cs @@ -0,0 +1,136 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.Components.Auth; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Economy; + using Eco.Gameplay.Housing; + using Eco.Gameplay.Interactions; + using Eco.Gameplay.Items; + using Eco.Gameplay.Minimap; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Property; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Gameplay.Pipes.LiquidComponents; + using Eco.Gameplay.Pipes.Gases; + using Eco.Gameplay.Systems.Tooltip; + using Eco.Shared; + using Eco.Shared.Math; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + using Eco.Shared.Items; + using Eco.Gameplay.Pipes; + using Eco.World.Blocks; + + [Serialized] + [RequireComponent(typeof(PipeComponent))] + + [RequireComponent(typeof(PropertyAuthComponent))] + [RequireComponent(typeof(MinimapComponent))] + [RequireComponent(typeof(LinkComponent))] + [RequireComponent(typeof(CraftingComponent))] + [RequireComponent(typeof(FuelSupplyComponent))] + [RequireComponent(typeof(FuelConsumptionComponent))] + [RequireComponent(typeof(HousingComponent))] + [RequireComponent(typeof(SolidGroundComponent))] + public partial class OilRefineryObject : + WorldObject + { + public override string FriendlyName { get { return "Oil Refinery"; } } + + private static Type[] fuelTypeList = new Type[] + { + typeof(LogItem), + typeof(HewnLogItem), + typeof(LumberItem), + typeof(CharcoalItem), + typeof(ArrowItem), + typeof(BoardItem), + typeof(CoalItem), + }; + + protected override void Initialize() + { + this.GetComponent().Initialize("Crafting"); + this.GetComponent().Initialize(2, fuelTypeList); + this.GetComponent().Initialize(50); + this.GetComponent().Set(OilRefineryItem.HousingVal); + + + var tankList = new List(); + + tankList.Add(new LiquidProducer("Chimney", typeof(SmogItem), 100, + null, + this.Occupancy.Find(x => x.Name == "ChimneyOut"), + (float)(0.25f * SmogItem.SmogItemsPerCO2PPM) / TimeUtil.SecondsPerHour)); + + + + this.GetComponent().Initialize(tankList); + + } + + public override void Destroy() + { + base.Destroy(); + } + + } + + [Serialized] + public partial class OilRefineryItem : WorldObjectItem + { + public override string FriendlyName { get { return "Oil Refinery"; } } + public override string Description { get { return "Sets of pipes and tanks which refine crude petroleum into usable products."; } } + + static OilRefineryItem() + { + + + + + } + + [TooltipChildren] public HousingValue HousingTooltip { get { return HousingVal; } } + [TooltipChildren] public static HousingValue HousingVal { get { return new HousingValue() + { + Category = "Industrial", + TypeForRoomLimit = "", + };}} + } + + + [RequiresSkill(typeof(MechanicalEngineeringSkill), 4)] + public partial class OilRefineryRecipe : Recipe + { + public OilRefineryRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(MechanicsAssemblyEfficiencySkill), 10, MechanicsAssemblyEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(MechanicsAssemblyEfficiencySkill), 10, MechanicsAssemblyEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(MechanicsAssemblyEfficiencySkill), 35, MechanicsAssemblyEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(MechanicsAssemblyEfficiencySkill), 1, MechanicsAssemblyEfficiencySkill.MultiplicativeStrategy), + }; + SkillModifiedValue value = new SkillModifiedValue(50, MechanicsAssemblySpeedSkill.MultiplicativeStrategy, typeof(MechanicsAssemblySpeedSkill), Localizer.Do("craft time")); + SkillModifiedValueManager.AddBenefitForObject(typeof(OilRefineryRecipe), Item.Get().UILink(), value); + SkillModifiedValueManager.AddSkillBenefit(Item.Get().UILink(), value); + this.CraftMinutes = value; + this.Initialize("Oil Refinery", typeof(OilRefineryRecipe)); + CraftingComponent.AddRecipe(typeof(MachineShopObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/WorldObject/PaddedChair.cs b/AutoGen/WorldObject/PaddedChair.cs new file mode 100644 index 0000000..54ff128 --- /dev/null +++ b/AutoGen/WorldObject/PaddedChair.cs @@ -0,0 +1,108 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.Components.Auth; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Economy; + using Eco.Gameplay.Housing; + using Eco.Gameplay.Interactions; + using Eco.Gameplay.Items; + using Eco.Gameplay.Minimap; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Property; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Gameplay.Pipes.LiquidComponents; + using Eco.Gameplay.Pipes.Gases; + using Eco.Gameplay.Systems.Tooltip; + using Eco.Shared; + using Eco.Shared.Math; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + using Eco.Shared.Items; + using Eco.Gameplay.Pipes; + using Eco.World.Blocks; + + [Serialized] + + [RequireComponent(typeof(PropertyAuthComponent))] + [RequireComponent(typeof(MinimapComponent))] + [RequireComponent(typeof(HousingComponent))] + [RequireComponent(typeof(SolidGroundComponent))] + public partial class PaddedChairObject : + WorldObject + { + public override string FriendlyName { get { return "Padded Chair"; } } + + + protected override void Initialize() + { + this.GetComponent().Initialize("Housing"); + this.GetComponent().Set(PaddedChairItem.HousingVal); + + + + } + + public override void Destroy() + { + base.Destroy(); + } + + } + + [Serialized] + public partial class PaddedChairItem : WorldObjectItem + { + public override string FriendlyName { get { return "Padded Chair"; } } + public override string Description { get { return "A comfy chair to rest in."; } } + + static PaddedChairItem() + { + + } + + [TooltipChildren] public HousingValue HousingTooltip { get { return HousingVal; } } + [TooltipChildren] public static HousingValue HousingVal { get { return new HousingValue() + { + Category = "Living", + Val = 2, + TypeForRoomLimit = "Seating", + DiminishingReturnPercent = 0.8f + };}} + } + + + [RequiresSkill(typeof(ClothProductionSkill), 3)] + public partial class PaddedChairRecipe : Recipe + { + public PaddedChairRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(ClothProductionEfficiencySkill), 5, ClothProductionEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(ClothProductionEfficiencySkill), 20, ClothProductionEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(ClothProductionEfficiencySkill), 10, ClothProductionEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(ClothProductionEfficiencySkill), 5, ClothProductionEfficiencySkill.MultiplicativeStrategy), + }; + SkillModifiedValue value = new SkillModifiedValue(5, ClothProductionSpeedSkill.MultiplicativeStrategy, typeof(ClothProductionSpeedSkill), Localizer.Do("craft time")); + SkillModifiedValueManager.AddBenefitForObject(typeof(PaddedChairRecipe), Item.Get().UILink(), value); + SkillModifiedValueManager.AddSkillBenefit(Item.Get().UILink(), value); + this.CraftMinutes = value; + this.Initialize("Padded Chair", typeof(PaddedChairRecipe)); + CraftingComponent.AddRecipe(typeof(TailoringTableObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/WorldObject/PlanterPotRound.cs b/AutoGen/WorldObject/PlanterPotRound.cs new file mode 100644 index 0000000..b6c755a --- /dev/null +++ b/AutoGen/WorldObject/PlanterPotRound.cs @@ -0,0 +1,106 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.Components.Auth; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Economy; + using Eco.Gameplay.Housing; + using Eco.Gameplay.Interactions; + using Eco.Gameplay.Items; + using Eco.Gameplay.Minimap; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Property; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Gameplay.Pipes.LiquidComponents; + using Eco.Gameplay.Pipes.Gases; + using Eco.Gameplay.Systems.Tooltip; + using Eco.Shared; + using Eco.Shared.Math; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + using Eco.Shared.Items; + using Eco.Gameplay.Pipes; + using Eco.World.Blocks; + + [Serialized] + + [RequireComponent(typeof(PropertyAuthComponent))] + [RequireComponent(typeof(MinimapComponent))] + [RequireComponent(typeof(HousingComponent))] + [RequireComponent(typeof(SolidGroundComponent))] + public partial class PlanterPotRoundObject : + WorldObject + { + public override string FriendlyName { get { return "Round Pot"; } } + + + protected override void Initialize() + { + this.GetComponent().Initialize("Housing"); + this.GetComponent().Set(PlanterPotRoundItem.HousingVal); + + + + } + + public override void Destroy() + { + base.Destroy(); + } + + } + + [Serialized] + public partial class PlanterPotRoundItem : WorldObjectItem + { + public override string FriendlyName { get { return "Round Pot"; } } + public override string Description { get { return "Sometimes you just want to bring a little bit of nature into your house."; } } + + static PlanterPotRoundItem() + { + + } + + [TooltipChildren] public HousingValue HousingTooltip { get { return HousingVal; } } + [TooltipChildren] public static HousingValue HousingVal { get { return new HousingValue() + { + Category = "General", + Val = 1, + TypeForRoomLimit = "Decoration", + DiminishingReturnPercent = 0.9f + };}} + } + + + [RequiresSkill(typeof(StoneworkingSkill), 3)] + public partial class PlanterPotRoundRecipe : Recipe + { + public PlanterPotRoundRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(StoneworkingEfficiencySkill), 10, StoneworkingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(StoneworkingEfficiencySkill), 2, StoneworkingEfficiencySkill.MultiplicativeStrategy), + }; + SkillModifiedValue value = new SkillModifiedValue(5, StoneworkingSpeedSkill.MultiplicativeStrategy, typeof(StoneworkingSpeedSkill), Localizer.Do("craft time")); + SkillModifiedValueManager.AddBenefitForObject(typeof(PlanterPotRoundRecipe), Item.Get().UILink(), value); + SkillModifiedValueManager.AddSkillBenefit(Item.Get().UILink(), value); + this.CraftMinutes = value; + this.Initialize("Planter Pot Round", typeof(PlanterPotRoundRecipe)); + CraftingComponent.AddRecipe(typeof(KilnObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/WorldObject/PlanterPotSquare.cs b/AutoGen/WorldObject/PlanterPotSquare.cs new file mode 100644 index 0000000..f9196d2 --- /dev/null +++ b/AutoGen/WorldObject/PlanterPotSquare.cs @@ -0,0 +1,106 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.Components.Auth; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Economy; + using Eco.Gameplay.Housing; + using Eco.Gameplay.Interactions; + using Eco.Gameplay.Items; + using Eco.Gameplay.Minimap; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Property; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Gameplay.Pipes.LiquidComponents; + using Eco.Gameplay.Pipes.Gases; + using Eco.Gameplay.Systems.Tooltip; + using Eco.Shared; + using Eco.Shared.Math; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + using Eco.Shared.Items; + using Eco.Gameplay.Pipes; + using Eco.World.Blocks; + + [Serialized] + + [RequireComponent(typeof(PropertyAuthComponent))] + [RequireComponent(typeof(MinimapComponent))] + [RequireComponent(typeof(HousingComponent))] + [RequireComponent(typeof(SolidGroundComponent))] + public partial class PlanterPotSquareObject : + WorldObject + { + public override string FriendlyName { get { return "Square Pot"; } } + + + protected override void Initialize() + { + this.GetComponent().Initialize("Housing"); + this.GetComponent().Set(PlanterPotSquareItem.HousingVal); + + + + } + + public override void Destroy() + { + base.Destroy(); + } + + } + + [Serialized] + public partial class PlanterPotSquareItem : WorldObjectItem + { + public override string FriendlyName { get { return "Square Pot"; } } + public override string Description { get { return "Sometimes you just want to bring a little bit of nature into your house."; } } + + static PlanterPotSquareItem() + { + + } + + [TooltipChildren] public HousingValue HousingTooltip { get { return HousingVal; } } + [TooltipChildren] public static HousingValue HousingVal { get { return new HousingValue() + { + Category = "General", + Val = 1, + TypeForRoomLimit = "Decoration", + DiminishingReturnPercent = 0.9f + };}} + } + + + [RequiresSkill(typeof(StoneworkingSkill), 3)] + public partial class PlanterPotSquareRecipe : Recipe + { + public PlanterPotSquareRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(StoneworkingEfficiencySkill), 10, StoneworkingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(StoneworkingEfficiencySkill), 2, StoneworkingEfficiencySkill.MultiplicativeStrategy), + }; + SkillModifiedValue value = new SkillModifiedValue(5, StoneworkingSpeedSkill.MultiplicativeStrategy, typeof(StoneworkingSpeedSkill), Localizer.Do("craft time")); + SkillModifiedValueManager.AddBenefitForObject(typeof(PlanterPotSquareRecipe), Item.Get().UILink(), value); + SkillModifiedValueManager.AddSkillBenefit(Item.Get().UILink(), value); + this.CraftMinutes = value; + this.Initialize("Planter Pot Square", typeof(PlanterPotSquareRecipe)); + CraftingComponent.AddRecipe(typeof(KilnObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/WorldObject/PumpJack.cs b/AutoGen/WorldObject/PumpJack.cs new file mode 100644 index 0000000..96182e6 --- /dev/null +++ b/AutoGen/WorldObject/PumpJack.cs @@ -0,0 +1,112 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.Components.Auth; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Economy; + using Eco.Gameplay.Housing; + using Eco.Gameplay.Interactions; + using Eco.Gameplay.Items; + using Eco.Gameplay.Minimap; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Property; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Gameplay.Pipes.LiquidComponents; + using Eco.Gameplay.Pipes.Gases; + using Eco.Gameplay.Systems.Tooltip; + using Eco.Shared; + using Eco.Shared.Math; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + using Eco.Shared.Items; + using Eco.Gameplay.Pipes; + using Eco.World.Blocks; + + [Serialized] + + [RequireComponent(typeof(PropertyAuthComponent))] + [RequireComponent(typeof(MinimapComponent))] + [RequireComponent(typeof(LinkComponent))] + [RequireComponent(typeof(CraftingComponent))] + [RequireComponent(typeof(PowerGridComponent))] + [RequireComponent(typeof(PowerConsumptionComponent))] + [RequireComponent(typeof(HousingComponent))] + [RequireComponent(typeof(SolidGroundComponent))] + public partial class PumpJackObject : + WorldObject + { + public override string FriendlyName { get { return "Pump Jack"; } } + + + protected override void Initialize() + { + this.GetComponent().Initialize("Crafting"); + this.GetComponent().Initialize(100); + this.GetComponent().Initialize(10, new ElectricPower()); + this.GetComponent().Set(PumpJackItem.HousingVal); + + + + } + + public override void Destroy() + { + base.Destroy(); + } + + } + + [Serialized] + public partial class PumpJackItem : WorldObjectItem + { + public override string FriendlyName { get { return "Pump Jack"; } } + public override string Description { get { return "Drill, baby! Drill!"; } } + + static PumpJackItem() + { + + } + + [TooltipChildren] public HousingValue HousingTooltip { get { return HousingVal; } } + [TooltipChildren] public static HousingValue HousingVal { get { return new HousingValue() + { + Category = "Industrial", + TypeForRoomLimit = "", + };}} + } + + + [RequiresSkill(typeof(MechanicalEngineeringSkill), 4)] + public partial class PumpJackRecipe : Recipe + { + public PumpJackRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(MechanicsAssemblyEfficiencySkill), 20, MechanicsAssemblyEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(MechanicsAssemblyEfficiencySkill), 30, MechanicsAssemblyEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(MechanicsAssemblyEfficiencySkill), 5, MechanicsAssemblyEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(MechanicsAssemblyEfficiencySkill), 10, MechanicsAssemblyEfficiencySkill.MultiplicativeStrategy), + }; + SkillModifiedValue value = new SkillModifiedValue(50, MechanicsAssemblySpeedSkill.MultiplicativeStrategy, typeof(MechanicsAssemblySpeedSkill), Localizer.Do("craft time")); + SkillModifiedValueManager.AddBenefitForObject(typeof(PumpJackRecipe), Item.Get().UILink(), value); + SkillModifiedValueManager.AddSkillBenefit(Item.Get().UILink(), value); + this.CraftMinutes = value; + this.Initialize("Pump Jack", typeof(PumpJackRecipe)); + CraftingComponent.AddRecipe(typeof(MachineShopObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/WorldObject/Refrigerator.cs b/AutoGen/WorldObject/Refrigerator.cs new file mode 100644 index 0000000..3090041 --- /dev/null +++ b/AutoGen/WorldObject/Refrigerator.cs @@ -0,0 +1,117 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.Components.Auth; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Economy; + using Eco.Gameplay.Housing; + using Eco.Gameplay.Interactions; + using Eco.Gameplay.Items; + using Eco.Gameplay.Minimap; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Property; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Gameplay.Pipes.LiquidComponents; + using Eco.Gameplay.Pipes.Gases; + using Eco.Gameplay.Systems.Tooltip; + using Eco.Shared; + using Eco.Shared.Math; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + using Eco.Shared.Items; + using Eco.Gameplay.Pipes; + using Eco.World.Blocks; + + [Serialized] + + [RequireComponent(typeof(PropertyAuthComponent))] + [RequireComponent(typeof(MinimapComponent))] + [RequireComponent(typeof(LinkComponent))] + [RequireComponent(typeof(PowerGridComponent))] + [RequireComponent(typeof(PowerConsumptionComponent))] + [RequireComponent(typeof(HousingComponent))] + [RequireComponent(typeof(PublicStorageComponent))] + [RequireComponent(typeof(SolidGroundComponent))] + public partial class RefrigeratorObject : + WorldObject + { + public override string FriendlyName { get { return "Refrigerator"; } } + + + protected override void Initialize() + { + this.GetComponent().Initialize("Housing"); + this.GetComponent().Initialize(100); + this.GetComponent().Initialize(10, new ElectricPower()); + this.GetComponent().Set(RefrigeratorItem.HousingVal); + + var storage = this.GetComponent(); + storage.Initialize(8); + storage.Storage.AddRestriction(new NotCarriedRestriction()); // can't store block or large items + + + } + + public override void Destroy() + { + base.Destroy(); + } + + } + + [Serialized] + public partial class RefrigeratorItem : WorldObjectItem + { + public override string FriendlyName { get { return "Refrigerator"; } } + public override string Description { get { return "An icebox from the future with significantly better cooling properties."; } } + + static RefrigeratorItem() + { + + } + + [TooltipChildren] public HousingValue HousingTooltip { get { return HousingVal; } } + [TooltipChildren] public static HousingValue HousingVal { get { return new HousingValue() + { + Category = "Kitchen", + Val = 10, + TypeForRoomLimit = "Food Storage", + DiminishingReturnPercent = 0.3f + };}} + } + + + [RequiresSkill(typeof(IndustrialEngineeringSkill), 3)] + public partial class RefrigeratorRecipe : Recipe + { + public RefrigeratorRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(IndustrialEngineeringEfficiencySkill), 18, IndustrialEngineeringEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(IndustrialEngineeringEfficiencySkill), 10, IndustrialEngineeringEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(IndustrialEngineeringEfficiencySkill), 5, IndustrialEngineeringEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(IndustrialEngineeringEfficiencySkill), 5, IndustrialEngineeringEfficiencySkill.MultiplicativeStrategy), + }; + SkillModifiedValue value = new SkillModifiedValue(10, IndustrialEngineeringSpeedSkill.MultiplicativeStrategy, typeof(IndustrialEngineeringSpeedSkill), Localizer.Do("craft time")); + SkillModifiedValueManager.AddBenefitForObject(typeof(RefrigeratorRecipe), Item.Get().UILink(), value); + SkillModifiedValueManager.AddSkillBenefit(Item.Get().UILink(), value); + this.CraftMinutes = value; + this.Initialize("Refrigerator", typeof(RefrigeratorRecipe)); + CraftingComponent.AddRecipe(typeof(FactoryObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/WorldObject/ResearchTable.cs b/AutoGen/WorldObject/ResearchTable.cs new file mode 100644 index 0000000..d858911 --- /dev/null +++ b/AutoGen/WorldObject/ResearchTable.cs @@ -0,0 +1,104 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.Components.Auth; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Economy; + using Eco.Gameplay.Housing; + using Eco.Gameplay.Interactions; + using Eco.Gameplay.Items; + using Eco.Gameplay.Minimap; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Property; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Gameplay.Pipes.LiquidComponents; + using Eco.Gameplay.Pipes.Gases; + using Eco.Gameplay.Systems.Tooltip; + using Eco.Shared; + using Eco.Shared.Math; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + using Eco.Shared.Items; + using Eco.Gameplay.Pipes; + using Eco.World.Blocks; + + [Serialized] + + [RequireComponent(typeof(PropertyAuthComponent))] + [RequireComponent(typeof(MinimapComponent))] + [RequireComponent(typeof(LinkComponent))] + [RequireComponent(typeof(CraftingComponent))] + [RequireComponent(typeof(SolidGroundComponent))] + [RequireComponent(typeof(RoomRequirementsComponent))] + [RequireRoomContainment] + [RequireRoomVolume(25)] + [RequireRoomMaterialTier(1, 18)] + public partial class ResearchTableObject : + WorldObject + { + public override string FriendlyName { get { return "Research Table"; } } + + + protected override void Initialize() + { + this.GetComponent().Initialize("Research"); + + + + } + + public override void Destroy() + { + base.Destroy(); + } + + } + + [Serialized] + public partial class ResearchTableItem : WorldObjectItem + { + public override string FriendlyName { get { return "Research Table"; } } + public override string Description { get { return "A basic table for researching new technologies and skills."; } } + + static ResearchTableItem() + { + + } + + } + + + [RequiresSkill(typeof(BasicCraftingSkill), 1)] + public partial class ResearchTableRecipe : Recipe + { + public ResearchTableRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(BasicCraftingEfficiencySkill), 30, BasicCraftingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(BasicCraftingEfficiencySkill), 40, BasicCraftingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(BasicCraftingEfficiencySkill), 30, BasicCraftingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(BasicCraftingEfficiencySkill), 1, BasicCraftingEfficiencySkill.MultiplicativeStrategy), + }; + SkillModifiedValue value = new SkillModifiedValue(5, BasicCraftingSpeedSkill.MultiplicativeStrategy, typeof(BasicCraftingSpeedSkill), Localizer.Do("craft time")); + SkillModifiedValueManager.AddBenefitForObject(typeof(ResearchTableRecipe), Item.Get().UILink(), value); + SkillModifiedValueManager.AddSkillBenefit(Item.Get().UILink(), value); + this.CraftMinutes = value; + this.Initialize("Research Table", typeof(ResearchTableRecipe)); + CraftingComponent.AddRecipe(typeof(WorkbenchObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/WorldObject/RollingMill.cs b/AutoGen/WorldObject/RollingMill.cs new file mode 100644 index 0000000..f448876 --- /dev/null +++ b/AutoGen/WorldObject/RollingMill.cs @@ -0,0 +1,106 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.Components.Auth; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Economy; + using Eco.Gameplay.Housing; + using Eco.Gameplay.Interactions; + using Eco.Gameplay.Items; + using Eco.Gameplay.Minimap; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Property; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Gameplay.Pipes.LiquidComponents; + using Eco.Gameplay.Pipes.Gases; + using Eco.Gameplay.Systems.Tooltip; + using Eco.Shared; + using Eco.Shared.Math; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + using Eco.Shared.Items; + using Eco.Gameplay.Pipes; + using Eco.World.Blocks; + + [Serialized] + + [RequireComponent(typeof(PropertyAuthComponent))] + [RequireComponent(typeof(MinimapComponent))] + [RequireComponent(typeof(LinkComponent))] + [RequireComponent(typeof(CraftingComponent))] + [RequireComponent(typeof(PowerGridComponent))] + [RequireComponent(typeof(PowerConsumptionComponent))] + [RequireComponent(typeof(SolidGroundComponent))] + [RequireComponent(typeof(RoomRequirementsComponent))] + [RequireRoomContainment] + [RequireRoomVolume(25)] + [RequireRoomMaterialTier(2, 18)] + public partial class RollingMillObject : + WorldObject + { + public override string FriendlyName { get { return "Rolling Mill"; } } + + + protected override void Initialize() + { + this.GetComponent().Initialize("Crafting"); + this.GetComponent().Initialize(250); + this.GetComponent().Initialize(10, new ElectricPower()); + + + + } + + public override void Destroy() + { + base.Destroy(); + } + + } + + [Serialized] + public partial class RollingMillItem : WorldObjectItem + { + public override string FriendlyName { get { return "Rolling Mill"; } } + public override string Description { get { return "For rolling steel into more buildable materials."; } } + + static RollingMillItem() + { + + } + + } + + + [RequiresSkill(typeof(SteelworkingSkill), 1)] + public partial class RollingMillRecipe : Recipe + { + public RollingMillRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(SteelworkingEfficiencySkill), 20, SteelworkingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(SteelworkingEfficiencySkill), 15, SteelworkingEfficiencySkill.MultiplicativeStrategy), + }; + SkillModifiedValue value = new SkillModifiedValue(45, SteelworkingSpeedSkill.MultiplicativeStrategy, typeof(SteelworkingSpeedSkill), Localizer.Do("craft time")); + SkillModifiedValueManager.AddBenefitForObject(typeof(RollingMillRecipe), Item.Get().UILink(), value); + SkillModifiedValueManager.AddSkillBenefit(Item.Get().UILink(), value); + this.CraftMinutes = value; + this.Initialize("Rolling Mill", typeof(RollingMillRecipe)); + CraftingComponent.AddRecipe(typeof(MachineShopObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/WorldObject/Sawmill.cs b/AutoGen/WorldObject/Sawmill.cs new file mode 100644 index 0000000..af0cf3e --- /dev/null +++ b/AutoGen/WorldObject/Sawmill.cs @@ -0,0 +1,106 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.Components.Auth; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Economy; + using Eco.Gameplay.Housing; + using Eco.Gameplay.Interactions; + using Eco.Gameplay.Items; + using Eco.Gameplay.Minimap; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Property; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Gameplay.Pipes.LiquidComponents; + using Eco.Gameplay.Pipes.Gases; + using Eco.Gameplay.Systems.Tooltip; + using Eco.Shared; + using Eco.Shared.Math; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + using Eco.Shared.Items; + using Eco.Gameplay.Pipes; + using Eco.World.Blocks; + + [Serialized] + + [RequireComponent(typeof(PropertyAuthComponent))] + [RequireComponent(typeof(MinimapComponent))] + [RequireComponent(typeof(LinkComponent))] + [RequireComponent(typeof(CraftingComponent))] + [RequireComponent(typeof(PowerGridComponent))] + [RequireComponent(typeof(PowerConsumptionComponent))] + [RequireComponent(typeof(SolidGroundComponent))] + [RequireComponent(typeof(RoomRequirementsComponent))] + [RequireRoomContainment] + [RequireRoomVolume(25)] + [RequireRoomMaterialTier(1, 18)] + public partial class SawmillObject : + WorldObject + { + public override string FriendlyName { get { return "Sawmill"; } } + + + protected override void Initialize() + { + this.GetComponent().Initialize("Crafting"); + this.GetComponent().Initialize(100); + this.GetComponent().Initialize(5, new MechanicalPower()); + + + + } + + public override void Destroy() + { + base.Destroy(); + } + + } + + [Serialized] + public partial class SawmillItem : WorldObjectItem + { + public override string FriendlyName { get { return "Sawmill"; } } + public override string Description { get { return "Used to saw wood into lumber."; } } + + static SawmillItem() + { + + } + + } + + + [RequiresSkill(typeof(LumberWoodworkingSkill), 0)] + public partial class SawmillRecipe : Recipe + { + public SawmillRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(LumberWoodworkingEfficiencySkill), 20, LumberWoodworkingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(LumberWoodworkingEfficiencySkill), 30, LumberWoodworkingEfficiencySkill.MultiplicativeStrategy), + }; + SkillModifiedValue value = new SkillModifiedValue(15, LumberWoodworkingSpeedSkill.MultiplicativeStrategy, typeof(LumberWoodworkingSpeedSkill), Localizer.Do("craft time")); + SkillModifiedValueManager.AddBenefitForObject(typeof(SawmillRecipe), Item.Get().UILink(), value); + SkillModifiedValueManager.AddSkillBenefit(Item.Get().UILink(), value); + this.CraftMinutes = value; + this.Initialize("Sawmill", typeof(SawmillRecipe)); + CraftingComponent.AddRecipe(typeof(AnvilObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/WorldObject/ShelfCabinet.cs b/AutoGen/WorldObject/ShelfCabinet.cs new file mode 100644 index 0000000..4532884 --- /dev/null +++ b/AutoGen/WorldObject/ShelfCabinet.cs @@ -0,0 +1,112 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.Components.Auth; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Economy; + using Eco.Gameplay.Housing; + using Eco.Gameplay.Interactions; + using Eco.Gameplay.Items; + using Eco.Gameplay.Minimap; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Property; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Gameplay.Pipes.LiquidComponents; + using Eco.Gameplay.Pipes.Gases; + using Eco.Gameplay.Systems.Tooltip; + using Eco.Shared; + using Eco.Shared.Math; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + using Eco.Shared.Items; + using Eco.Gameplay.Pipes; + using Eco.World.Blocks; + + [Serialized] + + [RequireComponent(typeof(PropertyAuthComponent))] + [RequireComponent(typeof(MinimapComponent))] + [RequireComponent(typeof(LinkComponent))] + [RequireComponent(typeof(HousingComponent))] + [RequireComponent(typeof(PublicStorageComponent))] + [RequireComponent(typeof(SolidGroundComponent))] + public partial class ShelfCabinetObject : + WorldObject + { + public override string FriendlyName { get { return "Shelf Cabinet"; } } + + + protected override void Initialize() + { + this.GetComponent().Initialize("Housing"); + this.GetComponent().Set(ShelfCabinetItem.HousingVal); + + var storage = this.GetComponent(); + storage.Initialize(8); + storage.Storage.AddRestriction(new NotCarriedRestriction()); // can't store block or large items + + + } + + public override void Destroy() + { + base.Destroy(); + } + + } + + [Serialized] + public partial class ShelfCabinetItem : WorldObjectItem + { + public override string FriendlyName { get { return "Shelf Cabinet"; } } + public override string Description { get { return "When a shelf and a cabinet aren't enough individually."; } } + + static ShelfCabinetItem() + { + + } + + [TooltipChildren] public HousingValue HousingTooltip { get { return HousingVal; } } + [TooltipChildren] public static HousingValue HousingVal { get { return new HousingValue() + { + Category = "General", + Val = 2, + TypeForRoomLimit = "Shelves", + DiminishingReturnPercent = 0.7f + };}} + } + + + [RequiresSkill(typeof(LumberWoodworkingSkill), 3)] + public partial class ShelfCabinetRecipe : Recipe + { + public ShelfCabinetRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(LumberWoodworkingEfficiencySkill), 20, LumberWoodworkingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(LumberWoodworkingEfficiencySkill), 100, LumberWoodworkingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(LumberWoodworkingEfficiencySkill), 5, LumberWoodworkingEfficiencySkill.MultiplicativeStrategy), + }; + SkillModifiedValue value = new SkillModifiedValue(5, LumberWoodworkingSpeedSkill.MultiplicativeStrategy, typeof(LumberWoodworkingSpeedSkill), Localizer.Do("craft time")); + SkillModifiedValueManager.AddBenefitForObject(typeof(ShelfCabinetRecipe), Item.Get().UILink(), value); + SkillModifiedValueManager.AddSkillBenefit(Item.Get().UILink(), value); + this.CraftMinutes = value; + this.Initialize("Shelf Cabinet", typeof(ShelfCabinetRecipe)); + CraftingComponent.AddRecipe(typeof(SawmillObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/WorldObject/SmallTable.cs b/AutoGen/WorldObject/SmallTable.cs new file mode 100644 index 0000000..55dac9c --- /dev/null +++ b/AutoGen/WorldObject/SmallTable.cs @@ -0,0 +1,106 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.Components.Auth; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Economy; + using Eco.Gameplay.Housing; + using Eco.Gameplay.Interactions; + using Eco.Gameplay.Items; + using Eco.Gameplay.Minimap; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Property; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Gameplay.Pipes.LiquidComponents; + using Eco.Gameplay.Pipes.Gases; + using Eco.Gameplay.Systems.Tooltip; + using Eco.Shared; + using Eco.Shared.Math; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + using Eco.Shared.Items; + using Eco.Gameplay.Pipes; + using Eco.World.Blocks; + + [Serialized] + + [RequireComponent(typeof(PropertyAuthComponent))] + [RequireComponent(typeof(MinimapComponent))] + [RequireComponent(typeof(HousingComponent))] + [RequireComponent(typeof(SolidGroundComponent))] + public partial class SmallTableObject : + WorldObject + { + public override string FriendlyName { get { return "Small Table"; } } + + + protected override void Initialize() + { + this.GetComponent().Initialize("Misc"); + this.GetComponent().Set(SmallTableItem.HousingVal); + + + + } + + public override void Destroy() + { + base.Destroy(); + } + + } + + [Serialized] + public partial class SmallTableItem : WorldObjectItem + { + public override string FriendlyName { get { return "Small Table"; } } + public override string Description { get { return "More of a nightstand than a table, really."; } } + + static SmallTableItem() + { + + } + + [TooltipChildren] public HousingValue HousingTooltip { get { return HousingVal; } } + [TooltipChildren] public static HousingValue HousingVal { get { return new HousingValue() + { + Category = "General", + Val = 1, + TypeForRoomLimit = "Table", + DiminishingReturnPercent = 0.7f + };}} + } + + + [RequiresSkill(typeof(WoodworkingSkill), 2)] + public partial class SmallTableRecipe : Recipe + { + public SmallTableRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(WoodworkingEfficiencySkill), 8, WoodworkingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(WoodworkingEfficiencySkill), 15, WoodworkingEfficiencySkill.MultiplicativeStrategy), + }; + SkillModifiedValue value = new SkillModifiedValue(5, WoodworkingSpeedSkill.MultiplicativeStrategy, typeof(WoodworkingSpeedSkill), Localizer.Do("craft time")); + SkillModifiedValueManager.AddBenefitForObject(typeof(SmallTableRecipe), Item.Get().UILink(), value); + SkillModifiedValueManager.AddSkillBenefit(Item.Get().UILink(), value); + this.CraftMinutes = value; + this.Initialize("Small Table", typeof(SmallTableRecipe)); + CraftingComponent.AddRecipe(typeof(CarpentryTableObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/WorldObject/SmallWoodSign.cs b/AutoGen/WorldObject/SmallWoodSign.cs new file mode 100644 index 0000000..2029e1b --- /dev/null +++ b/AutoGen/WorldObject/SmallWoodSign.cs @@ -0,0 +1,70 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.Components.Auth; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Economy; + using Eco.Gameplay.Housing; + using Eco.Gameplay.Interactions; + using Eco.Gameplay.Items; + using Eco.Gameplay.Minimap; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Property; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Gameplay.Pipes.LiquidComponents; + using Eco.Gameplay.Pipes.Gases; + using Eco.Gameplay.Systems.Tooltip; + using Eco.Shared; + using Eco.Shared.Math; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + using Eco.Shared.Items; + using Eco.Gameplay.Pipes; + using Eco.World.Blocks; + + + [Serialized] + public partial class SmallWoodSignItem : WorldObjectItem + { + public override string FriendlyName { get { return "Small Wood Sign"; } } + public override string Description { get { return "A small wooden sign for all your small text needs."; } } + + static SmallWoodSignItem() + { + + } + + } + + + [RequiresSkill(typeof(WoodworkingSkill), 1)] + public partial class SmallWoodSignRecipe : Recipe + { + public SmallWoodSignRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(WoodworkingEfficiencySkill), 8, WoodworkingEfficiencySkill.MultiplicativeStrategy), + }; + SkillModifiedValue value = new SkillModifiedValue(1, WoodworkingSpeedSkill.MultiplicativeStrategy, typeof(WoodworkingSpeedSkill), Localizer.Do("craft time")); + SkillModifiedValueManager.AddBenefitForObject(typeof(SmallWoodSignRecipe), Item.Get().UILink(), value); + SkillModifiedValueManager.AddSkillBenefit(Item.Get().UILink(), value); + this.CraftMinutes = value; + this.Initialize("Small Wood Sign", typeof(SmallWoodSignRecipe)); + CraftingComponent.AddRecipe(typeof(CarpentryTableObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/WorldObject/SolarGenerator.cs b/AutoGen/WorldObject/SolarGenerator.cs new file mode 100644 index 0000000..d3c5a47 --- /dev/null +++ b/AutoGen/WorldObject/SolarGenerator.cs @@ -0,0 +1,112 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.Components.Auth; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Economy; + using Eco.Gameplay.Housing; + using Eco.Gameplay.Interactions; + using Eco.Gameplay.Items; + using Eco.Gameplay.Minimap; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Property; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Gameplay.Pipes.LiquidComponents; + using Eco.Gameplay.Pipes.Gases; + using Eco.Gameplay.Systems.Tooltip; + using Eco.Shared; + using Eco.Shared.Math; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + using Eco.Shared.Items; + using Eco.Gameplay.Pipes; + using Eco.World.Blocks; + + [Serialized] + [RequireComponent(typeof(OnOffComponent))] + + [RequireComponent(typeof(PropertyAuthComponent))] + [RequireComponent(typeof(MinimapComponent))] + [RequireComponent(typeof(LinkComponent))] + [RequireComponent(typeof(PowerGridComponent))] + [RequireComponent(typeof(PowerGeneratorComponent))] + [RequireComponent(typeof(HousingComponent))] + [RequireComponent(typeof(SolidGroundComponent))] + public partial class SolarGeneratorObject : + WorldObject + { + public override string FriendlyName { get { return "Solar Generator"; } } + + + protected override void Initialize() + { + this.GetComponent().Initialize("Power"); + this.GetComponent().Initialize(30, new ElectricPower()); + this.GetComponent().Initialize(1000); + this.GetComponent().Set(SolarGeneratorItem.HousingVal); + + + + } + + public override void Destroy() + { + base.Destroy(); + } + + } + + [Serialized] + public partial class SolarGeneratorItem : WorldObjectItem + { + public override string FriendlyName { get { return "Solar Generator"; } } + public override string Description { get { return "Generates electrical power from the sun! It also stores energy to work at night."; } } + + static SolarGeneratorItem() + { + + } + + [TooltipChildren] public HousingValue HousingTooltip { get { return HousingVal; } } + [TooltipChildren] public static HousingValue HousingVal { get { return new HousingValue() + { + Category = "Industrial", + TypeForRoomLimit = "", + };}} + } + + + [RequiresSkill(typeof(ElectronicEngineeringSkill), 4)] + public partial class SolarGeneratorRecipe : Recipe + { + public SolarGeneratorRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(ElectronicEngineeringEfficiencySkill), 20, ElectronicEngineeringEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(ElectronicEngineeringEfficiencySkill), 10, ElectronicEngineeringEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(ElectronicEngineeringEfficiencySkill), 10, ElectronicEngineeringEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(ElectronicEngineeringEfficiencySkill), 4, ElectronicEngineeringEfficiencySkill.MultiplicativeStrategy), + }; + SkillModifiedValue value = new SkillModifiedValue(50, ElectronicEngineeringSpeedSkill.MultiplicativeStrategy, typeof(ElectronicEngineeringSpeedSkill), Localizer.Do("craft time")); + SkillModifiedValueManager.AddBenefitForObject(typeof(SolarGeneratorRecipe), Item.Get().UILink(), value); + SkillModifiedValueManager.AddSkillBenefit(Item.Get().UILink(), value); + this.CraftMinutes = value; + this.Initialize("Solar Generator", typeof(SolarGeneratorRecipe)); + CraftingComponent.AddRecipe(typeof(ElectronicsAssemblyObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/WorldObject/SteelCeilingLight.cs b/AutoGen/WorldObject/SteelCeilingLight.cs new file mode 100644 index 0000000..f79fd6c --- /dev/null +++ b/AutoGen/WorldObject/SteelCeilingLight.cs @@ -0,0 +1,111 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.Components.Auth; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Economy; + using Eco.Gameplay.Housing; + using Eco.Gameplay.Interactions; + using Eco.Gameplay.Items; + using Eco.Gameplay.Minimap; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Property; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Gameplay.Pipes.LiquidComponents; + using Eco.Gameplay.Pipes.Gases; + using Eco.Gameplay.Systems.Tooltip; + using Eco.Shared; + using Eco.Shared.Math; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + using Eco.Shared.Items; + using Eco.Gameplay.Pipes; + using Eco.World.Blocks; + + [Serialized] + [RequireComponent(typeof(OnOffComponent))] + + [RequireComponent(typeof(PropertyAuthComponent))] + [RequireComponent(typeof(MinimapComponent))] + [RequireComponent(typeof(PowerGridComponent))] + [RequireComponent(typeof(PowerConsumptionComponent))] + [RequireComponent(typeof(HousingComponent))] + public partial class SteelCeilingLightObject : + WorldObject + { + public override string FriendlyName { get { return "Steel Ceiling Light"; } } + + + protected override void Initialize() + { + this.GetComponent().Initialize("Lights"); + this.GetComponent().Initialize(35); + this.GetComponent().Initialize(10, new ElectricPower()); + this.GetComponent().Set(SteelCeilingLightItem.HousingVal); + + + + } + + public override void Destroy() + { + base.Destroy(); + } + + } + + [Serialized] + public partial class SteelCeilingLightItem : WorldObjectItem + { + public override string FriendlyName { get { return "Steel Ceiling Light"; } } + public override string Description { get { return "A more modern way to light up a room."; } } + + static SteelCeilingLightItem() + { + + } + + [TooltipChildren] public HousingValue HousingTooltip { get { return HousingVal; } } + [TooltipChildren] public static HousingValue HousingVal { get { return new HousingValue() + { + Category = "General", + Val = 5, + TypeForRoomLimit = "Lights", + DiminishingReturnPercent = 0.8f + };}} + } + + + [RequiresSkill(typeof(SteelworkingSkill), 3)] + public partial class SteelCeilingLightRecipe : Recipe + { + public SteelCeilingLightRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(SteelworkingEfficiencySkill), 10, SteelworkingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(SteelworkingEfficiencySkill), 2, SteelworkingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(SteelworkingEfficiencySkill), 5, SteelworkingEfficiencySkill.MultiplicativeStrategy), + }; + SkillModifiedValue value = new SkillModifiedValue(10, SteelworkingSpeedSkill.MultiplicativeStrategy, typeof(SteelworkingSpeedSkill), Localizer.Do("craft time")); + SkillModifiedValueManager.AddBenefitForObject(typeof(SteelCeilingLightRecipe), Item.Get().UILink(), value); + SkillModifiedValueManager.AddSkillBenefit(Item.Get().UILink(), value); + this.CraftMinutes = value; + this.Initialize("Steel Ceiling Light", typeof(SteelCeilingLightRecipe)); + CraftingComponent.AddRecipe(typeof(FactoryObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/WorldObject/SteelFloorLamp.cs b/AutoGen/WorldObject/SteelFloorLamp.cs new file mode 100644 index 0000000..96033d2 --- /dev/null +++ b/AutoGen/WorldObject/SteelFloorLamp.cs @@ -0,0 +1,112 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.Components.Auth; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Economy; + using Eco.Gameplay.Housing; + using Eco.Gameplay.Interactions; + using Eco.Gameplay.Items; + using Eco.Gameplay.Minimap; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Property; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Gameplay.Pipes.LiquidComponents; + using Eco.Gameplay.Pipes.Gases; + using Eco.Gameplay.Systems.Tooltip; + using Eco.Shared; + using Eco.Shared.Math; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + using Eco.Shared.Items; + using Eco.Gameplay.Pipes; + using Eco.World.Blocks; + + [Serialized] + [RequireComponent(typeof(OnOffComponent))] + + [RequireComponent(typeof(PropertyAuthComponent))] + [RequireComponent(typeof(MinimapComponent))] + [RequireComponent(typeof(PowerGridComponent))] + [RequireComponent(typeof(PowerConsumptionComponent))] + [RequireComponent(typeof(HousingComponent))] + [RequireComponent(typeof(SolidGroundComponent))] + public partial class SteelFloorLampObject : + WorldObject + { + public override string FriendlyName { get { return "Steel Floor Lamp"; } } + + + protected override void Initialize() + { + this.GetComponent().Initialize("Lights"); + this.GetComponent().Initialize(35); + this.GetComponent().Initialize(10, new ElectricPower()); + this.GetComponent().Set(SteelFloorLampItem.HousingVal); + + + + } + + public override void Destroy() + { + base.Destroy(); + } + + } + + [Serialized] + public partial class SteelFloorLampItem : WorldObjectItem + { + public override string FriendlyName { get { return "Steel Floor Lamp"; } } + public override string Description { get { return "A more modern way to light up a room. This time from the floor."; } } + + static SteelFloorLampItem() + { + + } + + [TooltipChildren] public HousingValue HousingTooltip { get { return HousingVal; } } + [TooltipChildren] public static HousingValue HousingVal { get { return new HousingValue() + { + Category = "General", + Val = 5, + TypeForRoomLimit = "Lights", + DiminishingReturnPercent = 0.8f + };}} + } + + + [RequiresSkill(typeof(SteelworkingSkill), 2)] + public partial class SteelFloorLampRecipe : Recipe + { + public SteelFloorLampRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(SteelworkingEfficiencySkill), 10, SteelworkingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(SteelworkingEfficiencySkill), 2, SteelworkingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(SteelworkingEfficiencySkill), 5, SteelworkingEfficiencySkill.MultiplicativeStrategy), + }; + SkillModifiedValue value = new SkillModifiedValue(10, SteelworkingSpeedSkill.MultiplicativeStrategy, typeof(SteelworkingSpeedSkill), Localizer.Do("craft time")); + SkillModifiedValueManager.AddBenefitForObject(typeof(SteelFloorLampRecipe), Item.Get().UILink(), value); + SkillModifiedValueManager.AddSkillBenefit(Item.Get().UILink(), value); + this.CraftMinutes = value; + this.Initialize("Steel Floor Lamp", typeof(SteelFloorLampRecipe)); + CraftingComponent.AddRecipe(typeof(FactoryObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/WorldObject/SteelTableLamp.cs b/AutoGen/WorldObject/SteelTableLamp.cs new file mode 100644 index 0000000..d6fcc8a --- /dev/null +++ b/AutoGen/WorldObject/SteelTableLamp.cs @@ -0,0 +1,111 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.Components.Auth; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Economy; + using Eco.Gameplay.Housing; + using Eco.Gameplay.Interactions; + using Eco.Gameplay.Items; + using Eco.Gameplay.Minimap; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Property; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Gameplay.Pipes.LiquidComponents; + using Eco.Gameplay.Pipes.Gases; + using Eco.Gameplay.Systems.Tooltip; + using Eco.Shared; + using Eco.Shared.Math; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + using Eco.Shared.Items; + using Eco.Gameplay.Pipes; + using Eco.World.Blocks; + + [Serialized] + [RequireComponent(typeof(OnOffComponent))] + + [RequireComponent(typeof(PropertyAuthComponent))] + [RequireComponent(typeof(MinimapComponent))] + [RequireComponent(typeof(PowerGridComponent))] + [RequireComponent(typeof(PowerConsumptionComponent))] + [RequireComponent(typeof(HousingComponent))] + public partial class SteelTableLampObject : + WorldObject + { + public override string FriendlyName { get { return "Steel Table Lamp"; } } + + + protected override void Initialize() + { + this.GetComponent().Initialize("Lights"); + this.GetComponent().Initialize(35); + this.GetComponent().Initialize(10, new ElectricPower()); + this.GetComponent().Set(SteelTableLampItem.HousingVal); + + + + } + + public override void Destroy() + { + base.Destroy(); + } + + } + + [Serialized] + public partial class SteelTableLampItem : WorldObjectItem + { + public override string FriendlyName { get { return "Steel Table Lamp"; } } + public override string Description { get { return "For late night studying. Or working. Or anything, really."; } } + + static SteelTableLampItem() + { + + } + + [TooltipChildren] public HousingValue HousingTooltip { get { return HousingVal; } } + [TooltipChildren] public static HousingValue HousingVal { get { return new HousingValue() + { + Category = "General", + Val = 4, + TypeForRoomLimit = "Lights", + DiminishingReturnPercent = 0.8f + };}} + } + + + [RequiresSkill(typeof(SteelworkingSkill), 1)] + public partial class SteelTableLampRecipe : Recipe + { + public SteelTableLampRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(SteelworkingEfficiencySkill), 8, SteelworkingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(SteelworkingEfficiencySkill), 2, SteelworkingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(SteelworkingEfficiencySkill), 3, SteelworkingEfficiencySkill.MultiplicativeStrategy), + }; + SkillModifiedValue value = new SkillModifiedValue(10, SteelworkingSpeedSkill.MultiplicativeStrategy, typeof(SteelworkingSpeedSkill), Localizer.Do("craft time")); + SkillModifiedValueManager.AddBenefitForObject(typeof(SteelTableLampRecipe), Item.Get().UILink(), value); + SkillModifiedValueManager.AddSkillBenefit(Item.Get().UILink(), value); + this.CraftMinutes = value; + this.Initialize("Steel Table Lamp", typeof(SteelTableLampRecipe)); + CraftingComponent.AddRecipe(typeof(FactoryObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/WorldObject/StoneBrazier.cs b/AutoGen/WorldObject/StoneBrazier.cs new file mode 100644 index 0000000..d2862b2 --- /dev/null +++ b/AutoGen/WorldObject/StoneBrazier.cs @@ -0,0 +1,120 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.Components.Auth; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Economy; + using Eco.Gameplay.Housing; + using Eco.Gameplay.Interactions; + using Eco.Gameplay.Items; + using Eco.Gameplay.Minimap; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Property; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Gameplay.Pipes.LiquidComponents; + using Eco.Gameplay.Pipes.Gases; + using Eco.Gameplay.Systems.Tooltip; + using Eco.Shared; + using Eco.Shared.Math; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + using Eco.Shared.Items; + using Eco.Gameplay.Pipes; + using Eco.World.Blocks; + + [Serialized] + [RequireComponent(typeof(OnOffComponent))] + [RequireComponent(typeof(PropertyAuthComponent))] + [RequireComponent(typeof(MinimapComponent))] + [RequireComponent(typeof(LinkComponent))] + [RequireComponent(typeof(FuelSupplyComponent))] + [RequireComponent(typeof(FuelConsumptionComponent))] + [RequireComponent(typeof(HousingComponent))] + [RequireComponent(typeof(SolidGroundComponent))] + public partial class StoneBrazierObject : + WorldObject + { + public override string FriendlyName { get { return "Stone Brazier"; } } + + private static Type[] fuelTypeList = new Type[] + { + typeof(LogItem), + typeof(HewnLogItem), + typeof(LumberItem), + typeof(CharcoalItem), + typeof(ArrowItem), + typeof(BoardItem), + typeof(CoalItem), + }; + + protected override void Initialize() + { + this.GetComponent().Initialize("Lights"); + this.GetComponent().Initialize(2, fuelTypeList); + this.GetComponent().Initialize(1); + this.GetComponent().Set(StoneBrazierItem.HousingVal); + + + + } + + public override void Destroy() + { + base.Destroy(); + } + + } + + [Serialized] + public partial class StoneBrazierItem : WorldObjectItem + { + public override string FriendlyName { get { return "Stone Brazier"; } } + public override string Description { get { return "A stone stand which can hold burning fuel to provide light."; } } + + static StoneBrazierItem() + { + + } + + [TooltipChildren] public HousingValue HousingTooltip { get { return HousingVal; } } + [TooltipChildren] public static HousingValue HousingVal { get { return new HousingValue() + { + Category = "General", + Val = 2, + TypeForRoomLimit = "Lights", + DiminishingReturnPercent = 0.8f + };}} + } + + + [RequiresSkill(typeof(StoneworkingSkill), 1)] + public partial class StoneBrazierRecipe : Recipe + { + public StoneBrazierRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(StoneworkingEfficiencySkill), 10, StoneworkingEfficiencySkill.MultiplicativeStrategy), + }; + SkillModifiedValue value = new SkillModifiedValue(10, StoneworkingSpeedSkill.MultiplicativeStrategy, typeof(StoneworkingSpeedSkill), Localizer.Do("craft time")); + SkillModifiedValueManager.AddBenefitForObject(typeof(StoneBrazierRecipe), Item.Get().UILink(), value); + SkillModifiedValueManager.AddSkillBenefit(Item.Get().UILink(), value); + this.CraftMinutes = value; + this.Initialize("Stone Brazier", typeof(StoneBrazierRecipe)); + CraftingComponent.AddRecipe(typeof(MasonryTableObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/WorldObject/StoneWell.cs b/AutoGen/WorldObject/StoneWell.cs new file mode 100644 index 0000000..24bb3d7 --- /dev/null +++ b/AutoGen/WorldObject/StoneWell.cs @@ -0,0 +1,66 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.Components.Auth; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Economy; + using Eco.Gameplay.Housing; + using Eco.Gameplay.Interactions; + using Eco.Gameplay.Items; + using Eco.Gameplay.Minimap; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Property; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Gameplay.Pipes.LiquidComponents; + using Eco.Gameplay.Pipes.Gases; + using Eco.Gameplay.Systems.Tooltip; + using Eco.Shared; + using Eco.Shared.Math; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + using Eco.Shared.Items; + using Eco.Gameplay.Pipes; + using Eco.World.Blocks; + + + [Serialized] + [Category("Hidden")] + public partial class StoneWellItem : WorldObjectItem + { + public override string FriendlyName { get { return "Stone Well"; } } + public override string Description { get { return "PLACEHOLDER"; } } + + static StoneWellItem() + { + + } + + } + + + public partial class StoneWellRecipe : Recipe + { + public StoneWellRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + + this.Ingredients = new CraftingElement[] + { + }; + this.CraftMinutes = new ConstantValue(); + this.Initialize("Stone Well", typeof(StoneWellRecipe)); + CraftingComponent.AddRecipe(typeof(Object), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/WorldObject/StorageChest.cs b/AutoGen/WorldObject/StorageChest.cs new file mode 100644 index 0000000..a75d18f --- /dev/null +++ b/AutoGen/WorldObject/StorageChest.cs @@ -0,0 +1,100 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.Components.Auth; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Economy; + using Eco.Gameplay.Housing; + using Eco.Gameplay.Interactions; + using Eco.Gameplay.Items; + using Eco.Gameplay.Minimap; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Property; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Gameplay.Pipes.LiquidComponents; + using Eco.Gameplay.Pipes.Gases; + using Eco.Gameplay.Systems.Tooltip; + using Eco.Shared; + using Eco.Shared.Math; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + using Eco.Shared.Items; + using Eco.Gameplay.Pipes; + using Eco.World.Blocks; + + [Serialized] + + [RequireComponent(typeof(PropertyAuthComponent))] + [RequireComponent(typeof(MinimapComponent))] + [RequireComponent(typeof(LinkComponent))] + [RequireComponent(typeof(PublicStorageComponent))] + [RequireComponent(typeof(SolidGroundComponent))] + public partial class StorageChestObject : + WorldObject + { + public override string FriendlyName { get { return "Storage Chest"; } } + + + protected override void Initialize() + { + this.GetComponent().Initialize("Storage"); + + var storage = this.GetComponent(); + storage.Initialize(16); + storage.Storage.AddRestriction(new NotCarriedRestriction()); // can't store block or large items + + + } + + public override void Destroy() + { + base.Destroy(); + } + + } + + [Serialized] + public partial class StorageChestItem : WorldObjectItem + { + public override string FriendlyName { get { return "Storage Chest"; } } + public override string Description { get { return "A container you can store items in."; } } + + static StorageChestItem() + { + + } + + } + + + [RequiresSkill(typeof(BasicCraftingSkill), 1)] + public partial class StorageChestRecipe : Recipe + { + public StorageChestRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(BasicCraftingEfficiencySkill), 10, BasicCraftingEfficiencySkill.MultiplicativeStrategy), + }; + SkillModifiedValue value = new SkillModifiedValue(2, BasicCraftingSpeedSkill.MultiplicativeStrategy, typeof(BasicCraftingSpeedSkill), Localizer.Do("craft time")); + SkillModifiedValueManager.AddBenefitForObject(typeof(StorageChestRecipe), Item.Get().UILink(), value); + SkillModifiedValueManager.AddSkillBenefit(Item.Get().UILink(), value); + this.CraftMinutes = value; + this.Initialize("Storage Chest", typeof(StorageChestRecipe)); + CraftingComponent.AddRecipe(typeof(WorkbenchObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/WorldObject/Store.cs b/AutoGen/WorldObject/Store.cs new file mode 100644 index 0000000..16f4a2a --- /dev/null +++ b/AutoGen/WorldObject/Store.cs @@ -0,0 +1,101 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.Components.Auth; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Economy; + using Eco.Gameplay.Housing; + using Eco.Gameplay.Interactions; + using Eco.Gameplay.Items; + using Eco.Gameplay.Minimap; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Property; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Gameplay.Pipes.LiquidComponents; + using Eco.Gameplay.Pipes.Gases; + using Eco.Gameplay.Systems.Tooltip; + using Eco.Shared; + using Eco.Shared.Math; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + using Eco.Shared.Items; + using Eco.Gameplay.Pipes; + using Eco.World.Blocks; + + [Serialized] + + [RequireComponent(typeof(PropertyAuthComponent))] + [RequireComponent(typeof(MinimapComponent))] + [RequireComponent(typeof(LinkComponent))] + [RequireComponent(typeof(SolidGroundComponent))] + [RequireComponent(typeof(RoomRequirementsComponent))] + [RequireRoomContainment] + [RequireRoomVolume(25)] + [RequireRoomMaterialTier(1, 18)] + public partial class StoreObject : + WorldObject + { + public override string FriendlyName { get { return "Store"; } } + + + protected override void Initialize() + { + this.GetComponent().Initialize("Economy"); + + + + } + + public override void Destroy() + { + base.Destroy(); + } + + } + + [Serialized] + public partial class StoreItem : WorldObjectItem + { + public override string FriendlyName { get { return "Store"; } } + public override string Description { get { return "Allows the selling and trading of items."; } } + + static StoreItem() + { + + } + + } + + + [RequiresSkill(typeof(BasicCraftingSkill), 1)] + public partial class StoreRecipe : Recipe + { + public StoreRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(BasicCraftingEfficiencySkill), 10, BasicCraftingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(BasicCraftingEfficiencySkill), 10, BasicCraftingEfficiencySkill.MultiplicativeStrategy), + }; + SkillModifiedValue value = new SkillModifiedValue(15, BasicCraftingSpeedSkill.MultiplicativeStrategy, typeof(BasicCraftingSpeedSkill), Localizer.Do("craft time")); + SkillModifiedValueManager.AddBenefitForObject(typeof(StoreRecipe), Item.Get().UILink(), value); + SkillModifiedValueManager.AddSkillBenefit(Item.Get().UILink(), value); + this.CraftMinutes = value; + this.Initialize("Store", typeof(StoreRecipe)); + CraftingComponent.AddRecipe(typeof(WorkbenchObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/WorldObject/Stove.cs b/AutoGen/WorldObject/Stove.cs new file mode 100644 index 0000000..a409a18 --- /dev/null +++ b/AutoGen/WorldObject/Stove.cs @@ -0,0 +1,143 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.Components.Auth; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Economy; + using Eco.Gameplay.Housing; + using Eco.Gameplay.Interactions; + using Eco.Gameplay.Items; + using Eco.Gameplay.Minimap; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Property; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Gameplay.Pipes.LiquidComponents; + using Eco.Gameplay.Pipes.Gases; + using Eco.Gameplay.Systems.Tooltip; + using Eco.Shared; + using Eco.Shared.Math; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + using Eco.Shared.Items; + using Eco.Gameplay.Pipes; + using Eco.World.Blocks; + + [Serialized] + [RequireComponent(typeof(PipeComponent))] + + [RequireComponent(typeof(AttachmentComponent))] + [RequireComponent(typeof(PropertyAuthComponent))] + [RequireComponent(typeof(MinimapComponent))] + [RequireComponent(typeof(LinkComponent))] + [RequireComponent(typeof(CraftingComponent))] + [RequireComponent(typeof(FuelSupplyComponent))] + [RequireComponent(typeof(FuelConsumptionComponent))] + [RequireComponent(typeof(HousingComponent))] + [RequireComponent(typeof(SolidGroundComponent))] + [RequireComponent(typeof(RoomRequirementsComponent))] + [RequireRoomContainment] + [RequireRoomVolume(25)] + [RequireRoomMaterialTier(2, 18)] + public partial class StoveObject : + WorldObject + { + public override string FriendlyName { get { return "Stove"; } } + + private static Type[] fuelTypeList = new Type[] + { + typeof(LogItem), + typeof(HewnLogItem), + typeof(LumberItem), + typeof(CharcoalItem), + typeof(ArrowItem), + typeof(BoardItem), + typeof(CoalItem), + }; + + protected override void Initialize() + { + this.GetComponent().Initialize("Cooking"); + this.GetComponent().Initialize(2, fuelTypeList); + this.GetComponent().Initialize(10); + this.GetComponent().Set(StoveItem.HousingVal); + + + var tankList = new List(); + + tankList.Add(new LiquidProducer("Chimney", typeof(SmogItem), 100, + null, + this.Occupancy.Find(x => x.Name == "ChimneyOut"), + (float)(0.1f * SmogItem.SmogItemsPerCO2PPM) / TimeUtil.SecondsPerHour)); + + + + this.GetComponent().Initialize(tankList); + + } + + public override void Destroy() + { + base.Destroy(); + } + + } + + [Serialized] + public partial class StoveItem : WorldObjectItem + { + public override string FriendlyName { get { return "Stove"; } } + public override string Description { get { return "A heavy stove for cooking more complex dishes."; } } + + static StoveItem() + { + + + + + } + + [TooltipChildren] public HousingValue HousingTooltip { get { return HousingVal; } } + [TooltipChildren] public static HousingValue HousingVal { get { return new HousingValue() + { + Category = "Kitchen", + Val = 4, + TypeForRoomLimit = "Cooking", + DiminishingReturnPercent = 0.3f + };}} + } + + + [RequiresSkill(typeof(MetalworkingSkill), 1)] + public partial class StoveRecipe : Recipe + { + public StoveRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(MetalworkingEfficiencySkill), 45, MetalworkingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(MetalworkingEfficiencySkill),30, MetalworkingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(MetalworkingEfficiencySkill),30, MetalworkingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(MetalworkingEfficiencySkill),10, MetalworkingEfficiencySkill.MultiplicativeStrategy), + }; + SkillModifiedValue value = new SkillModifiedValue(20, MetalworkingSpeedSkill.MultiplicativeStrategy, typeof(MetalworkingSpeedSkill), Localizer.Do("craft time")); + SkillModifiedValueManager.AddBenefitForObject(typeof(StoveRecipe), Item.Get().UILink(), value); + SkillModifiedValueManager.AddSkillBenefit(Item.Get().UILink(), value); + this.CraftMinutes = value; + this.Initialize("Stove", typeof(StoveRecipe)); + CraftingComponent.AddRecipe(typeof(MachineShopObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/WorldObject/Streetlamp.cs b/AutoGen/WorldObject/Streetlamp.cs new file mode 100644 index 0000000..89bacf3 --- /dev/null +++ b/AutoGen/WorldObject/Streetlamp.cs @@ -0,0 +1,112 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.Components.Auth; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Economy; + using Eco.Gameplay.Housing; + using Eco.Gameplay.Interactions; + using Eco.Gameplay.Items; + using Eco.Gameplay.Minimap; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Property; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Gameplay.Pipes.LiquidComponents; + using Eco.Gameplay.Pipes.Gases; + using Eco.Gameplay.Systems.Tooltip; + using Eco.Shared; + using Eco.Shared.Math; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + using Eco.Shared.Items; + using Eco.Gameplay.Pipes; + using Eco.World.Blocks; + + [Serialized] + [RequireComponent(typeof(OnOffComponent))] + + [RequireComponent(typeof(PropertyAuthComponent))] + [RequireComponent(typeof(MinimapComponent))] + [RequireComponent(typeof(PowerGridComponent))] + [RequireComponent(typeof(PowerConsumptionComponent))] + [RequireComponent(typeof(HousingComponent))] + [RequireComponent(typeof(SolidGroundComponent))] + public partial class StreetlampObject : + WorldObject + { + public override string FriendlyName { get { return "Streetlamp"; } } + + + protected override void Initialize() + { + this.GetComponent().Initialize("Lights"); + this.GetComponent().Initialize(35); + this.GetComponent().Initialize(10, new ElectricPower()); + this.GetComponent().Set(StreetlampItem.HousingVal); + + + + } + + public override void Destroy() + { + base.Destroy(); + } + + } + + [Serialized] + public partial class StreetlampItem : WorldObjectItem + { + public override string FriendlyName { get { return "Streetlamp"; } } + public override string Description { get { return "A towering metal lightpost that requires electricity to run."; } } + + static StreetlampItem() + { + + } + + [TooltipChildren] public HousingValue HousingTooltip { get { return HousingVal; } } + [TooltipChildren] public static HousingValue HousingVal { get { return new HousingValue() + { + Category = "General", + Val = 4, + TypeForRoomLimit = "Lights", + DiminishingReturnPercent = 0.8f + };}} + } + + + [RequiresSkill(typeof(ElectronicEngineeringSkill), 3)] + public partial class StreetlampRecipe : Recipe + { + public StreetlampRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(ElectronicEngineeringEfficiencySkill), 20, ElectronicEngineeringEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(ElectronicEngineeringEfficiencySkill), 6, ElectronicEngineeringEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(ElectronicEngineeringEfficiencySkill), 6, ElectronicEngineeringEfficiencySkill.MultiplicativeStrategy), + }; + SkillModifiedValue value = new SkillModifiedValue(1, ElectronicEngineeringSpeedSkill.MultiplicativeStrategy, typeof(ElectronicEngineeringSpeedSkill), Localizer.Do("craft time")); + SkillModifiedValueManager.AddBenefitForObject(typeof(StreetlampRecipe), Item.Get().UILink(), value); + SkillModifiedValueManager.AddSkillBenefit(Item.Get().UILink(), value); + this.CraftMinutes = value; + this.Initialize("Streetlamp", typeof(StreetlampRecipe)); + CraftingComponent.AddRecipe(typeof(FactoryObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/WorldObject/Table.cs b/AutoGen/WorldObject/Table.cs new file mode 100644 index 0000000..0654a8c --- /dev/null +++ b/AutoGen/WorldObject/Table.cs @@ -0,0 +1,104 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.Components.Auth; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Economy; + using Eco.Gameplay.Housing; + using Eco.Gameplay.Interactions; + using Eco.Gameplay.Items; + using Eco.Gameplay.Minimap; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Property; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Gameplay.Pipes.LiquidComponents; + using Eco.Gameplay.Pipes.Gases; + using Eco.Gameplay.Systems.Tooltip; + using Eco.Shared; + using Eco.Shared.Math; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + using Eco.Shared.Items; + using Eco.Gameplay.Pipes; + using Eco.World.Blocks; + + [Serialized] + + [RequireComponent(typeof(PropertyAuthComponent))] + [RequireComponent(typeof(HousingComponent))] + [RequireComponent(typeof(SolidGroundComponent))] + public partial class TableObject : + WorldObject + { + public override string FriendlyName { get { return "Table"; } } + + + protected override void Initialize() + { + this.GetComponent().Set(TableItem.HousingVal); + + + + } + + public override void Destroy() + { + base.Destroy(); + } + + } + + [Serialized] + public partial class TableItem : WorldObjectItem + { + public override string FriendlyName { get { return "Table"; } } + public override string Description { get { return "A large table for placing things on."; } } + + static TableItem() + { + + } + + [TooltipChildren] public HousingValue HousingTooltip { get { return HousingVal; } } + [TooltipChildren] public static HousingValue HousingVal { get { return new HousingValue() + { + Category = "General", + Val = 2, + TypeForRoomLimit = "Table", + DiminishingReturnPercent = 0.6f + };}} + } + + + [RequiresSkill(typeof(WoodworkingSkill), 2)] + public partial class TableRecipe : Recipe + { + public TableRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(WoodworkingEfficiencySkill), 10, WoodworkingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(WoodworkingEfficiencySkill), 30, WoodworkingEfficiencySkill.MultiplicativeStrategy), + }; + SkillModifiedValue value = new SkillModifiedValue(5, WoodworkingSpeedSkill.MultiplicativeStrategy, typeof(WoodworkingSpeedSkill), Localizer.Do("craft time")); + SkillModifiedValueManager.AddBenefitForObject(typeof(TableRecipe), Item.Get().UILink(), value); + SkillModifiedValueManager.AddSkillBenefit(Item.Get().UILink(), value); + this.CraftMinutes = value; + this.Initialize("Table", typeof(TableRecipe)); + CraftingComponent.AddRecipe(typeof(CarpentryTableObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/WorldObject/TailoringTable.cs b/AutoGen/WorldObject/TailoringTable.cs new file mode 100644 index 0000000..e185425 --- /dev/null +++ b/AutoGen/WorldObject/TailoringTable.cs @@ -0,0 +1,102 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.Components.Auth; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Economy; + using Eco.Gameplay.Housing; + using Eco.Gameplay.Interactions; + using Eco.Gameplay.Items; + using Eco.Gameplay.Minimap; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Property; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Gameplay.Pipes.LiquidComponents; + using Eco.Gameplay.Pipes.Gases; + using Eco.Gameplay.Systems.Tooltip; + using Eco.Shared; + using Eco.Shared.Math; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + using Eco.Shared.Items; + using Eco.Gameplay.Pipes; + using Eco.World.Blocks; + + [Serialized] + + [RequireComponent(typeof(PropertyAuthComponent))] + [RequireComponent(typeof(MinimapComponent))] + [RequireComponent(typeof(LinkComponent))] + [RequireComponent(typeof(CraftingComponent))] + [RequireComponent(typeof(SolidGroundComponent))] + [RequireComponent(typeof(RoomRequirementsComponent))] + [RequireRoomContainment] + [RequireRoomVolume(45)] + [RequireRoomMaterialTier(1, 32)] + public partial class TailoringTableObject : + WorldObject + { + public override string FriendlyName { get { return "Tailoring Table"; } } + + + protected override void Initialize() + { + this.GetComponent().Initialize("Crafting"); + + + + } + + public override void Destroy() + { + base.Destroy(); + } + + } + + [Serialized] + public partial class TailoringTableItem : WorldObjectItem + { + public override string FriendlyName { get { return "Tailoring Table"; } } + public override string Description { get { return "Spearhead the fashion movement with the finest clothes and� hair!"; } } + + static TailoringTableItem() + { + + } + + } + + + [RequiresSkill(typeof(WoodworkingSkill), 1)] + public partial class TailoringTableRecipe : Recipe + { + public TailoringTableRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(WoodworkingEfficiencySkill), 40, WoodworkingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(WoodworkingEfficiencySkill), 50, WoodworkingEfficiencySkill.MultiplicativeStrategy), + }; + SkillModifiedValue value = new SkillModifiedValue(60, WoodworkingSpeedSkill.MultiplicativeStrategy, typeof(WoodworkingSpeedSkill), Localizer.Do("craft time")); + SkillModifiedValueManager.AddBenefitForObject(typeof(TailoringTableRecipe), Item.Get().UILink(), value); + SkillModifiedValueManager.AddSkillBenefit(Item.Get().UILink(), value); + this.CraftMinutes = value; + this.Initialize("Tailoring Table", typeof(TailoringTableRecipe)); + CraftingComponent.AddRecipe(typeof(CarpentryTableObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/WorldObject/TallowCandle.cs b/AutoGen/WorldObject/TallowCandle.cs new file mode 100644 index 0000000..a21fce3 --- /dev/null +++ b/AutoGen/WorldObject/TallowCandle.cs @@ -0,0 +1,117 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.Components.Auth; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Economy; + using Eco.Gameplay.Housing; + using Eco.Gameplay.Interactions; + using Eco.Gameplay.Items; + using Eco.Gameplay.Minimap; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Property; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Gameplay.Pipes.LiquidComponents; + using Eco.Gameplay.Pipes.Gases; + using Eco.Gameplay.Systems.Tooltip; + using Eco.Shared; + using Eco.Shared.Math; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + using Eco.Shared.Items; + using Eco.Gameplay.Pipes; + using Eco.World.Blocks; + + [Serialized] + [RequireComponent(typeof(OnOffComponent))] + + [RequireComponent(typeof(PropertyAuthComponent))] + [RequireComponent(typeof(MinimapComponent))] + [RequireComponent(typeof(LinkComponent))] + [RequireComponent(typeof(FuelSupplyComponent))] + [RequireComponent(typeof(FuelConsumptionComponent))] + [RequireComponent(typeof(HousingComponent))] + public partial class TallowCandleObject : + WorldObject + { + public override string FriendlyName { get { return "Tallow Candle"; } } + + private static Type[] fuelTypeList = new Type[] + { + typeof(TallowItem), + typeof(OilItem), + }; + + protected override void Initialize() + { + this.GetComponent().Initialize("Lights"); + this.GetComponent().Initialize(2, fuelTypeList); + this.GetComponent().Initialize(1); + this.GetComponent().Set(TallowCandleItem.HousingVal); + + + + } + + public override void Destroy() + { + base.Destroy(); + } + + } + + [Serialized] + public partial class TallowCandleItem : WorldObjectItem + { + public override string FriendlyName { get { return "Tallow Candle"; } } + public override string Description { get { return "A candle which can burn tallow to produce a small amount of light."; } } + + static TallowCandleItem() + { + + } + + [TooltipChildren] public HousingValue HousingTooltip { get { return HousingVal; } } + [TooltipChildren] public static HousingValue HousingVal { get { return new HousingValue() + { + Category = "General", + Val = 1, + TypeForRoomLimit = "Lights", + DiminishingReturnPercent = 0.8f + };}} + } + + + [RequiresSkill(typeof(BasicCraftingSkill), 2)] + public partial class TallowCandleRecipe : Recipe + { + public TallowCandleRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(BasicCraftingEfficiencySkill), 3, BasicCraftingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(BasicCraftingEfficiencySkill), 3, BasicCraftingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(BasicCraftingEfficiencySkill), 2, BasicCraftingEfficiencySkill.MultiplicativeStrategy), + }; + SkillModifiedValue value = new SkillModifiedValue(2.5f, BasicCraftingSpeedSkill.MultiplicativeStrategy, typeof(BasicCraftingSpeedSkill), Localizer.Do("craft time")); + SkillModifiedValueManager.AddBenefitForObject(typeof(TallowCandleRecipe), Item.Get().UILink(), value); + SkillModifiedValueManager.AddSkillBenefit(Item.Get().UILink(), value); + this.CraftMinutes = value; + this.Initialize("Tallow Candle", typeof(TallowCandleRecipe)); + CraftingComponent.AddRecipe(typeof(WorkbenchObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/WorldObject/TallowLamp.cs b/AutoGen/WorldObject/TallowLamp.cs new file mode 100644 index 0000000..fe2e87b --- /dev/null +++ b/AutoGen/WorldObject/TallowLamp.cs @@ -0,0 +1,114 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.Components.Auth; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Economy; + using Eco.Gameplay.Housing; + using Eco.Gameplay.Interactions; + using Eco.Gameplay.Items; + using Eco.Gameplay.Minimap; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Property; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Gameplay.Pipes.LiquidComponents; + using Eco.Gameplay.Pipes.Gases; + using Eco.Gameplay.Systems.Tooltip; + using Eco.Shared; + using Eco.Shared.Math; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + using Eco.Shared.Items; + using Eco.Gameplay.Pipes; + using Eco.World.Blocks; + + [Serialized] + [RequireComponent(typeof(OnOffComponent))] + + [RequireComponent(typeof(PropertyAuthComponent))] + [RequireComponent(typeof(MinimapComponent))] + [RequireComponent(typeof(FuelSupplyComponent))] + [RequireComponent(typeof(FuelConsumptionComponent))] + [RequireComponent(typeof(HousingComponent))] + public partial class TallowLampObject : + WorldObject + { + public override string FriendlyName { get { return "Tallow Lamp"; } } + + private static Type[] fuelTypeList = new Type[] + { + typeof(TallowItem), + typeof(OilItem), + }; + + protected override void Initialize() + { + this.GetComponent().Initialize("Lights"); + this.GetComponent().Initialize(2, fuelTypeList); + this.GetComponent().Initialize(1); + this.GetComponent().Set(TallowLampItem.HousingVal); + + + + } + + public override void Destroy() + { + base.Destroy(); + } + + } + + [Serialized] + public partial class TallowLampItem : WorldObjectItem + { + public override string FriendlyName { get { return "Tallow Lamp"; } } + public override string Description { get { return "A pottery lamp. Fuel with tallow."; } } + + static TallowLampItem() + { + + } + + [TooltipChildren] public HousingValue HousingTooltip { get { return HousingVal; } } + [TooltipChildren] public static HousingValue HousingVal { get { return new HousingValue() + { + Category = "General", + TypeForRoomLimit = "Lights", + };}} + } + + + [RequiresSkill(typeof(StoneworkingSkill), 1)] + public partial class TallowLampRecipe : Recipe + { + public TallowLampRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(StoneworkingEfficiencySkill), 4, StoneworkingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(StoneworkingEfficiencySkill), 2, StoneworkingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(StoneworkingEfficiencySkill), 2, StoneworkingEfficiencySkill.MultiplicativeStrategy), + }; + SkillModifiedValue value = new SkillModifiedValue(2, StoneworkingSpeedSkill.MultiplicativeStrategy, typeof(StoneworkingSpeedSkill), Localizer.Do("craft time")); + SkillModifiedValueManager.AddBenefitForObject(typeof(TallowLampRecipe), Item.Get().UILink(), value); + SkillModifiedValueManager.AddSkillBenefit(Item.Get().UILink(), value); + this.CraftMinutes = value; + this.Initialize("Tallow Lamp", typeof(TallowLampRecipe)); + CraftingComponent.AddRecipe(typeof(KilnObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/WorldObject/TallowWallLamp.cs b/AutoGen/WorldObject/TallowWallLamp.cs new file mode 100644 index 0000000..bf41641 --- /dev/null +++ b/AutoGen/WorldObject/TallowWallLamp.cs @@ -0,0 +1,116 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.Components.Auth; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Economy; + using Eco.Gameplay.Housing; + using Eco.Gameplay.Interactions; + using Eco.Gameplay.Items; + using Eco.Gameplay.Minimap; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Property; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Gameplay.Pipes.LiquidComponents; + using Eco.Gameplay.Pipes.Gases; + using Eco.Gameplay.Systems.Tooltip; + using Eco.Shared; + using Eco.Shared.Math; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + using Eco.Shared.Items; + using Eco.Gameplay.Pipes; + using Eco.World.Blocks; + + [Serialized] + [RequireComponent(typeof(OnOffComponent))] + + [RequireComponent(typeof(PropertyAuthComponent))] + [RequireComponent(typeof(MinimapComponent))] + [RequireComponent(typeof(FuelSupplyComponent))] + [RequireComponent(typeof(FuelConsumptionComponent))] + [RequireComponent(typeof(HousingComponent))] + public partial class TallowWallLampObject : + WorldObject + { + public override string FriendlyName { get { return "Tallow Wall Lamp"; } } + + private static Type[] fuelTypeList = new Type[] + { + typeof(TallowItem), + typeof(OilItem), + }; + + protected override void Initialize() + { + this.GetComponent().Initialize("Lights"); + this.GetComponent().Initialize(2, fuelTypeList); + this.GetComponent().Initialize(1); + this.GetComponent().Set(TallowWallLampItem.HousingVal); + + + + } + + public override void Destroy() + { + base.Destroy(); + } + + } + + [Serialized] + public partial class TallowWallLampItem : WorldObjectItem + { + public override string FriendlyName { get { return "Tallow Wall Lamp"; } } + public override string Description { get { return "A candle mounted on a wall bracket which can burn tallow to produce a small amount of light."; } } + + static TallowWallLampItem() + { + + } + + [TooltipChildren] public HousingValue HousingTooltip { get { return HousingVal; } } + [TooltipChildren] public static HousingValue HousingVal { get { return new HousingValue() + { + Category = "General", + Val = 2, + TypeForRoomLimit = "Lights", + DiminishingReturnPercent = 0.8f + };}} + } + + + [RequiresSkill(typeof(MetalworkingSkill), 2)] + public partial class TallowWallLampRecipe : Recipe + { + public TallowWallLampRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(MetalworkingEfficiencySkill), 5, MetalworkingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(MetalworkingEfficiencySkill), 2, MetalworkingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(MetalworkingEfficiencySkill), 2, MetalworkingEfficiencySkill.MultiplicativeStrategy), + }; + SkillModifiedValue value = new SkillModifiedValue(1, MetalworkingSpeedSkill.MultiplicativeStrategy, typeof(MetalworkingSpeedSkill), Localizer.Do("craft time")); + SkillModifiedValueManager.AddBenefitForObject(typeof(TallowWallLampRecipe), Item.Get().UILink(), value); + SkillModifiedValueManager.AddSkillBenefit(Item.Get().UILink(), value); + this.CraftMinutes = value; + this.Initialize("Tallow Wall Lamp", typeof(TallowWallLampRecipe)); + CraftingComponent.AddRecipe(typeof(AnvilObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/WorldObject/TorchStand.cs b/AutoGen/WorldObject/TorchStand.cs new file mode 100644 index 0000000..6d63980 --- /dev/null +++ b/AutoGen/WorldObject/TorchStand.cs @@ -0,0 +1,116 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.Components.Auth; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Economy; + using Eco.Gameplay.Housing; + using Eco.Gameplay.Interactions; + using Eco.Gameplay.Items; + using Eco.Gameplay.Minimap; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Property; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Gameplay.Pipes.LiquidComponents; + using Eco.Gameplay.Pipes.Gases; + using Eco.Gameplay.Systems.Tooltip; + using Eco.Shared; + using Eco.Shared.Math; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + using Eco.Shared.Items; + using Eco.Gameplay.Pipes; + using Eco.World.Blocks; + + [Serialized] + [RequireComponent(typeof(OnOffComponent))] + + [RequireComponent(typeof(PropertyAuthComponent))] + [RequireComponent(typeof(MinimapComponent))] + [RequireComponent(typeof(LinkComponent))] + [RequireComponent(typeof(FuelSupplyComponent))] + [RequireComponent(typeof(FuelConsumptionComponent))] + [RequireComponent(typeof(HousingComponent))] + [RequireComponent(typeof(SolidGroundComponent))] + public partial class TorchStandObject : + WorldObject + { + public override string FriendlyName { get { return "Torch Stand"; } } + + private static Type[] fuelTypeList = new Type[] + { + typeof(TorchItem), + }; + + protected override void Initialize() + { + this.GetComponent().Initialize("Lights"); + this.GetComponent().Initialize(2, fuelTypeList); + this.GetComponent().Initialize(0.5f); + this.GetComponent().Set(TorchStandItem.HousingVal); + + + + } + + public override void Destroy() + { + base.Destroy(); + } + + } + + [Serialized] + public partial class TorchStandItem : WorldObjectItem + { + public override string FriendlyName { get { return "Torch Stand"; } } + public override string Description { get { return "A stand for a torch."; } } + + static TorchStandItem() + { + + } + + [TooltipChildren] public HousingValue HousingTooltip { get { return HousingVal; } } + [TooltipChildren] public static HousingValue HousingVal { get { return new HousingValue() + { + Category = "General", + Val = 1, + TypeForRoomLimit = "Lights", + DiminishingReturnPercent = 0.8f + };}} + } + + + [RequiresSkill(typeof(BasicCraftingSkill), 1)] + public partial class TorchStandRecipe : Recipe + { + public TorchStandRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(BasicCraftingEfficiencySkill), 10, BasicCraftingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(BasicCraftingEfficiencySkill), 5, BasicCraftingEfficiencySkill.MultiplicativeStrategy), + }; + SkillModifiedValue value = new SkillModifiedValue(2, BasicCraftingSpeedSkill.MultiplicativeStrategy, typeof(BasicCraftingSpeedSkill), Localizer.Do("craft time")); + SkillModifiedValueManager.AddBenefitForObject(typeof(TorchStandRecipe), Item.Get().UILink(), value); + SkillModifiedValueManager.AddSkillBenefit(Item.Get().UILink(), value); + this.CraftMinutes = value; + this.Initialize("Torch Stand", typeof(TorchStandRecipe)); + CraftingComponent.AddRecipe(typeof(WorkbenchObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/WorldObject/WainwrightTable.cs b/AutoGen/WorldObject/WainwrightTable.cs new file mode 100644 index 0000000..589e156 --- /dev/null +++ b/AutoGen/WorldObject/WainwrightTable.cs @@ -0,0 +1,103 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.Components.Auth; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Economy; + using Eco.Gameplay.Housing; + using Eco.Gameplay.Interactions; + using Eco.Gameplay.Items; + using Eco.Gameplay.Minimap; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Property; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Gameplay.Pipes.LiquidComponents; + using Eco.Gameplay.Pipes.Gases; + using Eco.Gameplay.Systems.Tooltip; + using Eco.Shared; + using Eco.Shared.Math; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + using Eco.Shared.Items; + using Eco.Gameplay.Pipes; + using Eco.World.Blocks; + + [Serialized] + + [RequireComponent(typeof(PropertyAuthComponent))] + [RequireComponent(typeof(MinimapComponent))] + [RequireComponent(typeof(LinkComponent))] + [RequireComponent(typeof(CraftingComponent))] + [RequireComponent(typeof(SolidGroundComponent))] + [RequireComponent(typeof(RoomRequirementsComponent))] + [RequireRoomContainment] + [RequireRoomVolume(25)] + [RequireRoomMaterialTier(1, 18)] + public partial class WainwrightTableObject : + WorldObject + { + public override string FriendlyName { get { return "Wainwright Table"; } } + + + protected override void Initialize() + { + this.GetComponent().Initialize("Crafting"); + + + + } + + public override void Destroy() + { + base.Destroy(); + } + + } + + [Serialized] + public partial class WainwrightTableItem : WorldObjectItem + { + public override string FriendlyName { get { return "Wainwright Table"; } } + public override string Description { get { return "A set of smoothing and woodworking tools that assist in creating wheels and transportation."; } } + + static WainwrightTableItem() + { + + } + + } + + + [RequiresSkill(typeof(WoodworkingSkill), 0)] + public partial class WainwrightTableRecipe : Recipe + { + public WainwrightTableRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(WoodworkingEfficiencySkill), 50, WoodworkingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(WoodworkingEfficiencySkill), 40, WoodworkingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(WoodworkingEfficiencySkill), 25, WoodworkingEfficiencySkill.MultiplicativeStrategy), + }; + SkillModifiedValue value = new SkillModifiedValue(10, WoodworkingSpeedSkill.MultiplicativeStrategy, typeof(WoodworkingSpeedSkill), Localizer.Do("craft time")); + SkillModifiedValueManager.AddBenefitForObject(typeof(WainwrightTableRecipe), Item.Get().UILink(), value); + SkillModifiedValueManager.AddSkillBenefit(Item.Get().UILink(), value); + this.CraftMinutes = value; + this.Initialize("Wainwright Table", typeof(WainwrightTableRecipe)); + CraftingComponent.AddRecipe(typeof(CarpentryTableObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/WorldObject/WallCandle.cs b/AutoGen/WorldObject/WallCandle.cs new file mode 100644 index 0000000..d6076d6 --- /dev/null +++ b/AutoGen/WorldObject/WallCandle.cs @@ -0,0 +1,116 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.Components.Auth; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Economy; + using Eco.Gameplay.Housing; + using Eco.Gameplay.Interactions; + using Eco.Gameplay.Items; + using Eco.Gameplay.Minimap; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Property; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Gameplay.Pipes.LiquidComponents; + using Eco.Gameplay.Pipes.Gases; + using Eco.Gameplay.Systems.Tooltip; + using Eco.Shared; + using Eco.Shared.Math; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + using Eco.Shared.Items; + using Eco.Gameplay.Pipes; + using Eco.World.Blocks; + + [Serialized] + [RequireComponent(typeof(OnOffComponent))] + + [RequireComponent(typeof(PropertyAuthComponent))] + [RequireComponent(typeof(MinimapComponent))] + [RequireComponent(typeof(FuelSupplyComponent))] + [RequireComponent(typeof(FuelConsumptionComponent))] + [RequireComponent(typeof(HousingComponent))] + public partial class WallCandleObject : + WorldObject + { + public override string FriendlyName { get { return "Wall Candle"; } } + + private static Type[] fuelTypeList = new Type[] + { + typeof(TallowItem), + typeof(OilItem), + }; + + protected override void Initialize() + { + this.GetComponent().Initialize("Lights"); + this.GetComponent().Initialize(2, fuelTypeList); + this.GetComponent().Initialize(1); + this.GetComponent().Set(WallCandleItem.HousingVal); + + + + } + + public override void Destroy() + { + base.Destroy(); + } + + } + + [Serialized] + public partial class WallCandleItem : WorldObjectItem + { + public override string FriendlyName { get { return "Wall Candle"; } } + public override string Description { get { return "A wall mounted candle."; } } + + static WallCandleItem() + { + + } + + [TooltipChildren] public HousingValue HousingTooltip { get { return HousingVal; } } + [TooltipChildren] public static HousingValue HousingVal { get { return new HousingValue() + { + Category = "General", + Val = 2, + TypeForRoomLimit = "Lights", + DiminishingReturnPercent = 0.8f + };}} + } + + + [RequiresSkill(typeof(MetalworkingSkill), 3)] + public partial class WallCandleRecipe : Recipe + { + public WallCandleRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(MetalworkingEfficiencySkill), 5, MetalworkingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(MetalworkingEfficiencySkill), 2, MetalworkingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(MetalworkingEfficiencySkill), 2, MetalworkingEfficiencySkill.MultiplicativeStrategy), + }; + SkillModifiedValue value = new SkillModifiedValue(1, MetalworkingSpeedSkill.MultiplicativeStrategy, typeof(MetalworkingSpeedSkill), Localizer.Do("craft time")); + SkillModifiedValueManager.AddBenefitForObject(typeof(WallCandleRecipe), Item.Get().UILink(), value); + SkillModifiedValueManager.AddSkillBenefit(Item.Get().UILink(), value); + this.CraftMinutes = value; + this.Initialize("Wall Candle", typeof(WallCandleRecipe)); + CraftingComponent.AddRecipe(typeof(AnvilObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/WorldObject/Washboard.cs b/AutoGen/WorldObject/Washboard.cs new file mode 100644 index 0000000..d0d1874 --- /dev/null +++ b/AutoGen/WorldObject/Washboard.cs @@ -0,0 +1,105 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.Components.Auth; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Economy; + using Eco.Gameplay.Housing; + using Eco.Gameplay.Interactions; + using Eco.Gameplay.Items; + using Eco.Gameplay.Minimap; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Property; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Gameplay.Pipes.LiquidComponents; + using Eco.Gameplay.Pipes.Gases; + using Eco.Gameplay.Systems.Tooltip; + using Eco.Shared; + using Eco.Shared.Math; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + using Eco.Shared.Items; + using Eco.Gameplay.Pipes; + using Eco.World.Blocks; + + [Serialized] + + [RequireComponent(typeof(PropertyAuthComponent))] + [RequireComponent(typeof(MinimapComponent))] + [RequireComponent(typeof(HousingComponent))] + [RequireComponent(typeof(SolidGroundComponent))] + public partial class WashboardObject : + WorldObject + { + public override string FriendlyName { get { return "Washboard"; } } + + + protected override void Initialize() + { + this.GetComponent().Initialize("Housing"); + this.GetComponent().Set(WashboardItem.HousingVal); + + + + } + + public override void Destroy() + { + base.Destroy(); + } + + } + + [Serialized] + public partial class WashboardItem : WorldObjectItem + { + public override string FriendlyName { get { return "Washboard"; } } + public override string Description { get { return "Sometimes it can be nice to have clean clothes."; } } + + static WashboardItem() + { + + } + + [TooltipChildren] public HousingValue HousingTooltip { get { return HousingVal; } } + [TooltipChildren] public static HousingValue HousingVal { get { return new HousingValue() + { + Category = "Bathroom", + Val = 2, + TypeForRoomLimit = "Washing", + DiminishingReturnPercent = 0.5f + };}} + } + + + [RequiresSkill(typeof(ClothProductionSkill), 1)] + public partial class WashboardRecipe : Recipe + { + public WashboardRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(ClothProductionEfficiencySkill), 10, ClothProductionEfficiencySkill.MultiplicativeStrategy), + }; + SkillModifiedValue value = new SkillModifiedValue(5, ClothProductionSpeedSkill.MultiplicativeStrategy, typeof(ClothProductionSpeedSkill), Localizer.Do("craft time")); + SkillModifiedValueManager.AddBenefitForObject(typeof(WashboardRecipe), Item.Get().UILink(), value); + SkillModifiedValueManager.AddSkillBenefit(Item.Get().UILink(), value); + this.CraftMinutes = value; + this.Initialize("Washboard", typeof(WashboardRecipe)); + CraftingComponent.AddRecipe(typeof(TailoringTableObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/WorldObject/WashingMachine.cs b/AutoGen/WorldObject/WashingMachine.cs new file mode 100644 index 0000000..f3912fc --- /dev/null +++ b/AutoGen/WorldObject/WashingMachine.cs @@ -0,0 +1,111 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.Components.Auth; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Economy; + using Eco.Gameplay.Housing; + using Eco.Gameplay.Interactions; + using Eco.Gameplay.Items; + using Eco.Gameplay.Minimap; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Property; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Gameplay.Pipes.LiquidComponents; + using Eco.Gameplay.Pipes.Gases; + using Eco.Gameplay.Systems.Tooltip; + using Eco.Shared; + using Eco.Shared.Math; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + using Eco.Shared.Items; + using Eco.Gameplay.Pipes; + using Eco.World.Blocks; + + [Serialized] + + [RequireComponent(typeof(PropertyAuthComponent))] + [RequireComponent(typeof(MinimapComponent))] + [RequireComponent(typeof(PowerGridComponent))] + [RequireComponent(typeof(PowerConsumptionComponent))] + [RequireComponent(typeof(HousingComponent))] + [RequireComponent(typeof(SolidGroundComponent))] + public partial class WashingMachineObject : + WorldObject + { + public override string FriendlyName { get { return "Washing Machine"; } } + + + protected override void Initialize() + { + this.GetComponent().Initialize("Housing"); + this.GetComponent().Initialize(100); + this.GetComponent().Initialize(10, new ElectricPower()); + this.GetComponent().Set(WashingMachineItem.HousingVal); + + + + } + + public override void Destroy() + { + base.Destroy(); + } + + } + + [Serialized] + public partial class WashingMachineItem : WorldObjectItem + { + public override string FriendlyName { get { return "Washing Machine"; } } + public override string Description { get { return "Why hand scrub your clothes on a washboard when you could throw them into this magical cleaning machine?"; } } + + static WashingMachineItem() + { + + } + + [TooltipChildren] public HousingValue HousingTooltip { get { return HousingVal; } } + [TooltipChildren] public static HousingValue HousingVal { get { return new HousingValue() + { + Category = "Bathroom", + Val = 20, + TypeForRoomLimit = "Washing", + DiminishingReturnPercent = 0.3f + };}} + } + + + [RequiresSkill(typeof(IndustrialEngineeringSkill), 3)] + public partial class WashingMachineRecipe : Recipe + { + public WashingMachineRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(IndustrialEngineeringEfficiencySkill), 20, IndustrialEngineeringEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(IndustrialEngineeringEfficiencySkill), 15, IndustrialEngineeringEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(IndustrialEngineeringEfficiencySkill), 5, IndustrialEngineeringEfficiencySkill.MultiplicativeStrategy), + }; + SkillModifiedValue value = new SkillModifiedValue(10, IndustrialEngineeringSpeedSkill.MultiplicativeStrategy, typeof(IndustrialEngineeringSpeedSkill), Localizer.Do("craft time")); + SkillModifiedValueManager.AddBenefitForObject(typeof(WashingMachineRecipe), Item.Get().UILink(), value); + SkillModifiedValueManager.AddSkillBenefit(Item.Get().UILink(), value); + this.CraftMinutes = value; + this.Initialize("Washing Machine", typeof(WashingMachineRecipe)); + CraftingComponent.AddRecipe(typeof(FactoryObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/WorldObject/Waterwheel.cs b/AutoGen/WorldObject/Waterwheel.cs new file mode 100644 index 0000000..300f0bd --- /dev/null +++ b/AutoGen/WorldObject/Waterwheel.cs @@ -0,0 +1,106 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.Components.Auth; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Economy; + using Eco.Gameplay.Housing; + using Eco.Gameplay.Interactions; + using Eco.Gameplay.Items; + using Eco.Gameplay.Minimap; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Property; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Gameplay.Pipes.LiquidComponents; + using Eco.Gameplay.Pipes.Gases; + using Eco.Gameplay.Systems.Tooltip; + using Eco.Shared; + using Eco.Shared.Math; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + using Eco.Shared.Items; + using Eco.Gameplay.Pipes; + using Eco.World.Blocks; + + [Serialized] + + [RequireComponent(typeof(PropertyAuthComponent))] + [RequireComponent(typeof(MinimapComponent))] + [RequireComponent(typeof(PowerGridComponent))] + [RequireComponent(typeof(PowerGeneratorComponent))] + [RequireComponent(typeof(HousingComponent))] + public partial class WaterwheelObject : + WorldObject + { + public override string FriendlyName { get { return "Waterwheel"; } } + + + protected override void Initialize() + { + this.GetComponent().Initialize("Power"); + this.GetComponent().Initialize(10, new MechanicalPower()); + this.GetComponent().Initialize(200); + this.GetComponent().Set(WaterwheelItem.HousingVal); + + + + } + + public override void Destroy() + { + base.Destroy(); + } + + } + + [Serialized] + public partial class WaterwheelItem : WorldObjectItem + { + public override string FriendlyName { get { return "Waterwheel"; } } + public override string Description { get { return "Use the power of flowing water to produce mechanical power."; } } + + static WaterwheelItem() + { + + } + + [TooltipChildren] public HousingValue HousingTooltip { get { return HousingVal; } } + [TooltipChildren] public static HousingValue HousingVal { get { return new HousingValue() + { + Category = "Industrial", + TypeForRoomLimit = "", + };}} + } + + + [RequiresSkill(typeof(PrimitiveMechanicsSkill), 2)] + public partial class WaterwheelRecipe : Recipe + { + public WaterwheelRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(PrimitiveMechanicsEfficiencySkill), 20, PrimitiveMechanicsEfficiencySkill.MultiplicativeStrategy), + }; + SkillModifiedValue value = new SkillModifiedValue(30, PrimitiveMechanicsSpeedSkill.MultiplicativeStrategy, typeof(PrimitiveMechanicsSpeedSkill), Localizer.Do("craft time")); + SkillModifiedValueManager.AddBenefitForObject(typeof(WaterwheelRecipe), Item.Get().UILink(), value); + SkillModifiedValueManager.AddSkillBenefit(Item.Get().UILink(), value); + this.CraftMinutes = value; + this.Initialize("Waterwheel", typeof(WaterwheelRecipe)); + CraftingComponent.AddRecipe(typeof(CarpentryTableObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/WorldObject/WindTurbine.cs b/AutoGen/WorldObject/WindTurbine.cs new file mode 100644 index 0000000..cdb2f4d --- /dev/null +++ b/AutoGen/WorldObject/WindTurbine.cs @@ -0,0 +1,113 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.Components.Auth; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Economy; + using Eco.Gameplay.Housing; + using Eco.Gameplay.Interactions; + using Eco.Gameplay.Items; + using Eco.Gameplay.Minimap; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Property; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Gameplay.Pipes.LiquidComponents; + using Eco.Gameplay.Pipes.Gases; + using Eco.Gameplay.Systems.Tooltip; + using Eco.Shared; + using Eco.Shared.Math; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + using Eco.Shared.Items; + using Eco.Gameplay.Pipes; + using Eco.World.Blocks; + + [Serialized] + [RequireComponent(typeof(OnOffComponent))] + + [RequireComponent(typeof(PropertyAuthComponent))] + [RequireComponent(typeof(MinimapComponent))] + [RequireComponent(typeof(LinkComponent))] + [RequireComponent(typeof(PowerGridComponent))] + [RequireComponent(typeof(PowerGeneratorComponent))] + [RequireComponent(typeof(HousingComponent))] + [RequireComponent(typeof(SolidGroundComponent))] + public partial class WindTurbineObject : + WorldObject + { + public override string FriendlyName { get { return "Wind Turbine"; } } + + + protected override void Initialize() + { + this.GetComponent().Initialize("Power"); + this.GetComponent().Initialize(30, new ElectricPower()); + this.GetComponent().Initialize(750); + this.GetComponent().Set(WindTurbineItem.HousingVal); + + + + } + + public override void Destroy() + { + base.Destroy(); + } + + } + + [Serialized] + public partial class WindTurbineItem : WorldObjectItem + { + public override string FriendlyName { get { return "Wind Turbine"; } } + public override string Description { get { return "Generates electrical power from the wind."; } } + + static WindTurbineItem() + { + + } + + [TooltipChildren] public HousingValue HousingTooltip { get { return HousingVal; } } + [TooltipChildren] public static HousingValue HousingVal { get { return new HousingValue() + { + Category = "Industrial", + TypeForRoomLimit = "", + };}} + } + + + [RequiresSkill(typeof(MechanicalEngineeringSkill), 4)] + public partial class WindTurbineRecipe : Recipe + { + public WindTurbineRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(MechanicsAssemblyEfficiencySkill), 15, MechanicsAssemblyEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(MechanicsAssemblyEfficiencySkill), 15, MechanicsAssemblyEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(MechanicsAssemblyEfficiencySkill), 10, MechanicsAssemblyEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(MechanicsAssemblyEfficiencySkill), 10, MechanicsAssemblyEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(MechanicsAssemblyEfficiencySkill), 4, MechanicsAssemblyEfficiencySkill.MultiplicativeStrategy), + }; + SkillModifiedValue value = new SkillModifiedValue(50, MechanicsAssemblySpeedSkill.MultiplicativeStrategy, typeof(MechanicsAssemblySpeedSkill), Localizer.Do("craft time")); + SkillModifiedValueManager.AddBenefitForObject(typeof(WindTurbineRecipe), Item.Get().UILink(), value); + SkillModifiedValueManager.AddSkillBenefit(Item.Get().UILink(), value); + this.CraftMinutes = value; + this.Initialize("Wind Turbine", typeof(WindTurbineRecipe)); + CraftingComponent.AddRecipe(typeof(MachineShopObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/WorldObject/Windmill.cs b/AutoGen/WorldObject/Windmill.cs new file mode 100644 index 0000000..a4b02ed --- /dev/null +++ b/AutoGen/WorldObject/Windmill.cs @@ -0,0 +1,108 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.Components.Auth; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Economy; + using Eco.Gameplay.Housing; + using Eco.Gameplay.Interactions; + using Eco.Gameplay.Items; + using Eco.Gameplay.Minimap; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Property; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Gameplay.Pipes.LiquidComponents; + using Eco.Gameplay.Pipes.Gases; + using Eco.Gameplay.Systems.Tooltip; + using Eco.Shared; + using Eco.Shared.Math; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + using Eco.Shared.Items; + using Eco.Gameplay.Pipes; + using Eco.World.Blocks; + + [Serialized] + + [RequireComponent(typeof(PropertyAuthComponent))] + [RequireComponent(typeof(MinimapComponent))] + [RequireComponent(typeof(PowerGridComponent))] + [RequireComponent(typeof(PowerGeneratorComponent))] + [RequireComponent(typeof(HousingComponent))] + public partial class WindmillObject : + WorldObject + { + public override string FriendlyName { get { return "Windmill"; } } + + + protected override void Initialize() + { + this.GetComponent().Initialize("Power"); + this.GetComponent().Initialize(10, new MechanicalPower()); + this.GetComponent().Initialize(200); + this.GetComponent().Set(WindmillItem.HousingVal); + + + + } + + public override void Destroy() + { + base.Destroy(); + } + + } + + [Serialized] + public partial class WindmillItem : WorldObjectItem + { + public override string FriendlyName { get { return "Windmill"; } } + public override string Description { get { return "Use wind to produce mechanical power."; } } + + static WindmillItem() + { + + } + + [TooltipChildren] public HousingValue HousingTooltip { get { return HousingVal; } } + [TooltipChildren] public static HousingValue HousingVal { get { return new HousingValue() + { + Category = "Industrial", + TypeForRoomLimit = "", + };}} + } + + + [RequiresSkill(typeof(PrimitiveMechanicsSkill), 3)] + public partial class WindmillRecipe : Recipe + { + public WindmillRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(PrimitiveMechanicsEfficiencySkill), 15, PrimitiveMechanicsEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(PrimitiveMechanicsEfficiencySkill), 5, PrimitiveMechanicsEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(PrimitiveMechanicsEfficiencySkill), 10, PrimitiveMechanicsEfficiencySkill.MultiplicativeStrategy), + }; + SkillModifiedValue value = new SkillModifiedValue(30, PrimitiveMechanicsSpeedSkill.MultiplicativeStrategy, typeof(PrimitiveMechanicsSpeedSkill), Localizer.Do("craft time")); + SkillModifiedValueManager.AddBenefitForObject(typeof(WindmillRecipe), Item.Get().UILink(), value); + SkillModifiedValueManager.AddSkillBenefit(Item.Get().UILink(), value); + this.CraftMinutes = value; + this.Initialize("Windmill", typeof(WindmillRecipe)); + CraftingComponent.AddRecipe(typeof(CarpentryTableObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/WorldObject/WoodSign.cs b/AutoGen/WorldObject/WoodSign.cs new file mode 100644 index 0000000..13a149d --- /dev/null +++ b/AutoGen/WorldObject/WoodSign.cs @@ -0,0 +1,97 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.Components.Auth; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Economy; + using Eco.Gameplay.Housing; + using Eco.Gameplay.Interactions; + using Eco.Gameplay.Items; + using Eco.Gameplay.Minimap; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Property; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Gameplay.Pipes.LiquidComponents; + using Eco.Gameplay.Pipes.Gases; + using Eco.Gameplay.Systems.Tooltip; + using Eco.Shared; + using Eco.Shared.Math; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + using Eco.Shared.Items; + using Eco.Gameplay.Pipes; + using Eco.World.Blocks; + + [Serialized] + + [RequireComponent(typeof(PropertyAuthComponent))] + [RequireComponent(typeof(MinimapComponent))] + public partial class WoodSignObject : + WorldObject + { + public override string FriendlyName { get { return "Wood Sign"; } } + + + protected override void Initialize() + { + this.GetComponent().Initialize("Misc"); + + + + this.AddAsPOI("Marker"); + } + + public override void Destroy() + { + base.Destroy(); + this.RemoveAsPOI("Marker"); + } + + } + + [Serialized] + public partial class WoodSignItem : WorldObjectItem + { + public override string FriendlyName { get { return "Wood Sign"; } } + public override string Description { get { return "A large sign for all your large text needs!"; } } + + static WoodSignItem() + { + + } + + } + + + [RequiresSkill(typeof(LumberWoodworkingSkill), 1)] + public partial class WoodSignRecipe : Recipe + { + public WoodSignRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(LumberWoodworkingEfficiencySkill), 4, LumberWoodworkingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(LumberWoodworkingEfficiencySkill), 4, LumberWoodworkingEfficiencySkill.MultiplicativeStrategy), + }; + SkillModifiedValue value = new SkillModifiedValue(1, LumberWoodworkingSpeedSkill.MultiplicativeStrategy, typeof(LumberWoodworkingSpeedSkill), Localizer.Do("craft time")); + SkillModifiedValueManager.AddBenefitForObject(typeof(WoodSignRecipe), Item.Get().UILink(), value); + SkillModifiedValueManager.AddSkillBenefit(Item.Get().UILink(), value); + this.CraftMinutes = value; + this.Initialize("Wood Sign", typeof(WoodSignRecipe)); + CraftingComponent.AddRecipe(typeof(SawmillObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/WorldObject/WoodenFabricBed.cs b/AutoGen/WorldObject/WoodenFabricBed.cs new file mode 100644 index 0000000..022f356 --- /dev/null +++ b/AutoGen/WorldObject/WoodenFabricBed.cs @@ -0,0 +1,107 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.Components.Auth; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Economy; + using Eco.Gameplay.Housing; + using Eco.Gameplay.Interactions; + using Eco.Gameplay.Items; + using Eco.Gameplay.Minimap; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Property; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Gameplay.Pipes.LiquidComponents; + using Eco.Gameplay.Pipes.Gases; + using Eco.Gameplay.Systems.Tooltip; + using Eco.Shared; + using Eco.Shared.Math; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + using Eco.Shared.Items; + using Eco.Gameplay.Pipes; + using Eco.World.Blocks; + + [Serialized] + + [RequireComponent(typeof(PropertyAuthComponent))] + [RequireComponent(typeof(MinimapComponent))] + [RequireComponent(typeof(HousingComponent))] + [RequireComponent(typeof(SolidGroundComponent))] + public partial class WoodenFabricBedObject : + WorldObject + { + public override string FriendlyName { get { return "Wooden Fabric Bed"; } } + + + protected override void Initialize() + { + this.GetComponent().Initialize("Misc"); + this.GetComponent().Set(WoodenFabricBedItem.HousingVal); + + + + } + + public override void Destroy() + { + base.Destroy(); + } + + } + + [Serialized] + public partial class WoodenFabricBedItem : WorldObjectItem + { + public override string FriendlyName { get { return "Wooden Fabric Bed"; } } + public override string Description { get { return "A much more comfortable bed made with fabric."; } } + + static WoodenFabricBedItem() + { + + } + + [TooltipChildren] public HousingValue HousingTooltip { get { return HousingVal; } } + [TooltipChildren] public static HousingValue HousingVal { get { return new HousingValue() + { + Category = "Bedroom", + Val = 4, + TypeForRoomLimit = "Bed", + DiminishingReturnPercent = 0.4f + };}} + } + + + [RequiresSkill(typeof(LumberWoodworkingSkill), 4)] + public partial class WoodenFabricBedRecipe : Recipe + { + public WoodenFabricBedRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(LumberWoodworkingEfficiencySkill), 20, LumberWoodworkingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(LumberWoodworkingEfficiencySkill), 20, LumberWoodworkingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(LumberWoodworkingEfficiencySkill), 5, LumberWoodworkingEfficiencySkill.MultiplicativeStrategy), + }; + SkillModifiedValue value = new SkillModifiedValue(5, LumberWoodworkingSpeedSkill.MultiplicativeStrategy, typeof(LumberWoodworkingSpeedSkill), Localizer.Do("craft time")); + SkillModifiedValueManager.AddBenefitForObject(typeof(WoodenFabricBedRecipe), Item.Get().UILink(), value); + SkillModifiedValueManager.AddSkillBenefit(Item.Get().UILink(), value); + this.CraftMinutes = value; + this.Initialize("Wooden Fabric Bed", typeof(WoodenFabricBedRecipe)); + CraftingComponent.AddRecipe(typeof(SawmillObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/WorldObject/WoodenStrawBed.cs b/AutoGen/WorldObject/WoodenStrawBed.cs new file mode 100644 index 0000000..c18ed6d --- /dev/null +++ b/AutoGen/WorldObject/WoodenStrawBed.cs @@ -0,0 +1,107 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.Components.Auth; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Economy; + using Eco.Gameplay.Housing; + using Eco.Gameplay.Interactions; + using Eco.Gameplay.Items; + using Eco.Gameplay.Minimap; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Property; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Gameplay.Pipes.LiquidComponents; + using Eco.Gameplay.Pipes.Gases; + using Eco.Gameplay.Systems.Tooltip; + using Eco.Shared; + using Eco.Shared.Math; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + using Eco.Shared.Items; + using Eco.Gameplay.Pipes; + using Eco.World.Blocks; + + [Serialized] + + [RequireComponent(typeof(PropertyAuthComponent))] + [RequireComponent(typeof(MinimapComponent))] + [RequireComponent(typeof(HousingComponent))] + [RequireComponent(typeof(SolidGroundComponent))] + public partial class WoodenStrawBedObject : + WorldObject + { + public override string FriendlyName { get { return "Wooden Straw Bed"; } } + + + protected override void Initialize() + { + this.GetComponent().Initialize("Misc"); + this.GetComponent().Set(WoodenStrawBedItem.HousingVal); + + + + } + + public override void Destroy() + { + base.Destroy(); + } + + } + + [Serialized] + public partial class WoodenStrawBedItem : WorldObjectItem + { + public override string FriendlyName { get { return "Wooden Straw Bed"; } } + public override string Description { get { return "A nice, scratchy and horrible uncomfortable bed. But at least it keeps you off the ground."; } } + + static WoodenStrawBedItem() + { + + } + + [TooltipChildren] public HousingValue HousingTooltip { get { return HousingVal; } } + [TooltipChildren] public static HousingValue HousingVal { get { return new HousingValue() + { + Category = "Bedroom", + Val = 2, + TypeForRoomLimit = "Bed", + DiminishingReturnPercent = 0.4f + };}} + } + + + [RequiresSkill(typeof(WoodworkingSkill), 3)] + public partial class WoodenStrawBedRecipe : Recipe + { + public WoodenStrawBedRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(WoodworkingEfficiencySkill), 10, WoodworkingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(WoodworkingEfficiencySkill), 20, WoodworkingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(WoodworkingEfficiencySkill), 20, WoodworkingEfficiencySkill.MultiplicativeStrategy), + }; + SkillModifiedValue value = new SkillModifiedValue(5, WoodworkingSpeedSkill.MultiplicativeStrategy, typeof(WoodworkingSpeedSkill), Localizer.Do("craft time")); + SkillModifiedValueManager.AddBenefitForObject(typeof(WoodenStrawBedRecipe), Item.Get().UILink(), value); + SkillModifiedValueManager.AddSkillBenefit(Item.Get().UILink(), value); + this.CraftMinutes = value; + this.Initialize("Wooden Straw Bed", typeof(WoodenStrawBedRecipe)); + CraftingComponent.AddRecipe(typeof(CarpentryTableObject), this); + } + } +} \ No newline at end of file diff --git a/AutoGen/WorldObject/Workbench.cs b/AutoGen/WorldObject/Workbench.cs new file mode 100644 index 0000000..c7c2069 --- /dev/null +++ b/AutoGen/WorldObject/Workbench.cs @@ -0,0 +1,98 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using Eco.Gameplay.Blocks; + using Eco.Gameplay.Components; + using Eco.Gameplay.Components.Auth; + using Eco.Gameplay.DynamicValues; + using Eco.Gameplay.Economy; + using Eco.Gameplay.Housing; + using Eco.Gameplay.Interactions; + using Eco.Gameplay.Items; + using Eco.Gameplay.Minimap; + using Eco.Gameplay.Objects; + using Eco.Gameplay.Players; + using Eco.Gameplay.Property; + using Eco.Gameplay.Skills; + using Eco.Gameplay.Systems.TextLinks; + using Eco.Gameplay.Pipes.LiquidComponents; + using Eco.Gameplay.Pipes.Gases; + using Eco.Gameplay.Systems.Tooltip; + using Eco.Shared; + using Eco.Shared.Math; + using Eco.Shared.Localization; + using Eco.Shared.Serialization; + using Eco.Shared.Utils; + using Eco.Shared.View; + using Eco.Shared.Items; + using Eco.Gameplay.Pipes; + using Eco.World.Blocks; + + [Serialized] + + [RequireComponent(typeof(PropertyAuthComponent))] + [RequireComponent(typeof(MinimapComponent))] + [RequireComponent(typeof(LinkComponent))] + [RequireComponent(typeof(CraftingComponent))] + [RequireComponent(typeof(SolidGroundComponent))] + public partial class WorkbenchObject : + WorldObject + { + public override string FriendlyName { get { return "Workbench"; } } + + + protected override void Initialize() + { + this.GetComponent().Initialize("Crafting"); + + + + } + + public override void Destroy() + { + base.Destroy(); + } + + } + + [Serialized] + public partial class WorkbenchItem : WorldObjectItem + { + public override string FriendlyName { get { return "Workbench"; } } + public override string Description { get { return "A bench for the basics and making even more benches."; } } + + static WorkbenchItem() + { + + } + + } + + + [RequiresSkill(typeof(BasicCraftingSkill), 0)] + public partial class WorkbenchRecipe : Recipe + { + public WorkbenchRecipe() + { + this.Products = new CraftingElement[] + { + new CraftingElement(), + }; + + this.Ingredients = new CraftingElement[] + { + new CraftingElement(typeof(BasicCraftingEfficiencySkill), 30, BasicCraftingEfficiencySkill.MultiplicativeStrategy), + new CraftingElement(typeof(BasicCraftingEfficiencySkill), 20, BasicCraftingEfficiencySkill.MultiplicativeStrategy), + }; + SkillModifiedValue value = new SkillModifiedValue(5, BasicCraftingSpeedSkill.MultiplicativeStrategy, typeof(BasicCraftingSpeedSkill), Localizer.Do("craft time")); + SkillModifiedValueManager.AddBenefitForObject(typeof(WorkbenchRecipe), Item.Get().UILink(), value); + SkillModifiedValueManager.AddSkillBenefit(Item.Get().UILink(), value); + this.CraftMinutes = value; + this.Initialize("Workbench", typeof(WorkbenchRecipe)); + CraftingComponent.AddRecipe(typeof(WorkbenchObject), this); + } + } +} \ No newline at end of file diff --git a/Items/Tailings.cs b/Items/Tailings.cs new file mode 100644 index 0000000..5e2ed0c --- /dev/null +++ b/Items/Tailings.cs @@ -0,0 +1,112 @@ +namespace Eco.Mods.TechTree +{ + using System; + using System.ComponentModel; + using Eco.Gameplay.Items; + using Eco.Shared.Math; + using Eco.World.Blocks; + using Eco.Shared.Serialization; + using Eco.Simulation.WorldLayers; + using Eco.Gameplay.Pipes; + using Eco.Gameplay.Items.SearchAndSelect; + using World = World.World; + + // To be honest, most of these should probably be removed from Tailing.cs, but they're here for now. + [Serialized] + [Weight(30000)] + [MaxStackSize(20)] + [RequiresTool(typeof(ShovelItem))] + [MakesRoads] + public class DirtItem : BlockItem, ICanExitFromPipe + { + public override string FriendlyName { get { return "Dirt"; } } + public override string FriendlyNamePlural { get { return "Dirt"; } } + public override bool CanStickToWalls { get { return false; } } + + public string FlowTooltip(float flowrate) { return null; } + + public int OnPipeExit(Ray posDir, int amount) + { + // need a pyramid check, but for now just do down + var existingBlock = World.GetBlock(posDir.FirstPos) as EmptyBlock; + if (existingBlock != null) + { + var target = World.FindPyramidPos(posDir.FirstPos); + World.SetBlock(this.OriginType, target); + return 1; + } + return 0; + } + } + + [Serialized] + [Weight(30000)] + [MaxStackSize(20)] + [RequiresTool(typeof(ShovelItem))] + public class SandItem : BlockItem + { + public override string FriendlyName { get { return "Sand"; } } + public override string FriendlyNamePlural { get { return "Sand"; } } + public override bool CanStickToWalls { get { return false; } } + } + + [Serialized, Liquid] + [Category("Hidden")] + [MaxStackSize(10)] + public class WaterItem : BlockItem, ICanExitFromPipe + { + public override bool CanStickToWalls { get { return false; } } + public string FlowTooltip(float flowrate) { return null; } + + public int OnPipeExit(Ray posDir, int amount) + { + var pos = posDir.FirstPos; + var toSet = Math.Min(amount, 1000); + var existingBlock = World.GetBlock(pos); + if (!(existingBlock is EmptyBlock) && !(existingBlock is WaterBlock)) + return 0; + + // Set the existing block if it's there, or add a new block. + if (existingBlock is EmptyBlock) + existingBlock = World.SetBlock(typeof(WaterBlock), pos, toSet * 0.001f) as WaterBlock; + + var waterBlock = existingBlock as WaterBlock; + if (waterBlock.Water < toSet) + { + waterBlock.Water = toSet; + World.WakeUp(pos); + } + waterBlock.PipeSupplied = true; + return toSet; + } + } + + + [Serialized, Liquid] + [Category("Hidden")] + public class SewageItem : BlockItem, ICanExitFromPipe + { + public override string FriendlyName { get { return "Sewage"; } } + public override string FriendlyNamePlural { get { return "Sewage"; } } + public override bool CanStickToWalls { get { return false; } } + public string FlowTooltip(float flowrate) { return null; } + + + public int OnPipeExit(Ray posDir, int amount) + { + WorldLayerManager.ClimateSim.AddGroundPollution(posDir.FirstPos.XZ, amount); + return amount; + } + } + + [Serialized, Weight(30000), StartsDiscovered] + [MaxStackSize(20)] + [RequiresTool(typeof(ShovelItem))] + public class TailingsItem : BlockItem + { + public override string FriendlyName { get { return "Tailings"; } } + public override string FriendlyNamePlural { get { return "Tailings"; } } + public override string Description { get { return "Waste product from smelting. When left on soil the run-off will create pollution; killing nearby plants and seeping into the water supply. Contain in buildings or bury in rock to neutralize."; } } + public override bool CanStickToWalls { get { return false; } } + } +} \ No newline at end of file diff --git a/KirthosMods/BetterLoggingProfession/BetterLoggingProfession.unity3d b/KirthosMods/BetterLoggingProfession/BetterLoggingProfession.unity3d new file mode 100644 index 0000000000000000000000000000000000000000..768a1a02c5e10d2e6b21938382060a5d434879c2 GIT binary patch literal 110376 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%0Dj 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