mirror of
https://github.com/Aurorastation/Aurora-Old.git
synced 2026-08-28 23:26:17 +01:00
@@ -21,7 +21,7 @@ var/list/gravity_field_generators = list() // We will keep track of this by addi
|
||||
/client/proc/cmd_dev_reset_gravity()
|
||||
set category = "Debug"
|
||||
set name = "Restore Default Gravity"
|
||||
set desc = "Resets all gravity on the entire server(This spams Scopes like mad.)"
|
||||
set desc = "Resets all gravity on the entire server."
|
||||
|
||||
if(!check_rights(R_DEBUG|R_DEV)) return
|
||||
|
||||
@@ -36,7 +36,7 @@ var/list/gravity_field_generators = list() // We will keep track of this by addi
|
||||
src << "\red The game hasn't started yet!"
|
||||
return
|
||||
|
||||
if(alert(usr, "Be sure to warn Scopes, Chris, and Skull. This could be very spammy for their logs", "Restore gravity", "No", "Yes") == "No")
|
||||
if(alert(usr, "Make people fall on their face?", "Restore gravity", "No", "Yes") == "No")
|
||||
return 0
|
||||
|
||||
world << "\red \b Resetting Gravity Simulation."
|
||||
@@ -47,12 +47,10 @@ var/list/gravity_field_generators = list() // We will keep track of this by addi
|
||||
continue
|
||||
|
||||
A.has_gravity = 1
|
||||
msg_scopes("Gravity reset in: [A.name]")
|
||||
for(var/area/SubA in A.related)
|
||||
SubA.has_gravity = 1
|
||||
for(var/mob/living/carbon/human/M in SubA)
|
||||
M:float(0)
|
||||
msg_scopes("Did you enjoy that insane amount of things")
|
||||
world << "\red Gravity Simulation reset."
|
||||
|
||||
feedback_add_details("admin_verb","RSG")
|
||||
@@ -348,6 +346,8 @@ var/list/gravity_field_generators = list() // We will keep track of this by addi
|
||||
gravity_is_on = 0
|
||||
investigate_log("was brought offline and there is now no gravity for this level.", "gravity")
|
||||
message_admins("The gravity generator was brought offline with no backup generator. (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[x];Y=[y];Z=[z]'>[area.name]</a>)")
|
||||
message_mods("The gravity generator was brought offline with no backup generator. (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[x];Y=[y];Z=[z]'>[area.name]</a>)")
|
||||
|
||||
|
||||
update_icon()
|
||||
update_list()
|
||||
@@ -488,6 +488,8 @@ var/list/gravity_field_generators = list() // We will keep track of this by addi
|
||||
)
|
||||
for (var/type in SPECIALS)
|
||||
if ( istype(A,type) )
|
||||
if(A.type == /area/prison/gas_chamber)
|
||||
return AREA_STATION
|
||||
return AREA_SPECIAL
|
||||
return AREA_STATION
|
||||
|
||||
|
||||
@@ -179,10 +179,12 @@
|
||||
if(env.temperature != set_temperature + T0C)
|
||||
|
||||
var/transfer_moles = 0.25 * env.total_moles()
|
||||
msg_scopes("transfer_moles: [transfer_moles]")
|
||||
var/datum/gas_mixture/removed = env.remove(transfer_moles)
|
||||
|
||||
if(removed)
|
||||
var/heat_capacity = removed.heat_capacity()
|
||||
msg_scopes("heat_capacity: [heat_capacity]")
|
||||
if(heat_capacity) // Added check to avoid divide by zero (oshi-) runtime errors -- TLE
|
||||
if(removed.temperature > set_temperature + T0C)
|
||||
removed.temperature = min(removed.temperature - cooling_power/heat_capacity, TCMB) // Added min() check to try and avoid wacky superheating issues in low gas scenarios -- TLE
|
||||
|
||||
@@ -552,6 +552,8 @@
|
||||
#include "code\game\objects\items\devices\debugger.dm"
|
||||
#include "code\game\objects\items\devices\flash.dm"
|
||||
#include "code\game\objects\items\devices\flashlight.dm"
|
||||
#include "code\game\objects\items\devices\isocube.dm"
|
||||
#include "code\game\objects\items\devices\laserpointer.dm"
|
||||
#include "code\game\objects\items\devices\lightreplacer.dm"
|
||||
#include "code\game\objects\items\devices\megaphone.dm"
|
||||
#include "code\game\objects\items\devices\modkit.dm"
|
||||
@@ -722,6 +724,7 @@
|
||||
#include "code\game\objects\structures\stool_bed_chair_nest\bed.dm"
|
||||
#include "code\game\objects\structures\stool_bed_chair_nest\chairs.dm"
|
||||
#include "code\game\objects\structures\stool_bed_chair_nest\stools.dm"
|
||||
#include "code\game\objects\structures\stool_bed_chair_nest\wheelchair.dm"
|
||||
#include "code\game\turfs\simulated.dm"
|
||||
#include "code\game\turfs\turf.dm"
|
||||
#include "code\game\turfs\unsimulated.dm"
|
||||
@@ -883,6 +886,7 @@
|
||||
#include "code\modules\detectivework\detective_work.dm"
|
||||
#include "code\modules\detectivework\evidence.dm"
|
||||
#include "code\modules\detectivework\footprints_and_rag.dm"
|
||||
#include "code\modules\detectivework\forensics.dm"
|
||||
#include "code\modules\detectivework\scanner.dm"
|
||||
#include "code\modules\economy\Accounts.dm"
|
||||
#include "code\modules\economy\Accounts_DB.dm"
|
||||
@@ -1230,6 +1234,7 @@
|
||||
#include "code\modules\projectiles\guns\energy\erifles.dm"
|
||||
#include "code\modules\projectiles\guns\energy\laser.dm"
|
||||
#include "code\modules\projectiles\guns\energy\lawgiver.dm"
|
||||
#include "code\modules\projectiles\guns\energy\modular.dm"
|
||||
#include "code\modules\projectiles\guns\energy\nuclear.dm"
|
||||
#include "code\modules\projectiles\guns\energy\pulse.dm"
|
||||
#include "code\modules\projectiles\guns\energy\special.dm"
|
||||
|
||||
@@ -15,16 +15,16 @@
|
||||
"/obj/item/weapon/stock_parts/subspace/amplifier" = 1,
|
||||
"/obj/item/weapon/stock_parts/console_screen" = 1,
|
||||
"/obj/item/weapon/cable_coil" = 5)
|
||||
|
||||
/*
|
||||
datum/design/shield_gen_ex
|
||||
name = "Circuit Design (Experimental hull shield generator)"
|
||||
desc = "Allows for the construction of circuit boards used to build an experimental hull shield generator."
|
||||
id = "shield_gen"
|
||||
req_tech = list("bluespace" = 4, "plasmatech" = 3)
|
||||
build_type = IMPRINTER
|
||||
materials = list("$glass" = 2000, "sacid" = 20, "$plasma" = 10000, "$diamond" = 5000, "$gold" = 10000)
|
||||
build_type = PROTOLATHE
|
||||
materials = list("$glass" = 2000, "$plasma" = 5000, "$diamond" = 5000, "$gold" = 5000)
|
||||
build_path = "/obj/machinery/shield_gen/external"
|
||||
|
||||
*/
|
||||
////////////////////////////////////////
|
||||
// Shield Generator
|
||||
|
||||
@@ -41,16 +41,16 @@ datum/design/shield_gen_ex
|
||||
"/obj/item/weapon/stock_parts/subspace/amplifier" = 1,
|
||||
"/obj/item/weapon/stock_parts/console_screen" = 1,
|
||||
"/obj/item/weapon/cable_coil" = 5)
|
||||
|
||||
/*
|
||||
datum/design/shield_gen
|
||||
name = "Circuit Design (Experimental shield generator)"
|
||||
desc = "Allows for the construction of circuit boards used to build an experimental shield generator."
|
||||
id = "shield_gen"
|
||||
req_tech = list("bluespace" = 4, "plasmatech" = 3)
|
||||
build_type = IMPRINTER
|
||||
materials = list("$glass" = 2000, "sacid" = 20, "$plasma" = 10000, "$diamond" = 5000, "$gold" = 10000)
|
||||
build_type = PROTOLATHE
|
||||
materials = list("$glass" = 2000, "$plasma" = 5000, "$diamond" = 5000, "$gold" = 5000)
|
||||
build_path = "/obj/machinery/shield_gen/external"
|
||||
|
||||
*/
|
||||
////////////////////////////////////////
|
||||
// Shield Capacitor
|
||||
|
||||
@@ -67,12 +67,13 @@ datum/design/shield_gen
|
||||
"/obj/item/weapon/stock_parts/subspace/analyzer" = 1,
|
||||
"/obj/item/weapon/stock_parts/console_screen" = 1,
|
||||
"/obj/item/weapon/cable_coil" = 5)
|
||||
|
||||
/*
|
||||
datum/design/shield_cap
|
||||
name = "Circuit Design (Experimental shield capacitor)"
|
||||
desc = "Allows for the construction of circuit boards used to build an experimental shielding capacitor."
|
||||
id = "shield_cap"
|
||||
req_tech = list("magnets" = 3, "powerstorage" = 4)
|
||||
build_type = IMPRINTER
|
||||
materials = list("$glass" = 2000, "sacid" = 20, "$plasma" = 10000, "$diamond" = 5000, "$silver" = 10000)
|
||||
build_type = PROTOLATHE
|
||||
materials = list("$glass" = 2000, "$plasma" = 5000, "$diamond" = 5000, "$silver" = 5000)
|
||||
build_path = "/obj/machinery/shield_gen/external"
|
||||
*/
|
||||
@@ -366,3 +366,11 @@ datum/projectile_data
|
||||
var/dest_y = src_y + distance*cos(rotation);
|
||||
|
||||
return new /datum/projectile_data(src_x, src_y, time, distance, power_x, power_y, dest_x, dest_y)
|
||||
|
||||
|
||||
/proc/flick_overlay(image/I, list/show_to, duration)
|
||||
for(var/client/C in show_to)
|
||||
C.images += I
|
||||
sleep(duration)
|
||||
for(var/client/C in show_to)
|
||||
C.images -= I
|
||||
@@ -82,9 +82,19 @@
|
||||
diary << "\[[time_stamp()]]MISC: [text][log_end]"
|
||||
|
||||
//SoundScopes extra stuffs
|
||||
/proc/msg_scopes(var/msg)
|
||||
msg = "<span class=\"prefix\">Scopes Log:</span> <span class=\"message\">[msg]</span>"
|
||||
//I'm sending debug messages through here for when an admin log is made at the same time.
|
||||
//What's the point in making 2 recorded logs for one thing.
|
||||
/proc/msg_scopes(var/msg, tell_devs = 0)
|
||||
if(tell_devs)
|
||||
msg = "DEBUG: [msg]"
|
||||
else
|
||||
msg = "[time_stamp()] <span class=\"prefix\">Scopes Log [tell_devs]:</span> <span class=\"message\">[msg]</span>"
|
||||
|
||||
for(var/client/C in admins)
|
||||
if((R_DEV & C.holder.rights) && (R_MOD & C.holder.rights))
|
||||
if(C.prefs.toggles & CHAT_SCOPES_DEBUG)
|
||||
C << msg
|
||||
if(R_DEV & C.holder.rights)
|
||||
if(tell_devs)
|
||||
if((C.prefs.toggles & CHAT_DEBUGLOGS) && !(R_ADMIN & C.holder.rights))
|
||||
C << msg
|
||||
if(R_ADMIN & C.holder.rights)
|
||||
if(C.prefs.toggles & CHAT_SCOPES_DEBUG)
|
||||
C << msg
|
||||
@@ -14,6 +14,7 @@ var/datum/global_hud/global_hud = new()
|
||||
var/obj/screen/blurry
|
||||
var/list/vimpaired
|
||||
var/list/darkMask
|
||||
var/obj/screen/lum
|
||||
var/obj/screen/nvg
|
||||
|
||||
/datum/global_hud/New()
|
||||
@@ -38,6 +39,13 @@ var/datum/global_hud/global_hud = new()
|
||||
nvg.layer = 17
|
||||
nvg.mouse_opacity = 0
|
||||
|
||||
lum = new /obj/screen()
|
||||
lum.screen_loc = "1,1"
|
||||
lum.icon = 'icons/obj/nvg_hud_full.dmi'
|
||||
lum.icon_state = "luminol_hud"
|
||||
lum.layer = 17
|
||||
lum.mouse_opacity = 0
|
||||
|
||||
var/obj/screen/O
|
||||
var/i
|
||||
//that nasty looking dither you get when you're short-sighted
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
|
||||
user.attack_log += "\[[time_stamp()]\]<font color='red'> Attacked [M.name] ([M.ckey]) with [name] (INTENT: [uppertext(user.a_intent)]) (DAMTYE: [uppertext(damtype)])</font>"
|
||||
M.attack_log += "\[[time_stamp()]\]<font color='orange'> Attacked by [user.name] ([user.ckey]) with [name] (INTENT: [uppertext(user.a_intent)]) (DAMTYE: [uppertext(damtype)])</font>"
|
||||
msg_admin_attack("[key_name(user)] attacked [key_name(M)] with [name] (INTENT: [uppertext(user.a_intent)]) (DAMTYE: [uppertext(damtype)])" )
|
||||
msg_admin_attack("[key_name(user)] attacked [key_name(M)] with [name] (INTENT: [uppertext(user.a_intent)]) (DAMTYE: [uppertext(damtype)]) - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[user.x];Y=[user.y];Z=[user.z]'>JMP</a>" )
|
||||
|
||||
//spawn(1800) // this wont work right
|
||||
// M.lastattacker = null
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
/mob/living/carbon/human/RangedAttack(var/atom/A)
|
||||
if(!gloves && !mutations.len) return
|
||||
var/obj/item/clothing/gloves/G = gloves
|
||||
if((LASER in mutations) && a_intent == "harm")
|
||||
if((LASER in mutations) && a_intent == "hurt")
|
||||
LaserEyes(A) // moved into a proc below
|
||||
|
||||
else if(istype(G) && G.Touch(A,0)) // for magic gloves
|
||||
|
||||
@@ -144,6 +144,7 @@ datum/controller/game_controller/proc/process()
|
||||
world << "<font color='red'><b>RUNTIMES IN ATMOS TICKER. Killing air simulation!</font></b>"
|
||||
world.log << "### ZAS SHUTDOWN"
|
||||
message_admins("ZASALERT: unable to run [air_master.tick_progress], shutting down!")
|
||||
msg_scopes("ZASALERT: unable to run [air_master.tick_progress], shutting down!")
|
||||
log_admin("ZASALERT: unable run zone/process() -- [air_master.tick_progress]")
|
||||
air_processing_killed = 1
|
||||
air_master.failed_ticks = 0
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
supply_shuttle.process()
|
||||
feedback_add_details("admin_verb","RSupply")
|
||||
message_admins("Admin [key_name_admin(usr)] has restarted the [controller] controller.")
|
||||
msg_scopes("Admin [key_name_admin(usr)] has restarted the [controller] controller.")
|
||||
return
|
||||
|
||||
|
||||
|
||||
@@ -181,7 +181,7 @@ datum/controller/vote
|
||||
log_game("Rebooting due to restart vote")
|
||||
world.Reboot()
|
||||
|
||||
last_vote_time = world.time
|
||||
last_vote_time = time_stamp()
|
||||
return .
|
||||
|
||||
proc/submit_vote(var/ckey, var/vote)
|
||||
@@ -236,14 +236,16 @@ datum/controller/vote
|
||||
mode = vote_type
|
||||
initiator = initiator_key
|
||||
started_time = world.time
|
||||
var/timedifference = round((world.time - last_vote_time))
|
||||
var/timedifference_text
|
||||
timedifference_text = time2text(timedifference, "hh:mm:ss")
|
||||
msg_scopes("timedifference_text debug: [timedifference]")
|
||||
timedifference_text = time2text(timedifference,"mm:ss")
|
||||
msg_scopes("timedifference: [timedifference] timedifference_text: [timedifference_text] started_time: [started_time]")
|
||||
// var/timedifference = round((world.time - last_vote_time))
|
||||
// var/timedifference_text
|
||||
// timedifference_text = time2text(timedifference, "hh:mm:ss")
|
||||
// msg_scopes("timedifference_text debug: [timedifference]")
|
||||
// timedifference_text = time2text(timedifference,"mm:ss")
|
||||
// msg_scopes("timedifference: [timedifference] timedifference_text: [timedifference_text] started_time: [started_time]")
|
||||
for(var/client/C in admins)
|
||||
C << "Time since last vote: [timedifference_text]"
|
||||
if((C.holder.rights & R_ADMIN) || (C.holder.rights & R_MOD))
|
||||
C << "Time last vote: [last_vote_time]"
|
||||
C << "Time: [time_stamp()]"
|
||||
var/text = "[capitalize(mode)] vote started by [initiator]."
|
||||
if(mode == "custom")
|
||||
text += "\n[question]"
|
||||
|
||||
@@ -430,6 +430,7 @@ client
|
||||
if( !new_name || !M ) return
|
||||
|
||||
message_admins("Admin [key_name_admin(usr)] renamed [key_name_admin(M)] to [new_name].")
|
||||
msg_scopes("[key_name_admin(usr)] renamed [key_name_admin(M)] to [new_name].", 1) //The 1 makes dev's see it too
|
||||
M.fully_replace_character_name(M.real_name,new_name)
|
||||
href_list["datumrefresh"] = href_list["rename"]
|
||||
|
||||
@@ -464,7 +465,7 @@ client
|
||||
cmd_mass_modify_object_variables(A, href_list["varnamemass"])
|
||||
|
||||
else if(href_list["mob_player_panel"])
|
||||
if(!check_rights(0)) return
|
||||
if(!check_rights(R_ADMIN|R_MOD)) return
|
||||
|
||||
var/mob/M = locate(href_list["mob_player_panel"])
|
||||
if(!istype(M))
|
||||
@@ -495,7 +496,7 @@ client
|
||||
|
||||
src.give_disease(M)
|
||||
href_list["datumrefresh"] = href_list["give_spell"]
|
||||
|
||||
|
||||
else if(href_list["give_disease2"])
|
||||
if(!check_rights(R_ADMIN|R_FUN)) return
|
||||
|
||||
@@ -614,6 +615,7 @@ client
|
||||
return
|
||||
log_admin("[key_name(usr)] deleted all objects of type [O_type] ([i] objects deleted) ")
|
||||
message_admins("\blue [key_name(usr)] deleted all objects of type [O_type] ([i] objects deleted) ")
|
||||
msg_scopes("\blue [key_name(usr)] deleted all objects of type [O_type] ([i] objects deleted) ", 1)
|
||||
if("Type and subtypes")
|
||||
var/i = 0
|
||||
for(var/obj/Obj in world)
|
||||
@@ -625,6 +627,7 @@ client
|
||||
return
|
||||
log_admin("[key_name(usr)] deleted all objects of type or subtype of [O_type] ([i] objects deleted) ")
|
||||
message_admins("\blue [key_name(usr)] deleted all objects of type or subtype of [O_type] ([i] objects deleted) ")
|
||||
msg_scopes("\blue [key_name(usr)] deleted all objects of type or subtype of [O_type] ([i] objects deleted) ", 1)
|
||||
|
||||
else if(href_list["explode"])
|
||||
if(!check_rights(R_DEBUG|R_FUN)) return
|
||||
@@ -829,7 +832,7 @@ client
|
||||
if(!check_rights(R_DEBUG|R_DEV)) return
|
||||
|
||||
var/mob/living/H = locate(href_list["addverb"])
|
||||
|
||||
|
||||
if(!istype(H))
|
||||
usr << "This can only be done to instances of type /mob/living"
|
||||
return
|
||||
@@ -845,7 +848,7 @@ client
|
||||
possibleverbs += typesof(/mob/living/silicon/proc,/mob/living/silicon/ai/proc,/mob/living/silicon/ai/verb)
|
||||
possibleverbs -= H.verbs
|
||||
possibleverbs += "Cancel" // ...And one for the bottom
|
||||
|
||||
|
||||
var/verb = input("Select a verb!", "Verbs",null) as anything in possibleverbs
|
||||
if(!H)
|
||||
usr << "Mob doesn't exist anymore"
|
||||
@@ -854,7 +857,7 @@ client
|
||||
return
|
||||
else
|
||||
H.verbs += verb
|
||||
|
||||
|
||||
else if(href_list["remverb"])
|
||||
if(!check_rights(R_DEBUG|R_DEV)) return
|
||||
|
||||
@@ -872,7 +875,7 @@ client
|
||||
else
|
||||
H.verbs -= verb
|
||||
|
||||
|
||||
|
||||
else if(href_list["fix_nano"])
|
||||
if(!check_rights(R_DEBUG)) return
|
||||
|
||||
@@ -881,11 +884,11 @@ client
|
||||
if(!istype(H) || !H.client)
|
||||
usr << "This can only be done on mobs with clients"
|
||||
return
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
nanomanager.send_resources(H.client)
|
||||
|
||||
|
||||
usr << "Resource files sent"
|
||||
H << "Your NanoUI Resource files have been refreshed"
|
||||
|
||||
|
||||
@@ -69,6 +69,7 @@ datum/mind
|
||||
|
||||
proc/transfer_to(mob/living/new_character)
|
||||
if(!istype(new_character))
|
||||
msg_scopes("transfer_to(): Some idiot has tried to transfer_to() a non mob/living mob.")
|
||||
world.log << "## DEBUG: transfer_to(): Some idiot has tried to transfer_to() a non mob/living mob. Please inform Carn"
|
||||
if(current) //remove ourself from our old body's mind variable
|
||||
if(changeling)
|
||||
@@ -1229,6 +1230,18 @@ datum/mind
|
||||
// fail |= !ticker.mode.equip_traitor(current, 1)
|
||||
fail |= !ticker.mode.equip_revolutionary(current)
|
||||
|
||||
//Look here again to make sure it works right -- SoundScopes
|
||||
proc/make_Vampire()
|
||||
if(!(src in ticker.mode.vampires))
|
||||
ticker.mode.vampires += src
|
||||
ticker.mode.grant_vampire_powers(current)
|
||||
special_role = "Vampire"
|
||||
current << "<B><font color='red'>Your powers are awoken. Your lust for blood grows... You are a Vampire!</font></B>"
|
||||
log_admin("[key_name_admin(usr)] has vampired [current].")
|
||||
if (!config.objectives_disabled)
|
||||
ticker.mode.forge_vampire_objectives(src)
|
||||
ticker.mode.greet_vampire(src)
|
||||
|
||||
|
||||
// check whether this mind's mob has been brigged for the given duration
|
||||
// have to call this periodically for the duration to work properly
|
||||
|
||||
@@ -46,7 +46,7 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin
|
||||
usr << "\red You shouldn't have this spell! Something's wrong."
|
||||
return 0
|
||||
|
||||
if(usr.z == 2 && !centcomm_cancast) //Certain spells are not allowed on the centcomm zlevel
|
||||
if(usr.z == 2 && !centcomm_cancast || usr.weakened > 100) //Certain spells are not allowed on the centcomm zlevel
|
||||
return 0
|
||||
|
||||
if(!skipcharge)
|
||||
|
||||
@@ -60,9 +60,10 @@
|
||||
else
|
||||
break
|
||||
|
||||
if(!success)
|
||||
if(target.weakened > 100)//if you are megastunned by the isocube, there is no escape
|
||||
target <<"An outside force prevents you from teleporting."
|
||||
else if(!success)
|
||||
target.loc = pick(L)
|
||||
|
||||
return
|
||||
|
||||
/obj/effect/proc_holder/spell/targeted/area_teleport/invocation(area/chosenarea = null)
|
||||
@@ -78,5 +79,4 @@
|
||||
playsound(usr.loc, pick('sound/misc/null.ogg','sound/misc/null.ogg'), 100, 1)
|
||||
if("whisper")
|
||||
usr.whisper("[invocation] [uppertext(chosenarea.name)]")
|
||||
|
||||
return
|
||||
+103
-11
@@ -43,6 +43,18 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
|
||||
group = "Security"
|
||||
hidden = 1
|
||||
|
||||
/datum/supply_packs/forensics
|
||||
name = "Auxiliary forensic tools"
|
||||
contains = list(/obj/item/weapon/storage/box/swabs,
|
||||
/obj/item/weapon/storage/box/swabs,
|
||||
/obj/item/weapon/storage/box/swabs,
|
||||
/obj/item/weapon/storage/box/slides,
|
||||
/obj/item/weapon/reagent_containers/spray/luminol)
|
||||
cost = 15
|
||||
containertype = /obj/structure/closet/crate
|
||||
containername = "Auxiliary forensic tools"
|
||||
group = "Security"
|
||||
|
||||
/datum/supply_packs/food
|
||||
name = "Kitchen supply crate"
|
||||
contains = list(/obj/item/weapon/reagent_containers/food/snacks/flour,
|
||||
@@ -724,17 +736,15 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
|
||||
|
||||
/datum/supply_packs/shotgunammo
|
||||
name = "Shotgun shells"
|
||||
contains = list(/obj/item/ammo_casing/shotgun,
|
||||
/obj/item/ammo_casing/shotgun,
|
||||
/obj/item/ammo_casing/shotgun,
|
||||
/obj/item/ammo_casing/shotgun,
|
||||
/obj/item/ammo_casing/shotgun,
|
||||
/obj/item/ammo_casing/shotgun,
|
||||
/obj/item/ammo_casing/shotgun,
|
||||
/obj/item/ammo_casing/shotgun,
|
||||
/obj/item/ammo_casing/shotgun,
|
||||
/obj/item/ammo_casing/shotgun)
|
||||
cost = 20
|
||||
contains = list(/obj/item/ammo_magazine/shotgun,
|
||||
/obj/item/ammo_magazine/shotgun,
|
||||
/obj/item/ammo_magazine/shotgun,
|
||||
/obj/item/ammo_magazine/shotgun,
|
||||
/obj/item/ammo_magazine/shotgun/beanbag,
|
||||
/obj/item/ammo_magazine/shotgun/beanbag,
|
||||
/obj/item/ammo_magazine/shotgun/incendiary,
|
||||
/obj/item/ammo_magazine/shotgun/incendiary)
|
||||
cost = 40
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
containername = "Shotgun shells"
|
||||
access = access_armory
|
||||
@@ -1112,6 +1122,88 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
|
||||
access = access_hydroponics
|
||||
group = "Hydroponics"
|
||||
|
||||
|
||||
//My foray into encryption key crates. - Duck
|
||||
/datum/supply_packs/sec_keys
|
||||
name = "Security Encryption Keys"
|
||||
contains = list(/obj/item/device/encryptionkey/headset_sec,
|
||||
/obj/item/device/encryptionkey/headset_sec,
|
||||
/obj/item/device/encryptionkey/headset_sec,
|
||||
/obj/item/device/encryptionkey/headset_sec,
|
||||
/obj/item/device/encryptionkey/headset_sec)
|
||||
cost = 20
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
containername = "Security Encryption Keys"
|
||||
group = "Operations"
|
||||
access = access_security
|
||||
|
||||
/datum/supply_packs/sci_keys
|
||||
name = "Science Encryption Keys"
|
||||
contains = list(/obj/item/device/encryptionkey/headset_sci,
|
||||
/obj/item/device/encryptionkey/headset_sci,
|
||||
/obj/item/device/encryptionkey/headset_sci,
|
||||
/obj/item/device/encryptionkey/headset_sci,
|
||||
/obj/item/device/encryptionkey/headset_sci)
|
||||
cost = 20
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
containername = "Science Encryption Keys"
|
||||
group = "Operations"
|
||||
access = access_research
|
||||
|
||||
/datum/supply_packs/eng_keys
|
||||
name = "Engineering Encryption Keys"
|
||||
contains = list(/obj/item/device/encryptionkey/headset_eng,
|
||||
/obj/item/device/encryptionkey/headset_eng,
|
||||
/obj/item/device/encryptionkey/headset_eng,
|
||||
/obj/item/device/encryptionkey/headset_eng,
|
||||
/obj/item/device/encryptionkey/headset_eng)
|
||||
cost = 20
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
containername = "Engineering Encryption Keys"
|
||||
group = "Operations"
|
||||
access = access_engine
|
||||
|
||||
/datum/supply_packs/med_keys
|
||||
name = "Medical Encryption Keys"
|
||||
contains = list(/obj/item/device/encryptionkey/headset_med,
|
||||
/obj/item/device/encryptionkey/headset_med,
|
||||
/obj/item/device/encryptionkey/headset_med,
|
||||
/obj/item/device/encryptionkey/headset_med,
|
||||
/obj/item/device/encryptionkey/headset_med)
|
||||
cost = 20
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
containername = "Medical Encryption Keys"
|
||||
group = "Operations"
|
||||
access = access_medical
|
||||
|
||||
|
||||
/datum/supply_packs/cargo_keys
|
||||
name = "Cargo Encryption Keys"
|
||||
contains = list(/obj/item/device/encryptionkey/headset_cargo,
|
||||
/obj/item/device/encryptionkey/headset_cargo,
|
||||
/obj/item/device/encryptionkey/headset_cargo,
|
||||
/obj/item/device/encryptionkey/headset_cargo,
|
||||
/obj/item/device/encryptionkey/headset_cargo)
|
||||
cost = 20
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
containername = "Cargo Encryption Keys"
|
||||
group = "Operations"
|
||||
access = access_cargo
|
||||
|
||||
/datum/supply_packs/head_keys
|
||||
name = "Head Encryption Keys"
|
||||
contains = list(/obj/item/device/encryptionkey/heads/captain,
|
||||
/obj/item/device/encryptionkey/heads/rd,
|
||||
/obj/item/device/encryptionkey/heads/hos,
|
||||
/obj/item/device/encryptionkey/heads/ce,
|
||||
/obj/item/device/encryptionkey/heads/cmo,
|
||||
/obj/item/device/encryptionkey/heads/hop)
|
||||
cost = 50
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
containername = "Head Encryption Keys"
|
||||
group = "Operations"
|
||||
access = access_heads
|
||||
|
||||
/*
|
||||
*Skull's additions to satisfy the cravings of any atmospheric tech begin here.
|
||||
*/
|
||||
|
||||
+2
-2
@@ -6,6 +6,7 @@
|
||||
var/list/fingerprintshidden
|
||||
var/fingerprintslast = null
|
||||
var/list/blood_DNA
|
||||
var/list/stored_DNA = list()
|
||||
var/blood_color
|
||||
var/last_bumped = 0
|
||||
var/pass_flags = 0
|
||||
@@ -417,7 +418,6 @@ its easier to just keep the beam vertical.
|
||||
if(toxvomit)
|
||||
this.icon_state = "vomittox_[pick(1,4)]"
|
||||
|
||||
|
||||
/atom/proc/clean_blood()
|
||||
src.germ_level = 0
|
||||
if(istype(blood_DNA, /list))
|
||||
@@ -442,4 +442,4 @@ its easier to just keep the beam vertical.
|
||||
return 0
|
||||
|
||||
/atom/proc/checkpass(passflag)
|
||||
return pass_flags&passflag
|
||||
return pass_flags&passflag
|
||||
@@ -51,13 +51,16 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon"
|
||||
var/list/datum/mind/possible_changelings = get_players_for_role(BE_CHANGELING)
|
||||
|
||||
for(var/datum/mind/player in possible_changelings)
|
||||
//This could be the fuckup with game start
|
||||
if(player.current.client.prefs.species == "Machine") //Removing ipc's
|
||||
possible_changelings -= player
|
||||
msg_scopes("[player.key] has an invalid mob for this role.")
|
||||
continue
|
||||
for(var/job in restricted_jobs)//Removing robots from the list
|
||||
if(player.assigned_role == job)
|
||||
possible_changelings -= player
|
||||
continue
|
||||
//This could be the fuckup with game start
|
||||
// if(player.current.isipc()) //Removing ipc's
|
||||
// possible_changelings -= player
|
||||
msg_scopes("[player.key] has an invalid job for this role.")
|
||||
break
|
||||
|
||||
changeling_amount = 1 + round(num_players() / 10)
|
||||
|
||||
|
||||
@@ -161,6 +161,7 @@
|
||||
switch(stage)
|
||||
if(1)
|
||||
src << "<span class='notice'>This creature is compatible. We must hold still...</span>"
|
||||
src.visible_message("<span class='warning'>[src]'s skin begins to shift and squirm!</span>")
|
||||
if(2)
|
||||
src << "<span class='notice'>We extend a proboscis.</span>"
|
||||
src.visible_message("<span class='warning'>[src] extends a proboscis!</span>")
|
||||
@@ -460,7 +461,7 @@
|
||||
// let us move again
|
||||
C.update_canmove()
|
||||
|
||||
// re-add out changeling powers
|
||||
// re-add our changeling powers
|
||||
C.make_changeling()
|
||||
|
||||
// sending display messages
|
||||
@@ -492,12 +493,12 @@
|
||||
//Recover from stuns.
|
||||
/mob/proc/changeling_unstun()
|
||||
set category = "Changeling"
|
||||
set name = "Epinephrine Sacs (45)"
|
||||
set name = "Epinephrine Sacs (20)"
|
||||
set desc = "Removes all stuns"
|
||||
|
||||
var/datum/changeling/changeling = changeling_power(45,0,100,UNCONSCIOUS)
|
||||
if(!changeling) return 0
|
||||
changeling.chem_charges -= 45
|
||||
changeling.chem_charges -= 20
|
||||
|
||||
var/mob/living/carbon/human/C = src
|
||||
C.stat = 0
|
||||
@@ -505,6 +506,7 @@
|
||||
C.SetStunned(0)
|
||||
C.SetWeakened(0)
|
||||
C.lying = 0
|
||||
C.setHalLoss(0)
|
||||
C.update_canmove()
|
||||
|
||||
src.verbs -= /mob/proc/changeling_unstun
|
||||
@@ -567,6 +569,7 @@
|
||||
C.adjustToxLoss(-10)
|
||||
C.adjustOxyLoss(-10)
|
||||
C.adjustFireLoss(-10)
|
||||
C.adjustHalLoss(-10)
|
||||
sleep(10)
|
||||
|
||||
src.verbs -= /mob/proc/changeling_rapidregen
|
||||
@@ -682,7 +685,7 @@ var/list/datum/dna/hivemind_bank = list()
|
||||
return 0
|
||||
|
||||
//Handles the general sting code to reduce on copypasta (seeming as somebody decided to make SO MANY dumb abilities)
|
||||
/mob/proc/changeling_sting(var/required_chems=0, var/verb_path)
|
||||
/mob/proc/changeling_sting(var/required_chems=0, var/verb_path, var/stealthy = 0)
|
||||
var/datum/changeling/changeling = changeling_power(required_chems)
|
||||
if(!changeling) return
|
||||
|
||||
@@ -691,6 +694,7 @@ var/list/datum/dna/hivemind_bank = list()
|
||||
victims += C
|
||||
var/mob/living/carbon/T = input(src, "Who will we sting?") as null|anything in victims
|
||||
|
||||
|
||||
if(!T) return
|
||||
if(!(T in view(changeling.sting_range))) return
|
||||
if(!sting_can_reach(T, changeling.sting_range)) return
|
||||
@@ -701,9 +705,13 @@ var/list/datum/dna/hivemind_bank = list()
|
||||
src.verbs -= verb_path
|
||||
spawn(10) src.verbs += verb_path
|
||||
|
||||
src << "<span class='notice'>We stealthily sting [T].</span>"
|
||||
|
||||
if(stealthy == 1)
|
||||
src << "<span class='notice'>We stealthily sting [T].</span>"
|
||||
// T << "<span class='warning'>You feel a tiny prick.</span>"
|
||||
else
|
||||
src.visible_message(pick("<span class='warning'>[src]'s eyes balloon and burst out in a welter of blood, burrowing into [T]!</span>", "<span class='warning'>[src]'s arm rapidly shifts into a giant scorpion-stinger and stabs into [T]!</span>", "<span class='warning'>[src]'s throat lengthens and twists before vomitting a chunky red spew all over [T]!</span>", "<span class='warning'>[src]'s tongue stretches an impossible length and stabs into [T]!</span>", "<span class='warning'>[src] sneezes a cloud of shrieking spiders at [T]!</span>", "<span class='warning'>[src] erupts a grotesque tail and impales [T]!</span>", "<span class='warning'>[src]'s chin skin bulges and tears, launching a bone-dart at [T]!</span>"))
|
||||
if(!T.mind || !T.mind.changeling) return T //T will be affected by the sting
|
||||
T << "<span class='warning'>You feel a tiny prick.</span>"
|
||||
return
|
||||
|
||||
|
||||
@@ -712,7 +720,7 @@ var/list/datum/dna/hivemind_bank = list()
|
||||
set name = "Hallucination Sting (15)"
|
||||
set desc = "Causes terror in the target."
|
||||
|
||||
var/mob/living/carbon/T = changeling_sting(15,/mob/proc/changeling_lsdsting)
|
||||
var/mob/living/carbon/T = changeling_sting(15,/mob/proc/changeling_lsdsting, 1)
|
||||
if(!T) return 0
|
||||
spawn(rand(300,600))
|
||||
if(T) T.hallucination += 400
|
||||
@@ -724,7 +732,7 @@ var/list/datum/dna/hivemind_bank = list()
|
||||
set name = "Silence sting (10)"
|
||||
set desc="Sting target"
|
||||
|
||||
var/mob/living/carbon/T = changeling_sting(10,/mob/proc/changeling_silence_sting)
|
||||
var/mob/living/carbon/T = changeling_sting(10,/mob/proc/changeling_silence_sting, 1)
|
||||
if(!T) return 0
|
||||
T.silent += 30
|
||||
feedback_add_details("changeling_powers","SS")
|
||||
@@ -735,7 +743,7 @@ var/list/datum/dna/hivemind_bank = list()
|
||||
set name = "Blind sting (20)"
|
||||
set desc="Sting target"
|
||||
|
||||
var/mob/living/carbon/T = changeling_sting(20,/mob/proc/changeling_blind_sting)
|
||||
var/mob/living/carbon/T = changeling_sting(20,/mob/proc/changeling_blind_sting, 0)
|
||||
if(!T) return 0
|
||||
T << "<span class='danger'>Your eyes burn horrificly!</span>"
|
||||
T.disabilities |= NEARSIGHTED
|
||||
@@ -750,7 +758,7 @@ var/list/datum/dna/hivemind_bank = list()
|
||||
set name = "Deaf sting (5)"
|
||||
set desc="Sting target:"
|
||||
|
||||
var/mob/living/carbon/T = changeling_sting(5,/mob/proc/changeling_deaf_sting)
|
||||
var/mob/living/carbon/T = changeling_sting(5,/mob/proc/changeling_deaf_sting, 0)
|
||||
if(!T) return 0
|
||||
T << "<span class='danger'>Your ears pop and begin ringing loudly!</span>"
|
||||
T.sdisabilities |= DEAF
|
||||
@@ -763,7 +771,7 @@ var/list/datum/dna/hivemind_bank = list()
|
||||
set name = "Paralysis sting (30)"
|
||||
set desc="Sting target"
|
||||
|
||||
var/mob/living/carbon/T = changeling_sting(30,/mob/proc/changeling_paralysis_sting)
|
||||
var/mob/living/carbon/T = changeling_sting(30,/mob/proc/changeling_paralysis_sting, 0)
|
||||
if(!T) return 0
|
||||
T << "<span class='danger'>Your muscles begin to painfully tighten.</span>"
|
||||
T.Weaken(20)
|
||||
@@ -791,7 +799,7 @@ var/list/datum/dna/hivemind_bank = list()
|
||||
if(!chosen_dna)
|
||||
return
|
||||
|
||||
var/mob/living/carbon/T = changeling_sting(40,/mob/proc/changeling_transformation_sting)
|
||||
var/mob/living/carbon/T = changeling_sting(40,/mob/proc/changeling_transformation_sting, 1)
|
||||
if(!T) return 0
|
||||
if((HUSK in T.mutations) || (!ishuman(T) && !ismonkey(T)))
|
||||
src << "<span class='warning'>Our sting appears ineffective against its DNA.</span>"
|
||||
@@ -809,9 +817,9 @@ var/list/datum/dna/hivemind_bank = list()
|
||||
set name = "Unfat sting (5)"
|
||||
set desc = "Sting target"
|
||||
|
||||
var/mob/living/carbon/T = changeling_sting(5,/mob/proc/changeling_unfat_sting)
|
||||
var/mob/living/carbon/T = changeling_sting(5,/mob/proc/changeling_unfat_sting, 0)
|
||||
if(!T) return 0
|
||||
T << "<span class='danger'>you feel a small prick as stomach churns violently and you become to feel skinnier.</span>"
|
||||
T << "<span class='danger'>Your stomach churns violently before you suddenly become skinnier.</span>"
|
||||
T.overeatduration = 0
|
||||
T.nutrition -= 100
|
||||
feedback_add_details("changeling_powers","US")
|
||||
@@ -822,7 +830,7 @@ var/list/datum/dna/hivemind_bank = list()
|
||||
set name = "Death Sting (40)"
|
||||
set desc = "Causes spasms onto death."
|
||||
|
||||
var/mob/living/carbon/T = changeling_sting(40,/mob/proc/changeling_DEATHsting)
|
||||
var/mob/living/carbon/T = changeling_sting(40,/mob/proc/changeling_DEATHsting, 0)
|
||||
if(!T) return 0
|
||||
T << "<span class='danger'>You feel a small prick and your chest becomes tight.</span>"
|
||||
T.silent = 10
|
||||
@@ -831,7 +839,7 @@ var/list/datum/dna/hivemind_bank = list()
|
||||
if(T.reagents) T.reagents.add_reagent("lexorin", 40)
|
||||
|
||||
//Becase a deadly powerful attack should be logged
|
||||
msg_admin_attack("[usr.name] ([usr.ckey]) Death Stung [T.name] ([T.ckey])")
|
||||
msg_admin_attack("[usr.name] ([usr.ckey]) Death Stung [T.name] ([T.ckey]) - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[usr.x];Y=[usr.y];Z=[usr.z]'>JMP</a>")
|
||||
usr.attack_log += text("\[[time_stamp()]\] <font color='red'>Death stung [T.name] ([T.ckey])</font>")
|
||||
T.attack_log += text("\[[time_stamp()]\] <font color='orange'>Was death stung by [usr.name] ([usr.ckey])</font>")
|
||||
feedback_add_details("changeling_powers","DTHS")
|
||||
@@ -848,7 +856,7 @@ var/list/datum/dna/hivemind_bank = list()
|
||||
if(!changeling)
|
||||
return 0
|
||||
|
||||
var/mob/living/carbon/T = changeling_sting(40, /mob/proc/changeling_extract_dna_sting)
|
||||
var/mob/living/carbon/T = changeling_sting(40, /mob/proc/changeling_extract_dna_sting, 1)
|
||||
if(!T) return 0
|
||||
|
||||
T.dna.real_name = T.real_name
|
||||
|
||||
@@ -68,6 +68,7 @@
|
||||
for(var/datum/mind/player in cultists_possible)
|
||||
for(var/job in restricted_jobs)//Removing heads and such from the list
|
||||
if(player.assigned_role == job)
|
||||
msg_scopes("[player.key] has an invalid job for this role.")
|
||||
cultists_possible -= player
|
||||
|
||||
for(var/cultists_number = 1 to max_cultists_to_start)
|
||||
|
||||
@@ -86,6 +86,8 @@
|
||||
continue
|
||||
S.charge = S.capacity
|
||||
S.output = 200000
|
||||
spawn(600)
|
||||
S.output = S.last_output
|
||||
S.online = 1
|
||||
S.updateicon()
|
||||
S.power_change()
|
||||
|
||||
@@ -92,12 +92,16 @@ Implants;
|
||||
if((player.client)&&(player.ready))
|
||||
playerC++
|
||||
|
||||
msg_scopes("playerC: [playerC]")
|
||||
if(master_mode=="secret")
|
||||
msg_scopes("req [required_players_secret]")
|
||||
if(playerC >= required_players_secret)
|
||||
return 1
|
||||
else
|
||||
msg_scopes("req [required_players]")
|
||||
if(playerC >= required_players)
|
||||
return 1
|
||||
msg_scopes("Nope, players not here or something")
|
||||
return 0
|
||||
|
||||
|
||||
@@ -282,6 +286,7 @@ Implants;
|
||||
if(BE_CULTIST) roletext="cultist"
|
||||
if(BE_NINJA) roletext="ninja"
|
||||
if(BE_RAIDER) roletext="raider"
|
||||
if(BE_VAMPIRE) roletext="vampire"
|
||||
|
||||
// Assemble a list of active players without jobbans.
|
||||
for(var/mob/new_player/player in player_list)
|
||||
@@ -311,6 +316,7 @@ Implants;
|
||||
|
||||
// Remove candidates who want to be antagonist but have a job that precludes it
|
||||
if(restricted_jobs)
|
||||
msg_scopes("going through restricted jobs")
|
||||
for(var/datum/mind/player in candidates)
|
||||
for(var/job in restricted_jobs)
|
||||
if(player.assigned_role == job)
|
||||
|
||||
@@ -76,6 +76,7 @@ var/global/datum/controller/gameticker/ticker
|
||||
if((master_mode=="random") || (master_mode=="secret"))
|
||||
runnable_modes = config.get_runnable_modes()
|
||||
if (runnable_modes.len==0)
|
||||
msg_scopes("Well we can't continue runnable_modes.0")
|
||||
current_state = GAME_STATE_PREGAME
|
||||
world << "<B>Unable to choose playable game mode.</B> Reverting to pre-game lobby."
|
||||
return 0
|
||||
@@ -92,6 +93,7 @@ var/global/datum/controller/gameticker/ticker
|
||||
else
|
||||
src.mode = config.pick_mode(master_mode)
|
||||
if (!src.mode.can_start())
|
||||
msg_scopes("Well we can't continue can_start")
|
||||
world << "<B>Unable to start [mode.name].</B> Not enough players, [mode.required_players] players needed. Reverting to pre-game lobby."
|
||||
del(mode)
|
||||
current_state = GAME_STATE_PREGAME
|
||||
@@ -104,6 +106,7 @@ var/global/datum/controller/gameticker/ticker
|
||||
if(!can_continue)
|
||||
del(mode)
|
||||
current_state = GAME_STATE_PREGAME
|
||||
msg_scopes("Well we can't continue pre_setup")
|
||||
world << "<B>Error setting up [master_mode].</B> Reverting to pre-game lobby."
|
||||
job_master.ResetOccupations()
|
||||
return 0
|
||||
|
||||
@@ -296,6 +296,7 @@ mob/living/carbon/human/proc
|
||||
src << "\red Attempting to convert [M]..."
|
||||
log_admin("[src]([src.ckey]) attempted to convert [M].")
|
||||
message_admins("\red [src]([src.ckey]) attempted to convert [M].")
|
||||
message_mods("\red [src]([src.ckey]) attempted to convert [M].")
|
||||
var/choice = alert(M,"Asked by [src]: Do you want to join the revolution?","Align Thyself with the Revolution!","No!","Yes!")
|
||||
if(choice == "Yes!")
|
||||
ticker.mode:add_revolutionary(M.mind)
|
||||
|
||||
@@ -186,6 +186,7 @@
|
||||
src << "\red Attempting to convert [M]..."
|
||||
log_admin("[src]([src.ckey]) attempted to convert [M].")
|
||||
message_admins("\red [src]([src.ckey]) attempted to convert [M].")
|
||||
message_mods("\red [src]([src.ckey]) attempted to convert [M].")
|
||||
var/choice = alert(M,"Asked by [src]: Do you want to join the revolution?","Align Thyself with the Revolution!","No!","Yes!")
|
||||
if(choice == "Yes!")
|
||||
ticker.mode:add_revolutionary(M.mind)
|
||||
|
||||
@@ -52,16 +52,19 @@
|
||||
var/list/datum/mind/possible_vampires = get_players_for_role(BE_VAMPIRE)
|
||||
|
||||
for(var/datum/mind/player in possible_vampires)
|
||||
for(var/job in restricted_jobs)//Removing robots from the list
|
||||
//This could be the fuckup with game start
|
||||
if(player.current.client.prefs.species == "Machine")
|
||||
possible_vampires -= player
|
||||
msg_scopes("[player.key] has an invalid mob for this role.")
|
||||
continue
|
||||
for(var/job in restricted_jobs)
|
||||
if(player.assigned_role == job)
|
||||
possible_vampires -= player
|
||||
continue
|
||||
//This could be the fuckup with game start
|
||||
// if(player.current.isipc())
|
||||
// possible_vampires -= player
|
||||
msg_scopes("[player.key] has an invalid job for this role.")
|
||||
break
|
||||
|
||||
vampire_amount = max(1,round(num_players() / 10)) //1 + round(num_players() / 10)
|
||||
|
||||
msg_scopes("vampire_amount: [vampire_amount]")
|
||||
if(possible_vampires.len>0)
|
||||
for(var/i = 0, i < vampire_amount, i++)
|
||||
if(!possible_vampires.len) break
|
||||
@@ -71,6 +74,7 @@
|
||||
modePlayer += vampires
|
||||
return 1
|
||||
else
|
||||
msg_scopes("possible_vampires went poof")
|
||||
return 0
|
||||
|
||||
/datum/game_mode/vampire/post_setup()
|
||||
@@ -289,7 +293,7 @@ You are weak to holy things and starlight. Don't go into space and avoid the Cha
|
||||
blood = min(10, H.vessel.get_reagent_amount("blood"))// if they have less than 10 blood, give them the remnant else they get 10 blood
|
||||
src.mind.vampire.bloodtotal += blood
|
||||
src.mind.vampire.bloodusable += blood
|
||||
H.adjustCloneLoss(10) // beep boop 10 damage
|
||||
// H.adjustCloneLoss(10) // beep boop 10 damage //probably not necessary actually honestly okay
|
||||
else
|
||||
blood = min(5, H.vessel.get_reagent_amount("blood"))// The dead only give 5 bloods
|
||||
src.mind.vampire.bloodtotal += blood
|
||||
|
||||
@@ -98,12 +98,12 @@
|
||||
|
||||
/client/vampire/proc/vampire_hypnotise()
|
||||
set category = "Abilities"
|
||||
set name = "Hypnotise (20)"
|
||||
set name = "Hypnotise" // (20)
|
||||
set desc= "A piercing stare that incapacitates your victim for a good length of time."
|
||||
var/datum/mind/M = usr.mind
|
||||
if(!M) return
|
||||
|
||||
var/mob/living/carbon/C = M.current.vampire_active(20, 0, 1)
|
||||
var/mob/living/carbon/C = M.current.vampire_active(0, 0, 1) //(20, 0, 1)
|
||||
|
||||
if(!C) return
|
||||
if(C==usr)
|
||||
@@ -111,9 +111,9 @@
|
||||
return
|
||||
M.current.visible_message("<span class='warning'>[M]'s eyes flash briefly as he stares into [C.name]'s eyes</span>")
|
||||
// M.current.remove_vampire_blood(20) Moved to remove if it works only.
|
||||
if(M.current.vampire_power(20, 0))
|
||||
if(M.current.vampire_power(0, 0)) //if(M.current.vampire_power(20, 0))
|
||||
M.current.verbs -= /client/vampire/proc/vampire_hypnotise
|
||||
spawn(900)
|
||||
spawn(1200)
|
||||
M.current.verbs += /client/vampire/proc/vampire_hypnotise
|
||||
if(do_mob(M.current, C, 50))
|
||||
if(C.mind && C.mind.vampire)
|
||||
@@ -126,7 +126,7 @@
|
||||
C.Weaken(20)
|
||||
C.Stun(20)
|
||||
C.stuttering = 20
|
||||
M.current.remove_vampire_blood(20)
|
||||
// M.current.remove_vampire_blood(20)
|
||||
else
|
||||
M.current << "\red You broke your gaze."
|
||||
return
|
||||
@@ -175,7 +175,7 @@
|
||||
shutdown.speed = 1
|
||||
shutdown.stage = 2
|
||||
shutdown.clicks = 185
|
||||
msg_admin_attack("[usr.name] ([usr.ckey]) gave [C.name] ([C.ckey]) the shutdown disease")
|
||||
msg_admin_attack("[usr.name] ([usr.ckey]) gave [C.name] ([C.ckey]) the shutdown disease - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[C.x];Y=[C.y];Z=[C.z]'>JMP</a>")
|
||||
usr.attack_log += text("\[[time_stamp()]\] <font color='red'>Gave [C.name] ([C.ckey]) the shutdown disease</font>")
|
||||
C.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been given the shutdown disease by [usr.name] ([usr.ckey])</font>")
|
||||
infect_virus2(C,shutdown,0)
|
||||
@@ -354,7 +354,7 @@
|
||||
src << "\red You have successfully Enthralled [H.name]. <i>If they refuse to do as you say just adminhelp.</i>"
|
||||
ticker.mode.update_vampire_icons_added(H.mind)
|
||||
ticker.mode.update_vampire_icons_added(src.mind)
|
||||
msg_admin_attack("[name]([ckey]) has mind-slaved [H.name]([H.ckey]).")
|
||||
msg_admin_attack("[name]([ckey]) has mind-slaved [H.name]([H.ckey]) - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[H.x];Y=[H.y];Z=[H.z]'>JMP</a>.")
|
||||
|
||||
/client/vampire/proc/vampire_bats()
|
||||
set category = "Abilities"
|
||||
@@ -379,7 +379,7 @@
|
||||
new /mob/living/simple_animal/hostile/scarybat(M.current.loc, M.current)
|
||||
else // we had no good locations so make two on top of us
|
||||
new /mob/living/simple_animal/hostile/scarybat(M.current.loc, M.current)
|
||||
// new /mob/living/simple_animal/hostile/scarybat(M.current.loc, M.current)
|
||||
new /mob/living/simple_animal/hostile/scarybat(M.current.loc, M.current)
|
||||
M.current.remove_vampire_blood(60)
|
||||
M.current.verbs -= /client/vampire/proc/vampire_bats
|
||||
spawn(1200) M.current.verbs += /client/vampire/proc/vampire_bats
|
||||
@@ -387,13 +387,13 @@
|
||||
/client/vampire/proc/vampire_jaunt()
|
||||
//AHOY COPY PASTE INCOMING
|
||||
set category = "Abilities"
|
||||
set name = "Mist Form (45)"
|
||||
set name = "Mist Form (30)"
|
||||
set desc = "You take on the form of mist for a short period of time."
|
||||
var/jaunt_duration = 50 //in deciseconds
|
||||
var/datum/mind/M = usr.mind
|
||||
if(!M) return
|
||||
|
||||
if(M.current.vampire_power(45, 0))
|
||||
if(M.current.vampire_power(30, 0))
|
||||
if(M.current.buckled) M.current.buckled.unbuckle()
|
||||
spawn(0)
|
||||
var/originalloc = get_turf(M.current.loc)
|
||||
@@ -407,6 +407,8 @@
|
||||
animation.layer = 5
|
||||
animation.master = holder
|
||||
M.current.ExtinguishMob()
|
||||
M.current.weakened = 0
|
||||
M.current.stunned = 0
|
||||
if(M.current.buckled)
|
||||
M.current.buckled.unbuckle()
|
||||
flick("liquify",animation)
|
||||
@@ -437,7 +439,7 @@
|
||||
M.current.client.eye = M.current
|
||||
del(animation)
|
||||
del(holder)
|
||||
M.current.remove_vampire_blood(45)
|
||||
M.current.remove_vampire_blood(30)
|
||||
M.current.verbs -= /client/vampire/proc/vampire_jaunt
|
||||
spawn(600) M.current.verbs += /client/vampire/proc/vampire_jaunt
|
||||
|
||||
|
||||
@@ -95,11 +95,9 @@
|
||||
spawn_positions = 1
|
||||
supervisors = "the head of security"
|
||||
selection_color = "#ffeeee"
|
||||
alt_titles = list("Forensic Technician")
|
||||
|
||||
access = list(access_security, access_sec_doors, access_forensics_lockers, access_morgue, access_maint_tunnels, access_court)
|
||||
minimal_access = list(access_security, access_sec_doors, access_forensics_lockers, access_morgue, access_maint_tunnels, access_court)
|
||||
alt_titles = list("Forensic Technician")
|
||||
minimal_player_age = 3
|
||||
equip(var/mob/living/carbon/human/H)
|
||||
if(!H) return 0
|
||||
@@ -108,28 +106,64 @@
|
||||
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back)
|
||||
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_norm(H), slot_back)
|
||||
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/det(H), slot_w_uniform)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/brown(H), slot_shoes)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/navy/det(H), slot_w_uniform)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/laceup(H), slot_shoes)
|
||||
H.equip_to_slot_or_del(new /obj/item/device/pda/detective(H), slot_belt)
|
||||
/* var/obj/item/clothing/mask/cigarette/CIG = new /obj/item/clothing/mask/cigarette(H)
|
||||
CIG.light("")
|
||||
H.equip_to_slot_or_del(CIG, slot_wear_mask) */
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/gloves/black(H), slot_gloves)
|
||||
if(H.mind.role_alt_title && H.mind.role_alt_title == "Forensic Technician")
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/forensics/blue(H), slot_wear_suit)
|
||||
else
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/det_suit(H), slot_wear_suit)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/head/det_hat(H), slot_head)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/det_suit(H), slot_wear_suit)
|
||||
H.equip_to_slot_or_del(new /obj/item/weapon/lighter/zippo(H), slot_l_store)
|
||||
|
||||
if(H.backbag == 1)//Why cant some of these things spawn in his office?
|
||||
H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H), slot_r_hand)
|
||||
H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/evidence(H), slot_l_hand)
|
||||
H.equip_to_slot_or_del(new /obj/item/device/detective_scanner(H), slot_r_store)
|
||||
else
|
||||
H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack)
|
||||
H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/evidence(H), slot_in_backpack)
|
||||
H.equip_to_slot_or_del(new /obj/item/device/detective_scanner(H), slot_in_backpack)
|
||||
|
||||
return 1
|
||||
|
||||
/datum/job/forensics
|
||||
title = "Forensic Technician"
|
||||
flag = FORENSICS
|
||||
department_flag = ENGSEC
|
||||
faction = "Station"
|
||||
total_positions = 1
|
||||
spawn_positions = 1
|
||||
supervisors = "the head of security"
|
||||
selection_color = "#ffeeee"
|
||||
|
||||
access = list(access_security, access_sec_doors, access_forensics_lockers, access_morgue, access_maint_tunnels, access_court)
|
||||
minimal_access = list(access_security, access_sec_doors, access_forensics_lockers, access_morgue, access_maint_tunnels, access_court)
|
||||
alt_titles = list("Crime Scene Investigator")
|
||||
minimal_player_age = 3
|
||||
equip(var/mob/living/carbon/human/H)
|
||||
if(!H) return 0
|
||||
H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_sec(H), slot_l_ear)
|
||||
switch(H.backbag)
|
||||
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back)
|
||||
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_norm(H), slot_back)
|
||||
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/det/slob(H), slot_w_uniform)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/laceup(H), slot_shoes)
|
||||
H.equip_to_slot_or_del(new /obj/item/device/pda/detective(H), slot_belt)
|
||||
/* var/obj/item/clothing/mask/cigarette/CIG = new /obj/item/clothing/mask/cigarette(H)
|
||||
CIG.light("")
|
||||
H.equip_to_slot_or_del(CIG, slot_wear_mask) */
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/gloves/black(H), slot_gloves)
|
||||
if(H.mind.role_alt_title && H.mind.role_alt_title == "Crime Scene Investigator")
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/det_suit(H), slot_wear_suit)
|
||||
else
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/labcoat(H), slot_wear_suit)
|
||||
|
||||
if(H.backbag == 1)//Why cant some of these things spawn in his office?
|
||||
H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H), slot_r_hand)
|
||||
H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/evidence(H), slot_l_hand)
|
||||
else
|
||||
H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack)
|
||||
H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/evidence(H), slot_in_backpack)
|
||||
|
||||
return 1
|
||||
|
||||
|
||||
@@ -407,6 +407,10 @@ var/global/datum/controller/occupations/job_master
|
||||
S = locate("start*[rank]") // use old stype
|
||||
if(istype(S, /obj/effect/landmark/start) && istype(S.loc, /turf))
|
||||
H.loc = S.loc
|
||||
// Moving wheelchair if they have one
|
||||
if(H.buckled && istype(H.buckled, /obj/structure/stool/bed/chair/wheelchair))
|
||||
H.buckled.loc = H.loc
|
||||
H.buckled.dir = H.dir
|
||||
|
||||
//give them an account in the station database
|
||||
var/datum/money_account/M = create_account(H.real_name, rand(50,500)*10, null)
|
||||
|
||||
@@ -13,6 +13,7 @@ var/const/AI =(1<<8)
|
||||
var/const/CYBORG =(1<<9)
|
||||
var/const/INTERN_SEC =(1<<10)
|
||||
var/const/INTERN_ENG =(1<<11)
|
||||
var/const/FORENSICS =(1<<12)
|
||||
|
||||
|
||||
var/const/MEDSCI =(1<<1)
|
||||
@@ -113,6 +114,7 @@ var/list/security_positions = list(
|
||||
"Head of Security",
|
||||
"Warden",
|
||||
"Detective",
|
||||
"Forensic Technician",
|
||||
"Security Officer",
|
||||
"Security Cadet"
|
||||
)
|
||||
|
||||
@@ -66,6 +66,10 @@ var/global/list/autolathe_recipes_hidden = list( \
|
||||
new /obj/item/ammo_magazine/c45m(), \
|
||||
new /obj/item/ammo_casing/shotgun(), \
|
||||
new /obj/item/ammo_casing/shotgun/dart(), \
|
||||
new /obj/item/ammo_casing/shotgun/incendiary(), \
|
||||
new /obj/item/ammo_magazine/shotgun(), \
|
||||
new /obj/item/ammo_magazine/shotgun/beanbag(), \
|
||||
new /obj/item/ammo_magazine/shotgun/incendiary, \
|
||||
/* new /obj/item/weapon/shield/riot(), */ \
|
||||
)
|
||||
|
||||
|
||||
@@ -178,6 +178,9 @@
|
||||
playsound(loc, "sparks", 50, 1)
|
||||
visible_message("\blue The camera has been sliced apart by [] with an energy blade!")
|
||||
del(src)
|
||||
else if(istype(W, /obj/item/device/laser_pointer))
|
||||
var/obj/item/device/laser_pointer/L = W
|
||||
L.laser_act(src, user)
|
||||
else
|
||||
..()
|
||||
return
|
||||
|
||||
@@ -148,9 +148,11 @@
|
||||
emagged = !emagged
|
||||
if(emagged)
|
||||
message_admins("[key_name_admin(usr)] overrode the holodeck's safeties")
|
||||
message_mods("[key_name_admin(usr)] overrode the holodeck's safeties")
|
||||
log_game("[key_name(usr)] overrided the holodeck's safeties")
|
||||
else
|
||||
message_admins("[key_name_admin(usr)] restored the holodeck's safeties")
|
||||
message_mods("[key_name_admin(usr)] restored the holodeck's safeties")
|
||||
log_game("[key_name(usr)] restored the holodeck's safeties")
|
||||
|
||||
src.add_fingerprint(usr)
|
||||
@@ -447,7 +449,7 @@
|
||||
|
||||
if(isrobot(user))
|
||||
return
|
||||
|
||||
|
||||
..()
|
||||
|
||||
/obj/structure/table/holotable/wood
|
||||
|
||||
@@ -158,6 +158,7 @@
|
||||
new /obj/effect/spawner/newbomb/timer/syndicate(src.loc)
|
||||
new /obj/item/clothing/head/collectable/petehat(src.loc)
|
||||
message_admins("[key_name_admin(usr)] has outbombed Cuban Pete and been awarded a bomb.")
|
||||
message_mods("[key_name_admin(usr)] has outbombed Cuban Pete and been awarded a bomb.")
|
||||
log_game("[key_name_admin(usr)] has outbombed Cuban Pete and been awarded a bomb.")
|
||||
src.New()
|
||||
emagged = 0
|
||||
|
||||
@@ -552,6 +552,7 @@
|
||||
emergency_shuttle.incall(2)
|
||||
log_game("All the AIs, comm consoles and boards are destroyed. Shuttle called.")
|
||||
message_admins("All the AIs, comm consoles and boards are destroyed. Shuttle called.", 1)
|
||||
message_mods("All the AIs, comm consoles and boards are destroyed. Shuttle called.")
|
||||
captain_announce("The emergency shuttle has been called. It will arrive in [round(emergency_shuttle.timeleft()/60)] minutes.")
|
||||
world << sound('sound/AI/shuttlecalled.ogg')
|
||||
|
||||
|
||||
@@ -122,6 +122,7 @@
|
||||
if(src.check_access(I))
|
||||
if (!status)
|
||||
message_admins("\blue [key_name_admin(usr)] has initiated the global cyborg killswitch!")
|
||||
message_mods("\blue [key_name_admin(usr)] has initiated the global cyborg killswitch!")
|
||||
log_game("\blue [key_name(usr)] has initiated the global cyborg killswitch!")
|
||||
src.status = 1
|
||||
src.start_sequence()
|
||||
@@ -167,6 +168,7 @@
|
||||
|
||||
else
|
||||
message_admins("\blue [key_name_admin(usr)] detonated [R.name]!")
|
||||
message_mods("\blue [key_name_admin(usr)] detonated [R.name]!")
|
||||
log_game("\blue [key_name_admin(usr)] detonated [R.name]!")
|
||||
R.self_destruct()
|
||||
else
|
||||
@@ -180,6 +182,7 @@
|
||||
if(choice == "Confirm")
|
||||
if(R && istype(R))
|
||||
message_admins("\blue [key_name_admin(usr)] [R.canmove ? "locked down" : "released"] [R.name]!")
|
||||
message_mods("\blue [key_name_admin(usr)] [R.canmove ? "locked down" : "released"] [R.name]!")
|
||||
log_game("[key_name(usr)] [R.canmove ? "locked down" : "released"] [R.name]!")
|
||||
R.canmove = !R.canmove
|
||||
if (R.lockcharge)
|
||||
|
||||
@@ -324,6 +324,7 @@ obj/machinery/computer/cryopod/Topic(href, href_list)
|
||||
// Book keeping!
|
||||
log_admin("[key_name_admin(M)] has entered a stasis pod.")
|
||||
message_admins("\blue [key_name_admin(M)] has entered a stasis pod.")
|
||||
message_mods("\blue [key_name_admin(M)] has entered a stasis pod.")
|
||||
|
||||
//Despawning occurs when process() is called with an occupant without a client.
|
||||
src.add_fingerprint(M)
|
||||
|
||||
@@ -81,6 +81,14 @@
|
||||
else
|
||||
flick("door_deny", src)
|
||||
return
|
||||
if(istype(AM, /obj/structure/stool/bed/chair/wheelchair))
|
||||
var/obj/structure/stool/bed/chair/wheelchair/wheel = AM
|
||||
if(density)
|
||||
if(wheel.pulling && (src.allowed(wheel.pulling)))
|
||||
open()
|
||||
else
|
||||
flick("door_deny", src)
|
||||
return
|
||||
return
|
||||
|
||||
|
||||
|
||||
@@ -341,7 +341,11 @@ obj/machinery/hydroponics/proc/mutatespecie() // Mutagent produced a new plant!
|
||||
|
||||
else if ( istype(myseed, /obj/item/seeds/appleseed ))
|
||||
del(myseed)
|
||||
myseed = new /obj/item/seeds/goldappleseed
|
||||
switch(rand(1,100))
|
||||
if(1 to 50)
|
||||
myseed = new /obj/item/seeds/goldappleseed
|
||||
if(51 to 100)
|
||||
myseed = new /obj/item/seeds/poisonedappleseed
|
||||
|
||||
else if ( istype(myseed, /obj/item/seeds/berryseed ))
|
||||
del(myseed)
|
||||
|
||||
@@ -22,29 +22,24 @@
|
||||
if(istype(G)) // handle grabbed mob
|
||||
if(ismob(G.affecting))
|
||||
var/mob/living/GM = G.affecting
|
||||
for (var/mob/V in viewers(usr))
|
||||
V.show_message("[usr] starts pushing [GM.name] into the fryer.", 3)
|
||||
user.visible_message("<span class='warning'>[user] starts pushing [GM.name] into the fryer.</span>", "<span class='warning'>You try to force [GM.name] towards the fryer.</span>", "You hear a struggle.")
|
||||
|
||||
if(do_after(usr, 20))
|
||||
var/body_part = fry_mob_by_limb(GM, user.zone_sel.selecting)
|
||||
if(!body_part) //If you fry a valid part this will be set
|
||||
for (var/mob/V in viewers(usr))
|
||||
if(GM.sleeping||GM.resting)
|
||||
V.show_message("[GM.name] is to much of a dead weight to be place in the fryer")
|
||||
else
|
||||
V.show_message("[GM.name] breaks free.", 3)
|
||||
if(GM.sleeping||GM.resting)
|
||||
user.visible_message("[GM.name] falls limp.", "[GM.name] is to much of a dead weight to be place in the fryer", "You hear a thump.")
|
||||
else
|
||||
GM.visible_message("[GM.name] breaks free.", "You broke free from [user]'s grip", "You stop hearing a struggle.")
|
||||
return
|
||||
|
||||
for (var/mob/C in viewers(src))
|
||||
C.show_message("\red [GM.name]'s [body_part] has been placed in the [src] by [user].", 3)
|
||||
|
||||
user.visible_message("[GM.name]'s [body_part] has been placed in the [src] by [user]", "You place [GM.name]'s [body_part] in the fryer", "You hear a sizzling.")
|
||||
del(G)
|
||||
usr.attack_log += text("\[[time_stamp()]\] <font color='red'>Has placed [GM.name] ([GM.ckey]) in in the fryer.</font>")
|
||||
GM.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been fried by [usr.name] ([usr.ckey])</font>")
|
||||
msg_admin_attack("[usr] ([usr.ckey]) placed [GM] ([GM.ckey]) in a fryer. (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[usr.x];Y=[usr.y];Z=[usr.z]'>JMP</a>)")
|
||||
else
|
||||
for (var/mob/V in viewers(usr))
|
||||
V.show_message("[usr] broke free")
|
||||
GM.visible_message("[GM.name] breaks free.", "You broke free from [user]'s grip", "You stop hearing a struggle.")
|
||||
return
|
||||
|
||||
else
|
||||
@@ -65,42 +60,51 @@
|
||||
if("head")
|
||||
M.apply_damage(40, BURN, limb)
|
||||
M << "\red Your thoughts are overwritten by the pain, as searing hot oil encompasses your head."
|
||||
M.say("*scream")
|
||||
return "head"
|
||||
if("l_leg")
|
||||
M.apply_damage(20, BURN, limb)
|
||||
M.apply_damage(30, BURN, "l_foot")
|
||||
M << "\red Your thoughts are overwritten by the pain, as searing hot oil encompasses your left leg and foot."
|
||||
M.say("*scream")
|
||||
return "left leg"
|
||||
if("l_foot")
|
||||
M.apply_damage(20, BURN, limb)
|
||||
M << "\red Your thoughts are overwritten by the pain, as searing hot oil encompasses your left foot."
|
||||
M.say("*scream")
|
||||
return "left foot"
|
||||
if("r_leg")
|
||||
M.apply_damage(20, BURN, limb)
|
||||
M.apply_damage(30, BURN, "r_foot")
|
||||
M << "\red Your thoughts are overwritten by the pain, as searing hot oil encompasses your right leg and foot."
|
||||
M.say("*scream")
|
||||
return "right leg"
|
||||
if("r_foot")
|
||||
M.apply_damage(20, BURN, limb)
|
||||
M << "\red Your thoughts are overwritten by the pain, as searing hot oil encompasses your right foot."
|
||||
M.say("*scream")
|
||||
return "right foot"
|
||||
if("l_arm")
|
||||
M.apply_damage(20, BURN, limb)
|
||||
M.apply_damage(30, BURN, "l_hand")
|
||||
M << "\red Your thoughts are overwritten by the pain, as searing hot oil encompasses your left arm and hand."
|
||||
M.say("*scream")
|
||||
return "left arm"
|
||||
if("l_hand")
|
||||
M.apply_damage(20, BURN, limb)
|
||||
M << "\red Your thoughts are overwritten by the pain, as searing hot oil encompasses your left hand."
|
||||
M.say("*scream")
|
||||
return "left hand"
|
||||
if("r_arm")
|
||||
M.apply_damage(20, BURN, limb)
|
||||
M.apply_damage(30, BURN, "r_hand")
|
||||
M << "\red Your thoughts are overwritten by the pain, as searing hot oil encompasses your right arm and hand."
|
||||
M.say("*scream")
|
||||
return "right arm"
|
||||
if("r_hand")
|
||||
M.apply_damage(20, BURN, limb)
|
||||
M << "\red Your thoughts are overwritten by the pain, as searing hot oil encompasses your right hand."
|
||||
M.say("*scream")
|
||||
return "right hand"
|
||||
return null
|
||||
|
||||
|
||||
@@ -212,7 +212,7 @@
|
||||
if(src.occupant.client) // Gibbed a cow with a client in it? log that shit
|
||||
src.occupant.attack_log += "\[[time_stamp()]\] Was gibbed by <b>[user]/[user.ckey]</b>"
|
||||
user.attack_log += "\[[time_stamp()]\] Gibbed <b>[src.occupant]/[src.occupant.ckey]</b>"
|
||||
msg_admin_attack("\[[time_stamp()]\] <b>[key_name(user)]</b> gibbed <b>[key_name(src.occupant)]</b>")
|
||||
msg_admin_attack("\[[time_stamp()]\] <b>[key_name(user)]</b> gibbed <b>[key_name(src.occupant)]</b> - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[src.x];Y=[src.y];Z=[src.z]'>JMP</a>")
|
||||
|
||||
src.occupant.death(1)
|
||||
src.occupant.ghostize()
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
var/raised = 0 // if the turret cover is "open" and the turret is raised
|
||||
var/raising= 0 // if the turret is currently opening or closing its cover
|
||||
var/health = 80 // the turret's health
|
||||
var/locked = 1 // if the turret's behaviour control access is locked
|
||||
var/locked = 0 // if the turret's behaviour control access is locked
|
||||
|
||||
var/installation // the type of weapon installed
|
||||
var/gun_charge = 0 // the charge of the gun inserted
|
||||
@@ -66,7 +66,7 @@
|
||||
spark_system.attach(src)
|
||||
sleep(10)
|
||||
if(!installation)// if for some reason the turret has no gun (ie, admin spawned) it resorts to basic taser shots
|
||||
projectile = /obj/item/projectile/energy/electrode//holder for the projectile, here it is being set
|
||||
projectile = /obj/item/projectile/energy/electrode/high//holder for the projectile, here it is being set
|
||||
eprojectile = /obj/item/projectile/beam//holder for the projectile when emagged, if it is different
|
||||
reqpower = 200
|
||||
sound = 1
|
||||
@@ -128,13 +128,13 @@
|
||||
reqpower = 700
|
||||
|
||||
if(/obj/item/weapon/gun/energy/taser)
|
||||
projectile = /obj/item/projectile/energy/electrode
|
||||
projectile = /obj/item/projectile/energy/electrode/high
|
||||
eprojectile = projectile
|
||||
iconholder = 1
|
||||
reqpower = 200
|
||||
|
||||
if(/obj/item/weapon/gun/energy/stunrevolver)
|
||||
projectile = /obj/item/projectile/energy/electrode
|
||||
projectile = /obj/item/projectile/energy/electrode/high
|
||||
eprojectile = projectile
|
||||
iconholder = 1
|
||||
reqpower = 200
|
||||
@@ -169,8 +169,14 @@
|
||||
iconholder = null
|
||||
reqpower = 500
|
||||
|
||||
if(/obj/item/weapon/gun/energy/laser) //laser rifles are cool and all.
|
||||
projectile = /obj/item/projectile/beam //but captainlaser and retrolaser still use energy/laser pathing.
|
||||
eprojectile = projectile
|
||||
iconholder = null
|
||||
reqpower = 500
|
||||
|
||||
else // Energy gun shots
|
||||
projectile = /obj/item/projectile/energy/electrode// if it hasn't been emagged, it uses normal taser shots
|
||||
projectile = /obj/item/projectile/energy/electrode/high// if it hasn't been emagged, it uses normal taser shots
|
||||
eprojectile = /obj/item/projectile/beam//If it has, going to kill mode
|
||||
iconholder = 1
|
||||
egun = 1
|
||||
@@ -395,8 +401,8 @@ Status: []<BR>"},
|
||||
check_records=pick(0,1)
|
||||
criminals=pick(0,1)
|
||||
auth_weapons=pick(0,1)
|
||||
stun_all=pick(0,0,0,0,1) // stun_all is a pretty big deal, so it's least likely to get turned on
|
||||
if(prob(5)) emagged=1
|
||||
stun_all=pick(0,1) // stun_all is a pretty big deal, so it's least likely to get turned on //but think of the fun
|
||||
if(prob(50)) emagged=1
|
||||
on=0
|
||||
sleep(rand(60,600))
|
||||
if(!on)
|
||||
|
||||
@@ -322,7 +322,7 @@
|
||||
icon_state = "Shield_Gen"
|
||||
anchored = 0
|
||||
density = 1
|
||||
req_access = list(access_teleporter)
|
||||
req_access = list(access_research)
|
||||
var/active = 0
|
||||
var/power = 0
|
||||
var/state = 0
|
||||
@@ -330,7 +330,7 @@
|
||||
var/last_check = 0
|
||||
var/check_delay = 10
|
||||
var/recalc = 0
|
||||
var/locked = 1
|
||||
var/locked = 0
|
||||
var/destroyed = 0
|
||||
var/directwired = 1
|
||||
// var/maxshieldload = 200
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
var/list/viewingcode = list()
|
||||
var/obj/machinery/telecomms/server/SelectedServer
|
||||
|
||||
var/network = "NULL" // the network to probe
|
||||
var/network = "tcommsat" // the network to probe
|
||||
var/temp = "" // temporary feedback messages
|
||||
|
||||
var/storedcode = "" // code stored
|
||||
|
||||
@@ -233,7 +233,7 @@
|
||||
A.original = target
|
||||
use_power(500)
|
||||
else
|
||||
A = new /obj/item/projectile/energy/electrode( loc )
|
||||
A = new /obj/item/projectile/energy/electrode/high( loc )
|
||||
use_power(200)
|
||||
A.current = T
|
||||
A.yo = U.y - T.y
|
||||
|
||||
@@ -43,6 +43,9 @@
|
||||
for(var/atom/A in contents)
|
||||
A.clean_blood()
|
||||
|
||||
for(var/obj/item/clothing/C in contents)
|
||||
C.gsr = 0
|
||||
|
||||
for(var/obj/item/I in contents)
|
||||
I.decontaminate()
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
use_power = 1
|
||||
idle_power_usage = 20
|
||||
active_power_usage = 5000
|
||||
req_access = list(access_robotics)
|
||||
req_access = list(access_research)
|
||||
var/time_coeff = 1.5 //can be upgraded with research
|
||||
var/resource_coeff = 1.5 //can be upgraded with research
|
||||
var/list/resources = list(
|
||||
|
||||
@@ -86,7 +86,7 @@
|
||||
message_admins("A chemical smoke reaction has taken place in ([whereLink])[contained]. Last associated key is [carry.my_atom.fingerprintslast][more].", 0, 1)
|
||||
log_game("A chemical smoke reaction has taken place in ([where])[contained]. Last associated key is [carry.my_atom.fingerprintslast].")
|
||||
else
|
||||
message_admins("A chemical smoke reaction has taken place in ([whereLink]). No associated key.", 0, 1)
|
||||
message_admins("A chemical smoke reaction has taken place in ([whereLink])[contained]. No associated key.", 0, 1)
|
||||
log_game("A chemical smoke reaction has taken place in ([where])[contained]. No associated key.")
|
||||
|
||||
|
||||
|
||||
@@ -50,8 +50,15 @@ var/global/list/image/splatter_cache=list()
|
||||
return
|
||||
if(amount < 1)
|
||||
return
|
||||
if(invisibility != 0)
|
||||
return
|
||||
|
||||
if(perp.shoes)//Adding blood to shoes
|
||||
var/datum/organ/external/l_foot = perp.get_organ("l_foot")
|
||||
var/datum/organ/external/r_foot = perp.get_organ("r_foot")
|
||||
var/hasfeet = 1
|
||||
if((!l_foot || l_foot.status & ORGAN_DESTROYED) && (!r_foot || r_foot.status & ORGAN_DESTROYED))
|
||||
hasfeet = 0
|
||||
if(perp.shoes && !perp.buckled)//Adding blood to shoes
|
||||
perp.shoes.blood_color = basecolor
|
||||
perp.shoes:track_blood = max(amount,perp.shoes:track_blood)
|
||||
if(!perp.shoes.blood_overlay)
|
||||
@@ -62,16 +69,20 @@ var/global/list/image/splatter_cache=list()
|
||||
perp.shoes.overlays += perp.shoes.blood_overlay
|
||||
perp.shoes.blood_DNA |= blood_DNA.Copy()
|
||||
|
||||
else//Or feet
|
||||
else if (hasfeet)//Or feet
|
||||
perp.feet_blood_color = basecolor
|
||||
perp.track_blood = max(amount,perp.track_blood)
|
||||
if(!perp.feet_blood_DNA)
|
||||
perp.feet_blood_DNA = list()
|
||||
perp.feet_blood_DNA |= blood_DNA.Copy()
|
||||
else if (perp.buckled && istype(perp.buckled, /obj/structure/stool/bed/chair/wheelchair))
|
||||
var/obj/structure/stool/bed/chair/wheelchair/W = perp.buckled
|
||||
W.bloodiness = 4
|
||||
|
||||
perp.update_inv_shoes(1)
|
||||
amount--
|
||||
|
||||
|
||||
/obj/effect/decal/cleanable/blood/proc/dry()
|
||||
name = "dried [src.name]"
|
||||
desc = "It's dry and crusty. Someone is not doing their job."
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
var/image/blood_overlay = null //this saves our blood splatter overlay, which will be processed not to go over the edges of the sprite
|
||||
var/abstract = 0
|
||||
var/item_state = null
|
||||
var/wasbloody = 0
|
||||
var/r_speed = 1.0
|
||||
var/health = null
|
||||
var/burn_point = null
|
||||
@@ -103,7 +104,7 @@
|
||||
size = "huge"
|
||||
else
|
||||
//if ((CLUMSY in usr.mutations) && prob(50)) t = "funny-looking"
|
||||
usr << "This is a [src.blood_DNA ? "bloody " : ""]\icon[src][src.name]. It is a [size] item."
|
||||
usr << "This is a [src.blood_DNA ? "bloody " : ""][src.wasbloody == 2 ? "luminol covered " : ""]\icon[src][src.name]. It is a [size] item."
|
||||
if(src.desc)
|
||||
usr << src.desc
|
||||
return
|
||||
@@ -552,9 +553,21 @@
|
||||
. = ..()
|
||||
if(blood_overlay)
|
||||
overlays.Remove(blood_overlay)
|
||||
blood_overlay = null
|
||||
if(istype(src, /obj/item/clothing/gloves))
|
||||
var/obj/item/clothing/gloves/G = src
|
||||
G.transfer_blood = 0
|
||||
if(wasbloody == 2)
|
||||
wasbloody = 1
|
||||
return
|
||||
|
||||
/obj/item/proc/reveal_blood()
|
||||
if(wasbloody == 1)
|
||||
wasbloody = 2
|
||||
generate_blood_overlay()
|
||||
blood_overlay.color = "#007fff"
|
||||
/*blood_overlay.invisibility = INVISIBILITY_LUMINOL*/
|
||||
overlays += blood_overlay
|
||||
|
||||
|
||||
/obj/item/add_blood(mob/living/carbon/human/M as mob)
|
||||
@@ -578,6 +591,8 @@
|
||||
if(blood_DNA[M.dna.unique_enzymes])
|
||||
return 0 //already bloodied with this blood. Cannot add more.
|
||||
blood_DNA[M.dna.unique_enzymes] = M.dna.b_type
|
||||
stored_DNA[M.dna.unique_enzymes] = M.dna.b_type
|
||||
wasbloody = 1
|
||||
return 1 //we applied blood to the item
|
||||
|
||||
/obj/item/proc/generate_blood_overlay()
|
||||
|
||||
@@ -760,10 +760,12 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
detonate_act(src)
|
||||
log_admin("[key_name(U)] just attempted to blow up [P] with the Detomatix cartridge but failed, blowing themselves up")
|
||||
message_admins("[key_name_admin(U)] just attempted to blow up [P] with the Detomatix cartridge but failed.", 1)
|
||||
message_mods("[key_name_admin(U)] just attempted to blow up [P] with the Detomatix cartridge but failed.")
|
||||
else
|
||||
U.show_message("\blue Success!", 1)
|
||||
log_admin("[key_name(U)] just attempted to blow up [P] with the Detomatix cartridge and succeeded")
|
||||
message_admins("[key_name_admin(U)] just attempted to blow up [P] with the Detomatix cartridge and succeeded.", 1)
|
||||
message_mods("[key_name_admin(U)] just attempted to blow up [P] with the Detomatix cartridge and succeeded.")
|
||||
detonate_act(P)
|
||||
else
|
||||
U << "No charges left."
|
||||
|
||||
@@ -13,6 +13,8 @@
|
||||
var/times_used = 0 //Number of times it's been used.
|
||||
var/broken = 0 //Is the flash burnt out?
|
||||
var/last_used = 0 //last world.time it was used.
|
||||
var/flashready = 0 //overcharge flashes
|
||||
var/overcharge = 0 //overcharge check
|
||||
|
||||
/obj/item/device/flash/proc/clown_check(var/mob/user)
|
||||
if(user && (CLUMSY in user.mutations) && prob(50))
|
||||
@@ -51,7 +53,11 @@
|
||||
switch(times_used)
|
||||
if(0 to 5)
|
||||
last_used = world.time
|
||||
if(prob(times_used)) //if you use it 5 times in a minute it has a 10% chance to break!
|
||||
if(overcharge == 1)
|
||||
icon_state = "cellflashburnt"
|
||||
broken = 1
|
||||
user << "<span class='warning'>The bulb has burnt out!</span>"
|
||||
else if(prob(times_used)) //if you use it 5 times in a minute it has a 10% chance to break!
|
||||
broken = 1
|
||||
user << "<span class='warning'>The bulb has burnt out!</span>"
|
||||
icon_state = "flashburnt"
|
||||
@@ -65,6 +71,13 @@
|
||||
|
||||
if(iscarbon(M))
|
||||
var/safety = M:eyecheck()
|
||||
if(overcharge == 1)
|
||||
M.adjust_fire_stacks(5)
|
||||
M.IgniteMob()
|
||||
user.visible_message("<span class='notice'>[user]'s supercharged flash ignites [M]!</span>")
|
||||
// broken = 1
|
||||
// if(overcharge == 1)
|
||||
// icon_state = "cellflashburnt"
|
||||
if(safety <= 0)
|
||||
M.Weaken(10)
|
||||
flick("e_flash", M.flash)
|
||||
@@ -90,7 +103,11 @@
|
||||
flashfail = 1
|
||||
|
||||
else if(issilicon(M))
|
||||
M.Weaken(rand(5,10))
|
||||
M.Weaken(10) //why are robots more resistant to flashes than humans when it is their only weakness. besides ion rifles. used to be rand(5,10). changed to 10.
|
||||
if(overcharge == 1)
|
||||
M.adjust_fire_stacks(5)
|
||||
M.IgniteMob()
|
||||
user.visible_message("<span class='notice'>[user]'s supercharged flash ignites [M]!</span>")
|
||||
else
|
||||
flashfail = 1
|
||||
|
||||
@@ -106,7 +123,10 @@
|
||||
del(animation)
|
||||
|
||||
if(!flashfail)
|
||||
flick("flash2", src)
|
||||
if(overcharge == 0)
|
||||
flick("flash2", src)
|
||||
else if(overcharge == 1)
|
||||
flick("cellflash2", src)
|
||||
if(!issilicon(M))
|
||||
|
||||
user.visible_message("<span class='disarm'>[user] blinds [M] with the flash!</span>")
|
||||
@@ -134,7 +154,11 @@
|
||||
//It will never break on the first use.
|
||||
switch(times_used)
|
||||
if(0 to 5)
|
||||
if(prob(2*times_used)) //if you use it 5 times in a minute it has a 10% chance to break!
|
||||
if(overcharge == 1)
|
||||
icon_state = "cellflashburnt"
|
||||
broken = 1
|
||||
user << "<span class='warning'>The bulb has burnt out!</span>"
|
||||
else if(prob(2*times_used)) //if you use it 5 times in a minute it has a 10% chance to break!
|
||||
broken = 1
|
||||
user << "<span class='warning'>The bulb has burnt out!</span>"
|
||||
icon_state = "flashburnt"
|
||||
@@ -144,7 +168,10 @@
|
||||
user.show_message("<span class='warning'>*click* *click*</span>", 2)
|
||||
return
|
||||
playsound(src.loc, 'sound/weapons/flash.ogg', 100, 1)
|
||||
flick("flash2", src)
|
||||
if(overcharge == 0)
|
||||
flick("flash2", src)
|
||||
else if(overcharge == 1)
|
||||
flick("cellflash2", src)
|
||||
if(user && isrobot(user))
|
||||
spawn(0)
|
||||
var/atom/movable/overlay/animation = new(user.loc)
|
||||
@@ -176,7 +203,10 @@
|
||||
if(0 to 5)
|
||||
if(prob(2*times_used))
|
||||
broken = 1
|
||||
icon_state = "flashburnt"
|
||||
if(overcharge == 1)
|
||||
icon_state = "cellflashburnt"
|
||||
else if(overcharge == 0)
|
||||
icon_state = "flashburnt"
|
||||
return
|
||||
times_used++
|
||||
if(istype(loc, /mob/living/carbon))
|
||||
@@ -202,11 +232,35 @@
|
||||
if(!broken)
|
||||
broken = 1
|
||||
user << "\red The bulb has burnt out!"
|
||||
icon_state = "flashburnt"
|
||||
if(overcharge == 0)
|
||||
icon_state = "flashburnt"
|
||||
else if(overcharge == 1)
|
||||
icon_state = "cellflashburnt"
|
||||
|
||||
/obj/item/device/flash/synthetic/attack_self(mob/living/carbon/user as mob, flag = 0, emp = 0)
|
||||
..()
|
||||
if(!broken)
|
||||
broken = 1
|
||||
user << "\red The bulb has burnt out!"
|
||||
icon_state = "flashburnt"
|
||||
if(overcharge == 0)
|
||||
icon_state = "flashburnt"
|
||||
else if(overcharge == 1)
|
||||
icon_state = "cellflashburnt"
|
||||
|
||||
/obj/item/device/flash/attackby(obj/item/W, mob/user)
|
||||
if(istype(W,/obj/item/weapon/cell))
|
||||
if(flashready == 1 && overcharge == 0)
|
||||
del(W)
|
||||
overcharge = 1
|
||||
icon_state = "cellflash"
|
||||
user << "\red You attach the cell to the flash."
|
||||
name = "cell/flash assembly"
|
||||
desc = "When blinding and being an asshole just isn't enough."
|
||||
else if(overcharge == 1)
|
||||
user << "\red This flash already has a cell attached!"
|
||||
else if(istype(W, /obj/item/weapon/screwdriver))
|
||||
if(overcharge == 0)
|
||||
user << "\red You ready the flash for modification."
|
||||
flashready = 1
|
||||
else if(flashready == 1)
|
||||
user << "\red This flash has already been modified!."
|
||||
@@ -0,0 +1,136 @@
|
||||
/obj/item/device/isocube
|
||||
name = "Isocube"
|
||||
icon = 'icons/obj/wizard.dmi'
|
||||
icon_state = "soulstone"
|
||||
item_state = "electronic"
|
||||
desc = "two weeks in the isocubes."
|
||||
w_class = 3
|
||||
unacidable = 1
|
||||
flags = FPRINT | TABLEPASS
|
||||
slot_flags = SLOT_BELT
|
||||
origin_tech = "bluespace=4;materials=4"
|
||||
|
||||
|
||||
|
||||
//////////////////////////////Capturing////////////////////////////////////////////////////////
|
||||
|
||||
attack(mob/living/carbon/human/M as mob, mob/user as mob)
|
||||
if(!istype(M, /mob/living/carbon/human))//If target is not a human.
|
||||
return ..()
|
||||
if(istype(M, /mob/living/carbon/human/dummy))
|
||||
return..()
|
||||
|
||||
if(M.has_brain_worms()) //Borer stuff - RR
|
||||
user << "<span class='warning'>The isocube spits out an error message: multiple lifeforms detected.</span>"
|
||||
return..()
|
||||
|
||||
M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been imprisoned with [src.name] by [user.name] ([user.ckey])</font>")
|
||||
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [src.name] to imprison [M.name] ([M.ckey])</font>")
|
||||
msg_admin_attack("[user.name] ([user.ckey]) is attemptin to imprison [M.name] ([M.ckey]) with the [src.name] (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[user.x];Y=[user.y];Z=[user.z]'>JMP</a>)")
|
||||
|
||||
isolate("VICTIM", M, user)
|
||||
return
|
||||
|
||||
attack_self(mob/user)
|
||||
if (!in_range(src, user))
|
||||
return
|
||||
user.set_machine(src)
|
||||
var/dat = "<TT><B>Isocube</B><BR>"
|
||||
for(var/mob/living/carbon/human/A in src)
|
||||
dat += "Prisoner: [A.name]<br>"
|
||||
dat += {"<A href='byond://?src=\ref[src];choice=Release'>Release Prisoner</A>"}
|
||||
dat += "<br>"
|
||||
dat += {"<a href='byond://?src=\ref[src];choice=Disable'>Disable Prisoner</a>"}
|
||||
dat += "<br>"
|
||||
dat += {"<a href='byond://?src=\ref[src];choice=Enable'>Enable Prisoner</a>"}
|
||||
dat += "<br>"
|
||||
dat += {"<a href='byond://?src=\ref[src];choice=Close'> Close</a>"}
|
||||
user << browse(dat, "window=aicard")
|
||||
onclose(user, "aicard")
|
||||
return
|
||||
|
||||
|
||||
|
||||
|
||||
Topic(href, href_list)
|
||||
var/mob/U = usr
|
||||
if (!in_range(src, U)||U.machine!=src)
|
||||
U << browse(null, "window=aicard")
|
||||
U.unset_machine()
|
||||
return
|
||||
|
||||
add_fingerprint(U)
|
||||
U.set_machine(src)
|
||||
|
||||
switch(href_list["choice"])//Now we switch based on choice.
|
||||
if ("Close")
|
||||
U << browse(null, "window=aicard")
|
||||
U.unset_machine()
|
||||
return
|
||||
|
||||
if ("Release")
|
||||
for(var/mob/living/carbon/human/A in src)
|
||||
A.status_flags &= ~GODMODE
|
||||
A.canmove = 1
|
||||
A << "<b>You feel a sickening lurch as the isocube dumps you out, weak and disoriented.</b>"
|
||||
for(var/mob/O in viewers(U, null))
|
||||
O.show_message(text("<b>[U] fiddles with the isocube, releasing [A]!</b>"), 1)
|
||||
A.loc = U.loc
|
||||
A.weakened = 10
|
||||
A.paralysis = 0
|
||||
A.cancel_camera()
|
||||
src.icon_state = "soulstone"
|
||||
for(var/obj/O in src)
|
||||
O.loc = U.loc
|
||||
if ("Disable")
|
||||
for(var/mob/living/carbon/human/A in src)
|
||||
if (A.paralysis < 100)
|
||||
A << "<b>You feel a sudden, crippling agony, then darkness creeps over you.</b>"
|
||||
for(var/mob/O in viewers(U, null))
|
||||
O.show_message(text("You hear an ominous crunch."), 1)
|
||||
A.paralysis = 9000000
|
||||
if ("Enable")
|
||||
for(var/mob/living/carbon/human/A in src)
|
||||
if (A.paralysis > 10)
|
||||
A << "<b>You feel a jolt of consciousness.</b>"
|
||||
for(var/mob/O in viewers(U, null))
|
||||
O.show_message(text("Something whirrs."), 1)
|
||||
A.paralysis = 0
|
||||
attack_self(U)
|
||||
|
||||
|
||||
/obj/item/proc/isolate(var/choice as text, var/target, var/mob/U as mob).
|
||||
if("VICTIM")
|
||||
var/mob/living/carbon/human/T = target
|
||||
var/obj/item/device/isocube/C = src
|
||||
|
||||
if(C.contents.len)
|
||||
U << "\red <b>The isocube is full!</b>"
|
||||
else if (U == T)
|
||||
U << "\red <b>The isocube's safeties prevent you from capturing yourself.</b>"
|
||||
return
|
||||
else
|
||||
for(var/mob/O in viewers(U, null))
|
||||
O.show_message("\red <B>[U] is trying to pull [T] into an isocube!</B>", 1)
|
||||
var/turf/p_loc = U.loc
|
||||
var/turf/p_loc_m = T.loc
|
||||
spawn(30)
|
||||
if(!T) return
|
||||
if(p_loc == U.loc && p_loc_m == T.loc)
|
||||
/* var/atom/movable/overlay/animation = new /atom/movable/overlay( T.loc )
|
||||
animation.icon_state = "blank"
|
||||
animation.icon = 'icons/mob/mob.dmi'
|
||||
animation.master = T
|
||||
flick("dust-h", animation)
|
||||
del(animation)*/
|
||||
T.loc = C //put dummy in isocube
|
||||
T.status_flags |= GODMODE //So they won't die inside the stone somehow
|
||||
T.canmove = 0//Can't move out of the soul stone
|
||||
if (T.client)
|
||||
T.cancel_camera()
|
||||
C.icon_state = "soulstone2"
|
||||
T << "You feel a heavy weightlessness and find yourself barely able to move. The outside world seems larger."
|
||||
U << "\blue <b>[T.real_name] has been successfully captured within the isocube.</b> "
|
||||
T.Weaken(9000000)
|
||||
msg_admin_attack("[U.name] ([U.ckey]) used the [src.name] to imprison [T.name] ([T.ckey]) (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[U.x];Y=[U.y];Z=[U.z]'>JMP</a>)")
|
||||
return
|
||||
@@ -0,0 +1,208 @@
|
||||
/obj/item/device/laser_pointer
|
||||
name = "laser pointer"
|
||||
desc = "Don't shine it in your eyes!"
|
||||
icon = 'icons/obj/device.dmi'
|
||||
icon_state = "pointer"
|
||||
item_state = "pen"
|
||||
var/pointer_icon_state
|
||||
flags = FPRINT | TABLEPASS | CONDUCT | USEDELAY
|
||||
slot_flags = SLOT_BELT
|
||||
m_amt = 500
|
||||
g_amt = 500
|
||||
w_class = 2 //Increased to 2, because diodes are w_class 2. Conservation of matter.
|
||||
origin_tech = "combat=1"
|
||||
origin_tech = "magnets=2"
|
||||
var/turf/pointer_loc
|
||||
var/energy = 8
|
||||
var/max_energy = 8
|
||||
var/effectchance = 33
|
||||
var/recharging = 0
|
||||
var/recharge_locked = 0
|
||||
var/obj/item/weapon/stock_parts/micro_laser/diode //used for upgrading!
|
||||
|
||||
|
||||
/obj/item/device/laser_pointer/red
|
||||
pointer_icon_state = "red_laser"
|
||||
/obj/item/device/laser_pointer/green
|
||||
pointer_icon_state = "green_laser"
|
||||
/obj/item/device/laser_pointer/blue
|
||||
pointer_icon_state = "blue_laser"
|
||||
/obj/item/device/laser_pointer/purple
|
||||
pointer_icon_state = "purple_laser"
|
||||
|
||||
/obj/item/device/laser_pointer/New()
|
||||
..()
|
||||
diode = new(src)
|
||||
if(!pointer_icon_state)
|
||||
pointer_icon_state = pick("red_laser","green_laser","blue_laser","purple_laser")
|
||||
|
||||
/obj/item/device/laser_pointer/upgraded/New()
|
||||
..()
|
||||
diode = new /obj/item/weapon/stock_parts/micro_laser/ultra
|
||||
|
||||
|
||||
|
||||
/obj/item/device/laser_pointer/attack(mob/living/M, mob/user)
|
||||
laser_act(M, user)
|
||||
|
||||
/obj/item/device/laser_pointer/attackby(obj/item/W, mob/user)
|
||||
if(istype(W, /obj/item/weapon/stock_parts/micro_laser))
|
||||
if(!diode)
|
||||
user.drop_item()
|
||||
W.loc = src
|
||||
diode = W
|
||||
user << "<span class='notice'>You install a [diode.name] in [src].</span>"
|
||||
else
|
||||
user << "<span class='notice'>[src] already has a cell.</span>"
|
||||
|
||||
else if(istype(W, /obj/item/weapon/screwdriver))
|
||||
if(diode)
|
||||
user << "<span class='notice'>You remove the [diode.name] from the [src].</span>"
|
||||
diode.loc = get_turf(src.loc)
|
||||
diode = null
|
||||
return
|
||||
..()
|
||||
return
|
||||
|
||||
/obj/item/device/laser_pointer/afterattack(var/atom/target, var/mob/living/user, flag, params)
|
||||
if(flag) //we're placing the object on a table or in backpack
|
||||
return
|
||||
laser_act(target, user)
|
||||
|
||||
/obj/item/device/laser_pointer/proc/laser_act(var/atom/target, var/mob/living/user)
|
||||
if( !(user in (viewers(7,target))) )
|
||||
return
|
||||
if (!diode)
|
||||
user << "<span class='notice'>You point [src] at [target], but nothing happens!</span>"
|
||||
return
|
||||
if (!user.IsAdvancedToolUser())
|
||||
user << "<span class='warning'>You don't have the dexterity to do this!</span>"
|
||||
return
|
||||
|
||||
add_fingerprint(user)
|
||||
|
||||
//nothing happens if the battery is drained
|
||||
if(recharge_locked)
|
||||
user << "<span class='notice'>You point [src] at [target], but it's still charging.</span>"
|
||||
return
|
||||
|
||||
var/outmsg
|
||||
var/turf/targloc = get_turf(target)
|
||||
|
||||
//human/alien mobs
|
||||
if(iscarbon(target))
|
||||
if(user.zone_sel.selecting == "eyes")
|
||||
var/mob/living/carbon/C = target
|
||||
|
||||
//20% chance to actually hit the eyes
|
||||
|
||||
if(prob(effectchance * diode.rating))
|
||||
//msg_admin_attack(user, C, "shone in the eyes", object="laser pointer")
|
||||
msg_admin_attack("[user.name] ([user.ckey]) used a laser pointer to blind [C]")
|
||||
|
||||
//eye target check
|
||||
outmsg = "<span class='notice'>You blind [C] by shining [src] in their eyes.</span>"
|
||||
var/eye_prot = C.eyecheck()
|
||||
if(C.blinded || eye_prot >= 2)
|
||||
eye_prot = 4
|
||||
var/severity = 3 - eye_prot
|
||||
if(prob(33))
|
||||
severity += 1
|
||||
else if(prob(50))
|
||||
severity -= 1
|
||||
severity = min(max(severity, 0), 4)
|
||||
var/mob/living/carbon/human/H = C
|
||||
var/datum/organ/internal/eyes/E = H.internal_organs_by_name["eyes"]
|
||||
|
||||
switch(severity)
|
||||
if(0)
|
||||
//no effect
|
||||
C << "<span class='info'>A small, bright dot appears in your vision.</span>"
|
||||
if(1)
|
||||
//industrial grade eye protection
|
||||
//E.damage += rand(0, 2)
|
||||
C << "<span class='notice'>Something bright flashes in the corner of your vision!</span>"
|
||||
if(2)
|
||||
//basic eye protection (sunglasses)
|
||||
flick("flash", C.flash)
|
||||
//E.damage += rand(2, 4)
|
||||
C << "<span class='danger'>Your eyes were blinded!</span>"
|
||||
if(3)
|
||||
//no eye protection
|
||||
if(prob(10))
|
||||
C.Weaken(1)
|
||||
flick("e_flash", C.flash)
|
||||
E.damage += 1
|
||||
C << "<span class='danger'>Your eyes were blinded!</span>"
|
||||
if(4)
|
||||
//the effect has been worsened by something
|
||||
if(prob(5))
|
||||
C.Weaken(1)
|
||||
flick("e_flash", C.flash)
|
||||
E.damage += 2
|
||||
C << "<span class='danger'>Your eyes were blinded!</span>"
|
||||
else
|
||||
outmsg = "<span class='notice'>You fail to blind [C] by shining [src] at their eyes.</span>"
|
||||
|
||||
//robots and AI
|
||||
else if(issilicon(target))
|
||||
var/mob/living/silicon/S = target
|
||||
//20% chance to actually hit the sensors
|
||||
if(prob(effectchance * diode.rating))
|
||||
S.Weaken(rand(5,10))
|
||||
S << "<span class='warning'>Your sensors were overloaded by a laser!</span>"
|
||||
outmsg = "<span class='notice'>You overload [S] by shining [src] at their sensors.</span>"
|
||||
|
||||
S.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has had a laser pointer shone in their eyes by [user.name] ([user.ckey])</font>")
|
||||
user.attack_log += text("\[[time_stamp()]\] <font color='orange'>Shone a laser pointer in the eyes of [S.name] ([S.ckey])</font>")
|
||||
msg_admin_attack("<font color='orange'>[user.name] ([user.ckey]) Shone a laser pointer in the eyes of [S.name] ([S.ckey])</font>")
|
||||
else
|
||||
outmsg = "<span class='notice'>You fail to overload [S] by shining [src] at their sensors.</span>"
|
||||
|
||||
//cameras
|
||||
else if(istype(target, /obj/machinery/camera))
|
||||
var/obj/machinery/camera/C = target
|
||||
if(prob(effectchance * diode.rating))
|
||||
C.emp_act(1)
|
||||
outmsg = "<span class='notice'>You hit the lens of [C] with [src], temporarily disabling the camera!</span>"
|
||||
|
||||
msg_admin_attack("[user.name] ([user.ckey]) EMPd a camera with a laser pointer")
|
||||
user.attack_log += text("\[[time_stamp()]\] [user.name] ([user.ckey]) EMPd a camera with a laser pointer")
|
||||
else
|
||||
outmsg = "<span class='info'>You missed the lens of [C] with [src].</span>"
|
||||
|
||||
//laser pointer image
|
||||
icon_state = "pointer_[pointer_icon_state]"
|
||||
var/list/showto = list()
|
||||
for(var/mob/M in range(7,targloc))
|
||||
if(M.client)
|
||||
showto.Add(M.client)
|
||||
var/image/I = image('icons/obj/projectiles.dmi',targloc,pointer_icon_state,10)
|
||||
I.pixel_x = target.pixel_x + rand(-5,5)
|
||||
I.pixel_y = target.pixel_y + rand(-5,5)
|
||||
|
||||
if(outmsg)
|
||||
user << outmsg
|
||||
else
|
||||
user << "<span class='info'>You point [src] at [target].</span>"
|
||||
|
||||
energy -= 1
|
||||
if(energy <= max_energy)
|
||||
if(!recharging)
|
||||
recharging = 1
|
||||
processing_objects.Add(src)
|
||||
if(energy <= 0)
|
||||
user << "<span class='warning'>You've overused the battery of [src], now it needs time to recharge!</span>"
|
||||
recharge_locked = 1
|
||||
|
||||
flick_overlay(I, showto, 10)
|
||||
icon_state = "pointer"
|
||||
|
||||
/obj/item/device/laser_pointer/process()
|
||||
if(prob(20 - recharge_locked*5))
|
||||
energy += 1
|
||||
if(energy >= max_energy)
|
||||
energy = max_energy
|
||||
recharging = 0
|
||||
recharge_locked = 0
|
||||
..()
|
||||
@@ -52,6 +52,7 @@
|
||||
|
||||
bombers += "[key_name(user)] attached a [item] to a transfer valve."
|
||||
message_admins("[key_name_admin(user)] attached a [item] to a transfer valve.")
|
||||
message_mods("[key_name_admin(user)] attached a [item] to a transfer valve.")
|
||||
log_game("[key_name_admin(user)] attached a [item] to a transfer valve.")
|
||||
attacher = user
|
||||
nanomanager.update_uis(src) // update all UIs attached to src
|
||||
@@ -66,7 +67,7 @@
|
||||
|
||||
/obj/item/device/transfer_valve/attack_self(mob/user as mob)
|
||||
ui_interact(user)
|
||||
|
||||
|
||||
/obj/item/device/transfer_valve/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null)
|
||||
|
||||
// this is the data which will be sent to the ui
|
||||
@@ -77,13 +78,13 @@
|
||||
data["valveOpen"] = valve_open ? 1 : 0
|
||||
|
||||
// update the ui if it exists, returns null if no ui is passed/found
|
||||
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data)
|
||||
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data)
|
||||
if (!ui)
|
||||
// the ui does not exist, so we'll create a new() one
|
||||
// for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm
|
||||
ui = new(user, src, ui_key, "transfer_valve.tmpl", "Tank Transfer Valve", 460, 280)
|
||||
// when the ui is first opened this is the data it will use
|
||||
ui.set_initial_data(data)
|
||||
ui.set_initial_data(data)
|
||||
// open the new ui window
|
||||
ui.open()
|
||||
// auto update every Master Controller tick
|
||||
@@ -191,6 +192,7 @@
|
||||
log_str += " Last touched by: [src.fingerprintslast][last_touch_info]"
|
||||
bombers += log_str
|
||||
message_admins(log_str, 0, 1)
|
||||
message_mods(log_str)
|
||||
log_game(log_str)
|
||||
merge_gases()
|
||||
spawn(20) // In case one tank bursts
|
||||
|
||||
@@ -71,6 +71,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
var/lastHolder = null
|
||||
var/smoketime = 300
|
||||
var/chem_volume = 15
|
||||
var/can_hurt_mob = 1
|
||||
|
||||
/obj/item/clothing/mask/cigarette/New()
|
||||
..()
|
||||
@@ -117,6 +118,86 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
user.update_inv_r_hand(1)
|
||||
return
|
||||
|
||||
/obj/item/clothing/mask/cigarette/attack(mob/M as mob, mob/user as mob)
|
||||
if(!can_hurt_mob)
|
||||
return ..()
|
||||
|
||||
var/mob/living/carbon/human/H
|
||||
if(ishuman(M))
|
||||
H = M
|
||||
else
|
||||
return ..()
|
||||
|
||||
if(lit)
|
||||
if (user.a_intent == "hurt")
|
||||
switch(user.zone_sel.selecting)
|
||||
if("eyes")
|
||||
H.apply_damage(6, BURN, "eyes")
|
||||
for(var/mob/O in viewers(H, null))
|
||||
O.show_message("\red <B>[user] has shoved [src] in [M] eyes!</B>", 1)
|
||||
H.say("*scream")
|
||||
if("mouth")
|
||||
H.apply_damage(6, BURN, "mouth")
|
||||
for(var/mob/O in viewers(H, null))
|
||||
O.show_message("\red <B>[user] has shoved [src] in [M] mouth!</B>", 1)
|
||||
H.say("*scream")
|
||||
if("head")
|
||||
H.apply_damage(6, BURN, "head")
|
||||
for(var/mob/O in viewers(H, null))
|
||||
O.show_message("\red <B>[user] has shoved [src] in [M] face!</B>", 1)
|
||||
H.say("*scream")
|
||||
if("chest")
|
||||
H.apply_damage(6, BURN, "chest")
|
||||
for(var/mob/O in viewers(H, null))
|
||||
O.show_message("\red <B>[user] has shoved [src] in [M] chest!</B>", 1)
|
||||
H.say("*scream")
|
||||
if("groin")
|
||||
H.apply_damage(6, BURN, "groin")
|
||||
for(var/mob/O in viewers(H, null))
|
||||
O.show_message("\red <B>[user] has shoved [src] in [M] groin!</B>", 1)
|
||||
H.say("*scream")
|
||||
if("l_arm")
|
||||
H.apply_damage(6, BURN, "l_arm")
|
||||
for(var/mob/O in viewers(H, null))
|
||||
O.show_message("\red <B>[user] has shoved [src] in [M] left arm!</B>", 1)
|
||||
H.say("*scream")
|
||||
if("r_arm")
|
||||
H.apply_damage(6, BURN, "r_arm")
|
||||
for(var/mob/O in viewers(H, null))
|
||||
O.show_message("\red <B>[user] has shoved [src] in [M] right arm!</B>", 1)
|
||||
H.say("*scream")
|
||||
if("l_leg")
|
||||
H.apply_damage(6, BURN, "l_leg")
|
||||
for(var/mob/O in viewers(H, null))
|
||||
O.show_message("\red <B>[user] has shoved [src] in [M] left leg!</B>", 1)
|
||||
H.say("*scream")
|
||||
if("l_hand")
|
||||
H.apply_damage(6, BURN, "l_hand")
|
||||
for(var/mob/O in viewers(H, null))
|
||||
O.show_message("\red <B>[user] has shoved [src] in [M] left hand!</B>", 1)
|
||||
H.say("*scream")
|
||||
if("r_hand")
|
||||
H.apply_damage(6, BURN, "r_hand")
|
||||
for(var/mob/O in viewers(H, null))
|
||||
O.show_message("\red <B>[user] has shoved [src] in [M] right hand!</B>", 1)
|
||||
H.say("*scream")
|
||||
if("r_foot")
|
||||
H.apply_damage(6, BURN, "r_foot")
|
||||
for(var/mob/O in viewers(H, null))
|
||||
O.show_message("\red <B>[user] has shoved [src] in [M] left foot!</B>", 1)
|
||||
H.say("*scream")
|
||||
if("l_foot")
|
||||
H.apply_damage(6, BURN, "l_foot")
|
||||
for(var/mob/O in viewers(H, null))
|
||||
O.show_message("\red <B>[user] has shoved [src] in [M] right foot!</B>", 1)
|
||||
H.say("*scream")
|
||||
else
|
||||
return ..()
|
||||
|
||||
M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been burnt with [src.name] by [user.name] ([user.ckey])</font>")
|
||||
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [src.name] to burn [M.name] ([M.ckey])</font>")
|
||||
msg_admin_attack("[key_name(user)] burnt [key_name(user)] with [src.name] (INTENT: [uppertext(user.a_intent)]) - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[user.x];Y=[user.y];Z=[user.z]'>JMP</a>")
|
||||
|
||||
|
||||
/obj/item/clothing/mask/cigarette/afterattack(obj/item/weapon/reagent_containers/glass/glass, mob/user as mob, proximity)
|
||||
..()
|
||||
@@ -217,6 +298,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
item_state = "cigaroff"
|
||||
smoketime = 1500
|
||||
chem_volume = 20
|
||||
can_hurt_mob = 1
|
||||
|
||||
/obj/item/clothing/mask/cigarette/cigar/cohiba
|
||||
name = "\improper Cohiba Robusto cigar"
|
||||
@@ -224,6 +306,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
icon_state = "cigar2off"
|
||||
icon_on = "cigar2on"
|
||||
icon_off = "cigar2off"
|
||||
can_hurt_mob = 1
|
||||
|
||||
/obj/item/clothing/mask/cigarette/cigar/havana
|
||||
name = "premium Havanian cigar"
|
||||
@@ -233,6 +316,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
icon_off = "cigar2off"
|
||||
smoketime = 7200
|
||||
chem_volume = 30
|
||||
can_hurt_mob = 1
|
||||
|
||||
/obj/item/weapon/cigbutt
|
||||
name = "cigarette butt"
|
||||
@@ -294,6 +378,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
icon_on = "pipeon" //Note - these are in masks.dmi
|
||||
icon_off = "pipeoff"
|
||||
smoketime = 100
|
||||
can_hurt_mob = 0
|
||||
|
||||
/obj/item/clothing/mask/cigarette/pipe/light(var/flavor_text = "[usr] lights the [name].")
|
||||
if(!src.lit)
|
||||
@@ -368,6 +453,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
icon_on = "cobpipeon" //Note - these are in masks.dmi
|
||||
icon_off = "cobpipeoff"
|
||||
smoketime = 400
|
||||
can_hurt_mob = 0
|
||||
|
||||
|
||||
|
||||
@@ -430,9 +516,9 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
icon_state = icon_off
|
||||
item_state = icon_off
|
||||
if(istype(src, /obj/item/weapon/lighter/zippo) )
|
||||
user.visible_message("<span class='rose'>You hear a quiet click, as [user] shuts off [src] without even looking at what they're doing.")
|
||||
user.visible_message("<span class='rose'>You hear a quiet click, as [user] shuts off [src] without even looking at what they're doing.</span>")
|
||||
else
|
||||
user.visible_message("<span class='notice'>[user] quietly shuts off the [src].")
|
||||
user.visible_message("<span class='notice'>[user] quietly shuts off the [src].</span>")
|
||||
|
||||
user.SetLuminosity(user.luminosity - 2)
|
||||
processing_objects.Remove(src)
|
||||
|
||||
@@ -109,7 +109,7 @@
|
||||
playsound(get_turf(src), 'sound/weapons/Egloves.ogg', 50, 1, -1)
|
||||
user.attack_log += "\[[time_stamp()]\]<font color='red'> Defibrillated [H.name] ([H.ckey]) with [src.name]</font>"
|
||||
H.attack_log += "\[[time_stamp()]\]<font color='orange'> Defibrillated by [user.name] ([user.ckey]) with [src.name]</font>"
|
||||
msg_admin_attack("<font color='red'>[user.name] ([user.ckey]) defibrillated [H.name] ([H.ckey]) with [src.name]</font>" )
|
||||
msg_admin_attack("<font color='red'>[user.name] ([user.ckey]) defibrillated [H.name] ([H.ckey]) with [src.name]</font> - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[H.x];Y=[H.y];Z=[H.z]'>JMP</a>" )
|
||||
if(!iscarbon(user))
|
||||
M.LAssailant = null
|
||||
else
|
||||
|
||||
@@ -128,6 +128,7 @@
|
||||
testing("Isolated block [block] injector with contents: [GetValue()]")
|
||||
if (GetState() && block == MONKEYBLOCK && istype(M, /mob/living/carbon/human) )
|
||||
message_admins("[key_name_admin(user)] injected [key_name_admin(M)] with the Isolated [name] \red(MONKEY)")
|
||||
message_mods("[key_name_admin(user)] injected [key_name_admin(M)] with the Isolated [name] \red(MONKEY)")
|
||||
log_attack("[key_name(user)] injected [key_name(M)] with the Isolated [name] (MONKEY)")
|
||||
log_game("[key_name_admin(user)] injected [key_name_admin(M)] with the Isolated [name] \red(MONKEY)")
|
||||
else
|
||||
@@ -136,6 +137,7 @@
|
||||
testing("DNA injector with contents: [english_list(buf.dna.SE)]")
|
||||
if (GetState(MONKEYBLOCK) && istype(M, /mob/living/carbon/human) )
|
||||
message_admins("[key_name_admin(user)] injected [key_name_admin(M)] with the [name] \red(MONKEY)")
|
||||
message_mods("[key_name_admin(user)] injected [key_name_admin(M)] with the [name] \red(MONKEY)")
|
||||
log_attack("[key_name(user)] injected [key_name(M)] with the [name] (MONKEY)")
|
||||
log_game("[key_name_admin(user)] injected [key_name_admin(M)] with the [name] \red(MONKEY)")
|
||||
else
|
||||
@@ -163,6 +165,7 @@
|
||||
testing("Isolated block [block] injector with contents: [GetValue()]")
|
||||
if (GetState() && block == MONKEYBLOCK && istype(M, /mob/living/carbon/human) )
|
||||
message_admins("[key_name_admin(user)] injected [key_name_admin(M)] with the Isolated [name] \red(MONKEY)")
|
||||
message_mods("[key_name_admin(user)] injected [key_name_admin(M)] with the Isolated [name] \red(MONKEY)")
|
||||
log_attack("[key_name(user)] injected [key_name(M)] with the Isolated [name] (MONKEY)")
|
||||
log_game("[key_name_admin(user)] injected [key_name_admin(M)] with the Isolated [name] \red(MONKEY)")
|
||||
else
|
||||
@@ -171,6 +174,7 @@
|
||||
testing("DNA injector with contents: [english_list(buf.dna.SE)]")
|
||||
if (GetState(MONKEYBLOCK) && istype(M, /mob/living/carbon/human))
|
||||
message_admins("[key_name_admin(user)] injected [key_name_admin(M)] with the [name] \red(MONKEY)")
|
||||
message_mods("[key_name_admin(user)] injected [key_name_admin(M)] with the [name] \red(MONKEY)")
|
||||
log_game("[key_name(user)] injected [key_name(M)] with the [name] (MONKEY)")
|
||||
else
|
||||
// message_admins("[key_name_admin(user)] injected [key_name_admin(M)] with the [name]")
|
||||
|
||||
@@ -5,12 +5,12 @@
|
||||
icon_state = "fire_extinguisher0"
|
||||
item_state = "fire_extinguisher"
|
||||
hitsound = 'sound/weapons/smash.ogg'
|
||||
flags = FPRINT | USEDELAY | TABLEPASS | CONDUCT
|
||||
flags = FPRINT | TABLEPASS | CONDUCT
|
||||
throwforce = 10
|
||||
w_class = 3.0
|
||||
throw_speed = 2
|
||||
throw_range = 10
|
||||
force = 10
|
||||
force = 10.0
|
||||
m_amt = 90
|
||||
attack_verb = list("slammed", "whacked", "bashed", "thunked", "battered", "bludgeoned", "thrashed")
|
||||
var/max_water = 50
|
||||
@@ -24,7 +24,7 @@
|
||||
icon_state = "miniFE0"
|
||||
item_state = "miniFE"
|
||||
hitsound = null //it is much lighter, after all.
|
||||
flags = FPRINT | USEDELAY | TABLEPASS
|
||||
flags = FPRINT | TABLEPASS
|
||||
throwforce = 2
|
||||
w_class = 2.0
|
||||
force = 3.0
|
||||
@@ -78,8 +78,12 @@
|
||||
|
||||
if(usr.buckled && isobj(usr.buckled) && !usr.buckled.anchored )
|
||||
spawn(0)
|
||||
var/obj/structure/stool/bed/chair/C = null
|
||||
if(istype(usr.buckled, /obj/structure/stool/bed/chair))
|
||||
C = usr.buckled
|
||||
var/obj/B = usr.buckled
|
||||
var/movementdirection = turn(direction,180)
|
||||
if(C) C.propelled = 1
|
||||
B.Move(get_step(usr,movementdirection), movementdirection)
|
||||
sleep(1)
|
||||
B.Move(get_step(usr,movementdirection), movementdirection)
|
||||
@@ -91,6 +95,7 @@
|
||||
B.Move(get_step(usr,movementdirection), movementdirection)
|
||||
sleep(2)
|
||||
B.Move(get_step(usr,movementdirection), movementdirection)
|
||||
if(C) C.propelled = 0
|
||||
sleep(3)
|
||||
B.Move(get_step(usr,movementdirection), movementdirection)
|
||||
sleep(3)
|
||||
@@ -117,18 +122,15 @@
|
||||
for(var/b=0, b<5, b++)
|
||||
step_towards(W,my_target)
|
||||
if(!W) return
|
||||
if(!W.reagents) return
|
||||
W.reagents.reaction(get_turf(W))
|
||||
for(var/atom/atm in get_turf(W))
|
||||
if(!W) return
|
||||
W.reagents.reaction(atm)
|
||||
if(isliving(atm)) //For extinguishing mobs on fire
|
||||
var/mob/living/M = atm
|
||||
M.ExtinguishMob()
|
||||
if(W.loc == my_target) break
|
||||
sleep(2)
|
||||
W.delete()
|
||||
// spawn(20)
|
||||
|
||||
W.Del()
|
||||
if((istype(usr.loc, /turf/space)) || (usr.lastarea.has_gravity == 0))
|
||||
user.inertia_dir = get_dir(target, user)
|
||||
step(user, user.inertia_dir)
|
||||
|
||||
@@ -185,7 +185,7 @@
|
||||
|
||||
H.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been wrapped with [src.name] by [user.name] ([user.ckey])</font>")
|
||||
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [src.name] to wrap [H.name] ([H.ckey])</font>")
|
||||
msg_admin_attack("[key_name(user)] used [src] to wrap [key_name(H)]")
|
||||
msg_admin_attack("[key_name(user)] used [src] to wrap [key_name(H)] - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[H.x];Y=[H.y];Z=[H.z]'>JMP</a>")
|
||||
|
||||
else
|
||||
user << "\blue You need more paper."
|
||||
|
||||
@@ -54,7 +54,7 @@
|
||||
|
||||
C.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been handcuffed (attempt) by [user.name] ([user.ckey])</font>")
|
||||
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Attempted to handcuff [C.name] ([C.ckey])</font>")
|
||||
msg_admin_attack("[key_name(user)] attempted to handcuff [key_name(C)]")
|
||||
msg_admin_attack("[key_name(user)] attempted to handcuff [key_name(C)] - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[C.x];Y=[C.y];Z=[C.z]'>JMP</a>")
|
||||
|
||||
var/obj/effect/equip_e/human/O = new /obj/effect/equip_e/human( )
|
||||
O.source = user
|
||||
|
||||
@@ -203,7 +203,7 @@
|
||||
|
||||
/obj/item/weapon/grown/deathnettle/changePotency(newValue) //-QualityVan
|
||||
potency = newValue
|
||||
force = round((5+potency/2.5), 1)
|
||||
force = round((5+potency), 1) ///2.5. deadly nettles because you have earned it.
|
||||
|
||||
|
||||
/*
|
||||
|
||||
@@ -163,6 +163,7 @@ Implant Specifics:<BR>"}
|
||||
if(istype(imp_in, /mob/))
|
||||
var/mob/T = imp_in
|
||||
message_admins("Explosive implant triggered in [T] ([T.key]). (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[T.x];Y=[T.y];Z=[T.z]'>JMP</a>) ")
|
||||
message_mods("Explosive implant triggered in [T] ([T.key]). (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[T.x];Y=[T.y];Z=[T.z]'>JMP</a>) ")
|
||||
log_game("Explosive implant triggered in [T] ([T.key]).")
|
||||
need_gib = 1
|
||||
|
||||
|
||||
@@ -83,8 +83,10 @@
|
||||
else
|
||||
break
|
||||
|
||||
if(!success)
|
||||
user.loc = pick(L)
|
||||
if(user.weakened > 100)//if you are megastunned by the isocube, there is no escape
|
||||
user <<"An outside force prevents you from teleporting."
|
||||
else if(!success)
|
||||
user.loc = pick(L)
|
||||
|
||||
smoke.start()
|
||||
src.uses -= 1
|
||||
@@ -88,7 +88,7 @@
|
||||
|
||||
user.attack_log += "\[[time_stamp()]\]<font color='red'> Stunned [H.name] ([H.ckey]) with [src.name]</font>"
|
||||
H.attack_log += "\[[time_stamp()]\]<font color='orange'> Stunned by [user.name] ([user.ckey]) with [src.name]</font>"
|
||||
msg_admin_attack("[key_name(user)] stunned [key_name(H)] with [src.name]")
|
||||
msg_admin_attack("[key_name(user)] stunned [key_name(H)] with [src.name] - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[H.x];Y=[H.y];Z=[H.z]'>JMP</a>")
|
||||
|
||||
playsound(src.loc, 'sound/weapons/Egloves.ogg', 50, 1, -1)
|
||||
if(charges < 1)
|
||||
@@ -115,7 +115,7 @@
|
||||
H.visible_message("<span class='danger'>[src], thrown by [foundmob.name], strikes [H] and stuns them!</span>")
|
||||
|
||||
H.attack_log += "\[[time_stamp()]\]<font color='orange'> Stunned by thrown [src.name] last touched by ([src.fingerprintslast])</font>"
|
||||
msg_admin_attack("Flying [src.name], last touched by ([src.fingerprintslast]) stunned [key_name(H)]" )
|
||||
msg_admin_attack("Flying [src.name], last touched by ([src.fingerprintslast]) stunned [key_name(H)] - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[H.x];Y=[H.y];Z=[H.z]'>JMP</a>" )
|
||||
|
||||
/obj/item/weapon/melee/baton/emp_act(severity)
|
||||
switch(severity)
|
||||
@@ -228,7 +228,7 @@
|
||||
|
||||
user.attack_log += "\[[time_stamp()]\]<font color='red'> Stunned [H.name] ([H.ckey]) with [src.name]</font>"
|
||||
H.attack_log += "\[[time_stamp()]\]<font color='orange'> Stunned by [user.name] ([user.ckey]) with [src.name]</font>"
|
||||
msg_admin_attack("[key_name(user)] stunned [key_name(H)] with [src.name]")
|
||||
msg_admin_attack("[key_name(user)] stunned [key_name(H)] with [src.name] - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[H.x];Y=[H.y];Z=[H.z]'>JMP</a>")
|
||||
|
||||
playsound(src.loc, 'sound/weapons/Egloves.ogg', 50, 1, -1)
|
||||
if(charges < 1)
|
||||
@@ -256,7 +256,7 @@
|
||||
H.visible_message("<span class='danger'>[src], thrown by [foundmob.name], strikes [H] and stuns them!</span>")
|
||||
|
||||
H.attack_log += "\[[time_stamp()]\]<font color='orange'> Stunned by thrown [src.name] last touched by ([src.fingerprintslast])</font>"
|
||||
msg_admin_attack("Flying [src.name], last touched by ([src.fingerprintslast]) stunned [key_name(H)]" )
|
||||
msg_admin_attack("Flying [src.name], last touched by ([src.fingerprintslast]) stunned [key_name(H)] - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[H.x];Y=[H.y];Z=[H.z]'>JMP</a>" )
|
||||
|
||||
/obj/item/weapon/melee/baton/stunrod/emp_act(severity)
|
||||
switch(severity)
|
||||
|
||||
@@ -104,7 +104,7 @@
|
||||
M.Weaken(5)
|
||||
M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been attacked with [src.name] by [user.name] ([user.ckey])</font>")
|
||||
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [src.name] to attack [M.name] ([M.ckey])</font>")
|
||||
msg_admin_attack("[key_name(user)] attacked [key_name(user)] with [src.name] (INTENT: [uppertext(user.a_intent)])")
|
||||
msg_admin_attack("[key_name(user)] attacked [key_name(user)] with [src.name] (INTENT: [uppertext(user.a_intent)]) - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[user.x];Y=[user.y];Z=[user.z]'>JMP</a>")
|
||||
src.add_fingerprint(user)
|
||||
|
||||
for(var/mob/O in viewers(M))
|
||||
@@ -181,7 +181,7 @@
|
||||
// var/obj/item/c_hand UNFUCK WHEN YOU HAVE TIME AND KNOWLEDGE
|
||||
// var/hand
|
||||
if(user.zone_sel.selecting == "r_leg" || user.zone_sel.selecting == "l_leg")
|
||||
target.Weaken(20)
|
||||
target.Weaken(10) //nerfed, because yes.
|
||||
/* if(user.zone_sel.selecting == "l_hand" || user.zone_sel.selecting == "l_arm")
|
||||
c_hand = "l_hand"
|
||||
target.u_equip(c_hand)
|
||||
|
||||
@@ -77,6 +77,7 @@
|
||||
src.bomb.detonate()
|
||||
log_admin("[user.real_name]([user.ckey]) has triggered [src.bomb] with [src].")
|
||||
message_admins("\red [user.real_name]([user.ckey]) has triggered [src.bomb] with [src].")
|
||||
message_mods("\red [user.real_name]([user.ckey]) has triggered [src.bomb] with [src].")
|
||||
|
||||
if("Close the lighter.")
|
||||
src.icon_state = "c-4detonator_0"
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
src.air_contents.volume = volume //liters
|
||||
src.air_contents.temperature = T20C
|
||||
|
||||
processing_objects.Add(src)
|
||||
processing_objects.Add(src)
|
||||
return
|
||||
|
||||
/obj/item/weapon/tank/Del()
|
||||
@@ -141,8 +141,8 @@
|
||||
data["defaultReleasePressure"] = round(TANK_DEFAULT_RELEASE_PRESSURE)
|
||||
data["maxReleasePressure"] = round(TANK_MAX_RELEASE_PRESSURE)
|
||||
data["valveOpen"] = using_internal ? 1 : 0
|
||||
|
||||
data["maskConnected"] = 0
|
||||
|
||||
data["maskConnected"] = 0
|
||||
if(istype(loc,/mob/living/carbon))
|
||||
var/mob/living/carbon/location = loc
|
||||
if(location.internal == src || (location.wear_mask && (location.wear_mask.flags & MASKINTERNALS)))
|
||||
@@ -239,6 +239,7 @@
|
||||
if(pressure > TANK_FRAGMENT_PRESSURE)
|
||||
if(!istype(src.loc,/obj/item/device/transfer_valve))
|
||||
message_admins("Explosive tank rupture! last key to touch the tank was [src.fingerprintslast].")
|
||||
message_mods("Explosive tank rupture! last key to touch the tank was [src.fingerprintslast].")
|
||||
log_game("Explosive tank rupture! last key to touch the tank was [src.fingerprintslast].")
|
||||
//world << "\blue[x],[y] tank is exploding: [pressure] kPa"
|
||||
//Give the gas a chance to build up more pressure through reacting
|
||||
|
||||
@@ -260,6 +260,7 @@
|
||||
tank.armed = 1
|
||||
user.visible_message("[user] begins heating the [O].", "You start to heat the [O].")
|
||||
message_admins("[key_name_admin(user)] is attempting a welder bomb at ([loc.x],[loc.y],[loc.z]) - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[O.x];Y=[O.y];Z=[O.z]'>JMP</a>")
|
||||
message_mods("[key_name_admin(user)] is attempting a welder bomb at ([loc.x],[loc.y],[loc.z]) - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[O.x];Y=[O.y];Z=[O.z]'>JMP</a>")
|
||||
if(do_after(user,100))
|
||||
// var/obj/structure/reagent_dispensers/fueltank/tank = O
|
||||
if(tank.defuse)
|
||||
|
||||
@@ -232,6 +232,31 @@
|
||||
new /obj/item/device/encryptionkey/headset_med(src)
|
||||
return
|
||||
|
||||
/obj/structure/closet/secure_closet/forensics
|
||||
name = "Forensic tech's closet"
|
||||
req_access = list(access_forensics_lockers)
|
||||
icon_state = "sec1"
|
||||
icon_closed = "sec"
|
||||
icon_locked = "sec1"
|
||||
icon_opened = "secopen"
|
||||
icon_broken = "secbroken"
|
||||
icon_off = "secoff"
|
||||
|
||||
New()
|
||||
..()
|
||||
sleep(2)
|
||||
new /obj/item/clothing/under/rank/navy/det/forensics(src)
|
||||
new /obj/item/clothing/suit/storage/forensics/blue(src)
|
||||
new /obj/item/clothing/suit/storage/forensics/red(src)
|
||||
new /obj/item/clothing/gloves/black(src)
|
||||
new /obj/item/clothing/shoes/brown(src)
|
||||
new /obj/item/weapon/storage/box/evidence(src)
|
||||
new /obj/item/device/radio/headset/headset_sec(src)
|
||||
new /obj/item/clothing/suit/armor/det_suit(src)
|
||||
new /obj/item/taperoll/police(src)
|
||||
new /obj/item/clothing/tie/holobadge(src)
|
||||
return
|
||||
|
||||
|
||||
/obj/structure/closet/secure_closet/detective
|
||||
name = "Detective's Cabinet"
|
||||
@@ -248,24 +273,17 @@
|
||||
sleep(2)
|
||||
new /obj/item/clothing/under/det(src)
|
||||
new /obj/item/clothing/under/det/black(src)
|
||||
new /obj/item/clothing/under/det/slob(src)
|
||||
new /obj/item/clothing/suit/storage/det_suit(src)
|
||||
new /obj/item/clothing/suit/storage/det_suit/black(src)
|
||||
new /obj/item/clothing/suit/storage/forensics/blue(src)
|
||||
new /obj/item/clothing/suit/storage/forensics/red(src)
|
||||
new /obj/item/clothing/gloves/black(src)
|
||||
new /obj/item/clothing/head/det_hat(src)
|
||||
new /obj/item/clothing/head/det_hat/black(src)
|
||||
new /obj/item/clothing/shoes/brown(src)
|
||||
new /obj/item/weapon/storage/box/evidence(src)
|
||||
new /obj/item/device/radio/headset/headset_sec(src)
|
||||
new /obj/item/device/detective_scanner(src)
|
||||
new /obj/item/clothing/suit/armor/det_suit(src)
|
||||
new /obj/item/ammo_magazine/c45r(src)
|
||||
new /obj/item/ammo_magazine/c45r(src)
|
||||
new /obj/item/taperoll/police(src)
|
||||
new /obj/item/weapon/gun/projectile/detective/semiauto(src)
|
||||
new /obj/item/clothing/tie/holster/armpit(src)
|
||||
new /obj/item/clothing/tie/holobadge(src)
|
||||
return
|
||||
|
||||
/obj/structure/closet/secure_closet/detective/update_icon()
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
desc = "This is used to lie in, sleep in or strap on."
|
||||
icon_state = "bed"
|
||||
var/mob/living/buckled_mob
|
||||
var/movable = 0
|
||||
|
||||
/obj/structure/stool/bed/psych
|
||||
name = "psych bed"
|
||||
@@ -49,6 +50,8 @@
|
||||
buckled_mob.buckled = null
|
||||
buckled_mob.anchored = initial(buckled_mob.anchored)
|
||||
buckled_mob.update_canmove()
|
||||
if(!buckled_mob.mob_has_gravity(buckled_mob.loc))
|
||||
buckled_mob.float(1)
|
||||
buckled_mob = null
|
||||
return
|
||||
|
||||
@@ -95,6 +98,8 @@
|
||||
M.loc = src.loc
|
||||
M.dir = src.dir
|
||||
M.update_canmove()
|
||||
if(!M.mob_has_gravity(M.loc))
|
||||
M.float(0)
|
||||
src.buckled_mob = M
|
||||
src.add_fingerprint(user)
|
||||
return
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
desc = "You sit in this. Either by will or force."
|
||||
icon_state = "chair"
|
||||
|
||||
var/propelled = 0 // Check for fire-extinguisher-driven chairs
|
||||
|
||||
/obj/structure/stool/MouseDrop(atom/over_object)
|
||||
return
|
||||
|
||||
@@ -115,13 +117,39 @@
|
||||
/obj/structure/stool/bed/chair/office/Move()
|
||||
..()
|
||||
if(buckled_mob)
|
||||
buckled_mob.buckled = null //Temporary, so Move() succeeds.
|
||||
var/moved = buckled_mob.Move(src.loc)
|
||||
buckled_mob.buckled = src
|
||||
if(!moved)
|
||||
unbuckle()
|
||||
var/mob/living/occupant = buckled_mob
|
||||
occupant.buckled = null
|
||||
occupant.Move(src.loc)
|
||||
occupant.buckled = src
|
||||
if (occupant && (src.loc != occupant.loc))
|
||||
if (propelled)
|
||||
for (var/mob/O in src.loc)
|
||||
if (O != occupant)
|
||||
Bump(O)
|
||||
else
|
||||
unbuckle()
|
||||
handle_rotation()
|
||||
|
||||
/obj/structure/stool/bed/chair/office/Bump(atom/A)
|
||||
..()
|
||||
if(!buckled_mob) return
|
||||
|
||||
if(propelled)
|
||||
var/mob/living/occupant = buckled_mob
|
||||
unbuckle()
|
||||
occupant.throw_at(A, 3, 2)
|
||||
occupant.apply_effect(6, STUN, 0)
|
||||
occupant.apply_effect(6, WEAKEN, 0)
|
||||
occupant.apply_effect(6, STUTTER, 0)
|
||||
playsound(src.loc, 'sound/weapons/punch1.ogg', 50, 1, -1)
|
||||
if(istype(A, /mob/living))
|
||||
var/mob/living/victim = A
|
||||
victim.apply_effect(6, STUN, 0)
|
||||
victim.apply_effect(6, WEAKEN, 0)
|
||||
victim.apply_effect(6, STUTTER, 0)
|
||||
victim.take_organ_damage(10)
|
||||
occupant.visible_message("<span class='danger'>[occupant] clashed into \the [A]!</span>")
|
||||
|
||||
/obj/structure/stool/bed/chair/office/light
|
||||
icon_state = "officechair_white"
|
||||
|
||||
|
||||
@@ -0,0 +1,187 @@
|
||||
/obj/structure/stool/bed/chair/wheelchair
|
||||
name = "wheelchair"
|
||||
desc = "You sit in this. Either by will or force."
|
||||
icon_state = "wheelchair"
|
||||
anchored = 0
|
||||
movable = 1
|
||||
|
||||
var/driving = 0
|
||||
var/mob/living/pulling = null
|
||||
var/bloodiness
|
||||
|
||||
|
||||
/obj/structure/stool/bed/chair/wheelchair/handle_rotation()
|
||||
overlays = null
|
||||
var/image/O = image(icon = 'icons/obj/objects.dmi', icon_state = "w_overlay", layer = FLY_LAYER, dir = src.dir)
|
||||
overlays += O
|
||||
if(buckled_mob)
|
||||
buckled_mob.dir = dir
|
||||
|
||||
/obj/structure/stool/bed/chair/wheelchair/relaymove(mob/user, direction)
|
||||
// Redundant check?
|
||||
if(user.stat || user.stunned || user.weakened || user.paralysis || user.lying || user.restrained())
|
||||
if(user==pulling)
|
||||
pulling = null
|
||||
user.pulledby = null
|
||||
user << "\red You lost your grip!"
|
||||
return
|
||||
if(buckled_mob && pulling && user == buckled_mob)
|
||||
if(pulling.stat || pulling.stunned || pulling.weakened || pulling.paralysis || pulling.lying || pulling.restrained())
|
||||
pulling.pulledby = null
|
||||
pulling = null
|
||||
if(user.pulling && (user == pulling))
|
||||
pulling = null
|
||||
user.pulledby = null
|
||||
return
|
||||
if(propelled)
|
||||
return
|
||||
if(pulling && (get_dist(src, pulling) > 1))
|
||||
pulling = null
|
||||
user.pulledby = null
|
||||
if(user==pulling)
|
||||
return
|
||||
if(pulling && (get_dir(src.loc, pulling.loc) == direction))
|
||||
user << "\red You cannot go there."
|
||||
return
|
||||
if(pulling && buckled_mob && (buckled_mob == user))
|
||||
user << "\red You cannot drive while being pushed."
|
||||
return
|
||||
|
||||
// Let's roll
|
||||
driving = 1
|
||||
var/turf/T = null
|
||||
//--1---Move occupant---1--//
|
||||
if(buckled_mob)
|
||||
buckled_mob.buckled = null
|
||||
step(buckled_mob, direction)
|
||||
buckled_mob.buckled = src
|
||||
//--2----Move driver----2--//
|
||||
if(pulling)
|
||||
T = pulling.loc
|
||||
if(get_dist(src, pulling) >= 1)
|
||||
step(pulling, get_dir(pulling.loc, src.loc))
|
||||
//--3--Move wheelchair--3--//
|
||||
step(src, direction)
|
||||
if(buckled_mob) // Make sure it stays beneath the occupant
|
||||
Move(buckled_mob.loc)
|
||||
dir = direction
|
||||
handle_rotation()
|
||||
if(pulling) // Driver
|
||||
if(pulling.loc == src.loc) // We moved onto the wheelchair? Revert!
|
||||
pulling.loc = T
|
||||
else
|
||||
spawn(0)
|
||||
if(get_dist(src, pulling) > 1) // We are too far away? Losing control.
|
||||
pulling = null
|
||||
user.pulledby = null
|
||||
pulling.dir = get_dir(pulling, src) // When everything is right, face the wheelchair
|
||||
if(bloodiness)
|
||||
create_track()
|
||||
driving = 0
|
||||
|
||||
/obj/structure/stool/bed/chair/wheelchair/Move()
|
||||
..()
|
||||
if(buckled_mob)
|
||||
var/mob/living/occupant = buckled_mob
|
||||
if(!driving)
|
||||
occupant.buckled = null
|
||||
occupant.Move(src.loc)
|
||||
occupant.buckled = src
|
||||
if (occupant && (src.loc != occupant.loc))
|
||||
if (propelled)
|
||||
for (var/mob/O in src.loc)
|
||||
if (O != occupant)
|
||||
Bump(O)
|
||||
else
|
||||
unbuckle()
|
||||
if (pulling && (get_dist(src, pulling) > 1))
|
||||
pulling.pulledby = null
|
||||
pulling << "\red You lost your grip!"
|
||||
pulling = null
|
||||
else
|
||||
if (occupant && (src.loc != occupant.loc))
|
||||
src.loc = occupant.loc // Failsafe to make sure the wheelchair stays beneath the occupant after driving
|
||||
handle_rotation()
|
||||
|
||||
/obj/structure/stool/bed/chair/wheelchair/attack_hand(mob/user as mob)
|
||||
if (pulling)
|
||||
MouseDrop(usr)
|
||||
else
|
||||
manual_unbuckle(user)
|
||||
return
|
||||
|
||||
/obj/structure/stool/bed/chair/wheelchair/MouseDrop(over_object, src_location, over_location)
|
||||
..()
|
||||
if(over_object == usr && in_range(src, usr))
|
||||
if(!ishuman(usr)) return
|
||||
if(usr == buckled_mob)
|
||||
usr << "\red You realize you are unable to push the wheelchair you sit in."
|
||||
return
|
||||
if(!pulling)
|
||||
pulling = usr
|
||||
usr.pulledby = src
|
||||
if(usr.pulling)
|
||||
usr.stop_pulling()
|
||||
usr.dir = get_dir(usr, src)
|
||||
usr << "You grip \the [name]'s handles."
|
||||
else
|
||||
if(usr != pulling)
|
||||
for(var/mob/O in viewers(pulling, null))
|
||||
O.show_message("\red [usr] breaks [pulling]'s grip on the wheelchair.", 1)
|
||||
else
|
||||
usr << "You let go of \the [name]'s handles."
|
||||
pulling.pulledby = null
|
||||
pulling = null
|
||||
return
|
||||
|
||||
/obj/structure/stool/bed/chair/wheelchair/Bump(atom/A)
|
||||
..()
|
||||
if(!buckled_mob) return
|
||||
|
||||
if(propelled || (pulling && (pulling.a_intent == "hurt")))
|
||||
var/mob/living/occupant = buckled_mob
|
||||
unbuckle()
|
||||
|
||||
if (pulling && (pulling.a_intent == "hurt"))
|
||||
occupant.throw_at(A, 3, 3, pulling)
|
||||
else if (propelled)
|
||||
occupant.throw_at(A, 3, propelled)
|
||||
|
||||
occupant.apply_effect(6, STUN, 0)
|
||||
occupant.apply_effect(6, WEAKEN, 0)
|
||||
occupant.apply_effect(6, STUTTER, 0)
|
||||
playsound(src.loc, 'sound/weapons/punch1.ogg', 50, 1, -1)
|
||||
if(istype(A, /mob/living))
|
||||
var/mob/living/victim = A
|
||||
victim.apply_effect(6, STUN, 0)
|
||||
victim.apply_effect(6, WEAKEN, 0)
|
||||
victim.apply_effect(6, STUTTER, 0)
|
||||
victim.take_organ_damage(10)
|
||||
if(pulling)
|
||||
occupant.visible_message("<span class='danger'>[pulling] has thrusted \the [name] into \the [A], throwing \the [occupant] out of it!</span>")
|
||||
|
||||
pulling.attack_log += "\[[time_stamp()]\]<font color='red'> Crashed [occupant.name]'s ([occupant.ckey]) [name] into \a [A]</font>"
|
||||
occupant.attack_log += "\[[time_stamp()]\]<font color='orange'> Thrusted into \a [A] by [pulling.name] ([pulling.ckey]) with \the [name]</font>"
|
||||
msg_admin_attack("[pulling.name] ([pulling.ckey]) has thrusted [occupant.name]'s ([occupant.ckey]) [name] into \a [A] (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[pulling.x];Y=[pulling.y];Z=[pulling.z]'>JMP</a>)")
|
||||
else
|
||||
occupant.visible_message("<span class='danger'>[occupant] crashed into \the [A]!</span>")
|
||||
|
||||
/obj/structure/stool/bed/chair/wheelchair/proc/create_track()
|
||||
var/obj/effect/decal/cleanable/blood/tracks/B = new(loc)
|
||||
var/newdir = get_dir(get_step(loc, dir), loc)
|
||||
if(newdir == dir)
|
||||
B.dir = newdir
|
||||
else
|
||||
newdir = newdir | dir
|
||||
if(newdir == 3)
|
||||
newdir = 1
|
||||
else if(newdir == 12)
|
||||
newdir = 4
|
||||
B.dir = newdir
|
||||
bloodiness--
|
||||
|
||||
/obj/structure/stool/bed/chair/wheelchair/buckle_mob(mob/M as mob, mob/user as mob)
|
||||
if(M == pulling)
|
||||
pulling = null
|
||||
usr.pulledby = null
|
||||
..()
|
||||
@@ -21,7 +21,7 @@
|
||||
throwpass = 1 //You can throw objects over this, despite it's density.")
|
||||
var/parts = /obj/item/weapon/table_parts
|
||||
var/flipped = 0
|
||||
var/health = 100
|
||||
var/health = 200
|
||||
|
||||
/obj/structure/table/proc/update_adjacent()
|
||||
for(var/direction in list(1,2,4,8,5,6,9,10))
|
||||
@@ -274,6 +274,7 @@
|
||||
|
||||
/obj/structure/table/attack_alien(mob/user)
|
||||
visible_message("<span class='danger'>[user] slices [src] apart!</span>")
|
||||
destroy()
|
||||
|
||||
/obj/structure/table/attack_animal(mob/living/simple_animal/user)
|
||||
if(user.wall_smash)
|
||||
@@ -310,14 +311,14 @@
|
||||
if (get_dist(P.starting, loc) <= 1) //Tables won't help you if people are THIS close
|
||||
return 1
|
||||
if (get_turf(P.original) == cover)
|
||||
var/chance = 20
|
||||
var/chance = 30
|
||||
if (ismob(P.original))
|
||||
var/mob/M = P.original
|
||||
if (M.lying)
|
||||
chance += 20 //Lying down lets you catch less bullets
|
||||
chance += 50 //Lying down lets you catch less bullets
|
||||
if(flipped)
|
||||
if(get_dir(loc, from) == dir) //Flipped tables catch mroe bullets
|
||||
chance += 20
|
||||
chance += 50
|
||||
else
|
||||
return 1 //But only from one side
|
||||
if(prob(chance))
|
||||
@@ -363,7 +364,7 @@
|
||||
if (prob(15)) M.Weaken(5)
|
||||
M.apply_damage(8,def_zone = "head")
|
||||
visible_message("\red [G.assailant] slams [G.affecting]'s face against \the [src]!")
|
||||
msg_admin_attack("[user.name]([user.ckey]) slams [M.name]'s([M.ckey]) face against \the [src]!")
|
||||
msg_admin_attack("[user.name]([user.ckey]) slams [M.name]'s([M.ckey]) face against \the [src]! - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[M.x];Y=[M.y];Z=[M.z]'>JMP</a>")
|
||||
playsound(src.loc, 'sound/weapons/tablehit1.ogg', 50, 1)
|
||||
else
|
||||
user << "\red You need a better grip to do that!"
|
||||
@@ -544,7 +545,7 @@
|
||||
desc = "Do not apply fire to this. Rumour says it burns easily."
|
||||
icon_state = "wood_table"
|
||||
parts = /obj/item/weapon/table_parts/wood
|
||||
health = 50
|
||||
health = 100
|
||||
/*
|
||||
* Reinforced tables
|
||||
*/
|
||||
@@ -552,7 +553,7 @@
|
||||
name = "reinforced table"
|
||||
desc = "A version of the four legged table. It is stronger."
|
||||
icon_state = "reinf_table"
|
||||
health = 200
|
||||
health = 400
|
||||
var/status = 2
|
||||
parts = /obj/item/weapon/table_parts/reinforced
|
||||
|
||||
|
||||
@@ -79,10 +79,14 @@
|
||||
/obj/structure/target_stake/proc/unbuckle()
|
||||
if(buckled_mob)
|
||||
if(buckled_mob.buckled == src) //this is probably unneccesary, but it doesn't hurt
|
||||
if(!buckled_mob.mob_has_gravity(buckled_mob.loc))
|
||||
buckled_mob.float(1)
|
||||
|
||||
buckled_mob.buckled = null
|
||||
buckled_mob.anchored = initial(buckled_mob.anchored)
|
||||
buckled_mob.update_canmove()
|
||||
buckled_mob = null
|
||||
|
||||
return
|
||||
|
||||
/obj/structure/target_stake/proc/manual_unbuckle(mob/user as mob)
|
||||
@@ -138,6 +142,8 @@
|
||||
M.loc = src.loc
|
||||
M.dir = src.dir
|
||||
M.update_canmove()
|
||||
if(!M.mob_has_gravity(M.loc))
|
||||
M.float(0)
|
||||
src.buckled_mob = M
|
||||
src.add_fingerprint(user)
|
||||
return
|
||||
@@ -344,6 +344,14 @@
|
||||
M.clean_blood()
|
||||
if(ishuman(M))
|
||||
M:update_inv_gloves()
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/B = M
|
||||
if(B.gloves)
|
||||
var/obj/item/clothing/gloves/C = B.gloves
|
||||
C.gsr = 0
|
||||
else
|
||||
B.gsr = 0
|
||||
|
||||
for(var/mob/V in viewers(src, null))
|
||||
V.show_message("\blue [M] washes their hands using \the [src].")
|
||||
|
||||
@@ -392,6 +400,11 @@
|
||||
if(user.get_active_hand() != I) return //Person has switched hands or the item in their hands
|
||||
|
||||
O.clean_blood()
|
||||
|
||||
if(istype(O, /obj/item/clothing))
|
||||
var/obj/item/clothing/G = O
|
||||
G.gsr = 0
|
||||
|
||||
user.visible_message( \
|
||||
"\blue [user] washes \a [I] using \the [src].", \
|
||||
"\blue You wash \a [I] using \the [src].")
|
||||
|
||||
@@ -180,20 +180,20 @@
|
||||
M.apply_damage(7)
|
||||
hit(10)
|
||||
visible_message("\red [user] slams [M] against \the [src]!")
|
||||
msg_admin_attack("[user.name]([user.ckey]) slams [M.name]'s([M.ckey]) against \the [src]!")
|
||||
msg_admin_attack("[user.name]([user.ckey]) slams [M.name]'s([M.ckey]) against \the [src]! - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[M.x];Y=[M.y];Z=[M.z]'>JMP</a>")
|
||||
if(2)
|
||||
if (prob(50))
|
||||
M.Weaken(1)
|
||||
M.apply_damage(10)
|
||||
hit(25)
|
||||
visible_message("\red <b>[user] bashes [M] against \the [src]!</b>")
|
||||
msg_admin_attack("[user.name]([user.ckey]) bashes [M.name]'s([M.ckey]) against \the [src]!")
|
||||
msg_admin_attack("[user.name]([user.ckey]) bashes [M.name]'s([M.ckey]) against \the [src]! - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[M.x];Y=[M.y];Z=[M.z]'>JMP</a>")
|
||||
if(3)
|
||||
M.Weaken(5)
|
||||
M.apply_damage(20)
|
||||
hit(50)
|
||||
visible_message("\red <big><b>[user] crushes [M] against \the [src]!</b></big>")
|
||||
msg_admin_attack("[user.name]([user.ckey]) crushes [M.name]'s([M.ckey]) against \the [src]!")
|
||||
msg_admin_attack("[user.name]([user.ckey]) crushes [M.name]'s([M.ckey]) against \the [src]! - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[M.x];Y=[M.y];Z=[M.z]'>JMP</a>")
|
||||
return
|
||||
if(istype(W, /obj/item/weapon/screwdriver))
|
||||
if(reinf && state >= 1)
|
||||
|
||||
@@ -155,12 +155,12 @@
|
||||
var/obj/item/weapon/grab/G = W
|
||||
if (istype(G.affecting, /mob/living))
|
||||
var/mob/living/M = G.affecting
|
||||
if (G.state < 2)
|
||||
if(user.a_intent == "hurt")
|
||||
if(user.a_intent == "hurt")
|
||||
if (G.state >= 2)
|
||||
if (prob(15)) M.Weaken(5)
|
||||
M.apply_damage(8,def_zone = "head")
|
||||
visible_message("\red [G.assailant] slams [G.affecting]'s face against \the [src]!")
|
||||
msg_admin_attack("[user.name]([user.ckey]) slams [M.name]'s([M.ckey]) face against \the [src]!")
|
||||
msg_admin_attack("[user.name]([user.ckey]) slams [M.name]'s([M.ckey]) face against \the [src]! - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[M.x];Y=[M.y];Z=[M.z]'>JMP</a>")
|
||||
// switch(rand(1,3))
|
||||
// if(1)
|
||||
// playsound(src.loc, 'sound/weapons/genhit1.ogg', 50, 1)
|
||||
|
||||
@@ -43,12 +43,12 @@
|
||||
var/obj/item/weapon/grab/G = W
|
||||
if (istype(G.affecting, /mob/living))
|
||||
var/mob/living/M = G.affecting
|
||||
if (G.state < 2)
|
||||
if(user.a_intent == "hurt")
|
||||
if(user.a_intent == "hurt")
|
||||
if (G.state >= 2)
|
||||
if (prob(15)) M.Weaken(5)
|
||||
M.apply_damage(16,def_zone = "head")
|
||||
visible_message("\red [G.assailant] slams [G.affecting]'s face against \the [src]!")
|
||||
msg_admin_attack("[user.name]([user.ckey]) slams [M.name]'s([M.ckey]) face against \the [src]!")
|
||||
msg_admin_attack("[user.name]([user.ckey]) slams [M.name]'s([M.ckey]) face against \the [src]! - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[M.x];Y=[M.y];Z=[M.z]'>JMP</a>")
|
||||
// switch(rand(1,3))
|
||||
// if(1)
|
||||
// playsound(src.loc, 'sound/weapons/genhit1.ogg', 50, 1)
|
||||
|
||||
+56
-33
@@ -11,11 +11,17 @@ var/global/floorIsLava = 0
|
||||
if(R_ADMIN & C.holder.rights)
|
||||
C << msg
|
||||
|
||||
/proc/message_mods(var/msg)
|
||||
msg = "<span class=\"admin\"><span class=\"prefix\">MOD LOG:</span> <span class=\"message\">[msg]</span></span>"
|
||||
for(var/client/C in admins)
|
||||
if(R_MOD & C.holder.rights && !(R_ADMIN & C.holder.rights))
|
||||
C << msg
|
||||
|
||||
/proc/msg_admin_attack(var/text) //Toggleable Attack Messages
|
||||
log_attack(text)
|
||||
var/rendered = "<span class=\"admin\"><span class=\"prefix\">ATTACK:</span> <span class=\"message\">[text]</span></span>"
|
||||
for(var/client/C in admins)
|
||||
if(R_MOD || R_ADMIN & C.holder.rights)
|
||||
if((R_ADMIN & C.holder.rights) || (R_MOD & C.holder.rights))
|
||||
if(C.prefs.toggles & CHAT_ATTACKLOGS)
|
||||
var/msg = rendered
|
||||
C << msg
|
||||
@@ -28,9 +34,12 @@ var/global/floorIsLava = 0
|
||||
set name = "Show Player Panel"
|
||||
set desc="Edit player (respawn, ban, heal, etc)"
|
||||
|
||||
// if(!check_rights(R_ADMIN|R_MOD)) return
|
||||
|
||||
if(!M)
|
||||
usr << "You seem to be selecting a mob that doesn't exist anymore."
|
||||
return
|
||||
|
||||
if (!istype(src,/datum/admins))
|
||||
src = usr.client.holder
|
||||
if (!istype(src,/datum/admins))
|
||||
@@ -51,39 +60,48 @@ var/global/floorIsLava = 0
|
||||
body += {"
|
||||
<br><br>\[
|
||||
<a href='?_src_=vars;Vars=\ref[M]'>VV</a> -
|
||||
<a href='?src=\ref[src];traitor=\ref[M]'>TP</a> -
|
||||
<a href='?src=\ref[usr];priv_msg=\ref[M]'>PM</a> -
|
||||
<a href='?src=\ref[src];subtlemessage=\ref[M]'>SM</a> -
|
||||
<a href='?src=\ref[src];adminplayerobservejump=\ref[M]'>JMP</a>\] </b><br>
|
||||
<b>Mob type</b> = [M.type]<br><br>
|
||||
<A href='?src=\ref[src];boot2=\ref[M]'>Kick</A> |
|
||||
<A href='?_src_=holder;warn=[M.ckey]'>Warn</A> |
|
||||
<A href='?src=\ref[src];newban=\ref[M]'>Ban</A> |
|
||||
<A href='?src=\ref[src];jobban2=\ref[M]'>Jobban</A> |
|
||||
<A href='?src=\ref[src];notes=show;mob=\ref[M]'>Notes</A>
|
||||
<a href='?src=\ref[usr];priv_msg=\ref[M]'>PM</a>
|
||||
"}
|
||||
|
||||
if(M.client)
|
||||
body += "| <A HREF='?src=\ref[src];sendtoprison=\ref[M]'>Prison</A> | "
|
||||
var/muted = M.client.prefs.muted
|
||||
body += {"<br><b>Mute: </b>
|
||||
\[<A href='?src=\ref[src];mute=\ref[M];mute_type=[MUTE_IC]'><font color='[(muted & MUTE_IC)?"red":"blue"]'>IC</font></a> |
|
||||
<A href='?src=\ref[src];mute=\ref[M];mute_type=[MUTE_OOC]'><font color='[(muted & MUTE_OOC)?"red":"blue"]'>OOC</font></a> |
|
||||
<A href='?src=\ref[src];mute=\ref[M];mute_type=[MUTE_PRAY]'><font color='[(muted & MUTE_PRAY)?"red":"blue"]'>PRAY</font></a> |
|
||||
<A href='?src=\ref[src];mute=\ref[M];mute_type=[MUTE_ADMINHELP]'><font color='[(muted & MUTE_ADMINHELP)?"red":"blue"]'>ADMINHELP</font></a> |
|
||||
<A href='?src=\ref[src];mute=\ref[M];mute_type=[MUTE_DEADCHAT]'><font color='[(muted & MUTE_DEADCHAT)?"red":"blue"]'>DEADCHAT</font></a>\]
|
||||
(<A href='?src=\ref[src];mute=\ref[M];mute_type=[MUTE_ALL]'><font color='[(muted & MUTE_ALL)?"red":"blue"]'>toggle all</font></a>)
|
||||
if(check_rights(R_ADMIN|R_MOD))
|
||||
body += {"
|
||||
-<a href='?src=\ref[src];traitor=\ref[M]'>TP</a> -
|
||||
<a href='?src=\ref[src];subtlemessage=\ref[M]'>SM</a> -
|
||||
<a href='?src=\ref[src];adminplayerobservejump=\ref[M]'>JMP</a>\] </b><br>
|
||||
<b>Mob type</b> = [M.type]<br><br>
|
||||
<A href='?src=\ref[src];boot2=\ref[M]'>Kick</A> |
|
||||
<A href='?_src_=holder;warn=[M.ckey]'>Warn</A> |
|
||||
<A href='?src=\ref[src];newban=\ref[M]'>Ban</A> |
|
||||
<A href='?src=\ref[src];jobban2=\ref[M]'>Jobban</A> |
|
||||
<A href='?src=\ref[src];notes=show;mob=\ref[M]'>Notes</A>
|
||||
"}
|
||||
|
||||
body += {"<br><br>
|
||||
<A href='?src=\ref[src];jumpto=\ref[M]'><b>Jump to</b></A> |
|
||||
<A href='?src=\ref[src];getmob=\ref[M]'>Get</A> |
|
||||
<A href='?src=\ref[src];sendmob=\ref[M]'>Send To</A>
|
||||
<br><br>
|
||||
[check_rights(R_ADMIN|R_MOD,0) ? "<A href='?src=\ref[src];traitor=\ref[M]'>Traitor panel</A> | " : "" ]
|
||||
<A href='?src=\ref[src];narrateto=\ref[M]'>Narrate to</A> |
|
||||
<A href='?src=\ref[src];subtlemessage=\ref[M]'>Subtle message</A>
|
||||
"}
|
||||
if(M.client)
|
||||
body += "| <A HREF='?src=\ref[src];sendtoprison=\ref[M]'>Prison</A> | "
|
||||
var/muted = M.client.prefs.muted
|
||||
body += {"<br><b>Mute: </b>
|
||||
\[<A href='?src=\ref[src];mute=\ref[M];mute_type=[MUTE_IC]'><font color='[(muted & MUTE_IC)?"red":"blue"]'>IC</font></a> |
|
||||
<A href='?src=\ref[src];mute=\ref[M];mute_type=[MUTE_OOC]'><font color='[(muted & MUTE_OOC)?"red":"blue"]'>OOC</font></a> |
|
||||
<A href='?src=\ref[src];mute=\ref[M];mute_type=[MUTE_PRAY]'><font color='[(muted & MUTE_PRAY)?"red":"blue"]'>PRAY</font></a> |
|
||||
<A href='?src=\ref[src];mute=\ref[M];mute_type=[MUTE_ADMINHELP]'><font color='[(muted & MUTE_ADMINHELP)?"red":"blue"]'>ADMINHELP</font></a> |
|
||||
<A href='?src=\ref[src];mute=\ref[M];mute_type=[MUTE_DEADCHAT]'><font color='[(muted & MUTE_DEADCHAT)?"red":"blue"]'>DEADCHAT</font></a>\]
|
||||
(<A href='?src=\ref[src];mute=\ref[M];mute_type=[MUTE_ALL]'><font color='[(muted & MUTE_ALL)?"red":"blue"]'>toggle all</font></a>)
|
||||
"}
|
||||
|
||||
body += {"<br><br>
|
||||
<A href='?src=\ref[src];jumpto=\ref[M]'><b>Jump to</b></A> |
|
||||
<A href='?src=\ref[src];getmob=\ref[M]'>Get</A> |
|
||||
<A href='?src=\ref[src];sendmob=\ref[M]'>Send To</A>
|
||||
<br><br>
|
||||
[check_rights(R_ADMIN|R_MOD,0) ? "<A href='?src=\ref[src];traitor=\ref[M]'>Traitor panel</A> | " : "" ]
|
||||
<A href='?src=\ref[src];narrateto=\ref[M]'>Narrate to</A> |
|
||||
<A href='?src=\ref[src];subtlemessage=\ref[M]'>Subtle message</A>
|
||||
"}
|
||||
else
|
||||
body += {"
|
||||
] </b><br>
|
||||
<b>Mob type</b> = [M.type]<br><br>
|
||||
"}
|
||||
|
||||
if (M.client)
|
||||
if(!istype(M, /mob/new_player))
|
||||
@@ -192,11 +210,14 @@ var/global/floorIsLava = 0
|
||||
/datum/admins/proc/PlayerNotes()
|
||||
set category = "Admin"
|
||||
set name = "Player Notes"
|
||||
if (!istype(src,/datum/admins))
|
||||
/* if (!istype(src,/datum/admins))
|
||||
src = usr.client.holder
|
||||
if (!istype(src,/datum/admins))
|
||||
usr << "Error: you are not an admin!"
|
||||
return
|
||||
*/
|
||||
if(!check_rights(R_ADMIN|R_MOD))
|
||||
return
|
||||
PlayerNotesPage(1)
|
||||
|
||||
/datum/admins/proc/PlayerNotesPage(page)
|
||||
@@ -246,7 +267,6 @@ var/global/floorIsLava = 0
|
||||
if(!infos || !infos.len) return 0
|
||||
else return 1
|
||||
|
||||
|
||||
/datum/admins/proc/show_player_info(var/key as text)
|
||||
set category = "Admin"
|
||||
set name = "Show Player Info"
|
||||
@@ -855,11 +875,12 @@ var/global/floorIsLava = 0
|
||||
set desc="Delay the game start/end"
|
||||
set name="Delay"
|
||||
|
||||
if(!check_rights(R_SERVER|R_DEV)) return
|
||||
if(!check_rights(R_SERVER|R_DEBUG)) return
|
||||
if (!ticker || ticker.current_state != GAME_STATE_PREGAME)
|
||||
ticker.delay_end = !ticker.delay_end
|
||||
log_admin("[key_name(usr)] [ticker.delay_end ? "delayed the round end" : "has made the round end normally"].")
|
||||
message_admins("\blue [key_name(usr)] [ticker.delay_end ? "delayed the round end" : "has made the round end normally"].", 1)
|
||||
message_mods("\blue [key_name(usr)] [ticker.delay_end ? "delayed the round end" : "has made the round end normally"].", 1)
|
||||
return //alert("Round end delayed", null, null, null, null, null)
|
||||
going = !( going )
|
||||
if (!( going ))
|
||||
@@ -1237,6 +1258,7 @@ proc/move_alien_ship()
|
||||
|
||||
log_admin("[key_name(usr)] winded [key_name(M)]!")
|
||||
message_admins("[key_name_admin(usr)] winded [key_name_admin(M)]!", 1)
|
||||
message_mods("[key_name_admin(usr)] winded [key_name_admin(M)]!")
|
||||
// feedback_add_details("admin_verb","WIND") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
// Chop chop.
|
||||
return
|
||||
@@ -1249,4 +1271,5 @@ proc/move_alien_ship()
|
||||
|
||||
log_admin("[key_name(usr)] unwinded [key_name(M)]!")
|
||||
message_admins("[key_name_admin(usr)] unwinded [key_name_admin(M)]!", 1)
|
||||
message_mods("[key_name_admin(usr)] unwinded [key_name_admin(M)]!", 1)
|
||||
return
|
||||
@@ -1,17 +1,17 @@
|
||||
//admin verb groups - They can overlap if you so wish. Only one of each verb will exist in the verbs list regardless
|
||||
var/list/admin_verbs_default = list(
|
||||
/datum/admins/proc/show_player_panel, /*shows an interface for individual players, with various links (links require additional flags*/
|
||||
/client/proc/player_panel,
|
||||
/client/proc/toggleadminhelpsound, /*toggles whether we hear a sound when adminhelps/PMs are used*/
|
||||
/client/proc/deadmin_self, /*destroys our own admin datum so we can play as a regular player*/
|
||||
/client/proc/hide_verbs, /*hides all our adminverbs*/
|
||||
/client/proc/hide_most_verbs, /*hides all our hideable adminverbs*/
|
||||
/client/proc/debug_variables, /*allows us to -see- the variables of any instance in the game. +VAREDIT needed to modify*/
|
||||
/client/proc/check_antagonists, /*shows all antags*/
|
||||
/client/proc/cmd_mentor_check_new_players
|
||||
// /client/proc/deadchat /*toggles deadchat on/off*/
|
||||
)
|
||||
var/list/admin_verbs_admin = list(
|
||||
/datum/admins/proc/show_player_panel, /*shows an interface for individual players, with various links (links require additional flags*/
|
||||
/client/proc/check_antagonists, /*shows all antags*/
|
||||
/client/proc/alertlevels,
|
||||
/client/proc/cmd_admin_wind,
|
||||
/client/proc/cmd_admin_unwind,
|
||||
@@ -53,11 +53,11 @@ var/list/admin_verbs_admin = list(
|
||||
/client/proc/check_antagonists,
|
||||
/client/proc/admin_memo, /*admin memo system. show/delete/write. +SERVER needed to delete admin memos of others*/
|
||||
/client/proc/dsay, /*talk in deadchat using our ckey/fakekey*/
|
||||
/client/proc/toggleprayers, /*toggles prayers on/off*/
|
||||
// /client/proc/toggle_hear_deadcast, /*toggles whether we hear deadchat*/
|
||||
/client/proc/toggle_hear_radio, /*toggles whether we hear the radio*/
|
||||
/client/proc/investigate_show, /*various admintools for investigation. Such as a singulo grief-log*/
|
||||
/client/proc/secrets,
|
||||
/client/proc/toggleprayers,
|
||||
/datum/admins/proc/toggleooc, /*toggles ooc on/off for everyone*/
|
||||
/datum/admins/proc/togglelooc,
|
||||
/datum/admins/proc/toggleoocdead, /*toggles ooc on/off for everyone who is dead*/
|
||||
@@ -96,7 +96,7 @@ var/list/admin_verbs_fun = list(
|
||||
/client/proc/cmd_admin_dress,
|
||||
/client/proc/cmd_admin_gib_self,
|
||||
/client/proc/drop_bomb,
|
||||
/client/proc/everyone_random,
|
||||
/client/proc/everyone_random,
|
||||
/client/proc/cinematic,
|
||||
/client/proc/one_click_antag,
|
||||
/datum/admins/proc/toggle_aliens,
|
||||
@@ -105,6 +105,7 @@ var/list/admin_verbs_fun = list(
|
||||
/client/proc/cmd_admin_add_freeform_ai_law,
|
||||
/client/proc/cmd_admin_add_random_ai_law,
|
||||
/client/proc/make_sound,
|
||||
/client/proc/make_area_sound,
|
||||
/client/proc/toggle_random_events,
|
||||
/client/proc/set_ooc,
|
||||
/client/proc/editappear
|
||||
@@ -112,8 +113,6 @@ var/list/admin_verbs_fun = list(
|
||||
var/list/admin_verbs_dev = list(
|
||||
/client/proc/dsay,
|
||||
/client/proc/togglebuildmodeself,
|
||||
/datum/admins/proc/restart,
|
||||
/datum/admins/proc/delay,
|
||||
/client/proc/giveruntimelog,
|
||||
/client/proc/getruntimelog,
|
||||
/client/proc/cmd_admin_list_open_jobs,
|
||||
@@ -128,12 +127,11 @@ var/list/admin_verbs_dev = list(
|
||||
/client/proc/cmd_admin_delete,
|
||||
/client/proc/cmd_debug_del_all,
|
||||
/client/proc/cmd_debug_tog_aliens,
|
||||
/datum/admins/proc/restart,
|
||||
/client/proc/air_report,
|
||||
/client/proc/reload_admins,
|
||||
/client/proc/restart_controller,
|
||||
/client/proc/enable_debug_verbs,
|
||||
/client/proc/callproc,
|
||||
/client/proc/toggleattacklogs,
|
||||
/client/proc/toggledebuglogs,
|
||||
/client/proc/SDQL_query,
|
||||
/client/proc/SDQL2_query,
|
||||
@@ -168,8 +166,10 @@ var/list/admin_verbs_server = list(
|
||||
/client/proc/check_customitem_activity
|
||||
)
|
||||
var/list/admin_verbs_debug = list(
|
||||
/client/proc/getruntimelog, /*allows us to access runtime logs to somebody*/
|
||||
/client/proc/getruntimelog, /*allows us to access runtime logs to somebody*/
|
||||
/client/proc/cmd_admin_list_open_jobs,
|
||||
/datum/admins/proc/restart,
|
||||
/datum/admins/proc/delay,
|
||||
/client/proc/Debug2,
|
||||
/client/proc/kill_air,
|
||||
/client/proc/ZASSettings,
|
||||
@@ -188,7 +188,6 @@ var/list/admin_verbs_debug = list(
|
||||
/client/proc/toggledebuglogs,
|
||||
/client/proc/SDQL_query,
|
||||
/client/proc/SDQL2_query,
|
||||
/client/proc/cmd_dev_bst,
|
||||
/client/proc/cmd_dev_reset_gravity
|
||||
)
|
||||
var/list/admin_verbs_possess = list(
|
||||
@@ -240,6 +239,7 @@ var/list/admin_verbs_hideable = list(
|
||||
/client/proc/cmd_admin_add_random_ai_law,
|
||||
/client/proc/cmd_admin_create_centcom_report,
|
||||
/client/proc/make_sound,
|
||||
/client/proc/make_area_sound,
|
||||
/client/proc/toggle_random_events,
|
||||
/client/proc/cmd_admin_add_random_ai_law,
|
||||
/client/proc/Set_Holiday,
|
||||
@@ -274,6 +274,8 @@ var/list/admin_verbs_hideable = list(
|
||||
/proc/release
|
||||
)
|
||||
var/list/admin_verbs_mod = list(
|
||||
/client/proc/check_antagonists, /*shows all antags*/
|
||||
/client/proc/cmd_admin_check_contents,
|
||||
/client/proc/cmd_admin_wind,
|
||||
/client/proc/cmd_admin_unwind,
|
||||
/client/proc/cmd_admin_pm_context, /*right-click adminPM interface*/
|
||||
@@ -281,9 +283,11 @@ var/list/admin_verbs_mod = list(
|
||||
/client/proc/debug_variables, /*allows us to -see- the variables of any instance in the game.*/
|
||||
/client/proc/toggleattacklogs,
|
||||
/client/proc/toggledebuglogs,
|
||||
/client/proc/toggleprayers,
|
||||
/datum/admins/proc/PlayerNotes,
|
||||
/client/proc/admin_ghost, /*allows us to ghost/reenter body at will*/
|
||||
/client/proc/cmd_mod_say,
|
||||
/client/proc/check_ai_laws,
|
||||
/datum/admins/proc/show_player_info,
|
||||
/client/proc/player_panel_new,
|
||||
/client/proc/dsay,
|
||||
@@ -520,7 +524,7 @@ var/list/admin_verbs_mod = list(
|
||||
#define AUTOBANTIME 10
|
||||
|
||||
/client/proc/warn(warned_ckey)
|
||||
if(!check_rights(R_ADMIN)) return
|
||||
if(!check_rights(R_ADMIN|R_MOD)) return
|
||||
|
||||
if(!warned_ckey || !istext(warned_ckey)) return
|
||||
if(warned_ckey in admin_datums)
|
||||
@@ -540,18 +544,22 @@ var/list/admin_verbs_mod = list(
|
||||
ban_unban_log_save("[ckey] warned [warned_ckey], resulting in a [AUTOBANTIME] minute autoban.")
|
||||
if(C)
|
||||
message_admins("[key_name_admin(src)] has warned [key_name_admin(C)] resulting in a [AUTOBANTIME] minute ban.")
|
||||
message_mods("[key_name_admin(src)] has warned [key_name_admin(C)] resulting in a [AUTOBANTIME] minute ban.")
|
||||
C << "<font color='red'><BIG><B>You have been autobanned due to a warning by [ckey].</B></BIG><br>This is a temporary ban, it will be removed in [AUTOBANTIME] minutes."
|
||||
del(C)
|
||||
else
|
||||
message_admins("[key_name_admin(src)] has warned [warned_ckey] resulting in a [AUTOBANTIME] minute ban.")
|
||||
message_mods("[key_name_admin(src)] has warned [warned_ckey] resulting in a [AUTOBANTIME] minute ban.")
|
||||
AddBan(warned_ckey, D.last_id, "Autobanning due to too many formal warnings", ckey, 1, AUTOBANTIME)
|
||||
feedback_inc("ban_warn",1)
|
||||
else
|
||||
if(C)
|
||||
C << "<font color='red'><BIG><B>You have been formally warned by an administrator.</B></BIG><br>Further warnings will result in an autoban.</font>"
|
||||
message_admins("[key_name_admin(src)] has warned [key_name_admin(C)]. They have [MAX_WARNS-D.warns] strikes remaining.")
|
||||
message_mods("[key_name_admin(src)] has warned [key_name_admin(C)]. They have [MAX_WARNS-D.warns] strikes remaining.")
|
||||
else
|
||||
message_admins("[key_name_admin(src)] has warned [warned_ckey] (DC). They have [MAX_WARNS-D.warns] strikes remaining.")
|
||||
message_mods("[key_name_admin(src)] has warned [warned_ckey] (DC). They have [MAX_WARNS-D.warns] strikes remaining.")
|
||||
|
||||
feedback_add_details("admin_verb","WARN") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
@@ -658,6 +666,23 @@ var/list/admin_verbs_mod = list(
|
||||
message_admins("\blue [key_name_admin(usr)] made [O] at [O.x], [O.y], [O.z]. make a sound", 1)
|
||||
feedback_add_details("admin_verb","MS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/proc/make_area_sound(var/turf/T in world) // -- TLE
|
||||
set category = "Special Verbs"
|
||||
set name = "Make Area Sound"
|
||||
set desc = "Display a message to everyone in the area (Experimental)"
|
||||
if(T)
|
||||
var/message = input("What do you want the message to be?", "Make Area Sound (Experimental)") as text|null
|
||||
if(!message)
|
||||
return
|
||||
var/area/A = get_area(T)
|
||||
if(!A == A.master)
|
||||
A = A.master
|
||||
for(var/area/SubA in A.related)
|
||||
for (var/mob/V in SubA)
|
||||
V.show_message(message, 2)
|
||||
log_admin("[key_name(usr)] made [A.name] make a sound")
|
||||
message_admins("\blue [key_name_admin(usr)] made [A.name] make a sound", 1)
|
||||
feedback_add_details("admin_verb","MAS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/proc/togglebuildmodeself()
|
||||
set name = "Toggle Build Mode Self"
|
||||
@@ -797,6 +822,9 @@ var/list/admin_verbs_mod = list(
|
||||
/client/proc/playernotes()
|
||||
set name = "Show Player Info"
|
||||
set category = "Admin"
|
||||
if(!check_rights(R_ADMIN|R_MOD))
|
||||
return
|
||||
|
||||
if(holder)
|
||||
holder.PlayerNotes()
|
||||
return
|
||||
@@ -926,7 +954,7 @@ var/list/admin_verbs_mod = list(
|
||||
set desc = "SoundScopes Advanced debug logs, this will create spam for yourself"
|
||||
|
||||
if(!check_rights(R_DEV)) return
|
||||
if(!check_rights(R_MOD)) return
|
||||
if(!check_rights(R_ADMIN)) return
|
||||
|
||||
prefs.toggles ^= CHAT_SCOPES_DEBUG
|
||||
if (prefs.toggles & CHAT_SCOPES_DEBUG)
|
||||
|
||||
@@ -323,7 +323,13 @@
|
||||
if (!usr.client.holder)
|
||||
return
|
||||
var/dat = "<html><head><title>Player Menu</title></head>"
|
||||
dat += "<body><table border=1 cellspacing=5><B><tr><th>Name</th><th>Real Name</th><th>Assigned Job</th><th>Key</th><th>Options</th><th>PM</th><th>Traitor?</th></tr></B>"
|
||||
dat += "<body><table border=1 cellspacing=5><B><tr><th>Name</th><th>Real Name</th><th>Assigned Job</th><th>Key</th><th>Options</th><th>PM</th>"
|
||||
|
||||
if(check_rights(R_ADMIN|R_MOD, 0))
|
||||
dat += "<th>Traitor?</th></tr></B>"
|
||||
else
|
||||
dat += "<th>View Var's</th></tr></B>"
|
||||
|
||||
//add <th>IP:</th> to this if wanting to add back in IP checking
|
||||
//add <td>(IP: [M.lastKnownIP])</td> if you want to know their ip to the lists below
|
||||
var/list/mobs = sortmobs()
|
||||
@@ -364,13 +370,16 @@
|
||||
<td align=center><A HREF='?src=\ref[src];adminplayeropts=\ref[M]'>X</A></td>
|
||||
<td align=center><A href='?src=\ref[usr];priv_msg=\ref[M]'>PM</A></td>
|
||||
"}
|
||||
switch(is_special_character(M))
|
||||
if(0)
|
||||
dat += {"<td align=center><A HREF='?src=\ref[src];traitor=\ref[M]'>Traitor?</A></td>"}
|
||||
if(1)
|
||||
dat += {"<td align=center><A HREF='?src=\ref[src];traitor=\ref[M]'><font color=red>Traitor?</font></A></td>"}
|
||||
if(2)
|
||||
dat += {"<td align=center><A HREF='?src=\ref[src];traitor=\ref[M]'><font color=red><b>Traitor?</b></font></A></td>"}
|
||||
if(!check_rights(R_ADMIN|R_MOD, 0))
|
||||
dat += {"<td align=center><a HREF='?_src_=vars;Vars=\ref[M]'>VV</a></td>"}
|
||||
else
|
||||
switch(is_special_character(M))
|
||||
if(0)
|
||||
dat += {"<td align=center><A HREF='?src=\ref[src];traitor=\ref[M]'>Traitor?</A></td>"}
|
||||
if(1)
|
||||
dat += {"<td align=center><A HREF='?src=\ref[src];traitor=\ref[M]'><font color=red>Traitor?</font></A></td>"}
|
||||
if(2)
|
||||
dat += {"<td align=center><A HREF='?src=\ref[src];traitor=\ref[M]'><font color=red><b>Traitor?</b></font></A></td>"}
|
||||
|
||||
dat += "</table></body></html>"
|
||||
|
||||
|
||||
@@ -48,6 +48,10 @@
|
||||
log_admin("[key_name(usr)] has spawned vox raiders.")
|
||||
if(!src.makeVoxRaiders())
|
||||
usr << "\red Unfortunately there weren't enough candidates available."
|
||||
if("12")
|
||||
log_admin("[key_name(usr)] has spawned a vampire.")
|
||||
if(!src.makeVampire())
|
||||
usr << "\red Unfortunately there weren't enough candidates available."
|
||||
else if(href_list["dbsearchckey"] || href_list["dbsearchadmin"])
|
||||
var/adminckey = href_list["dbsearchadmin"]
|
||||
var/playerckey = href_list["dbsearchckey"]
|
||||
@@ -248,6 +252,7 @@
|
||||
ticker.delay_end = !ticker.delay_end
|
||||
log_admin("[key_name(usr)] [ticker.delay_end ? "delayed the round end" : "has made the round end normally"].")
|
||||
message_admins("\blue [key_name(usr)] [ticker.delay_end ? "delayed the round end" : "has made the round end normally"].", 1)
|
||||
message_mods("\blue [key_name(usr)] [ticker.delay_end ? "delayed the round end" : "has made the round end normally"].")
|
||||
href_list["secretsadmin"] = "check_antagonist"
|
||||
|
||||
else if(href_list["simplemake"])
|
||||
@@ -1306,7 +1311,7 @@
|
||||
check_antagonists()
|
||||
|
||||
else if(href_list["adminplayerobservecoodjump"])
|
||||
if(!check_rights(R_ADMIN)) return
|
||||
if(!check_rights(R_MOD,0) && !check_rights(R_ADMIN)) return
|
||||
|
||||
var/x = text2num(href_list["X"])
|
||||
var/y = text2num(href_list["Y"])
|
||||
@@ -1470,6 +1475,20 @@
|
||||
log_admin("[src.owner] replied to [key_name(H)]'s Syndicate message with the message [input].")
|
||||
H << "You hear something crackle in your headset for a moment before a voice speaks. \"Please stand by for a message from your benefactor. Message as follows, agent. <b>\"[input]\"</b> Message ends.\""
|
||||
|
||||
else if(href_list["CentcommAIReply"])
|
||||
var/mob/living/silicon/ai/H = locate(href_list["CentcommAIReply"])
|
||||
if(!istype(H))
|
||||
usr << "This can only be used on instances of type /mob/living/silicon"
|
||||
return
|
||||
|
||||
var/input = input(src.owner, "Please enter a message to reply to [key_name(H)] via encripted.","Outgoing message from Central Command", "")
|
||||
if(!input) return
|
||||
|
||||
src.owner << "You sent [input] to [H] via a secure channel."
|
||||
log_admin("[src.owner] replied to [key_name(H)]'s Centcomm message with the message [input].")
|
||||
message_admins("[src.owner] replied to [key_name(H)]'s Centcom message with: \"[input]\"")
|
||||
H << "An encripted connection was made and a file was uploaded to your systems. \"Please stand by for a message from Central Command. Message as follows. <b>\"[input]\"</b> Message ends.\""
|
||||
|
||||
else if(href_list["CentcommFaxView"])
|
||||
var/info = locate(href_list["CentcommFaxView"])
|
||||
|
||||
@@ -1510,6 +1529,7 @@
|
||||
src.owner << "Message reply to transmitted successfully."
|
||||
log_admin("[key_name(src.owner)] replied to a fax message from [key_name(H)]: [input]")
|
||||
message_admins("[key_name_admin(src.owner)] replied to a fax message from [key_name_admin(H)]", 1)
|
||||
message_mods("[key_name_admin(src.owner)] replied to a fax message from [key_name_admin(H)]")
|
||||
|
||||
|
||||
else if(href_list["jumpto"])
|
||||
|
||||
@@ -33,7 +33,7 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey","
|
||||
if(!msg) return
|
||||
var/original_msg = msg
|
||||
|
||||
|
||||
|
||||
|
||||
//explode the input msg into a list
|
||||
var/list/msglist = text2list(msg, " ")
|
||||
@@ -94,9 +94,11 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey","
|
||||
msg = "\blue <b><font color=red>HELP: </font>[get_options_bar(mob, 2, 1, 1)][ai_found ? " (<A HREF='?_src_=holder;adminchecklaws=[ref_mob]'>CL</A>)" : ""]:</b> [msg]"
|
||||
|
||||
//send this msg to all admins
|
||||
var/admin_number_present = 0
|
||||
var/admin_number_afk = 0
|
||||
for(var/client/X in admins)
|
||||
if((R_ADMIN|R_MOD) & X.holder.rights)
|
||||
admin_number_present++
|
||||
if(X.is_afk())
|
||||
admin_number_afk++
|
||||
if(X.prefs.toggles & SOUND_ADMINHELP)
|
||||
@@ -106,7 +108,7 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey","
|
||||
//show it to the person adminhelping too
|
||||
src << "<font color='blue'>PM to-<b>Admins</b>: [original_msg]</font>"
|
||||
|
||||
var/admin_number_present = admins.len - admin_number_afk
|
||||
admin_number_present = (admin_number_present - admin_number_afk)
|
||||
log_admin("HELP: [key_name(src)]: [original_msg] - heard by [admin_number_present] non-AFK admins.")
|
||||
if(admin_number_present <= 0)
|
||||
if(!admin_number_afk)
|
||||
|
||||
@@ -7,10 +7,12 @@
|
||||
Debug2 = 0
|
||||
message_admins("[key_name(src)] toggled debugging off.")
|
||||
log_admin("[key_name(src)] toggled debugging off.")
|
||||
log_debug("[key_name(src)] toggled debugging off.")
|
||||
else
|
||||
Debug2 = 1
|
||||
message_admins("[key_name(src)] toggled debugging on.")
|
||||
log_admin("[key_name(src)] toggled debugging on.")
|
||||
log_debug("[key_name(src)] toggled debugging off.")
|
||||
|
||||
feedback_add_details("admin_verb","DG2") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
@@ -29,7 +31,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
set category = "Debug"
|
||||
set name = "Advanced ProcCall"
|
||||
|
||||
if(!check_rights(R_DEBUG|R_DEV)) return
|
||||
if(!check_rights(R_DEBUG)) return
|
||||
|
||||
spawn(0)
|
||||
var/target = null
|
||||
@@ -434,6 +436,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
GLOBAL_RADIO_TYPE = !GLOBAL_RADIO_TYPE // toggle
|
||||
log_admin("[key_name(src)] has turned the experimental radio system [GLOBAL_RADIO_TYPE ? "on" : "off"].")
|
||||
message_admins("[key_name_admin(src)] has turned the experimental radio system [GLOBAL_RADIO_TYPE ? "on" : "off"].", 0)
|
||||
msg_scopes("[key_name_admin(src)] has turned the experimental radio system [GLOBAL_RADIO_TYPE ? "on" : "off"].", 1)
|
||||
feedback_add_details("admin_verb","SRM") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/proc/cmd_admin_areatest()
|
||||
@@ -1100,11 +1103,12 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
return
|
||||
|
||||
/client/proc/startSinglo()
|
||||
|
||||
set category = "Debug"
|
||||
set name = "Start Singularity"
|
||||
set desc = "Sets up the singularity and all machines to get power flowing through the station"
|
||||
|
||||
if(!check_rights(R_DEBUG)) return
|
||||
|
||||
if(alert("Are you sure? This will start up the engine. Should only be used during debug!",,"Yes","No") != "Yes")
|
||||
return
|
||||
|
||||
|
||||
@@ -144,7 +144,7 @@ var/list/debug_verbs = list (
|
||||
,/client/proc/splash
|
||||
,/client/proc/cmd_admin_areatest
|
||||
,/client/proc/cmd_admin_rejuvenate
|
||||
,/datum/admins/proc/show_traitor_panel
|
||||
// ,/datum/admins/proc/show_traitor_panel //What has this got to do with mapping
|
||||
,/client/proc/print_jobban_old
|
||||
,/client/proc/print_jobban_old_filter
|
||||
,/client/proc/forceEvent
|
||||
|
||||
@@ -372,4 +372,5 @@
|
||||
A.vars[variable] = O.vars[variable]
|
||||
|
||||
log_admin("[key_name(src)] mass modified [original_name]'s [variable] to [O.vars[variable]]")
|
||||
message_admins("[key_name_admin(src)] mass modified [original_name]'s [variable] to [O.vars[variable]]", 1)
|
||||
message_admins("[key_name_admin(src)] mass modified [original_name]'s [variable] to [O.vars[variable]]", 1)
|
||||
msg_scopes("[key_name_admin(src)] mass modified [original_name]'s [variable] to [O.vars[variable]]", 1)//Tell the devs
|
||||
@@ -264,6 +264,12 @@ var/list/forbidden_varedit_object_types = list(
|
||||
if("marked datum")
|
||||
L[L.Find(variable)] = holder.marked_datum
|
||||
|
||||
//Runtimes >_< List's are like organised messes.
|
||||
//This worked the other day.
|
||||
// world.log << "### VarEdit by [src]: [variable]=[html_encode("[L[L.Find(variable)]]")]"
|
||||
// log_admin("[key_name(src)] modified [variable] to [L[L.Find(variable)]]")
|
||||
// message_admins("[key_name_admin(src)] modified [variable] to [L[L.Find(variable)]]", 1)
|
||||
// msg_scopes("[key_name_admin(src)] modified [variable] to [L[L.Find(variable)]]", 1) // Tell dev's to but not log twice
|
||||
|
||||
/client/proc/modify_variables(var/atom/O, var/param_var_name = null, var/autodetect_class = 0)
|
||||
if(!check_rights(R_VAREDIT|R_DEV)) return
|
||||
@@ -498,4 +504,4 @@ var/list/forbidden_varedit_object_types = list(
|
||||
world.log << "### VarEdit by [src]: [O.type] [variable]=[html_encode("[O.vars[variable]]")]"
|
||||
log_admin("[key_name(src)] modified [original_name]'s [variable] to [O.vars[variable]]")
|
||||
message_admins("[key_name_admin(src)] modified [original_name]'s [variable] to [O.vars[variable]]", 1)
|
||||
|
||||
msg_scopes("[key_name_admin(src)] modified [original_name]'s [variable] to [O.vars[variable]]", 1) // Tell dev's to but not log twice
|
||||
|
||||
@@ -18,6 +18,7 @@ client/proc/one_click_antag()
|
||||
<a href='?src=\ref[src];makeAntag=5'>Make Malf AI</a><br>
|
||||
<a href='?src=\ref[src];makeAntag=6'>Make Wizard (Requires Ghosts)</a><br>
|
||||
<a href='?src=\ref[src];makeAntag=11'>Make Vox Raiders (Requires Ghosts)</a><br>
|
||||
<a href='?src=\ref[src];makeAntag=12'>Make Vampire</a><br>
|
||||
"}
|
||||
/* These dont work just yet
|
||||
Ninja, aliens and deathsquad I have not looked into yet
|
||||
@@ -100,9 +101,10 @@ client/proc/one_click_antag()
|
||||
if(!applicant.stat)
|
||||
if(applicant.mind)
|
||||
if (!applicant.mind.special_role)
|
||||
if(!jobban_isbanned(applicant, "changeling") && !jobban_isbanned(applicant, "Syndicate"))
|
||||
if(!(applicant.job in temp.restricted_jobs))
|
||||
candidates += applicant
|
||||
if(applicant.species.name != "Machine")
|
||||
if(!jobban_isbanned(applicant, "changeling") && !jobban_isbanned(applicant, "Syndicate"))
|
||||
if(!(applicant.job in temp.restricted_jobs))
|
||||
candidates += applicant
|
||||
|
||||
if(candidates.len)
|
||||
var/numChanglings = min(candidates.len, 3)
|
||||
@@ -520,4 +522,35 @@ client/proc/one_click_antag()
|
||||
ticker.mode.traitors += new_vox.mind
|
||||
new_vox.equip_vox_raider()
|
||||
|
||||
return new_vox
|
||||
return new_vox
|
||||
|
||||
/datum/admins/proc/makeVampire()
|
||||
|
||||
var/datum/game_mode/vampire/temp = new
|
||||
if(config.protect_roles_from_antagonist)
|
||||
temp.restricted_jobs += temp.protected_jobs
|
||||
|
||||
var/list/mob/living/carbon/human/candidates = list()
|
||||
var/mob/living/carbon/human/H = null
|
||||
|
||||
for(var/mob/living/carbon/human/applicant in player_list)
|
||||
if(applicant.client.prefs.be_special & BE_VAMPIRE)
|
||||
if(!applicant.stat)
|
||||
if(applicant.mind)
|
||||
if (!applicant.mind.special_role)
|
||||
if(applicant.species.name != "Machine")
|
||||
if(!jobban_isbanned(applicant, "vampire") && !jobban_isbanned(applicant, "Syndicate"))
|
||||
if(!(applicant.job in temp.restricted_jobs))
|
||||
candidates += applicant
|
||||
|
||||
if(candidates.len)
|
||||
var/numVampires = min(candidates.len, 3)
|
||||
|
||||
for(var/i = 0, i<numVampires, i++)
|
||||
H = pick(candidates)
|
||||
H.mind.make_Vampire()
|
||||
candidates.Remove(H)
|
||||
|
||||
return 1
|
||||
|
||||
return 0
|
||||
@@ -20,19 +20,27 @@
|
||||
msg = "\blue \icon[cross] <b><font color=purple>PRAY: </font>[key_name(src, 1)] (<A HREF='?_src_=holder;adminmoreinfo=\ref[src]'>?</A>) (<A HREF='?_src_=holder;adminplayeropts=\ref[src]'>PP</A>) (<A HREF='?_src_=vars;Vars=\ref[src]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=\ref[src]'>SM</A>) (<A HREF='?_src_=holder;adminplayerobservejump=\ref[src]'>JMP</A>) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) (<A HREF='?_src_=holder;adminspawncookie=\ref[src]'>SC</a>):</b> [msg]"
|
||||
|
||||
for(var/client/C in admins)
|
||||
if(C.prefs.toggles & CHAT_PRAYER)
|
||||
if(((R_ADMIN & C.holder.rights) || (R_MOD & C.holder.rights)) && (C.prefs.toggles & CHAT_PRAYER))
|
||||
C << msg
|
||||
usr << "Your prayers have been received by the gods."
|
||||
|
||||
feedback_add_details("admin_verb","PR") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
//log_admin("HELP: [key_name(src)]: [msg]")
|
||||
|
||||
/proc/Centcomm_announce(var/text , var/mob/Sender , var/iamessage)
|
||||
//Stealing the second var because why not)
|
||||
/proc/Centcomm_announce(var/text , var/mob/Sender , var/silicon = 0 , var/iamessage)
|
||||
var/msg = copytext(sanitize(text), 1, MAX_MESSAGE_LEN)
|
||||
msg = "\blue <b><font color=orange>CENTCOMM[iamessage ? " IA" : ""]:</font>[key_name(Sender, 1)] (<A HREF='?_src_=holder;adminplayeropts=\ref[Sender]'>PP</A>) (<A HREF='?_src_=vars;Vars=\ref[Sender]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=\ref[Sender]'>SM</A>) (<A HREF='?_src_=holder;adminplayerobservejump=\ref[Sender]'>JMP</A>) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) (<A HREF='?_src_=holder;BlueSpaceArtillery=\ref[Sender]'>BSA</A>) (<A HREF='?_src_=holder;CentcommReply=\ref[Sender]'>RPLY</A>):</b> [msg]"
|
||||
admins << msg
|
||||
if(silicon)
|
||||
msg = "\blue <b><font color=orange>CENTCOMM(A.L.I.C.E.):</font>[key_name(Sender, 1)] (<A HREF='?_src_=holder;adminplayeropts=\ref[Sender]'>PP</A>) (<A HREF='?_src_=vars;Vars=\ref[Sender]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=\ref[Sender]'>SM</A>) (<A HREF='?_src_=holder;adminplayerobservejump=\ref[Sender]'>JMP</A>) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) (<A HREF='?_src_=holder;BlueSpaceArtillery=\ref[Sender]'>BSA</A>) (<A HREF='?_src_=holder;CentcommAIReply=\ref[Sender]'>RPLY</A>):</b> [msg]"
|
||||
else
|
||||
msg = "\blue <b><font color=orange>CENTCOMM[iamessage ? " IA" : ""]:</font>[key_name(Sender, 1)] (<A HREF='?_src_=holder;adminplayeropts=\ref[Sender]'>PP</A>) (<A HREF='?_src_=vars;Vars=\ref[Sender]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=\ref[Sender]'>SM</A>) (<A HREF='?_src_=holder;adminplayerobservejump=\ref[Sender]'>JMP</A>) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) (<A HREF='?_src_=holder;BlueSpaceArtillery=\ref[Sender]'>BSA</A>) (<A HREF='?_src_=holder;CentcommReply=\ref[Sender]'>RPLY</A>):</b> [msg]"
|
||||
for(var/client/C in admins)
|
||||
if((R_ADMIN & C.holder.rights) || (R_MOD & C.holder.rights))
|
||||
C << msg
|
||||
|
||||
/proc/Syndicate_announce(var/text , var/mob/Sender)
|
||||
var/msg = copytext(sanitize(text), 1, MAX_MESSAGE_LEN)
|
||||
msg = "\blue <b><font color=crimson>SYNDICATE:</font>[key_name(Sender, 1)] (<A HREF='?_src_=holder;adminplayeropts=\ref[Sender]'>PP</A>) (<A HREF='?_src_=vars;Vars=\ref[Sender]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=\ref[Sender]'>SM</A>) (<A HREF='?_src_=holder;adminplayerobservejump=\ref[Sender]'>JMP</A>) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) (<A HREF='?_src_=holder;BlueSpaceArtillery=\ref[Sender]'>BSA</A>) (<A HREF='?_src_=holder;SyndicateReply=\ref[Sender]'>RPLY</A>):</b> [msg]"
|
||||
admins << msg
|
||||
for(var/client/C in admins)
|
||||
if((R_ADMIN & C.holder.rights) || (R_MOD & C.holder.rights))
|
||||
C << msg
|
||||
@@ -993,8 +993,10 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
config.allow_random_events = 1
|
||||
usr << "Random events enabled"
|
||||
message_admins("Admin [key_name_admin(usr)] has enabled random events.", 1)
|
||||
msg_scopes("Admin [key_name_admin(usr)] has enabled random events.", 0)
|
||||
else
|
||||
config.allow_random_events = 0
|
||||
usr << "Random events disabled"
|
||||
message_admins("Admin [key_name_admin(usr)] has disabled random events.", 1)
|
||||
msg_scopes("Admin [key_name_admin(usr)] has disabled random events.", 0)
|
||||
feedback_add_details("admin_verb","TRE") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
if(newtick && newtick <= 2 && newtick > 0)
|
||||
log_admin("[key_name(src)] has modified world.tick_lag to [newtick]", 0)
|
||||
message_admins("[key_name(src)] has modified world.tick_lag to [newtick]", 0)
|
||||
msg_scopes("[key_name(src)] has modified world.tick_lag to [newtick]", 0)
|
||||
world.tick_lag = newtick
|
||||
feedback_add_details("admin_verb","TICKLAG") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
|
||||
@@ -46,6 +46,7 @@
|
||||
status = 1
|
||||
bombers += "[key_name(user)] welded a single tank bomb. Temp: [bombtank.air_contents.temperature-T0C]"
|
||||
message_admins("[key_name_admin(user)] welded a single tank bomb. Temp: [bombtank.air_contents.temperature-T0C]")
|
||||
message_mods("[key_name_admin(user)] welded a single tank bomb. Temp: [bombtank.air_contents.temperature-T0C]")
|
||||
user << "<span class='notice'>A pressure hole has been bored to [bombtank] valve. \The [bombtank] can now be ignited.</span>"
|
||||
else
|
||||
status = 0
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
var/obj/item/weapon/weldingtool/T = W
|
||||
if(T.welding & prob(50))
|
||||
message_admins("[key_name_admin(user)] triggered a welderpack explosion at ([loc.x],[loc.y],[loc.z]) - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[src.x];Y=[src.y];Z=[src.z]'>JMP</a>")
|
||||
message_mods("[key_name_admin(user)] triggered a welderpack explosion at ([loc.x],[loc.y],[loc.z]) - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[src.x];Y=[src.y];Z=[src.z]'>JMP</a>")
|
||||
log_game("[key_name(user)] triggered a fueltank explosion.")
|
||||
user << "\red That was stupid of you."
|
||||
explosion(get_turf(src),-1,0,2)
|
||||
|
||||
@@ -54,7 +54,7 @@
|
||||
return
|
||||
cmd_admin_irc_pm()
|
||||
return
|
||||
|
||||
|
||||
|
||||
|
||||
//Logs all hrefs
|
||||
@@ -155,6 +155,12 @@
|
||||
if(holder)
|
||||
add_admin_verbs()
|
||||
admin_memo_show()
|
||||
if(!ooc_allowed)
|
||||
src << "<span class='alert'>OOC is Disabled</span>"
|
||||
if(!looc_allowed)
|
||||
src << "<span class='alert'>LOOC is Disabled</span>"
|
||||
if(!dsay_allowed)
|
||||
src << "<span class='alert'>Deadchat is Disabled</span>"
|
||||
|
||||
log_client_to_db()
|
||||
|
||||
@@ -255,7 +261,7 @@
|
||||
//send resources to the client. It's here in its own proc so we can move it around easiliy if need be
|
||||
/client/proc/send_resources()
|
||||
// preload_vox() //Causes long delays with initial start window and subsequent windows when first logged in.
|
||||
|
||||
|
||||
getFiles(
|
||||
'html/search.js',
|
||||
'html/panels.css',
|
||||
|
||||
@@ -1401,6 +1401,17 @@ datum/preferences
|
||||
|
||||
else continue
|
||||
|
||||
// Wheelchair necessary?
|
||||
var/datum/organ/external/l_foot = character.get_organ("l_foot")
|
||||
var/datum/organ/external/r_foot = character.get_organ("r_foot")
|
||||
if((!l_foot || l_foot.status & ORGAN_DESTROYED) && (!r_foot || r_foot.status & ORGAN_DESTROYED))
|
||||
var/obj/structure/stool/bed/chair/wheelchair/W = new /obj/structure/stool/bed/chair/wheelchair (character.loc)
|
||||
character.buckled = W
|
||||
character.update_canmove()
|
||||
W.dir = character.dir
|
||||
W.buckled_mob = character
|
||||
W.add_fingerprint(character)
|
||||
|
||||
if(underwear > underwear_m.len || underwear < 1)
|
||||
underwear = 0 //I'm sure this is 100% unnecessary, but I'm paranoid... sue me. //HAH NOW NO MORE MAGIC CLONING UNDIES
|
||||
character.underwear = underwear
|
||||
@@ -1416,6 +1427,7 @@ datum/preferences
|
||||
//Debugging report to track down a bug, which randomly assigned the plural gender to people.
|
||||
if(character.gender in list(PLURAL, NEUTER))
|
||||
if(isliving(src)) //Ghosts get neuter by default
|
||||
msg_scopes("[character] ([character.ckey]) has spawned with their gender as plural or neuter.")
|
||||
message_admins("[character] ([character.ckey]) has spawned with their gender as plural or neuter. Please notify coders.")
|
||||
character.gender = MALE
|
||||
|
||||
|
||||
@@ -25,7 +25,7 @@ proc/populate_gear_list()
|
||||
path = /obj/item/weapon/dice/d20
|
||||
cost = 1
|
||||
|
||||
/datum/gear/dice
|
||||
/datum/gear/wallet
|
||||
display_name = "wallet"
|
||||
path = /obj/item/weapon/storage/wallet
|
||||
cost = 2
|
||||
@@ -41,6 +41,51 @@ proc/populate_gear_list()
|
||||
path = /obj/item/weapon/cane
|
||||
cost = 2
|
||||
|
||||
/datum/gear/briefcase
|
||||
display_name = "briefcase"
|
||||
path = /obj/item/weapon/storage/briefcase
|
||||
cost = 2
|
||||
|
||||
/datum/gear/securebriefcase
|
||||
display_name = "secure briefcase"
|
||||
path = /obj/item/weapon/storage/secure/briefcase
|
||||
cost = 3
|
||||
|
||||
/datum/gear/zippolighter
|
||||
display_name = "zippo lighter"
|
||||
path = /obj/item/weapon/lighter/zippo
|
||||
cost = 1
|
||||
|
||||
/datum/gear/recorder
|
||||
display_name = "universal recorder"
|
||||
path = /obj/item/device/taperecorder
|
||||
cost = 2
|
||||
|
||||
/datum/gear/camera
|
||||
display_name = "camera"
|
||||
path = /obj/item/device/camera
|
||||
cost = 1
|
||||
|
||||
/datum/gear/clipboard
|
||||
display_name = "clipboard"
|
||||
path = /obj/item/weapon/clipboard
|
||||
cost = 1
|
||||
|
||||
/datum/gear/redpen
|
||||
display_name = "red pen"
|
||||
path = /obj/item/weapon/pen/red
|
||||
cost = 1
|
||||
|
||||
/datum/gear/bluepen
|
||||
display_name = "blue pen"
|
||||
path = /obj/item/weapon/pen/blue
|
||||
cost = 1
|
||||
|
||||
/datum/gear/flask
|
||||
display_name = "flask"
|
||||
path = /obj/item/weapon/reagent_containers/food/drinks/flask/barflask
|
||||
cost = 2
|
||||
|
||||
/datum/gear/tie_horrible
|
||||
display_name = "horrible tie"
|
||||
path = /obj/item/clothing/tie/horrible
|
||||
@@ -395,12 +440,6 @@ proc/populate_gear_list()
|
||||
// slot = slot_w_uniform
|
||||
cost = 3
|
||||
|
||||
/datum/gear/exec_suit
|
||||
display_name = "executive suit"
|
||||
path = /obj/item/clothing/under/suit_jacket/really_black
|
||||
// slot = slot_w_uniform
|
||||
cost = 3
|
||||
|
||||
/datum/gear/oldmansuit
|
||||
display_name = "old man suit"
|
||||
path = /obj/item/clothing/under/lawyer/oldman
|
||||
@@ -423,10 +462,16 @@ proc/populate_gear_list()
|
||||
|
||||
/datum/gear/armpit
|
||||
display_name = "shoulder holster"
|
||||
// path = /obj/item/clothing/tie/holster/armpit
|
||||
path = /obj/item/clothing/tie/holster/armpit
|
||||
cost = 3
|
||||
allowed_roles = list("Captain", "Head of Personnel", "Security Officer", "Head of Security")
|
||||
|
||||
|
||||
/datum/gear/normal_beret
|
||||
display_name = "beret"
|
||||
path = /obj/item/clothing/head/beret
|
||||
cost = 3
|
||||
|
||||
/datum/gear/sec_beret
|
||||
display_name = "security beret"
|
||||
path = /obj/item/clothing/head/beret/sec
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/obj/item/clothing
|
||||
name = "clothing"
|
||||
var/list/species_restricted = null //Only these species can wear this kit.
|
||||
var/gsr = 0
|
||||
|
||||
//BS12: Species-restricted clothing check.
|
||||
/obj/item/clothing/mob_can_equip(M as mob, slot)
|
||||
|
||||
@@ -390,14 +390,14 @@
|
||||
desc = "A special helmet designed for work in a hazardous, low pressure environment. Has minor radiation shielding."
|
||||
icon_state = "rig0-medical"
|
||||
item_state = "medical_helm"
|
||||
species_restricted = list("tajara")
|
||||
species_restricted = list("Tajaran")
|
||||
|
||||
/obj/item/clothing/head/helmet/space/rig/medical/unathi
|
||||
name = "medical hardsuit helmet"
|
||||
desc = "A special helmet designed for work in a hazardous, low pressure environment. Has minor radiation shielding."
|
||||
icon_state = "rig0-medical"
|
||||
item_state = "medical_helm"
|
||||
species_restricted = list("unathi")
|
||||
species_restricted = list("Unathi")
|
||||
|
||||
/obj/item/clothing/head/helmet/space/rig/medical/skrell
|
||||
name = "medical hardsuit helmet"
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user