diff --git a/code/game/jobs/job/supervisor.dm b/code/game/jobs/job/supervisor.dm index 28e81b33792..ce5fbd847bc 100644 --- a/code/game/jobs/job/supervisor.dm +++ b/code/game/jobs/job/supervisor.dm @@ -257,7 +257,7 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 0) suit = /obj/item/clothing/suit/storage/internalaffairs shoes = /obj/item/clothing/shoes/brown l_ear = /obj/item/radio/headset/headset_sec/alt - glasses = /obj/item/clothing/glasses/hud/security/sunglasses + glasses = /obj/item/clothing/glasses/hud/security/sunglasses/read_only id = /obj/item/card/id/security l_pocket = /obj/item/laser_pointer r_pocket = /obj/item/flash diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm index b0ad5a23b1d..bd66901c4ab 100644 --- a/code/game/machinery/computer/arcade.dm +++ b/code/game/machinery/computer/arcade.dm @@ -998,7 +998,7 @@ to_chat(user, "You flip the switch on the underside of [src].") active = 1 visible_message("[src] softly beeps and whirs to life!") - playsound(src.loc, 'sound/machines/defib_SaftyOn.ogg', 25, 1) + playsound(src.loc, 'sound/machines/defib_saftyOn.ogg', 25, 1) atom_say("This is ship ID #[rand(1,1000)] to Orion Port Authority. We're coming in for landing, over.") sleep(20) visible_message("[src] begins to vibrate...") diff --git a/code/game/machinery/dance_machine.dm b/code/game/machinery/dance_machine.dm index 2bcf604e980..a71081f0be1 100644 --- a/code/game/machinery/dance_machine.dm +++ b/code/game/machinery/dance_machine.dm @@ -148,7 +148,7 @@ selection = available[selected] updateUsrDialog() if("horn") - deejay('sound/items/airhorn2.ogg') + deejay('sound/items/Airhorn2.ogg') if("alert") deejay('sound/misc/notice1.ogg') if("siren") diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index 6f838319040..adf22a06850 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -1,7 +1,7 @@ /obj/machinery/door name = "door" desc = "It opens and closes." - icon = 'icons/obj/doors/Doorint.dmi' + icon = 'icons/obj/doors/doorint.dmi' icon_state = "door1" anchored = TRUE opacity = 1 diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm index 3770a311ed0..48561914a16 100644 --- a/code/game/machinery/doors/firedoor.dm +++ b/code/game/machinery/doors/firedoor.dm @@ -80,7 +80,7 @@ else if(glass) user.visible_message("[user] bangs on \the [src].", "You bang on \the [src].") - playsound(get_turf(src), 'sound/effects/Glassknock.ogg', 10, 1) + playsound(get_turf(src), 'sound/effects/glassknock.ogg', 10, 1) /obj/machinery/door/firedoor/attackby(obj/item/C, mob/user, params) add_fingerprint(user) diff --git a/code/game/mecha/equipment/weapons/weapons.dm b/code/game/mecha/equipment/weapons/weapons.dm index 011b2c6fab8..f5fdecea3f6 100644 --- a/code/game/mecha/equipment/weapons/weapons.dm +++ b/code/game/mecha/equipment/weapons/weapons.dm @@ -516,7 +516,7 @@ energy_drain = 30 origin_tech = "materials=3;plasmatech=4;engineering=3" projectile = /obj/item/projectile/plasma/adv/mech - fire_sound = 'sound/weapons/laser.ogg' + fire_sound = 'sound/weapons/Laser.ogg' /obj/item/mecha_parts/mecha_equipment/weapon/energy/plasma/can_attach(obj/mecha/M as obj) if(istype(M, /obj/mecha/working)) diff --git a/code/game/objects/items/weapons/clown_items.dm b/code/game/objects/items/weapons/clown_items.dm index 1143954faef..4573545f969 100644 --- a/code/game/objects/items/weapons/clown_items.dm +++ b/code/game/objects/items/weapons/clown_items.dm @@ -32,7 +32,7 @@ desc = "Damn son, where'd you find this?" icon_state = "air_horn" origin_tech = "materials=4;engineering=4" - honk_sounds = list('sound/items/airhorn2.ogg' = 1) + honk_sounds = list('sound/items/Airhorn2.ogg' = 1) /obj/item/bikehorn/golden name = "golden bike horn" diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm index 03fca152fa9..663b3cbf160 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm @@ -245,6 +245,7 @@ new /obj/item/restraints/handcuffs(src) new /obj/item/melee/baton/loaded(src) new /obj/item/clothing/glasses/sunglasses(src) + new /obj/item/clothing/glasses/hud/security/sunglasses/read_only(src) new /obj/item/clothing/glasses/hud/health/health_advanced new /obj/item/clothing/head/beret/centcom/officer(src) new /obj/item/clothing/head/beret/centcom/officer/navy(src) diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index 28114f46a8c..25314db064c 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -174,7 +174,7 @@ var/global/wcCommon = pick(list("#379963", "#0d8395", "#58b5c3", "#49e46e", "#8f user.changeNext_move(CLICK_CD_MELEE) user.visible_message("Something knocks on [src].") add_fingerprint(user) - playsound(src, 'sound/effects/Glassknock.ogg', 50, 1) + playsound(src, 'sound/effects/glassknock.ogg', 50, 1) /obj/structure/window/attack_hulk(mob/living/carbon/human/user, does_attack_animation = 0) if(!can_be_reached(user)) diff --git a/code/modules/clothing/glasses/hud.dm b/code/modules/clothing/glasses/hud.dm index ff8de1a6a82..fb4f3736d6c 100644 --- a/code/modules/clothing/glasses/hud.dm +++ b/code/modules/clothing/glasses/hud.dm @@ -83,6 +83,7 @@ origin_tech = "magnets=3;combat=2" var/global/list/jobs[0] HUDType = DATA_HUD_SECURITY_ADVANCED + var/read_only = FALSE species_fit = list("Vox") sprite_sheets = list( "Vox" = 'icons/mob/species/vox/eyes.dmi', @@ -114,6 +115,9 @@ invis_view = SEE_INVISIBLE_MINIMUM //don't render darkness while wearing these prescription_upgradable = 0 +/obj/item/clothing/glasses/hud/security/sunglasses/read_only + read_only = TRUE + /obj/item/clothing/glasses/hud/security/sunglasses name = "HUDSunglasses" desc = "Sunglasses with a HUD." diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index be2b3506e67..03726353022 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -363,8 +363,8 @@ for(var/datum/data/record/R in data_core.security) if(R.fields["id"] == E.fields["id"]) criminal = R.fields["criminal"] - - msg += "Criminal status: \[[criminal]\]\n" + var/criminal_status = hasHUD(user, "read_only_security") ? "\[[criminal]\]" : "\[[criminal]\]" + msg += "Criminal status: [criminal_status]\n" msg += "Security records: \[View\] \[Add comment\]\n" if(hasHUD(user,"medical")) @@ -408,7 +408,12 @@ var/obj/item/organ/internal/cyberimp/eyes/hud/CIH = H.get_int_organ(/obj/item/organ/internal/cyberimp/eyes/hud) switch(hudtype) if("security") - return istype(H.glasses, /obj/item/clothing/glasses/hud/security) || istype(H.glasses, /obj/item/clothing/glasses/hud/security/sunglasses) || istype(CIH,/obj/item/organ/internal/cyberimp/eyes/hud/security) + return istype(H.glasses, /obj/item/clothing/glasses/hud/security) || istype(CIH,/obj/item/organ/internal/cyberimp/eyes/hud/security) + if("read_only_security") + var/obj/item/clothing/glasses/hud/security/S + if(istype(H.glasses, /obj/item/clothing/glasses/hud/security)) + S = H.glasses + return !istype(CIH,/obj/item/organ/internal/cyberimp/eyes/hud/security) && S && S.read_only if("medical") return istype(H.glasses, /obj/item/clothing/glasses/hud/health) || istype(H.glasses, /obj/item/clothing/glasses/hud/health/health_advanced) || istype(CIH,/obj/item/organ/internal/cyberimp/eyes/hud/medical) else diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index a6400142086..2f9ad47399b 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -656,7 +656,21 @@ var/list/ai_verbs_default = list( return if(href_list["ai_take_control"]) //Mech domination + var/obj/mecha/M = locate(href_list["ai_take_control"]) + + if(!M) + return + + var/mech_has_controlbeacon = FALSE + for(var/obj/item/mecha_parts/mecha_tracking/ai_control/A in M.trackers) + mech_has_controlbeacon = TRUE + break + if(!can_dominate_mechs && !mech_has_controlbeacon) + message_admins("Warning: possible href exploit by [key_name(usr)] - attempted control of a mecha without can_dominate_mechs or a control beacon in the mech.") + log_debug("Warning: possible href exploit by [key_name(usr)] - attempted control of a mecha without can_dominate_mechs or a control beacon in the mech.") + return + if(controlled_mech) to_chat(src, "You are already loaded into an onboard computer!") return @@ -670,7 +684,7 @@ var/list/ai_verbs_default = list( to_chat(src, "You aren't in your core!") return if(M) - M.transfer_ai(AI_MECH_HACK,src, usr) //Called om the mech itself. + M.transfer_ai(AI_MECH_HACK, src, usr) //Called om the mech itself. else if(href_list["faketrack"]) var/mob/target = locate(href_list["track"]) in GLOB.mob_list diff --git a/code/modules/mob/living/silicon/pai/recruit.dm b/code/modules/mob/living/silicon/pai/recruit.dm index 1797fc8b4bd..c834aa3c382 100644 --- a/code/modules/mob/living/silicon/pai/recruit.dm +++ b/code/modules/mob/living/silicon/pai/recruit.dm @@ -23,18 +23,33 @@ var/datum/paiController/paiController // Global handler for pAI candidates var/askDelay = 10 * 60 * 1 // One minute [ms * sec * min] /datum/paiController/Topic(href, href_list[]) + + var/datum/paiCandidate/candidate = locateUID(href_list["candidate"]) + + if(candidate) + if(!istype(candidate)) + message_admins("Warning: possible href exploit by [key_name(usr)] (paiController/Topic, candidate is not a pAI)") + log_debug("Warning: possible href exploit by [key_name(usr)] (paiController/Topic, candidate is not a pAI)") + return + + if(candidate.key && usr.key && candidate.key != usr.key) + message_admins("Warning: possible href exploit by [key_name(usr)] (paiController/Topic, candidate and usr are different mobs)") + log_debug("Warning: possible href exploit by [key_name(usr)] (paiController/Topic, candidate and usr are different mobs)") + return + if("signup" in href_list) var/mob/dead/observer/O = locate(href_list["signup"]) - if(!O) return + if(!O) + return if(!(O in GLOB.respawnable_list)) to_chat(O, "You've given up your ability to respawn!") return - if(!check_recruit(O)) return + if(!check_recruit(O)) + return recruitWindow(O) return if(href_list["download"]) - var/datum/paiCandidate/candidate = locate(href_list["candidate"]) var/obj/item/paicard/card = locate(href_list["device"]) if(card.pai) return @@ -59,7 +74,6 @@ var/datum/paiController/paiController // Global handler for pAI candidates usr << browse(null, "window=findPai") if(href_list["new"]) - var/datum/paiCandidate/candidate = locate(href_list["candidate"]) var/option = href_list["option"] var/t = "" @@ -183,28 +197,28 @@ var/datum/paiController/paiController // Global handler for pAI candidates - + - + - + - + @@ -215,17 +229,17 @@ var/datum/paiController/paiController // Global handler for pAI candidates
Name:Name: [candidate.name] 
What you plan to call yourself. Suggestions: Any character name you would choose for a station character OR an AI.
Description:Description: [candidate.description] 
What sort of pAI you typically play; your mannerisms, your quirks, etc. This can be as sparse or as detailed as you like.
Preferred Role:Preferred Role: [candidate.role] 
Do you like to partner with sneaky social ninjas? Like to help security hunt down thugs? Enjoy watching an engineer's back while he saves the station yet again? This doesn't have to be limited to just station jobs. Pretty much any general descriptor for what you'd like to be doing works here.
OOC Comments:OOC Comments: [candidate.comments] 
- Save Personality + Save Personality
- Load Personality + Load Personality

- +
Submit PersonalitySubmit Personality

@@ -336,7 +350,7 @@ var/datum/paiController/paiController // Global handler for pAI candidates -
Download [c.name] + Download [c.name]

diff --git a/code/modules/mob/living/simple_animal/bot/ed209bot.dm b/code/modules/mob/living/simple_animal/bot/ed209bot.dm index 5969d7a6d40..0e7ba61d1f2 100644 --- a/code/modules/mob/living/simple_animal/bot/ed209bot.dm +++ b/code/modules/mob/living/simple_animal/bot/ed209bot.dm @@ -412,7 +412,7 @@ ..() /mob/living/simple_animal/bot/ed209/proc/set_weapon() //used to update the projectile type and firing sound - shoot_sound = 'sound/weapons/laser.ogg' + shoot_sound = 'sound/weapons/Laser.ogg' if(emagged == 2) if(lasercolor) projectile = /obj/item/projectile/beam/disabler diff --git a/code/modules/mob/living/simple_animal/hostile/pirate.dm b/code/modules/mob/living/simple_animal/hostile/pirate.dm index 108daa031df..cab8dc8fcde 100644 --- a/code/modules/mob/living/simple_animal/hostile/pirate.dm +++ b/code/modules/mob/living/simple_animal/hostile/pirate.dm @@ -34,7 +34,7 @@ icon_state = "pirateranged" icon_living = "pirateranged" icon_dead = "piratemelee_dead" - projectilesound = 'sound/weapons/laser.ogg' + projectilesound = 'sound/weapons/Laser.ogg' ranged = 1 rapid = 1 retreat_distance = 5 diff --git a/code/modules/nano/modules/law_manager.dm b/code/modules/nano/modules/law_manager.dm index 04a98aa25a9..a8a8d5e688a 100644 --- a/code/modules/nano/modules/law_manager.dm +++ b/code/modules/nano/modules/law_manager.dm @@ -31,6 +31,11 @@ if(..()) return 1 + if(usr != owner && !check_rights(R_ADMIN)) + message_admins("Warning: possible href exploit by [key_name(usr)] - failed permissions check in nano_module/law_manager/Topic") + log_debug("Warning: possible href exploit by [key_name(usr)] - failed permissions check in nano_module/law_manager/Topic") + return 1 + if(href_list["set_view"]) current_view = text2num(href_list["set_view"]) return 1 diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm index fa010a69e49..c1e24a9badd 100644 --- a/code/modules/projectiles/guns/energy/special.dm +++ b/code/modules/projectiles/guns/energy/special.dm @@ -140,7 +140,7 @@ modifystate = -1 origin_tech = "combat=1;materials=3;magnets=2;plasmatech=3;engineering=1" ammo_type = list(/obj/item/ammo_casing/energy/plasma) - fire_sound = 'sound/weapons/laser.ogg' + fire_sound = 'sound/weapons/Laser.ogg' usesound = 'sound/items/Welder.ogg' toolspeed = 1 container_type = OPENCONTAINER diff --git a/code/modules/projectiles/guns/magic/staff.dm b/code/modules/projectiles/guns/magic/staff.dm index 2ee7edb075a..a8455d45fc5 100644 --- a/code/modules/projectiles/guns/magic/staff.dm +++ b/code/modules/projectiles/guns/magic/staff.dm @@ -60,7 +60,7 @@ item_state = "honker" max_charges = 4 recharge_rate = 8 - fire_sound = 'sound/items/airhorn.ogg' + fire_sound = 'sound/items/Airhorn.ogg' /obj/item/gun/magic/staff/focus name = "mental focus" diff --git a/code/modules/projectiles/guns/projectile/automatic.dm b/code/modules/projectiles/guns/projectile/automatic.dm index f886c5e5e53..ecaf8d801b2 100644 --- a/code/modules/projectiles/guns/projectile/automatic.dm +++ b/code/modules/projectiles/guns/projectile/automatic.dm @@ -22,6 +22,8 @@ /obj/item/gun/projectile/automatic/attackby(var/obj/item/A as obj, mob/user as mob, params) . = ..() if(.) + if(alarmed) // Did the empty clip alarm go off already? + alarmed = 0 // Reset the alarm once a magazine is loaded return if(istype(A, /obj/item/ammo_box/magazine)) var/obj/item/ammo_box/magazine/AM = A @@ -33,6 +35,8 @@ magazine = null else to_chat(user, "You insert the magazine into \the [src].") + if(alarmed) + alarmed = 0 user.remove_from_mob(AM) magazine = AM magazine.loc = src diff --git a/html/changelog.html b/html/changelog.html index 83681d46332..42534cb41a0 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -56,6 +56,20 @@ -->
+

12 December 2018

+

Kyep updated:

+ +

Tayyyyyyy updated:

+ +

name here updated:

+ +

11 December 2018

Alonefromhell updated: