Adds AI Integrity restorer to program datums, various modular computer improvements (#21546)

* Ports AI restorer to modular computars

* mostly done. working on qdel improvments

* undoes testing flag

* undoes gc stuff

* Fixes id card module name

* memes
This commit is contained in:
Shadowlight213
2016-11-18 16:33:39 -08:00
committed by oranges
parent 1f569d59e5
commit 008689c61c
18 changed files with 378 additions and 30 deletions
@@ -92,12 +92,12 @@
// Called when component is removed from PC.
/obj/item/weapon/computer_hardware/proc/on_remove(obj/item/device/modular_computer/M, mob/living/user = null)
try_eject()
try_eject(forced = 1)
// Called when someone tries to insert something in it - paper in printer, card in card reader, etc.
/obj/item/weapon/computer_hardware/proc/try_insert(obj/item/I, mob/living/user = null)
return FALSE
// Called when someone tries to eject something from it - card from card reader, etc.
/obj/item/weapon/computer_hardware/proc/try_eject(slot=0, mob/living/user = null)
/obj/item/weapon/computer_hardware/proc/try_eject(slot=0, mob/living/user = null, forced = 0)
return FALSE
@@ -0,0 +1,72 @@
/obj/item/weapon/computer_hardware/ai_slot
name = "intelliCard interface slot"
desc = "A module allowing this computer to interface with most common intelliCard modules. Necessary for some programs to run properly."
power_usage = 100 //W
icon_state = "card_mini"
w_class = 2
origin_tech = "programming=2"
device_type = MC_AI
var/obj/item/device/aicard/stored_card = null
var/locked = FALSE
obj/item/weapon/computer_hardware/ai_slot/examine(mob/user)
..()
if(stored_card)
user << "There appears to be an intelliCard loaded."
/obj/item/weapon/computer_hardware/ai_slot/on_install(obj/item/device/modular_computer/M, mob/living/user = null)
M.add_verb(device_type)
/obj/item/weapon/computer_hardware/ai_slot/on_remove(obj/item/device/modular_computer/M, mob/living/user = null)
M.remove_verb(device_type)
/obj/item/weapon/computer_hardware/ai_slot/try_insert(obj/item/I, mob/living/user = null)
if(!holder)
return FALSE
if(!istype(I, /obj/item/device/aicard))
return FALSE
if(stored_card)
user << "<span class='warning'>You try to insert \the [I] into \the [src], but the slot is occupied.</span>"
return FALSE
if(user && !user.unEquip(I))
return FALSE
stored_card = I
I.forceMove(src)
user << "<span class='notice'>You insert \the [I] into \the [src].</span>"
return TRUE
/obj/item/weapon/computer_hardware/ai_slot/try_eject(forced = 0,mob/living/user = null)
if(!stored_card)
user << "<span class='warning'>There is no card in \the [src].</span>"
return FALSE
if(locked && !forced)
user << "<span class='warning'>Safeties prevent you from removing the card while reconstruction is in progress...</span>"
return FALSE
if(stored_card)
stored_card.forceMove(get_turf(src))
locked = FALSE
stored_card.verb_pickup()
stored_card = null
user << "<span class='notice'>You remove the card from \the [src].</span>"
return TRUE
return FALSE
/obj/item/weapon/computer_hardware/ai_slot/attackby(obj/item/I, mob/living/user)
if(..())
return
if(istype(I, /obj/item/weapon/screwdriver))
user << "<span class='notice'>You press down on the manual eject button with \the [I].</span>"
try_eject(,user,1)
return
@@ -38,7 +38,7 @@
return TRUE
/obj/item/weapon/computer_hardware/battery/try_eject(slot=0, mob/living/user = null)
/obj/item/weapon/computer_hardware/battery/try_eject(slot=0, mob/living/user = null, forced = 0)
if(!battery)
user << "<span class='warning'>There is no power cell connected to \the [src].</span>"
return FALSE
@@ -1,5 +1,5 @@
/obj/item/weapon/computer_hardware/card_slot
name = "\improper ID authentication module"
name = "identification card authentication module" // \improper breaks the find_hardware_by_name proc
desc = "A module allowing this computer to read or write data on ID cards. Necessary for some programs to run properly."
power_usage = 10 //W
icon_state = "card_mini"
@@ -59,7 +59,7 @@
return TRUE
/obj/item/weapon/computer_hardware/card_slot/try_eject(slot=0, mob/living/user = null)
/obj/item/weapon/computer_hardware/card_slot/try_eject(slot=0, mob/living/user = null, forced = 0)
if(!stored_card && !stored_card2)
user << "<span class='warning'>There are no cards in \the [src].</span>"
return FALSE
@@ -89,3 +89,16 @@
user << "<span class='notice'>You remove the card[ejected>1 ? "s" : ""] from \the [src].</span>"
return TRUE
return FALSE
/obj/item/weapon/computer_hardware/card_slot/attackby(obj/item/I, mob/living/user)
if(..())
return
if(istype(I, /obj/item/weapon/screwdriver))
user << "<span class='notice'>You press down on the manual eject button with \the [I].</span>"
try_eject(0,user)
return
/obj/item/weapon/computer_hardware/card_slot/examine(mob/user)
..()
if(stored_card || stored_card2)
user << "There appears to be something loaded in the card slots."