From 5f9018eeb8b110f8cb220f77da5dcc1b82e51d13 Mon Sep 17 00:00:00 2001 From: Ryan784 Date: Tue, 2 Feb 2016 18:21:45 -0500 Subject: [PATCH 01/13] Vampire Blood Immunity Vampires will no longer take toxin damage from blood infusions, regardless of the type of blood it is. --- code/modules/organs/blood.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/organs/blood.dm b/code/modules/organs/blood.dm index cee9a7d9273..7758c12724e 100644 --- a/code/modules/organs/blood.dm +++ b/code/modules/organs/blood.dm @@ -223,7 +223,7 @@ var/const/BLOOD_VOLUME_SURVIVE = 122 if (!injected || !our) return - if(blood_incompatible(injected.data["blood_type"],our.data["blood_type"],injected.data["species"],our.data["species"]) ) + if(blood_incompatible(injected.data["blood_type"],our.data["blood_type"],injected.data["species"],our.data["species"]) && !(mind.vampire)) reagents.add_reagent("toxin",amount * 0.5) reagents.update_total() else From 90318f09aa213e66d8433f6b1133e522fec32e44 Mon Sep 17 00:00:00 2001 From: Ryan784 Date: Wed, 3 Feb 2016 13:05:57 -0500 Subject: [PATCH 02/13] Fuel Tank Disarming Admins and Mods can once again disarm a fueltank as a ghost by clicking on it. --- code/modules/reagents/reagent_dispenser.dm | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm index 5b36998d166..5143e139e31 100644 --- a/code/modules/reagents/reagent_dispenser.dm +++ b/code/modules/reagents/reagent_dispenser.dm @@ -146,6 +146,18 @@ return ..() +/obj/structure/reagent_dispensers/fueltank/attack_ghost(mob/user as mob) + if(user.client && user.client.inquisitive_ghost) + examine() + if(!user.client.holder) + return + if(!src.defuse && ((user.client.holder.rights & R_ADMIN) || (user.client.holder.rights & R_MOD))) + src.defuse = 1 + message_admins("[key_name_admin(user)] defused fueltank at ([loc.x],[loc.y],[loc.z]).") + else + if(!src.armed && ((user.client.holder.rights & R_ADMIN) || (user.client.holder.rights & R_MOD))) + src.defuse = 0 + message_admins("[key_name_admin(user)] reset fuse on fueltank at ([loc.x],[loc.y],[loc.z]).") /obj/structure/reagent_dispensers/fueltank/bullet_act(var/obj/item/projectile/Proj) if(Proj.damage_type == BRUTE || Proj.damage_type == BURN) From 48b5c1e5766be6666964dbe5ec953c49b184bf0e Mon Sep 17 00:00:00 2001 From: Ryan784 Date: Wed, 3 Feb 2016 14:47:06 -0500 Subject: [PATCH 03/13] Vamp Enhancement, Fixes #45 #40 #53 Vampire enhancement regarding blood transfusions (will no longer take toxin damage). Welder Bombs can now be defused by Mods/Admins, again. Fixed issues with both the race-specific gloves and wirecutting gloves to modify them for certain races. --- code/modules/clothing/gloves/color.dm | 8 ++++---- code/modules/clothing/gloves/stungloves.dm | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/code/modules/clothing/gloves/color.dm b/code/modules/clothing/gloves/color.dm index aedfe6bdf97..35fa1a19360 100644 --- a/code/modules/clothing/gloves/color.dm +++ b/code/modules/clothing/gloves/color.dm @@ -86,16 +86,16 @@ item_state = "browngloves" /obj/item/clothing/gloves/yellow/specialt - desc = "These gloves will protect the wearer from electric shock. Made special for Tajaran use" + desc = "These gloves will protect the wearer from electric shock. Made special for Tajaran use." name = "Tajaran electrical gloves" icon_state = "yellow" item_state = "ygloves" siemens_coefficient = 0 permeability_coefficient = 0.05 - species_restricted = list("Tajaran") + species_restricted = list("Tajara") /obj/item/clothing/gloves/yellow/specialu - desc = "These gloves will protect the wearer from electric shock. Made special for Unathi use" + desc = "These gloves will protect the wearer from electric shock. Made special for Unathi use." name = "Unathi electrical gloves" icon_state = "yellow" item_state = "ygloves" @@ -111,4 +111,4 @@ /obj/item/clothing/gloves/black/tajara name = "black gloves" desc = "black gloves made for Tajara use." - species_restricted = list("Tajaran") + species_restricted = list("Tajara") diff --git a/code/modules/clothing/gloves/stungloves.dm b/code/modules/clothing/gloves/stungloves.dm index 02ca6e7a731..caf0db0b7dd 100644 --- a/code/modules/clothing/gloves/stungloves.dm +++ b/code/modules/clothing/gloves/stungloves.dm @@ -73,7 +73,7 @@ desc = "[desc]
They have had the fingertips cut off of them." if("exclude" in species_restricted) species_restricted -= "Unathi" - species_restricted -= "Tajaran" + species_restricted -= "Tajara" return else user << "The [src] have already been clipped!" From 10b3fc505eca58af001586081a6f86aa41d005b4 Mon Sep 17 00:00:00 2001 From: Ryan784 Date: Wed, 3 Feb 2016 15:18:05 -0500 Subject: [PATCH 04/13] AI UI Fix #37 Upped AI Hud layer so Static wasn't on top. --- code/_onclick/hud/ai.dm | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/code/_onclick/hud/ai.dm b/code/_onclick/hud/ai.dm index 499dc7f7150..168471c3c27 100644 --- a/code/_onclick/hud/ai.dm +++ b/code/_onclick/hud/ai.dm @@ -10,7 +10,7 @@ using.icon = 'icons/mob/screen_ai.dmi' using.icon_state = "ai_core" using.screen_loc = ui_ai_core - using.layer = 20 + using.layer = 21 adding += using //Camera list @@ -19,7 +19,7 @@ using.icon = 'icons/mob/screen_ai.dmi' using.icon_state = "camera" using.screen_loc = ui_ai_camera_list - using.layer = 20 + using.layer = 21 adding += using //Track @@ -28,7 +28,7 @@ using.icon = 'icons/mob/screen_ai.dmi' using.icon_state = "track" using.screen_loc = ui_ai_track_with_camera - using.layer = 20 + using.layer = 21 adding += using //Camera light @@ -37,7 +37,7 @@ using.icon = 'icons/mob/screen_ai.dmi' using.icon_state = "camera_light" using.screen_loc = ui_ai_camera_light - using.layer = 20 + using.layer = 21 adding += using //Crew Monitorting @@ -46,7 +46,7 @@ using.icon = 'icons/mob/screen_ai.dmi' using.icon_state = "crew_monitor" using.screen_loc = ui_ai_crew_monitor - using.layer = 20 + using.layer = 21 adding += using //Crew Manifest @@ -55,7 +55,7 @@ using.icon = 'icons/mob/screen_ai.dmi' using.icon_state = "manifest" using.screen_loc = ui_ai_crew_manifest - using.layer = 20 + using.layer = 21 adding += using //Alerts @@ -64,7 +64,7 @@ using.icon = 'icons/mob/screen_ai.dmi' using.icon_state = "alerts" using.screen_loc = ui_ai_alerts - using.layer = 20 + using.layer = 21 adding += using //Announcement @@ -73,7 +73,7 @@ using.icon = 'icons/mob/screen_ai.dmi' using.icon_state = "announcement" using.screen_loc = ui_ai_announcement - using.layer = 20 + using.layer = 21 adding += using //Shuttle @@ -82,7 +82,7 @@ using.icon = 'icons/mob/screen_ai.dmi' using.icon_state = "call_shuttle" using.screen_loc = ui_ai_shuttle - using.layer = 20 + using.layer = 21 adding += using //Laws @@ -91,7 +91,7 @@ using.icon = 'icons/mob/screen_ai.dmi' using.icon_state = "state_laws" using.screen_loc = ui_ai_state_laws - using.layer = 20 + using.layer = 21 adding += using //PDA message @@ -100,7 +100,7 @@ using.icon = 'icons/mob/screen_ai.dmi' using.icon_state = "pda_send" using.screen_loc = ui_ai_pda_send - using.layer = 20 + using.layer = 21 adding += using //PDA log @@ -109,7 +109,7 @@ using.icon = 'icons/mob/screen_ai.dmi' using.icon_state = "pda_receive" using.screen_loc = ui_ai_pda_log - using.layer = 20 + using.layer = 21 adding += using //Take image @@ -118,7 +118,7 @@ using.icon = 'icons/mob/screen_ai.dmi' using.icon_state = "take_picture" using.screen_loc = ui_ai_take_picture - using.layer = 20 + using.layer = 21 adding += using //View images @@ -127,7 +127,7 @@ using.icon = 'icons/mob/screen_ai.dmi' using.icon_state = "view_images" using.screen_loc = ui_ai_view_images - using.layer = 20 + using.layer = 21 adding += using //Medical/Security sensors @@ -136,7 +136,7 @@ using.icon = 'icons/mob/screen_ai.dmi' using.icon_state = "ai_sensor" using.screen_loc = ui_ai_sensor - using.layer = 20 + using.layer = 21 adding += using mymob.client.screen += adding + other From 0f22447ef2f9c7b12798c909d492613549476eb5 Mon Sep 17 00:00:00 2001 From: Ryan784 Date: Wed, 3 Feb 2016 16:00:12 -0500 Subject: [PATCH 05/13] Wizard Bucklecuff Fix #57 If a wizard teleports away while bucklecuffed, the structure they are buckled to will reset. --- code/modules/spells/general/area_teleport.dm | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/code/modules/spells/general/area_teleport.dm b/code/modules/spells/general/area_teleport.dm index 77e1ee47c43..408cc334b51 100644 --- a/code/modules/spells/general/area_teleport.dm +++ b/code/modules/spells/general/area_teleport.dm @@ -54,6 +54,9 @@ return if(user && user.buckled) + var/obj/structure/bed/B = user.buckled + if(B && B.buckled_mob) + B.user_unbuckle_mob(user) user.buckled = null var/attempt = null @@ -82,4 +85,4 @@ else invocation += "[uppertext(chosenarea.name)]" ..() - return \ No newline at end of file + return From 7d579b0d61acf1802215594b9e5bdd9b1508cc84 Mon Sep 17 00:00:00 2001 From: Ryan784 Date: Thu, 4 Feb 2016 11:36:55 -0500 Subject: [PATCH 06/13] Handcuffed interaction #41 Fixes handcuffed characters being able to interact with other players inventories. --- code/modules/mob/living/carbon/human/human.dm | 2 +- code/modules/mob/living/carbon/human/stripping.dm | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index f01f1e98002..5f756dea128 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -224,7 +224,7 @@ /mob/living/carbon/human/show_inv(mob/user as mob) // TODO : Change to incapacitated() on merge. - if(user.stat || user.lying || user.resting || user.buckled || !user.Adjacent(src)) + if(user.stat || user.lying || user.resting || user.buckled || !user.Adjacent(src) || user.restrained()) return var/obj/item/clothing/under/suit = null diff --git a/code/modules/mob/living/carbon/human/stripping.dm b/code/modules/mob/living/carbon/human/stripping.dm index 00a8f8113a1..b8f1c8c9214 100644 --- a/code/modules/mob/living/carbon/human/stripping.dm +++ b/code/modules/mob/living/carbon/human/stripping.dm @@ -4,7 +4,7 @@ return // TODO : Change to incapacitated() on merge. - if(user.stat || user.lying || user.resting || user.buckled || !user.Adjacent(src)) + if(user.stat || user.lying || user.resting || user.buckled || !user.Adjacent(src) || user.restrained()) user << browse(null, text("window=mob[src.name]")) return From a8a0e2cc13031e4715b639e606c4840b2e287e07 Mon Sep 17 00:00:00 2001 From: Ryan784 Date: Thu, 4 Feb 2016 17:55:42 -0500 Subject: [PATCH 07/13] Body Scan Enhancement Once again, body scans will now include the name of the person scanned, instead of simply being "Body scan report". --- code/game/machinery/adv_med.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/game/machinery/adv_med.dm b/code/game/machinery/adv_med.dm index 51e577b596b..bb61a6b03dc 100644 --- a/code/game/machinery/adv_med.dm +++ b/code/game/machinery/adv_med.dm @@ -256,7 +256,7 @@ usr << "\icon[src]The body scanner cannot scan that lifeform." return var/obj/item/weapon/paper/R = new(src.loc) - R.name = "Body scan report" + R.name = "Scan ([occupant])" R.info = format_occupant_data(src.connected.get_occupant_data()) @@ -443,4 +443,4 @@ dat += text("Cataracts detected.
") if(occ["sdisabilities"] & NEARSIGHTED) dat += text("Retinal misalignment detected.
") - return dat \ No newline at end of file + return dat From c310158818214cd391963e36e0b559af1aef1a0f Mon Sep 17 00:00:00 2001 From: Ryan784 Date: Thu, 4 Feb 2016 18:49:43 -0500 Subject: [PATCH 08/13] Cryopod/Sleeper/Scanner/Cryo Cell MouseDrag Enhancement Once again can players use their mouse to drag and drop themselves or others in order to enter sleepers/scanners/cryopods and cryo cells. --- code/game/machinery/Sleeper.dm | 55 ++++++++++++++++++++++++++++ code/game/machinery/adv_med.dm | 24 +++++++++++++ code/game/machinery/cryo.dm | 18 ++++++++++ code/game/machinery/cryopod.dm | 66 ++++++++++++++++++++++++++++++++++ 4 files changed, 163 insertions(+) diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm index 7b272aff879..19c06f9be34 100644 --- a/code/game/machinery/Sleeper.dm +++ b/code/game/machinery/Sleeper.dm @@ -163,6 +163,8 @@ var/amounts = list(5, 10) var/obj/item/weapon/reagent_containers/glass/beaker = null var/filtering = 0 + var/allow_occupant_types = list(/mob/living/carbon/human) + var/disallow_occupant_types = list() use_power = 1 idle_power_usage = 15 @@ -251,6 +253,57 @@ return return + MouseDrop_T(atom/movable/O as mob|obj, mob/user as mob) + if(!check_occupant_allowed(O)) + return + + if(src.occupant) + user << "\blue The sleeper is already occupied!" + return + + for(var/mob/living/carbon/slime/M in range(1,O)) + if(M.Victim == O) + usr << "[O.name] will not fit into the sleeper because they have a slime latched onto their head." + return + + var/mob/living/L = O + if(L == user) + visible_message("[user] starts climbing into the sleeper.", 3) + else + visible_message("[user] starts putting [L.name] into the sleeper.", 3) + if(do_after(user, 20)) + if(src.occupant) + user << "\blue The sleeper is already occupied!" + return + if(!L) return + + if(L.client) + L.client.perspective = EYE_PERSPECTIVE + L.client.eye = src + L.loc = src + src.occupant = L + src.icon_state = (orient == "RIGHT") ? "sleeper_1-r" : "sleeper_1" + L << "\blue You feel cool air surround you. You go numb as your senses turn inward." + src.add_fingerprint(user) + if(user.pulling == L) + user.pulling = null + return + return + + proc/check_occupant_allowed(mob/M) + var/correct_type = 0 + for(var/type in allow_occupant_types) + if(istype(M, type)) + correct_type = 1 + break + + if(!correct_type) return 0 + + for(var/type in disallow_occupant_types) + if(istype(M, type)) + return 0 + + return 1 ex_act(severity) if(filtering) @@ -318,6 +371,8 @@ toggle_filter() if(!src.occupant) return + for(var/obj/O in src) //once again, why wasn't this here? + O.loc = src.loc if(src.occupant.client) src.occupant.client.eye = src.occupant.client.mob src.occupant.client.perspective = MOB_PERSPECTIVE diff --git a/code/game/machinery/adv_med.dm b/code/game/machinery/adv_med.dm index bb61a6b03dc..e7ac271c409 100644 --- a/code/game/machinery/adv_med.dm +++ b/code/game/machinery/adv_med.dm @@ -98,6 +98,30 @@ qdel(G) return +/obj/machinery/bodyscanner/MouseDrop_T(atom/movable/O as mob|obj, mob/user as mob) + if(!ismob(O)) + return + var/mob/M = O + if (src.occupant) + user << "\blue The scanner is already occupied!" + return + if (M.abiotic()) + user << "\blue Subject cannot have abiotic items on." + return + if (M.client) + M.client.perspective = EYE_PERSPECTIVE + M.client.eye = src + M.loc = src + src.occupant = M + update_use_power(2) + src.icon_state = "body_scanner_1" + for(var/obj/Obj in src) + Obj.loc = src.loc + //Foreach goto(154) + src.add_fingerprint(user) + //G = null + return + /obj/machinery/bodyscanner/ex_act(severity) switch(severity) if(1.0) diff --git a/code/game/machinery/cryo.dm b/code/game/machinery/cryo.dm index 0f1b0a2844f..5a9b7b476f8 100644 --- a/code/game/machinery/cryo.dm +++ b/code/game/machinery/cryo.dm @@ -187,9 +187,26 @@ return var/mob/M = G:affecting if(put_mob(M)) + visible_message("[user] puts [M.name] into the cryo cell.", 3) qdel(G) return +/obj/machinery/atmospherics/unary/cryo_cell/MouseDrop_T(atom/movable/O as mob|obj, mob/user as mob) + if(!ismob(O)) + return + var/mob/living/L = O + for(var/mob/living/carbon/slime/M in range(1,L)) + if(M.Victim == L) + usr << "[L.name] will not fit into the cryo because they have a slime latched onto their head." + return + if(put_mob(L)) + if(L == user) + visible_message("[user] climbs into the cryo cell.", 3) + else + visible_message("[user] puts [L.name] into the cryo cell.", 3) + if(user.pulling == L) + user.pulling = null + /obj/machinery/atmospherics/unary/cryo_cell/update_icon() overlays.Cut() icon_state = "pod[on]" @@ -327,6 +344,7 @@ return if (usr.stat != 0) return + visible_message("[usr] climbs into the cryo cell.", 3) put_mob(usr) return diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm index cf6b142ad09..b5600196d84 100644 --- a/code/game/machinery/cryopod.dm +++ b/code/game/machinery/cryopod.dm @@ -452,6 +452,72 @@ //Despawning occurs when process() is called with an occupant without a client. src.add_fingerprint(M) +/obj/machinery/cryopod/MouseDrop_T(atom/movable/O as mob|obj, mob/user as mob) + if(!check_occupant_allowed(O)) + return + + if(occupant) + user << "\The [src] is in use." + return + + var/mob/living/L = O + + if(L.stat == DEAD) + user << "Dead people can not be put into cryo." + return + + for(var/mob/living/carbon/slime/M in range(1,L)) + if(M.Victim == L) + usr << "[L.name] will not fit into the cryo pod because they have a slime latched onto their head." + return + + var/willing = null //We don't want to allow people to be forced into despawning. + + if(L.client) + if(alert(L,"Would you like to enter cryosleep?",,"Yes","No") == "Yes") + if(!L) return + willing = 1 + else + willing = 1 + + if(willing) + if(L == user) + visible_message("[user] starts climbing into the cryo pod.", 3) + else + visible_message("[user] starts putting [L] into the cryo pod.", 3) + + if(do_after(user, 20)) + if(!L) return + + L.loc = src + + if(L.client) + L.client.perspective = EYE_PERSPECTIVE + L.client.eye = src + else + user << "You stop [L == user ? "climbing into the cryo pod." : "putting [L] into the cryo pod."]" + return + + if(orient_right) + icon_state = "[occupied_icon_state]-r" + else + icon_state = occupied_icon_state + + L << "\blue You feel cool air surround you. You go numb as your senses turn inward." + L << "\blue If you ghost, log out or close your client now, your character will shortly be permanently removed from the round." + occupant = L + time_entered = world.time + + // Book keeping! + var/turf/location = get_turf(src) + log_admin("[key_name_admin(L)] has entered a stasis pod.") + message_admins("\blue [key_name_admin(L)] has entered a stasis pod.(JMP)") + + //Despawning occurs when process() is called with an occupant without a client. + src.add_fingerprint(L) + + return + /obj/machinery/cryopod/verb/eject() set name = "Eject Pod" set category = "Object" From b6791cd5af5eac835894faff7d558688cb7312ad Mon Sep 17 00:00:00 2001 From: Ryan784 Date: Thu, 4 Feb 2016 22:33:33 -0500 Subject: [PATCH 09/13] Useful Science Goggles Science goggles will now partially protect against acid! --- code/modules/clothing/glasses/glasses.dm | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/code/modules/clothing/glasses/glasses.dm b/code/modules/clothing/glasses/glasses.dm index 8474d39eea8..c9de540257d 100644 --- a/code/modules/clothing/glasses/glasses.dm +++ b/code/modules/clothing/glasses/glasses.dm @@ -51,11 +51,12 @@ /obj/item/clothing/glasses/science name = "Science Goggles" - desc = "The goggles do nothing!" + desc = "Used to protect your eyes against harmful chemicals!" icon_state = "purple" item_state = "glasses" toggleable = 1 icon_action_button = "action_science" + unacidable = 1 /obj/item/clothing/glasses/science/New() ..() @@ -108,7 +109,7 @@ item_state = "glasses" prescription = 1 body_parts_covered = 0 - + /obj/item/clothing/glasses/regular/scanners name = "Scanning Goggles" desc = "A very oddly shaped pair of goggles with bits of wire poking out the sides. A soft humming sound emanates from it." From d850304ffe37ea15f51654e0a92013108987f182 Mon Sep 17 00:00:00 2001 From: Mahzel Date: Fri, 5 Feb 2016 15:08:12 +0100 Subject: [PATCH 10/13] Update #54 - Form database Form database implementation. Paper bundles update. --- code/game/machinery/requests_console.dm | 179 +++++++++++++++++++++++- code/modules/paperwork/paper.dm | 1 + code/modules/paperwork/paper_bundle.dm | 31 ++-- code/modules/paperwork/paperbin.dm | 25 ++-- 4 files changed, 210 insertions(+), 26 deletions(-) diff --git a/code/game/machinery/requests_console.dm b/code/game/machinery/requests_console.dm index 23aba341697..8467e9f6770 100644 --- a/code/game/machinery/requests_console.dm +++ b/code/game/machinery/requests_console.dm @@ -40,6 +40,7 @@ var/list/obj/machinery/requests_console/allConsoles = list() // 8 = view messages // 9 = authentication before sending // 10 = send announcement + //11 = Form Database var/silent = 0 // set to 1 for it not to beep all the time // var/hackState = 0 // 0 = not hacked @@ -55,6 +56,11 @@ var/list/obj/machinery/requests_console/allConsoles = list() var/dpt = ""; //the department which will be receiving the message var/priority = -1 ; //Priority of the message being sent light_range = 0 + //Form intregration + var/SQLquery + var/paperstock = 10 + var/lid = 0 + //End Form Integration var/datum/announcement/announcement = new /obj/machinery/requests_console/power_change() @@ -203,6 +209,35 @@ var/list/obj/machinery/requests_console/allConsoles = list() dat += text("Announce
"); dat += text("
Back
") + if(11) //form database + dat += text("NanoTrasen Corporate Forms

