/client/proc/smite(mob/victim as mob) set name = "Smite" set desc = "Abuse a player with various 'special treatments' from a list." set category = "Fun" if(!check_rights(R_FUN)) return if(!victim) victim = input("Select a player", "Who?") as null|mob in GLOB.player_list if(!ishuman(victim)) return var/mob/living/carbon/human/target = victim var/list/smite_types = list( SMITE_BREAKLEGS, SMITE_BLUESPACEARTILLERY, SMITE_SPONTANEOUSCOMBUSTION, SMITE_LIGHTNINGBOLT, SMITE_DISLOCATEALL, SMITE_AUTOSAVE, SMITE_AUTOSAVE_WIDE, SMITE_DARKSPACE_ABDUCT, SMITE_DROP_LIMB_RANDOM, SMITE_DROP_LIMB_ALL, SMITE_DROP_LIMB_PICK, SMITE_VALIDHUNT ) var/smite_choice = input("Select the type of SMITE for [target]","SMITE Type Choice") as null|anything in smite_types if(!smite_choice) return switch(smite_choice) if(SMITE_BREAKLEGS) var/broken_legs = 0 var/obj/item/organ/external/left_leg = target.get_organ(BP_L_LEG) if(left_leg && left_leg.fracture()) broken_legs++ var/obj/item/organ/external/right_leg = target.get_organ(BP_R_LEG) if(right_leg && right_leg.fracture()) broken_legs++ if(!broken_legs) to_chat(src,"[target] didn't have any breakable legs, sorry.") if(SMITE_DISLOCATEALL) var/obj/item/organ/external/left_leg = target.get_organ(BP_L_LEG) left_leg.dislocate() var/obj/item/organ/external/right_leg = target.get_organ(BP_R_LEG) right_leg.dislocate() var/obj/item/organ/external/left_arm = target.get_organ(BP_L_ARM) left_arm.dislocate() var/obj/item/organ/external/right_arm = target.get_organ(BP_R_ARM) right_arm.dislocate() var/obj/item/organ/external/head = target.get_organ(BP_HEAD) head.dislocate() if(SMITE_DROP_LIMB_PICK) var/picked_organ_tag = input("Select the limb you wanna remove of [target]","Limb Choice") as null|anything in list(BP_L_LEG, BP_R_LEG, BP_L_ARM, BP_R_ARM,BP_R_FOOT,BP_L_FOOT, BP_R_HAND, BP_L_HAND) var/obj/item/organ/external/limb = target.get_organ(picked_organ_tag) to_chat(target, SPAN_ALERTSYNDIE("Your sins have cost you your [limb.name]")) limb?.droplimb(FALSE, pick(DROPLIMB_EDGE,DROPLIMB_BURN,DROPLIMB_BLUNT)) if(SMITE_DROP_LIMB_RANDOM) var/rand_organ_tag = pick(BP_L_LEG, BP_R_LEG) var/obj/item/organ/external/limb = target.get_organ(rand_organ_tag) limb?.droplimb(FALSE, pick(DROPLIMB_EDGE,DROPLIMB_BURN,DROPLIMB_BLUNT)) rand_organ_tag = pick(BP_L_ARM, BP_R_ARM) limb = target.get_organ(rand_organ_tag) limb?.droplimb(FALSE, pick(DROPLIMB_EDGE,DROPLIMB_BURN,DROPLIMB_BLUNT)) to_chat(target, SPAN_ALERTSYNDIE("Your sins have cost you an arm and an leg")) if(SMITE_DROP_LIMB_ALL) for( var/limb_tag in list(BP_L_LEG, BP_R_LEG, BP_L_ARM, BP_R_ARM)) var/obj/item/organ/external/limb = target.get_organ(limb_tag) limb?.droplimb(FALSE, pick(DROPLIMB_EDGE,DROPLIMB_BURN,DROPLIMB_BLUNT)) to_chat(target, SPAN_ALERTSYNDIE(pick("The gods have bestowed you nuggethood", "The gods crave McDonalds", "The gods have turned you into a fucknugget"))) if(SMITE_BLUESPACEARTILLERY) bluespace_artillery(target,src) if(SMITE_SPONTANEOUSCOMBUSTION) target.adjust_fire_stacks(10) target.IgniteMob() target.visible_message("[target] bursts into flames!") if(SMITE_LIGHTNINGBOLT) var/turf/T = get_step(get_step(target, NORTH), NORTH) T.Beam(target, icon_state="lightning[rand(1,12)]", time = 5) // a gigajoule lmfao target.electrocute(1000000, 75, 50, ELECTROCUTE_ACT_FLAG_DISTRIBUTE, BP_HEAD) target.visible_message("[target] is struck by lightning!") if(SMITE_AUTOSAVE) var/time_to_stun = tgui_input_number(src, "How long would you like the saving to take? (in seconds)", "Autosave Time", 10, min_value = 1) fake_autosave(target, time_to_stun, src) if(SMITE_AUTOSAVE_WIDE) var/time_to_stun = tgui_input_number(src, "How long would you like the saving to take? (in seconds)", "Autosave Time", 10, min_value = 1) fake_autosave(target, time_to_stun, src, TRUE) if(SMITE_DARKSPACE_ABDUCT) darkspace_abduction(target, src) if(SMITE_VALIDHUNT) var/noncanon = tgui_alert(src, "Would you like to announce that [target] is now noncanon?", "Validhunting time", list("Yes", "No", "Wait no LET THEM LIVE")) if(noncanon == "Wait no LET THEM LIVE") return var/exclude = tgui_alert(src, "Would you like [target] to be aware that they are now KOS?", "They're valid now", list("Yes", "No")) validhunting_time(target, src, ((noncanon == "Yes") ? TRUE : FALSE), ((exclude == "No") ? TRUE : FALSE)) 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 if(BSACooldown) if(user) to_chat(user,"BSA is still cooling down, please wait!") return BSACooldown = 1 spawn(50) BSACooldown = 0 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)]") var/turf/simulated/floor/T = get_turf(target) if(istype(T)) if(prob(80)) T.break_tile_to_plating() else T.break_tile() if(target.health == 1) target.gib() else target.adjustBruteLoss( min( 99 , (target.health - 1) ) ) target.afflict_stun(20 * 20) target.afflict_paralyze(20 * 20) target.stuttering = 20 /proc/fake_autosave(var/mob/living/target, var/duration, 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, duration, user) return target.applyMoveCooldown(duration 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?", "Did you know that Admins can't ban you if you don't give them consent?") var/tip = pick(bad_tips) to_chat(target, "Tip of the day:
[tip]") var/atom/movable/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(duration SECONDS) if(target) to_chat(target, "Autosave complete!") if(target.client) target.client.screen -= loader /proc/darkspace_abduction(mob/living/target, user) var/static/darkspace_abduction_z if(darkspace_abduction_z < 0) to_chat(user,"The abduction z-level is already being created. Please wait.") return if(!darkspace_abduction_z) darkspace_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/datum/map_level/level = SSmapping.allocate_level() var/z = level.z_index var/area/areaInstance = new /area/darkspace_abduction(null) areaInstance.addSorted() for(var/x = 1 to world.maxx) for(var/y = 1 to world.maxy) var/turf/T = locate(x,y,z) T.ChangeTurf(/turf/unsimulated/fake_space) T.plane = -100 areaInstance.contents.Add(T) CHECK_TICK darkspace_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,darkspace_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,darkspace_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,darkspace_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,darkspace_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,darkspace_abduction_z) T.density = FALSE T.opacity = FALSE T.vis_contents.Cut() target.forceMove(locate(target.x,target.y,darkspace_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/validhunting_time(mob/living/target, user, declare_noncanon, exclude_target) if(!istype(target)) return var/image/killsign = image('icons/effects/killsign.dmi', target, declare_noncanon ? "noncanon" : "kill", ABOVE_LIGHTING_LAYER_MAIN) killsign.pixel_z = 16 killsign.plane = ABOVE_LIGHTING_PLANE killsign.appearance_flags = KEEP_APART | RESET_COLOR | RESET_ALPHA | RESET_TRANSFORM | NO_CLIENT_COLOR var/list/recipients = list() for(var/mob/M in GLOB.player_list) if(exclude_target && M == target) continue var/client/C = M.client if(!istype(C)) continue C.images += killsign recipients += M if(declare_noncanon) for(var/mob/M in recipients) to_chat(M, "[target] is now non-canon.
[target] is now valid to kill on sight. All actions performed in pursuit of killing them are non-canon, with the exception of any collateral damage that may occur.") M.playsound_local(get_turf(M), 'sound/misc/notice1.ogg', 50)