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 the following Terms of Use, Guidelines and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.