") + establish_db_connection() + if(!dbcon.IsConnected()) + dat += text("ERROR: Unable to contact external database. Please contact your system administrator for assistance.") + log_game("SQL database connection failed. Attempted to fetch form information.") + else + dat += {""} + + //For reference: + //Command forms, 01xx series + //Security forms, 02xx series + //Medical forms, 03xx series + //Engineer forms, 04xx series + //Science forms, 05xx series + //Supply forms, 06xx series + //General forms, 10xx series + + var/DBQuery/query = dbcon.NewQuery(SQLquery) + query.Execute() + while(query.NextRow()) + var/id = query.item[1] + var/name = query.item[2] + var/department = query.item[3] + dat += "" + dat += "
NCF IDForm NameDept.Print?
NCF-[id][name][department]Print?
" + dat += text("
Reset Search") + dat += text("
Back
") + else //main menu screen = 0 reset_announce() @@ -214,13 +249,22 @@ var/list/obj/machinery/requests_console/allConsoles = list() dat += text("Request Assistance
") dat += text("Request Supplies
") - dat += text("Relay Anonymous Information

") + dat += text("Relay Anonymous Information
") + dat += text("NanoTrasen Corporate Form Database

") if(announcementConsole) dat += text("Send station-wide announcement

") if (silent) dat += text("Speaker OFF") else dat += text("Speaker ON") + if(paperstock) + dat += text("
[paperstock] papers in stock.") + else + dat += text("
No paper in stock.") + if(lid) + dat += text("
Paper container lid OPEN.") + else + dat += text("
Paper container lid CLOSE.") user << browse("[dat]", "window=request_console") onclose(user, "req_console") @@ -326,6 +370,66 @@ var/list/obj/machinery/requests_console/allConsoles = list() for (var/mob/O in hearers(4, src.loc)) O.show_message(text("\icon[src] *The Requests Console beeps: 'NOTICE: No server detected!'")) + if(href_list["sort"]) + var/sortdep = sanitizeSQL(href_list["sort"]) + SQLquery += " WHERE department LIKE '%[sortdep]%'" + screen = 11 + + if(href_list["print"]) + var/printid = sanitizeSQL(href_list["print"]) + establish_db_connection() + + if(!dbcon.IsConnected()) + alert("Connection to the database lost. Aborting.") + if(!printid) + alert("Invalid query. Try again.") + var/DBQuery/query = dbcon.NewQuery("SELECT id, name, data FROM aurora_forms WHERE id=[printid]") + query.Execute() + + while(query.NextRow()) + var/id = query.item[1] + var/name = query.item[2] + var/data = query.item[3] + var/obj/item/weapon/paper/C = new(src.loc) + + //Let's start the BB >> HTML conversion! + + data = html_encode(data) + data = replacetext(data, "\n", "
") + + C.info += data + C.info = C.parsepencode(C.info) + C.updateinfolinks() + C.name = "NFC-[id] - [name]" + paperstock-- + + if(href_list["whatis"]) + var/whatisid = sanitizeSQL(href_list["whatis"]) + establish_db_connection() + if(!dbcon.IsConnected()) + alert("Connection to the database lost. Aborting.") + if(!whatisid) + alert("Invalid query. Try again.") + var/DBQuery/query = dbcon.NewQuery("SELECT id, name, department, info FROM aurora_forms WHERE id=[whatisid]") + query.Execute() + var/dat = "
NanoTrasen Corporate Form
" + while(query.NextRow()) + var/id = query.item[1] + var/name = query.item[2] + var/department = query.item[3] + var/info = query.item[4] + + dat += "NCF-[id]

" + dat += "[name]
" + dat += "[department] Department
" + dat += "[info]" + dat += "
" + usr << browse(dat, "window=Information;size=560x240") + + switch( href_list["setLid"] ) + if(null) //skip + if("1") lid = 1 + else lid = 0 //Handle screen switching switch(text2num(href_list["setScreen"])) @@ -351,6 +455,9 @@ var/list/obj/machinery/requests_console/allConsoles = list() if(10) //send announcement if(!announcementConsole) return screen = 10 + if(11) //form database + SQLquery = "SELECT id, name, department FROM aurora_forms" + screen = 11 else //main menu dpt = "" msgVerified = "" @@ -411,6 +518,76 @@ var/list/obj/machinery/requests_console/allConsoles = list() var/obj/item/weapon/stamp/T = O msgStamped = text("Stamped with the [T.name]") updateUsrDialog() + if (istype(O, /obj/item/weapon/paper_bundle)) + if(lid) //More of that restocking business + var/obj/item/weapon/paper_bundle/C = O + paperstock += C.amount + user.drop_item(C) + del(C) + for (var/mob/U in hearers(4, src.loc)) + U.show_message(text("\icon[src] *The Requests Console beeps: 'Paper added.'")) + else + user << "\blue I should open the lid to add more paper, or try faxing one paper at a time." + if (istype(O, /obj/item/weapon/paper)) + if(lid) //Stocking them papers + var/obj/item/weapon/paper/C = O + user.drop_item(C) + del(C) + paperstock++ + for (var/mob/U in hearers(4, src.loc)) + U.show_message(text("\icon[src] *The Requests Console beeps: 'Paper added.'")) + else if(screen == 0) //Faxing them papers + var/pass = 0 + var/sendto = input("Select department.", "Send Fax", null, null) in allConsoles + for (var/obj/machinery/message_server/MS in world) + if(!MS.active) continue + pass = 1 + if(pass) + var/sent = 0 + for(var/obj/machinery/requests_console/Console in world) + if(Console == sendto) + if(Console.paperstock == 0) + alert("Error! Receiving console out of paper! Aborting!") + return + if(!sent) + sent = 1 + var/obj/item/weapon/paper/C = O + var/obj/item/weapon/paper/P = new /obj/item/weapon/paper(Console.loc) + P.info = "" + var/copied = html_decode(C.info) + copied = replacetext(copied, "" + P.name = C.name + P.fields = C.fields + P.stamps = C.stamps + P.stamped = C.stamped + P.ico = C.ico + P.offset_x = C.offset_x + P.offset_y = C.offset_y + var/list/temp_overlays = C.overlays + var/image/img + for (var/j = 1, j <= temp_overlays.len, j++) + if (findtext(C.ico[j], "cap") || findtext(C.ico[j], "cent")) + img = image('icons/obj/bureaucracy.dmi', "paper_stamp-circle") + else if (findtext(C.ico[j], "deny")) + img = image('icons/obj/bureaucracy.dmi', "paper_stamp-x") + else + img = image('icons/obj/bureaucracy.dmi', "paper_stamp-dots") + img.pixel_x = C.offset_x[j] + img.pixel_y = C.offset_y[j] + P.overlays += img + P.updateinfolinks() + playsound(Console.loc, 'sound/machines/twobeep.ogg', 50, 1) + for (var/mob/player in hearers(4, Console.loc)) + player.show_message(text("\icon[Console] *The Requests Console beeps: 'Fax received'")) + Console.paperstock-- + if(sent == 1) + user.show_message(text("\icon[src] *The Requests Console beeps: 'Message Sent.'")) + else + user.show_message(text("\icon[src] *The Requests Console beeps: 'NOTICE: No server detected!'")) + return /obj/machinery/requests_console/proc/reset_announce() diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index 14079c8a7d2..b495bd94cbb 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -429,6 +429,7 @@ B.pages.Add(src) B.pages.Add(P) + B.amount = 2 B.update_icon() else if(istype(P, /obj/item/weapon/pen)) diff --git a/code/modules/paperwork/paper_bundle.dm b/code/modules/paperwork/paper_bundle.dm index 7da55f1f056..461f4a2fdac 100644 --- a/code/modules/paperwork/paper_bundle.dm +++ b/code/modules/paperwork/paper_bundle.dm @@ -13,7 +13,7 @@ attack_verb = list("bapped") var/page = 1 // current page var/list/pages = list() // Ordered list of pages as they are to be displayed. Can be different order than src.contents. - + var amount = 0 // How many sheet /obj/item/weapon/paper_bundle/attackby(obj/item/weapon/W as obj, mob/user as mob) ..() @@ -24,14 +24,15 @@ user << "Take off the carbon copy first." add_fingerprint(user) return - // adding sheets + // adding sheets if(istype(W, /obj/item/weapon/paper) || istype(W, /obj/item/weapon/photo)) insert_sheet_at(user, pages.len+1, W) - - // burning + amount++ + + // burning else if(istype(W, /obj/item/weapon/flame)) burnpaper(W, user) - + // merging bundles else if(istype(W, /obj/item/weapon/paper_bundle)) user.drop_from_inventory(W) @@ -39,6 +40,7 @@ O.loc = src O.add_fingerprint(usr) pages.Add(O) + amount++ user << "You add \the [W.name] to [(src.name == "paper bundle") ? "the paper bundle" : src.name]." qdel(W) @@ -55,17 +57,16 @@ add_fingerprint(usr) return -/obj/item/weapon/paper_bundle/proc/insert_sheet_at(mob/user, var/index, obj/item/weapon/sheet) +/obj/item/weapon/paper_bundle/proc/insert_sheet_at(mob/user, var/index, obj/item/weapon/sheet) if(istype(sheet, /obj/item/weapon/paper)) user << "You add [(sheet.name == "paper") ? "the paper" : sheet.name] to [(src.name == "paper bundle") ? "the paper bundle" : src.name]." else if(istype(sheet, /obj/item/weapon/photo)) user << "You add [(sheet.name == "photo") ? "the photo" : sheet.name] to [(src.name == "paper bundle") ? "the paper bundle" : src.name]." - + user.drop_from_inventory(sheet) sheet.loc = src - + pages.Insert(index, sheet) - if(index <= page) page++ @@ -150,7 +151,7 @@ if(href_list["next_page"]) if(in_hand && (istype(in_hand, /obj/item/weapon/paper) || istype(in_hand, /obj/item/weapon/photo))) insert_sheet_at(usr, page+1, in_hand) - else if(page != pages.len) + else if(page != pages.len) page++ playsound(src.loc, "pageturn", 50, 1) if(href_list["prev_page"]) @@ -163,20 +164,20 @@ var/obj/item/weapon/W = pages[page] usr.put_in_hands(W) pages.Remove(pages[page]) - + usr << "You remove the [W.name] from the bundle." - + if(pages.len <= 1) var/obj/item/weapon/paper/P = src[1] usr.drop_from_inventory(src) usr.put_in_hands(P) qdel(src) - + return - + if(page > pages.len) page = pages.len - + update_icon() else usr << "You need to hold it in hands!" diff --git a/code/modules/paperwork/paperbin.dm b/code/modules/paperwork/paperbin.dm index 84b01539ade..e2dd24c4a61 100644 --- a/code/modules/paperwork/paperbin.dm +++ b/code/modules/paperwork/paperbin.dm @@ -66,16 +66,21 @@ return -/obj/item/weapon/paper_bin/attackby(obj/item/weapon/paper/i as obj, mob/user as mob) - if(!istype(i)) - return - - user.drop_item() - i.loc = src - user << "You put [i] in [src]." - papers.Add(i) - update_icon() - amount++ +/obj/item/weapon/paper_bin/attackby(obj/item/weapon/O as obj, mob/user as mob) + if(istype(O, /obj/item/weapon/paper)) + var/obj/item/weapon/paper/i = O + user.drop_item() + i.loc = src + user << "You put [i] in [src]." + papers.Add(i) + amount++ + /* if(istype(O, /obj/item/weapon/paper_pack)) WIP written in. + var/obj/item/weapon/paper_bundle/j = O + user.drop_item() + amount += j.amount + user << "You add paper from [j] into [src]." + del(j) + */ /obj/item/weapon/paper_bin/examine(mob/user) From b0d872524b9aa0272ff6df4a21ecf5d52a110d89 Mon Sep 17 00:00:00 2001 From: Mahzel Date: Fri, 5 Feb 2016 18:20:43 +0100 Subject: [PATCH 11/13] fixed filtering forms --- code/game/machinery/requests_console.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/machinery/requests_console.dm b/code/game/machinery/requests_console.dm index 8467e9f6770..50c27d431a8 100644 --- a/code/game/machinery/requests_console.dm +++ b/code/game/machinery/requests_console.dm @@ -372,7 +372,7 @@ var/list/obj/machinery/requests_console/allConsoles = list() if(href_list["sort"]) var/sortdep = sanitizeSQL(href_list["sort"]) - SQLquery += " WHERE department LIKE '%[sortdep]%'" + SQLquery = " Select id, name, department FROM aurora_forms WHERE department LIKE '%[sortdep]%'" screen = 11 if(href_list["print"]) From 8277f9e7799475d1df5d387c8a23164b1dc5274c Mon Sep 17 00:00:00 2001 From: Ryan784 Date: Fri, 5 Feb 2016 15:51:01 -0500 Subject: [PATCH 12/13] BST Import/access for Devs/Admins Bluespace Technicians are back! And better than ever. And by better, I mean exactly the same. Hoorah. --- baystation12.dme | 1 + code/modules/admin/admin_verbs.dm | 10 +- code/modules/admin/verbs/bluespacetech.dm | 456 ++++++++++++++++++++++ 3 files changed, 461 insertions(+), 6 deletions(-) create mode 100644 code/modules/admin/verbs/bluespacetech.dm diff --git a/baystation12.dme b/baystation12.dme index de04cfec400..3143cb39c7c 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -831,6 +831,7 @@ #include "code\modules\admin\verbs\adminsay.dm" #include "code\modules\admin\verbs\antag-ooc.dm" #include "code\modules\admin\verbs\atmosdebug.dm" +#include "code\modules\admin\verbs\bluespacetech.dm" #include "code\modules\admin\verbs\BrokenInhands.dm" #include "code\modules\admin\verbs\buildmode.dm" #include "code\modules\admin\verbs\check_customitem_activity.dm" diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index f7939661719..455a469030e 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -92,7 +92,8 @@ var/list/admin_verbs_admin = list( /client/proc/change_security_level, /client/proc/view_chemical_reaction_logs, /client/proc/makePAI, - /datum/admins/proc/paralyze_mob + /datum/admins/proc/paralyze_mob, + /client/proc/cmd_dev_bst // /datum/admins/proc/send_admin_fax ) var/list/admin_verbs_ban = list( @@ -306,7 +307,6 @@ var/list/admin_verbs_mentor = list( var/list/admin_verbs_dev = list( //will need to be altered - Ryan784 ///datum/admins/proc/restart, /datum/admins/proc/spawn_atom, //allows us to spawn instances, - /datum/admins/proc/delay, /client/proc/Jump, /client/proc/jumptokey, /*allows us to jump to the location of a mob with a certain ckey*/ /client/proc/jumptomob, /*allows us to jump to a specific mob*/ @@ -328,19 +328,17 @@ var/list/admin_verbs_dev = list( //will need to be altered - Ryan784 /client/proc/debug_controller, /client/proc/debug_variables, /client/proc/dsay, - /client/proc/cmd_mod_say, /client/proc/getruntimelog, /client/proc/giveruntimelog, /client/proc/hide_most_verbs, /client/proc/kill_air, /client/proc/kill_airgroup, /client/proc/player_panel, - /client/proc/reload_admins, - /client/proc/reload_mentors, /client/proc/restart_controller, /client/proc/togglebuildmodeself, /client/proc/toggledebuglogs, - /client/proc/ZASSettings + /client/proc/ZASSettings, + /client/proc/cmd_dev_bst ) var/list/admin_verbs_cciaa = list( /client/proc/cmd_admin_pm_panel, /*admin-pm list*/ diff --git a/code/modules/admin/verbs/bluespacetech.dm b/code/modules/admin/verbs/bluespacetech.dm new file mode 100644 index 00000000000..e895f4ffc5c --- /dev/null +++ b/code/modules/admin/verbs/bluespacetech.dm @@ -0,0 +1,456 @@ +/* +// Bluespace Technition and all their items. +// Only avaliable to people with +DEV and +DEVELOPER +// All items are ave canremove = 0 to avoid loos and thefts +// They are invincible. +// Suicide with them to exit in an rp way +// +// I really didn't expect most of this to work right but hey it does. +// - SoundScopes +*/ + +/client/proc/cmd_dev_bst() + set category = "Debug" + set name = "Spawn Bluespace Tech" + set desc = "Spawns a Bluespace Tech to debug stuff" + + if(!check_rights(R_DEV)) return + + if(!holder) + return //how did they get here? + + if(!ticker) + alert("Wait until the game starts") + return + + if(ticker.current_state < GAME_STATE_PLAYING) + src << "\red The game hasn't started yet!" + return + + if(istype(mob, /mob/living)) + if(!holder.original_mob) + holder.original_mob = mob + + //I couldn't get the normal way to work so this works. + //This whole section looks like a hack, I don't like it. + var/T = get_turf(usr) + var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + s.set_up(3, 1, T) + s.start() + var/mob/living/carbon/human/bst/bst = new(get_turf(T)) +// bst.original_mob = usr + bst.anchored = 1 + bst.ckey = usr.ckey + bst.name = "Bluespace Technician" + bst.real_name = "Bluespace Technician" + bst.voice_name = "Bluespace Technician" + bst.h_style = "Crewcut" + + //Items + var/obj/item/clothing/under/U = new /obj/item/clothing/under/rank/centcom_officer/bst(bst) + bst.equip_to_slot_or_del(U, slot_w_uniform) + bst.equip_to_slot_or_del(new /obj/item/device/radio/headset/ert/bst(bst), slot_l_ear) + bst.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/holding/bst(bst), slot_back) + bst.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(bst.back), slot_in_backpack) + bst.equip_to_slot_or_del(new /obj/item/clothing/shoes/black/bst(bst), slot_shoes) + bst.equip_to_slot_or_del(new /obj/item/clothing/head/beret(bst), slot_head) + bst.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses/bst(bst), slot_glasses) + bst.equip_to_slot_or_del(new /obj/item/weapon/storage/belt/utility/full(bst), slot_belt) + bst.equip_to_slot_or_del(new /obj/item/clothing/gloves/swat/bst(bst), slot_gloves) + if(bst.backbag == 1) + bst.equip_to_slot_or_del(new /obj/item/weapon/storage/box/ids(bst), slot_r_hand) + else + bst.equip_to_slot_or_del(new /obj/item/weapon/storage/box/ids(bst.back), slot_in_backpack) + bst.equip_to_slot_or_del(new /obj/item/device/t_scanner(bst.back), slot_in_backpack) + bst.equip_to_slot_or_del(new /obj/item/device/pda/captain/bst(bst.back), slot_in_backpack) + bst.equip_to_slot_or_del(new /obj/item/device/multitool(bst.back), slot_in_backpack) + + var/obj/item/weapon/storage/box/pills = new /obj/item/weapon/storage/box + pills.name = "adminordrazine" + for(var/i = 1, i < 12, i++) + new /obj/item/weapon/reagent_containers/pill/adminordrazine(pills) + bst.equip_to_slot_or_del(pills, slot_in_backpack) + + //Implant because access + bst.implant_loyalty(bst,TRUE) + + //Sort out ID + var/obj/item/weapon/card/id/bst/id = new/obj/item/weapon/card/id/bst(bst) + id.registered_name = bst.real_name + id.assignment = "Bluespace Technician" + id.name = "[id.assignment]" + bst.equip_to_slot_or_del(id, slot_wear_id) + bst.update_inv_wear_id() + bst.regenerate_icons() + + //Add the rest of the languages + //Because universal speak doesn't work right. + bst.add_language("Sinta'unathi") + bst.add_language("Siik'Maas") + bst.add_language("Skrellian") + bst.add_language("Vox-pidgin") + bst.add_language("Rootspeak") + bst.add_language("Ceti Basic") + bst.add_language("Sol Common") + bst.add_language("Tradeband") + bst.add_language("Gutter") + bst.add_language("Sini") + bst.add_language("Sign language") + bst.add_language("Xenomorph") + bst.add_language("Hivemind") + bst.add_language("Changeling") + bst.add_language("Cortical Link") + bst.add_language("Robot Talk") + bst.add_language("Drone Talk") + + spawn(5) + s.start() + bst.anchored = 0 + spawn(10) + qdel(s) + log_debug("Bluespace Tech Spawned: X:[bst.x] Y:[bst.y] Z:[bst.z] User:[src]") + + feedback_add_details("admin_verb","BST") + return 1 + +/mob/living/carbon/human/bst + universal_understand = 1 + status_flags = GODMODE + + can_inject(var/mob/user, var/error_msg, var/target_zone) + user << "The [src] disarms you before you can inject them." + user.drop_item() + return 0 + + binarycheck() + return 1 + + suicide() + if(key && species.name != "Human") + switch(species.name) + if("Tajaran") + bsc() + if("Machine") + bsb() + if("Diona") + bsd() + if("Unathi") + bsu() + if("Skrell") + bss() + return + + src.custom_emote(1,"presses a button on their suit, followed by a polite bow.") + spawn(10) + var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + s.set_up(5, 1, src) + s.start() + spawn(5) + qdel(s) + if(key) + if(client.holder && client.holder.original_mob) + client.holder.original_mob.key = key + else + var/mob/dead/observer/ghost = new(src) //Transfer safety to observer spawning proc. + ghost.key = key + ghost.mind.name = "[ghost.key] BSTech" + ghost.name = "[ghost.key] BSTech" + ghost.real_name = "[ghost.key] BSTech" + ghost.voice_name = "[ghost.key] BSTech" + qdel(src) + return + + proc/bsc() //because we all have our unrealistic snowflakes right? + if(set_species("Tajaran")) + h_style = "Tajaran Ears" + name = "Bluespace Cat" + voice_name = "Bluespace Cat" + real_name = "Bluespace Cat" + mind.name = "Bluespace Cat" + if(wear_id) + var/obj/item/weapon/card/id/id = wear_id + if(istype(wear_id, /obj/item/device/pda)) + var/obj/item/device/pda/pda = wear_id + id = pda.id + id.registered_name = "Bluespace Cat" + gender = "female" + regenerate_icons() + else + ghostize(0) + key = null + suicide() + + proc/bsb() + if(set_species("Machine")) + h_style = "blue IPC screen" + name = "Bluespace Bot" + voice_name = "Bluespace Bot" + real_name = "Bluespace Bot" + mind.name = "Bluespace Bot" + if(wear_id) + var/obj/item/weapon/card/id/id = wear_id + if(istype(wear_id, /obj/item/device/pda)) + var/obj/item/device/pda/pda = wear_id + id = pda.id + id.registered_name = "Bluespace Bot" + regenerate_icons() + else + ghostize(0) + key = null + suicide() + + proc/bsd() + if(set_species("Diona")) + name = "Bluespace Tree" + voice_name = "Bluespace Tree" + real_name = "Bluespace Tree" + mind.name = "Bluespace Tree" + if(wear_id) + var/obj/item/weapon/card/id/id = wear_id + if(istype(wear_id, /obj/item/device/pda)) + var/obj/item/device/pda/pda = wear_id + id = pda.id + id.registered_name = "Bluespace Tree" + regenerate_icons() + else + ghostize(0) + key = null + suicide() + + proc/bsu() + if(set_species("Unathi")) + h_style = "Unathi Horns" + name = "Bluespace Snake" + voice_name = "Bluespace Snake" + real_name = "Bluespace Snake" + mind.name = "Bluespace Snake" + if(wear_id) + var/obj/item/weapon/card/id/id = wear_id + if(istype(wear_id, /obj/item/device/pda)) + var/obj/item/device/pda/pda = wear_id + id = pda.id + id.registered_name = "Bluespace Snake" + regenerate_icons() + else + ghostize(0) + key = null + suicide() + + proc/bss() + if(set_species("Skrell")) + h_style = "Skrell Male Tentacles" + name = "Bluespace Squid" + voice_name = "Bluespace Squid" + real_name = "Bluespace Squid" + mind.name = "Bluespace Squid" + if(wear_id) + var/obj/item/weapon/card/id/id = wear_id + if(istype(wear_id, /obj/item/device/pda)) + var/obj/item/device/pda/pda = wear_id + id = pda.id + id.registered_name = "Bluespace Squid" + gender = "female" + regenerate_icons() + else + ghostize(0) + key = null + suicide() + + say(var/message) + var/verb = "says in a subdued tone" + ..(message, verb) + + verb/bstwalk() + set name = "Ruin Everything" + set desc = "Uses bluespace technology to phase through solid matter and also move fast." + set category = "BST" + set popup_menu = 0 + + if(!src.incorporeal_move) + src.incorporeal_move = 2 + src << "\blue You will now phase through solid matter." + else + src.incorporeal_move = 0 + src << "\blue You will no-longer phase through solid matter." + return + + verb/bstrecover() + set name = "Rejuv" + set desc = "Use the bluespace within you to restore your health" + set category = "BST" + set popup_menu = 0 + + src.revive() + + verb/bstawake() + set name = "Wake up" + set desc = "This is a quick fix to the reloging sleep bug" + set category = "BST" + set popup_menu = 0 + + src.sleeping = 0 + + verb/bstquit() + set name = "Teleport out" + set desc = "Activate bluespace to leave (and return to your original mob(if you have one))" + set category = "BST" + + var/client/C = src.client + if(C.holder && C.holder.original_mob) + if(C.holder.original_mob.key)//Thanks for kicking Tish off the Server Meow, wouldn't have spotted this otherwise. + suicide() + return + + C.holder.original_mob.key = key + C.holder.original_mob = null + suicide() + +//Equipment. All should have canremove set to 0 +//All items with a /bst need the attack_hand() proc overrided to stop people getting overpowered items. + +//Bag o Holding +/obj/item/weapon/storage/backpack/holding/bst + canremove = 0 + storage_slots = 56 + max_w_class = 400 + + attack_hand() + if(!usr) + return + if(!istype(usr, /mob/living/carbon/human/bst)) + usr << "Your hand seems to go right through the [src]. It's like it doesn't exist." + return + else + ..() + +//Headset +/obj/item/device/radio/headset/ert/bst + name = "Bluespace Technician's headset" + desc = "Bluespace Technician's headset, 'BST' marked on the side." + translate_binary = 1 + translate_hive = 1 + canremove = 0 + keyslot1 = new /obj/item/device/encryptionkey/binary + keyslot2 = new /obj/item/device/encryptionkey/ert + + attack_hand() + if(!usr) + return + if(!istype(usr, /mob/living/carbon/human/bst)) + usr << "Your hand seems to go right through the [src]. It's like it doesn't exist." + return + else + ..() + +//Clothes +/obj/item/clothing/under/rank/centcom_officer/bst + name = "Bluespace Technician's Uniform" + desc = "Bluespace Technician's Uniform, there is a logo on the sleve, it reads 'BST'." + has_sensor = 0 + sensor_mode = 0 + canremove = 0 + siemens_coefficient = 0 + cold_protection = FULL_BODY + heat_protection = FULL_BODY + + attack_hand() + if(!usr) + return + if(!istype(usr, /mob/living/carbon/human/bst)) + usr << "Your hand seems to go right through the [src]. It's like it doesn't exist." + return + else + ..() + +//Gloves +/obj/item/clothing/gloves/swat/bst + name = "Bluespace Technician's gloves" + desc = "A pair of modified gloves, 'BST' marked on the side." + siemens_coefficient = 0 + permeability_coefficient = 0 + canremove = 0 + + attack_hand() + if(!usr) + return + if(!istype(usr, /mob/living/carbon/human/bst)) + usr << "Your hand seems to go right through the [src]. It's like it doesn't exist." + return + else + ..() + +//Sunglasses +/obj/item/clothing/glasses/sunglasses/bst + name = "Bluespace Technician's Glasses" + desc = "A pair of sunglasses, these look modified, 'BST' marked on the side." +// var/list/obj/item/clothing/glasses/hud/health/hud = null + vision_flags = (SEE_TURFS|SEE_OBJS|SEE_MOBS) + canremove = 0 +/* New() + ..() + src.hud += new/obj/item/clothing/glasses/hud/security(src) + src.hud += new/obj/item/clothing/glasses/hud/health(src) + return +*/ + attack_hand() + if(!usr) + return + if(!istype(usr, /mob/living/carbon/human/bst)) + usr << "Your hand seems to go right through the [src]. It's like it doesn't exist." + return + else + ..() + +//Shoes +/obj/item/clothing/shoes/black/bst + name = "Bluespace Technician's shoes" + name = "Bluespace Technician's shoes, 'BST' marked on the side." + icon_state = "black" + desc = "A pair of black shoes. 'BST' marked on the side." + flags = NOSLIP + canremove = 0 + + attack_hand() + if(!usr) + return + if(!istype(usr, /mob/living/carbon/human/bst)) + usr << "Your hand seems to go right through the [src]. It's like it doesn't exist." + return + else + ..() + + return 1 //Because Bluespace + +//ID +/obj/item/weapon/card/id/bst + icon_state = "centcom" + desc = "An ID straight from Cent. Com, this one looks highly classified" +// canremove = 0 + New() + access = get_all_accesses()+get_all_centcom_access()+get_all_syndicate_access() + + attack_hand() + if(!usr) + return + if(!istype(usr, /mob/living/carbon/human/bst)) + usr << "Your hand seems to go right through the [src] ID. It's like it doesn't exist." + return + else + ..() + +/obj/item/device/pda/captain/bst + hidden = 1 + message_silent = 1 +// ttone = "DO SOMETHING HERE" + + attack_hand() + if(!usr) + return + if(!istype(usr, /mob/living/carbon/human/bst)) + usr << "Your hand seems to go right through the pda. It's like it doesn't exist." + return + else + ..() + +/mob/living/carbon/human/bst/restrained() + return 0 From 0143439a2213d1d2e644dd822dec798459a26b14 Mon Sep 17 00:00:00 2001 From: Ryan784 Date: Fri, 5 Feb 2016 16:19:44 -0500 Subject: [PATCH 13/13] BST Update 1.0 Gave Admins their flag because they would whine otherwise. --- code/modules/admin/verbs/bluespacetech.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/admin/verbs/bluespacetech.dm b/code/modules/admin/verbs/bluespacetech.dm index e895f4ffc5c..e7f74e47877 100644 --- a/code/modules/admin/verbs/bluespacetech.dm +++ b/code/modules/admin/verbs/bluespacetech.dm @@ -14,7 +14,7 @@ set name = "Spawn Bluespace Tech" set desc = "Spawns a Bluespace Tech to debug stuff" - if(!check_rights(R_DEV)) return + if(!check_rights(R_DEV|R_ADMIN)) return if(!holder) return //how did they get here? @@ -70,7 +70,7 @@ for(var/i = 1, i < 12, i++) new /obj/item/weapon/reagent_containers/pill/adminordrazine(pills) bst.equip_to_slot_or_del(pills, slot_in_backpack) - + //Implant because access bst.implant_loyalty(bst,TRUE)