From 21c9cd0a05816d9d12e4c8d49a827cffb3f91f2e Mon Sep 17 00:00:00 2001 From: MisterLayne Date: Tue, 27 Feb 2018 18:36:00 -0500 Subject: [PATCH] fixes code, and adds changelog (hope I did it right) --- code/game/objects/items/robot/robot_parts.dm | 44 ++-- code/modules/mob/living/bot/edCLNbot.dm | 235 ++++++++++++++++++ .../reagents/reagent_containers/glass.dm | 13 +- html/changelogs/MisterLayne - ED-CLN.yml | 6 + icons/obj/aibots.dmi | Bin 51372 -> 56034 bytes polaris.dme | 1 + 6 files changed, 276 insertions(+), 23 deletions(-) create mode 100644 code/modules/mob/living/bot/edCLNbot.dm create mode 100644 html/changelogs/MisterLayne - ED-CLN.yml diff --git a/code/game/objects/items/robot/robot_parts.dm b/code/game/objects/items/robot/robot_parts.dm index 9a56cf94a7..2fa9ea63c7 100644 --- a/code/game/objects/items/robot/robot_parts.dm +++ b/code/game/objects/items/robot/robot_parts.dm @@ -106,13 +106,13 @@ if (M.use(1)) var/obj/item/weapon/secbot_assembly/ed209_assembly/B = new /obj/item/weapon/secbot_assembly/ed209_assembly B.loc = get_turf(src) - user << "You armed the robot frame." + to_chat(user, "You armed the robot frame.") if (user.get_inactive_hand()==src) user.remove_from_mob(src) user.put_in_inactive_hand(B) qdel(src) else - user << "You need one sheet of metal to arm the robot frame." + to_chat(user, "You need one sheet of metal to arm the robot frame.") if(istype(W, /obj/item/robot_parts/l_leg)) if(src.l_leg) return user.drop_item() @@ -149,9 +149,9 @@ src.chest = W src.updateicon() else if(!W:wires) - user << "You need to attach wires to it first!" + to_chat(user, "You need to attach wires to it first!") else - user << "You need to attach a cell to it first!" + to_chat(user, "You need to attach a cell to it first!") if(istype(W, /obj/item/robot_parts/head)) if(src.head) return @@ -161,16 +161,16 @@ src.head = W src.updateicon() else - user << "You need to attach a flash to it first!" + to_chat(user, "You need to attach a flash to it first!") if(istype(W, /obj/item/device/mmi)) var/obj/item/device/mmi/M = W if(check_completion()) if(!istype(loc,/turf)) - user << "You can't put \the [W] in, the frame has to be standing on the ground to be perfectly precise." + to_chat(user, "You can't put \the [W] in, the frame has to be standing on the ground to be perfectly precise.") return if(!M.brainmob) - user << "Sticking an empty [W] into the frame would sort of defeat the purpose." + to_chat(user, "Sticking an empty [W] into the frame would sort of defeat the purpose.") return if(!M.brainmob.key) var/ghost_can_reenter = 0 @@ -181,15 +181,15 @@ to_chat(user, "\The [W] is completely unresponsive; though it may be able to auto-resuscitate.") //Jamming a ghosted brain into a borg is likely detrimental, and may result in some problems. return if(!ghost_can_reenter) - user << "\The [W] is completely unresponsive; there's no point." + to_chat(user, "\The [W] is completely unresponsive; there's no point.") return if(M.brainmob.stat == DEAD) - user << "Sticking a dead [W] into the frame would sort of defeat the purpose." + to_chat(user, "Sticking a dead [W] into the frame would sort of defeat the purpose.") return if(jobban_isbanned(M.brainmob, "Cyborg")) - user << "This [W] does not seem to fit." + to_chat(user, "This [W] does not seem to fit.") return var/mob/living/silicon/robot/O = new /mob/living/silicon/robot(get_turf(loc), unfinished = 1) @@ -228,7 +228,7 @@ qdel(src) else - user << "The MMI must go in after everything else!" + to_chat(user, "The MMI must go in after everything else!") if (istype(W, /obj/item/weapon/pen)) var/t = sanitizeSafe(input(user, "Enter new robot name", src.name, src.created_name), MAX_NAME_LEN) @@ -245,22 +245,22 @@ ..() if(istype(W, /obj/item/weapon/cell)) if(src.cell) - user << "You have already inserted a cell!" + to_chat(user, "You have already inserted a cell!") return else user.drop_item() W.loc = src src.cell = W - user << "You insert the cell!" + to_chat(user, "You insert the cell!") if(istype(W, /obj/item/stack/cable_coil)) if(src.wires) - user << "You have already inserted wire!" + to_chat(user, "You have already inserted wire!") return else var/obj/item/stack/cable_coil/coil = W coil.use(1) src.wires = 1.0 - user << "You insert the wire!" + to_chat(user, "You insert the wire!") return /obj/item/robot_parts/head/attackby(obj/item/W as obj, mob/user as mob) @@ -269,14 +269,14 @@ if(istype(user,/mob/living/silicon/robot)) var/current_module = user.get_active_hand() if(current_module == W) - user << "How do you propose to do that?" + to_chat(user, "How do you propose to do that?") return else add_flashes(W,user) else add_flashes(W,user) else if(istype(W, /obj/item/weapon/stock_parts/manipulator)) - user << "You install some manipulators and modify the head, creating a functional spider-bot!" + to_chat(user, "You install some manipulators and modify the head, creating a functional spider-bot!") new /mob/living/simple_animal/spiderbot(get_turf(loc)) user.drop_item() qdel(W) @@ -286,24 +286,24 @@ /obj/item/robot_parts/head/proc/add_flashes(obj/item/W as obj, mob/user as mob) //Made into a seperate proc to avoid copypasta if(src.flash1 && src.flash2) - user << "You have already inserted the eyes!" + to_chat(user, "You have already inserted the eyes!") return else if(src.flash1) user.drop_item() W.loc = src src.flash2 = W - user << "You insert the flash into the eye socket!" + to_chat(user, "You insert the flash into the eye socket!") else user.drop_item() W.loc = src src.flash1 = W - user << "You insert the flash into the eye socket!" + to_chat(user, "You insert the flash into the eye socket!") /obj/item/robot_parts/emag_act(var/remaining_charges, var/mob/user) if(sabotaged) - user << "[src] is already sabotaged!" + to_chat(user, "[src] is already sabotaged!") else - user << "You short out the safeties." + to_chat(user, "You short out the safeties.") sabotaged = 1 return 1 diff --git a/code/modules/mob/living/bot/edCLNbot.dm b/code/modules/mob/living/bot/edCLNbot.dm new file mode 100644 index 0000000000..159b3e3594 --- /dev/null +++ b/code/modules/mob/living/bot/edCLNbot.dm @@ -0,0 +1,235 @@ +/mob/living/bot/cleanbot/edCLN + name = "ED-CLN Cleaning Robot" + desc = "A large cleaning robot. It looks rather efficient." + icon_state = "edCLN0" + req_one_access = list(access_robotics, access_janitor) + botcard_access = list(access_janitor, access_maint_tunnels) + + locked = 0 // Start unlocked so roboticist can set them to patrol. + wait_if_pulled = 0 // One big boi. + min_target_dist = 0 + + patrol_speed = 3 + target_speed = 6 + + cleaning = 0 + blood = 0 + var/red_switch = 0 + var/blue_switch = 0 + var/green_switch = 0 + +/mob/living/bot/cleanbot/edCLN/update_icons() + if(on && busy) + icon_state = "edCLN" + else + icon_state = "edCLN[on]" + +/mob/living/bot/cleanbot/edCLN/handleIdle() + if(prob(10)) + custom_emote(2, "makes a less than thrilled beeping sound.") + playsound(src.loc, 'sound/machines/synth_yes.ogg', 50, 0) + + if(red_switch && !blue_switch && !green_switch && prob(10) || src.emagged) + if(istype(loc, /turf/simulated)) + var/turf/simulated/T = loc + T.add_blood() + + if(!red_switch && blue_switch && !green_switch && prob(50) || src.emagged) + if(istype(loc, /turf/simulated)) + var/turf/simulated/T = loc + visible_message("\The [src] squirts a puddle of water on the floor!") + T.wet_floor() + + if(!red_switch && !blue_switch && green_switch && prob(10) || src.emagged) + if(istype(loc, /turf/simulated)) + var/turf/simulated/T = loc + visible_message("\The [src] stomps on \the [T], breaking it!") + qdel(T) + + if(red_switch && blue_switch && green_switch && prob(1)) + src.explode() + +/mob/living/bot/cleanbot/edCLN/explode() + on = 0 + visible_message("[src] blows apart!") + var/turf/Tsec = get_turf(src) + + new /obj/item/weapon/secbot_assembly/ed209_assembly(Tsec) + if(prob(50)) + new /obj/item/robot_parts/l_leg(Tsec) + if(prob(50)) + new /obj/item/robot_parts/r_leg(Tsec) + if(prob(50)) + if(prob(50)) + new /obj/item/weapon/reagent_containers/glass/bucket(Tsec) + else + new /obj/item/device/assembly/prox_sensor(Tsec) + + var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + s.set_up(3, 1, src) + s.start() + qdel(src) + return + +/mob/living/bot/cleanbot/edCLN/attack_hand(var/mob/user) + var/dat + usr.set_machine(src) + add_fingerprint(usr) + + dat += "Automatic Station Cleaner v2.0

