mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-10 18:22:39 +00:00
307 lines
9.9 KiB
Plaintext
307 lines
9.9 KiB
Plaintext
#define TOPIC_NOACTION 0
|
|
#define TOPIC_HANDLED 1
|
|
#define TOPIC_REFRESH 2
|
|
#define TOPIC_UPDATE_PREVIEW 4
|
|
#define TOPIC_REFRESH_UPDATE_PREVIEW (TOPIC_REFRESH|TOPIC_UPDATE_PREVIEW)
|
|
|
|
#define PREF_FBP_CYBORG "cyborg"
|
|
#define PREF_FBP_POSI "posi"
|
|
#define PREF_FBP_SOFTWARE "software"
|
|
|
|
/datum/category_group/player_setup_category/general_preferences
|
|
name = "General"
|
|
sort_order = 1
|
|
category_item_type = /datum/category_item/player_setup_item/general
|
|
|
|
/datum/category_group/player_setup_category/skill_preferences
|
|
name = "Skills"
|
|
sort_order = 2
|
|
category_item_type = /datum/category_item/player_setup_item/skills
|
|
|
|
/datum/category_group/player_setup_category/occupation_preferences
|
|
name = "Occupation"
|
|
sort_order = 3
|
|
category_item_type = /datum/category_item/player_setup_item/occupation
|
|
|
|
/datum/category_group/player_setup_category/appearance_preferences
|
|
name = "Antagonism"
|
|
sort_order = 4
|
|
category_item_type = /datum/category_item/player_setup_item/antagonism
|
|
|
|
/datum/category_group/player_setup_category/loadout_preferences
|
|
name = "Loadout"
|
|
sort_order = 5
|
|
category_item_type = /datum/category_item/player_setup_item/loadout
|
|
/* //VOREStation Removal
|
|
/datum/category_group/player_setup_category/trait_preferences
|
|
name = "Traits"
|
|
sort_order = 6
|
|
category_item_type = /datum/category_item/player_setup_item/traits
|
|
*/ //VOREStation Removal End
|
|
/datum/category_group/player_setup_category/global_preferences
|
|
name = "Global"
|
|
sort_order = 6 //VOREStation Edit due to above commented out
|
|
category_item_type = /datum/category_item/player_setup_item/player_global
|
|
|
|
/****************************
|
|
* Category Collection Setup *
|
|
****************************/
|
|
/datum/category_collection/player_setup_collection
|
|
category_group_type = /datum/category_group/player_setup_category
|
|
var/datum/preferences/preferences
|
|
var/datum/category_group/player_setup_category/selected_category = null
|
|
|
|
/datum/category_collection/player_setup_collection/New(var/datum/preferences/preferences)
|
|
src.preferences = preferences
|
|
..()
|
|
selected_category = categories[1]
|
|
|
|
/datum/category_collection/player_setup_collection/Destroy()
|
|
preferences = null
|
|
selected_category = null
|
|
return ..()
|
|
|
|
/datum/category_collection/player_setup_collection/proc/sanitize_setup()
|
|
for(var/datum/category_group/player_setup_category/PS in categories)
|
|
PS.sanitize_setup()
|
|
|
|
/datum/category_collection/player_setup_collection/proc/load_character(var/savefile/S)
|
|
for(var/datum/category_group/player_setup_category/PS in categories)
|
|
PS.load_character(S)
|
|
|
|
/datum/category_collection/player_setup_collection/proc/save_character(var/savefile/S)
|
|
for(var/datum/category_group/player_setup_category/PS in categories)
|
|
PS.save_character(S)
|
|
|
|
/datum/category_collection/player_setup_collection/proc/load_preferences(var/savefile/S)
|
|
for(var/datum/category_group/player_setup_category/PS in categories)
|
|
PS.load_preferences(S)
|
|
|
|
/datum/category_collection/player_setup_collection/proc/save_preferences(var/savefile/S)
|
|
for(var/datum/category_group/player_setup_category/PS in categories)
|
|
PS.save_preferences(S)
|
|
|
|
/datum/category_collection/player_setup_collection/proc/copy_to_mob(var/mob/living/carbon/human/C)
|
|
for(var/datum/category_group/player_setup_category/PS in categories)
|
|
PS.copy_to_mob(C)
|
|
|
|
/datum/category_collection/player_setup_collection/proc/header()
|
|
var/dat = ""
|
|
for(var/datum/category_group/player_setup_category/PS in categories)
|
|
if(PS == selected_category)
|
|
dat += "[PS.name] " // TODO: Check how to properly mark a href/button selected in a classic browser window
|
|
else
|
|
dat += "<a href='?src=\ref[src];category=\ref[PS]'>[PS.name]</a> "
|
|
return dat
|
|
|
|
/datum/category_collection/player_setup_collection/proc/content(var/mob/user)
|
|
if(selected_category)
|
|
return selected_category.content(user)
|
|
|
|
/datum/category_collection/player_setup_collection/Topic(var/href,var/list/href_list)
|
|
if(..())
|
|
return 1
|
|
var/mob/user = usr
|
|
if(!user.client)
|
|
return 1
|
|
|
|
if(href_list["category"])
|
|
var/category = locate(href_list["category"])
|
|
if(category && category in categories)
|
|
selected_category = category
|
|
. = 1
|
|
|
|
if(.)
|
|
user.client.prefs.ShowChoices(user)
|
|
|
|
/**************************
|
|
* Category Category Setup *
|
|
**************************/
|
|
/datum/category_group/player_setup_category
|
|
var/sort_order = 0
|
|
|
|
/datum/category_group/player_setup_category/dd_SortValue()
|
|
return sort_order
|
|
|
|
/datum/category_group/player_setup_category/proc/sanitize_setup()
|
|
for(var/datum/category_item/player_setup_item/PI in items)
|
|
PI.sanitize_preferences()
|
|
for(var/datum/category_item/player_setup_item/PI in items)
|
|
PI.sanitize_character()
|
|
|
|
/datum/category_group/player_setup_category/proc/load_character(var/savefile/S)
|
|
// Load all data, then sanitize it.
|
|
// Need due to, for example, the 01_basic module relying on species having been loaded to sanitize correctly but that isn't loaded until module 03_body.
|
|
for(var/datum/category_item/player_setup_item/PI in items)
|
|
PI.load_character(S)
|
|
|
|
/datum/category_group/player_setup_category/proc/save_character(var/savefile/S)
|
|
// Sanitize all data, then save it
|
|
for(var/datum/category_item/player_setup_item/PI in items)
|
|
PI.sanitize_character()
|
|
for(var/datum/category_item/player_setup_item/PI in items)
|
|
PI.save_character(S)
|
|
|
|
/datum/category_group/player_setup_category/proc/load_preferences(var/savefile/S)
|
|
for(var/datum/category_item/player_setup_item/PI in items)
|
|
PI.load_preferences(S)
|
|
|
|
/datum/category_group/player_setup_category/proc/save_preferences(var/savefile/S)
|
|
for(var/datum/category_item/player_setup_item/PI in items)
|
|
PI.sanitize_preferences()
|
|
for(var/datum/category_item/player_setup_item/PI in items)
|
|
PI.save_preferences(S)
|
|
|
|
/datum/category_group/player_setup_category/proc/copy_to_mob(var/mob/living/carbon/human/C)
|
|
for(var/datum/category_item/player_setup_item/PI in items)
|
|
PI.copy_to_mob(C)
|
|
|
|
/datum/category_group/player_setup_category/proc/content(var/mob/user)
|
|
. = "<table style='width:100%'><tr style='vertical-align:top'><td style='width:50%'>"
|
|
var/current = 0
|
|
var/halfway = items.len / 2
|
|
for(var/datum/category_item/player_setup_item/PI in items)
|
|
if(halfway && current++ >= halfway)
|
|
halfway = 0
|
|
. += "</td><td></td><td style='width:50%'>"
|
|
. += "[PI.content(user)]<br>"
|
|
. += "</td></tr></table>"
|
|
|
|
/datum/category_group/player_setup_category/occupation_preferences/content(var/mob/user)
|
|
for(var/datum/category_item/player_setup_item/PI in items)
|
|
. += "[PI.content(user)]<br>"
|
|
|
|
/**********************
|
|
* Category Item Setup *
|
|
**********************/
|
|
/datum/category_item/player_setup_item
|
|
var/sort_order = 0
|
|
var/datum/preferences/pref
|
|
|
|
/datum/category_item/player_setup_item/New()
|
|
..()
|
|
var/datum/category_collection/player_setup_collection/psc = category.collection
|
|
pref = psc.preferences
|
|
|
|
/datum/category_item/player_setup_item/Destroy()
|
|
pref = null
|
|
return ..()
|
|
|
|
/datum/category_item/player_setup_item/dd_SortValue()
|
|
return sort_order
|
|
|
|
/*
|
|
* Called when the item is asked to load per character settings
|
|
*/
|
|
/datum/category_item/player_setup_item/proc/load_character(var/savefile/S)
|
|
return
|
|
|
|
/*
|
|
* Called when the item is asked to save per character settings
|
|
*/
|
|
/datum/category_item/player_setup_item/proc/save_character(var/savefile/S)
|
|
return
|
|
|
|
/*
|
|
* Called when the item is asked to load user/global settings
|
|
*/
|
|
/datum/category_item/player_setup_item/proc/load_preferences(var/savefile/S)
|
|
return
|
|
|
|
/*
|
|
* Called when the item is asked to save user/global settings
|
|
*/
|
|
/datum/category_item/player_setup_item/proc/save_preferences(var/savefile/S)
|
|
return
|
|
|
|
/*
|
|
* Called when the item is asked to apply its per character settings to a new mob.
|
|
*/
|
|
/datum/category_item/player_setup_item/proc/copy_to_mob(var/mob/living/carbon/human/C)
|
|
return
|
|
|
|
/datum/category_item/player_setup_item/proc/content()
|
|
return
|
|
|
|
/datum/category_item/player_setup_item/proc/sanitize_character()
|
|
return
|
|
|
|
/datum/category_item/player_setup_item/proc/sanitize_preferences()
|
|
return
|
|
|
|
/datum/category_item/player_setup_item/Topic(var/href,var/list/href_list)
|
|
if(..())
|
|
return 1
|
|
var/mob/pref_mob = preference_mob()
|
|
if(!pref_mob || !pref_mob.client)
|
|
return 1
|
|
|
|
. = OnTopic(href, href_list, usr)
|
|
if(. & TOPIC_UPDATE_PREVIEW)
|
|
pref_mob.client.prefs.preview_icon = null
|
|
if(. & TOPIC_REFRESH)
|
|
pref_mob.client.prefs.ShowChoices(usr)
|
|
|
|
/datum/category_item/player_setup_item/CanUseTopic(var/mob/user)
|
|
return 1
|
|
|
|
/datum/category_item/player_setup_item/proc/OnTopic(var/href,var/list/href_list, var/mob/user)
|
|
return TOPIC_NOACTION
|
|
|
|
/datum/category_item/player_setup_item/proc/preference_mob()
|
|
if(!pref.client)
|
|
for(var/client/C)
|
|
if(C.ckey == pref.client_ckey)
|
|
pref.client = C
|
|
break
|
|
|
|
if(pref.client)
|
|
return pref.client.mob
|
|
|
|
// Checks in a really hacky way if a character's preferences say they are an FBP or not.
|
|
/datum/category_item/player_setup_item/proc/is_FBP()
|
|
if(pref.organ_data && pref.organ_data[BP_TORSO] != "cyborg")
|
|
return 0
|
|
return 1
|
|
|
|
// Returns what kind of FBP the player's prefs are. Returns 0 if they're not an FBP.
|
|
/datum/category_item/player_setup_item/proc/get_FBP_type()
|
|
if(!is_FBP())
|
|
return 0 // Not a robot.
|
|
if(O_BRAIN in pref.organ_data)
|
|
switch(pref.organ_data[O_BRAIN])
|
|
if("assisted")
|
|
return PREF_FBP_CYBORG
|
|
if("mechanical")
|
|
return PREF_FBP_POSI
|
|
if("digital")
|
|
return PREF_FBP_SOFTWARE
|
|
return 0 //Something went wrong!
|
|
|
|
/datum/category_item/player_setup_item/proc/get_min_age()
|
|
var/datum/species/S = GLOB.all_species[pref.species ? pref.species : "Human"]
|
|
if(!is_FBP())
|
|
return S.min_age // If they're not a robot, we can just use the species var.
|
|
var/FBP_type = get_FBP_type()
|
|
switch(FBP_type)
|
|
if(PREF_FBP_CYBORG)
|
|
return S.min_age
|
|
if(PREF_FBP_POSI)
|
|
return 1
|
|
if(PREF_FBP_SOFTWARE)
|
|
return 1
|
|
return S.min_age // welp
|
|
|
|
/datum/category_item/player_setup_item/proc/get_max_age()
|
|
var/datum/species/S = GLOB.all_species[pref.species ? pref.species : "Human"]
|
|
if(!is_FBP())
|
|
return S.max_age // If they're not a robot, we can just use the species var.
|
|
var/FBP_type = get_FBP_type()
|
|
switch(FBP_type)
|
|
if(PREF_FBP_CYBORG)
|
|
return S.max_age + 20
|
|
if(PREF_FBP_POSI)
|
|
return 220
|
|
if(PREF_FBP_SOFTWARE)
|
|
return 150
|
|
return S.max_age // welp |