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:
Chinsky
2013-02-07 07:13:27 +04:00
parent 75341efb38
commit 4d7aa320cb
33 changed files with 236 additions and 156 deletions

View File

@@ -411,7 +411,7 @@ zone/proc/Rebuild()
// //
var/list/turfs_to_consider = contents.Copy() 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) if(sample)
turfs_to_consider.Remove(sample) turfs_to_consider.Remove(sample)
sample = locate() in turfs_to_consider sample = locate() in turfs_to_consider

View File

@@ -311,9 +311,12 @@ var/global/datum/controller/gameticker/ticker
if(!delay_end) if(!delay_end)
sleep(restart_timeout) sleep(restart_timeout)
if(!delay_end)
world.Reboot() world.Reboot()
else else
world << "\blue <B>An admin has delayed the round end</B>" world << "\blue <B>An admin has delayed the round end</B>"
else
world << "\blue <B>An admin has delayed the round end</B>"
return 1 return 1

View File

@@ -22,6 +22,8 @@ proc/load_alienwhitelist()
//todo: admin aliens //todo: admin aliens
/proc/is_alien_whitelisted(mob/M, var/species) /proc/is_alien_whitelisted(mob/M, var/species)
if(!config.usealienwhitelist)
return 1
if(species == "human" || species == "Human") if(species == "human" || species == "Human")
return 1 return 1
if(check_rights(R_ADMIN, 0)) if(check_rights(R_ADMIN, 0))

View File

@@ -9,7 +9,6 @@
layer = 5 layer = 5
var/list/network = list("SS13") 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 = null
var/c_tag_order = 999 var/c_tag_order = 999
var/status = 1.0 var/status = 1.0
@@ -45,24 +44,27 @@
if(C != src && C.c_tag == src.c_tag && tempnetwork.len) 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]" 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) /obj/machinery/camera/emp_act(severity)
if(!isEmpProof()) if(!isEmpProof())
if(prob(100/severity)) if(prob(100/severity))
icon_state = "[initial(icon_state)]emp" icon_state = "[initial(icon_state)]emp"
for(var/i in network) var/list/previous_network = network
network.Remove(i) //Not the best way but it will do. I think. network = list()
cameranet.removeCamera(src) cameranet.removeCamera(src)
stat |= EMPED stat |= EMPED
SetLuminosity(0) SetLuminosity(0)
triggerCameraAlarm() triggerCameraAlarm()
spawn(900) spawn(900)
network = initial(network) network = previous_network
icon_state = initial(icon_state) icon_state = initial(icon_state)
stat &= ~EMPED stat &= ~EMPED
cancelCameraAlarm() cancelCameraAlarm()

View File

@@ -69,8 +69,6 @@
/obj/machinery/iv_drip/process() /obj/machinery/iv_drip/process()
set background = 1 set background = 1
..()
if(src.attached) if(src.attached)
if(!(get_dist(src, src.attached) <= 1)) if(!(get_dist(src, src.attached) <= 1))
visible_message("The needle is ripped out of [src.attached], doesn't that hurt?") 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 var/mob/living/carbon/human/T = attached
if(!istype(T)) return 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) if(!T.dna)
return return
if(NOCLONE in T.mutations) if(NOCLONE in T.mutations)
@@ -112,7 +115,7 @@
if(T.vessel.get_reagent_amount("blood") < amount) if(T.vessel.get_reagent_amount("blood") < amount)
return return
B.holder = beaker B.holder = beaker
B.volume = amount B.volume += amount
//set reagent data //set reagent data
B.data["donor"] = T B.data["donor"] = T
@@ -121,6 +124,9 @@
B.data["blood_DNA"] = copytext(T.dna.unique_enzymes,1,0) B.data["blood_DNA"] = copytext(T.dna.unique_enzymes,1,0)
if(T.resistances && T.resistances.len) if(T.resistances && T.resistances.len)
if(B.data["resistances"])
B.data["resistances"] |= T.resistances.Copy()
else
B.data["resistances"] = T.resistances.Copy() B.data["resistances"] = T.resistances.Copy()
B.data["blood_type"] = copytext(T.dna.b_type,1,0) B.data["blood_type"] = copytext(T.dna.b_type,1,0)
@@ -130,14 +136,15 @@
temp_chem += R.name temp_chem += R.name
temp_chem[R.name] = R.volume temp_chem[R.name] = R.volume
B.data["trace_chem"] = list2params(temp_chem) 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 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.reagents.update_total()
beaker.on_reagent_change() beaker.on_reagent_change()
beaker.reagents.handle_reactions() beaker.reagents.handle_reactions()
update_icon()
/obj/machinery/iv_drip/attack_hand(mob/user as mob) /obj/machinery/iv_drip/attack_hand(mob/user as mob)
if(src.beaker) if(src.beaker)
@@ -168,6 +175,11 @@
..() ..()
if (!(usr in view(2)) && usr!=src.loc) return 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) if(beaker)
usr << "\blue Attached is \a [beaker] with:" usr << "\blue Attached is \a [beaker] with:"
if(beaker.reagents && beaker.reagents.reagent_list.len) if(beaker.reagents && beaker.reagents.reagent_list.len)

