mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-24 20:47:10 +01:00
[Testmerge ready] Ports tool behaviours; refactors all tools; adds functionality for self-filling reagent containers (#11700)
* Adds support for self-filling reagent containers * Sets tool_behaviour on the default set of tools * Fixing merge conflicts * Refactors welder to use tool behaviour * The refactor: part I * The refactor: part II * Tool Refactor Part III: Revenge of the Maint * Tool Refactor Part IV: A New Hope * Tool Refactor Part V: The Oldcoder Strikes Back * Tool Refactor Part VI: Return of the Coder * VII * Holy shit, it compiles?! * Nannek I completed your TODO, you owe me ice cream * Tool helpers; telepad is compliant * Bugtest, Round 1: Fight Fuck refactoring disposals * Buggfixing, Round 2: Electric Boogaloo * Personal crafting uses tool behaviours now * Construction datums use new tool behaviours; better way of handling fueltank refuelling; more bugfixing * multitool_check_buffer change; removes some useless things in tool_helpers * proc name change * TRUE/FALSE changes * Bugfixing, Round 3: A Good Day To Bugfix Hard Fixes multiple issues raised by the testmerge * Minor style changes
This commit is contained in:
@@ -12,6 +12,7 @@ var/const/INGEST = 2
|
||||
var/chem_temp = T20C
|
||||
var/list/datum/reagent/addiction_list = new/list()
|
||||
var/flags
|
||||
var/list/reagents_generated_per_cycle = new/list()
|
||||
|
||||
/datum/reagents/New(maximum = 100)
|
||||
maximum_volume = maximum
|
||||
@@ -209,7 +210,7 @@ var/const/INGEST = 2
|
||||
return
|
||||
|
||||
var/datum/reagents/R = target.reagents
|
||||
if(get_reagent_amount(reagent)<amount)
|
||||
if(get_reagent_amount(reagent) < amount)
|
||||
amount = get_reagent_amount(reagent)
|
||||
amount = min(amount, R.maximum_volume-R.total_volume)
|
||||
var/trans_data = null
|
||||
@@ -348,7 +349,8 @@ var/const/INGEST = 2
|
||||
if(flags & REAGENT_NOREACT)
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
return
|
||||
|
||||
for(var/thing in reagents_generated_per_cycle)
|
||||
add_reagent(thing, reagents_generated_per_cycle[thing])
|
||||
for(var/datum/reagent/R in reagent_list)
|
||||
R.on_tick()
|
||||
|
||||
|
||||
@@ -242,46 +242,10 @@
|
||||
return TRUE // update UIs attached to this object
|
||||
|
||||
/obj/machinery/chem_dispenser/attackby(obj/item/I, mob/user, params)
|
||||
if(ismultitool(I))
|
||||
if(!hackedcheck)
|
||||
to_chat(user, hack_message)
|
||||
dispensable_reagents += hacked_reagents
|
||||
hackedcheck = TRUE
|
||||
else
|
||||
to_chat(user, unhack_message)
|
||||
dispensable_reagents -= hacked_reagents
|
||||
hackedcheck = FALSE
|
||||
SSnanoui.update_uis(src)
|
||||
return
|
||||
|
||||
if(default_deconstruction_screwdriver(user, "[initial(icon_state)]-o", "[initial(icon_state)]", I))
|
||||
return
|
||||
|
||||
if(exchange_parts(user, I))
|
||||
SSnanoui.update_uis(src)
|
||||
return
|
||||
|
||||
if(iswrench(I))
|
||||
playsound(src, I.usesound, 50, 1)
|
||||
if(anchored)
|
||||
anchored = FALSE
|
||||
to_chat(user, "<span class='caution'>[src] can now be moved.</span>")
|
||||
else if(!anchored)
|
||||
anchored = TRUE
|
||||
to_chat(user, "<span class='caution'>[src] is now secured.</span>")
|
||||
return
|
||||
|
||||
if(panel_open)
|
||||
if(iscrowbar(I))
|
||||
if(beaker)
|
||||
beaker.forceMove(loc)
|
||||
beaker = null
|
||||
if(cell)
|
||||
cell.forceMove(loc)
|
||||
cell = null
|
||||
default_deconstruction_crowbar(I)
|
||||
return TRUE
|
||||
|
||||
if(isrobot(user))
|
||||
return
|
||||
|
||||
@@ -307,6 +271,48 @@
|
||||
return
|
||||
return ..()
|
||||
|
||||
/obj/machinery/chem_dispenser/crowbar_act(mob/user, obj/item/I)
|
||||
if(!panel_open)
|
||||
return
|
||||
if(default_deconstruction_crowbar(user, I))
|
||||
if(beaker)
|
||||
beaker.forceMove(loc)
|
||||
beaker = null
|
||||
if(cell)
|
||||
cell.forceMove(loc)
|
||||
cell = null
|
||||
return TRUE
|
||||
|
||||
|
||||
/obj/machinery/chem_dispenser/multitool_act(mob/user, obj/item/I)
|
||||
. = TRUE
|
||||
if(!I.use_tool(src, user, 0, volume = I.tool_volume))
|
||||
return
|
||||
if(!hackedcheck)
|
||||
to_chat(user, hack_message)
|
||||
dispensable_reagents += hacked_reagents
|
||||
hackedcheck = TRUE
|
||||
else
|
||||
to_chat(user, unhack_message)
|
||||
dispensable_reagents -= hacked_reagents
|
||||
hackedcheck = FALSE
|
||||
SSnanoui.update_uis(src)
|
||||
|
||||
|
||||
/obj/machinery/chem_dispenser/screwdriver_act(mob/user, obj/item/I)
|
||||
if(default_deconstruction_screwdriver(user, "[initial(icon_state)]-o", "[initial(icon_state)]", I))
|
||||
return TRUE
|
||||
|
||||
/obj/machinery/chem_dispenser/wrench_act(mob/user, obj/item/I)
|
||||
. = TRUE
|
||||
if(!I.use_tool(src, user, 0, volume = I.tool_volume))
|
||||
return
|
||||
if(anchored)
|
||||
anchored = FALSE
|
||||
WRENCH_UNANCHOR_MESSAGE
|
||||
else if(!anchored)
|
||||
anchored = TRUE
|
||||
WRENCH_ANCHOR_MESSAGE
|
||||
|
||||
/obj/machinery/chem_dispenser/attack_ai(mob/user)
|
||||
return attack_hand(user)
|
||||
|
||||
@@ -58,9 +58,6 @@
|
||||
SSnanoui.update_uis(src)
|
||||
|
||||
/obj/machinery/chem_heater/attackby(obj/item/I, mob/user)
|
||||
if(default_unfasten_wrench(user, I))
|
||||
power_change()
|
||||
return
|
||||
if(isrobot(user))
|
||||
return
|
||||
|
||||
@@ -77,19 +74,26 @@
|
||||
SSnanoui.update_uis(src)
|
||||
return
|
||||
|
||||
if(default_deconstruction_screwdriver(user, "mixer0b", "mixer0b", I))
|
||||
return
|
||||
|
||||
if(exchange_parts(user, I))
|
||||
return
|
||||
|
||||
if(panel_open)
|
||||
if(istype(I, /obj/item/crowbar))
|
||||
eject_beaker()
|
||||
default_deconstruction_crowbar(I)
|
||||
return 1
|
||||
return ..()
|
||||
|
||||
/obj/machinery/chem_heater/wrench_act(mob/user, obj/item/I)
|
||||
. = TRUE
|
||||
default_unfasten_wrench(user, I)
|
||||
|
||||
/obj/machinery/chem_heater/screwdriver_act(mob/user, obj/item/I)
|
||||
. = TRUE
|
||||
default_deconstruction_screwdriver(user, "mixer0b", "mixer0b", I)
|
||||
|
||||
/obj/machinery/chem_heater/crowbar_act(mob/user, obj/item/I)
|
||||
if(!panel_open)
|
||||
return
|
||||
. = TRUE
|
||||
eject_beaker()
|
||||
default_deconstruction_crowbar(user, I)
|
||||
|
||||
/obj/machinery/chem_heater/attack_hand(mob/user)
|
||||
ui_interact(user)
|
||||
|
||||
|
||||
@@ -77,30 +77,12 @@
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/chem_master/attackby(obj/item/I, mob/user, params)
|
||||
if(default_deconstruction_screwdriver(user, "mixer0_nopower", "mixer0", I))
|
||||
if(beaker)
|
||||
beaker.forceMove(get_turf(src))
|
||||
beaker = null
|
||||
reagents.clear_reagents()
|
||||
if(loaded_pill_bottle)
|
||||
loaded_pill_bottle.forceMove(get_turf(src))
|
||||
loaded_pill_bottle = null
|
||||
return
|
||||
|
||||
if(exchange_parts(user, I))
|
||||
return
|
||||
|
||||
if(panel_open)
|
||||
if(iscrowbar(I))
|
||||
default_deconstruction_crowbar(I)
|
||||
return TRUE
|
||||
else
|
||||
to_chat(user, "<span class='warning'>You can't use the [name] while it's panel is opened!</span>")
|
||||
return TRUE
|
||||
|
||||
if(default_unfasten_wrench(user, I))
|
||||
power_change()
|
||||
return
|
||||
to_chat(user, "<span class='warning'>You can't use the [name] while it's panel is opened!</span>")
|
||||
return TRUE
|
||||
|
||||
if(istype(I, /obj/item/reagent_containers/glass) || istype(I, /obj/item/reagent_containers/food/drinks/drinkingglass))
|
||||
if(beaker)
|
||||
@@ -131,6 +113,35 @@
|
||||
else
|
||||
return ..()
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/obj/machinery/chem_master/crowbar_act(mob/user, obj/item/I)
|
||||
if(!panel_open)
|
||||
return
|
||||
if(default_deconstruction_crowbar(user, I))
|
||||
return TRUE
|
||||
|
||||
/obj/machinery/chem_master/screwdriver_act(mob/user, obj/item/I)
|
||||
. = TRUE
|
||||
if(default_deconstruction_screwdriver(user, "mixer0_nopower", "mixer0", I))
|
||||
if(beaker)
|
||||
beaker.forceMove(get_turf(src))
|
||||
beaker = null
|
||||
reagents.clear_reagents()
|
||||
if(loaded_pill_bottle)
|
||||
loaded_pill_bottle.forceMove(get_turf(src))
|
||||
loaded_pill_bottle = null
|
||||
return TRUE
|
||||
|
||||
/obj/machinery/chem_master/wrench_act(mob/user, obj/item/I)
|
||||
if(panel_open)
|
||||
return
|
||||
if(default_unfasten_wrench(user, I))
|
||||
power_change()
|
||||
return TRUE
|
||||
|
||||
/obj/machinery/chem_master/Topic(href, href_list)
|
||||
if(..())
|
||||
return TRUE
|
||||
|
||||
@@ -133,21 +133,35 @@
|
||||
else
|
||||
icon_state = "juicer0"
|
||||
|
||||
/obj/machinery/reagentgrinder/attackby(obj/item/I, mob/user, params)
|
||||
if(default_unfasten_wrench(user, I))
|
||||
/obj/machinery/reagentgrinder/crowbar_act(mob/user, obj/item/I)
|
||||
. = TRUE
|
||||
if(!anchored || beaker)
|
||||
return
|
||||
if(!panel_open)
|
||||
return
|
||||
if(!I.tool_use_check(user, 0))
|
||||
return
|
||||
default_deconstruction_crowbar(I)
|
||||
|
||||
/obj/machinery/reagentgrinder/screwdriver_act(mob/user, obj/item/I)
|
||||
. = TRUE
|
||||
if(!anchored || beaker)
|
||||
return
|
||||
if(!I.tool_use_check(user, 0))
|
||||
return
|
||||
default_deconstruction_screwdriver(user, "juicer_open", "juicer0", I)
|
||||
|
||||
/obj/machinery/reagentgrinder/wrench_act(mob/user, obj/item/I)
|
||||
. = TRUE
|
||||
if(!I.tool_use_check(user, 0))
|
||||
return
|
||||
default_unfasten_wrench(user, I)
|
||||
|
||||
/obj/machinery/reagentgrinder/attackby(obj/item/I, mob/user, params)
|
||||
|
||||
if(exchange_parts(user, I))
|
||||
return
|
||||
|
||||
if(anchored && !beaker)
|
||||
if(default_deconstruction_screwdriver(user, "juicer_open", "juicer0", I))
|
||||
return
|
||||
|
||||
if(panel_open && istype(I, /obj/item/crowbar))
|
||||
default_deconstruction_crowbar(I)
|
||||
return
|
||||
|
||||
if(istype(I, /obj/item/reagent_containers) && (I.container_type & OPENCONTAINER) )
|
||||
if(beaker)
|
||||
to_chat(user, "<span class='warning'>There's already a container inside.</span>")
|
||||
@@ -214,6 +228,8 @@
|
||||
src.updateUsrDialog()
|
||||
return FALSE
|
||||
|
||||
|
||||
|
||||
/obj/machinery/reagentgrinder/attack_ai(mob/user)
|
||||
return FALSE
|
||||
|
||||
|
||||
@@ -151,29 +151,24 @@
|
||||
test.Shift(NORTH, 1)
|
||||
test.Shift(EAST, 6)
|
||||
overlays += test
|
||||
|
||||
if(istype(I, /obj/item/weldingtool))
|
||||
if(!reagents.has_reagent("fuel"))
|
||||
to_chat(user, "<span class='warning'>[src] is out of fuel!</span>")
|
||||
return
|
||||
var/obj/item/weldingtool/W = I
|
||||
if(!W.welding)
|
||||
if(W.reagents.has_reagent("fuel", W.max_fuel))
|
||||
to_chat(user, "<span class='warning'>Your [W] is already full!</span>")
|
||||
return
|
||||
reagents.trans_to(W, W.max_fuel)
|
||||
user.visible_message("<span class='notice'>[user] refills [user.p_their()] [W].</span>", "<span class='notice'>You refill [W].</span>")
|
||||
playsound(src, 'sound/effects/refill.ogg', 50, 1)
|
||||
W.update_icon()
|
||||
else
|
||||
user.visible_message("<span class='warning'>[user] catastrophically fails at refilling [user.p_their()] [W]!</span>", "<span class='userdanger'>That was stupid of you.</span>")
|
||||
message_admins("[key_name_admin(user)] triggered a fueltank explosion at [COORD(loc)]")
|
||||
log_game("[key_name(user)] triggered a fueltank explosion at [COORD(loc)]")
|
||||
investigate_log("[key_name(user)] triggered a fueltank explosion at [COORD(loc)]", INVESTIGATE_BOMB)
|
||||
boom()
|
||||
else
|
||||
return ..()
|
||||
|
||||
obj/structure/reagent_dispensers/fueltank/welder_act(mob/user, obj/item/I)
|
||||
. = TRUE
|
||||
if(!reagents.has_reagent("fuel"))
|
||||
to_chat(user, "<span class='warning'>[src] is out of fuel!</span>")
|
||||
return
|
||||
if(I.tool_enabled && I.use_tool(src, user, volume = I.tool_volume)) //check it's enabled first to prevent duplicate messages when refuelling
|
||||
user.visible_message("<span class='danger'>[user] catastrophically fails at refilling [user.p_their()] [I]!</span>", "<span class='userdanger'>That was stupid of you.</span>")
|
||||
message_admins("[key_name_admin(user)] triggered a fueltank explosion at [COORD(loc)]")
|
||||
log_game("[key_name(user)] triggered a fueltank explosion at [COORD(loc)]")
|
||||
investigate_log("[key_name(user)] triggered a fueltank explosion at [COORD(loc)]", INVESTIGATE_BOMB)
|
||||
boom()
|
||||
else
|
||||
I.refill(user, src, reagents.get_reagent_amount("fuel")) //Try dump all fuel into the welder
|
||||
|
||||
|
||||
/obj/structure/reagent_dispensers/fueltank/Move()
|
||||
..()
|
||||
if(rig)
|
||||
@@ -233,35 +228,11 @@
|
||||
user.put_in_hands(S)
|
||||
paper_cups--
|
||||
|
||||
/obj/structure/reagent_dispensers/water_cooler/attackby(obj/item/W, mob/living/user, params)
|
||||
add_fingerprint(user)
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
if(iswrench(W))
|
||||
if(anchored)
|
||||
playsound(loc, W.usesound, 100, 1)
|
||||
user.visible_message("[user] starts loosening [src]'s floor casters.", \
|
||||
"<span class='notice'>You start loosening [src]'s floor casters...</span>")
|
||||
if(do_after(user, 40 * W.toolspeed, target = src))
|
||||
if(!loc || !anchored)
|
||||
return
|
||||
user.visible_message("[user] loosened [src]'s floor casters.", \
|
||||
"<span class='notice'>You loosen [src]'s floor casters.</span>")
|
||||
anchored = 0
|
||||
else
|
||||
if(!isfloorturf(loc))
|
||||
user.visible_message("<span class='warning'>A floor must be present to secure [src]!</span>")
|
||||
return
|
||||
playsound(loc, W.usesound, 100, 1)
|
||||
user.visible_message("[user] start securing [src]'s floor casters...", \
|
||||
"<span class='notice'>You start securing [src]'s floor casters...</span>")
|
||||
if(do_after(user, 40 * W.toolspeed, target = src))
|
||||
if(!loc || anchored)
|
||||
return
|
||||
user.visible_message("[user] has secured [src]'s floor casters.", \
|
||||
"<span class='notice'>You have secured [src]'s floor casters.</span>")
|
||||
anchored = 1
|
||||
/obj/structure/reagent_dispensers/water_cooler/wrench_act(mob/user, obj/item/I)
|
||||
. = TRUE
|
||||
if(!I.tool_use_check(user, 0))
|
||||
return
|
||||
return ..()
|
||||
default_unfasten_wrench(user, I, 40)
|
||||
|
||||
/obj/structure/reagent_dispensers/beerkeg
|
||||
name = "beer keg"
|
||||
|
||||
Reference in New Issue
Block a user