View difference between Paste ID: JvtPCjiC and HmRMny7b
SHOW: | | - or go back to the newest paste.
1
Style = {
2
 CDeflt = colors.white,
3
 BGDeflt = colors.blue,
4
 CTitle = colors.black,
5
 BGTitle = colors.cyan,
6
 CWarn = colors.white,
7
 BGWarn = colors.red
8
}
9
10
function SetColorDeflt()
11
 term.setBackgroundColor(Style.BGDeflt)
12
 term.setTextColor(Style.CDeflt)
13
end
14
15
function SetColorTitle()
16
 term.setBackgroundColor(Style.BGTitle)
17
 term.setTextColor(Style.CTitle)
18
end
19
20
function SetColorWarn()
21
 term.setBackgroundColor(Style.BGWarn)
22
 term.setTextColor(Style.CWarn)
23
end
24
25
function Clear()
26
 term.clear()
27
 term.setCursorPos(1,1)
28
end
29
30
function Show(Text)
31
 term.write(Text)
32
 local xt,yt = term.getCursorPos()
33
 term.setCursorPos(1, yt+1)
34
end
35
36
function ShowTitle(Text)
37
 SetColorTitle()
38
 term.setCursorPos(12, 1)
39
 Show(Text)
40
 SetColorDeflt()
41
end
42
43
function ShowMenu(Text)
44
 term.write(Text)
45
 local xt, yt = term.getCursorPos()
46
 for i = xt, 51 do
47
  term.write(" ")
48
 end
49
 term.setCursorPos(1, yt+1)
50
end
51
52
function ShowWarning(Text)
53
  SetColorWarn()
54
  term.setCursorPos(10, 19)
55
  term.write(" "..Text.." ")
56
  SetColorDeflt()
57
end
58
59
function SaveData()
60
 local file = fs.open("shipdata.txt", "w")
61
 file.writeLine(textutils.serialize(SData))
62
 file.close()
63
end
64
65
function ReadData()
66
 local file = fs.open("shipdata.txt", "r")
67
 SData = textutils.unserialize(file.readAll())
68
 file.close()
69
end
70
71
function Explode(d, p)
72
 local t, ll
73
 t = {}
74
 ll = 0
