diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm index 8da220bf67..7cfa15e53a 100644 --- a/code/__HELPERS/game.dm +++ b/code/__HELPERS/game.dm @@ -142,7 +142,7 @@ if(ismob(A)) var/mob/M = A if(client_check && !M.client) - L = recursive_mob_check(A, L, recursion_limit - 1, client_check, sight_check, include_radio) + L |= recursive_mob_check(A, L, recursion_limit - 1, client_check, sight_check, include_radio) continue if(sight_check && !isInSight(A, O)) continue @@ -155,7 +155,7 @@ L |= A if(isobj(A) || ismob(A)) - L = recursive_mob_check(A, L, recursion_limit - 1, client_check, sight_check, include_radio) + L |= recursive_mob_check(A, L, recursion_limit - 1, client_check, sight_check, include_radio) return L // The old system would loop through lists for a total of 5000 per function call, in an empty server. @@ -182,7 +182,7 @@ hear += A if(isobj(A) || ismob(A)) - hear = recursive_mob_check(A, hear, 3, 1, 0, 1) + hear |= recursive_mob_check(A, hear, 3, 1, 0, 1) return hear diff --git a/code/_onclick/ai.dm b/code/_onclick/ai.dm index cb840a1d90..112c3431e5 100644 --- a/code/_onclick/ai.dm +++ b/code/_onclick/ai.dm @@ -55,6 +55,7 @@ RestrainedClickOn(A) else */ + A.add_hiddenprint(src) A.attack_ai(src) /* diff --git a/code/_onclick/cyborg.dm b/code/_onclick/cyborg.dm index 640a09d045..d86faacbd1 100644 --- a/code/_onclick/cyborg.dm +++ b/code/_onclick/cyborg.dm @@ -48,6 +48,7 @@ // Cyborgs have no range-checking unless there is item use if(!W) + A.add_hiddenprint(src) A.attack_robot(src) return diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm index c9dfd7cf40..5f11d9f623 100644 --- a/code/controllers/configuration.dm +++ b/code/controllers/configuration.dm @@ -18,6 +18,7 @@ var/log_adminwarn = 0 // log warnings admins get about bomb construction and such var/log_pda = 0 // log pda messages var/log_hrefs = 0 // logs all links clicked in-game. Could be used for debugging and tracking down exploits + var/log_runtime = 0 // logs world.log to a file var/sql_enabled = 1 // for sql switching var/allow_admin_ooccolor = 0 // Allows admins with relevant permissions to have their own ooc colour var/allow_vote_restart = 0 // allow votes to restart @@ -245,6 +246,9 @@ if ("log_hrefs") config.log_hrefs = 1 + if ("log_runtime") + config.log_runtime = 1 + if("allow_admin_ooccolor") config.allow_admin_ooccolor = 1 diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm index ad757325b9..ee73d537d8 100644 --- a/code/game/objects/items/crayons.dm +++ b/code/game/objects/items/crayons.dm @@ -80,6 +80,7 @@ if(instant || do_after(user, 50)) new /obj/effect/decal/cleanable/crayon(target,colour,shadeColour,drawtype) user << "You finish drawing." + target.add_fingerprint(user) // Adds their fingerprints to the floor the crayon is drawn on. if(uses) uses-- if(!uses) @@ -97,4 +98,4 @@ user << "\red You ate your crayon!" del(src) else - ..() \ No newline at end of file + ..() diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index ab8884d96c..eb59003ace 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -163,6 +163,7 @@ if("boiling") watertemp = "normal" user.visible_message("[user] adjusts the shower with the [I].", "You adjust the shower with the [I].") + add_fingerprint(user) /obj/machinery/shower/update_icon() //this is terribly unreadable, but basically it makes the shower mist up overlays.Cut() //once it's been on for a while, in addition to handling the water overlay. @@ -412,4 +413,4 @@ /obj/structure/sink/puddle/attackby(obj/item/O as obj, mob/user as mob) icon_state = "puddle-splash" ..() - icon_state = "puddle" \ No newline at end of file + icon_state = "puddle" diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 54a865955a..b09712350c 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -804,7 +804,11 @@ if (ismob(M)) if(!check_if_greater_rights_than(M.client)) return - M << "\red You have been kicked from the server" + var/reason = input("Please enter reason") + if(!reason) + M << "\red You have been kicked from the server" + else + M << "\red You have been kicked from the server: [reason]" log_admin("[key_name(usr)] booted [key_name(M)].") message_admins("\blue [key_name_admin(usr)] booted [key_name_admin(M)].", 1) //M.client = null diff --git a/code/modules/mob/living/carbon/monkey/diona.dm b/code/modules/mob/living/carbon/monkey/diona.dm index 442d33e2ac..3ec9b817c5 100644 --- a/code/modules/mob/living/carbon/monkey/diona.dm +++ b/code/modules/mob/living/carbon/monkey/diona.dm @@ -64,6 +64,10 @@ set name = "Evolve" set desc = "Grow to a more complex form." + if(!is_alien_whitelisted(src, "Diona") && config.usealienwhitelist) + src << alert("You are currently not whitelisted to play [client.prefs.species].") + return 0 + if(donors.len < 5) src << "You are not yet ready for your growth..." return diff --git a/code/world.dm b/code/world.dm index 3d1ad20db9..de70b60fe6 100644 --- a/code/world.dm +++ b/code/world.dm @@ -11,7 +11,6 @@ /world/New() //logs var/date_string = time2text(world.realtime, "YYYY/MM-Month/DD-Day") - log = file("data/logs/runtime/[time2text(world.realtime,"YYYY-MM")].log") //funtimelog href_logfile = file("data/logs/[date_string] hrefs.htm") diary = file("data/logs/[date_string].log") diaryofmeanpeople = file("data/logs/[date_string] Attack.log") @@ -28,6 +27,9 @@ // dumb and hardcoded but I don't care~ config.server_name += " #[(world.port % 1000) / 100]" + if(config && config.log_runtime) + log = file("data/logs/runtime/[time2text(world.realtime,"YYYY-MM-DD-(hh-mm-ss)")]-runtime.log") + callHook("startup") //Emergency Fix load_mods() diff --git a/config/example/config.txt b/config/example/config.txt index 1075a5ab67..783adb23af 100644 --- a/config/example/config.txt +++ b/config/example/config.txt @@ -61,6 +61,9 @@ LOG_PDA ## log all Topic() calls (for use by coders in tracking down Topic issues) # LOG_HREFS +## log world.log and runtime errors to a file +# LOG_RUNTIME + ## log admin warning messages ##LOG_ADMINWARN ## Also duplicates a bunch of other messages. @@ -234,4 +237,4 @@ USEALIENWHITELIST ALLOW_CULT_GHOSTWRITER ## Sets the minimum number of cultists needed for ghosts to write in blood. -REQ_CULT_GHOSTWRITER 6 \ No newline at end of file +REQ_CULT_GHOSTWRITER 6 diff --git a/icons/mob/animal.dmi b/icons/mob/animal.dmi index e269d169aa..0fb7e01d0d 100644 Binary files a/icons/mob/animal.dmi and b/icons/mob/animal.dmi differ