mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-10 10:12:45 +00:00
Teleporter has a cancel button.
Improved the admin player panel. Disposals now work right with things thrown at them. Nuke upgraded to use realtime.
This commit is contained in:
@@ -103,7 +103,7 @@
|
||||
|
||||
// Cow
|
||||
/mob/living/simple_animal/livestock/cow
|
||||
name = "cow"
|
||||
name = "\improper Cow"
|
||||
icon_state = "cow"
|
||||
icon_living = "cow"
|
||||
icon_dead = "cow_d"
|
||||
@@ -137,7 +137,7 @@
|
||||
|
||||
// Chicken
|
||||
/mob/living/simple_animal/livestock/chicken
|
||||
name = "chicken"
|
||||
name = "\improper Chicken"
|
||||
icon_state = "chick"
|
||||
icon_living = "chick"
|
||||
icon_dead = "chick_d"
|
||||
@@ -163,7 +163,7 @@
|
||||
desc = "Tasty!"
|
||||
|
||||
/obj/structure/closet/critter
|
||||
desc = "A critter crate."
|
||||
desc = "\improper Critter crate."
|
||||
name = "Critter Crate"
|
||||
icon = 'storage.dmi'
|
||||
icon_state = "critter"
|
||||
@@ -172,7 +172,7 @@
|
||||
icon_closed = "critter"
|
||||
|
||||
/datum/supply_packs/chicken
|
||||
name = "Chicken crate"
|
||||
name = "\improper Chicken crate"
|
||||
contains = list("/mob/living/simple_animal/livestock/chicken",
|
||||
"/obj/item/weapon/reagent_containers/food/snacks/grown/corn")
|
||||
cost = 10
|
||||
@@ -181,7 +181,7 @@
|
||||
group = "Hydroponics"
|
||||
|
||||
/datum/supply_packs/cow
|
||||
name = "Cow crate"
|
||||
name = "\improper Cow crate"
|
||||
contains = list("/mob/living/simple_animal/livestock/cow",
|
||||
"/obj/item/weapon/reagent_containers/food/snacks/grown/corn")
|
||||
cost = 50
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
/datum/event/power_offline
|
||||
var/list/protected_areas = list(/area/ai_monitored/storage/eva, /area/engine, /area/toxins/xenobiology, /area/turret_protected/ai)
|
||||
|
||||
Announce()
|
||||
for(var/obj/machinery/power/apc/a in world)
|
||||
if(!a.crit && a.z == 1)
|
||||
if(istype(a.area, /area/engine) || istype(a.area, /area/toxins/xenobiology) || istype(a.area, /area/turret_protected/ai))
|
||||
if(a.area in protected_areas)
|
||||
continue
|
||||
a.eventoff = 1
|
||||
a.update()
|
||||
|
||||
@@ -6,7 +6,8 @@
|
||||
density = 1
|
||||
var/deployable = 0.0
|
||||
var/extended = 0.0
|
||||
var/timeleft = 60.0
|
||||
var/timeleft = 1200
|
||||
var/time_actual = 0
|
||||
var/timing = 0.0
|
||||
var/r_code = "ADMIN"
|
||||
var/code = ""
|
||||
@@ -22,8 +23,7 @@
|
||||
|
||||
/obj/machinery/nuclearbomb/process()
|
||||
if (src.timing)
|
||||
src.timeleft--
|
||||
if (src.timeleft <= 0)
|
||||
if((time_actual <= world.timeofday) && ((world.timeofday + (time_actual - world.timeofday)) <= 864000) )
|
||||
explode()
|
||||
for(var/mob/M in viewers(1, src))
|
||||
if ((M.client && M.machine == src))
|
||||
@@ -35,18 +35,23 @@
|
||||
|
||||
/obj/machinery/nuclearbomb/attack_hand(mob/user as mob)
|
||||
if (src.extended)
|
||||
var/time_left = time2text(time_actual-world.timeofday, "mm:ss")
|
||||
if(world.timeofday + (time_actual - world.timeofday) >= 864000)
|
||||
time_left = time2text(time_actual-(864000 - world.timeofday), "mm:ss")
|
||||
if(!timing)
|
||||
time_left = time2text(timeleft, "mm:ss")
|
||||
user.machine = src
|
||||
var/dat = text("<TT><B>Nuclear Fission Explosive</B><BR>\nAuth. Disk: <A href='?src=\ref[];auth=1'>[]</A><HR>", src, (src.auth ? "++++++++++" : "----------"))
|
||||
if (src.auth)
|
||||
if (src.yes_code)
|
||||
dat += text("\n<B>Status</B>: []-[]<BR>\n<B>Timer</B>: []<BR>\n<BR>\nTimer: [] <A href='?src=\ref[];timer=1'>Toggle</A><BR>\nTime: <A href='?src=\ref[];time=-10'>-</A> <A href='?src=\ref[];time=-1'>-</A> [] <A href='?src=\ref[];time=1'>+</A> <A href='?src=\ref[];time=10'>+</A><BR>\n<BR>\nSafety: [] <A href='?src=\ref[];safety=1'>Toggle</A><BR>\nAnchor: [] <A href='?src=\ref[];anchor=1'>Toggle</A><BR>\n", (src.timing ? "Func/Set" : "Functional"), (src.safety ? "Safe" : "Engaged"), src.timeleft, (src.timing ? "On" : "Off"), src, src, src, src.timeleft, src, src, (src.safety ? "On" : "Off"), src, (src.anchored ? "Engaged" : "Off"), src)
|
||||
dat += text("\n<B>Status</B>: []-[]<BR>\n<B>Timer</B>: []<BR>\n<BR>\nTimer: [] <A href='?src=\ref[];timer=1'>Toggle</A><BR>\nTime: <A href='?src=\ref[];time=-60'>-</A><A href='?src=\ref[];time=-10'>-</A><A href='?src=\ref[];time=-1'>-</A> [] <A href='?src=\ref[];time=1'>+</A><A href='?src=\ref[];time=10'>+</A><A href='?src=\ref[];time=60'>+</A><BR>\n<BR>\nSafety: [] <A href='?src=\ref[];safety=1'>Toggle</A><BR>\nAnchor: [] <A href='?src=\ref[];anchor=1'>Toggle</A><BR>\n", (src.timing ? "Func/Set" : "Functional"), (src.safety ? "Safe" : "Engaged"), time_left, (src.timing ? "On" : "Off"), src, src, src, src, time_left, src, src, src, (src.safety ? "On" : "Off"), src, (src.anchored ? "Engaged" : "Off"), src)
|
||||
else
|
||||
dat += text("\n<B>Status</B>: Auth. S2-[]<BR>\n<B>Timer</B>: []<BR>\n<BR>\nTimer: [] Toggle<BR>\nTime: - - [] + +<BR>\n<BR>\n[] Safety: Toggle<BR>\nAnchor: [] Toggle<BR>\n", (src.safety ? "Safe" : "Engaged"), src.timeleft, (src.timing ? "On" : "Off"), src.timeleft, (src.safety ? "On" : "Off"), (src.anchored ? "Engaged" : "Off"))
|
||||
dat += text("\n<B>Status</B>: Auth. S2-[]<BR>\n<B>Timer</B>: []<BR>\n<BR>\nTimer: [] Toggle<BR>\nTime: - - [] + +<BR>\n<BR>\n[] Safety: Toggle<BR>\nAnchor: [] Toggle<BR>\n", (src.safety ? "Safe" : "Engaged"), time_left, (src.timing ? "On" : "Off"), time_left, (src.safety ? "On" : "Off"), (src.anchored ? "Engaged" : "Off"))
|
||||
else
|
||||
if (src.timing)
|
||||
dat += text("\n<B>Status</B>: Set-[]<BR>\n<B>Timer</B>: []<BR>\n<BR>\nTimer: [] Toggle<BR>\nTime: - - [] + +<BR>\n<BR>\nSafety: [] Toggle<BR>\nAnchor: [] Toggle<BR>\n", (src.safety ? "Safe" : "Engaged"), src.timeleft, (src.timing ? "On" : "Off"), src.timeleft, (src.safety ? "On" : "Off"), (src.anchored ? "Engaged" : "Off"))
|
||||
dat += text("\n<B>Status</B>: Set-[]<BR>\n<B>Timer</B>: []<BR>\n<BR>\nTimer: [] Toggle<BR>\nTime: - - [] + +<BR>\n<BR>\nSafety: [] Toggle<BR>\nAnchor: [] Toggle<BR>\n", (src.safety ? "Safe" : "Engaged"), time_left, (src.timing ? "On" : "Off"), time_left, (src.safety ? "On" : "Off"), (src.anchored ? "Engaged" : "Off"))
|
||||
else
|
||||
dat += text("\n<B>Status</B>: Auth. S1-[]<BR>\n<B>Timer</B>: []<BR>\n<BR>\nTimer: [] Toggle<BR>\nTime: - - [] + +<BR>\n<BR>\nSafety: [] Toggle<BR>\nAnchor: [] Toggle<BR>\n", (src.safety ? "Safe" : "Engaged"), src.timeleft, (src.timing ? "On" : "Off"), src.timeleft, (src.safety ? "On" : "Off"), (src.anchored ? "Engaged" : "Off"))
|
||||
dat += text("\n<B>Status</B>: Auth. S1-[]<BR>\n<B>Timer</B>: []<BR>\n<BR>\nTimer: [] Toggle<BR>\nTime: - - [] + +<BR>\n<BR>\nSafety: [] Toggle<BR>\nAnchor: [] Toggle<BR>\n", (src.safety ? "Safe" : "Engaged"), time_left, (src.timing ? "On" : "Off"), time_left, (src.safety ? "On" : "Off"), (src.anchored ? "Engaged" : "Off"))
|
||||
var/message = "AUTH"
|
||||
if (src.auth)
|
||||
message = text("[]", src.code)
|
||||
@@ -111,17 +116,22 @@
|
||||
if (src.yes_code)
|
||||
if (href_list["time"])
|
||||
var/time = text2num(href_list["time"])
|
||||
src.timeleft += time
|
||||
src.timeleft = min(max(round(src.timeleft), 5), 600)
|
||||
timeleft = min(max(time + (timeleft/10), 120), 900) * 10
|
||||
if (href_list["timer"])
|
||||
if (src.timing == -1.0)
|
||||
if (timing == -1.0)
|
||||
return
|
||||
src.timing = !( src.timing )
|
||||
if (src.timing)
|
||||
timing = !( timing )
|
||||
if (timing)
|
||||
time_actual = world.timeofday + timeleft
|
||||
if(time_actual >= 864000)
|
||||
time_actual -= 864000
|
||||
src.icon_state = "nuclearbomb2"
|
||||
if(!src.safety)
|
||||
bomb_set = 1//There can still be issues with this reseting when there are multiple bombs. Not a big deal tho for Nuke/N
|
||||
else
|
||||
timeleft = time_actual - world.timeofday
|
||||
if(timeleft < 0)
|
||||
timeleft += 864000
|
||||
src.icon_state = "nuclearbomb1"
|
||||
bomb_set = 0
|
||||
if (href_list["safety"])
|
||||
@@ -153,6 +163,7 @@
|
||||
/obj/machinery/nuclearbomb/proc/explode()
|
||||
if (src.safety)
|
||||
src.timing = 0
|
||||
timeleft = 0
|
||||
return
|
||||
src.timing = -1.0
|
||||
src.yes_code = 0
|
||||
|
||||
@@ -394,7 +394,7 @@ var
|
||||
var/J = job
|
||||
var/rendered = "[part_a][N][part_b][quotedmsg][part_c]"
|
||||
for (var/mob/R in heard_masked)
|
||||
if(istype(R, /mob/living/silicon/ai))
|
||||
if(istype(R, /mob/living/silicon/ai) && job != "Automated Announcement")
|
||||
R.show_message("[part_a]<a href='byond://?src=\ref[radio];track2=\ref[R];track=\ref[M]'>[N] ([J]) </a>[part_b][quotedmsg][part_c]", 2)
|
||||
else
|
||||
R.show_message(rendered, 2)
|
||||
@@ -405,7 +405,7 @@ var
|
||||
var/rendered = "[part_a][M.real_name][part_b][quotedmsg][part_c]"
|
||||
|
||||
for (var/mob/R in heard_normal)
|
||||
if(istype(R, /mob/living/silicon/ai))
|
||||
if(istype(R, /mob/living/silicon/ai) && job != "Automated Announcement")
|
||||
R.show_message("[part_a]<a href='byond://?src=\ref[radio];track2=\ref[R];track=\ref[M]'>[realname] ([job]) </a>[part_b][quotedmsg][part_c]", 2)
|
||||
else
|
||||
R.show_message(rendered, 2)
|
||||
@@ -419,7 +419,7 @@ var
|
||||
rendered = "[part_a][vname][part_b][M.voice_message][part_c]"
|
||||
|
||||
for (var/mob/R in heard_voice)
|
||||
if(istype(R, /mob/living/silicon/ai))
|
||||
if(istype(R, /mob/living/silicon/ai) && job != "Automated Announcement")
|
||||
R.show_message("[part_a]<a href='byond://?src=\ref[radio];track2=\ref[R];track=\ref[M]'>[vname] ([job]) </a>[part_b][vmessage]][part_c]", 2)
|
||||
else
|
||||
R.show_message(rendered, 2)
|
||||
@@ -435,7 +435,7 @@ var
|
||||
var/rendered = "[part_a][vname][part_b][quotedmsg][part_c]"
|
||||
|
||||
for (var/mob/R in heard_garbled)
|
||||
if(istype(R, /mob/living/silicon/ai))
|
||||
if(istype(R, /mob/living/silicon/ai) && job != "Automated Announcement")
|
||||
R.show_message("[part_a]<a href='byond://?src=\ref[radio];track2=\ref[R];track=\ref[M]'>[vname]</a>[part_b][quotedmsg][part_c]", 2)
|
||||
else
|
||||
R.show_message(rendered, 2)
|
||||
|
||||
@@ -83,10 +83,11 @@
|
||||
areaindex[tmpname] = 1
|
||||
L[tmpname] = I
|
||||
|
||||
var/desc = input("Please select a location to lock in.", "Locking Computer") in L
|
||||
src.locked = L[desc]
|
||||
for(var/mob/O in hearers(src, null))
|
||||
O.show_message("\blue Locked In", 2)
|
||||
var/desc = input("Please select a location to lock in.", "Locking Computer") in L|null
|
||||
if(desc)
|
||||
src.locked = L[desc]
|
||||
for(var/mob/O in hearers(src, null))
|
||||
O.show_message("\blue Locked In", 2)
|
||||
src.add_fingerprint(usr)
|
||||
return
|
||||
|
||||
|
||||
@@ -232,7 +232,7 @@ var/specops_shuttle_timeleft = 0
|
||||
if(specops_shuttle_moving_to_station || specops_shuttle_moving_to_centcom)
|
||||
return 0
|
||||
for(var/obj/machinery/computer/specops_shuttle/S in world)
|
||||
if(world.time <= S.specops_shuttle_timereset)
|
||||
if(world.timeofday <= S.specops_shuttle_timereset)
|
||||
return 0
|
||||
return 1
|
||||
|
||||
@@ -286,10 +286,10 @@ var/specops_shuttle_timeleft = 0
|
||||
|
||||
if (!specops_can_move())
|
||||
usr << "\blue Central Command will not allow the Special Operations shuttle to return yet."
|
||||
if(world.time <= specops_shuttle_timereset)
|
||||
if (((world.time - specops_shuttle_timereset)/10) > 60)
|
||||
usr << "\blue [-((world.time - specops_shuttle_timereset)/10)/60] minutes remain!"
|
||||
usr << "\blue [-(world.time - specops_shuttle_timereset)/10] seconds remain!"
|
||||
if(world.timeofday <= specops_shuttle_timereset)
|
||||
if (((world.timeofday - specops_shuttle_timereset)/10) > 60)
|
||||
usr << "\blue [-((world.timeofday - specops_shuttle_timereset)/10)/60] minutes remain!"
|
||||
usr << "\blue [-(world.timeofday - specops_shuttle_timereset)/10] seconds remain!"
|
||||
return
|
||||
|
||||
usr << "\blue The Special Operations shuttle will arrive at Central Command in [(SPECOPS_MOVETIME/10)] seconds."
|
||||
|
||||
@@ -258,11 +258,16 @@
|
||||
if ((M.client && M.client.holder && (M.client.holder.level >= src.level)))
|
||||
alert("You cannot perform this action. You must be of a higher administrative rank!", null, null, null, null, null)
|
||||
return
|
||||
M << "\red You have been kicked from the server"
|
||||
log_admin("[key_name(usr)] booted [key_name(M)].")
|
||||
message_admins("\blue [key_name_admin(usr)] booted [key_name_admin(M)].", 1)
|
||||
//M.client = null
|
||||
del(M.client)
|
||||
switch(alert("Are you sure?", ,"Yes", "NO, WAIT.. DAMMIT! NOT THAT BUTTON!"))
|
||||
if("Yes")
|
||||
if(ismob(M))
|
||||
M << "\red You have been kicked from the server"
|
||||
log_admin("[key_name(usr)] booted [key_name(M)].")
|
||||
message_admins("\blue [key_name_admin(usr)] booted [key_name_admin(M)].", 1)
|
||||
//M.client = null
|
||||
del(M.client)
|
||||
else
|
||||
src << "Looks like someone already beat you."
|
||||
|
||||
if (href_list["removejobban"])
|
||||
if ((src.rank in list("Game Admin", "Game Master" )))
|
||||
@@ -1759,6 +1764,36 @@
|
||||
C.files.RefreshResearch()
|
||||
|
||||
owner:rnd_check_designs()
|
||||
#define AUTOBANTIME 10
|
||||
if(href_list["warn"])
|
||||
var/mob/M = locate(href_list["warn"])
|
||||
if (ismob(M))
|
||||
var/client/user
|
||||
if(istype(usr, /client))
|
||||
user = usr
|
||||
else if(istype(usr, /mob))
|
||||
user = usr.client
|
||||
|
||||
if(!user.holder)
|
||||
src << "Only administrators may use this command."
|
||||
return
|
||||
if(M.client && M.client.holder && (M.client.holder.level >= user.holder.level))
|
||||
alert("You cannot perform this action. You must be of a higher administrative rank!", null, null, null, null, null)
|
||||
return
|
||||
if(!M.client.warned)
|
||||
M << "\red <B>You have been warned by an administrator. This is the only warning you will recieve.</B>"
|
||||
M.client.warned = 1
|
||||
message_admins("\blue [user.ckey] warned [M.ckey].")
|
||||
else
|
||||
AddBan(M.ckey, M.computer_id, "Autobanning due to previous warn", user.ckey, 1, AUTOBANTIME)
|
||||
M << "\red<BIG><B>You have been autobanned by [user.ckey]. This is what we in the biz like to call a \"second warning\".</B></BIG>"
|
||||
M << "\red This is a temporary ban; it will automatically be removed in [AUTOBANTIME] minutes."
|
||||
log_admin("[user.ckey] warned [M.ckey], resulting in a [AUTOBANTIME] minute autoban.")
|
||||
ban_unban_log_save("[user.ckey] warned [M.ckey], resulting in a [AUTOBANTIME] minute autoban.")
|
||||
message_admins("\blue [user.ckey] warned [M.ckey], resulting in a [AUTOBANTIME] minute autoban.")
|
||||
feedback_inc("ban_warn",1)
|
||||
|
||||
del(M.client)
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////Panels
|
||||
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
for(var/mob/M in mobs)
|
||||
if(M.ckey)
|
||||
var/color = "#e6e6e6"
|
||||
i++
|
||||
if(i%2 == 0)
|
||||
color = "#f2f2f2"
|
||||
var/real = (M.real_name == M.original_name ? M.real_name : "[M.original_name] (as [M.real_name])")
|
||||
@@ -19,26 +20,32 @@
|
||||
dat += "<tr align='center' bgcolor='[color]'><td>[M.name] \[[real]\] <br>[M.client ? M.client : "No client ([client_key])"] at ([T.x], [T.y], [T.z])</td>" // Adds current name
|
||||
if(isobserver(M))
|
||||
dat += "<td>Ghost</td>"
|
||||
if(isalien(M))
|
||||
else if(isalien(M))
|
||||
dat += "<td>Alien</td>"
|
||||
if(islarva(M))
|
||||
else if(islarva(M))
|
||||
dat += "<td>Alien larva</td>"
|
||||
if(ishuman(M))
|
||||
else if(istajaran(M))
|
||||
dat += "<td>Tajaran</td>"
|
||||
else if(ishuman(M))
|
||||
dat += "<td>[M.job]</td>"
|
||||
if(ismetroid(M))
|
||||
else if(ismetroid(M))
|
||||
dat += "<td>Metroid</td>"
|
||||
if(ismonkey(M))
|
||||
else if(ismonkey(M))
|
||||
dat += "<td>Monkey</td>"
|
||||
if(isAI(M))
|
||||
else if(isAI(M))
|
||||
dat += "<td>AI</td>"
|
||||
if(ispAI(M))
|
||||
else if(ispAI(M))
|
||||
dat += "<td>pAI</td>"
|
||||
if(isrobot(M))
|
||||
else if(isrobot(M))
|
||||
dat += "<td>Cyborg</td>"
|
||||
if(isanimal(M))
|
||||
else if(isanimal(M))
|
||||
dat += "<td>Animal</td>"
|
||||
if(iscorgi(M))
|
||||
else if(iscorgi(M))
|
||||
dat += "<td>Corgi</td>"
|
||||
else if(istype(M,/mob/new_player))
|
||||
dat += "<td>New Player</td>"
|
||||
else
|
||||
dat += "<td>ERROR</td>"
|
||||
|
||||
if(M.mind && M.mind.assigned_role && istype(M, /mob/living/carbon/human)) // Adds a column to Player Panel that shows their current job.
|
||||
var/mob/living/carbon/human/H = M
|
||||
@@ -81,13 +88,14 @@
|
||||
"}
|
||||
|
||||
dat += {"<td><A HREF='?src=\ref[src];player_info=[M.ckey]'>[player_has_info(M.ckey) ? "Info" : "N/A"] </A></td>
|
||||
<td><A href='?src=\ref[src];boot2=\ref[M]'>Boot</A> | <A href='?src=\ref[src];newban=\ref[M]'>Ban</A> | <A href='?src=\ref[src];jobban2=\ref[M]'>Jobban</A>
|
||||
<br><font size="2.5">[muting]</font><br>
|
||||
<font size="2"><A HREF='?src=\ref[src];adminplayeropts=\ref[M]'>PP</A> |
|
||||
<td><A href='?src=\ref[usr];priv_msg=\ref[M]'><b>PM</b></A> |
|
||||
<A HREF='?src=\ref[src];adminplayeropts=\ref[M]'>PP</A> |
|
||||
<A HREF='?src=\ref[src];adminplayervars=\ref[M]'>VV</A> |
|
||||
<A HREF='?src=\ref[src];adminplayersubtlemessage=\ref[M]'>SM</A> |
|
||||
<A HREF='?src=\ref[src];adminplayerobservejump=\ref[M]'>JMP</A> |
|
||||
<A HREF='?src=\ref[src];secretsadmin=check_antagonist'>CA</A></font></td>
|
||||
<A HREF='?src=\ref[src];secretsadmin=check_antagonist'>CA</A></font>
|
||||
<br><font size="2">[muting]</font><br>
|
||||
<font size="2"><A href='?src=\ref[src];warn=\ref[M]'>Warn</A> | <A href='?src=\ref[src];boot2=\ref[M]'>Boot</A> | <A href='?src=\ref[src];newban=\ref[M]'>Ban</A> | <A href='?src=\ref[src];jobban2=\ref[M]'>Jobban</A></td>
|
||||
"}
|
||||
|
||||
switch(is_special_character(M))
|
||||
@@ -100,7 +108,7 @@
|
||||
|
||||
dat += "</table></body></html>"
|
||||
|
||||
usr << browse(dat, "window=players;size=905x480")
|
||||
usr << browse(dat, "window=players;size=905x600")
|
||||
|
||||
//The old one
|
||||
/obj/admins/proc/player_panel_old()
|
||||
|
||||
@@ -439,8 +439,10 @@
|
||||
del(H)
|
||||
|
||||
CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
|
||||
if (istype(mover,/obj/item) && !istype(mover,/obj/item/weapon/dummy))
|
||||
if (istype(mover,/obj/item))
|
||||
var/obj/item/I = mover
|
||||
if(!mover.throwing)
|
||||
return ..()
|
||||
if(prob(75))
|
||||
I.loc = src
|
||||
for(var/mob/M in viewers(src))
|
||||
@@ -450,7 +452,7 @@
|
||||
M.show_message("\the [I] bounces off of \the [src]'s rim!", 3)
|
||||
return 0
|
||||
else
|
||||
return ..(mover, target, height, air_group)
|
||||
return ..()
|
||||
|
||||
//The toilet does not need to pressurized but can only handle small items.
|
||||
//You can also choke people by dunking them into the toilet.
|
||||
|
||||
Reference in New Issue
Block a user