From 13ef3af7d2e5462d10ad575003f50632444577a5 Mon Sep 17 00:00:00 2001 From: Markolie Date: Sun, 23 Aug 2015 22:32:25 +0200 Subject: [PATCH] Let players modify access of individual turrets --- .../game/machinery/computer/communications.dm | 3 + code/game/machinery/portable_turret.dm | 71 +++++++++--- nano/templates/turret_control.tmpl | 101 ++++++++++++------ 3 files changed, 127 insertions(+), 48 deletions(-) diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm index 189338e14e9..19412baf4ae 100644 --- a/code/game/machinery/computer/communications.dm +++ b/code/game/machinery/computer/communications.dm @@ -86,6 +86,9 @@ var/shuttle_call/shuttle_calls[0] return 1 if(href_list["login"]) + if(!ishuman(usr)) + usr << "Access denied." + return var/mob/living/carbon/human/M = usr var/obj/item/card = M.get_active_hand() var/obj/item/weapon/card/id/I = (card && card.GetID())||M.wear_id||M.wear_pda diff --git a/code/game/machinery/portable_turret.dm b/code/game/machinery/portable_turret.dm index 0b7907eb88f..992c5f4b37d 100644 --- a/code/game/machinery/portable_turret.dm +++ b/code/game/machinery/portable_turret.dm @@ -54,6 +54,9 @@ var/wrenching = 0 var/last_target //last target fired at, prevents turrets from erratically firing at all valid targets in range + var/screen = 0 // Screen 0: main control, screen 1: access levels + var/one_access = 0 // Determines if access control is set to req_one_access or req_access + /obj/machinery/porta_turret/centcom enabled = 0 ailock = 1 @@ -74,7 +77,8 @@ if(req_access && req_access.len) req_access.Cut() req_one_access = list(access_security, access_heads) - + one_access = 1 + //Sets up a spark system spark_system = new /datum/effect/effect/system/spark_spread spark_system.set_up(5, 0, src) @@ -87,6 +91,7 @@ if(req_one_access && req_one_access.len) req_one_access.Cut() req_access = list(access_cent_specops) + one_access = 0 /obj/machinery/porta_turret/proc/setup() var/obj/item/weapon/gun/energy/E = installation //All energy-based weapons are applicable @@ -106,16 +111,9 @@ iconholder = 1 eprojectile = /obj/item/projectile/beam -// if(/obj/item/weapon/gun/energy/laser/practice/sc_laser) -// iconholder = 1 -// eprojectile = /obj/item/projectile/beam - if(/obj/item/weapon/gun/energy/laser/retro) iconholder = 1 -// if(/obj/item/weapon/gun/energy/retro/sc_retro) -// iconholder = 1 - if(/obj/item/weapon/gun/energy/laser/captain) iconholder = 1 @@ -198,6 +196,7 @@ var/list/turret_icons /obj/machinery/porta_turret/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) var/data[0] data["access"] = !isLocked(user) + data["screen"] = screen data["locked"] = locked data["enabled"] = enabled data["is_lethal"] = 1 @@ -212,10 +211,23 @@ var/list/turret_icons settings[++settings.len] = list("category" = "Check Access Authorization", "setting" = "check_access", "value" = check_access) settings[++settings.len] = list("category" = "Check Misc. Lifeforms", "setting" = "check_anomalies", "value" = check_anomalies) data["settings"] = settings - + + data["one_access"] = one_access + var/accesses[0] + var/list/access_list = get_all_accesses() + for (var/access in access_list) + var/name = get_access_desc(access) + var/active + if(one_access) + active = (access in req_one_access) + else + active = (access in req_access) + accesses[++accesses.len] = list("name" = name, "active" = active, "number" = access) + data["accesses"] = accesses + ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) - ui = new(user, src, ui_key, "turret_control.tmpl", "Turret Controls", 500, 300) + ui = new(user, src, ui_key, "turret_control.tmpl", "Turret Controls", 500, 320) ui.set_initial_data(data) ui.open() ui.set_auto_update(1) @@ -246,6 +258,8 @@ var/list/turret_icons var/value = text2num(href_list["value"]) if(href_list["command"] == "enable") enabled = value + else if(href_list["command"] == "screen") + screen = value else if(href_list["command"] == "lethal") lethal = value else if(href_list["command"] == "check_synth") @@ -261,8 +275,40 @@ var/list/turret_icons else if(href_list["command"] == "check_anomalies") check_anomalies = value - return 1 + if(href_list["one_access"]) + toggle_one_access(href_list["one_access"]) + + if(href_list["access"]) + toggle_access(href_list["access"]) + return 1 + +/obj/machinery/porta_turret/proc/toggle_one_access(var/access) + one_access = text2num(access) + + if(one_access == 1) + req_one_access = req_access.Copy() + req_access.Cut() + else if(one_access == 0) + req_access = req_one_access.Copy() + req_one_access.Cut() + +/obj/machinery/porta_turret/proc/toggle_access(var/access) + var/required = text2num(access) + if(!(required in get_all_accesses())) + return + + if(one_access) + if((required in req_one_access)) + req_one_access -= required + else + req_one_access += required + else + if((required in req_access)) + req_access -= required + else + req_access += required + /obj/machinery/porta_turret/power_change() if(powered()) stat &= ~NOPOWER @@ -325,8 +371,7 @@ var/list/turret_icons update_icon() wrenching = 0 - else if(istype(I, /obj/item/weapon/card/id)||istype(I, /obj/item/device/pda)) - //Behavior lock/unlock mangement + else if(istype(I, /obj/item/weapon/card/id) || istype(I, /obj/item/device/pda)) if(allowed(user)) locked = !locked user << "Controls are now [locked ? "locked" : "unlocked"]." diff --git a/nano/templates/turret_control.tmpl b/nano/templates/turret_control.tmpl index af506ea1b24..25e3c2a592c 100644 --- a/nano/templates/turret_control.tmpl +++ b/nano/templates/turret_control.tmpl @@ -1,41 +1,72 @@
-
- Behaviour controls are {{:data.locked ? "locked" : "unlocked"}}. -
+ Behaviour controls are {{:data.locked ? "locked" : "unlocked"}}.

