diff --git a/code/WorkInProgress/Sigyn/Department Sec/jobs.dm b/code/WorkInProgress/Sigyn/Department Sec/jobs.dm index d658c51c..6b25abdc 100644 --- a/code/WorkInProgress/Sigyn/Department Sec/jobs.dm +++ b/code/WorkInProgress/Sigyn/Department Sec/jobs.dm @@ -111,16 +111,16 @@ proc/assign_sec_to_department(var/mob/living/carbon/human/H) /obj/item/clothing/under/rank/security/cargo/New() var/obj/item/clothing/tie/armband/cargo/A = new /obj/item/clothing/tie/armband/cargo - hastie = A + aband = A /obj/item/clothing/under/rank/security/engine/New() var/obj/item/clothing/tie/armband/engine/A = new /obj/item/clothing/tie/armband/engine - hastie = A + aband = A /obj/item/clothing/under/rank/security/science/New() var/obj/item/clothing/tie/armband/science/A = new /obj/item/clothing/tie/armband/science - hastie = A + aband = A /obj/item/clothing/under/rank/security/med/New() var/obj/item/clothing/tie/armband/medgreen/A = new /obj/item/clothing/tie/armband/medgreen - hastie = A \ No newline at end of file + aband = A \ No newline at end of file diff --git a/code/controllers/verbs.dm b/code/controllers/verbs.dm index ed055334..e0dbd4b2 100644 --- a/code/controllers/verbs.dm +++ b/code/controllers/verbs.dm @@ -49,7 +49,7 @@ msg_scopes("Admin [key_name_admin(usr)] has restarted the [controller] controller.") return -/client/proc/debug_controller(controller in list("Master","Failsafe","Ticker","Lighting","Air","Jobs","Sun","Radio","Supply","Shuttles","Emergency Shuttle","Configuration","pAI", "Cameras", "Transfer Controller", "Gas Data", "Delta Level")) +/client/proc/debug_controller(controller in list("Master","Failsafe","Ticker","Lighting","Air","Jobs","Sun","Radio","Supply","Shuttles","Emergency Shuttle","Configuration","pAI", "Cameras", "Transfer Controller", "Gas Data", "Delta Level", "NanoUI")) set category = "Debug" set name = "Debug Controller" set desc = "Debug the various periodic loop controllers for the game (be careful!)" @@ -107,5 +107,9 @@ if("Gas Data") debug_variables(gas_data) feedback_add_details("admin_verv","DGasdata") + if("NanoUI") + debug_variables(nanomanager) + feedback_add_details("admin_verv","DNanoUI") + message_admins("Admin [key_name_admin(usr)] is debugging the [controller] controller.") return diff --git a/code/game/objects/items/weapons/cigs_lighters.dm b/code/game/objects/items/weapons/cigs_lighters.dm index 164197d5..110a94b7 100644 --- a/code/game/objects/items/weapons/cigs_lighters.dm +++ b/code/game/objects/items/weapons/cigs_lighters.dm @@ -92,7 +92,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM else if(istype(W, /obj/item/weapon/lighter/zippo)) var/obj/item/weapon/lighter/zippo/Z = W if(Z.lit) - light("With a flick of their wrist, [user] lights their [name] with their [W].") + light("With a flick of their wrist, [user] lights [name] with [W].") else if(istype(W, /obj/item/weapon/lighter)) var/obj/item/weapon/lighter/L = W @@ -102,7 +102,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM else if(istype(W, /obj/item/weapon/match)) var/obj/item/weapon/match/M = W if(M.lit) - light("[user] lights their [name] with their [W].") + light("[user] lights their [name] with [W].") else if(istype(W, /obj/item/weapon/melee/energy/sword)) var/obj/item/weapon/melee/energy/sword/S = W diff --git a/code/game/objects/items/weapons/explosives.dm b/code/game/objects/items/weapons/explosives.dm index cd7e9394..ffc6d8ac 100644 --- a/code/game/objects/items/weapons/explosives.dm +++ b/code/game/objects/items/weapons/explosives.dm @@ -50,8 +50,8 @@ log_str += " Last touched by: [src.fingerprintslast][last_touch_info]" bombers += log_str - message_admins("C4 Explosion: Last touched by: [src.fingerprintslast][last_touch_info]([user.ckey])(JMP)") - message_admins("C4 Explosion: Last touched by: [src.fingerprintslast][last_touch_info]([user.ckey])(JMP)") + message_admins("C4 Explosion: Last touched by: [src.fingerprintslast][last_touch_info]([user.ckey])(JMP)") + message_mods("C4 Explosion: Last touched by: [src.fingerprintslast][last_touch_info]([user.ckey])(JMP)") explosion(location, -1, -1, 2, 3) if (istype(target, /turf/simulated/wall)) target:dismantle_wall(1) diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index d3ebf9d8..11d00ff2 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -13,6 +13,7 @@ var/health = 100 var/lastbang var/storage_capacity = 30 //This is so that someone can't pack hundreds of items in a locker/crate + var/mob_capacity = 2 //then open it in a populated area to crash clients. /obj/structure/closet/New() @@ -80,6 +81,7 @@ return 0 var/itemcount = 0 + var/mobcount = 0 //Cham Projector Exception for(var/obj/effect/dummy/chameleon/AD in src.loc) @@ -103,6 +105,11 @@ if(M.buckled || M.pinned.len) continue + if(istype(M, /mob/living/carbon/human)) + if(mobcount >= mob_capacity) + continue + mobcount++ + if(M.client) M.client.perspective = EYE_PERSPECTIVE M.client.eye = src diff --git a/code/modules/admin/admin_memo.dm b/code/modules/admin/admin_memo.dm index 133f6d10..84c502ba 100644 --- a/code/modules/admin/admin_memo.dm +++ b/code/modules/admin/admin_memo.dm @@ -1,9 +1,10 @@ #define MEMOFILE "data/memo.sav" //where the memos are saved +#define PLAYERMEMOFILE "data/pmemo.sav" //where the player memos are saved #define ENABLE_MEMOS 1 //using a define because screw making a config variable for it. This is more efficient and purty. //switch verb so we don't spam up the verb lists with like, 3 verbs for this feature. /client/proc/admin_memo(task in list("write","show","delete")) - set name = "Memo" + set name = "Admin Memo" set category = "Server" if(!ENABLE_MEMOS) return if(!check_rights(0)) return @@ -50,5 +51,62 @@ F.dir.Remove(ckey) src << "Removed Memo created by [ckey]." +//switch verb so we don't spam up the verb lists with like, 3 verbs for this feature. +/client/verb/memo_player() + set name = "Player Memo" + set category = "OOC" + if(!ENABLE_MEMOS) return + admin_memo_player_show() + +/client/proc/admin_memo_player(task in list("write","show","delete")) + set name = "Player Memo" + set category = "Server" + + if(!ENABLE_MEMOS) return + if(!check_rights(0)) return + switch(task) + if("write") admin_memo_player_write() + if("show") admin_memo_player_show() + if("delete") admin_memo_player_delete() + +//write a message +/client/proc/admin_memo_player_write() + var/savefile/F = new(PLAYERMEMOFILE) + if(F) + var/memo = input(src,"Type your memo\n(Leaving it blank will delete your current memo):","Write Memo",null) as null|message + switch(memo) + if(null) + return + if("") + F.dir.Remove(ckey) + src << "Memo removed" + return + if( findtext(memo,"[memo]" + message_admins("[key] set an player memo:
[memo]") + +//show all memos +/client/proc/admin_memo_player_show() + if(ENABLE_MEMOS) + var/savefile/F = new(PLAYERMEMOFILE) + if(F) + for(var/ckey in F.dir) + src << "
Player Memo by [F[ckey]]
" + +//delete your own or somebody else's memo +/client/proc/admin_memo_player_delete() + var/savefile/F = new(PLAYERMEMOFILE) + if(F) + var/ckey + if(check_rights(R_SERVER,0)) //high ranking admins can delete other admin's memos + ckey = input(src,"Whose memo shall we remove?","Remove Memo",null) as null|anything in F.dir + else + ckey = src.ckey + if(ckey) + F.dir.Remove(ckey) + src << "Removed Memo created by [ckey]." + #undef MEMOFILE +#undef PLAYERMEMOFILE #undef ENABLE_MEMOS \ No newline at end of file diff --git a/code/modules/admin/permissionverbs/permsission lists.dm b/code/modules/admin/permissionverbs/permsission lists.dm index 49001093..47cfc4d9 100644 --- a/code/modules/admin/permissionverbs/permsission lists.dm +++ b/code/modules/admin/permissionverbs/permsission lists.dm @@ -31,6 +31,7 @@ var/list/admin_verbs_admin = list( /client/proc/admin_cancel_shuttle, /*allows us to cancel the emergency shuttle, sending it back to centcomm*/ /client/proc/admin_ghost, /*allows us to ghost/reenter body at will*/ /client/proc/admin_memo, /*admin memo system. show/delete/write. +SERVER needed to delete admin memos of others*/ + /client/proc/admin_memo_player, /client/proc/alertlevels, /client/proc/allow_character_respawn, /* Allows a ghost to respawn */ /client/proc/check_ai_laws, /*shows AI and borg laws*/ diff --git a/code/modules/admin/verbs/adminsay.dm b/code/modules/admin/verbs/adminsay.dm index f8a4b746..11dea6eb 100644 --- a/code/modules/admin/verbs/adminsay.dm +++ b/code/modules/admin/verbs/adminsay.dm @@ -7,7 +7,7 @@ msg = copytext(sanitize(msg), 1, MAX_MESSAGE_LEN) if(!msg) return - log_admin("[key_name(src)] : [msg]") + log_admin("ASAY: [key_name(src)] : [msg]") if(check_rights(R_ADMIN,0)) msg = "ADMIN: [key_name(usr, 1)] (JMP): [msg]" @@ -46,7 +46,7 @@ msg = copytext(sanitize(msg), 1, MAX_MESSAGE_LEN) if(!msg) return - log_admin("[key_name(src)] : [msg]") + log_admin("DEV: [key_name(src)] : [msg]") if(check_rights(R_DEV,0)) msg = "DEV: [key_name(usr, 0, 1, 0)]: [msg]" @@ -64,7 +64,7 @@ msg = copytext(sanitize(msg), 1, MAX_MESSAGE_LEN) if(!msg) return - log_admin("[key_name(src)] : [msg]") + log_admin("DOSAY: [key_name(src)] : [msg]") if(check_rights(R_DUTYOFF,0)) msg = "DOfficer: [key_name(usr, 0, 1, 0)]: [msg]" diff --git a/code/modules/admin/verbs/deadsay.dm b/code/modules/admin/verbs/deadsay.dm index 83a7420c..02519121 100644 --- a/code/modules/admin/verbs/deadsay.dm +++ b/code/modules/admin/verbs/deadsay.dm @@ -30,7 +30,7 @@ stafftype = "EVENT" msg = copytext(sanitize(msg), 1, MAX_MESSAGE_LEN) - log_admin("[key_name(src)] : [msg]") + log_admin("DSAY: [key_name(src)] : [msg]") if (!msg) return @@ -41,7 +41,12 @@ if (istype(M, /mob/new_player)) continue + if(!M.client) + continue + if(M.client && M.client.holder && (M.client.prefs.toggles & CHAT_DEAD)) // show the message to admins who have deadchat toggled on + if((M.client.holder.rights & R_DUTYOFF) && !(M.client.holder.rights & (R_ADMIN|R_MOD|R_DEV|R_FUN))) + continue M.show_message(rendered, 2) else if(M.stat == DEAD && (M.client.prefs.toggles & CHAT_DEAD)) // show the message to regular ghosts who have deadchat toggled on diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index e4effdd9..78bcab82 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -773,7 +773,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that W.icon_state = "centcom" W.item_state = "id_inv" W.access = get_all_accesses() - W.access += list("VIP Guest","Custodian","Thunderdome Overseer","Intel Officer","Medical Officer","Death Commando","Research Officer") + W.access += get_all_centcom_access() W.assignment = "NanoTrasen Navy Representative" W.registered_name = M.real_name M.equip_if_possible(W, slot_wear_id) diff --git a/code/modules/client/client procs.dm b/code/modules/client/client procs.dm index c761ead0..693fb45d 100644 --- a/code/modules/client/client procs.dm +++ b/code/modules/client/client procs.dm @@ -151,6 +151,7 @@ host = key world.update_status() + admin_memo_player_show() if(holder) add_admin_verbs() admin_memo_show() diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 4cf8b31d..4210264c 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -592,6 +592,11 @@ proc/get_damage_icon_part(damage_state, body_part) if(!tie_color) tie_color = w_uniform:hastie.icon_state standing.overlays += image("icon" = 'icons/mob/ties.dmi', "icon_state" = "[tie_color]") + if(w_uniform:aband) //SAME THING AS ABOVE, WHY AM I TYPING LIKE THIS, BECAUSE ABOVE + var/aband_color = w_uniform:aband.item_color + if(!aband_color) aband_color = w_uniform:aband.icon_state + standing.overlays += image("icon" = 'icons/mob/ties.dmi', "icon_state" = "[aband_color]") + overlays_standing[UNIFORM_LAYER] = standing else overlays_standing[UNIFORM_LAYER] = null diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm index 29d74192..240740c6 100644 --- a/code/modules/mob/living/simple_animal/friendly/cat.dm +++ b/code/modules/mob/living/simple_animal/friendly/cat.dm @@ -18,6 +18,7 @@ response_harm = "kicks the" var/turns_since_scan = 0 var/mob/living/simple_animal/mouse/movement_target + var/ai_active = 1 min_oxy = 16 //Require atleast 16kPA oxygen minbodytemp = 223 //Below -50 Degrees Celcius maxbodytemp = 323 //Above 50 Degrees Celcius @@ -25,15 +26,16 @@ /mob/living/simple_animal/cat/Life() //MICE! - if((src.loc) && isturf(src.loc)) - if(!stat && !resting && !buckled) - for(var/mob/living/simple_animal/mouse/M in view(1,src)) - if(!M.stat) - M.splat() - emote(pick("\red splats the [M]!","\red toys with the [M]","worries the [M]")) - movement_target = null - stop_automated_movement = 0 - break + if(ai_active) + if((src.loc) && isturf(src.loc)) + if(!stat && !resting && !buckled) + for(var/mob/living/simple_animal/mouse/M in view(1,src)) + if(!M.stat) + M.splat() + emote(pick("\red splats the [M]!","\red toys with the [M]","worries the [M]")) + movement_target = null + stop_automated_movement = 0 + break ..() @@ -42,7 +44,7 @@ emote(pick("hisses and spits!","mrowls fiercely!","eyes [snack] hungrily.")) break - if(!stat && !resting && !buckled) + if(ai_active && !stat && !resting && !buckled) turns_since_scan++ if(turns_since_scan > 5) walk_to(src,0) @@ -86,4 +88,4 @@ icon_state = "kitten" icon_living = "kitten" icon_dead = "kitten_dead" - gender = NEUTER \ No newline at end of file + gender = NEUTER diff --git a/code/modules/projectiles/guns/energy/erifles.dm b/code/modules/projectiles/guns/energy/erifles.dm index 4d12c857..1ef01d0d 100644 --- a/code/modules/projectiles/guns/energy/erifles.dm +++ b/code/modules/projectiles/guns/energy/erifles.dm @@ -142,6 +142,15 @@ Commenting out right now, due to a lack of sprites existing. I hate on-mob weapo user.client.view = world.view ..() +/obj/item/weapon/gun/energy/rifle/sniperrifle/ready_to_fire() + if(!zoom) + return 0 + if(world.time >= last_fired + fire_delay) + last_fired = world.time + return 1 + else + return 0 + ///obj/item/weapon/gun/energy/rifle/sniperrifle/update_icon() //Currently only here to fuck with the on-mob icons. // icon_state = "sniper[wielded]" // return diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm index 481dc879..fc9cdff1 100644 --- a/code/modules/recycling/disposal.dm +++ b/code/modules/recycling/disposal.dm @@ -499,6 +499,7 @@ var/destinationTag = "" // changes if contains a delivery container var/tomail = 0 //changes if contains wrapped package var/hasmob = 0 //If it contains a mob + var/contained_mobs = list() var/partialTag = "" //set by a partial tagger the first time round, then put in destinationTag if it goes through again. @@ -512,6 +513,7 @@ for(var/mob/living/M in D) if(M && M.stat != 2 && !istype(M,/mob/living/silicon/robot/drone)) hasmob = 1 + contained_mobs += M //Checks 1 contents level deep. This means that players can be sent through disposals... //...but it should require a second person to open the package. (i.e. person inside a wrapped locker) @@ -520,6 +522,7 @@ for(var/mob/living/M in O.contents) if(M && M.stat != 2 && !istype(M,/mob/living/silicon/robot/drone)) hasmob = 1 + contained_mobs += M // now everything inside the disposal gets put into the holder // note AM since can contain mobs or objs @@ -561,7 +564,7 @@ var/obj/structure/disposalpipe/last while(active) if(hasmob && prob(3)) - for(var/mob/living/H in src) + for(var/mob/living/H in contained_mobs) if(!istype(H,/mob/living/silicon/robot/drone)) //Drones use the mailing code to move through the disposal system, H.take_overall_damage(20, 0, "Blunt Trauma")//horribly maim any living creature jumping down disposals. c'est la vie