View File

@@ -39,7 +39,7 @@
//var/emagged = 0 //Ignores if somebody doesn't have card access to that machine. //var/emagged = 0 //Ignores if somebody doesn't have card access to that machine.
var/seconds_electrified = 0 //Shock customers like an airlock. var/seconds_electrified = 0 //Shock customers like an airlock.
var/shoot_inventory = 0 //Fire items at customers! We're broken! 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/extended_inventory = 0 //can we access the hidden inventory?
var/panel_open = 0 //Hacking that vending machine. Gonna get a free candy bar. var/panel_open = 0 //Hacking that vending machine. Gonna get a free candy bar.
var/wires = 15 var/wires = 15

View File

@@ -18,7 +18,7 @@
unacidable = 1 //and no deleting hoomans inside unacidable = 1 //and no deleting hoomans inside
layer = MOB_LAYER //icon draw layer layer = MOB_LAYER //icon draw layer
infra_luminosity = 15 //byond implementation is bugged. 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/can_move = 1
var/mob/living/carbon/occupant = null var/mob/living/carbon/occupant = null
var/step_in = 10 //make a step in step_in/10 sec. var/step_in = 10 //make a step in step_in/10 sec.
@@ -1655,7 +1655,10 @@
return 0 return 0
/obj/mecha/proc/reset_icon() /obj/mecha/proc/reset_icon()
if (initial_icon)
icon_state = initial_icon icon_state = initial_icon
else
icon_state = initial(icon_state)
return icon_state return icon_state
////////////////////////////////////////// //////////////////////////////////////////

View File

@@ -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>" 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>" 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>" ) 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 //spawn(1800) // this wont work right
// M.lastattacker = null // M.lastattacker = null

View File

@@ -131,6 +131,12 @@ move an amendment</a> to the drawing.</p>
A.power_environ = 0 A.power_environ = 0
A.always_unpowered = 0 A.always_unpowered = 0
move_turfs_to_area(turfs, A) 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) spawn(5)
//ma = A.master ? "[A.master]" : "(null)" //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]" //world << "DEBUG: create_area(5): <br>A.name=[A.name]<br>A.tag=[A.tag]<br>A.master=[ma]"

View File

@@ -36,6 +36,9 @@
*/ */
/obj/item/stack/tile/plasteel/proc/build(turf/S as turf) /obj/item/stack/tile/plasteel/proc/build(turf/S as turf)
if (istype(S,/turf/space))
S.ChangeTurf(/turf/simulated/floor/plating/airless)
else
S.ChangeTurf(/turf/simulated/floor/plating) S.ChangeTurf(/turf/simulated/floor/plating)
// var/turf/simulated/floor/W = S.ReplaceWithFloor() // var/turf/simulated/floor/W = S.ReplaceWithFloor()
// W.make_plating() // W.make_plating()

View File

