// Navigation beacon for AI robots // No longer exists on the radio controller, it is managed by a global list. /obj/machinery/navbeacon icon = 'icons/obj/objects.dmi' icon_state = "navbeacon0-f" name = "navigation beacon" desc = "A radio beacon used for bot navigation." level = 1 // underfloor layer = LOW_OBJ_LAYER max_integrity = 500 armor = list("melee" = 70, "bullet" = 70, "laser" = 70, "energy" = 70, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 80) var/open = FALSE // true if cover is open var/locked = TRUE // true if controls are locked var/freq = FREQ_NAV_BEACON var/location = "" // location response text var/list/codes // assoc. list of transponder codes var/codes_txt = "" // codes as set on map: "tag1;tag2" or "tag1=value;tag2=value" req_one_access = list(ACCESS_ENGINE, ACCESS_ROBOTICS) /obj/machinery/navbeacon/Initialize() . = ..() set_codes() var/turf/T = loc hide(T.intact) if(codes["patrol"]) if(!GLOB.navbeacons["[z]"]) GLOB.navbeacons["[z]"] = list() GLOB.navbeacons["[z]"] += src //Register with the patrol list! if(codes["delivery"]) GLOB.deliverybeacons += src GLOB.deliverybeacontags += location /obj/machinery/navbeacon/Destroy() if (GLOB.navbeacons["[z]"]) GLOB.navbeacons["[z]"] -= src //Remove from beacon list, if in one. GLOB.deliverybeacons -= src return ..() /obj/machinery/navbeacon/onTransitZ(old_z, new_z) if (GLOB.navbeacons["[old_z]"]) GLOB.navbeacons["[old_z]"] -= src if (GLOB.navbeacons["[new_z]"]) GLOB.navbeacons["[new_z]"] += src ..() // set the transponder codes assoc list from codes_txt /obj/machinery/navbeacon/proc/set_codes() if(!codes_txt) return codes = new() var/list/entries = splittext(codes_txt, ";") // entries are separated by semicolons for(var/e in entries) var/index = findtext(e, "=") // format is "key=value" if(index) var/key = copytext(e, 1, index) var/val = copytext(e, index+1) codes[key] = val else codes[e] = "1" // called when turf state changes // hide the object if turf is intact /obj/machinery/navbeacon/hide(intact) invisibility = intact ? INVISIBILITY_MAXIMUM : 0 updateicon() // update the icon_state /obj/machinery/navbeacon/proc/updateicon() var/state="navbeacon[open]" if(invisibility) icon_state = "[state]-f" // if invisible, set icon to faded version // in case revealed by T-scanner else icon_state = "[state]" /obj/machinery/navbeacon/attackby(obj/item/I, mob/user, params) var/turf/T = loc if(T.intact) return // prevent intraction when T-scanner revealed if(istype(I, /obj/item/screwdriver)) open = !open user.visible_message("[user] [open ? "opens" : "closes"] the beacon's cover.", "You [open ? "open" : "close"] the beacon's cover.") updateicon() else if (istype(I, /obj/item/card/id)||istype(I, /obj/item/pda)) if(open) if (src.allowed(user)) src.locked = !src.locked to_chat(user, "Controls are now [src.locked ? "locked" : "unlocked"].") else to_chat(user, "Access denied.") updateDialog() else to_chat(user, "You must open the cover first!") else return ..() /obj/machinery/navbeacon/attack_ai(mob/user) interact(user, 1) /obj/machinery/navbeacon/attack_paw() return /obj/machinery/navbeacon/ui_interact(mob/user) . = ..() var/ai = isAI(user) var/turf/T = loc if(T.intact) return // prevent intraction when T-scanner revealed if(!open && !ai) // can't alter controls if not open, unless you're an AI to_chat(user, "The beacon's control cover is closed!") return var/t if(locked && !ai) t = {"Navigation Beacon

(swipe card to unlock controls)
Location: [location ? location : "(none)"]
Transponder Codes: