/mob/living/silicon/robot/drone/mining
icon_state = "miningdrone"
law_type = /datum/ai_laws/mining_drone
module_type = /obj/item/robot_module/mining_drone/basic
holder_type = /obj/item/holder/drone/mining
maxHealth = 45
health = 45
pass_flags = PASSTABLE
req_access = list(access_mining, access_robotics)
id_card_type = /obj/item/card/id/minedrone
speed = -1
var/seeking_player = FALSE
var/health_upgrade
var/ranged_upgrade
var/melee_upgrade
var/drill_upgrade
/mob/living/silicon/robot/drone/mining/Initialize()
. = ..()
verbs |= /mob/living/proc/hide
remove_language(LANGUAGE_ROBOT)
remove_language(LANGUAGE_DRONE)
add_language(LANGUAGE_TCB, TRUE)
add_language(LANGUAGE_EAL, TRUE)
//They are unable to be upgraded, so let's give them a bit of a better battery.
cell.maxcharge = 10000
cell.charge = 10000
mmi = /obj/item/organ/internal/mmi_holder/circuit
// Allows mining drones to pull ore boxes, might be useful for supporting miners
pull_list |= /obj/structure/ore_box
//We need to screw with their HP a bit. They have around one fifth as much HP as a full borg.
for(var/V in components)
if(V != "power cell")
var/datum/robot_component/C = components[V]
C.max_damage = 15
verbs -= /mob/living/silicon/robot/verb/Namepick
verbs -= /mob/living/silicon/robot/drone/verb/set_mail_tag
updateicon()
density = FALSE
/mob/living/silicon/robot/drone/mining/updatename()
real_name = "NT-I-[rand(100,999)]"
name = real_name
/mob/living/silicon/robot/drone/mining/init()
ai_camera = new /obj/item/device/camera/siliconcam/drone_camera(src)
if(!laws)
laws = new law_type
if(!module)
module = new module_type(src)
flavor_text = "It's a tiny little mining drone. The casing is stamped with an corporate logo and the subscript: '[current_map.company_name] Automated Pickaxe!'"
playsound(src.loc, 'sound/machines/twobeep.ogg', 50, 0)
/mob/living/silicon/robot/drone/mining/request_player()
if(too_many_active_drones())
return
seeking_player = TRUE
SSghostroles.add_spawn_atom("mining_drone", src)
var/area/A = get_area(src)
if(A)
say_dead_direct("Someone is attempting to reboot a mining drone in [A.name]! Spawn in as it by using the ghost spawner menu in the ghost tab.")
/mob/living/silicon/robot/drone/mining/proc/spawn_into_mining_drone(var/mob/user)
if(src.ckey)
return
src.ckey = user.ckey
SSghostroles.remove_spawn_atom("mining_drone", src)
seeking_player = FALSE
welcome_drone()
/mob/living/silicon/robot/drone/mining/welcome_drone()
to_chat(src, span("danger", "You are a mining drone, a tiny-brained robotic industrial machine."))
to_chat(src, span("danger", "You have little individual will, some personality, and no drives or urges other than your laws and the art of mining."))
to_chat(src, span("danger", "Remember, you DO NOT take orders from the AI."))
/mob/living/silicon/robot/drone/mining/attackby(obj/item/W, mob/user)
if(istype(W, /obj/item/borg/upgrade))
to_chat(user, span("warning", "\The [src] is not compatible with \the [W]."))
return
else if (istype(W, /obj/item/card/id) || istype(W, /obj/item/device/pda))
if(!allowed(user))
to_chat(user, span("warning", "Access denied."))
return
if(seeking_player)
to_chat(user, SPAN_WARNING("\The [src] is already in the reboot process."))
return
if(!config.allow_drone_spawn || emagged || health < -maxHealth) //It's dead, Dave.
to_chat(user, span("warning", "The interface is fried, and a distressing burned smell wafts from the robot's interior. You're not rebooting this one."))
return
user.visible_message(span("warning", "\The [user] swipes \his ID card through \the [src], attempting to reboot it."), span("warning", "You swipe your ID card through \the [src], attempting to reboot it."))
request_player()
return
..()
/mob/living/silicon/robot/drone/mining/process_level_restrictions()
//Abort if they should not get blown
if(lock_charge || scrambled_codes || emagged)
return
//Check if they are not on a station level -> abort
var/turf/T = get_turf(src)
if (!T || isStationLevel(T.z))
return
to_chat(src, span("danger", "WARNING: Removal from NanoTrasen property detected. Anti-Theft mode activated."))
gib()
/**********************Minebot Upgrades**********************/
/obj/item/device/mine_bot_upgrade
name = "minebot drill upgrade"
desc = "A minebot upgrade."
icon_state = "mainboard"
icon = 'icons/obj/module.dmi'
/obj/item/device/mine_bot_upgrade/afterattack(var/mob/living/silicon/robot/drone/mining/M, mob/user, proximity)
if(!istype(M) || !proximity)
return
if(upgrade_bot(M, user))
to_chat(user, span("notice", "You successfully install \the [src] into \the [M]."))
/obj/item/device/mine_bot_upgrade/proc/upgrade_bot(var/mob/living/silicon/robot/drone/mining/M, mob/user)
if(M.melee_upgrade)
to_chat(user, span("warning", "[src] already has a drill upgrade installed!"))
return
M.mod_type = initial(M.mod_type)
M.uneq_all()
qdel(M.module)
M.module = null
if(M.ranged_upgrade)
new /obj/item/robot_module/mining_drone/drillandka(M)
else
new /obj/item/robot_module/mining_drone/drill(M)
M.melee_upgrade = TRUE
M.module.rebuild()
M.recalculate_synth_capacities()
qdel(src)
return TRUE
/obj/item/device/mine_bot_upgrade/health
name = "minebot chassis upgrade"
/obj/item/device/mine_bot_upgrade/health/upgrade_bot(var/mob/living/silicon/robot/drone/mining/M, mob/user)
if(M.health_upgrade)
to_chat(user, span("warning", "[src] already has a reinforced chassis!"))
return
M.maxHealth = 100
M.health += 55
for(var/V in M.components)
if(V != "power cell")
var/datum/robot_component/C = M.components[V]
C.max_damage = 30
M.health_upgrade = TRUE
qdel(src)
return TRUE
/obj/item/device/mine_bot_upgrade/ka
name = "minebot kinetic accelerator upgrade"
/obj/item/device/mine_bot_upgrade/ka/upgrade_bot(var/mob/living/silicon/robot/drone/mining/M, mob/user)
if(M.ranged_upgrade)
to_chat(user, "[src] already has a KA upgrade installed!")
return
M.mod_type = initial(M.mod_type)
M.uneq_all()
qdel(M.module)
M.module = null
if(M.melee_upgrade)
new /obj/item/robot_module/mining_drone/drillandka(M)
else
new /obj/item/robot_module/mining_drone/ka(M)
M.ranged_upgrade = TRUE
M.module.rebuild()
M.recalculate_synth_capacities()
qdel(src)
return TRUE