Merge branch 'master' of https://github.com/ParadiseSS13/Paradise into BookClub

This commit is contained in:
Aurorablade
2016-09-01 00:43:50 -04:00
125 changed files with 410 additions and 290 deletions
+3 -3
View File
@@ -99,10 +99,10 @@
if(last_editor)
output += "<br><span class='memoedit'>Last edit by [last_editor] <A href='?_src_=holder;memoeditlist=[ckey]'>(Click here to see edit log)</A></span>"
output += "<br>[memotext]</span><br>"
if(!output && !silent)
if(output)
to_chat(src, output)
else if(!silent)
to_chat(src, "No memos found in database.")
return
to_chat(src, output)
if("Remove")
var/DBQuery/query_memodellist = dbcon.NewQuery("SELECT ckey FROM [format_table_name("memo")]")
if(!query_memodellist.Execute())
+3 -3
View File
@@ -77,7 +77,7 @@ DEBUG
if(jobban_regex.Find(s))
jobban_assoc_insert(jobban_regex.group[1], jobban_regex.group[2], jobban_regex.group[3])
else
log_debug("Skipping malformed job ban: [s]")
log_runtime(EXCEPTION("Skipping malformed job ban: [s]"))
else
if(!establish_db_connection())
log_to_dd("Database connection failed. Reverting to the legacy ban system.")
@@ -132,9 +132,9 @@ DEBUG
if(jobban_assoclist[ckey] && jobban_assoclist[ckey][rank])
jobban_assoclist[ckey] -= rank
else
log_debug("Attempted to remove non-existent job ban: [X]")
log_runtime(EXCEPTION("Attempted to remove non-existent job ban: [X]"))
else
log_debug("Failed to remove malformed job ban from associative list: [X]")
log_runtime(EXCEPTION("Failed to remove malformed job ban from associative list: [X]"))
jobban_keylist.Remove(jobban_keylist[i])
if(config.ban_legacy_system)
jobban_savebanfile()
+1 -1
View File
@@ -86,7 +86,7 @@
cl = c
cl.images += I
else
log_debug("Buildmode reticule created without a client!")
log_runtime(EXCEPTION("Buildmode reticule created without a client!"), src)
/obj/effect/buildmode_reticule/proc/deselect()
qdel(src)
+1
View File
@@ -652,6 +652,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
if("strip")
//do nothing
// god is dead
if("as job...")
if(jobdatum)
dresscode = "[jobdatum.title]"
+39 -19
View File
@@ -1,7 +1,7 @@
/client/proc/air_status(turf/target as turf)
set category = "Debug"
set name = "Display Air Status"
if(!check_rights(R_DEBUG))
return
@@ -18,22 +18,22 @@
to_chat(usr, "\blue @[target.x],[target.y]: O:[GM.oxygen] T:[GM.toxins] N:[GM.nitrogen] C:[GM.carbon_dioxide] w [GM.temperature] Kelvin, [GM.return_pressure()] kPa [(burning)?("\red BURNING"):(null)]")
for(var/datum/gas/trace_gas in GM.trace_gases)
to_chat(usr, "[trace_gas.type]: [trace_gas.moles]")
message_admins("[key_name_admin(usr)] has checked the air status of [T]")
log_admin("[key_name(usr)] has checked the air status of [T]")
log_admin("[key_name(usr)] has checked the air status of [T]")
feedback_add_details("admin_verb","DAST") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/fix_next_move()
set category = "Debug"
set name = "Unfreeze Everyone"
if(!check_rights(R_DEBUG))
return
return
message_admins("[key_name_admin(usr)] has unfrozen everyone")
log_admin("[key_name(usr)] has unfrozen everyone")
var/largest_move_time = 0
var/largest_click_time = 0
var/mob/largest_move_mob = null
@@ -56,18 +56,18 @@
log_admin("DEBUG: [key_name(M)] next_move = [M.next_move] next_click = [M.next_click] world.time = [world.time]")
M.next_move = 1
M.next_click = 0
message_admins("[key_name_admin(largest_move_mob)] had the largest move delay with [largest_move_time] frames / [largest_move_time/10] seconds!", 1)
message_admins("[key_name_admin(largest_click_mob)] had the largest click delay with [largest_click_time] frames / [largest_click_time/10] seconds!", 1)
message_admins("world.time = [world.time]", 1)
feedback_add_details("admin_verb","UFE") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
return
/client/proc/radio_report()
set category = "Debug"
set name = "Radio report"
if(!check_rights(R_DEBUG))
return
@@ -102,9 +102,9 @@
output += "&nbsp;&nbsp;&nbsp;&nbsp;[device]<br>"
usr << browse(output,"window=radioreport")
message_admins("[key_name_admin(usr)] has generated a radio report")
log_admin("[key_name(usr)] has generated a radio report")
log_admin("[key_name(usr)] has generated a radio report")
feedback_add_details("admin_verb","RR") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
@@ -112,12 +112,12 @@
set name = "Reload Admins"
set category = "Debug"
if(!check_rights(R_SERVER))
if(!check_rights(R_SERVER))
return
message_admins("[key_name_admin(usr)] has manually reloaded admins")
log_admin("[key_name(usr)] has manually reloaded admins")
load_admins()
feedback_add_details("admin_verb","RLDA") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
@@ -126,14 +126,14 @@
set name = "Print Jobban Log"
set desc = "This spams all the active jobban entries for the current round to standard output."
set category = "Debug"
if(!check_rights(R_DEBUG))
return
to_chat(usr, "<b>Jobbans active in this round.</b>")
for(var/t in jobban_keylist)
to_chat(usr, "[t]")
message_admins("[key_name_admin(usr)] has printed the jobban log")
log_admin("[key_name(usr)] has printed the jobban log")
@@ -141,7 +141,7 @@
set name = "Search Jobban Log"
set desc = "This searches all the active jobban entries for the current round and outputs the results to standard output."
set category = "Debug"
if(!check_rights(R_DEBUG))
return
@@ -153,6 +153,26 @@
for(var/t in jobban_keylist)
if(findtext(t, filter))
to_chat(usr, "[t]")
message_admins("[key_name_admin(usr)] has searched the jobban log for [filter]")
log_admin("[key_name(usr)] has searched the jobban log for [filter]")
/client/proc/vv_by_ref()
set name = "VV by Ref"
set desc = "Give this a ref string, and you will see its corresponding VV panel if it exists"
set category = "Debug"
// It's gated by "Debug Verbs", so might as well gate it to the debug permission
if(!check_rights(R_DEBUG))
return
var/refstring = input("Which reference?","Ref") as text|null
if(!refstring)
return
var/datum/D = locate(refstring)
if(!D)
to_chat(usr, "<span class='warning'>That ref string does not correspond to any datum.</span>")
return
debug_variables(D)
-36
View File
@@ -119,42 +119,6 @@ var/intercom_range_display_status = 0
qdel(F)
feedback_add_details("admin_verb","mIRD") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
var/list/admin_verbs_show_debug_verbs = list(
/client/proc/camera_view,
/client/proc/sec_camera_report,
/client/proc/intercom_view,
/client/proc/Cell, //More air things
/client/proc/atmosscan, //check plumbing
/client/proc/powerdebug, //check power
/client/proc/count_objects_on_z_level,
/client/proc/count_objects_all,
/client/proc/cmd_assume_direct_control,
/client/proc/startSinglo,
/client/proc/ticklag,
/client/proc/cmd_admin_grantfullaccess,
/client/proc/cmd_admin_areatest,
/client/proc/cmd_admin_rejuvenate,
/datum/admins/proc/show_traitor_panel,
/client/proc/print_jobban_old,
/client/proc/print_jobban_old_filter,
/client/proc/forceEvent,
/client/proc/nanomapgen_DumpImage,
/client/proc/reload_nanoui_resources,
/client/proc/admin_redo_space_transitions,
/client/proc/make_turf_space_map
)
/client/proc/enable_debug_verbs()
set category = "Debug"
set name = "Debug verbs"
if(!check_rights(R_DEBUG))
return
verbs += admin_verbs_show_debug_verbs
feedback_add_details("admin_verb","mDV") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/count_objects_on_z_level()
set category = "Mapping"
set name = "Count Objects On Level"
@@ -0,0 +1,37 @@
var/list/admin_verbs_show_debug_verbs = list(
/client/proc/camera_view,
/client/proc/sec_camera_report,
/client/proc/intercom_view,
/client/proc/Cell, //More air things
/client/proc/atmosscan, //check plumbing
/client/proc/powerdebug, //check power
/client/proc/count_objects_on_z_level,
/client/proc/count_objects_all,
/client/proc/cmd_assume_direct_control,
/client/proc/startSinglo,
/client/proc/ticklag,
/client/proc/cmd_admin_grantfullaccess,
/client/proc/cmd_admin_areatest,
/client/proc/cmd_admin_rejuvenate,
/datum/admins/proc/show_traitor_panel,
/client/proc/print_jobban_old,
/client/proc/print_jobban_old_filter,
/client/proc/forceEvent,
/client/proc/nanomapgen_DumpImage,
/client/proc/reload_nanoui_resources,
/client/proc/admin_redo_space_transitions,
/client/proc/make_turf_space_map,
/client/proc/vv_by_ref
)
// Would be nice to make this a permanent admin pref so we don't need to click it each time
/client/proc/enable_debug_verbs()
set category = "Debug"
set name = "Debug verbs"
if(!check_rights(R_DEBUG))
return
verbs += admin_verbs_show_debug_verbs
feedback_add_details("admin_verb","mDV") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
+10 -9
View File
@@ -164,12 +164,13 @@ var/global/dmm_suite/preloader/_preloader = new
log_debug("Loaded map in [stop_watch(watch)]s.")
qdel(LM)
if(bounds[MAP_MINX] == 1.#INF) // Shouldn't need to check every item
log_debug("Min x: bounds[MAP_MINX]")
log_debug("Min y: bounds[MAP_MINY]")
log_debug("Min z: bounds[MAP_MINZ]")
log_debug("Max x: bounds[MAP_MAXX]")
log_debug("Max y: bounds[MAP_MAXY]")
log_debug("Max z: bounds[MAP_MAXZ]")
log_runtime(EXCEPTION("Bad Map bounds."), src, list(
"Min x: [bounds[MAP_MINX]]",
"Min y: [bounds[MAP_MINY]]",
"Min z: [bounds[MAP_MINZ]]",
"Max x: [bounds[MAP_MAXX]]",
"Max y: [bounds[MAP_MAXY]]",
"Max z: [bounds[MAP_MAXZ]]"))
return null
else
if(!measureOnly)
@@ -233,7 +234,7 @@ var/global/dmm_suite/preloader/_preloader = new
old_position = dpos + 1
if(!atom_def) // Skip the item if the path does not exist. Fix your crap, mappers!
log_debug("Bad path: [atom_text]")
log_runtime(EXCEPTION("Bad path: [atom_text]"), src, list("Source String: [model]", "dpos: [dpos]"))
continue
members.Add(atom_def)
@@ -384,7 +385,7 @@ var/global/dmm_suite/preloader/_preloader = new
if(findtext(trim_right,quote,1,2))
var/endquote = findtext(trim_right,quote,-1)
if(!endquote)
log_debug("Terminating quote not found!")
log_runtime(EXCEPTION("Terminating quote not found!"), src)
// Our map writer escapes quotes and curly brackets to avoid
// letting our simple parser choke on meanly-crafted names/etc
// - so we decode it here so it's back to good ol' legibility
@@ -458,7 +459,7 @@ var/global/dmm_suite/preloader/_preloader = new
try
what.deserialize(json_decode(json_data))
catch(var/exception/e)
log_debug("Bad json data: '[json_data]'")
log_runtime(EXCEPTION("Bad json data: '[json_data]'"), src)
throw e
for(var/attribute in attributes)
var/value = attributes[attribute]
+1
View File
@@ -56,6 +56,7 @@
//search the href for script injection
if( findtext(href,"<script",1,0) )
log_to_dd("Attempted use of scripts within a topic call, by [src]")
log_runtime(EXCEPTION("Attempted use of scripts within a topic call, by [src]"), src)
message_admins("Attempted use of scripts within a topic call, by [src]")
return
@@ -61,7 +61,7 @@
// Might as well scrub out any malformed be_special list entries while we're here
for(var/role in be_special)
if(!(role in special_roles))
log_to_dd("[C.key] had a malformed role entry: '[role]'. Removing!")
log_runtime(EXCEPTION("[C.key] had a malformed role entry: '[role]'. Removing!"), src)
be_special -= role
var/DBQuery/query = dbcon.NewQuery({"UPDATE [format_table_name("player")]
+1 -1
View File
@@ -53,7 +53,7 @@
to_chat(A, "<span class='danger'>Malicious program detected in the [english_list(areaName)] lighting and airlock control systems by [my_department].</span>")
else
log_to_dd("ERROR: Could not initate grey-tide. Unable to find suitable containment area.")
log_runtime("Could not initate grey-tide. Unable to find suitable containment area.", src)
kill()
/datum/event/prison_break/tick()
@@ -6,6 +6,8 @@
continue
if(H.species.virus_immune) //don't count things that are virus immune; they'll just get picked and auto-cure
continue
if(!H.get_int_organ(/obj/item/organ/internal/appendix))
continue
var/foundAlready = 0 //don't infect someone that already has the virus
for(var/datum/disease/D in H.viruses)
foundAlready = 1
@@ -14,4 +16,4 @@
var/datum/disease/D = new /datum/disease/appendicitis
H.ForceContractDisease(D)
break
break
@@ -106,7 +106,7 @@
"<span class='userdanger'>[target] hits \himself with a bottle of [src.name][head_attack_message]!</span>")
//Attack logs
add_logs(target, user, "attacked", src)
add_logs(user, target, "attacked", src)
//The reagents in the bottle splash all over the target, thanks for the idea Nodrak
SplashReagents(target)
@@ -343,4 +343,4 @@
return
to_chat(user, "<span class='info'>You snuff out the flame on \the [src].</span>")
overlays -= fire_overlay
active = 0
active = 0
@@ -47,7 +47,7 @@
if(!reagents || !reagents.total_volume)
return // The condiment might be empty after the delay.
user.visible_message("<span class='warning'>[user] feeds [M] from [src].</span>")
add_logs(M, user, "fed", reagentlist(src))
add_logs(user, M, "fed", reagentlist(src))
var/fraction = min(10/reagents.total_volume, 1)
reagents.reaction(M, INGEST, fraction)
@@ -163,3 +163,4 @@ var/global/datum/controller/process/garbage_collector/garbageCollector
/proc/gcwarning(msg)
log_to_dd("## GC WARNING: [msg]")
log_runtime(EXCEPTION(msg))
+1 -1
View File
@@ -96,7 +96,7 @@
/obj/item/weapon/grown/nettle/death/afterattack(mob/living/carbon/M, mob/user)
if(istype(M, /mob/living))
to_chat(M, "<span class='danger'>You are stunned by the powerful acid of the Deathnettle!</span>")
add_logs(M, user, "attacked", src)
add_logs(user, M, "attacked", src)
M.eye_blurry += force/7
if(prob(20))
+1 -1
View File
@@ -83,7 +83,7 @@
/obj/structure/bookcase/attack_hand(var/mob/user as mob)
if(contents.len)
var/obj/item/weapon/book/choice = input("Which book would you like to remove from \the [src]?") in contents as obj|null
var/obj/item/weapon/book/choice = input("Which book would you like to remove from [src]?") as null|anything in contents
if(choice)
if(user.incapacitated() || user.lying || !Adjacent(user))
return
+4 -4
View File
@@ -19,7 +19,7 @@
if(!damage)
playsound(D.loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1)
D.visible_message("<span class='warning'>[A] has attempted to hit [D] with a [atk_verb]!</span>")
add_logs(D, A, "attempted to hit", atk_verb)
add_logs(A, D, "attempted to hit", atk_verb)
return 0
@@ -32,7 +32,7 @@
"<span class='userdanger'>[A] has hit [D] with a [atk_verb]!</span>")
D.apply_damage(damage, STAMINA, affecting, armor_block)
add_logs(D, A, "punched")
add_logs(A, D, "punched")
if(D.getStaminaLoss() > 50)
var/knockout_prob = D.getStaminaLoss() + rand(-15,15)
if((D.stat != DEAD) && prob(knockout_prob))
@@ -61,7 +61,7 @@
return 1
/datum/martial_art/drunk_brawling/harm_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
add_logs(D, A, "punched")
add_logs(A, D, "punched")
A.do_attack_animation(D)
var/atk_verb = pick("jab","uppercut","overhand punch","drunken right hook","drunken left hook")
@@ -103,4 +103,4 @@
D.forcesay(hit_appends)
else if(D.lying)
D.forcesay(hit_appends)
return 1
return 1
+2 -2
View File
@@ -53,7 +53,7 @@
D.apply_damage(damage, BRUTE, affecting, armor_block)
add_logs(D, A, "punched")
add_logs(A, D, "punched")
if((D.stat != DEAD) && damage >= A.species.punchstunthreshold)
D.visible_message("<span class='danger'>[A] has weakened [D]!!</span>", \
@@ -242,4 +242,4 @@
/obj/item/weapon/twohanded/bostaff/hit_reaction(mob/living/carbon/human/owner, attack_text, final_block_chance)
if(wielded)
return ..()
return 0
return 0
+1 -2
View File
@@ -38,7 +38,7 @@
playsound(get_turf(A), 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
D.apply_damage(damage, STAMINA, affecting, armor_block)
add_logs(D, A, "mimechucked")
add_logs(A, D, "mimechucked")
return 1
return basic_hit(A,D)
@@ -116,4 +116,3 @@
to_chat(usr, "<span class='notice'>Mimechucks</span>: Disarm Harm. Hits the opponent with invisible nunchucks.")
to_chat(usr, "<span class='notice'>Smokebomb</span>: Disarm Disarm. Drops a mime smokebomb.")
to_chat(usr, "<span class='notice'>Silent Palm</span>: Grab Disarm. Using mime energy throw someone back.")
+1 -1
View File
@@ -28,7 +28,7 @@
var/armor_block = D.run_armor_check(null, "melee")
D.apply_damage(30, BRUTE, null, armor_block)
D.apply_effect(6, WEAKEN, armor_block)
add_logs(D, A, "suplexed")
add_logs(A, D, "suplexed")
A.SpinAnimation(10,1)
+2 -2
View File
@@ -653,7 +653,7 @@
playsound(src,'sound/weapons/resonator_blast.ogg',50,1)
if(creator)
for(var/mob/living/L in src.loc)
add_logs(L, creator, "used a resonator field on", object="resonator")
add_logs(creator, L, "used a resonator field on", object="resonator")
to_chat(L, "<span class='danger'>The [src.name] ruptured with you in it!</span>")
L.adjustBruteLoss(resonance_damage)
else
@@ -1307,4 +1307,4 @@
if(!charged)
charged = 1
icon_state = "mining_hammer1"
playsound(loc, 'sound/weapons/kenetic_reload.ogg', 60, 1)
playsound(loc, 'sound/weapons/kenetic_reload.ogg', 60, 1)
@@ -35,7 +35,7 @@ In all, this is a lot like the monkey code. /N
visible_message("<span class='danger'>[M.name] bites [src]!</span>", \
"<span class='userdanger'>[M.name] bites [src]!</span>")
adjustBruteLoss(damage)
add_logs(src, M, "attacked", admin=0)
add_logs(M, src, "attacked", admin=0)
updatehealth()
else
to_chat(M, "<span class='warning'>[name] is too injured for that.</span>")
@@ -79,4 +79,4 @@ In all, this is a lot like the monkey code. /N
adjustCloneLoss(damage)
if(STAMINA)
adjustStaminaLoss(damage)
updatehealth()
updatehealth()
@@ -116,7 +116,7 @@
"<span class='userdanger'>[M] [M.attacktext] [src]!</span>")
var/damage = rand(M.melee_damage_lower, M.melee_damage_upper)
adjustBruteLoss(damage)
add_logs(src, M, "attacked", admin=0)
add_logs(M, src, "attacked", admin=0)
updatehealth()
@@ -245,4 +245,4 @@
else
var/mob/living/carbon/alien/humanoid/A = new(loc)
A.key = key
qdel(src) */
qdel(src) */
+2 -2
View File
@@ -28,7 +28,7 @@
return
if(held_brain)
to_chat(user, "<span class='userdanger'>Somehow, this MMI still has a brain in it. Report this to the bug tracker.</span>")
log_to_dd("[user] tried to stick a [O] into [src] in [get_area(src)], but the held brain variable wasn't cleared")
log_runtime(EXCEPTION("[user] tried to stick a [O] into [src] in [get_area(src)], but the held brain variable wasn't cleared"), src)
return
for(var/mob/V in viewers(src, null))
V.show_message("<span class='notice'>[user] sticks \a [O] into \the [src].</span>")
@@ -101,7 +101,7 @@
//problem i was having with alien/nonalien brain drops.
/obj/item/device/mmi/proc/dropbrain(var/turf/dropspot)
if(isnull(held_brain))
log_to_dd("[src] at [loc] attempted to drop brain without a contained brain in [get_area(src)].")
log_runtime(EXCEPTION("[src] at [loc] attempted to drop brain without a contained brain in [get_area(src)]."), src)
to_chat(brainmob, "<span class='userdanger'>Your MMI did not contain a brain! We'll make a new one for you, but you'd best report this to the bugtracker!</span>")
held_brain = new(dropspot) // Let's not ruin someone's round because of something dumb -- Crazylemon
held_brain.dna = brainmob.dna.Clone()
@@ -40,7 +40,7 @@
/obj/item/organ/internal/brain/proc/transfer_identity(var/mob/living/carbon/H)
brainmob = new(src)
if(isnull(dna)) // someone didn't set this right...
log_to_dd("[src] at [loc] did not contain a dna datum at time of removal.")
log_runtime(EXCEPTION("[src] at [loc] did not contain a dna datum at time of removal."), src)
dna = H.dna.Clone()
name = "\the [dna.real_name]'s [initial(src.name)]"
brainmob.dna = dna.Clone() // Silly baycode, what you do
@@ -72,7 +72,7 @@
// This should not ever happen, but let's be safe
/obj/item/device/mmi/posibrain/dropbrain(var/turf/dropspot)
log_to_dd("[src] at [loc] attempted to drop brain without a contained brain.")
log_runtime(EXCEPTION("[src] at [loc] attempted to drop brain without a contained brain."), src)
return
/obj/item/device/mmi/posibrain/transfer_identity(var/mob/living/carbon/H)
+1 -1
View File
@@ -541,7 +541,7 @@ var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/unary/vent_pump,
var/start_T_descriptor = "<font color='#6b5d00'>tile at [start_T.x], [start_T.y], [start_T.z] in area [get_area(start_T)]</font>"
var/end_T_descriptor = "<font color='#6b4400'>tile at [end_T.x], [end_T.y], [end_T.z] in area [get_area(end_T)]</font>"
add_logs(throwable_mob, src, "thrown", addition="from [start_T_descriptor] with the target [end_T_descriptor]")
add_logs(src, throwable_mob, "thrown", addition="from [start_T_descriptor] with the target [end_T_descriptor]")
else if(!(I.flags & ABSTRACT)) //can't throw abstract items
thrown_thing = I
@@ -142,6 +142,13 @@
return ..(gibbed)
/mob/living/carbon/human/update_revive()
..()
// Update healthdoll
if(healthdoll)
// We're alive again, so re-build the entire healthdoll
healthdoll.cached_healthdoll_overlays.Cut()
/mob/living/carbon/human/proc/makeSkeleton()
var/obj/item/organ/external/head/H = get_organ("head")
if(SKELETON in src.mutations) return
@@ -410,7 +410,7 @@
M.do_attack_animation(src)
visible_message("<span class='danger'>[M] [M.attacktext] [src]!</span>", \
"<span class='userdanger'>[M] [M.attacktext] [src]!</span>")
add_logs(src, M, "attacked")
add_logs(M, src, "attacked")
var/damage = rand(M.melee_damage_lower, M.melee_damage_upper)
if(check_shields(damage, "the [M.name]", null, MELEE_ATTACK, M.armour_penetration))
return 0
@@ -19,7 +19,7 @@
..()
if((M != src) && M.a_intent != "help" && check_shields(0, M.name, attack_type = UNARMED_ATTACK))
add_logs(src, M, "attempted to touch")
add_logs(M, src, "attempted to touch")
visible_message("<span class='warning'>[M] attempted to touch [src]!</span>")
return 0
@@ -63,11 +63,11 @@
if(S.next_step(M, src))
return 1
help_shake_act(M)
add_logs(src, M, "shaked")
add_logs(M, src, "shaked")
return 1
if(health >= config.health_threshold_crit)
help_shake_act(M)
add_logs(src, M, "shaked")
add_logs(M, src, "shaked")
return 1
if(!H.check_has_mouth())
to_chat(H, "<span class='danger'>You don't have a mouth, you cannot perform CPR!</span>")
@@ -94,7 +94,7 @@
to_chat(src, "<span class='notice'>You feel a breath of fresh air enter your lungs. It feels good.</span>")
to_chat(M, "<span class='alert'>Repeat at least every 7 seconds.")
add_logs(src, M, "CPRed")
add_logs(M, src, "CPRed")
return 1
else
to_chat(M, "<span class='danger'>You need to stay still while performing CPR!</span>")
@@ -123,7 +123,7 @@
return
//we're good to suck the blood, blaah
M.mind.vampire.handle_bloodsucking(src)
add_logs(src, M, "vampirebit")
add_logs(M, src, "vampirebit")
msg_admin_attack("[key_name_admin(M)] vampirebit [key_name_admin(src)]")
return
//end vampire codes
@@ -133,7 +133,7 @@
var/datum/unarmed_attack/attack = M.species.unarmed
M.do_attack_animation(src)
add_logs(src, M, "[pick(attack.attack_verb)]ed")
add_logs(M, src, "[pick(attack.attack_verb)]ed")
if(!iscarbon(M))
LAssailant = null
@@ -172,7 +172,7 @@
if(attacker_style && attacker_style.disarm_act(H, src))
return 1
else
add_logs(src, M, "disarmed")
add_logs(M, src, "disarmed")
if(w_uniform)
w_uniform.add_fingerprint(M)
@@ -221,7 +221,7 @@
update_inv_belt(redraw_mob)
if(slot_wear_id)
wear_id = W
if(!hud_list.len)
if(hud_list.len)
sec_hud_set_ID()
update_inv_wear_id(redraw_mob)
if(slot_wear_pda)
+4 -4
View File
@@ -803,10 +803,6 @@
if(REGEN in mutations)
heal_overall_damage(0.1, 0.1)
if(!in_stasis)
handle_organs()
handle_blood()
if(paralysis)
blinded = 1
stat = UNCONSCIOUS
@@ -893,6 +889,10 @@
if(gloves && germ_level > gloves.germ_level && prob(10))
gloves.germ_level += 1
if(!in_stasis)
handle_organs()
handle_blood()
else //dead
blinded = 1
+2 -2
View File
@@ -651,7 +651,7 @@
who.unEquip(what)
if(silent)
put_in_hands(what)
add_logs(who, src, "stripped", addition="of [what]")
add_logs(src, who, "stripped", addition="of [what]")
// The src mob is trying to place an item on someone
// Override if a certain mob should be behave differently when placing items (can't, for example)
@@ -670,7 +670,7 @@
if(what && Adjacent(who))
unEquip(what)
who.equip_to_slot_if_possible(what, where, 0, 1)
add_logs(who, src, "equipped", what)
add_logs(src, who, "equipped", what)
/mob/living/singularity_act()
+1 -1
View File
@@ -235,7 +235,7 @@
to_chat(user, "<span class='notice'>You already grabbed [src].</span>")
return
add_logs(src, user, "grabbed", addition="passively")
add_logs(user, src, "grabbed", addition="passively")
var/obj/item/weapon/grab/G = new /obj/item/weapon/grab(user, src)
if(buckled)
@@ -61,11 +61,12 @@ var/global/list/empty_playable_ai_cores = list()
loc_landmark = sloc
forceMove(loc_landmark.loc)
view_core()
// Before calling this, make sure an empty core exists, or this will no-op
/mob/living/silicon/ai/proc/moveToEmptyCore()
if(!empty_playable_ai_cores.len)
log_debug("moveToEmptyCore called without any available cores")
log_runtime(EXCEPTION("moveToEmptyCore called without any available cores"), src)
return
// IsJobAvailable for AI checks that there is an empty core available in this list
@@ -73,6 +74,6 @@ var/global/list/empty_playable_ai_cores = list()
empty_playable_ai_cores -= C
forceMove(C.loc)
view_core()
qdel(C)
@@ -16,7 +16,6 @@
local_transmit = 1
ventcrawler = 2
magpulse = 1
mob_size = MOB_SIZE_TINY
// We need to keep track of a few module items so we don't need to do list operations
// every time we need them. These get set in New() after the module is chosen.
@@ -548,7 +548,7 @@ Auto Patrol[]"},
C.Weaken(5)
C.stuttering = 5
C.Stun(5)
add_logs(src,C,"stunned")
add_logs(src, C, "stunned")
if(declare_arrests)
var/area/location = get_area(src)
speak("[arrest_type ? "Detaining" : "Arresting"] level [threat] scumbag <b>[C]</b> in [location].", radio_channel)
@@ -251,7 +251,7 @@ Auto Patrol: []"},
C.Weaken(5)
C.stuttering = 5
C.Stun(5)
add_logs(src,C,"stunned")
add_logs(src, C, "stunned")
if(declare_arrests)
var/area/location = get_area(src)
speak("[arrest_type ? "Detaining" : "Arresting"] level [threat] scumbag <b>[C]</b> in [location].", radio_channel)
@@ -79,14 +79,14 @@
if(!istype(loc, /obj/item)) // Some silly motherfucker spawned us directly via the game panel.
message_admins("<span class='adminnotice'>Posessed object improperly spawned, deleting.</span>") // So silly admins with debug off will see the message too and not spam these things.
log_debug("[src] spawned manually, no object to assign attributes to.")
qdel()
log_runtime(EXCEPTION("[src] spawned manually, no object to assign attributes to."), src)
qdel(src)
var/turf/possessed_loc = get_turf(loc)
if(!istype(possessed_loc)) // Will this ever happen? Who goddamn knows.
message_admins("<span class='adminnotice'>Posessed object could not find turf, deleting.</span>") // So silly admins with debug off will see the message too and not spam these things.
log_debug("[src] attempted to find a turf to spawn on, and could not.")
qdel()
log_runtime(EXCEPTION("[src] attempted to find a turf to spawn on, and could not."), src)
qdel(src)
possessed_item = loc
forceMove(possessed_loc)
@@ -151,4 +151,4 @@
dir = possessed_item.dir
color = possessed_item.color
overlays = possessed_item.overlays
opacity = possessed_item.opacity
opacity = possessed_item.opacity
+2 -2
View File
@@ -510,14 +510,14 @@
chosen_species = all_species[client.prefs.species]
if(!(chosen_species && (is_species_whitelisted(chosen_species) || has_admin_rights())))
// Have to recheck admin due to no usr at roundstart. Latejoins are fine though.
log_debug("[src] had species [client.prefs.species], though they weren't supposed to. Setting to Human.")
log_runtime(EXCEPTION("[src] had species [client.prefs.species], though they weren't supposed to. Setting to Human."), src)
client.prefs.species = "Human"
var/datum/language/chosen_language
if(client.prefs.language)
chosen_language = all_languages[client.prefs.language]
if((chosen_language == null && client.prefs.language != "None") || (chosen_language && chosen_language.flags & RESTRICTED))
log_debug("[src] had language [client.prefs.language], though they weren't supposed to. Setting to None.")
log_runtime(EXCEPTION("[src] had language [client.prefs.language], though they weren't supposed to. Setting to None."), src)
client.prefs.language = "None"
/mob/new_player/proc/ViewManifest()
+3 -1
View File
@@ -37,7 +37,9 @@
O.add_ai_verbs()
O.rename_self("AI",1)
qdel(src)
spawn()
qdel(src)
return O
@@ -244,7 +244,7 @@
/datum/nano_module/appearance_changer/proc/can_change_head_accessory()
if(!head_organ)
log_debug("Missing head!")
log_runtime(EXCEPTION("Missing head!"), owner)
return 0
return owner && (flags & APPEARANCE_HEAD_ACCESSORY) && (head_organ.species.bodyflags & HAS_HEAD_ACCESSORY)
+1 -1
View File
@@ -114,7 +114,7 @@
// to_chat(M, "<span class='danger'>You feel a tiny prick!</span>")
. = 1
add_logs(M, user, "stabbed", object="[name]")
add_logs(user, M, "stabbed", object="[name]")
else
. = ..()
@@ -209,7 +209,7 @@
power_supply.give(5000)
if(!suppressed)
playsound(loc, 'sound/weapons/kenetic_reload.ogg', 60, 1)
else
else if(ismob(loc))
to_chat(loc, "<span class='warning'>[src] silently charges up.<span>")
update_icon()
+1 -1
View File
@@ -87,7 +87,7 @@
for(var/datum/reagent/R in reagents.reagent_list)
reagent_note += R.id + " ("
reagent_note += num2text(R.volume) + ") "
add_logs(L, firer, "shot", src, reagent_note)
add_logs(firer, L, "shot", src, reagent_note)
return L.apply_effects(stun, weaken, paralyze, irradiate, slur, stutter, eyeblur, drowsy, blocked, stamina, jitter)
/obj/item/projectile/proc/vol_by_damage()
+2 -2
View File
@@ -639,7 +639,7 @@
M.adjustFireLoss(rand(0,15))
M.update_revive()
M.stat = UNCONSCIOUS
add_logs(M, M, "revived", object="strange reagent")
add_logs(M, M, "revived", object="strange reagent") //Yes, the logs say you revived yourself.
..()
/datum/reagent/strange_reagent/on_mob_life(mob/living/M)
@@ -1058,4 +1058,4 @@
else if(effect <= 8)
M.visible_message("<span class='warning'>[M] stumbles and staggers.</span>")
M.Dizzy(5)
M.Weaken(3)
M.Weaken(3)
@@ -37,7 +37,7 @@
var/contained = english_list(injected)
add_logs(M, user, "injected", src, "([contained])")
add_logs(user, M, "injected", src, "([contained])")
/obj/item/weapon/reagent_containers/hypospray/CMO
list_reagents = list("omnizine" = 30)
@@ -110,4 +110,4 @@
amount_per_transfer_from_this = 50
possible_transfer_amounts = list(50)
volume = 50
list_reagents = list("stimulants" = 50)
list_reagents = list("stimulants" = 50)
@@ -384,7 +384,7 @@
G.change_gender(pick(MALE,FEMALE))
G.loc = src.loc
G.key = ghost.key
add_logs(G, user, "summoned", null, "as a golem")
add_logs(user, G, "summoned", null, "as a golem")
to_chat(G, "You are an adamantine golem. You move slowly, but are highly resistant to heat and cold as well as blunt trauma. You are unable to wear clothes, but can still use most tools. Serve [user], and assist them in completing their goals at any cost.")
qdel(src)
+1 -1
View File
@@ -646,7 +646,7 @@
return 1
if(!shuttle_master)
log_to_dd("## ERROR: The shuttle_master controller datum is missing somehow.")
log_runtime(EXCEPTION("The shuttle_master controller datum is missing somehow."), src)
return 1
if(href_list["send"])
+1 -1
View File
@@ -243,7 +243,7 @@
user.visible_message("<span class='notice'> [user] amputates [target]'s [affected.name] at the [affected.amputation_point] with \the [tool].</span>", \
"<span class='notice'> You amputate [target]'s [affected.name] with \the [tool].</span>")
add_logs(target,user ,"surgically removed [affected.name] from", addition="INTENT: [uppertext(user.a_intent)]")//log it
add_logs(user, target, "surgically removed [affected.name] from", addition="INTENT: [uppertext(user.a_intent)]")//log it
var/atom/movable/thing = affected.droplimb(1,DROPLIMB_EDGE)
if(istype(thing,/obj/item))
+1 -1
View File
@@ -318,7 +318,7 @@ Large: Whether the splat should be big or not
R.reaction_turf(T, R.volume)
return
else if(source)
log_to_dd("Non-human or reagent blood source. Area: [get_area(source)], Name: [source]")
log_runtime(EXCEPTION("Non-human or reagent blood source. Area: [get_area(source)], Name: [source]"), source)
// Are we dripping or splattering?
var/list/drips = list()
+1 -1
View File
@@ -46,7 +46,7 @@ var/list/organ_cache = list()
dna = holder.dna.Clone()
species = all_species[dna.species]
else
log_to_dd("[src] at [loc] spawned without a proper DNA.")
log_runtime(EXCEPTION("[holder] spawned without a proper DNA."), holder)
var/mob/living/carbon/human/H = holder
if(istype(H))
if(dna)
@@ -413,7 +413,7 @@ This function completely restores a damaged organ to perfect condition.
if(germ_level)
return 1
if(!wound_cleanup_timer && wounds.len)
wound_cleanup_timer = addtimer(src, "cleanup_wounds", SecondsToTicks(600), unique = 1, wounds)
wound_cleanup_timer = addtimer(src, "cleanup_wounds", SecondsToTicks(600), 1, wounds)
if(update_icon())
owner.UpdateDamageIcon(1)
@@ -39,7 +39,7 @@
var/mob/living/carbon/human/H = M
parent = H.get_organ(check_zone(parent_organ))
if(!istype(parent))
log_debug("[src] attempted to insert into a [parent_organ], but [parent_organ] wasn't an organ! [atom_loc_line(M)]")
log_runtime(EXCEPTION("[src] attempted to insert into a [parent_organ], but [parent_organ] wasn't an organ! [atom_loc_line(M)]"), src)
else
parent.internal_organs |= src
//M.internal_organs_by_name[src] |= src(H,1)
@@ -53,7 +53,7 @@
// However, you MUST set the object's positiion yourself when you call this!
/obj/item/organ/internal/remove(mob/living/carbon/M, special = 0)
if(!owner)
log_debug("\'remove\' called on [src] without an owner! Mob: [M], [atom_loc_line(M)]")
log_runtime(EXCEPTION("\'remove\' called on [src] without an owner! Mob: [M], [atom_loc_line(M)]"), src)
owner = null
if(M)
M.internal_organs -= src
@@ -65,7 +65,7 @@
var/mob/living/carbon/human/H = M
var/obj/item/organ/external/parent = H.get_organ(check_zone(parent_organ))
if(!istype(parent))
log_debug("[src] attempted to remove from a [parent_organ], but [parent_organ] didn't exist! [atom_loc_line(M)]")
log_runtime(EXCEPTION("[src] attempted to remove from a [parent_organ], but [parent_organ] didn't exist! [atom_loc_line(M)]"), src)
else
parent.internal_organs -= src
+1 -1
View File
@@ -240,7 +240,7 @@
user.visible_message("<span class='notice'> [user] has separated and extracts [target]'s [I] with \the [tool].</span>" , \
"<span class='notice'> You have separated and extracted [target]'s [I] with \the [tool].</span>")
add_logs(target,user, "surgically removed [I.name] from", addition="INTENT: [uppertext(user.a_intent)]")
add_logs(user, target, "surgically removed [I.name] from", addition="INTENT: [uppertext(user.a_intent)]")
spread_germs_to_organ(I, user)
I.status |= ORGAN_CUT_AWAY
var/obj/item/thing = I.remove(target)
+3 -3
View File
@@ -239,7 +239,7 @@
user.visible_message("[user] begins to close and secure the hatch on [target]'s [affected.name] with \the [tool]." , \
"You begin to close and secure the hatch on [target]'s [affected.name] with \the [tool].")
else
log_debug("Invalid tool: '[implement_type]'")
log_runtime(EXCEPTION("Invalid tool: '[implement_type]'"), src)
return -1
..()
@@ -453,7 +453,7 @@
user.visible_message("<span class='notice'> [user] has decoupled [target]'s [I] with \the [tool].</span>" , \
"<span class='notice'> You have decoupled [target]'s [I] with \the [tool].</span>")
add_logs(target,user, "surgically removed [I.name] from", addition="INTENT: [uppertext(user.a_intent)]")
add_logs(user, target, "surgically removed [I.name] from", addition="INTENT: [uppertext(user.a_intent)]")
spread_germs_to_organ(I, user)
I.status |= ORGAN_CUT_AWAY
var/obj/item/thing = I.remove(target)
@@ -530,7 +530,7 @@
"<span class='notice'> You have decoupled [target]'s [affected.name] with \the [tool].</span>")
add_logs(target,user ,"surgically removed [affected.name] from", addition="INTENT: [uppertext(user.a_intent)]")//log it
add_logs(user, target, "surgically removed [affected.name] from", addition="INTENT: [uppertext(user.a_intent)]")//log it
var/atom/movable/thing = affected.droplimb(1,DROPLIMB_EDGE)
if(istype(thing,/obj/item))