z_mirror/EditorExtensions
git clone https://git.raiguard.me/z_mirror/EditorExtensions
2c4827c
trunk
1local flib_array =require ( "__flib__.array" ) 2local util =require ( "scripts.util" ) 3 4local character_modifiers ={ 5character_build_distance_bonus =1000000 , 6character_mining_speed_modifier =2 , 7character_reach_distance_bonus =1000000 , 8character_resource_reach_distance_bonus =1000000 , 9} 10 11local equipment_to_add ={ 12{ name ="ee-infinity-fission-reactor-equipment" , position ={ 0 , 0 } } , 13{ name ="ee-super-personal-roboport-equipment" , position ={ 1 , 0 } } , 14{ name ="ee-super-exoskeleton-equipment" , position ={ 2 , 0 } } , 15{ name ="ee-super-exoskeleton-equipment" , position ={ 3 , 0 } } , 16{ name ="ee-super-energy-shield-equipment" , position ={ 4 , 0 } } , 17{ name ="ee-super-night-vision-equipment" , position ={ 5 , 0 } } , 18{ name ="ee-super-battery-equipment" , position ={ 6 , 0 } } , 19{ name ="belt-immunity-equipment" , position ={ 7 , 0 } } , 20} 21 22local items_to_add ={ 23{ name ="ee-infinity-accumulator" , count =50 } , 24{ name ="ee-infinity-chest" , count =50 } , 25{ name ="ee-super-construction-robot" , count =100 } , 26{ name ="ee-super-inserter" , count =50 } , 27{ name ="ee-infinity-loader" , count =50 } , 28{ name ="ee-infinity-pipe" , count =50 } , 29{ name ="ee-super-substation" , count =50 } , 30} 31 32local items_to_remove ={ 33{ name ="express-loader" , count =50 } , 34{ name ="bulk-inserter" , count =50 } , 35{ name ="substation" , count =50 } , 36{ name ="construction-robot" , count =100 } , 37{ name ="electric-energy-interface" , count =1 } , 38{ name ="infinity-chest" , count =20 } , 39{ name ="infinity-pipe" , count =10 } , 40{ name ="linked-chest" , count =10 } , 41} 42 43--- @param inventory LuaInventory? 44local function set_armor ( inventory ) 45if not inventory or not inventory . valid then 46return 47end 48inventory [ 1 ]. set_stack ( { name =script . active_mods [ "space-age" ] and "mech-armor" or "power-armor-mk2" } ) 49local grid =inventory [ 1 ]. grid 50if not grid then 51return 52end 53for i =1 , # equipment_to_add do 54grid . put ( equipment_to_add [ i ]) 55end 56end 57 58--- @param player LuaPlayer 59local function set_character_cheats ( player ) 60if player . character_reach_distance_bonus >= 1000000 then 61return 62end 63local character =player . character 64if not character or not character . valid then 65return 66end 67for modifier , amount in pairs ( character_modifiers ) do 68character [ modifier ] =character [ modifier ] + amount 69end 70end 71 72--- @param player LuaPlayer 73local function set_loadout ( player ) 74-- Remove default items 75local main_inventory =player . get_main_inventory () 76if not main_inventory then 77return 78end 79local items_to_remove =items_to_remove 80for i =1 , # items_to_remove do 81main_inventory . remove ( items_to_remove [ i ]) 82end 83-- Add custom items 84local items_to_add =items_to_add 85for i =1 , # items_to_add do 86main_inventory . insert ( items_to_add [ i ]) 87end 88if player . controller_type == defines . controllers . character then 89set_armor ( player . get_inventory ( defines . inventory . character_armor )) 90set_character_cheats ( player ) 91elseif player . controller_type == defines . controllers . editor then 92set_armor ( player . get_inventory ( defines . inventory . editor_armor )) 93end 94end 95 96--- @param force LuaForce 97local function disable_recipes ( force ) 98for _ , recipe in pairs ( force . recipes ) do 99if flib_array . contains ( recipe . categories , "ee-testing-tool" ) then 100recipe . enabled =false 101end 102end 103end 104 105--- @param force LuaForce 106local function enable_recipes ( force ) 107for _ , recipe in pairs ( force . recipes ) do 108if flib_array . contains ( recipe . categories , "ee-testing-tool" ) then 109recipe . enabled =true 110end 111end 112for _ , player in pairs ( force . players ) do 113player . clear_recipe_notifications () 114end 115end 116 117--- @param e EventData.on_console_command 118local function on_console_command ( e ) 119if e . command ~= "cheat" or not game . console_command_used then 120return 121end 122local player =game . get_player ( e . player_index ) 123if not player or not player . valid then 124return 125end 126if e . parameters == "all" then 127set_loadout ( player ) 128end 129enable_recipes ( player . force --[[@as LuaForce]] ) 130if game . is_multiplayer () then 131player . force . ( { "message.ee-tools-enabled" , player . name } ) 132end 133end 134 135--- @param e EventData.on_player_created 136local function on_player_created ( e ) 137local player =game . get_player ( e . player_index ) 138if not player then 139return 140end 141if util . in_debug_world () or util . in_testing_scenario () then 142set_loadout ( player ) 143enable_recipes ( player . force --[[@as LuaForce]] ) 144end 145end 146 147--- @param e EventData.on_player_toggled_map_editor 148local function on_player_toggled_map_editor ( e ) 149local player =game . get_player ( e . player_index ) 150if not player or not player . cheat_mode or player . controller_type ~= defines . controllers . character then 151return 152end 153set_character_cheats ( player ) 154end 155 156local cheat_mode ={} 157 158function cheat_mode . on_configuration_changed () 159for _ , force in pairs ( game . forces ) do 160for _ , player in pairs ( force . players ) do 161if player . cheat_mode then 162enable_recipes ( force ) 163break 164end 165end 166end 167end 168 169cheat_mode . events ={ 170[ defines . events . on_console_command ] =on_console_command , 171[ defines . events . on_player_created ] =on_player_created , 172[ defines . events . on_player_toggled_map_editor ] =on_player_toggled_map_editor , 173} 174 175cheat_mode . add_remote_interface =function () 176remote . add_interface ( "ee_cheat_mode" , { 177--- @param force LuaForce 178disable_testing_recipes =function ( force ) 179disable_recipes ( force ) 180end , 181--- @param force LuaForce 182enable_testing_recipes =function ( force ) 183enable_recipes ( force ) 184end , 185} ) 186end 187 188return cheat_mode