mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-01-06 23:41:57 +00:00
General bots-related code cleanup.
Medibot sprite fixed.
Aliens now attack bots instead of opening control window.
All bots can be damaged and repaired.
All bots are effected to EMP now.
Asteroids generation was tuned to do not spawn asteroid on z-level edges.
Enabling admin verbs now wont turn on deadchat if it was turned off.
An emergency toolbox now contain a red crowbar.
Mime job is now available to join as.
Added radio channel for miners, use :h or :d ("diggers" lol) as shortcut.
Added radio channel for cargo techs, use :h or :q as shortcut.
Added a personal headsets to HoP and QM.
Some unrelated runtime errors was fixed.
git-svn-id: http://tgstation13.googlecode.com/svn/trunk@1050 316c924e-a436-60f5-8080-3fe189b3f50e
This commit is contained in:
@@ -101,6 +101,7 @@ var
|
||||
viroMax = 1
|
||||
wardenMax = 1
|
||||
cmoMax = 1
|
||||
mimeMax = 1
|
||||
|
||||
list/bombers = list( )
|
||||
list/admin_log = list ( )
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
/obj/item/device/radio
|
||||
icon = 'radio.dmi'
|
||||
name = "station bounced radio"
|
||||
suffix = "\[3\]"
|
||||
icon_state = "walkietalkie"
|
||||
@@ -116,7 +117,7 @@
|
||||
name = "Captain's Headset"
|
||||
icon_state = "com_headset"
|
||||
item_state = "headset"
|
||||
channels = list("Command" = 1, "Science" = 0, "Medical" = 0, "Security" = 1, "Engineering" = 0)
|
||||
channels = list("Command" = 1, "Science" = 0, "Medical" = 0, "Security" = 1, "Engineering" = 0, "Mining" = 0, "Cargo" = 0)
|
||||
|
||||
/obj/item/device/radio/headset/heads/rd // -- Bar
|
||||
name = "Research Director's Headset"
|
||||
@@ -134,10 +135,34 @@
|
||||
name = "Chief Engineer's Headset"
|
||||
icon_state = "com_headset"
|
||||
item_state = "headset"
|
||||
channels = list("Engineering" = 1, "Command" = 1)
|
||||
channels = list("Engineering" = 1, "Command" = 1, "Mining" = 1)
|
||||
|
||||
/obj/item/device/radio/headset/heads/cmo // -- Bar
|
||||
name = "Chief Medical Officer's Headset"
|
||||
icon_state = "com_headset"
|
||||
item_state = "headset"
|
||||
channels = list("Medical" = 1, "Command" = 1)
|
||||
channels = list("Medical" = 1, "Command" = 1)
|
||||
|
||||
/obj/item/device/radio/headset/heads/hop // -- rastaf0
|
||||
name = "Head of Personnel's Headset"
|
||||
icon_state = "com_headset"
|
||||
item_state = "headset"
|
||||
channels = list("Command" = 1, "Security" = 1, "Cargo" = 0)
|
||||
|
||||
/obj/item/device/radio/headset/headset_mine // -- rastaf0
|
||||
name = "Mining Radio Headset"
|
||||
icon_state = "mine_headset"
|
||||
item_state = "headset"
|
||||
channels = list("Mining" = 1)
|
||||
|
||||
/obj/item/device/radio/headset/headset_cargo // -- rastaf0
|
||||
name = "Cargo Radio Headset"
|
||||
icon_state = "cargo_headset"
|
||||
item_state = "headset"
|
||||
channels = list("Cargo" = 1)
|
||||
|
||||
/obj/item/device/radio/headset/heads/qm // -- rastaf0 //he is not a real head but he gives orders sometimes
|
||||
name = "Quartermaster's Headset"
|
||||
icon_state = "cargo_headset"
|
||||
item_state = "headset"
|
||||
channels = list("Cargo" = 1, "Mining" = 1) //no command frequency yet
|
||||
|
||||
@@ -376,6 +376,10 @@
|
||||
item_state = "wrench"
|
||||
w_class = 2.0
|
||||
m_amt = 50
|
||||
|
||||
/obj/item/weapon/crowbar/red
|
||||
icon = 'items.dmi'
|
||||
icon_state = "red_crowbar"
|
||||
|
||||
/obj/item/weapon/disk
|
||||
name = "disk"
|
||||
@@ -991,7 +995,7 @@ Total SMES charging rate should not exceed total power generation rate, or an ov
|
||||
|
||||
/obj/item/weapon/syndicate_uplink
|
||||
name = "station bounced radio"
|
||||
icon = 'device.dmi'
|
||||
icon = 'radio.dmi'
|
||||
icon_state = "radio"
|
||||
var/temp = null
|
||||
var/uses = 10.0
|
||||
@@ -1007,7 +1011,7 @@ Total SMES charging rate should not exceed total power generation rate, or an ov
|
||||
|
||||
/obj/item/weapon/SWF_uplink
|
||||
name = "station bounced radio"
|
||||
icon = 'device.dmi'
|
||||
icon = 'radio.dmi'
|
||||
icon_state = "radio"
|
||||
var/temp = null
|
||||
var/uses = 4.0
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
proc/spawn_asteroid(var/atom/start_loc,var/type,var/size,var/richness)//type: 0 or null - random, 1 - nothing, 2 - iron, 3 - silicon
|
||||
if(start_loc.x - size < 3 || start_loc.x + size >= world.maxx - 3 || start_loc.y - size < 3 || start_loc.y + size > world.maxy -3)
|
||||
if(start_loc.x - size < 5 || start_loc.x + size >= world.maxx - 5 || start_loc.y - size < 5 || start_loc.y + size > world.maxy -5)
|
||||
return 0
|
||||
if(!size)
|
||||
size = pick(100;2,50;3,35;4,25;6,10;12)
|
||||
|
||||
@@ -74,6 +74,8 @@ Radio:
|
||||
1359 - Security
|
||||
1441 - death squad
|
||||
1443 - Confession Intercom
|
||||
1349 - Miners
|
||||
1347 - Cargo techs
|
||||
|
||||
Devices:
|
||||
1451 - tracking implant
|
||||
@@ -104,10 +106,12 @@ var/list/radiochannels = list(
|
||||
"Security" = 1359,
|
||||
"Deathsquad" = 1441,
|
||||
"Syndicate" = 1213,
|
||||
"Mining" = 1349,
|
||||
"Cargo" = 1347,
|
||||
)
|
||||
//depenging helpers
|
||||
var/list/DEPT_FREQS = list(1351,1355,1357,1359,1213,1441)
|
||||
var/const/COMM_FREQ = 1353
|
||||
var/list/DEPT_FREQS = list(1351,1355,1357,1359,1213,1441,1349,1347)
|
||||
var/const/COMM_FREQ = 1353 //command, colored gold in chat window
|
||||
var/const/SYND_FREQ = 1213
|
||||
|
||||
#define TRANSMISSION_WIRE 0
|
||||
|
||||
@@ -367,6 +367,7 @@
|
||||
src.equip_if_possible(new /obj/item/device/t_scanner(src), slot_r_store)
|
||||
|
||||
if ("Shaft Miner")
|
||||
src.equip_if_possible(new /obj/item/device/radio/headset/headset_mine (src), slot_ears)
|
||||
src.equip_if_possible(new /obj/item/clothing/under/color/white(src), slot_w_uniform)
|
||||
src.equip_if_possible(new /obj/item/clothing/shoes/black(src), slot_shoes)
|
||||
src.equip_if_possible(new /obj/item/clothing/gloves/black(src), slot_gloves)
|
||||
@@ -475,7 +476,7 @@
|
||||
|
||||
|
||||
if ("Head of Personnel")
|
||||
src.equip_if_possible(new /obj/item/device/radio/headset/headset_com (src), slot_ears) // -- TLE
|
||||
src.equip_if_possible(new /obj/item/device/radio/headset/heads/hop (src), slot_ears) // -- TLE
|
||||
src.equip_if_possible(new /obj/item/weapon/storage/backpack(src), slot_back)
|
||||
src.equip_if_possible(new /obj/item/device/pda/heads(src), slot_belt)
|
||||
src.equip_if_possible(new /obj/item/clothing/under/rank/head_of_personnel(src), slot_w_uniform)
|
||||
@@ -546,6 +547,7 @@
|
||||
src.equip_if_possible(new /obj/item/weapon/storage/briefcase(src), slot_l_hand)
|
||||
|
||||
if ("Quartermaster")
|
||||
src.equip_if_possible(new /obj/item/device/radio/headset/heads/qm (src), slot_ears)
|
||||
src.equip_if_possible(new /obj/item/clothing/gloves/black(src), slot_gloves)
|
||||
src.equip_if_possible(new /obj/item/clothing/shoes/black(src), slot_shoes)
|
||||
src.equip_if_possible(new /obj/item/clothing/under/rank/cargo(src), slot_w_uniform)
|
||||
@@ -555,6 +557,7 @@
|
||||
//src.equip_if_possible(new /obj/item/clothing/suit/exo_suit(src), slot_wear_suit)
|
||||
|
||||
if ("Cargo Technician")
|
||||
src.equip_if_possible(new /obj/item/device/radio/headset/headset_cargo(src), slot_ears)
|
||||
src.equip_if_possible(new /obj/item/clothing/gloves/black(src), slot_gloves)
|
||||
src.equip_if_possible(new /obj/item/clothing/shoes/black(src), slot_shoes)
|
||||
src.equip_if_possible(new /obj/item/clothing/under/rank/cargo(src), slot_w_uniform)
|
||||
|
||||
@@ -4,9 +4,132 @@
|
||||
icon = 'aibots.dmi'
|
||||
layer = MOB_LAYER
|
||||
var/obj/item/weapon/card/id/botcard // the ID card that the bot "holds"
|
||||
var/on = 1
|
||||
var/health = 0 //do not forget to set health for your bot!
|
||||
var/maxhealth = 0
|
||||
var/fire_dam_coeff = 1.0
|
||||
var/brute_dam_coeff = 1.0
|
||||
|
||||
|
||||
/obj/machinery/bot/proc/turn_on()
|
||||
if (stat)
|
||||
return 0
|
||||
src.on = 1
|
||||
return 1
|
||||
|
||||
/obj/machinery/bot/proc/turn_off()
|
||||
src.on = 0
|
||||
|
||||
/obj/machinery/bot/proc/explode()
|
||||
del(src)
|
||||
|
||||
/obj/machinery/bot/proc/healthcheck()
|
||||
if (src.health <= 0)
|
||||
src.explode()
|
||||
|
||||
/obj/machinery/bot/examine()
|
||||
set src in view()
|
||||
..()
|
||||
if (src.health < maxhealth)
|
||||
if (src.health > maxhealth/3)
|
||||
usr << text("\red [src]'s parts look loose.")
|
||||
else
|
||||
usr << text("\red <B>[src]'s parts look very loose!</B>")
|
||||
return
|
||||
|
||||
/obj/machinery/bot/attack_alien(var/mob/living/carbon/alien/user as mob)
|
||||
/* Well, aliums dislike machines and do not want to caress them.
|
||||
if (user.a_intent == "help")
|
||||
for(var/mob/O in viewers(src, null))
|
||||
if ((O.client && !( O.blinded )))
|
||||
O.show_message(text("\blue [user] caresses [src.name] with its scythe like arm."), 1)
|
||||
else
|
||||
*/
|
||||
src.health -= rand(15,30)*brute_dam_coeff
|
||||
src.visible_message("\red <B>[user] has slashed [src]!</B>")
|
||||
playsound(src.loc, 'slice.ogg', 25, 1, -1)
|
||||
if(prob(10))
|
||||
new /obj/decal/cleanable/oil(src.loc)
|
||||
healthcheck()
|
||||
|
||||
|
||||
|
||||
/obj/machinery/bot/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if (istype(W, /obj/item/weapon/screwdriver))
|
||||
if (src.health < maxhealth)
|
||||
src.health = min(maxhealth, src.health+25)
|
||||
user.visible_message(
|
||||
"\red [user] repairs [src]!",
|
||||
"\blue You repair [src]!"
|
||||
)
|
||||
else
|
||||
user << "\blue [src] does not need a repair!"
|
||||
else
|
||||
switch(W.damtype)
|
||||
if("fire")
|
||||
src.health -= W.force * fire_dam_coeff
|
||||
if("brute")
|
||||
src.health -= W.force * brute_dam_coeff
|
||||
..()
|
||||
healthcheck()
|
||||
|
||||
/obj/machinery/bot/bullet_act(flag, A as obj)
|
||||
switch(flag)
|
||||
if (PROJECTILE_BULLET)
|
||||
src.health -= 20
|
||||
//if (PROJECTILE_WEAKBULLET || PROJECTILE_BEANBAG) //Detective's revolver fires marshmallows
|
||||
// src.health -= 2
|
||||
if (PROJECTILE_LASER)
|
||||
src.health -= 10
|
||||
if (PROJECTILE_PULSE)
|
||||
src.health -= 40
|
||||
healthcheck()
|
||||
|
||||
/obj/machinery/bot/meteorhit()
|
||||
src.explode()
|
||||
return
|
||||
|
||||
/obj/machinery/bot/blob_act()
|
||||
src.health -= rand(20,40)*fire_dam_coeff
|
||||
healthcheck()
|
||||
return
|
||||
|
||||
/obj/machinery/bot/ex_act(severity)
|
||||
switch(severity)
|
||||
if(1.0)
|
||||
src.explode()
|
||||
return
|
||||
if(2.0)
|
||||
src.health -= rand(5,10)*fire_dam_coeff
|
||||
src.health -= rand(10,20)*brute_dam_coeff
|
||||
healthcheck()
|
||||
return
|
||||
if(3.0)
|
||||
if (prob(50))
|
||||
src.health -= rand(1,5)*fire_dam_coeff
|
||||
src.health -= rand(1,5)*brute_dam_coeff
|
||||
healthcheck()
|
||||
return
|
||||
return
|
||||
|
||||
/obj/machinery/bot/emp_act(severity)
|
||||
var/was_on = on
|
||||
stat |= EMPED
|
||||
var/obj/overlay/pulse2 = new/obj/overlay ( src.loc )
|
||||
pulse2.icon = 'effects.dmi'
|
||||
pulse2.icon_state = "empdisable"
|
||||
pulse2.name = "emp sparks"
|
||||
pulse2.anchored = 1
|
||||
pulse2.dir = pick(cardinal)
|
||||
|
||||
spawn(10)
|
||||
del(pulse2)
|
||||
if (on)
|
||||
turn_off()
|
||||
spawn(severity*300)
|
||||
stat &= ~EMPED
|
||||
if (was_on)
|
||||
turn_on()
|
||||
/******************************************************************/
|
||||
// Navigation procs
|
||||
// Used for A-star pathfinding
|
||||
|
||||
@@ -23,7 +23,8 @@
|
||||
density = 0
|
||||
anchored = 0
|
||||
//weight = 1.0E7
|
||||
var/on = 1
|
||||
health = 25
|
||||
maxhealth = 25
|
||||
var/cleaning = 0
|
||||
var/locked = 1
|
||||
var/screwloose = 0
|
||||
@@ -36,15 +37,35 @@
|
||||
var/oldloc = null
|
||||
req_access = list(access_janitor)
|
||||
var/path[] = new()
|
||||
|
||||
|
||||
|
||||
/obj/machinery/bot/cleanbot/New()
|
||||
..()
|
||||
src.get_targets()
|
||||
src.icon_state = "cleanbot[src.on]"
|
||||
|
||||
|
||||
/obj/machinery/bot/cleanbot/attack_hand(user as mob)
|
||||
/obj/machinery/bot/cleanbot/turn_on()
|
||||
. = ..()
|
||||
src.icon_state = "cleanbot[src.on]"
|
||||
src.updateUsrDialog()
|
||||
|
||||
/obj/machinery/bot/cleanbot/turn_off()
|
||||
..()
|
||||
src.target = null
|
||||
src.oldtarget = null
|
||||
src.oldloc = null
|
||||
src.icon_state = "cleanbot[src.on]"
|
||||
src.path = new()
|
||||
src.updateUsrDialog()
|
||||
|
||||
/obj/machinery/bot/cleanbot/attack_hand(mob/user as mob)
|
||||
. = ..()
|
||||
if (.)
|
||||
return
|
||||
usr.machine = src
|
||||
interact(user)
|
||||
|
||||
/obj/machinery/bot/cleanbot/proc/interact(mob/user as mob)
|
||||
var/dat
|
||||
dat += text({"
|
||||
<TT><B>Automatic Station Cleaner v1.0</B></TT><BR><BR>
|
||||
@@ -73,13 +94,10 @@ text("<A href='?src=\ref[src];operation=oddbutton'>[src.oddbutton ? "Yes" : "No"
|
||||
src.add_fingerprint(usr)
|
||||
switch(href_list["operation"])
|
||||
if("start")
|
||||
src.on = !src.on
|
||||
src.target = null
|
||||
src.oldtarget = null
|
||||
src.oldloc = null
|
||||
src.icon_state = "cleanbot[src.on]"
|
||||
src.path = new()
|
||||
src.updateUsrDialog()
|
||||
if (src.on)
|
||||
turn_off()
|
||||
else
|
||||
turn_on()
|
||||
if("blood")
|
||||
src.blood =!src.blood
|
||||
src.get_targets()
|
||||
@@ -94,12 +112,10 @@ text("<A href='?src=\ref[src];operation=oddbutton'>[src.oddbutton ? "Yes" : "No"
|
||||
src.updateUsrDialog()
|
||||
|
||||
/obj/machinery/bot/cleanbot/attack_ai()
|
||||
src.on = !src.on
|
||||
src.target = null
|
||||
src.oldtarget = null
|
||||
src.oldloc = null
|
||||
src.icon_state = "cleanbot[src.on]"
|
||||
src.path = new()
|
||||
if (src.on)
|
||||
turn_off()
|
||||
else
|
||||
turn_on()
|
||||
|
||||
/obj/machinery/bot/cleanbot/attackby(obj/item/weapon/W, mob/user as mob)
|
||||
if (istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda))
|
||||
@@ -108,7 +124,7 @@ text("<A href='?src=\ref[src];operation=oddbutton'>[src.oddbutton ? "Yes" : "No"
|
||||
user << "You [ src.locked ? "lock" : "unlock"] the [src] behaviour controls."
|
||||
else
|
||||
user << "\red This [src] doesn't seem to accept your authority."
|
||||
if (istype(W, /obj/item/weapon/screwdriver))
|
||||
else if (istype(W, /obj/item/weapon/screwdriver))
|
||||
if(!src.locked)
|
||||
src.panelopen = !src.panelopen
|
||||
user << "You [ src.panelopen ? "open" : "close"] the hidden panel on [src]."
|
||||
@@ -118,6 +134,8 @@ text("<A href='?src=\ref[src];operation=oddbutton'>[src.oddbutton ? "Yes" : "No"
|
||||
src.screwloose = 1
|
||||
src.panelopen = 0
|
||||
src.locked = 1*/
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/machinery/bot/cleanbot/process()
|
||||
set background = 1
|
||||
@@ -211,6 +229,24 @@ text("<A href='?src=\ref[src];operation=oddbutton'>[src.oddbutton ? "Yes" : "No"
|
||||
src.anchored = 0
|
||||
src.target = null
|
||||
|
||||
/obj/machinery/bot/cleanbot/explode()
|
||||
src.on = 0
|
||||
src.visible_message("\red <B>[src] blows apart!</B>", 1)
|
||||
var/turf/Tsec = get_turf(src)
|
||||
|
||||
new /obj/item/weapon/reagent_containers/glass/bucket(Tsec)
|
||||
|
||||
new /obj/item/device/prox_sensor(Tsec)
|
||||
|
||||
if (prob(50))
|
||||
new /obj/item/robot_parts/l_arm(Tsec)
|
||||
|
||||
var/datum/effects/system/spark_spread/s = new /datum/effects/system/spark_spread
|
||||
s.set_up(3, 1, src)
|
||||
s.start()
|
||||
del(src)
|
||||
return
|
||||
|
||||
/obj/item/weapon/bucket_sensor/attackby(var/obj/item/W, mob/user as mob)
|
||||
if(istype(W, /obj/item/robot_parts/l_arm) || istype(W, /obj/item/robot_parts/r_arm))
|
||||
var/obj/machinery/bot/cleanbot/A = new /obj/machinery/bot/cleanbot
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -34,9 +34,10 @@
|
||||
layer = 5.0
|
||||
density = 0
|
||||
anchored = 0
|
||||
health = 25
|
||||
maxhealth = 25
|
||||
//weight = 1.0E7
|
||||
var/amount = 10
|
||||
var/on = 1
|
||||
var/repairing = 0
|
||||
var/improvefloors = 0
|
||||
var/eattiles = 0
|
||||
@@ -54,7 +55,28 @@
|
||||
..()
|
||||
src.updateicon()
|
||||
|
||||
/obj/machinery/bot/floorbot/attack_hand(user as mob)
|
||||
/obj/machinery/bot/floorbot/turn_on()
|
||||
. = ..()
|
||||
src.updateicon()
|
||||
src.updateUsrDialog()
|
||||
|
||||
/obj/machinery/bot/floorbot/turn_off()
|
||||
..()
|
||||
src.target = null
|
||||
src.oldtarget = null
|
||||
src.oldloc = null
|
||||
src.updateicon()
|
||||
src.path = new()
|
||||
src.updateUsrDialog()
|
||||
|
||||
/obj/machinery/bot/floorbot/attack_hand(mob/user as mob)
|
||||
. = ..()
|
||||
if (.)
|
||||
return
|
||||
usr.machine = src
|
||||
interact(user)
|
||||
|
||||
/obj/machinery/bot/floorbot/proc/interact(mob/user as mob)
|
||||
var/dat
|
||||
dat += "<TT><B>Automatic Station Floor Repairer v1.0</B></TT><BR><BR>"
|
||||
dat += "Status: <A href='?src=\ref[src];operation=start'>[src.on ? "On" : "Off"]</A><BR>"
|
||||
@@ -86,13 +108,15 @@
|
||||
src.amount += loaded
|
||||
user << "\red You load [loaded] tiles into the floorbot. He now contains [src.amount] tiles!"
|
||||
src.updateicon()
|
||||
if(istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda))
|
||||
else if(istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda))
|
||||
if(src.allowed(usr))
|
||||
src.locked = !src.locked
|
||||
user << "You [src.locked ? "lock" : "unlock"] the [src] behaviour controls."
|
||||
else
|
||||
user << "The [src] doesn't seem to accept your authority."
|
||||
src.updateUsrDialog()
|
||||
else
|
||||
..()
|
||||
|
||||
|
||||
/obj/machinery/bot/floorbot/Topic(href, href_list)
|
||||
@@ -102,13 +126,10 @@
|
||||
src.add_fingerprint(usr)
|
||||
switch(href_list["operation"])
|
||||
if("start")
|
||||
src.on = !src.on
|
||||
src.target = null
|
||||
src.oldtarget = null
|
||||
src.oldloc = null
|
||||
src.updateicon()
|
||||
src.path = new()
|
||||
src.updateUsrDialog()
|
||||
if (src.on)
|
||||
turn_off()
|
||||
else
|
||||
turn_on()
|
||||
if("improve")
|
||||
src.improvefloors = !src.improvefloors
|
||||
src.updateUsrDialog()
|
||||
@@ -136,12 +157,10 @@
|
||||
|
||||
|
||||
/obj/machinery/bot/floorbot/attack_ai()
|
||||
src.on = !src.on
|
||||
src.target = null
|
||||
src.oldtarget = null
|
||||
src.oldloc = null
|
||||
src.updateicon()
|
||||
src.path = new()
|
||||
if (src.on)
|
||||
turn_off()
|
||||
else
|
||||
turn_on()
|
||||
|
||||
/obj/machinery/bot/floorbot/process()
|
||||
set background = 1
|
||||
@@ -327,6 +346,26 @@
|
||||
else
|
||||
src.icon_state = "floorbot[src.on]e"
|
||||
|
||||
/obj/machinery/bot/floorbot/explode()
|
||||
src.on = 0
|
||||
src.visible_message("\red <B>[src] blows apart!</B>", 1)
|
||||
var/turf/Tsec = get_turf(src)
|
||||
|
||||
new /obj/item/weapon/storage/toolbox/mechanical(Tsec)
|
||||
|
||||
new /obj/item/device/prox_sensor(Tsec)
|
||||
|
||||
if (prob(50))
|
||||
new /obj/item/robot_parts/l_arm(Tsec)
|
||||
|
||||
if (amount)
|
||||
new /obj/item/stack/tile(Tsec) // only one tile, yes
|
||||
|
||||
var/datum/effects/system/spark_spread/s = new /datum/effects/system/spark_spread
|
||||
s.set_up(3, 1, src)
|
||||
s.start()
|
||||
del(src)
|
||||
return
|
||||
|
||||
|
||||
/obj/item/weapon/storage/toolbox/mechanical/attackby(var/obj/item/stack/tile/T, mob/user as mob)
|
||||
|
||||
@@ -11,9 +11,9 @@
|
||||
layer = 5.0
|
||||
density = 1
|
||||
anchored = 0
|
||||
health = 20
|
||||
maxhealth = 20
|
||||
req_access =list(access_medical)
|
||||
var/on = 1
|
||||
var/health = 20
|
||||
var/stunned = 0 //It can be stunned by tasers. Delicate circuits.
|
||||
var/locked = 1
|
||||
var/emagged = 0
|
||||
@@ -79,16 +79,22 @@
|
||||
src.cam.c_tag = src.name
|
||||
src.cam.network = "SS13"
|
||||
|
||||
/obj/machinery/bot/medbot/examine()
|
||||
set src in view()
|
||||
..()
|
||||
/obj/machinery/bot/medbot/turn_on()
|
||||
. = ..()
|
||||
src.icon_state = "medibot[src.on]"
|
||||
src.updateUsrDialog()
|
||||
|
||||
/obj/machinery/bot/medbot/turn_off()
|
||||
..()
|
||||
src.patient = null
|
||||
src.oldpatient = null
|
||||
src.oldloc = null
|
||||
src.path = new()
|
||||
src.currently_healing = 0
|
||||
src.last_found = world.time
|
||||
src.icon_state = "medibot[src.on]"
|
||||
src.updateUsrDialog()
|
||||
|
||||
if (src.health < 20)
|
||||
if (src.health > 15)
|
||||
usr << text("\red [src]'s parts look loose.")
|
||||
else
|
||||
usr << text("\red <B>[src]'s parts look very loose!</B>")
|
||||
return
|
||||
|
||||
/obj/machinery/bot/medbot/attack_ai(mob/user as mob)
|
||||
return toggle_power()
|
||||
@@ -97,6 +103,9 @@
|
||||
return attack_hand(user)
|
||||
|
||||
/obj/machinery/bot/medbot/attack_hand(mob/user as mob)
|
||||
. = ..()
|
||||
if (.)
|
||||
return
|
||||
var/dat
|
||||
dat += "<TT><B>Automatic Medical Unit v1.0</B></TT><BR><BR>"
|
||||
dat += "Status: <A href='?src=\ref[src];power=1'>[src.on ? "On" : "Off"]</A><BR>"
|
||||
@@ -190,12 +199,6 @@
|
||||
else
|
||||
user << "\red Access denied."
|
||||
|
||||
else if (istype(W, /obj/item/weapon/screwdriver))
|
||||
if (src.health < initial(src.health))
|
||||
src.health = initial(src.health)
|
||||
for(var/mob/O in viewers(src, null))
|
||||
O << "\red [user] repairs [src]!"
|
||||
|
||||
else if (istype(W, /obj/item/weapon/reagent_containers/glass))
|
||||
if(src.locked)
|
||||
user << "You cannot insert a beaker because the panel is locked!"
|
||||
@@ -212,17 +215,9 @@
|
||||
return
|
||||
|
||||
else
|
||||
switch(W.damtype)
|
||||
if("fire")
|
||||
src.health -= W.force * 0.75
|
||||
if("brute")
|
||||
src.health -= W.force * 0.5
|
||||
else
|
||||
if (src.health <= 0)
|
||||
src.explode()
|
||||
else if (W.force)
|
||||
step_to(src, (get_step_away(src,user)))
|
||||
..()
|
||||
if (health < maxhealth && !istype(W, /obj/item/weapon/screwdriver) && W.force)
|
||||
step_to(src, (get_step_away(src,user)))
|
||||
|
||||
|
||||
/obj/machinery/bot/medbot/process()
|
||||
@@ -317,15 +312,10 @@
|
||||
|
||||
|
||||
/obj/machinery/bot/medbot/proc/toggle_power()
|
||||
src.on = !src.on
|
||||
src.patient = null
|
||||
src.oldpatient = null
|
||||
src.oldloc = null
|
||||
src.path = new()
|
||||
src.currently_healing = 0
|
||||
src.last_found = world.time
|
||||
src.icon_state = "medibot[src.on]"
|
||||
src.updateUsrDialog()
|
||||
if (src.on)
|
||||
turn_off()
|
||||
else
|
||||
turn_on()
|
||||
return
|
||||
|
||||
/obj/machinery/bot/medbot/proc/assess_patient(mob/living/carbon/C as mob)
|
||||
@@ -453,43 +443,11 @@
|
||||
return
|
||||
|
||||
/obj/machinery/bot/medbot/bullet_act(flag, A as obj)
|
||||
if (flag == PROJECTILE_BULLET)
|
||||
src.health -= 18
|
||||
if (flag == PROJECTILE_TASER)
|
||||
src.stunned = min(stunned+10,20)
|
||||
..()
|
||||
|
||||
else if (flag == PROJECTILE_TASER)
|
||||
src.stunned += 10
|
||||
if(src.stunned > 20)
|
||||
src.stunned = 20
|
||||
|
||||
else if (flag == PROJECTILE_LASER)
|
||||
src.health -= 8
|
||||
|
||||
|
||||
if (src.health <= 0)
|
||||
src.explode()
|
||||
|
||||
/obj/machinery/bot/medbot/ex_act(severity)
|
||||
switch(severity)
|
||||
if(1.0)
|
||||
src.explode()
|
||||
return
|
||||
if(2.0)
|
||||
src.health -= 15
|
||||
if (src.health <= 0)
|
||||
src.explode()
|
||||
return
|
||||
return
|
||||
|
||||
/obj/machinery/bot/medbot/meteorhit()
|
||||
src.explode()
|
||||
return
|
||||
|
||||
/obj/machinery/bot/medbot/blob_act()
|
||||
if(prob(50))
|
||||
src.explode()
|
||||
return
|
||||
|
||||
/obj/machinery/bot/medbot/proc/explode()
|
||||
/obj/machinery/bot/medbot/explode()
|
||||
src.on = 0
|
||||
for(var/mob/O in hearers(src, null))
|
||||
O.show_message("\red <B>[src] blows apart!</B>", 1)
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -127,7 +127,7 @@
|
||||
radio_controller.add_object(src, control_freq, filter = RADIO_MULEBOT)
|
||||
radio_controller.add_object(src, beacon_freq, filter = RADIO_NAVBEACONS)
|
||||
spawn(10)
|
||||
post_signal(beacon_freq, "findbeacon", "delivery", filter = RADIO_NAVBEACONS)
|
||||
post_signal(beacon_freq, "findbeacon", "delivery", s_filter = RADIO_NAVBEACONS)
|
||||
|
||||
// receive radio signals
|
||||
// can detect bot status signals
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
/obj/item/weapon/storage/toolbox/emergency/New()
|
||||
..()
|
||||
new /obj/item/weapon/crowbar(src)
|
||||
new /obj/item/weapon/crowbar/red(src)
|
||||
new /obj/item/weapon/extinguisher(src)
|
||||
new /obj/item/device/flashlight(src)
|
||||
new /obj/item/device/radio(src)
|
||||
|
||||
@@ -1402,7 +1402,9 @@
|
||||
src << "Here's your rightclick admin verbs back"
|
||||
|
||||
src.verbs -= /client/proc/unstealthadmin
|
||||
var/temp = src.deadchat
|
||||
src.update_admins(src.holder.rank)
|
||||
src.deadchat = temp
|
||||
|
||||
/client/proc/stealthadmin()
|
||||
set name = "Toggle admin verb visibility"
|
||||
|
||||
@@ -63,6 +63,8 @@
|
||||
":b" = "binary",
|
||||
":a" = "alientalk",
|
||||
":t" = "Syndicate",
|
||||
":d" = "Mining",
|
||||
":q" = "Cargo",
|
||||
|
||||
//kinda localization -- rastaf0
|
||||
//same keys as above, but on russian keyboard layout. This file uses cp1251 as encoding.
|
||||
@@ -79,6 +81,8 @@
|
||||
":<3A>" = "binary",
|
||||
":<3A>" = "alientalk",
|
||||
":<3A>" = "Syndicate",
|
||||
":<3A>" = "Mining",
|
||||
":<3A>" = "Cargo",
|
||||
)
|
||||
|
||||
message_mode = keys[channel_prefix]
|
||||
|
||||
@@ -1222,7 +1222,8 @@
|
||||
var/obj/item/weapon/grab/G = src.l_hand
|
||||
if (!( L.container.Find(G.affecting) ))
|
||||
L.container += G.affecting
|
||||
G.affecting.ret_grab(L, 1)
|
||||
if (G.affecting)
|
||||
G.affecting.ret_grab(L, 1)
|
||||
if (istype(src.r_hand, /obj/item/weapon/grab))
|
||||
var/obj/item/weapon/grab/G = src.r_hand
|
||||
if (!( L.container.Find(G.affecting) ))
|
||||
|
||||
@@ -232,6 +232,8 @@ mob/new_player
|
||||
AttemptLateSpawn("Warden", wardenMax)
|
||||
if ("29")
|
||||
AttemptLateSpawn("Shaft Miner", minerMax)
|
||||
if ("30")
|
||||
AttemptLateSpawn("Mime", mimeMax)
|
||||
|
||||
if(!ready && href_list["preferences"])
|
||||
preferences.process_link(src, href_list)
|
||||
@@ -376,6 +378,9 @@ mob/new_player
|
||||
if (IsJobAvailable("Clown",clownMax))
|
||||
dat += "<a href='byond://?src=\ref[src];SelectedJob=15'>Clown</a><br>"
|
||||
|
||||
if (IsJobAvailable("Mime",mimeMax))
|
||||
dat += "<a href='byond://?src=\ref[src];SelectedJob=30'>Mime</a><br>"
|
||||
|
||||
if (IsJobAvailable("Chef",chefMax))
|
||||
dat += "<a href='byond://?src=\ref[src];SelectedJob=16'>Chef</a><br>"
|
||||
|
||||
|
||||
@@ -135,6 +135,7 @@
|
||||
#define NOPOWER 2
|
||||
#define POWEROFF 4 // tbd
|
||||
#define MAINT 8 // under maintaince
|
||||
#define EMPED 16 // temporary broken by EMP pulse
|
||||
|
||||
#define ENGINE_EJECT_Z 3
|
||||
|
||||
|
||||
Reference in New Issue
Block a user