mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-23 13:10:02 +01:00
Moves yet more things from attackby() to item_interaction() (#96672)
## About The Pull Request 20 files converted, that last one's just to make the return value explicit. The syndicate bomb `attackby()`'s only half converted, because half of it was actually meant for `attackby()`. ## Why It's Good For The Game only like, 250 files to go. Slow and steady. ## Changelog 🆑 code: 20 files have been converted from attackby() to item_interaction() /🆑
This commit is contained in:
@@ -43,27 +43,28 @@
|
||||
synced_bank_account = null
|
||||
return ..()
|
||||
|
||||
/obj/machinery/computer/bank_machine/attackby(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers)
|
||||
/obj/machinery/computer/bank_machine/item_interaction(mob/living/user, obj/item/tool, list/modifiers)
|
||||
var/value = 0
|
||||
if(istype(weapon, /obj/item/stack/spacecash))
|
||||
var/obj/item/stack/spacecash/inserted_cash = weapon
|
||||
if(istype(tool, /obj/item/stack/spacecash))
|
||||
var/obj/item/stack/spacecash/inserted_cash = tool
|
||||
value = inserted_cash.value * inserted_cash.amount
|
||||
else if(istype(weapon, /obj/item/holochip))
|
||||
var/obj/item/holochip/inserted_holochip = weapon
|
||||
else if(istype(tool, /obj/item/holochip))
|
||||
var/obj/item/holochip/inserted_holochip = tool
|
||||
value = inserted_holochip.credits
|
||||
else if(istype(weapon, /obj/item/coin))
|
||||
var/obj/item/coin/inserted_coin = weapon
|
||||
else if(istype(tool, /obj/item/coin))
|
||||
var/obj/item/coin/inserted_coin = tool
|
||||
value = inserted_coin.value
|
||||
else if(istype(weapon, /obj/item/poker_chip))
|
||||
var/obj/item/poker_chip/inserted_chip = weapon
|
||||
else if(istype(tool, /obj/item/poker_chip))
|
||||
var/obj/item/poker_chip/inserted_chip = tool
|
||||
value = inserted_chip.get_item_credit_value()
|
||||
if(value)
|
||||
if(synced_bank_account)
|
||||
synced_bank_account.adjust_money(value)
|
||||
say("[MONEY_NAME_CAPITALIZED] deposited! The [synced_bank_account.account_holder] is now [synced_bank_account.account_balance] [MONEY_SYMBOL].")
|
||||
qdel(weapon)
|
||||
return
|
||||
return ..()
|
||||
if(!value)
|
||||
return NONE
|
||||
if(synced_bank_account)
|
||||
synced_bank_account.adjust_money(value)
|
||||
say("[MONEY_NAME_CAPITALIZED] deposited! The [synced_bank_account.account_holder] is now [synced_bank_account.account_balance] [MONEY_SYMBOL].")
|
||||
qdel(tool)
|
||||
return ITEM_INTERACT_SUCCESS
|
||||
|
||||
|
||||
/obj/machinery/computer/bank_machine/process(seconds_per_tick)
|
||||
. = ..()
|
||||
|
||||
@@ -152,35 +152,35 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/barsign, 32)
|
||||
deconstruct(disassembled = TRUE)
|
||||
return ITEM_INTERACT_SUCCESS
|
||||
|
||||
/obj/machinery/barsign/attackby(obj/item/attacking_item, mob/user)
|
||||
/obj/machinery/barsign/item_interaction(mob/living/user, obj/item/tool, list/modifiers)
|
||||
|
||||
if(istype(attacking_item, /obj/item/blueprints) && !change_area_name)
|
||||
if(istype(tool, /obj/item/blueprints) && !change_area_name)
|
||||
if(!panel_open)
|
||||
balloon_alert(user, "open the panel first!")
|
||||
return TRUE
|
||||
return ITEM_INTERACT_BLOCKING
|
||||
|
||||
change_area_name = TRUE
|
||||
balloon_alert(user, "sign registered")
|
||||
return TRUE
|
||||
return ITEM_INTERACT_SUCCESS
|
||||
|
||||
if(istype(attacking_item, /obj/item/stack/cable_coil) && panel_open)
|
||||
var/obj/item/stack/cable_coil/wire = attacking_item
|
||||
if(istype(tool, /obj/item/stack/cable_coil) && panel_open)
|
||||
var/obj/item/stack/cable_coil/wire = tool
|
||||
|
||||
if(atom_integrity >= max_integrity)
|
||||
balloon_alert(user, "doesn't need repairs!")
|
||||
return TRUE
|
||||
return ITEM_INTERACT_BLOCKING
|
||||
|
||||
if(!wire.use(2))
|
||||
balloon_alert(user, "need two cables!")
|
||||
return TRUE
|
||||
return ITEM_INTERACT_BLOCKING
|
||||
|
||||
balloon_alert(user, "repaired")
|
||||
atom_integrity = max_integrity
|
||||
set_machine_stat(machine_stat & ~BROKEN)
|
||||
update_appearance()
|
||||
return TRUE
|
||||
return ITEM_INTERACT_SUCCESS
|
||||
|
||||
return ..()
|
||||
return NONE
|
||||
|
||||
/obj/machinery/barsign/emp_act(severity)
|
||||
. = ..()
|
||||
|
||||
@@ -288,6 +288,18 @@
|
||||
SStgui.update_uis(src)
|
||||
return ITEM_INTERACT_SUCCESS
|
||||
|
||||
if(isidcard(tool))
|
||||
if(!id_lock)
|
||||
id_lock = WEAKREF(tool)
|
||||
balloon_alert(user, "successfully locked")
|
||||
return ITEM_INTERACT_SUCCESS
|
||||
if(tool != id_lock.resolve())
|
||||
balloon_alert(user, "locked by another id")
|
||||
return ITEM_INTERACT_BLOCKING
|
||||
id_lock = null
|
||||
balloon_alert(user, "successfully unlocked")
|
||||
return ITEM_INTERACT_SUCCESS
|
||||
|
||||
if(!panel_open || !is_wire_tool(tool))
|
||||
return NONE
|
||||
wires.interact(user)
|
||||
@@ -348,23 +360,6 @@
|
||||
y_add = 32 + manipulator_arm.calculate_item_offset(FALSE, pixels_to_offset = 16)
|
||||
)
|
||||
|
||||
/obj/machinery/big_manipulator/attackby(obj/item/some_item, mob/user, params)
|
||||
. = ..()
|
||||
if(!isidcard(some_item))
|
||||
return
|
||||
|
||||
var/obj/item/card/id/clicked_by_this_id = some_item
|
||||
|
||||
if(!id_lock)
|
||||
id_lock = WEAKREF(clicked_by_this_id)
|
||||
balloon_alert(user, "successfully locked")
|
||||
return
|
||||
var/obj/item/card/id/resolve_id = id_lock.resolve()
|
||||
if(clicked_by_this_id != resolve_id)
|
||||
balloon_alert(user, "locked by another id")
|
||||
return
|
||||
id_lock = null
|
||||
balloon_alert(user, "successfully unlocked")
|
||||
|
||||
/// Attaching the arm effect to the core.
|
||||
/obj/machinery/big_manipulator/proc/create_manipulator_arm()
|
||||
|
||||
@@ -110,11 +110,11 @@
|
||||
return TRUE
|
||||
return authenticated
|
||||
|
||||
/obj/machinery/computer/communications/attackby(obj/I, mob/user, list/modifiers, list/attack_modifiers)
|
||||
if(isidcard(I))
|
||||
attack_hand(user)
|
||||
else
|
||||
return ..()
|
||||
/obj/machinery/computer/communications/item_interaction(mob/living/user, obj/item/tool, list/modifiers)
|
||||
if(!isidcard(tool))
|
||||
return NONE
|
||||
attack_hand(user)
|
||||
return ITEM_INTERACT_SUCCESS
|
||||
|
||||
/obj/machinery/computer/communications/emag_act(mob/user, obj/item/card/emag/emag_card)
|
||||
if(istype(emag_card, /obj/item/card/emag/battlecruiser))
|
||||
|
||||
@@ -181,53 +181,53 @@
|
||||
genetic_damage_pulse()
|
||||
return
|
||||
|
||||
/obj/machinery/computer/dna_console/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers)
|
||||
/obj/machinery/computer/dna_console/item_interaction(mob/living/user, obj/item/tool, list/modifiers)
|
||||
// Store chromosomes in the console if there's room
|
||||
if (istype(item, /obj/item/chromosome))
|
||||
item.forceMove(src)
|
||||
stored_chromosomes += item
|
||||
to_chat(user, span_notice("You insert [item]."))
|
||||
return
|
||||
if (istype(tool, /obj/item/chromosome))
|
||||
tool.forceMove(src)
|
||||
stored_chromosomes += tool
|
||||
to_chat(user, span_notice("You insert [tool]."))
|
||||
return ITEM_INTERACT_SUCCESS
|
||||
|
||||
// Insert data disk if console disk slot is empty
|
||||
// Swap data disk if there is one already a disk in the console
|
||||
if (istype(item, /obj/item/disk/data)) //INSERT SOME DISKETTES
|
||||
if (istype(tool, /obj/item/disk/data)) //INSERT SOME DISKETTES
|
||||
// Insert disk into DNA Console
|
||||
if (!user.transferItemToLoc(item,src))
|
||||
return
|
||||
if (!user.transferItemToLoc(tool,src))
|
||||
return ITEM_INTERACT_BLOCKING
|
||||
// If insertion was successful and there's already a diskette in the console, eject the old one.
|
||||
if(diskette)
|
||||
eject_disk(user)
|
||||
// Set the new diskette.
|
||||
diskette = item
|
||||
to_chat(user, span_notice("You insert [item]."))
|
||||
return
|
||||
diskette = tool
|
||||
to_chat(user, span_notice("You insert [tool]."))
|
||||
return ITEM_INTERACT_SUCCESS
|
||||
|
||||
// Recycle non-activator used injectors
|
||||
// Turn activator used injectors (aka research injectors) to chromosomes
|
||||
if(istype(item, /obj/item/dnainjector/activator))
|
||||
var/obj/item/dnainjector/activator/activator = item
|
||||
if(activator.used)
|
||||
if(activator.research && activator.filled)
|
||||
if(prob(60))
|
||||
var/c_typepath = generate_chromosome()
|
||||
var/obj/item/chromosome/CM = new c_typepath (src)
|
||||
stored_chromosomes += CM
|
||||
to_chat(user,span_notice("[capitalize(CM.name)] added to storage."))
|
||||
else
|
||||
to_chat(user, span_notice("There was not enough genetic data to extract a viable chromosome."))
|
||||
if(activator.crispr_charge)
|
||||
crispr_charges++
|
||||
to_chat(user, span_notice("CRISPR charge added."))
|
||||
qdel(item)
|
||||
to_chat(user,span_notice("Recycled [item]."))
|
||||
return
|
||||
else
|
||||
if(istype(tool, /obj/item/dnainjector/activator))
|
||||
var/obj/item/dnainjector/activator/activator = tool
|
||||
if(!activator.used)
|
||||
//recycle unused activators
|
||||
qdel(item)
|
||||
to_chat(user, span_notice("Recycled unused [item]."))
|
||||
return
|
||||
return ..()
|
||||
qdel(tool)
|
||||
to_chat(user, span_notice("Recycled unused [tool]."))
|
||||
return ITEM_INTERACT_SUCCESS
|
||||
if(activator.research && activator.filled)
|
||||
if(prob(60))
|
||||
var/c_typepath = generate_chromosome()
|
||||
var/obj/item/chromosome/CM = new c_typepath (src)
|
||||
stored_chromosomes += CM
|
||||
to_chat(user,span_notice("[capitalize(CM.name)] added to storage."))
|
||||
else
|
||||
to_chat(user, span_notice("There was not enough genetic data to extract a viable chromosome."))
|
||||
if(activator.crispr_charge)
|
||||
crispr_charges++
|
||||
to_chat(user, span_notice("CRISPR charge added."))
|
||||
qdel(tool)
|
||||
to_chat(user,span_notice("Recycled [tool]."))
|
||||
return ITEM_INTERACT_SUCCESS
|
||||
|
||||
return NONE
|
||||
|
||||
/obj/machinery/computer/dna_console/multitool_act(mob/living/user, obj/item/multitool/tool)
|
||||
if(!QDELETED(tool.buffer) && istype(tool.buffer, /datum/techweb))
|
||||
|
||||
@@ -102,17 +102,17 @@
|
||||
. = ..()
|
||||
. += span_notice("There's [points] point\s on the card.")
|
||||
|
||||
/obj/item/card/mining_point_card/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers)
|
||||
if(!isidcard(attacking_item))
|
||||
return ..()
|
||||
var/obj/item/card/id/attacking_id = attacking_item
|
||||
/obj/item/card/mining_point_card/item_interaction(mob/living/user, obj/item/tool, list/modifiers)
|
||||
if(!isidcard(tool))
|
||||
return NONE
|
||||
var/obj/item/card/id/attacking_id = tool
|
||||
balloon_alert(user, "starting transfer")
|
||||
var/point_movement = tgui_alert(user, "To ID (from card) or to card (from ID)?", "Mining Points Transfer", list(TO_USER_ID, TO_POINT_CARD))
|
||||
if(!point_movement)
|
||||
return
|
||||
return ITEM_INTERACT_BLOCKING
|
||||
var/amount = tgui_input_number(user, "How much do you want to transfer? ID Balance: [attacking_id.registered_account.mining_points], Card Balance: [points]", "Transfer Points", min_value = 0, round_value = 1)
|
||||
if(!amount)
|
||||
return
|
||||
return ITEM_INTERACT_BLOCKING
|
||||
switch(point_movement)
|
||||
if(TO_USER_ID)
|
||||
if(amount > points)
|
||||
@@ -120,12 +120,15 @@
|
||||
attacking_id.registered_account.mining_points += amount
|
||||
points -= amount
|
||||
to_chat(user, span_notice("You transfer [amount] mining points from [src] to [attacking_id]."))
|
||||
return ITEM_INTERACT_SUCCESS
|
||||
if(TO_POINT_CARD)
|
||||
if(amount > attacking_id.registered_account.mining_points)
|
||||
amount = attacking_id.registered_account.mining_points
|
||||
attacking_id.registered_account.mining_points -= amount
|
||||
points += amount
|
||||
to_chat(user, span_notice("You transfer [amount] mining points from [attacking_id] to [src]."))
|
||||
return ITEM_INTERACT_SUCCESS
|
||||
return NONE
|
||||
|
||||
#undef TO_POINT_CARD
|
||||
#undef TO_USER_ID
|
||||
|
||||
@@ -50,9 +50,8 @@
|
||||
balloon_alert_to_viewers("id ejected")
|
||||
playsound(src, 'sound/machines/terminal/terminal_insert_disc.ogg', 50, FALSE)
|
||||
|
||||
/obj/machinery/computer/prisoner/attackby(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers)
|
||||
if(istype(weapon, /obj/item/card/id/advanced/prisoner))
|
||||
id_insert(user, weapon)
|
||||
return TRUE
|
||||
|
||||
return ..()
|
||||
/obj/machinery/computer/prisoner/item_interaction(mob/living/user, obj/item/tool, list/modifiers)
|
||||
if(!istype(tool, /obj/item/card/id/advanced/prisoner))
|
||||
return NONE
|
||||
id_insert(user, tool)
|
||||
return ITEM_INTERACT_SUCCESS
|
||||
|
||||
@@ -85,18 +85,18 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/defibrillator_mount, 28)
|
||||
return
|
||||
user.put_in_hands(defib.paddles)
|
||||
|
||||
/obj/machinery/defibrillator_mount/attackby(obj/item/item, mob/living/user, list/modifiers, list/attack_modifiers)
|
||||
if(istype(item, /obj/item/defibrillator))
|
||||
/obj/machinery/defibrillator_mount/item_interaction(mob/living/user, obj/item/tool, list/modifiers)
|
||||
if(istype(tool, /obj/item/defibrillator))
|
||||
if(defib)
|
||||
to_chat(user, span_warning("There's already a defibrillator in [src]!"))
|
||||
return
|
||||
var/obj/item/defibrillator/new_defib = item
|
||||
return ITEM_INTERACT_BLOCKING
|
||||
var/obj/item/defibrillator/new_defib = tool
|
||||
if(!new_defib.get_cell())
|
||||
to_chat(user, span_warning("Only defibrilators containing a cell can be hooked up to [src]!"))
|
||||
return
|
||||
return ITEM_INTERACT_BLOCKING
|
||||
if(HAS_TRAIT(new_defib, TRAIT_NODROP) || !user.transferItemToLoc(new_defib, src))
|
||||
to_chat(user, span_warning("[new_defib] is stuck to your hand!"))
|
||||
return
|
||||
return ITEM_INTERACT_BLOCKING
|
||||
user.visible_message(span_notice("[user] hooks up [new_defib] to [src]!"), \
|
||||
span_notice("You press [new_defib] into the mount, and it clicks into place."))
|
||||
playsound(src, 'sound/machines/click.ogg', 50, TRUE)
|
||||
@@ -104,20 +104,27 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/defibrillator_mount, 28)
|
||||
defib = new_defib
|
||||
begin_processing()
|
||||
update_appearance()
|
||||
return
|
||||
else if(defib && item == defib.paddles)
|
||||
defib.paddles.snap_back()
|
||||
return
|
||||
return ITEM_INTERACT_SUCCESS
|
||||
|
||||
if(!item.GetID() || (!allowed(user) && SSsecurity_level.get_current_level_as_number() < SEC_LEVEL_RED)) //anyone can toggle the clamps in red alert!
|
||||
if(defib && tool == defib.paddles)
|
||||
defib.paddles.snap_back()
|
||||
return ITEM_INTERACT_SUCCESS
|
||||
|
||||
if(!tool.GetID())
|
||||
return NONE
|
||||
|
||||
if((!allowed(user) && SSsecurity_level.get_current_level_as_number() < SEC_LEVEL_RED)) //anyone can toggle the clamps in red alert!
|
||||
to_chat(user, span_warning("Insufficient access."))
|
||||
return
|
||||
return ITEM_INTERACT_BLOCKING
|
||||
|
||||
if(!defib)
|
||||
to_chat(user, span_warning("You can't engage the clamps on a defibrillator that isn't there."))
|
||||
return
|
||||
return ITEM_INTERACT_BLOCKING
|
||||
|
||||
clamps_locked = !clamps_locked
|
||||
to_chat(user, span_notice("Clamps [clamps_locked ? "" : "dis"]engaged."))
|
||||
update_appearance()
|
||||
return ITEM_INTERACT_SUCCESS
|
||||
|
||||
/obj/machinery/defibrillator_mount/multitool_act(mob/living/user, obj/item/multitool)
|
||||
..()
|
||||
|
||||
@@ -940,18 +940,17 @@
|
||||
|
||||
/obj/machinery/door/airlock/wirecutter_act(mob/living/user, obj/item/tool)
|
||||
if(panel_open && security_level == AIRLOCK_SECURITY_PLASTEEL)
|
||||
. = ITEM_INTERACT_SUCCESS // everything after this shouldn't result in attackby
|
||||
if(hasPower() && shock(user, 60)) // Protective grille of wiring is electrified
|
||||
return .
|
||||
return ITEM_INTERACT_BLOCKING
|
||||
to_chat(user, span_notice("You start cutting through the outer grille."))
|
||||
if(!tool.use_tool(src, user, 10, volume=100))
|
||||
return .
|
||||
return ITEM_INTERACT_BLOCKING
|
||||
if(!panel_open) // double check it wasn't closed while we were trying to snip
|
||||
return .
|
||||
return ITEM_INTERACT_BLOCKING
|
||||
user.visible_message(span_notice("[user] cut through [src]'s outer grille."),
|
||||
span_notice("You cut through [src]'s outer grille."))
|
||||
security_level = AIRLOCK_SECURITY_PLASTEEL_O
|
||||
return .
|
||||
return ITEM_INTERACT_SUCCESS
|
||||
if(note)
|
||||
if(IsReachableBy(user))
|
||||
user.visible_message(span_notice("[user] cuts down [note] from [src]."), span_notice("You remove [note] from [src]."))
|
||||
@@ -1073,85 +1072,98 @@
|
||||
return ITEM_INTERACT_SUCCESS
|
||||
|
||||
/obj/machinery/door/airlock/proc/try_reinforce(mob/user, obj/item/stack/sheet/material, amt_required, new_security_level)
|
||||
if(!HAS_SILICON_ACCESS(user) && isElectrified() && shock(user, 75))
|
||||
return ITEM_INTERACT_BLOCKING
|
||||
if(material.get_amount() < amt_required)
|
||||
to_chat(user, span_warning("You need at least [amt_required] sheets of [material] to reinforce [src]."))
|
||||
return FALSE
|
||||
return ITEM_INTERACT_BLOCKING
|
||||
to_chat(user, span_notice("You start reinforcing [src]."))
|
||||
if(!do_after(user, 2 SECONDS, src))
|
||||
return FALSE
|
||||
return ITEM_INTERACT_BLOCKING
|
||||
if(!panel_open || !material.use(amt_required))
|
||||
return FALSE
|
||||
return ITEM_INTERACT_BLOCKING
|
||||
user.visible_message(span_notice("[user] reinforces [src] with [material]."),
|
||||
span_notice("You reinforce [src] with [material]."))
|
||||
security_level = new_security_level
|
||||
update_appearance()
|
||||
return TRUE
|
||||
return ITEM_INTERACT_SUCCESS
|
||||
|
||||
/obj/machinery/door/airlock/attackby(obj/item/C, mob/user, list/modifiers, list/attack_modifiers)
|
||||
if(!HAS_SILICON_ACCESS(user))
|
||||
if(isElectrified() && (C.obj_flags & CONDUCTS_ELECTRICITY) && shock(user, 75))
|
||||
return
|
||||
/obj/machinery/door/airlock/attacked_by(obj/item/attacking_item, mob/living/user, list/modifiers, list/attack_modifiers)
|
||||
if(!HAS_SILICON_ACCESS(user) && isElectrified() && (attacking_item.obj_flags & CONDUCTS_ELECTRICITY) && shock(user, 75))
|
||||
return ATTACK_FAILED
|
||||
return ..()
|
||||
|
||||
/obj/machinery/door/airlock/item_interaction(mob/living/user, obj/item/tool, list/modifiers)
|
||||
add_fingerprint(user)
|
||||
|
||||
if(is_wire_tool(C) && panel_open)
|
||||
if(is_wire_tool(tool) && panel_open)
|
||||
attempt_wire_interaction(user)
|
||||
return
|
||||
else if(panel_open && security_level == AIRLOCK_SECURITY_NONE && istype(C, /obj/item/stack/sheet))
|
||||
if(istype(C, /obj/item/stack/sheet/iron))
|
||||
return try_reinforce(user, C, 2, AIRLOCK_SECURITY_IRON)
|
||||
return ITEM_INTERACT_SUCCESS
|
||||
|
||||
else if(istype(C, /obj/item/stack/sheet/plasteel))
|
||||
if(!try_reinforce(user, C, 2, AIRLOCK_SECURITY_PLASTEEL))
|
||||
return FALSE
|
||||
if(panel_open && security_level == AIRLOCK_SECURITY_NONE && istype(tool, /obj/item/stack/sheet))
|
||||
if(istype(tool, /obj/item/stack/sheet/iron))
|
||||
return try_reinforce(user, tool, 2, AIRLOCK_SECURITY_IRON)
|
||||
|
||||
if(istype(tool, /obj/item/stack/sheet/plasteel))
|
||||
if(try_reinforce(user, tool, 2, AIRLOCK_SECURITY_PLASTEEL) & ITEM_INTERACT_BLOCKING)
|
||||
return ITEM_INTERACT_BLOCKING
|
||||
modify_max_integrity(max_integrity * AIRLOCK_INTEGRITY_MULTIPLIER)
|
||||
damage_deflection = AIRLOCK_DAMAGE_DEFLECTION_R
|
||||
update_appearance()
|
||||
return TRUE
|
||||
return ITEM_INTERACT_SUCCESS
|
||||
|
||||
else if(istype(C, /obj/item/pai_cable))
|
||||
var/obj/item/pai_cable/cable = C
|
||||
return NONE
|
||||
|
||||
if(istype(tool, /obj/item/pai_cable))
|
||||
var/obj/item/pai_cable/cable = tool
|
||||
cable.plugin(src, user)
|
||||
else if(istype(C, /obj/item/airlock_painter))
|
||||
change_paintjob(C, user)
|
||||
else if(istype(C, /obj/item/door_seal)) //adding the seal
|
||||
var/obj/item/door_seal/airlockseal = C
|
||||
return ITEM_INTERACT_SUCCESS
|
||||
|
||||
if(istype(tool, /obj/item/airlock_painter))
|
||||
change_paintjob(tool, user)
|
||||
return ITEM_INTERACT_SUCCESS
|
||||
|
||||
if(istype(tool, /obj/item/door_seal)) //adding the seal
|
||||
var/obj/item/door_seal/airlockseal = tool
|
||||
if(!density)
|
||||
to_chat(user, span_warning("[src] must be closed before you can seal it!"))
|
||||
return
|
||||
return ITEM_INTERACT_BLOCKING
|
||||
if(seal)
|
||||
to_chat(user, span_warning("[src] has already been sealed!"))
|
||||
return
|
||||
return ITEM_INTERACT_BLOCKING
|
||||
user.visible_message(span_notice("[user] begins sealing [src]."), span_notice("You begin sealing [src]."))
|
||||
playsound(src, 'sound/items/tools/jaws_pry.ogg', 30, TRUE)
|
||||
if(!do_after(user, airlockseal.seal_time, target = src))
|
||||
return
|
||||
return ITEM_INTERACT_BLOCKING
|
||||
if(!density)
|
||||
to_chat(user, span_warning("[src] must be closed before you can seal it!"))
|
||||
return
|
||||
return ITEM_INTERACT_BLOCKING
|
||||
if(seal)
|
||||
to_chat(user, span_warning("[src] has already been sealed!"))
|
||||
return
|
||||
return ITEM_INTERACT_BLOCKING
|
||||
if(!user.transferItemToLoc(airlockseal, src))
|
||||
to_chat(user, span_warning("For some reason, you can't attach [airlockseal]!"))
|
||||
return
|
||||
return ITEM_INTERACT_BLOCKING
|
||||
playsound(src, 'sound/machines/airlock/airlockforced.ogg', 30, TRUE)
|
||||
user.visible_message(span_notice("[user] finishes sealing [src]."), span_notice("You finish sealing [src]."))
|
||||
seal = airlockseal
|
||||
modify_max_integrity(max_integrity * AIRLOCK_SEAL_MULTIPLIER)
|
||||
update_appearance()
|
||||
return ITEM_INTERACT_SUCCESS
|
||||
|
||||
else if(istype(C, /obj/item/paper) || istype(C, /obj/item/photo))
|
||||
if(istype(tool, /obj/item/paper) || istype(tool, /obj/item/photo))
|
||||
if(note)
|
||||
to_chat(user, span_warning("There's already something pinned to this airlock! Use wirecutters to remove it."))
|
||||
return
|
||||
if(!user.transferItemToLoc(C, src))
|
||||
to_chat(user, span_warning("For some reason, you can't attach [C]!"))
|
||||
return
|
||||
user.visible_message(span_notice("[user] pins [C] to [src]."), span_notice("You pin [C] to [src]."))
|
||||
note = C
|
||||
return ITEM_INTERACT_BLOCKING
|
||||
if(!user.transferItemToLoc(tool, src))
|
||||
to_chat(user, span_warning("For some reason, you can't attach [tool]!"))
|
||||
return ITEM_INTERACT_BLOCKING
|
||||
user.visible_message(span_notice("[user] pins [tool] to [src]."), span_notice("You pin [tool] to [src]."))
|
||||
note = tool
|
||||
update_appearance()
|
||||
else
|
||||
return ..()
|
||||
return ITEM_INTERACT_SUCCESS
|
||||
|
||||
return NONE
|
||||
|
||||
|
||||
/obj/machinery/door/airlock/try_to_weld(obj/item/weldingtool/W, mob/living/user)
|
||||
|
||||
@@ -331,13 +331,13 @@
|
||||
/obj/machinery/door/proc/try_to_activate_door(mob/user, access_bypass = FALSE, bumped = FALSE)
|
||||
add_fingerprint(user)
|
||||
if(operating || (obj_flags & EMAGGED))
|
||||
return
|
||||
return FALSE
|
||||
|
||||
if(!bumped && !can_open_with_hands)
|
||||
return
|
||||
return FALSE
|
||||
|
||||
if(elevator_mode && elevator_status != LIFT_PLATFORM_UNLOCKED)
|
||||
return
|
||||
return FALSE
|
||||
|
||||
// note: if the ID wire is cut no ID cards are checked at all! (This is intentional!)
|
||||
if(access_bypass || (requiresID() && user_can_activate_door(user)))
|
||||
@@ -347,8 +347,9 @@
|
||||
close()
|
||||
return TRUE
|
||||
|
||||
else if(!operating && density)
|
||||
if(!operating && density)
|
||||
run_animation(DOOR_DENY_ANIMATION)
|
||||
return FALSE
|
||||
|
||||
/// Used in try_to_activate_door
|
||||
/obj/machinery/door/proc/user_can_activate_door(mob/user)
|
||||
@@ -448,20 +449,27 @@
|
||||
/obj/machinery/door/try_to_crowbar_secondary(obj/item/acting_object, mob/user)
|
||||
try_to_crowbar(null, user, FALSE)
|
||||
|
||||
/obj/machinery/door/attackby(obj/item/weapon, mob/living/user, list/modifiers, list/attack_modifiers)
|
||||
if(istype(weapon, /obj/item/access_key))
|
||||
var/obj/item/access_key/key = weapon
|
||||
return key.attempt_open_door(user, src)
|
||||
else if(!user.combat_mode && istype(weapon, /obj/item/fireaxe))
|
||||
try_to_crowbar(weapon, user, FALSE)
|
||||
return TRUE
|
||||
else if(weapon.item_flags & NOBLUDGEON || user.combat_mode)
|
||||
return ..()
|
||||
else if(!user.combat_mode && istype(weapon, /obj/item/stack/sheet/mineral/wood))
|
||||
return ..() // we need this so our can_barricade element can be called using COMSIG_ATOM_ATTACKBY
|
||||
else if(try_to_activate_door(user))
|
||||
return TRUE
|
||||
return ..()
|
||||
/obj/machinery/door/item_interaction(mob/living/user, obj/item/tool, list/modifiers)
|
||||
if(istype(tool, /obj/item/access_key))
|
||||
var/obj/item/access_key/key = tool
|
||||
if(!key.attempt_open_door(user, src))
|
||||
return ITEM_INTERACT_BLOCKING
|
||||
return ITEM_INTERACT_SUCCESS
|
||||
|
||||
if(!user.combat_mode && istype(tool, /obj/item/fireaxe))
|
||||
try_to_crowbar(tool, user, FALSE)
|
||||
return ITEM_INTERACT_SUCCESS
|
||||
|
||||
if(tool.item_flags & NOBLUDGEON || user.combat_mode)
|
||||
return NONE
|
||||
|
||||
if(istype(tool, /obj/item/stack/sheet/mineral/wood))
|
||||
return NONE // we need this so our can_barricade element can be called using COMSIG_ATOM_ATTACKBY
|
||||
|
||||
if(try_to_activate_door(user))
|
||||
return ITEM_INTERACT_SUCCESS
|
||||
|
||||
return NONE
|
||||
|
||||
/obj/machinery/door/item_interaction_secondary(mob/living/user, obj/item/tool, list/modifiers)
|
||||
// allows you to crowbar doors while in combat mode
|
||||
|
||||
@@ -836,114 +836,128 @@
|
||||
icon_state = "[base_icon_state][constructionStep]"
|
||||
return ..()
|
||||
|
||||
/obj/structure/firelock_frame/attackby(obj/item/attacking_object, mob/user)
|
||||
/obj/structure/firelock_frame/item_interaction(mob/living/user, obj/item/tool, list/modifiers)
|
||||
switch(constructionStep)
|
||||
if(CONSTRUCTION_PANEL_OPEN)
|
||||
if(attacking_object.tool_behaviour == TOOL_CROWBAR)
|
||||
attacking_object.play_tool_sound(src)
|
||||
user.visible_message(span_notice("[user] begins removing the circuit board from [src]..."), \
|
||||
span_notice("You begin prying out the circuit board from [src]..."))
|
||||
if(!attacking_object.use_tool(src, user, DEFAULT_STEP_TIME))
|
||||
return
|
||||
if(constructionStep != CONSTRUCTION_PANEL_OPEN)
|
||||
return
|
||||
playsound(get_turf(src), 'sound/items/deconstruct.ogg', 50, TRUE)
|
||||
user.visible_message(span_notice("[user] removes [src]'s circuit board."), \
|
||||
span_notice("You remove the circuit board from [src]."))
|
||||
new /obj/item/electronics/firelock(drop_location())
|
||||
constructionStep = CONSTRUCTION_NO_CIRCUIT
|
||||
update_appearance()
|
||||
return
|
||||
if(attacking_object.tool_behaviour == TOOL_WRENCH)
|
||||
if(locate(/obj/machinery/door/firedoor) in get_turf(src))
|
||||
to_chat(user, span_warning("There's already a firelock there."))
|
||||
return
|
||||
attacking_object.play_tool_sound(src)
|
||||
user.visible_message(span_notice("[user] starts bolting down [src]..."), \
|
||||
span_notice("You begin bolting [src]..."))
|
||||
if(!attacking_object.use_tool(src, user, DEFAULT_STEP_TIME))
|
||||
return
|
||||
if(locate(/obj/machinery/door/firedoor) in get_turf(src))
|
||||
return
|
||||
user.visible_message(span_notice("[user] finishes the firelock."), \
|
||||
span_notice("You finish the firelock."))
|
||||
playsound(get_turf(src), 'sound/items/deconstruct.ogg', 50, TRUE)
|
||||
if(reinforced)
|
||||
new /obj/machinery/door/firedoor/heavy(get_turf(src))
|
||||
else if(directional)
|
||||
var/obj/machinery/door/firedoor/border_only/new_firedoor = new /obj/machinery/door/firedoor/border_only(get_turf(src))
|
||||
new_firedoor.setDir(dir)
|
||||
new_firedoor.adjust_lights_starting_offset()
|
||||
else
|
||||
new /obj/machinery/door/firedoor(get_turf(src))
|
||||
qdel(src)
|
||||
return
|
||||
if(istype(attacking_object, /obj/item/stack/sheet/plasteel))
|
||||
if(directional)
|
||||
to_chat(user, span_warning("[src] can not be reinforced."))
|
||||
return
|
||||
var/obj/item/stack/sheet/plasteel/plasteel_sheet = attacking_object
|
||||
if(reinforced)
|
||||
to_chat(user, span_warning("[src] is already reinforced."))
|
||||
return
|
||||
if(plasteel_sheet.get_amount() < 2)
|
||||
to_chat(user, span_warning("You need more plasteel to reinforce [src]."))
|
||||
return
|
||||
user.visible_message(span_notice("[user] begins reinforcing [src]..."), \
|
||||
span_notice("You begin reinforcing [src]..."))
|
||||
playsound(get_turf(src), 'sound/items/deconstruct.ogg', 50, TRUE)
|
||||
if(do_after(user, DEFAULT_STEP_TIME, target = src))
|
||||
if(constructionStep != CONSTRUCTION_PANEL_OPEN || reinforced || plasteel_sheet.get_amount() < 2 || !plasteel_sheet)
|
||||
return
|
||||
user.visible_message(span_notice("[user] reinforces [src]."), \
|
||||
span_notice("You reinforce [src]."))
|
||||
playsound(get_turf(src), 'sound/items/deconstruct.ogg', 50, TRUE)
|
||||
plasteel_sheet.use(2)
|
||||
reinforced = 1
|
||||
return
|
||||
if(!istype(tool, /obj/item/stack/sheet/plasteel))
|
||||
return NONE
|
||||
if(directional)
|
||||
to_chat(user, span_warning("[src] can not be reinforced."))
|
||||
return ITEM_INTERACT_BLOCKING
|
||||
var/obj/item/stack/sheet/plasteel/plasteel_sheet = tool
|
||||
if(reinforced)
|
||||
to_chat(user, span_warning("[src] is already reinforced."))
|
||||
return ITEM_INTERACT_BLOCKING
|
||||
if(plasteel_sheet.get_amount() < 2)
|
||||
to_chat(user, span_warning("You need more plasteel to reinforce [src]."))
|
||||
return ITEM_INTERACT_BLOCKING
|
||||
user.visible_message(span_notice("[user] begins reinforcing [src]..."), \
|
||||
span_notice("You begin reinforcing [src]..."))
|
||||
playsound(get_turf(src), 'sound/items/deconstruct.ogg', 50, TRUE)
|
||||
if(!do_after(user, DEFAULT_STEP_TIME, target = src))
|
||||
return ITEM_INTERACT_BLOCKING
|
||||
if(constructionStep != CONSTRUCTION_PANEL_OPEN || reinforced || plasteel_sheet.get_amount() < 2 || !plasteel_sheet)
|
||||
return ITEM_INTERACT_BLOCKING
|
||||
user.visible_message(span_notice("[user] reinforces [src]."), \
|
||||
span_notice("You reinforce [src]."))
|
||||
playsound(get_turf(src), 'sound/items/deconstruct.ogg', 50, TRUE)
|
||||
plasteel_sheet.use(2)
|
||||
reinforced = 1
|
||||
return ITEM_INTERACT_SUCCESS
|
||||
|
||||
if(CONSTRUCTION_NO_CIRCUIT)
|
||||
if(istype(attacking_object, /obj/item/electronics/firelock))
|
||||
user.visible_message(span_notice("[user] starts adding [attacking_object] to [src]..."), \
|
||||
if(istype(tool, /obj/item/electronics/firelock))
|
||||
user.visible_message(span_notice("[user] starts adding [tool] to [src]..."), \
|
||||
span_notice("You begin adding a circuit board to [src]..."))
|
||||
playsound(get_turf(src), 'sound/items/deconstruct.ogg', 50, TRUE)
|
||||
if(!do_after(user, DEFAULT_STEP_TIME, target = src))
|
||||
return
|
||||
return ITEM_INTERACT_BLOCKING
|
||||
if(constructionStep != CONSTRUCTION_NO_CIRCUIT)
|
||||
return
|
||||
qdel(attacking_object)
|
||||
return ITEM_INTERACT_BLOCKING
|
||||
qdel(tool)
|
||||
user.visible_message(span_notice("[user] adds a circuit to [src]."), \
|
||||
span_notice("You insert and secure [attacking_object]."))
|
||||
span_notice("You insert and secure [tool]."))
|
||||
playsound(get_turf(src), 'sound/items/deconstruct.ogg', 50, TRUE)
|
||||
constructionStep = CONSTRUCTION_PANEL_OPEN
|
||||
update_appearance()
|
||||
return
|
||||
if(attacking_object.tool_behaviour == TOOL_WELDER)
|
||||
if(!attacking_object.tool_start_check(user, amount=1))
|
||||
return
|
||||
user.visible_message(span_notice("[user] begins cutting apart [src]'s frame..."), \
|
||||
span_notice("You begin slicing [src] apart..."))
|
||||
return ITEM_INTERACT_SUCCESS
|
||||
|
||||
if(attacking_object.use_tool(src, user, DEFAULT_STEP_TIME, volume=50))
|
||||
if(constructionStep != CONSTRUCTION_NO_CIRCUIT)
|
||||
return
|
||||
user.visible_message(span_notice("[user] cuts apart [src]!"), \
|
||||
span_notice("You cut [src] into metal."))
|
||||
var/turf/targetloc = get_turf(src)
|
||||
new /obj/item/stack/sheet/iron(targetloc, directional ? 2 : 3)
|
||||
if(reinforced)
|
||||
new /obj/item/stack/sheet/plasteel(targetloc, 2)
|
||||
qdel(src)
|
||||
return
|
||||
if(istype(attacking_object, /obj/item/electroadaptive_pseudocircuit))
|
||||
var/obj/item/electroadaptive_pseudocircuit/raspberrypi = attacking_object
|
||||
if(istype(tool, /obj/item/electroadaptive_pseudocircuit))
|
||||
var/obj/item/electroadaptive_pseudocircuit/raspberrypi = tool
|
||||
if(!raspberrypi.adapt_circuit(user, circuit_cost = DEFAULT_STEP_TIME * 0.0005 * STANDARD_CELL_CHARGE))
|
||||
return
|
||||
return ITEM_INTERACT_BLOCKING
|
||||
user.visible_message(span_notice("[user] fabricates a circuit and places it into [src]."), \
|
||||
span_notice("You adapt a firelock circuit and slot it into the assembly."))
|
||||
constructionStep = CONSTRUCTION_PANEL_OPEN
|
||||
update_appearance()
|
||||
return
|
||||
return ..()
|
||||
return ITEM_INTERACT_SUCCESS
|
||||
return NONE
|
||||
|
||||
/obj/structure/firelock_frame/crowbar_act(mob/living/user, obj/item/tool)
|
||||
if(constructionStep != CONSTRUCTION_PANEL_OPEN)
|
||||
return NONE
|
||||
tool.play_tool_sound(src)
|
||||
user.visible_message(span_notice("[user] begins removing the circuit board from [src]..."), \
|
||||
span_notice("You begin prying out the circuit board from [src]..."))
|
||||
if(!tool.use_tool(src, user, DEFAULT_STEP_TIME))
|
||||
return ITEM_INTERACT_BLOCKING
|
||||
if(constructionStep != CONSTRUCTION_PANEL_OPEN)
|
||||
return ITEM_INTERACT_BLOCKING
|
||||
playsound(get_turf(src), 'sound/items/deconstruct.ogg', 50, TRUE)
|
||||
user.visible_message(span_notice("[user] removes [src]'s circuit board."), \
|
||||
span_notice("You remove the circuit board from [src]."))
|
||||
new /obj/item/electronics/firelock(drop_location())
|
||||
constructionStep = CONSTRUCTION_NO_CIRCUIT
|
||||
update_appearance()
|
||||
return ITEM_INTERACT_SUCCESS
|
||||
|
||||
/obj/structure/firelock_frame/wrench_act(mob/living/user, obj/item/tool)
|
||||
if(constructionStep != CONSTRUCTION_PANEL_OPEN)
|
||||
return NONE
|
||||
if(locate(/obj/machinery/door/firedoor) in get_turf(src))
|
||||
to_chat(user, span_warning("There's already a firelock there."))
|
||||
return ITEM_INTERACT_BLOCKING
|
||||
tool.play_tool_sound(src)
|
||||
user.visible_message(span_notice("[user] starts bolting down [src]..."), \
|
||||
span_notice("You begin bolting [src]..."))
|
||||
if(!tool.use_tool(src, user, DEFAULT_STEP_TIME))
|
||||
return ITEM_INTERACT_BLOCKING
|
||||
if(locate(/obj/machinery/door/firedoor) in get_turf(src))
|
||||
return ITEM_INTERACT_BLOCKING
|
||||
user.visible_message(span_notice("[user] finishes the firelock."), \
|
||||
span_notice("You finish the firelock."))
|
||||
playsound(get_turf(src), 'sound/items/deconstruct.ogg', 50, TRUE)
|
||||
if(reinforced)
|
||||
new /obj/machinery/door/firedoor/heavy(get_turf(src))
|
||||
else if(directional)
|
||||
var/obj/machinery/door/firedoor/border_only/new_firedoor = new /obj/machinery/door/firedoor/border_only(get_turf(src))
|
||||
new_firedoor.setDir(dir)
|
||||
new_firedoor.adjust_lights_starting_offset()
|
||||
else
|
||||
new /obj/machinery/door/firedoor(get_turf(src))
|
||||
qdel(src)
|
||||
return ITEM_INTERACT_SUCCESS
|
||||
|
||||
/obj/structure/firelock_frame/welder_act(mob/living/user, obj/item/tool)
|
||||
if(constructionStep != CONSTRUCTION_NO_CIRCUIT)
|
||||
return NONE
|
||||
if(!tool.tool_start_check(user, amount=1))
|
||||
return ITEM_INTERACT_BLOCKING
|
||||
user.visible_message(span_notice("[user] begins cutting apart [src]'s frame..."), \
|
||||
span_notice("You begin slicing [src] apart..."))
|
||||
|
||||
if(!tool.use_tool(src, user, DEFAULT_STEP_TIME, volume=50))
|
||||
return ITEM_INTERACT_BLOCKING
|
||||
if(constructionStep != CONSTRUCTION_NO_CIRCUIT)
|
||||
return ITEM_INTERACT_BLOCKING
|
||||
user.visible_message(span_notice("[user] cuts apart [src]!"), \
|
||||
span_notice("You cut [src] into metal."))
|
||||
var/turf/targetloc = get_turf(src)
|
||||
new /obj/item/stack/sheet/iron(targetloc, directional ? 2 : 3)
|
||||
if(reinforced)
|
||||
new /obj/item/stack/sheet/plasteel(targetloc, 2)
|
||||
qdel(src)
|
||||
return ITEM_INTERACT_SUCCESS
|
||||
|
||||
/obj/structure/firelock_frame/rcd_vals(mob/user, obj/item/construction/rcd/the_rcd)
|
||||
if(the_rcd.mode == RCD_DECONSTRUCT)
|
||||
|
||||
@@ -62,35 +62,45 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/flasher, 26)
|
||||
return ..()
|
||||
|
||||
//Don't want to render prison breaks impossible
|
||||
/obj/machinery/flasher/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers)
|
||||
/obj/machinery/flasher/item_interaction(mob/living/user, obj/item/tool, list/modifiers)
|
||||
add_fingerprint(user)
|
||||
if (attacking_item.tool_behaviour == TOOL_WIRECUTTER)
|
||||
if (bulb)
|
||||
user.visible_message(span_notice("[user] begins to disconnect [src]'s flashbulb."), span_notice("You begin to disconnect [src]'s flashbulb..."))
|
||||
if(attacking_item.use_tool(src, user, 30, volume=50) && bulb)
|
||||
user.visible_message(span_notice("[user] disconnects [src]'s flashbulb!"), span_notice("You disconnect [src]'s flashbulb."))
|
||||
bulb.forceMove(loc)
|
||||
power_change()
|
||||
|
||||
else if (istype(attacking_item, /obj/item/assembly/flash/handheld))
|
||||
if (!bulb)
|
||||
if(!user.transferItemToLoc(attacking_item, src))
|
||||
return
|
||||
user.visible_message(span_notice("[user] installs [attacking_item] into [src]."), span_notice("You install [attacking_item] into [src]."))
|
||||
power_change()
|
||||
else
|
||||
to_chat(user, span_warning("A flashbulb is already installed in [src]!"))
|
||||
if (!istype(tool, /obj/item/assembly/flash/handheld))
|
||||
return NONE
|
||||
if (bulb)
|
||||
to_chat(user, span_warning("A flashbulb is already installed in [src]!"))
|
||||
return ITEM_INTERACT_BLOCKING
|
||||
if(!user.transferItemToLoc(tool, src))
|
||||
return ITEM_INTERACT_BLOCKING
|
||||
user.visible_message(span_notice("[user] installs [tool] into [src]."), \
|
||||
span_notice("You install [tool] into [src]."))
|
||||
power_change()
|
||||
return ITEM_INTERACT_SUCCESS
|
||||
|
||||
else if (attacking_item.tool_behaviour == TOOL_WRENCH)
|
||||
if(!bulb)
|
||||
to_chat(user, span_notice("You start unsecuring the flasher frame..."))
|
||||
if(attacking_item.use_tool(src, user, 40, volume=50))
|
||||
to_chat(user, span_notice("You unsecure the flasher frame."))
|
||||
deconstruct(TRUE)
|
||||
else
|
||||
to_chat(user, span_warning("Remove a flashbulb from [src] first!"))
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/machinery/flasher/wirecutter_act(mob/living/user, obj/item/tool)
|
||||
add_fingerprint(user)
|
||||
if(!bulb)
|
||||
return NONE
|
||||
user.visible_message(span_notice("[user] begins to disconnect [src]'s flashbulb."), span_notice("You begin to disconnect [src]'s flashbulb..."))
|
||||
if(!tool.use_tool(src, user, 30, volume=50) || !bulb)
|
||||
return ITEM_INTERACT_BLOCKING
|
||||
user.visible_message(span_notice("[user] disconnects [src]'s flashbulb!"), span_notice("You disconnect [src]'s flashbulb."))
|
||||
bulb.forceMove(loc)
|
||||
power_change()
|
||||
return ITEM_INTERACT_SUCCESS
|
||||
|
||||
/obj/machinery/flasher/wrench_act(mob/living/user, obj/item/tool)
|
||||
add_fingerprint(user)
|
||||
if(bulb)
|
||||
to_chat(user, span_warning("Remove a flashbulb from [src] first!"))
|
||||
return ITEM_INTERACT_BLOCKING
|
||||
to_chat(user, span_notice("You start unsecuring the flasher frame..."))
|
||||
if(!tool.use_tool(src, user, 40, volume=50))
|
||||
return ITEM_INTERACT_BLOCKING
|
||||
to_chat(user, span_notice("You unsecure the flasher frame."))
|
||||
deconstruct(TRUE)
|
||||
return ITEM_INTERACT_SUCCESS
|
||||
|
||||
//Let the AI trigger them directly.
|
||||
/obj/machinery/flasher/attack_ai()
|
||||
@@ -189,25 +199,22 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/flasher, 26)
|
||||
if(vname == NAMEOF(src, flash_range))
|
||||
proximity_monitor?.set_range(flash_range)
|
||||
|
||||
/obj/machinery/flasher/portable/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers)
|
||||
if (attacking_item.tool_behaviour == TOOL_WRENCH)
|
||||
attacking_item.play_tool_sound(src, 100)
|
||||
/obj/machinery/flasher/portable/wrench_act(mob/living/user, obj/item/tool)
|
||||
tool.play_tool_sound(src, 100)
|
||||
if (!anchored && !isinspace())
|
||||
to_chat(user, span_notice("[src] is now secured."))
|
||||
add_overlay("[base_icon_state]-s")
|
||||
set_anchored(TRUE)
|
||||
power_change()
|
||||
proximity_monitor.set_range(flash_range)
|
||||
return ITEM_INTERACT_SUCCESS
|
||||
|
||||
if (!anchored && !isinspace())
|
||||
to_chat(user, span_notice("[src] is now secured."))
|
||||
add_overlay("[base_icon_state]-s")
|
||||
set_anchored(TRUE)
|
||||
power_change()
|
||||
proximity_monitor.set_range(flash_range)
|
||||
else
|
||||
to_chat(user, span_notice("[src] can now be moved."))
|
||||
cut_overlays()
|
||||
set_anchored(FALSE)
|
||||
power_change()
|
||||
proximity_monitor.set_range(0)
|
||||
|
||||
else
|
||||
return ..()
|
||||
to_chat(user, span_notice("[src] can now be moved."))
|
||||
cut_overlays()
|
||||
set_anchored(FALSE)
|
||||
power_change()
|
||||
proximity_monitor.set_range(0)
|
||||
return ITEM_INTERACT_SUCCESS
|
||||
|
||||
/obj/item/wallframe/flasher
|
||||
name = "mounted flash frame"
|
||||
|
||||
@@ -320,15 +320,16 @@
|
||||
closed = TRUE
|
||||
update_indicator()
|
||||
|
||||
/obj/machinery/launchpad/briefcase/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers)
|
||||
if(istype(item, /obj/item/launchpad_remote))
|
||||
var/obj/item/launchpad_remote/launch = item
|
||||
if(IS_WEAKREF_OF(src, launch.pad)) //do not attempt to link when already linked
|
||||
return ..()
|
||||
launch.pad = WEAKREF(src)
|
||||
to_chat(user, span_notice("You link [src] to [launch]."))
|
||||
else
|
||||
return ..()
|
||||
/obj/machinery/launchpad/briefcase/item_interaction(mob/living/user, obj/item/tool, list/modifiers)
|
||||
if(!istype(tool, /obj/item/launchpad_remote))
|
||||
return NONE
|
||||
var/obj/item/launchpad_remote/remote = tool
|
||||
if(IS_WEAKREF_OF(src, remote.pad)) //do not attempt to link when already linked
|
||||
return ITEM_INTERACT_BLOCKING
|
||||
remote.pad = WEAKREF(src)
|
||||
to_chat(user, span_notice("You link [src] to [remote]."))
|
||||
return ITEM_INTERACT_SUCCESS
|
||||
|
||||
|
||||
/obj/item/launchpad_remote
|
||||
name = "folder"
|
||||
|
||||
@@ -144,13 +144,11 @@
|
||||
/obj/machinery/modular_shield_generator/crowbar_act(mob/living/user, obj/item/tool)
|
||||
return default_deconstruction_crowbar(user, tool)
|
||||
|
||||
/obj/machinery/modular_shield_generator/attackby(obj/item/W, mob/user, list/modifiers)
|
||||
|
||||
if(is_wire_tool(W) && panel_open)
|
||||
wires.interact(user)
|
||||
return TRUE
|
||||
|
||||
return ..()
|
||||
/obj/machinery/modular_shield_generator/item_interaction(mob/living/user, obj/item/tool, list/modifiers)
|
||||
if(!panel_open || !is_wire_tool(tool))
|
||||
return NONE
|
||||
wires.interact(user)
|
||||
return ITEM_INTERACT_SUCCESS
|
||||
|
||||
/obj/machinery/modular_shield_generator/multitool_act(mob/living/user, obj/item/multitool/multi)
|
||||
multi.set_buffer(src)
|
||||
|
||||
@@ -119,24 +119,23 @@
|
||||
. = ..()
|
||||
icon_state = "[base_icon_state][panel_open]"
|
||||
|
||||
/obj/machinery/navbeacon/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers)
|
||||
/obj/machinery/navbeacon/item_interaction(mob/living/user, obj/item/tool, list/modifiers)
|
||||
var/turf/our_turf = loc
|
||||
if(our_turf.underfloor_accessibility < UNDERFLOOR_INTERACTABLE)
|
||||
return // prevent intraction when T-scanner revealed
|
||||
return ITEM_INTERACT_BLOCKING// prevent interaction when T-scanner revealed
|
||||
|
||||
if (attacking_item.GetID())
|
||||
if(!panel_open)
|
||||
if (allowed(user))
|
||||
controls_locked = !controls_locked
|
||||
balloon_alert(user, "controls [controls_locked ? "locked" : "unlocked"]")
|
||||
SStgui.update_uis(src)
|
||||
else
|
||||
balloon_alert(user, "access denied")
|
||||
else
|
||||
balloon_alert(user, "panel open!")
|
||||
return
|
||||
|
||||
return ..()
|
||||
if(!tool.GetID())
|
||||
return NONE
|
||||
if(panel_open)
|
||||
balloon_alert(user, "panel open!")
|
||||
return ITEM_INTERACT_BLOCKING
|
||||
if (!allowed(user))
|
||||
balloon_alert(user, "access denied")
|
||||
return ITEM_INTERACT_BLOCKING
|
||||
controls_locked = !controls_locked
|
||||
balloon_alert(user, "controls [controls_locked ? "locked" : "unlocked"]")
|
||||
SStgui.update_uis(src)
|
||||
return ITEM_INTERACT_SUCCESS
|
||||
|
||||
/obj/machinery/navbeacon/attack_ai(mob/user)
|
||||
interact(user)
|
||||
|
||||
@@ -517,19 +517,18 @@ GLOBAL_LIST_EMPTY(req_console_ckey_departments)
|
||||
to_chat(user, span_warning("You must open the maintenance panel first!"))
|
||||
return TRUE
|
||||
|
||||
/obj/machinery/requests_console/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers)
|
||||
var/obj/item/card/id/ID = attacking_item.GetID()
|
||||
if(ID)
|
||||
message_verified_by = "[ID.registered_name] ([ID.assignment])"
|
||||
announcement_authenticated = (ACCESS_RC_ANNOUNCE in ID.access)
|
||||
/obj/machinery/requests_console/item_interaction(mob/living/user, obj/item/tool, list/modifiers)
|
||||
var/obj/item/card/id/card = tool.GetID()
|
||||
if(card)
|
||||
message_verified_by = "[card.registered_name] ([card.assignment])"
|
||||
announcement_authenticated = (ACCESS_RC_ANNOUNCE in card.access)
|
||||
SStgui.update_uis(src)
|
||||
return
|
||||
if (istype(attacking_item, /obj/item/stamp))
|
||||
var/obj/item/stamp/attacking_stamp = attacking_item
|
||||
message_stamped_by = attacking_stamp.name
|
||||
return ITEM_INTERACT_SUCCESS
|
||||
if (istype(tool, /obj/item/stamp))
|
||||
message_stamped_by = tool.name
|
||||
SStgui.update_uis(src)
|
||||
return
|
||||
return ..()
|
||||
return ITEM_INTERACT_SUCCESS
|
||||
return NONE
|
||||
|
||||
/obj/machinery/requests_console/on_deconstruction(disassembled)
|
||||
new /obj/item/wallframe/requests_console(loc)
|
||||
|
||||
@@ -116,88 +116,90 @@
|
||||
update_appearance() // Not applicable to all objects.
|
||||
|
||||
///Handles setting ownership and the betting itself.
|
||||
/obj/machinery/roulette/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
|
||||
if(machine_stat & MAINT && is_wire_tool(W))
|
||||
/obj/machinery/roulette/item_interaction(mob/living/user, obj/item/tool, list/modifiers)
|
||||
if(machine_stat & MAINT && is_wire_tool(tool))
|
||||
wires.interact(user)
|
||||
return
|
||||
return ITEM_INTERACT_SUCCESS
|
||||
if(playing)
|
||||
return ..()
|
||||
var/obj/item/card/id/player_card = W.GetID()
|
||||
if(player_card)
|
||||
if(isidcard(W))
|
||||
playsound(src, 'sound/machines/card_slide.ogg', 50, TRUE)
|
||||
else
|
||||
playsound(src, 'sound/machines/terminal/terminal_success.ogg', 50, TRUE)
|
||||
return NONE
|
||||
var/obj/item/card/id/player_card = tool.GetID()
|
||||
if(!player_card)
|
||||
return NONE
|
||||
if(isidcard(tool))
|
||||
playsound(src, 'sound/machines/card_slide.ogg', 50, TRUE)
|
||||
else
|
||||
playsound(src, 'sound/machines/terminal/terminal_success.ogg', 50, TRUE)
|
||||
|
||||
if(machine_stat & MAINT || !on || locked)
|
||||
to_chat(user, span_notice("The machine appears to be disabled."))
|
||||
return FALSE
|
||||
if(machine_stat & MAINT || !on || locked)
|
||||
to_chat(user, span_notice("The machine appears to be disabled."))
|
||||
return ITEM_INTERACT_BLOCKING
|
||||
|
||||
if(!player_card.registered_account)
|
||||
say("You don't have a bank account!")
|
||||
playsound(src, 'sound/machines/buzz/buzz-two.ogg', 30, TRUE)
|
||||
return FALSE
|
||||
if(!player_card.registered_account)
|
||||
say("You don't have a bank account!")
|
||||
playsound(src, 'sound/machines/buzz/buzz-two.ogg', 30, TRUE)
|
||||
return ITEM_INTERACT_BLOCKING
|
||||
|
||||
if(my_card)
|
||||
if(IS_DEPARTMENTAL_CARD(player_card)) // Are they using a department ID
|
||||
say("You cannot gamble with the department budget!")
|
||||
playsound(src, 'sound/machines/buzz/buzz-two.ogg', 30, TRUE)
|
||||
return FALSE
|
||||
if(player_card.registered_account.account_balance < chosen_bet_amount) //Does the player have enough funds
|
||||
say("You do not have the funds to play! Lower your bet or get more money.")
|
||||
playsound(src, 'sound/machines/buzz/buzz-two.ogg', 30, TRUE)
|
||||
return FALSE
|
||||
if(!chosen_bet_amount || isnull(chosen_bet_type))
|
||||
return FALSE
|
||||
if(!my_card)
|
||||
var/msg = tgui_input_text(user, "Name of your roulette wheel", "Roulette Customization", "Roulette Machine", max_length = MAX_NAME_LEN)
|
||||
if(!msg)
|
||||
return ITEM_INTERACT_BLOCKING
|
||||
name = msg
|
||||
desc = "Owned by [player_card.registered_account.account_holder], draws directly from [user.p_their()] account."
|
||||
my_card = player_card
|
||||
RegisterSignal(my_card, COMSIG_QDELETING, PROC_REF(on_my_card_deleted))
|
||||
to_chat(user, span_notice("You link the wheel to your account."))
|
||||
power_change()
|
||||
return ITEM_INTERACT_SUCCESS
|
||||
|
||||
//double to nothing bets
|
||||
var/list/doubles = list(
|
||||
ROULETTE_BET_2TO1_FIRST,
|
||||
ROULETTE_BET_2TO1_SECOND,
|
||||
ROULETTE_BET_2TO1_THIRD,
|
||||
ROULETTE_BET_1TO12,
|
||||
ROULETTE_BET_13TO24,
|
||||
ROULETTE_BET_25TO36
|
||||
)
|
||||
//result of text2num is null if text starts with a character, meaning it's not a singles bet
|
||||
var/single = !isnull(text2num(chosen_bet_type))
|
||||
var/potential_payout_mult
|
||||
if (single)
|
||||
potential_payout_mult = ROULETTE_SINGLES_PAYOUT
|
||||
else
|
||||
if (chosen_bet_type in doubles)
|
||||
potential_payout_mult = ROULETTE_DOZ_COL_PAYOUT
|
||||
else
|
||||
potential_payout_mult = ROULETTE_SIMPLE_PAYOUT
|
||||
var/potential_payout = chosen_bet_amount * potential_payout_mult
|
||||
if(IS_DEPARTMENTAL_CARD(player_card)) // Are they using a department ID
|
||||
say("You cannot gamble with the department budget!")
|
||||
playsound(src, 'sound/machines/buzz/buzz-two.ogg', 30, TRUE)
|
||||
return ITEM_INTERACT_BLOCKING
|
||||
|
||||
if(!check_owner_funds(potential_payout))
|
||||
return FALSE //owner is too poor
|
||||
if(player_card.registered_account.account_balance < chosen_bet_amount) //Does the player have enough funds
|
||||
say("You do not have the funds to play! Lower your bet or get more money.")
|
||||
playsound(src, 'sound/machines/buzz/buzz-two.ogg', 30, TRUE)
|
||||
return ITEM_INTERACT_BLOCKING
|
||||
|
||||
if(last_anti_spam > world.time) //do not cheat me
|
||||
return FALSE
|
||||
if(!chosen_bet_amount || isnull(chosen_bet_type))
|
||||
return ITEM_INTERACT_BLOCKING
|
||||
|
||||
last_anti_spam = world.time + anti_spam_cooldown
|
||||
//double to nothing bets
|
||||
var/list/doubles = list(
|
||||
ROULETTE_BET_2TO1_FIRST,
|
||||
ROULETTE_BET_2TO1_SECOND,
|
||||
ROULETTE_BET_2TO1_THIRD,
|
||||
ROULETTE_BET_1TO12,
|
||||
ROULETTE_BET_13TO24,
|
||||
ROULETTE_BET_25TO36
|
||||
)
|
||||
//result of text2num is null if text starts with a character, meaning it's not a singles bet
|
||||
var/single = !isnull(text2num(chosen_bet_type))
|
||||
var/potential_payout_mult
|
||||
if(single)
|
||||
potential_payout_mult = ROULETTE_SINGLES_PAYOUT
|
||||
else if(chosen_bet_type in doubles)
|
||||
potential_payout_mult = ROULETTE_DOZ_COL_PAYOUT
|
||||
else
|
||||
potential_payout_mult = ROULETTE_SIMPLE_PAYOUT
|
||||
var/potential_payout = chosen_bet_amount * potential_payout_mult
|
||||
|
||||
icon_state = "rolling" //Prepare the new icon state for rolling before hand.
|
||||
flick("flick_up", src)
|
||||
playsound(src, 'sound/machines/piston/piston_raise.ogg', 70)
|
||||
playsound(src, 'sound/machines/chime.ogg', 50)
|
||||
if(!check_owner_funds(potential_payout))
|
||||
return ITEM_INTERACT_BLOCKING //owner is too poor
|
||||
|
||||
if(last_anti_spam > world.time) //do not cheat me
|
||||
return ITEM_INTERACT_BLOCKING
|
||||
|
||||
last_anti_spam = world.time + anti_spam_cooldown
|
||||
|
||||
icon_state = "rolling" //Prepare the new icon state for rolling before hand.
|
||||
flick("flick_up", src)
|
||||
playsound(src, 'sound/machines/piston/piston_raise.ogg', 70)
|
||||
playsound(src, 'sound/machines/chime.ogg', 50)
|
||||
|
||||
addtimer(CALLBACK(src, PROC_REF(play), user, player_card, chosen_bet_type, chosen_bet_amount, potential_payout), 4) //Animation first
|
||||
return ITEM_INTERACT_SUCCESS
|
||||
|
||||
addtimer(CALLBACK(src, PROC_REF(play), user, player_card, chosen_bet_type, chosen_bet_amount, potential_payout), 4) //Animation first
|
||||
return TRUE
|
||||
else
|
||||
var/msg = tgui_input_text(user, "Name of your roulette wheel", "Roulette Customization", "Roulette Machine", max_length = MAX_NAME_LEN)
|
||||
if(!msg)
|
||||
return
|
||||
name = msg
|
||||
desc = "Owned by [player_card.registered_account.account_holder], draws directly from [user.p_their()] account."
|
||||
my_card = player_card
|
||||
RegisterSignal(my_card, COMSIG_QDELETING, PROC_REF(on_my_card_deleted))
|
||||
to_chat(user, span_notice("You link the wheel to your account."))
|
||||
power_change()
|
||||
return
|
||||
return ..()
|
||||
|
||||
///deletes the my_card ref to prevent harddels
|
||||
/obj/machinery/roulette/proc/on_my_card_deleted(datum/source)
|
||||
|
||||
@@ -239,33 +239,36 @@
|
||||
set_anchored(FALSE)
|
||||
|
||||
|
||||
/obj/machinery/shieldgen/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
|
||||
if(istype(W, /obj/item/stack/cable_coil) && (machine_stat & BROKEN) && panel_open)
|
||||
var/obj/item/stack/cable_coil/coil = W
|
||||
/obj/machinery/shieldgen/item_interaction(mob/living/user, obj/item/tool, list/modifiers)
|
||||
if(istype(tool, /obj/item/stack/cable_coil) && (machine_stat & BROKEN) && panel_open)
|
||||
var/obj/item/stack/cable_coil/coil = tool
|
||||
if (coil.get_amount() < 1)
|
||||
to_chat(user, span_warning("You need one length of cable to repair [src]!"))
|
||||
return
|
||||
return ITEM_INTERACT_BLOCKING
|
||||
to_chat(user, span_notice("You begin to replace the wires..."))
|
||||
if(do_after(user, 3 SECONDS, target = src))
|
||||
if(coil.get_amount() < 1)
|
||||
return
|
||||
coil.use(1)
|
||||
atom_integrity = max_integrity
|
||||
set_machine_stat(machine_stat & ~BROKEN)
|
||||
to_chat(user, span_notice("You repair \the [src]."))
|
||||
update_appearance()
|
||||
if(!do_after(user, 3 SECONDS, target = src))
|
||||
return ITEM_INTERACT_BLOCKING
|
||||
if(coil.get_amount() < 1)
|
||||
return ITEM_INTERACT_BLOCKING
|
||||
coil.use(1)
|
||||
atom_integrity = max_integrity
|
||||
set_machine_stat(machine_stat & ~BROKEN)
|
||||
to_chat(user, span_notice("You repair \the [src]."))
|
||||
update_appearance()
|
||||
return ITEM_INTERACT_SUCCESS
|
||||
|
||||
else if(W.GetID())
|
||||
if(allowed(user) && !(obj_flags & EMAGGED))
|
||||
locked = !locked
|
||||
to_chat(user, span_notice("You [locked ? "lock" : "unlock"] the controls."))
|
||||
else if(obj_flags & EMAGGED)
|
||||
if(tool.GetID())
|
||||
if(obj_flags & EMAGGED)
|
||||
to_chat(user, span_danger("Error, access controller damaged!"))
|
||||
else
|
||||
return ITEM_INTERACT_BLOCKING
|
||||
if(!allowed(user))
|
||||
to_chat(user, span_danger("Access denied."))
|
||||
return ITEM_INTERACT_BLOCKING
|
||||
locked = !locked
|
||||
to_chat(user, span_notice("You [locked ? "lock" : "unlock"] the controls."))
|
||||
return ITEM_INTERACT_SUCCESS
|
||||
|
||||
else
|
||||
return ..()
|
||||
return NONE
|
||||
|
||||
/obj/machinery/shieldgen/emag_act(mob/user, obj/item/card/emag/emag_card)
|
||||
if(obj_flags & EMAGGED)
|
||||
@@ -464,22 +467,24 @@
|
||||
|
||||
return default_deconstruction_crowbar(user, tool)
|
||||
|
||||
/obj/machinery/power/shieldwallgen/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
|
||||
. = ..()
|
||||
if(W.GetID())
|
||||
if(allowed(user) && !(obj_flags & EMAGGED))
|
||||
locked = !locked
|
||||
balloon_alert(user, "[locked ? "locked!" : "unlocked"]")
|
||||
else if(obj_flags & EMAGGED)
|
||||
/obj/machinery/power/shieldwallgen/item_interaction(mob/living/user, obj/item/tool, list/modifiers)
|
||||
if(tool.GetID())
|
||||
if(obj_flags & EMAGGED)
|
||||
balloon_alert(user, "malfunctioning!")
|
||||
else
|
||||
return ITEM_INTERACT_BLOCKING
|
||||
if(!allowed(user))
|
||||
balloon_alert(user, "no access!")
|
||||
return
|
||||
return ITEM_INTERACT_BLOCKING
|
||||
locked = !locked
|
||||
balloon_alert(user, "[locked ? "locked!" : "unlocked"]")
|
||||
return ITEM_INTERACT_SUCCESS
|
||||
|
||||
add_fingerprint(user)
|
||||
if(is_wire_tool(W) && panel_open)
|
||||
if(is_wire_tool(tool) && panel_open)
|
||||
wires.interact(user)
|
||||
return
|
||||
return ITEM_INTERACT_SUCCESS
|
||||
|
||||
return NONE
|
||||
|
||||
|
||||
/obj/machinery/power/shieldwallgen/interact(mob/user)
|
||||
|
||||
@@ -421,36 +421,40 @@
|
||||
. = TRUE
|
||||
|
||||
///Slightly modified to ignore the open_hatch - it's always open, we hacked it.
|
||||
/obj/machinery/space_heater/improvised_chem_heater/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers)
|
||||
/obj/machinery/space_heater/improvised_chem_heater/item_interaction(mob/living/user, obj/item/tool, list/modifiers)
|
||||
add_fingerprint(user)
|
||||
if(default_deconstruction_crowbar(user, item))
|
||||
return
|
||||
if(istype(item, /obj/item/stock_parts/power_store/cell))
|
||||
if(istype(tool, /obj/item/stock_parts/power_store/cell))
|
||||
if(cell)
|
||||
to_chat(user, span_warning("There is already a power cell inside!"))
|
||||
return
|
||||
else if(!user.transferItemToLoc(item, src))
|
||||
return
|
||||
cell = item
|
||||
item.add_fingerprint(usr)
|
||||
return ITEM_INTERACT_BLOCKING
|
||||
if(!user.transferItemToLoc(tool, src))
|
||||
return ITEM_INTERACT_BLOCKING
|
||||
cell = tool
|
||||
tool.add_fingerprint(usr)
|
||||
|
||||
user.visible_message(span_notice("\The [user] inserts a power cell into \the [src]."), span_notice("You insert the power cell into \the [src]."))
|
||||
SStgui.update_uis(src)
|
||||
return ITEM_INTERACT_SUCCESS
|
||||
|
||||
//reagent containers
|
||||
if(is_reagent_container(item) && !(item.item_flags & ABSTRACT) && item.is_open_container())
|
||||
. = TRUE //no afterattack
|
||||
var/obj/item/reagent_containers/container = item
|
||||
if(is_reagent_container(tool) && !(tool.item_flags & ABSTRACT) && tool.is_open_container())
|
||||
var/obj/item/reagent_containers/container = tool
|
||||
if(!user.transferItemToLoc(container, src))
|
||||
return
|
||||
return ITEM_INTERACT_BLOCKING
|
||||
replace_beaker(user, container)
|
||||
to_chat(user, span_notice("You add [container] to [src]'s water bath."))
|
||||
ui_interact(user)
|
||||
return
|
||||
return ITEM_INTERACT_SUCCESS
|
||||
|
||||
if(!beaker|| !is_type_in_list(tool, list(/obj/item/reagent_containers/dropper, /obj/item/ph_meter, /obj/item/ph_paper, /obj/item/reagent_containers/syringe)))
|
||||
return NONE
|
||||
//Dropper tools
|
||||
if(beaker)
|
||||
if(is_type_in_list(item, list(/obj/item/reagent_containers/dropper, /obj/item/ph_meter, /obj/item/ph_paper, /obj/item/reagent_containers/syringe)))
|
||||
item.interact_with_atom(beaker, user)
|
||||
return
|
||||
tool.interact_with_atom(beaker, user)
|
||||
return ITEM_INTERACT_SUCCESS
|
||||
|
||||
/obj/machinery/space_heater/crowbar_act(mob/living/user, obj/item/tool)
|
||||
add_fingerprint(user)
|
||||
return default_deconstruction_crowbar(user, tool)
|
||||
|
||||
/obj/machinery/space_heater/improvised_chem_heater/on_deconstruction(disassembled = TRUE)
|
||||
. = ..()
|
||||
|
||||
@@ -196,24 +196,28 @@
|
||||
return TRUE
|
||||
|
||||
|
||||
/obj/machinery/syndicatebomb/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers)
|
||||
|
||||
if(is_wire_tool(I) && open_panel)
|
||||
/obj/machinery/syndicatebomb/item_interaction(mob/living/user, obj/item/tool, list/modifiers)
|
||||
if(is_wire_tool(tool) && open_panel)
|
||||
wires.interact(user)
|
||||
return ITEM_INTERACT_SUCCESS
|
||||
|
||||
else if(istype(I, /obj/item/bombcore))
|
||||
if(!payload)
|
||||
if(!user.transferItemToLoc(I, src))
|
||||
return
|
||||
payload = I
|
||||
to_chat(user, span_notice("You place [payload] into [src]."))
|
||||
else
|
||||
if(istype(tool, /obj/item/bombcore))
|
||||
if(payload)
|
||||
to_chat(user, span_warning("[payload] is already loaded into [src]! You'll have to remove it first."))
|
||||
else
|
||||
var/old_integ = atom_integrity
|
||||
. = ..()
|
||||
if((old_integ > atom_integrity) && active && (payload in src))
|
||||
to_chat(user, span_warning("That seems like a really bad idea..."))
|
||||
return ITEM_INTERACT_BLOCKING
|
||||
if(!user.transferItemToLoc(tool, src))
|
||||
return ITEM_INTERACT_BLOCKING
|
||||
payload = tool
|
||||
to_chat(user, span_notice("You place [payload] into [src]."))
|
||||
return ITEM_INTERACT_SUCCESS
|
||||
|
||||
return NONE
|
||||
|
||||
/obj/machinery/syndicatebomb/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers)
|
||||
var/old_integ = atom_integrity
|
||||
. = ..()
|
||||
if((old_integ > atom_integrity) && active && payload)
|
||||
to_chat(user, span_warning("That seems like a really bad idea..."))
|
||||
|
||||
/obj/machinery/syndicatebomb/interact(mob/user)
|
||||
wires.interact(user)
|
||||
@@ -554,23 +558,26 @@
|
||||
|
||||
playsound(loc, 'sound/effects/bamf.ogg', 75, TRUE, 5)
|
||||
|
||||
/obj/item/bombcore/chemical/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers)
|
||||
if(I.tool_behaviour == TOOL_CROWBAR && beakers.len > 0)
|
||||
I.play_tool_sound(src)
|
||||
for (var/obj/item/B in beakers)
|
||||
B.forceMove(drop_location())
|
||||
beakers -= B
|
||||
return
|
||||
else if(istype(I, /obj/item/reagent_containers/cup/beaker) || istype(I, /obj/item/reagent_containers/cup/bottle))
|
||||
if(beakers.len < max_beakers)
|
||||
if(!user.transferItemToLoc(I, src))
|
||||
return
|
||||
beakers += I
|
||||
to_chat(user, span_notice("You load [src] with [I]."))
|
||||
else
|
||||
to_chat(user, span_warning("[I] won't fit! \The [src] can only hold up to [max_beakers] containers."))
|
||||
return
|
||||
..()
|
||||
/obj/item/bombcore/chemical/item_interaction(mob/living/user, obj/item/tool, list/modifiers)
|
||||
if(!istype(tool, /obj/item/reagent_containers/cup/beaker) && !istype(tool, /obj/item/reagent_containers/cup/bottle))
|
||||
return NONE
|
||||
if(beakers.len >= max_beakers)
|
||||
to_chat(user, span_warning("[tool] won't fit! \The [src] can only hold up to [max_beakers] containers."))
|
||||
return ITEM_INTERACT_BLOCKING
|
||||
if(!user.transferItemToLoc(tool, src))
|
||||
return ITEM_INTERACT_BLOCKING
|
||||
beakers += tool
|
||||
to_chat(user, span_notice("You load [src] with [tool]."))
|
||||
return ITEM_INTERACT_SUCCESS
|
||||
|
||||
/obj/item/bombcore/chemical/crowbar_act(mob/living/user, obj/item/tool)
|
||||
if(!beakers.len)
|
||||
return NONE
|
||||
tool.play_tool_sound(src)
|
||||
for (var/obj/item/beaker in beakers)
|
||||
beaker.forceMove(drop_location())
|
||||
beakers -= beaker
|
||||
return ITEM_INTERACT_SUCCESS
|
||||
|
||||
/obj/item/bombcore/chemical/on_craft_completion(list/components, datum/crafting_recipe/current_recipe, atom/crafter)
|
||||
// Using different grenade casings, causes the payload to have different properties.
|
||||
|
||||
@@ -47,7 +47,7 @@
|
||||
*/
|
||||
/obj/item/access_key/proc/attempt_open_door(mob/living/user, obj/machinery/door/airlock)
|
||||
if(DOING_INTERACTION_WITH_TARGET(user, airlock))
|
||||
return
|
||||
return FALSE
|
||||
user.balloon_alert_to_viewers("fumbles with keys...", "finding key...")
|
||||
user.playsound_local(src, 'sound/items/rattling_keys.ogg', 25, TRUE)
|
||||
if(!do_after(user, 3 SECONDS, airlock))
|
||||
|
||||
Reference in New Issue
Block a user