Files
Bubberstation/code/modules/vehicles/secway.dm
SkyratBot 8affb60a42 [MIRROR] Adds a delay while welder repairing vehicles / mechs [MDB IGNORE] (#15409)
* Adds a delay while welder repairing vehicles / mechs (#68786)

About The Pull Request

So right now there is 0 delay between welding repairs for vehicles / mecha. You can literally hop out of your murderboner durand, flip on a welder, and repair it fully from 5% HP to 100% in a split second with an autoclicker macro. This adds a delay.
Why It's Good For The Game

Makes it so that you can't quickly hop out of your mecha/vehicle, instantly combat repair all it's damage, and hop right back into a fight. Instead, this encourages players to find safer areas before hopping out to commit to a repair.
Changelog

cl ShizCalev
balance: Vehicles & Mecha now take 2.5 second to repair with a welder.
qol: Vehicles & mecha will automatically repair over time once clicked.
qol: Vehicles & Mecha now give balloon alerts when repairing.
/cl

Duration is free for debate, was thinking somewhere between 2 & 3 seconds, 2.5 seemed a happy midpoint.

* Adds a delay while welder repairing vehicles / mechs

Co-authored-by: ShizCalev <ShizCalev@users.noreply.github.com>
2022-08-05 10:05:06 -07:00

104 lines
3.9 KiB
Plaintext

/obj/vehicle/ridden/secway
name = "secway"
desc = "A brave security cyborg gave its life to help you look like a complete tool."
icon_state = "secway"
max_integrity = 60
armor = list(MELEE = 10, BULLET = 0, LASER = 10, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 60, ACID = 60)
key_type = /obj/item/key/security
integrity_failure = 0.5
///What mobs are currently repairing us.
var/list/mob/living/repairing_mobs
///This stores a banana that, when used on the secway, prevents the vehicle from moving until it is removed.
var/obj/item/food/grown/banana/eddie_murphy
/obj/vehicle/ridden/secway/Initialize(mapload)
. = ..()
AddElement(/datum/element/ridable, /datum/component/riding/vehicle/secway)
/obj/vehicle/ridden/secway/atom_break()
START_PROCESSING(SSobj, src)
return ..()
/obj/vehicle/ridden/secway/process(delta_time)
if(atom_integrity >= integrity_failure * max_integrity)
return PROCESS_KILL
if(DT_PROB(10, delta_time))
return
var/datum/effect_system/fluid_spread/smoke/smoke = new
smoke.set_up(0, holder = src, location = src)
smoke.start()
/obj/vehicle/ridden/secway/welder_act(mob/living/user, obj/item/W)
if(user.combat_mode)
return
. = TRUE
if(LAZYFIND(repairing_mobs, user))
balloon_alert(user, "you're already repairing it!")
return
if(atom_integrity >= max_integrity)
balloon_alert(user, "it's not damaged!")
return
if(!W.tool_start_check(user, amount=1))
return
LAZYADD(repairing_mobs, user)
user.balloon_alert_to_viewers("started welding [src]", "started repairing [src]")
audible_message(span_hear("You hear welding."))
var/did_the_thing
while(atom_integrity < max_integrity)
if(W.use_tool(src, user, 2.5 SECONDS, volume=50, amount=1))
did_the_thing = TRUE
atom_integrity += min(10, (max_integrity - atom_integrity))
audible_message(span_hear("You hear welding."))
else
break
if(did_the_thing)
user.balloon_alert_to_viewers("[(atom_integrity >= max_integrity) ? "fully" : "partially"] repaired [src]")
else
user.balloon_alert_to_viewers("stopped welding [src]", "interrupted the repair!")
LAZYREMOVE(repairing_mobs, user)
/obj/vehicle/ridden/secway/attackby(obj/item/W, mob/living/user, params)
if(!istype(W, /obj/item/food/grown/banana))
return ..()
// ignore the occupants because they're presumably too distracted to notice the guy stuffing fruit into their vehicle's exhaust. do segways have exhausts? they do now!
user.visible_message(span_warning("[user] begins stuffing [W] into [src]'s tailpipe."), span_warning("You begin stuffing [W] into [src]'s tailpipe..."), ignored_mobs = occupants)
if(!do_after(user, 3 SECONDS, src))
return TRUE
if(user.transferItemToLoc(W, src))
user.visible_message(span_warning("[user] stuffs [W] into [src]'s tailpipe."), span_warning("You stuff [W] into [src]'s tailpipe."), ignored_mobs = occupants)
eddie_murphy = W
return TRUE
/obj/vehicle/ridden/secway/attack_hand(mob/living/user, list/modifiers)
if(!eddie_murphy)
return ..()
user.visible_message(span_warning("[user] begins cleaning [eddie_murphy] out of [src]."), span_warning("You begin cleaning [eddie_murphy] out of [src]..."))
if(!do_after(user, 60, target = src))
return ..()
user.visible_message(span_warning("[user] cleans [eddie_murphy] out of [src]."), span_warning("You manage to get [eddie_murphy] out of [src]."))
eddie_murphy.forceMove(drop_location())
eddie_murphy = null
/obj/vehicle/ridden/secway/examine(mob/user)
. = ..()
if(eddie_murphy)
. += span_warning("Something appears to be stuck in its exhaust...")
/obj/vehicle/ridden/secway/atom_destruction()
explosion(src, devastation_range = -1, light_impact_range = 2, flame_range = 3, flash_range = 4)
return ..()
/obj/vehicle/ridden/secway/Destroy()
STOP_PROCESSING(SSobj,src)
return ..()
//bullets will have a 60% chance to hit any riders
/obj/vehicle/ridden/secway/bullet_act(obj/projectile/P)
if(!buckled_mobs || prob(40))
return ..()
for(var/mob/rider as anything in buckled_mobs)
rider.bullet_act(P)
return TRUE