View difference between Paste ID: 41scvhe7 and esZ0Xvhx
SHOW: | | - or go back to the newest paste.
1
--[[ ICBM missile control panel by LuaCrawler
2
This goes with the door and launch controller for it to work.
3
4
for automatic load change the name of the file to startup and remove the extension.
5
@Version: 2.0.0
6
]]
7
-- License
8
--[[
9
    ICBM control panel. Launches missiles remotely using player commands. Will have more feature in the future
10
    Copyright (C) 2014  LuaCrawler
11
12
    This program is free software: you can redistribute it and/or modify
13
    it under the terms of the GNU General Public License as published by
14
    the Free Software Foundation, either version 3 of the License, or
15
    any later version.
16
17
    This program is distributed in the hope that it will be useful,
18
    but WITHOUT ANY WARRANTY; without even the implied warranty of
19
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
20
    GNU General Public License for more details.
21
22
    You should have received a copy of the GNU General Public License
23
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
24
]]
25
26
-- Variables
27
local delay = 5
28
local modem = peripheral.wrap("top")
29
30
local server = 10
31
32
local Chan = tonumber(os.getComputerID())
33
34
local rChan = tonumber(os.getComputerID())
35
36
-- Users table
37
local users = {
38
    ["Admin"] = {["password"] = "password", ["permissions"] = "admin"},
39
}
40
41
local logo = {
42
43
44
}
45
46
local commands = {
47
    ["Add User"] = "Adds a user with permission. You must be a moderator or admin to add the user",
48
    ["Remove User"] = "Removes user. Must have moderator or admin privilages.",
49
    ["Launch missile"] = "Activates launch handle system,",
50
    ["open door"] = "Opens launch bay doors.",
51
    ["close door"] = "Closes launch bay doors.",
52
}
53
54
----------------------------------------------------------
55
56
-- Startup Function
57
local function startup()
58
    term.clear()
59
    term.setCursorPos(1,1)
60
    term.setCursorPos(18,8)
61
    term.setTextColor(colors.lime)
62
    print("MissileCraft 1.04")
63
    term.setCursorPos(18,9)
64
    print("'Speedy Skeleton'")
65
    sleep(5)
66
    term.clear()
67
    term.setCursorPos(1,1)
68
    term.setTextColor(colors.white)
69
70
    modem.open( Chan )
71
        
72
73
    term.setBackgroundColor(colors.black)
74
    modem.open(tonumber(os.getComputerID()))
75
    file = fs.open("/.users", "r")
76
    dataT = file.readAll()
77
    data = textutils.unserialize(dataT)
78
    file.close()
79
    users = data      
80
81
end
82
----------------------------------------------------------
83
local function checkUNamePasswd()
84
    local uName
85
    while (not users[uName]) or users[uName].password ~= passwd do
86
        term.clear()
87
        term.setCursorPos(1, 1)
88
        textutils.slowPrint("Enter username:", 25)
89
        local uName = read()
90
-- Now check store password as variable
91
        term.clear()
92
        term.setCursorPos(1, 1)
93
        textutils.slowPrint("Enter your password:", 25)
94
        local passwd = read()
95
        if (not users[uName]) or users[uName].password ~= passwd then
96
            term.clear()
97
            term.setCursorPos(1, 1)
98
            term.setTextColor(colors.red)
99
            textutils.slowPrint("Incorrect password! Please try again.", 50)
100
            term.setTextColor(colors.white)
101
            print("")
102
        else
103
            break
104
        end
105
    end
106
end
107
----------------------------------------------------------
108
local function checkUsrNamePerm()
109
    local uName
110
    while (not users[uName]) or (users[uName].permissions ~= "admin" and users[uName].permissions ~= "moderator") do
111
        term.clear()
112
        term.setCursorPos(1, 1)
113
        textutils.slowPrint("Enter username for verification", 25)
114
        uName = read()
115
        if (not users[uName]) or (users[uName].permissions ~= "admin" and users[uName].permissions ~= "moderator") then
116
            print("You don't have enough permissions! Please try again.")
117
        else
118
            break
119
        end
120
    end
121
end
122
----------------------------------------------------------
123
local function save(table,users)
124
    local file = fs.open(".users", "w")
125
    file.write(textutils.serialize(users))
126
    file.close()
127
end
128
----------------------------------------------------------
129
local function addUsr(Name, password, permissions)
130
    users[Name] = {}
131
    users[Name].password = password
