]> git.somenet.org - factorio/some-luaconsole.git/blob - control.lua
RELEASE 2.0.4 - GUI reworked. Now shows currently configured key bindings
[factorio/some-luaconsole.git] / control.lua
1 function exec_command(player)
2     if not player.admin then
3         player.print('You are not an admin. You may not use this mod. :(')
4         return
5     end
6
7     local f, lserr, pcs, pcerr, cmd
8
9     if player.gui.screen.some_luaconsole then
10         storage.cmd = player.gui.screen.some_luaconsole.input.text
11     end
12
13     cmd = storage.cmd or ""
14     cmd = cmd:gsub('game%.player([^s])', 'game.players['..player.index..']%1')
15
16     f, lserr = loadstring('local ipcs,ipcr ipcs,ipcr=pcall(function() '..cmd..' end) if not ipcs then game.players['..player.index..'].print(ipcr) end')
17     if not f then
18         f, lserr = loadstring('game.players['..player.index..'].print('..cmd..')')
19     end
20
21     if f then
22         pcs, pcerr = pcall(f)
23         if not pcs then
24             player.print(pcerr:sub(1, pcerr:find('\n')))
25         end
26     else
27         player.print(lserr:sub(1, lserr:find('\n')))
28     end
29 end
30
31
32 function toggleGui (player)
33     if player.gui.screen.some_luaconsole then
34         storage.cmd = player.gui.screen.some_luaconsole.input.text
35         player.gui.screen.some_luaconsole.destroy()
36     else
37         frame = player.gui.screen.add{type = 'frame', name = 'some_luaconsole', direction = 'vertical'}
38
39         local title_flow = frame.add{type = "flow", direction = "horizontal"}
40         title_flow.style.horizontally_stretchable = true
41         title_flow.style.horizontal_spacing = 8
42
43         local title_label = title_flow.add{type = 'label', caption = {'some-luaconsole.title'}, style = "frame_title"}
44         title_label.drag_target = frame
45
46         local title_pusher = title_flow.add{type = "empty-widget", style = "draggable_space_header"}
47         title_pusher.style.height = 24
48         title_pusher.style.horizontally_stretchable = true
49         title_pusher.drag_target = frame
50
51         local title_close_button = title_flow.add{type = "sprite-button", style = "frame_action_button", sprite = "utility/close", name = 'some-luaconsole-close', tooltip = {'some-luaconsole.close_tooltip'}}
52
53
54         frame.add{type = 'label', caption = {'some-luaconsole.inputlabel'}, style = "frame_title"}
55
56
57         local input = frame.add{type = 'text-box', name = 'input', style='some-luaconsole-input-textbox', enabled = admin}
58         input.word_wrap = true
59         input.style.maximal_height = (player.display_resolution.height/player.display_scale*0.6)
60         input.text = storage.cmd or ""
61
62
63         bottom_flow = frame.add{type='flow', direction='horizontal'}
64         bottom_flow.style.horizontally_stretchable = true
65
66         bottom_flow.add{type = 'button',
67             name = 'some-luaconsole-close',
68             style='back_button',
69             caption = {'some-luaconsole.close'},
70             tooltip = {'some-luaconsole.close_tooltip'}
71         }
72         bottom_pusher = bottom_flow.add{type = "empty-widget", style = "draggable_space_header"}
73         bottom_pusher.style.height = 24
74         bottom_pusher.style.horizontally_stretchable = true
75         bottom_pusher.drag_target = frame
76
77         bottom_flow.add{type = 'button',
78             name = 'some-luaconsole-exec',
79             style='confirm_button',
80             caption = {'some-luaconsole.exec'},
81             tooltip = {'some-luaconsole.exec_tooltip'},
82             enabled = admin
83         }
84
85
86         if not player.admin then
87             player.gui.screen.some_luaconsole.input.text = 'You are not an admin. You may not use this mod. :('
88             player.gui.screen.some_luaconsole.input.enabled = false
89         end
90         frame.force_auto_center()
91     end
92 end
93
94
95
96 script.on_event(defines.events.on_gui_click, function(event)
97     if event.element.name == 'some-luaconsole-exec' then
98         exec_command(game.players[event.player_index])
99     elseif event.element.name == 'some-luaconsole-close' then
100         toggleGui(game.players[event.player_index])
101     end
102 end)
103
104
105 script.on_event('some-luaconsole-toggle', function(event)
106     toggleGui(game.players[event.player_index])
107 end)
108 script.on_event('some-luaconsole-exec', function(event)
109     exec_command(game.players[event.player_index])
110 end)