mirror of
https://github.com/vgstation-coders/vgstation13.git
synced 2025-12-09 16:14:13 +00:00
Due to git tree being fucked up for some reason, manually reapplied many man many fixes.
Just got to tip of real tree and got zipball, then unpacked it here.
This commit is contained in:
@@ -411,7 +411,7 @@ zone/proc/Rebuild()
|
||||
//
|
||||
var/list/turfs_to_consider = contents.Copy()
|
||||
|
||||
while(!sample.CanPass(null, sample, 1.5, 1))
|
||||
while(!sample || !sample.CanPass(null, sample, 1.5, 1))
|
||||
if(sample)
|
||||
turfs_to_consider.Remove(sample)
|
||||
sample = locate() in turfs_to_consider
|
||||
|
||||
@@ -311,7 +311,10 @@ var/global/datum/controller/gameticker/ticker
|
||||
|
||||
if(!delay_end)
|
||||
sleep(restart_timeout)
|
||||
world.Reboot()
|
||||
if(!delay_end)
|
||||
world.Reboot()
|
||||
else
|
||||
world << "\blue <B>An admin has delayed the round end</B>"
|
||||
else
|
||||
world << "\blue <B>An admin has delayed the round end</B>"
|
||||
|
||||
|
||||
@@ -22,6 +22,8 @@ proc/load_alienwhitelist()
|
||||
|
||||
//todo: admin aliens
|
||||
/proc/is_alien_whitelisted(mob/M, var/species)
|
||||
if(!config.usealienwhitelist)
|
||||
return 1
|
||||
if(species == "human" || species == "Human")
|
||||
return 1
|
||||
if(check_rights(R_ADMIN, 0))
|
||||
|
||||
@@ -9,7 +9,6 @@
|
||||
layer = 5
|
||||
|
||||
var/list/network = list("SS13")
|
||||
var/network_multi = "" //This is for when you want to place a camera on the map. Input them as a string seperated by commas "SS13,RD,SomeOtherNetwork"
|
||||
var/c_tag = null
|
||||
var/c_tag_order = 999
|
||||
var/status = 1.0
|
||||
@@ -45,24 +44,27 @@
|
||||
if(C != src && C.c_tag == src.c_tag && tempnetwork.len)
|
||||
world.log << "[src.c_tag] [src.x] [src.y] [src.z] conflicts with [C.c_tag] [C.x] [C.y] [C.z]"
|
||||
*/
|
||||
if(!src.network || src.network.len < 1)
|
||||
if(loc)
|
||||
error("[src.name] in [get_area(src)] (x:[src.x] y:[src.y] z:[src.z] has errored. [src.network?"Empty network list":"Null network list"]")
|
||||
else
|
||||
error("[src.name] in [get_area(src)]has errored. [src.network?"Empty network list":"Null network list"]")
|
||||
ASSERT(src.network)
|
||||
ASSERT(src.network.len > 0)
|
||||
..()
|
||||
|
||||
/obj/machinery/camera/initialize() //Lists dont work in the map editor so we have to translate a string into a list when the map initializes
|
||||
if(network_multi)
|
||||
network = text2list(network_multi,",")
|
||||
|
||||
/obj/machinery/camera/emp_act(severity)
|
||||
if(!isEmpProof())
|
||||
if(prob(100/severity))
|
||||
icon_state = "[initial(icon_state)]emp"
|
||||
for(var/i in network)
|
||||
network.Remove(i) //Not the best way but it will do. I think.
|
||||
var/list/previous_network = network
|
||||
network = list()
|
||||
cameranet.removeCamera(src)
|
||||
stat |= EMPED
|
||||
SetLuminosity(0)
|
||||
triggerCameraAlarm()
|
||||
spawn(900)
|
||||
network = initial(network)
|
||||
network = previous_network
|
||||
icon_state = initial(icon_state)
|
||||
stat &= ~EMPED
|
||||
cancelCameraAlarm()
|
||||
|
||||
@@ -69,8 +69,6 @@
|
||||
/obj/machinery/iv_drip/process()
|
||||
set background = 1
|
||||
|
||||
..()
|
||||
|
||||
if(src.attached)
|
||||
if(!(get_dist(src, src.attached) <= 1))
|
||||
visible_message("The needle is ripped out of [src.attached], doesn't that hurt?")
|
||||
@@ -101,7 +99,12 @@
|
||||
var/mob/living/carbon/human/T = attached
|
||||
|
||||
if(!istype(T)) return
|
||||
var/datum/reagent/B = new /datum/reagent/blood
|
||||
var/datum/reagent/B
|
||||
for(var/datum/reagent/blood/Blood in beaker.reagents.reagent_list)
|
||||
if(Blood.data && Blood.data["blood_type"]==T.dna.b_type)
|
||||
B = Blood
|
||||
break
|
||||
if(!B) B = new /datum/reagent/blood
|
||||
if(!T.dna)
|
||||
return
|
||||
if(NOCLONE in T.mutations)
|
||||
@@ -112,7 +115,7 @@
|
||||
if(T.vessel.get_reagent_amount("blood") < amount)
|
||||
return
|
||||
B.holder = beaker
|
||||
B.volume = amount
|
||||
B.volume += amount
|
||||
//set reagent data
|
||||
B.data["donor"] = T
|
||||
|
||||
@@ -121,7 +124,10 @@
|
||||
|
||||
B.data["blood_DNA"] = copytext(T.dna.unique_enzymes,1,0)
|
||||
if(T.resistances && T.resistances.len)
|
||||
B.data["resistances"] = T.resistances.Copy()
|
||||
if(B.data["resistances"])
|
||||
B.data["resistances"] |= T.resistances.Copy()
|
||||
else
|
||||
B.data["resistances"] = T.resistances.Copy()
|
||||
|
||||
B.data["blood_type"] = copytext(T.dna.b_type,1,0)
|
||||
|
||||
@@ -130,14 +136,15 @@
|
||||
temp_chem += R.name
|
||||
temp_chem[R.name] = R.volume
|
||||
B.data["trace_chem"] = list2params(temp_chem)
|
||||
B.data["antibodies"] = T.antibodies
|
||||
B.data["antibodies"] |= T.antibodies
|
||||
|
||||
T.vessel.remove_reagent("blood",amount) // Removes blood if human
|
||||
|
||||
beaker.reagents.reagent_list += B
|
||||
beaker.reagents.reagent_list |= B
|
||||
beaker.reagents.update_total()
|
||||
beaker.on_reagent_change()
|
||||
beaker.reagents.handle_reactions()
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/iv_drip/attack_hand(mob/user as mob)
|
||||
if(src.beaker)
|
||||
@@ -168,6 +175,11 @@
|
||||
..()
|
||||
if (!(usr in view(2)) && usr!=src.loc) return
|
||||
|
||||
if(mode == "take")
|
||||
usr << "The IV drip is taking blood."
|
||||
else if(mode == "give")
|
||||
usr << "The IV drip is injecting."
|
||||
|
||||
if(beaker)
|
||||
usr << "\blue Attached is \a [beaker] with:"
|
||||
if(beaker.reagents && beaker.reagents.reagent_list.len)
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
//var/emagged = 0 //Ignores if somebody doesn't have card access to that machine.
|
||||
var/seconds_electrified = 0 //Shock customers like an airlock.
|
||||
var/shoot_inventory = 0 //Fire items at customers! We're broken!
|
||||
var/shut_up = 0 //Stop spouting those godawful pitches!
|
||||
var/shut_up = 1 //Stop spouting those godawful pitches!
|
||||
var/extended_inventory = 0 //can we access the hidden inventory?
|
||||
var/panel_open = 0 //Hacking that vending machine. Gonna get a free candy bar.
|
||||
var/wires = 15
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
unacidable = 1 //and no deleting hoomans inside
|
||||
layer = MOB_LAYER //icon draw layer
|
||||
infra_luminosity = 15 //byond implementation is bugged.
|
||||
var/initial_icon = "" //Mech type for resetting icon.
|
||||
var/initial_icon = null //Mech type for resetting icon. Only used for reskinning kits (see custom items)
|
||||
var/can_move = 1
|
||||
var/mob/living/carbon/occupant = null
|
||||
var/step_in = 10 //make a step in step_in/10 sec.
|
||||
@@ -1655,7 +1655,10 @@
|
||||
return 0
|
||||
|
||||
/obj/mecha/proc/reset_icon()
|
||||
icon_state = initial_icon
|
||||
if (initial_icon)
|
||||
icon_state = initial_icon
|
||||
else
|
||||
icon_state = initial(icon_state)
|
||||
return icon_state
|
||||
|
||||
//////////////////////////////////////////
|
||||
|
||||
@@ -226,6 +226,7 @@
|
||||
user.attack_log += "\[[time_stamp()]\]<font color='red'> Attacked [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)]) (DAMTYE: [uppertext(src.damtype)])</font>"
|
||||
M.attack_log += "\[[time_stamp()]\]<font color='orange'> Attacked by [user.name] ([user.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)]) (DAMTYE: [uppertext(src.damtype)])</font>"
|
||||
log_attack("<font color='red'>[user.name] ([user.ckey]) attacked [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)]) (DAMTYE: [uppertext(src.damtype)])</font>" )
|
||||
msg_admin_attack("ATTACK: [user.name] ([user.ckey]) attacked [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])") //BS12 EDIT ALG
|
||||
|
||||
//spawn(1800) // this wont work right
|
||||
// M.lastattacker = null
|
||||
|
||||
@@ -131,6 +131,12 @@ move an amendment</a> to the drawing.</p>
|
||||
A.power_environ = 0
|
||||
A.always_unpowered = 0
|
||||
move_turfs_to_area(turfs, A)
|
||||
|
||||
A.always_unpowered = 0
|
||||
for(var/turf/T in A.contents)
|
||||
T.lighting_changed = 1
|
||||
lighting_controller.changed_turfs += T
|
||||
|
||||
spawn(5)
|
||||
//ma = A.master ? "[A.master]" : "(null)"
|
||||
//world << "DEBUG: create_area(5): <br>A.name=[A.name]<br>A.tag=[A.tag]<br>A.master=[ma]"
|
||||
|
||||
@@ -36,7 +36,10 @@
|
||||
*/
|
||||
|
||||
/obj/item/stack/tile/plasteel/proc/build(turf/S as turf)
|
||||
S.ChangeTurf(/turf/simulated/floor/plating)
|
||||
if (istype(S,/turf/space))
|
||||
S.ChangeTurf(/turf/simulated/floor/plating/airless)
|
||||
else
|
||||
S.ChangeTurf(/turf/simulated/floor/plating)
|
||||
// var/turf/simulated/floor/W = S.ReplaceWithFloor()
|
||||
// W.make_plating()
|
||||
return
|
||||
@@ -106,6 +106,7 @@
|
||||
icon_state = "securitybelt"
|
||||
item_state = "security"//Could likely use a better one.
|
||||
storage_slots = 7
|
||||
max_w_class = 3
|
||||
can_hold = list(
|
||||
"/obj/item/weapon/grenade/flashbang",
|
||||
"/obj/item/weapon/reagent_containers/spray/pepper",
|
||||
|
||||
@@ -439,3 +439,24 @@
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon_state = "red_crowbar"
|
||||
item_state = "crowbar_red"
|
||||
|
||||
/obj/item/weapon/weldingtool/attack(mob/M as mob, mob/user as mob)
|
||||
if(hasorgans(M))
|
||||
var/datum/organ/external/S = M:organs_by_name[user.zone_sel.selecting]
|
||||
if (!S) return
|
||||
if(!(S.status & ORGAN_ROBOT) || user.a_intent != "help")
|
||||
return ..()
|
||||
if(S.brute_dam)
|
||||
S.heal_damage(15,0,0,1)
|
||||
if(user != M)
|
||||
user.visible_message("\red You patch some dents on \the [M]'s [S.display_name]",\
|
||||
"\red \The [user] patches some dents on \the [M]'s [S.display_name] with \the [src]",\
|
||||
"You hear a welder.")
|
||||
else
|
||||
user.visible_message("\red You patch some dents on your [S.display_name]",\
|
||||
"\red \The [user] patches some dents on their [S.display_name] with \the [src]",\
|
||||
"You hear a welder.")
|
||||
else
|
||||
user << "Nothing to fix!"
|
||||
else
|
||||
return ..()
|
||||
|
||||
@@ -30,6 +30,9 @@
|
||||
manual_unbuckle(user)
|
||||
return
|
||||
|
||||
/obj/structure/stool/bed/MouseDrop(atom/over_object)
|
||||
return
|
||||
|
||||
/obj/structure/stool/bed/MouseDrop_T(mob/M as mob, mob/user as mob)
|
||||
if(!istype(M)) return
|
||||
buckle_mob(M, user)
|
||||
@@ -151,4 +154,4 @@
|
||||
new/obj/item/roller(get_turf(src))
|
||||
spawn(0)
|
||||
del(src)
|
||||
return
|
||||
return
|
||||
|
||||
@@ -231,10 +231,12 @@
|
||||
W.zone = src.zone
|
||||
W.zone.AddTurf(W)
|
||||
|
||||
for(var/turf/simulated/T in orange(src,1))
|
||||
air_master.tiles_to_update.Add(T)
|
||||
|
||||
W.levelupdate()
|
||||
return W
|
||||
else
|
||||
|
||||
/*if(istype(src, /turf/simulated) && src.zone)
|
||||
src.zone.rebuild = 1*/
|
||||
|
||||
@@ -249,6 +251,9 @@
|
||||
W.zone = src.zone
|
||||
W.zone.AddTurf(W)
|
||||
|
||||
for(var/turf/simulated/T in orange(src,1))
|
||||
air_master.tiles_to_update.Add(T)
|
||||
|
||||
W.levelupdate()
|
||||
return W
|
||||
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
|
||||
/mob
|
||||
|
||||
var/bloody_hands = 0
|
||||
@@ -11,15 +10,13 @@
|
||||
var/transfer_blood = 0
|
||||
var/mob/living/carbon/human/bloody_hands_mob
|
||||
|
||||
|
||||
|
||||
/proc/blood_incompatible(donor,receiver)
|
||||
|
||||
var/donor_antigen = copytext(donor,1,lentext(donor))
|
||||
var/receiver_antigen = copytext(receiver,1,lentext(receiver))
|
||||
var/donor_rh = findtext("+",donor)
|
||||
var/receiver_rh = findtext("+",receiver)
|
||||
|
||||
proc/blood_incompatible(donor,receiver)
|
||||
if(!donor || !receiver) return 0
|
||||
var
|
||||
donor_antigen = copytext(donor,1,lentext(donor))
|
||||
receiver_antigen = copytext(receiver,1,lentext(receiver))
|
||||
donor_rh = (findtext(donor,"+")>0)
|
||||
receiver_rh = (findtext(receiver,"+")>0)
|
||||
if(donor_rh && !receiver_rh) return 1
|
||||
switch(receiver_antigen)
|
||||
if("A")
|
||||
|
||||
@@ -7,18 +7,19 @@ var/global/floorIsLava = 0
|
||||
/proc/message_admins(var/msg)
|
||||
msg = "<span class=\"admin\"><span class=\"prefix\">ADMIN LOG:</span> <span class=\"message\">[msg]</span></span>"
|
||||
log_adminwarn(msg)
|
||||
admins << msg
|
||||
for(var/client/C in admins)
|
||||
if(R_ADMIN & C.holder.rights)
|
||||
C << msg
|
||||
|
||||
/*
|
||||
/proc/msg_admin_attack(var/text) //Toggleable Attack Messages
|
||||
var/rendered = "<span class=\"admin\"><span class=\"prefix\">ADMIN LOG:</span> <span class=\"message\">[text]</span></span>"
|
||||
log_adminwarn(rendered)
|
||||
for(var/client/C in admins)
|
||||
if (C.holder.level >= 1)
|
||||
if(!C.STFU_atklog)
|
||||
if(R_ADMIN & C.holder.rights)
|
||||
if(C.prefs.toggles & CHAT_ATTACKLOGS)
|
||||
var/msg = rendered
|
||||
C << msg
|
||||
*/
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////Panels
|
||||
|
||||
@@ -756,10 +757,15 @@ var/global/floorIsLava = 0
|
||||
|
||||
/datum/admins/proc/delay()
|
||||
set category = "Server"
|
||||
set desc="Delay the game start"
|
||||
set desc="Delay the game start/end"
|
||||
set name="Delay"
|
||||
|
||||
if(!check_rights(R_ADMIN)) return
|
||||
if (!ticker || ticker.current_state != GAME_STATE_PREGAME)
|
||||
return alert("Too late... The game has already started!", null, null, null, null, null)
|
||||
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)
|
||||
return //alert("Round end delayed", null, null, null, null, null)
|
||||
going = !( going )
|
||||
if (!( going ))
|
||||
world << "<b>The game start has been delayed.</b>"
|
||||
@@ -1084,4 +1090,4 @@ proc/move_alien_ship()
|
||||
alien_ship_location = 0
|
||||
else
|
||||
alien_ship_location = 1
|
||||
return
|
||||
return
|
||||
|
||||
@@ -7,6 +7,7 @@ var/list/admin_verbs_default = list(
|
||||
/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/deadchat /*toggles deadchat on/off*/
|
||||
)
|
||||
var/list/admin_verbs_admin = list(
|
||||
/client/proc/player_panel, /*shows an interface for all players, with links to various panels (old style)*/
|
||||
@@ -46,7 +47,6 @@ var/list/admin_verbs_admin = list(
|
||||
/client/proc/check_words, /*displays cult-words*/
|
||||
/client/proc/check_ai_laws, /*shows AI and borg laws*/
|
||||
/client/proc/admin_memo, /*admin memo system. show/delete/write. +SERVER needed to delete admin memos of others*/
|
||||
/client/proc/deadchat, /*toggles deadchat on/off*/
|
||||
/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*/
|
||||
@@ -62,13 +62,15 @@ var/list/admin_verbs_admin = list(
|
||||
/datum/admins/proc/show_player_info,
|
||||
/client/proc/free_slot, /*frees slot for chosen job*/
|
||||
/client/proc/cmd_admin_change_custom_event,
|
||||
/client/proc/cmd_admin_rejuvenate
|
||||
/client/proc/cmd_admin_rejuvenate,
|
||||
/client/proc/toggleattacklogs,
|
||||
/datum/admins/proc/show_skills
|
||||
)
|
||||
var/list/admin_verbs_ban = list(
|
||||
/client/proc/unban_panel,
|
||||
/client/proc/jobbans,
|
||||
/client/proc/unjobban_panel,
|
||||
/client/proc/DB_ban_panel
|
||||
// /client/proc/DB_ban_panel
|
||||
)
|
||||
var/list/admin_verbs_sounds = list(
|
||||
/client/proc/play_local_sound,
|
||||
@@ -88,7 +90,8 @@ var/list/admin_verbs_fun = list(
|
||||
/client/proc/cmd_admin_add_random_ai_law,
|
||||
/client/proc/make_sound,
|
||||
/client/proc/toggle_random_events,
|
||||
/client/proc/set_ooc
|
||||
/client/proc/set_ooc,
|
||||
/client/proc/editappear
|
||||
)
|
||||
var/list/admin_verbs_spawn = list(
|
||||
/datum/admins/proc/spawn_atom, /*allows us to spawn instances*/
|
||||
@@ -222,6 +225,7 @@ var/list/admin_verbs_mod = list(
|
||||
/client/proc/cmd_mod_say,
|
||||
/datum/admins/proc/show_player_info,
|
||||
/client/proc/player_panel_new,
|
||||
/datum/admins/proc/show_skills
|
||||
)
|
||||
/client/proc/add_admin_verbs()
|
||||
if(holder)
|
||||
@@ -632,12 +636,9 @@ var/list/admin_verbs_mod = list(
|
||||
set name = "Edit Appearance"
|
||||
set category = "Fun"
|
||||
|
||||
usr << "\red This proc has been temporarily disabled."
|
||||
return
|
||||
if(!check_rights(R_FUN)) return
|
||||
|
||||
//some random errors here, cbb fixing them right now
|
||||
//todo
|
||||
/*if(!istype(M, /mob/living/carbon/human))
|
||||
if(!istype(M, /mob/living/carbon/human))
|
||||
usr << "\red You can only do this to humans!"
|
||||
return
|
||||
switch(alert("Are you sure you wish to edit this mob's appearance? Skrell, Soghun and Tajaran can result in unintended consequences.",,"Yes","No"))
|
||||
@@ -668,49 +669,14 @@ var/list/admin_verbs_mod = list(
|
||||
M.s_tone = -M.s_tone + 35
|
||||
|
||||
// hair
|
||||
var/list/all_hairs = typesof(/datum/sprite_accessory/hair) - /datum/sprite_accessory/hair
|
||||
var/list/hairs = list()
|
||||
|
||||
// loop through potential hairs
|
||||
for(var/x in all_hairs)
|
||||
var/datum/sprite_accessory/hair/H = new x // create new hair datum based on type x
|
||||
hairs.Add(H.name) // add hair name to hairs
|
||||
del(H) // delete the hair after it's all done
|
||||
|
||||
var/new_style = input("Please select hair style", "Character Generation") as null|anything in hairs
|
||||
|
||||
// if new style selected (not cancel)
|
||||
if (new_style)
|
||||
M.h_style = new_style
|
||||
|
||||
for(var/x in all_hairs) // loop through all_hairs again. Might be slightly CPU expensive, but not significantly.
|
||||
var/datum/sprite_accessory/hair/H = new x // create new hair datum
|
||||
if(H.name == new_style)
|
||||
M.hair_style = H // assign the hair_style variable a new hair datum
|
||||
break
|
||||
else
|
||||
del(H) // if hair H not used, delete. BYOND can garbage collect, but better safe than sorry
|
||||
var/new_hstyle = input(usr, "Select a hair style", "Grooming") as null|anything in hair_styles_list
|
||||
if(new_hstyle)
|
||||
M.h_style = new_hstyle
|
||||
|
||||
// facial hair
|
||||
var/list/all_fhairs = typesof(/datum/sprite_accessory/facial_hair) - /datum/sprite_accessory/facial_hair
|
||||
var/list/fhairs = list()
|
||||
|
||||
for(var/x in all_fhairs)
|
||||
var/datum/sprite_accessory/facial_hair/H = new x
|
||||
fhairs.Add(H.name)
|
||||
del(H)
|
||||
|
||||
new_style = input("Please select facial style", "Character Generation") as null|anything in fhairs
|
||||
|
||||
if(new_style)
|
||||
M.f_style = new_style
|
||||
for(var/x in all_fhairs)
|
||||
var/datum/sprite_accessory/facial_hair/H = new x
|
||||
if(H.name == new_style)
|
||||
M.facial_hair_style = H
|
||||
break
|
||||
else
|
||||
del(H)
|
||||
var/new_fstyle = input(usr, "Select a facial hair style", "Grooming") as null|anything in facial_hair_styles_list
|
||||
if(new_fstyle)
|
||||
M.f_style = new_fstyle
|
||||
|
||||
var/new_gender = alert(usr, "Please select gender.", "Character Generation", "Male", "Female")
|
||||
if (new_gender)
|
||||
@@ -718,10 +684,10 @@ var/list/admin_verbs_mod = list(
|
||||
M.gender = MALE
|
||||
else
|
||||
M.gender = FEMALE
|
||||
M.rebuild_appearance()
|
||||
M.update_hair()
|
||||
M.update_body()
|
||||
M.check_dna(M)
|
||||
*/
|
||||
|
||||
/client/proc/playernotes()
|
||||
set name = "Show Player Info"
|
||||
set category = "Admin"
|
||||
@@ -744,3 +710,13 @@ var/list/admin_verbs_mod = list(
|
||||
if (job)
|
||||
job_master.FreeRole(job)
|
||||
return
|
||||
|
||||
/client/proc/toggleattacklogs()
|
||||
set name = "Toggle Attack Log Messages"
|
||||
set category = "Preferences"
|
||||
|
||||
prefs.toggles ^= CHAT_ATTACKLOGS
|
||||
if (prefs.toggles & CHAT_ATTACKLOGS)
|
||||
usr << "You now will get attack log messages"
|
||||
else
|
||||
usr << "You now won't get attack log messages"
|
||||
@@ -83,7 +83,7 @@
|
||||
body += "<a href='?src=\ref[src];subtlemessage="+ref+"'>SM</a> - "
|
||||
body += "<a href='?src=\ref[src];adminplayerobservejump="+ref+"'>JMP</a><br>"
|
||||
if(antagonist > 0)
|
||||
body += "<font size='2'><a href='?src=\ref[src];secretsadmin=check_antagonist'><font color='red'><b>Antagonist</b></font></a></font>";
|
||||
body += "<font size='2'><a href='?src=\ref[src];check_antagonist=1'><font color='red'><b>Antagonist</b></font></a></font>";
|
||||
|
||||
body += "</td></tr></table>";
|
||||
|
||||
@@ -194,7 +194,7 @@
|
||||
<tr id='title_tr'>
|
||||
<td align='center'>
|
||||
<font size='5'><b>Player panel</b></font><br>
|
||||
Hover over a line to see more information - <a href='?src=\ref[src];secretsadmin=check_antagonist'>Check antagonists</a>
|
||||
Hover over a line to see more information - <a href='?src=\ref[src];check_antagonist=1'>Check antagonists</a>
|
||||
<p>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
@@ -1254,7 +1254,7 @@
|
||||
show_player_panel(M)
|
||||
|
||||
else if(href_list["adminplayerobservejump"])
|
||||
if(!check_rights(R_ADMIN|R_MOD)) return
|
||||
if(!check_rights(R_MOD,0) && !check_rights(R_ADMIN)) return
|
||||
|
||||
var/mob/M = locate(href_list["adminplayerobservejump"])
|
||||
|
||||
@@ -1263,6 +1263,9 @@
|
||||
sleep(2)
|
||||
C.jumptomob(M)
|
||||
|
||||
else if(href_list["check_antagonist"])
|
||||
check_antagonists()
|
||||
|
||||
else if(href_list["adminplayerobservecoodjump"])
|
||||
if(!check_rights(R_ADMIN)) return
|
||||
|
||||
@@ -2197,8 +2200,6 @@
|
||||
if(!job) continue
|
||||
dat += "job: [job.title], current_positions: [job.current_positions], total_positions: [job.total_positions] <BR>"
|
||||
usr << browse(dat, "window=jobdebug;size=600x500")
|
||||
if("check_antagonist")
|
||||
check_antagonists()
|
||||
if("showailaws")
|
||||
output_ai_laws()
|
||||
if("showgm")
|
||||
@@ -2215,6 +2216,8 @@
|
||||
dat += text("<tr><td>[]</td><td>[]</td></tr>", H.name, H.get_assignment())
|
||||
dat += "</table>"
|
||||
usr << browse(dat, "window=manifest;size=440x410")
|
||||
if("check_antagonist")
|
||||
check_antagonists()
|
||||
if("DNA")
|
||||
var/dat = "<B>Showing DNA from blood.</B><HR>"
|
||||
dat += "<table cellspacing=5><tr><th>Name</th><th>DNA</th><th>Blood Type</th></tr>"
|
||||
|
||||
@@ -87,16 +87,17 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey","
|
||||
if(!mob) return //this doesn't happen
|
||||
|
||||
var/ref_mob = "\ref[mob]"
|
||||
msg = "\blue <b><font color=red>HELP: </font>[key_name(src, 1)] (<A HREF='?_src_=holder;adminmoreinfo=[ref_mob]'>?</A>) (<A HREF='?_src_=holder;adminplayeropts=[ref_mob]'>PP</A>) (<A HREF='?_src_=vars;Vars=[ref_mob]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=[ref_mob]'>SM</A>) (<A HREF='?_src_=holder;adminplayerobservejump=[ref_mob]'>JMP</A>) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) [ai_found ? " (<A HREF='?_src_=holder;adminchecklaws=[ref_mob]'>CL</A>)" : ""]:</b> [msg]"
|
||||
msg = "\blue <b><font color=red>HELP: </font>[key_name(src, 1)] (<A HREF='?_src_=holder;adminmoreinfo=[ref_mob]'>?</A>) (<A HREF='?_src_=holder;adminplayeropts=[ref_mob]'>PP</A>) (<A HREF='?_src_=vars;Vars=[ref_mob]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=[ref_mob]'>SM</A>) (<A HREF='?_src_=holder;adminplayerobservejump=[ref_mob]'>JMP</A>) (<A HREF='?_src_=holder;check_antagonist=1'>CA</A>) [ai_found ? " (<A HREF='?_src_=holder;adminchecklaws=[ref_mob]'>CL</A>)" : ""]:</b> [msg]"
|
||||
|
||||
//send this msg to all admins
|
||||
var/admin_number_afk = 0
|
||||
for(var/client/X in admins)
|
||||
if(X.is_afk())
|
||||
admin_number_afk++
|
||||
if(X.prefs.toggles & SOUND_ADMINHELP)
|
||||
X << 'sound/effects/adminhelp.ogg'
|
||||
X << msg
|
||||
if((R_ADMIN|R_MOD) & X.holder.rights)
|
||||
if(X.is_afk())
|
||||
admin_number_afk++
|
||||
if(X.prefs.toggles & SOUND_ADMINHELP)
|
||||
X << 'sound/effects/adminhelp.ogg'
|
||||
X << msg
|
||||
|
||||
//show it to the person adminhelping too
|
||||
src << "<font color='blue'>PM to-<b>Admins</b>: [original_msg]</font>"
|
||||
|
||||
@@ -11,10 +11,9 @@
|
||||
|
||||
if(check_rights(R_ADMIN,0))
|
||||
msg = "<span class='admin'><span class='prefix'>ADMIN:</span> <EM>[key_name(usr, 1)]</EM> (<a href='?_src_=holder;adminplayerobservejump=\ref[mob]'>JMP</A>): <span class='message'>[msg]</span></span>"
|
||||
admins << msg
|
||||
else
|
||||
msg = "<span class='adminobserver'><span class='prefix'>ADMIN:</span> <EM>[key_name(usr, 1)]:</EM> <span class='message'>[msg]</span></span>"
|
||||
admins << msg
|
||||
for(var/client/C in admins)
|
||||
if(R_ADMIN & C.holder.rights)
|
||||
C << msg
|
||||
|
||||
feedback_add_details("admin_verb","M") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
@@ -23,28 +22,17 @@
|
||||
set name = "Msay"
|
||||
set hidden = 1
|
||||
|
||||
if (!src.holder)
|
||||
src << "Only administrators may use this command."
|
||||
return
|
||||
|
||||
//todo: what? why does this not compile
|
||||
/*if (src.muted || src.muted_complete)
|
||||
src << "You are muted."
|
||||
return*/
|
||||
if(!check_rights(R_ADMIN|R_MOD)) return
|
||||
|
||||
msg = copytext(sanitize(msg), 1, MAX_MESSAGE_LEN)
|
||||
log_admin("MOD: [key_name(src)] : [msg]")
|
||||
|
||||
|
||||
if (!msg)
|
||||
return
|
||||
//feedback_add_details("admin_verb","M") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
for (var/mob/M in world)
|
||||
if (M.client && M.client.holder)
|
||||
if (src.holder.rank == "Admin Observer")
|
||||
M << "<span class='adminobserver'><span class='prefix'>MOD:</span> <EM>[key_name(usr, M,1)]:</EM> <span class='message'>[msg]</span></span>"
|
||||
else if (src.holder.rank == "Moderator")
|
||||
M << "<span class='mod'><span class='prefix'>MOD:</span> <EM>[key_name(usr, M,1)]</EM> (<A HREF='?src=\ref[M.client.holder];adminplayerobservejump=\ref[mob]'>JMP</A>): <span class='message'>[msg]</span></span>"
|
||||
else
|
||||
M << "<span class='adminmod'><span class='prefix'>MOD:</span> <EM>[key_name(usr, M,1)]</EM> (<A HREF='?src=\ref[M.client.holder];adminplayerobservejump=\ref[mob]'>JMP</A>): <span class='message'>[msg]</span></span>"
|
||||
var/color = "mod"
|
||||
if (check_rights(R_ADMIN,0))
|
||||
color = "adminmod"
|
||||
msg = "<span class='[color]'><span class='prefix'>MOD:</span> <EM>[key_name(src)]</EM> (<A HREF='?src=\ref[holder];adminplayerobservejump=\ref[mob]'>JMP</A>): <span class='message'>[msg]</span></span>"
|
||||
for(var/client/C in admins)
|
||||
if((R_ADMIN|R_MOD) & C.holder.rights)
|
||||
C << msg
|
||||
|
||||
@@ -474,7 +474,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
|
||||
switch(alert("Should this be announced to the general population?",,"Yes","No"))
|
||||
if("Yes")
|
||||
command_alert(input, maintitle=customname);
|
||||
command_alert(input, customname);
|
||||
if("No")
|
||||
world << "\red New NanoTrasen Update available at all communication consoles."
|
||||
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
//
|
||||
dmm_suite{
|
||||
load_map(var/dmm_file as file, var/z_offset as num){
|
||||
if(!z_offset){
|
||||
@@ -20,6 +21,7 @@ dmm_suite{
|
||||
var/ycrd=0
|
||||
var/xcrd=0
|
||||
for(var/zpos=findtext(tfile,"\n(1,1,");TRUE;zpos=findtext(tfile,"\n(1,1,",zpos+1,0)){
|
||||
if(zpos==0) break
|
||||
zcrd++
|
||||
world.maxz = max(world.maxz, zcrd+z_offset)
|
||||
ycrd=0
|
||||
@@ -43,7 +45,7 @@ dmm_suite{
|
||||
if(gpos+length(grid_line)+1>length(zgrid)){break}
|
||||
sleep(-1)
|
||||
}
|
||||
if(findtext(tfile,quote+"}",zpos,0)+2==tfile_len){break}
|
||||
if(findtext(tfile,quote+"}",zpos,0)+2>=tfile_len){break}
|
||||
sleep(-1)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
desc = "A special helmet designed for work in a hazardous, low-pressure environment. Has radiation shielding."
|
||||
icon_state = "rig0-engineering"
|
||||
item_state = "eng_helm"
|
||||
armor = list(melee = 40, bullet = 5, laser = 20,energy = 5, bomb = 35, bio = 100, rad = 60)
|
||||
armor = list(melee = 40, bullet = 5, laser = 20,energy = 5, bomb = 35, bio = 100, rad = 80)
|
||||
allowed = list(/obj/item/device/flashlight)
|
||||
var/brightness_on = 4 //luminosity when on
|
||||
var/on = 0
|
||||
@@ -41,8 +41,8 @@
|
||||
desc = "A special suit that protects against hazardous, low pressure environments. Has radiation shielding."
|
||||
icon_state = "rig-engineering"
|
||||
item_state = "eng_hardsuit"
|
||||
slowdown = 2
|
||||
armor = list(melee = 40, bullet = 5, laser = 20,energy = 5, bomb = 35, bio = 100, rad = 60)
|
||||
slowdown = 1
|
||||
armor = list(melee = 40, bullet = 5, laser = 20,energy = 5, bomb = 35, bio = 100, rad = 80)
|
||||
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/weapon/storage/bag/ore,/obj/item/device/t_scanner,/obj/item/weapon/pickaxe, /obj/item/weapon/rcd)
|
||||
heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
|
||||
max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECITON_TEMPERATURE
|
||||
@@ -74,6 +74,7 @@
|
||||
item_state = "mining_hardsuit"
|
||||
|
||||
|
||||
|
||||
//Syndicate rig
|
||||
/obj/item/clothing/head/helmet/space/rig/syndi
|
||||
name = "blood-red hardsuit helmet"
|
||||
@@ -82,6 +83,7 @@
|
||||
color = "syndi"
|
||||
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 35, bio = 100, rad = 60)
|
||||
|
||||
|
||||
/obj/item/clothing/suit/space/rig/syndi
|
||||
icon_state = "rig-syndi"
|
||||
name = "blood-red hardsuit"
|
||||
@@ -91,6 +93,7 @@
|
||||
armor = list(melee = 60, bullet = 50, laser = 30, energy = 15, bomb = 35, bio = 100, rad = 60)
|
||||
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword,/obj/item/weapon/handcuffs)
|
||||
|
||||
|
||||
//Wizard Rig
|
||||
/obj/item/clothing/head/helmet/space/rig/wizard
|
||||
name = "gem-encrusted hardsuit helmet"
|
||||
@@ -123,17 +126,21 @@
|
||||
name = "medical hardsuit"
|
||||
item_state = "medical_hardsuit"
|
||||
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/storage/firstaid,/obj/item/device/healthanalyzer,/obj/item/stack/medical)
|
||||
slowdown = 2.0
|
||||
//Security
|
||||
/obj/item/clothing/head/helmet/space/rig/security
|
||||
name = "security hardsuit helmet"
|
||||
icon_state = "rig0-sec"
|
||||
item_state = "sec_helm"
|
||||
color = "sec"
|
||||
armor = list(melee = 60, bullet = 10, laser = 30, energy = 5, bomb = 45, bio = 100, rad = 10)
|
||||
|
||||
/obj/item/clothing/suit/space/rig/security
|
||||
icon_state = "rig-sec"
|
||||
name = "security hardsuit"
|
||||
item_state = "sec_hardsuit"
|
||||
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank, /obj/item/weapon/gun/energy,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs)
|
||||
armor = list(melee = 60, bullet = 10, laser = 30, energy = 5, bomb = 45, bio = 100, rad = 10)
|
||||
allowed = list(/obj/item/weapon/gun/energy/laser, /obj/item/weapon/gun/energy/pulse_rifle, /obj/item/device/flashlight, /obj/item/weapon/tank/emergency_oxygen, /obj/item/weapon/gun/energy/taser, /obj/item/weapon/melee/baton)
|
||||
|
||||
//Atmospherics Rig (BS12)
|
||||
/obj/item/clothing/head/helmet/space/rig/atmos
|
||||
@@ -142,12 +149,14 @@
|
||||
icon_state = "rig0-atmos"
|
||||
item_state = "atmos_helm"
|
||||
color = "atmos"
|
||||
armor = list(melee = 35, bullet = 5, laser = 15,energy = 5, bomb = 30, bio = 100, rad = 5)
|
||||
armor = list(melee = 40, bullet = 0, laser = 0, energy = 0, bomb = 25, bio = 100, rad = 0)
|
||||
max_heat_protection_temperature = FIRE_HELMET_MAX_HEAT_PROTECITON_TEMPERATURE
|
||||
|
||||
/obj/item/clothing/suit/space/rig/atmos
|
||||
desc = "A special suit that protects against hazardous, low pressure environments. Has reduced radiation shielding to allow for greater mobility."
|
||||
icon_state = "rig-atmos"
|
||||
name = "atmos hardsuit"
|
||||
item_state = "atmos_hardsuit"
|
||||
armor = list(melee = 35, bullet = 5, laser = 15,energy = 5, bomb = 30, bio = 100, rad = 5)
|
||||
armor = list(melee = 40, bullet = 0, laser = 0, energy = 0, bomb = 25, bio = 100, rad = 0)
|
||||
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen)
|
||||
max_heat_protection_temperature = FIRESUIT_MAX_HEAT_PROTECITON_TEMPERATURE
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
icon = 'icons/obj/assemblies.dmi'
|
||||
icon_state = "posibrain"
|
||||
w_class = 3
|
||||
origin_tech = "engineering=4;materials=4;bluespace=2;programming=6"
|
||||
origin_tech = "engineering=4;materials=4;bluespace=2;programming=4"
|
||||
|
||||
var/list/construction_cost = list("metal"=500,"glass"=500,"silver"=200,"gold"=200,"plasma"=100,"diamond"=10)
|
||||
var/construction_time = 75
|
||||
@@ -68,7 +68,8 @@
|
||||
|
||||
src.brainmob << "<b>You are a positronic brain, brought into existence on [station_name()].</b>"
|
||||
src.brainmob << "<b>As a synthetic intelligence, you answer to all crewmembers, as well as the AI.</b>"
|
||||
src.brainmob << "Use say :b to speak to other artificial intelligences on the station."
|
||||
src.brainmob << "<b>Remember, the purpose of your existence is to serve the crew and the station. Above all else, do no harm.</b>"
|
||||
src.brainmob << "Use say :b to speak to other artificial intelligences."
|
||||
src.brainmob.mind.assigned_role = "Positronic Brain"
|
||||
|
||||
var/turf/T = get_turf_or_move(src.loc)
|
||||
|
||||
@@ -459,7 +459,7 @@
|
||||
species_allowed = list("Tajaran")
|
||||
|
||||
taj_ears_spiky
|
||||
name = "Spiky"
|
||||
name = "Tajaran Spiky"
|
||||
icon_state = "hair_tajspiky"
|
||||
species_allowed = list("Tajaran")
|
||||
|
||||
|
||||
@@ -550,4 +550,24 @@ obj/structure/cable/proc/cableColor(var/colorC)
|
||||
/obj/item/weapon/cable_coil/random/New()
|
||||
color = pick("red","yellow","green","blue","pink")
|
||||
icon_state = "coil_[color]"
|
||||
..()
|
||||
..()
|
||||
|
||||
/obj/item/weapon/cable_coil/attack(mob/M as mob, mob/user as mob)
|
||||
if(hasorgans(M))
|
||||
var/datum/organ/external/S = M:get_organ(user.zone_sel.selecting)
|
||||
if(!(S.status & ORGAN_ROBOT) || user.a_intent != "help")
|
||||
return ..()
|
||||
if(S.burn_dam > 0 && use(1))
|
||||
S.heal_damage(0,15,0,1)
|
||||
if(user != M)
|
||||
user.visible_message("\red \The [user] repairs some burn damage on their [S.display_name] with \the [src]",\
|
||||
"\red You repair some burn damage on your [S.display_name]",\
|
||||
"You hear wires being cut.")
|
||||
else
|
||||
user.visible_message("\red \The [user] repairs some burn damage on their [S.display_name] with \the [src]",\
|
||||
"\red You repair some burn damage on your [S.display_name]",\
|
||||
"You hear wires being cut.")
|
||||
else
|
||||
user << "Nothing to fix!"
|
||||
else
|
||||
return ..()
|
||||
|
||||
@@ -70,6 +70,8 @@
|
||||
user << "You turn on the [src]."
|
||||
src.shot_number = 0
|
||||
src.fire_delay = 100
|
||||
message_admins("Emitter turned on by [key_name(user, user.client)](<A HREF='?_src_=holder;adminmoreinfo=\ref[user]'>?</A>) in ([x],[y],[z] - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[x];Y=[y];Z=[z]'>JMP</a>)",0,1)
|
||||
log_game("Emitter turned on by [user.ckey]([user]) in ([x],[y],[z])")
|
||||
investigate_log("turned <font color='green'>on</font> by [user.key]","singulo")
|
||||
update_icon()
|
||||
else
|
||||
|
||||
@@ -95,10 +95,11 @@
|
||||
M.attack_log += "\[[time_stamp()]\] <b>[firer]/[firer.ckey]</b> shot <b>[M]/[M.ckey]</b> with a <b>[src.type]</b>"
|
||||
firer.attack_log += "\[[time_stamp()]\] <b>[firer]/[firer.ckey]</b> shot <b>[M]/[M.ckey]</b> with a <b>[src.type]</b>"
|
||||
log_attack("<font color='red'>[firer] ([firer.ckey]) shot [M] ([M.ckey]) with a [src.type]</font>")
|
||||
|
||||
msg_admin_attack("ATTACK: [firer] ([firer.ckey]) shot [M] ([M.ckey]) with a [src]") //BS12 EDIT ALG
|
||||
else
|
||||
M.attack_log += "\[[time_stamp()]\] <b>UNKNOWN SUBJECT (No longer exists)</b> shot <b>[M]/[M.ckey]</b> with a <b>[src]</b>"
|
||||
log_attack("<font color='red'>UNKNOWN shot [M] ([M.ckey]) with a [src.type]</font>")
|
||||
msg_admin_attack("ATTACK: UNKNOWN shot [M] ([M.ckey]) with a [src]") //BS12 EDIT ALG
|
||||
|
||||
spawn(0)
|
||||
if(A)
|
||||
|
||||
@@ -109,9 +109,25 @@ datum
|
||||
trans_data = current_reagent.data
|
||||
if(current_reagent.id == "blood" && ishuman(target)) // can never be sure
|
||||
var/mob/living/carbon/human/H = target
|
||||
H.vessel.add_reagent(current_reagent.id, (current_reagent_transfer * multiplier), trans_data)
|
||||
|
||||
var/datum/reagent/blood/HisBlood = locate() in H.vessel.reagent_list //Grab some blood
|
||||
if(HisBlood) // Make sure there's some blood at all
|
||||
if(HisBlood.data["donor"] != H) //If it's not theirs, then we look for theirs
|
||||
for(var/datum/reagent/blood/D in H.vessel.reagent_list)
|
||||
if(D.data["donor"] == H)
|
||||
HisBlood = D
|
||||
break
|
||||
if(HisBlood && HisBlood.data && trans_data)
|
||||
if(blood_incompatible(trans_data["blood_type"],HisBlood.data["blood_type"]))
|
||||
H.reagents.add_reagent("toxin",(current_reagent_transfer * multiplier * 0.5))
|
||||
H.reagents.update_total()
|
||||
else
|
||||
H.vessel.add_reagent(current_reagent.id, (current_reagent_transfer * multiplier), trans_data)
|
||||
H.vessel.update_total()
|
||||
else
|
||||
H.vessel.add_reagent(current_reagent.id, (current_reagent_transfer * multiplier), trans_data)
|
||||
H.vessel.update_total()
|
||||
src.remove_reagent(current_reagent.id, current_reagent_transfer)
|
||||
H.vessel.update_total()
|
||||
else
|
||||
R.add_reagent(current_reagent.id, (current_reagent_transfer * multiplier), trans_data)
|
||||
src.remove_reagent(current_reagent.id, current_reagent_transfer)
|
||||
|
||||
@@ -297,13 +297,6 @@ datum
|
||||
..()
|
||||
return
|
||||
|
||||
tramadol
|
||||
name = "Tramadol"
|
||||
id = "tramadol"
|
||||
description = "A simple, yet effective painkiller."
|
||||
reagent_state = LIQUID
|
||||
color = "#C8A5DC"
|
||||
|
||||
toxin
|
||||
name = "Toxin"
|
||||
id = "toxin"
|
||||
@@ -1912,21 +1905,21 @@ datum
|
||||
return
|
||||
else if ( mouth_covered ) // Reduced effects if partially protected
|
||||
victim << "\red Your [safe_thing] protect you from most of the pepperspray!"
|
||||
victim.eye_blurry = max(M.eye_blurry, 15)
|
||||
victim.eye_blind = max(M.eye_blind, 5)
|
||||
victim.eye_blurry = max(M.eye_blurry, 3)
|
||||
victim.eye_blind = max(M.eye_blind, 1)
|
||||
victim.Paralyse(1)
|
||||
victim.drop_item()
|
||||
return
|
||||
else if ( eyes_covered ) // Eye cover is better than mouth cover
|
||||
victim << "\red Your [safe_thing] protects your eyes from the pepperspray!"
|
||||
victim.emote("scream")
|
||||
victim.eye_blurry = max(M.eye_blurry, 5)
|
||||
victim.eye_blurry = max(M.eye_blurry, 1)
|
||||
return
|
||||
else // Oh dear :D
|
||||
victim.emote("scream")
|
||||
victim << "\red You're sprayed directly in the eyes with pepperspray!"
|
||||
victim.eye_blurry = max(M.eye_blurry, 25)
|
||||
victim.eye_blind = max(M.eye_blind, 10)
|
||||
victim.eye_blurry = max(M.eye_blurry, 5)
|
||||
victim.eye_blind = max(M.eye_blind, 2)
|
||||
victim.Paralyse(1)
|
||||
victim.drop_item()
|
||||
|
||||
|
||||
@@ -124,7 +124,7 @@
|
||||
#define PLASMA_MINIMUM_BURN_TEMPERATURE 100+T0C
|
||||
#define PLASMA_UPPER_TEMPERATURE 1370+T0C
|
||||
#define PLASMA_MINIMUM_OXYGEN_NEEDED 2
|
||||
#define PLASMA_MINIMUM_OXYGEN_PLASMA_RATIO 30
|
||||
#define PLASMA_MINIMUM_OXYGEN_PLASMA_RATIO 20
|
||||
#define PLASMA_OXYGEN_FULLBURN 10
|
||||
|
||||
#define T0C 273.15 // 0degC
|
||||
@@ -617,8 +617,9 @@ var/list/TAGGERLOCATIONS = list("Disposals",
|
||||
#define CHAT_GHOSTSIGHT 128
|
||||
#define CHAT_PRAYER 256
|
||||
#define CHAT_RADIO 512
|
||||
#define CHAT_ATTACKLOGS 1024
|
||||
|
||||
#define TOGGLES_DEFAULT (SOUND_ADMINHELP|SOUND_MIDI|SOUND_AMBIENCE|SOUND_LOBBY|CHAT_OOC|CHAT_DEAD|CHAT_GHOSTEARS|CHAT_GHOSTSIGHT|CHAT_PRAYER|CHAT_RADIO)
|
||||
#define TOGGLES_DEFAULT (SOUND_ADMINHELP|SOUND_MIDI|SOUND_AMBIENCE|SOUND_LOBBY|CHAT_OOC|CHAT_DEAD|CHAT_GHOSTEARS|CHAT_GHOSTSIGHT|CHAT_PRAYER|CHAT_RADIO|CHAT_ATTACKLOGS)
|
||||
|
||||
#define BE_TRAITOR 1
|
||||
#define BE_OPERATIVE 2
|
||||
|
||||
@@ -32,6 +32,8 @@
|
||||
LoadBansjob()
|
||||
if(config.usewhitelist)
|
||||
load_whitelist()
|
||||
if(config.usealienwhitelist)
|
||||
load_alienwhitelist()
|
||||
jobban_loadbanfile()
|
||||
jobban_updatelegacybans()
|
||||
LoadBans()
|
||||
|
||||
Reference in New Issue
Block a user