132
    users[Name].permissions = permissions
133
    save(users, users)
134
end
135
----------------------------------------------------------
136
local bar = LoadBar.init(LoadBar.ASCII_BAR_ONLY, nil, 10, 30, 14, nil, nil, nil, nil )
137
local function doStuff()
138
    bar:setMessage( "Loading..." )
139
    for i = 1, 9 do
140
        sleep(0.5)
141
        bar:triggerUpdate("Initializing component("..(bar:getCurrentProgress()+1).."/9)")
142
    end
143
    bar:triggerUpdate("Done!")
144
end
145
----------------------------------------------------------
146
local function doBar()
147
    bar:run( true )
148
end
149
----------------------------------------------------------
150
local function missile_launch()
151
    -- Code here...
152
     os.loadAPI("/lib/LoadBar")
153
    
154
    -- Run the loading bar
155
    parallel.waitForAll( doBar, doStuff )
156
    term.clear()
157
    term.setBackgroundColor(colors.gray)
158
    term.setCursorPos(1, 1)
159
    for i = 1, 19 do
160
        print("                                                      ")
161
    end
162
    term.setTextColor(colors.yellow)
163
    term.setCursorPos(1, 1)
164
    textutils.slowPrint("Remote missile launch system" )
165
    textutils.slowPrint("Usage: launch <label>", 50)
166
    term.setTextColor(colors.white)
167
    lSilo = read()
168
    print("Confirm launch![Y/N]")
169
    _, char = os.pullEvent("char")
170
    if char == "y" then
171
        modem.transmit(server, rChan, lSilo)
172
    elseif char == "n" then
173
        do main_CLI() end
174
    end
175
end
176
----------------------------------------------------------
177
local function addUser_CLI()
178
    -- Code here...
179
    term.clear()
180
    term.setCursorPos(1, 1)
181
    print("User addition system")
182
    print("Press enter to continue")
183
    os.pullEvent("key")
184
    textutils.slowPrint("What should the user's username be?", 50)
185
    local name = read()
186
    print("What would you like "..name.."'s password to be?")
187
    local passwd = read()
188
    print("What permissions should user "..name.." have?")
189
    local perms = read()
190
    for i = 1,10 do
191
        term.setCursorPos(18, 30)
192
        sleep(.3)
193
    end
194
    addUsr(name, passwd, perms)
195
    save(users,users)
196
    print("User created!")
197
end
198
----------------------------------------------------------
199
local function removeUser(usr)
200
    -- Code here...
201
    users[usr].password = nil
202
    users[usr].permissions = nil
203
    users[usr] = nil
204
end
205
----------------------------------------------------------
206
local function removeUser_CLI()
207
    -- Code here...
208
    term.clear()
209
    term.setCursorPos(1, 1)
210
    print("User removal system")
211
    print("Please type the name of the user you want to remove")
212
    local uName = read()
213
    removeUser(uName)
214
    print("User removed!")
215
end
216-
---------------------------------------------------------
216+
217-
local function checkLoadbarLib()
217+
218-
    f = fs.exists("/lib/loadBar")
218+
219-
    if f == true then
219+
220-
  	break
220+
221-
    elseif f == false then
221+
222-
	fs.makeDir("/lib")
222+
223-
	shell.run("pastebin","get","zeG34tu6","LoadBar")
223+
224-
	fs.move("LoadBar", "/lib/LoadBar")
224+
225
        end
226
    end
227-
checkLoadbarLib()
227+
228
----------------------------------------------------------
229
local function main_CLI()
230
    -- Code here...
231
    term.clear()
232
    term.setCursorPos(1, 1)
233
    print("CCMC CLI")
234
    print("Type help for more info.")
235
    local cmd = read()
236
    if cmd == "help" then
237
        print("All commands are lowercase.")
238
        for _, v in pairs(commands) do
239
            print(_..":"..v)
240
        end
241
    elseif cmd == "exit" or cmd == "quit" then
242
        return
243
    end
244
    if cmd == "launch missile" then
245
        missile_launch()
246
    end
247
    if cmd == "add user" then
248
        checkUsrNamePerm()
249
        addUser_CLI()
250
    elseif cmd == "remove user" then
251
        checkUsrNamePerm()
252
        removeUser_CLI()
253
    end
254
    restart()
255
end
256
----------------------------------------------------------
257
258
startup()
259
checkUNamePasswd()
260
main_CLI()