var/list/loadout_categories = list() var/list/gear_datums = list() /datum/loadout_category var/category = "" var/list/gear = list() /datum/loadout_category/New(var/cat) category = cat ..() /hook/startup/proc/populate_gear_list() // Setup custom loadout. //create a list of gear datums to sort for(var/geartype in subtypesof(/datum/gear)) var/datum/gear/G = geartype var/use_name = initial(G.display_name) var/use_category = initial(G.sort_category) if(!loadout_categories[use_category]) loadout_categories[use_category] = new /datum/loadout_category(use_category) var/datum/loadout_category/LC = loadout_categories[use_category] gear_datums[use_name] = new geartype LC.gear[use_name] = gear_datums[use_name] sortTim(loadout_categories, /proc/cmp_text_asc, FALSE) for(var/loadout_category in loadout_categories) var/datum/loadout_category/LC = loadout_categories[loadout_category] sortTim(LC.gear, /proc/cmp_text_asc, FALSE) return TRUE /datum/category_item/player_setup_item/loadout name = "Loadout" sort_order = 1 var/current_tab = "General" var/gear_reset = FALSE var/search_input_value = "" /datum/category_item/player_setup_item/loadout/load_character(var/savefile/S) S["gear"] >> pref.gear S["gear_list"] >> pref.gear_list if(pref.gear_list!=null && pref.gear_slot!=null) pref.gear = pref.gear_list["[pref.gear_slot]"] else S["gear"] >> pref.gear /datum/category_item/player_setup_item/loadout/save_character(var/savefile/S) pref.gear_list["[pref.gear_slot]"] = pref.gear to_file(S["gear_list"], pref.gear_list) to_file(S["gear_slot"], pref.gear_slot) /datum/category_item/player_setup_item/loadout/gather_load_parameters() return list("id" = pref.current_character) /datum/category_item/player_setup_item/loadout/gather_load_query() return list("ss13_characters" = list("vars" = list("gear" = "gear_list", "gear_slot"), "args" = list("id"))) /datum/category_item/player_setup_item/loadout/gather_save_query() return list("ss13_characters" = list("gear", "gear_slot", "id" = 1, "ckey" = 1)) /datum/category_item/player_setup_item/loadout/gather_save_parameters() return list("gear" = json_encode(pref.gear_list), "gear_slot" = pref.gear_slot, "id" = pref.current_character, "ckey" = PREF_CLIENT_CKEY) /datum/category_item/player_setup_item/loadout/proc/valid_gear_choices(var/max_cost) . = list() var/mob/preference_mob = preference_mob() var/list/whitelist_cache = list() if(preference_mob) for(var/species in global.all_species) var/datum/species/S = global.all_species[species] if(is_alien_whitelisted(preference_mob, S)) whitelist_cache += S.name for(var/gear_name in gear_datums) var/datum/gear/G = gear_datums[gear_name] if(max_cost && G.cost > max_cost) continue else if(G.whitelisted && whitelist_cache.len) for(var/species in G.whitelisted) if(species in whitelist_cache) . += gear_name break else .+= gear_name /datum/category_item/player_setup_item/loadout/sanitize_character(var/sql_load = 0) if (sql_load) gear_reset = FALSE pref.gear_slot = text2num(pref.gear_slot) if (istext(pref.gear_list)) try pref.gear_list = json_decode(pref.gear_list) catch log_debug("SQL CHARACTER LOAD: Unable to load custom loadout for client [pref.client ? pref.client.ckey : "UNKNOWN"].") gear_reset = TRUE var/mob/preference_mob = preference_mob() if(!islist(pref.gear_list)) pref.gear_list = list() if(!isnull(pref.gear_slot) && islist(pref.gear_list["[pref.gear_slot]"])) pref.gear = pref.gear_list["[pref.gear_slot]"] else // old format, try to recover it. if(!islist(pref.gear_list["1"])) pref.gear = pref.gear_list.Copy() pref.gear_list = list("1" = pref.gear) pref.gear_slot = 1 else pref.gear = list() pref.gear_list = list("1" = pref.gear) pref.gear_slot = 1 for(var/gear_name in pref.gear) if(!(gear_name in gear_datums)) pref.gear -= gear_name var/total_cost = 0 var/list/player_valid_gear_choices = valid_gear_choices() for(var/gear_name in pref.gear) if(!gear_datums[gear_name]) to_chat(preference_mob, "You cannot have more than one of the \the [gear_name]") pref.gear -= gear_name else if(!(gear_name in player_valid_gear_choices)) to_chat(preference_mob, "You cannot take \the [gear_name] as you are not whitelisted for the species.") pref.gear -= gear_name else var/datum/gear/G = gear_datums[gear_name] if(total_cost + G.cost > MAX_GEAR_COST) pref.gear -= gear_name to_chat(preference_mob, "You cannot afford to take \the [gear_name]") else total_cost += G.cost /datum/category_item/player_setup_item/loadout/content(var/mob/user) var/total_cost = 0 if(pref.gear && pref.gear.len) for(var/i = 1; i <= pref.gear.len; i++) var/datum/gear/G = gear_datums[pref.gear[i]] if(G) total_cost += G.cost var/fcolor = "#3366CC" if(total_cost < MAX_GEAR_COST) fcolor = "#E67300" . = list() . += "
| "
. += " | ||
| [G.display_name] | " temp_html += "[G.cost] | " temp_html += "[G.description] " if(G.allowed_roles) temp_html += "(Role: " var/role_count = 0 for(var/role in G.allowed_roles) temp_html += "[role]" role_count++ if(role_count == G.allowed_roles.len) temp_html += ") " break else temp_html += ", " if(G.culture_restriction) temp_html += "(Culture: " var/culture_count = 0 for(var/culture in G.culture_restriction) var/decl/origin_item/C = decls_repository.get_decl(culture) temp_html += "[C.name]" culture_count++ if(culture_count == G.culture_restriction.len) temp_html += ") " break else temp_html += ", " if(G.origin_restriction) temp_html += "(Origin: " var/origin_count = 0 for(var/origin in G.origin_restriction) var/decl/origin_item/O = decls_repository.get_decl(origin) temp_html += "[O.name]" origin_count++ if(origin_count == G.origin_restriction.len) temp_html += ") " break else temp_html += ", " temp_html += " |
| " for(var/datum/gear_tweak/tweak in G.gear_tweaks) temp_html += " [tweak.get_contents(get_tweak_metadata(G, tweak))]" temp_html += " | ||