Can now select the design and contents of your loadout lunchbox.

Also allows gear tweaks to take up a whole row on their own, due to potential length.
Also fixes a couple of incorrect && logical operations. Should have been ||.
This commit is contained in:
PsiOmegaDelta
2016-04-04 10:52:48 +02:00
committed by Datraen
parent 15aed1ade4
commit 48b773fcfa
8 changed files with 152 additions and 97 deletions

View File

@@ -409,7 +409,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
choice_options = list("Normal","Prosthesis")
var/new_state = input(user, "What state do you wish the limb to be in?") as null|anything in choice_options
if(!new_state && !CanUseTopic(user)) return TOPIC_NOACTION
if(!new_state || !CanUseTopic(user)) return TOPIC_NOACTION
switch(new_state)
if("Normal")

View File

@@ -27,7 +27,7 @@ var/datum/gear_tweak/color/gear_tweak_free_color_choice = new()
..()
/datum/gear_tweak/color/get_contents(var/metadata)
return "(Color<font color='[metadata]'>&#9899;</font>)"
return "Color: <font color='[metadata]'>&#9899;</font>"
/datum/gear_tweak/color/get_default()
return valid_colors ? valid_colors[1] : COLOR_GRAY
@@ -54,7 +54,7 @@ var/datum/gear_tweak/color/gear_tweak_free_color_choice = new()
..()
/datum/gear_tweak/path/get_contents(var/metadata)
return "(Type: [metadata])"
return "Type: [metadata]"
/datum/gear_tweak/path/get_default()
return valid_paths[1]
@@ -75,20 +75,21 @@ var/datum/gear_tweak/color/gear_tweak_free_color_choice = new()
var/list/valid_contents
/datum/gear_tweak/contents/New()
valid_contents = args
valid_contents = args.Copy()
..()
/datum/gear_tweak/contents/get_contents(var/metadata)
return "(Contents)"
return "Contents: [english_list(metadata, and_text = ", ")]"
/datum/gear_tweak/contents/get_default()
. = list()
for(var/i = 1 to valid_contents.len)
var/list/contents = valid_contents[i]
. += contents[1]
. += "Random"
/datum/gear_tweak/contents/get_metadata(var/user, var/list/metadata)
. = list()
for(var/i = metadata.len to valid_contents.len)
metadata += "Random"
for(var/i = 1 to valid_contents.len)
var/entry = input(user, "Choose an entry.", "Character Preference", metadata[i]) as null|anything in (valid_contents[i] + list("Random", "None"))
if(entry)
@@ -100,12 +101,13 @@ var/datum/gear_tweak/color/gear_tweak_free_color_choice = new()
if(metadata.len != valid_contents.len)
return
for(var/i = 1 to valid_contents.len)
var/path
var/list/contents = valid_contents[i]
var/path = contents[metadata[i]]
if(path)
if(path == "Random")
path = pick(contents)
path = contents[path]
else if(path == "None")
continue
new path(I)
if(metadata[i] == "Random")
path = pick(contents)
path = contents[path]
else if(metadata[i] == "None")
continue
else
path = contents[metadata[i]]
new path(I)

View File