@@ -106,6 +106,7 @@
icon_state = "securitybelt" icon_state = "securitybelt"
item_state = "security"//Could likely use a better one. item_state = "security"//Could likely use a better one.
storage_slots = 7 storage_slots = 7
max_w_class = 3
can_hold = list( can_hold = list(
"/obj/item/weapon/grenade/flashbang", "/obj/item/weapon/grenade/flashbang",
"/obj/item/weapon/reagent_containers/spray/pepper", "/obj/item/weapon/reagent_containers/spray/pepper",

View File

@@ -439,3 +439,24 @@
icon = 'icons/obj/items.dmi' icon = 'icons/obj/items.dmi'
icon_state = "red_crowbar" icon_state = "red_crowbar"
item_state = "crowbar_red" 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 ..()

View File

@@ -30,6 +30,9 @@
manual_unbuckle(user) manual_unbuckle(user)
return return
/obj/structure/stool/bed/MouseDrop(atom/over_object)
return
/obj/structure/stool/bed/MouseDrop_T(mob/M as mob, mob/user as mob) /obj/structure/stool/bed/MouseDrop_T(mob/M as mob, mob/user as mob)
if(!istype(M)) return if(!istype(M)) return
buckle_mob(M, user) buckle_mob(M, user)

View File

@@ -231,10 +231,12 @@
W.zone = src.zone W.zone = src.zone
W.zone.AddTurf(W) W.zone.AddTurf(W)
for(var/turf/simulated/T in orange(src,1))
air_master.tiles_to_update.Add(T)
W.levelupdate() W.levelupdate()
return W return W
else else
/*if(istype(src, /turf/simulated) && src.zone) /*if(istype(src, /turf/simulated) && src.zone)
src.zone.rebuild = 1*/ src.zone.rebuild = 1*/
@@ -249,6 +251,9 @@
W.zone = src.zone W.zone = src.zone
W.zone.AddTurf(W) W.zone.AddTurf(W)
for(var/turf/simulated/T in orange(src,1))
air_master.tiles_to_update.Add(T)
W.levelupdate() W.levelupdate()
return W return W

View File

@@ -1,4 +1,3 @@
/mob /mob
var/bloody_hands = 0 var/bloody_hands = 0
@@ -11,15 +10,13 @@
var/transfer_blood = 0 var/transfer_blood = 0
var/mob/living/carbon/human/bloody_hands_mob var/mob/living/carbon/human/bloody_hands_mob
proc/blood_incompatible(donor,receiver)
if(!donor || !receiver) return 0
/proc/blood_incompatible(donor,receiver) var
donor_antigen = copytext(donor,1,lentext(donor))
var/donor_antigen = copytext(donor,1,lentext(donor)) receiver_antigen = copytext(receiver,1,lentext(receiver))
var/receiver_antigen = copytext(receiver,1,lentext(receiver)) donor_rh = (findtext(donor,"+")>0)
var/donor_rh = findtext("+",donor) receiver_rh = (findtext(receiver,"+")>0)
var/receiver_rh = findtext("+",receiver)
if(donor_rh && !receiver_rh) return 1 if(donor_rh && !receiver_rh) return 1
switch(receiver_antigen) switch(receiver_antigen)
if("A") if("A")

View File

@@ -7,18 +7,19 @@ var/global/floorIsLava = 0
/proc/message_admins(var/msg) /proc/message_admins(var/msg)
msg = "<span class=\"admin\"><span class=\"prefix\">ADMIN LOG:</span> <span class=\"message\">[msg]</span></span>" msg = "<span class=\"admin\"><span class=\"prefix\">ADMIN LOG:</span> <span class=\"message\">[msg]</span></span>"
log_adminwarn(msg) 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 /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>" var/rendered = "<span class=\"admin\"><span class=\"prefix\">ADMIN LOG:</span> <span class=\"message\">[text]</span></span>"
log_adminwarn(rendered) log_adminwarn(rendered)
for(var/client/C in admins) for(var/client/C in admins)
if (C.holder.level >= 1) if(R_ADMIN & C.holder.rights)
if(!C.STFU_atklog) if(C.prefs.toggles & CHAT_ATTACKLOGS)
var/msg = rendered var/msg = rendered
C << msg C << msg
*/
///////////////////////////////////////////////////////////////////////////////////////////////Panels ///////////////////////////////////////////////////////////////////////////////////////////////Panels
@@ -756,10 +757,15 @@ var/global/floorIsLava = 0
/datum/admins/proc/delay() /datum/admins/proc/delay()
set category = "Server" set category = "Server"
set desc="Delay the game start" set desc="Delay the game start/end"
set name="Delay" set name="Delay"
if(!check_rights(R_ADMIN)) return
if (!ticker || ticker.current_state != GAME_STATE_PREGAME) 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 ) going = !( going )
if (!( going )) if (!( going ))
world << "<b>The game start has been delayed.</b>" world << "<b>The game start has been delayed.</b>"

View File

@@ -7,6 +7,7 @@ var/list/admin_verbs_default = list(
/client/proc/hide_most_verbs, /*hides all our hideable 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/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/check_antagonists, /*shows all antags*/
/client/proc/deadchat /*toggles deadchat on/off*/
) )
var/list/admin_verbs_admin = list( var/list/admin_verbs_admin = list(
/client/proc/player_panel, /*shows an interface for all players, with links to various panels (old style)*/ /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_words, /*displays cult-words*/
/client/proc/check_ai_laws, /*shows AI and borg laws*/ /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/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/dsay, /*talk in deadchat using our ckey/fakekey*/
/client/proc/toggleprayers, /*toggles prayers on/off*/ /client/proc/toggleprayers, /*toggles prayers on/off*/
// /client/proc/toggle_hear_deadcast, /*toggles whether we hear deadchat*/ // /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, /datum/admins/proc/show_player_info,
/client/proc/free_slot, /*frees slot for chosen job*/ /client/proc/free_slot, /*frees slot for chosen job*/
/client/proc/cmd_admin_change_custom_event, /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( var/list/admin_verbs_ban = list(
/client/proc/unban_panel, /client/proc/unban_panel,
/client/proc/jobbans, /client/proc/jobbans,
/client/proc/unjobban_panel, /client/proc/unjobban_panel,
/client/proc/DB_ban_panel // /client/proc/DB_ban_panel
) )
var/list/admin_verbs_sounds = list( var/list/admin_verbs_sounds = list(
/client/proc/play_local_sound, /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/cmd_admin_add_random_ai_law,
/client/proc/make_sound, /client/proc/make_sound,
/client/proc/toggle_random_events, /client/proc/toggle_random_events,
/client/proc/set_ooc /client/proc/set_ooc,
/client/proc/editappear
) )
var/list/admin_verbs_spawn = list( var/list/admin_verbs_spawn = list(
/datum/admins/proc/spawn_atom, /*allows us to spawn instances*/ /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, /client/proc/cmd_mod_say,
/datum/admins/proc/show_player_info, /datum/admins/proc/show_player_info,
/client/proc/player_panel_new, /client/proc/player_panel_new,
/datum/admins/proc/show_skills
) )
/client/proc/add_admin_verbs() /client/proc/add_admin_verbs()
if(holder) if(holder)
@@ -632,12 +636,9 @@ var/list/admin_verbs_mod = list(
set name = "Edit Appearance" set name = "Edit Appearance"
set category = "Fun" set category = "Fun"
usr << "\red This proc has been temporarily disabled." if(!check_rights(R_FUN)) return
return
//some random errors here, cbb fixing them right now if(!istype(M, /mob/living/carbon/human))
//todo
/*if(!istype(M, /mob/living/carbon/human))
usr << "\red You can only do this to humans!" usr << "\red You can only do this to humans!"
return 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")) 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 M.s_tone = -M.s_tone + 35
// hair // hair
var/list/all_hairs = typesof(/datum/sprite_accessory/hair) - /datum/sprite_accessory/hair var/new_hstyle = input(usr, "Select a hair style", "Grooming") as null|anything in hair_styles_list
var/list/hairs = list() if(new_hstyle)
M.h_style = new_hstyle
// 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
// facial hair // facial hair
var/list/all_fhairs = typesof(/datum/sprite_accessory/facial_hair) - /datum/sprite_accessory/facial_hair var/new_fstyle = input(usr, "Select a facial hair style", "Grooming") as null|anything in facial_hair_styles_list
var/list/fhairs = list() if(new_fstyle)
M.f_style = new_fstyle
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_gender = alert(usr, "Please select gender.", "Character Generation", "Male", "Female") var/new_gender = alert(usr, "Please select gender.", "Character Generation", "Male", "Female")
if (new_gender) if (new_gender)
@@ -718,10 +684,10 @@ var/list/admin_verbs_mod = list(
M.gender = MALE M.gender = MALE
else else
M.gender = FEMALE M.gender = FEMALE
M.rebuild_appearance() M.update_hair()
M.update_body() M.update_body()
M.check_dna(M) M.check_dna(M)
*/
/client/proc/playernotes() /client/proc/playernotes()
set name = "Show Player Info" set name = "Show Player Info"
set category = "Admin" set category = "Admin"
@@ -744,3 +710,13 @@ var/list/admin_verbs_mod = list(
if (job) if (job)
job_master.FreeRole(job) job_master.FreeRole(job)
return 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"

View File

@@ -83,7 +83,7 @@
body += "<a href='?src=\ref[src];subtlemessage="+ref+"'>SM</a> - " body += "<a href='?src=\ref[src];subtlemessage="+ref+"'>SM</a> - "
body += "<a href='?src=\ref[src];adminplayerobservejump="+ref+"'>JMP</a><br>" body += "<a href='?src=\ref[src];adminplayerobservejump="+ref+"'>JMP</a><br>"
if(antagonist > 0) 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>"; body += "</td></tr></table>";
@@ -194,7 +194,7 @@
<tr id='title_tr'> <tr id='title_tr'>
<td align='center'> <td align='center'>
<font size='5'><b>Player panel</b></font><br> <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> <p>
</td> </td>
</tr> </tr>

View File

@@ -1254,7 +1254,7 @@
show_player_panel(M) show_player_panel(M)
else if(href_list["adminplayerobservejump"]) 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"]) var/mob/M = locate(href_list["adminplayerobservejump"])
@@ -1263,6 +1263,9 @@
sleep(2) sleep(2)
C.jumptomob(M) C.jumptomob(M)
else if(href_list["check_antagonist"])
check_antagonists()
else if(href_list["adminplayerobservecoodjump"]) else if(href_list["adminplayerobservecoodjump"])
if(!check_rights(R_ADMIN)) return if(!check_rights(R_ADMIN)) return
@@ -2197,8 +2200,6 @@
if(!job) continue if(!job) continue
dat += "job: [job.title], current_positions: [job.current_positions], total_positions: [job.total_positions] <BR>" dat += "job: [job.title], current_positions: [job.current_positions], total_positions: [job.total_positions] <BR>"
usr << browse(dat, "window=jobdebug;size=600x500") usr << browse(dat, "window=jobdebug;size=600x500")
if("check_antagonist")
check_antagonists()
if("showailaws") if("showailaws")
output_ai_laws() output_ai_laws()
if("showgm") if("showgm")
@@ -2215,6 +2216,8 @@
dat += text("<tr><td>[]</td><td>[]</td></tr>", H.name, H.get_assignment()) dat += text("<tr><td>[]</td><td>[]</td></tr>", H.name, H.get_assignment())
dat += "</table>" dat += "</table>"
usr << browse(dat, "window=manifest;size=440x410") usr << browse(dat, "window=manifest;size=440x410")
if("check_antagonist")
check_antagonists()
if("DNA") if("DNA")
var/dat = "<B>Showing DNA from blood.</B><HR>" 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>" dat += "<table cellspacing=5><tr><th>Name</th><th>DNA</th><th>Blood Type</th></tr>"

View File

@@ -87,11 +87,12 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey","
if(!mob) return //this doesn't happen if(!mob) return //this doesn't happen
var/ref_mob = "\ref[mob]" 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 //send this msg to all admins
var/admin_number_afk = 0 var/admin_number_afk = 0
for(var/client/X in admins) for(var/client/X in admins)
if((R_ADMIN|R_MOD) & X.holder.rights)
if(X.is_afk()) if(X.is_afk())
admin_number_afk++ admin_number_afk++
if(X.prefs.toggles & SOUND_ADMINHELP) if(X.prefs.toggles & SOUND_ADMINHELP)

View File

@@ -11,10 +11,9 @@
if(check_rights(R_ADMIN,0)) 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>" 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 for(var/client/C in admins)
else if(R_ADMIN & C.holder.rights)
msg = "<span class='adminobserver'><span class='prefix'>ADMIN:</span> <EM>[key_name(usr, 1)]:</EM> <span class='message'>[msg]</span></span>" C << msg
admins << msg
feedback_add_details("admin_verb","M") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! 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 name = "Msay"
set hidden = 1 set hidden = 1
if (!src.holder) if(!check_rights(R_ADMIN|R_MOD)) return
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*/
msg = copytext(sanitize(msg), 1, MAX_MESSAGE_LEN) msg = copytext(sanitize(msg), 1, MAX_MESSAGE_LEN)
log_admin("MOD: [key_name(src)] : [msg]") log_admin("MOD: [key_name(src)] : [msg]")
if (!msg) if (!msg)
return return
//feedback_add_details("admin_verb","M") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! var/color = "mod"
if (check_rights(R_ADMIN,0))
for (var/mob/M in world) color = "adminmod"
if (M.client && M.client.holder) 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>"
if (src.holder.rank == "Admin Observer") for(var/client/C in admins)
M << "<span class='adminobserver'><span class='prefix'>MOD:</span> <EM>[key_name(usr, M,1)]:</EM> <span class='message'>[msg]</span></span>" if((R_ADMIN|R_MOD) & C.holder.rights)
else if (src.holder.rank == "Moderator") C << msg
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>"

View File

@@ -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")) switch(alert("Should this be announced to the general population?",,"Yes","No"))
if("Yes") if("Yes")
command_alert(input, maintitle=customname); command_alert(input, customname);
if("No") if("No")
world << "\red New NanoTrasen Update available at all communication consoles." world << "\red New NanoTrasen Update available at all communication consoles."

View File

@@ -1,3 +1,4 @@
//
dmm_suite{ dmm_suite{
load_map(var/dmm_file as file, var/z_offset as num){ load_map(var/dmm_file as file, var/z_offset as num){
if(!z_offset){ if(!z_offset){
@@ -20,6 +21,7 @@ dmm_suite{
var/ycrd=0 var/ycrd=0
var/xcrd=0 var/xcrd=0
for(var/zpos=findtext(tfile,"\n(1,1,");TRUE;zpos=findtext(tfile,"\n(1,1,",zpos+1,0)){ for(var/zpos=findtext(tfile,"\n(1,1,");TRUE;zpos=findtext(tfile,"\n(1,1,",zpos+1,0)){
if(zpos==0) break
zcrd++ zcrd++
world.maxz = max(world.maxz, zcrd+z_offset) world.maxz = max(world.maxz, zcrd+z_offset)
ycrd=0 ycrd=0
@@ -43,7 +45,7 @@ dmm_suite{
if(gpos+length(grid_line)+1>length(zgrid)){break} if(gpos+length(grid_line)+1>length(zgrid)){break}
sleep(-1) sleep(-1)
} }
if(findtext(tfile,quote+"}",zpos,0)+2==tfile_len){break} if(findtext(tfile,quote+"}",zpos,0)+2>=tfile_len){break}
sleep(-1) sleep(-1)
} }
} }

View File

@@ -4,7 +4,7 @@
desc = "A special helmet designed for work in a hazardous, low-pressure environment. Has radiation shielding." desc = "A special helmet designed for work in a hazardous, low-pressure environment. Has radiation shielding."
icon_state = "rig0-engineering" icon_state = "rig0-engineering"
item_state = "eng_helm" 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) allowed = list(/obj/item/device/flashlight)
var/brightness_on = 4 //luminosity when on var/brightness_on = 4 //luminosity when on
var/on = 0 var/on = 0
@@ -41,8 +41,8 @@
desc = "A special suit that protects against hazardous, low pressure environments. Has radiation shielding." desc = "A special suit that protects against hazardous, low pressure environments. Has radiation shielding."
icon_state = "rig-engineering" icon_state = "rig-engineering"
item_state = "eng_hardsuit" item_state = "eng_hardsuit"
slowdown = 2 slowdown = 1
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,/obj/item/weapon/tank,/obj/item/weapon/storage/bag/ore,/obj/item/device/t_scanner,/obj/item/weapon/pickaxe, /obj/item/weapon/rcd) 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 heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECITON_TEMPERATURE max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECITON_TEMPERATURE
@@ -74,6 +74,7 @@
item_state = "mining_hardsuit" item_state = "mining_hardsuit"
//Syndicate rig //Syndicate rig
/obj/item/clothing/head/helmet/space/rig/syndi /obj/item/clothing/head/helmet/space/rig/syndi
name = "blood-red hardsuit helmet" name = "blood-red hardsuit helmet"
@@ -82,6 +83,7 @@
color = "syndi" color = "syndi"
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 35, bio = 100, rad = 60) armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 35, bio = 100, rad = 60)
/obj/item/clothing/suit/space/rig/syndi /obj/item/clothing/suit/space/rig/syndi
icon_state = "rig-syndi" icon_state = "rig-syndi"
name = "blood-red hardsuit" name = "blood-red hardsuit"
@@ -91,6 +93,7 @@
armor = list(melee = 60, bullet = 50, laser = 30, energy = 15, bomb = 35, bio = 100, rad = 60) 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) 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 //Wizard Rig
/obj/item/clothing/head/helmet/space/rig/wizard /obj/item/clothing/head/helmet/space/rig/wizard
name = "gem-encrusted hardsuit helmet" name = "gem-encrusted hardsuit helmet"
@@ -123,17 +126,21 @@
name = "medical hardsuit" name = "medical hardsuit"
item_state = "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) 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 //Security
/obj/item/clothing/head/helmet/space/rig/security /obj/item/clothing/head/helmet/space/rig/security
name = "security hardsuit helmet" name = "security hardsuit helmet"
icon_state = "rig0-sec" icon_state = "rig0-sec"
item_state = "sec_helm" item_state = "sec_helm"
color = "sec" 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 /obj/item/clothing/suit/space/rig/security
icon_state = "rig-sec" icon_state = "rig-sec"
name = "security hardsuit" name = "security hardsuit"
item_state = "sec_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) //Atmospherics Rig (BS12)
/obj/item/clothing/head/helmet/space/rig/atmos /obj/item/clothing/head/helmet/space/rig/atmos
@@ -142,12 +149,14 @@
icon_state = "rig0-atmos" icon_state = "rig0-atmos"
item_state = "atmos_helm" item_state = "atmos_helm"
color = "atmos" 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 /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." desc = "A special suit that protects against hazardous, low pressure environments. Has reduced radiation shielding to allow for greater mobility."
icon_state = "rig-atmos" icon_state = "rig-atmos"
name = "atmos hardsuit" name = "atmos hardsuit"
item_state = "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) allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen)
max_heat_protection_temperature = FIRESUIT_MAX_HEAT_PROTECITON_TEMPERATURE

View File

@@ -4,7 +4,7 @@
icon = 'icons/obj/assemblies.dmi' icon = 'icons/obj/assemblies.dmi'
icon_state = "posibrain" icon_state = "posibrain"
w_class = 3 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/list/construction_cost = list("metal"=500,"glass"=500,"silver"=200,"gold"=200,"plasma"=100,"diamond"=10)
var/construction_time = 75 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>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 << "<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" src.brainmob.mind.assigned_role = "Positronic Brain"
var/turf/T = get_turf_or_move(src.loc) var/turf/T = get_turf_or_move(src.loc)

View File

@@ -459,7 +459,7 @@
species_allowed = list("Tajaran") species_allowed = list("Tajaran")
taj_ears_spiky taj_ears_spiky
name = "Spiky" name = "Tajaran Spiky"
icon_state = "hair_tajspiky" icon_state = "hair_tajspiky"
species_allowed = list("Tajaran") species_allowed = list("Tajaran")

View File

@@ -551,3 +551,23 @@ obj/structure/cable/proc/cableColor(var/colorC)
color = pick("red","yellow","green","blue","pink") color = pick("red","yellow","green","blue","pink")
icon_state = "coil_[color]" 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 ..()

View File

@@ -70,6 +70,8 @@
user << "You turn on the [src]." user << "You turn on the [src]."
src.shot_number = 0 src.shot_number = 0
src.fire_delay = 100 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") investigate_log("turned <font color='green'>on</font> by [user.key]","singulo")
update_icon() update_icon()
else else

View File

@@ -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>" 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>" 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>") 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 else
M.attack_log += "\[[time_stamp()]\] <b>UNKNOWN SUBJECT (No longer exists)</b> shot <b>[M]/[M.ckey]</b> with a <b>[src]</b>" 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>") 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) spawn(0)
if(A) if(A)

View File

@@ -109,9 +109,25 @@ datum
trans_data = current_reagent.data trans_data = current_reagent.data
if(current_reagent.id == "blood" && ishuman(target)) // can never be sure if(current_reagent.id == "blood" && ishuman(target)) // can never be sure
var/mob/living/carbon/human/H = target var/mob/living/carbon/human/H = target
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.add_reagent(current_reagent.id, (current_reagent_transfer * multiplier), trans_data)
src.remove_reagent(current_reagent.id, current_reagent_transfer)
H.vessel.update_total() 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)
else else
R.add_reagent(current_reagent.id, (current_reagent_transfer * multiplier), trans_data) R.add_reagent(current_reagent.id, (current_reagent_transfer * multiplier), trans_data)
src.remove_reagent(current_reagent.id, current_reagent_transfer) src.remove_reagent(current_reagent.id, current_reagent_transfer)

View File

@@ -297,13 +297,6 @@ datum
..() ..()
return return
tramadol
name = "Tramadol"
id = "tramadol"
description = "A simple, yet effective painkiller."
reagent_state = LIQUID
color = "#C8A5DC"
toxin toxin
name = "Toxin" name = "Toxin"
id = "toxin" id = "toxin"
@@ -1912,21 +1905,21 @@ datum
return return
else if ( mouth_covered ) // Reduced effects if partially protected else if ( mouth_covered ) // Reduced effects if partially protected
victim << "\red Your [safe_thing] protect you from most of the pepperspray!" victim << "\red Your [safe_thing] protect you from most of the pepperspray!"
victim.eye_blurry = max(M.eye_blurry, 15) victim.eye_blurry = max(M.eye_blurry, 3)
victim.eye_blind = max(M.eye_blind, 5) victim.eye_blind = max(M.eye_blind, 1)
victim.Paralyse(1) victim.Paralyse(1)
victim.drop_item() victim.drop_item()
return return
else if ( eyes_covered ) // Eye cover is better than mouth cover else if ( eyes_covered ) // Eye cover is better than mouth cover
victim << "\red Your [safe_thing] protects your eyes from the pepperspray!" victim << "\red Your [safe_thing] protects your eyes from the pepperspray!"
victim.emote("scream") victim.emote("scream")
victim.eye_blurry = max(M.eye_blurry, 5) victim.eye_blurry = max(M.eye_blurry, 1)
return return
else // Oh dear :D else // Oh dear :D
victim.emote("scream") victim.emote("scream")
victim << "\red You're sprayed directly in the eyes with pepperspray!" victim << "\red You're sprayed directly in the eyes with pepperspray!"
victim.eye_blurry = max(M.eye_blurry, 25) victim.eye_blurry = max(M.eye_blurry, 5)
victim.eye_blind = max(M.eye_blind, 10) victim.eye_blind = max(M.eye_blind, 2)
victim.Paralyse(1) victim.Paralyse(1)
victim.drop_item() victim.drop_item()

View File

@@ -124,7 +124,7 @@
#define PLASMA_MINIMUM_BURN_TEMPERATURE 100+T0C #define PLASMA_MINIMUM_BURN_TEMPERATURE 100+T0C
#define PLASMA_UPPER_TEMPERATURE 1370+T0C #define PLASMA_UPPER_TEMPERATURE 1370+T0C
#define PLASMA_MINIMUM_OXYGEN_NEEDED 2 #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 PLASMA_OXYGEN_FULLBURN 10
#define T0C 273.15 // 0degC #define T0C 273.15 // 0degC
@@ -617,8 +617,9 @@ var/list/TAGGERLOCATIONS = list("Disposals",
#define CHAT_GHOSTSIGHT 128 #define CHAT_GHOSTSIGHT 128
#define CHAT_PRAYER 256 #define CHAT_PRAYER 256
#define CHAT_RADIO 512 #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_TRAITOR 1
#define BE_OPERATIVE 2 #define BE_OPERATIVE 2

View File

@@ -32,6 +32,8 @@
LoadBansjob() LoadBansjob()
if(config.usewhitelist) if(config.usewhitelist)
load_whitelist() load_whitelist()
if(config.usealienwhitelist)
load_alienwhitelist()
jobban_loadbanfile() jobban_loadbanfile()
jobban_updatelegacybans() jobban_updatelegacybans()
LoadBans() LoadBans()