" + dat += "Status: [on ? "On" : "Off"]
" + dat += "Behaviour controls are [locked ? "locked" : "unlocked"]
" + dat += "Maintenance panel is [open ? "opened" : "closed"]" + if(!locked || issilicon(user)) + dat += "
Cleans Blood: [blood ? "Yes" : "No"]
" + dat += "
Patrol station: [will_patrol ? "Yes" : "No"]
" + if(open && !locked) + dat += "
Red Switch: [red_switch ? "On" : "Off"]
" + dat += "
Green Switch: [green_switch ? "On" : "Off"]
" + dat += "
Blue Switch: [blue_switch ? "On" : "Off"]" + + user << browse("Cleaner v2.0 controls[dat]", "window=autocleaner") + onclose(user, "autocleaner") + return + +/mob/living/bot/cleanbot/edCLN/Topic(href, href_list) + usr.set_machine(src) + add_fingerprint(usr) + switch(href_list["operation"]) + if("start") + if(on) + turn_off() + else + turn_on() + if("blood") + blood = !blood + get_targets() + if("patrol") + will_patrol = !will_patrol + patrol_path = null + if("red_switch") + red_switch = !red_switch + to_chat(usr, "You flip the red switch [red_switch ? "on" : "off"].") + if("green_switch") + green_switch = !blue_switch + to_chat(usr, "You flip the green switch [green_switch ? "on" : "off"].") + if("blue_switch") + blue_switch = !blue_switch + to_chat(usr, "You flip the blue switch [blue_switch ? "on" : "off"].") + attack_hand(usr) + +/mob/living/bot/cleanbot/edCLN/emag_act(var/remaining_uses, var/mob/user) + . = ..() + if(!emagged) + if(user) + to_chat(user, "The [src] buzzes and beeps.") + playsound(src.loc, 'sound/machines/buzzbeep.ogg', 50, 0) + emagged = 1 + return 1 + +// Assembly + +/obj/item/weapon/secbot_assembly/edCLN_assembly + name = "ED-CLN assembly" + desc = "Some sort of bizarre assembly." + icon = 'icons/obj/aibots.dmi' + icon_state = "ed209_frame" + item_state = "buildpipe" + created_name = "ED-CLN Security Robot" + +/obj/item/weapon/secbot_assembly/edCLN_assembly/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) + ..() + + if(istype(W, /obj/item/weapon/pen)) + var/t = sanitizeSafe(input(user, "Enter new robot name", name, created_name), MAX_NAME_LEN) + if(!t) + return + if(!in_range(src, usr) && src.loc != usr) + return + created_name = t + return + + switch(build_step) + if(0, 1) + if(istype(W, /obj/item/robot_parts/l_leg) || istype(W, /obj/item/robot_parts/r_leg) || (istype(W, /obj/item/organ/external/leg) && ((W.name == "robotic right leg") || (W.name == "robotic left leg")))) + user.drop_item() + qdel(W) + build_step++ + to_chat(user, "You add \the [W] to \the [src].") + name = "legs/frame assembly" + if(build_step == 1) + icon_state = "ed209_leg" + else + icon_state = "ed209_legs" + + if(2) + if(istype(W, /obj/item/weapon/reagent_containers/glass/bucket)) + user.drop_item() + qdel(W) + build_step++ + to_chat(user, "You add \the [W] to \the [src].") + name = "bucket/legs/frame assembly" + item_state = "edCLN_bucket" + icon_state = "edCLN_bucket" + + if(3) + if(istype(W, /obj/item/weapon/weldingtool)) + var/obj/item/weapon/weldingtool/WT = W + if(WT.remove_fuel(0, user)) + build_step++ + name = "bucketed frame assembly" + to_chat(user, "You welded the bucket to \the [src].") + if(4) + if(isprox(W)) + user.drop_item() + qdel(W) + build_step++ + to_chat(user, "You add \the [W] to \the [src].") + name = "proximity bucket ED assembly" + item_state = "edCLN_prox" + icon_state = "edCLN_prox" + + if(5) + if(istype(W, /obj/item/stack/cable_coil)) + var/obj/item/stack/cable_coil/C = W + if (C.get_amount() < 1) + to_chat(user, "You need one coil of wire to wire \the [src].") + return + to_chat(user, "You start to wire \the [src].") + if(do_after(user, 40)) + if(C.use(1)) + build_step++ + to_chat(user, "You wire the ED-CLN assembly.") + name = "wired ED-CLN assembly" + return + + if(6) + if(istype(W, /obj/item/weapon/mop)) + name = "mop ED-CLN assembly" + build_step++ + to_chat(user, "You add \the [W] to \the [src].") + item_state = "edCLN_mop" + icon_state = "edCLN_mop" + user.drop_item() + qdel(W) + + if(7) + if(istype(W, /obj/item/weapon/screwdriver)) + playsound(src, W.usesound, 100, 1) + var/turf/T = get_turf(user) + to_chat(user, "Attatching the mop to the frame...") + if(do_after(user, 40) && get_turf(user) == T) + build_step++ + name = "mopped ED-CLN assembly" + to_chat(user, "Mop attached.") + + if(8) + if(istype(W, /obj/item/weapon/cell)) + build_step++ + to_chat(user, "You complete the ED-CLN.") + var/turf/T = get_turf(src) + new /mob/living/bot/cleanbot/edCLN(T,created_name) + user.drop_item() + qdel(W) + user.drop_from_inventory(src) + qdel(src) \ No newline at end of file diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm index a05a2fc112..316311c794 100644 --- a/code/modules/reagents/reagent_containers/glass.dm +++ b/code/modules/reagents/reagent_containers/glass.dm @@ -266,6 +266,18 @@ user.drop_from_inventory(src) qdel(src) return + else if(istype(D, /obj/item/stack/material) && D.get_material_name() == DEFAULT_WALL_MATERIAL) + var/obj/item/stack/material/M = D + if (M.use(1)) + var/obj/item/weapon/secbot_assembly/edCLN_assembly/B = new /obj/item/weapon/secbot_assembly/edCLN_assembly + B.loc = get_turf(src) + to_chat(user, "You armed the robot frame.") + if (user.get_inactive_hand()==src) + user.remove_from_mob(src) + user.put_in_inactive_hand(B) + qdel(src) + else + to_chat(user, "You need one sheet of metal to arm the robot frame.") else if(istype(D, /obj/item/weapon/mop)) if(reagents.total_volume < 1) to_chat(user, "\The [src] is empty!") @@ -273,7 +285,6 @@ reagents.trans_to_obj(D, 5) to_chat(user, "You wet \the [D] in \the [src].") playsound(loc, 'sound/effects/slosh.ogg', 25, 1) - return else return ..() diff --git a/html/changelogs/MisterLayne - ED-CLN.yml b/html/changelogs/MisterLayne - ED-CLN.yml new file mode 100644 index 0000000000..0aba34a616 --- /dev/null +++ b/html/changelogs/MisterLayne - ED-CLN.yml @@ -0,0 +1,6 @@ +author: MisterLayne + +delete-after: True + +changes: + - rscadd "Added a version of the ED-209 called the ED-CLN. It is a more efficient Cleanbot." \ No newline at end of file diff --git a/icons/obj/aibots.dmi b/icons/obj/aibots.dmi index 9627b2bb6ae4dd837267d7d997e214682ec34bad..d6332e0d2992b1f07397f24712647508596d7b81 100644 GIT binary patch delta 16363 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 H8VCJ9RFXzJ delta 11642 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 diff --git a/polaris.dme b/polaris.dme index 266d8966b3..b6cc19582a 100644 --- a/polaris.dme +++ b/polaris.dme @@ -1713,6 +1713,7 @@ #include "code\modules\mob\living\bot\bot.dm" #include "code\modules\mob\living\bot\cleanbot.dm" #include "code\modules\mob\living\bot\ed209bot.dm" +#include "code\modules\mob\living\bot\edCLNbot.dm" #include "code\modules\mob\living\bot\farmbot.dm" #include "code\modules\mob\living\bot\floorbot.dm" #include "code\modules\mob\living\bot\medbot.dm"