diff --git a/config/_file_loader.lua b/config/_file_loader.lua index 404261bf..e468afc2 100644 --- a/config/_file_loader.lua +++ b/config/_file_loader.lua @@ -50,6 +50,8 @@ return { 'modules.addons.afk-kick', 'modules.addons.report-jail', 'modules.addons.protection-jail', + 'modules.addons.deconlog', + 'modules.addons.nukeprotect', --- Data 'modules.data.statistics', @@ -71,6 +73,8 @@ return { 'modules.gui.server-ups', 'modules.commands.debug', + 'modules.graftorio.require', -- graftorio + --- Config Files 'config.expcore.command_auth_admin', -- commands tagged with admin_only are blocked for non admins 'config.expcore.command_auth_roles', -- commands must be allowed via the role config diff --git a/config/deconlog.lua b/config/deconlog.lua new file mode 100644 index 00000000..b7fd5ab6 --- /dev/null +++ b/config/deconlog.lua @@ -0,0 +1,11 @@ +--- This config controls whether actions such as deconning by players without sufficient permissions is logged or not +-- @config Deconlog + +return { + decon_area = true, ---@setting decon_area whether to log when an area is being deconstructed + built_entity = true, ---@setting built_entity whether to log when an entity is built + mined_entity = true, ---@setting mined_entity whether to log when an entity is mined + fired_rocket = true, ---@setting fired_nuke whether to log when a rocket is fired + fired_explosive_rocket = true, ---@setting fired_nuke whether to log when a explosive rocket is fired + fired_nuke = true, ---@setting fired_nuke whether to log when a nuke is fired +} diff --git a/config/expcore/roles.lua b/config/expcore/roles.lua index 95b797bd..20feeb14 100644 --- a/config/expcore/roles.lua +++ b/config/expcore/roles.lua @@ -52,6 +52,7 @@ Roles.new_role('Administrator','Admin') 'gui/warp-list/bypass-cooldown', 'gui/warp-list/bypass-proximity', 'command/connect-all', + 'command/collectdata' } Roles.new_role('Moderator','Mod') @@ -202,6 +203,7 @@ end) Roles.new_role('Member','Mem') :set_permission_group('Standard') :set_custom_color{r=24,g=172,b=188} +:set_flag("deconlog-bypass") :set_parent('Regular') :allow{ 'gui/task-list/add', @@ -222,7 +224,8 @@ Roles.new_role('Regular','Reg') 'command/go-to-spawn', 'command/me', 'standard-decon', - 'bypass-entity-protection' + 'bypass-entity-protection', + 'bypass-nukeprotect' } :set_auto_assign_condition(function(player) if player.online_time >= hours3 then @@ -264,6 +267,7 @@ Roles.new_role('Jail') :set_permission_group('Restricted') :set_custom_color{r=50,g=50,b=50} :set_block_auto_assign(true) +:set_flag("defer_role_changes") :disallow(default.allowed) --- System defaults which are required to be set diff --git a/config/graftorio.lua b/config/graftorio.lua new file mode 100644 index 00000000..20dca369 --- /dev/null +++ b/config/graftorio.lua @@ -0,0 +1,7 @@ +return { + modules = { + ["forcestats"] = true, + ["logistorage"] = false, + ["general"] = true, + } +} diff --git a/config/nukeprotect.lua b/config/nukeprotect.lua new file mode 100644 index 00000000..26b919ca --- /dev/null +++ b/config/nukeprotect.lua @@ -0,0 +1,30 @@ +return { + inventories = { + { + inventory = defines.inventory.character_ammo, + event = defines.events.on_player_ammo_inventory_changed, + items = { + ["atomic-bomb"] = true + }, + }, + { + inventory = defines.inventory.character_armor, + event = defines.events.on_player_armor_inventory_changed, + items = {}, + }, + { + inventory = defines.inventory.character_guns, + event = defines.events.on_player_gun_inventory_changed, + items = {}, + }, + { + inventory = defines.inventory.character_main, + event = defines.events.on_player_main_inventory_changed, + items = { + ["atomic-bomb"] = true + }, + }, + }, + ignore_permisison = "bypass-nukeprotect", -- @setting ignore_permisison The permission that nukeprotect will ignore + ignore_admins = true, -- @setting ignore_admins Ignore admins, true by default. Allows usage outside of the roles module +} diff --git a/docs/addons/Advanced-Start.html b/docs/addons/Advanced-Start.html index eaa1f69a..da405ff5 100644 --- a/docs/addons/Advanced-Start.html +++ b/docs/addons/Advanced-Start.html @@ -56,8 +56,11 @@ + + + @@ -168,6 +171,7 @@ + @@ -348,7 +352,7 @@ generated by LDoc diff --git a/docs/addons/Chat-Popups.html b/docs/addons/Chat-Popups.html index bbd7fbde..5f06a92c 100644 --- a/docs/addons/Chat-Popups.html +++ b/docs/addons/Chat-Popups.html @@ -56,8 +56,11 @@ + + + @@ -168,6 +171,7 @@ + @@ -377,7 +381,7 @@ generated by LDoc diff --git a/docs/addons/Chat-Reply.html b/docs/addons/Chat-Reply.html index 1870fb39..9f14d2c9 100644 --- a/docs/addons/Chat-Reply.html +++ b/docs/addons/Chat-Reply.html @@ -56,8 +56,11 @@ + + + @@ -168,6 +171,7 @@ + @@ -376,7 +380,7 @@ generated by LDoc diff --git a/docs/addons/Compilatron.html b/docs/addons/Compilatron.html index 85298376..b5d19feb 100644 --- a/docs/addons/Compilatron.html +++ b/docs/addons/Compilatron.html @@ -57,8 +57,11 @@ + + + @@ -169,6 +172,7 @@ + @@ -585,7 +589,7 @@ generated by LDoc diff --git a/docs/addons/Damage-Popups.html b/docs/addons/Damage-Popups.html index 602cb920..4f53aef6 100644 --- a/docs/addons/Damage-Popups.html +++ b/docs/addons/Damage-Popups.html @@ -56,8 +56,11 @@ + + + @@ -168,6 +171,7 @@ + @@ -377,7 +381,7 @@ generated by LDoc diff --git a/docs/addons/Death-Logger.html b/docs/addons/Death-Logger.html index 0a63fa2a..ff3778be 100644 --- a/docs/addons/Death-Logger.html +++ b/docs/addons/Death-Logger.html @@ -56,8 +56,11 @@ + + + @@ -168,6 +171,7 @@ + @@ -404,7 +408,7 @@ generated by LDoc diff --git a/docs/addons/Deconlog.html b/docs/addons/Deconlog.html new file mode 100644 index 00000000..43b902ee --- /dev/null +++ b/docs/addons/Deconlog.html @@ -0,0 +1,388 @@ + + + + + + + + Deconlog addon + + + + + + + +
+
+ + + + + + + +
+ + + + + + + + +

Deconlog addon

+

Log certain actions into a file when events are triggered

+

+ + + + + + + + + + + + + +

Dependencies

+ + + + + + + + + + + + + +
utils.event
expcore.roles
config.deconlog
+ + +
+ + +

Dependencies

+
+
+
+
+ # + utils.event +
+
+
+
+ + + + + + + + + + + + + + + +
+
+
+
+ # + expcore.roles +
+
+
+
+ + + + + + + + + + + + + + + +
+
+
+
+ # + config.deconlog +
+
+
+
+ + + + + + + + + + + + + + + +
+
+ + + +
+
+
+ + + + diff --git a/docs/addons/Discord-Alerts.html b/docs/addons/Discord-Alerts.html index 7c71b71e..f8cc8f9c 100644 --- a/docs/addons/Discord-Alerts.html +++ b/docs/addons/Discord-Alerts.html @@ -56,8 +56,11 @@ + + + @@ -168,6 +171,7 @@ + @@ -488,7 +492,7 @@ generated by LDoc diff --git a/docs/addons/FAGC.html b/docs/addons/FAGC.html new file mode 100644 index 00000000..af99c768 --- /dev/null +++ b/docs/addons/FAGC.html @@ -0,0 +1,332 @@ + + + + + + + + FAGC addon + + + + + + + +
+
+ + + + + + + +
+ + + + + + + + +

FAGC addon

+

Allows the FAGC clientside bot to receive information about bans and unbans and propagate that information to other servers

+

+ + + + + + + + + + + + + +

Dependencies

+ + + + + + + +
utils.event
+ + +
+ + +

Dependencies

+
+
+
+
+ # + utils.event +
+
+
+
+ + + + + + + + + + + + + + + +
+
+ + + +
+
+
+ + + + diff --git a/docs/addons/Inventory-Clear.html b/docs/addons/Inventory-Clear.html index ccec21b2..6a11093b 100644 --- a/docs/addons/Inventory-Clear.html +++ b/docs/addons/Inventory-Clear.html @@ -56,8 +56,11 @@ + + + @@ -168,6 +171,7 @@ + @@ -376,7 +380,7 @@ generated by LDoc diff --git a/docs/addons/Nukeprotect.html b/docs/addons/Nukeprotect.html new file mode 100644 index 00000000..c5400f1f --- /dev/null +++ b/docs/addons/Nukeprotect.html @@ -0,0 +1,416 @@ + + + + + + + + Nukeprotect addon + + + + + + + +
+
+ + + + + + + +
+ + + + + + + + +

Nukeprotect addon

+

Disable new players from having certain items in their inventory, most commonly nukes

+

+ + + + + + + + + + + + + +

Dependencies

+ + + + + + + + + + + + + + + + +
utils.event
expcore.roles
config.nukeprotect
expcore.common
+ + +
+ + +

Dependencies

+
+
+
+
+ # + utils.event +
+
+
+
+ + + + + + + + + + + + + + + +
+
+
+
+ # + expcore.roles +
+
+
+
+ + + + + + + + + + + + + + + +
+
+
+
+ # + config.nukeprotect +
+
+
+
+ + + + + + + + + + + + + + + +
+
+
+
+ # + expcore.common +
+
+
+
+ + + + + + + + + + + + + + + +
+
+ + + +
+
+
+ + + + diff --git a/docs/addons/Pollution-Grading.html b/docs/addons/Pollution-Grading.html index 30685094..d67ed24e 100644 --- a/docs/addons/Pollution-Grading.html +++ b/docs/addons/Pollution-Grading.html @@ -56,8 +56,11 @@ + + + @@ -168,6 +171,7 @@ + @@ -348,7 +352,7 @@ generated by LDoc diff --git a/docs/addons/Scorched-Earth.html b/docs/addons/Scorched-Earth.html index 3da0e120..2d85d262 100644 --- a/docs/addons/Scorched-Earth.html +++ b/docs/addons/Scorched-Earth.html @@ -56,8 +56,11 @@ + + + @@ -168,6 +171,7 @@ + @@ -404,7 +408,7 @@ generated by LDoc diff --git a/docs/addons/Spawn-Area.html b/docs/addons/Spawn-Area.html index cbbbdba1..4eb2c0ba 100644 --- a/docs/addons/Spawn-Area.html +++ b/docs/addons/Spawn-Area.html @@ -56,8 +56,11 @@ + + + @@ -168,6 +171,7 @@ + @@ -376,7 +380,7 @@ generated by LDoc diff --git a/docs/addons/Tree-Decon.html b/docs/addons/Tree-Decon.html index 385d4754..370b420f 100644 --- a/docs/addons/Tree-Decon.html +++ b/docs/addons/Tree-Decon.html @@ -56,8 +56,11 @@ + + + @@ -168,6 +171,7 @@ + @@ -277,6 +281,12 @@ expcore.roles + + expcore.gui + + + expcore.player_data + @@ -354,6 +364,56 @@ + + + + + + + +
+
+
+ # + expcore.gui +
+
+
+
+ + + + + + + + + + + + + + + +
+
+
+
+ # + expcore.player_data +
+
+
+
+ + + + + + + + + @@ -376,7 +436,7 @@ generated by LDoc
diff --git a/docs/addons/afk-kick.html b/docs/addons/afk-kick.html index 8166621d..aed499cc 100644 --- a/docs/addons/afk-kick.html +++ b/docs/addons/afk-kick.html @@ -56,8 +56,11 @@ + + + @@ -168,6 +171,7 @@ + @@ -404,7 +408,7 @@ generated by LDoc diff --git a/docs/addons/protection-jail.html b/docs/addons/protection-jail.html index 48dbbf9a..a62123a8 100644 --- a/docs/addons/protection-jail.html +++ b/docs/addons/protection-jail.html @@ -56,8 +56,11 @@ + + + @@ -168,6 +171,7 @@ + @@ -432,7 +436,7 @@ generated by LDoc diff --git a/docs/addons/report-jail.html b/docs/addons/report-jail.html index ce48219a..38b1921e 100644 --- a/docs/addons/report-jail.html +++ b/docs/addons/report-jail.html @@ -56,8 +56,11 @@ + + + @@ -168,6 +171,7 @@ + @@ -404,7 +408,7 @@ generated by LDoc diff --git a/docs/commands/Admin-Chat.html b/docs/commands/Admin-Chat.html index 0f27a9d7..8a4491e4 100644 --- a/docs/commands/Admin-Chat.html +++ b/docs/commands/Admin-Chat.html @@ -120,8 +120,11 @@ + + + @@ -169,6 +172,7 @@ + @@ -416,7 +420,7 @@ generated by LDoc diff --git a/docs/commands/Admin-Markers.html b/docs/commands/Admin-Markers.html index 0d44318d..6f837fee 100644 --- a/docs/commands/Admin-Markers.html +++ b/docs/commands/Admin-Markers.html @@ -120,8 +120,11 @@ + + + @@ -169,6 +172,7 @@ + @@ -421,7 +425,7 @@ generated by LDoc diff --git a/docs/commands/Cheat-Mode.html b/docs/commands/Cheat-Mode.html index d68f8db1..6c7dd8bf 100644 --- a/docs/commands/Cheat-Mode.html +++ b/docs/commands/Cheat-Mode.html @@ -120,8 +120,11 @@ + + + @@ -169,6 +172,7 @@ + @@ -389,7 +393,7 @@ generated by LDoc diff --git a/docs/commands/Clear-Inventory.html b/docs/commands/Clear-Inventory.html index 738f7e62..1d672646 100644 --- a/docs/commands/Clear-Inventory.html +++ b/docs/commands/Clear-Inventory.html @@ -120,8 +120,11 @@ + + + @@ -169,6 +172,7 @@ + @@ -416,7 +420,7 @@ generated by LDoc diff --git a/docs/commands/Connect.html b/docs/commands/Connect.html index be3cfd5d..f2a89ef4 100644 --- a/docs/commands/Connect.html +++ b/docs/commands/Connect.html @@ -120,8 +120,11 @@ + + + @@ -169,6 +172,7 @@ + @@ -619,7 +623,7 @@ generated by LDoc diff --git a/docs/commands/Debug.html b/docs/commands/Debug.html index 372d84ff..aa70dd21 100644 --- a/docs/commands/Debug.html +++ b/docs/commands/Debug.html @@ -120,8 +120,11 @@ + + + @@ -169,6 +172,7 @@ + @@ -393,7 +397,7 @@ generated by LDoc diff --git a/docs/commands/Find.html b/docs/commands/Find.html index 8c025525..58629c7b 100644 --- a/docs/commands/Find.html +++ b/docs/commands/Find.html @@ -120,8 +120,11 @@ + + + @@ -169,6 +172,7 @@ + @@ -388,7 +392,7 @@ generated by LDoc diff --git a/docs/commands/Help.html b/docs/commands/Help.html index 48d0f5a5..461cb168 100644 --- a/docs/commands/Help.html +++ b/docs/commands/Help.html @@ -120,8 +120,11 @@ + + + @@ -169,6 +172,7 @@ + @@ -432,7 +436,7 @@ generated by LDoc diff --git a/docs/commands/Home.html b/docs/commands/Home.html index df7c3433..b867e822 100644 --- a/docs/commands/Home.html +++ b/docs/commands/Home.html @@ -120,8 +120,11 @@ + + + @@ -169,6 +172,7 @@ + @@ -486,7 +490,7 @@ generated by LDoc diff --git a/docs/commands/Interface.html b/docs/commands/Interface.html index 2ead05cd..94b4ab94 100644 --- a/docs/commands/Interface.html +++ b/docs/commands/Interface.html @@ -120,8 +120,11 @@ + + + @@ -169,6 +172,7 @@ + @@ -416,7 +420,7 @@ generated by LDoc diff --git a/docs/commands/InventorySearch.html b/docs/commands/InventorySearch.html index 91fc7713..5f0a6d72 100644 --- a/docs/commands/InventorySearch.html +++ b/docs/commands/InventorySearch.html @@ -120,8 +120,11 @@ + + + @@ -169,6 +172,7 @@ + @@ -606,7 +610,7 @@ generated by LDoc diff --git a/docs/commands/Jail.html b/docs/commands/Jail.html index 38b19a15..58ca1d8a 100644 --- a/docs/commands/Jail.html +++ b/docs/commands/Jail.html @@ -120,8 +120,11 @@ + + + @@ -169,6 +172,7 @@ + @@ -515,7 +519,7 @@ generated by LDoc diff --git a/docs/commands/Kill.html b/docs/commands/Kill.html index c4481352..a56aa1b2 100644 --- a/docs/commands/Kill.html +++ b/docs/commands/Kill.html @@ -120,8 +120,11 @@ + + + @@ -169,6 +172,7 @@ + @@ -417,7 +421,7 @@ generated by LDoc diff --git a/docs/commands/LastLocation.html b/docs/commands/LastLocation.html index f7278a0e..ed329f1c 100644 --- a/docs/commands/LastLocation.html +++ b/docs/commands/LastLocation.html @@ -120,8 +120,11 @@ + + + @@ -169,6 +172,7 @@ + @@ -416,7 +420,7 @@ generated by LDoc diff --git a/docs/commands/Me.html b/docs/commands/Me.html index 6a64ca7a..071b27ba 100644 --- a/docs/commands/Me.html +++ b/docs/commands/Me.html @@ -120,8 +120,11 @@ + + + @@ -169,6 +172,7 @@ + @@ -388,7 +392,7 @@ generated by LDoc diff --git a/docs/commands/Protection.html b/docs/commands/Protection.html index 1337c08d..4f862f5a 100644 --- a/docs/commands/Protection.html +++ b/docs/commands/Protection.html @@ -120,8 +120,11 @@ + + + @@ -169,6 +172,7 @@ + @@ -564,7 +568,7 @@ generated by LDoc diff --git a/docs/commands/Rainbow.html b/docs/commands/Rainbow.html index 6f940c36..610ea94b 100644 --- a/docs/commands/Rainbow.html +++ b/docs/commands/Rainbow.html @@ -120,8 +120,11 @@ + + + @@ -169,6 +172,7 @@ + @@ -416,7 +420,7 @@ generated by LDoc diff --git a/docs/commands/Repair.html b/docs/commands/Repair.html index e30a7425..a2769d0b 100644 --- a/docs/commands/Repair.html +++ b/docs/commands/Repair.html @@ -119,8 +119,11 @@ + + + @@ -168,6 +171,7 @@ + @@ -349,7 +353,7 @@ generated by LDoc diff --git a/docs/commands/Reports.html b/docs/commands/Reports.html index 427f70e9..2c22a2d9 100644 --- a/docs/commands/Reports.html +++ b/docs/commands/Reports.html @@ -120,8 +120,11 @@ + + + @@ -169,6 +172,7 @@ + @@ -613,7 +617,7 @@ generated by LDoc diff --git a/docs/commands/Roles.html b/docs/commands/Roles.html index c4fc2a1a..fbd94415 100644 --- a/docs/commands/Roles.html +++ b/docs/commands/Roles.html @@ -120,8 +120,11 @@ + + + @@ -169,6 +172,7 @@ + @@ -585,7 +589,7 @@ generated by LDoc diff --git a/docs/commands/Spawn.html b/docs/commands/Spawn.html index a8a7f128..a5e159cb 100644 --- a/docs/commands/Spawn.html +++ b/docs/commands/Spawn.html @@ -120,8 +120,11 @@ + + + @@ -169,6 +172,7 @@ + @@ -417,7 +421,7 @@ generated by LDoc diff --git a/docs/commands/Spectate.html b/docs/commands/Spectate.html index 521007cb..f2605b81 100644 --- a/docs/commands/Spectate.html +++ b/docs/commands/Spectate.html @@ -120,8 +120,11 @@ + + + @@ -169,6 +172,7 @@ + @@ -447,7 +451,7 @@ generated by LDoc diff --git a/docs/commands/Teleport.html b/docs/commands/Teleport.html index bcac895d..2c572b2d 100644 --- a/docs/commands/Teleport.html +++ b/docs/commands/Teleport.html @@ -120,8 +120,11 @@ + + + @@ -169,6 +172,7 @@ + @@ -512,7 +516,7 @@ generated by LDoc diff --git a/docs/commands/Warnings.html b/docs/commands/Warnings.html index f3f0b53e..d0112162 100644 --- a/docs/commands/Warnings.html +++ b/docs/commands/Warnings.html @@ -120,8 +120,11 @@ + + + @@ -169,6 +172,7 @@ + @@ -597,7 +601,7 @@ generated by LDoc diff --git a/docs/configs/Advanced-Start.html b/docs/configs/Advanced-Start.html index ba719a1e..0c8dd57c 100644 --- a/docs/configs/Advanced-Start.html +++ b/docs/configs/Advanced-Start.html @@ -55,6 +55,7 @@ + @@ -126,8 +127,11 @@ + + + @@ -534,7 +538,7 @@ generated by LDoc diff --git a/docs/configs/Autofill.html b/docs/configs/Autofill.html index f1544643..588a7b24 100644 --- a/docs/configs/Autofill.html +++ b/docs/configs/Autofill.html @@ -47,6 +47,7 @@ + @@ -118,8 +119,11 @@ + + + @@ -265,7 +269,7 @@ generated by LDoc diff --git a/docs/configs/Bonuses.html b/docs/configs/Bonuses.html index 327043f7..150f12c4 100644 --- a/docs/configs/Bonuses.html +++ b/docs/configs/Bonuses.html @@ -47,6 +47,7 @@ + @@ -118,8 +119,11 @@ + + + @@ -265,7 +269,7 @@ generated by LDoc diff --git a/docs/configs/Chat-Reply.html b/docs/configs/Chat-Reply.html index 8b791627..fc48525c 100644 --- a/docs/configs/Chat-Reply.html +++ b/docs/configs/Chat-Reply.html @@ -56,6 +56,7 @@ + @@ -127,8 +128,11 @@ + + + @@ -513,7 +517,7 @@ generated by LDoc diff --git a/docs/configs/Commands-Auth-Admin.html b/docs/configs/Commands-Auth-Admin.html index 9d46f5ef..bed00ccb 100644 --- a/docs/configs/Commands-Auth-Admin.html +++ b/docs/configs/Commands-Auth-Admin.html @@ -55,6 +55,7 @@ + @@ -126,8 +127,11 @@ + + + @@ -322,7 +326,7 @@ generated by LDoc diff --git a/docs/configs/Commands-Auth-Roles.html b/docs/configs/Commands-Auth-Roles.html index 540edd78..4acbc10f 100644 --- a/docs/configs/Commands-Auth-Roles.html +++ b/docs/configs/Commands-Auth-Roles.html @@ -55,6 +55,7 @@ + @@ -126,8 +127,11 @@ + + + @@ -348,7 +352,7 @@ generated by LDoc diff --git a/docs/configs/Commands-Auth-Runtime-Disable.html b/docs/configs/Commands-Auth-Runtime-Disable.html index 87e02ee0..5d3d3afe 100644 --- a/docs/configs/Commands-Auth-Runtime-Disable.html +++ b/docs/configs/Commands-Auth-Runtime-Disable.html @@ -56,6 +56,7 @@ + @@ -127,8 +128,11 @@ + + + @@ -470,7 +474,7 @@ generated by LDoc diff --git a/docs/configs/Commands-Color-Parse.html b/docs/configs/Commands-Color-Parse.html index a073af1d..3bdc5423 100644 --- a/docs/configs/Commands-Color-Parse.html +++ b/docs/configs/Commands-Color-Parse.html @@ -55,6 +55,7 @@ + @@ -126,8 +127,11 @@ + + + @@ -348,7 +352,7 @@ generated by LDoc diff --git a/docs/configs/Commands-Parse-Roles.html b/docs/configs/Commands-Parse-Roles.html index 3aabc43f..267d60e1 100644 --- a/docs/configs/Commands-Parse-Roles.html +++ b/docs/configs/Commands-Parse-Roles.html @@ -55,6 +55,7 @@ + @@ -126,8 +127,11 @@ + + + @@ -382,7 +386,7 @@ generated by LDoc diff --git a/docs/configs/Commands-Parse.html b/docs/configs/Commands-Parse.html index 523252b5..1a0bf6cf 100644 --- a/docs/configs/Commands-Parse.html +++ b/docs/configs/Commands-Parse.html @@ -55,6 +55,7 @@ + @@ -126,8 +127,11 @@ + + + @@ -338,7 +342,7 @@ see ./expcore/commands.lua for more details

generated by LDoc diff --git a/docs/configs/Compilatron.html b/docs/configs/Compilatron.html index 4621b79b..34ccc78b 100644 --- a/docs/configs/Compilatron.html +++ b/docs/configs/Compilatron.html @@ -55,6 +55,7 @@ + @@ -126,8 +127,11 @@ + + + @@ -382,7 +386,7 @@ generated by LDoc diff --git a/docs/configs/Death-Logger.html b/docs/configs/Death-Logger.html index 577ffe91..fd759b2d 100644 --- a/docs/configs/Death-Logger.html +++ b/docs/configs/Death-Logger.html @@ -55,6 +55,7 @@ + @@ -126,8 +127,11 @@ + + + @@ -504,7 +508,7 @@ generated by LDoc diff --git a/docs/configs/Deconlog.html b/docs/configs/Deconlog.html new file mode 100644 index 00000000..ef91e593 --- /dev/null +++ b/docs/configs/Deconlog.html @@ -0,0 +1,484 @@ + + + + + + + + Deconlog config + + + + + + + +
+
+ + + + + + + +
+ + + + + + + + +

Deconlog config

+

This config controls whether actions such as deconning by players without sufficient permissions is logged or not

+

+ + + + + + + + + + + + + +

Settings

+ + + + + + + + + + + + + + + + + + + + + + +
decon_area
built_entity
mined_entity
fired_nuke
fired_nuke
fired_nuke
+ + +
+ + +

Settings

+
+
+
+
+ # + decon_area +
+
+
+
+ +

+

whether to log when an area is being deconstructed

+ + + + + + + + + + + + + + +
+
+
+
+ # + built_entity +
+
+
+
+ +

+

whether to log when an entity is built

+ + + + + + + + + + + + + + +
+
+
+
+ # + mined_entity +
+
+
+
+ +

+

whether to log when an entity is mined

+ + + + + + + + + + + + + + +
+
+
+
+ # + fired_nuke +
+
+
+
+ +

+

whether to log when a rocket is fired

+ + + + + + + + + + + + + + +
+
+
+
+ # + fired_nuke +
+
+
+
+ +

+

whether to log when a explosive rocket is fired

+ + + + + + + + + + + + + + +
+
+
+
+ # + fired_nuke +
+
+
+
+ +

+

whether to log when a nuke is fired

+ + + + + + + + + + + + + + +
+
+ + + +
+
+
+ + + + diff --git a/docs/configs/Discord-Alerts.html b/docs/configs/Discord-Alerts.html index 6cdc7719..ba8669c1 100644 --- a/docs/configs/Discord-Alerts.html +++ b/docs/configs/Discord-Alerts.html @@ -47,6 +47,7 @@ + @@ -118,8 +119,11 @@ + + + @@ -265,7 +269,7 @@ generated by LDoc diff --git a/docs/configs/File-Loader.html b/docs/configs/File-Loader.html index 5362ae20..51d1ab4a 100644 --- a/docs/configs/File-Loader.html +++ b/docs/configs/File-Loader.html @@ -47,6 +47,7 @@ + @@ -118,8 +119,11 @@ + + + @@ -268,7 +272,7 @@ generated by LDoc diff --git a/docs/configs/Permission-Groups.html b/docs/configs/Permission-Groups.html index 51ab4a7d..d67ab2fe 100644 --- a/docs/configs/Permission-Groups.html +++ b/docs/configs/Permission-Groups.html @@ -55,6 +55,7 @@ + @@ -126,8 +127,11 @@ + + + @@ -323,7 +327,7 @@ generated by LDoc diff --git a/docs/configs/Player-List.html b/docs/configs/Player-List.html index a3aa7ae4..b46abd97 100644 --- a/docs/configs/Player-List.html +++ b/docs/configs/Player-List.html @@ -56,6 +56,7 @@ + @@ -127,8 +128,11 @@ + + + @@ -722,7 +726,7 @@ generated by LDoc diff --git a/docs/configs/Pollution-Grading.html b/docs/configs/Pollution-Grading.html index 02dae974..193f2b04 100644 --- a/docs/configs/Pollution-Grading.html +++ b/docs/configs/Pollution-Grading.html @@ -55,6 +55,7 @@ + @@ -126,8 +127,11 @@ + + + @@ -412,7 +416,7 @@ generated by LDoc diff --git a/docs/configs/Popup-Messages.html b/docs/configs/Popup-Messages.html index f70d9b21..c6c6afad 100644 --- a/docs/configs/Popup-Messages.html +++ b/docs/configs/Popup-Messages.html @@ -55,6 +55,7 @@ + @@ -126,8 +127,11 @@ + + + @@ -442,7 +446,7 @@ generated by LDoc diff --git a/docs/configs/Preset-Player-Colours.html b/docs/configs/Preset-Player-Colours.html index ed4ddf67..20a9bbf1 100644 --- a/docs/configs/Preset-Player-Colours.html +++ b/docs/configs/Preset-Player-Colours.html @@ -55,6 +55,7 @@ + @@ -126,8 +127,11 @@ + + + @@ -352,7 +356,7 @@ generated by LDoc diff --git a/docs/configs/Preset-Player-Quickbar.html b/docs/configs/Preset-Player-Quickbar.html index 283e1ce7..7b6da2aa 100644 --- a/docs/configs/Preset-Player-Quickbar.html +++ b/docs/configs/Preset-Player-Quickbar.html @@ -47,6 +47,7 @@ + @@ -118,8 +119,11 @@ + + + @@ -265,7 +269,7 @@ generated by LDoc diff --git a/docs/configs/Repair.html b/docs/configs/Repair.html index da08932f..086b3971 100644 --- a/docs/configs/Repair.html +++ b/docs/configs/Repair.html @@ -55,6 +55,7 @@ + @@ -126,8 +127,11 @@ + + + @@ -442,7 +446,7 @@ generated by LDoc diff --git a/docs/configs/Rockets.html b/docs/configs/Rockets.html index 5813fc40..5e16f168 100644 --- a/docs/configs/Rockets.html +++ b/docs/configs/Rockets.html @@ -55,6 +55,7 @@ + @@ -126,8 +127,11 @@ + + + @@ -862,7 +866,7 @@ generated by LDoc diff --git a/docs/configs/Roles.html b/docs/configs/Roles.html index 47ce1156..9f48ddab 100644 --- a/docs/configs/Roles.html +++ b/docs/configs/Roles.html @@ -55,6 +55,7 @@ + @@ -126,8 +127,11 @@ + + + @@ -348,7 +352,7 @@ generated by LDoc diff --git a/docs/configs/Science.html b/docs/configs/Science.html index aaa7028e..fa0502b5 100644 --- a/docs/configs/Science.html +++ b/docs/configs/Science.html @@ -55,6 +55,7 @@ + @@ -126,8 +127,11 @@ + + + @@ -382,7 +386,7 @@ generated by LDoc diff --git a/docs/configs/Scorched-Earth.html b/docs/configs/Scorched-Earth.html index b1b8321c..16049ea8 100644 --- a/docs/configs/Scorched-Earth.html +++ b/docs/configs/Scorched-Earth.html @@ -55,6 +55,7 @@ + @@ -126,8 +127,11 @@ + + + @@ -416,7 +420,7 @@ generated by LDoc diff --git a/docs/configs/Spawn-Area.html b/docs/configs/Spawn-Area.html index 57b79c94..bc61a676 100644 --- a/docs/configs/Spawn-Area.html +++ b/docs/configs/Spawn-Area.html @@ -55,6 +55,7 @@ + @@ -126,8 +127,11 @@ + + + @@ -1223,7 +1227,7 @@ generated by LDoc diff --git a/docs/configs/Statistics.html b/docs/configs/Statistics.html index b885b0cf..0a3ec1c7 100644 --- a/docs/configs/Statistics.html +++ b/docs/configs/Statistics.html @@ -55,6 +55,7 @@ + @@ -126,8 +127,11 @@ + + + @@ -682,7 +686,7 @@ generated by LDoc diff --git a/docs/configs/Tasks.html b/docs/configs/Tasks.html index 2b0be78c..1ba3f956 100644 --- a/docs/configs/Tasks.html +++ b/docs/configs/Tasks.html @@ -55,6 +55,7 @@ + @@ -126,8 +127,11 @@ + + + @@ -412,7 +416,7 @@ generated by LDoc diff --git a/docs/configs/Warnings.html b/docs/configs/Warnings.html index 0c9dcf06..be5c9247 100644 --- a/docs/configs/Warnings.html +++ b/docs/configs/Warnings.html @@ -55,6 +55,7 @@ + @@ -126,8 +127,11 @@ + + + @@ -383,7 +387,7 @@ generated by LDoc diff --git a/docs/configs/Warps.html b/docs/configs/Warps.html index 22afb90a..364702b8 100644 --- a/docs/configs/Warps.html +++ b/docs/configs/Warps.html @@ -55,6 +55,7 @@ + @@ -126,8 +127,11 @@ + + + @@ -772,7 +776,7 @@ generated by LDoc diff --git a/docs/configs/inventory_clear.html b/docs/configs/inventory_clear.html index 4e7912d6..4b911591 100644 --- a/docs/configs/inventory_clear.html +++ b/docs/configs/inventory_clear.html @@ -47,6 +47,7 @@ + @@ -118,8 +119,11 @@ + + + @@ -265,7 +269,7 @@ generated by LDoc diff --git a/docs/control/Jail.html b/docs/control/Jail.html index 662c83a8..5aecbd76 100644 --- a/docs/control/Jail.html +++ b/docs/control/Jail.html @@ -90,8 +90,11 @@ + + + @@ -170,6 +173,7 @@ + @@ -803,7 +807,7 @@ generated by LDoc diff --git a/docs/control/Production.html b/docs/control/Production.html index f65a298c..8e9808bb 100644 --- a/docs/control/Production.html +++ b/docs/control/Production.html @@ -91,8 +91,11 @@ + + + @@ -171,6 +174,7 @@ + @@ -1357,7 +1361,7 @@ generated by LDoc diff --git a/docs/control/Protection.html b/docs/control/Protection.html index 7a2aa367..f5321795 100644 --- a/docs/control/Protection.html +++ b/docs/control/Protection.html @@ -90,8 +90,11 @@ + + + @@ -170,6 +173,7 @@ + @@ -1029,7 +1033,7 @@ generated by LDoc diff --git a/docs/control/Reports.html b/docs/control/Reports.html index 9ef164d0..e4a26db9 100644 --- a/docs/control/Reports.html +++ b/docs/control/Reports.html @@ -91,8 +91,11 @@ + + + @@ -171,6 +174,7 @@ + @@ -1170,7 +1174,7 @@ generated by LDoc diff --git a/docs/control/Rockets.html b/docs/control/Rockets.html index 5e3882e8..57ad9dc5 100644 --- a/docs/control/Rockets.html +++ b/docs/control/Rockets.html @@ -90,8 +90,11 @@ + + + @@ -170,6 +173,7 @@ + @@ -1012,7 +1016,7 @@ generated by LDoc diff --git a/docs/control/Selection.html b/docs/control/Selection.html index 61a84b63..455ae478 100644 --- a/docs/control/Selection.html +++ b/docs/control/Selection.html @@ -90,8 +90,11 @@ + + + @@ -170,6 +173,7 @@ + @@ -919,7 +923,7 @@ generated by LDoc diff --git a/docs/control/Tasks.html b/docs/control/Tasks.html index e5d7ae8c..8c1c47ea 100644 --- a/docs/control/Tasks.html +++ b/docs/control/Tasks.html @@ -90,8 +90,11 @@ + + + @@ -170,6 +173,7 @@ + @@ -1013,7 +1017,7 @@ Tasks.update_task(task_id, 'We need more iron!', gam generated by LDoc diff --git a/docs/control/Warnings.html b/docs/control/Warnings.html index 52bd7736..d93dfcd5 100644 --- a/docs/control/Warnings.html +++ b/docs/control/Warnings.html @@ -90,8 +90,11 @@ + + + @@ -170,6 +173,7 @@ + @@ -1553,7 +1557,7 @@ generated by LDoc diff --git a/docs/control/Warps.html b/docs/control/Warps.html index 0e3aeb55..de6029af 100644 --- a/docs/control/Warps.html +++ b/docs/control/Warps.html @@ -91,8 +91,11 @@ + + + @@ -171,6 +174,7 @@ + @@ -1535,7 +1539,7 @@ Warps.make_warp_tag(warp_id) generated by LDoc diff --git a/docs/core/Async.html b/docs/core/Async.html index ef413dca..2d179a9a 100644 --- a/docs/core/Async.html +++ b/docs/core/Async.html @@ -89,8 +89,11 @@ + + + @@ -169,6 +172,7 @@ + @@ -626,7 +630,7 @@ Async.register(function(player, message) generated by LDoc diff --git a/docs/core/Commands.html b/docs/core/Commands.html index 7037015d..ac17026f 100644 --- a/docs/core/Commands.html +++ b/docs/core/Commands.html @@ -95,8 +95,11 @@ + + + @@ -175,6 +178,7 @@ + @@ -2441,7 +2445,7 @@ nb: use error(error_message) within your callback to trigger do not trigger dire generated by LDoc diff --git a/docs/core/Common.html b/docs/core/Common.html index 9658dbfc..afc62b6f 100644 --- a/docs/core/Common.html +++ b/docs/core/Common.html @@ -92,8 +92,11 @@ + + + @@ -172,6 +175,7 @@ + @@ -283,9 +287,6 @@ utils.game - - util - @@ -421,8 +422,14 @@ - - + + + + + + @@ -484,31 +491,6 @@ - - - - - - - -
-
-
- # - util -
-
-
-
- - - - - - - - - @@ -2449,14 +2431,15 @@
- # - move_items(items[, surface=navies][, position={0][, radius=32][, chest_type=iron-chest]) + # + copy_items_stack(items[, surface=navies][, position={0][, radius=32][, chest_type=iron-chest])
-

Moves items to the position and stores them in the closest entity of the type given

+

Copies items to the position and stores them in the closest entity of the type given +-- Copies the items by prototype name, but keeps them in the original inventory

@@ -2476,7 +2459,136 @@ (table) - items which are to be added to the chests, ['name']=count + items which are to be added to the chests, an array of LuaItemStack + + + + + + + +
  • + + surface + + : + + (LuaSurface) + + the surface that the items will be copied to + + (default: navies) +
  • + + + + + +
  • + + position + + : + + (table) + + the position that the items will be copied to {x=100, y=100} + + (default: {0) +
  • + + + + + +
  • + + radius + + : + + (number) + + the radius in which the items are allowed to be placed + + (default: 32) +
  • + + + + + +
  • + + chest_type + + : + + (string) + + the chest type that the items should be copied into + + (default: iron-chest) +
  • + + + + + + + + Returns: +
      +
    • + (LuaEntity) + the last chest that had items inserted into it +
    • +
    + + + + + + + + Usage: +
    -- Copy all the items in a players inventory and place them in chests at {0, 0}
    +copy_items_stack(game.player.get_main_inventory().get_contents())
    + + +
    +
    +
    +
    + # + move_items_stack(items[, surface=navies][, position={0][, radius=32][, chest_type=iron-chest]) +
    +
    +
    +
    + +

    Moves items to the position and stores them in the closest entity of the type given +-- Differs from move_items by accepting a table of LuaItemStack and transferring them into the inventory - not copying

    +

    + + + Parameters: + +
      + + + + + +
    • + + items + + : + + (table) + + items which are to be added to the chests, an array of LuaItemStack
    • @@ -2570,7 +2682,7 @@ Usage:
      -- Copy all the items in a players inventory and place them in chests at {0, 0}
      -move_items(game.player.get_main_inventory().get_contents())
      +move_items_stack(game.player.get_main_inventory())
    @@ -2780,7 +2892,7 @@ https://github.com/Refactorio/RedMew/blob/9184b2940f311d8c9c891e83429fc57ec7e0c4 generated by LDoc diff --git a/docs/core/Datastore.html b/docs/core/Datastore.html index 882df70a..79601228 100644 --- a/docs/core/Datastore.html +++ b/docs/core/Datastore.html @@ -94,8 +94,11 @@ + + + @@ -174,6 +177,7 @@ + @@ -2977,7 +2981,7 @@ ExampleData:on_update(function(key, value) generated by LDoc diff --git a/docs/core/External.html b/docs/core/External.html index d62b22e7..3622816d 100644 --- a/docs/core/External.html +++ b/docs/core/External.html @@ -88,8 +88,11 @@ + + + @@ -168,6 +171,7 @@ + @@ -761,7 +765,7 @@ generated by LDoc diff --git a/docs/core/Groups.html b/docs/core/Groups.html index 2e48c8f9..aaffc7a8 100644 --- a/docs/core/Groups.html +++ b/docs/core/Groups.html @@ -92,8 +92,11 @@ + + + @@ -172,6 +175,7 @@ + @@ -1456,7 +1460,7 @@ generated by LDoc diff --git a/docs/core/Gui.html b/docs/core/Gui.html index 6d325610..3d124a79 100644 --- a/docs/core/Gui.html +++ b/docs/core/Gui.html @@ -97,8 +97,11 @@ + + + @@ -177,6 +180,7 @@ + @@ -4434,7 +4438,7 @@ Gui.left_toolbar_button('entity/inserter', generated by LDoc diff --git a/docs/core/PlayerData.html b/docs/core/PlayerData.html index 3f628c7c..43400919 100644 --- a/docs/core/PlayerData.html +++ b/docs/core/PlayerData.html @@ -89,8 +89,11 @@ + + + @@ -169,6 +172,7 @@ + @@ -544,7 +548,7 @@ generated by LDoc diff --git a/docs/core/Roles.html b/docs/core/Roles.html index 5799836b..c1d9cdea 100644 --- a/docs/core/Roles.html +++ b/docs/core/Roles.html @@ -96,8 +96,11 @@ + + + @@ -176,6 +179,7 @@ + @@ -3404,7 +3408,7 @@ nb: this is one way, failing false after already gaining the role will not revok generated by LDoc diff --git a/docs/data/Alt-View.html b/docs/data/Alt-View.html index f374bb9b..4b2fcc9d 100644 --- a/docs/data/Alt-View.html +++ b/docs/data/Alt-View.html @@ -101,8 +101,11 @@ + + + @@ -168,6 +171,7 @@ + @@ -348,7 +352,7 @@ generated by LDoc diff --git a/docs/data/Bonus.html b/docs/data/Bonus.html index 062d599c..9c4aad72 100644 --- a/docs/data/Bonus.html +++ b/docs/data/Bonus.html @@ -102,8 +102,11 @@ + + + @@ -169,6 +172,7 @@ + @@ -500,7 +504,7 @@ generated by LDoc diff --git a/docs/data/Greetings.html b/docs/data/Greetings.html index fa3a9d0c..919f2e29 100644 --- a/docs/data/Greetings.html +++ b/docs/data/Greetings.html @@ -102,8 +102,11 @@ + + + @@ -169,6 +172,7 @@ + @@ -443,7 +447,7 @@ generated by LDoc diff --git a/docs/data/Player-Colours.html b/docs/data/Player-Colours.html index 55d0521a..5f785e92 100644 --- a/docs/data/Player-Colours.html +++ b/docs/data/Player-Colours.html @@ -101,8 +101,11 @@ + + + @@ -168,6 +171,7 @@ + @@ -404,7 +408,7 @@ generated by LDoc diff --git a/docs/data/Quickbar.html b/docs/data/Quickbar.html index 9611b402..f7e345f4 100644 --- a/docs/data/Quickbar.html +++ b/docs/data/Quickbar.html @@ -102,8 +102,11 @@ + + + @@ -169,6 +172,7 @@ + @@ -421,7 +425,7 @@ generated by LDoc diff --git a/docs/data/Tag.html b/docs/data/Tag.html index a1b00a19..2473b724 100644 --- a/docs/data/Tag.html +++ b/docs/data/Tag.html @@ -102,8 +102,11 @@ + + + @@ -169,6 +172,7 @@ + @@ -553,7 +557,7 @@ generated by LDoc diff --git a/docs/guis/Autofill.html b/docs/guis/Autofill.html index 510177d5..68d0e22f 100644 --- a/docs/guis/Autofill.html +++ b/docs/guis/Autofill.html @@ -103,8 +103,11 @@ + + + @@ -168,6 +171,7 @@ + @@ -605,7 +609,7 @@ generated by LDoc diff --git a/docs/guis/Player-List.html b/docs/guis/Player-List.html index d10d67d5..a976d1d5 100644 --- a/docs/guis/Player-List.html +++ b/docs/guis/Player-List.html @@ -104,8 +104,11 @@ + + + @@ -169,6 +172,7 @@ + @@ -719,7 +723,7 @@ generated by LDoc diff --git a/docs/guis/Readme.html b/docs/guis/Readme.html index ec8c908e..49b7f603 100644 --- a/docs/guis/Readme.html +++ b/docs/guis/Readme.html @@ -106,8 +106,11 @@ + + + @@ -171,6 +174,7 @@ + @@ -1011,7 +1015,7 @@ generated by LDoc diff --git a/docs/guis/Rocket-Info.html b/docs/guis/Rocket-Info.html index 99d4b07f..3897a19d 100644 --- a/docs/guis/Rocket-Info.html +++ b/docs/guis/Rocket-Info.html @@ -104,8 +104,11 @@ + + + @@ -169,6 +172,7 @@ + @@ -719,7 +723,7 @@ generated by LDoc diff --git a/docs/guis/Science-Info.html b/docs/guis/Science-Info.html index 22245738..47bef742 100644 --- a/docs/guis/Science-Info.html +++ b/docs/guis/Science-Info.html @@ -104,8 +104,11 @@ + + + @@ -169,6 +172,7 @@ + @@ -598,7 +602,7 @@ generated by LDoc diff --git a/docs/guis/Task-List.html b/docs/guis/Task-List.html index 6e93746f..f71ab47d 100644 --- a/docs/guis/Task-List.html +++ b/docs/guis/Task-List.html @@ -104,8 +104,11 @@ + + + @@ -169,6 +172,7 @@ + @@ -1122,7 +1126,7 @@ generated by LDoc diff --git a/docs/guis/Warps-List.html b/docs/guis/Warps-List.html index 1c919cfe..8a4b5cf0 100644 --- a/docs/guis/Warps-List.html +++ b/docs/guis/Warps-List.html @@ -105,8 +105,11 @@ + + + @@ -170,6 +173,7 @@ + @@ -1088,7 +1092,7 @@ generated by LDoc diff --git a/docs/guis/server-ups.html b/docs/guis/server-ups.html index b3d9d2c1..91d8636e 100644 --- a/docs/guis/server-ups.html +++ b/docs/guis/server-ups.html @@ -105,8 +105,11 @@ + + + @@ -170,6 +173,7 @@ + @@ -521,7 +525,7 @@ generated by LDoc diff --git a/docs/index.html b/docs/index.html index bbc1f3c8..59eeed60 100644 --- a/docs/index.html +++ b/docs/index.html @@ -171,14 +171,26 @@ + + + + + + + + + + + + @@ -429,6 +441,10 @@ + + + + @@ -610,7 +626,7 @@ Events.set_event_filter(defines.events.on_built_entity, {{filter = "name", name generated by LDoc diff --git a/docs/modules/control.html b/docs/modules/control.html index 86af035b..6222f5dd 100644 --- a/docs/modules/control.html +++ b/docs/modules/control.html @@ -95,8 +95,11 @@ + + + @@ -175,6 +178,7 @@ + @@ -268,7 +272,7 @@ generated by LDoc diff --git a/docs/modules/modules.addons.station-auto-name.html b/docs/modules/modules.addons.station-auto-name.html index af0bfa48..cb18451f 100644 --- a/docs/modules/modules.addons.station-auto-name.html +++ b/docs/modules/modules.addons.station-auto-name.html @@ -103,8 +103,11 @@ + + + @@ -183,6 +186,7 @@ + @@ -321,7 +325,7 @@ Events.set_event_filter(defines.events.on_built_entity, {{filter = "name", name generated by LDoc diff --git a/docs/modules/overrides.debug.html b/docs/modules/overrides.debug.html index 6ca4f3b6..c8921753 100644 --- a/docs/modules/overrides.debug.html +++ b/docs/modules/overrides.debug.html @@ -103,8 +103,11 @@ + + + @@ -183,6 +186,7 @@ + @@ -682,7 +686,7 @@ generated by LDoc diff --git a/docs/modules/overrides.math.html b/docs/modules/overrides.math.html index 4cafb848..bb5f5ff1 100644 --- a/docs/modules/overrides.math.html +++ b/docs/modules/overrides.math.html @@ -103,8 +103,11 @@ + + + @@ -183,6 +186,7 @@ + @@ -381,7 +385,7 @@ generated by LDoc diff --git a/docs/modules/overrides.table.html b/docs/modules/overrides.table.html index 288285e0..4b355c9a 100644 --- a/docs/modules/overrides.table.html +++ b/docs/modules/overrides.table.html @@ -105,8 +105,11 @@ + + + @@ -185,6 +188,7 @@ + @@ -2036,7 +2040,7 @@ generated by LDoc diff --git a/docs/modules/utils.event.html b/docs/modules/utils.event.html index 30a897ec..99141aad 100644 --- a/docs/modules/utils.event.html +++ b/docs/modules/utils.event.html @@ -104,8 +104,11 @@ + + + @@ -184,6 +187,7 @@ + @@ -1320,7 +1324,7 @@ generated by LDoc diff --git a/docs/modules/utils.event_core.html b/docs/modules/utils.event_core.html index 8b3c86b2..1bc275c7 100644 --- a/docs/modules/utils.event_core.html +++ b/docs/modules/utils.event_core.html @@ -103,8 +103,11 @@ + + + @@ -183,6 +186,7 @@ + @@ -462,7 +466,7 @@ generated by LDoc diff --git a/docs/modules/utils.task.html b/docs/modules/utils.task.html index f57d3076..104ce3a5 100644 --- a/docs/modules/utils.task.html +++ b/docs/modules/utils.task.html @@ -104,8 +104,11 @@ + + + @@ -184,6 +187,7 @@ + @@ -679,7 +683,7 @@ generated by LDoc diff --git a/docs/topics/LICENSE.html b/docs/topics/LICENSE.html index 853e049d..7b74e986 100644 --- a/docs/topics/LICENSE.html +++ b/docs/topics/LICENSE.html @@ -89,8 +89,11 @@ + + + @@ -169,6 +172,7 @@ + @@ -817,7 +821,7 @@ Public License instead of this License. But first, please read generated by LDoc diff --git a/docs/topics/README.md.html b/docs/topics/README.md.html index 71e3386f..0fd38750 100644 --- a/docs/topics/README.md.html +++ b/docs/topics/README.md.html @@ -89,8 +89,11 @@ + + + @@ -169,6 +172,7 @@ + @@ -256,20 +260,20 @@

    ExpGaming Scenario Repository

    ## Explosive Gaming -

    Explosive Gaming (often ExpGaming) is a server hosting community with a strong focus on [Factorio](factorio) and games with similar themes. We are best known for our weekly reset Factorio server with a vanilla+ scenario. Although our servers tend to attract the more experienced players, our servers are open to everyone. You can find us through our [website], [discord], or the public server list with the name ExpGaming. +

    Explosive Gaming (often ExpGaming) is a server hosting community with a strong focus on [Factorio][factorio] and games with similar themes. We are best known for our weekly reset Factorio server with a vanilla+ scenario. Although our servers tend to attract the more experienced players, our servers are open to everyone. You can find us through our [website], [discord], or the public server list with the name ExpGaming.

    ## Use and Installation -

    1) Download our [git repository](stable-dl) for the stable release. For the latest features you can download our [dev branch](experimental-dl). See [releases](#releases) for other major releases. +

    1) Download our [git repository][stable-dl] for the stable release. For the latest features you can download our [dev branch][experimental-dl]. See [releases](#releases) for other major releases.

    2) Extract the downloaded zip file into your Factorio scenario directory: * Windows: `%appdata%\Factorio\scenarios` * Linux: `~/.factorio/scenarios`

    3) Within the scenario you can find `./config/_file_loader.lua` which contains a list of all the modules which will be loaded by the scenario. Comment out (or remove) features you do not want. Be aware modules may load other modules as dependencies even when removed from the list.

    4) More advanced users can adjust other configs files within `./config` but please be aware some files will require a basic understanding of lua.

    5) Once you have made your config changes: open Factorio, select either single or multiplayer, select (host) new game, and finally select our scenario which will be called `scenario-master` or `scenario-dev` under user scenarios. -

    6) You will now be asked to generate your map and the scenario will load all selected modules. If any module does not load as expected please check `factorio-current.log` in your Factorio directory for errors and report them to our [issues page](issues). +

    6) You will now be asked to generate your map and the scenario will load all selected modules. If any module does not load as expected please check `factorio-current.log` in your Factorio directory for errors and report them to our [issues page][issues].

    ## Contributing

    All are welcome to make bug reports, feature requests, and pull requests for our scenario. We do not require you to have any lua or coding knowledge to make bug reports and feature requests. If you have any questions ask us in our [discord].

    For developers wanting to add features please follow these guidelines: -

    * All code is documented using ldoc, the end result can be found [here](docs). +

    * All code is documented using ldoc, the end result can be found [here][docs]. * Changes should be made on your own fork and merged into `dev` through a pull request. * Pull requests are automatically linted and documentation checked. * Pull requests are manually reviewed to maintain code and language quality. @@ -297,7 +301,7 @@ | [2.0][s2.0] | Localization and clean up | [0.15][f0.15] | | [1.0][s1.0] | Modulation | [0.15][f0.15] | | [0.1][s0.1] | First Tracked Version | [0.14][f0.14] | -

    \* Scenario patch releases have been omitted and can be found [here](https://github.com/explosivegaming/scenario/releases). +

    \* Scenario patch releases have been omitted and can be found [here][releases].

    \*\* Factorio versions show the version they were made for, often the minimum requirement to run the scenario.

    [s6.2]: https://github.com/explosivegaming/scenario/releases/tag/6.2.0 [s6.1]: https://github.com/explosivegaming/scenario/releases/tag/6.1.0 @@ -340,8 +344,9 @@

    The Explosive Gaming codebase is licensed under the [GNU General Public License v3.0](LICENSE)

    [stable-dl]: https://github.com/explosivegaming/scenario/archive/master.zip [experimental-dl]: https://github.com/explosivegaming/scenario/archive/dev.zip -[factorio]: https://factorio.com/ -[docs]: https://explosivegaming.github.io/scenario/ +[releases]: https://github.com/explosivegaming/scenario/releases +[factorio]: https://factorio.com +[docs]: https://explosivegaming.github.io/scenario [issues]: https://github.com/explosivegaming/scenario/issues/new/choose [website]: https://explosivegaming.nl [discord]: https://discord.explosivegaming.nl @@ -377,7 +382,7 @@ generated by LDoc

    diff --git a/expcore/common.lua b/expcore/common.lua index 64886316..4cabdef4 100644 --- a/expcore/common.lua +++ b/expcore/common.lua @@ -6,7 +6,6 @@ local Colours = require 'utils.color_presets' --- @dep utils.color_presets local Game = require 'utils.game' --- @dep utils.game -local Util = require 'util' --- @dep util local Common = {} @@ -538,8 +537,70 @@ end --- Factorio. -- @section factorio +--[[-- Copies items to the position and stores them in the closest entity of the type given +-- Copies the items by prototype name, but keeps them in the original inventory +@tparam table items items which are to be added to the chests, an array of LuaItemStack +@tparam[opt=navies] LuaSurface surface the surface that the items will be copied to +@tparam[opt={0, 0}] table position the position that the items will be copied to {x=100, y=100} +@tparam[opt=32] number radius the radius in which the items are allowed to be placed +@tparam[opt=iron-chest] string chest_type the chest type that the items should be copied into +@treturn LuaEntity the last chest that had items inserted into it + +@usage-- Copy all the items in a players inventory and place them in chests at {0, 0} +copy_items_stack(game.player.get_main_inventory().get_contents()) + +]] +function Common.copy_items_stack(items, surface, position, radius, chest_type) + chest_type = chest_type or 'iron-chest' + surface = surface or game.surfaces[1] + if position and type(position) ~= 'table' then return end + if type(items) ~= 'table' then return end + -- Finds all entities of the given type + local p = position or {x=0, y=0} + local r = radius or 32 + local entities = surface.find_entities_filtered{area={{p.x-r, p.y-r}, {p.x+r, p.y+r}}, name=chest_type} or {} + local count = #entities + local current = 1 + -- Makes a new empty chest when it is needed + local function make_new_chest() + local pos = surface.find_non_colliding_position(chest_type, position, 32, 1) + local chest = surface.create_entity{name=chest_type, position=pos, force='neutral'} + table.insert(entities, chest) + count = count + 1 + return chest + end + -- Function used to round robin the items into all chests + local function next_chest(item) + local chest = entities[current] + if count == 0 then return make_new_chest() end + if chest.get_inventory(defines.inventory.chest).can_insert(item) then + -- If the item can be inserted then the chest is returned + current = current+1 + if current > count then current = 1 end + return chest + else + -- Other wise it is removed from the list + table.remove(entities, current) + count = count - 1 + end + end + -- Inserts the items into the chests + local last_chest + for i=1,#items do + local item = items[i] + if item.valid_for_read then + local chest = next_chest(item) + if not chest or not chest.valid then return error(string.format('Cant move item %s to %s{%s, %s} no valid chest in radius', item.name, surface.name, p.x, p.y)) end + chest.insert(item) + last_chest = chest + end + end + return last_chest +end + --[[-- Moves items to the position and stores them in the closest entity of the type given -@tparam table items items which are to be added to the chests, ['name']=count +-- Differs from move_items by accepting a table of LuaItemStack and transferring them into the inventory - not copying +@tparam table items items which are to be added to the chests, an array of LuaItemStack @tparam[opt=navies] LuaSurface surface the surface that the items will be moved to @tparam[opt={0, 0}] table position the position that the items will be moved to {x=100, y=100} @tparam[opt=32] number radius the radius in which the items are allowed to be placed @@ -547,52 +608,57 @@ end @treturn LuaEntity the last chest that had items inserted into it @usage-- Copy all the items in a players inventory and place them in chests at {0, 0} -move_items(game.player.get_main_inventory().get_contents()) +move_items_stack(game.player.get_main_inventory()) ]] -function Common.move_items(items, surface, position, radius, chest_type) - chest_type = chest_type or 'iron-chest' - surface = surface or game.surfaces[1] - if position and type(position) ~= 'table' then return end - if type(items) ~= 'table' then return end - -- Finds all entities of the given type - local p = position or {x=0, y=0} - local r = radius or 32 - local entities = surface.find_entities_filtered{area={{p.x-r, p.y-r}, {p.x+r, p.y+r}}, name=chest_type} or {} - local count = #entities - local current = 1 - -- Makes a new empty chest when it is needed - local function make_new_chest() - local pos = surface.find_non_colliding_position(chest_type, position, 32, 1) - local chest = surface.create_entity{name=chest_type, position=pos, force='neutral'} - table.insert(entities, chest) - count = count + 1 - return chest - end - -- Function used to round robin the items into all chests - local function next_chest(item) - local chest = entities[current] - if count == 0 then return make_new_chest() end - if chest.get_inventory(defines.inventory.chest).can_insert(item) then - -- If the item can be inserted then the chest is returned - current = current+1 - if current > count then current = 1 end - return chest - else - -- Other wise it is removed from the list - table.remove(entities, current) - count = count - 1 - end - end - -- Inserts the items into the chests - local last_chest - for item_name, item_count in pairs(items) do - local chest = next_chest{name=item_name, count=item_count} - if not chest then return error(string.format('Cant move item %s to %s{%s, %s} no valid chest in radius', item_name, surface.name, p.x, p.y)) end - Util.insert_safe(chest, {[item_name]=item_count}) - last_chest = chest - end - return last_chest +function Common.move_items_stack(items, surface, position, radius, chest_type) + chest_type = chest_type or 'iron-chest' + surface = surface or game.surfaces[1] + if position and type(position) ~= 'table' then return end + if type(items) ~= 'table' then return end + -- Finds all entities of the given type + local p = position or {x=0, y=0} + local r = radius or 32 + local entities = surface.find_entities_filtered{area={{p.x-r, p.y-r}, {p.x+r, p.y+r}}, name=chest_type} or {} + local count = #entities + local current = 1 + -- Makes a new empty chest when it is needed + local function make_new_chest() + local pos = surface.find_non_colliding_position(chest_type, position, 32, 1) + local chest = surface.create_entity{name=chest_type, position=pos, force='neutral'} + table.insert(entities, chest) + count = count + 1 + return chest + end + -- Function used to round robin the items into all chests + local function next_chest(item) + local chest = entities[current] + if count == 0 then return make_new_chest() end + if chest.get_inventory(defines.inventory.chest).can_insert(item) then + -- If the item can be inserted then the chest is returned + current = current+1 + if current > count then current = 1 end + return chest + else + -- Other wise it is removed from the list + table.remove(entities, current) + count = count - 1 + end + end + -- Inserts the items into the chests + local last_chest + for i=1,#items do + local item = items[i] + if item.valid_for_read then + local chest = next_chest(item) + if not chest or not chest.valid then return error(string.format('Cant move item %s to %s{%s, %s} no valid chest in radius', item.name, surface.name, p.x, p.y)) end + local empty_stack = chest.get_inventory(defines.inventory.chest).find_empty_stack(item.name) + if not empty_stack then return error(string.format('Cant move item %s to %s{%s, %s} no valid chest in radius', item.name, surface.name, p.x, p.y)) end + empty_stack.transfer_stack(item) + last_chest = chest + end + end + return last_chest end --[[-- Prints a colored value on a location, color is based on the value. diff --git a/expcore/roles.lua b/expcore/roles.lua index 2028cd23..b895897b 100644 --- a/expcore/roles.lua +++ b/expcore/roles.lua @@ -117,14 +117,15 @@ local Colours = require 'utils.color_presets' --- @dep utils.color_presets local write_json = _C.write_json --- @dep expcore.common local Roles = { - _prototype={}, - config={ - order = {}, -- Contains the order of the roles, lower index is better - roles = {}, -- Contains the raw info for the roles, indexed by role name - flags = {}, -- Contains functions that run when a flag is added/removed from a player - internal = {}, -- Contains all internally accessed roles, such as root, default - players = {}, -- Contains the roles that players have - auto_assign = {} -- Contains references to all roles which have auto assign conditions + _prototype = {}, + config = { + order = {}, -- Contains the order of the roles, lower index is better + roles = {}, -- Contains the raw info for the roles, indexed by role name + flags = {}, -- Contains functions that run when a flag is added/removed from a player + internal = {}, -- Contains all internally accessed roles, such as root, default + players = {}, -- Contains the roles that players have + auto_assign = {}, -- Contains references to all roles which have auto assign conditions + deferred_roles = {}, -- Contains the roles that are to be assigned to players when they are unjailed }, events = { on_role_assigned = script.generate_event_name(), @@ -133,8 +134,9 @@ local Roles = { } --- When global is loaded it will have the metatable re-assigned to the roles -Global.register(Roles.config.players, function(tbl) - Roles.config.players = tbl +Global.register({ Roles.config.players, Roles.config.deferred_roles }, function(tbl) + Roles.config.players = tbl[1] + Roles.config.deferred_roles = tbl[2] end) --- Getter. @@ -145,7 +147,7 @@ end) -- this is the raw internal trigger as the other function is called at other times -- there is a second half called role_update which triggers after the event call, it also is called when a player joins local function emit_player_roles_updated(player, type, roles, by_player_name, skip_game_print) - by_player_name = game.player and game.player.name or by_player_name or '' + by_player_name = by_player_name or game.player and game.player.name or '' local by_player = game.players[by_player_name] local by_player_index = by_player and by_player.index or 0 -- get the event id from the type of emit @@ -153,14 +155,10 @@ local function emit_player_roles_updated(player, type, roles, by_player_name, sk if type == 'unassign' then event = Roles.events.on_role_unassigned end - -- convert the roles to objects and get the names of the roles - local index, role_names = 0, {} - for _, role in ipairs(roles) do - role = Roles.get_role_from_any(role) - if role then - index = index + 1 - role_names[index] = role.name - end + -- Get the names of the roles + local role_names = {} + for index, role in ipairs(roles) do + role_names[index] = role.name end -- output to all the different locations: game print, player sound, event trigger and role log if not skip_game_print then @@ -367,17 +365,46 @@ function Roles.assign_player(player, roles, by_player_name, skip_checks, silent) local valid_player = Game.get_player_from_any(player) if not skip_checks and not valid_player then return end if not player then return end + + -- Convert the roles into a table (allows for optional array) if type(roles) ~= 'table' or roles.name then - roles = {roles} + roles = { roles } end + + -- Convert to role objects + local role_objects = {} for _, role in ipairs(roles) do - role = Roles.get_role_from_any(role) - if role then - role:add_player(valid_player or player, valid_player == nil, true) - end + local role_object = Roles.get_role_from_any(role) + if role_object then table.insert(role_objects, role_object) end end + + -- If the player has a role that needs to defer the role changes, save the roles that need to be assigned later into a table + if valid_player and Roles.player_has_flag(player, "defer_role_changes") then + local assign_later = Roles.config.deferred_roles[valid_player.name] or {} + for _, role in ipairs(role_objects) do + local role_change = assign_later[role.name] + if role_change then + role_change.count = role_change.count + 1 + if role_change.count == 1 then + role_change.by_player_name = by_player_name or "" + role_change.silent = silent + end + else + assign_later[role.name] = { + count = 1, by_player_name = by_player_name or "", silent = silent + } + end + end + Roles.config.deferred_roles[valid_player.name] = assign_later + return + end + + for _, role in ipairs(role_objects) do + role:add_player(valid_player or player, valid_player == nil, true) + end + if valid_player then - emit_player_roles_updated(valid_player, 'assign', roles, by_player_name, silent) + emit_player_roles_updated(valid_player, 'assign', role_objects, by_player_name, silent) end end @@ -399,17 +426,78 @@ function Roles.unassign_player(player, roles, by_player_name, skip_checks, silen local valid_player = Game.get_player_from_any(player) if not skip_checks and not valid_player then return end if not player then return end + + -- Convert the roles into a table (allows for optional array) if type(roles) ~= 'table' or roles.name then - roles = {roles} + roles = { roles } end + + -- Convert to role objects + local role_objects = {} for _, role in ipairs(roles) do - role = Roles.get_role_from_any(role) - if role then + local role_object = Roles.get_role_from_any(role) + if role_object then table.insert(role_objects, role_object) end + end + + -- If the player has a role that needs to defer the role changes, save the roles that need to be unassigned later into a table + local defer_changes = Roles.player_has_flag(player, "defer_role_changes") + if defer_changes then + local assign_later = Roles.config.deferred_roles[valid_player.name] or {} + for _, role in ipairs(role_objects) do + local role_change = assign_later[role.name] + if role_change then + role_change.count = role_change.count - 1 + if role_change.count == -1 then + role_change.by_player_name = by_player_name or "" + role_change.silent = silent + end + else + assign_later[role.name] = { + count = -1, by_player_name = by_player_name or "", silent = silent + } + end + end + Roles.config.deferred_roles[valid_player.name] = assign_later + end + + -- Remove the player from roles + local role_changes = {} + for _, role in ipairs(role_objects) do + if not defer_changes or role:has_flag("defer_role_changes") then role:remove_player(valid_player or player, valid_player == nil, true) + table.insert(role_changes, role) end end - if valid_player then - emit_player_roles_updated(valid_player, 'unassign', roles, by_player_name, silent) + + -- If there are deferred role changes, apply them now + if defer_changes and not Roles.player_has_flag(valid_player, "defer_role_changes") then + local assign_later = Roles.config.deferred_roles[player.name] or {} + local assigns, unassigns = {}, {} + for role_name, details in pairs(assign_later) do + local role = Roles.get_role_from_any(role_name) + if role then + if details.count > 0 then + role:add_player(valid_player or player, valid_player == nil, true) + if not assigns[details.by_player_name] then assigns[details.by_player_name] = {} end + if not details.silent then table.insert(assigns[details.by_player_name], role) end + elseif details.count < 0 then + role:remove_player(valid_player or player, valid_player == nil, true) + if not unassigns[details.by_player_name] then unassigns[details.by_player_name] = {} end + if not details.silent then table.insert(unassigns[details.by_player_name], role) end + end + end + end + for assign_by_player_name, assign_roles in pairs(assigns) do + if #assign_roles > 0 then emit_player_roles_updated(valid_player, 'assign', assign_roles, assign_by_player_name) end + end + for unassign_by_player_name, unassign_roles in pairs(unassigns) do + if #unassign_roles > 0 then emit_player_roles_updated(valid_player, 'unassign', unassign_roles, unassign_by_player_name) end + end + Roles.config.deferred_roles[player.name] = nil + end + + if valid_player and #role_changes > 0 then + emit_player_roles_updated(valid_player, 'unassign', role_changes, by_player_name, silent) end end diff --git a/locale/en/addons.cfg b/locale/en/addons.cfg index 1cac74dc..0bd2c2fa 100644 --- a/locale/en/addons.cfg +++ b/locale/en/addons.cfg @@ -83,3 +83,6 @@ jail=__1__ was jailed because they were reported too many times. Please wait for [protection-jail] jail=__1__ was jailed because they removed too many protected entities. Please wait for a moderator. + +[nukeprotect] +found=You cannot have __1__ in your inventory, so it was placed into the chests at spawn. diff --git a/locale/en/gui.cfg b/locale/en/gui.cfg index 8a822b82..311c19b5 100644 --- a/locale/en/gui.cfg +++ b/locale/en/gui.cfg @@ -162,13 +162,13 @@ servers-tooltip=Links to our other servers and sites servers-general=This is only one of our servers for factorio, we host many of others as well. Below you can find details about all the servers that we host as well as links to our external services such as discord or github. servers-factorio=Factorio Servers servers-1=S1 Public -servers-d1=This is our 48 hour reset experimental server. -servers-2=S2 Public -servers-d2=This is our 48 hour reset stable server. +servers-d1=This is our 48 hour reset server. +servers-2=S2 Off +servers-d2=This server is closed. servers-3=S3 Weekly -servers-d3=This is our weekly reset experimental server. -servers-4=S4 Weekly -servers-d4=This is our weekly reset stable server. +servers-d3=This is our weekly reset server. +servers-4=S4 Monthly +servers-d4=This is our monthly reset server. servers-5=S5 Modded servers-d5=This is our modded server, see discord for details. servers-6=S6 Donator @@ -200,4 +200,10 @@ data-settings=Settings data-statistics=Statistics data-required=Required data-misc=Miscellaneous -data-format=__1____2__ \ No newline at end of file +data-format=__1____2__ + +[tree-decon] +main-tooltip=Toggle fast tree decon +enabled=enabled +disabled=disabled +toggle-msg=Fast decon has been __1__ \ No newline at end of file diff --git a/locale/zh-CN/addons.cfg b/locale/zh-CN/addons.cfg new file mode 100644 index 00000000..73af5418 --- /dev/null +++ b/locale/zh-CN/addons.cfg @@ -0,0 +1,85 @@ +[chat-popup] +message=__1__: __2__ +ping=__1__在信息到提到了你. + +[damage-popup] +player-health=__1__ +player-damage=__1__ + +[links] +discord=https://discord.explosivegaming.nl +website=https://www.explosivegaming.nl +status=https://status.explosivegaming.nl +github=https://github.com/explosivegaming/scenario +patreon=https://www.patreon.com/ExpGaming + +[info] +players-online=現在有 __1__ 人上線 +total-map-time=本地圖時間為 __1__ +discord=加入社群: https://discord.explosivegaming.nl +website=訪問網站: https://www.explosivegaming.nl +status=伺服器狀態: https://status.explosivegaming.nl +github=增加功能或回報錯誤: https://github.com/explosivegaming/scenario +patreon=支持我們: https://www.patreon.com/ExpGaming +custom-commands=自制指令如 /tag 和 /me, 可用 /chelp 查看更多. +read-readme=左上可查看更多 +softmod=這裹用了自設情境 +redmew=;-; +lhd=列車必須是左上右下! + +[warnings] +received=你從 __1__ 中收到了警告. 你現在有 __2__ 個警告. __3__ +pre-kick=這是最後警告 +kick=你已因有太多警告而被請離 +pre-pre-ban=你有可能會被封禁 +pre-ban=這是最後警告 +ban=你已因有太多警告而被封禁; 可以到 __1__ 申訴. +script-warning=這是系統發出的自動警告 (__1__/__2__) +script-warning-removed=系統發出的自動警告已失效 (__1__/__2__) +script-warning-limit=__1__ 已收到系統發出的自動警告 + +[chat-bot] +reply=[Chat Bot] __1__ +disallow=你沒有權限使用這個指令 +players-online=現在有 __1__ 人上線 +players=本地圖現在有 __1__ 人上線 +not-real-dev=Cooldude2606 只是本場境的開發者 +softmod=這裹用了自設情境 +blame=責怪 __1__ 吧 +afk=看看 __1__, 他已掛機: __2__ +current-evolution=現在進化度為 __1__ +magic=Fear the admin magic (ノ゚∀゚)ノ⌒・*:.。. .。.:*・゜゚・*☆ +aids=≖ ‿ ≖ Fear the aids of a public server ≖ ‿ ≖ +riot=(admins) ┬┴┬┴┤ᵒ_ᵒ)├┬┴┬┴ ‹ ‹\(´ω` )/››‹‹\ (  ´)/››‹‹\ ( ´ω`)/›› (rest of server) +loops=不要架設迴旋處 +lenny=( ͡° ͜ʖ ͡°) +hodor=Hodor +get-popcorn-1=Heating the oil and waiting for the popping sound... +get-popcorn-2=__1__ your popcorn is finished. Lean backwards and watch the drama unfold. +get-snaps-1=Pouring the glasses and finding the correct song book... +get-snaps-2=Singing a song...🎤🎶 +get-snaps-3=schkål, my friends! +get-cocktail-1= 🍸 Inintiating mind reading unit... 🍸 +get-cocktail-2= 🍸 Mixing favourite ingredients of __1__ 🍸 +get-cocktail-3=🍸 __1__ your cocktail is done.🍸 +make-coffee-1= ☕ Boiling the water and grinding the coffee beans... ☕ +make-coffee-2= ☕ __1__ we ran out of coffe beans! Have some tea instead. ☕ +order-pizza-1= 🍕 Finding nearest pizza supplier... 🍕 +order-pizza-2= 🍕 Figuring out the favourite pizza of __1__ 🍕 +order-pizza-3= 🍕 __1__ your pizza is here! 🍕 +make-tea-1= ☕ Boiling the water... ☕ +make-tea-2= ☕ __1__ your tea is done! ☕ +get-mead-1= Filling the drinking horn +get-mead-2= Skål! +get-beer-1= 🍺 Pouring A Glass 🍺 +get-beer-2= 🍻 Chears Mate 🍻 +verify=Please return to our discord and type r!verify __1__ + +[afk-kick] +message=因沒有活躍玩家而被請離 + +[report-jail] +jail=__1__ 因被多次舉報而被送監. 請等候管理員. + +[protection-jail] +jail=__1__ 因被多次拆除受保護物體而被送監. 請等候管理員. diff --git a/locale/zh-CN/commands.cfg b/locale/zh-CN/commands.cfg new file mode 100644 index 00000000..19788810 --- /dev/null +++ b/locale/zh-CN/commands.cfg @@ -0,0 +1,112 @@ +[expcom-kill] +already-dead=你已經死了. + +[expcom-admin-chat] +format=[管理員] __1__: __2__ + +[expcom-tp] +no-position-found=沒找到空間傳送. +to-self=沒辦法傳送到自己 + +[expcom-chelp] +title=幫助 "__1__": +footer=[__1__ 結果: 頁 __2__ / __3__] +format=/__1__ __2__ - __3__ __4__ +alias=別名: __1__ +out-of-range=沒有 __1__ 頁. + +[expcom-roles] +higher-role=你所安排的身份組比你目前的還要高. +list=所有身份組: __1__ +list-player=__1__ 有: __2__ +list-element=__1__, __2__ + +[expcom-jail] +give=__1__ 已被 __2__ 因為 __3__ 送監. +remove=__1__ 已被 __2__. +already-jailed=__1__ 已被送監. +not-jailed=__1__ 目前不在監獄. + +[expcom-report] +player-immune=該用戶不能被舉報. +self-report=你不能舉報你自己. +non-admin=__1__ 因 __2__ 而被舉報. +admin=__1__ 因 __3__ 而被 __2__ 舉報. +already-reported=你只可舉報其他用戶一次. +not-reported=該用戶沒被舉報. +player-count-title=該用戶有以下舉報: +player-report-title=__1__ 有以下舉報: +list=__1__: __2__ +removed=__1__ 的舉報各. + +[expcom-warnings] +received=__1__ 因為 __3__ 而被 __2__ 發出了一個警告. +player=__1__ 有 __2__ 個警告和 __3__/__4__ 自動警告. +player-detail=__1__ 因 __2__ 而被警告 +list-title=該用戶警告如下: +list=__1__: __2__ (__3__/__4__) +cleared=__1__ 的警告己被 __2__ 清除. + +[expcom-spawn] +unavailable=現在沒辦法傳送到出生點. + +[expcom-repair] +result=共 __1__ 個建築恢復其中 __2__ 把 HP 回滿. + +[expcom-bonus] +set=你的附加比例現在為 __1__. +wip=本指令是暫時的, 將來可能會被更換. + +[expcom-ratio] +notSelecting=請選擇項目. +item-in=你每秒需要 __1__ 來做 [item=__2__]. +fluid-in=你每秒需要 __1__ 來做 [fluid=__2__]. +item-out=結果: __1__ [item=__2__] 每秒. +fluid-out=結果: __1__ [fluid=__2__] 每秒. +machines=你需要 __1__ 部同速機器. + +[expcom-home] +no-home=你還沒設回程傳送點. +no-return=你還沒用回程. +home-set=你的回程傳送點為 x: __1__ y: __2__ +return-set=你的去程傳送點為 x: __1__ y: __2__ +home-get=你的回程傳送點在 x: __1__ y: __2__ + +[expcom-server-ups] +no-ext=沒找到外置數據, 沒法顯示. + +[expcom-connect] +too-many-matching=該伺服器名稱有多過一個結果: __1__ +wrong-version=該伺服器版本不同: __1__ +same-server=你已連接該伺服器: __1__ +offline=該伺服器不在線: __1__ +none-matching=沒找到伺服器. + +[expcom-lastlocation] +response=__1__ 最後出現在 [gps=__2__,__3__] + +[expcom-protection] +entered-entity-selection=建築保護, 選擇一個建築來保護, 按住 shift 來選擇則可取消. +entered-area-selection=地區保護, 選擇一個地區來保護, 按住 shift 來選擇則可取消. +protected-entities=__1__ 個建築現已受保護. +unprotected-entities=__1__ 個建築現不受保護. +already-protected=本地區已受保護. +protected-area=本地區現已受保護. +unprotected-area=本地區現不受保護. +repeat-offence=__1__ 在 [gps=__3__,__4__] 拆除了 __2__ + +[expcom-spectate] +follow-self=你不能追蹤自己. + +[expcom-admin-marker] +exit=你已離開管理員地圖標記模式, 所有新地圖標記將不受保護. +enter=你已進入管理員地圖標記模式, 所有新地圖標記將受保護. +place=你放了一個管理員地圖標記. +edit=你修改了一個管理員地圖標記. +revert=你沒辦法修改管理員地圖標記. + +[expcom-inv-search] +reject-item=沒找到 __1__; 可試用富文本. +results-heading=以下用戶有 [item=__1__]: +results-item=__1__) __2__ 有 __3__ 個. (__4__) +results-none=沒用戶有 [item=__1__] diff --git a/locale/zh-CN/config.cfg b/locale/zh-CN/config.cfg new file mode 100644 index 00000000..38eb2554 --- /dev/null +++ b/locale/zh-CN/config.cfg @@ -0,0 +1,3 @@ +[command-auth] +admin-only=本指令只限管理員使用! +command-disabled=本指令已被停用! \ No newline at end of file diff --git a/locale/zh-CN/data.cfg b/locale/zh-CN/data.cfg new file mode 100644 index 00000000..36bcdce5 --- /dev/null +++ b/locale/zh-CN/data.cfg @@ -0,0 +1,87 @@ +[join-message] +greet=[color=0,1,0] 歡迎來到 EXP 的伺服器! 若果你喜歡本伺服器可加入 DISCORD: __1__ [/color] +message-set=你的加入信息已更新 +message-cleared=你的加入信息已清除 + +[quickbar] +saved=你的工具列已儲存 + +[exp-required] +Warnings=警告 +Warnings-tooltip=你所有收到的警告 +Warnings-value-tooltip=你所有收到的警告 +[exp-settings] +Colour=顏色 +Colour-tooltip=你的人物顏色 +Colour-value-tooltip=使用 /color 來更換你的人物顏色 +JoinMessage=加入信息 +JoinMessage-tooltip=你加入時所顯示的信息 +JoinMessage-value-tooltip=使用 /join-message 來更換加入信息 +QuickbarFilters=快捷欄 +QuickbarFilters-tooltip=快捷欄的選項 +QuickbarFilters-value-tooltip=使用 /save-quickbar 來更換快捷欄的選項 +UsesAlt=細節模式 +UsesAlt-tooltip=你加入時是否使用細節模式 +UsesAlt-value-tooltip=按下 __CONTROL__show-info__ 來更改 +UsesServerUps=伺服更新數 (UPS) +UsesServerUps-tooltip=現在是否顯示 伺服更新數 (UPS) +UsesServerUps-value-tooltip=使用 /server-ups 來更換顯示 +Tag=你的人物標籤 +Tag-tooltip=你的人物標籤 +Tag-value-tooltip=使用 /tag 來更換你的人物標籤 +TagColor=人物標籤顏色 +TagColor-tooltip=你的人物標籤顏色 +TagColor-value-tooltip=使用 /tag-color 來更換你的人物標籤顏色 +Bonus=人物附加屬性 +Bonus-tooltip=你的人物附加屬性 +Bonus-value-tooltip=使用 /bonus 來更改 + +[exp-statistics] +MapsPlayed=地圖遊玩次數 +MapsPlayed-tooltip=你在本伺服器遊玩過的地圖數 +JoinCount=登入次數 +JoinCount-tooltip=你在本伺服器遊玩的次數 +Playtime=遊玩時間 +Playtime-tooltip=你在本伺服器遊玩的時間 +AfkTime=掛機時間 +AfkTime-tooltip=你在本伺服器掛機的時間 +ChatMessages=傳送信息次數 +ChatMessages-tooltip=你在本伺服器發送信息的次數 +CommandsUsed=使用指令次數 +CommandsUsed-tooltip=你在本伺服器使用指令的次數 +RocketsLaunched=火箭發射次數 +RocketsLaunched-tooltip=你在本伺服器在線時所發射過火箭的次數 +ResearchCompleted=研究次數 +ResearchCompleted-tooltip=你在本伺服器在線時完成研究的次數 +MachinesBuilt=機器建造次數 +MachinesBuilt-tooltip=你在本伺服器建造過機器的次數 +MachinesRemoved=機器拆除次數 +MachinesRemoved-tooltip=你在本伺服器拆除過機器的次數 +TilesBuilt=地磚建造次數 +TilesBuilt-tooltip=你在本伺服器建造過地磚的次數 +TilesRemoved=地磚拆除次數 +TilesRemoved-tooltip=你在本伺服器拆除過地磚的次數 +TreesDestroyed=樹木拆除次數 +TreesDestroyed-tooltip=你在本伺服器拆除過樹木的次數 +OreMined=挖礦次數 +OreMined-tooltip=你在本伺服器挖掘礦的次數 +ItemsCrafted=物品合成數 +ItemsCrafted-tooltip=你在本伺服器合成過物品的次數 +ItemsPickedUp=物品拾起數 +ItemsPickedUp-tooltip=你在本伺服器起過物品的次數 +Kills=撃殺數 +Kills-tooltip=你在本伺服器殺過的敵人數量 +Deaths=死亡次數 +Deaths-tooltip=你在本伺服器死過的數量 +DamageDealt=傷害量 +DamageDealt-tooltip=你在本伺服器對敵人所造成的傷害量 +DistanceTravelled=移動距離 +DistanceTravelled-tooltip=你在本伺服器的總移動距離 +CapsulesUsed=膠囊使用次數 +CapsulesUsed-tooltip=你在本伺服器使用過膠囊的次數 +EntityRepaired=機器維修次數 +EntityRepaired-tooltip=你在本伺服器維修過機器的次數 +DeconstructionPlannerUsed=拆除規劃器使用次數 +DeconstructionPlannerUsed-tooltip=你在本伺服器使用過拆除規劃器的次數 +MapTagsMade=地圖標籤數量 +MapTagsMade-tooltip=你在本伺服器放過的地圖標籤數量 \ No newline at end of file diff --git a/locale/zh-CN/expcore.cfg b/locale/zh-CN/expcore.cfg new file mode 100644 index 00000000..0f8e0705 --- /dev/null +++ b/locale/zh-CN/expcore.cfg @@ -0,0 +1,53 @@ +time-symbol-days-short=__1__d +color-tag=[color=__1__]__2__[/color] + +[time-format] +simple-format-tagged=__1__ __2__ +simple-format-div=__1__:__2__ + +[expcore-commands] +unauthorized=你沒有權限運行該項目 +reject-string-options=無效的選項. 要在: __1__ +reject-string-max-length=無效的長度, 最長: __1__ +reject-number=無效的數值. +reject-number-range=無效的範圍. 最少 (包括): __1__, 最大 (包括): __2__ +reject-player=無效的用戶名稱, __1__ , 可以用 TAB 鍵來自動完成 +reject-player-online=用戶不在線. +reject-player-alive=用戶已死亡. +reject-force=無效的勢力. +reject-surface=無效的表面. +reject-color=無效的顏色. +invalid-inputs=無效的輸入, /__1__ __2__ +invalid-param=無效的參數 "__1__"; __2__ +command-help=__1__ - __2__ +command-ran=指令運行完成 +command-fail=指令運行失敗 failed to run: __1__ +command-error-log-format=[ERROR] command/__1__ :: __2__ + +[expcore-roles] +error-log-format-flag=[ERROR] roleFlag/__1__ :: __2__ +error-log-format-assign=[ERROR] rolePromote/__1__ :: __2__ +game-message-assign=__1__ 已被 __3__ 指派到身分組 __2__ +game-message-unassign=__1__ 已被 __3__ 取消指派到身分組 __2__ +reject-role=無效的身分組. +reject-player-role=用戶已有更高的身分組. + +[gui_util] +button_tooltip=是否顯示工具欄. + +[expcore-gui] +left-button-tooltip=關閉所有打開的視窗. + +[expcore-data] +set-preference=你的喜好已設定為 __1__. 在你重新加入前將不會有任何改動. +get-preference=你的喜好為 __1__. 使用 /set-preference 來更改. 使用 /save-data 來獲得一份資料副本. +get-data=你的個人資料已寫入: factorio/script_output/expgaming_player_data.json +data-failed=無法載入你的個人資料. 任何改動將不會保存. +data-restore=已載入你的個人資料. 改動將會被保存. +preference=儲存喜好 +preference-tooltip=那種資料將在退出時保存 +preference-value-tooltip=使用 /set-preference 來更換儲存喜好 +preference-All=所有資料都會被儲存 +preference-Statistics=只有數據, 設定和資料會被儲存 +preference-Settings=只有設定和資料會被儲存 +preference-Required=只有需要的資料會被儲存 \ No newline at end of file diff --git a/locale/zh-CN/gui.cfg b/locale/zh-CN/gui.cfg new file mode 100644 index 00000000..86904c88 --- /dev/null +++ b/locale/zh-CN/gui.cfg @@ -0,0 +1,209 @@ +[player-list] +main-tooltip=用戶名單 +open-action-bar=選項 +close-action-bar=關閉選項 +reason-confirm=確認原因 +reason-entry=輸入原因 +goto-player=傳送到用戶 +bring-player=傳送用戶到自己 +report-player=舉報用戶 +warn-player=警告用戶 +jail-player=監禁用戶 +kick-player=踢用戶 +ban-player=封禁用戶 +afk-time=__1__% 地圖時間\n上次移動: __2__ +open-map=__1__ __2__\n__3__\n按下打開地圖 + +[rocket-info] +main-tooltip=火箭資訊 +launch-tooltip=發射火箭 +launch-tooltip-disabled=發射火箭 (未準備) +toggle-rocket-tooltip=取消自動發射 +toggle-rocket-tooltip-disabled=啟用自動發射 +toggle-section-tooltip=擴張欄 +toggle-section-collapse-tooltip=收縮欄 +section-caption-stats=數據 +section-tooltip-stats=火箭發射數據 +section-caption-milestones=里程碑 +section-tooltip-milestones=里程碑達成次數 +section-caption-progress=建造程度 +section-tooltip-progress=火箭建造程度 +progress-no-silos=你沒有火箭發射井 +data-caption-first-launch=首次發射 +data-tooltip-first-launch=首次發射時間 +data-caption-last-launch=最後發射 +data-tooltip-last-launch=最後發射時間 +data-caption-fastest-launch=最快發射 +data-tooltip-fastest-launch=最快發射時間 +data-caption-total-rockets=總發射次數 +data-tooltip-total-rockets=我方總發射次數 +value-tooltip-total-rockets=__1__% 的火箭發射都在本地圖上. +data-caption-avg-launch=平均時間 +data-tooltip-avg-launch=火箭發射平均時間 +data-caption-avg-launch-n=平均時間 __1__ +data-tooltip-avg-launch-n=__1__ 次火箭發射的平均時間 +data-caption-milestone-n=里程碑 __1__ +data-tooltip-milestone-n=__1__ 次火箭發射的時間 +data-caption-milestone-next=N/A +data-tooltip-milestone-next=未達成 +progress-x-pos=X __1__ +progress-y-pos=Y __1__ +progress-label-tooltip=在地圖上看 +progress-launched=已發射 +progress-caption=__1__ % +progress-tooltip=該火箭發射井發射了 __1__ 次 +launch-failed=火箭發射失敗, 請過一會再試. + +[science-info] +main-caption=研究瓶 +main-tooltip=研究資訊 +eta-caption=預計時間: +eta-tooltip=餘下研究所需時間 +eta-time=T- __1__ +unit=__1__ 瓶分鐘 +pos-tooltip=製造: __1__ +neg-tooltip=使用: __1__ +net-tooltip=淨: __1__ +no-packs=你未有製造任何研究瓶 + +[task-list] +main-caption=工作流程 [img=info] +main-tooltip=工作流程 +sub-tooltip=需要完成的工作流程\n- 你可以用富文本來加上圖片 [img=utility/not_enough_repair_packs_icon] 或 [color=blue] 顏色[/color]. +no-tasks=沒有工作流程 +no-tasks-tooltip=按加號加入工作流程 +last-edit=最後由 __1__ 在 __2__ 修改 +add-tooltip=加入工作流程 +confirm=確認 +confirm-tooltip=儲存工作流程 (最少要5個字長) +discard=放棄 +discard-tooltip=放棄更改動 +delete=刪除 +delete-tooltip=刪除工作流程 +close-tooltip=關閉工作流程 +edit=修改工作流程 +edit-tooltip=現被 __1__ 修改中 +edit-tooltip-none=現沒有被人修改 +create-footer-header=加入工作流程 +edit-footer-header=修改工作流程 +view-footer-header=工作流程細節 +[autofill] +main-tooltip=自動填入設定 +toggle-section-caption=__1__ __2__ +toggle-section-tooltip=擴張欄 +toggle-section-collapse-tooltip=收縮欄 +toggle-entity-tooltip=自動填入設定 - __1__ +toggle-tooltip=自動填入設定 - __2__ 的 __1__ +amount-tooltip=自動填入 __1__ 的數量 +invalid=自動填入最大值 __1__ __2__ 給 __3__ +inserted=自動填入 __1__ __2__ 到 __3__ + +[warp-list] +main-caption=傳送陣清單 [img=info] +main-tooltip=傳送陣清單; 需在 __1__ 格之內使用 +sub-tooltip=傳送陣在 __1__ 秒內只能使用一次. 亦需在 __2__ 格之內使用\n__3__\n__4__\n__5__\n__6__\n__7__\n__8__ +sub-tooltip-current= - __1__ 你目前的傳送陣; +sub-tooltip-connected= - __1__ 你可以到本傳送陣; +sub-tooltip-different= - __1__ 該傳送陣未連接; +sub-tooltip-cooldown= - __1__ 傳送冷卻中; +sub-tooltip-not_available= - __1__ 你不在傳送陣範圍; +sub-tooltip-bypass= - __1__ 你可以傳送到這裏; +too-close=無法新建傳送陣; 太接近 __1__ 了 +too-close-to-water=無法新建傳送陣; 太接近水源了, 請移動 __1__ 格又或者填平該地方 +too-close-to-entities=無法新建傳送陣; 太接近其他東西, 請移動 __1__ 格又或者拆除該東西 +last-edit=最後由 __1__ 在 __2__ 更改\n按這在地圖上看 +add-tooltip=新建傳送陣 +confirm-tooltip=儲存更改 +cancel-tooltip=放棄更改 +edit-tooltip=現被 __1__ 修改中 +edit-tooltip-none=現沒有被人修改 +remove-tooltip=拆除傳送陣 +timer-tooltip=請等 __1__ 秒才再次傳送 +timer-tooltip-zero=你要等 __1__ 秒才可以再次傳送 +goto-tooltip=到 X __1__ Y __2__ +goto-bypass=到 X __1__ Y __2__, 繞行模式 +goto-bypass-different-network=到 X __1__ Y __2__, 繞行模式 (不同網絡) +goto-same-warp=你已在該傳送陣 +goto-different-network=該傳送陣未連接, 你可使用電纜連接 +goto-cooldown=傳送冷卻中, 請等候冷卻 +goto-disabled=你不在傳送陣, 請移至任意傳送陣 +goto-edit=修改傳送陣圖案 + +[readme] +main-tooltip=資訊 +welcome-tab=歡迎 +welcome-tooltip=歡迎來到 Explosive Gaming +welcome-general=歡迎來到 Explosive Gaming; 你在這裏的時候要遵守規. 你可以在左上方的介面找到更多資訊. 地圖時間 __2__.\n下次地圖重設: __1__ +welcome-roles=我們有自訂的身份組來保護其他用戶. 所以你有機會不能使用拆除規劃器或掉東西. 身份組給予你各種權限\n你有以下身份組: __1__ +welcome-chat=你可以使用 「重音符/抑音符」 鍵 (ESC 鍵 下方) - 你也可以在選項中修改按鍵.\n你目前設定為 「__CONTROL__toggle-console__」 +rules-tab=規則 +rules-tooltip=伺服器規則 +rules-general=你在本伺服器遊玩即等同同意以下規則. 管理員有機會就相關事項提問. 你可能會因為違反規則而被封禁, 你可以在 Discord 中提出反對. +rules-1=開掛或濫用漏洞將不會被容忍. +rules-2=當你找到漏洞可以通知職員. +rules-3=請在聊天室中尊重其他人. +rules-4=請不要把所有物品全部取走. +rules-5=請不要濫發信息, 大量鋪設地磚, 或不為箱子設置上限, 浪費資源. +rules-6=當你想大量拆除原有設施前請通知其他用戶. +rules-7=請不要無故使用機器人來大量鋪設或拆除地磚, 濫用主動出貨箱. +rules-8=請不要隨意移動來開大量地圖, 這有助減少地圖下載時間. +rules-9=請不要無故使用全圖喇叭. +rules-10=請不要無故轉動傳送帶方向, 停用傳送帶, 或停止生產. +rules-11=請不要用迴旋處. 火車站尾返程則是例外. +rules-12=請跟其他人使用相同的火車組成. 常用的有 1-2-1, 2-4-2, 或 3-8-3, 即1個動車組拖2個貨車組再拖不同方向的1個動車組. +rules-13=火車必須是左上右下 (LHD). +rules-14=禁止要求身份組, 發廣告, 發惡意連結. +rules-15=使用常識, 舉報違規人員, 管理員只有最終決定權. +commands-tab=指令 +commands-tooltip=你可用的指令 +commands-general=這裏有自訂的指令. 你可以在下邊找到你可用的指令及其功能介紹. 你可以用 /search-help 來取得更多資訊. +servers-tab=伺服器 +servers-tooltip=到其他伺服器及網站的連結 +servers-general=這是其中一個伺服器. 你可以在下方找到其他同樣是由我們運行的伺服器資料. +servers-factorio=異星工廠伺服器 +servers-1=S1 公共 +servers-d1=這個伺服器每 兩日 (48小時) 重設. +servers-2=S2 - +servers-d2=這個伺服器沒在營運. +servers-3=S3 周 +servers-d3=這個伺服器每 七日 (168小時) 重設. +servers-4=S4 月 +servers-d4=這個伺服器每 二十八日 (672小時) 重設. +servers-5=S5 模組 +servers-d5=這個伺服器運行模組, 可在 Discord 中得到更多資訊. +servers-6=S6 Donator +servers-d6=這個伺服器為支持者運行, 可在 Discord 中得到更多資訊. +servers-7=S7 項目 +servers-d7=這個伺服器只在有項目期間運行. +servers-8=S8 T̷-̶s̶-̴:̷ +servers-d8=N̵o̴ ̶o̷-̶e̵ ̴k̸n̷-̶w̵s̸ ̴w̷h̷a̶-̶ ̷h̴a̴p̷p̴e̷n̷s̸ ̷o̶n̴ ̷t̶h̴-̶s̶ ̷s̷e̶r̸v̸e̴r̷,̶ ̸i̸t̴ ̷m̶-̸g̴h̶t̷ ̸n̸-̶t̵ ̷e̴v̸e̸n̶t̷ ̵-̷x̴i̵s̶t̸.̸ +servers-connect-Offline=該伺服器目前沒有在運行 +servers-connect-Current=你目前所在的伺服器 +servers-connect-Version=該伺服器運行不同的遊戲版本: __1__ +servers-connect-Password=該伺服器需要密碼 +servers-connect-Modded=該伺服器需要下載模組 +servers-connect-Online=該伺服器在線 +servers-external=外部連結 +servers-open-in-browser=可在你的瀏覽器中打開 +backers-tab=支持者 +backers-tooltip=支持者 +backers-general=他們為伺服器運行提供了不少幫助. +backers-management=系統管理員 +backers-board=議員 +backers-staff=職員 +backers-backers=支持者 +backers-active=活躍玩家 +data-tab=資料 +data-tooltip=所有已存資料 +data-general=資料會自動存到各個服務器中. 你也可以用 /save-data 存一份副本. 也可用 /set-preference 來更改喜好. +data-settings=設定 +data-statistics=數據 +data-required=需要 +data-misc=雜項 +data-format=__1____2__ + +[tree-decon] +main-tooltip=樹木快速拆除選項 +enabled=啟用 +disabled=停用 +toggle-msg=樹木快速拆除已 __1__ \ No newline at end of file diff --git a/locale/zh-TW/addons.cfg b/locale/zh-TW/addons.cfg new file mode 100644 index 00000000..73af5418 --- /dev/null +++ b/locale/zh-TW/addons.cfg @@ -0,0 +1,85 @@ +[chat-popup] +message=__1__: __2__ +ping=__1__在信息到提到了你. + +[damage-popup] +player-health=__1__ +player-damage=__1__ + +[links] +discord=https://discord.explosivegaming.nl +website=https://www.explosivegaming.nl +status=https://status.explosivegaming.nl +github=https://github.com/explosivegaming/scenario +patreon=https://www.patreon.com/ExpGaming + +[info] +players-online=現在有 __1__ 人上線 +total-map-time=本地圖時間為 __1__ +discord=加入社群: https://discord.explosivegaming.nl +website=訪問網站: https://www.explosivegaming.nl +status=伺服器狀態: https://status.explosivegaming.nl +github=增加功能或回報錯誤: https://github.com/explosivegaming/scenario +patreon=支持我們: https://www.patreon.com/ExpGaming +custom-commands=自制指令如 /tag 和 /me, 可用 /chelp 查看更多. +read-readme=左上可查看更多 +softmod=這裹用了自設情境 +redmew=;-; +lhd=列車必須是左上右下! + +[warnings] +received=你從 __1__ 中收到了警告. 你現在有 __2__ 個警告. __3__ +pre-kick=這是最後警告 +kick=你已因有太多警告而被請離 +pre-pre-ban=你有可能會被封禁 +pre-ban=這是最後警告 +ban=你已因有太多警告而被封禁; 可以到 __1__ 申訴. +script-warning=這是系統發出的自動警告 (__1__/__2__) +script-warning-removed=系統發出的自動警告已失效 (__1__/__2__) +script-warning-limit=__1__ 已收到系統發出的自動警告 + +[chat-bot] +reply=[Chat Bot] __1__ +disallow=你沒有權限使用這個指令 +players-online=現在有 __1__ 人上線 +players=本地圖現在有 __1__ 人上線 +not-real-dev=Cooldude2606 只是本場境的開發者 +softmod=這裹用了自設情境 +blame=責怪 __1__ 吧 +afk=看看 __1__, 他已掛機: __2__ +current-evolution=現在進化度為 __1__ +magic=Fear the admin magic (ノ゚∀゚)ノ⌒・*:.。. .。.:*・゜゚・*☆ +aids=≖ ‿ ≖ Fear the aids of a public server ≖ ‿ ≖ +riot=(admins) ┬┴┬┴┤ᵒ_ᵒ)├┬┴┬┴ ‹ ‹\(´ω` )/››‹‹\ (  ´)/››‹‹\ ( ´ω`)/›› (rest of server) +loops=不要架設迴旋處 +lenny=( ͡° ͜ʖ ͡°) +hodor=Hodor +get-popcorn-1=Heating the oil and waiting for the popping sound... +get-popcorn-2=__1__ your popcorn is finished. Lean backwards and watch the drama unfold. +get-snaps-1=Pouring the glasses and finding the correct song book... +get-snaps-2=Singing a song...🎤🎶 +get-snaps-3=schkål, my friends! +get-cocktail-1= 🍸 Inintiating mind reading unit... 🍸 +get-cocktail-2= 🍸 Mixing favourite ingredients of __1__ 🍸 +get-cocktail-3=🍸 __1__ your cocktail is done.🍸 +make-coffee-1= ☕ Boiling the water and grinding the coffee beans... ☕ +make-coffee-2= ☕ __1__ we ran out of coffe beans! Have some tea instead. ☕ +order-pizza-1= 🍕 Finding nearest pizza supplier... 🍕 +order-pizza-2= 🍕 Figuring out the favourite pizza of __1__ 🍕 +order-pizza-3= 🍕 __1__ your pizza is here! 🍕 +make-tea-1= ☕ Boiling the water... ☕ +make-tea-2= ☕ __1__ your tea is done! ☕ +get-mead-1= Filling the drinking horn +get-mead-2= Skål! +get-beer-1= 🍺 Pouring A Glass 🍺 +get-beer-2= 🍻 Chears Mate 🍻 +verify=Please return to our discord and type r!verify __1__ + +[afk-kick] +message=因沒有活躍玩家而被請離 + +[report-jail] +jail=__1__ 因被多次舉報而被送監. 請等候管理員. + +[protection-jail] +jail=__1__ 因被多次拆除受保護物體而被送監. 請等候管理員. diff --git a/locale/zh-TW/commands.cfg b/locale/zh-TW/commands.cfg new file mode 100644 index 00000000..19788810 --- /dev/null +++ b/locale/zh-TW/commands.cfg @@ -0,0 +1,112 @@ +[expcom-kill] +already-dead=你已經死了. + +[expcom-admin-chat] +format=[管理員] __1__: __2__ + +[expcom-tp] +no-position-found=沒找到空間傳送. +to-self=沒辦法傳送到自己 + +[expcom-chelp] +title=幫助 "__1__": +footer=[__1__ 結果: 頁 __2__ / __3__] +format=/__1__ __2__ - __3__ __4__ +alias=別名: __1__ +out-of-range=沒有 __1__ 頁. + +[expcom-roles] +higher-role=你所安排的身份組比你目前的還要高. +list=所有身份組: __1__ +list-player=__1__ 有: __2__ +list-element=__1__, __2__ + +[expcom-jail] +give=__1__ 已被 __2__ 因為 __3__ 送監. +remove=__1__ 已被 __2__. +already-jailed=__1__ 已被送監. +not-jailed=__1__ 目前不在監獄. + +[expcom-report] +player-immune=該用戶不能被舉報. +self-report=你不能舉報你自己. +non-admin=__1__ 因 __2__ 而被舉報. +admin=__1__ 因 __3__ 而被 __2__ 舉報. +already-reported=你只可舉報其他用戶一次. +not-reported=該用戶沒被舉報. +player-count-title=該用戶有以下舉報: +player-report-title=__1__ 有以下舉報: +list=__1__: __2__ +removed=__1__ 的舉報各. + +[expcom-warnings] +received=__1__ 因為 __3__ 而被 __2__ 發出了一個警告. +player=__1__ 有 __2__ 個警告和 __3__/__4__ 自動警告. +player-detail=__1__ 因 __2__ 而被警告 +list-title=該用戶警告如下: +list=__1__: __2__ (__3__/__4__) +cleared=__1__ 的警告己被 __2__ 清除. + +[expcom-spawn] +unavailable=現在沒辦法傳送到出生點. + +[expcom-repair] +result=共 __1__ 個建築恢復其中 __2__ 把 HP 回滿. + +[expcom-bonus] +set=你的附加比例現在為 __1__. +wip=本指令是暫時的, 將來可能會被更換. + +[expcom-ratio] +notSelecting=請選擇項目. +item-in=你每秒需要 __1__ 來做 [item=__2__]. +fluid-in=你每秒需要 __1__ 來做 [fluid=__2__]. +item-out=結果: __1__ [item=__2__] 每秒. +fluid-out=結果: __1__ [fluid=__2__] 每秒. +machines=你需要 __1__ 部同速機器. + +[expcom-home] +no-home=你還沒設回程傳送點. +no-return=你還沒用回程. +home-set=你的回程傳送點為 x: __1__ y: __2__ +return-set=你的去程傳送點為 x: __1__ y: __2__ +home-get=你的回程傳送點在 x: __1__ y: __2__ + +[expcom-server-ups] +no-ext=沒找到外置數據, 沒法顯示. + +[expcom-connect] +too-many-matching=該伺服器名稱有多過一個結果: __1__ +wrong-version=該伺服器版本不同: __1__ +same-server=你已連接該伺服器: __1__ +offline=該伺服器不在線: __1__ +none-matching=沒找到伺服器. + +[expcom-lastlocation] +response=__1__ 最後出現在 [gps=__2__,__3__] + +[expcom-protection] +entered-entity-selection=建築保護, 選擇一個建築來保護, 按住 shift 來選擇則可取消. +entered-area-selection=地區保護, 選擇一個地區來保護, 按住 shift 來選擇則可取消. +protected-entities=__1__ 個建築現已受保護. +unprotected-entities=__1__ 個建築現不受保護. +already-protected=本地區已受保護. +protected-area=本地區現已受保護. +unprotected-area=本地區現不受保護. +repeat-offence=__1__ 在 [gps=__3__,__4__] 拆除了 __2__ + +[expcom-spectate] +follow-self=你不能追蹤自己. + +[expcom-admin-marker] +exit=你已離開管理員地圖標記模式, 所有新地圖標記將不受保護. +enter=你已進入管理員地圖標記模式, 所有新地圖標記將受保護. +place=你放了一個管理員地圖標記. +edit=你修改了一個管理員地圖標記. +revert=你沒辦法修改管理員地圖標記. + +[expcom-inv-search] +reject-item=沒找到 __1__; 可試用富文本. +results-heading=以下用戶有 [item=__1__]: +results-item=__1__) __2__ 有 __3__ 個. (__4__) +results-none=沒用戶有 [item=__1__] diff --git a/locale/zh-TW/config.cfg b/locale/zh-TW/config.cfg new file mode 100644 index 00000000..38eb2554 --- /dev/null +++ b/locale/zh-TW/config.cfg @@ -0,0 +1,3 @@ +[command-auth] +admin-only=本指令只限管理員使用! +command-disabled=本指令已被停用! \ No newline at end of file diff --git a/locale/zh-TW/data.cfg b/locale/zh-TW/data.cfg new file mode 100644 index 00000000..36bcdce5 --- /dev/null +++ b/locale/zh-TW/data.cfg @@ -0,0 +1,87 @@ +[join-message] +greet=[color=0,1,0] 歡迎來到 EXP 的伺服器! 若果你喜歡本伺服器可加入 DISCORD: __1__ [/color] +message-set=你的加入信息已更新 +message-cleared=你的加入信息已清除 + +[quickbar] +saved=你的工具列已儲存 + +[exp-required] +Warnings=警告 +Warnings-tooltip=你所有收到的警告 +Warnings-value-tooltip=你所有收到的警告 +[exp-settings] +Colour=顏色 +Colour-tooltip=你的人物顏色 +Colour-value-tooltip=使用 /color 來更換你的人物顏色 +JoinMessage=加入信息 +JoinMessage-tooltip=你加入時所顯示的信息 +JoinMessage-value-tooltip=使用 /join-message 來更換加入信息 +QuickbarFilters=快捷欄 +QuickbarFilters-tooltip=快捷欄的選項 +QuickbarFilters-value-tooltip=使用 /save-quickbar 來更換快捷欄的選項 +UsesAlt=細節模式 +UsesAlt-tooltip=你加入時是否使用細節模式 +UsesAlt-value-tooltip=按下 __CONTROL__show-info__ 來更改 +UsesServerUps=伺服更新數 (UPS) +UsesServerUps-tooltip=現在是否顯示 伺服更新數 (UPS) +UsesServerUps-value-tooltip=使用 /server-ups 來更換顯示 +Tag=你的人物標籤 +Tag-tooltip=你的人物標籤 +Tag-value-tooltip=使用 /tag 來更換你的人物標籤 +TagColor=人物標籤顏色 +TagColor-tooltip=你的人物標籤顏色 +TagColor-value-tooltip=使用 /tag-color 來更換你的人物標籤顏色 +Bonus=人物附加屬性 +Bonus-tooltip=你的人物附加屬性 +Bonus-value-tooltip=使用 /bonus 來更改 + +[exp-statistics] +MapsPlayed=地圖遊玩次數 +MapsPlayed-tooltip=你在本伺服器遊玩過的地圖數 +JoinCount=登入次數 +JoinCount-tooltip=你在本伺服器遊玩的次數 +Playtime=遊玩時間 +Playtime-tooltip=你在本伺服器遊玩的時間 +AfkTime=掛機時間 +AfkTime-tooltip=你在本伺服器掛機的時間 +ChatMessages=傳送信息次數 +ChatMessages-tooltip=你在本伺服器發送信息的次數 +CommandsUsed=使用指令次數 +CommandsUsed-tooltip=你在本伺服器使用指令的次數 +RocketsLaunched=火箭發射次數 +RocketsLaunched-tooltip=你在本伺服器在線時所發射過火箭的次數 +ResearchCompleted=研究次數 +ResearchCompleted-tooltip=你在本伺服器在線時完成研究的次數 +MachinesBuilt=機器建造次數 +MachinesBuilt-tooltip=你在本伺服器建造過機器的次數 +MachinesRemoved=機器拆除次數 +MachinesRemoved-tooltip=你在本伺服器拆除過機器的次數 +TilesBuilt=地磚建造次數 +TilesBuilt-tooltip=你在本伺服器建造過地磚的次數 +TilesRemoved=地磚拆除次數 +TilesRemoved-tooltip=你在本伺服器拆除過地磚的次數 +TreesDestroyed=樹木拆除次數 +TreesDestroyed-tooltip=你在本伺服器拆除過樹木的次數 +OreMined=挖礦次數 +OreMined-tooltip=你在本伺服器挖掘礦的次數 +ItemsCrafted=物品合成數 +ItemsCrafted-tooltip=你在本伺服器合成過物品的次數 +ItemsPickedUp=物品拾起數 +ItemsPickedUp-tooltip=你在本伺服器起過物品的次數 +Kills=撃殺數 +Kills-tooltip=你在本伺服器殺過的敵人數量 +Deaths=死亡次數 +Deaths-tooltip=你在本伺服器死過的數量 +DamageDealt=傷害量 +DamageDealt-tooltip=你在本伺服器對敵人所造成的傷害量 +DistanceTravelled=移動距離 +DistanceTravelled-tooltip=你在本伺服器的總移動距離 +CapsulesUsed=膠囊使用次數 +CapsulesUsed-tooltip=你在本伺服器使用過膠囊的次數 +EntityRepaired=機器維修次數 +EntityRepaired-tooltip=你在本伺服器維修過機器的次數 +DeconstructionPlannerUsed=拆除規劃器使用次數 +DeconstructionPlannerUsed-tooltip=你在本伺服器使用過拆除規劃器的次數 +MapTagsMade=地圖標籤數量 +MapTagsMade-tooltip=你在本伺服器放過的地圖標籤數量 \ No newline at end of file diff --git a/locale/zh-TW/expcore.cfg b/locale/zh-TW/expcore.cfg new file mode 100644 index 00000000..0f8e0705 --- /dev/null +++ b/locale/zh-TW/expcore.cfg @@ -0,0 +1,53 @@ +time-symbol-days-short=__1__d +color-tag=[color=__1__]__2__[/color] + +[time-format] +simple-format-tagged=__1__ __2__ +simple-format-div=__1__:__2__ + +[expcore-commands] +unauthorized=你沒有權限運行該項目 +reject-string-options=無效的選項. 要在: __1__ +reject-string-max-length=無效的長度, 最長: __1__ +reject-number=無效的數值. +reject-number-range=無效的範圍. 最少 (包括): __1__, 最大 (包括): __2__ +reject-player=無效的用戶名稱, __1__ , 可以用 TAB 鍵來自動完成 +reject-player-online=用戶不在線. +reject-player-alive=用戶已死亡. +reject-force=無效的勢力. +reject-surface=無效的表面. +reject-color=無效的顏色. +invalid-inputs=無效的輸入, /__1__ __2__ +invalid-param=無效的參數 "__1__"; __2__ +command-help=__1__ - __2__ +command-ran=指令運行完成 +command-fail=指令運行失敗 failed to run: __1__ +command-error-log-format=[ERROR] command/__1__ :: __2__ + +[expcore-roles] +error-log-format-flag=[ERROR] roleFlag/__1__ :: __2__ +error-log-format-assign=[ERROR] rolePromote/__1__ :: __2__ +game-message-assign=__1__ 已被 __3__ 指派到身分組 __2__ +game-message-unassign=__1__ 已被 __3__ 取消指派到身分組 __2__ +reject-role=無效的身分組. +reject-player-role=用戶已有更高的身分組. + +[gui_util] +button_tooltip=是否顯示工具欄. + +[expcore-gui] +left-button-tooltip=關閉所有打開的視窗. + +[expcore-data] +set-preference=你的喜好已設定為 __1__. 在你重新加入前將不會有任何改動. +get-preference=你的喜好為 __1__. 使用 /set-preference 來更改. 使用 /save-data 來獲得一份資料副本. +get-data=你的個人資料已寫入: factorio/script_output/expgaming_player_data.json +data-failed=無法載入你的個人資料. 任何改動將不會保存. +data-restore=已載入你的個人資料. 改動將會被保存. +preference=儲存喜好 +preference-tooltip=那種資料將在退出時保存 +preference-value-tooltip=使用 /set-preference 來更換儲存喜好 +preference-All=所有資料都會被儲存 +preference-Statistics=只有數據, 設定和資料會被儲存 +preference-Settings=只有設定和資料會被儲存 +preference-Required=只有需要的資料會被儲存 \ No newline at end of file diff --git a/locale/zh-TW/gui.cfg b/locale/zh-TW/gui.cfg new file mode 100644 index 00000000..86904c88 --- /dev/null +++ b/locale/zh-TW/gui.cfg @@ -0,0 +1,209 @@ +[player-list] +main-tooltip=用戶名單 +open-action-bar=選項 +close-action-bar=關閉選項 +reason-confirm=確認原因 +reason-entry=輸入原因 +goto-player=傳送到用戶 +bring-player=傳送用戶到自己 +report-player=舉報用戶 +warn-player=警告用戶 +jail-player=監禁用戶 +kick-player=踢用戶 +ban-player=封禁用戶 +afk-time=__1__% 地圖時間\n上次移動: __2__ +open-map=__1__ __2__\n__3__\n按下打開地圖 + +[rocket-info] +main-tooltip=火箭資訊 +launch-tooltip=發射火箭 +launch-tooltip-disabled=發射火箭 (未準備) +toggle-rocket-tooltip=取消自動發射 +toggle-rocket-tooltip-disabled=啟用自動發射 +toggle-section-tooltip=擴張欄 +toggle-section-collapse-tooltip=收縮欄 +section-caption-stats=數據 +section-tooltip-stats=火箭發射數據 +section-caption-milestones=里程碑 +section-tooltip-milestones=里程碑達成次數 +section-caption-progress=建造程度 +section-tooltip-progress=火箭建造程度 +progress-no-silos=你沒有火箭發射井 +data-caption-first-launch=首次發射 +data-tooltip-first-launch=首次發射時間 +data-caption-last-launch=最後發射 +data-tooltip-last-launch=最後發射時間 +data-caption-fastest-launch=最快發射 +data-tooltip-fastest-launch=最快發射時間 +data-caption-total-rockets=總發射次數 +data-tooltip-total-rockets=我方總發射次數 +value-tooltip-total-rockets=__1__% 的火箭發射都在本地圖上. +data-caption-avg-launch=平均時間 +data-tooltip-avg-launch=火箭發射平均時間 +data-caption-avg-launch-n=平均時間 __1__ +data-tooltip-avg-launch-n=__1__ 次火箭發射的平均時間 +data-caption-milestone-n=里程碑 __1__ +data-tooltip-milestone-n=__1__ 次火箭發射的時間 +data-caption-milestone-next=N/A +data-tooltip-milestone-next=未達成 +progress-x-pos=X __1__ +progress-y-pos=Y __1__ +progress-label-tooltip=在地圖上看 +progress-launched=已發射 +progress-caption=__1__ % +progress-tooltip=該火箭發射井發射了 __1__ 次 +launch-failed=火箭發射失敗, 請過一會再試. + +[science-info] +main-caption=研究瓶 +main-tooltip=研究資訊 +eta-caption=預計時間: +eta-tooltip=餘下研究所需時間 +eta-time=T- __1__ +unit=__1__ 瓶分鐘 +pos-tooltip=製造: __1__ +neg-tooltip=使用: __1__ +net-tooltip=淨: __1__ +no-packs=你未有製造任何研究瓶 + +[task-list] +main-caption=工作流程 [img=info] +main-tooltip=工作流程 +sub-tooltip=需要完成的工作流程\n- 你可以用富文本來加上圖片 [img=utility/not_enough_repair_packs_icon] 或 [color=blue] 顏色[/color]. +no-tasks=沒有工作流程 +no-tasks-tooltip=按加號加入工作流程 +last-edit=最後由 __1__ 在 __2__ 修改 +add-tooltip=加入工作流程 +confirm=確認 +confirm-tooltip=儲存工作流程 (最少要5個字長) +discard=放棄 +discard-tooltip=放棄更改動 +delete=刪除 +delete-tooltip=刪除工作流程 +close-tooltip=關閉工作流程 +edit=修改工作流程 +edit-tooltip=現被 __1__ 修改中 +edit-tooltip-none=現沒有被人修改 +create-footer-header=加入工作流程 +edit-footer-header=修改工作流程 +view-footer-header=工作流程細節 +[autofill] +main-tooltip=自動填入設定 +toggle-section-caption=__1__ __2__ +toggle-section-tooltip=擴張欄 +toggle-section-collapse-tooltip=收縮欄 +toggle-entity-tooltip=自動填入設定 - __1__ +toggle-tooltip=自動填入設定 - __2__ 的 __1__ +amount-tooltip=自動填入 __1__ 的數量 +invalid=自動填入最大值 __1__ __2__ 給 __3__ +inserted=自動填入 __1__ __2__ 到 __3__ + +[warp-list] +main-caption=傳送陣清單 [img=info] +main-tooltip=傳送陣清單; 需在 __1__ 格之內使用 +sub-tooltip=傳送陣在 __1__ 秒內只能使用一次. 亦需在 __2__ 格之內使用\n__3__\n__4__\n__5__\n__6__\n__7__\n__8__ +sub-tooltip-current= - __1__ 你目前的傳送陣; +sub-tooltip-connected= - __1__ 你可以到本傳送陣; +sub-tooltip-different= - __1__ 該傳送陣未連接; +sub-tooltip-cooldown= - __1__ 傳送冷卻中; +sub-tooltip-not_available= - __1__ 你不在傳送陣範圍; +sub-tooltip-bypass= - __1__ 你可以傳送到這裏; +too-close=無法新建傳送陣; 太接近 __1__ 了 +too-close-to-water=無法新建傳送陣; 太接近水源了, 請移動 __1__ 格又或者填平該地方 +too-close-to-entities=無法新建傳送陣; 太接近其他東西, 請移動 __1__ 格又或者拆除該東西 +last-edit=最後由 __1__ 在 __2__ 更改\n按這在地圖上看 +add-tooltip=新建傳送陣 +confirm-tooltip=儲存更改 +cancel-tooltip=放棄更改 +edit-tooltip=現被 __1__ 修改中 +edit-tooltip-none=現沒有被人修改 +remove-tooltip=拆除傳送陣 +timer-tooltip=請等 __1__ 秒才再次傳送 +timer-tooltip-zero=你要等 __1__ 秒才可以再次傳送 +goto-tooltip=到 X __1__ Y __2__ +goto-bypass=到 X __1__ Y __2__, 繞行模式 +goto-bypass-different-network=到 X __1__ Y __2__, 繞行模式 (不同網絡) +goto-same-warp=你已在該傳送陣 +goto-different-network=該傳送陣未連接, 你可使用電纜連接 +goto-cooldown=傳送冷卻中, 請等候冷卻 +goto-disabled=你不在傳送陣, 請移至任意傳送陣 +goto-edit=修改傳送陣圖案 + +[readme] +main-tooltip=資訊 +welcome-tab=歡迎 +welcome-tooltip=歡迎來到 Explosive Gaming +welcome-general=歡迎來到 Explosive Gaming; 你在這裏的時候要遵守規. 你可以在左上方的介面找到更多資訊. 地圖時間 __2__.\n下次地圖重設: __1__ +welcome-roles=我們有自訂的身份組來保護其他用戶. 所以你有機會不能使用拆除規劃器或掉東西. 身份組給予你各種權限\n你有以下身份組: __1__ +welcome-chat=你可以使用 「重音符/抑音符」 鍵 (ESC 鍵 下方) - 你也可以在選項中修改按鍵.\n你目前設定為 「__CONTROL__toggle-console__」 +rules-tab=規則 +rules-tooltip=伺服器規則 +rules-general=你在本伺服器遊玩即等同同意以下規則. 管理員有機會就相關事項提問. 你可能會因為違反規則而被封禁, 你可以在 Discord 中提出反對. +rules-1=開掛或濫用漏洞將不會被容忍. +rules-2=當你找到漏洞可以通知職員. +rules-3=請在聊天室中尊重其他人. +rules-4=請不要把所有物品全部取走. +rules-5=請不要濫發信息, 大量鋪設地磚, 或不為箱子設置上限, 浪費資源. +rules-6=當你想大量拆除原有設施前請通知其他用戶. +rules-7=請不要無故使用機器人來大量鋪設或拆除地磚, 濫用主動出貨箱. +rules-8=請不要隨意移動來開大量地圖, 這有助減少地圖下載時間. +rules-9=請不要無故使用全圖喇叭. +rules-10=請不要無故轉動傳送帶方向, 停用傳送帶, 或停止生產. +rules-11=請不要用迴旋處. 火車站尾返程則是例外. +rules-12=請跟其他人使用相同的火車組成. 常用的有 1-2-1, 2-4-2, 或 3-8-3, 即1個動車組拖2個貨車組再拖不同方向的1個動車組. +rules-13=火車必須是左上右下 (LHD). +rules-14=禁止要求身份組, 發廣告, 發惡意連結. +rules-15=使用常識, 舉報違規人員, 管理員只有最終決定權. +commands-tab=指令 +commands-tooltip=你可用的指令 +commands-general=這裏有自訂的指令. 你可以在下邊找到你可用的指令及其功能介紹. 你可以用 /search-help 來取得更多資訊. +servers-tab=伺服器 +servers-tooltip=到其他伺服器及網站的連結 +servers-general=這是其中一個伺服器. 你可以在下方找到其他同樣是由我們運行的伺服器資料. +servers-factorio=異星工廠伺服器 +servers-1=S1 公共 +servers-d1=這個伺服器每 兩日 (48小時) 重設. +servers-2=S2 - +servers-d2=這個伺服器沒在營運. +servers-3=S3 周 +servers-d3=這個伺服器每 七日 (168小時) 重設. +servers-4=S4 月 +servers-d4=這個伺服器每 二十八日 (672小時) 重設. +servers-5=S5 模組 +servers-d5=這個伺服器運行模組, 可在 Discord 中得到更多資訊. +servers-6=S6 Donator +servers-d6=這個伺服器為支持者運行, 可在 Discord 中得到更多資訊. +servers-7=S7 項目 +servers-d7=這個伺服器只在有項目期間運行. +servers-8=S8 T̷-̶s̶-̴:̷ +servers-d8=N̵o̴ ̶o̷-̶e̵ ̴k̸n̷-̶w̵s̸ ̴w̷h̷a̶-̶ ̷h̴a̴p̷p̴e̷n̷s̸ ̷o̶n̴ ̷t̶h̴-̶s̶ ̷s̷e̶r̸v̸e̴r̷,̶ ̸i̸t̴ ̷m̶-̸g̴h̶t̷ ̸n̸-̶t̵ ̷e̴v̸e̸n̶t̷ ̵-̷x̴i̵s̶t̸.̸ +servers-connect-Offline=該伺服器目前沒有在運行 +servers-connect-Current=你目前所在的伺服器 +servers-connect-Version=該伺服器運行不同的遊戲版本: __1__ +servers-connect-Password=該伺服器需要密碼 +servers-connect-Modded=該伺服器需要下載模組 +servers-connect-Online=該伺服器在線 +servers-external=外部連結 +servers-open-in-browser=可在你的瀏覽器中打開 +backers-tab=支持者 +backers-tooltip=支持者 +backers-general=他們為伺服器運行提供了不少幫助. +backers-management=系統管理員 +backers-board=議員 +backers-staff=職員 +backers-backers=支持者 +backers-active=活躍玩家 +data-tab=資料 +data-tooltip=所有已存資料 +data-general=資料會自動存到各個服務器中. 你也可以用 /save-data 存一份副本. 也可用 /set-preference 來更改喜好. +data-settings=設定 +data-statistics=數據 +data-required=需要 +data-misc=雜項 +data-format=__1____2__ + +[tree-decon] +main-tooltip=樹木快速拆除選項 +enabled=啟用 +disabled=停用 +toggle-msg=樹木快速拆除已 __1__ \ No newline at end of file diff --git a/modules/addons/death-logger.lua b/modules/addons/death-logger.lua index 97c057fe..092bcd4a 100644 --- a/modules/addons/death-logger.lua +++ b/modules/addons/death-logger.lua @@ -4,7 +4,7 @@ local Event = require 'utils.event' --- @dep utils.event local Global = require 'utils.global' --- @dep utils.global local config = require 'config.death_logger' --- @dep config.death_logger -local format_time, move_items = _C.format_time, _C.move_items --- @dep expcore.common +local format_time, move_items = _C.format_time, _C.move_items_stack --- @dep expcore.common -- Max amount of ticks a corpse can be alive local corpse_lifetime = 60*60*15 @@ -64,7 +64,7 @@ Event.add(defines.events.on_player_died, function(event) local player = game.players[event.player_index] local corpse = player.surface.find_entity('character-corpse', player.position) if config.use_chests_as_bodies then - local items = corpse.get_inventory(defines.inventory.character_corpse).get_contents() + local items = corpse.get_inventory(defines.inventory.character_corpse) local chest = move_items(items, corpse.surface, corpse.position) chest.destructible = false corpse.destroy() @@ -140,7 +140,7 @@ end if config.auto_collect_bodies then Event.add(defines.events.on_character_corpse_expired, function(event) local corpse = event.corpse - local items = corpse.get_inventory(defines.inventory.character_corpse).get_contents() + local items = corpse.get_inventory(defines.inventory.character_corpse) move_items(items, corpse.surface, {x=0, y=0}) end) end diff --git a/modules/addons/deconlog.lua b/modules/addons/deconlog.lua new file mode 100644 index 00000000..52b1914a --- /dev/null +++ b/modules/addons/deconlog.lua @@ -0,0 +1,89 @@ +--- Log certain actions into a file when events are triggered +-- @addon Deconlog + +local Event = require 'utils.event' --- @dep utils.event +local Roles = require 'expcore.roles' --- @dep expcore.roles +local format_time = _C.format_time +local config = require 'config.deconlog' --- @dep config.deconlog + +local filepath = "log/decon.log" + +local function add_log(data) + game.write_file(filepath, data .. "\n", true, 0) -- write data +end +local function get_secs () + return format_time(game.tick, { hours = true, minutes = true, seconds = true, string = true }) +end +local function pos_tostring (pos) + return tostring(pos.x) .. "," .. tostring(pos.y) +end + +Event.on_init(function() + game.write_file(filepath, "\n", false, 0) -- write data +end) + +if config.decon_area then + Event.add(defines.events.on_player_deconstructed_area, function (e) + local player = game.get_player(e.player_index) + if Roles.player_has_flag(player, "deconlog-bypass") then return end + add_log(get_secs() .. "," .. player.name .. ",decon_area," .. pos_tostring(e.area.left_top) .. "," .. pos_tostring(e.area.right_bottom)) + end) +end + +if config.built_entity then + Event.add(defines.events.on_built_entity, function (e) + if not e.player_index then return end + local player = game.get_player(e.player_index) + if Roles.player_has_flag(player, "deconlog-bypass") then return end + local ent = e.created_entity + add_log(get_secs() .. "," .. player.name .. ",built_entity," .. ent.name .. "," .. pos_tostring(ent.position) .. "," .. tostring(ent.direction) .. "," .. tostring(ent.orientation)) + end) +end + +if config.mined_entity then + Event.add(defines.events.on_player_mined_entity, function (e) + local player = game.get_player(e.player_index) + if Roles.player_has_flag(player, "deconlog-bypass") then return end + local ent = e.entity + add_log(get_secs() .. "," .. player.name .. ",mined_entity," .. ent.name .. "," .. pos_tostring(ent.position) .. "," .. tostring(ent.direction) .. "," .. tostring(ent.orientation)) + end) +end + +if config.fired_rocket then + Event.add(defines.events.on_player_ammo_inventory_changed, function (e) + local player = game.get_player(e.player_index) + if Roles.player_has_flag(player, "deconlog-bypass") then return end + local ammo_inv = player.get_inventory(defines.inventory.character_ammo) + local item = ammo_inv[player.character.selected_gun_index] + if not item or not item.valid or not item.valid_for_read then return end + if item.name == "rocket" then + add_log(get_secs() .. "," .. player.name .. ",shot-rocket," .. pos_tostring(player.position) .. "," .. pos_tostring(player.shooting_state.position)) + end + end) +end + +if config.fired_explosive_rocket then + Event.add(defines.events.on_player_ammo_inventory_changed, function (e) + local player = game.get_player(e.player_index) + if Roles.player_has_flag(player, "deconlog-bypass") then return end + local ammo_inv = player.get_inventory(defines.inventory.character_ammo) + local item = ammo_inv[player.character.selected_gun_index] + if not item or not item.valid or not item.valid_for_read then return end + if item.name == "explosive-rocket" then + add_log(get_secs() .. "," .. player.name .. ",shot-explosive-rocket," .. pos_tostring(player.position) .. "," .. pos_tostring(player.shooting_state.position)) + end + end) +end + +if config.fired_nuke then + Event.add(defines.events.on_player_ammo_inventory_changed, function (e) + local player = game.get_player(e.player_index) + if Roles.player_has_flag(player, "deconlog-bypass") then return end + local ammo_inv = player.get_inventory(defines.inventory.character_ammo) + local item = ammo_inv[player.character.selected_gun_index] + if not item or not item.valid or not item.valid_for_read then return end + if item.name == "atomic-bomb" then + add_log(get_secs() .. "," .. player.name .. ",shot-nuke," .. pos_tostring(player.position) .. "," .. pos_tostring(player.shooting_state.position)) + end + end) +end diff --git a/modules/addons/fagc.lua b/modules/addons/fagc.lua new file mode 100644 index 00000000..ddf10485 --- /dev/null +++ b/modules/addons/fagc.lua @@ -0,0 +1,19 @@ +--- Allows the FAGC clientside bot to receive information about bans and unbans and propagate that information to other servers +-- @addon FAGC + +local Event = require 'utils.event' --- @dep utils.event + +-- Clear the file on startup to minimize its size +Event.on_init(function() + game.write_file("fagc-actions.txt", "", false, 0) +end) + +Event.add(defines.events.on_player_banned, function(e) + local text = "ban;" .. e.player_name .. ";" .. (e.by_player or "") .. ";" .. (e.reason or "") .. "\n" + game.write_file("fagc-actions.txt", text, true, 0) +end) + +Event.add(defines.events.on_player_unbanned, function(e) + local text = "unban;" .. e.player_name .. ";" .. (e.by_player or "") .. ";" .. (e.reason or "") .. "\n" + game.write_file("fagc-actions.txt", text, true, 0) +end) diff --git a/modules/addons/inventory-clear.lua b/modules/addons/inventory-clear.lua index 57ae4958..51dc18e2 100644 --- a/modules/addons/inventory-clear.lua +++ b/modules/addons/inventory-clear.lua @@ -3,13 +3,13 @@ local Event = require 'utils.event' --- @dep utils.event local events = require 'config.inventory_clear' --- @dep config.inventory_clear -local move_items = _C.move_items --- @dep expcore.common +local move_items_stack = _C.move_items_stack --- @dep expcore.common local function clear_items(event) local player = game.players[event.player_index] local inv = player.get_main_inventory() - move_items(inv.get_contents()) + move_items_stack(inv) inv.clear() end -for _, event_name in ipairs(events) do Event.add(event_name, clear_items) end \ No newline at end of file +for _, event_name in ipairs(events) do Event.add(event_name, clear_items) end diff --git a/modules/addons/nukeprotect.lua b/modules/addons/nukeprotect.lua new file mode 100644 index 00000000..c633e32b --- /dev/null +++ b/modules/addons/nukeprotect.lua @@ -0,0 +1,36 @@ +--- Disable new players from having certain items in their inventory, most commonly nukes +-- @addon Nukeprotect + +local Event = require 'utils.event' --- @dep utils.event +local Roles = require 'expcore.roles' --- @dep expcore.roles +local config = require 'config.nukeprotect' --- @dep config.nukeprotect +local move_items_stack = _C.move_items_stack --- @dep expcore.common + + +local function check_items(player, type) + -- if the player has perms to be ignored, then they should be + if config.ignore_permisison and Roles.player_allowed(player, config.ignore_permisison) then return end + -- if the players + if config.ignore_admins and player.admin then return end + + local inventory = player.get_inventory(type) + for i = 1, #inventory do + local item = inventory[i] + if item.valid and item.valid_for_read and config[tostring(type)][item.name] then + player.print({ "nukeprotect.found", { "item-name." .. item.name } }) + -- insert the items into the table so all items are transferred at once + move_items_stack({ item }) + end + end +end + +for _, inventory in ipairs(config.inventories) do + if #inventory.items > 0 then + Event.add(inventory.event, function(event) + local player = game.get_player(event.player_index) + if player and player.valid then + check_items(player, inventory.inventory) + end + end) + end +end diff --git a/modules/addons/tree-decon.lua b/modules/addons/tree-decon.lua index 29e13707..95a34396 100644 --- a/modules/addons/tree-decon.lua +++ b/modules/addons/tree-decon.lua @@ -4,6 +4,8 @@ local Event = require 'utils.event' --- @dep utils.event local Global = require 'utils.global' --- @dep utils.global local Roles = require 'expcore.roles' --- @dep expcore.roles +local Gui = require 'expcore.gui' --- @dep expcore.gui +local PlayerData = require 'expcore.player_data' --- @dep expcore.player_data -- Global queue used to store trees that need to be removed, also chache for player roles local chache = {} @@ -13,6 +15,22 @@ Global.register({ tree_queue, chache }, function(tbl) chache = tbl[2] end) + +-- Left menu button to toggle between fast decon and normal decon marking +local HasEnabledDecon = PlayerData.Settings:combine('HasEnabledDecon') +HasEnabledDecon:set_default(false) + +Gui.toolbar_button("entity/tree-01", {'tree-decon.main-tooltip'}, function (player) + return Roles.player_allowed(player, "fast-tree-decon") +end) +:on_click(function(player, element) + local status = HasEnabledDecon:get(player) + HasEnabledDecon:set(player, not status) + Gui.toolbar_button_style(element, not status) + player.print(status and {'tree-decon.toggle-msg', {'tree-decon.disabled'}} or {'tree-decon.toggle-msg', {'tree-decon.enabled'}}) +end) + + -- Add trees to queue when marked, only allows simple entities and for players with role permission Event.add(defines.events.on_marked_for_deconstruction, function(event) -- Check which type of decon a player is allowed @@ -40,6 +58,10 @@ Event.add(defines.events.on_marked_for_deconstruction, function(event) -- Allowed to decon this entity, but not fast if allow ~= 'fast' then return end + + local player = game.get_player(index) + if not HasEnabledDecon:get(player) then return end + -- Allowed fast decon on this entity, just trees local head = tree_queue._head + 1 if not last_user and entity.type ~= 'cliff' then diff --git a/modules/commands/clear-inventory.lua b/modules/commands/clear-inventory.lua index 04155978..ceb6b3e9 100644 --- a/modules/commands/clear-inventory.lua +++ b/modules/commands/clear-inventory.lua @@ -4,7 +4,7 @@ ]] local Commands = require 'expcore.commands' --- @dep expcore.commands -local move_items = _C.move_items --- @dep expcore.common +local move_items_stack = _C.move_items_stack --- @dep expcore.common require 'config.expcore.command_role_parse' --- Clears a players inventory @@ -14,10 +14,10 @@ Commands.new_command('clear-inventory', 'Clears a players inventory') :add_param('player', false, 'player-role') :add_alias('clear-inv', 'move-inventory', 'move-inv') :register(function(_, player) - local inv = player.get_main_inventory() - if not inv then - return Commands.error{'expcore-commands.reject-player-alive'} - end - move_items(inv.get_contents()) - inv.clear() -end) \ No newline at end of file + local inv = player.get_main_inventory() + if not inv then + return Commands.error{'expcore-commands.reject-player-alive'} + end + move_items_stack(inv) + inv.clear() +end) diff --git a/modules/control/jail.lua b/modules/control/jail.lua index 1e37fbfa..b5bf7df4 100644 --- a/modules/control/jail.lua +++ b/modules/control/jail.lua @@ -18,7 +18,6 @@ local Roles = require 'expcore.roles' --- @dep expcore.roles local Game = require 'utils.game' --- @dep utils.game -local Global = require 'utils.global' --- @dep utils.global local valid_player = Game.get_player_from_any local assign_roles = Roles.assign_player @@ -43,12 +42,6 @@ local Jail = { } } -local old_roles = Jail.old_roles -Global.register(old_roles, function(tbl) - Jail.old_roles = tbl - old_roles = tbl -end) - --- Used to emit the jail related events -- @tparam number event the name of the event that will be emited -- @tparam LuaPlayer player the player who is being acted on @@ -89,7 +82,6 @@ function Jail.jail_player(player, by_player_name, reason) if has_role(player, 'Jail') then return end local roles = get_roles(player) - old_roles[player.name] = roles player.walking_state = { walking = false } player.riding_state = { acceleration = defines.riding.acceleration.nothing, direction = player.riding_state.direction } @@ -98,8 +90,9 @@ function Jail.jail_player(player, by_player_name, reason) player.picking_state = false player.repair_state = { repairing = false } - assign_roles(player, 'Jail', by_player_name, nil, true) unassign_roles(player, roles, by_player_name, nil, true) + assign_roles(player, 'Jail', by_player_name, nil, true) + assign_roles(player, roles, by_player_name, nil, true) event_emit(Jail.events.on_player_jailed, player, by_player_name, reason) @@ -116,9 +109,7 @@ function Jail.unjail_player(player, by_player_name) if not by_player_name then return end if not has_role(player, 'Jail') then return end - local roles = old_roles[player.name] or {} - assign_roles(player, roles, by_player_name, nil, true) unassign_roles(player, 'Jail', by_player_name, nil, true) event_emit(Jail.events.on_player_unjailed, player, by_player_name) @@ -126,4 +117,4 @@ function Jail.unjail_player(player, by_player_name) return true end -return Jail \ No newline at end of file +return Jail diff --git a/modules/graftorio/forcestats.lua b/modules/graftorio/forcestats.lua new file mode 100644 index 00000000..9839a484 --- /dev/null +++ b/modules/graftorio/forcestats.lua @@ -0,0 +1,190 @@ +local Event = require("utils.event") +local general = require("modules.graftorio.general") +local config = require("config.graftorio") + +local lib = {} + +lib.collect_production = function() + for _, force in pairs(game.forces) do + ---@class ProductionStatistics + ---@field item_input table + ---@field item_output table + ---@field fluid_input table + ---@field fluid_output table + ---@field kill_input table + ---@field kill_output table + ---@field build_input table + ---@field build_output table + local stats = { + item_input = {}, + item_output = {}, + fluid_input = {}, + fluid_output = {}, + kill_input = {}, + kill_output = {}, + build_input = {}, + build_output = {}, + } + + for name, count in pairs(force.item_production_statistics.input_counts) do + local itemstats = stats.item_input[name] or {} + itemstats.count = count + stats.item_input[name] = itemstats + end + for name, count in pairs(force.item_production_statistics.output_counts) do + local itemstats = stats.item_output[name] or {} + itemstats.count = count + stats.item_output[name] = itemstats + end + + for name, count in pairs(force.fluid_production_statistics.input_counts) do + local fluidstats = stats.fluid_input[name] or {} + fluidstats.count = count + stats.fluid_input[name] = fluidstats + end + for name, count in pairs(force.fluid_production_statistics.output_counts) do + local fluidstats = stats.fluid_output[name] or {} + fluidstats.count = count + stats.fluid_output[name] = fluidstats + end + + for name, count in pairs(force.kill_count_statistics.input_counts) do + local killstats = stats.kill_input[name] or {} + killstats.count = count + stats.kill_input[name] = killstats + end + for name, count in pairs(force.kill_count_statistics.output_counts) do + local killstats = stats.kill_output[name] or {} + killstats.count = count + stats.kill_output[name] = killstats + end + + for name, count in pairs(force.entity_build_count_statistics.input_counts) do + local buildstats = stats.build_input[name] or {} + buildstats.count = count + stats.build_input[name] = buildstats + end + for name, count in pairs(force.entity_build_count_statistics.output_counts) do + local buildstats = stats.build_output[name] or {} + buildstats.count = count + stats.build_output[name] = buildstats + end + + general.data.output[force.name].production = stats + end +end + +lib.collect_loginet = function() + for _, force in pairs(game.forces) do + ---@class RobotStatistics + ---@field all_construction_robots uint + ---@field available_construction_robot uint + ---@field all_logistic_robots uint + ---@field available_logistic_robots uint + ---@field charging_robot_count uint + ---@field to_charge_robot_count uint + ---@field items table + ---@field pickups table + ---@field deliveries table + local stats = { + all_construction_robots = 0, + available_construction_robots = 0, + + all_logistic_robots = 0, + available_logistic_robots = 0, + + charging_robot_count = 0, + to_charge_robot_count = 0, + + items = {}, + pickups = {}, + deliveries = {}, + } + for _, networks in pairs(force.logistic_networks) do + for _, network in pairs(networks) do + stats.available_construction_robots = network.available_construction_robots + stats.all_construction_robots = network.all_construction_robots + + stats.available_logistic_robots = network.available_logistic_robots + stats.all_logistic_robots = network.all_logistic_robots + + stats.charging_robot_count = 0 + stats.to_charge_robot_count = 0 + for _, cell in pairs(network.cells) do + stats.charging_robot_count = (stats.charging_robot_count) + cell.charging_robot_count + stats.to_charge_robot_count = (stats.to_charge_robot_count) + cell.to_charge_robot_count + end + + if config.modules.logistorage then + for name, v in pairs(network.get_contents()) do + stats.items[name] = (stats.items[name] or 0) + v + end + + -- pickups and deliveries of items + for _, point_list in pairs({ network.provider_points, network.requester_points, network.storage_points }) do + for _, point in pairs(point_list) do + for name, qty in pairs(point.targeted_items_pickup) do + stats.pickups[name] = (stats.pickups[name] or 0) + qty + end + for name, qty in pairs(point.targeted_items_deliver) do + stats.deliveries[name] = (stats.deliveries[name] or 0) + qty + end + end + end + end + end + end + general.data.output[force.name].robots = stats + end +end + + +---@class ResearchStatistics +---@field current Research +---@field queue Research[] + +---@class Research +---@field name string +---@field level uint +---@field progress double + + +Event.add(defines.events.on_research_finished, function(evt) + local research = evt.research + if not general.data.output[research.force.name] then general.data.output[research.force.name] = {} end + if not general.data.output[research.force.name].research then general.data.output[research.force.name].research = {} end + + local force_research = general.data.output[research.force.name].research or {} + table.remove(force_research, 1) + general.data.output[research.force.name].research = force_research +end) + +Event.add(defines.events.on_research_started, function(evt) + -- move queue up + local research = evt.research + if not general.data.output[research.force.name].research then general.data.output[research.force.name].research = {} end + + local force_research = general.data.output[research.force.name].research or {} + table.remove(force_research, 1) + general.data.output[research.force.name].research = force_research +end) + +Event.on_nth_tick(60, function() + for _, force in pairs(game.forces) do + if not general.data.output[force.name].research then general.data.output[force.name].research = {} end + + local force_research = {} + -- this works even if the queue is disabled, but it will always be just 1 long in that case + for _, research in pairs(force.research_queue) do + table.insert(force_research, { + name = research.name, + level = research.level, + progress = force.get_saved_technology_progress(research) or 0, + }) + end + + general.data.output[force.name].research = force_research + end +end) + +return lib diff --git a/modules/graftorio/general.lua b/modules/graftorio/general.lua new file mode 100644 index 00000000..29c9ca1f --- /dev/null +++ b/modules/graftorio/general.lua @@ -0,0 +1,65 @@ +local Event = require("utils.event") +local Global = require("utils.global") + +local lib = {} + +lib.data = { + output = {} +} + +Global.register(lib.data, function(tbl) + lib.data = tbl +end) + +---@class Statistics +---@field trains TrainStatistics +---@field power PowerStatistics +---@field production ProductionStatistics +---@field robots RobotStatistics +---@field other OtherStatistics + +Event.on_init(function() + ---@type table + lib.data.output = {} + for _, force in pairs(game.forces) do + lib.data.output[force.name] = {} + end +end) + +---@class OtherStatistics +---@field tick uint +---@field evolution EvolutionStatistics +---@field research ResearchStatistics + +---@class EvolutionStatistics +---@field evolution_factor double +---@field evolution_factor_by_pollution double +---@field evolution_factor_by_time double +---@field evolution_factor_by_killing_spawners double + +lib.collect_other = function() + for _, force in pairs(game.forces) do + ---@type OtherStatistics + local other = lib.data.output[force.name].other or {} + + other.evolution = { + evolution_factor = force.evolution_factor, + evolution_factor_by_pollution = force.evolution_factor_by_pollution, + evolution_factor_by_time = force.evolution_factor_by_time, + evolution_factor_by_killing_spawners = force.evolution_factor_by_killing_spawners + } + for k, v in pairs(other) do + lib.data.output[force.name].other[k] = v + end + end +end + +Event.add(defines.events.on_force_created, function(evt) + lib.data.output[evt.force.name] = {} +end) + +Event.add(defines.events.on_forces_merged, function(evt) + lib.data.output[evt.source_name] = nil +end) + +return lib diff --git a/modules/graftorio/require.lua b/modules/graftorio/require.lua new file mode 100644 index 00000000..d4c05257 --- /dev/null +++ b/modules/graftorio/require.lua @@ -0,0 +1,26 @@ +local Commands = require("expcore.commands") +local config = require("config.graftorio") +local statics = require("modules.graftorio.statics") +local forcestats = nil +local general = nil +if config.modules.forcestats then + forcestats = require("modules.graftorio.forcestats") +end +if config.modules.general then + general = require("modules.graftorio.general") +end + +Commands.new_command("collectdata", "Collect data for RCON usage") + :add_param("location", true) + :register(function() + -- this must be first as it overwrites the stats + -- also makes the .other table for all forces + statics.collect_statics() + if config.modules.general then general.collect_other() end + if config.modules.forcestats then + forcestats.collect_production() + forcestats.collect_loginet() + end + rcon.print(game.table_to_json(general.data.output)) + return Commands.success() + end) diff --git a/modules/graftorio/statics.lua b/modules/graftorio/statics.lua new file mode 100644 index 00000000..3f065e47 --- /dev/null +++ b/modules/graftorio/statics.lua @@ -0,0 +1,35 @@ +local general = require("modules.graftorio.general") + +local lib = {} + +---@class StaticStatistics +---@field tick uint +---@field online_players string[] +---@field mods table +---@field seed table + +lib.collect_statics = function() + local stats = {} + stats.tick = game.tick + + stats.online_players = {} + for _, player in pairs(game.connected_players) do + table.insert(stats.online_players, player.name) + end + + stats.mods = {} + for name, version in pairs(game.active_mods) do + stats.mods[name] = version + end + + -- reason behind this is that the map gen settings can be changed during runtime so just get them fresh + stats.seed = {} + for _, surface in pairs(game.surfaces) do + stats.seed[surface.name] = surface.map_gen_settings.seed + end + for _, force in pairs(game.forces) do + general.data.output[force.name].other = stats + end +end + +return lib diff --git a/modules/gui/autofill.lua b/modules/gui/autofill.lua index a3f3598d..8084dfbd 100644 --- a/modules/gui/autofill.lua +++ b/modules/gui/autofill.lua @@ -183,7 +183,7 @@ end) if not value then value = 0 end local clamped = math.clamp(value, 0, 1000) local item_name = element.parent.tooltip - local entity_name = element.parent.parent.parent.parent.name + local entity_name = element.parent.parent.parent.name if not autofill_player_settings[player.name] then return end local setting = autofill_player_settings[player.name][entity_name] if not setting then return end diff --git a/modules/gui/warp-list.lua b/modules/gui/warp-list.lua index e95e4589..9763233f 100644 --- a/modules/gui/warp-list.lua +++ b/modules/gui/warp-list.lua @@ -764,8 +764,8 @@ Event.on_nth_tick(math.floor(60/config.update_smoothing), function() end -- Check if the force has any warps - local closest_warp - local closest_distance + local closest_warp = nil + local closest_distance = nil if #warp_ids > 0 then local surface = player.surface local pos = player.position @@ -794,7 +794,7 @@ Event.on_nth_tick(math.floor(60/config.update_smoothing), function() end -- Check the dist to the closest warp - local in_range = closest_warp.warp_id == warp_ids.spawn and closest_distance < rs2 or closest_distance < r2 + local in_range = closest_warp ~= nil and (closest_warp.warp_id == warp_ids.spawn and closest_distance < rs2 or closest_distance < r2) if was_in_range and not in_range then PlayerInRange:set(player, nil) elseif not was_in_range and in_range then @@ -804,17 +804,16 @@ Event.on_nth_tick(math.floor(60/config.update_smoothing), function() -- Change the enabled state of the add warp button local frame = Gui.get_left_element(player, warp_list_container) local add_warp_element = frame.container.header.alignment[add_new_warp.name] - local old_closest_warp_name = add_warp_element.tooltip[2] or closest_warp.name + local old_closest_warp_name = add_warp_element.tooltip[2] or closest_warp and closest_warp.name local was_able_to_make_warp = add_warp_element.enabled - local can_make_warp = closest_distance > mr2 + local can_make_warp = closest_distance == nil or closest_distance > mr2 if can_make_warp and not was_able_to_make_warp then add_warp_element.enabled = true add_warp_element.tooltip = {'warp-list.add-tooltip'} - elseif not can_make_warp and was_able_to_make_warp or old_closest_warp_name ~= closest_warp.name then + elseif not can_make_warp and was_able_to_make_warp or closest_warp and (old_closest_warp_name ~= closest_warp.name) then add_warp_element.enabled = false add_warp_element.tooltip = {'warp-list.too-close', closest_warp.name} end - end end
    move_items(items[, surface=navies][, position={0][, radius=32][, chest_type=iron-chest])Moves items to the position and stores them in the closest entity of the type givencopy_items_stack(items[, surface=navies][, position={0][, radius=32][, chest_type=iron-chest])Copies items to the position and stores them in the closest entity of the type given +-- Copies the items by prototype name, but keeps them in the original inventory
    move_items_stack(items[, surface=navies][, position={0][, radius=32][, chest_type=iron-chest])Moves items to the position and stores them in the closest entity of the type given +-- Differs from move_items by accepting a table of LuaItemStack and transferring them into the inventory - not copying
    print_grid_value(value, surface, position[, scale=1][, offset=0][, immutable=false]) Makes markers on the map where places have died and reclaims items if not recovered
    DeconlogLog certain actions into a file when events are triggered
    Discord-Alerts Sends alert messages to our discord server when certain events are triggered
    FAGCAllows the FAGC clientside bot to receive information about bans and unbans and propagate that information to other servers
    Inventory-Clear Will move players items to spawn when they are banned or kicked, option to clear on leave
    NukeprotectDisable new players from having certain items in their inventory, most commonly nukes
    Pollution-Grading Makes polution look much nice of the map, ie not one big red mess
    This config controls what happens when a player dies mostly about map markers and item collection; allow_teleport_to_body_command and allow_collect_bodies_command can be over ridden if command_auth_runtime_disable is present; if not present then the commands will not be loaded into the game
    DeconlogThis config controls whether actions such as deconning by players without sufficient permissions is logged or not
    Discord-Alerts