prvents ghosts from leaving / getting tossed out bellies in areas with BLOCK ghosts flag (#16726)

* prevents ghosts from getting instantly removed form a belly or leaving it in no ghost areas

* add belly leave popup

* .

* .
This commit is contained in:
Kashargul
2024-12-18 11:26:29 +01:00
committed by GitHub
parent 13b7954b77
commit f348a108e2
2 changed files with 15 additions and 4 deletions

View File

@@ -207,7 +207,7 @@ Works together with spawning an observer, noted above.
if(!isturf(loc))
return
var/area/A = get_area(src)
if(A.flag_check(AREA_BLOCK_GHOSTS))
if(A.flag_check(AREA_BLOCK_GHOSTS) && !isbelly(loc))
to_chat(src, span_warning("Ghosts can't enter this location."))
return_to_spawn()
@@ -463,7 +463,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
//RS Port #658 Start
var/area/A = get_area(destination)
if(A?.flag_check(AREA_BLOCK_GHOSTS))
if(A?.flag_check(AREA_BLOCK_GHOSTS) && !isbelly(destination))
to_chat(src,span_warning("Sorry, that area does not allow ghosts."))
if(following)
stop_following()

View File

@@ -341,10 +341,21 @@
/mob/proc/SelfMove(turf/n, direct, movetime)
return Move(n, direct, movetime)
/client
var/is_leaving_belly = FALSE
///Process_Incorpmove
///Called by client/Move()
///Allows mobs to run though walls
/client/proc/Process_Incorpmove(direct)
if(isbelly(mob.loc) && isobserver(mob))
if(is_leaving_belly)
return
is_leaving_belly = TRUE
if(tgui_alert(mob, "Do you want to leave your predator's belly?", "Leave belly?", list("Yes", "No")) != "Yes")
is_leaving_belly = FALSE
return
is_leaving_belly = FALSE
var/turf/mobloc = get_turf(mob)
switch(mob.incorporeal_move)
@@ -361,10 +372,10 @@
if(isliving(mob) && A.flag_check(AREA_BLOCK_PHASE_SHIFT))
to_chat(mob, span_warning("Something blocks you from entering this location while phased out."))
return
if(isobserver(mob) && A.flag_check(AREA_BLOCK_GHOSTS))
if(isobserver(mob) && A.flag_check(AREA_BLOCK_GHOSTS) && !isbelly(mob.loc))
to_chat(mob, span_warning("Ghosts can't enter this location."))
var/area/our_area = mobloc.loc
if(our_area.flag_check(AREA_BLOCK_GHOSTS))
if(our_area.flag_check(AREA_BLOCK_GHOSTS) && !isbelly(mob.loc))
var/mob/observer/dead/D = mob
D.return_to_spawn()
return