75
 if(#p == 1) then return {p} end
76
 while true do
77
  l = string.find(p ,d, ll, true)
78
  if l ~= nil then 
79
   table.insert(t, string.sub(p, ll, l-1))
80
   ll = l+1
81
  else
82
   table.insert(t, string.sub(p, ll))
83
   break
84
  end
85
 end
86
 return t
87
end
88
89
function ShowDirection()
90
 if SData.Direction == 1 then
91
  Show(" Direction        = Up")
92
 elseif SData.Direction == 2 then
93
  Show(" Direction        = Down")
94
 elseif SData.Direction == 0 then
95
  Show(" Direction        = Front")
96
 elseif SData.Direction == 180 then
97
  Show(" Direction        = Back")
98
 elseif SData.Direction == 90 then
99
  Show(" Direction        = Left")
100
 elseif SData.Direction == 255 then
101
  Show(" Direction        = Right")
102
 end
103
end
104
105
function CalcRealDistance()
106
 if IsInHyper then
107
  RealDistance = SData.Distance * 100
108
  MinimumDistance = 1
109
  JumpCost = (1000 * Weight) + (1000 * SData.Distance)
110
 else
111
  if SData.Direction == 1 or SData.Direction == 2 then
112-
   MinimumDistance = GUp + GDown
112+
   MinimumDistance = GUp + GDown   RealDistance = SData.Distance + MinimumDistance
113
114
  elseif SData.Direction == 0 or SData.Direction == 180 then
115
   MinimumDistance = GFront + GBack
116
   RealDistance = SData.Distance + MinimumDistance
117
  elseif SData.Direction == 90 or SData.Direction == 255 then
118
   MinimumDistance = GLeft + GRight
119
   RealDistance = SData.Distance + MinimumDistance
120
  end
121
  MinimumDistance = MinimumDistance + 1
122
  JumpCost = (10 * Weight) + (100 * SData.Distance)
123
 end
124
end
125
126
function CalcNewCoords(cx, cy, cz)
127
 local res = {x=cx, y=cy, z=cz}
128
 if SData.Direction == 1 then
129
  res.y = res.y + RealDistance
130
 elseif SData.Direction == 2 then
131
  res.y = res.y - RealDistance
132
 end
133
 local dx = warp.get_dx()
134
 local dz = warp.get_dz()
135
 if dx ~= 0 then
136
  if SData.Direction == 0 then
137
   res.x = res.x + (RealDistance * dx)
138
  elseif SData.Direction == 180 then
139
   res.x = res.x - (RealDistance * dx)
140
  elseif SData.Direction == 90 then
141
   res.z = res.z + (RealDistance * dx)
142
  elseif SData.Direction == 255 then
143
   res.z = res.z - (RealDistance * dx)
144
  end
145
 else
146
  if SData.Direction == 0 then
147
   res.z = res.z + (RealDistance * dz)
148
  elseif SData.Direction == 180 then
149
   res.z = res.z - (RealDistance * dz)
150
  elseif SData.Direction == 90 then
151
   res.x = res.x + (RealDistance * dz)
152
  elseif SData.Direction == 255 then
153
   res.x = res.x - (RealDistance * dz)
154
  end
155
 end
156
 return res
157
end
158
159
function ShowInfo()
160
 ShowTitle(Title)
161-
 Show("Core:")
161+
162-
 Show(" x, y, z          = "..X..", "..Y..", "..Z)
162+
163-
 local energy = warp.get_energy_level()
163+
164-
 Show(" Energy           = "..math.floor(energy / 1000000).." % ("..energy.."EU)")
164+
165-
 Show(" Attached players = "..warp.get_attached_players())
165+
166-
 Show("Dimensions:")
166+
167-
 Show(" Front, Right, Up = "..GFront..", "..GRight..", "..GUp)
167+
168-
 Show(" Back, Left, Down = "..GBack..", "..GLeft..", "..GDown)
168+
169-
 Show(" Size             = "..Weight.." blocks")
169+
170-
 Show("Warp data:")
170+
171-
 ShowDirection()
171+
172-
 local dest = CalcNewCoords(X, Y, Z)
172+
173-
 Show(" Distance         = "..RealDistance.." ("..JumpCost.."EU, "..math.floor(energy/JumpCost).." jumps)")
173+
174-
 Show(" Dest.coordinates = "..dest.x..", "..dest.y..", "..dest.z)
174+
175-
 if SData.Summon then
175+
176-
  Show(" Summon after     = Yes")
176+
177
 rs.setOutput(Alarm, false)
178
 sleep(1)
179
 warp.set_direction(SData.Direction)
180
 if IsInHyper then
181
  warp.set_mode(2)
182
 else
183
  warp.set_mode(1)
184
 end
185
 warp.do_jump()
186
end
187
188
function SetDistance()
189
 Clear()
190
 ShowTitle("<====  Set distance  ====>")
191
 SData.Distance = 0
192
 CalcRealDistance()
193
 MaximumDistance = MinimumDistance + 127
194
 if IsInHyper then
195
  term.write("Distance * 100 (min "..MinimumDistance..", max "..MaximumDistance.."): ")
196
 else
197
  term.write("Distance (min "..MinimumDistance..", max "..MaximumDistance.."): ")
198
 end
199
 sleep(0.3)
200
 SData.Distance = tonumber(read())
201
 if SData.Distance == nil then SData.Distance = 1 end
202
 if SData.Distance < MinimumDistance or SData.Distance > MaximumDistance then
203
  SData.Distance = 1
204
  ShowWarning("Wrong distance. Try again.")
205
  os.pullEvent("key")
206
  CalcRealDistance()
207
 else
208
  if not IsInHyper then
209
   SData.Distance = SData.Distance - RealDistance
210
  end
211
  warp.set_distance(SData.Distance)
212
  CalcRealDistance()
213
 end
214
end
215
216
function SetDirection()
217
 local drun = true
218
 while(drun) do
219
  Clear()
220
  ShowTitle("<==== Set direction ====>")
221
  ShowDirection()
222
  term.setCursorPos(1, 16)
223
  SetColorTitle()
224
  ShowMenu("Use directional keys")
225
  ShowMenu("W/S keys for Up/Down")
226
  ShowMenu("Enter - confirm")
227
  SetColorDeflt()
228
  local event, keycode = os.pullEvent("key")
229
  if keycode == 200 then
230
   SData.Direction = 0
231
  elseif keycode == 17 then
232
   SData.Direction = 1
233
  elseif keycode == 203 then
234
   SData.Direction = 90
235
  elseif keycode == 205 then
236
   SData.Direction = 255
237
  elseif keycode == 208 then
238
   SData.Direction = 180
239
  elseif keycode == 31 then
240
   SData.Direction = 2
241
  elseif keycode == 28 then
242
   drun = false
243
  end
244
 end
245
end
246
247
function SetDimensions()
248
 Clear()
249
 sleep(0.3)
250
 ShowTitle("<==== Set dimensions ====>")
251
 term.write(" Front ("..GFront..") : ")
252
 GFront = tonumber(read())
253
 term.write(" Right ("..GRight..") : ")
254
 GRight = tonumber(read())
255
 term.write(" Up    ("..GUp..") : ")
256
 GUp = tonumber(read())
257
 term.write(" Back  ("..GBack..") : ")
258
 GBack = tonumber(read())
259
 term.write(" Left  ("..GLeft..") : ")
260
 GLeft = tonumber(read())
261
 term.write(" Down  ("..GDown..") : ")
262
 GDown = tonumber(read())
263
 term.write("Setting dimensions...")
264
 warp.dim_setp(GFront, GRight, GUp)
265
 warp.dim_setn(GBack, GLeft, GDown)
266
end
267
268
function Summon()
269
 Clear()
270
 ShowTitle("<==== Summon players ====>")
271
 local players = Explode(",", warp.get_attached_players())
272
 for i = 1, #players do
273
  Show(i..". "..players[i])
274
 end
275
 SetColorTitle()
276
 ShowMenu("Enter player number")
277
 ShowMenu("or press enter to summon everyone")
278
 SetColorDeflt()
279
 sleep(0.3)
280
 term.write(":")
281
 local input = read()
282
 if input == "" then
283
  warp.summon_all()
284
 else
285
  input = tonumber(input)
286
  warp.summon(input - 1)
287
 end
288
end
289
290
function JumpToBeacon()
291
 Clear()
292
 ShowTitle("<==== Jump to beacon ====>")
293
 sleep(0.3)
294
 term.write("Enter beacon frequency: ")
295
 local freq = tostring(read())
296
 rs.setOutput(Alarm, true)
297
 if Confirm() then
298
  rs.setOutput(Alarm, false)
299
  warp.set_mode(4)
300
  warp.set_beacon_frequency(freq)
301
  warp.do_jump()
302
 end
303
 rs.setOutput(Alarm, false)
304
end
305
306
function JumpToGate()
307
 Clear()
308
 ShowTitle("<==== Jump to JumpGate ====>")
309
 sleep(0.3)
310
 term.write("Enter jumpgate name: ")
311
 local name = tostring(read())
312
 rs.setOutput(Alarm, true)
313
 if Confirm() then
314
  rs.setOutput(Alarm, false)
315
  warp.set_mode(6)
316
  warp.set_target_jumpgate(name)
317
  warp.do_jump()
318
 end
319
 rs.setOutput(Alarm, false)
320
end
321
322
function SetShipName()
323
 Clear()
324
 ShowTitle("<==== Set ship name ====>")
325
 sleep(0.3)
326
 term.write("Enter ship name: ")
327
 SData.Shipname = tostring(read())
328
 os.setComputerLabel(SData.Shipname)
329
 SaveData()
330
 os.reboot()
331
end
332
333
if fs.exists("shipdata.txt") then
334
 ReadData()
335
else
336
 SData = {
337
  Summon = false,
338
  Distance = 1,
339
  Direction = 0,
340
  Shipname = ""
341
 }
342
end
343
344
SetColorDeflt()
345
346
Side = { "bottom", "top", "back", "left", "right" }
347
for i = 1,5 do  
348
 end
349
end
350
351
if SData.Shipname == "" then
352
 SetShipName()
353
end
354
355
Title = "<Jump-S 1.6.1 \""..SData.Shipname.."\">"
356
357
if SData.Summon then
358
 warp.summon_all()
359
end
360
361
GFront, GRight, GUp = warp.dim_getp()
362
GBack, GLeft, GDown = warp.dim_getn()
363-
for i = 1,5 do
363+
364-
 if peripheral.getType(Side[i]) == "warpcore" then
364+
365-
  warp = peripheral.wrap(Side[i])
365+
366-
  break
366+
367
until X ~= nil
368
Y = warp.get_y()
369
Z = warp.get_z()
370
Weight = warp.get_ship_size()
371
372
CalcRealDistance()
373
374
warp.set_mode(1)
375
376
mainloop = true
377
while(mainloop) do
378
 Clear()
379
 ShowInfo()
380
 term.setCursorPos(1, 15)
381
 SetColorTitle()
382
 ShowMenu("D - Dimensions, M - Toggle summon, N - Ship name")
383
 ShowMenu("S - Set Warp Data, J - Jump, G - Jump to JumpGate")
384
 ShowMenu("B - Jump to Beacon, H -Jump to Hyperspace")
385
 ShowMenu("C - Summon, X - Shutdown WarpCore and Exit")
386
 SetColorDeflt()
387
 local event, keycode = os.pullEvent("key")
388
 if keycode == 31 then
389
  SetDirection()
390
  SetDistance()
391
  SaveData()
392
 elseif keycode == 50 then
393
  if SData.Summon then
394
   SData.Summon = false
395
  else
396
   SData.Summon = true
397
  end
398
  SaveData()
399
 elseif keycode == 32 then
400
  SetDimensions()
401
  SaveData()
402
 elseif keycode == 36 then
403
  rs.setOutput(Alarm, true)
404
  if Confirm() then
405
   Warp()
406
  end
407
  rs.setOutput(Alarm, false)
408
 elseif keycode == 46 then
409
  Summon()
410
 elseif keycode == 48 then
411
  JumpToBeacon()
412
 elseif keycode == 34 then
413
  JumpToGate()
414
 elseif keycode == 35 then
415
  rs.setOutput(Alarm, true)
416
  if Confirm() then
417
   rs.setOutput(Alarm, false)
418
   warp.set_mode(5)
419
   warp.do_jump()
420
  end
421
  rs.setOutput(Alarm, false)
422
 elseif keycode == 45 then
423
  mainloop = false
424
 elseif keycode == 49 then
425
  SetShipName()
426
 end
427
end
428
429
if SData.Summon then
430
 SData.Summon = false
431
 SaveData()
432
end
433
Clear()
434
print("wish you good")
435
warp.set_mode(0)
436
sleep(0.5)
437
os.shutdown()