mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-11 02:34:00 +00:00
[MIRROR] cleans up some logging (#9855)
Co-authored-by: Cameron Lennox <killer65311@gmail.com> Co-authored-by: Kashargul <144968721+Kashargul@users.noreply.github.com>
This commit is contained in:
committed by
GitHub
parent
a1e163731d
commit
c1cd7dc3f0
@@ -535,7 +535,7 @@
|
|||||||
//Make an announcement and log the person entering storage.
|
//Make an announcement and log the person entering storage.
|
||||||
control_computer.frozen_crew += "[to_despawn.real_name], [to_despawn.mind.role_alt_title] - [stationtime2text()]"
|
control_computer.frozen_crew += "[to_despawn.real_name], [to_despawn.mind.role_alt_title] - [stationtime2text()]"
|
||||||
control_computer._admin_logs += "[key_name(to_despawn)] ([to_despawn.mind.role_alt_title]) at [stationtime2text()]"
|
control_computer._admin_logs += "[key_name(to_despawn)] ([to_despawn.mind.role_alt_title]) at [stationtime2text()]"
|
||||||
log_and_message_admins("[key_name(to_despawn)] ([to_despawn.mind.role_alt_title]) entered cryostorage.")
|
log_and_message_admins("([to_despawn.mind.role_alt_title]) entered cryostorage.", to_despawn)
|
||||||
|
|
||||||
//VOREStation Edit Start
|
//VOREStation Edit Start
|
||||||
var/depart_announce = TRUE
|
var/depart_announce = TRUE
|
||||||
|
|||||||
@@ -256,7 +256,7 @@ var/global/list/tele_landmarks = list() // Terrible, but the alternative is loop
|
|||||||
/obj/effect/step_trigger/death/Trigger(var/atom/movable/A)
|
/obj/effect/step_trigger/death/Trigger(var/atom/movable/A)
|
||||||
if(isliving(A))
|
if(isliving(A))
|
||||||
to_chat(A, span_danger("[deathmessage]"))
|
to_chat(A, span_danger("[deathmessage]"))
|
||||||
log_and_message_admins("[A] [deathalert]")
|
log_and_message_admins("[deathalert]", A)
|
||||||
qdel(A)
|
qdel(A)
|
||||||
|
|
||||||
/obj/effect/step_trigger/death/train_lost
|
/obj/effect/step_trigger/death/train_lost
|
||||||
|
|||||||
@@ -54,7 +54,7 @@
|
|||||||
user.visible_message(span_warning("[user] pushes the device up their forehead and [M]'s head, the device beginning to let out a series of light beeps!"),span_notice("You begin swap minds with [M]!"))
|
user.visible_message(span_warning("[user] pushes the device up their forehead and [M]'s head, the device beginning to let out a series of light beeps!"),span_notice("You begin swap minds with [M]!"))
|
||||||
if(do_after(user,35 SECONDS,M))
|
if(do_after(user,35 SECONDS,M))
|
||||||
if(user.mind && M.mind && M.stat != DEAD && user.stat != DEAD)
|
if(user.mind && M.mind && M.stat != DEAD && user.stat != DEAD)
|
||||||
log_and_message_admins("[user.ckey] used a Bodysnatcher to swap bodies with [M.ckey]")
|
log_and_message_admins("[user.ckey] used a Bodysnatcher to swap bodies with [M.ckey]", user)
|
||||||
to_chat(user,span_notice("Your minds have been swapped! Have a nice day."))
|
to_chat(user,span_notice("Your minds have been swapped! Have a nice day."))
|
||||||
var/datum/mind/user_mind = user.mind
|
var/datum/mind/user_mind = user.mind
|
||||||
var/datum/mind/prey_mind = M.mind
|
var/datum/mind/prey_mind = M.mind
|
||||||
|
|||||||
@@ -62,7 +62,7 @@
|
|||||||
|
|
||||||
/// Inject a ghost into this mob. Assumes you've done all sanity before this point.
|
/// Inject a ghost into this mob. Assumes you've done all sanity before this point.
|
||||||
/mob/living/simple_mob/proc/ghost_join(mob/observer/dead/D)
|
/mob/living/simple_mob/proc/ghost_join(mob/observer/dead/D)
|
||||||
log_and_message_admins("[key_name_admin(D)] joined [src] as a ghost [ADMIN_FLW(src)]")
|
log_and_message_admins("joined [src] as a ghost [ADMIN_FLW(src)]", D)
|
||||||
active_ghost_pods -= src
|
active_ghost_pods -= src
|
||||||
|
|
||||||
// Move the ghost in
|
// Move the ghost in
|
||||||
@@ -163,7 +163,7 @@
|
|||||||
target.ghostjoin_icon()
|
target.ghostjoin_icon()
|
||||||
last_used = world.time
|
last_used = world.time
|
||||||
charges--
|
charges--
|
||||||
log_and_message_admins("[key_name_admin(user)] used a denecrotizer to tame/offer a simplemob to ghosts: [target]. [ADMIN_FLW(src)]")
|
log_and_message_admins("used a denecrotizer to tame/offer a simplemob to ghosts: [target]. [ADMIN_FLW(src)]", user)
|
||||||
target.visible_message("[target]'s eyes widen, as though in revelation as it looks at [user].", runemessage = "eyes widen")
|
target.visible_message("[target]'s eyes widen, as though in revelation as it looks at [user].", runemessage = "eyes widen")
|
||||||
if(charges == 0)
|
if(charges == 0)
|
||||||
icon_state = "[initial(icon_state)]-o"
|
icon_state = "[initial(icon_state)]-o"
|
||||||
@@ -185,7 +185,7 @@
|
|||||||
target.see_invisible = initial(target.see_invisible)
|
target.see_invisible = initial(target.see_invisible)
|
||||||
target.update_icon()
|
target.update_icon()
|
||||||
visible_message("[target] lifts its head and looks at [user].", runemessage = "lifts its head and looks at [user]")
|
visible_message("[target] lifts its head and looks at [user].", runemessage = "lifts its head and looks at [user]")
|
||||||
log_and_message_admins("[key_name_admin(user)] used a denecrotizer to revive a simple mob: [target]. [ADMIN_FLW(src)]")
|
log_and_message_admins("used a denecrotizer to revive a simple mob: [target]. [ADMIN_FLW(src)]", user)
|
||||||
if(!target.mind) //if it doesn't have a mind then no one has been playing as it, and it is safe to offer to ghosts.
|
if(!target.mind) //if it doesn't have a mind then no one has been playing as it, and it is safe to offer to ghosts.
|
||||||
target.ghostjoin = 1
|
target.ghostjoin = 1
|
||||||
active_ghost_pods |= target
|
active_ghost_pods |= target
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
if(!shuttle_tag)
|
if(!shuttle_tag)
|
||||||
shuttle_tag = auto_detect_shuttle(M) // We don't have a preset tag, so lets try to auto-link.
|
shuttle_tag = auto_detect_shuttle(M) // We don't have a preset tag, so lets try to auto-link.
|
||||||
if(shuttle_tag && M.set_shuttle_tag(shuttle_tag))
|
if(shuttle_tag && M.set_shuttle_tag(shuttle_tag))
|
||||||
log_and_message_admins("[key_name_admin(usr)] built a [M] for [shuttle_tag] at [ADMIN_COORDJMP(M)]")
|
log_and_message_admins("built a [M] for [shuttle_tag] at [ADMIN_COORDJMP(M)]", usr)
|
||||||
M.ping("[M] auto-links with shuttle [shuttle_tag]")
|
M.ping("[M] auto-links with shuttle [shuttle_tag]")
|
||||||
|
|
||||||
// Return shuttle_tag of shuttle of current area
|
// Return shuttle_tag of shuttle of current area
|
||||||
|
|||||||
@@ -196,7 +196,7 @@
|
|||||||
createStealthKey()
|
createStealthKey()
|
||||||
if(isnewplayer(mob))
|
if(isnewplayer(mob))
|
||||||
mob.name = new_key
|
mob.name = new_key
|
||||||
log_and_message_admins("[key_name(usr)] has turned stealth mode [holder.fakekey ? "ON" : "OFF"]")
|
log_and_message_admins("has turned stealth mode [holder.fakekey ? "ON" : "OFF"]", usr)
|
||||||
feedback_add_details("admin_verb","SM") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
feedback_add_details("admin_verb","SM") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||||
|
|
||||||
#define MAX_WARNS 3
|
#define MAX_WARNS 3
|
||||||
|
|||||||
@@ -46,7 +46,7 @@
|
|||||||
if(!check_rights_for(ui.user.client, R_SPAWN))
|
if(!check_rights_for(ui.user.client, R_SPAWN))
|
||||||
return
|
return
|
||||||
|
|
||||||
log_and_message_admins("[key_name(user)] used player effect: [action] on [target.ckey] playing [target.name]")
|
log_and_message_admins("used player effect: [action] on [target.ckey] playing [target.name]", user)
|
||||||
|
|
||||||
switch(action)
|
switch(action)
|
||||||
|
|
||||||
@@ -714,7 +714,7 @@
|
|||||||
new chosen_NIF(Tar)
|
new chosen_NIF(Tar)
|
||||||
else
|
else
|
||||||
new /obj/item/nif(Tar)
|
new /obj/item/nif(Tar)
|
||||||
log_and_message_admins("[key_name(user)] Quick NIF'd [Tar.real_name] with a [input_NIF].")
|
log_and_message_admins("Quick NIF'd [Tar.real_name] with a [input_NIF].", user)
|
||||||
|
|
||||||
if("resize")
|
if("resize")
|
||||||
user.client.resize(target)
|
user.client.resize(target)
|
||||||
@@ -814,7 +814,7 @@
|
|||||||
var/reply = tgui_input_text(target, "An admin has sent you a message: [message]", "Reply")
|
var/reply = tgui_input_text(target, "An admin has sent you a message: [message]", "Reply")
|
||||||
if(!reply)
|
if(!reply)
|
||||||
return
|
return
|
||||||
log_and_message_admins("[key_name(target)] replied to [user]'s message: [reply].")
|
log_and_message_admins("replied to [user]'s message: [reply].", target)
|
||||||
|
|
||||||
if("stop-orbits")
|
if("stop-orbits")
|
||||||
//CHOMPEdit Start
|
//CHOMPEdit Start
|
||||||
|
|||||||
@@ -1600,7 +1600,7 @@
|
|||||||
usr.on_mob_jump()
|
usr.on_mob_jump()
|
||||||
usr.forceMove(T)
|
usr.forceMove(T)
|
||||||
feedback_add_details("admin_verb","JM") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
feedback_add_details("admin_verb","JM") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||||
log_and_message_admins("[key_name_admin(usr)] jumped to [key_name_admin(M)]")
|
log_and_message_admins("jumped to [key_name_admin(M)]", usr)
|
||||||
else
|
else
|
||||||
to_chat(usr, span_filter_adminlog("This mob is not located in the game world."))
|
to_chat(usr, span_filter_adminlog("This mob is not located in the game world."))
|
||||||
|
|
||||||
|
|||||||
@@ -47,5 +47,5 @@
|
|||||||
else
|
else
|
||||||
new /obj/item/nif(H)
|
new /obj/item/nif(H)
|
||||||
|
|
||||||
log_and_message_admins("[key_name(src)] Quick NIF'd [H.real_name] with a [input_NIF].")
|
log_and_message_admins("Quick NIF'd [H.real_name] with a [input_NIF].", src)
|
||||||
feedback_add_details("admin_verb","QNIF") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
feedback_add_details("admin_verb","QNIF") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||||
|
|||||||
@@ -88,7 +88,7 @@ Eventkit verb to be used to spawn the obj/effect/landmarks defined under code\ga
|
|||||||
for(var/obj/effect/landmark/event_trigger/ET in others_list)
|
for(var/obj/effect/landmark/event_trigger/ET in others_list)
|
||||||
ET.delete_me = TRUE
|
ET.delete_me = TRUE
|
||||||
qdel(ET)
|
qdel(ET)
|
||||||
log_and_message_admins("[src.ckey] deleted all of [other_ckey]'s event triggers while [other_ckey] was active")
|
log_and_message_admins("[src.ckey] deleted all of [other_ckey]'s event triggers while [other_ckey] was active", src)
|
||||||
return
|
return
|
||||||
var/confirm = tgui_alert(src, "ARE YOU SURE? THERE IS NO GOING BACK", "CONFIRM", list("Go Back", "Delete all my event triggers"), autofocus = FALSE)
|
var/confirm = tgui_alert(src, "ARE YOU SURE? THERE IS NO GOING BACK", "CONFIRM", list("Go Back", "Delete all my event triggers"), autofocus = FALSE)
|
||||||
if(!confirm || confirm == "Go Back")
|
if(!confirm || confirm == "Go Back")
|
||||||
@@ -96,7 +96,7 @@ Eventkit verb to be used to spawn the obj/effect/landmarks defined under code\ga
|
|||||||
for(var/obj/effect/landmark/event_trigger/ET in others_list)
|
for(var/obj/effect/landmark/event_trigger/ET in others_list)
|
||||||
ET.delete_me = TRUE
|
ET.delete_me = TRUE
|
||||||
qdel(ET)
|
qdel(ET)
|
||||||
log_and_message_admins("[src.ckey] deleted all of [other_ckey]'s event triggers. [other_ckey] was either inactive or disconnected at this time.")
|
log_and_message_admins("[src.ckey] deleted all of [other_ckey]'s event triggers. [other_ckey] was either inactive or disconnected at this time.", src)
|
||||||
else if(istype(choice, /obj/effect/landmark/event_trigger))
|
else if(istype(choice, /obj/effect/landmark/event_trigger))
|
||||||
var/obj/effect/landmark/event_trigger/ET = choice
|
var/obj/effect/landmark/event_trigger/ET = choice
|
||||||
var/decision = tgui_alert(src, "Teleport to Landmark or Delete it?", "Manage [ET]", list("Teleport", "Delete"), autofocus = FALSE)
|
var/decision = tgui_alert(src, "Teleport to Landmark or Delete it?", "Manage [ET]", list("Teleport", "Delete"), autofocus = FALSE)
|
||||||
@@ -118,11 +118,11 @@ Eventkit verb to be used to spawn the obj/effect/landmarks defined under code\ga
|
|||||||
Only proceed if you are absolutely certain.", "Force Delete", list("Confirm", "Cancel")) == "Confirm")
|
Only proceed if you are absolutely certain.", "Force Delete", list("Confirm", "Cancel")) == "Confirm")
|
||||||
ET.delete_me = TRUE
|
ET.delete_me = TRUE
|
||||||
qdel(ET)
|
qdel(ET)
|
||||||
log_and_message_admins("[src.ckey] tried to delete event trigger [ET.name] while [other_ckey] is active.")
|
log_and_message_admins("[src.ckey] tried to delete event trigger [ET.name] while [other_ckey] is active.", src)
|
||||||
return
|
return
|
||||||
var/confirm = tgui_alert(src, "ARE YOU SURE? THERE IS NO GOING BACK FROM DELETING [ET.name]", "CONFIRM", list("Go Back", "Delete it!"), autofocus = FALSE)
|
var/confirm = tgui_alert(src, "ARE YOU SURE? THERE IS NO GOING BACK FROM DELETING [ET.name]", "CONFIRM", list("Go Back", "Delete it!"), autofocus = FALSE)
|
||||||
if(!confirm || confirm == "Go Back")
|
if(!confirm || confirm == "Go Back")
|
||||||
return
|
return
|
||||||
ET.delete_me = TRUE
|
ET.delete_me = TRUE
|
||||||
qdel(ET)
|
qdel(ET)
|
||||||
log_and_message_admins("[src.ckey] tried to deleted event trigger [ET.name], [other_ckey] is either disconnected or inactive.")
|
log_and_message_admins("[src.ckey] tried to deleted event trigger [ET.name], [other_ckey] is either disconnected or inactive.", src)
|
||||||
|
|||||||
@@ -13,8 +13,8 @@
|
|||||||
var/fake_lightning = result == "Yes (Cosmetic)"
|
var/fake_lightning = result == "Yes (Cosmetic)"
|
||||||
|
|
||||||
lightning_strike(get_turf(usr), fake_lightning)
|
lightning_strike(get_turf(usr), fake_lightning)
|
||||||
log_and_message_admins("[key_name(src)] has caused [fake_lightning ? "cosmetic":"harmful"] lightning to strike at their position ([src.mob.x], [src.mob.y], [src.mob.z]). \
|
log_and_message_admins("has caused [fake_lightning ? "cosmetic":"harmful"] lightning to strike at their position ([src.mob.x], [src.mob.y], [src.mob.z]). \
|
||||||
(<A href='byond://?_src_=holder;[HrefToken()];adminplayerobservecoodjump=1;X=[src.mob.x];Y=[src.mob.y];Z=[src.mob.z]'>JMP</a>)")
|
(<A href='byond://?_src_=holder;[HrefToken()];adminplayerobservecoodjump=1;X=[src.mob.x];Y=[src.mob.y];Z=[src.mob.z]'>JMP</a>)", src)
|
||||||
|
|
||||||
#define LIGHTNING_REDIRECT_RANGE 28 // How far in tiles certain things draw lightning from.
|
#define LIGHTNING_REDIRECT_RANGE 28 // How far in tiles certain things draw lightning from.
|
||||||
#define LIGHTNING_ZAP_RANGE 1 // How far the tesla effect zaps, as well as the bad effects from a direct strike.
|
#define LIGHTNING_ZAP_RANGE 1 // How far the tesla effect zaps, as well as the bad effects from a direct strike.
|
||||||
|
|||||||
@@ -62,7 +62,7 @@
|
|||||||
to_chat(usr, span_danger("[target] was recently reset, you must wait until module selection has been completed before continuing modifying."))
|
to_chat(usr, span_danger("[target] was recently reset, you must wait until module selection has been completed before continuing modifying."))
|
||||||
continue
|
continue
|
||||||
|
|
||||||
log_and_message_admins("[key_name(src)] has used MODIFYROBOT ([modification_choice]) on [key_name(target)].")
|
log_and_message_admins("has used MODIFYROBOT ([modification_choice]) on [key_name(target)].", usr)
|
||||||
feedback_add_details("admin_verb","MODIFYROBOT") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
feedback_add_details("admin_verb","MODIFYROBOT") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||||
|
|
||||||
switch(modification_choice)
|
switch(modification_choice)
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
|
|
||||||
CONFIG_SET(flag/panic_bunker, !CONFIG_GET(flag/panic_bunker))
|
CONFIG_SET(flag/panic_bunker, !CONFIG_GET(flag/panic_bunker))
|
||||||
|
|
||||||
log_and_message_admins("[key_name(usr)] has toggled the Panic Bunker, it is now [(CONFIG_GET(flag/panic_bunker) ? "on":"off")].")
|
log_and_message_admins("has toggled the Panic Bunker, it is now [(CONFIG_GET(flag/panic_bunker) ? "on":"off")].", src)
|
||||||
if (CONFIG_GET(flag/panic_bunker) && (!SSdbcore.IsConnected())) //CHOMPEdit TGSQL
|
if (CONFIG_GET(flag/panic_bunker) && (!SSdbcore.IsConnected())) //CHOMPEdit TGSQL
|
||||||
message_admins("The database is not connected! Panic bunker will not work until the connection is reestablished.")
|
message_admins("The database is not connected! Panic bunker will not work until the connection is reestablished.")
|
||||||
feedback_add_details("admin_verb","PANIC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
feedback_add_details("admin_verb","PANIC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||||
@@ -25,7 +25,7 @@
|
|||||||
|
|
||||||
CONFIG_SET(flag/paranoia_logging, !CONFIG_GET(flag/paranoia_logging))
|
CONFIG_SET(flag/paranoia_logging, !CONFIG_GET(flag/paranoia_logging))
|
||||||
|
|
||||||
log_and_message_admins("[key_name(usr)] has toggled Paranoia Logging, it is now [(CONFIG_GET(flag/paranoia_logging) ? "on":"off")].")
|
log_and_message_admins("has toggled Paranoia Logging, it is now [(CONFIG_GET(flag/paranoia_logging) ? "on":"off")].", src)
|
||||||
if (CONFIG_GET(flag/paranoia_logging) && (!SSdbcore.IsConnected())) //CHOMPEdit TGSQL
|
if (CONFIG_GET(flag/paranoia_logging) && (!SSdbcore.IsConnected())) //CHOMPEdit TGSQL
|
||||||
message_admins("The database is not connected! Paranoia logging will not be able to give 'player age' (time since first connection) warnings, only Byond account warnings.")
|
message_admins("The database is not connected! Paranoia logging will not be able to give 'player age' (time since first connection) warnings, only Byond account warnings.")
|
||||||
feedback_add_details("admin_verb","PARLOG") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
feedback_add_details("admin_verb","PARLOG") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||||
@@ -39,7 +39,7 @@
|
|||||||
|
|
||||||
CONFIG_SET(flag/ip_reputation, !CONFIG_GET(flag/ip_reputation))
|
CONFIG_SET(flag/ip_reputation, !CONFIG_GET(flag/ip_reputation))
|
||||||
|
|
||||||
log_and_message_admins("[key_name(usr)] has toggled IP reputation checks, it is now [(CONFIG_GET(flag/ip_reputation) ? "on":"off")].")
|
log_and_message_admins("has toggled IP reputation checks, it is now [(CONFIG_GET(flag/ip_reputation) ? "on":"off")].", src)
|
||||||
if (CONFIG_GET(flag/ip_reputation) && (!SSdbcore.IsConnected())) //CHOMPEdit TGSQL
|
if (CONFIG_GET(flag/ip_reputation) && (!SSdbcore.IsConnected())) //CHOMPEdit TGSQL
|
||||||
message_admins("The database is not connected! IP reputation logging will not be able to allow existing players to bypass the reputation checks (if that is enabled).")
|
message_admins("The database is not connected! IP reputation logging will not be able to allow existing players to bypass the reputation checks (if that is enabled).")
|
||||||
feedback_add_details("admin_verb","IPREP") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
feedback_add_details("admin_verb","IPREP") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||||
|
|||||||
@@ -1071,7 +1071,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
|||||||
human_cryopods[listname] = CP
|
human_cryopods[listname] = CP
|
||||||
|
|
||||||
//Gotta log this up here before they get ghostized and lose their key or anything.
|
//Gotta log this up here before they get ghostized and lose their key or anything.
|
||||||
log_and_message_admins("[key_name(src)] admin cryo'd [key_name(M)].")
|
log_and_message_admins("admin cryo'd [key_name(M)].", src)
|
||||||
feedback_add_details("admin_verb","ACRYO") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
feedback_add_details("admin_verb","ACRYO") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||||
|
|
||||||
if(ishuman(M))
|
if(ishuman(M))
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
if(!smite_choice)
|
if(!smite_choice)
|
||||||
return
|
return
|
||||||
|
|
||||||
log_and_message_admins("[key_name(src)] has used SMITE ([smite_choice]) on [key_name(target)].")
|
log_and_message_admins("has used SMITE ([smite_choice]) on [key_name(target)].", src)
|
||||||
feedback_add_details("admin_verb","SMITE") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
feedback_add_details("admin_verb","SMITE") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||||
|
|
||||||
switch(smite_choice)
|
switch(smite_choice)
|
||||||
@@ -214,7 +214,7 @@
|
|||||||
return
|
return
|
||||||
|
|
||||||
to_chat(target,"You've been hit by bluespace artillery!")
|
to_chat(target,"You've been hit by bluespace artillery!")
|
||||||
log_and_message_admins("[key_name(target)] has been hit by Bluespace Artillery fired by [key_name(user ? user : usr)]")
|
log_and_message_admins("has been hit by Bluespace Artillery fired by [key_name(user ? user : usr)]", target)
|
||||||
|
|
||||||
target.setMoveCooldown(2 SECONDS)
|
target.setMoveCooldown(2 SECONDS)
|
||||||
|
|
||||||
|
|||||||
@@ -104,14 +104,14 @@
|
|||||||
var/datum/db_query/query = SSdbcore.NewQuery("UPDATE erro_player SET discord_id = :t_discord_id WHERE ckey = :t_ckey", list("t_discord_id" = sql_discord, "t_ckey" = sql_ckey)) //CHOMPEdit TGSQL
|
var/datum/db_query/query = SSdbcore.NewQuery("UPDATE erro_player SET discord_id = :t_discord_id WHERE ckey = :t_ckey", list("t_discord_id" = sql_discord, "t_ckey" = sql_ckey)) //CHOMPEdit TGSQL
|
||||||
if(query.Execute())
|
if(query.Execute())
|
||||||
to_chat(src, span_notice("Registration complete! Thank you for taking the time to register your Discord ID."))
|
to_chat(src, span_notice("Registration complete! Thank you for taking the time to register your Discord ID."))
|
||||||
log_and_message_admins("[ckey] has registered their Discord ID. Their Discord snowflake ID is: [their_id]") //YW EDIT
|
log_and_message_admins("[ckey] has registered their Discord ID. Their Discord snowflake ID is: [their_id]", src) //YW EDIT
|
||||||
admin_chat_message(message = "[ckey] has registered their Discord ID. Their Discord is: <@[their_id]>", color = "#4eff22") //YW EDIT
|
admin_chat_message(message = "[ckey] has registered their Discord ID. Their Discord is: <@[their_id]>", color = "#4eff22") //YW EDIT
|
||||||
notes_add(ckey, "Discord ID: [their_id]")
|
notes_add(ckey, "Discord ID: [their_id]")
|
||||||
world.VgsAddMemberRole(their_id)
|
world.VgsAddMemberRole(their_id)
|
||||||
qdel(query) //CHOMPEdit TGSQL
|
qdel(query) //CHOMPEdit TGSQL
|
||||||
else
|
else
|
||||||
to_chat(src, span_warning("There was an error registering your Discord ID in the database. Contact an administrator."))
|
to_chat(src, span_warning("There was an error registering your Discord ID in the database. Contact an administrator."))
|
||||||
log_and_message_admins("[ckey] failed to register their Discord ID. Their Discord snowflake ID is: [their_id]. Is the database connected?")
|
log_and_message_admins("[ckey] failed to register their Discord ID. Their Discord snowflake ID is: [their_id]. Is the database connected?", src)
|
||||||
qdel(query) //CHOMPEdit TGSQL
|
qdel(query) //CHOMPEdit TGSQL
|
||||||
return
|
return
|
||||||
//VOREStation Add End
|
//VOREStation Add End
|
||||||
@@ -450,7 +450,7 @@
|
|||||||
|
|
||||||
//Log it
|
//Log it
|
||||||
if(CONFIG_GET(flag/paranoia_logging)) //We don't block, but we want paranoia log messages
|
if(CONFIG_GET(flag/paranoia_logging)) //We don't block, but we want paranoia log messages
|
||||||
log_and_message_admins("[key] at [address] has bad IP reputation: [ip_reputation]. Will be kicked if enabled in config.")
|
log_and_message_admins("[key] at [address] has bad IP reputation: [ip_reputation]. Will be kicked if enabled in config.", null)
|
||||||
else //We just log it
|
else //We just log it
|
||||||
log_admin("[key] at [address] has bad IP reputation: [ip_reputation]. Will be kicked if enabled in config.")
|
log_admin("[key] at [address] has bad IP reputation: [ip_reputation]. Will be kicked if enabled in config.")
|
||||||
|
|
||||||
|
|||||||
@@ -258,7 +258,7 @@
|
|||||||
dir = dt.dir
|
dir = dt.dir
|
||||||
log_admin("[src] has been placed at [loc], [x],[y],[z]")
|
log_admin("[src] has been placed at [loc], [x],[y],[z]")
|
||||||
else
|
else
|
||||||
log_and_message_admins("[src] tried to move itself but its target pick list was empty, so it was not moved. (<A href='byond://?_src_=holder;[HrefToken()];adminplayerobservecoodjump=1;X=[x];Y=[y];Z=[z]'>JMP</a>)")
|
log_and_message_admins("[src] tried to move itself but its target pick list was empty, so it was not moved. (<A href='byond://?_src_=holder;[HrefToken()];adminplayerobservecoodjump=1;X=[x];Y=[y];Z=[z]'>JMP</a>)", null)
|
||||||
|
|
||||||
/obj/move_trader_landmark //You need to place the trader somewhere in the world and enable the 'move_trader' var. When the trader initializes, it will make a list of these landmarks and then move itself.
|
/obj/move_trader_landmark //You need to place the trader somewhere in the world and enable the 'move_trader' var. When the trader initializes, it will make a list of these landmarks and then move itself.
|
||||||
name = "trader mover"
|
name = "trader mover"
|
||||||
|
|||||||
@@ -95,7 +95,7 @@ GLOBAL_LIST_EMPTY(unique_deployable)
|
|||||||
|
|
||||||
playsound(src, 'sound/effects/phasein.ogg', 100, 1)
|
playsound(src, 'sound/effects/phasein.ogg', 100, 1)
|
||||||
|
|
||||||
log_and_message_admins("[key_name_admin(usr)] activated a bluespace capsule at [get_area(T)]!")
|
log_and_message_admins("activated a bluespace capsule at [get_area(T)]!", usr)
|
||||||
if(above_location)
|
if(above_location)
|
||||||
template.add_roof(above_location)
|
template.add_roof(above_location)
|
||||||
template.annihilate_plants(deploy_location)
|
template.annihilate_plants(deploy_location)
|
||||||
|
|||||||
@@ -196,23 +196,23 @@
|
|||||||
qdel(src)
|
qdel(src)
|
||||||
|
|
||||||
/mob/living/simple_mob/slime/xenobio/dark_purple/ex_act(severity)
|
/mob/living/simple_mob/slime/xenobio/dark_purple/ex_act(severity)
|
||||||
log_and_message_admins("[src] ignited due to a chain reaction with an explosion.")
|
log_and_message_admins("ignited due to a chain reaction with an explosion.", src)
|
||||||
ignite()
|
ignite()
|
||||||
|
|
||||||
/mob/living/simple_mob/slime/xenobio/dark_purple/fire_act(datum/gas_mixture/air, temperature, volume)
|
/mob/living/simple_mob/slime/xenobio/dark_purple/fire_act(datum/gas_mixture/air, temperature, volume)
|
||||||
log_and_message_admins("[src] ignited due to exposure to fire.")
|
log_and_message_admins("ignited due to exposure to fire.", src)
|
||||||
ignite()
|
ignite()
|
||||||
|
|
||||||
/mob/living/simple_mob/slime/xenobio/dark_purple/bullet_act(var/obj/item/projectile/P, var/def_zone)
|
/mob/living/simple_mob/slime/xenobio/dark_purple/bullet_act(var/obj/item/projectile/P, var/def_zone)
|
||||||
if(P.damage_type && P.damage_type == BURN && P.damage) // Most bullets won't trigger the explosion, as a mercy towards Security.
|
if(P.damage_type && P.damage_type == BURN && P.damage) // Most bullets won't trigger the explosion, as a mercy towards Security.
|
||||||
log_and_message_admins("[src] ignited due to bring hit by a burning projectile[P.firer ? " by [key_name(P.firer)]" : ""].")
|
log_and_message_admins("ignited due to bring hit by a burning projectile[P.firer ? " by [key_name(P.firer)]" : ""].", src)
|
||||||
ignite()
|
ignite()
|
||||||
else
|
else
|
||||||
..()
|
..()
|
||||||
|
|
||||||
/mob/living/simple_mob/slime/xenobio/dark_purple/attackby(var/obj/item/W, var/mob/user)
|
/mob/living/simple_mob/slime/xenobio/dark_purple/attackby(var/obj/item/W, var/mob/user)
|
||||||
if(istype(W) && W.force && W.damtype == BURN)
|
if(istype(W) && W.force && W.damtype == BURN)
|
||||||
log_and_message_admins("[src] ignited due to being hit with a burning weapon ([W]) by [key_name(user)].")
|
log_and_message_admins("ignited due to being hit with a burning weapon ([W]) by [key_name(user)].", src)
|
||||||
ignite()
|
ignite()
|
||||||
else
|
else
|
||||||
..()
|
..()
|
||||||
@@ -656,29 +656,29 @@
|
|||||||
say(pick("Sacrifice...!", "Sssss...", "Boom...!"))
|
say(pick("Sacrifice...!", "Sssss...", "Boom...!"))
|
||||||
set_AI_busy(TRUE)
|
set_AI_busy(TRUE)
|
||||||
sleep(2 SECONDS)
|
sleep(2 SECONDS)
|
||||||
log_and_message_admins("[src] has suicide-bombed themselves while trying to kill \the [L].")
|
log_and_message_admins("has suicide-bombed themselves while trying to kill \the [L].", src)
|
||||||
explode()
|
explode()
|
||||||
|
|
||||||
return ..()
|
return ..()
|
||||||
|
|
||||||
/mob/living/simple_mob/slime/xenobio/oil/ex_act(severity)
|
/mob/living/simple_mob/slime/xenobio/oil/ex_act(severity)
|
||||||
log_and_message_admins("[src] exploded due to a chain reaction with another explosion.")
|
log_and_message_admins("exploded due to a chain reaction with another explosion.", src)
|
||||||
explode()
|
explode()
|
||||||
|
|
||||||
/mob/living/simple_mob/slime/xenobio/oil/fire_act(datum/gas_mixture/air, temperature, volume)
|
/mob/living/simple_mob/slime/xenobio/oil/fire_act(datum/gas_mixture/air, temperature, volume)
|
||||||
log_and_message_admins("[src] exploded due to exposure to fire.")
|
log_and_message_admins("exploded due to exposure to fire.", src)
|
||||||
explode()
|
explode()
|
||||||
|
|
||||||
/mob/living/simple_mob/slime/xenobio/oil/bullet_act(obj/item/projectile/P, def_zone)
|
/mob/living/simple_mob/slime/xenobio/oil/bullet_act(obj/item/projectile/P, def_zone)
|
||||||
if(P.damage_type && P.damage_type == BURN && P.damage) // Most bullets won't trigger the explosion, as a mercy towards Security.
|
if(P.damage_type && P.damage_type == BURN && P.damage) // Most bullets won't trigger the explosion, as a mercy towards Security.
|
||||||
log_and_message_admins("[src] exploded due to bring hit by a burning projectile[P.firer ? " by [key_name(P.firer)]" : ""].")
|
log_and_message_admins("exploded due to bring hit by a burning projectile[P.firer ? " by [key_name(P.firer)]" : ""].", src)
|
||||||
explode()
|
explode()
|
||||||
else
|
else
|
||||||
..()
|
..()
|
||||||
|
|
||||||
/mob/living/simple_mob/slime/xenobio/oil/attackby(obj/item/W, mob/living/user)
|
/mob/living/simple_mob/slime/xenobio/oil/attackby(obj/item/W, mob/living/user)
|
||||||
if(istype(W) && W.force && W.damtype == BURN)
|
if(istype(W) && W.force && W.damtype == BURN)
|
||||||
log_and_message_admins("[src] exploded due to being hit with a burning weapon ([W]) by [key_name(user)].")
|
log_and_message_admins("exploded due to being hit with a burning weapon ([W]) by [key_name(user)].", src)
|
||||||
explode()
|
explode()
|
||||||
else
|
else
|
||||||
..()
|
..()
|
||||||
|
|||||||
@@ -166,7 +166,7 @@
|
|||||||
pred_body.ooc_notes_maybes = pred_ooc_maybes
|
pred_body.ooc_notes_maybes = pred_ooc_maybes
|
||||||
pred_body.ooc_notes_style = pred_ooc_style
|
pred_body.ooc_notes_style = pred_ooc_style
|
||||||
//CHOMPEdit End
|
//CHOMPEdit End
|
||||||
log_and_message_admins("[pred_body] is now controlled by [pred_body.ckey]. They were restored to control through prey domination, and had been controlled by [prey_ckey].")
|
log_and_message_admins("is now controlled by [pred_body.ckey]. They were restored to control through prey domination, and had been controlled by [prey_ckey].", pred_body)
|
||||||
pred_body.absorb_langs()
|
pred_body.absorb_langs()
|
||||||
pred_body.prey_controlled = FALSE
|
pred_body.prey_controlled = FALSE
|
||||||
qdel(src)
|
qdel(src)
|
||||||
@@ -318,7 +318,7 @@
|
|||||||
pred_brain.real_name = pred.real_name
|
pred_brain.real_name = pred.real_name
|
||||||
pred.ckey = pred_brain.prey_ckey
|
pred.ckey = pred_brain.prey_ckey
|
||||||
pred.prey_controlled = TRUE
|
pred.prey_controlled = TRUE
|
||||||
log_and_message_admins("[pred] is now controlled by [pred.ckey], they were taken over via prey domination, and were originally controlled by [pred_brain.pred_ckey].")
|
log_and_message_admins("is now controlled by [pred.ckey], they were taken over via prey domination, and were originally controlled by [pred_brain.pred_ckey].", pred)
|
||||||
if(delete_source)
|
if(delete_source)
|
||||||
qdel(prey)
|
qdel(prey)
|
||||||
|
|
||||||
@@ -602,6 +602,6 @@
|
|||||||
pred_brain.real_name = pred.real_name
|
pred_brain.real_name = pred.real_name
|
||||||
pred.ckey = pred_brain.prey_ckey
|
pred.ckey = pred_brain.prey_ckey
|
||||||
pred.prey_controlled = TRUE
|
pred.prey_controlled = TRUE
|
||||||
log_and_message_admins("[pred] is now controlled by [pred.ckey], they were taken over via pred submission, and were originally controlled by [pred_brain.pred_ckey].")
|
log_and_message_admins("is now controlled by [pred.ckey], they were taken over via pred submission, and were originally controlled by [pred_brain.pred_ckey].", pred)
|
||||||
if(delete_source)
|
if(delete_source)
|
||||||
qdel(prey)
|
qdel(prey)
|
||||||
|
|||||||
@@ -295,7 +295,7 @@
|
|||||||
L.pulledby.stop_pulling()
|
L.pulledby.stop_pulling()
|
||||||
stop_pulling()
|
stop_pulling()
|
||||||
original_ckey = ckey
|
original_ckey = ckey
|
||||||
log_and_message_admins("[key_name_admin(src)] has swapped bodies with [key_name_admin(L)] as a morph at [get_area(src)] - [COORD(src)].")
|
log_and_message_admins("has swapped bodies with [key_name_admin(L)] as a morph at [get_area(src)] - [COORD(src)].", src)
|
||||||
new /mob/living/simple_mob/vore/morph/dominated_prey(L.vore_selected, L.ckey, src, L)
|
new /mob/living/simple_mob/vore/morph/dominated_prey(L.vore_selected, L.ckey, src, L)
|
||||||
else
|
else
|
||||||
to_chat(src, span_warning("\The [L] declined your request for control."))
|
to_chat(src, span_warning("\The [L] declined your request for control."))
|
||||||
@@ -362,13 +362,13 @@
|
|||||||
parent_morph.forceMove(get_turf(src))
|
parent_morph.forceMove(get_turf(src))
|
||||||
parent_morph.ckey = parent_morph.original_ckey
|
parent_morph.ckey = parent_morph.original_ckey
|
||||||
prey_body.ckey = prey_ckey
|
prey_body.ckey = prey_ckey
|
||||||
log_and_message_admins("[key_name_admin(prey_body)] used the OOC escape button to get out of [key_name_admin(parent_morph)]. They have been returned to their original bodies. [ADMIN_FLW(src)]")
|
log_and_message_admins("used the OOC escape button to get out of [key_name_admin(parent_morph)]. They have been returned to their original bodies. [ADMIN_FLW(src)]", prey_body)
|
||||||
else
|
else
|
||||||
parent_morph.forceMove(get_turf(prey_body))
|
parent_morph.forceMove(get_turf(prey_body))
|
||||||
parent_morph.ckey = parent_morph.original_ckey
|
parent_morph.ckey = parent_morph.original_ckey
|
||||||
prey_body.ckey = prey_ckey
|
prey_body.ckey = prey_ckey
|
||||||
prey_body.forceMove(parent_morph.vore_selected)
|
prey_body.forceMove(parent_morph.vore_selected)
|
||||||
log_and_message_admins("[key_name_admin(prey_body)] and [key_name_admin(parent_morph)] have been returned to their original bodies. [get_area(src)] - [COORD(src)].")
|
log_and_message_admins("and [key_name_admin(parent_morph)] have been returned to their original bodies. [get_area(src)] - [COORD(src)].", prey_body)
|
||||||
qdel(src)
|
qdel(src)
|
||||||
|
|
||||||
#undef MORPH_COOLDOWN
|
#undef MORPH_COOLDOWN
|
||||||
|
|||||||
@@ -58,7 +58,7 @@
|
|||||||
user.visible_message(span_notice("[user] smashes [src] on [comp]"),
|
user.visible_message(span_notice("[user] smashes [src] on [comp]"),
|
||||||
span_info("You smash [src] on [comp], christening a new landable ship named [S.name]"),
|
span_info("You smash [src] on [comp], christening a new landable ship named [S.name]"),
|
||||||
span_notice("You hear glass shattering"))
|
span_notice("You hear glass shattering"))
|
||||||
log_and_message_admins("[key_name_admin(user)] Created a new shuttle [S.name]. [ADMIN_JMP(comp_turf)]")
|
log_and_message_admins("Created a new shuttle [S.name]. [ADMIN_JMP(comp_turf)]", user)
|
||||||
spawn(1 SECOND)
|
spawn(1 SECOND)
|
||||||
playsound(comp_turf, 'sound/voice/Serithi/Shuttlehere.ogg', 75, 0)
|
playsound(comp_turf, 'sound/voice/Serithi/Shuttlehere.ogg', 75, 0)
|
||||||
qdel(src)
|
qdel(src)
|
||||||
|
|||||||
@@ -188,7 +188,7 @@
|
|||||||
/obj/machinery/power/rtg/abductor/bullet_act(obj/item/projectile/Proj)
|
/obj/machinery/power/rtg/abductor/bullet_act(obj/item/projectile/Proj)
|
||||||
. = ..()
|
. = ..()
|
||||||
if(!going_kaboom && istype(Proj) && !Proj.nodamage && ((Proj.damage_type == BURN) || (Proj.damage_type == BRUTE)))
|
if(!going_kaboom && istype(Proj) && !Proj.nodamage && ((Proj.damage_type == BURN) || (Proj.damage_type == BRUTE)))
|
||||||
log_and_message_admins("[ADMIN_LOOKUPFLW(Proj.firer)] triggered an Abductor Core explosion at [x],[y],[z] via projectile.")
|
log_and_message_admins("[ADMIN_LOOKUPFLW(Proj.firer)] triggered an Abductor Core explosion at [x],[y],[z] via projectile.", Proj.firer)
|
||||||
asplod()
|
asplod()
|
||||||
|
|
||||||
/obj/machinery/power/rtg/abductor/attack_hand(var/mob/living/user)
|
/obj/machinery/power/rtg/abductor/attack_hand(var/mob/living/user)
|
||||||
@@ -308,7 +308,7 @@
|
|||||||
/obj/machinery/power/rtg/kugelblitz/bullet_act(obj/item/projectile/Proj)
|
/obj/machinery/power/rtg/kugelblitz/bullet_act(obj/item/projectile/Proj)
|
||||||
. = ..()
|
. = ..()
|
||||||
if(istype(Proj) && !Proj.nodamage && ((Proj.damage_type == BURN) || (Proj.damage_type == BRUTE)) && Proj.damage >= 20)
|
if(istype(Proj) && !Proj.nodamage && ((Proj.damage_type == BURN) || (Proj.damage_type == BRUTE)) && Proj.damage >= 20)
|
||||||
log_and_message_admins("[ADMIN_LOOKUPFLW(Proj.firer)] triggered a kugelblitz core explosion at [x],[y],[z] via projectile.")
|
log_and_message_admins("[ADMIN_LOOKUPFLW(Proj.firer)] triggered a kugelblitz core explosion at [x],[y],[z] via projectile.", Proj.firer)
|
||||||
asplod()
|
asplod()
|
||||||
|
|
||||||
/obj/machinery/power/rtg/reg
|
/obj/machinery/power/rtg/reg
|
||||||
|
|||||||
@@ -739,7 +739,7 @@
|
|||||||
|
|
||||||
in_chamber.on_hit(M)
|
in_chamber.on_hit(M)
|
||||||
if(in_chamber.damage_type != HALLOSS && !in_chamber.nodamage)
|
if(in_chamber.damage_type != HALLOSS && !in_chamber.nodamage)
|
||||||
log_and_message_admins("[key_name(user)] commited suicide using \a [src]")
|
log_and_message_admins("commited suicide using \a [src]", user)
|
||||||
user.apply_damage(in_chamber.damage*2.5, in_chamber.damage_type, "head", used_weapon = "Point blank shot in the mouth with \a [in_chamber]", sharp = TRUE)
|
user.apply_damage(in_chamber.damage*2.5, in_chamber.damage_type, "head", used_weapon = "Point blank shot in the mouth with \a [in_chamber]", sharp = TRUE)
|
||||||
user.death()
|
user.death()
|
||||||
else if(in_chamber.damage_type == HALLOSS)
|
else if(in_chamber.damage_type == HALLOSS)
|
||||||
|
|||||||
@@ -432,7 +432,7 @@
|
|||||||
infect_chance = 0
|
infect_chance = 0
|
||||||
infect_chance += (targets.len-1)*10 //Extra 10% per extra target
|
infect_chance += (targets.len-1)*10 //Extra 10% per extra target
|
||||||
if(prob(infect_chance))
|
if(prob(infect_chance))
|
||||||
log_and_message_admins("[loc] infected [target]'s [eo.name] with \the [src].")
|
log_and_message_admins("[loc] infected [target]'s [eo.name] with \the [src].", usr)
|
||||||
infect_limb(eo)
|
infect_limb(eo)
|
||||||
|
|
||||||
//75% chance to spread a virus if we have one
|
//75% chance to spread a virus if we have one
|
||||||
|
|||||||
@@ -546,7 +546,7 @@
|
|||||||
if(prob(75))
|
if(prob(75))
|
||||||
AM.forceMove(src)
|
AM.forceMove(src)
|
||||||
if(istype(AM, /obj/item/holder/micro) || istype(AM, /mob/living))
|
if(istype(AM, /obj/item/holder/micro) || istype(AM, /mob/living))
|
||||||
log_and_message_admins("[AM] was thrown into \the [src]")
|
log_and_message_admins("[AM] was thrown into \the [src]", null)
|
||||||
visible_message("\The [AM] lands in \the [src]!")
|
visible_message("\The [AM] lands in \the [src]!")
|
||||||
//flush() //Away they go! //Uncomment this for proper autoflush. Compromising with autopull to avoid possible disposal dunking abuse
|
//flush() //Away they go! //Uncomment this for proper autoflush. Compromising with autopull to avoid possible disposal dunking abuse
|
||||||
//flush = 1 //1984. No autoflush, no autopull. Leaving this here incase someone wants to revisit this in the future when the mood on this changes
|
//flush = 1 //1984. No autoflush, no autopull. Leaving this here incase someone wants to revisit this in the future when the mood on this changes
|
||||||
@@ -569,7 +569,7 @@
|
|||||||
if(prob(75))
|
if(prob(75))
|
||||||
I.forceMove(src)
|
I.forceMove(src)
|
||||||
if(istype(I, /obj/item/holder/micro))
|
if(istype(I, /obj/item/holder/micro))
|
||||||
log_and_message_admins("[I.name] was thrown into \the [src]")
|
log_and_message_admins("[I.name] was thrown into \the [src]", null)
|
||||||
for(var/mob/M in viewers(src))
|
for(var/mob/M in viewers(src))
|
||||||
M.show_message("\The [I] lands in \the [src].", 3)
|
M.show_message("\The [I] lands in \the [src].", 3)
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -266,14 +266,14 @@ GLOBAL_DATUM_INIT(iconCache, /savefile, new("data/iconCache.sav")) //Cache of ic
|
|||||||
return
|
return
|
||||||
|
|
||||||
if(cid && !isnum(cid) && !(cid == ""))
|
if(cid && !isnum(cid) && !(cid == ""))
|
||||||
log_and_message_admins("[key_name(owner)] - bancheck with invalid cid! ([cid])")
|
log_and_message_admins("- bancheck with invalid cid! ([cid])", owner)
|
||||||
|
|
||||||
if(ip && !findtext(ip, new/regex(@"^((25[0-5]|(2[0-4]|1\d|[1-9]|)\d)\.?\b){4}$")) && !(ip == ""))
|
if(ip && !findtext(ip, new/regex(@"^((25[0-5]|(2[0-4]|1\d|[1-9]|)\d)\.?\b){4}$")) && !(ip == ""))
|
||||||
log_and_message_admins("[key_name(owner)] - bancheck with invalid ip! ([ip])")
|
log_and_message_admins("- bancheck with invalid ip! ([ip])", owner)
|
||||||
|
|
||||||
var/list/ban = world.IsBanned(key = ckey, address = ip, computer_id = cid)
|
var/list/ban = world.IsBanned(key = ckey, address = ip, computer_id = cid)
|
||||||
if(ban)
|
if(ban)
|
||||||
log_and_message_admins("[key_name(owner)] has a cookie from a banned account! (Cookie: [ckey], [ip], [cid])")
|
log_and_message_admins("has a cookie from a banned account! (Cookie: [ckey], [ip], [cid])", owner)
|
||||||
|
|
||||||
//Converts an icon to base64. Operates by putting the icon in the iconCache savefile,
|
//Converts an icon to base64. Operates by putting the icon in the iconCache savefile,
|
||||||
// exporting it as text, and then parsing the base64 from that.
|
// exporting it as text, and then parsing the base64 from that.
|
||||||
|
|||||||
@@ -124,7 +124,7 @@
|
|||||||
///// If user clicked on themselves
|
///// If user clicked on themselves
|
||||||
if(src == G.assailant && is_vore_predator(src))
|
if(src == G.assailant && is_vore_predator(src))
|
||||||
if(istype(victim) && !victim.client && !victim.ai_holder)
|
if(istype(victim) && !victim.client && !victim.ai_holder)
|
||||||
log_and_message_admins("[key_name_admin(src)] attempted to eat [key_name_admin(G.affecting)] whilst they were AFK ([G.affecting ? ADMIN_JMP(G.affecting) : "null"])")
|
log_and_message_admins("attempted to eat [key_name_admin(G.affecting)] whilst they were AFK ([G.affecting ? ADMIN_JMP(G.affecting) : "null"])", src)
|
||||||
if(feed_grabbed_to_self(src, G.affecting))
|
if(feed_grabbed_to_self(src, G.affecting))
|
||||||
qdel(G)
|
qdel(G)
|
||||||
return TRUE
|
return TRUE
|
||||||
@@ -134,10 +134,10 @@
|
|||||||
///// If user clicked on their grabbed target
|
///// If user clicked on their grabbed target
|
||||||
else if((src == G.affecting) && (attacker.a_intent == I_GRAB) && (attacker.zone_sel.selecting == BP_TORSO) && (is_vore_predator(G.affecting)))
|
else if((src == G.affecting) && (attacker.a_intent == I_GRAB) && (attacker.zone_sel.selecting == BP_TORSO) && (is_vore_predator(G.affecting)))
|
||||||
if(istype(victim) && !victim.client && !victim.ai_holder) //Check whether the victim is: A carbon mob, has no client, but has a ckey. This should indicate an SSD player.
|
if(istype(victim) && !victim.client && !victim.ai_holder) //Check whether the victim is: A carbon mob, has no client, but has a ckey. This should indicate an SSD player.
|
||||||
log_and_message_admins("[key_name_admin(attacker)] attempted to force feed themselves to [key_name_admin(G.affecting)] whilst they were AFK ([G.affecting ? ADMIN_JMP(G.affecting) : "null"])")
|
log_and_message_admins("attempted to force feed themselves to [key_name_admin(G.affecting)] whilst they were AFK ([G.affecting ? ADMIN_JMP(G.affecting) : "null"])", attacker)
|
||||||
if(!G.affecting.feeding)
|
if(!G.affecting.feeding)
|
||||||
to_chat(user, span_vnotice("[G.affecting] isn't willing to be fed."))
|
to_chat(user, span_vnotice("[G.affecting] isn't willing to be fed."))
|
||||||
log_and_message_admins("[key_name_admin(src)] attempted to feed themselves to [key_name_admin(G.affecting)] against their prefs ([G.affecting ? ADMIN_JMP(G.affecting) : "null"])")
|
log_and_message_admins("attempted to feed themselves to [key_name_admin(G.affecting)] against their prefs ([G.affecting ? ADMIN_JMP(G.affecting) : "null"])", src)
|
||||||
return FALSE
|
return FALSE
|
||||||
|
|
||||||
if(attacker.feed_self_to_grabbed(attacker, G.affecting))
|
if(attacker.feed_self_to_grabbed(attacker, G.affecting))
|
||||||
@@ -149,18 +149,18 @@
|
|||||||
///// If user clicked on anyone else but their grabbed target
|
///// If user clicked on anyone else but their grabbed target
|
||||||
else if((src != G.affecting) && (src != G.assailant) && (is_vore_predator(src)))
|
else if((src != G.affecting) && (src != G.assailant) && (is_vore_predator(src)))
|
||||||
if(istype(victim) && !victim.client && !victim.ai_holder)
|
if(istype(victim) && !victim.client && !victim.ai_holder)
|
||||||
log_and_message_admins("[key_name_admin(attacker)] attempted to feed [key_name_admin(G.affecting)] to [key_name_admin(src)] whilst [key_name_admin(G.affecting)] was AFK ([G.affecting ? ADMIN_JMP(G.affecting) : "null"])")
|
log_and_message_admins("attempted to feed [key_name_admin(G.affecting)] to [key_name_admin(src)] whilst [key_name_admin(G.affecting)] was AFK ([G.affecting ? ADMIN_JMP(G.affecting) : "null"])", attacker)
|
||||||
var/mob/living/carbon/victim_fed = src
|
var/mob/living/carbon/victim_fed = src
|
||||||
if(istype(victim_fed) && !victim_fed.client && !victim_fed.ai_holder)
|
if(istype(victim_fed) && !victim_fed.client && !victim_fed.ai_holder)
|
||||||
log_and_message_admins("[key_name_admin(attacker)] attempted to feed [key_name_admin(G.affecting)] to [key_name_admin(src)] whilst [key_name_admin(src)] was AFK ([G.affecting ? ADMIN_JMP(G.affecting) : "null"])")
|
log_and_message_admins("attempted to feed [key_name_admin(G.affecting)] to [key_name_admin(src)] whilst [key_name_admin(src)] was AFK ([G.affecting ? ADMIN_JMP(G.affecting) : "null"])", attacker)
|
||||||
|
|
||||||
if(!feeding)
|
if(!feeding)
|
||||||
to_chat(user, span_vnotice("[src] isn't willing to be fed."))
|
to_chat(user, span_vnotice("[src] isn't willing to be fed."))
|
||||||
log_and_message_admins("[key_name_admin(attacker)] attempted to feed [key_name_admin(G.affecting)] to [key_name_admin(src)] against predator's prefs ([src ? ADMIN_JMP(src) : "null"])")
|
log_and_message_admins("attempted to feed [key_name_admin(G.affecting)] to [key_name_admin(src)] against predator's prefs ([src ? ADMIN_JMP(src) : "null"])", attacker)
|
||||||
return FALSE
|
return FALSE
|
||||||
if(!(G.affecting.devourable))
|
if(!(G.affecting.devourable))
|
||||||
to_chat(user, span_vnotice("[G.affecting] isn't able to be devoured."))
|
to_chat(user, span_vnotice("[G.affecting] isn't able to be devoured."))
|
||||||
log_and_message_admins("[key_name_admin(attacker)] attempted to feed [key_name_admin(G.affecting)] to [key_name_admin(src)] against prey's prefs ([G.affecting ? ADMIN_JMP(G.affecting) : "null"])")
|
log_and_message_admins("attempted to feed [key_name_admin(G.affecting)] to [key_name_admin(src)] against prey's prefs ([G.affecting ? ADMIN_JMP(G.affecting) : "null"])", attacker)
|
||||||
return FALSE
|
return FALSE
|
||||||
if(attacker.feed_grabbed_to_other(attacker, G.affecting, src))
|
if(attacker.feed_grabbed_to_other(attacker, G.affecting, src))
|
||||||
qdel(G)
|
qdel(G)
|
||||||
@@ -626,7 +626,7 @@
|
|||||||
SetSleeping(0) //Wake up instantly if asleep
|
SetSleeping(0) //Wake up instantly if asleep
|
||||||
for(var/mob/living/simple_mob/SA in range(10))
|
for(var/mob/living/simple_mob/SA in range(10))
|
||||||
LAZYSET(SA.prey_excludes, src, world.time)
|
LAZYSET(SA.prey_excludes, src, world.time)
|
||||||
log_and_message_admins("[key_name(src)] used the OOC escape button to get out of [key_name(B.owner)] ([B.owner ? "<a href='byond://?_src_=holder;[HrefToken()];adminplayerobservecoodjump=1;X=[B.owner.x];Y=[B.owner.y];Z=[B.owner.z]'>JMP</a>" : "null"])")
|
log_and_message_admins("used the OOC escape button to get out of [key_name(B.owner)] ([B.owner ? "<a href='byond://?_src_=holder;[HrefToken()];adminplayerobservecoodjump=1;X=[B.owner.x];Y=[B.owner.y];Z=[B.owner.z]'>JMP</a>" : "null"])", src)
|
||||||
|
|
||||||
B.owner.update_fullness() //CHOMPEdit - This is run whenever a belly's contents are changed.
|
B.owner.update_fullness() //CHOMPEdit - This is run whenever a belly's contents are changed.
|
||||||
if(!ishuman(B.owner))
|
if(!ishuman(B.owner))
|
||||||
@@ -641,14 +641,14 @@
|
|||||||
if(confirm != "Okay" || loc != belly)
|
if(confirm != "Okay" || loc != belly)
|
||||||
return
|
return
|
||||||
//Actual escaping
|
//Actual escaping
|
||||||
log_and_message_admins("[key_name(src)] used the OOC escape button to get out of [key_name(pred)] (BORG) ([pred ? "<a href='byond://?_src_=holder;[HrefToken()];adminplayerobservecoodjump=1;X=[pred.x];Y=[pred.y];Z=[pred.z]'>JMP</a>" : "null"])")
|
log_and_message_admins("used the OOC escape button to get out of [key_name(pred)] (BORG) ([pred ? "<a href='byond://?_src_=holder;[HrefToken()];adminplayerobservecoodjump=1;X=[pred.x];Y=[pred.y];Z=[pred.z]'>JMP</a>" : "null"])", src)
|
||||||
belly.go_out(src) //Just force-ejects from the borg as if they'd clicked the eject button.
|
belly.go_out(src) //Just force-ejects from the borg as if they'd clicked the eject button.
|
||||||
|
|
||||||
//You're in an AI hologram!
|
//You're in an AI hologram!
|
||||||
else if(istype(loc, /obj/effect/overlay/aiholo))
|
else if(istype(loc, /obj/effect/overlay/aiholo))
|
||||||
var/obj/effect/overlay/aiholo/holo = loc
|
var/obj/effect/overlay/aiholo/holo = loc
|
||||||
holo.drop_prey() //Easiest way
|
holo.drop_prey() //Easiest way
|
||||||
log_and_message_admins("[key_name(src)] used the OOC escape button to get out of [key_name(holo.master)] (AI HOLO) ([holo ? "<a href='byond://?_src_=holder;[HrefToken()];adminplayerobservecoodjump=1;X=[holo.x];Y=[holo.y];Z=[holo.z]'>JMP</a>" : "null"])")
|
log_and_message_admins("used the OOC escape button to get out of [key_name(holo.master)] (AI HOLO) ([holo ? "<a href='byond://?_src_=holder;[HrefToken()];adminplayerobservecoodjump=1;X=[holo.x];Y=[holo.y];Z=[holo.z]'>JMP</a>" : "null"])", src)
|
||||||
|
|
||||||
//You're in a capture crystal! ((It's not vore but close enough!))
|
//You're in a capture crystal! ((It's not vore but close enough!))
|
||||||
else if(iscapturecrystal(loc))
|
else if(iscapturecrystal(loc))
|
||||||
@@ -657,7 +657,7 @@
|
|||||||
crystal.bound_mob = null
|
crystal.bound_mob = null
|
||||||
crystal.bound_mob = capture_crystal = 0
|
crystal.bound_mob = capture_crystal = 0
|
||||||
clear_fullscreen(ATOM_BELLY_FULLSCREEN) // CHOMPedit
|
clear_fullscreen(ATOM_BELLY_FULLSCREEN) // CHOMPedit
|
||||||
log_and_message_admins("[key_name(src)] used the OOC escape button to get out of [crystal] owned by [crystal.owner]. [ADMIN_FLW(src)]")
|
log_and_message_admins("used the OOC escape button to get out of [crystal] owned by [crystal.owner]. [ADMIN_FLW(src)]", src)
|
||||||
|
|
||||||
//You've been turned into an item!
|
//You've been turned into an item!
|
||||||
else if(tf_mob_holder && isvoice(src) && istype(src.loc, /obj/item))
|
else if(tf_mob_holder && isvoice(src) && istype(src.loc, /obj/item))
|
||||||
@@ -680,28 +680,28 @@
|
|||||||
//CHOMPEdit End
|
//CHOMPEdit End
|
||||||
if(istype(src.loc, /obj/item/clothing)) //Are they in clothes? Delete the item then revert them.
|
if(istype(src.loc, /obj/item/clothing)) //Are they in clothes? Delete the item then revert them.
|
||||||
qdel(item_to_destroy)
|
qdel(item_to_destroy)
|
||||||
log_and_message_admins("[key_name(src)] used the OOC escape button to revert back to their original form from being TFed into an object.")
|
log_and_message_admins("used the OOC escape button to revert back to their original form from being TFed into an object.", src)
|
||||||
revert_mob_tf()
|
revert_mob_tf()
|
||||||
else //Are they in any other type of object? If qdel is done first, the mob is deleted from the world.
|
else //Are they in any other type of object? If qdel is done first, the mob is deleted from the world.
|
||||||
forceMove(get_turf(src))
|
forceMove(get_turf(src))
|
||||||
qdel(item_to_destroy)
|
qdel(item_to_destroy)
|
||||||
log_and_message_admins("[key_name(src)] used the OOC escape button to revert back to their original form from being TFed into an object.")
|
log_and_message_admins("used the OOC escape button to revert back to their original form from being TFed into an object.", src)
|
||||||
revert_mob_tf()
|
revert_mob_tf()
|
||||||
|
|
||||||
//You've been turned into a mob!
|
//You've been turned into a mob!
|
||||||
else if(tf_mob_holder)
|
else if(tf_mob_holder)
|
||||||
log_and_message_admins("[key_name(src)] used the OOC escape button to revert back to their original form from being TFed into another mob.")
|
log_and_message_admins("used the OOC escape button to revert back to their original form from being TFed into another mob.", src)
|
||||||
revert_mob_tf()
|
revert_mob_tf()
|
||||||
|
|
||||||
else if(istype(loc, /obj/item/holder/micro) && (istype(loc.loc, /obj/machinery/microwave)))
|
else if(istype(loc, /obj/item/holder/micro) && (istype(loc.loc, /obj/machinery/microwave)))
|
||||||
forceMove(get_turf(src))
|
forceMove(get_turf(src))
|
||||||
log_and_message_admins("[key_name(src)] used the OOC escape button to get out of a microwave.")
|
log_and_message_admins("used the OOC escape button to get out of a microwave.", src)
|
||||||
|
|
||||||
else if(istype(loc, /obj/structure/gargoyle) && loc:was_rayed)
|
else if(istype(loc, /obj/structure/gargoyle) && loc:was_rayed)
|
||||||
var/obj/structure/gargoyle/G = loc
|
var/obj/structure/gargoyle/G = loc
|
||||||
G.can_revert = TRUE
|
G.can_revert = TRUE
|
||||||
qdel(G)
|
qdel(G)
|
||||||
log_and_message_admins("[key_name(src)] used the OOC escape button to revert back from being petrified.")
|
log_and_message_admins("used the OOC escape button to revert back from being petrified.", src)
|
||||||
|
|
||||||
//CHOMPEdit - In-shoe OOC escape. Checking voices as precaution if something akin to obj TF or possession happens
|
//CHOMPEdit - In-shoe OOC escape. Checking voices as precaution if something akin to obj TF or possession happens
|
||||||
else if(!istype(src, /mob/living/voice) && istype(src.loc, /obj/item/clothing/shoes))
|
else if(!istype(src, /mob/living/voice) && istype(src.loc, /obj/item/clothing/shoes))
|
||||||
@@ -715,13 +715,13 @@
|
|||||||
if(F.food_inserted_micros)
|
if(F.food_inserted_micros)
|
||||||
F.food_inserted_micros -= src
|
F.food_inserted_micros -= src
|
||||||
src.forceMove(get_turf(F))
|
src.forceMove(get_turf(F))
|
||||||
log_and_message_admins("[key_name(src)] used the OOC escape button to get out of a food item.")
|
log_and_message_admins("used the OOC escape button to get out of a food item.", src)
|
||||||
|
|
||||||
else if(src.alerts["leashed"])
|
else if(src.alerts["leashed"])
|
||||||
var/obj/screen/alert/leash_pet/pet_alert = src.alerts["leashed"]
|
var/obj/screen/alert/leash_pet/pet_alert = src.alerts["leashed"]
|
||||||
var/obj/item/leash/owner = pet_alert.master
|
var/obj/item/leash/owner = pet_alert.master
|
||||||
owner.clear_leash()
|
owner.clear_leash()
|
||||||
log_and_message_admins("[key_name(src)] used the OOC escape button to get out of a leash.")
|
log_and_message_admins("used the OOC escape button to get out of a leash.", src)
|
||||||
|
|
||||||
//Don't appear to be in a vore situation
|
//Don't appear to be in a vore situation
|
||||||
else
|
else
|
||||||
@@ -784,7 +784,7 @@
|
|||||||
|
|
||||||
if(!prey.devourable)
|
if(!prey.devourable)
|
||||||
to_chat(user, span_vnotice("They aren't able to be devoured."))
|
to_chat(user, span_vnotice("They aren't able to be devoured."))
|
||||||
log_and_message_admins("[key_name_admin(src)] attempted to devour [key_name_admin(prey)] against their prefs ([prey ? ADMIN_JMP(prey) : "null"])")
|
log_and_message_admins("attempted to devour [key_name_admin(prey)] against their prefs ([prey ? ADMIN_JMP(prey) : "null"])", src)
|
||||||
return FALSE
|
return FALSE
|
||||||
if(prey.absorbed || pred.absorbed)
|
if(prey.absorbed || pred.absorbed)
|
||||||
to_chat(user, span_vwarning("They aren't aren't in a state to be devoured."))
|
to_chat(user, span_vwarning("They aren't aren't in a state to be devoured."))
|
||||||
@@ -858,10 +858,10 @@
|
|||||||
|
|
||||||
var/mob/living/carbon/victim = prey // Check for afk vore
|
var/mob/living/carbon/victim = prey // Check for afk vore
|
||||||
if(istype(victim) && !victim.client && !victim.ai_holder && victim.ckey)
|
if(istype(victim) && !victim.client && !victim.ai_holder && victim.ckey)
|
||||||
log_and_message_admins("[key_name_admin(pred)] ate [key_name_admin(prey)] whilst the prey was AFK ([pred ? ADMIN_JMP(pred) : "null"])")
|
log_and_message_admins("ate [key_name_admin(prey)] whilst the prey was AFK ([pred ? ADMIN_JMP(pred) : "null"])", pred)
|
||||||
var/mob/living/carbon/victim_pred = pred // Check for afk vore
|
var/mob/living/carbon/victim_pred = pred // Check for afk vore
|
||||||
if(istype(victim_pred) && !victim_pred.client && !victim_pred.ai_holder && victim_pred.ckey)
|
if(istype(victim_pred) && !victim_pred.client && !victim_pred.ai_holder && victim_pred.ckey)
|
||||||
log_and_message_admins("[key_name_admin(pred)] ate [key_name_admin(prey)] whilst the pred was AFK ([pred ? ADMIN_JMP(pred) : "null"])")
|
log_and_message_admins("ate [key_name_admin(prey)] whilst the pred was AFK ([pred ? ADMIN_JMP(pred) : "null"])", pred)
|
||||||
|
|
||||||
// Inform Admins
|
// Inform Admins
|
||||||
if(pred == user)
|
if(pred == user)
|
||||||
|
|||||||
@@ -239,7 +239,7 @@
|
|||||||
return
|
return
|
||||||
if(isvoice(inserted_mob) || W.loc == src) //Sanity.
|
if(isvoice(inserted_mob) || W.loc == src) //Sanity.
|
||||||
return
|
return
|
||||||
log_and_message_admins("[user] has just placed [inserted_mob] into a mob transformation machine.", user)
|
log_and_message_admins("has just placed [inserted_mob] into a mob transformation machine.", user)
|
||||||
else
|
else
|
||||||
to_chat(user, span_notice("You cannot put \the [W] into the machine. ((The micro must be connected to the server.))"))
|
to_chat(user, span_notice("You cannot put \the [W] into the machine. ((The micro must be connected to the server.))"))
|
||||||
return
|
return
|
||||||
@@ -268,7 +268,7 @@
|
|||||||
return
|
return
|
||||||
if(isvoice(inserted_mob) || W.loc == src)
|
if(isvoice(inserted_mob) || W.loc == src)
|
||||||
return
|
return
|
||||||
log_and_message_admins("[user] has just placed [inserted_mob] into a mob transformation machine.", user)
|
log_and_message_admins("has just placed [inserted_mob] into a mob transformation machine.", user)
|
||||||
user.drop_item() //Dropping a grab destroys it.
|
user.drop_item() //Dropping a grab destroys it.
|
||||||
//Grabs require a bit of extra work.
|
//Grabs require a bit of extra work.
|
||||||
//We want them to drop their clothing/items as well.
|
//We want them to drop their clothing/items as well.
|
||||||
@@ -507,7 +507,7 @@
|
|||||||
return
|
return
|
||||||
if(isvoice(inserted_mob) || W.loc == src) //This is a sanity check to keep them from entering it multiple times.
|
if(isvoice(inserted_mob) || W.loc == src) //This is a sanity check to keep them from entering it multiple times.
|
||||||
return
|
return
|
||||||
log_and_message_admins("[user] has just placed [inserted_mob] into an item transformation machine.", user)
|
log_and_message_admins("has just placed [inserted_mob] into an item transformation machine.", user)
|
||||||
else
|
else
|
||||||
to_chat(user, span_notice("You cannot put \the [W] into the machine. ((The micro must be connected to the server.))"))
|
to_chat(user, span_notice("You cannot put \the [W] into the machine. ((The micro must be connected to the server.))"))
|
||||||
return
|
return
|
||||||
@@ -536,7 +536,7 @@
|
|||||||
return
|
return
|
||||||
if(isvoice(inserted_mob) || W.loc == src)
|
if(isvoice(inserted_mob) || W.loc == src)
|
||||||
return
|
return
|
||||||
log_and_message_admins("[user] has just placed [inserted_mob] into an item transformation machine.", user)
|
log_and_message_admins("has just placed [inserted_mob] into an item transformation machine.", user)
|
||||||
user.drop_item() //Dropping a grab destroys it.
|
user.drop_item() //Dropping a grab destroys it.
|
||||||
//Grabs require a bit of extra work.
|
//Grabs require a bit of extra work.
|
||||||
//We want them to drop their clothing/items as well.
|
//We want them to drop their clothing/items as well.
|
||||||
|
|||||||
@@ -167,7 +167,7 @@
|
|||||||
if(!M.vore_active)
|
if(!M.vore_active)
|
||||||
add_verb(M, /mob/living/simple_mob/proc/animal_nom)
|
add_verb(M, /mob/living/simple_mob/proc/animal_nom)
|
||||||
M.ghostjoin_icon()
|
M.ghostjoin_icon()
|
||||||
log_and_message_admins("[key_name_admin(user)] used a sapience potion on a simple mob: [M]. [ADMIN_FLW(src)]")
|
log_and_message_admins("used a sapience potion on a simple mob: [M]. [ADMIN_FLW(src)]", user)
|
||||||
playsound(src, 'sound/effects/bubbles.ogg', 50, 1)
|
playsound(src, 'sound/effects/bubbles.ogg', 50, 1)
|
||||||
qdel(src)
|
qdel(src)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user