This is an old revision of the document!
Table of Contents
Options for workplaces
Recall: basics
This is an example of a simple workplace “MY_BUILDING” with a worker “MY_BUILDING_JOB” producing “MY_BUILDING_OUTPUT_RESOURCE” from “MY_BUILDING_INPUT_RESOURCE”:
myMod:register({ DataType = "BUILDING_PART", Id = "MY_BUILDING_PART", Mover = { DataType = "BUILDING_PART_MOVER_INSTANCE" }, ConstructorData = { DataType = "BUILDING_CONSTRUCTOR_DEFAULT", CoreObjectPrefab = "MY_BUILDING_PREFAB" }, AssetBuildingFunction = "MY_BUILDING_FUNCTION" }) myMod:register({ DataType = "BUILDING_FUNCTION_WORKPLACE", Id = "MY_BUILDING_FUNCTION", WorkerCapacity = 1, RelatedJob = { Job = "MY_BUILDING_JOB", Behavior = "WORK_BEHAVIOR" }, InputInventoryCapacity = { { Resource = "MY_BUILDING_INPUT_RESOURCE", Quantity = 10 } }, ResourceListNeeded = { { Resource = "MY_BUILDING_INPUT_RESOURCE", Quantity = 1 } }, ResourceProduced = { { Resource = "MY_BUILDING_OUTPUT_RESOURCE", Quantity = 1 } } })
Same building for producing and selling
This is an example of a simple workplace “MY_BUILDING” with a worker “MY_BUILDING_JOB” producing “MY_BUILDING_OUTPUT_RESOURCE” of type “MY_RESOURCE_TYPE” from “MY_BUILDING_INPUT_RESOURCE”:
myMod:register({ DataType = "BUILDING_PART", Id = "MY_BUILDING_PART", Mover = { DataType = "BUILDING_PART_MOVER_INSTANCE" }, ConstructorData = { DataType = "BUILDING_CONSTRUCTOR_DEFAULT", CoreObjectPrefab = "MY_BUILDING_PREFAB" }, AssetBuildingFunction = "MY_BUILDING_FUNCTION" }) myMod:register({ DataType = "BUILDING_FUNCTION_MARKET", Id = "MY_BUILDING_FUNCTION", TypeList = { "MY_RESOURCE_TYPE" }, WorkerCapacity = 1, RelatedJob = { Job = "MY_BUILDING_JOB", Behavior = "WORK_BEHAVIOR" }, InputInventoryCapacity = { { Resource = "MY_BUILDING_INPUT_RESOURCE", Quantity = 10 } }, ResourceListNeeded = { { Resource = "MY_BUILDING_INPUT_RESOURCE", Quantity = 1 } }, ResourceProduced = { { Resource = "MY_BUILDING_OUTPUT_RESOURCE", Quantity = 1 } } })
note: “MY_RESOURCE_TYPE”: see RESOURCE_TYPE
Workplace with several recipes
Workplace with 2 recipes:
1) produces “MY_BUILDING_OUTPUT_RESOURCE_1” from “MY_BUILDING_INPUT_RESOURCE_1”,
2) produces “MY_BUILDING_OUTPUT_RESOURCE_2” from “MY_BUILDING_INPUT_RESOURCE_2”:
myMod:register({ DataType = "BUILDING_PART", Id = "MY_BUILDING_PART", Mover = { DataType = "BUILDING_PART_MOVER_INSTANCE" }, ConstructorData = { DataType = "BUILDING_CONSTRUCTOR_DEFAULT", CoreObjectPrefab = "MY_BUILDING_PREFAB" }, AuthorizedFunctionList = "MY_BUILDING_FUNCTION_LIST" }) myMod:register({ DataType = "BUILDING_FUNCTION_LIST", Id = "MY_BUILDING_FUNCTION_LIST", AssetFunctionList = { "MY_BUILDING_RECIPE_1_FUNCTION", "MY_BUILDING_RECIPE_2_FUNCTION" } }) myMod:register({ DataType = "BUILDING_FUNCTION_WORKPLACE", Id = "MY_BUILDING_RECIPE_1_FUNCTION", IsOverrideCapacity = true, CapacityPerSlot = 50, WorkerCapacity = 1, RelatedJob = { Job = "MY_BUILDING_JOB", Behavior = "WORK_BEHAVIOR" }, InputInventoryCapacity = { { Resource = "MY_BUILDING_INPUT_RESOURCE_1", Quantity = 50 } }, ResourceListNeeded = { { Resource = "MY_BUILDING_INPUT_RESOURCE_1", Quantity = 1 } }, ResourceProduced = { { Resource = "MY_BUILDING_OUTPUT_RESOURCE_1", Quantity = 1 } } }) myMod:register({ DataType = "BUILDING_FUNCTION_WORKPLACE", Id = "MY_BUILDING_RECIPE_2_FUNCTION", IsOverrideCapacity = true, CapacityPerSlot = 20, WorkerCapacity = 1, RelatedJob = { Job = "MY_BUILDING_JOB", Behavior = "WORK_BEHAVIOR" }, InputInventoryCapacity = { { Resource = "MY_BUILDING_INPUT_RESOURCE_2", Quantity = 20 } }, ResourceListNeeded = { { Resource = "MY_BUILDING_INPUT_RESOURCE_2", Quantity = 1 } }, ResourceProduced = { { Resource = "MY_BUILDING_OUTPUT_RESOURCE_2", Quantity = 1 } } })
Note: The IsOverrideCapacity is mandatory to have different CapacityPerSlot per recipe.
Several workplaces per building
(To be checked)
In order to have 2 BUILDING_FUNCTION_WORKPLACE (“MY_BUILDING_1_FUNCTION” and “MY_BUILDING_2_FUNCTION”) at the same time on the same building:
1) In the fbx file, create several empty BuildingPart (building1Part and building2Part) under the main buildingPart
2) In the lua file:
myMod:register({ DataType = "BUILDING_PART", Id = "MY_BUILDING_PART", Mover = { DataType = "BUILDING_PART_MOVER_INSTANCE" }, ConstructorData = { DataType = "BUILDING_CONSTRUCTOR_DEFAULT", CoreObjectPrefab = "MY_BUILDING_PREFAB" } }) myMod:registerAssetId("models/myFbxName.fbx/Prefab/buildingPart/building1Part", "MY_BUILDING_1_PREFAB") myMod:register({ DataType = "BUILDING_PART", Id = "MY_BUILDING_1_PART", Mover = { DataType = "BUILDING_PART_MOVER_INSTANCE" }, ConstructorData = { DataType = "BUILDING_CONSTRUCTOR_DEFAULT", CoreObjectPrefab = "MY_BUILDING_1_PREFAB" }, AssetBuildingFunction = "MY_BUILDING_1_FUNCTION" }) myMod:registerAssetId("models/myFbxName.fbx/Prefab/buildingPart/building2Part", "MY_BUILDING_2_PREFAB") myMod:register({ DataType = "BUILDING_PART", Id = "MY_BUILDING_2_PART", Mover = { DataType = "BUILDING_PART_MOVER_INSTANCE" }, ConstructorData = { DataType = "BUILDING_CONSTRUCTOR_DEFAULT", CoreObjectPrefab = "MY_BUILDING_2_PREFAB" }, AssetBuildingFunction = "MY_BUILDING_2_FUNCTION" })
Custom soldier's keep
Waiting for the next game upgrade.