mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-11 18:53:06 +00:00
[MIRROR] A variety of fixes (#6843)
Co-authored-by: Heroman3003 <31296024+Heroman3003@users.noreply.github.com> Co-authored-by: Raeschen <rycoop29@gmail.com>
This commit is contained in:
@@ -163,7 +163,6 @@ var/list/admin_verbs_fun = list(
|
||||
/datum/admins/proc/call_supply_drop,
|
||||
/datum/admins/proc/call_drop_pod,
|
||||
/client/proc/smite,
|
||||
/client/proc/smite_vr, //VOREStation Add,
|
||||
/client/proc/admin_lightning_strike,
|
||||
/client/proc/resize, //VOREStation Add,
|
||||
/client/proc/cmd_admin_droppod_deploy,
|
||||
|
||||
@@ -35,7 +35,8 @@
|
||||
message_admins("<span class='adminnotice'>[key_name_admin(usr)] has placed a map template ([template.name]).</span>")
|
||||
else
|
||||
to_chat(usr, "Failed to place map")
|
||||
usr.client.images -= preview
|
||||
if(usr)
|
||||
usr.client.images -= preview
|
||||
|
||||
/client/proc/map_template_load_on_new_z()
|
||||
set category = "Debug"
|
||||
|
||||
@@ -113,11 +113,14 @@
|
||||
return
|
||||
|
||||
var/msg = tgui_input_text(usr, "Message:", text("Enter the text you wish to appear to everyone:"))
|
||||
if(!(msg[1] == "<" && msg[length(msg)] == ">")) //You can use HTML but only if the whole thing is HTML. Tries to prevent admin 'accidents'.
|
||||
msg = sanitize(msg)
|
||||
|
||||
if (!msg)
|
||||
return
|
||||
if(!(msg[1] == "<" && msg[length(msg)] == ">")) //You can use HTML but only if the whole thing is HTML. Tries to prevent admin 'accidents'.
|
||||
msg = sanitize(msg)
|
||||
if (!msg) // We check both before and after, just in case sanitization ended us up with empty message.
|
||||
return
|
||||
|
||||
to_world("[msg]")
|
||||
log_admin("GlobalNarrate: [key_name(usr)] : [msg]")
|
||||
message_admins("<font color='blue'><B> GlobalNarrate: [key_name_admin(usr)] : [msg]<BR></B></font>", 1)
|
||||
|
||||
@@ -8,12 +8,17 @@
|
||||
if(!istype(target))
|
||||
return
|
||||
|
||||
var/list/smite_types = list(SMITE_PIE, SMITE_SPICE, SMITE_BREAKLEGS,SMITE_BLUESPACEARTILLERY,SMITE_SPONTANEOUSCOMBUSTION,SMITE_LIGHTNINGBOLT) //CHOMP Add pie and spicy air
|
||||
var/list/smite_types = list(SMITE_BREAKLEGS,SMITE_BLUESPACEARTILLERY,SMITE_SPONTANEOUSCOMBUSTION,SMITE_LIGHTNINGBOLT,
|
||||
SMITE_SHADEKIN_ATTACK,SMITE_SHADEKIN_NOMF,SMITE_AD_SPAM,SMITE_REDSPACE_ABDUCT,SMITE_AUTOSAVE,SMITE_AUTOSAVE_WIDE,
|
||||
SMITE_PIE, SMITE_SPICE) //CHOMP Add pie and spicy air
|
||||
|
||||
var/smite_choice = tgui_input_list(usr, "Select the type of SMITE for [target]","SMITE Type Choice", smite_types)
|
||||
if(!smite_choice)
|
||||
return
|
||||
|
||||
log_and_message_admins("[key_name(src)] has used SMITE ([smite_choice]) on [key_name(target)].")
|
||||
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)
|
||||
if(SMITE_BREAKLEGS)
|
||||
var/broken_legs = 0
|
||||
@@ -40,6 +45,120 @@
|
||||
target.electrocute_act(75,def_zone = BP_HEAD)
|
||||
target.visible_message("<span class='danger'>[target] is struck by lightning!</span>")
|
||||
|
||||
if(SMITE_SHADEKIN_ATTACK)
|
||||
var/turf/Tt = get_turf(target) //Turf for target
|
||||
|
||||
if(target.loc != Tt)
|
||||
return //Too hard to attack someone in something
|
||||
|
||||
var/turf/Ts //Turf for shadekin
|
||||
|
||||
//Try to find nondense turf
|
||||
for(var/direction in cardinal)
|
||||
var/turf/T = get_step(target,direction)
|
||||
if(T && !T.density)
|
||||
Ts = T //Found shadekin spawn turf
|
||||
if(!Ts)
|
||||
return //Didn't find shadekin spawn turf
|
||||
|
||||
var/mob/living/simple_mob/shadekin/red/shadekin = new(Ts)
|
||||
//Abuse of shadekin
|
||||
shadekin.real_name = shadekin.name
|
||||
shadekin.init_vore()
|
||||
shadekin.ability_flags |= 0x1
|
||||
shadekin.phase_shift()
|
||||
shadekin.ai_holder.give_target(target)
|
||||
shadekin.ai_holder.hostile = FALSE
|
||||
shadekin.ai_holder.mauling = TRUE
|
||||
shadekin.Life()
|
||||
//Remove when done
|
||||
spawn(10 SECONDS)
|
||||
if(shadekin)
|
||||
shadekin.death()
|
||||
|
||||
if(SMITE_SHADEKIN_NOMF)
|
||||
var/static/list/kin_types = list(
|
||||
"Red Eyes (Dark)" = /mob/living/simple_mob/shadekin/red/dark,
|
||||
"Red Eyes (Light)" = /mob/living/simple_mob/shadekin/red/white,
|
||||
"Red Eyes (Brown)" = /mob/living/simple_mob/shadekin/red/brown,
|
||||
"Blue Eyes (Dark)" = /mob/living/simple_mob/shadekin/blue/dark,
|
||||
"Blue Eyes (Light)" = /mob/living/simple_mob/shadekin/blue/white,
|
||||
"Blue Eyes (Brown)" = /mob/living/simple_mob/shadekin/blue/brown,
|
||||
"Purple Eyes (Dark)" = /mob/living/simple_mob/shadekin/purple/dark,
|
||||
"Purple Eyes (Light)" = /mob/living/simple_mob/shadekin/purple/white,
|
||||
"Purple Eyes (Brown)" = /mob/living/simple_mob/shadekin/purple/brown,
|
||||
"Yellow Eyes (Dark)" = /mob/living/simple_mob/shadekin/yellow/dark,
|
||||
"Yellow Eyes (Light)" = /mob/living/simple_mob/shadekin/yellow/white,
|
||||
"Yellow Eyes (Brown)" = /mob/living/simple_mob/shadekin/yellow/brown,
|
||||
"Green Eyes (Dark)" = /mob/living/simple_mob/shadekin/green/dark,
|
||||
"Green Eyes (Light)" = /mob/living/simple_mob/shadekin/green/white,
|
||||
"Green Eyes (Brown)" = /mob/living/simple_mob/shadekin/green/brown,
|
||||
"Orange Eyes (Dark)" = /mob/living/simple_mob/shadekin/orange/dark,
|
||||
"Orange Eyes (Light)" = /mob/living/simple_mob/shadekin/orange/white,
|
||||
"Orange Eyes (Brown)" = /mob/living/simple_mob/shadekin/orange/brown,
|
||||
"Rivyr (Unique)" = /mob/living/simple_mob/shadekin/blue/rivyr)
|
||||
var/kin_type = tgui_input_list(usr, "Select the type of shadekin for [target] nomf","Shadekin Type Choice", kin_types)
|
||||
if(!kin_type || !target)
|
||||
return
|
||||
|
||||
|
||||
kin_type = kin_types[kin_type]
|
||||
|
||||
var/myself = tgui_alert(usr, "Control the shadekin yourself or delete pred and prey after?","Control Shadekin?",list("Control","Cancel","Delete"))
|
||||
if(myself == "Cancel" || !target)
|
||||
return
|
||||
|
||||
var/turf/Tt = get_turf(target)
|
||||
|
||||
if(target.loc != Tt)
|
||||
return //Can't nom when not exposed
|
||||
|
||||
//Begin abuse
|
||||
target.transforming = TRUE //Cheap hack to stop them from moving
|
||||
var/mob/living/simple_mob/shadekin/shadekin = new kin_type(Tt)
|
||||
shadekin.real_name = shadekin.name
|
||||
shadekin.init_vore()
|
||||
shadekin.can_be_drop_pred = TRUE
|
||||
shadekin.dir = SOUTH
|
||||
shadekin.ability_flags |= 0x1
|
||||
shadekin.phase_shift() //Homf
|
||||
shadekin.energy = initial(shadekin.energy)
|
||||
//For fun
|
||||
sleep(1 SECOND)
|
||||
shadekin.dir = WEST
|
||||
sleep(1 SECOND)
|
||||
shadekin.dir = EAST
|
||||
sleep(1 SECOND)
|
||||
shadekin.dir = SOUTH
|
||||
sleep(1 SECOND)
|
||||
shadekin.audible_message("<b>[shadekin]</b> belches loudly!", runemessage = "URRRRRP")
|
||||
sleep(2 SECONDS)
|
||||
shadekin.phase_shift()
|
||||
target.transforming = FALSE //Undo cheap hack
|
||||
|
||||
if(myself == "Control") //Put admin in mob
|
||||
shadekin.ckey = ckey
|
||||
|
||||
else //Permakin'd
|
||||
to_chat(target,"<span class='danger'>You're carried off into The Dark by the [shadekin]. Who knows if you'll find your way back?</span>")
|
||||
target.ghostize()
|
||||
qdel(target)
|
||||
qdel(shadekin)
|
||||
|
||||
|
||||
if(SMITE_REDSPACE_ABDUCT)
|
||||
redspace_abduction(target, src)
|
||||
|
||||
if(SMITE_AUTOSAVE)
|
||||
fake_autosave(target, src)
|
||||
|
||||
if(SMITE_AUTOSAVE_WIDE)
|
||||
fake_autosave(target, src, TRUE)
|
||||
|
||||
if(SMITE_AD_SPAM)
|
||||
if(target.client)
|
||||
target.client.create_fake_ad_popup_multiple(/obj/screen/popup/default, 15)
|
||||
|
||||
if(SMITE_PIE) //CHOMP Add
|
||||
new/obj/effect/decal/cleanable/pie_smudge(get_turf(target))
|
||||
playsound(target, 'sound/effects/slime_squish.ogg', 100, 1, get_rand_frequency(), falloff = 5)
|
||||
@@ -57,9 +176,6 @@
|
||||
else
|
||||
return //Injection? Don't print any messages.
|
||||
|
||||
log_and_message_admins("[key_name(src)] has used SMITE ([smite_choice]) on [key_name(target)].")
|
||||
feedback_add_details("admin_verb","SMITE") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/proc/bluespace_artillery(mob/living/target, user)
|
||||
if(!istype(target))
|
||||
return
|
||||
@@ -83,3 +199,134 @@
|
||||
target.Stun(20)
|
||||
target.Weaken(20)
|
||||
target.stuttering = 20
|
||||
|
||||
var/redspace_abduction_z
|
||||
|
||||
/area/redspace_abduction
|
||||
name = "Another Time And Place"
|
||||
requires_power = FALSE
|
||||
dynamic_lighting = FALSE
|
||||
|
||||
/proc/redspace_abduction(mob/living/target, user)
|
||||
if(redspace_abduction_z < 0)
|
||||
to_chat(user,"<span class='warning'>The abduction z-level is already being created. Please wait.</span>")
|
||||
return
|
||||
if(!redspace_abduction_z)
|
||||
redspace_abduction_z = -1
|
||||
to_chat(user,"<span class='warning'>This is the first use of the verb this shift, it will take a minute to configure the abduction z-level. It will be z[world.maxz+1].</span>")
|
||||
var/z = ++world.maxz
|
||||
world.max_z_changed()
|
||||
for(var/x = 1 to world.maxx)
|
||||
for(var/y = 1 to world.maxy)
|
||||
var/turf/T = locate(x,y,z)
|
||||
new /area/redspace_abduction(T)
|
||||
T.ChangeTurf(/turf/unsimulated/fake_space)
|
||||
T.plane = -100
|
||||
CHECK_TICK
|
||||
redspace_abduction_z = z
|
||||
|
||||
if(!target || !user)
|
||||
return
|
||||
|
||||
var/size_of_square = 26
|
||||
var/halfbox = round(size_of_square*0.5)
|
||||
target.transforming = TRUE
|
||||
to_chat(target,"<span class='danger'>You feel a strange tug, deep inside. You're frozen in momentarily...</span>")
|
||||
to_chat(user,"<span class='notice'>Beginning vis_contents copy to abduction site, player mob is frozen.</span>")
|
||||
sleep(1 SECOND)
|
||||
//Lower left corner of a working box
|
||||
var/llc_x = max(0,halfbox-target.x) + min(target.x+halfbox, world.maxx) - size_of_square
|
||||
var/llc_y = max(0,halfbox-target.y) + min(target.y+halfbox, world.maxy) - size_of_square
|
||||
|
||||
//Copy them all
|
||||
for(var/x = llc_x to llc_x+size_of_square)
|
||||
for(var/y = llc_y to llc_y+size_of_square)
|
||||
var/turf/T_src = locate(x,y,target.z)
|
||||
var/turf/T_dest = locate(x,y,redspace_abduction_z)
|
||||
T_dest.vis_contents.Cut()
|
||||
T_dest.vis_contents += T_src
|
||||
T_dest.density = T_src.density
|
||||
T_dest.opacity = T_src.opacity
|
||||
CHECK_TICK
|
||||
|
||||
//Feather the edges
|
||||
for(var/x = llc_x to llc_x+1) //Left
|
||||
for(var/y = llc_y to llc_y+size_of_square)
|
||||
if(prob(50))
|
||||
var/turf/T = locate(x,y,redspace_abduction_z)
|
||||
T.density = FALSE
|
||||
T.opacity = FALSE
|
||||
T.vis_contents.Cut()
|
||||
|
||||
for(var/x = llc_x+size_of_square-1 to llc_x+size_of_square) //Right
|
||||
for(var/y = llc_y to llc_y+size_of_square)
|
||||
if(prob(50))
|
||||
var/turf/T = locate(x,y,redspace_abduction_z)
|
||||
T.density = FALSE
|
||||
T.opacity = FALSE
|
||||
T.vis_contents.Cut()
|
||||
|
||||
for(var/x = llc_x to llc_x+size_of_square) //Top
|
||||
for(var/y = llc_y+size_of_square-1 to llc_y+size_of_square)
|
||||
if(prob(50))
|
||||
var/turf/T = locate(x,y,redspace_abduction_z)
|
||||
T.density = FALSE
|
||||
T.opacity = FALSE
|
||||
T.vis_contents.Cut()
|
||||
|
||||
for(var/x = llc_x to llc_x+size_of_square) //Bottom
|
||||
for(var/y = llc_y to llc_y+1)
|
||||
if(prob(50))
|
||||
var/turf/T = locate(x,y,redspace_abduction_z)
|
||||
T.density = FALSE
|
||||
T.opacity = FALSE
|
||||
T.vis_contents.Cut()
|
||||
|
||||
target.forceMove(locate(target.x,target.y,redspace_abduction_z))
|
||||
to_chat(target,"<span class='danger'>The tug relaxes, but everything around you looks... slightly off.</span>")
|
||||
to_chat(user,"<span class='notice'>The mob has been moved. ([admin_jump_link(target,usr.client.holder)])</span>")
|
||||
|
||||
target.transforming = FALSE
|
||||
|
||||
/proc/fake_autosave(var/mob/living/target, var/client/user, var/wide)
|
||||
if(!istype(target) || !target.client)
|
||||
to_chat(user, "<span class='warning'>Skipping [target] because they are not a /mob/living or have no client.</span>")
|
||||
return
|
||||
|
||||
if(wide)
|
||||
for(var/mob/living/L in orange(user.view, user.mob))
|
||||
fake_autosave(L, user)
|
||||
return
|
||||
|
||||
target.setMoveCooldown(10 SECONDS)
|
||||
|
||||
to_chat(target, "<span class='notice' style='font: small-caps bold large monospace!important'>Autosaving your progress, please wait...</span>")
|
||||
target << 'sound/effects/ding.ogg'
|
||||
|
||||
var/static/list/bad_tips = list(
|
||||
"Did you know that black shoes protect you from electrocution while hacking?",
|
||||
"Did you know that airlocks always have a wire that disables ID checks?",
|
||||
"You can always find at least 3 pairs of glowing purple gloves in maint!",
|
||||
"Phoron is not toxic if you've had a soda within 30 seconds of exposure!",
|
||||
"Space Mountain Wind makes you immune to damage from space for 30 seconds!",
|
||||
"A mask and air tank are all you need to be safe in space!",
|
||||
"When exploring maintenance, wearing no shoes makes you move faster!",
|
||||
"Did you know that the bartender's shotgun is loaded with harmless ammo?",
|
||||
"Did you know that the tesla and singulo only need containment for 5 minutes?")
|
||||
|
||||
var/tip = pick(bad_tips)
|
||||
to_chat(target, "<span class='notice' style='font: small-caps bold large monospace!important'>Tip of the day:</span><br><span class='notice'>[tip]</span>")
|
||||
|
||||
var/obj/screen/loader = new(target)
|
||||
loader.name = "Autosaving..."
|
||||
loader.desc = "A disc icon that represents your game autosaving. Please wait."
|
||||
loader.icon = 'icons/obj/discs_vr.dmi'
|
||||
loader.icon_state = "quicksave"
|
||||
loader.screen_loc = "NORTH-1, EAST-1"
|
||||
target.client.screen += loader
|
||||
|
||||
spawn(10 SECONDS)
|
||||
if(target)
|
||||
to_chat(target, "<span class='notice' style='font: small-caps bold large monospace!important'>Autosave complete!</span>")
|
||||
if(target.client)
|
||||
target.client.screen -= loader
|
||||
|
||||
@@ -1,267 +0,0 @@
|
||||
/client/proc/smite_vr(var/mob/living/carbon/human/target in player_list)
|
||||
set name = "Smite (Vore)"
|
||||
set desc = "Abuse a player with various 'special Vore-brand treatments' from a list."
|
||||
set category = "Fun"
|
||||
if(!check_rights(R_ADMIN|R_FUN))
|
||||
return
|
||||
|
||||
if(!istype(target))
|
||||
return
|
||||
|
||||
var/list/smite_types = list(SMITE_SHADEKIN_ATTACK,SMITE_SHADEKIN_NOMF,SMITE_AD_SPAM,SMITE_REDSPACE_ABDUCT,SMITE_AUTOSAVE,SMITE_AUTOSAVE_WIDE)
|
||||
|
||||
var/smite_choice = tgui_input_list(usr, "Select the type of SMITE for [target]","SMITE Type Choice", smite_types)
|
||||
if(!smite_choice)
|
||||
return
|
||||
|
||||
log_and_message_admins("[key_name(src)] has used SMITE (Vore) ([smite_choice]) on [key_name(target)].")
|
||||
feedback_add_details("admin_verb","SMITEV") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
switch(smite_choice)
|
||||
if(SMITE_SHADEKIN_ATTACK)
|
||||
var/turf/Tt = get_turf(target) //Turf for target
|
||||
|
||||
if(target.loc != Tt)
|
||||
return //Too hard to attack someone in something
|
||||
|
||||
var/turf/Ts //Turf for shadekin
|
||||
|
||||
//Try to find nondense turf
|
||||
for(var/direction in cardinal)
|
||||
var/turf/T = get_step(target,direction)
|
||||
if(T && !T.density)
|
||||
Ts = T //Found shadekin spawn turf
|
||||
if(!Ts)
|
||||
return //Didn't find shadekin spawn turf
|
||||
|
||||
var/mob/living/simple_mob/shadekin/red/shadekin = new(Ts)
|
||||
//Abuse of shadekin
|
||||
shadekin.real_name = shadekin.name
|
||||
shadekin.init_vore()
|
||||
shadekin.ability_flags |= 0x1
|
||||
shadekin.phase_shift()
|
||||
shadekin.ai_holder.give_target(target)
|
||||
shadekin.ai_holder.hostile = FALSE
|
||||
shadekin.ai_holder.mauling = TRUE
|
||||
shadekin.Life()
|
||||
//Remove when done
|
||||
spawn(10 SECONDS)
|
||||
if(shadekin)
|
||||
shadekin.death()
|
||||
|
||||
if(SMITE_SHADEKIN_NOMF)
|
||||
var/static/list/kin_types = list(
|
||||
"Red Eyes (Dark)" = /mob/living/simple_mob/shadekin/red/dark,
|
||||
"Red Eyes (Light)" = /mob/living/simple_mob/shadekin/red/white,
|
||||
"Red Eyes (Brown)" = /mob/living/simple_mob/shadekin/red/brown,
|
||||
"Blue Eyes (Dark)" = /mob/living/simple_mob/shadekin/blue/dark,
|
||||
"Blue Eyes (Light)" = /mob/living/simple_mob/shadekin/blue/white,
|
||||
"Blue Eyes (Brown)" = /mob/living/simple_mob/shadekin/blue/brown,
|
||||
"Purple Eyes (Dark)" = /mob/living/simple_mob/shadekin/purple/dark,
|
||||
"Purple Eyes (Light)" = /mob/living/simple_mob/shadekin/purple/white,
|
||||
"Purple Eyes (Brown)" = /mob/living/simple_mob/shadekin/purple/brown,
|
||||
"Yellow Eyes (Dark)" = /mob/living/simple_mob/shadekin/yellow/dark,
|
||||
"Yellow Eyes (Light)" = /mob/living/simple_mob/shadekin/yellow/white,
|
||||
"Yellow Eyes (Brown)" = /mob/living/simple_mob/shadekin/yellow/brown,
|
||||
"Green Eyes (Dark)" = /mob/living/simple_mob/shadekin/green/dark,
|
||||
"Green Eyes (Light)" = /mob/living/simple_mob/shadekin/green/white,
|
||||
"Green Eyes (Brown)" = /mob/living/simple_mob/shadekin/green/brown,
|
||||
"Orange Eyes (Dark)" = /mob/living/simple_mob/shadekin/orange/dark,
|
||||
"Orange Eyes (Light)" = /mob/living/simple_mob/shadekin/orange/white,
|
||||
"Orange Eyes (Brown)" = /mob/living/simple_mob/shadekin/orange/brown,
|
||||
"Rivyr (Unique)" = /mob/living/simple_mob/shadekin/blue/rivyr)
|
||||
var/kin_type = tgui_input_list(usr, "Select the type of shadekin for [target] nomf","Shadekin Type Choice", kin_types)
|
||||
if(!kin_type || !target)
|
||||
return
|
||||
|
||||
|
||||
kin_type = kin_types[kin_type]
|
||||
|
||||
var/myself = tgui_alert(usr, "Control the shadekin yourself or delete pred and prey after?","Control Shadekin?",list("Control","Cancel","Delete"))
|
||||
if(myself == "Cancel" || !target)
|
||||
return
|
||||
|
||||
var/turf/Tt = get_turf(target)
|
||||
|
||||
if(target.loc != Tt)
|
||||
return //Can't nom when not exposed
|
||||
|
||||
//Begin abuse
|
||||
target.transforming = TRUE //Cheap hack to stop them from moving
|
||||
var/mob/living/simple_mob/shadekin/shadekin = new kin_type(Tt)
|
||||
shadekin.real_name = shadekin.name
|
||||
shadekin.init_vore()
|
||||
shadekin.can_be_drop_pred = TRUE
|
||||
shadekin.dir = SOUTH
|
||||
shadekin.ability_flags |= 0x1
|
||||
shadekin.phase_shift() //Homf
|
||||
shadekin.energy = initial(shadekin.energy)
|
||||
//For fun
|
||||
sleep(1 SECOND)
|
||||
shadekin.dir = WEST
|
||||
sleep(1 SECOND)
|
||||
shadekin.dir = EAST
|
||||
sleep(1 SECOND)
|
||||
shadekin.dir = SOUTH
|
||||
sleep(1 SECOND)
|
||||
shadekin.audible_message("<b>[shadekin]</b> belches loudly!", runemessage = "URRRRRP")
|
||||
sleep(2 SECONDS)
|
||||
shadekin.phase_shift()
|
||||
target.transforming = FALSE //Undo cheap hack
|
||||
|
||||
if(myself == "Control") //Put admin in mob
|
||||
shadekin.ckey = ckey
|
||||
|
||||
else //Permakin'd
|
||||
to_chat(target,"<span class='danger'>You're carried off into The Dark by the [shadekin]. Who knows if you'll find your way back?</span>")
|
||||
target.ghostize()
|
||||
qdel(target)
|
||||
qdel(shadekin)
|
||||
|
||||
|
||||
if(SMITE_REDSPACE_ABDUCT)
|
||||
redspace_abduction(target, src)
|
||||
|
||||
if(SMITE_AUTOSAVE)
|
||||
fake_autosave(target, src)
|
||||
|
||||
if(SMITE_AUTOSAVE_WIDE)
|
||||
fake_autosave(target, src, TRUE)
|
||||
|
||||
if(SMITE_AD_SPAM)
|
||||
if(target.client)
|
||||
target.client.create_fake_ad_popup_multiple(/obj/screen/popup/default, 15)
|
||||
|
||||
else
|
||||
return //Injection? Don't print any messages.
|
||||
|
||||
var/redspace_abduction_z
|
||||
|
||||
/area/redspace_abduction
|
||||
name = "Another Time And Place"
|
||||
requires_power = FALSE
|
||||
dynamic_lighting = FALSE
|
||||
|
||||
/proc/redspace_abduction(mob/living/target, user)
|
||||
if(redspace_abduction_z < 0)
|
||||
to_chat(user,"<span class='warning'>The abduction z-level is already being created. Please wait.</span>")
|
||||
return
|
||||
if(!redspace_abduction_z)
|
||||
redspace_abduction_z = -1
|
||||
to_chat(user,"<span class='warning'>This is the first use of the verb this shift, it will take a minute to configure the abduction z-level. It will be z[world.maxz+1].</span>")
|
||||
var/z = ++world.maxz
|
||||
world.max_z_changed()
|
||||
for(var/x = 1 to world.maxx)
|
||||
for(var/y = 1 to world.maxy)
|
||||
var/turf/T = locate(x,y,z)
|
||||
new /area/redspace_abduction(T)
|
||||
T.ChangeTurf(/turf/unsimulated/fake_space)
|
||||
T.plane = -100
|
||||
CHECK_TICK
|
||||
redspace_abduction_z = z
|
||||
|
||||
if(!target || !user)
|
||||
return
|
||||
|
||||
var/size_of_square = 26
|
||||
var/halfbox = round(size_of_square*0.5)
|
||||
target.transforming = TRUE
|
||||
to_chat(target,"<span class='danger'>You feel a strange tug, deep inside. You're frozen in momentarily...</span>")
|
||||
to_chat(user,"<span class='notice'>Beginning vis_contents copy to abduction site, player mob is frozen.</span>")
|
||||
sleep(1 SECOND)
|
||||
//Lower left corner of a working box
|
||||
var/llc_x = max(0,halfbox-target.x) + min(target.x+halfbox, world.maxx) - size_of_square
|
||||
var/llc_y = max(0,halfbox-target.y) + min(target.y+halfbox, world.maxy) - size_of_square
|
||||
|
||||
//Copy them all
|
||||
for(var/x = llc_x to llc_x+size_of_square)
|
||||
for(var/y = llc_y to llc_y+size_of_square)
|
||||
var/turf/T_src = locate(x,y,target.z)
|
||||
var/turf/T_dest = locate(x,y,redspace_abduction_z)
|
||||
T_dest.vis_contents.Cut()
|
||||
T_dest.vis_contents += T_src
|
||||
T_dest.density = T_src.density
|
||||
T_dest.opacity = T_src.opacity
|
||||
CHECK_TICK
|
||||
|
||||
//Feather the edges
|
||||
for(var/x = llc_x to llc_x+1) //Left
|
||||
for(var/y = llc_y to llc_y+size_of_square)
|
||||
if(prob(50))
|
||||
var/turf/T = locate(x,y,redspace_abduction_z)
|
||||
T.density = FALSE
|
||||
T.opacity = FALSE
|
||||
T.vis_contents.Cut()
|
||||
|
||||
for(var/x = llc_x+size_of_square-1 to llc_x+size_of_square) //Right
|
||||
for(var/y = llc_y to llc_y+size_of_square)
|
||||
if(prob(50))
|
||||
var/turf/T = locate(x,y,redspace_abduction_z)
|
||||
T.density = FALSE
|
||||
T.opacity = FALSE
|
||||
T.vis_contents.Cut()
|
||||
|
||||
for(var/x = llc_x to llc_x+size_of_square) //Top
|
||||
for(var/y = llc_y+size_of_square-1 to llc_y+size_of_square)
|
||||
if(prob(50))
|
||||
var/turf/T = locate(x,y,redspace_abduction_z)
|
||||
T.density = FALSE
|
||||
T.opacity = FALSE
|
||||
T.vis_contents.Cut()
|
||||
|
||||
for(var/x = llc_x to llc_x+size_of_square) //Bottom
|
||||
for(var/y = llc_y to llc_y+1)
|
||||
if(prob(50))
|
||||
var/turf/T = locate(x,y,redspace_abduction_z)
|
||||
T.density = FALSE
|
||||
T.opacity = FALSE
|
||||
T.vis_contents.Cut()
|
||||
|
||||
target.forceMove(locate(target.x,target.y,redspace_abduction_z))
|
||||
to_chat(target,"<span class='danger'>The tug relaxes, but everything around you looks... slightly off.</span>")
|
||||
to_chat(user,"<span class='notice'>The mob has been moved. ([admin_jump_link(target,usr.client.holder)])</span>")
|
||||
|
||||
target.transforming = FALSE
|
||||
|
||||
/proc/fake_autosave(var/mob/living/target, var/client/user, var/wide)
|
||||
if(!istype(target) || !target.client)
|
||||
to_chat(user, "<span class='warning'>Skipping [target] because they are not a /mob/living or have no client.</span>")
|
||||
return
|
||||
|
||||
if(wide)
|
||||
for(var/mob/living/L in orange(user.view, user.mob))
|
||||
fake_autosave(L, user)
|
||||
return
|
||||
|
||||
target.setMoveCooldown(10 SECONDS)
|
||||
|
||||
to_chat(target, "<span class='notice' style='font: small-caps bold large monospace!important'>Autosaving your progress, please wait...</span>")
|
||||
target << 'sound/effects/ding.ogg'
|
||||
|
||||
var/static/list/bad_tips = list(
|
||||
"Did you know that black shoes protect you from electrocution while hacking?",
|
||||
"Did you know that airlocks always have a wire that disables ID checks?",
|
||||
"You can always find at least 3 pairs of glowing purple gloves in maint!",
|
||||
"Phoron is not toxic if you've had a soda within 30 seconds of exposure!",
|
||||
"Space Mountain Wind makes you immune to damage from space for 30 seconds!",
|
||||
"A mask and air tank are all you need to be safe in space!",
|
||||
"When exploring maintenance, wearing no shoes makes you move faster!",
|
||||
"Did you know that the bartender's shotgun is loaded with harmless ammo?",
|
||||
"Did you know that the tesla and singulo only need containment for 5 minutes?")
|
||||
|
||||
var/tip = pick(bad_tips)
|
||||
to_chat(target, "<span class='notice' style='font: small-caps bold large monospace!important'>Tip of the day:</span><br><span class='notice'>[tip]</span>")
|
||||
|
||||
var/obj/screen/loader = new(target)
|
||||
loader.name = "Autosaving..."
|
||||
loader.desc = "A disc icon that represents your game autosaving. Please wait."
|
||||
loader.icon = 'icons/obj/discs_vr.dmi'
|
||||
loader.icon_state = "quicksave"
|
||||
loader.screen_loc = "NORTH-1, EAST-1"
|
||||
target.client.screen += loader
|
||||
|
||||
spawn(10 SECONDS)
|
||||
if(target)
|
||||
to_chat(target, "<span class='notice' style='font: small-caps bold large monospace!important'>Autosave complete!</span>")
|
||||
if(target.client)
|
||||
target.client.screen -= loader
|
||||
@@ -1,6 +1,6 @@
|
||||
/obj/item/clothing/proc/can_attach_accessory(obj/item/clothing/accessory/A)
|
||||
//Just no, okay
|
||||
if(!A.slot)
|
||||
if(!istype(A) || !A.slot)
|
||||
return FALSE
|
||||
|
||||
//Not valid at all, not in the valid list period.
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
set_metainfo_likes(FALSE)
|
||||
set_metainfo_dislikes(FALSE)
|
||||
|
||||
/mob/living/verb/set_metainfo_panel()
|
||||
/mob/living/proc/set_metainfo_panel()
|
||||
if(usr != src)
|
||||
return
|
||||
var/new_metadata = strip_html_simple(tgui_input_text(usr, "Enter any information you'd like others to see, such as Roleplay-preferences. This will not be saved permanently unless you click save in the OOC notes panel!", "Game Preference" , html_decode(ooc_notes), multiline = TRUE, prevent_enter = TRUE))
|
||||
|
||||
@@ -201,7 +201,8 @@ GLOBAL_LIST_EMPTY(available_ai_shells)
|
||||
/mob/living/silicon/robot/attack_ai(mob/user)
|
||||
if(shell && config.allow_ai_shells && (!connected_ai || connected_ai == user))
|
||||
var/mob/living/silicon/ai/AI = user
|
||||
AI.deploy_to_shell(src)
|
||||
if(istype(AI)) // Just in case we're clicked by a borg
|
||||
AI.deploy_to_shell(src)
|
||||
else
|
||||
return ..()
|
||||
|
||||
|
||||
@@ -279,8 +279,9 @@
|
||||
|
||||
/mob/living/simple_mob/vore/alienanimals/catslug/Login() //If someone plays as us let's just be a passive mob in case accidents happen if the player D/Cs
|
||||
. = ..()
|
||||
ai_holder.hostile = FALSE
|
||||
ai_holder.wander = FALSE
|
||||
if(ai_holder)
|
||||
ai_holder.hostile = FALSE
|
||||
ai_holder.wander = FALSE
|
||||
|
||||
/mob/living/simple_mob/vore/alienanimals/catslug/proc/catslug_color()
|
||||
set name = "Pick Color"
|
||||
@@ -292,7 +293,7 @@
|
||||
var/newcolor = input(usr, "Choose a color.", "", color) as color|null
|
||||
if(newcolor)
|
||||
color = newcolor
|
||||
picked_color = TRUE
|
||||
picked_color = TRUE
|
||||
update_icon()
|
||||
|
||||
/datum/ai_holder/simple_mob/melee/evasive/catslug/proc/consider_awakening()
|
||||
|
||||
@@ -569,16 +569,12 @@
|
||||
h_user.put_in_l_hand(B)
|
||||
else if (h_user.l_store == src)
|
||||
h_user.drop_from_inventory(src)
|
||||
B.loc = h_user
|
||||
B.hud_layerise()
|
||||
h_user.l_store = B
|
||||
//h_user.update_inv_pockets() //Doesn't do anything
|
||||
if(!h_user.equip_to_slot_if_possible(B, slot_l_store))
|
||||
h_user.drop_from_inventory(B)
|
||||
else if (h_user.r_store == src)
|
||||
h_user.drop_from_inventory(src)
|
||||
B.loc = h_user
|
||||
B.hud_layerise()
|
||||
h_user.r_store = B
|
||||
//h_user.update_inv_pockets() //Doesn't do anything
|
||||
if(!h_user.equip_to_slot_if_possible(B, slot_r_store))
|
||||
h_user.drop_from_inventory(B)
|
||||
else if (h_user.head == src)
|
||||
h_user.u_equip(src)
|
||||
h_user.put_in_hands(B)
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 163 KiB After Width: | Height: | Size: 163 KiB |
@@ -1887,7 +1887,6 @@
|
||||
#include "code\modules\admin\verbs\randomverbs_vr.dm"
|
||||
#include "code\modules\admin\verbs\resize.dm"
|
||||
#include "code\modules\admin\verbs\smite.dm"
|
||||
#include "code\modules\admin\verbs\smite_vr.dm"
|
||||
#include "code\modules\admin\verbs\striketeam.dm"
|
||||
#include "code\modules\admin\verbs\tripAI.dm"
|
||||
#include "code\modules\admin\verbs\SDQL2\SDQL_2.dm"
|
||||
|
||||
Reference in New Issue
Block a user