From fc3914364f77aeded726ae6224a44b4fe4d2a4e2 Mon Sep 17 00:00:00 2001 From: SkyMarshal Date: Sun, 18 Dec 2011 00:23:02 -0700 Subject: [PATCH] Finished pepperspray, added mace item, improved security console, and a few other things. Will know when I see the diffs. --- code/defines/obj/storage.dm | 4 +- code/defines/obj/weapon.dm | 23 +++++- code/game/jobs/job/security.dm | 8 +- code/game/machinery/computer/security.dm | 32 +++++++- code/game/objects/closets/secure/security.dm | 1 + .../objects/items/weapons/mops_cleaners.dm | 70 ++++++++++++------ code/modules/admin/admin.dm | 35 +++++++++ code/modules/chemical/Chemistry-Reagents.dm | 2 +- code/modules/chemical/Chemistry-Tools.dm | 2 +- code/modules/mob/living/carbon/human/human.dm | 2 +- config/admins - Copy.txt | 16 ++++ config/admins.txt | 3 +- icons/obj/card.dmi | Bin 4383 -> 4205 bytes 13 files changed, 160 insertions(+), 38 deletions(-) create mode 100644 config/admins - Copy.txt diff --git a/code/defines/obj/storage.dm b/code/defines/obj/storage.dm index 014e3a80667..7e60232d335 100644 --- a/code/defines/obj/storage.dm +++ b/code/defines/obj/storage.dm @@ -175,7 +175,7 @@ /obj/item/weapon/storage/gl_kit name = "Prescription Glasses" - desc = "This box contains nerd glasses." + desc = "This box contains vision correcting glasses." icon_state = "glasses" item_state = "syringe_kit" @@ -213,7 +213,7 @@ /obj/item/weapon/storage/trackimp_kit name = "Tracking Implant Kit" - desc = "Box full of scum-bag tracking utensils." + desc = "Box full of tracking utensils." icon_state = "implant" item_state = "syringe_kit" diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm index 46357c867cf..83c3695da98 100644 --- a/code/defines/obj/weapon.dm +++ b/code/defines/obj/weapon.dm @@ -443,8 +443,8 @@ data = "Clown Land" /obj/item/weapon/card/emag - desc = "It's a card with a magnetic strip attached to some circuitry." - name = "cryptographic sequencer" + desc = "An identification card. No shit. Seems to have some funny chip on it, though." + name = "identification card" icon_state = "emag" item_state = "card-id" origin_tech = "magnets=2;syndicate=2" @@ -525,7 +525,7 @@ throw_range = 10 origin_tech = "combat=3;materials=3;engineering=3" -/obj/item/weapon/pepperspray +/obj/item/weapon/pepperspray //This is riot control desc = "Manufactred by UhangInc., used to blind and down an opponent quickly." icon = 'weapons.dmi' name = "pepperspray" @@ -537,6 +537,23 @@ throw_speed = 2 throw_range = 10 var/catch = 1 + var/BottleSize = 1 + var/ReagentAmount = 30 + +/obj/item/weapon/pepperspray/small //And this is for personal defense. + desc = "This appears to be a small, nonlethal, single use personal defense weapon. Hurts like a bitch, though." + icon = 'weapons.dmi' + name = "mace" + icon_state = "pepperspray" + item_state = "pepperspray" + flags = ONBELT|TABLEPASS|OPENCONTAINER|FPRINT|USEDELAY + throwforce = 3 + w_class = 1.0 + throw_speed = 2 + throw_range = 10 + catch = 1 + BottleSize = 0 + ReagentAmount = 1 /obj/item/weapon/clipboard name = "clipboard" diff --git a/code/game/jobs/job/security.dm b/code/game/jobs/job/security.dm index c45e01fbadf..fc2feda15b7 100644 --- a/code/game/jobs/job/security.dm +++ b/code/game/jobs/job/security.dm @@ -73,16 +73,18 @@ H.equip_if_possible(new /obj/item/clothing/shoes/brown(H), H.slot_shoes) H.equip_if_possible(new /obj/item/device/pda/detective(H), H.slot_belt) H.equip_if_possible(new /obj/item/clothing/head/det_hat(H), H.slot_head) - var/obj/item/clothing/mask/cigarette/CIG = new /obj/item/clothing/mask/cigarette(H) +/* var/obj/item/clothing/mask/cigarette/CIG = new /obj/item/clothing/mask/cigarette(H) CIG.light("") - H.equip_if_possible(CIG, H.slot_wear_mask) + H.equip_if_possible(CIG, H.slot_wear_mask) */ + //Fuck that thing. --SkyMarshal H.equip_if_possible(new /obj/item/clothing/gloves/black(H), H.slot_gloves) H.equip_if_possible(new /obj/item/weapon/storage/fcard_kit(H.back), H.slot_in_backpack) H.equip_if_possible(new /obj/item/weapon/fcardholder(H), H.slot_in_backpack) H.equip_if_possible(new /obj/item/clothing/suit/det_suit(H), H.slot_wear_suit) H.equip_if_possible(new /obj/item/device/detective_scanner(H), H.slot_in_backpack) H.equip_if_possible(new /obj/item/weapon/zippo(H), H.slot_l_store) - H.equip_if_possible(new /obj/item/weapon/reagent_containers/food/snacks/candy_corn(H), H.slot_h_store) +// H.equip_if_possible(new /obj/item/weapon/reagent_containers/food/snacks/candy_corn(H), H.slot_h_store) +// No... just no. --SkyMarshal var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H) L.imp_in = H L.implanted = 1 diff --git a/code/game/machinery/computer/security.dm b/code/game/machinery/computer/security.dm index 7014680b9de..3d7902590d0 100644 --- a/code/game/machinery/computer/security.dm +++ b/code/game/machinery/computer/security.dm @@ -18,10 +18,36 @@ if(1.0) dat += text("Search Records
\nList Records
\nSearch Fingerprints
\nNew General Record
\n
\nRecord Maintenance
\n{Log Out}
\n", src, src, src, src, src, src) if(2.0) - dat += "Record List:
" + dat += {"Record List:
+ + + + + + + "} for(var/datum/data/record/R in data_core.general) - dat += text("[]: []
", src, R, R.fields["id"], R.fields["name"]) - dat += text("
Back", src) + var/crimstat = "" + for(var/datum/data/record/E in data_core.security) + if ((E.fields["name"] == R.fields["name"] || E.fields["id"] == R.fields["id"])) + crimstat = E.fields["criminal"] + var/background + switch(crimstat) + if("*Arrest*") + background = "'background-color:#DC143C;'" + if("Incarcerated") + background = "'background-color:#CD853F;'" + if("Parolled") + background = "'background-color:#CD853F;'" + if("Released") + background = "'background-color:#3BB9FF;'" + if("None") + background = "'background-color:#00FF7F;'" + dat += text("", background, src, R, R.fields["name"], R.fields["id"]) + dat += text("", R.fields["rank"]) + dat += text("", R.fields["fingerprint"]) + dat += text("", crimstat) + dat += text("
Name (ID#)RankFingerprintsCriminal Status
[] (ID:[])[][][]


Back", src) if(3.0) dat += text("Records Maintenance
\nDelete All Records
\n
\nBack", src, src) if(4.0) diff --git a/code/game/objects/closets/secure/security.dm b/code/game/objects/closets/secure/security.dm index d6e5518fecc..fc5d24bdeff 100644 --- a/code/game/objects/closets/secure/security.dm +++ b/code/game/objects/closets/secure/security.dm @@ -134,6 +134,7 @@ new /obj/item/weapon/fcardholder(src) new /obj/item/weapon/clipboard(src) new /obj/item/device/detective_scanner(src) + new /obj/item/weapon/pepperspray/small(src) return diff --git a/code/game/objects/items/weapons/mops_cleaners.dm b/code/game/objects/items/weapons/mops_cleaners.dm index 6fea7af4b12..ad0989bdcbc 100644 --- a/code/game/objects/items/weapons/mops_cleaners.dm +++ b/code/game/objects/items/weapons/mops_cleaners.dm @@ -15,13 +15,13 @@ MOP /obj/item/weapon/cleaner/attack_self(var/mob/user as mob) if(catch) - user << "\blue You flip the safety on." - catch = 1 - return - else user << "\blue You flip the safety off." catch = 0 return + else + user << "\blue You flip the safety on." + catch = 1 + return /obj/item/weapon/cleaner/afterattack(atom/A as mob|obj, mob/user as mob) if (istype(A, /obj/item/weapon/storage )) @@ -178,26 +178,26 @@ MOP return -//Crowd control pepper spray, for Hawkie +//Pepper spray, set up to make the 2 different types /obj/item/weapon/pepperspray/New() - var/datum/reagents/R = new/datum/reagents(30) + var/datum/reagents/R = new/datum/reagents(ReagentAmount) reagents = R R.my_atom = src - R.add_reagent("condensedcapsaicin", 30) + R.add_reagent("condensedcapsaicin", ReagentAmount) /obj/item/weapon/pepperspray/attack(mob/living/carbon/human/M as mob, mob/user as mob) return /obj/item/weapon/pepperspray/attack_self(var/mob/user as mob) if(catch) - user << "\blue You flip the safety on." - catch = 1 - return - else user << "\blue You flip the safety off." catch = 0 return + else + user << "\blue You flip the safety on." + catch = 1 + return /obj/item/weapon/pepperspray/afterattack(atom/A as mob|obj, mob/user as mob) if (istype(A, /obj/item/weapon/storage )) @@ -205,8 +205,8 @@ MOP if (istype(A, /obj/effect/proc_holder/spell )) return else if (istype(A, /obj/structure/reagent_dispensers/peppertank) && get_dist(src,A) <= 1) - if(src.reagents.total_volume < 30) - A.reagents.trans_to(src, 30 - src.reagents.total_volume) + if(src.reagents.total_volume < ReagentAmount) + A.reagents.trans_to(src, ReagentAmount - src.reagents.total_volume) user << "\blue Pepper spray refilled" playsound(src.loc, 'refill.ogg', 50, 1, -6) return @@ -221,14 +221,23 @@ MOP return playsound(src.loc, 'spray2.ogg', 50, 1, -6) - var/Sprays[3] - for(var/i=1, i<=3, i++) // intialize sprays + var/SprayNum = 0 //Setting up the differentiation for the 2 bottles. --SkyMarshal + var/SprayAmt = 0 + if(BottleSize) + SprayNum = 3 + SprayAmt = 5 + else + SprayNum = 1 + SprayAmt = 1 + + var/Sprays[SprayNum] + for(var/i=1, i<=SprayNum, i++) // intialize sprays if(src.reagents.total_volume < 1) break var/obj/effect/decal/D = new/obj/effect/decal(get_turf(src)) D.name = "chemicals" D.icon = 'chempuff.dmi' - D.create_reagents(5) - src.reagents.trans_to(D, 5) + D.create_reagents(SprayAmt) + src.reagents.trans_to(D, SprayAmt) var/rgbcolor[3] var/finalcolor @@ -263,11 +272,23 @@ MOP var/obj/effect/decal/D = Sprays[i] if(!D) continue + var/turf/my_target = null // Spreads the sprays a little bit - var/turf/my_target = pick(the_targets) + if(i == 1) + my_target = T + else + my_target = pick(the_targets) + the_targets -= my_target - for(var/j=1, j<=rand(6,8), j++) + var/Dist = 0 + + if(BottleSize) + Dist = rand(6,8) + else + Dist = rand(2,3) + + for(var/j=1, j<=Dist, j++) step_towards(D, my_target) D.reagents.reaction(get_turf(D)) for(var/atom/t in get_turf(D)) @@ -287,9 +308,14 @@ MOP /obj/item/weapon/pepperspray/examine() set src in usr - usr << text("\icon[] [] units of pepperspray left!", src, src.reagents.total_volume) - ..() - return + if(BottleSize) + usr << text("\icon[] [] units of pepperspray left!", src, src.reagents.total_volume) + ..() + return + else + usr << text("\icon[] [] use(s) remaining!", src, src.reagents.total_volume) + ..() + return // MOP diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index b676da8ffbd..e1227e6eb45 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -727,6 +727,40 @@ alert("You cannot perform this action. You must be of a higher administrative rank!", null, null, null, null, null) return + if (href_list["defense"]) + if ((src.rank in list( "Trial Admin", "Badmin", "Game Admin", "Game Master" ))) + var/mob/living/M = locate(href_list["defense"]) + if (isliving(M) && istype(M, /mob/living/carbon/human)) + var/mob/living/carbon/human/H = M + switch(alert("Shall they be equipped with a flash or mace?",,"Flash","Mace", "Cancel")) + if("Flash") + if(!H.s_store) + H.equip_if_possible(new /obj/item/device/flash(H), H.slot_l_store) + else if(!H.s_store) + H.equip_if_possible(new /obj/item/device/flash(H), H.slot_s_store) + else + alert("The target lacked an open pocket.", null, null, null, null, null) + return + if("Mace") + if(!H.s_store) + H.equip_if_possible(new /obj/item/weapon/pepperspray/small(H), H.slot_l_store) + else if(!H.s_store) + H.equip_if_possible(new /obj/item/weapon/pepperspray/small(H), H.slot_s_store) + else + alert("The target lacked an open pocket.", null, null, null, null, null) + return + if("Cancel") + return + message_admins("\red Admin [key_name_admin(usr)] gave [key_name_admin(M)] something to defend themselves!", 1) + log_admin("[key_name(usr)] defensified [key_name(M)]") + return + else + alert("This action can only be performed on living humans.", null, null, null, null, null) + return + else + alert("You cannot perform this action. You must be of a higher administrative rank!", null, null, null, null, null) + return + if (href_list["makeai"]) //Yes, im fucking lazy, so what? it works ... hopefully if (src.level>=3) var/mob/M = locate(href_list["makeai"]) @@ -1774,6 +1808,7 @@ foo += text("Prison | ") // foo += text("Maze | ") foo += text("Heal/Revive | ") + foo += text("Defensize | ") else foo += text("Hasn't Entered Game | ") foo += text("Forcesay | ") diff --git a/code/modules/chemical/Chemistry-Reagents.dm b/code/modules/chemical/Chemistry-Reagents.dm index bece66e2588..b24a338f661 100644 --- a/code/modules/chemical/Chemistry-Reagents.dm +++ b/code/modules/chemical/Chemistry-Reagents.dm @@ -1714,7 +1714,7 @@ datum M:emote("scream") M << "\red You're sprayed directly in the eyes with pepperspray!" M.eye_blurry = max(M.eye_blurry, 60) - M.eye_blind = max(M.eye_blind, 16) + M.eye_blind = max(M.eye_blind, 12) M:weakened = max(M:weakened, 20) M.drop_item() diff --git a/code/modules/chemical/Chemistry-Tools.dm b/code/modules/chemical/Chemistry-Tools.dm index 2eebb272aca..8f9d55fdab3 100644 --- a/code/modules/chemical/Chemistry-Tools.dm +++ b/code/modules/chemical/Chemistry-Tools.dm @@ -2740,7 +2740,7 @@ icon_state = "peppertank" anchored = 1 density = 0 - amount_per_transfer_from_this = 45 + amount_per_transfer_from_this = 30 New() ..() reagents.add_reagent("condensedcapsaicin",1000) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 3a9274450bd..930a836a2a1 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -528,7 +528,7 @@ if (emptyHand) ears.DblClick() return - if (!( istype(W, /obj/item/clothing/ears) ) && !( istype(W, /obj/item/device/radio/headset) )) + if ((!istype(W, /obj/item) || W.w_class > 1 || w_uniform) && !(istype(W, /obj/item/device/radio/headset))) return u_equip(W) ears = W diff --git a/config/admins - Copy.txt b/config/admins - Copy.txt new file mode 100644 index 00000000000..d4494bcbb47 --- /dev/null +++ b/config/admins - Copy.txt @@ -0,0 +1,16 @@ +abi79 - Game Master +arcalane - Game Admin +cacophony - Game Admin +cajoes - Game Admin +cib - Game Master +compactninja - Game Master +hawk_v3 - Game Admin +headswe - Game Master +iaryni - Game Master +masterofapples - Game Admin +megacaesar - Game Admin +miniature - Game Master +misterfox - Game Admin +mloc - Game Master +spaceman96 - Game Admin +uristqwerty - Game Master \ No newline at end of file diff --git a/config/admins.txt b/config/admins.txt index 2bc78a67b3c..c4833cb9a92 100644 --- a/config/admins.txt +++ b/config/admins.txt @@ -5,8 +5,7 @@ cajoes - Game Admin cib - Game Master compactninja - Game Master hawk_v3 - Game Admin -headswe - Game Master -iaryni - Game Master +skymarshal - Game Master masterofapples - Game Admin megacaesar - Game Admin miniature - Game Master diff --git a/icons/obj/card.dmi b/icons/obj/card.dmi index b49faa386b78a1977caafe5b7550ad7484a80840..aa88951b244b6b5ff21aa6eb243494fdd457275d 100644 GIT binary patch delta 4083 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 j(w-VMi%^gOnP1)phjuy1>S9Yh0J~Y3*_u|Fc*p%0DNY8r delta 4263 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