/mob/living/bot name = "Bot" health = 20 maxHealth = 20 icon = 'icons/obj/aibots.dmi' layer = MOB_LAYER universal_speak = 1 density = 0 var/obj/item/weapon/card/id/botcard = null var/list/botcard_access = list() var/on = 1 var/open = 0 var/locked = 1 var/emagged = 0 var/light_strength = 3 var/obj/access_scanner = null var/list/req_access = list() /mob/living/bot/New() ..() update_icons() botcard = new /obj/item/weapon/card/id(src) botcard.access = botcard_access.Copy() access_scanner = new /obj(src) access_scanner.req_access = req_access.Copy() /mob/living/bot/Life() ..() weakened = 0 stunned = 0 paralysis = 0 if(health <= 0) death() /mob/living/bot/updatehealth() if(status_flags & GODMODE) health = maxHealth stat = CONSCIOUS else health = maxHealth - getFireLoss() - getBruteLoss() oxyloss = 0 toxloss = 0 cloneloss = 0 halloss = 0 /mob/living/bot/death() explode() /mob/living/bot/attackby(var/obj/item/O, var/mob/user) if(O.GetID()) if(access_scanner.allowed(user) && !open && !emagged) locked = !locked user << "Controls are now [locked ? "locked." : "unlocked."]" attack_hand(user) else if(emagged) user << "ERROR" if(open) user << "Please close the access panel before locking it." else user << "Access denied." return else if(istype(O, /obj/item/weapon/screwdriver)) if(!locked) open = !open user << "Maintenance panel is now [open ? "opened" : "closed"]." else user << "You need to unlock the controls first." return else if(istype(O, /obj/item/weapon/weldingtool)) if(health < maxHealth) if(open) health = min(maxHealth, health + 10) user.visible_message("[user] repairs [src].","You repair [src].") else user << "Unable to repair with the maintenance panel closed." else user << "[src] does not need a repair." return else ..() /mob/living/bot/attack_ai(var/mob/user) return attack_hand(user) /mob/living/bot/say(var/message) var/verb = "beeps" message = sanitize(message) ..(message, null, verb) /mob/living/bot/Bump(var/atom/A) if(istype(A, /obj/machinery/door) && botcard) var/obj/machinery/door/D = A if(!istype(D, /obj/machinery/door/firedoor) && !istype(D, /obj/machinery/door/blast) && D.check_access(botcard)) D.open() /mob/living/bot/emag_act(var/remaining_charges, var/mob/user) return 0 /mob/living/bot/proc/turn_on() if(stat) return 0 on = 1 set_light(light_strength) update_icons() return 1 /mob/living/bot/proc/turn_off() on = 0 set_light(0) update_icons() /mob/living/bot/proc/explode() qdel(src) /mob/living/bot/attack_throat() return