Jump to content

ComputerCraft Mod - Missile Defense Program


Andrew2070

Recommended Posts

Overview:

In the upcoming Post Blast server, missiles both nuclear and conventional are legal.

Thus i took a long time experimenting with ComputerCraft to safeguard everyone!

In the process i invented code to intercept incoming missiles about to destroy you.

Now that i have made it 99% Working, i am here today to release it to the world!

 

 

It features a peripheral/wireless/rednet based algorithim using a radar block.

It works just like any server-client program, through a peripheral connection.

 

1. Missile Detected by Powered Radar Source Block.

2. Radar Block outputs coordinates/redstone signal to a server computer.

3. Server Computer generates coordinates for interception of the missile.

4. Server Computer messages all active Anti-Ballistic Missile silo clients.

5. Anti-Ballistic Missile clients then launch chronologically at each missile.

6. Until all incoming threats are destroyed, it will keep firing the client/silos.

 

Radar => Anti-Ballistic Missile (ABM) Server => Client PC => ABM silo => Intercept

 

*Basically just shoots down incoming missiles with a Anti-Ballistic Missile*

 

ABM Server:

--[[Skynet Nuclear ABM Defense Program by Andrew2060]]--
--[ABM Server, use with http://pastebin.com/aNsduCem]]--
--[System requires atleast 5 CC's with Modems and ABMs]]--
--[System has 5% chance of failure in killing missiles]]--
 
--[[Settings]]--
local waitDelay = 2
local countersPerMissile = 1
local missileDelay = 3
 
--[[Initialization]]--
local silos, curSilo = {}, 1
peripheral.find("modem", rednet.open)
term.setBackgroundColor(colors.blue)
 
local function red()
term.setBackgroundColor(colors.red)
print("                                                   ")
term.setBackgroundColor(colors.blue)
end
 
rednet.broadcast("ABM1")
 
repeat
    local id, msg = rednet.receive(waitDelay)
    if msg == "ABM" then table.insert(silos, id) end
until not id
 
--[[Main Programs]]--
while true do
    if not redstone.getInput("back") then
        term.clear()
        term.setCursorPos(1, 1)
 
        red()
        print("        SKYNET DEFENSE SYSTEMS ACTIVATED           ")
        red()
        print("      ANTI-BALLISTIC MISSILE SHIELD ONLINE         ")
        red()
        red()
        print("               [STANDBY ABM Silos]                 ")
 
        for k, v in ipairs(silos) do print("  silo #" .. k .. " id = "..v) end
        red()
       
        repeat os.pullEvent("redstone") until redstone.getInput("back")
    end
   
    term.clear()
    term.setCursorPos(1, 1)
    term.setTextColor(colors.red)
   
    print("Incoming Missiles:")
    print("Firing CounterMeasures\n")
   
 maptab = peripheral.call("back","getEntities")
 maptxt = textutils.serialize(maptab)
 if maptxt ~= "{}" then
 allDat = 0
 for num in pairs(maptab) do
 allDat = allDat+1
 end
 targets = allDat/3
 for i=0,targets-1 do
        local msg = {["x"] = math.floor(maptab["x_"..i]), ["y"] = math.floor(maptab["y_"..i]), ["z"] = math.floor(maptab["z_"..i])}
 
        print("Incoming Missile Threat #" .. i .. " at X:" .. msg.x .. " Y:" .. msg.y .. " Z:" .. msg.z)
        print("Launching " .. countersPerMissile .. " ABM Missile CounterMeasures...\n")
 
        for i = 1, countersPerMissile do
            rednet.send(silos[curSilo], msg)
            curSilo = (curSilo == #silos) and 1 or (curSilo + 1)
            sleep(missileDelay)
            end
        sleep(0)
        end
     sleep(0)
    end
   sleep(2)
end
sleep(1)

ABM Client:

--Silo Launch PC, [working] [By Andrew2060]
 
--[[Settings]]--
local icbmSide = "back"
local armed = true
--set armed to false to disarm silo.
 
--[[Init]]--
local icbm = peripheral.wrap(icbmSide)
local masterID
 
peripheral.find("modem", rednet.open)
 
--[[Functions]]--
local function clear()
term.clear()
term.setCursorPos(1, 1)
end
 
 
--[[Main program]]--
clear()
while true do
  print("Waiting for Threat Message")
  id, msg, distance = rednet.receive(masterID)
 
  if (msg == "ABM1") then
    print("  master=", id)
    masterID = id;
    rednet.send(masterID, "ABM")
  elseif type(msg) == "table" and id == masterID then
    if type(msg.x) == "number" and type(msg.y) == "number" and type(msg.z) == "number" then
      print("  launching CounterMeasures At x=" .. msg.x .. ", y=" .. msg.y .. ", z=" .. msg.z)
      icbm.setTarget(msg.x, msg.y, msg.z)
      if (armed) then
        peripheral.call("back","launch")
      end
    else
      print("  invalid table command")
    end
  else
    print("  invalid msg '", msg, "' from '", id, "', distance=", distance)
  end
end

This code is meant to be used with mekanism/DefenseTech Mods.

Such as found in my ModPack: http://www.technicpack.net/modpack/nuclear-revolution.689897

 

It is meant for peaceful purposes only, and only for base defense.

 

~Hope this helps!

Link to comment
Share on other sites

  • 2 weeks later...
  • 2 weeks later...
  • brunyman changed the title to ComputerCraft Mod - Missile Defense Program
Guest
This topic is now closed to further replies.
×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use and Guidelines.