Merge remote-tracking branch 'upstream/dev-freeze' into dev

This commit is contained in:
PsiOmegaDelta
2015-06-04 08:20:00 +02:00
27 changed files with 154 additions and 119 deletions

View File

@@ -130,7 +130,7 @@
var/total_specific_power = 0 //the power required to remove one mole of filterable gas
for (var/g in filtering)
var/ratio = source.gas[g]/total_filterable_moles //this converts the specific power per mole of pure gas to specific power per mole of scrubbed gas
total_specific_power = specific_power_gas[g]*ratio
total_specific_power += specific_power_gas[g]*ratio
//Figure out how much of each gas to filter
if (isnull(total_transfer_moles))

View File

@@ -85,6 +85,9 @@ obj/machinery/atmospherics/proc/check_connect_types(obj/machinery/atmospherics/a
return node.pipe_color
/obj/machinery/atmospherics/process()
last_flow_rate = 0
last_power_draw = 0
build_network()
/obj/machinery/atmospherics/proc/network_expand(datum/pipe_network/new_network, obj/machinery/atmospherics/pipe/reference)

View File

@@ -17,6 +17,7 @@
var/frequency = 1439
var/datum/radio_frequency/radio_connection
var/hibernate = 0 //Do we even process?
var/scrubbing = 1 //0 = siphoning, 1 = scrubbing
var/list/scrubbing_gas = list("carbon_dioxide")
@@ -126,8 +127,8 @@
/obj/machinery/atmospherics/unary/vent_scrubber/process()
..()
last_power_draw = 0
last_flow_rate = 0
if (hibernate)
return 1
if (!node)
use_power = 0
@@ -149,6 +150,12 @@
power_draw = pump_gas(src, environment, air_contents, transfer_moles, power_rating)
if(scrubbing && power_draw < 0 && controller_iteration > 10) //99% of all scrubbers
//Fucking hibernate because you ain't doing shit.
hibernate = 1
spawn(rand(100,200)) //hibernate for 10 or 20 seconds randomly
hibernate = 0
if (power_draw >= 0)
last_power_draw = power_draw
use_power(power_draw)

View File

@@ -7,6 +7,8 @@ var/list/directory = list() //list of all ckeys with associated client
var/global/list/player_list = list() //List of all mobs **with clients attached**. Excludes /mob/new_player
var/global/list/mob_list = list() //List of all mobs, including clientless
var/global/list/human_mob_list = list() //List of all human mobs and sub-types, including clientless
var/global/list/silicon_mob_list = list() //List of all silicon mobs, including clientless
var/global/list/living_mob_list = list() //List of all alive mobs, including clientless. Excludes /mob/new_player
var/global/list/dead_mob_list = list() //List of all dead mobs, including clientless. Excludes /mob/new_player

View File

@@ -11,3 +11,9 @@
/proc/isfloor(turf/T)
return (istype(T, /turf/simulated/floor) || istype(T, /turf/unsimulated/floor) || istype(T, /turf/simulated/shuttle/floor))
/proc/turf_clear(turf/T)
for(var/atom/A in T)
if(A.simulated)
return 0
return 1

View File

@@ -444,6 +444,8 @@ Turf and target are seperate in case you want to teleport some distance from a t
/proc/sortmobs()
var/list/moblist = list()
var/list/sortmob = sortAtom(mob_list)
for(var/mob/eye/M in sortmob)
moblist.Add(M)
for(var/mob/living/silicon/ai/M in sortmob)
moblist.Add(M)
for(var/mob/living/silicon/pai/M in sortmob)

View File

@@ -55,19 +55,11 @@
qdel(src)
return
if(!stored_computer.manipulating)
stored_computer.manipulating = 1
stored_computer.loc = loc
stored_computer.stat &= ~MAINT
stored_computer.update_icon()
loc = null
usr << "You open \the [src]."
spawn(5)
stored_computer.manipulating = 0
qdel(src)
else
usr << "\red You are already opening the computer!"
stored_computer.loc = loc
stored_computer.stat &= ~MAINT
stored_computer.update_icon()
loc = stored_computer
usr << "You open \the [src]."
AltClick()
@@ -82,12 +74,10 @@
if(stored_computer)
stored_computer.eject_id()
/obj/machinery/computer3/laptop/verb/eject_id()
set category = "Object"
set name = "Eject ID Card"
set src in oview(1)
var/obj/item/part/computer/cardslot/C = locate() in src.contents
if(!C)
@@ -104,7 +94,7 @@
return
usr << "You remove [card] from the laptop."
C.remove(card)
C.remove(4)
/obj/machinery/computer3/laptop
@@ -117,7 +107,6 @@
pixel_y = -3
show_keyboard = 0
var/manipulating = 0 // To prevent disappearing bug
var/obj/item/device/laptop/portable = null
New(var/L, var/built = 0)
@@ -157,12 +146,11 @@
portable=new
portable.stored_computer = src
if(!manipulating)
portable.loc = loc
loc = portable
stat |= MAINT
if(user)
user << "You close \the [src]."
portable.loc = loc
loc = portable
stat |= MAINT
if(user)
user << "You close \the [src]."
auto_use_power()
if(stat&MAINT)

View File

@@ -393,9 +393,9 @@
occupant.ckey = null
//Make an announcement and log the person entering storage.
control_computer.frozen_crew += "[occupant.real_name]"
control_computer.frozen_crew += "[occupant.real_name], [occupant.mind.assigned_role] - [worldtime2text()]"
announce.autosay("[occupant.real_name] [on_store_message]", "[on_store_name]")
announce.autosay("[occupant.real_name], [occupant.mind.assigned_role] [on_store_message]", "[on_store_name]")
visible_message("<span class='notice'>\The [initial(name)] hums and hisses as it moves [occupant.real_name] into storage.</span>", 3)
// Delete the mob.

View File

@@ -24,7 +24,7 @@
desc = "It's just an ordinary box."
icon_state = "box"
item_state = "syringe_kit"
var/foldable = null // BubbleWrap - if set, can be folded (when empty) into a sheet of cardboard
var/foldable = /obj/item/stack/material/cardboard // BubbleWrap - if set, can be folded (when empty) into a sheet of cardboard
// BubbleWrap - A box can be folded up to make card
/obj/item/weapon/storage/box/attack_self(mob/user as mob)
@@ -598,7 +598,6 @@
icon_state = "light"
desc = "This box is shaped on the inside so that only light tubes and bulbs fit."
item_state = "syringe_kit"
foldable = /obj/item/stack/material/cardboard //BubbleWrap
storage_slots=21
can_hold = list(/obj/item/weapon/light/tube, /obj/item/weapon/light/bulb)
max_storage_space = 42 //holds 21 items of w_class 2

View File

@@ -1236,7 +1236,7 @@ var/global/floorIsLava = 0
if(!ai_number)
usr << "<b>No AIs located</b>" //Just so you know the thing is actually working and not just ignoring you.
/datum/admins/proc/show_skills(var/mob/living/carbon/human/M as mob in world)
/datum/admins/proc/show_skills()
set category = "Admin"
set name = "Show Skills"
@@ -1246,6 +1246,9 @@ var/global/floorIsLava = 0
usr << "Error: you are not an admin!"
return
var/mob/living/carbon/human/M = input("Select mob.", "Select mob.") as null|anything in human_mob_list
if(!M) return
show_skill_window(usr, M)
return

View File

@@ -711,66 +711,70 @@ var/list/admin_verbs_mentor = list(
if(holder)
src.holder.output_ai_laws()
/client/proc/rename_silicon(mob/living/silicon/S in mob_list)
/client/proc/rename_silicon()
set name = "Rename Silicon"
set category = "Admin"
if(!istype(S))
return
if(!check_rights(R_ADMIN)) return
if(holder)
var/new_name = sanitizeSafe(input(src, "Enter new name. Leave blank or as is to cancel.", "Enter new silicon name", S.real_name))
if(new_name && new_name != S.real_name)
admin_log_and_message_admins("has renamed the silicon '[S.real_name]' to '[new_name]'")
S.SetName(new_name)
var/mob/living/silicon/S = input("Select silicon.", "Rename Silicon.") as null|anything in silicon_mob_list
if(!S) return
var/new_name = sanitizeSafe(input(src, "Enter new name. Leave blank or as is to cancel.", "[S.real_name] - Enter new silicon name", S.real_name))
if(new_name && new_name != S.real_name)
admin_log_and_message_admins("has renamed the silicon '[S.real_name]' to '[new_name]'")
S.SetName(new_name)
feedback_add_details("admin_verb","RAI") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/manage_silicon_laws(mob/living/silicon/S in mob_list)
/client/proc/manage_silicon_laws()
set name = "Manage Silicon Laws"
set category = "Admin"
if(!istype(S))
return
if(!check_rights(R_ADMIN)) return
if(holder)
var/obj/nano_module/law_manager/L = new(S)
L.ui_interact(usr, state = admin_state)
var/mob/living/silicon/S = input("Select silicon.", "Manage Silicon Laws") as null|anything in silicon_mob_list
if(!S) return
var/obj/nano_module/law_manager/L = new(S)
L.ui_interact(usr, state = admin_state)
admin_log_and_message_admins("has opened [S]'s law manager.")
feedback_add_details("admin_verb","MSL") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/change_human_appearance_admin(mob/living/carbon/human/H in world)
/client/proc/change_human_appearance_admin()
set name = "Change Mob Appearance - Admin"
set desc = "Allows you to change the mob appearance"
set category = "Admin"
if(!istype(H))
return
if(!check_rights(R_FUN)) return
if(holder)
admin_log_and_message_admins("is altering the appearance of [H].")
H.change_appearance(APPEARANCE_ALL, usr, usr, check_species_whitelist = 0, state = admin_state)
var/mob/living/carbon/human/H = input("Select mob.", "Change Mob Appearance - Admin") as null|anything in human_mob_list
if(!H) return
admin_log_and_message_admins("is altering the appearance of [H].")
H.change_appearance(APPEARANCE_ALL, usr, usr, check_species_whitelist = 0, state = admin_state)
feedback_add_details("admin_verb","CHAA") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/change_human_appearance_self(mob/living/carbon/human/H in mob_list)
/client/proc/change_human_appearance_self()
set name = "Change Mob Appearance - Self"
set desc = "Allows the mob to change its appearance"
set category = "Admin"
if(!istype(H))
return
if(!check_rights(R_FUN)) return
var/mob/living/carbon/human/H = input("Select mob.", "Change Mob Appearance - Self") as null|anything in human_mob_list
if(!H) return
if(!H.client)
usr << "Only mobs with clients can alter their own appearance."
return
if(holder)
switch(alert("Do you wish for [H] to be allowed to select non-whitelisted races?","Alter Mob Appearance","Yes","No","Cancel"))
if("Yes")
admin_log_and_message_admins("has allowed [H] to change \his appearance, without whitelisting of races.")
H.change_appearance(APPEARANCE_ALL, H.loc, check_species_whitelist = 0)
if("No")
admin_log_and_message_admins("has allowed [H] to change \his appearance, with whitelisting of races.")
H.change_appearance(APPEARANCE_ALL, H.loc, check_species_whitelist = 1)
switch(alert("Do you wish for [H] to be allowed to select non-whitelisted races?","Alter Mob Appearance","Yes","No","Cancel"))
if("Yes")
admin_log_and_message_admins("has allowed [H] to change \his appearance, without whitelisting of races.")
H.change_appearance(APPEARANCE_ALL, H.loc, check_species_whitelist = 0)
if("No")
admin_log_and_message_admins("has allowed [H] to change \his appearance, with whitelisting of races.")
H.change_appearance(APPEARANCE_ALL, H.loc, check_species_whitelist = 1)
feedback_add_details("admin_verb","CMAS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/change_security_level()
@@ -795,12 +799,14 @@ var/list/admin_verbs_mentor = list(
// feedback_add_details("admin_verb","MP") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
return
/client/proc/editappear(mob/living/carbon/human/M as mob in mob_list)
/client/proc/editappear()
set name = "Edit Appearance"
set category = "Fun"
if(!check_rights(R_FUN)) return
var/mob/living/carbon/human/M = input("Select mob.", "Edit Appearance") as null|anything in human_mob_list
if(!istype(M, /mob/living/carbon/human))
usr << "\red You can only do this to humans!"
return

View File

@@ -137,7 +137,7 @@
send2adminirc("PlayerPM from [key_name(src)]: [html_decode(msg)]")
src << "<span class='pm'><span class='out'>" + create_text_tag("pm_out_alt", "", src) + " to <span class='name'Admin IRC</span>: <span class='message'>[msg]</span></span></span>"
src << "<span class='pm'><span class='out'>" + create_text_tag("pm_out_alt", "", src) + " to <span class='name'>Admin IRC</span>: <span class='message'>[msg]</span></span></span>"
log_admin("PM: [key_name(src)]->IRC: [msg]")
for(var/client/X in admins)

View File

@@ -516,12 +516,13 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
for(var/areatype in areas_without_camera)
world << "* [areatype]"
/client/proc/cmd_admin_dress(var/mob/living/carbon/human/M in mob_list)
/client/proc/cmd_admin_dress()
set category = "Fun"
set name = "Select equipment"
if(!ishuman(M))
alert("Invalid mob")
return
var/mob/living/carbon/human/M = input("Select mob.", "Select equipment.") as null|anything in human_mob_list
if(!M) return
//log_admin("[key_name(src)] has alienized [M.key].")
var/list/dresspacks = list(
"strip",

View File

@@ -236,8 +236,9 @@ datum/preferences
/datum/preferences/proc/ShowChoices(mob/user)
if(!user || !user.client) return
update_preview_icon()
user << browse_rsc(preview_icon_front, "previewicon.png")
user << browse_rsc(preview_icon_side, "previewicon2.png")
if(preview_icon_front && preview_icon_side)
user << browse_rsc(preview_icon_front, "previewicon.png")
user << browse_rsc(preview_icon_side, "previewicon2.png")
var/dat = "<html><body><center>"
if(path)
@@ -1667,6 +1668,7 @@ datum/preferences
var/status = organ_data[name]
var/obj/item/organ/external/O = character.organs_by_name[name]
if(O)
O.status = 0
if(status == "amputated")
character.organs_by_name[O.limb_name] = null
character.organs -= O

View File

@@ -100,7 +100,7 @@
else
dat += "<a href='?src=\ref[src];choice=toggle_lock'>Lock in new transaction</a><br><br>"
dat += "Transaction purpose: <a href='?src=\ref[src];choice=trans_purpose'>[transaction_purpose]</a><br>"
dat += "<a href='?src=\ref[src];choice=trans_purpose'>Transaction purpose: [transaction_purpose]</a><br>"
dat += "Value: <a href='?src=\ref[src];choice=trans_value'>$[transaction_amount]</a><br>"
dat += "Linked account: <a href='?src=\ref[src];choice=link_account'>[linked_account ? linked_account.owner_name : "None"]</a><hr>"
dat += "<a href='?src=\ref[src];choice=change_code'>Change access code</a><br>"

View File

@@ -188,28 +188,35 @@ var/list/event_last_fired = list()
active_with_role["Cyborg"] = 0
active_with_role["Janitor"] = 0
active_with_role["Gardener"] = 0
active_with_role["Any"] = player_list.len
for(var/mob/M in player_list)
if(!M.mind || !M.client || M.client.inactivity > 10 * 10 * 60) // longer than 10 minutes AFK counts them as inactive
if(!M.mind || !M.client || M.client.is_afk(10 MINUTES)) // longer than 10 minutes AFK counts them as inactive
continue
if(istype(M, /mob/living/silicon/robot) && M:module && M:module.name == "engineering robot module")
active_with_role["Engineer"]++
if(M.mind.assigned_role in list("Chief Engineer", "Station Engineer"))
active_with_role["Any"]++
if(istype(M, /mob/living/silicon/robot))
var/mob/living/silicon/robot/R = M
if(R.module)
if(istype(R.module, /obj/item/weapon/robot_module/engineering))
active_with_role["Engineer"]++
else if(istype(R.module, /obj/item/weapon/robot_module/security))
active_with_role["Security"]++
else if(istype(R.module, /obj/item/weapon/robot_module/medical))
active_with_role["Medical"]++
else if(istype(R.module, /obj/item/weapon/robot_module/research))
active_with_role["Scientist"]++
if(M.mind.assigned_role in engineering_positions)
active_with_role["Engineer"]++
if(istype(M, /mob/living/silicon/robot) && M:module && M:module.name == "medical robot module")
active_with_role["Medical"]++
if(M.mind.assigned_role in medical_positions)
active_with_role["Medical"]++
if(istype(M, /mob/living/silicon/robot) && M:module && M:module.name == "security robot module")
active_with_role["Security"]++
if(M.mind.assigned_role in security_positions)
active_with_role["Security"]++
if(M.mind.assigned_role in list("Research Director", "Scientist"))
if(M.mind.assigned_role in science_positions)
active_with_role["Scientist"]++
if(M.mind.assigned_role == "AI")

View File

@@ -58,14 +58,10 @@
spawn_area_type = /area/security/tactical
locstring = "tactical equipment storage"
//world << "looking for [spawn_area_type]"
for(var/areapath in typesof(spawn_area_type))
//world << " checking [areapath]"
var/area/A = locate(areapath)
//world << " A: [A], contents.len: [A.contents.len]"
//world << " B: [B], contents.len: [B.contents.len]"
for(var/turf/simulated/floor/F in A.contents)
if(!F.contents.len)
if(turf_clear(F))
turfs += F
var/list/spawn_types = list()

View File

@@ -7,7 +7,7 @@
for(var/areapath in typesof(/area/hallway))
var/area/A = locate(areapath)
for(var/turf/simulated/floor/F in A.contents)
if(!F.contents.len)
if(turf_clear(F))
turfs += F
if(turfs.len) //Pick a turf to spawn at if we can

View File

@@ -670,6 +670,12 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
client.images -= ghostimage //remove ourself
mob/dead/observer/MayRespawn(var/feedback = 0)
if(!client || !mind)
return 0
if(mind.current && mind.current.stat != DEAD)
if(feedback)
src << "<span class='warning'>Your non-dead body prevent you from respawning.</span>"
return 0
if(config.antag_hud_restricted && has_enabled_antagHUD == 1)
if(feedback)
src << "<span class='warning'>antagHUD restrictions prevent you from respawning.</span>"

View File

@@ -37,6 +37,7 @@
hud_list[SPECIALROLE_HUD] = image('icons/mob/hud.dmi', src, "hudblank")
hud_list[STATUS_HUD_OOC] = image('icons/mob/hud.dmi', src, "hudhealthy")
human_mob_list |= src
..()
if(dna)
@@ -44,6 +45,7 @@
make_blood()
/mob/living/carbon/human/Destroy()
human_mob_list -= src
for(var/organ in organs)
qdel(organ)
return ..()

View File

@@ -185,7 +185,7 @@
This is another way of saying that we won't bother dealing with them.*/
else
src << "No holopad connected."
return
return 0
return 1
/mob/living/silicon/ai/proc/holopad_emote(var/message) //This is called when the AI uses the 'me' verb while using a holopad.
@@ -206,7 +206,7 @@
M.show_message(rendered, 2)
else //This shouldn't occur, but better safe then sorry.
src << "No holopad connected."
return
return 0
return 1
/mob/living/silicon/ai/emote(var/act, var/type, var/message)

View File

@@ -27,11 +27,13 @@
#define MED_HUD 2 //Medical HUD mode
/mob/living/silicon/New()
silicon_mob_list |= src
..()
add_language("Galactic Common")
init_subsystems()
/mob/living/silicon/Destroy()
silicon_mob_list -= src
for(var/datum/alarm_handler/AH in alarm_manager.all_handlers)
AH.unregister(src)
..()

View File

@@ -34,10 +34,7 @@
return 1
if(href_list["set_view"])
if(is_malf(usr) || owner.is_ai_malf())
current_view = text2num(href_list["set_view"])
else
current_view = 0
current_view = text2num(href_list["set_view"])
return 1
if(href_list["law_channel"])
@@ -170,12 +167,8 @@
data["isAI"] = owner.isAI()
data["isMalf"] = is_malf(user)
data["isAIMalf"] = owner.is_ai_malf()
data["isSlaved"] = owner.is_slaved()
data["isAdmin"] = is_admin(user)
if(!(data["isMalf"] || data["isAIMalf"]))
current_view = 0
data["view"] = current_view
var/channels[0]
@@ -183,9 +176,7 @@
channels[++channels.len] = list("channel" = ch_name)
data["channel"] = owner.lawchannel
data["channels"] = channels
if(data["isMalf"] || data["isAIMalf"])
data["law_sets"] = package_multiple_laws(data["isAdmin"] ? admin_laws : player_laws)
data["law_sets"] = package_multiple_laws(data["isAdmin"] ? admin_laws : player_laws)
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if (!ui)
@@ -216,15 +207,6 @@
/obj/nano_module/law_manager/proc/is_malf(var/mob/user)
return (is_admin(user) && !owner.is_slaved()) || owner.is_malf_or_traitor()
/mob/living/silicon/proc/is_ai_malf()
return 0
/mob/living/silicon/robot/is_ai_malf()
return is_slaved() && connected_ai.is_malf_or_traitor()
/mob/living/silicon/ai/is_ai_malf()
return 0
/mob/living/silicon/proc/is_slaved()
return 0

View File

@@ -882,11 +882,14 @@ Note that amputating the affected organ does in fact remove the infection from t
dislocated = -1 //TODO, make robotic limbs a separate type, remove snowflake
cannot_break = 1
get_icon()
unmutate()
for (var/obj/item/organ/external/T in children)
if(T)
T.robotize()
/obj/item/organ/external/proc/mutate()
if(src.status & ORGAN_ROBOT)
return
src.status |= ORGAN_MUTATED
owner.update_body()

View File

@@ -57,6 +57,15 @@
-->
<div class="commit sansserif">
<h2 class="date">01 June 2015</h2>
<h2 class="date">04 June 2015</h2>
<h3 class="author">PsiOmegaDelta updated:</h3>
<ul class="changes bgimages16">
<li class="rscadd">AI eyes can now be found in the observer follow list.</li>
<li class="rscadd">Synths can now review all law modules that can be found on the station from their law manager.</li>
<li class="rscadd">Synths can state these laws if desired, however this is strongly discouraged unless subverted/malfunctioning.</li>
<li class="bugfix">Astral projecting mobs, such as wizards or cultists, may no longer respawn as something else while their body lives.</li>
</ul>
<h2 class="date">02 June 2015</h2>
<h3 class="author">Techhead updated:</h3>
<ul class="changes bgimages16">

View File

@@ -1936,3 +1936,12 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.
2015-06-02:
Techhead:
- rscadd: Re-adds extended capacity emergency oxygen tanks to relevant jobs.
2015-06-04:
PsiOmegaDelta:
- rscadd: AI eyes can now be found in the observer follow list.
- rscadd: Synths can now review all law modules that can be found on the station
from their law manager.
- rscadd: Synths can state these laws if desired, however this is strongly discouraged
unless subverted/malfunctioning.
- bugfix: Astral projecting mobs, such as wizards or cultists, may no longer respawn
as something else while their body lives.

View File

@@ -41,18 +41,16 @@
}
</style>
{{if data.isSlaved && data.isAdmin}}
<span class='notice'>This unit is law synced to {{:data.isSlaved}}.</span>
{{if data.isSlaved}}
<div class='notice'>Law synced to {{:data.isSlaved}}.</div>
{{/if}}
{{if data.isMalf || data.isAIMalf}}
<div class="item">
<div class="itemContentWidest">
{{:helper.link('Law Management', null, {'set_view' : 0}, data.view == 0 ? 'selected' : null)}}
{{:helper.link('Law Sets', null, {'set_view' : 1}, data.view == 1 ? 'selected' : null)}}
</div>
<div class="item">
<div class="itemContentWidest">
{{:helper.link('Law Management', null, {'set_view' : 0}, data.view == 0 ? 'selected' : null)}}
{{:helper.link('Law Sets', null, {'set_view' : 1}, data.view == 1 ? 'selected' : null)}}
</div>
{{/if}}
</div>
{{if data.view == 0}}
{{if data.has_ion_laws}}
@@ -196,6 +194,8 @@
</div>
{{/if}}
{{else data.view == 1}}
<div class='notice'>Remember: Stating laws other than those currently loaded may be grounds for decommissioning - NanoTrasen</div>
{{for data.law_sets}}
<div class="item">
<div class="itemLabelWide">
@@ -246,7 +246,7 @@
<div class="itemContent">
<br>
{{:helper.link('Load Laws', null, {'transfer_laws' : value.ref}, data.isSlaved ? 'disabled' : null)}}{{:helper.link('State Laws', null, {'state_law_set' : value.ref})}}
{{:helper.link('Load Laws', null, {'transfer_laws' : value.ref}, data.isMalf ? null : 'disabled')}}{{:helper.link('State Laws', null, {'state_law_set' : value.ref})}}
</div>
</div>
{{/for}}