@@ -123,25 +123,34 @@ var/list/gear_datums = list()
for(var/gear_name in LC.gear)
var/datum/gear/G = LC.gear[gear_name]
var/ticked = (G.display_name in pref.gear)
var/obj/item/temp = G.path
. += "<tr style='vertical-align:top'><td width=25%><a href='?src=\ref[src];toggle_gear=[G.display_name]'><font color='[ticked ? "#E67300" : "#3366CC"]'>[G.display_name]</font></a>"
. += "<tr style='vertical-align:top'><td width=25%><a href='?src=\ref[src];toggle_gear=[G.display_name]'><font color='[ticked ? "#E67300" : "#3366CC"]'>[G.display_name]</font></a></td>"
. += "<td width = 10% style='vertical-align:top'>[G.cost]</td>"
. += "<td><font size=2><i>[G.description]</i></font></td></tr>"
if(ticked)
var/metadata = pref.gear[G.display_name]
if(!metadata)
metadata = list()
pref.gear[G.display_name] = metadata
. += "<tr><td colspan=3>"
for(var/datum/gear_tweak/tweak in G.gear_tweaks)
var/tweak_input = metadata["[tweak]"]
if(!tweak_input)
tweak_input = tweak.get_default()
metadata["[tweak]"] = tweak_input
. += " <a href='?src=\ref[src];gear=[G.display_name];tweak=\ref[tweak]'>[tweak.get_contents(tweak_input)]</a>"
. += "</td>"
. += "<td width = 10%>[G.cost]</td>"
. += "<td><font size=2><i>[initial(temp.desc)]</i></font></td></tr>"
. += " <a href='?src=\ref[src];gear=[G.display_name];tweak=\ref[tweak]'>[tweak.get_contents(get_tweak_metadata(G, tweak))]</a>"
. += "</td></tr>"
. += "</table>"
. = jointext(.)
/datum/category_item/player_setup_item/loadout/proc/get_gear_metadata(var/datum/gear/G)
. = pref.gear[G.display_name]
if(!.)
. = list()
pref.gear[G.display_name] = .
/datum/category_item/player_setup_item/loadout/proc/get_tweak_metadata(var/datum/gear/G, var/datum/gear_tweak/tweak)
var/list/metadata = get_gear_metadata(G)
. = metadata["[tweak]"]
if(!.)
. = tweak.get_default()
metadata["[tweak]"] = .
/datum/category_item/player_setup_item/loadout/proc/set_tweak_metadata(var/datum/gear/G, var/datum/gear_tweak/tweak, var/new_metadata)
var/list/metadata = get_gear_metadata(G)
metadata["[tweak]"] = new_metadata
/datum/category_item/player_setup_item/loadout/OnTopic(href, href_list, user)
if(href_list["toggle_gear"])
var/datum/gear/TG = gear_datums[href_list["toggle_gear"]]
@@ -160,11 +169,10 @@ var/list/gear_datums = list()
var/datum/gear_tweak/tweak = locate(href_list["tweak"])
if(!tweak || !istype(gear) || !(tweak in gear.gear_tweaks))
return TOPIC_NOACTION
var/metadata = tweak.get_metadata(user)
if(!metadata && !CanUseTopic(user))
var/metadata = tweak.get_metadata(user, get_tweak_metadata(gear, tweak))
if(!metadata || !CanUseTopic(user))
return TOPIC_NOACTION
var/gear_metadata = pref.gear[gear.display_name]
gear_metadata["[tweak]"] = metadata
set_tweak_metadata(gear, tweak, metadata)
return TOPIC_REFRESH
else if(href_list["select_category"])
current_tab = href_list["select_category"]
@@ -176,6 +184,7 @@ var/list/gear_datums = list()
/datum/gear
var/display_name //Name/index. Must be unique.
var/description //Description of this gear. If left blank will default to the description of the pathed item.
var/path //Path to item.
var/cost = 1 //Number of points used. Items in general cost 1 point, storage/armor/gloves/special use costs 2 points.
var/slot //Slot to equip to.
@@ -184,6 +193,12 @@ var/list/gear_datums = list()
var/sort_category = "General"
var/list/gear_tweaks = list() //List of datums which will alter the item after it has been spawned.
/datum/gear/New()
..()
if(!description)
var/obj/O = path
description = initial(O.desc)
/datum/gear_data
var/path
var/location

View File

@@ -39,34 +39,17 @@
path = /obj/item/weapon/haircomb
/datum/gear/lunchbox
display_name = "lunchbox, rainbow"
display_name = "lunchbox"
description = "A little lunchbox."
cost = 2
path = /obj/item/weapon/storage/toolbox/lunchbox/filled
path = /obj/item/weapon/storage/toolbox/lunchbox
/datum/gear/lunchbox/heartlunchbox
display_name = "lunchbox, heart"
path = /obj/item/weapon/storage/toolbox/lunchbox/heart/filled
/datum/gear/lunchbox/catlunchbox
display_name = "lunchbox, cat"
path = /obj/item/weapon/storage/toolbox/lunchbox/cat/filled
/datum/gear/lunchbox/ntlunchbox
display_name = "lunchbox, Nanotrasen"
path = /obj/item/weapon/storage/toolbox/lunchbox/nt/filled
/datum/gear/lunchbox/marslunchbox
display_name = "lunchbox, Mars university"
path = /obj/item/weapon/storage/toolbox/lunchbox/mars/filled
/datum/gear/lunchbox/ctilunchbox
display_name = "lunchbox, CTI"
path = /obj/item/weapon/storage/toolbox/lunchbox/cti/filled
/datum/gear/lunchbox/nymphlunchbox
display_name = "lunchbox, Diona nymph"
path = /obj/item/weapon/storage/toolbox/lunchbox/nymph/filled
/datum/gear/lunchbox/syndicatelunchbox
display_name = "lunchbox, black and red"
path = /obj/item/weapon/storage/toolbox/lunchbox/syndicate/filled
/datum/gear/lunchbox/New()
..()
var/list/lunchboxes = list()
for(var/lunchbox_type in typesof(/obj/item/weapon/storage/toolbox/lunchbox))
var/obj/item/weapon/storage/toolbox/lunchbox/lunchbox = lunchbox_type
if(!initial(lunchbox.filled))
lunchboxes[initial(lunchbox.name)] = lunchbox_type
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(lunchboxes))
gear_tweaks += new/datum/gear_tweak/contents(lunchables_lunches(), lunchables_snacks(), lunchables_drinks())

View File

@@ -57,7 +57,7 @@
else if(href_list["preconfigured"])
var/selected = input(user, "Select a skillset", "Skillset") as null|anything in SKILL_PRE
if(!selected && !CanUseTopic(user)) return
if(!selected || !CanUseTopic(user)) return
pref.ZeroSkills(1)
for(var/V in SKILL_PRE[selected])