{{if data.access}} -
-
- Turret Status: + {{if !data.screen}} +
+
+ Turret Status: +
+
+ {{:helper.link('Enabled', null, {'command' : 'enable', 'value' : 1}, data.enabled ?'redButton' : null)}} + {{:helper.link('Disabled',null, {'command' : 'enable', 'value' : 0}, !data.enabled ? 'selected' : null)}} +
+
+ {{if data.accesses}} +
+
+ Required Access: +
+
+ {{:helper.link('Modify', null, {'command' : 'screen', 'value' : 1})}} +
+
+ {{/if}} + {{if data.is_lethal}} +
+
+ Lethal Mode: +
+
+ {{:helper.link('On', null, {'command' : 'lethal', 'value' : 1}, data.lethal ?'redButton' : null)}} + {{:helper.link('Off',null, {'command' : 'lethal', 'value' : 0}, !data.lethal ? 'selected' : null)}} +
+
+ {{/if}} + + {{for data.settings}} +
+
+ {{:value.category}} +
+
+ {{:helper.link('On', null, {'command' : value.setting, 'value' : 1}, value.value ? 'selected' : null)}} + {{:helper.link('Off',null, {'command' : value.setting, 'value' : 0}, !value.value ? 'selected' : null)}} +
+
+ {{/for}} + {{else}} +
+
+ Turret Settings: +
+
+ {{:helper.link('Modify', null, {'command' : 'screen', 'value' : 0})}} +
-
- {{:helper.link('Enabled', null, {'command' : 'enable', 'value' : 1}, data.enabled ?'redButton' : null)}} - {{:helper.link('Disabled',null, {'command' : 'enable', 'value' : 0}, !data.enabled ? 'selected' : null)}} -
-
- - {{if data.is_lethal}} -
-
- Lethal Mode: -
-
- {{:helper.link('On', null, {'command' : 'lethal', 'value' : 1}, data.lethal ?'redButton' : null)}} - {{:helper.link('Off',null, {'command' : 'lethal', 'value' : 0}, !data.lethal ? 'selected' : null)}} -
-
- {{/if}} - - {{for data.settings}} -
-
- {{:value.category}} -
-
- {{:helper.link('On', null, {'command' : value.setting, 'value' : 1}, value.value ? 'selected' : null)}} - {{:helper.link('Off',null, {'command' : value.setting, 'value' : 0}, !value.value ? 'selected' : null)}} -
-
- {{/for}} +
+
+ Access Type: +
+
+ {{:helper.link('All', null, {'one_access' : 0}, !data.one_access ? 'selected' : null)}} + {{:helper.link('One', null, {'one_access' : 1}, data.one_access ? 'selected' : null)}} +
+
+

Select Access

+ {{for data.accesses}} + {{:helper.link(value.name, null, {'access' : value.number}, null, value.active ? 'selected' : null)}} + {{/for}} + {{/if}} {{/if}}