Merge branch 'master' into weapon-removal

This commit is contained in:
Guti
2024-09-18 18:07:43 +02:00
482 changed files with 5086 additions and 35138 deletions
+2 -1
View File
@@ -160,7 +160,8 @@ var/list/admin_verbs_fun = list(
/client/proc/roll_dices,
/datum/admins/proc/call_supply_drop,
/datum/admins/proc/call_drop_pod,
/client/proc/smite,
// /client/proc/smite, //Replaced by player_effects
/client/proc/player_effects,
/client/proc/admin_lightning_strike,
/client/proc/resize, //VOREStation Add,
/client/proc/cmd_admin_droppod_deploy,
+95 -62
View File
@@ -1,3 +1,20 @@
// Station ranks
#define RANK_HEADS "Heads"
#define RANK_SECURITY "Security"
#define RANK_ENGINEERING "Engineering"
#define RANK_RESEARCH "Research"
#define RANK_MEDICAL "Medical"
#define RANK_CE_STATION_ENGINEER "CE_Station_Engineer"
#define RANK_CE_ATMOSPHERIC_TECH "CE_Atmospheric_Tech"
#define RANK_CE_SHAFT_MINER "CE_Shaft_Miner"
#define RANK_CHEMIST_RD_CMO "Chemist_RD_CMO"
#define RANK_GENETIST_RD_CMO "Geneticist_RD_CMO"
#define RANK_MD_CMO "MD_CMO"
#define RANK_SCIENTIST_RD "Scientist_RD"
#define RANK_AI_CYBORG "AI_Cyborg"
#define RANK_DETECTIVE_HOS "Detective_HoS"
#define RANK_VIROLOGIST_RD_CMO "Virologist_RD_CMO"
var/savefile/Banlistjob
@@ -61,82 +78,82 @@ var/savefile/Banlistjob
if (temp)
UpdateTime()
bantimestamp = CMinutes + minutes
if(rank == "Heads")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Head of Personnel")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Site Manager")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Head of Security")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Chief Engineer")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Research Director")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Chief Medical Officer")
if(rank == RANK_HEADS)
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, JOB_HEAD_OF_PERSONNEL)
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, JOB_SITE_MANAGER)
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, JOB_HEAD_OF_SECURITY)
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, JOB_CHIEF_ENGINEER)
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, JOB_RESEARCH_DIRECTOR)
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, JOB_CHIEF_MEDICAL_OFFICER)
return 1
if(rank == "Security")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Head of Security")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Warden")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Detective")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Security Officer")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Cyborg")
if(rank == RANK_SECURITY)
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, JOB_HEAD_OF_SECURITY)
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, JOB_WARDEN)
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, JOB_DETECTIVE)
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, JOB_SECURITY_OFFICER)
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, JOB_CYBORG)
return 1
if(rank == "Engineering")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Engineer")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Atmospheric Technician")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Chief Engineer")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Cyborg")
if(rank == RANK_ENGINEERING)
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, JOB_ENGINEER)
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, JOB_ATMOSPHERIC_TECHNICIAN)
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, JOB_CHIEF_ENGINEER)
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, JOB_CYBORG)
return 1
if(rank == "Research")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Scientist")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Geneticist")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Chief Medical Officer")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Research Director")
if(rank == RANK_RESEARCH)
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, JOB_SCIENTIST)
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, JOB_GENETICIST)
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, JOB_CHIEF_MEDICAL_OFFICER)
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, JOB_RESEARCH_DIRECTOR)
return 1
if(rank == "Medical")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Geneticist")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Medical Doctor")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Chief Medical Officer")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Chemist")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Cyborg")
if(rank == RANK_MEDICAL)
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, JOB_GENETICIST)
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, JOB_MEDICAL_DOCTOR)
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, JOB_CHIEF_MEDICAL_OFFICER)
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, JOB_CHEMIST)
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, JOB_CYBORG)
return 1
if(rank == "CE_Station_Engineer")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Engineer")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Chief Engineer")
if(rank == RANK_CE_STATION_ENGINEER)
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, JOB_ENGINEER)
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, JOB_CHIEF_ENGINEER)
return 1
if(rank == "CE_Atmospheric_Tech")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Atmospheric Technician")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Chief Engineer")
if(rank == RANK_CE_ATMOSPHERIC_TECH)
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, JOB_ATMOSPHERIC_TECHNICIAN)
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, JOB_CHIEF_ENGINEER)
return 1
if(rank == "CE_Shaft_Miner")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Shaft Miner")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Chief Engineer")
if(rank == RANK_CE_SHAFT_MINER)
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, JOB_SHAFT_MINER)
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, JOB_CHIEF_ENGINEER)
return 1
if(rank == "Chemist_RD_CMO")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Chief Medical Officer")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Research Director")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Chemist")
if(rank == RANK_CHEMIST_RD_CMO)
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, JOB_CHIEF_MEDICAL_OFFICER)
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, JOB_RESEARCH_DIRECTOR)
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, JOB_CHEMIST)
return 1
if(rank == "Geneticist_RD_CMO")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Chief Medical Officer")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Research Director")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Geneticist")
if(rank == RANK_GENETIST_RD_CMO)
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, JOB_CHIEF_MEDICAL_OFFICER)
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, JOB_RESEARCH_DIRECTOR)
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, JOB_GENETICIST)
return 1
if(rank == "MD_CMO")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Chief Medical Officer")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Medical Doctor")
if(rank == RANK_MD_CMO)
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, JOB_CHIEF_MEDICAL_OFFICER)
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, JOB_MEDICAL_DOCTOR)
return 1
if(rank == "Scientist_RD")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Research Director")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Scientist")
if(rank == RANK_SCIENTIST_RD)
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, JOB_RESEARCH_DIRECTOR)
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, JOB_SCIENTIST)
return 1
if(rank == "AI_Cyborg")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Cyborg")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "AI")
if(rank == RANK_AI_CYBORG)
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, JOB_CYBORG)
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, JOB_AI)
return 1
if(rank == "Detective_HoS")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Detective")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Head of Security")
if(rank == RANK_DETECTIVE_HOS)
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, JOB_DETECTIVE)
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, JOB_HEAD_OF_SECURITY)
return 1
if(rank == "Virologist_RD_CMO")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Chief Medical Officer")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Research Director")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Virologist")
if(rank == RANK_VIROLOGIST_RD_CMO)
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, JOB_CHIEF_MEDICAL_OFFICER)
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, JOB_RESEARCH_DIRECTOR)
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, JOB_ALT_VIROLOGIST)
return 1
Banlistjob.cd = "/base"
@@ -272,3 +289,19 @@ var/savefile/Banlistjob
Banlistjob.cd = "/base"
for (var/A in Banlistjob.dir)
RemoveBanjob(A, "full")
#undef RANK_HEADS
#undef RANK_SECURITY
#undef RANK_ENGINEERING
#undef RANK_RESEARCH
#undef RANK_MEDICAL
#undef RANK_CE_STATION_ENGINEER
#undef RANK_CE_ATMOSPHERIC_TECH
#undef RANK_CE_SHAFT_MINER
#undef RANK_CHEMIST_RD_CMO
#undef RANK_GENETIST_RD_CMO
#undef RANK_MD_CMO
#undef RANK_SCIENTIST_RD
#undef RANK_AI_CYBORG
#undef RANK_DETECTIVE_HOS
#undef RANK_VIROLOGIST_RD_CMO
+655
View File
@@ -0,0 +1,655 @@
/client/proc/player_effects(var/mob/target in mob_list)
set name = "Player Effects"
set desc = "Modify a player character with various 'special treatments' from a list."
set category = "Fun"
if(!check_rights(R_FUN))
return
var/datum/eventkit/player_effects/spawner = new()
spawner.target = target
spawner.user = src.mob
spawner.tgui_interact(src.mob)
/datum/eventkit/player_effects
var/mob/target //The target of the effects
var/mob/user
/datum/eventkit/player_effects/New()
. = ..()
/datum/eventkit/player_effects/tgui_interact(mob/user, datum/tgui/ui)
ui = SStgui.try_update_ui(user, src, ui)
if(!ui)
ui = new(user, src, "PlayerEffects", "Player Effects")
ui.open()
/datum/eventkit/player_effects/Destroy()
. = ..()
/datum/eventkit/player_effects/tgui_static_data(mob/user)
var/list/data = list()
data["real_name"] = target.name;
data["player_ckey"] = target.ckey;
data["target_mob"] = target;
return data
/datum/eventkit/player_effects/tgui_state(mob/user)
return GLOB.tgui_admin_state
/datum/eventkit/player_effects/tgui_act(action)
. = ..()
if(.)
return
if(!check_rights_for(usr.client, R_SPAWN))
return
log_and_message_admins("[key_name(user)] used player effect: [action] on [target.ckey] playing [target.name]")
switch(action)
////////////SMITES/////////////
if("break_legs")
var/mob/living/carbon/human/Tar = target
if(!istype(Tar))
return
var/broken_legs = 0
var/obj/item/organ/external/left_leg = Tar.get_organ(BP_L_LEG)
if(left_leg && left_leg.fracture())
broken_legs++
var/obj/item/organ/external/right_leg = Tar.get_organ(BP_R_LEG)
if(right_leg && right_leg.fracture())
broken_legs++
if(!broken_legs)
to_chat(user,"[target] didn't have any breakable legs, sorry.")
if("bluespace_artillery")
bluespace_artillery(target,src)
if("spont_combustion")
var/mob/living/carbon/human/Tar = target
if(!istype(Tar))
return
Tar.adjust_fire_stacks(10)
Tar.IgniteMob()
Tar.visible_message("<span class='danger'>[target] bursts into flames!</span>")
if("lightning_strike")
var/mob/living/carbon/human/Tar = target
if(!istype(Tar))
return
var/turf/T = get_step(get_step(target, NORTH), NORTH)
T.Beam(target, icon_state="lightning[rand(1,12)]", time = 5)
Tar.electrocute_act(75,def_zone = BP_HEAD)
target.visible_message("<span class='danger'>[target] is struck by lightning!</span>")
if("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("shadekin_vore")
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 || 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 = target.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("redspace_abduct")
redspace_abduction(target, src)
if("autosave")
fake_autosave(target, src)
if("autosave2")
fake_autosave(target, src, TRUE)
if("adspam")
if(target.client)
target.client.create_fake_ad_popup_multiple(/obj/screen/popup/default, 15)
if("peppernade")
var/obj/item/weapon/grenade/chem_grenade/teargas/grenade = new /obj/item/weapon/grenade/chem_grenade/teargas
grenade.loc = target.loc
to_chat(target,"<span class='warning'>GRENADE?!</span>")
grenade.detonate()
if("spicerequest")
var/obj/item/weapon/reagent_containers/food/condiment/spacespice/spice = new /obj/item/weapon/reagent_containers/food/condiment/spacespice
spice.loc = target.loc
to_chat(target,"A bottle of spices appears at your feet... be careful what you wish for!")
if("terror")
var/mob/living/carbon/human/Tar = target
if(!istype(Tar))
return
Tar.fear = 200
if("terror_aoe")
var/mob/living/carbon/human/Tar = target
if(!istype(Tar))
return
for(var/mob/living/carbon/human/L in orange(Tar.client.view, Tar))
L.fear = 200
Tar.fear = 200
if("spin")
var/speed = tgui_input_number(user, "Spin speed (minimum 0.1):", "Speed")
if(speed < 0.1)
return
var/loops = tgui_input_number(user, "Number of loops (-1 for infinite):", "Loops")
var/direction_ask = tgui_alert(user, "Clockwise or Anti-Clockwise", "Direction", list("Clockwise", "Anti-Clockwise", "Cancel"))
var/direction
if(direction_ask == "Clockwise")
direction = 1
if(direction_ask == "Anti-Clockwise")
direction = 0
if(direction_ask == "Cancel")
return
target.SpinAnimation(speed, loops, direction)
if("squish")
var/is_squished = target.tf_scale_x || target.tf_scale_y
playsound(target, 'sound/items/hooh.ogg', 50, 1)
if(!is_squished)
target.SetTransform(null, (target.size_multiplier * 1.2), (target.size_multiplier * 0.5))
else
target.ClearTransform()
target.update_transform()
////////MEDICAL//////////////
if("appendicitis")
var/mob/living/carbon/human/Tar = target
if(istype(Tar))
Tar.appendicitis()
if("damage_organ")
var/mob/living/carbon/human/Tar = target
if(!istype(Tar))
return
var/list/organs = list()
for(var/obj/item/organ/I in Tar.organs)
organs |= I
for(var/obj/item/organ/I in Tar.internal_organs)
organs |= I
var/obj/item/organ/our_organ = tgui_input_list(user, "Choose an organ to damage:", "Organs", organs)
if(!our_organ)
return
var/effect = tgui_alert(user, "What do you want to do to the Organ", "Effect", list("Damage", "Kill", "Bruise", "Cancel"))
if(effect == "Cancel")
return
if(effect == "Damage")
var/organ_damage = tgui_input_number(user, "Add how much damage? It is currently at [our_organ.damage].", "Damage")
our_organ.damage = max((our_organ.damage - organ_damage), 0)
if(effect == "Kill")
our_organ.die()
if(effect == "Bruise")
our_organ.bruise()
if("assist_organ")
var/mob/living/carbon/human/Tar = target
if(!istype(Tar))
return
var/list/organs = list()
for(var/obj/item/organ/I in Tar.organs)
organs |= I
for(var/obj/item/organ/I in Tar.internal_organs)
organs |= I
var/obj/item/organ/our_organ = tgui_input_list(user, "Choose an organ to become assisted:", "Organs", organs)
if(!our_organ)
return
our_organ.mechassist()
if("robot_organ")
var/mob/living/carbon/human/Tar = target
if(!istype(Tar))
return
var/list/organs = list()
for(var/obj/item/organ/I in Tar.organs)
organs |= I
for(var/obj/item/organ/I in Tar.internal_organs)
organs |= I
var/obj/item/organ/our_organ = tgui_input_list(user, "Choose an organ to become robotic:", "Organs", organs)
if(!our_organ)
return
our_organ.robotize()
if("repair_organ")
var/mob/living/carbon/human/Tar = target
if(!istype(Tar))
return
var/list/organs = list()
for(var/obj/item/organ/I in Tar.organs)
organs |= I
for(var/obj/item/organ/I in Tar.internal_organs)
organs |= I
var/obj/item/organ/our_organ = tgui_input_list(user, "Choose an organ to heal:", "Organs", organs)
if(!our_organ)
return
var/effect = tgui_alert(user, "What do you want to do to the Organ", "Effect", list("Heal", "Rejuvenate", "Cancel"))
if(effect == "Cancel")
return
if(effect == "Heal")
var/organ_damage = tgui_input_number(user, "Add how much damage? It is currently at [our_organ.damage].", "Damage")
our_organ.damage = max((our_organ.damage - organ_damage), 0)
if(effect == "Rejuvenate")
our_organ.rejuvenate()
if("drop_organ")
var/mob/living/carbon/human/Tar = target
if(!istype(Tar))
return
var/list/organs = list()
for(var/obj/item/organ/I in Tar.organs)
organs |= I
for(var/obj/item/organ/I in Tar.internal_organs)
organs |= I
var/obj/item/organ/our_organ = tgui_input_list(user, "Choose an organ to damage:", "Organs", organs)
if(!our_organ)
return
our_organ.removed()
if("break_bone")
var/mob/living/carbon/human/Tar = target
if(!istype(Tar))
return
var/list/organs = list()
for(var/obj/item/organ/external/E in Tar.organs)
organs |= E
var/obj/item/organ/external/our_organ = tgui_input_list(user, "Choose an bone to break:", "Organs", organs)
if(!our_organ)
return
our_organ.fracture()
if("stasis")
var/mob/living/carbon/human/Tar = target
if(!istype(Tar))
return
if(Tar.in_stasis)
Tar.Stasis(0)
else
Tar.Stasis(100000)
////////ABILITIES//////////////
if("vent_crawl")
var/mob/living/Tar = target
if(!istype(Tar))
return
Tar.verbs |= /mob/living/proc/ventcrawl
if("darksight")
var/mob/living/carbon/human/Tar = target
if(!istype(Tar))
return
var/current_darksight = Tar.species.darksight
var/change_sight = tgui_input_number(user, "What level do you wish to set their darksight to? It is currently [current_darksight].", "Darksight")
if(change_sight)
Tar.species.darksight = change_sight
if("cocoon")
var/mob/living/carbon/human/Tar = target
if(!istype(Tar))
return
Tar.verbs |= /mob/living/carbon/human/proc/enter_cocoon
if("transformation")
var/mob/living/carbon/human/Tar = target
if(!istype(Tar))
return
Tar.verbs |= /mob/living/carbon/human/proc/shapeshifter_select_hair
Tar.verbs |= /mob/living/carbon/human/proc/shapeshifter_select_hair_colors
Tar.verbs |= /mob/living/carbon/human/proc/shapeshifter_select_gender
Tar.verbs |= /mob/living/carbon/human/proc/shapeshifter_select_wings
Tar.verbs |= /mob/living/carbon/human/proc/shapeshifter_select_tail
Tar.verbs |= /mob/living/carbon/human/proc/shapeshifter_select_ears
Tar.verbs |= /mob/living/carbon/human/proc/lleill_select_shape //designed for non-shapeshifter mobs
Tar.verbs |= /mob/living/carbon/human/proc/lleill_select_colour
if("set_size")
var/mob/living/Tar = target
if(!istype(Tar))
return
Tar.verbs |= /mob/living/proc/set_size
if("lleill_energy")
var/mob/living/carbon/human/Tar = target
if(!istype(Tar))
return
var/energy_max = tgui_input_number(user, "What should their max lleill energy be set to? It is currently [Tar.species.lleill_energy_max].", "Max energy")
Tar.species.lleill_energy_max = energy_max
var/energy_new = tgui_input_number(user, "What should their current lleill energy be set to? It is currently [Tar.species.lleill_energy].", "Max energy")
Tar.species.lleill_energy = energy_new
if("lleill_invisibility")
var/mob/living/carbon/human/Tar = target
if(!istype(Tar))
return
Tar.verbs |= /mob/living/carbon/human/proc/lleill_invisibility
if("beast_form")
var/mob/living/carbon/human/Tar = target
if(!istype(Tar))
return
Tar.verbs |= /mob/living/carbon/human/proc/lleill_beast_form
if("lleill_transmute")
var/mob/living/carbon/human/Tar = target
if(!istype(Tar))
return
Tar.verbs |= /mob/living/carbon/human/proc/lleill_transmute
if("lleill_alchemy")
var/mob/living/carbon/human/Tar = target
if(!istype(Tar))
return
Tar.verbs |= /mob/living/carbon/human/proc/lleill_alchemy
if("lleill_drain")
var/mob/living/carbon/human/Tar = target
if(!istype(Tar))
return
Tar.verbs |= /mob/living/carbon/human/proc/lleill_contact
if("brutal_pred")
var/mob/living/Tar = target
if(!istype(Tar))
return
Tar.verbs |= /mob/living/proc/shred_limb
if("trash_eater")
var/mob/living/carbon/human/Tar = target
if(!istype(Tar))
return
Tar.verbs |= /mob/living/proc/eat_trash
Tar.verbs |= /mob/living/proc/toggle_trash_catching
////////INVENTORY//////////////
if("drop_all")
var/mob/living/carbon/human/Tar = target
if(!istype(Tar))
return
var/confirm = tgui_alert(user, "Make [Tar] drop everything?", "Message", list("Yes", "No"))
if(confirm != "Yes")
return
for(var/obj/item/W in Tar)
if(istype(W, /obj/item/weapon/implant/backup) || istype(W, /obj/item/device/nif)) //VOREStation Edit - There's basically no reason to remove either of these
continue //VOREStation Edit
Tar.drop_from_inventory(W)
if("drop_specific")
var/mob/living/carbon/human/Tar = target
if(!istype(Tar))
return
var/list/items = Tar.get_equipped_items()
var/item_to_drop = tgui_input_list(user, "Choose item to force drop:", "Drop Specific Item", items)
if(item_to_drop)
Tar.drop_from_inventory(item_to_drop)
if("drop_held")
var/mob/living/carbon/human/Tar = target
if(!istype(Tar))
return
Tar.drop_l_hand()
Tar.drop_r_hand()
if("list_all")
var/mob/living/carbon/human/Tar = target
if(!istype(Tar))
return
Tar.get_equipped_items()
if("give_item")
var/mob/living/carbon/human/Tar = target
if(!istype(Tar))
return
if(!user.client.holder)
return
var/obj/item/X = user.client.holder.marked_datum
if(!istype(X))
return
Tar.put_in_hands(X)
if("equip_item")
var/mob/living/carbon/human/Tar = target
if(!istype(Tar))
return
if(!user.client.holder)
return
var/obj/item/X = user.client.holder.marked_datum
if(!istype(X))
return
if(Tar.equip_to_appropriate_slot(X))
return
else
Tar.equip_to_storage(X)
////////ADMIN//////////////
if("quick_nif")
var/mob/living/carbon/human/Tar = target
if(!istype(Tar))
return
var/input_NIF
if(!Tar.get_organ(BP_HEAD))
to_chat(user,"<span class='warning'>Target is unsuitable.</span>")
return
if(Tar.nif)
to_chat(user,"<span class='warning'>Target already has a NIF.</span>")
return
if(Tar.species.flags & NO_SCAN)
var/obj/item/device/nif/S = /obj/item/device/nif/bioadap
input_NIF = initial(S.name)
new /obj/item/device/nif/bioadap(Tar)
else
var/list/NIF_types = typesof(/obj/item/device/nif)
var/list/NIFs = list()
for(var/NIF_type in NIF_types)
var/obj/item/device/nif/S = NIF_type
NIFs[capitalize(initial(S.name))] = NIF_type
var/list/show_NIFs = sortList(NIFs) // the list that will be shown to the user to pick from
input_NIF = tgui_input_list(user, "Pick the NIF type","Quick NIF", show_NIFs)
var/chosen_NIF = NIFs[capitalize(input_NIF)]
if(chosen_NIF)
new chosen_NIF(Tar)
else
new /obj/item/device/nif(Tar)
log_and_message_admins("[key_name(user)] Quick NIF'd [Tar.real_name] with a [input_NIF].")
if("resize")
user.client.resize(target)
if("teleport")
var/where = tgui_alert(user, "Where to teleport?", "Where?", list("To Me", "To Mob", "To Area", "Cancel"))
if(where == "Cancel")
return
if(where == "To Me")
user.client.Getmob(target)
if(where == "To Mob")
var/mob/selection = tgui_input_list(usr, "Select a mob to jump [target] to:", "Jump to mob", mob_list)
target.on_mob_jump()
target.forceMove(get_turf(selection))
log_admin("[key_name(user)] jumped [target] to [selection]")
if(where == "To Area")
var/area/A
A = tgui_input_list(user, "Pick an area to teleport [target] to:", "Jump to Area", return_sorted_areas())
target.on_mob_jump()
target.forceMove(pick(get_area_turfs(A)))
log_admin("[key_name(user)] jumped [target] to [A]")
if("gib")
var/death = tgui_alert(user, "Are you sure you want to destroy [target]?", "Gib?", list("KILL", "Cancel"))
if(death == "KILL")
target.gib()
if("dust")
var/death = tgui_alert(user, "Are you sure you want to destroy [target]?", "Dust?", list("KILL", "Cancel"))
if(death == "KILL")
target.dust()
if("paralyse")
var/mob/living/Tar = target
if(!istype(Tar))
return
user.client.holder.paralyze_mob(Tar)
if("subtle_message")
user.client.cmd_admin_subtle_message(target)
if("direct_narrate")
user.client.cmd_admin_direct_narrate(target)
if("player_panel")
user.client.holder.show_player_panel(target)
if("view_variables")
user.client.debug_variables(target)
if("orbit")
if(!user.client.holder.marked_datum)
return
var/atom/movable/X = user.client.holder.marked_datum
X.orbit(target)
if("ai")
if(!istype(target, /mob/living))
to_chat(usr, span_notice("This can only be used on instances of type /mob/living"))
return
var/mob/living/L = target
if(L.client || L.teleop)
to_chat(usr, span_warning("This cannot be used on player mobs!"))
return
if(L.ai_holder) //Cleaning up the original ai
var/ai_holder_old = L.ai_holder
L.ai_holder = null
qdel(ai_holder_old) //Only way I could make #TESTING - Unable to be GC'd to stop. del() logs show it works.
L.ai_holder_type = tgui_input_list(usr, "Choose AI holder", "AI Type", typesof(/datum/ai_holder/))
L.initialize_ai_holder()
L.faction = sanitize(tgui_input_text(usr, "Please input AI faction", "AI faction", "neutral"))
L.a_intent = tgui_input_list(usr, "Please choose AI intent", "AI intent", list(I_HURT, I_HELP))
if(tgui_alert(usr, "Make mob wake up? This is needed for carbon mobs.", "Wake mob?", list("Yes", "No")) == "Yes")
L.AdjustSleeping(-100)
////////FIXES//////////////
if("rejuvenate")
var/mob/living/Tar = target
if(!istype(Tar))
return
Tar.rejuvenate()
if("popup-box")
var/message = tgui_input_text(user, "Write a message to send to the user with a space for them to reply without using the text box:", "Message")
if(!message)
return
log_admin("[key_name(user)] sent message to [target]: [message]")
var/reply = tgui_input_text(target, "An admin has sent you a message: [message]", "Reply")
if(!reply)
return
log_and_message_admins("[key_name(target)] replied to [user]'s message: [reply].")
if("stop-orbits")
for(var/datum/orbit/X in target.orbiters)
X.orbiter.stop_orbit()
+13 -13
View File
@@ -230,38 +230,38 @@
if(ishuman(M))
M_job = M.job
else if(isslime(M))
M_job = "slime"
M_job = JOB_SLIME
else if(issmall(M))
M_job = "Monkey"
M_job = JOB_MONKEY
else if(isalien(M))
M_job = "Alien"
M_job = JOB_ALIEN
else
M_job = "Carbon-based"
M_job = JOB_CARBON_BASED
else if(issilicon(M)) //silicon
if(isAI(M))
M_job = "AI"
M_job = JOB_AI
else if(ispAI(M))
M_job = "pAI"
M_job = JOB_PAI
else if(isrobot(M))
M_job = "Cyborg"
M_job = JOB_CYBORG
else
M_job = "Silicon-based"
M_job = JOB_SILICON_BASED
else if(isanimal(M)) //simple animals
if(iscorgi(M))
M_job = "Corgi"
M_job = JOB_CORGI
else
M_job = "Animal"
M_job = JOB_ANIMAL
else
M_job = "Living"
M_job = JOB_LIVING
else if(istype(M,/mob/new_player))
M_job = "New player"
M_job = JOB_NEW_PLAYER
else if(isobserver(M))
M_job = "Ghost"
M_job = JOB_GHOST
M_job = replacetext(M_job, "'", "")
M_job = replacetext(M_job, "\"", "")
@@ -17,8 +17,8 @@
continue
H.Paralyse(5)
if(H.wear_id)
var/obj/item/card/id/id = H.get_idcard()
for(var/A in id.access)
var/obj/item/weapon/card/id/id = H.get_idcard()
for(var/A in id.GetAccess())
if(A == access_security)
security++
if(!security)
+5 -5
View File
@@ -600,10 +600,10 @@
jobs += "</tr><tr align='center'>"
counter = 0
if(jobban_isbanned(M, "Internal Affairs Agent"))
jobs += "<td width='20%'><a href='?src=\ref[src];[HrefToken()];jobban3=Internal Affairs Agent;jobban4=\ref[M]'><font color=red>Internal Affairs Agent</font></a></td>"
if(jobban_isbanned(M, JOB_INTERNAL_AFFAIRS_AGENT))
jobs += "<td width='20%'><a href='?src=\ref[src];[HrefToken()];jobban3="+JOB_INTERNAL_AFFAIRS_AGENT+";jobban4=\ref[M]'><font color=red>"+JOB_INTERNAL_AFFAIRS_AGENT+"</font></a></td>"
else
jobs += "<td width='20%'><a href='?src=\ref[src];[HrefToken()];jobban3=Internal Affairs Agent;jobban4=\ref[M]'>Internal Affairs Agent</a></td>"
jobs += "<td width='20%'><a href='?src=\ref[src];[HrefToken()];jobban3="+JOB_INTERNAL_AFFAIRS_AGENT+";jobban4=\ref[M]'>"+JOB_INTERNAL_AFFAIRS_AGENT+"</a></td>"
jobs += "</tr></table>"
@@ -629,7 +629,7 @@
//Antagonist (Orange)
counter = 0
var/isbanned_dept = jobban_isbanned(M, "Syndicate")
var/isbanned_dept = jobban_isbanned(M, JOB_SYNDICATE)
jobs += "<table cellpadding='1' cellspacing='0' width='100%'>"
jobs += "<tr bgcolor='ffeeaa'><th colspan='[length(all_antag_types)]'><a href='?src=\ref[src];[HrefToken()];jobban3=Syndicate;jobban4=\ref[M]'>Antagonist Positions</a></th></tr><tr align='center'>"
@@ -652,7 +652,7 @@
//Misc 'roles'
counter = 0
var/list/misc_roles = list("Dionaea", "Graffiti", "Custom loadout", "pAI", "GhostRoles", "AntagHUD")
var/list/misc_roles = list(JOB_DIONAEA, JOB_GRAFFITI, JOB_CUSTOM_LOADOUT, JOB_PAI, JOB_GHOSTROLES, JOB_ANTAGHUD)
jobs += "<table cellpadding='1' cellspacing='0' width='100%'>"
jobs += "<tr bgcolor='ccccff'><th colspan='[length(misc_roles)]'>Other Roles</th></tr><tr align='center'>"
for(var/entry in misc_roles)
+1 -1
View File
@@ -293,7 +293,7 @@
id.icon_state = "gold"
id.access = get_all_accesses().Copy()
id.registered_name = H.real_name
id.assignment = "Site Manager"
id.assignment = JOB_SITE_MANAGER
id.name = "[id.registered_name]'s ID Card ([id.assignment])"
H.equip_to_slot_or_del(id, slot_wear_id)
H.update_inv_wear_id()
+11 -11
View File
@@ -229,13 +229,13 @@
var/selected_radio_channel = tgui_input_list(usr, "Please select the radio channel to add", "Channels", available_channels)
if(!selected_radio_channel || selected_radio_channel == "Cancel")
break
if(selected_radio_channel == "Special Ops")
if(selected_radio_channel == CHANNEL_SPECIAL_OPS)
target.radio.centComm = 1
if(selected_radio_channel == "Raider")
if(selected_radio_channel == CHANNEL_RAIDER)
qdel(target.radio.keyslot)
target.radio.keyslot = new /obj/item/encryptionkey/raider(target)
target.radio.syndie = 1
if(selected_radio_channel == "Mercenary")
if(selected_radio_channel == CHANNEL_MERCENARY)
qdel(target.radio.keyslot)
target.radio.keyslot = new /obj/item/encryptionkey/syndicate(target)
target.radio.syndie = 1
@@ -249,10 +249,10 @@
var/selected_radio_channel = tgui_input_list(usr, "Please select the radio channel to remove", "Channels", target.radio.channels)
if(!selected_radio_channel || selected_radio_channel == "Cancel")
break
if(selected_radio_channel == "Special Ops")
if(selected_radio_channel == CHANNEL_SPECIAL_OPS)
target.radio.centComm = 0
target.module.channels -= selected_radio_channel
if((selected_radio_channel == "Mercenary" || selected_radio_channel == "Raider") && !(target.module.channels["Raider"] || target.module.channels["Mercenary"]))
if((selected_radio_channel == CHANNEL_MERCENARY || selected_radio_channel == CHANNEL_RAIDER) && !(target.module.channels[CHANNEL_RAIDER] || target.module.channels[CHANNEL_MERCENARY]))
qdel(target.radio.keyslot)
target.radio.keyslot = null
target.radio.syndie = 0
@@ -345,9 +345,9 @@
continue
target.module_reset(FALSE)
if(MODIFIY_ROBOT_TOGGLE_STATION_ACCESS)
if(target?.idcard?.access)
var/obj/item/card/id/synthetic/card = target.idcard
if(access_synth in card.access)
if(target?.idcard?.GetAccess())
var/obj/item/weapon/card/id/synthetic/card = target.idcard
if(access_synth in card.GetAccess())
card.access -= get_all_station_access()
card.access -= access_synth
to_chat(usr, "<span class='danger'>You revoke station access from [target].</span>")
@@ -356,9 +356,9 @@
card.access |= access_synth
to_chat(usr, "<span class='danger'>You grant station access to [target].</span>")
if(MODIFIY_ROBOT_TOGGLE_CENT_ACCESS)
if(target?.idcard?.access)
var/obj/item/card/id/synthetic/card = target.idcard
if(access_cent_specops in card.access)
if(target?.idcard?.GetAccess())
var/obj/item/weapon/card/id/synthetic/card = target.idcard
if(access_cent_specops in card.GetAccess())
card.access -= get_all_centcom_access()
to_chat(usr, "<span class='danger'>You revoke central access from [target].</span>")
else
+2 -2
View File
@@ -432,8 +432,8 @@ Traitors and the like can also be revived with the previous role mostly intact.
return
if(samejob == "Yes")
charjob = record_found.fields["real_rank"]
else if(samejob == USELESS_JOB) //VOREStation Edit - Visitor not Assistant
charjob = USELESS_JOB //VOREStation Edit - Visitor not Assistant
else if(samejob == JOB_ALT_VISITOR) //VOREStation Edit - Visitor not Assistant
charjob = JOB_ALT_VISITOR //VOREStation Edit - Visitor not Assistant
else
records = tgui_alert(src,"No data core entry detected. Would you like add them to the manifest, and sec/med/HR records?","Records",list("No", "Yes", "Cancel"))
if(!records || records == "Cancel")
+1 -1
View File
@@ -7,7 +7,7 @@
return
if(job_master && ticker)
var/datum/job/job = job_master.GetJob("AI")
var/datum/job/job = job_master.GetJob(JOB_AI)
if(!job)
to_chat(usr, "Unable to locate the AI job")
return