Files
Aurora.3/code/modules/mining/minebot.dm
Lohikar 61b5203d24 Runtime Map Loading (#3597)
changes:

Maps are no longer compiled in, instead loaded directly from the DMMs at runtime.
Z level defines have been moved from the config to map datums.
Unit tests now use typecaches.
DMMS now actually works.
DMMS has been updated slightly.
DMMS is now capable of loading simple lists of non-text types.
DMMS is now faster when loading many types without mapped in attributes and when loading area instances.
Asteroid generation is now defined on the map datum instead of being hard-coded in SSasteroid.
Holodeck presets are now defined on the map datum.
Atmos machinery now uses Initialize().
2017-10-18 23:07:34 +03:00

241 lines
8.3 KiB
Plaintext

/mob/living/silicon/robot/drone/mining
icon_state = "miningdrone"
law_type = /datum/ai_laws/mining_drone
module_type = /obj/item/weapon/robot_module/mining_drone/basic
holder_type = /obj/item/weapon/holder/drone/mining
maxHealth = 45
health = 45
pass_flags = PASSTABLE
req_access = list(access_mining, access_robotics)
idcard_type = /obj/item/weapon/card/id/synthetic/minedrone
speed = -1
range_limit = 0
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("Robot Talk")
add_language("Drone Talk", 1)
//They are unable to be upgraded, so let's give them a bit of a better battery.
cell.maxcharge = 10000
cell.charge = 10000
// NO BRAIN.
mmi = null
//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 = 0
/mob/living/silicon/robot/drone/mining/updatename()
real_name = "NT-I-[rand(100,999)]"
name = real_name
/mob/living/silicon/robot/drone/mining/init()
aiCamera = new/obj/item/device/camera/siliconcam/drone_camera(src)
additional_law_channels["Drone"] = ":d"
if(!laws) laws = new law_type
if(!module) module = new module_type(src)
if(!jetpack)
jetpack = new /obj/item/weapon/tank/jetpack/carbondioxide/synthetic(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
var/datum/ghosttrap/G = get_ghost_trap("mining drone")
G.request_player(src, "Someone is attempting to reboot a mining drone.", 30 SECONDS)
/mob/living/silicon/robot/drone/mining/welcome_drone()
src << "<b>You are a mining drone, a tiny-brained robotic industrial machine</b>."
src << "You have little individual will, some personality, and no drives or urges other than your laws and the art of mining."
src << "Remember, <b>you DO NOT take orders from the AI.</b>"
src << "Use <b>say ;Hello</b> to talk to other drones and <b>say Hello</b> to speak silently to your nearby fellows."
/mob/living/silicon/robot/drone/mining/attackby(var/obj/item/weapon/W, var/mob/user)
if(istype(W, /obj/item/borg/upgrade/))
user << "<span class='danger'>\The [src] is not compatible with \the [W].</span>"
return
else if (istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda))
var/choice = input("Select your choice.") in list("Reboot","Recycle")
if(choice=="Reboot")
if(!config.allow_drone_spawn || emagged || health < -maxHealth) //It's dead, Dave.
user << "<span class='danger'>The interface is fried, and a distressing burned smell wafts from the robot's interior. You're not rebooting this one.</span>"
return
if(!allowed(usr))
user << "<span class='danger'>Access denied.</span>"
return
user.visible_message("<span class='danger'>\The [user] swipes \his ID card through \the [src], attempting to reboot it.</span>", "<span class='danger'>>You swipe your ID card through \the [src], attempting to reboot it.</span>")
request_player()
return
else
var/obj/item/weapon/card/id/ID = W
if(!allowed(usr))
user << "<span class='danger'>Access denied.</span>"
return
user.visible_message("<span class='danger'>\The [user] swipes \his ID card through \the [src], recycling it into points.</span>", "<span class='danger'>>You swipe your ID card through \the [src], recycling it into points.</span>")
ID.mining_points += 800
if(health_upgrade)
ID.mining_points += 600
health_upgrade = 0
if(ranged_upgrade)
ID.mining_points += 600
ranged_upgrade = 0
if(melee_upgrade)
ID.mining_points += 400
melee_upgrade = 0
if(drill_upgrade)
ID.mining_points += 2000
drill_upgrade = 0
qdel(src)
return
..()
/mob/living/silicon/robot/drone/mining/verb/print_report()
set name = "Print Message"
set desc = "Print out a status report of your own choosing."
set category = "Robot Commands"
var/input = sanitize(input(usr, "Please enter a message to print out. NOTE: BBCode does not work.", "Print readout", "") as message|null)
if (!input)
usr << "<span class='warning'>Cancelled.</span>"
return
var/customname = input(usr, "Pick a title for the report", "Title") as text|null
if (!customname)
usr << "<span class='warning'>Cancelled.</span>"
return
var/status_report
switch(src.health)
if((maxHealth - (maxHealth/3)) to maxHealth)
status_report = "All systems nominal."
if((maxHealth/3) to maxHealth/2)
status_report = "Systems compromised."
if(0 to (maxHealth/3))
status_report = "Systems failing."
else
status_report = "System status unknown."
// Create the reply message
usr << "<span class='warning'>You begin printing the message.</span>"
if(do_after(src,20))
var/obj/item/weapon/paper/P = new /obj/item/weapon/paper(src.loc)
P.name = "mining report - [customname]"
P.info = {"<center><img src = ntlogo.png></center>
<center><b><i>NanoTrasen Mining Drone Report</b></i><br>
<font size = \"1\">FOR YOUR EYES ONLY</font><hr><br>
<font size = \"1\"><font face='Courier New'>[input]</font></font><hr>
<font size = \"1\">[status_report]</font><br>
<center><img src = barcode[rand(0, 3)].png></center></center>"}
P.update_icon()
visible_message("\icon[src] <span class = 'notice'>The [usr] pings, \"[P.name] ready for review\", and happily disgorges a small printout.</span>", 2)
playsound(src.loc, 'sound/machines/ping.ogg', 50, 0)
/**********************Minebot Upgrades**********************/
/obj/item/device/mine_bot_ugprade
name = "minebot drill upgrade"
desc = "A minebot upgrade."
icon_state = "mainboard"
icon = 'icons/obj/module.dmi'
/obj/item/device/mine_bot_ugprade/afterattack(var/mob/living/silicon/robot/drone/mining/M, mob/user, proximity)
if(!istype(M) || !proximity)
return
upgrade_bot(M, user)
/obj/item/device/mine_bot_ugprade/proc/upgrade_bot(var/mob/living/silicon/robot/drone/mining/M, mob/user)
if(M.melee_upgrade)
user << "[src] already has a drill upgrade installed!"
return
M.modtype = initial(M.modtype)
M.uneq_all()
qdel(M.module)
M.module = null
if(M.ranged_upgrade)
new /obj/item/weapon/robot_module/mining_drone/drillandplasmacutter(M)
else
new /obj/item/weapon/robot_module/mining_drone/drill(M)
M.module.rebuild()
M.recalculate_synth_capacities()
if(!M.jetpack)
M.jetpack = new /obj/item/weapon/tank/jetpack/carbondioxide/synthetic(src)
qdel(src)
/obj/item/device/mine_bot_ugprade/health
name = "minebot chassis upgrade"
/obj/item/device/mine_bot_ugprade/health/upgrade_bot(var/mob/living/silicon/robot/drone/mining/M, mob/user)
if(M.health_upgrade)
user << "[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 = 1
qdel(src)
/obj/item/device/mine_bot_ugprade/plasma
name = "minebot plasma cutter upgrade"
/obj/item/device/mine_bot_ugprade/plasma/upgrade_bot(var/mob/living/silicon/robot/drone/mining/M, mob/user)
if(M.ranged_upgrade)
user << "[src] already has a plasma cutter upgrade installed!"
return
M.modtype = initial(M.modtype)
M.uneq_all()
qdel(M.module)
M.module = null
if(M.melee_upgrade)
new /obj/item/weapon/robot_module/mining_drone/drillandplasmacutter(M)
else
new /obj/item/weapon/robot_module/mining_drone/plasmacutter(M)
M.ranged_upgrade = 1
M.module.rebuild()
M.recalculate_synth_capacities()
if(!M.jetpack)
M.jetpack = new /obj/item/weapon/tank/jetpack/carbondioxide/synthetic(src)
qdel(src)
/obj/item/device/mine_bot_ugprade/thermal
name = "minebot thermal drill upgrade"
/obj/item/device/mine_bot_ugprade/thermal/upgrade_bot(var/mob/living/silicon/robot/drone/mining/M, mob/user)
if(M.drill_upgrade)
user << "[src] already has a thermal drill!"
return
if(M.emagged == 1)
return 0
M.emagged = 1
M.fakeemagged = 1
M.drill_upgrade = 1
if(!M.jetpack)
M.jetpack = new /obj/item/weapon/tank/jetpack/carbondioxide/synthetic(src)
qdel(src)