A server mod for Eco 11.0 that extends the law system with a number of helpful utility game values and legal actions.
Added game values:
Added legal actions:
Added law triggers:
EcoLawExtensionsMod.dll
from the latest release.EcoLawExtensionsMod.dll
file to Mods
folder of the dedicated server.The added game values will show up under the existing headings in the law editor. Do not remove the mod if any features of the mod have been used in a law, even a law that has been removed, as this may corrupt the world save.
Counts the number of citizens that hold a title or are a member of a demographic.
Property Name | Type | Description |
---|---|---|
Target | Alias | The title or demographic to count. If a user is passed in here, this will always return 1. |
Counts the number of skills that a citizen has learnt (just read the scroll) or specialised (invested a star in). Always includes Self Improvement.
Property Name | Type | Description |
---|---|---|
Citizen | User | The citizen to count skills of. |
IncludeUnspecialised | Yes/No | Whether to include skills which are learnt but not specialised. This will also include base skills that don't need a scroll, e.g. logging and mining. |
Gets the current XP multiplier of a citizen, with options to enable or disable consideration of food or housing bonuses. Will return 0 if "No" is passed to both.
Property Name | Type | Description |
---|---|---|
Citizen | User | The user to evaluate skill rate of. |
ConsiderFood | Yes/No | Whether to consider their food bonus. |
ConsiderHousing | Yes/No | Whether to consider their housing bonus. |
Gets the current nutrition value of a citizen, e.g. excluding any multipliers from balanced diet, tastiness, cravings etc, with options to enable or disable consideration of each macro nutrient. Will return 0 if "No" is passed to all.
Property Name | Type | Description |
---|---|---|
Citizen | User | The user to evaluate skill rate of. |
ConsiderCarbs | Yes/No | Whether to consider their carbohydrates. |
ConsiderVits | Yes/No | Whether to consider their vitamins. |
ConsiderProtein | Yes/No | Whether to consider their protein. |
ConsiderFat | Yes/No | Whether to consider their fat. |
Finds the closest world object matching a filter to a location and gets the distance to it. If no world objects exist that match the filter, a very large number is returned (basically infinite).
Property Name | Type | Description |
---|---|---|
Location | Vector3 | The location to test. Usually this is passed in context from the law trigger. |
ObjectType | Object Picker | A filter for objects to search for. |
Finds the closest plant matching a filter to a location and gets the distance to it. If no plants exist that match the filter, a very large number is returned (basically infinite).
Property Name | Type | Description |
---|---|---|
Location | Vector3 | The location to test. Usually this is passed in context from the law trigger. |
PlantType | Plant Species Picker | A filter for plants to search for. |
Reads the value of a world layer at a location. World layers include biomes, animal populations, pollution levels and other misc things like oilfield density. There is not (yet) a documented list of valid world layer names but generally you can guess them based on the layer toggles on the world map - for example, the ocean biome layer is "OceanBiome", oilfield is "Oilfield" etc. Note that world layers are usually at a different resolution to block coords - e.g. while the transition between biomes may appear smooth on the map, the actual layer readings from this game value may not be interpolated in the same way. The returned value is a decimal between 0 and 1, corresponding to the percentage shown on the world map.
Property Name | Type | Description |
---|---|---|
Location | Vector3 | The location to test. Usually this is passed in context from the law trigger. |
WorldLayer | String | The world layer name, for example "OceanBiome" or "Oilfield". |
Extracts the Y coordinate from a location. This will be an integer in whole blocks above bedrock.
Property Name | Type | Description |
---|---|---|
Location | Vector3 | The location to get the height of. Usually this is passed in context from the law trigger. |
Tries to turn on machines belonging to a citizen or group that are currently turned off. The filter can specify how the machines were turned off - for example, only try to turn on machines that were turned off legally (e.g. via prevent on Pollute Air).
Property Name | Type | Description |
---|---|---|
Target | Alias | The title, demographic or citizen whoes machines should be considered. This could be set to Everyone to consider all machines in the world. |
ByPlayer | Yes/No | Include machines turned off by a player or by other invalid status. |
ByLaw | Yes/No | Include machines turned off by a law (e.g. prevent on Pollute Air trigger). |
Gets the amount of a currency held in a government bank account.
Property Name | Type | Description |
---|---|---|
Currency | Currency | The currency to retrieve the holding for. |
Account | Government Bank Account | The account to retrieve the holding from. |
Triggered every "power law tick" for every object generating some kind of power. The "power law tick" is a server configurable interval defaulting to 30 seconds. Triggers for objects generating mechanical power (e.g. waterwheels) and electrical power (e.g. steam engines). Also triggers for objects that could be generating power but aren't because they've been turned off by the power grid to save resources. Does not trigger for objects that are turned off by a player or are otherwise disabled (e.g. out of fuel or issue with pipe connections).
Property Name | Type | Description |
---|---|---|
Citizen | User | The citizen responsible for generating the power. This is the owner of the plot on which the object resides. If owned by a multi-user title or demographic, the first user in the list is used. |
ActionLocation | Vector3 | The location of the object that generated the power. |
PowerGenerator | Item | The type of object that generated the power. |
TimeGenerating | Number | How long since the previous power law tick. This will normally be the same as the configured interval but will vary slightly and may be higher when the server is under heavy load. |
IsElectrical | Boolean | Whether the object is generating electrical power. |
IsMechanical | Boolean | Whether the object is generating mechanical power. |
PowerAvailable | Number | How much power the object is making available to the grid. This will be constant, even if the object is disabled by the power grid to save resources. Measured in Joules. |
PowerProduced | Number | How much power the object is currently generating. This may be 0 if the object is disabled by the power grid to save resources. Measured in Joules. |
Note that the PowerAvailable
and PowerProduced
values are measured in Joules and are units of power over time. This is because the law trigger tracks all power activity over a time interval. For example, a steam engine generating 1000 Watts of power will generate 30,000 Joules of power over the course of 30 seconds. This value will change if the server configurable "power law tick" interval is changed. You can get back to the wattage of the object by dividing by TimeGenerating
, however depending on your goal it may make more sense to use these values as-is to apply any sort of tax or payment, as they are compensated for time implicitly by the law trigger automatically.
Triggered every "power law tick" for every object consuming some kind of power. The "power law tick" is a server configurable interval defaulting to 30 seconds. Triggers for objects consuming mechanical power (e.g. mills) and electrical power (e.g. lights). Does not trigger for objects that are trying to use power but are turned off due to overloaded power grid.
Property Name | Type | Description |
---|---|---|
Citizen | User | The citizen responsible for consuming the power. This is the owner of the plot on which the object resides. If owned by a multi-user title or demographic, the first user in the list is used. |
ActionLocation | Vector3 | The location of the object that consumed the power. |
PowerConsumer | Item | The type of object that consumed the power. |
TimeConsuming | Number | How long since the previous power law tick. This will normally be the same as the configured interval but will vary slightly and may be higher when the server is under heavy load. |
IsElectrical | Boolean | Whether the object is consuming electrical power. |
IsMechanical | Boolean | Whether the object is consuming mechanical power. |
PowerUsed | Number | How much power the object is currently using. Measured in Joules. |
Note that the PowerAvailable
and PowerProduced
values are measured in Joules and are units of power over time. This is because the law trigger tracks all power activity over a time interval. For example, a steam engine generating 1000 Watts of power will generate 30,000 Joules of power over the course of 30 seconds. This value will change if the server configurable "power law tick" interval is changed. You can get back to the wattage of the object by dividing by TimeGenerating
, however depending on your goal it may make more sense to use these values as-is to apply any sort of tax or payment, as they are compensated for time implicitly by the law trigger automatically.
ReferenceAssemblies
to eco-dlls
in the root directory (create the folder if it doesn't exist)EcoLawExtensionsMod.sln
in Visual Studio 2019/2022EcoLawExtensionsMod
project in Visual StudioEcoLawExtensionsMod\bin\{Debug|Release}\net7.0
ECO_BRANCH="release" MODKIT_VERSION="0.11.0.0-beta" fetch-eco-reference-assemblies.sh
(change the modkit branch and version as needed)EcoLawExtensionsMod
directory and run:
dotnet restore
dotnet build
EcoLawExtensionsMod/bin/{Debug|Release}/net7.0