diff --git a/code/modules/admin/admin_verb_lists_vr.dm b/code/modules/admin/admin_verb_lists_vr.dm index 1f6c07711b..83ab12ca0e 100644 --- a/code/modules/admin/admin_verb_lists_vr.dm +++ b/code/modules/admin/admin_verb_lists_vr.dm @@ -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, diff --git a/code/modules/admin/verbs/map_template_loadverb.dm b/code/modules/admin/verbs/map_template_loadverb.dm index 17e612f30e..7b2fa323d3 100644 --- a/code/modules/admin/verbs/map_template_loadverb.dm +++ b/code/modules/admin/verbs/map_template_loadverb.dm @@ -35,7 +35,8 @@ message_admins("[key_name_admin(usr)] has placed a map template ([template.name]).") 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" diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index 8a77a2b854..7106a677c1 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -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(" GlobalNarrate: [key_name_admin(usr)] : [msg]
", 1) diff --git a/code/modules/admin/verbs/smite.dm b/code/modules/admin/verbs/smite.dm index c6b6f8dcee..b08798fac0 100644 --- a/code/modules/admin/verbs/smite.dm +++ b/code/modules/admin/verbs/smite.dm @@ -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("[target] is struck by lightning!") + 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("[shadekin] 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,"You're carried off into The Dark by the [shadekin]. Who knows if you'll find your way back?") + 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,"The abduction z-level is already being created. Please wait.") + return + if(!redspace_abduction_z) + redspace_abduction_z = -1 + to_chat(user,"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].") + 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,"You feel a strange tug, deep inside. You're frozen in momentarily...") + to_chat(user,"Beginning vis_contents copy to abduction site, player mob is frozen.") + 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,"The tug relaxes, but everything around you looks... slightly off.") + to_chat(user,"The mob has been moved. ([admin_jump_link(target,usr.client.holder)])") + + target.transforming = FALSE + +/proc/fake_autosave(var/mob/living/target, var/client/user, var/wide) + if(!istype(target) || !target.client) + to_chat(user, "Skipping [target] because they are not a /mob/living or have no client.") + 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, "Autosaving your progress, please wait...") + 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, "Tip of the day:
[tip]") + + 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, "Autosave complete!") + if(target.client) + target.client.screen -= loader diff --git a/code/modules/admin/verbs/smite_vr.dm b/code/modules/admin/verbs/smite_vr.dm deleted file mode 100644 index fc8452831c..0000000000 --- a/code/modules/admin/verbs/smite_vr.dm +++ /dev/null @@ -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("[shadekin] 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,"You're carried off into The Dark by the [shadekin]. Who knows if you'll find your way back?") - 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,"The abduction z-level is already being created. Please wait.") - return - if(!redspace_abduction_z) - redspace_abduction_z = -1 - to_chat(user,"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].") - 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,"You feel a strange tug, deep inside. You're frozen in momentarily...") - to_chat(user,"Beginning vis_contents copy to abduction site, player mob is frozen.") - 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,"The tug relaxes, but everything around you looks... slightly off.") - to_chat(user,"The mob has been moved. ([admin_jump_link(target,usr.client.holder)])") - - target.transforming = FALSE - -/proc/fake_autosave(var/mob/living/target, var/client/user, var/wide) - if(!istype(target) || !target.client) - to_chat(user, "Skipping [target] because they are not a /mob/living or have no client.") - 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, "Autosaving your progress, please wait...") - 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, "Tip of the day:
[tip]") - - 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, "Autosave complete!") - if(target.client) - target.client.screen -= loader diff --git a/code/modules/clothing/clothing_accessories.dm b/code/modules/clothing/clothing_accessories.dm index dbc0108c28..c16a7c671f 100644 --- a/code/modules/clothing/clothing_accessories.dm +++ b/code/modules/clothing/clothing_accessories.dm @@ -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. diff --git a/code/modules/mob/living/living_vr.dm b/code/modules/mob/living/living_vr.dm index eebb1f5cc1..4cc196dbb7 100644 --- a/code/modules/mob/living/living_vr.dm +++ b/code/modules/mob/living/living_vr.dm @@ -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)) diff --git a/code/modules/mob/living/silicon/robot/robot_remote_control.dm b/code/modules/mob/living/silicon/robot/robot_remote_control.dm index 1eba57a6dc..536e4953fe 100644 --- a/code/modules/mob/living/silicon/robot/robot_remote_control.dm +++ b/code/modules/mob/living/silicon/robot/robot_remote_control.dm @@ -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 ..() diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/catslug.dm b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/catslug.dm index 1c48c4b2a1..6708a1abf1 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/catslug.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/catslug.dm @@ -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() diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index 106f82a30e..157317b8e2 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -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) diff --git a/icons/mob/vore/tails_vr.dmi b/icons/mob/vore/tails_vr.dmi index 456f7949b1..2bc0f31224 100644 Binary files a/icons/mob/vore/tails_vr.dmi and b/icons/mob/vore/tails_vr.dmi differ diff --git a/vorestation.dme b/vorestation.dme index c229c2f051..322de3bd02 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -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"