Advertisement
samuelask

Hiddengate

Dec 12th, 2024 (edited)
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 19.26 KB | None | 0 0
  1. local term = require("term")
  2. local component = require("component")
  3. local modem = component.modem
  4. local reds = component.redstone
  5. local sg = component.stargate
  6. local zpm = component.zpmhub
  7. local sides = require("sides")
  8. local colors = require("colors")
  9. local port = 1234
  10. local asd = 1
  11. local IDC = "1337"
  12. local event = require("event")
  13. local os = require("os")
  14. local computer = require("computer")
  15. local serialization = require("serialization")
  16. local debug_card = component.debug
  17.  
  18. -- Mapping of color codes to their human-readable names
  19. local color_names = {
  20. [colors.red] = "red",
  21. [colors.green] = "green",
  22. [colors.yellow] = "yellow",
  23. [colors.blue] = "blue"
  24. }
  25. local available_colors = {colors.red, colors.green, colors.yellow, colors.blue}
  26.  
  27. -- Game settings
  28. local max_levels = 7 -- Total levels in the game
  29. local sequence = {} -- The sequence of colors for the current game
  30. local player_input = {} -- Tracks the player's input
  31. local gamenumber = 0 -- Current level of the game
  32. local is_game_over = false -- Game over flag
  33.  
  34. -- Function to generate a random color sequence
  35. local function generate_sequence(levels)
  36. local available_colors = {colors.red, colors.green, colors.yellow, colors.blue}
  37. local sequence = {}
  38.  
  39. if not levels or levels <= 0 then
  40. error("Invalid level count for sequence generation!")
  41. end
  42.  
  43. for i = 1, levels do
  44. local color = available_colors[math.random(#available_colors)]
  45. if not color then
  46. error("Failed to pick a random color! Check available_colors.")
  47. end
  48. sequence[#sequence + 1] = color
  49. end
  50.  
  51. -- Debug: Print the generated sequence
  52. print("Generated sequence:", serialization.serialize(sequence))
  53. return sequence
  54. end
  55.  
  56. local function play_sequence(level)
  57. if not sequence or #sequence == 0 then
  58. error("Sequence is not initialized!")
  59. end
  60. print("Playing color sequence for level:", level)
  61. for i = 1, level do
  62. local color = sequence[i]
  63. if not color then
  64. error("Color at position " .. i .. " is nil!")
  65. end
  66. print("Activating color:", color_names[color] or ("unknown color code: " .. color))
  67. -- Turn on the current color
  68. reds.setBundledOutput(sides.south, color, 255)
  69. os.sleep(0.5)
  70. -- Turn off the current color
  71. reds.setBundledOutput(sides.south, color, 0)
  72. os.sleep(0.5)
  73. end
  74. print("Sequence complete!")
  75. end
  76.  
  77. -- Function to reset the game
  78. local function reset_game()
  79. print("Incorrect input! Resetting game...")
  80. gamenumber = 0
  81. sequence = generate_sequence(max_levels) -- Generate a new sequence for the new game
  82. is_game_over = true -- Indicate that the game should restart
  83. end
  84.  
  85. local function startup_light_sequence()
  86. local startup_colors = {colors.green, colors.red, colors.yellow, colors.blue}
  87. for _, color in ipairs(startup_colors) do
  88. reds.setBundledOutput(sides.south, color, 255) -- Turn on the signal
  89. os.sleep(1) -- Wait for 1 second
  90. reds.setBundledOutput(sides.south, color, 0) -- Turn off the signal
  91. os.sleep(1)
  92. end
  93. end
  94.  
  95. local function get_player_input(level)
  96. print("Waiting for player input...")
  97. player_input = {}
  98.  
  99. -- Calculate the time limit
  100. local time_limit = 4 + (level - 1) * 2
  101. print("Time limit for this level:", time_limit, "seconds")
  102.  
  103. local remaining_time = time_limit
  104. local post_input_wait = false -- Tracks whether to limit the wait time to 2 seconds
  105.  
  106. while remaining_time > 0 do
  107. -- Check for button presses
  108. for _, color in ipairs(available_colors) do
  109. if reds.getBundledInput(sides.south, color) > 0 then
  110. -- Register player input
  111. player_input[#player_input + 1] = color
  112. print("Player pressed:", color_names[color] or "unknown")
  113.  
  114. -- Debounce: Wait until the button is released
  115. while reds.getBundledInput(sides.south, color) > 0 do
  116. os.sleep(0.1)
  117. end
  118.  
  119. os.sleep(0.1) -- Small delay to prevent accidental double presses
  120.  
  121. -- Validate the input immediately
  122. local current_index = #player_input
  123. if player_input[current_index] ~= sequence[current_index] then
  124. print("Incorrect input! Expected:", sequence[current_index], "but got:", player_input[current_index])
  125. return false -- Reset the game immediately
  126. end
  127.  
  128. -- Handle completion of input
  129. if #player_input == level then
  130. if level == max_levels then
  131. print("Player completed the final level! Skipping timer wait.")
  132. remaining_time = 0 -- Skip the timer for level 7
  133. else
  134. print("Player completed input. Waiting a maximum of 2 seconds...")
  135. post_input_wait = true
  136. remaining_time = math.min(remaining_time, 2) -- Limit remaining time to 2 seconds
  137. end
  138. end
  139. end
  140. end
  141.  
  142. -- Decrement the remaining time
  143. os.sleep(1) -- Wait for 1 second
  144. remaining_time = remaining_time - 1
  145.  
  146. -- Debugging: Print remaining time
  147. if not post_input_wait or remaining_time <= 2 then
  148. print("DEBUG: Remaining time:", remaining_time, "seconds")
  149. end
  150. end
  151.  
  152. -- Timeout: If the loop exits and no button was pressed
  153. if #player_input < level then
  154. print("Time's up! Player did not complete the sequence.")
  155. return false -- Player failed to complete the level
  156. end
  157.  
  158. -- Debugging: Confirm player input collection
  159. print("Collected player input:", serialization.serialize(player_input))
  160. print("Expected sequence for level:", serialization.serialize({table.unpack(sequence, 1, level)}))
  161.  
  162. -- Validate final input (redundant, but for safety)
  163. for i = 1, level do
  164. print("Comparing player_input[" .. i .. "]:", player_input[i], "with sequence[" .. i .. "]:", sequence[i])
  165. if player_input[i] ~= sequence[i] then
  166. print("Incorrect input! Expected:", sequence[i], "but got:", player_input[i])
  167. return false -- Player input is incorrect
  168. end
  169. end
  170.  
  171. print("Player input is correct for level", level)
  172. return true -- Player input is correct
  173. end
  174.  
  175. -- Function to flash green, yellow, blue, and red signals
  176. local function flash_effect()
  177. local flash_colors = {colors.green, colors.yellow, colors.blue, colors.red}
  178. for i = 1, 5 do
  179. for _, color in ipairs(flash_colors) do
  180. reds.setBundledOutput(sides.south, color, 255) -- Turn on the signal
  181. end
  182. os.sleep(0.1) -- Short delay for flashing (adjust as needed)
  183. for _, color in ipairs(flash_colors) do
  184. reds.setBundledOutput(sides.south, color, 0) -- Turn off the signal
  185. end
  186. os.sleep(0.1) -- Short delay between flashes
  187. end
  188. end
  189.  
  190. local function flash_failure_signal()
  191. print("Flashing cyan signal to indicate failure...")
  192. for i = 1, 3 do
  193. reds.setBundledOutput(sides.south, colors.cyan, 255) -- Turn on the cyan signal
  194. os.sleep(0.5) -- Wait 0.5 seconds
  195. reds.setBundledOutput(sides.south, colors.cyan, 0) -- Turn off the cyan signal
  196. os.sleep(0.5) -- Wait another 0.5 seconds
  197. end
  198. end
  199.  
  200. local function game()
  201. print("Starting Simon Says...")
  202. sequence = generate_sequence(max_levels) -- Generate the full sequence for the game
  203.  
  204. if not sequence or #sequence == 0 then
  205. error("Failed to generate a valid sequence! Check generate_sequence function.")
  206. end
  207.  
  208. gamenumber = 0 -- Start from level 1
  209.  
  210. while true do
  211. if gamenumber == 0 or is_game_over then
  212. print("Game reset! Starting from level 1.")
  213.  
  214. -- Play the startup light sequence at level 0
  215. print("Level 0: Playing startup light sequence...")
  216. startup_light_sequence()
  217.  
  218. gamenumber = 0
  219. is_game_over = false
  220. end
  221.  
  222. gamenumber = gamenumber + 1
  223. if gamenumber > max_levels then
  224. print("Congratulations! You completed Simon Says!")
  225.  
  226. -- Flash green, yellow, blue, and red signals
  227. print("Flashing green, yellow, blue, and red signals...")
  228. flash_effect()
  229.  
  230. -- Turn on the purple signal
  231. print("Activating purple signal...")
  232. reds.setBundledOutput(sides.south, colors.pink, 255) -- Adjust side if needed
  233. local result = table.pack(debug_card.runCommand("/scoreboard players add @a[x=15061,y=40,z=12626,dx=6,dy=3,dz=6] FinishedGame 1"))
  234. if result ~= nil then
  235. print(result[1], result[2])
  236. end
  237.  
  238. break
  239. end
  240.  
  241. print("Level:", gamenumber)
  242. play_sequence(gamenumber) -- Show the sequence to the player
  243.  
  244. if not get_player_input(gamenumber) then
  245. print("Game reset triggered.")
  246. -- Flash cyan signal before resetting the game
  247. flash_failure_signal()
  248. reset_game() -- Reset the game if the player makes a mistake or time runs out
  249. os.sleep(1) -- Pause before restarting
  250. else
  251. print("Correct! Proceeding to level", gamenumber + 1)
  252. end
  253. end
  254. end
  255. charged = 0
  256. redstoneyes = 0
  257. simonsaysunlock = 0
  258. simonsaysfinished = 0
  259. address = {"Glyph 34","Glyph 12","Glyph 19","Glyph 33","Glyph 23","Glyph 28","Glyph 16","Glyph 17"}
  260. print("Redstone Dialer")
  261. print("--------------------------------------------------------------------------------------------------------------------------------------------------------------")
  262. print()
  263.  
  264. repeat
  265. coroutine.yield()
  266. if reds.getBundledInput(sides.south, colors.white) > 0 and reds.getBundledInput(sides.south, colors.brown) > 0 and redstoneyes == 0 then
  267. print("Unlocked gate")
  268. redstoneyes = 1
  269. end
  270.  
  271. -- Debug shutdown
  272. if reds.getBundledInput(sides.south, colors.gray) > 0 then
  273. asd = 2
  274. end
  275.  
  276. -- Debug Dial
  277. if reds.getBundledInput(sides.south, colors.yellow) > 0 then
  278. debugdial = 1
  279. end
  280.  
  281. if simonsaysunlock == 1 and simonsaysfinished == 0 and reds.getBundledOutput(sides.south, colors.pink) < 1 then
  282. -- Run the simon says game
  283. game()
  284. simonsaysfinished = 1
  285. end
  286.  
  287. if simonsaysunlock == 0 and charged == 0 and reds.getBundledOutput(sides.south, colors.purple) > 0 then
  288. -- Run the simon says game
  289. charged = 1
  290. simonsaysunlock = 1
  291. end
  292.  
  293. if reds.getBundledOutput(sides.south, colors.pink) > 0 and simonsaysunlock == 1 then
  294. -- Skip the simon says game
  295. simonsaysfinished = 1
  296. end
  297.  
  298. if reds.getBundledInput(sides.south, colors.purple) > 0 and reds.getBundledOutput(sides.south, colors.purple) < 1 and charged == 0 then
  299. zpm.toggleSlots()
  300. reds.setBundledOutput(sides.south, colors.purple, 255)
  301. os.sleep(1)
  302. reds.setBundledOutput(sides.south, colors.purple, 0)
  303. os.sleep(1)
  304. reds.setBundledOutput(sides.south, colors.purple, 255)
  305. os.sleep(1)
  306. reds.setBundledOutput(sides.south, colors.purple, 0)
  307. os.sleep(1)
  308. reds.setBundledOutput(sides.south, colors.purple, 255)
  309. os.sleep(1)
  310. reds.setBundledOutput(sides.south, colors.purple, 0)
  311. os.sleep(1)
  312. reds.setBundledOutput(sides.south, colors.purple, 255)
  313. os.sleep(1)
  314. reds.setBundledOutput(sides.south, colors.purple, 0)
  315. os.sleep(1)
  316. reds.setBundledOutput(sides.south, colors.purple, 255)
  317. os.sleep(1)
  318. reds.setBundledOutput(sides.south, colors.purple, 0)
  319. os.sleep(1)
  320. reds.setBundledOutput(sides.south, colors.purple, 255)
  321. os.sleep(1)
  322. reds.setBundledOutput(sides.south, colors.purple, 0)
  323. os.sleep(1)
  324. reds.setBundledOutput(sides.south, colors.purple, 255)
  325. os.sleep(1)
  326. reds.setBundledOutput(sides.south, colors.purple, 0)
  327. os.sleep(1)
  328. reds.setBundledOutput(sides.south, colors.purple, 255)
  329. os.sleep(1)
  330. reds.setBundledOutput(sides.south, colors.purple, 0)
  331. os.sleep(1)
  332. reds.setBundledOutput(sides.south, colors.purple, 255)
  333. os.sleep(1)
  334. reds.setBundledOutput(sides.south, colors.purple, 0)
  335. os.sleep(1)
  336. reds.setBundledOutput(sides.south, colors.purple, 255)
  337. os.sleep(1)
  338. reds.setBundledOutput(sides.south, colors.purple, 0)
  339. os.sleep(1)
  340. reds.setBundledOutput(sides.south, colors.purple, 255)
  341. os.sleep(1)
  342. reds.setBundledOutput(sides.south, colors.purple, 0)
  343. os.sleep(1)
  344. reds.setBundledOutput(sides.south, colors.purple, 255)
  345. os.sleep(1)
  346. reds.setBundledOutput(sides.south, colors.purple, 0)
  347. os.sleep(1)
  348. reds.setBundledOutput(sides.south, colors.purple, 255)
  349. os.sleep(1)
  350. reds.setBundledOutput(sides.south, colors.purple, 0)
  351. os.sleep(1)
  352. reds.setBundledOutput(sides.south, colors.purple, 255)
  353. os.sleep(1)
  354. reds.setBundledOutput(sides.south, colors.purple, 0)
  355. os.sleep(1)
  356. reds.setBundledOutput(sides.south, colors.purple, 255)
  357. os.sleep(1)
  358. reds.setBundledOutput(sides.south, colors.purple, 0)
  359. os.sleep(1)
  360. reds.setBundledOutput(sides.south, colors.purple, 255)
  361. os.sleep(1)
  362. reds.setBundledOutput(sides.south, colors.purple, 0)
  363. os.sleep(1)
  364. reds.setBundledOutput(sides.south, colors.purple, 255)
  365. os.sleep(1)
  366. reds.setBundledOutput(sides.south, colors.purple, 0)
  367. os.sleep(0.7)
  368. zpm.toggleSlots()
  369. charged = 1
  370. reds.setBundledOutput(sides.south, colors.purple, 255)
  371. os.sleep(5)
  372. simonsaysunlock = 1
  373. computer.shutdown(true)
  374. end
  375.  
  376. if redstoneyes == 1 or debugdial == 1 and component.stargate.getGateStatus() == "idle" then
  377. term.clear(true)
  378. print("Dialing Hidden gate")
  379. os.sleep(3)
  380. for i,v in ipairs(address) do
  381. print(i,v)
  382. end
  383.  
  384. function dialNext(dialed)
  385. AddressBuffer = {"Glyph 34","Glyph 12","Glyph 19","Glyph 33","Glyph 23","Glyph 28","Glyph 16","Glyph 17"}
  386. glyph = address[dialed + 1]
  387. local requirement = sg.getEnergyRequiredToDial(table.unpack(AddressBuffer)) -- Temp Workaround
  388. if component.stargate.getGateStatus() == "incoming" then
  389. term.clear(true)
  390. print("ERROR: Incoming wormhole!")
  391. redstoneyes = 0
  392. debugdial = 0
  393. reds.setBundledOutput(sides.south, colors.orange, 255)
  394. os.sleep(1)
  395. reds.setBundledOutput(sides.south, colors.orange, 0)
  396. os.sleep(1)
  397. reds.setBundledOutput(sides.south, colors.orange, 255)
  398. os.sleep(1)
  399. reds.setBundledOutput(sides.south, colors.orange, 0)
  400. os.sleep(1)
  401. reds.setBundledOutput(sides.south, colors.orange, 255)
  402. os.sleep(1)
  403. reds.setBundledOutput(sides.south, colors.orange, 0)
  404. os.sleep(1)
  405. reds.setBundledOutput(sides.south, colors.orange, 255)
  406. os.sleep(1)
  407. reds.setBundledOutput(sides.south, colors.orange, 0)
  408. os.sleep(1)
  409. reds.setBundledOutput(sides.south, colors.orange, 255)
  410. os.sleep(1)
  411. reds.setBundledOutput(sides.south, colors.orange, 0)
  412. os.sleep(1)
  413. reds.setBundledOutput(sides.south, colors.orange, 255)
  414. os.sleep(1)
  415. reds.setBundledOutput(sides.south, colors.orange, 0)
  416. computer.shutdown(true)
  417. elseif component.stargate.getEnergyRequiredToDial(address) == "address_malformed" then
  418. term.clear(true)
  419. print("ERROR: Destination Unavailable or does not exist!")
  420. redstoneyes = 0
  421. debugdial = 0
  422. computer.shutdown(true)
  423. elseif type(requirement) == "table" and requirement.canOpen == false then
  424. local storedEnergy = sg.getEnergyStored()
  425. local operatingTicks = (storedEnergy - requirement.open) / requirement.keepAlive
  426. local operatingSeconds = math.floor(operatingTicks / 20)
  427. reds.setBundledOutput(sides.south, colors.orange, 255)
  428. os.sleep(1)
  429. reds.setBundledOutput(sides.south, colors.orange, 0)
  430. os.sleep(1)
  431. reds.setBundledOutput(sides.south, colors.orange, 255)
  432. os.sleep(1)
  433. reds.setBundledOutput(sides.south, colors.orange, 0)
  434. os.sleep(1)
  435. reds.setBundledOutput(sides.south, colors.orange, 255)
  436. os.sleep(1)
  437. reds.setBundledOutput(sides.south, colors.orange, 0)
  438. os.sleep(1)
  439. reds.setBundledOutput(sides.south, colors.orange, 255)
  440. os.sleep(1)
  441. reds.setBundledOutput(sides.south, colors.orange, 0)
  442. redstoneyes = 0
  443. charged = 0
  444. debugdial = 0
  445. print("NOT ENOUGH POWER TO OPEN ... "..tostring(requirement.open).." RF NEEDED")
  446. reds.setBundledOutput(sides.south, colors.purple, 0)
  447. computer.shutdown(true)
  448. -- if requirement.canOpen == false then
  449. -- print("NOT ENOUGH POWER TO OPEN ... "..tostring(requirement.open).." RF NEEDED")
  450. elseif simonsaysfinished == 1 or debugdial == 1 then
  451. print("Engaging "..glyph.."... ")
  452. sg.engageSymbol(glyph)
  453. else
  454. print("Not completed simon says!")
  455. sg.engageGate()
  456. reds.setBundledOutput(sides.south, colors.orange, 255)
  457. component.computer.beep(150,1)
  458. reds.setBundledOutput(sides.south, colors.orange, 0)
  459. component.computer.beep(150,1)
  460. reds.setBundledOutput(sides.south, colors.orange, 255)
  461. component.computer.beep(150,1)
  462. reds.setBundledOutput(sides.south, colors.orange, 0)
  463. component.computer.beep(150,1)
  464. reds.setBundledOutput(sides.south, colors.orange, 255)
  465. component.computer.beep(150,1)
  466. reds.setBundledOutput(sides.south, colors.orange, 0)
  467. component.computer.beep(150,1)
  468. reds.setBundledOutput(sides.south, colors.orange, 255)
  469. component.computer.beep(150,1)
  470. reds.setBundledOutput(sides.south, colors.orange, 0)
  471. computer.shutdown(true)
  472. end
  473. end
  474. eventID = event.listen("stargate_spin_chevron_engaged", function(evname, address, caller, num, lock, glyph)
  475. os.sleep(2)
  476. if lock then
  477. term.clear(true)
  478. print("Engaging...")
  479. sg.engageGate()
  480. local result = table.pack(debug_card.runCommand("/scoreboard players add @a[x=15019,y=40,z=12603,dx=57,dy=13,dz=57] PuzzleGateActi 1"))
  481. if result ~= nil then
  482. print(result[1], result[2])
  483. end
  484. local result = table.pack(debug_card.runCommand("/effect @a[x=15019,y=40,z=12603,dx=57,dy=13,dz=57] moreplanets:infected_spore_protection 1800"))
  485. if result ~= nil then
  486. print(result[1], result[2])
  487. end
  488. doing = false
  489. eventID = event.listen("stargate_wormhole_stabilized", function(evname, address, caller, isInitiating)
  490. if isInitiating then
  491. print("sending code: ", IDC)
  492. sg.sendIrisCode(IDC)
  493. reds.setBundledOutput(sides.south, colors.black, 255)
  494. else
  495. end
  496. end)
  497. zpm.toggleSlots()
  498. print("30 seconds before wormhole closes")
  499. os.sleep(9)
  500. zpm.toggleSlots()
  501. os.sleep(11)
  502. print("10 seconds")
  503. os.sleep(5)
  504. os.sleep(1) print("5")
  505. os.sleep(1) print("4")
  506. os.sleep(1) print("3")
  507. os.sleep(1) print("2")
  508. os.sleep(1) print("1")
  509. reds.setBundledOutput(sides.south, colors.purple, 0)
  510. reds.setBundledOutput(sides.south, colors.pink, 0)
  511. reds.setBundledOutput(sides.south, colors.black, 0)
  512. sg.disengageGate()
  513. os.sleep(1) print("Stargate Shutdown")
  514. redstoneyes = 0
  515. charged = 0
  516. simonsaysunlock = 0
  517. simonsaysfinished = 0
  518. debugdial = 0
  519. else
  520. dialNext(num)
  521. end
  522. end)
  523.  
  524. dialNext(0)
  525. doing = true
  526. print()
  527. while doing do os.sleep(0.1) end
  528. end
  529.  
  530. until asd == 2
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement