diff --git a/SQL/aurora_schema.sql b/SQL/aurora_schema.sql index 8c6d58a2..1b46c8b4 100644 --- a/SQL/aurora_schema.sql +++ b/SQL/aurora_schema.sql @@ -49,7 +49,11 @@ CREATE TABLE `ss13_warnings` ( `ip` VARCHAR(32) NOT NULL, `a_ckey` VARCHAR(32) NOT NULL, `acknowledged` TINYINT(1) NULL DEFAULT '0', - `visible` TINYINT(1) NULL DEFAULT '1'; + `expired` TINYINT(1) NULL DEFAULT '0', + `visible` TINYINT(1) NULL DEFAULT '1', + `edited` TINYINT(1) NULL DEFAULT '0', + `lasteditor` VARCHAR(32) NULL DEFAULT NULL, + `lasteditdate` DATETIME NULL DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=INNODB DEFAULT CHARSET=LATIN1; diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm index 3bc648ad..f8f88329 100644 --- a/code/__HELPERS/global_lists.dm +++ b/code/__HELPERS/global_lists.dm @@ -43,7 +43,7 @@ var/global/list/underwear_f = list("Red", "White", "Yellow", "Blue", "Black", "T //undershirt var/global/list/undershirt_t = list("Black Tank top", "White Tank top", "Black shirt", "White shirt", "Blue Tank top", "Rainbow Tank top", "Happy Tank top", "Neutral Tank top", "Sad Tank top", "Sunny Tank top", "Red Tank top", "Telnyashka Tank top", "Telnyashka shirt", "Space Station shirt", "Ian shirt", "None") //Backpacks -var/global/list/backbaglist = list("Nothing", "Backpack", "Satchel", "Satchel Alt") +var/global/list/backbaglist = list("Nothing", "Backpack", "Satchel", "Satchel Alt", "Duffel Bag") ////////////////////////// /////Initial Building///// @@ -100,7 +100,7 @@ var/global/list/backbaglist = list("Nothing", "Backpack", "Satchel", "Satchel Al for(var/T in paths) var/datum/language/L = new T all_languages[L.name] = L - + for (var/language_name in all_languages) var/datum/language/L = all_languages[language_name] language_keys[":[lowertext(L.key)]"] = L diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm index 379fc577..097e2d77 100644 --- a/code/game/gamemodes/nuclear/nuclear.dm +++ b/code/game/gamemodes/nuclear/nuclear.dm @@ -227,9 +227,10 @@ synd_mob.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(synd_mob), slot_shoes) synd_mob.equip_to_slot_or_del(new /obj/item/clothing/gloves/swat(synd_mob), slot_gloves) synd_mob.equip_to_slot_or_del(new /obj/item/weapon/card/id/syndicate(synd_mob), slot_wear_id) - if(synd_mob.backbag == 2) synd_mob.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(synd_mob), slot_back) - if(synd_mob.backbag == 3) synd_mob.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_norm(synd_mob), slot_back) + if(synd_mob.backbag == 2) synd_mob.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/syndie(synd_mob), slot_back) + if(synd_mob.backbag == 3) synd_mob.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/syndie(synd_mob), slot_back) if(synd_mob.backbag == 4) synd_mob.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(synd_mob), slot_back) + if(synd_mob.backbag == 5) synd_mob.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/duffel/syndie(synd_mob), slot_back) synd_mob.equip_to_slot_or_del(new /obj/item/ammo_magazine/a12mm(synd_mob), slot_in_backpack) synd_mob.equip_to_slot_or_del(new /obj/item/ammo_magazine/a12mm(synd_mob), slot_in_backpack) synd_mob.equip_to_slot_or_del(new /obj/item/weapon/reagent_containers/pill/cyanide(synd_mob), slot_in_backpack) diff --git a/code/game/gamemodes/wizard/wizard.dm b/code/game/gamemodes/wizard/wizard.dm index 30989912..7463ace1 100644 --- a/code/game/gamemodes/wizard/wizard.dm +++ b/code/game/gamemodes/wizard/wizard.dm @@ -173,9 +173,10 @@ wizard_mob.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(wizard_mob), slot_shoes) wizard_mob.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe(wizard_mob), slot_wear_suit) wizard_mob.equip_to_slot_or_del(new /obj/item/clothing/head/wizard(wizard_mob), slot_head) - if(wizard_mob.backbag == 2) wizard_mob.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(wizard_mob), slot_back) - if(wizard_mob.backbag == 3) wizard_mob.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_norm(wizard_mob), slot_back) + if(wizard_mob.backbag == 2) wizard_mob.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/wizard(wizard_mob), slot_back) + if(wizard_mob.backbag == 3) wizard_mob.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/wizard(wizard_mob), slot_back) if(wizard_mob.backbag == 4) wizard_mob.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(wizard_mob), slot_back) + if(wizard_mob.backbag == 5) wizard_mob.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/duffel/wizard(wizard_mob), slot_back) wizard_mob.equip_to_slot_or_del(new /obj/item/weapon/storage/box(wizard_mob), slot_in_backpack) // wizard_mob.equip_to_slot_or_del(new /obj/item/weapon/scrying_gem(wizard_mob), slot_l_store) For scrying gem. wizard_mob.equip_to_slot_or_del(new /obj/item/weapon/teleportation_scroll(wizard_mob), slot_r_store) diff --git a/code/game/jobs/job/captain.dm b/code/game/jobs/job/captain.dm index 21770e51..5c020c73 100644 --- a/code/game/jobs/job/captain.dm +++ b/code/game/jobs/job/captain.dm @@ -19,6 +19,7 @@ if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/captain(H), slot_back) if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_cap(H), slot_back) if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back) + if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/duffel/cap(H), slot_back) H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack) var/obj/item/clothing/under/U = new /obj/item/clothing/under/rank/captain(H) if(H.age>49) @@ -79,6 +80,7 @@ if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back) if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_norm(H), slot_back) if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back) + if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/duffel(H), slot_back) H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack) H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/head_of_personnel(H), slot_w_uniform) H.equip_to_slot_or_del(new /obj/item/clothing/shoes/brown(H), slot_shoes) diff --git a/code/game/jobs/job/civilian.dm b/code/game/jobs/job/civilian.dm index 50df6335..3c8f8de0 100644 --- a/code/game/jobs/job/civilian.dm +++ b/code/game/jobs/job/civilian.dm @@ -18,6 +18,7 @@ if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back) if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_norm(H), slot_back) if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back) + if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/duffel(H), slot_back) H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(H), slot_shoes) H.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/vest(H), slot_wear_suit) H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/bartender(H), slot_w_uniform) @@ -97,6 +98,7 @@ if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back) if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_hyd(H), slot_back) if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back) + if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/duffel(H), slot_back) H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack) return 1 @@ -181,6 +183,7 @@ if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/industrial(H), slot_back) if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_eng(H), slot_back) if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back) + if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/duffel(H), slot_back) H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/miner(H), slot_w_uniform) H.equip_to_slot_or_del(new /obj/item/device/pda/shaftminer(H), slot_belt) H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(H), slot_shoes) @@ -348,6 +351,7 @@ if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back) if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_norm(H), slot_back) if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back) + if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/duffel(H), slot_back) H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/internalaffairs(H), slot_w_uniform) H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/internalaffairs(H), slot_wear_suit) H.equip_to_slot_or_del(new /obj/item/clothing/shoes/brown(H), slot_shoes) diff --git a/code/game/jobs/job/engineering.dm b/code/game/jobs/job/engineering.dm index 6043165c..5c0065dd 100644 --- a/code/game/jobs/job/engineering.dm +++ b/code/game/jobs/job/engineering.dm @@ -27,6 +27,7 @@ if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/industrial(H), slot_back) if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_eng(H), slot_back) if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back) + if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/duffel/eng(H), slot_back) H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/chief_engineer(H), slot_w_uniform) H.equip_to_slot_or_del(new /obj/item/device/pda/heads/ce(H), slot_l_store) H.equip_to_slot_or_del(new /obj/item/clothing/shoes/brown(H), slot_shoes) @@ -62,6 +63,7 @@ if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/industrial(H), slot_back) if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_eng(H), slot_back) if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back) + if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/duffel/eng(H), slot_back) H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/engineer(H), slot_w_uniform) H.equip_to_slot_or_del(new /obj/item/clothing/shoes/orange(H), slot_shoes) H.equip_to_slot_or_del(new /obj/item/weapon/storage/belt/utility/full(H), slot_belt) @@ -96,6 +98,7 @@ if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back) if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_norm(H), slot_back) if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back) + if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/duffel(H), slot_back) H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/atmospheric_technician(H), slot_w_uniform) H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(H), slot_shoes) H.equip_to_slot_or_del(new /obj/item/device/pda/atmos(H), slot_l_store) diff --git a/code/game/jobs/job/medical.dm b/code/game/jobs/job/medical.dm index 60cdaa70..f0eeb9b6 100644 --- a/code/game/jobs/job/medical.dm +++ b/code/game/jobs/job/medical.dm @@ -24,6 +24,7 @@ if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/medic(H), slot_back) if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_med(H), slot_back) if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back) + if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/duffel/med(H), slot_back) H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/chief_medical_officer(H), slot_w_uniform) H.equip_to_slot_or_del(new /obj/item/clothing/shoes/brown(H), slot_shoes) H.equip_to_slot_or_del(new /obj/item/device/pda/heads/cmo(H), slot_belt) @@ -56,6 +57,7 @@ if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/medic(H), slot_back) if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_med(H), slot_back) if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back) + if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/duffel/med(H), slot_back) if (H.mind.role_alt_title) switch(H.mind.role_alt_title) if("Surgeon") @@ -117,6 +119,7 @@ if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/emt(H), slot_back) if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/emt(H), slot_back) if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back) + if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/duffel/med(H), slot_back) H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical/emt(H), slot_w_uniform) H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/fr_jacket(H), slot_wear_suit) H.equip_to_slot_or_del(new /obj/item/clothing/shoes/white(H), slot_shoes) @@ -156,6 +159,7 @@ if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back) if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_chem(H), slot_back) if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back) + if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/duffel/chem(H), slot_back) H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack) return 1 @@ -188,6 +192,7 @@ if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back) if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_gen(H), slot_back) if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back) + if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/duffel/gen(H), slot_back) H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack) return 1 @@ -245,6 +250,7 @@ if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/medic(H), slot_back) if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_med(H), slot_back) if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back) + if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/duffel/med(H), slot_back) H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/psychologistuniform(H), slot_w_uniform) H.equip_to_slot_or_del(new /obj/item/device/pda/medical(H), slot_belt) H.equip_to_slot_or_del(new /obj/item/clothing/shoes/white(H), slot_shoes) diff --git a/code/game/jobs/job/science.dm b/code/game/jobs/job/science.dm index 338919ee..93684bcd 100644 --- a/code/game/jobs/job/science.dm +++ b/code/game/jobs/job/science.dm @@ -32,6 +32,7 @@ if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back) if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_tox(H), slot_back) if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back) + if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/duffel/tox(H), slot_back) H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack) return 1 @@ -62,6 +63,7 @@ if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back) if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_tox(H), slot_back) if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back) + if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/duffel/tox(H), slot_back) H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack) return 1 @@ -91,6 +93,7 @@ if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back) if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_tox(H), slot_back) if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back) + if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/duffel/tox(H), slot_back) H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack) return 1 @@ -113,6 +116,7 @@ H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_sci(H), slot_l_ear) if(H.backbag == 2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back) if(H.backbag == 3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_norm(H), slot_back) + if(H.backbag == 5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/duffel(H), slot_back) H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/roboticist(H), slot_w_uniform) H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(H), slot_shoes) H.equip_to_slot_or_del(new /obj/item/device/pda/roboticist(H), slot_belt) diff --git a/code/game/jobs/job/security.dm b/code/game/jobs/job/security.dm index f72d18ea..7e8362de 100644 --- a/code/game/jobs/job/security.dm +++ b/code/game/jobs/job/security.dm @@ -25,6 +25,7 @@ if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/security(H), slot_back) if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_sec(H), slot_back) if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back) + if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/duffel/sec(H), slot_back) H.equip_to_slot_or_del(new /obj/item/device/radio/headset/heads/hos(H), slot_l_ear) H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/head_of_security(H), slot_w_uniform) H.equip_to_slot_or_del(new /obj/item/clothing/shoes/jackboots(H), slot_shoes) @@ -74,6 +75,7 @@ if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/security(H), slot_back) if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_sec(H), slot_back) if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back) + if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/duffel/sec(H), slot_back) H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/warden(H), slot_w_uniform) H.equip_to_slot_or_del(new /obj/item/clothing/shoes/jackboots(H), slot_shoes) H.equip_to_slot_or_del(new /obj/item/device/pda/warden(H), slot_belt) @@ -117,6 +119,7 @@ if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back) if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_norm(H), slot_back) if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back) + if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/duffel(H), slot_back) H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/navy/det(H), slot_w_uniform) H.equip_to_slot_or_del(new /obj/item/clothing/shoes/laceup(H), slot_shoes) H.equip_to_slot_or_del(new /obj/item/device/pda/detective(H), slot_belt) @@ -162,6 +165,7 @@ if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back) if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_norm(H), slot_back) if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back) + if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/duffel(H), slot_back) H.equip_to_slot_or_del(new /obj/item/clothing/under/det/slob(H), slot_w_uniform) H.equip_to_slot_or_del(new /obj/item/clothing/shoes/laceup(H), slot_shoes) H.equip_to_slot_or_del(new /obj/item/device/pda/detective(H), slot_belt) @@ -209,6 +213,7 @@ if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/security(H), slot_back) if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_sec(H), slot_back) if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back) + if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/duffel/sec(H), slot_back) H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/security(H), slot_w_uniform) H.equip_to_slot_or_del(new /obj/item/clothing/shoes/jackboots(H), slot_shoes) H.equip_to_slot_or_del(new /obj/item/device/pda/security(H), slot_belt) diff --git a/code/game/jobs/job_controller.dm b/code/game/jobs/job_controller.dm index 6770c4c5..f4acb6bd 100644 --- a/code/game/jobs/job_controller.dm +++ b/code/game/jobs/job_controller.dm @@ -462,6 +462,10 @@ var/global/datum/controller/occupations/job_master var/obj/item/weapon/storage/backpack/BPK = new/obj/item/weapon/storage/backpack/satchel(H) new /obj/item/weapon/storage/box/survival(BPK) H.equip_to_slot_or_del(BPK, slot_back,1) + if(5) + var/obj/item/weapon/storage/backpack/BPK = new/obj/item/weapon/storage/backpack/duffel(H) + new /obj/item/weapon/storage/box/survival(BPK) + H.equip_to_slot_or_del(BPK, slot_back,1) //Deferred item spawning. if(spawn_in_storage && spawn_in_storage.len) diff --git a/code/game/objects/items/weapons/storage/backpack.dm b/code/game/objects/items/weapons/storage/backpack.dm index c13454c6..b3ede6c4 100644 --- a/code/game/objects/items/weapons/storage/backpack.dm +++ b/code/game/objects/items/weapons/storage/backpack.dm @@ -132,6 +132,16 @@ icon_state = "engiepack" item_state = "engiepack" +/obj/item/weapon/storage/backpack/syndie + name = "syndicate rucksack" + desc = "The latest in carbon fiber and red satin combat rucksack technology. Comfortable and tough!" + icon_state = "syndiepack" + +/obj/item/weapon/storage/backpack/wizard + name = "wizard federation sack" + desc = "Perfect for keeping your shining crystal balls inside of." + icon_state = "wizardpack" + /* * Satchel Types */ @@ -206,6 +216,88 @@ icon_state = "satchel-cap" item_state = "captainpack" +/obj/item/weapon/storage/backpack/satchel/syndie + name = "syndicate satchel" + desc = "A satchel in the new age style of a multi-corperate terrorist organisation." + icon_state = "satchel-syndie" + +/obj/item/weapon/storage/backpack/satchel/wizard + name = "wizard federation satchel" + desc = "This stylish satchel will put a spell on anyone with some fashion sense to spare." + icon_state = "satchel-wizard" + +// Duffel Bags + +/obj/item/weapon/storage/backpack/duffel + name = "duffel bag" + desc = "A spacious duffel bag." + icon_state = "duffel-norm" +// item_state = "duffelbag" // Maybe include a single one size fits all duffel bag icon if we can't sort + // out the 512 icon limit thing? They're all children, so they'd use it. + +/obj/item/weapon/storage/backpack/duffel/cap + name = "captain's duffel bag" + desc = "A rare and special duffel bag for only the most air-headed of Nanotrasen personnel." + icon_state = "duffel-captain" + item_state = "captainpack" + +/obj/item/weapon/storage/backpack/duffel/hyd + name = "botanist's duffel bag" + desc = "A specially designed duffel bag for containing plant matter, regardless of how questionable it may be." + icon_state = "duffel-hydroponics" + +/obj/item/weapon/storage/backpack/duffel/vir + name = "virology duffel bag" + desc = "A sterilized duffel bag suited to those about to unleash pathogenic havoc upon the world." + icon_state = "duffel-virology" + +/obj/item/weapon/storage/backpack/duffel/med + name = "medical duffel bag" + desc = "A sterilized duffel bag for the young, upcoming lesbayan." + icon_state = "duffel-medical" + item_state = "medicalpack" + +/obj/item/weapon/storage/backpack/duffel/eng + name = "industrial duffel bag" + desc = "A rough and tumble duffel bag for the hard working wrench-monkey of tomorrow." + icon_state = "duffel-engineering" + item_state = "engiepack" + +/obj/item/weapon/storage/backpack/duffel/tox + name = "scientist's duffel bag" + desc = "Handy when it comes to storing volatile materials of the anomalous persuasion." + icon_state = "duffel-toxins" + +/obj/item/weapon/storage/backpack/duffel/sec + name = "security duffel bag" + desc = "A grey and blue duffel bag for the boys in colour, with room for all the batons and flashbangs you could ever need." + icon_state = "duffel-security" + item_state = "securitypack" + +/obj/item/weapon/storage/backpack/duffel/gen + name = "genetics duffel bag" + desc = "It sure won't hold your genes together, but it'll keep the denim ones safe." + icon_state = "duffel-genetics" + +/obj/item/weapon/storage/backpack/duffel/chem + name = "chemistry duffel bag" + desc = "Spice up the love life a little." + icon_state = "duffel-chemistry" + +/obj/item/weapon/storage/backpack/duffel/syndie + name = "syndicate duffel bag" + desc = "A snazzy black and red duffel bag, perfect for smuggling C4 and Parapens." + icon_state = "duffel-syndie" + +/obj/item/weapon/storage/backpack/duffel/wizard + name = "wizardly duffel bag" + desc = "A fancy blue wizard bag, duffel edition." + icon_state = "duffel-wizard" + + +// ERT GEAR BOIZ + + /obj/item/weapon/storage/backpack/ert //General use ruck name = "combat ruck" desc = "A large rucksack with supports and webbing, specifically designed for combat operations and equipment carrying." diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 7fad59fc..dfb14c9e 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -2874,4 +2874,13 @@ var/playerckey = href_list["notessearchckey"] show_notes_sql(playerckey, adminckey) - return \ No newline at end of file + return + + else if(href_list["dbwarningedit"]) + var/warningEdit = href_list["dbwarningedit"] + var/warningId = text2num(href_list["dbwarningid"]) + if(!warningEdit || !warningId) + return + + warningsEdit(warningId, warningEdit) + return diff --git a/code/modules/admin/verbs/warning.dm b/code/modules/admin/verbs/warning.dm index 1ae3d827..a9288213 100644 --- a/code/modules/admin/verbs/warning.dm +++ b/code/modules/admin/verbs/warning.dm @@ -65,9 +65,6 @@ if(!check_rights(R_ADMIN|R_MOD)) return if(!warned_ckey || !istext(warned_ckey)) return -// if(warned_ckey in admin_datums) -// usr << "Error: warn(): You can't warn admins." -// return var/datum/preferences/D var/client/C = directory[warned_ckey] @@ -87,11 +84,11 @@ // Let's begin data gathering and conversion! - var/reason = input("Add Warning Reason") as null|text + var/reason = input("Add Warning Reason. This is visible to the player.") as null|text if(!reason) return - var/notes = input("Add Additional Information") as null|text + var/notes = input("Add Additional Information. This is visible to staff only.") as null|text var/severity switch(alert("Set Warning Severity",,"Standard","Severe")) @@ -108,9 +105,12 @@ ip = C.address var/a_ckey = sanitizeSQL(ckey) - var/DBQuery/query_insert = dbcon.NewQuery("INSERT INTO ss13_warnings (id, time, severity, reason, notes, ckey, computerid, ip, a_ckey) VALUES (null, Now(), '[severity]', '[reason]', '[notes]', '[sqlkey]', '[computerid]', '[ip]', '[a_ckey]')") + var/DBQuery/query_insert = dbcon.NewQuery("INSERT INTO ss13_warnings (id, time, severity, reason, notes, ckey, computerid, ip, a_ckey) VALUES (null, Now(), '[severity]', '[reason]', '[notes]', '[sqlkey]', '[computerid]', '[ip]', '[a_ckey]');") query_insert.Execute() + if(query_insert.ErrorMsg()) + error("SQL error while issuing warning. Error text: [query_insert.ErrorMsg()].") + if(config.ban_legacy_system) notes_add(warned_ckey, "Warning added by [a_ckey], for: [reason]. || Notes regarding the warning: [notes].") else @@ -131,8 +131,9 @@ set category = "OOC" set desc = "Display warnings issued to you." - var/lcolor = "#ffeeee" //light colour, severity = 1 - var/dcolor = "#ffaaaa" //dark colour, severity = 2 + var/lcolor = "#ffeeee" //light colour, severity = 0 + var/dcolor = "#ffaaaa" //dark colour, severity = 1 + var/ecolor = "#e3e3e3" //gray colour, expired = 1 establish_db_connection() if(!dbcon.IsConnected()) @@ -151,7 +152,7 @@ var/sqlkey = sanitizeSQL(ckey) - var/DBQuery/search_query = dbcon.NewQuery("SELECT id, time, severity, reason, a_ckey, acknowledged FROM ss13_warnings WHERE visible = '1' AND (ckey='[sqlkey]' OR computerid='[computer_id]' OR ip='[address]') ORDER BY time DESC") + var/DBQuery/search_query = dbcon.NewQuery("SELECT id, time, severity, reason, a_ckey, acknowledged, expired FROM ss13_warnings WHERE visible = 1 AND (ckey='[sqlkey]' OR computerid='[computer_id]' OR ip='[address]') ORDER BY time DESC;") search_query.Execute() while(search_query.NextRow()) @@ -161,12 +162,16 @@ var/reason = search_query.item[4] var/a_ckey = search_query.item[5] var/ackn = text2num(search_query.item[6]) + var/expired = text2num(search_query.item[7]) var/bgcolor = lcolor if(severity) bgcolor = dcolor + if(expired) + bgcolor = ecolor + dat += "" dat += "[a_ckey]" dat += "[time]" @@ -175,8 +180,10 @@ if(!ackn) dat += "(Acknowledge Warning)" + else if(expired) + dat += "Warning expired and no longer active!" else - dat += "Warning Acknowledged!" + dat += "Warning acknowledged!" dat += "" dat += " " @@ -198,7 +205,7 @@ error("Connection to SQL database failed while attempting to update a player's warnings.") return - var/DBQuery/query = dbcon.NewQuery("UPDATE ss13_warnings SET acknowledged = 1 WHERE id = '[id]'") + var/DBQuery/query = dbcon.NewQuery("UPDATE ss13_warnings SET acknowledged = 1 WHERE id = '[id]';") query.Execute() warnings_check() @@ -211,13 +218,22 @@ /client/proc/warnings_alert() var/sqlkey = sanitizeSQL(ckey) var/count = 0 + var/countExpire = 0 establish_db_connection() if(!dbcon.IsConnected()) error("Connection to SQL database failed while attempting to alert a player of their warnings.") return - var/DBQuery/query = dbcon.NewQuery("SELECT id FROM ss13_warnings WHERE (visible = '1' AND acknowledged = '0') AND (ckey='[sqlkey]' OR computerid='[computer_id]' OR ip='[address]')") + var/DBQuery/expireQuery = dbcon.NewQuery("SELECT id FROM ss13_warnings WHERE (acknowledged = 1 AND expired = 0 AND DATE_SUB(CURDATE(),INTERVAL 3 MONTH) > time) AND (ckey='[sqlkey]' OR computerid='[computer_id]' OR ip='[address]');") + expireQuery.Execute() + while(expireQuery.NextRow()) + var/id = text2num(expireQuery.item[1]) + var/DBQuery/updateQuery = dbcon.NewQuery("UPDATE ss13_warnings SET expired = 1 WHERE id = [id];") + updateQuery.Execute() + countExpire++ + + var/DBQuery/query = dbcon.NewQuery("SELECT id FROM ss13_warnings WHERE (visible = 1 AND acknowledged = 0 AND expired = 0) AND (ckey='[sqlkey]' OR computerid='[computer_id]' OR ip='[address]');") query.Execute() while(query.NextRow()) count++ @@ -225,6 +241,9 @@ if(count) src << "
" src << "You have [count] unread [count > 1 ? "warnings" : "warning"]! Click here to review and acknowledge them!" + if(countExpire) + src << "
" + src << "[countExpire] of your warnings expired." /* * A proc for an admin/moderator to look up a member's warnings. @@ -243,8 +262,9 @@ /datum/admins/proc/warning_panel(var/adminckey = null, var/playerckey = null) if(!check_rights(R_ADMIN|R_MOD)) return - var/lcolor = "#ffeeee" //light colour, severity = 1 - var/dcolor = "#ffdddd" //dark colour, severity = 2 + var/lcolor = "#ffeeee" //light colour, severity = 0 + var/dcolor = "#ffdddd" //dark colour, severity = 1 + var/ecolor = "#e3e3e3" //gray colour, expired = 1 establish_db_connection() if(!dbcon.IsConnected()) @@ -273,8 +293,8 @@ dat += "REASON" dat += "" - adminckey = ckey(adminckey) - playerckey = ckey(playerckey) + adminckey = sanitizeSQL(adminckey) + playerckey = sanitizeSQL(playerckey) var/paramone = "" var/paramtwo = "" if(adminckey) @@ -282,21 +302,30 @@ if(playerckey) paramtwo = "AND ckey = '[playerckey]' " - var/DBQuery/search_query = dbcon.NewQuery("SELECT time, severity, reason, notes, ckey, a_ckey FROM ss13_warnings WHERE 1 [paramone] [paramtwo] ORDER BY time DESC") + var/DBQuery/search_query = dbcon.NewQuery("SELECT id, time, severity, reason, notes, ckey, a_ckey, acknowledged, expired, edited, lasteditor, lasteditdate FROM ss13_warnings WHERE visible = 1 [paramone] [paramtwo] ORDER BY time DESC;") search_query.Execute() + if(search_query.ErrorMsg()) + error("SQL error while activating admin warnings panel. Error text: [search_query.ErrorMsg()].") + while(search_query.NextRow()) - var/time = search_query.item[1] - var/severity = search_query.item[2] - var/reason = search_query.item[3] - var/notes = search_query.item[4] - var/ckey = search_query.item[5] - var/a_ckey = search_query.item[6] + var/id = text2num(search_query.item[1]) + var/time = search_query.item[2] + var/severity = text2num(search_query.item[3]) + var/reason = search_query.item[4] + var/notes = search_query.item[5] + var/ckey = search_query.item[6] + var/a_ckey = search_query.item[7] + var/ackn = text2num(search_query.item[8]) + var/expired = text2num(search_query.item[9]) + var/edited = text2num(search_query.item[10]) var/bgcolor = lcolor - if(severity == "1") + if(severity) bgcolor = dcolor + if(expired) + bgcolor = ecolor dat += "" dat += "[ckey]" @@ -307,6 +336,24 @@ dat += "" dat += "Staff Notes: \"[notes]\"" dat += "" + if(!ackn) + dat += "Warning has not been acknolwedged by recipient." + if(expired) + dat += "The warning has expired." + if(edited) + var/lastEditor = search_query.item[11] + var/lastEditDate = search_query.item[12] + dat += "Warning last edited: [lastEditDate], by: [lastEditor]." + dat += "" + dat += "Options: " + if(check_rights(R_ADMIN) || a_ckey == sanitizeSQL(ckey)) + dat += "Edit Reason " + dat += "Edit Note " + dat += "Delete Warning" + else + dat += "You can only edit or delete notes that you have issued." + dat += "" + dat += "" dat += "" dat += " " @@ -316,3 +363,72 @@ usr << browse(dat, "window=lookupwarns;size=900x500") feedback_add_details("admin_verb","WARN-LKUP") + +/* + * A proc for editing and deleting warnings issued + */ + +/proc/warningsEdit(var/warningId, var/warningEdit) + if(!warningId || !warningEdit) + return + + establish_db_connection() + if(!dbcon.IsConnected()) + error("SQL connection failed while attempting to edit a note!") + return + + var/count = 0 //failsafe + var/aCkey = sanitizeSQL(usr.ckey) + var/ckey + var/reason + var/notes + + var/DBQuery/initialQuery = dbcon.NewQuery("SELECT ckey, reason, notes FROM ss13_warnings WHERE id = '[warningId]';") + initialQuery.Execute() + while(initialQuery.NextRow()) + ckey = initialQuery.item[1] + reason = initialQuery.item[2] + notes = initialQuery.item[3] + count++ + + if(count == 0) + usr << "\red Database update failed due to a warning id not being present in the database." + error("Database update failed due to a warning id not being present in the database.") + return + + if(count > 1) + usr << "\red Database update failed due to multiple warnings having the same ID. Contact the database admin." + error("Database update failed due to multiple warnings having the same ID. Contact the database admin.") + return + + switch(warningEdit) + if("delete") + if(alert("Delete this warning?", "Delete?", "Yes", "No") == "Yes") + var/DBQuery/deleteQuery = dbcon.NewQuery("UPDATE ss13_warnings SET visible = 0 WHERE id = [warningId];") + deleteQuery.Execute() + + message_admins("\blue [key_name_admin(usr)] deleted one of [ckey]'s warnings.") + log_admin("[key_name(usr)] deleted one of [ckey]'s warnings.") + else + usr << "Cancelled" + return + if("editReason") + var/newReason = input("Edit this warning's reason.", "New Reason", "[reason]", null) as null|text + newReason = sql_sanitize_text(newReason) + if(!newReason || newReason == reason) + usr << "Cancelled" + return + var/DBQuery/reasonQuery = dbcon.NewQuery("UPDATE ss13_warnings SET reason = '[newReason]', edited = 1, lasteditor = '[aCkey]', lasteditdate = NOW() WHERE id = '[warningId]';") + reasonQuery.Execute() + message_admins("\blue [key_name_admin(usr)] edited one of [ckey]'s warning reasons.") + log_admin("[key_name(usr)] edited one of [ckey]'s warning reasons.") + if("editNotes") + var/newNotes = input("Edit this warning's notes.", "New Notes", "[notes]", null) as null|text + newNotes = sql_sanitize_text(newNotes) + if(!newNotes || newNotes == notes) + usr << "Cancelled" + return + var/DBQuery/notesQuery = dbcon.NewQuery("UPDATE ss13_warnings SET notes = '[newNotes]', edited = 1, lasteditor = '[aCkey]', lasteditdate = NOW() WHERE id = '[warningId]';") + notesQuery.Execute() + message_admins("\blue [key_name_admin(usr)] edited one of [ckey]'s warning notes.") + log_admin("[key_name(usr)] edited one of [ckey]'s warning notes.") diff --git a/code/modules/aurora/intern.dm b/code/modules/aurora/intern.dm index 087d813e..9c6653c2 100644 --- a/code/modules/aurora/intern.dm +++ b/code/modules/aurora/intern.dm @@ -16,6 +16,7 @@ if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/security(H), slot_back) if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_sec(H), slot_back) if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back) + if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/duffel/sec(H), slot_back) H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/security2(H), slot_w_uniform) H.equip_to_slot_or_del(new /obj/item/clothing/shoes/jackboots(H), slot_shoes) H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_sec(H), slot_l_ear) @@ -44,6 +45,7 @@ if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/medic(H), slot_back) if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_med(H), slot_back) if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back) + if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/duffel/med(H), slot_back) H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical(H), slot_w_uniform) H.equip_to_slot_or_del(new /obj/item/clothing/shoes/white(H), slot_shoes) H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_med(H), slot_l_ear) @@ -75,6 +77,7 @@ if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back) if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_tox(H), slot_back) if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back) + if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/duffel/tox(H), slot_back) H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack) /datum/job/intern_eng @@ -95,6 +98,7 @@ if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/industrial(H), slot_back) if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_eng(H), slot_back) if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back) + if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/duffel/eng(H), slot_back) H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/engineer(H), slot_w_uniform) H.equip_to_slot_or_del(new /obj/item/clothing/shoes/orange(H), slot_shoes) H.equip_to_slot_or_del(new /obj/item/clothing/head/beret/eng(H), slot_head) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 22594ca2..2f7ec095 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -1080,7 +1080,7 @@ datum/preferences g_skin = rand(0,255) b_skin = rand(0,255) if("bag") - backbag = rand(1,4) + backbag = rand(1,5) /*if("skin_style") h_style = random_skin_style(gender)*/ if("all") @@ -1128,9 +1128,9 @@ datum/preferences b_hair = 0//hex2num(copytext(new_hair, 6, 8)) s_tone = 0 - + organ_data = list() - + if("language") var/languages_available @@ -1270,7 +1270,7 @@ datum/preferences covering_type=(new_coating!="None" ? new_coating : null) h_style = random_hair_style(gender, get_hair_species()) f_style = random_facial_hair_style(gender, get_hair_species()) - + if("limbs") customize_limbs(user,species!="Machine") @@ -1539,7 +1539,7 @@ datum/preferences undershirt = 0 character.undershirt = undershirt - if(backbag > 4 || backbag < 1) + if(backbag > 5 || backbag < 1) backbag = 1 //Same as above character.backbag = backbag diff --git a/code/modules/clothing/under/armbands.dm b/code/modules/clothing/under/armbands.dm index 692b18d9..217f529d 100644 --- a/code/modules/clothing/under/armbands.dm +++ b/code/modules/clothing/under/armbands.dm @@ -36,7 +36,7 @@ item_color = "med" /obj/item/clothing/tie/armband/medgreen - name = "medical guard armband" + name = "paramedic armband" desc = "An armband, worn by the station's security forces to display which department they're assigned to. This one is white and green." - icon_state = "medgreen" - item_color = "medgreen" \ No newline at end of file + icon_state = "emt" + item_color = "emt" \ No newline at end of file diff --git a/code/modules/customitems/item_defines.dm b/code/modules/customitems/item_defines.dm index 8cb625f1..8044f6a0 100644 --- a/code/modules/customitems/item_defines.dm +++ b/code/modules/customitems/item_defines.dm @@ -97,13 +97,45 @@ icon_state = "raieed_sandals" contained_sprite = 1 -/obj/item/clothing/suit/storage/fluff/raieed_labcoat //Treasured Labcoat - Raieed Amari - nikolaithebeast - DONE - name = "torn labcoat" - desc = "A old labcoat, torn beyond reorganization, but yet it still seems to be kept for." +// Rai Amari - nikolaithebeast - Stitched Labcoat +/obj/item/clothing/suit/storage/labcoat/fluff/raieed_labcoat + name = "stitched labcoat" + desc = "A stiched up labcoat. It looks particularly torn up, but someone has spent a great deal of time fixing the damage." icon = 'icons/obj/custom_items/raieed_labcoat.dmi' - icon_state = "raieed_labcoat" + icon_state = "raieed_labcoat_open" contained_sprite = 1 + // verb/toggle() as normally defined in labcoat.dm + toggle() + set name = "Toggle Labcoat Buttons" + set category = "Object" + set src in usr + + if(!usr.canmove || usr.stat || usr.restrained()) + return 0 + + switch(icon_state) + if("raieed_labcoat_open") + icon_state = "raieed_labcoat_closed" + usr << "You button up the stitched labcoat." + if("raieed_labcoat_closed") + icon_state = "raieed_labcoat_open" + usr << "You unbutton the stiched labcoat." + + else + usr << "SierraKomodo broke a thing. Bug report time!" + return + + usr.update_inv_wear_suit() + +// Old item +// /obj/item/clothing/suit/storage/fluff/raieed_labcoat //Treasured Labcoat - Raieed Amari - nikolaithebeast - DONE + // name = "torn labcoat" + // desc = "A old labcoat, torn beyond reorganization, but yet it still seems to be kept for." + // icon = 'icons/obj/custom_items/raieed_labcoat.dmi' + // icon_state = "raieed_labcoat" + // contained_sprite = 1 + /obj/item/weapon/folder/fluff/may_notebook //May Izumi's Notebook - May Izumi - lk600 - DONE name = "May Izumi's Notebook" desc = "A pink notebook that is covered in hearts and little manga stickers. It is filled with lots of questions, replies and conversations from her past. It has 'May Izumi' printed on the front." @@ -1247,3 +1279,48 @@ END R I P HAZERI /obj/item/clothing/tie/fluff/straughan_necklace/attack_self(mob/user as mob) if(isliving(user)) user.visible_message("\red [user] holds up their [src].\nIt reads: Prosthetic rejection syndrome. Patient's body rejects mechanical eyes. Shaded eyewear required.","\red You display the [src], showing the room your medical condition.") + + +// Hayden Green's Mech Helmet - Doomberg +/obj/item/clothing/head/helmet/fluff/hayden_mechhelmet + name = "mech pilot helmet" + desc = "A sturdy green helmet with a dark visor. Not brand new, but well maintained." + icon = 'icons/obj/custom_items/hayden_mechhelmet.dmi' + icon_state = "hayden_mechhelmet" + item_state = "hayden_mechhelmet" + flags_inv = HIDEEARS + contained_sprite = 1 + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) + +// Chive's Engraved Auto Injector - cobracoco007 +/obj/item/fluff/chive_engravedautoinjector + name = "engraved broken autoinjector" + desc = "A slightly rusty auto-injector that appears to have the initials 'W.N.' engraved on it." + icon = 'icons/obj/custom_items/chive_engravedautoinjector.dmi' + icon_state = "chive_engravedautoinjector" + item_state = "chive_engravedautoinjector" + contained_sprite = 1 + sharp = 1 + force = 1 + +// Varan Truesight's Dataslate - Gollee +/obj/item/fluff/varan_dataslate + name = "data slate" + desc = "A chrome-silver data slate. Along the side, there is a stylised brand mark, with 'Biesel Electronics Ophreion 4000' written underneath." + icon = 'icons/obj/custom_items/varan_dataslate.dmi' + icon_state = "varan_dataslate" + item_state = "varan_dataslate" + contained_sprite = 1 + +// Fortune Bloise - swat43 - Shield Pendant +/obj/item/clothing/tie/fluff/fortune_shieldpendant + name = "shield pendant" + desc = "A small blue shield shaped pendant with two small wings attached to it." + icon = 'icons/obj/custom_items/fortune_shieldpendant.dmi' + icon_state = "fortune_shieldpendant" + item_color = "fortune_shieldpendant" + contained_sprite = 1 + slot_flags = SLOT_MASK + +/obj/item/clothing/tie/fluff/fortune_shieldpendant/New() + inv_overlay = image("icon" = 'icons/obj/custom_items/fortune_shieldpendant.dmi', "icon_state" = "fortune_shieldpendant_w") \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 54ff6a66..616e9efe 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -234,7 +234,7 @@ proc/get_damage_icon_part(damage_state, body_part) overlays_standing[DAMAGE_LAYER] = standing_image if(update_icons) update_icons() - + /mob/living/carbon/human/proc/get_skin_tone_key() if (species.flags & HAS_SKIN_COLOR) @@ -242,7 +242,7 @@ proc/get_damage_icon_part(damage_state, body_part) if(species.flags & HAS_SKIN_TONE) return "[s_tone]" return "" - + /mob/living/carbon/human/proc/get_icon_key(var/list/mutations=list()) if (!mutations) @@ -316,13 +316,13 @@ proc/get_damage_icon_part(damage_state, body_part) var/deform_icon = (mutations["skeleton"] ? 'icons/mob/human_races/r_skeleton.dmi' : species.icobase) var/list/skin_info = skin_colour_info(mutations) // get the skin tone info - + //Robotic limbs are handled in get_icon() so all we worry about are missing or dead limbs. //No icon stored, so we need to start with a basic one. var/datum/organ/external/chest = get_organ("chest") base_icon = chest.get_icon(race_icon,deform_icon,skin_info) - - + + if(chest.status & ORGAN_DEAD) base_icon.ColorTone(necrosis_color_mod) @@ -419,7 +419,7 @@ proc/get_damage_icon_part(damage_state, body_part) /mob/living/carbon/human/proc/create_hair_icon() if(!should_we_show_hair()) // if we're missing our head or we're wearing a mask, no hair - return + return validate_hair() // make sure our hair is valid var/icon/face_standing = new /icon('icons/mob/human_face.dmi',"bald_s") //base icons var/icon/facial_s = facial_hair_icon() @@ -437,7 +437,7 @@ proc/get_damage_icon_part(damage_state, body_part) create_hair_icon() // do the hair blending if(update_icons) update_icons() - + /mob/living/carbon/human/update_mutations(var/update_icons=1) var/fat @@ -583,22 +583,34 @@ proc/get_damage_icon_part(damage_state, body_part) if(w_uniform:hastie) //WE CHECKED THE TYPE ABOVE. THIS REALLY SHOULD BE FINE. var/tie_color = w_uniform:hastie.item_color 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:hastie.contained_sprite == 1) + standing.overlays += image("icon" = w_uniform:hastie.icon, "icon_state" = "[tie_color]_w") + else + 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]") + if (w_uniform:aband.contained_sprite == 1) + standing.overlays += image("icon" = w_uniform:aband.icon, "icon_state" = "[aband_color]_w") + else + standing.overlays += image("icon" = 'icons/mob/ties.dmi', "icon_state" = "[aband_color]") if(w_uniform:webbing) //SAME THING AS ABOVE, LETS ADD TWO MORE FOR LOLS var/webbing_color = w_uniform:webbing.item_color if(!webbing_color) webbing_color = w_uniform:webbing.icon_state - standing.overlays += image("icon" = 'icons/mob/ties.dmi', "icon_state" = "[webbing_color]") + if (w_uniform:webbing.contained_sprite == 1) + standing.overlays += image("icon" = w_uniform:webbing.icon, "icon_state" = "[webbing_color]_w") + else + standing.overlays += image("icon" = 'icons/mob/ties.dmi', "icon_state" = "[webbing_color]") if(w_uniform:holster) //SAME THING AS ABOVE, THIS IS FUN var/holster_color = w_uniform:holster.item_color if(!holster_color) holster_color = w_uniform:holster.icon_state - standing.overlays += image("icon" = 'icons/mob/ties.dmi', "icon_state" = "[holster_color]") + if (w_uniform:holster.contained_sprite == 1) + standing.overlays += image("icon" = w_uniform:holster.icon, "icon_state" = "[holster_color]_w") + else + standing.overlays += image("icon" = 'icons/mob/ties.dmi', "icon_state" = "[holster_color]") overlays_standing[UNIFORM_LAYER] = standing else diff --git a/icons/mob/back.dmi b/icons/mob/back.dmi index 6a21ead8..6ae7c784 100644 Binary files a/icons/mob/back.dmi and b/icons/mob/back.dmi differ diff --git a/icons/mob/ties.dmi b/icons/mob/ties.dmi index 83099df9..d29a896f 100644 Binary files a/icons/mob/ties.dmi and b/icons/mob/ties.dmi differ diff --git a/icons/obj/clothing/ties.dmi b/icons/obj/clothing/ties.dmi index 01d3193f..9ff5ff22 100644 Binary files a/icons/obj/clothing/ties.dmi and b/icons/obj/clothing/ties.dmi differ diff --git a/icons/obj/clothing/ties_overlay.dmi b/icons/obj/clothing/ties_overlay.dmi index 60cff0db..6e636c96 100644 Binary files a/icons/obj/clothing/ties_overlay.dmi and b/icons/obj/clothing/ties_overlay.dmi differ diff --git a/icons/obj/custom_items/chive_engravedautoinjector.dmi b/icons/obj/custom_items/chive_engravedautoinjector.dmi new file mode 100644 index 00000000..bb960656 Binary files /dev/null and b/icons/obj/custom_items/chive_engravedautoinjector.dmi differ diff --git a/icons/obj/custom_items/fortune_shieldpendant.dmi b/icons/obj/custom_items/fortune_shieldpendant.dmi new file mode 100644 index 00000000..4389ae4b Binary files /dev/null and b/icons/obj/custom_items/fortune_shieldpendant.dmi differ diff --git a/icons/obj/custom_items/hayden_mechhelmet.dmi b/icons/obj/custom_items/hayden_mechhelmet.dmi new file mode 100644 index 00000000..56726b6c Binary files /dev/null and b/icons/obj/custom_items/hayden_mechhelmet.dmi differ diff --git a/icons/obj/custom_items/raieed_labcoat.dmi b/icons/obj/custom_items/raieed_labcoat.dmi index c1b8cd88..32bf138a 100644 Binary files a/icons/obj/custom_items/raieed_labcoat.dmi and b/icons/obj/custom_items/raieed_labcoat.dmi differ diff --git a/icons/obj/custom_items/varan_dataslate.dmi b/icons/obj/custom_items/varan_dataslate.dmi new file mode 100644 index 00000000..fe1e2629 Binary files /dev/null and b/icons/obj/custom_items/varan_dataslate.dmi differ diff --git a/icons/obj/storage.dmi b/icons/obj/storage.dmi index 50717a6d..f9f7ed86 100644 Binary files a/icons/obj/storage.dmi and b/icons/obj/storage.dmi differ