mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-22 19:47:22 +01:00
[FIX] You can knock climbers off of tables again (#27423)
* You can knock climbers off of tables again * Update code/game/objects/structures/tables_racks.dm Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com> Signed-off-by: Chap <erwin@lombok.demon.nl> * Update code/game/objects/structures/tables_racks.dm Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com> Signed-off-by: Chap <erwin@lombok.demon.nl> * Remove duplicate code and unnecessary check * Don't test other fixes on the PR you are working on * Some garbage collection * Move unregistering to inside remove_climber proc * How about a version that passes compilation * Unregister here too * Wrong var * Update code/game/objects/structures.dm Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com> Signed-off-by: Burzah <116982774+Burzah@users.noreply.github.com> --------- Signed-off-by: Chap <erwin@lombok.demon.nl> Signed-off-by: Burzah <116982774+Burzah@users.noreply.github.com> Co-authored-by: Adrer <adrermail@gmail.com> Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com> Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com>
This commit is contained in:
co-authored by
DGamerL
Adrer
Burzah
parent
faaf3bbcb6
commit
a28c1a45f8
@@ -8,7 +8,7 @@
|
||||
var/climbable
|
||||
/// Determines if a structure adds the TRAIT_TURF_COVERED to its turf.
|
||||
var/creates_cover = FALSE
|
||||
var/mob/living/climber
|
||||
var/list/mob/living/climbers = list()
|
||||
var/broken = FALSE
|
||||
/// How long this takes to unbuckle yourself from.
|
||||
var/unbuckle_time = 0 SECONDS
|
||||
@@ -32,6 +32,7 @@
|
||||
return ..()
|
||||
|
||||
/obj/structure/Destroy()
|
||||
climbers = null
|
||||
if(SSticker)
|
||||
GLOB.cameranet.updateVisibility(src)
|
||||
if(smoothing_flags & (SMOOTH_CORNERS|SMOOTH_BITMASK))
|
||||
@@ -58,7 +59,7 @@
|
||||
if(..())
|
||||
return TRUE
|
||||
if(C == user)
|
||||
INVOKE_ASYNC(src, TYPE_PROC_REF(/obj/structure, do_climb), user)
|
||||
INVOKE_ASYNC(src, TYPE_PROC_REF(/obj/structure, start_climb), user)
|
||||
return TRUE
|
||||
|
||||
/obj/structure/proc/density_check()
|
||||
@@ -93,12 +94,25 @@
|
||||
if(!can_touch(user) || !climbable)
|
||||
return FALSE
|
||||
|
||||
user.forceMove(get_turf(src))
|
||||
if(get_turf(user) == get_turf(src))
|
||||
return TRUE
|
||||
|
||||
/obj/structure/proc/start_climb(mob/living/user)
|
||||
climbers += user
|
||||
RegisterSignal(user, COMSIG_PARENT_QDELETING, PROC_REF(remove_climber)) // Just in case the climber is deleted before finishing
|
||||
if(do_climb(user))
|
||||
user.forceMove(get_turf(src))
|
||||
if(HAS_MIND_TRAIT(user, TRAIT_TABLE_LEAP))
|
||||
user.visible_message("<span class='warning'>[user] leaps up onto [src]!</span>")
|
||||
else
|
||||
user.visible_message("<span class='warning'>[user] climbs onto [src]!</span>")
|
||||
climbers -= user
|
||||
UnregisterSignal(user, COMSIG_PARENT_QDELETING)
|
||||
|
||||
/obj/structure/proc/remove_climber(mob/living/climber)
|
||||
SIGNAL_HANDLER // COMSIG_PARENT_QDELETING
|
||||
|
||||
climbers -= climber
|
||||
UnregisterSignal(climber, COMSIG_PARENT_QDELETING)
|
||||
|
||||
/obj/structure/proc/structure_shaken()
|
||||
for(var/mob/living/M in get_turf(src))
|
||||
|
||||
@@ -165,7 +165,7 @@
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/obj/structure/railing/do_climb(mob/living/user)
|
||||
/obj/structure/railing/start_climb(mob/living/user)
|
||||
var/initial_mob_loc = get_turf(user)
|
||||
. = ..()
|
||||
if(.)
|
||||
|
||||
@@ -103,15 +103,16 @@
|
||||
new /obj/structure/table/wood(loc)
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/table/do_climb(mob/living/user)
|
||||
/obj/structure/table/start_climb(mob/living/user)
|
||||
. = ..()
|
||||
item_placed(user)
|
||||
|
||||
/obj/structure/table/attack_hand(mob/living/user)
|
||||
..()
|
||||
if(climber)
|
||||
climber.Weaken(4 SECONDS)
|
||||
climber.visible_message("<span class='warning'>[climber.name] has been knocked off the table", "You've been knocked off the table", "You hear [climber.name] get knocked off the table</span>")
|
||||
if(length(climbers))
|
||||
for(var/mob/living/climber as anything in climbers)
|
||||
climber.Weaken(4 SECONDS)
|
||||
climber.visible_message("<span class='warning'>[climber.name] has been knocked off the table", "You've been knocked off the table", "You hear [climber.name] get knocked off the table</span>")
|
||||
else if(Adjacent(user) && user.pulling && user.pulling.pass_flags & PASSTABLE)
|
||||
user.Move_Pulled(src)
|
||||
if(user.pulling.loc == loc)
|
||||
|
||||
Reference in New Issue
Block a user