mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-22 20:48:56 +01:00
Interaction/Attack Hand Refactor (#36405)
This commit is contained in:
@@ -37,8 +37,8 @@
|
||||
#define EXAMINE_POSITION_BEFORE 2
|
||||
//End positions
|
||||
#define COMPONENT_EXNAME_CHANGED 1
|
||||
#define COMSIG_ATOM_ENTERED "atom_entered" //from base of atom/Entered(): (/atom/movable, /atom)
|
||||
#define COMSIG_ATOM_EXITED "atom_exited" //from base of atom/Exited(): (/atom/movable)
|
||||
#define COMSIG_ATOM_ENTERED "atom_entered" //from base of atom/Entered(): (atom/movable/entering, /atom)
|
||||
#define COMSIG_ATOM_EXITED "atom_exited" //from base of atom/Exited(): (atom/movable/exiting, atom/newloc)
|
||||
#define COMSIG_ATOM_EX_ACT "atom_ex_act" //from base of atom/ex_act(): (severity, target)
|
||||
#define COMSIG_ATOM_EMP_ACT "atom_emp_act" //from base of atom/emp_act(): (severity)
|
||||
#define COMSIG_ATOM_FIRE_ACT "atom_fire_act" //from base of atom/fire_act(): (exposed_temperature, exposed_volume)
|
||||
@@ -54,19 +54,32 @@
|
||||
#define COMSIG_ATOM_SET_LIGHT "atom_set_light" //from base of atom/set_light(): (l_range, l_power, l_color)
|
||||
#define COMSIG_ATOM_ROTATE "atom_rotate" //from base of atom/shuttleRotate(): (rotation, params)
|
||||
#define COMSIG_ATOM_DIR_CHANGE "atom_dir_change" //from base of atom/setDir(): (old_dir, new_dir)
|
||||
|
||||
#define COMSIG_ENTER_AREA "enter_area" //from base of area/Entered(): (/area)
|
||||
#define COMSIG_EXIT_AREA "exit_area" //from base of area/Exited(): (/area)
|
||||
|
||||
#define COMSIG_ATOM_CONTENTS_DEL "atom_contents_del" //from base of atom/handle_atom_del(): (atom/deleted)
|
||||
/////////////////
|
||||
#define COMSIG_ATOM_ATTACK_GHOST "atom_attack_ghost" //from base of atom/attack_ghost(): (mob/dead/observer/ghost)
|
||||
#define COMSIG_ATOM_ATTACK_HAND "atom_attack_hand" //from base of atom/attack_hand(): (mob/user)
|
||||
#define COMSIG_ATOM_ATTACK_PAW "atom_attack_paw" //from base of atom/attack_paw(): (mob/user)
|
||||
#define COMPONENT_NO_ATTACK_HAND 1 //works on all 3.
|
||||
/////////////////
|
||||
|
||||
#define COMSIG_CLICK "atom_click" //from base of atom/Click(): (location, control, params)
|
||||
#define COMSIG_CLICK_SHIFT "shift_click" //from base of atom/ShiftClick(): (/mob)
|
||||
#define COMSIG_CLICK_CTRL "ctrl_click" //from base of atom/CtrlClickOn(): (/mob)
|
||||
#define COMSIG_CLICK_ALT "alt_click" //from base of atom/AltClick(): (/mob)
|
||||
#define COMSIG_CLICK_CTRL_SHIFT "ctrl_shift_click" //from base of atom/CtrlShiftClick(/mob)
|
||||
#define COMSIG_MOUSEDROP_ONTO "mousedrop_onto" //from base of atom/MouseDrop(): (/atom/over, /mob/user)
|
||||
#define COMPONENT_NO_MOUSEDROP 1
|
||||
#define COMSIG_MOUSEDROPPED_ONTO "mousedropped_onto" //from base of atom/MouseDrop_T: (/atom/from, /mob/user)
|
||||
|
||||
// /area signals
|
||||
#define COMSIG_AREA_ENTERED "area_entered" //from base of area/Entered(): (atom/movable/M)
|
||||
#define COMSIG_AREA_EXITED "area_exited" //from base of area/Exited(): (atom/movable/M)
|
||||
|
||||
|
||||
// /atom/movable signals
|
||||
#define COMSIG_MOVABLE_MOVED "movable_moved" //from base of atom/movable/Moved(): (/atom, dir)
|
||||
#define COMSIG_MOVABLE_CROSSED "movable_crossed" //from base of atom/movable/Crossed(): (/atom/movable)
|
||||
@@ -74,13 +87,21 @@
|
||||
#define COMSIG_MOVABLE_IMPACT "movable_impact" //from base of atom/movable/throw_impact(): (/atom, throwingdatum)
|
||||
#define COMSIG_MOVABLE_BUCKLE "buckle" //from base of atom/movable/buckle_mob(): (mob, force)
|
||||
#define COMSIG_MOVABLE_UNBUCKLE "unbuckle" //from base of atom/movable/unbuckle_mob(): (mob, force)
|
||||
#define COMSIG_MOVABLE_THROW "movable_throw" //from base of atom/movable/throw_at(): (datum/thrownthing, spin)
|
||||
|
||||
// /obj signals
|
||||
#define COMSIG_OBJ_DECONSTRUCT "obj_deconstruct" //from base of obj/deconstruct(): (disassembled)
|
||||
|
||||
// /obj/item signals
|
||||
#define COMSIG_ITEM_ATTACK "item_attack" //from base of obj/item/attack(): (/mob/living/target, /mob/living/user)
|
||||
#define COMSIG_ITEM_ATTACK_SELF "item_attack_self" //from base of obj/item/attack_self(): (/mob)
|
||||
#define COMSIG_ITEM_ATTACK_OBJ "item_attack_obj" //from base of obj/item/attack_obj(): (/obj, /mob)
|
||||
#define COMPONENT_NO_ATTACK_OBJ 1
|
||||
#define COMSIG_ITEM_PRE_ATTACK "item_pre_attack" //from base of obj/item/pre_attack(): (atom/target, mob/user, params)
|
||||
#define COMPONENT_NO_ATTACK 1
|
||||
#define COMSIG_ITEM_EQUIPPED "item_equip" //from base of obj/item/equipped(): (/mob/equipper, slot)
|
||||
#define COMSIG_ITEM_DROPPED "item_drop" //from base of obj/item/dropped(): (/mob/dropper)
|
||||
#define COMSIG_ITEM_PICKUP "item_pickup" //from base of obj/item/pickup(): (/mob/taker)
|
||||
|
||||
// /obj/item/clothing signals
|
||||
#define COMSIG_SHOES_STEP_ACTION "shoes_step_action" //from base of obj/item/clothing/shoes/proc/step_action(): ()
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
|
||||
#define INTERACT_ATOM_REQUIRES_ANCHORED 1 //whether can_interact() checks for anchored. only works on movables.
|
||||
#define INTERACT_ATOM_ATTACK_HAND 2 //calls try_interact() on attack_hand() and returns that.
|
||||
#define INTERACT_ATOM_UI_INTERACT 4 //automatically calls and returns ui_interact() on interact().
|
||||
#define INTERACT_ATOM_REQUIRES_DEXTERITY 8 //user must be dextrous
|
||||
#define INTERACT_ATOM_IGNORE_INCAPACITATED 16 //ignores incapacitated check
|
||||
#define INTERACT_ATOM_IGNORE_RESTRAINED 32 //incapacitated check ignores restrained
|
||||
#define INTERACT_ATOM_CHECK_GRAB 64 //incapacitated check checks grab
|
||||
#define INTERACT_ATOM_NO_FINGERPRINT_ATTACK_HAND 128//prevents leaving fingerprints automatically on attack_hand
|
||||
#define INTERACT_ATOM_NO_FINGERPRINT_INTERACT 256 //adds hiddenprints instead of fingerprints on interact
|
||||
|
||||
#define INTERACT_ITEM_ATTACK_HAND_PICKUP 1 //attempt pickup on attack_hand for items
|
||||
|
||||
#define INTERACT_MACHINE_OPEN 1 //can_interact() while open
|
||||
#define INTERACT_MACHINE_OFFLINE 2 //can_interact() while offline
|
||||
#define INTERACT_MACHINE_WIRES_IF_OPEN 4 //try to interact with wires if open
|
||||
#define INTERACT_MACHINE_ALLOW_SILICON 8 //let silicons interact
|
||||
#define INTERACT_MACHINE_OPEN_SILICON 16 //let silicons interact while open
|
||||
#define INTERACT_MACHINE_REQUIRES_SILICON 32 //must be silicon to interact
|
||||
#define INTERACT_MACHINE_SET_MACHINE 64 //MACHINES HAVE THIS BY DEFAULT, SOMEONE SHOULD RUN THROUGH MACHINES AND REMOVE IT FROM THINGS LIKE LIGHT SWITCHES WHEN POSSIBLE!!--------------------------
|
||||
//This flag determines if a machine set_machine's the user when the user uses it, making updateUsrDialog make the user re-call interact() on it.
|
||||
//THIS FLAG IS ON ALL MACHINES BY DEFAULT, NEEDS TO BE RE-EVALUATED LATER!!
|
||||
@@ -90,6 +90,8 @@
|
||||
//Silicon mobs
|
||||
#define issilicon(A) (istype(A, /mob/living/silicon))
|
||||
|
||||
#define issiliconoradminghost(A) (istype(A, /mob/living/silicon) || IsAdminGhost(A))
|
||||
|
||||
#define iscyborg(A) (istype(A, /mob/living/silicon/robot))
|
||||
|
||||
#define isAI(A) (istype(A, /mob/living/silicon/ai))
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
#define DANGEROUS_POSSESSION 16 //Admin possession yes/no
|
||||
#define ON_BLUEPRINTS 32 //Are we visible on the station blueprints at roundstart?
|
||||
#define UNIQUE_RENAME 64 // can you customize the description/name of the thing?
|
||||
#define USES_TGUI 128 //put on things that use tgui on ui_interact instead of custom/old UI.
|
||||
|
||||
// If you add new ones, be sure to add them to /obj/Initialize as well for complete mapping support
|
||||
|
||||
|
||||
@@ -1,3 +1,8 @@
|
||||
//retvals for attempt_wires_interaction
|
||||
#define WIRE_INTERACTION_FAIL 0
|
||||
#define WIRE_INTERACTION_SUCCESSFUL 1
|
||||
#define WIRE_INTERACTION_BLOCK 2 //don't do anything else rather than open wires and whatever else.
|
||||
|
||||
#define WIRE_DUD_PREFIX "__dud"
|
||||
#define WIRE_ACTIVATE "Activate"
|
||||
#define WIRE_AI "AI Connection"
|
||||
|
||||
@@ -539,7 +539,7 @@ Turf and target are separate in case you want to teleport some distance from a t
|
||||
return assembled
|
||||
|
||||
/atom/proc/GetAllContentsIgnoring(list/ignore_typecache)
|
||||
if(!ignore_typecache)
|
||||
if(!length(ignore_typecache))
|
||||
return GetAllContents()
|
||||
var/list/processing = list(src)
|
||||
var/list/assembled = list()
|
||||
|
||||
@@ -9,4 +9,10 @@
|
||||
var/list/viewrangelist = splittext(view,"x")
|
||||
viewX = text2num(viewrangelist[1])
|
||||
viewY = text2num(viewrangelist[2])
|
||||
return list(viewX, viewY)
|
||||
return list(viewX, viewY)
|
||||
|
||||
/proc/in_view_range(mob/user, atom/A)
|
||||
var/list/view_range = getviewsize(user.client.view)
|
||||
var/turf/source = get_turf(user)
|
||||
var/turf/target = get_turf(A)
|
||||
return ISINRANGE(target.x, source.x - view_range[1], source.x + view_range[1]) && ISINRANGE(target.y, source.y - view_range[1], source.y + view_range[1])
|
||||
|
||||
@@ -1,7 +1,11 @@
|
||||
//#define TESTING //By using the testing("message") proc you can create debug-feedback for people with this
|
||||
//uncommented, but not visible in the release version)
|
||||
|
||||
//#define DATUMVAR_DEBUGGING_MODE //Enables the ability to cache datum vars and retrieve later for debugging which vars changed.
|
||||
|
||||
#ifdef TESTING
|
||||
#define DATUMVAR_DEBUGGING_MODE
|
||||
|
||||
//#define GC_FAILURE_HARD_LOOKUP //makes paths that fail to GC call find_references before del'ing.
|
||||
//implies FIND_REF_NO_CHECK_TICK
|
||||
|
||||
|
||||
@@ -0,0 +1,111 @@
|
||||
GLOBAL_LIST_INIT(bitfields, list(
|
||||
"obj_flags" = list(
|
||||
"EMAGGED" = EMAGGED,
|
||||
"IN_USE" = IN_USE,
|
||||
"CAN_BE_HIT" = CAN_BE_HIT,
|
||||
"BEING_SHOCKED" = BEING_SHOCKED,
|
||||
"DANGEROUS_POSSESSION" = DANGEROUS_POSSESSION,
|
||||
"ON_BLUEPRINTS" = ON_BLUEPRINTS,
|
||||
"UNIQUE_RENAME" = UNIQUE_RENAME,
|
||||
"USES_TGUI" = USES_TGUI
|
||||
),
|
||||
"datum_flags" = list(
|
||||
"DF_USE_TAG" = DF_USE_TAG,
|
||||
"DF_VAR_EDITED" = DF_VAR_EDITED
|
||||
),
|
||||
"item_flags" = list(
|
||||
"BEING_REMOVED" = BEING_REMOVED,
|
||||
"IN_INVENTORY" = IN_INVENTORY,
|
||||
"FORCE_STRING_OVERRIDE" = FORCE_STRING_OVERRIDE,
|
||||
"NEEDS_PERMIT" = NEEDS_PERMIT
|
||||
),
|
||||
"admin_flags" = list(
|
||||
"BUILDMODE" = R_BUILDMODE,
|
||||
"ADMIN" = R_ADMIN,
|
||||
"BAN" = R_BAN,
|
||||
"FUN" = R_FUN,
|
||||
"SERVER" = R_SERVER,
|
||||
"DEBUG" = R_DEBUG,
|
||||
"POSSESS" = R_POSSESS,
|
||||
"PERMISSIONS" = R_PERMISSIONS,
|
||||
"STEALTH" = R_STEALTH,
|
||||
"POLL" = R_POLL,
|
||||
"VAREDIT" = R_VAREDIT,
|
||||
"SOUNDS" = R_SOUNDS,
|
||||
"SPAWN" = R_SPAWN,
|
||||
"AUTOLOGIN" = R_AUTOLOGIN,
|
||||
"DBRANKS" = R_DBRANKS
|
||||
),
|
||||
"interaction_flags_atom" = list(
|
||||
"INTERACT_ATOM_REQUIRES_ANCHORED" = INTERACT_ATOM_REQUIRES_ANCHORED,
|
||||
"INTERACT_ATOM_ATTACK_HAND" = INTERACT_ATOM_ATTACK_HAND,
|
||||
"INTERACT_ATOM_UI_INTERACT" = INTERACT_ATOM_UI_INTERACT,
|
||||
"INTERACT_ATOM_REQUIRES_DEXTERITY" = INTERACT_ATOM_REQUIRES_DEXTERITY,
|
||||
"INTERACT_ATOM_IGNORE_INCAPACITATED" = INTERACT_ATOM_IGNORE_INCAPACITATED,
|
||||
"INTERACT_ATOM_IGNORE_RESTRAINED" = INTERACT_ATOM_IGNORE_RESTRAINED,
|
||||
"INTERACT_ATOM_CHECK_GRAB" = INTERACT_ATOM_CHECK_GRAB,
|
||||
"INTERACT_ATOM_NO_FINGERPRINT_ATTACK_HAND" = INTERACT_ATOM_NO_FINGERPRINT_ATTACK_HAND,
|
||||
"INTERACT_ATOM_NO_FINGERPRINT_INTERACT" = INTERACT_ATOM_NO_FINGERPRINT_INTERACT
|
||||
),
|
||||
"interaction_flags_machine" = list(
|
||||
"INTERACT_MACHINE_OPEN" = INTERACT_MACHINE_OPEN,
|
||||
"INTERACT_MACHINE_OFFLINE" = INTERACT_MACHINE_OFFLINE,
|
||||
"INTERACT_MACHINE_WIRES_IF_OPEN" = INTERACT_MACHINE_WIRES_IF_OPEN,
|
||||
"INTERACT_MACHINE_ALLOW_SILICON" = INTERACT_MACHINE_ALLOW_SILICON,
|
||||
"INTERACT_MACHINE_OPEN_SILICON" = INTERACT_MACHINE_OPEN_SILICON,
|
||||
"INTERACT_MACHINE_REQUIRES_SILICON" = INTERACT_MACHINE_REQUIRES_SILICON
|
||||
),
|
||||
"pass_flags" = list(
|
||||
"PASSTABLE" = PASSTABLE,
|
||||
"PASSGLASS" = PASSGLASS,
|
||||
"PASSGRILLE" = PASSGRILLE,
|
||||
"PASSBLOB" = PASSBLOB,
|
||||
"PASSMOB" = PASSMOB,
|
||||
"PASSCLOSEDTURF" = PASSCLOSEDTURF,
|
||||
"LETPASSTHROW" = LETPASSTHROW
|
||||
),
|
||||
"movement_type" = list(
|
||||
"GROUND" = GROUND,
|
||||
"FLYING" = FLYING
|
||||
),
|
||||
"resistance_flags" = list(
|
||||
"LAVA_PROOF" = LAVA_PROOF,
|
||||
"FIRE_PROOF" = FIRE_PROOF,
|
||||
"FLAMMABLE" = FLAMMABLE,
|
||||
"ON_FIRE" = ON_FIRE,
|
||||
"UNACIDABLE" = UNACIDABLE,
|
||||
"ACID_PROOF" = ACID_PROOF,
|
||||
"INDESTRUCTIBLE" = INDESTRUCTIBLE,
|
||||
"FREEZE_PROOF" = FREEZE_PROOF
|
||||
),
|
||||
"reagents_holder_flags" = list(
|
||||
"REAGENT_NOREACT" = REAGENT_NOREACT
|
||||
),
|
||||
"flags_1" = list(
|
||||
"STOPSPRESSUREDMAGE_1 / NOJAUNT_1 (turfs)" = STOPSPRESSUREDMAGE_1,
|
||||
"NODROP_1 / UNUSED_TRANSIT_TURF_1 (turfs)" = NODROP_1,
|
||||
"NOBLUDGEON_1 / CAN_BE_DIRTY_1 (turfs)" = NOBLUDGEON_1,
|
||||
"MASKINTERNALS_1" = MASKINTERNALS_1,
|
||||
"HEAR_1 / NO_DEATHRATTLE_1 (turfs)" = HEAR_1,
|
||||
"CHECK_RICOCHET_1 / NO_RUINS_1 (turfs)" = CHECK_RICOCHET_1,
|
||||
"CONDUCT_1 / NO_LAVA_GEN_1" = CONDUCT_1,
|
||||
"ABSTRACT_1" = ABSTRACT_1,
|
||||
"NODECONSTRUCT_1" = NODECONSTRUCT_1,
|
||||
"OVERLAY_QUEUED_1" = OVERLAY_QUEUED_1,
|
||||
"NOSLIP_1" = NOSLIP_1
|
||||
),
|
||||
"flags_2" = list(
|
||||
"SLOWS_WHILE_IN_HAND_2" = SLOWS_WHILE_IN_HAND_2,
|
||||
"NO_EMP_WIRES_2" = NO_EMP_WIRES_2,
|
||||
"HOLOGRAM_2" = HOLOGRAM_2,
|
||||
"FRONZE_2" = FROZEN_2,
|
||||
"STATIONLOVING_2" = STATIONLOVING_2,
|
||||
"INFORM_ADMINS_ON_RELOCATE_2" = INFORM_ADMINS_ON_RELOCATE_2,
|
||||
"BANG_PROTECT_2" = BANG_PROTECT_2,
|
||||
"HEALS_EARS_2" = HEALS_EARS_2,
|
||||
"OMNITONGUE_2" = OMNITONGUE_2,
|
||||
"TESLA_IGNORE_2" = TESLA_IGNORE_2,
|
||||
"NO_MAT_REDEMPTION_2" = NO_MAT_REDEMPTION_2,
|
||||
"LAVA_PROTECT_2" = LAVA_PROTECT_2
|
||||
)
|
||||
))
|
||||
@@ -18,10 +18,3 @@ GLOBAL_LIST_EMPTY(powernets)
|
||||
GLOBAL_VAR_INIT(bsa_unlock, FALSE) //BSA unlocked by head ID swipes
|
||||
|
||||
GLOBAL_LIST_EMPTY(player_details) // ckey -> /datum/player_details
|
||||
|
||||
GLOBAL_LIST_INIT(bitfields, list(
|
||||
"obj_flags" = list("EMAGGED" = EMAGGED, "IN_USE" = IN_USE, "CAN_BE_HIT" = CAN_BE_HIT, "BEING_SHOCKED" = BEING_SHOCKED, "DANGEROUS_POSSESSION" = DANGEROUS_POSSESSION, "ON_BLUEPRINTS" = ON_BLUEPRINTS, "UNIQUE_RENAME" = UNIQUE_RENAME),
|
||||
"datum_flags" = list("DF_USE_TAG" = DF_USE_TAG, "DF_VAR_EDITED" = DF_VAR_EDITED),
|
||||
"item_flags" = list("BEING_REMOVED" = BEING_REMOVED, "IN_INVENTORY" = IN_INVENTORY, "FORCE_STRING_OVERRIDE" = FORCE_STRING_OVERRIDE, "NEEDS_PERMIT" = NEEDS_PERMIT),
|
||||
"admin_flags" = list("BUILDMODE" = R_BUILDMODE, "ADMIN" = R_ADMIN, "BAN" = R_BAN, "FUN" = R_FUN, "SERVER" = R_SERVER, "DEBUG" = R_DEBUG, "POSSESS" = R_POSSESS, "PERMISSIONS" = R_PERMISSIONS, "STEALTH" = R_STEALTH, "POLL" = R_POLL, "VAREDIT" = R_VAREDIT, "SOUNDS" = R_SOUNDS, "SPAWN" = R_SPAWN, "AUTOLOGIN" = R_AUTOLOGIN, "DBRANKS" = R_DBRANKS)
|
||||
))
|
||||
|
||||
+4
-14
@@ -189,23 +189,13 @@
|
||||
return FALSE
|
||||
|
||||
/atom/movable/proc/DirectAccess(atom/target)
|
||||
if(target == src)
|
||||
return TRUE
|
||||
if(target == loc)
|
||||
return TRUE
|
||||
return (target == src || target == loc)
|
||||
|
||||
/mob/DirectAccess(atom/target)
|
||||
if(..())
|
||||
return TRUE
|
||||
if(target in contents) //This could probably use moving down and restricting to inventory only
|
||||
return TRUE
|
||||
return FALSE
|
||||
return (..() || (target in contents))
|
||||
|
||||
/mob/living/DirectAccess(atom/target)
|
||||
if(..()) //Lightweight checks first
|
||||
return TRUE
|
||||
if(target in GetAllContents())
|
||||
return TRUE
|
||||
return (..() || (target in GetAllContents()))
|
||||
|
||||
/atom/proc/AllowClick()
|
||||
return FALSE
|
||||
@@ -497,7 +487,7 @@
|
||||
if(client && client.click_intercept)
|
||||
if(call(client.click_intercept, "InterceptClickOn")(src, params, A))
|
||||
return TRUE
|
||||
|
||||
|
||||
//Mob level intercept
|
||||
if(click_intercept)
|
||||
if(call(click_intercept, "InterceptClickOn")(src, params, A))
|
||||
|
||||
+28
-28
@@ -55,35 +55,35 @@
|
||||
|
||||
var/obj/item/W = get_active_held_item()
|
||||
|
||||
if(!W && get_dist(src,A) <= remote_range)
|
||||
if(!W && get_dist(src,A) <= interaction_range)
|
||||
A.attack_robot(src)
|
||||
return
|
||||
|
||||
// buckled cannot prevent machine interlinking but stops arm movement
|
||||
if( buckled || incapacitated())
|
||||
return
|
||||
if(W)
|
||||
// buckled cannot prevent machine interlinking but stops arm movement
|
||||
if( buckled || incapacitated())
|
||||
return
|
||||
|
||||
if(W == A)
|
||||
W.attack_self(src)
|
||||
return
|
||||
if(W == A)
|
||||
W.attack_self(src)
|
||||
return
|
||||
|
||||
// cyborgs are prohibited from using storage items so we can I think safely remove (A.loc in contents)
|
||||
if(A == loc || (A in loc) || (A in contents))
|
||||
W.melee_attack_chain(src, A, params)
|
||||
return
|
||||
|
||||
if(!isturf(loc))
|
||||
return
|
||||
|
||||
// cyborgs are prohibited from using storage items so we can I think safely remove (A.loc && isturf(A.loc.loc))
|
||||
if(isturf(A) || isturf(A.loc))
|
||||
if(A.Adjacent(src)) // see adjacent.dm
|
||||
// cyborgs are prohibited from using storage items so we can I think safely remove (A.loc in contents)
|
||||
if(A == loc || (A in loc) || (A in contents))
|
||||
W.melee_attack_chain(src, A, params)
|
||||
return
|
||||
else
|
||||
W.afterattack(A, src, 0, params)
|
||||
|
||||
if(!isturf(loc))
|
||||
return
|
||||
return
|
||||
|
||||
// cyborgs are prohibited from using storage items so we can I think safely remove (A.loc && isturf(A.loc.loc))
|
||||
if(isturf(A) || isturf(A.loc))
|
||||
if(A.Adjacent(src)) // see adjacent.dm
|
||||
W.melee_attack_chain(src, A, params)
|
||||
return
|
||||
else
|
||||
W.afterattack(A, src, 0, params)
|
||||
return
|
||||
|
||||
//Middle click cycles through selected modules.
|
||||
/mob/living/silicon/robot/MiddleClickOn(atom/A)
|
||||
@@ -105,7 +105,7 @@
|
||||
CtrlShiftClick(user)
|
||||
|
||||
/obj/machinery/door/airlock/BorgCtrlShiftClick(mob/living/silicon/robot/user) // Sets/Unsets Emergency Access Override Forwards to AI code.
|
||||
if(get_dist(src,user) <= user.remote_range)
|
||||
if(get_dist(src,user) <= user.interaction_range)
|
||||
AICtrlShiftClick()
|
||||
else
|
||||
..()
|
||||
@@ -115,7 +115,7 @@
|
||||
ShiftClick(user)
|
||||
|
||||
/obj/machinery/door/airlock/BorgShiftClick(mob/living/silicon/robot/user) // Opens and closes doors! Forwards to AI code.
|
||||
if(get_dist(src,user) <= user.remote_range)
|
||||
if(get_dist(src,user) <= user.interaction_range)
|
||||
AIShiftClick()
|
||||
else
|
||||
..()
|
||||
@@ -125,19 +125,19 @@
|
||||
CtrlClick(user)
|
||||
|
||||
/obj/machinery/door/airlock/BorgCtrlClick(mob/living/silicon/robot/user) // Bolts doors. Forwards to AI code.
|
||||
if(get_dist(src,user) <= user.remote_range)
|
||||
if(get_dist(src,user) <= user.interaction_range)
|
||||
AICtrlClick()
|
||||
else
|
||||
..()
|
||||
|
||||
/obj/machinery/power/apc/BorgCtrlClick(mob/living/silicon/robot/user) // turns off/on APCs. Forwards to AI code.
|
||||
if(get_dist(src,user) <= user.remote_range)
|
||||
if(get_dist(src,user) <= user.interaction_range)
|
||||
AICtrlClick()
|
||||
else
|
||||
..()
|
||||
|
||||
/obj/machinery/turretid/BorgCtrlClick(mob/living/silicon/robot/user) //turret control on/off. Forwards to AI code.
|
||||
if(get_dist(src,user) <= user.remote_range)
|
||||
if(get_dist(src,user) <= user.interaction_range)
|
||||
AICtrlClick()
|
||||
else
|
||||
..()
|
||||
@@ -147,13 +147,13 @@
|
||||
return
|
||||
|
||||
/obj/machinery/door/airlock/BorgAltClick(mob/living/silicon/robot/user) // Eletrifies doors. Forwards to AI code.
|
||||
if(get_dist(src,user) <= user.remote_range)
|
||||
if(get_dist(src,user) <= user.interaction_range)
|
||||
AIAltClick()
|
||||
else
|
||||
..()
|
||||
|
||||
/obj/machinery/turretid/BorgAltClick(mob/living/silicon/robot/user) //turret lethal on/off. Forwards to AI code.
|
||||
if(get_dist(src,user) <= user.remote_range)
|
||||
if(get_dist(src,user) <= user.interaction_range)
|
||||
AIAltClick()
|
||||
else
|
||||
..()
|
||||
|
||||
@@ -8,6 +8,8 @@
|
||||
/atom/MouseDrop(atom/over, src_location, over_location, src_control, over_control, params)
|
||||
if(!usr || !over)
|
||||
return
|
||||
if(SendSignal(COMSIG_MOUSEDROP_ONTO, over, usr) & COMPONENT_NO_MOUSEDROP) //Whatever is recieving will verify themselves for adjacency.
|
||||
return
|
||||
if(over == src)
|
||||
return usr.client.Click(src, src_location, src_control, params)
|
||||
if(!Adjacent(usr) || !over.Adjacent(usr))
|
||||
@@ -18,4 +20,5 @@
|
||||
|
||||
// recieve a mousedrop
|
||||
/atom/proc/MouseDrop_T(atom/dropping, mob/user)
|
||||
SendSignal(COMSIG_MOUSEDROPPED_ONTO, dropping, user)
|
||||
return
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
|
||||
/obj/item/proc/melee_attack_chain(mob/user, atom/target, params)
|
||||
if(!tool_attack_chain(user, target) && pre_attackby(target, user, params))
|
||||
if(!tool_attack_chain(user, target) && pre_attack(target, user, params))
|
||||
// Return 1 in attackby() to prevent afterattack() effects (when safely moving items for example)
|
||||
var/resolved = target.attackby(src, user, params)
|
||||
if(!resolved && target && !QDELETED(src))
|
||||
@@ -20,7 +20,9 @@
|
||||
SendSignal(COMSIG_ITEM_ATTACK_SELF, user)
|
||||
interact(user)
|
||||
|
||||
/obj/item/proc/pre_attackby(atom/A, mob/living/user, params) //do stuff before attackby!
|
||||
/obj/item/proc/pre_attack(atom/A, mob/living/user, params) //do stuff before attackby!
|
||||
if(SendSignal(COMSIG_ITEM_PRE_ATTACK, A, user, params) & COMPONENT_NO_ATTACK)
|
||||
return FALSE
|
||||
return TRUE //return FALSE to avoid calling attackby after this proc does stuff
|
||||
|
||||
// No comment
|
||||
@@ -75,7 +77,8 @@
|
||||
|
||||
//the equivalent of the standard version of attack() but for object targets.
|
||||
/obj/item/proc/attack_obj(obj/O, mob/living/user)
|
||||
SendSignal(COMSIG_ITEM_ATTACK_OBJ, O, user)
|
||||
if(SendSignal(COMSIG_ITEM_ATTACK_OBJ, O, user) & COMPONENT_NO_ATTACK_OBJ)
|
||||
return
|
||||
if(flags_1 & NOBLUDGEON_1)
|
||||
return
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
|
||||
@@ -48,17 +48,19 @@
|
||||
|
||||
// Oh by the way this didn't work with old click code which is why clicking shit didn't spam you
|
||||
/atom/proc/attack_ghost(mob/dead/observer/user)
|
||||
if(SendSignal(COMSIG_ATOM_ATTACK_GHOST, user) & COMPONENT_NO_ATTACK_HAND)
|
||||
return TRUE
|
||||
if(user.client)
|
||||
if(IsAdminGhost(user))
|
||||
attack_ai(user)
|
||||
else if(user.client.prefs.inquisitive_ghost)
|
||||
user.examinate(src)
|
||||
return FALSE
|
||||
|
||||
/mob/living/attack_ghost(mob/dead/observer/user)
|
||||
if(user.client && user.health_scan)
|
||||
healthscan(user, src, 1, TRUE)
|
||||
return
|
||||
..()
|
||||
return ..()
|
||||
|
||||
// ---------------------------------------
|
||||
// And here are some good things for free:
|
||||
@@ -69,17 +71,16 @@
|
||||
user.forceMove(awaygate.loc)
|
||||
else
|
||||
to_chat(user, "[src] has no destination.")
|
||||
return ..()
|
||||
|
||||
/obj/machinery/gateway/centeraway/attack_ghost(mob/user)
|
||||
if(stationgate)
|
||||
user.forceMove(stationgate.loc)
|
||||
else
|
||||
to_chat(user, "[src] has no destination.")
|
||||
|
||||
/obj/item/storage/attack_ghost(mob/user)
|
||||
orient2hud(user)
|
||||
show_to(user)
|
||||
return ..()
|
||||
|
||||
/obj/machinery/teleport/hub/attack_ghost(mob/user)
|
||||
if(power_station && power_station.engaged && power_station.teleporter_console && power_station.teleporter_console.target)
|
||||
user.forceMove(get_turf(power_station.teleporter_console.target))
|
||||
return ..()
|
||||
|
||||
@@ -27,13 +27,50 @@
|
||||
|
||||
SendSignal(COMSIG_HUMAN_MELEE_UNARMED_ATTACK, A)
|
||||
A.attack_hand(src)
|
||||
SendSignal(COMSIG_HUMAN_MELEE_UNARMED_ATTACKBY, src)
|
||||
|
||||
//Return TRUE to cancel other attack hand effects that respect it.
|
||||
/atom/proc/attack_hand(mob/user)
|
||||
return
|
||||
. = FALSE
|
||||
if(!(interaction_flags_atom & INTERACT_ATOM_NO_FINGERPRINT_ATTACK_HAND))
|
||||
add_fingerprint(user)
|
||||
if(SendSignal(COMSIG_ATOM_ATTACK_HAND, user) & COMPONENT_NO_ATTACK_HAND)
|
||||
. = TRUE
|
||||
if(interaction_flags_atom & INTERACT_ATOM_ATTACK_HAND)
|
||||
. = _try_interact(user)
|
||||
|
||||
//Return a non FALSE value to cancel whatever called this from propagating, if it respects it.
|
||||
/atom/proc/_try_interact(mob/user)
|
||||
if(IsAdminGhost(user)) //admin abuse
|
||||
return interact(user)
|
||||
if(can_interact(user))
|
||||
return interact(user)
|
||||
return FALSE
|
||||
|
||||
/atom/proc/can_interact(mob/user)
|
||||
if(!user.can_interact_with(src))
|
||||
return FALSE
|
||||
if((interaction_flags_atom & INTERACT_ATOM_REQUIRES_DEXTERITY) && !user.IsAdvancedToolUser())
|
||||
to_chat(user, "<span class='warning'>You don't have the dexterity to do this!</span>")
|
||||
return FALSE
|
||||
if(!(interaction_flags_atom & INTERACT_ATOM_IGNORE_INCAPACITATED) && user.incapacitated((interaction_flags_atom & INTERACT_ATOM_IGNORE_RESTRAINED), !(interaction_flags_atom & INTERACT_ATOM_CHECK_GRAB)))
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/atom/movable/can_interact(mob/user)
|
||||
. = ..()
|
||||
if(!.)
|
||||
return
|
||||
if(!anchored && (interaction_flags_atom & INTERACT_ATOM_REQUIRES_ANCHORED))
|
||||
return FALSE
|
||||
|
||||
/atom/proc/interact(mob/user)
|
||||
return
|
||||
if(interaction_flags_atom & INTERACT_ATOM_NO_FINGERPRINT_INTERACT)
|
||||
add_hiddenprint(user)
|
||||
else
|
||||
add_fingerprint(user)
|
||||
if(interaction_flags_atom & INTERACT_ATOM_UI_INTERACT)
|
||||
return ui_interact(user)
|
||||
return FALSE
|
||||
|
||||
/*
|
||||
/mob/living/carbon/human/RestrainedClickOn(var/atom/A) ---carbons will handle this
|
||||
@@ -72,8 +109,11 @@
|
||||
*/
|
||||
/mob/living/carbon/monkey/UnarmedAttack(atom/A)
|
||||
A.attack_paw(src)
|
||||
|
||||
/atom/proc/attack_paw(mob/user)
|
||||
return
|
||||
if(SendSignal(COMSIG_ATOM_ATTACK_PAW, user) & COMPONENT_NO_ATTACK_HAND)
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/*
|
||||
Monkey RestrainedClickOn() was apparently the
|
||||
@@ -115,9 +155,11 @@
|
||||
*/
|
||||
/mob/living/carbon/alien/UnarmedAttack(atom/A)
|
||||
A.attack_alien(src)
|
||||
|
||||
/atom/proc/attack_alien(mob/living/carbon/alien/user)
|
||||
attack_paw(user)
|
||||
return
|
||||
|
||||
/mob/living/carbon/alien/RestrainedClickOn(atom/A)
|
||||
return
|
||||
|
||||
|
||||
@@ -104,9 +104,6 @@
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
/obj/item/tk_grab/attack_hand(mob/user)
|
||||
return
|
||||
|
||||
/obj/item/tk_grab/attack_self(mob/user)
|
||||
if(!focus)
|
||||
return
|
||||
|
||||
@@ -31,4 +31,4 @@ SUBSYSTEM_DEF(npcpool)
|
||||
if(SA.stat != DEAD)
|
||||
SA.handle_automated_speech()
|
||||
if (MC_TICK_CHECK)
|
||||
return
|
||||
return
|
||||
|
||||
@@ -171,7 +171,7 @@ SUBSYSTEM_DEF(persistence)
|
||||
/datum/controller/subsystem/persistence/proc/SetUpTrophies(list/trophy_items)
|
||||
for(var/A in GLOB.trophy_cases)
|
||||
var/obj/structure/displaycase/trophy/T = A
|
||||
if (T.showpiece)
|
||||
if (T.showpiece)
|
||||
continue
|
||||
T.added_roundstart = TRUE
|
||||
|
||||
@@ -275,7 +275,7 @@ SUBSYSTEM_DEF(persistence)
|
||||
|
||||
/datum/controller/subsystem/persistence/proc/CollectAntagReputation()
|
||||
var/ANTAG_REP_MAXIMUM = CONFIG_GET(number/antag_rep_maximum)
|
||||
|
||||
|
||||
for(var/p_ckey in antag_rep_change)
|
||||
// var/start = antag_rep[p_ckey]
|
||||
antag_rep[p_ckey] = max(0, min(antag_rep[p_ckey]+antag_rep_change[p_ckey], ANTAG_REP_MAXIMUM))
|
||||
|
||||
@@ -95,6 +95,7 @@
|
||||
. = ..()
|
||||
QDEL_IN(src, 300)
|
||||
|
||||
//ATTACK HAND IGNORING PARENT RETURN VALUE
|
||||
/obj/effect/hallucination/simple/bluespace_stream/attack_hand(mob/user)
|
||||
if(user != seer || !linked_to)
|
||||
return
|
||||
|
||||
@@ -10,6 +10,10 @@
|
||||
var/last_find_references = 0
|
||||
#endif
|
||||
|
||||
#ifdef DATUMVAR_DEBUGGING_MODE
|
||||
var/list/cached_vars
|
||||
#endif
|
||||
|
||||
// Default implementation of clean-up code.
|
||||
// This should be overridden to remove all references pointing to the object being destroyed.
|
||||
// Return the appropriate QDEL_HINT; in most cases this is QDEL_HINT_QUEUE.
|
||||
@@ -38,3 +42,30 @@
|
||||
dc.Cut()
|
||||
|
||||
return QDEL_HINT_QUEUE
|
||||
|
||||
#ifdef DATUMVAR_DEBUGGING_MODE
|
||||
/datum/proc/save_vars()
|
||||
cached_vars = list()
|
||||
for(var/i in vars)
|
||||
if(i == "cached_vars")
|
||||
continue
|
||||
cached_vars[i] = vars[i]
|
||||
|
||||
/datum/proc/check_changed_vars()
|
||||
. = list()
|
||||
for(var/i in vars)
|
||||
if(i == "cached_vars")
|
||||
continue
|
||||
if(cached_vars[i] != vars[i])
|
||||
.[i] = list(cached_vars[i], vars[i])
|
||||
|
||||
/datum/proc/txt_changed_vars()
|
||||
var/list/l = check_changed_vars()
|
||||
var/t = "[src]([REF(src)]) changed vars:"
|
||||
for(var/i in l)
|
||||
t += "\"[i]\" \[[l[i][1]]\] --> \[[l[i][2]]\] "
|
||||
t += "."
|
||||
|
||||
/datum/proc/to_chat_check_changed_vars(target = world)
|
||||
to_chat(target, txt_changed_vars())
|
||||
#endif
|
||||
|
||||
@@ -87,7 +87,7 @@
|
||||
var/number = backpack_contents[path]
|
||||
if(!isnum(number))//Default to 1
|
||||
number = 1
|
||||
for(var/i=0,i<number,i++)
|
||||
for(var/i in 1 to number)
|
||||
H.equip_to_slot_or_del(new path(H),slot_in_backpack)
|
||||
|
||||
if(!H.head && toggle_helmet && istype(H.wear_suit, /obj/item/clothing/suit/space/hardsuit))
|
||||
|
||||
@@ -14,6 +14,14 @@
|
||||
/atom
|
||||
var/datum/wires/wires = null
|
||||
|
||||
/atom/proc/attempt_wire_interaction(mob/user)
|
||||
if(!wires)
|
||||
return WIRE_INTERACTION_FAIL
|
||||
if(!user.CanReach(src))
|
||||
return WIRE_INTERACTION_FAIL
|
||||
wires.interact(user)
|
||||
return WIRE_INTERACTION_BLOCK
|
||||
|
||||
/datum/wires
|
||||
var/atom/holder = null // The holder (atom that contains these wires).
|
||||
var/holder_type = null // The holder's typepath (used to make wire colors common to all holders).
|
||||
@@ -19,7 +19,6 @@
|
||||
var/obj/machinery/rnd/R = holder
|
||||
var/list/status = list()
|
||||
status += "The red light is [R.disabled ? "off" : "on"]."
|
||||
status += "The green light is [R.shocked ? "off" : "on"]."
|
||||
status += "The blue light is [R.hacked ? "off" : "on"]."
|
||||
return status
|
||||
|
||||
@@ -31,12 +30,6 @@
|
||||
R.hacked = !R.hacked
|
||||
if(WIRE_DISABLE)
|
||||
R.disabled = !R.disabled
|
||||
if(WIRE_SHOCK)
|
||||
R.shocked = TRUE
|
||||
sleep(100)
|
||||
if(R)
|
||||
R.shocked = FALSE
|
||||
|
||||
/datum/wires/rnd/on_cut(wire, mend)
|
||||
var/obj/machinery/rnd/R = holder
|
||||
switch(wire)
|
||||
@@ -44,5 +37,3 @@
|
||||
R.hacked = !mend
|
||||
if(WIRE_DISABLE)
|
||||
R.disabled = !mend
|
||||
if(WIRE_SHOCK)
|
||||
R.shocked = !mend
|
||||
|
||||
+3
-2
@@ -3,8 +3,9 @@
|
||||
plane = GAME_PLANE
|
||||
var/level = 2
|
||||
|
||||
var/flags_1 = 0
|
||||
var/flags_2 = 0
|
||||
var/flags_1 = NONE
|
||||
var/flags_2 = NONE
|
||||
var/interaction_flags_atom = NONE
|
||||
var/container_type = NONE
|
||||
var/admin_spawned = 0 //was this spawned by an admin? used for stat tracking stuff.
|
||||
var/datum/reagents/reagents = null
|
||||
|
||||
@@ -94,10 +94,9 @@
|
||||
main_cult = C.cult_team
|
||||
..()
|
||||
|
||||
|
||||
/datum/game_mode/proc/add_cultist(datum/mind/cult_mind, stun , equip = FALSE) //BASE
|
||||
if (!istype(cult_mind))
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
var/datum/antagonist/cult/new_cultist = new()
|
||||
new_cultist.give_equipment = equip
|
||||
@@ -105,7 +104,7 @@
|
||||
if(cult_mind.add_antag_datum(new_cultist))
|
||||
if(stun)
|
||||
cult_mind.current.Unconscious(100)
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
/datum/game_mode/proc/remove_cultist(datum/mind/cult_mind, silent, stun)
|
||||
if(cult_mind.current)
|
||||
|
||||
@@ -8,7 +8,9 @@
|
||||
var/datum/airlock_maker/maker = null
|
||||
|
||||
/obj/structure/door_assembly/attack_hand()
|
||||
..()
|
||||
. = ..()
|
||||
if(.)
|
||||
return
|
||||
if(maker)
|
||||
maker.interact()
|
||||
|
||||
|
||||
@@ -105,24 +105,25 @@
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/pdapainter/attack_hand(mob/user)
|
||||
if(!..())
|
||||
add_fingerprint(user)
|
||||
. = ..()
|
||||
if(.)
|
||||
return
|
||||
|
||||
if(storedpda)
|
||||
var/obj/item/device/pda/P
|
||||
P = input(user, "Select your color!", "PDA Painting") as null|anything in colorlist
|
||||
if(!P)
|
||||
return
|
||||
if(!in_range(src, user))
|
||||
return
|
||||
if(!storedpda)//is the pda still there?
|
||||
return
|
||||
storedpda.icon_state = P.icon_state
|
||||
storedpda.desc = P.desc
|
||||
ejectpda()
|
||||
if(storedpda)
|
||||
var/obj/item/device/pda/P
|
||||
P = input(user, "Select your color!", "PDA Painting") as null|anything in colorlist
|
||||
if(!P)
|
||||
return
|
||||
if(!in_range(src, user))
|
||||
return
|
||||
if(!storedpda)//is the pda still there?
|
||||
return
|
||||
storedpda.icon_state = P.icon_state
|
||||
storedpda.desc = P.desc
|
||||
ejectpda()
|
||||
|
||||
else
|
||||
to_chat(user, "<span class='notice'>[src] is empty.</span>")
|
||||
else
|
||||
to_chat(user, "<span class='notice'>[src] is empty.</span>")
|
||||
|
||||
|
||||
/obj/machinery/pdapainter/verb/ejectpda()
|
||||
|
||||
@@ -92,6 +92,8 @@ Class Procs:
|
||||
pressure_resistance = 15
|
||||
max_integrity = 200
|
||||
|
||||
interaction_flags_atom = INTERACT_ATOM_ATTACK_HAND | INTERACT_ATOM_UI_INTERACT
|
||||
|
||||
var/stat = 0
|
||||
var/use_power = IDLE_POWER_USE
|
||||
//0 = dont run the auto
|
||||
@@ -107,11 +109,11 @@ Class Procs:
|
||||
var/critical_machine = FALSE //If this machine is critical to station operation and should have the area be excempted from power failures.
|
||||
var/list/occupant_typecache //if set, turned into typecache in Initialize, other wise, defaults to mob/living typecache
|
||||
var/atom/movable/occupant = null
|
||||
var/interact_open = FALSE // Can the machine be interacted with when in maint/when the panel is open.
|
||||
var/interact_offline = FALSE // Can the machine be interacted with while de-powered.
|
||||
var/speed_process = FALSE // Process as fast as possible?
|
||||
var/obj/item/circuitboard/circuit // Circuit to be created and inserted when the machinery is created
|
||||
|
||||
var/interaction_flags_machine = INTERACT_MACHINE_WIRES_IF_OPEN | INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OPEN_SILICON | INTERACT_MACHINE_SET_MACHINE
|
||||
|
||||
/obj/machinery/Initialize()
|
||||
if(!armor)
|
||||
armor = list("melee" = 25, "bullet" = 10, "laser" = 10, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 70)
|
||||
@@ -155,7 +157,7 @@ Class Procs:
|
||||
new /obj/effect/temp_visual/emp(loc)
|
||||
..()
|
||||
|
||||
/obj/machinery/proc/open_machine(drop = 1)
|
||||
/obj/machinery/proc/open_machine(drop = TRUE)
|
||||
state_open = TRUE
|
||||
density = FALSE
|
||||
if(drop)
|
||||
@@ -207,25 +209,29 @@ Class Procs:
|
||||
/obj/machinery/proc/is_operational()
|
||||
return !(stat & (NOPOWER|BROKEN|MAINT))
|
||||
|
||||
/obj/machinery/proc/is_interactable()
|
||||
if((stat & (NOPOWER|BROKEN)) && !interact_offline)
|
||||
/obj/machinery/can_interact(mob/user)
|
||||
var/silicon = issiliconoradminghost(user)
|
||||
if((stat & (NOPOWER|BROKEN)) && !(interaction_flags_machine & INTERACT_MACHINE_OFFLINE))
|
||||
return FALSE
|
||||
if(panel_open && !interact_open)
|
||||
if(panel_open && !(interaction_flags_machine & INTERACT_MACHINE_OPEN))
|
||||
if(!silicon || !(interaction_flags_machine & INTERACT_MACHINE_OPEN_SILICON))
|
||||
return FALSE
|
||||
if(!silicon && (interaction_flags_machine & INTERACT_MACHINE_REQUIRES_SILICON))
|
||||
return FALSE
|
||||
else if(silicon && !(interaction_flags_machine & INTERACT_MACHINE_ALLOW_SILICON))
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
//Return a non FALSE value to interrupt attack_hand propagation to subtypes.
|
||||
/obj/machinery/interact(mob/user, special_state)
|
||||
add_fingerprint(user)
|
||||
if(special_state)
|
||||
ui_interact(user, state = special_state)
|
||||
else
|
||||
ui_interact(user)
|
||||
if(interaction_flags_machine & INTERACT_MACHINE_SET_MACHINE)
|
||||
user.set_machine(src)
|
||||
. = ..()
|
||||
|
||||
/obj/machinery/ui_status(mob/user)
|
||||
if(is_interactable())
|
||||
if(can_interact(user))
|
||||
return ..()
|
||||
return UI_CLOSE
|
||||
|
||||
@@ -235,18 +241,15 @@ Class Procs:
|
||||
|
||||
/obj/machinery/Topic(href, href_list)
|
||||
..()
|
||||
if(!is_interactable())
|
||||
if(!can_interact(usr))
|
||||
return 1
|
||||
if(!usr.canUseTopic(src))
|
||||
return 1
|
||||
add_fingerprint(usr)
|
||||
return 0
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
|
||||
/obj/machinery/attack_paw(mob/living/user)
|
||||
if(user.a_intent != INTENT_HARM)
|
||||
return attack_hand(user)
|
||||
@@ -256,32 +259,23 @@ Class Procs:
|
||||
user.visible_message("<span class='danger'>[user.name] smashes against \the [src.name] with its paws.</span>", null, null, COMBAT_MESSAGE_RANGE)
|
||||
take_damage(4, BRUTE, "melee", 1)
|
||||
|
||||
/obj/machinery/attack_robot(mob/user)
|
||||
if(!(interaction_flags_machine & INTERACT_MACHINE_ALLOW_SILICON) && !IsAdminGhost(user))
|
||||
return FALSE
|
||||
return _try_interact(user)
|
||||
|
||||
/obj/machinery/attack_ai(mob/user)
|
||||
if(!(interaction_flags_machine & INTERACT_MACHINE_ALLOW_SILICON) && !IsAdminGhost(user))
|
||||
return FALSE
|
||||
if(iscyborg(user))// For some reason attack_robot doesn't work
|
||||
var/mob/living/silicon/robot/R = user
|
||||
if(R.client && R.client.eye == R && !R.low_power_mode)// This is to stop robots from using cameras to remotely control machines; and from using machines when the borg has no power.
|
||||
return attack_hand(user)
|
||||
return attack_robot(user)
|
||||
else
|
||||
return attack_hand(user)
|
||||
return _try_interact(user)
|
||||
|
||||
|
||||
//set_machine must be 0 if clicking the machinery doesn't bring up a dialog
|
||||
/obj/machinery/attack_hand(mob/user, check_power = 1, set_machine = 1)
|
||||
if(..())// unbuckling etc
|
||||
return 1
|
||||
if((user.lying || user.stat) && !IsAdminGhost(user))
|
||||
return 1
|
||||
if(!user.IsAdvancedToolUser() && !IsAdminGhost(user))
|
||||
to_chat(usr, "<span class='warning'>You don't have the dexterity to do this!</span>")
|
||||
return 1
|
||||
if(!is_interactable())
|
||||
return 1
|
||||
if(set_machine)
|
||||
user.set_machine(src)
|
||||
interact(user)
|
||||
add_fingerprint(user)
|
||||
return 0
|
||||
/obj/machinery/_try_interact(mob/user)
|
||||
if((interaction_flags_machine & INTERACT_MACHINE_WIRES_IF_OPEN) && panel_open && (attempt_wire_interaction(user) == WIRE_INTERACTION_BLOCK))
|
||||
return TRUE
|
||||
return ..()
|
||||
|
||||
/obj/machinery/CheckParts(list/parts_list)
|
||||
..()
|
||||
@@ -431,8 +425,8 @@ Class Procs:
|
||||
display_parts(user)
|
||||
if(shouldplaysound)
|
||||
W.play_rped_sound()
|
||||
return 1
|
||||
return 0
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/obj/machinery/proc/display_parts(mob/user)
|
||||
to_chat(user, "<span class='notice'>It contains the following parts:</span>")
|
||||
|
||||
@@ -30,12 +30,7 @@
|
||||
else
|
||||
icon_state = "ai-slipper1"
|
||||
|
||||
/obj/machinery/ai_slipper/attack_ai(mob/user)
|
||||
return attack_hand(user)
|
||||
|
||||
/obj/machinery/ai_slipper/attack_hand(mob/user)
|
||||
if(stat & (NOPOWER|BROKEN))
|
||||
return
|
||||
/obj/machinery/ai_slipper/interact(mob/user)
|
||||
if(!allowed(user))
|
||||
to_chat(user, "<span class='danger'>Access denied.</span>")
|
||||
return
|
||||
|
||||
@@ -113,6 +113,9 @@
|
||||
icon_state = "airlock_sensor_off"
|
||||
|
||||
/obj/machinery/airlock_sensor/attack_hand(mob/user)
|
||||
. = ..()
|
||||
if(.)
|
||||
return
|
||||
var/datum/signal/signal = new(list(
|
||||
"tag" = master_tag,
|
||||
"command" = "cycle"
|
||||
|
||||
@@ -100,7 +100,8 @@ GLOBAL_LIST_EMPTY(announcement_systems)
|
||||
|
||||
//config stuff
|
||||
|
||||
/obj/machinery/announcement_system/interact(mob/user)
|
||||
/obj/machinery/announcement_system/ui_interact(mob/user)
|
||||
. = ..()
|
||||
if(!user.canUseTopic(src, !issilicon(user)))
|
||||
return
|
||||
if(stat & BROKEN)
|
||||
@@ -117,6 +118,8 @@ GLOBAL_LIST_EMPTY(announcement_systems)
|
||||
popup.open()
|
||||
|
||||
/obj/machinery/announcement_system/Topic(href, href_list)
|
||||
if(..())
|
||||
return
|
||||
if(!usr.canUseTopic(src, !issilicon(usr)))
|
||||
return
|
||||
if(stat & BROKEN)
|
||||
|
||||
@@ -101,22 +101,24 @@
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/aug_manipulator/attack_hand(mob/user)
|
||||
if(!..())
|
||||
add_fingerprint(user)
|
||||
. = ..()
|
||||
if(.)
|
||||
return
|
||||
add_fingerprint(user)
|
||||
|
||||
if(storedpart)
|
||||
var/augstyle = input(user, "Select style.", "Augment Custom Fitting") as null|anything in style_list_icons
|
||||
if(!augstyle)
|
||||
return
|
||||
if(!in_range(src, user))
|
||||
return
|
||||
if(!storedpart)
|
||||
return
|
||||
storedpart.icon = style_list_icons[augstyle]
|
||||
eject_part(user)
|
||||
if(storedpart)
|
||||
var/augstyle = input(user, "Select style.", "Augment Custom Fitting") as null|anything in style_list_icons
|
||||
if(!augstyle)
|
||||
return
|
||||
if(!in_range(src, user))
|
||||
return
|
||||
if(!storedpart)
|
||||
return
|
||||
storedpart.icon = style_list_icons[augstyle]
|
||||
eject_part(user)
|
||||
|
||||
else
|
||||
to_chat(user, "<span class='notice'>\The [src] is empty.</span>")
|
||||
else
|
||||
to_chat(user, "<span class='notice'>\The [src] is empty.</span>")
|
||||
|
||||
/obj/machinery/aug_manipulator/proc/eject_part(mob/living/user)
|
||||
if(storedpart)
|
||||
|
||||
@@ -57,7 +57,8 @@
|
||||
QDEL_NULL(wires)
|
||||
return ..()
|
||||
|
||||
/obj/machinery/autolathe/interact(mob/user)
|
||||
/obj/machinery/autolathe/ui_interact(mob/user)
|
||||
. = ..()
|
||||
if(!is_operational())
|
||||
return
|
||||
|
||||
|
||||
@@ -55,10 +55,8 @@
|
||||
/obj/machinery/computer/bank_machine/get_spans()
|
||||
. = ..() | SPAN_ROBOT
|
||||
|
||||
/obj/machinery/computer/bank_machine/attack_hand(mob/user)
|
||||
if(..())
|
||||
return
|
||||
src.add_fingerprint(usr)
|
||||
/obj/machinery/computer/bank_machine/ui_interact(mob/user)
|
||||
. = ..()
|
||||
var/dat = "[station_name()] secure vault. Authorized personnel only.<br>"
|
||||
dat += "Current Balance: [SSshuttle.points] credits.<br>"
|
||||
if(!siphoning)
|
||||
|
||||
@@ -16,7 +16,6 @@
|
||||
idle_power_usage = 2
|
||||
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
|
||||
|
||||
|
||||
/obj/machinery/button/Initialize(mapload, ndir = 0, built = 0)
|
||||
. = ..()
|
||||
if(built)
|
||||
@@ -98,7 +97,7 @@
|
||||
return
|
||||
|
||||
if(user.a_intent != INTENT_HARM && !(W.flags_1 & NOBLUDGEON_1))
|
||||
return src.attack_hand(user)
|
||||
return attack_hand(user)
|
||||
else
|
||||
return ..()
|
||||
|
||||
@@ -114,6 +113,9 @@
|
||||
if(!panel_open)
|
||||
return attack_hand(user)
|
||||
|
||||
/obj/machinery/button/attack_robot(mob/user)
|
||||
return attack_ai(user)
|
||||
|
||||
/obj/machinery/button/proc/setup_device()
|
||||
if(id && istype(device, /obj/item/device/assembly/control))
|
||||
var/obj/item/device/assembly/control/A = device
|
||||
@@ -121,9 +123,12 @@
|
||||
initialized_button = 1
|
||||
|
||||
/obj/machinery/button/attack_hand(mob/user)
|
||||
. = ..()
|
||||
if(.)
|
||||
return
|
||||
if(!initialized_button)
|
||||
setup_device()
|
||||
src.add_fingerprint(user)
|
||||
add_fingerprint(user)
|
||||
if(panel_open)
|
||||
if(device || board)
|
||||
if(device)
|
||||
|
||||
@@ -79,6 +79,9 @@
|
||||
updateicon()
|
||||
|
||||
/obj/machinery/cell_charger/attack_hand(mob/user)
|
||||
. = ..()
|
||||
if(.)
|
||||
return
|
||||
if(!charging)
|
||||
return
|
||||
|
||||
|
||||
@@ -18,12 +18,8 @@
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/machinery/computer/aifixer/attack_hand(mob/user)
|
||||
if(..())
|
||||
return
|
||||
interact(user)
|
||||
|
||||
/obj/machinery/computer/aifixer/interact(mob/user)
|
||||
/obj/machinery/computer/aifixer/ui_interact(mob/user)
|
||||
. = ..()
|
||||
|
||||
var/dat = ""
|
||||
|
||||
@@ -104,6 +100,7 @@
|
||||
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 25, 0)
|
||||
active = TRUE
|
||||
add_fingerprint(usr)
|
||||
updateUsrDialog()
|
||||
|
||||
/obj/machinery/computer/aifixer/update_icon()
|
||||
..()
|
||||
|
||||
@@ -46,7 +46,8 @@
|
||||
/obj/machinery/computer/apc_control/proc/check_apc(obj/machinery/power/apc/APC)
|
||||
return APC.z == z && !APC.malfhack && !APC.aidisabled && !(APC.obj_flags & EMAGGED) && !APC.stat && !istype(APC.area, /area/ai_monitored) && !APC.area.outdoors
|
||||
|
||||
/obj/machinery/computer/apc_control/interact(mob/living/user)
|
||||
/obj/machinery/computer/apc_control/ui_interact(mob/living/user)
|
||||
. = ..()
|
||||
var/dat
|
||||
if(authenticated)
|
||||
if(!checking_logs)
|
||||
@@ -184,7 +185,7 @@
|
||||
log_activity("checked APCs")
|
||||
if(href_list["clear_logs"])
|
||||
logs = list()
|
||||
interact(usr) //Refresh the UI after a filter changes
|
||||
ui_interact(usr) //Refresh the UI after a filter changes
|
||||
|
||||
/obj/machinery/computer/apc_control/emag_act(mob/user)
|
||||
if(!authenticated)
|
||||
|
||||
@@ -134,10 +134,8 @@
|
||||
enemy_name = replacetext((name_part1 + name_part2), "the ", "")
|
||||
name = (name_action + name_part1 + name_part2)
|
||||
|
||||
/obj/machinery/computer/arcade/battle/attack_hand(mob/user)
|
||||
if(..())
|
||||
return
|
||||
user.set_machine(src)
|
||||
/obj/machinery/computer/arcade/battle/ui_interact(mob/user)
|
||||
. = ..()
|
||||
var/dat = "<a href='byond://?src=[REF(src)];close=1'>Close</a>"
|
||||
dat += "<center><h4>[enemy_name]</h4></center>"
|
||||
|
||||
@@ -404,13 +402,11 @@
|
||||
spaceport_freebie = 0
|
||||
last_spaceport_action = ""
|
||||
|
||||
/obj/machinery/computer/arcade/orion_trail/attack_hand(mob/user)
|
||||
if(..())
|
||||
return
|
||||
/obj/machinery/computer/arcade/orion_trail/ui_interact(mob/user)
|
||||
. = ..()
|
||||
if(fuel <= 0 || food <=0 || settlers.len == 0)
|
||||
gameStatus = ORION_STATUS_GAMEOVER
|
||||
event = null
|
||||
user.set_machine(src)
|
||||
var/dat = ""
|
||||
if(gameStatus == ORION_STATUS_GAMEOVER)
|
||||
dat = "<center><h1>Game Over</h1></center>"
|
||||
|
||||
@@ -51,6 +51,9 @@
|
||||
return ..()
|
||||
|
||||
/obj/machinery/computer/security/attack_hand(mob/user)
|
||||
. = ..()
|
||||
if(.)
|
||||
return
|
||||
if(stat)
|
||||
return
|
||||
if (!network)
|
||||
|
||||
@@ -80,14 +80,25 @@
|
||||
if(M == current_user)
|
||||
remove_eye_control(M)
|
||||
|
||||
/obj/machinery/computer/camera_advanced/proc/can_use(mob/living/user)
|
||||
return TRUE
|
||||
|
||||
/obj/machinery/computer/camera_advanced/abductor/can_use(mob/user)
|
||||
if(!isabductor(user))
|
||||
return FALSE
|
||||
return ..()
|
||||
|
||||
/obj/machinery/computer/camera_advanced/attack_hand(mob/user)
|
||||
. = ..()
|
||||
if(.)
|
||||
return
|
||||
if(current_user)
|
||||
to_chat(user, "The console is already in use!")
|
||||
return
|
||||
if(..())
|
||||
return
|
||||
var/mob/living/L = user
|
||||
|
||||
if(!can_use(user))
|
||||
return
|
||||
if(!eyeobj)
|
||||
CreateEye()
|
||||
|
||||
@@ -126,7 +137,6 @@
|
||||
/obj/machinery/computer/camera_advanced/attack_ai(mob/user)
|
||||
return //AIs would need to disable their own camera procs to use the console safely. Bugs happen otherwise.
|
||||
|
||||
|
||||
/obj/machinery/computer/camera_advanced/proc/give_eye_control(mob/user)
|
||||
GrantActions(user)
|
||||
current_user = user
|
||||
@@ -289,7 +299,7 @@
|
||||
warp_action.target = src
|
||||
actions += warp_action
|
||||
|
||||
/obj/machinery/computer/camera_advanced/ratvar/attack_hand(mob/living/user)
|
||||
/obj/machinery/computer/camera_advanced/ratvar/can_use(mob/living/user)
|
||||
if(!is_servant_of_ratvar(user))
|
||||
to_chat(user, "<span class='warning'>[src]'s keys are in a language foreign to you, and you don't understand anything on its screen.</span>")
|
||||
return
|
||||
|
||||
@@ -133,11 +133,9 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
|
||||
return -1
|
||||
return 0
|
||||
|
||||
/obj/machinery/computer/card/attack_hand(mob/user)
|
||||
if(..())
|
||||
return
|
||||
/obj/machinery/computer/card/ui_interact(mob/user)
|
||||
. = ..()
|
||||
|
||||
user.set_machine(src)
|
||||
var/dat
|
||||
if(!SSticker)
|
||||
return
|
||||
@@ -346,8 +344,6 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
|
||||
popup.set_content(dat)
|
||||
popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
|
||||
popup.open()
|
||||
return
|
||||
|
||||
|
||||
/obj/machinery/computer/card/Topic(href, href_list)
|
||||
if(..())
|
||||
@@ -426,9 +422,11 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
|
||||
var/datum/job/J = new jobtype
|
||||
if(ckey(J.title) == ckey(t1))
|
||||
jobdatum = J
|
||||
updateUsrDialog()
|
||||
break
|
||||
if(!jobdatum)
|
||||
to_chat(usr, "<span class='error'>No log exists for this job.</span>")
|
||||
updateUsrDialog()
|
||||
return
|
||||
|
||||
modify.access = ( istype(src, /obj/machinery/computer/card/centcom) ? get_centcom_access(t1) : jobdatum.get_access() )
|
||||
@@ -451,6 +449,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
|
||||
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
|
||||
else
|
||||
to_chat(usr, "<span class='error'>Invalid name entered.</span>")
|
||||
updateUsrDialog()
|
||||
return
|
||||
if ("mode")
|
||||
mode = text2num(href_list["mode_target"])
|
||||
@@ -466,8 +465,10 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
|
||||
var/edit_job_target = href_list["job"]
|
||||
var/datum/job/j = SSjob.GetJob(edit_job_target)
|
||||
if(!j)
|
||||
updateUsrDialog()
|
||||
return 0
|
||||
if(can_open_job(j) != 1)
|
||||
updateUsrDialog()
|
||||
return 0
|
||||
if(opened_positions[edit_job_target] >= 0)
|
||||
GLOB.time_last_changed_position = world.time / 10
|
||||
@@ -481,8 +482,10 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
|
||||
var/edit_job_target = href_list["job"]
|
||||
var/datum/job/j = SSjob.GetJob(edit_job_target)
|
||||
if(!j)
|
||||
updateUsrDialog()
|
||||
return 0
|
||||
if(can_close_job(j) != 1)
|
||||
updateUsrDialog()
|
||||
return 0
|
||||
//Allow instant closing without cooldown if a position has been opened before
|
||||
if(opened_positions[edit_job_target] <= 0)
|
||||
@@ -497,6 +500,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
|
||||
var/priority_target = href_list["job"]
|
||||
var/datum/job/j = SSjob.GetJob(priority_target)
|
||||
if(!j)
|
||||
updateUsrDialog()
|
||||
return 0
|
||||
var/priority = TRUE
|
||||
if(j in SSjob.prioritized_jobs)
|
||||
@@ -504,6 +508,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
|
||||
priority = FALSE
|
||||
else if(j.total_positions <= j.current_positions)
|
||||
to_chat(usr, "<span class='notice'>[j.title] has had all positions filled. Open up more slots before prioritizing it.</span>")
|
||||
updateUsrDialog()
|
||||
return
|
||||
else
|
||||
SSjob.prioritized_jobs += j
|
||||
@@ -525,7 +530,6 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
|
||||
if (modify)
|
||||
modify.update_label()
|
||||
updateUsrDialog()
|
||||
return
|
||||
|
||||
/obj/machinery/computer/card/AltClick(mob/user)
|
||||
if(user.canUseTopic(src))
|
||||
|
||||
@@ -143,17 +143,8 @@
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/machinery/computer/cloning/attack_hand(mob/user)
|
||||
if(..())
|
||||
return
|
||||
interact(user)
|
||||
|
||||
/obj/machinery/computer/cloning/interact(mob/user)
|
||||
user.set_machine(src)
|
||||
add_fingerprint(user)
|
||||
|
||||
if(..())
|
||||
return
|
||||
/obj/machinery/computer/cloning/ui_interact(mob/user)
|
||||
. = ..()
|
||||
|
||||
updatemodules(TRUE)
|
||||
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
|
||||
/obj/machinery/computer/communications/process()
|
||||
if(..())
|
||||
if(state != STATE_STATUSDISPLAY)
|
||||
if(state != STATE_STATUSDISPLAY && state != STATE_CALLSHUTTLE)
|
||||
updateDialog()
|
||||
|
||||
|
||||
@@ -428,14 +428,12 @@
|
||||
to_chat(user, "<span class='danger'>You scramble the communication routing circuits!</span>")
|
||||
playsound(src, 'sound/machines/terminal_alert.ogg', 50, 0)
|
||||
|
||||
/obj/machinery/computer/communications/attack_hand(mob/user)
|
||||
if(..())
|
||||
return
|
||||
/obj/machinery/computer/communications/ui_interact(mob/user)
|
||||
. = ..()
|
||||
if (z > 6)
|
||||
to_chat(user, "<span class='boldannounce'>Unable to establish a connection</span>: \black You're too far away from the station!")
|
||||
return
|
||||
|
||||
user.set_machine(src)
|
||||
var/dat = ""
|
||||
if(SSshuttle.emergency.mode == SHUTTLE_CALL)
|
||||
var/timeleft = SSshuttle.emergency.timeLeft()
|
||||
@@ -517,7 +515,7 @@
|
||||
else
|
||||
aistate = STATE_MESSAGELIST
|
||||
attack_hand(user)
|
||||
return null
|
||||
return
|
||||
if(STATE_DELMESSAGE)
|
||||
if (currmsg)
|
||||
dat += "Are you sure you want to delete this message? \[ <A HREF='?src=[REF(src)];operation=delmessage2'>OK</A> | <A HREF='?src=[REF(src)];operation=viewmessage'>Cancel</A> \]"
|
||||
|
||||
@@ -15,16 +15,7 @@
|
||||
/obj/machinery/computer/crew/syndie
|
||||
icon_keyboard = "syndie_key"
|
||||
|
||||
/obj/machinery/computer/crew/attack_ai(mob/user)
|
||||
if(stat & (BROKEN|NOPOWER))
|
||||
return
|
||||
GLOB.crewmonitor.show(user,src)
|
||||
|
||||
/obj/machinery/computer/crew/attack_hand(mob/user)
|
||||
if(..())
|
||||
return
|
||||
if(stat & (BROKEN|NOPOWER))
|
||||
return
|
||||
/obj/machinery/computer/crew/interact(mob/user)
|
||||
GLOB.crewmonitor.show(user,src)
|
||||
|
||||
GLOBAL_DATUM_INIT(crewmonitor, /datum/crewmonitor, new)
|
||||
@@ -181,10 +172,10 @@ GLOBAL_DATUM_INIT(crewmonitor, /datum/crewmonitor, new)
|
||||
pos_y = null
|
||||
|
||||
results[++results.len] = list("name" = name, "assignment" = assignment, "ijob" = ijob, "life_status" = life_status, "oxydam" = oxydam, "toxdam" = toxdam, "burndam" = burndam, "brutedam" = brutedam, "area" = area, "pos_x" = pos_x, "pos_y" = pos_y, "can_track" = H.can_track(null))
|
||||
|
||||
|
||||
data_by_z["[z]"] = results
|
||||
last_update["[z]"] = world.time
|
||||
|
||||
|
||||
return results
|
||||
|
||||
/datum/crewmonitor/ui_act(action,params)
|
||||
|
||||
@@ -60,12 +60,8 @@
|
||||
break
|
||||
injectorready = world.time + INJECTOR_TIMEOUT
|
||||
|
||||
/obj/machinery/computer/scan_consolenew/attack_hand(mob/user)
|
||||
if(..())
|
||||
return
|
||||
ShowInterface(user)
|
||||
|
||||
/obj/machinery/computer/scan_consolenew/proc/ShowInterface(mob/user, last_change)
|
||||
/obj/machinery/computer/scan_consolenew/ui_interact(mob/user, last_change)
|
||||
. = ..()
|
||||
if(!user)
|
||||
return
|
||||
var/datum/browser/popup = new(user, "scannernew", "DNA Modifier Console", 800, 630) // Set up the popup browser window
|
||||
@@ -461,7 +457,7 @@
|
||||
connected.locked = TRUE
|
||||
|
||||
current_screen = "working"
|
||||
ShowInterface(usr)
|
||||
ui_interact(usr)
|
||||
|
||||
sleep(radduration*10)
|
||||
current_screen = "mainmenu"
|
||||
@@ -507,7 +503,7 @@
|
||||
if(connected)
|
||||
connected.locked = locked_state
|
||||
|
||||
ShowInterface(usr,last_change)
|
||||
ui_interact(usr,last_change)
|
||||
|
||||
/obj/machinery/computer/scan_consolenew/proc/scramble(input,rs,rd)
|
||||
var/length = length(input)
|
||||
|
||||
@@ -30,14 +30,6 @@
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/machinery/computer/launchpad/attack_ai(mob/user)
|
||||
attack_hand(user)
|
||||
|
||||
/obj/machinery/computer/launchpad/attack_hand(mob/user)
|
||||
if(..())
|
||||
return
|
||||
interact(user)
|
||||
|
||||
/obj/machinery/computer/launchpad/proc/pad_exists(number)
|
||||
var/obj/machinery/launchpad/pad = launchpads[number]
|
||||
if(QDELETED(pad))
|
||||
@@ -48,7 +40,8 @@
|
||||
var/obj/machinery/launchpad/pad = launchpads[number]
|
||||
return pad
|
||||
|
||||
/obj/machinery/computer/launchpad/interact(mob/user)
|
||||
/obj/machinery/computer/launchpad/ui_interact(mob/user)
|
||||
. = ..()
|
||||
var/list/t = list()
|
||||
if(!LAZYLEN(launchpads))
|
||||
obj_flags &= ~IN_USE //Yeah so if you deconstruct teleporter while its in the process of shooting it wont disable the console
|
||||
|
||||
@@ -36,7 +36,8 @@
|
||||
circuit = /obj/item/circuitboard/computer/aiupload
|
||||
|
||||
/obj/machinery/computer/upload/ai/attack_hand(mob/user)
|
||||
if(..())
|
||||
. = ..()
|
||||
if(.)
|
||||
return
|
||||
|
||||
src.current = select_active_ai(user)
|
||||
@@ -60,7 +61,8 @@
|
||||
circuit = /obj/item/circuitboard/computer/borgupload
|
||||
|
||||
/obj/machinery/computer/upload/borg/attack_hand(mob/user)
|
||||
if(..())
|
||||
. = ..()
|
||||
if(.)
|
||||
return
|
||||
|
||||
src.current = select_active_free_borg(user)
|
||||
|
||||
@@ -34,9 +34,8 @@
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/machinery/computer/med_data/attack_hand(mob/user)
|
||||
if(..())
|
||||
return
|
||||
/obj/machinery/computer/med_data/interact(mob/user)
|
||||
. = ..()
|
||||
var/dat
|
||||
if(src.temp)
|
||||
dat = text("<TT>[src.temp]</TT><BR><BR><A href='?src=[REF(src)];temp=1'>Clear Screen</A>")
|
||||
@@ -192,7 +191,6 @@
|
||||
popup.set_content(dat)
|
||||
popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
|
||||
popup.open()
|
||||
return
|
||||
|
||||
/obj/machinery/computer/med_data/Topic(href, href_list)
|
||||
. = ..()
|
||||
|
||||
@@ -39,12 +39,13 @@
|
||||
if(M.id == id)
|
||||
M.close()
|
||||
|
||||
/obj/machinery/computer/pod/attack_hand(mob/user)
|
||||
if(..())
|
||||
/obj/machinery/computer/pod/ui_interact(mob/user)
|
||||
. = ..()
|
||||
if(!allowed(user))
|
||||
to_chat(user, "<span class='warning'>Access denied.</span>")
|
||||
return
|
||||
|
||||
var/dat = ""
|
||||
user.set_machine(src)
|
||||
if(connected)
|
||||
var/d2
|
||||
if(timing) //door controls do not need timers.
|
||||
@@ -69,7 +70,6 @@
|
||||
popup.set_title_image(user.browse_rsc_icon(icon, icon_state))
|
||||
popup.open()
|
||||
|
||||
|
||||
/obj/machinery/computer/pod/process()
|
||||
if(!..())
|
||||
return
|
||||
@@ -115,7 +115,6 @@
|
||||
M.drive()
|
||||
updateUsrDialog()
|
||||
|
||||
|
||||
/obj/machinery/computer/pod/old
|
||||
name = "\improper DoorMex control console"
|
||||
title = "Door Controls"
|
||||
@@ -123,21 +122,12 @@
|
||||
icon_screen = "library"
|
||||
icon_keyboard = null
|
||||
|
||||
|
||||
/obj/machinery/computer/pod/old/syndicate
|
||||
name = "\improper ProComp Executive IIc"
|
||||
desc = "The Syndicate operate on a tight budget. Operates external airlocks."
|
||||
title = "External Airlock Controls"
|
||||
req_access = list(ACCESS_SYNDICATE)
|
||||
|
||||
/obj/machinery/computer/pod/old/syndicate/attack_hand(mob/user)
|
||||
if(!allowed(user))
|
||||
to_chat(user, "<span class='notice'>Access denied.</span>")
|
||||
return
|
||||
else
|
||||
..()
|
||||
|
||||
|
||||
/obj/machinery/computer/pod/old/swf
|
||||
name = "\improper Magix System IV"
|
||||
desc = "An arcane artifact that holds much magic. Running E-Knock 2.2: Sorceror's Edition."
|
||||
|
||||
@@ -15,10 +15,8 @@
|
||||
|
||||
light_color = LIGHT_COLOR_RED
|
||||
|
||||
/obj/machinery/computer/prisoner/attack_hand(mob/user)
|
||||
if(..())
|
||||
return
|
||||
user.set_machine(src)
|
||||
/obj/machinery/computer/prisoner/ui_interact(mob/user)
|
||||
. = ..()
|
||||
var/dat = ""
|
||||
if(screen == 0)
|
||||
dat += "<HR><A href='?src=[REF(src)];lock=1'>Unlock Console</A>"
|
||||
|
||||
@@ -22,12 +22,8 @@
|
||||
return 0
|
||||
return 1
|
||||
|
||||
/obj/machinery/computer/robotics/attack_hand(mob/user)
|
||||
if(..())
|
||||
return
|
||||
interact(user)
|
||||
|
||||
/obj/machinery/computer/robotics/interact(mob/user)
|
||||
/obj/machinery/computer/robotics/ui_interact(mob/user)
|
||||
. = ..()
|
||||
if (src.z > 6)
|
||||
to_chat(user, "<span class='boldannounce'>Unable to establish a connection</span>: \black You're too far away from the station!")
|
||||
return
|
||||
|
||||
@@ -54,9 +54,8 @@
|
||||
return ..()
|
||||
|
||||
//Someone needs to break down the dat += into chunks instead of long ass lines.
|
||||
/obj/machinery/computer/secure_data/attack_hand(mob/user)
|
||||
if(..())
|
||||
return
|
||||
/obj/machinery/computer/secure_data/ui_interact(mob/user)
|
||||
. = ..()
|
||||
if(src.z > 6)
|
||||
to_chat(user, "<span class='boldannounce'>Unable to establish a connection</span>: \black You're too far away from the station!")
|
||||
return
|
||||
|
||||
@@ -85,12 +85,8 @@ GLOBAL_LIST_INIT(possible_uplinker_IDs, list("Alfa","Bravo","Charlie","Delta","E
|
||||
|
||||
///////
|
||||
|
||||
/obj/machinery/computer/telecrystals/uplinker/attack_hand(mob/user)
|
||||
if(..())
|
||||
return
|
||||
src.add_fingerprint(user)
|
||||
user.set_machine(src)
|
||||
|
||||
/obj/machinery/computer/telecrystals/uplinker/ui_interact(mob/user)
|
||||
. = ..()
|
||||
var/dat = ""
|
||||
if(linkedboss)
|
||||
dat += "[linkedboss] has [linkedboss.storedcrystals] telecrystals available for distribution. <BR><BR>"
|
||||
@@ -109,7 +105,6 @@ GLOBAL_LIST_INIT(possible_uplinker_IDs, list("Alfa","Bravo","Charlie","Delta","E
|
||||
popup.set_content(dat)
|
||||
popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
|
||||
popup.open()
|
||||
return
|
||||
|
||||
/obj/machinery/computer/telecrystals/uplinker/Topic(href, href_list)
|
||||
if(..())
|
||||
@@ -164,13 +159,8 @@ GLOBAL_LIST_INIT(possible_uplinker_IDs, list("Alfa","Bravo","Charlie","Delta","E
|
||||
|
||||
/////////
|
||||
|
||||
/obj/machinery/computer/telecrystals/boss/attack_hand(mob/user)
|
||||
if(..())
|
||||
return
|
||||
src.add_fingerprint(user)
|
||||
user.set_machine(src)
|
||||
|
||||
|
||||
/obj/machinery/computer/telecrystals/boss/ui_interact(mob/user)
|
||||
. = ..()
|
||||
var/dat = ""
|
||||
dat += "<a href='byond://?src=[REF(src)];scan=1'>Scan for TC stations.</a><BR>"
|
||||
dat += "[storedcrystals] telecrystals are available for distribution. <BR>"
|
||||
@@ -198,7 +188,6 @@ GLOBAL_LIST_INIT(possible_uplinker_IDs, list("Alfa","Bravo","Charlie","Delta","E
|
||||
popup.set_content(dat)
|
||||
popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
|
||||
popup.open()
|
||||
return
|
||||
|
||||
/obj/machinery/computer/telecrystals/boss/Topic(href, href_list)
|
||||
if(..())
|
||||
|
||||
@@ -45,15 +45,8 @@
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/machinery/computer/teleporter/attack_ai(mob/user)
|
||||
return attack_hand(user)
|
||||
|
||||
/obj/machinery/computer/teleporter/attack_hand(mob/user)
|
||||
if(..())
|
||||
return
|
||||
interact(user)
|
||||
|
||||
/obj/machinery/computer/teleporter/interact(mob/user)
|
||||
/obj/machinery/computer/teleporter/ui_interact(mob/user)
|
||||
. = ..()
|
||||
var/data = "<h3>Teleporter Status</h3>"
|
||||
if(!power_station)
|
||||
data += "<div class='statusDisplay'>No power station linked.</div>"
|
||||
|
||||
@@ -87,7 +87,8 @@
|
||||
..()
|
||||
|
||||
|
||||
/obj/machinery/disco/interact(mob/user)
|
||||
/obj/machinery/disco/ui_interact(mob/user)
|
||||
. = ..()
|
||||
if (!anchored)
|
||||
to_chat(user,"<span class='warning'>This device must be anchored by a wrench!</span>")
|
||||
return
|
||||
@@ -97,7 +98,6 @@
|
||||
return
|
||||
if(!Adjacent(user) && !isAI(user))
|
||||
return
|
||||
user.set_machine(src)
|
||||
var/list/dat = list()
|
||||
dat +="<div class='statusDisplay' style='text-align:center'>"
|
||||
dat += "<b><A href='?src=[REF(src)];action=toggle'>[!active ? "BREAK IT DOWN" : "SHUT IT DOWN"]<b></A><br>"
|
||||
|
||||
@@ -144,10 +144,7 @@
|
||||
|
||||
return ..()
|
||||
|
||||
/obj/machinery/dna_scannernew/attack_hand(mob/user)
|
||||
if(..(user,1,0)) //don't set the machine, since there's no dialog
|
||||
return
|
||||
|
||||
/obj/machinery/dna_scannernew/interact(mob/user)
|
||||
toggle_open(user)
|
||||
|
||||
/obj/machinery/dna_scannernew/MouseDrop_T(mob/target, mob/user)
|
||||
|
||||
@@ -49,7 +49,6 @@
|
||||
var/normal_integrity = AIRLOCK_INTEGRITY_N
|
||||
integrity_failure = 70
|
||||
damage_deflection = AIRLOCK_DAMAGE_DEFLECTION_N
|
||||
interact_open = TRUE
|
||||
autoclose = TRUE
|
||||
secondsElectrified = 0 //How many seconds remain until the door is no longer electrified. -1 if it is permanently electrified until someone fixes it.
|
||||
assemblytype = /obj/structure/door_assembly
|
||||
@@ -57,6 +56,8 @@
|
||||
explosion_block = 1
|
||||
hud_possible = list(DIAG_AIRLOCK_HUD)
|
||||
|
||||
interaction_flags_machine = INTERACT_MACHINE_WIRES_IF_OPEN | INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OPEN_SILICON | INTERACT_MACHINE_REQUIRES_SILICON | INTERACT_MACHINE_OPEN
|
||||
|
||||
var/security_level = 0 //How much are wires secured
|
||||
var/aiControlDisabled = 0 //If 1, AI control is disabled until the AI hacks back in and disables the lock. If 2, the AI has bypassed the lock. If -1, the control is enabled but the AI had bypassed it earlier, so if it is disabled again the AI would have no trouble getting back in.
|
||||
var/hackProof = FALSE // if true, this door can't be hacked by the AI
|
||||
@@ -730,9 +731,12 @@
|
||||
shock(user, 100)
|
||||
|
||||
/obj/machinery/door/airlock/attack_paw(mob/user)
|
||||
return src.attack_hand(user)
|
||||
return attack_hand(user)
|
||||
|
||||
/obj/machinery/door/airlock/attack_hand(mob/user)
|
||||
. = ..()
|
||||
if(.)
|
||||
return
|
||||
if(!(issilicon(user) || IsAdminGhost(user)))
|
||||
if(src.isElectrified())
|
||||
if(src.shock(user, 100))
|
||||
@@ -749,16 +753,12 @@
|
||||
H.apply_damage(10, BRUTE, BODY_ZONE_HEAD)
|
||||
else
|
||||
visible_message("<span class='danger'>[user] headbutts the airlock. Good thing [user.p_theyre()] wearing a helmet.</span>")
|
||||
return
|
||||
|
||||
if(panel_open)
|
||||
if(security_level)
|
||||
to_chat(user, "<span class='warning'>Wires are protected!</span>")
|
||||
return
|
||||
wires.interact(user)
|
||||
else
|
||||
..()
|
||||
return
|
||||
/obj/machinery/door/airlock/attempt_wire_interaction(mob/user)
|
||||
if(security_level)
|
||||
to_chat(user, "<span class='warning'>Wires are protected!</span>")
|
||||
return WIRE_INTERACTION_FAIL
|
||||
return ..()
|
||||
|
||||
/obj/machinery/door/airlock/proc/electrified_loop()
|
||||
while (secondsElectrified > 0)
|
||||
@@ -931,8 +931,9 @@
|
||||
note.forceMove(get_turf(user))
|
||||
note = null
|
||||
update_icon()
|
||||
else if(is_wire_tool(C))
|
||||
return attack_hand(user)
|
||||
else if(is_wire_tool(C) && panel_open)
|
||||
attempt_wire_interaction(user)
|
||||
return
|
||||
else if(istype(C, /obj/item/pai_cable))
|
||||
var/obj/item/pai_cable/cable = C
|
||||
cable.plugin(src, user)
|
||||
@@ -1411,6 +1412,7 @@
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "ai_airlock", name, 550, 456, master_ui, state)
|
||||
ui.open()
|
||||
return TRUE
|
||||
|
||||
/obj/machinery/door/airlock/ui_data()
|
||||
var/list/data = list()
|
||||
|
||||
@@ -13,6 +13,8 @@
|
||||
CanAtmosPass = ATMOS_PASS_DENSITY
|
||||
flags_1 = PREVENT_CLICK_UNDER_1
|
||||
|
||||
interaction_flags_atom = INTERACT_ATOM_UI_INTERACT
|
||||
|
||||
var/secondsElectrified = 0
|
||||
var/shockedby = list()
|
||||
var/visible = TRUE
|
||||
@@ -133,14 +135,12 @@
|
||||
do_animate("deny")
|
||||
return
|
||||
|
||||
|
||||
/obj/machinery/door/attack_ai(mob/user)
|
||||
return src.attack_hand(user)
|
||||
|
||||
/obj/machinery/door/attack_hand(mob/user)
|
||||
. = ..()
|
||||
if(.)
|
||||
return
|
||||
return try_to_activate_door(user)
|
||||
|
||||
|
||||
/obj/machinery/door/attack_tk(mob/user)
|
||||
if(requiresID() && !allowed(null))
|
||||
return
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
closingLayer = CLOSED_FIREDOOR_LAYER
|
||||
assemblytype = /obj/structure/firelock_frame
|
||||
armor = list("melee" = 30, "bullet" = 30, "laser" = 20, "energy" = 20, "bomb" = 10, "bio" = 100, "rad" = 100, "fire" = 95, "acid" = 70)
|
||||
interaction_flags_machine = INTERACT_MACHINE_WIRES_IF_OPEN | INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OPEN_SILICON | INTERACT_MACHINE_REQUIRES_SILICON | INTERACT_MACHINE_OPEN
|
||||
var/boltslocked = TRUE
|
||||
var/list/affecting_areas
|
||||
|
||||
@@ -82,6 +83,9 @@
|
||||
stat |= NOPOWER
|
||||
|
||||
/obj/machinery/door/firedoor/attack_hand(mob/user)
|
||||
. = ..()
|
||||
if(.)
|
||||
return
|
||||
if(operating || !density)
|
||||
return
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
@@ -140,14 +144,17 @@
|
||||
else
|
||||
close()
|
||||
|
||||
/obj/machinery/door/firedoor/attack_ai(mob/user)
|
||||
/obj/machinery/door/firedoor/interact(mob/user)
|
||||
if(!issilicon(user))
|
||||
return TRUE
|
||||
add_fingerprint(user)
|
||||
if(welded || operating || stat & NOPOWER)
|
||||
return
|
||||
return TRUE
|
||||
if(density)
|
||||
open()
|
||||
else
|
||||
close()
|
||||
return TRUE
|
||||
|
||||
/obj/machinery/door/firedoor/attack_alien(mob/user)
|
||||
add_fingerprint(user)
|
||||
|
||||
@@ -201,10 +201,6 @@
|
||||
take_damage(round(exposed_volume / 200), BURN, 0, 0)
|
||||
..()
|
||||
|
||||
|
||||
/obj/machinery/door/window/attack_ai(mob/user)
|
||||
return src.attack_hand(user)
|
||||
|
||||
/obj/machinery/door/window/emag_act(mob/user)
|
||||
if(!operating && density && !(obj_flags & EMAGGED))
|
||||
obj_flags |= EMAGGED
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
var/idSelf
|
||||
|
||||
/obj/machinery/doorButtons/attackby(obj/O, mob/user)
|
||||
attack_hand(user)
|
||||
return attack_hand(user)
|
||||
|
||||
/obj/machinery/doorButtons/proc/findObjsByTag()
|
||||
return
|
||||
@@ -59,7 +59,8 @@
|
||||
break
|
||||
|
||||
/obj/machinery/doorButtons/access_button/attack_hand(mob/user)
|
||||
if(..())
|
||||
. = ..()
|
||||
if(.)
|
||||
return
|
||||
if(busy)
|
||||
return
|
||||
@@ -260,7 +261,8 @@
|
||||
icon_state = "access_control_standby"
|
||||
|
||||
/obj/machinery/doorButtons/airlock_controller/attack_hand(mob/user)
|
||||
if(..())
|
||||
. = ..()
|
||||
if(.)
|
||||
return
|
||||
var/datum/browser/popup = new(user, "computer", name)
|
||||
popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
|
||||
|
||||
@@ -26,16 +26,14 @@
|
||||
|
||||
var/on = TRUE
|
||||
|
||||
/obj/machinery/embedded_controller/interact(mob/user)
|
||||
/obj/machinery/embedded_controller/ui_interact(mob/user)
|
||||
. = ..()
|
||||
user.set_machine(src)
|
||||
var/datum/browser/popup = new(user, "computer", name) // Set up the popup browser window
|
||||
popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
|
||||
popup.set_content(return_text())
|
||||
popup.open()
|
||||
|
||||
/obj/machinery/embedded_controller/attack_hand(mob/user)
|
||||
interact(user)
|
||||
|
||||
/obj/machinery/embedded_controller/update_icon()
|
||||
|
||||
/obj/machinery/embedded_controller/proc/return_text()
|
||||
|
||||
@@ -47,6 +47,7 @@ The console is located at computer/gulag_teleporter.dm
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/gulag_teleporter/interact(mob/user)
|
||||
. = ..()
|
||||
if(locked)
|
||||
to_chat(user, "<span class='warning'>[src] is locked!</span>")
|
||||
return
|
||||
|
||||
@@ -172,7 +172,8 @@ Possible to do for anyone motivated enough:
|
||||
return ..()
|
||||
|
||||
|
||||
/obj/machinery/holopad/interact(mob/living/carbon/human/user) //Carn: Hologram requests.
|
||||
/obj/machinery/holopad/ui_interact(mob/living/carbon/human/user) //Carn: Hologram requests.
|
||||
. = ..()
|
||||
if(!istype(user))
|
||||
return
|
||||
|
||||
|
||||
@@ -17,21 +17,15 @@
|
||||
on = FALSE
|
||||
icon_state = "igniter0"
|
||||
|
||||
/obj/machinery/igniter/attack_ai(mob/user)
|
||||
return src.attack_hand(user)
|
||||
|
||||
/obj/machinery/igniter/attack_paw(mob/user)
|
||||
return src.attack_hand(user)
|
||||
|
||||
/obj/machinery/igniter/attack_hand(mob/user)
|
||||
if(..())
|
||||
. = ..()
|
||||
if(.)
|
||||
return
|
||||
add_fingerprint(user)
|
||||
|
||||
use_power(50)
|
||||
src.on = !( src.on )
|
||||
src.icon_state = text("igniter[]", src.on)
|
||||
return
|
||||
on = !( on )
|
||||
icon_state = "igniter[on]"
|
||||
|
||||
/obj/machinery/igniter/process() //ugh why is this even in process()?
|
||||
if (src.on && !(stat & NOPOWER) )
|
||||
|
||||
@@ -66,6 +66,7 @@
|
||||
add_overlay(filling_overlay)
|
||||
|
||||
/obj/machinery/iv_drip/MouseDrop(mob/living/target)
|
||||
. = ..()
|
||||
if(!ishuman(usr) || !usr.canUseTopic(src, BE_CLOSE) || !isliving(target))
|
||||
return
|
||||
|
||||
@@ -150,6 +151,9 @@
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/iv_drip/attack_hand(mob/user)
|
||||
. = ..()
|
||||
if(.)
|
||||
return
|
||||
if(!ishuman(user))
|
||||
return
|
||||
if(attached)
|
||||
|
||||
@@ -37,12 +37,8 @@
|
||||
..()
|
||||
to_chat(user, "It is [on? "on" : "off"].")
|
||||
|
||||
|
||||
/obj/machinery/light_switch/attack_paw(mob/user)
|
||||
src.attack_hand(user)
|
||||
|
||||
/obj/machinery/light_switch/attack_hand(mob/user)
|
||||
|
||||
/obj/machinery/light_switch/interact(mob/user)
|
||||
. = ..()
|
||||
on = !on
|
||||
|
||||
for(var/area/A in area.related)
|
||||
|
||||
@@ -37,7 +37,8 @@
|
||||
stored_research = new /datum/techweb/specialized/autounlocking/limbgrower
|
||||
. = ..()
|
||||
|
||||
/obj/machinery/limbgrower/interact(mob/user)
|
||||
/obj/machinery/limbgrower/ui_interact(mob/user)
|
||||
. = ..()
|
||||
if(!is_operational())
|
||||
return
|
||||
|
||||
|
||||
@@ -238,14 +238,8 @@
|
||||
if(M.freq == frequency && M.code == code)
|
||||
magnets.Add(M)
|
||||
|
||||
|
||||
/obj/machinery/magnetic_controller/attack_ai(mob/user)
|
||||
return src.attack_hand(user)
|
||||
|
||||
/obj/machinery/magnetic_controller/attack_hand(mob/user)
|
||||
if(stat & (BROKEN|NOPOWER))
|
||||
return
|
||||
user.set_machine(src)
|
||||
/obj/machinery/magnetic_controller/ui_interact(mob/user)
|
||||
. = ..()
|
||||
var/dat = "<B>Magnetic Control Console</B><BR><BR>"
|
||||
if(!autolink)
|
||||
dat += {"
|
||||
|
||||
@@ -108,10 +108,9 @@
|
||||
/obj/machinery/navbeacon/attack_paw()
|
||||
return
|
||||
|
||||
/obj/machinery/navbeacon/attack_hand(mob/user)
|
||||
interact(user, 0)
|
||||
|
||||
/obj/machinery/navbeacon/interact(mob/user, ai = 0)
|
||||
/obj/machinery/navbeacon/ui_interact(mob/user)
|
||||
. = ..()
|
||||
var/ai = isAI(user)
|
||||
var/turf/T = loc
|
||||
if(T.intact)
|
||||
return // prevent intraction when T-scanner revealed
|
||||
|
||||
@@ -263,12 +263,8 @@ GLOBAL_LIST_EMPTY(allCasters)
|
||||
. = ..()
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/newscaster/attack_ai(mob/user)
|
||||
return attack_hand(user)
|
||||
|
||||
/obj/machinery/newscaster/attack_hand(mob/user)
|
||||
if(stat & (NOPOWER|BROKEN))
|
||||
return
|
||||
/obj/machinery/newscaster/ui_interact(mob/user)
|
||||
. = ..()
|
||||
if(ishuman(user) || issilicon(user))
|
||||
var/mob/living/human_or_robot_user = user
|
||||
var/dat
|
||||
|
||||
@@ -5,15 +5,15 @@
|
||||
desc = "Dispenses countless types of pipes. Very useful if you need pipes."
|
||||
density = TRUE
|
||||
anchored = TRUE
|
||||
interaction_flags_machine = INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OPEN_SILICON | INTERACT_MACHINE_OFFLINE
|
||||
var/wait = 0
|
||||
var/piping_layer = PIPING_LAYER_DEFAULT
|
||||
|
||||
/obj/machinery/pipedispenser/attack_paw(mob/user)
|
||||
return attack_hand(user)
|
||||
|
||||
/obj/machinery/pipedispenser/attack_hand(mob/user)
|
||||
if(..())
|
||||
return 1
|
||||
/obj/machinery/pipedispenser/ui_interact(mob/user)
|
||||
. = ..()
|
||||
var/dat = "PIPING LAYER: <A href='?src=[REF(src)];layer_down=1'>--</A><b>[piping_layer]</b><A href='?src=[REF(src)];layer_up=1'>++</A><BR>"
|
||||
|
||||
var/recipes = GLOB.atmos_pipe_recipes
|
||||
@@ -99,9 +99,7 @@
|
||||
|
||||
qdel(pipe)
|
||||
|
||||
/obj/machinery/pipedispenser/disposal/attack_hand(mob/user)
|
||||
if(..())
|
||||
return 1
|
||||
/obj/machinery/pipedispenser/disposal/interact(mob/user)
|
||||
|
||||
var/dat = ""
|
||||
var/recipes = GLOB.disposal_pipe_recipes
|
||||
@@ -151,9 +149,7 @@
|
||||
desc = "Dispenses pipes that will move beings around."
|
||||
anchored = TRUE
|
||||
|
||||
/obj/machinery/pipedispenser/disposal/transit_tube/attack_hand(mob/user)
|
||||
if(..())
|
||||
return 1
|
||||
/obj/machinery/pipedispenser/disposal/transit_tube/interact(mob/user)
|
||||
|
||||
var/dat = {"<B>Transit Tubes:</B><BR>
|
||||
<A href='?src=[REF(src)];tube=[TRANSIT_TUBE_STRAIGHT]'>Straight Tube</A><BR>
|
||||
|
||||
@@ -162,18 +162,8 @@
|
||||
remove_control()
|
||||
return ..()
|
||||
|
||||
|
||||
/obj/machinery/porta_turret/attack_ai(mob/user)
|
||||
return attack_hand(user)
|
||||
|
||||
/obj/machinery/porta_turret/attack_hand(mob/user)
|
||||
/obj/machinery/porta_turret/ui_interact(mob/user)
|
||||
. = ..()
|
||||
if(.)
|
||||
return
|
||||
|
||||
interact(user)
|
||||
|
||||
/obj/machinery/porta_turret/interact(mob/user)
|
||||
var/dat
|
||||
dat += "Status: <a href='?src=[REF(src)];power=1'>[on ? "On" : "Off"]</a><br>"
|
||||
dat += "Behaviour controls are [locked ? "locked" : "unlocked"]<br>"
|
||||
@@ -832,7 +822,7 @@
|
||||
user << browse(null, "window=turretid")
|
||||
else
|
||||
if (user.machine==src)
|
||||
src.attack_hand(user)
|
||||
attack_hand(user)
|
||||
else
|
||||
to_chat(user, "<span class='warning'>Access denied.</span>")
|
||||
|
||||
@@ -851,7 +841,8 @@
|
||||
else
|
||||
to_chat(user, "<span class='notice'>There seems to be a firewall preventing you from accessing this device.</span>")
|
||||
|
||||
/obj/machinery/turretid/attack_hand(mob/user as mob)
|
||||
/obj/machinery/turretid/ui_interact(mob/user)
|
||||
. = ..()
|
||||
if ( get_dist(src, user) > 0 )
|
||||
if ( !(issilicon(user) || IsAdminGhost(user)) )
|
||||
to_chat(user, "<span class='notice'>You are too far away.</span>")
|
||||
@@ -859,7 +850,6 @@
|
||||
user << browse(null, "window=turretid")
|
||||
return
|
||||
|
||||
user.set_machine(src)
|
||||
var/t = ""
|
||||
|
||||
if(locked && !(issilicon(user) || IsAdminGhost(user)))
|
||||
@@ -886,7 +876,7 @@
|
||||
toggle_on()
|
||||
else if (href_list["toggleLethal"])
|
||||
toggle_lethal()
|
||||
src.attack_hand(usr)
|
||||
attack_hand(usr)
|
||||
|
||||
/obj/machinery/turretid/proc/toggle_lethal()
|
||||
lethal = !lethal
|
||||
@@ -1013,7 +1003,8 @@
|
||||
if(properties["team_color"])
|
||||
team_color = properties["team_color"]
|
||||
|
||||
/obj/machinery/porta_turret/lasertag/interact(mob/user)
|
||||
/obj/machinery/porta_turret/lasertag/ui_interact(mob/user)
|
||||
. = ..()
|
||||
if(ishuman(user))
|
||||
var/mob/living/carbon/human/H = user
|
||||
if(team_color == "blue" && istype(H.wear_suit, /obj/item/clothing/suit/redtag))
|
||||
|
||||
@@ -168,6 +168,9 @@
|
||||
|
||||
|
||||
/obj/machinery/porta_turret_construct/attack_hand(mob/user)
|
||||
. = ..()
|
||||
if(.)
|
||||
return
|
||||
switch(build_step)
|
||||
if(PTURRET_GUN_EQUIPPED)
|
||||
build_step = PTURRET_INTERNAL_ARMOUR_ON
|
||||
|
||||
@@ -69,6 +69,9 @@
|
||||
return ..()
|
||||
|
||||
/obj/machinery/quantumpad/attack_hand(mob/user)
|
||||
. = ..()
|
||||
if(.)
|
||||
return
|
||||
if(panel_open)
|
||||
to_chat(user, "<span class='warning'>The panel must be closed before operating this machine!</span>")
|
||||
return
|
||||
@@ -102,6 +105,9 @@
|
||||
s.start()
|
||||
|
||||
/obj/machinery/quantumpad/attack_ghost(mob/dead/observer/ghost)
|
||||
. = ..()
|
||||
if(.)
|
||||
return
|
||||
if(!linked_pad && map_pad_link_id)
|
||||
initMappedLink()
|
||||
if(linked_pad)
|
||||
|
||||
@@ -73,7 +73,8 @@
|
||||
return ..()
|
||||
|
||||
/obj/machinery/recharger/attack_hand(mob/user)
|
||||
if(issilicon(user))
|
||||
. = ..()
|
||||
if(.)
|
||||
return
|
||||
|
||||
add_fingerprint(user)
|
||||
@@ -85,9 +86,6 @@
|
||||
use_power = IDLE_POWER_USE
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/recharger/attack_paw(mob/user)
|
||||
return attack_hand(user)
|
||||
|
||||
/obj/machinery/recharger/attack_tk(mob/user)
|
||||
if(charging)
|
||||
charging.update_icon()
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
req_access = list(ACCESS_ROBOTICS)
|
||||
state_open = TRUE
|
||||
circuit = /obj/item/circuitboard/machine/cyborgrecharger
|
||||
occupant_typecache = list(/mob/living/silicon/robot)
|
||||
var/recharge_speed
|
||||
var/repairs
|
||||
|
||||
@@ -47,12 +48,6 @@
|
||||
open_machine()
|
||||
..()
|
||||
|
||||
/obj/machinery/recharge_station/attack_paw(mob/user)
|
||||
return attack_hand(user)
|
||||
|
||||
/obj/machinery/recharge_station/attack_ai(mob/user)
|
||||
return attack_hand(user)
|
||||
|
||||
/obj/machinery/recharge_station/attackby(obj/item/P, mob/user, params)
|
||||
if(state_open)
|
||||
if(default_deconstruction_screwdriver(user, "borgdecon2", "borgcharger0", P))
|
||||
@@ -68,12 +63,9 @@
|
||||
return
|
||||
return ..()
|
||||
|
||||
/obj/machinery/recharge_station/attack_hand(mob/user)
|
||||
if(..(user,1,set_machine = 0))
|
||||
return
|
||||
|
||||
/obj/machinery/recharge_station/interact(mob/user)
|
||||
toggle_open()
|
||||
add_fingerprint(user)
|
||||
return TRUE
|
||||
|
||||
/obj/machinery/recharge_station/proc/toggle_open()
|
||||
if(state_open)
|
||||
@@ -82,20 +74,16 @@
|
||||
open_machine()
|
||||
|
||||
/obj/machinery/recharge_station/open_machine()
|
||||
..()
|
||||
use_power = IDLE_POWER_USE
|
||||
. = ..()
|
||||
if(iscyborg(occupant))
|
||||
use_power = IDLE_POWER_USE
|
||||
|
||||
/obj/machinery/recharge_station/close_machine()
|
||||
if(!panel_open)
|
||||
for(var/mob/living/silicon/robot/R in loc)
|
||||
R.forceMove(src)
|
||||
occupant = R
|
||||
. = ..()
|
||||
if(occupant)
|
||||
if(iscyborg(occupant))
|
||||
use_power = ACTIVE_POWER_USE
|
||||
add_fingerprint(R)
|
||||
break
|
||||
state_open = FALSE
|
||||
density = TRUE
|
||||
update_icon()
|
||||
add_fingerprint(occupant)
|
||||
|
||||
/obj/machinery/recharge_station/update_icon()
|
||||
if(is_operational())
|
||||
@@ -111,7 +99,7 @@
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/recharge_station/proc/process_occupant()
|
||||
if(occupant)
|
||||
if(occupant && iscyborg(occupant))
|
||||
var/mob/living/silicon/robot/R = occupant
|
||||
restock_modules()
|
||||
if(repairs)
|
||||
|
||||
@@ -129,9 +129,8 @@ GLOBAL_LIST_EMPTY(allConsoles)
|
||||
GLOB.allConsoles -= src
|
||||
return ..()
|
||||
|
||||
/obj/machinery/requests_console/attack_hand(mob/user)
|
||||
if(..())
|
||||
return
|
||||
/obj/machinery/requests_console/ui_interact(mob/user)
|
||||
. = ..()
|
||||
var/dat = ""
|
||||
if(!open)
|
||||
switch(screen)
|
||||
|
||||
@@ -40,13 +40,9 @@
|
||||
else
|
||||
stat |= NOPOWER
|
||||
|
||||
/obj/machinery/robotic_fabricator/attack_paw(mob/user)
|
||||
return src.attack_hand(user)
|
||||
|
||||
/obj/machinery/robotic_fabricator/attack_hand(mob/user)
|
||||
/obj/machinery/robotic_fabricator/ui_interact(mob/user)
|
||||
. = ..()
|
||||
var/dat
|
||||
if (..())
|
||||
return
|
||||
|
||||
if (src.operating)
|
||||
dat = {"
|
||||
|
||||
@@ -120,6 +120,9 @@
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/shieldgen/attack_hand(mob/user)
|
||||
. = ..()
|
||||
if(.)
|
||||
return
|
||||
if(locked)
|
||||
to_chat(user, "<span class='warning'>The machine is locked, you are unable to use it!</span>")
|
||||
return
|
||||
@@ -358,6 +361,9 @@
|
||||
return ..()
|
||||
|
||||
/obj/machinery/shieldwallgen/attack_hand(mob/user)
|
||||
. = ..()
|
||||
if(.)
|
||||
return
|
||||
if(!anchored)
|
||||
to_chat(user, "<span class='warning'>\The [src] needs to be firmly secured to the floor first!</span>")
|
||||
return
|
||||
@@ -421,9 +427,6 @@
|
||||
gen_secondary = null
|
||||
return ..()
|
||||
|
||||
/obj/machinery/shieldwall/attack_hand(mob/user)
|
||||
return
|
||||
|
||||
/obj/machinery/shieldwall/process()
|
||||
if(needs_power)
|
||||
if(!gen_primary || !gen_primary.active || !gen_secondary || !gen_secondary.active)
|
||||
|
||||
@@ -108,14 +108,8 @@
|
||||
spark_system.start()
|
||||
playsound(src, "sparks", 50, 1)
|
||||
|
||||
/obj/machinery/computer/slot_machine/attack_hand(mob/living/user)
|
||||
. = ..() //Sanity checks.
|
||||
if(.)
|
||||
return .
|
||||
|
||||
interact(user)
|
||||
|
||||
/obj/machinery/computer/slot_machine/interact(mob/living/user)
|
||||
/obj/machinery/computer/slot_machine/ui_interact(mob/living/user)
|
||||
. = ..()
|
||||
var/reeltext = {"<center><font face=\"courier new\">
|
||||
/*****^*****^*****^*****^*****\\<BR>
|
||||
| \[[reels[1][1]]\] | \[[reels[2][1]]\] | \[[reels[3][1]]\] | \[[reels[4][1]]\] | \[[reels[5][1]]\] |<BR>
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
/obj/machinery/space_heater
|
||||
anchored = FALSE
|
||||
density = TRUE
|
||||
interact_open = TRUE
|
||||
interaction_flags_machine = INTERACT_MACHINE_WIRES_IF_OPEN | INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OPEN
|
||||
icon = 'icons/obj/atmos.dmi'
|
||||
icon_state = "sheater-off"
|
||||
name = "space heater"
|
||||
|
||||
@@ -47,12 +47,13 @@
|
||||
|
||||
|
||||
/obj/machinery/power/singularity_beacon/attack_hand(mob/user)
|
||||
. = ..()
|
||||
if(.)
|
||||
return
|
||||
if(anchored)
|
||||
return active ? Deactivate(user) : Activate(user)
|
||||
else
|
||||
to_chat(user, "<span class='warning'>You need to screw the beacon to the floor first!</span>")
|
||||
return
|
||||
|
||||
|
||||
/obj/machinery/power/singularity_beacon/attackby(obj/item/W, mob/user, params)
|
||||
if(istype(W, /obj/item/screwdriver))
|
||||
|
||||
@@ -12,6 +12,8 @@
|
||||
layer = BELOW_MOB_LAYER //so people can't hide it and it's REALLY OBVIOUS
|
||||
resistance_flags = FIRE_PROOF | ACID_PROOF
|
||||
|
||||
interaction_flags_machine = INTERACT_MACHINE_WIRES_IF_OPEN | INTERACT_MACHINE_OFFLINE
|
||||
|
||||
var/minimum_timer = 90
|
||||
var/timer_set = 90
|
||||
var/maximum_timer = 60000
|
||||
@@ -174,12 +176,6 @@
|
||||
if((old_integ > obj_integrity) && active && !defused && (payload in src))
|
||||
to_chat(user, "<span class='warning'>That seems like a really bad idea...</span>")
|
||||
|
||||
/obj/machinery/syndicatebomb/attack_hand(mob/user)
|
||||
interact(user)
|
||||
|
||||
/obj/machinery/syndicatebomb/attack_ai()
|
||||
return
|
||||
|
||||
/obj/machinery/syndicatebomb/interact(mob/user)
|
||||
wires.interact(user)
|
||||
if(!open_panel)
|
||||
|
||||
@@ -17,10 +17,8 @@
|
||||
req_access = list(ACCESS_TCOMSAT)
|
||||
circuit = /obj/item/circuitboard/computer/comm_server
|
||||
|
||||
/obj/machinery/computer/telecomms/server/attack_hand(mob/user)
|
||||
if(..())
|
||||
return
|
||||
user.set_machine(src)
|
||||
/obj/machinery/computer/telecomms/server/ui_interact(mob/user)
|
||||
. = ..()
|
||||
var/dat = "<TITLE>Telecommunication Server Monitor</TITLE><center><b>Telecommunications Server Monitor</b></center>"
|
||||
|
||||
switch(screen)
|
||||
|
||||
@@ -77,9 +77,8 @@
|
||||
GLOB.telecomms_list -= src
|
||||
. = ..()
|
||||
|
||||
/obj/machinery/computer/message_monitor/attack_hand(mob/living/user)
|
||||
if(..())
|
||||
return
|
||||
/obj/machinery/computer/message_monitor/ui_interact(mob/living/user)
|
||||
. = ..()
|
||||
//If the computer is being hacked or is emagged, display the reboot message.
|
||||
if(hacking || (obj_flags & EMAGGED))
|
||||
message = rebootmsg
|
||||
@@ -236,7 +235,6 @@
|
||||
popup.set_content(dat)
|
||||
popup.set_title_image(user.browse_rsc_icon(icon, icon_state))
|
||||
popup.open()
|
||||
return
|
||||
|
||||
/obj/machinery/computer/message_monitor/proc/BruteForce(mob/user)
|
||||
if(isnull(linkedServer))
|
||||
|
||||
@@ -19,10 +19,8 @@
|
||||
var/temp = "" // temporary feedback messages
|
||||
circuit = /obj/item/circuitboard/computer/comm_monitor
|
||||
|
||||
/obj/machinery/computer/telecomms/monitor/attack_hand(mob/user)
|
||||
if(..())
|
||||
return
|
||||
user.set_machine(src)
|
||||
/obj/machinery/computer/telecomms/monitor/ui_interact(mob/user)
|
||||
. = ..()
|
||||
var/dat = "<TITLE>Telecommunications Monitor</TITLE><center><b>Telecommunications Monitor</b></center>"
|
||||
|
||||
switch(screen)
|
||||
|
||||
@@ -31,24 +31,14 @@
|
||||
else
|
||||
return ..()
|
||||
|
||||
|
||||
/obj/machinery/telecomms/attack_ai(mob/user)
|
||||
attack_hand(user)
|
||||
|
||||
/obj/machinery/telecomms/attack_hand(mob/user)
|
||||
|
||||
/obj/machinery/telecomms/ui_interact(mob/user)
|
||||
. = ..()
|
||||
// You need a multitool to use this, or be silicon
|
||||
if(!issilicon(user))
|
||||
// istype returns false if the value is null
|
||||
if(!istype(user.get_active_held_item(), /obj/item/device/multitool))
|
||||
return
|
||||
|
||||
if(stat & (BROKEN|NOPOWER))
|
||||
return
|
||||
|
||||
var/obj/item/device/multitool/P = get_multitool(user)
|
||||
|
||||
user.set_machine(src)
|
||||
var/dat
|
||||
dat = "<font face = \"Courier\"><HEAD><TITLE>[name]</TITLE></HEAD><center><H3>[name] Access</H3></center>"
|
||||
dat += "<br>[temp]<br>"
|
||||
|
||||
@@ -38,4 +38,4 @@
|
||||
|
||||
/obj/machinery/telecomms/allinone/attackby(obj/item/P, mob/user, params)
|
||||
if(istype(P, /obj/item/device/multitool))
|
||||
attack_hand(user)
|
||||
return attack_hand(user)
|
||||
|
||||
@@ -183,32 +183,24 @@
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/machinery/teleport/station/attack_paw()
|
||||
src.attack_hand()
|
||||
|
||||
/obj/machinery/teleport/station/attack_ai()
|
||||
src.attack_hand()
|
||||
|
||||
/obj/machinery/teleport/station/attack_hand(mob/user)
|
||||
if(!panel_open)
|
||||
toggle(user)
|
||||
/obj/machinery/teleport/station/interact(mob/user)
|
||||
toggle(user)
|
||||
|
||||
/obj/machinery/teleport/station/proc/toggle(mob/user)
|
||||
if(stat & (BROKEN|NOPOWER) || !teleporter_hub || !teleporter_console )
|
||||
return
|
||||
if (teleporter_console.target)
|
||||
if(teleporter_hub.panel_open || teleporter_hub.stat & (BROKEN|NOPOWER))
|
||||
visible_message("<span class='alert'>The teleporter hub isn't responding.</span>")
|
||||
to_chat(user, "<span class='alert'>The teleporter hub isn't responding.</span>")
|
||||
else
|
||||
src.engaged = !src.engaged
|
||||
engaged = !engaged
|
||||
use_power(5000)
|
||||
visible_message("<span class='notice'>Teleporter [engaged ? "" : "dis"]engaged!</span>")
|
||||
to_chat(user, "<span class='notice'>Teleporter [engaged ? "" : "dis"]engaged!</span>")
|
||||
else
|
||||
visible_message("<span class='alert'>No target detected.</span>")
|
||||
src.engaged = 0
|
||||
to_chat(user, "<span class='alert'>No target detected.</span>")
|
||||
engaged = FALSE
|
||||
teleporter_hub.update_icon()
|
||||
src.add_fingerprint(user)
|
||||
return
|
||||
add_fingerprint(user)
|
||||
|
||||
/obj/machinery/teleport/station/power_change()
|
||||
..()
|
||||
|
||||
@@ -220,6 +220,9 @@
|
||||
return ..()
|
||||
|
||||
/obj/machinery/washing_machine/attack_hand(mob/user)
|
||||
. = ..()
|
||||
if(.)
|
||||
return
|
||||
if(busy)
|
||||
to_chat(user, "<span class='warning'>[src] is busy.</span>")
|
||||
return
|
||||
|
||||
@@ -12,6 +12,9 @@
|
||||
var/insisting = 0
|
||||
|
||||
/obj/machinery/wish_granter/attack_hand(mob/living/carbon/user)
|
||||
. = ..()
|
||||
if(.)
|
||||
return
|
||||
if(charges <= 0)
|
||||
to_chat(user, "The Wish Granter lies silent.")
|
||||
return
|
||||
|
||||
@@ -78,14 +78,6 @@
|
||||
var/obj/machinery/mech_bay_recharge_port/recharge_port
|
||||
light_color = LIGHT_COLOR_PINK
|
||||
|
||||
/obj/machinery/computer/mech_bay_power_console/attack_ai(mob/user)
|
||||
return interact(user)
|
||||
|
||||
/obj/machinery/computer/mech_bay_power_console/attack_hand(mob/user)
|
||||
if(..())
|
||||
return
|
||||
interact(user)
|
||||
|
||||
/obj/machinery/computer/mech_bay_power_console/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state)
|
||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if(!ui)
|
||||
|
||||
@@ -247,14 +247,9 @@
|
||||
/obj/machinery/mecha_part_fabricator/proc/get_construction_time_w_coeff(datum/design/D, roundto = 1) //aran
|
||||
return round(initial(D.construction_time)*time_coeff, roundto)
|
||||
|
||||
/obj/machinery/mecha_part_fabricator/attack_hand(mob/user)
|
||||
if(!(..()))
|
||||
return interact(user)
|
||||
|
||||
/obj/machinery/mecha_part_fabricator/interact(mob/user as mob)
|
||||
/obj/machinery/mecha_part_fabricator/ui_interact(mob/user as mob)
|
||||
. = ..()
|
||||
var/dat, left_part
|
||||
if (..())
|
||||
return
|
||||
user.set_machine(src)
|
||||
var/turf/exit = get_step(src,(dir))
|
||||
if(exit.density)
|
||||
|
||||
@@ -9,10 +9,8 @@
|
||||
var/screen = 0
|
||||
var/stored_data
|
||||
|
||||
/obj/machinery/computer/mecha/attack_hand(mob/user)
|
||||
if(..())
|
||||
return
|
||||
user.set_machine(src)
|
||||
/obj/machinery/computer/mecha/ui_interact(mob/user)
|
||||
. = ..()
|
||||
var/dat = "<html><head><title>[src.name]</title><style>h3 {margin: 0px; padding: 0px;}</style></head><body>"
|
||||
if(screen == 0)
|
||||
dat += "<h3>Tracking beacons data</h3>"
|
||||
@@ -36,7 +34,6 @@
|
||||
|
||||
user << browse(dat, "window=computer;size=400x500")
|
||||
onclose(user, "computer")
|
||||
return
|
||||
|
||||
/obj/machinery/computer/mecha/Topic(href, href_list)
|
||||
if(..())
|
||||
|
||||
@@ -55,6 +55,9 @@
|
||||
|
||||
|
||||
/obj/mecha/attack_hand(mob/living/user)
|
||||
. = ..()
|
||||
if(.)
|
||||
return
|
||||
user.changeNext_move(CLICK_CD_MELEE) // Ugh. Ideally we shouldn't be setting cooldowns outside of click code.
|
||||
user.do_attack_animation(src, ATTACK_EFFECT_PUNCH)
|
||||
playsound(loc, 'sound/weapons/tap.ogg', 40, 1, -1)
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
/obj/item/mecha_parts/chassis
|
||||
name = "Mecha Chassis"
|
||||
icon_state = "backbone"
|
||||
interaction_flags_item = NONE //Don't pick us up!!
|
||||
var/construct_type
|
||||
|
||||
/obj/item/mecha_parts/chassis/Initialize()
|
||||
@@ -19,9 +20,6 @@
|
||||
if(construct_type)
|
||||
AddComponent(construct_type)
|
||||
|
||||
/obj/item/mecha_parts/chassis/attack_hand()
|
||||
return
|
||||
|
||||
/////////// Ripley
|
||||
|
||||
/obj/item/mecha_parts/chassis/ripley
|
||||
|
||||
@@ -11,6 +11,8 @@
|
||||
//Interaction
|
||||
/atom/movable/attack_hand(mob/living/user)
|
||||
. = ..()
|
||||
if(.)
|
||||
return
|
||||
if(can_buckle && has_buckled_mobs())
|
||||
if(buckled_mobs.len > 1)
|
||||
var/unbuckled = input(user, "Who do you wish to unbuckle?","Unbuckle Who?") as null|mob in buckled_mobs
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user