// These are not flags, binary operations not intended #define TOPIC_NOACTION 0 #define TOPIC_HANDLED 1 #define TOPIC_REFRESH 2 // These are bitflags. Use wisely. #define SQL_CHARACTER 0x1 #define SQL_PREFERENCES 0x2 /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 = "Roles" 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 /datum/category_group/player_setup_category/global_preferences name = "Global" sort_order = 5 category_item_type = /datum/category_item/player_setup_item/player_global sql_role = SQL_PREFERENCES /datum/category_group/player_setup_category/other_preferences name = "Other" sort_order = 6 category_item_type = /datum/category_item/player_setup_item/other /**************************** * 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/update_setup(var/savefile/preferences, var/savefile/character) for(var/datum/category_group/player_setup_category/PS in categories) . = . || PS.update_setup(preferences, character) /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 += "[PS.name] " 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 var/sql_role = SQL_CHARACTER var/modified = 0 /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. if (!config.sql_saves || !establish_db_connection(dbcon)) for(var/datum/category_item/player_setup_item/PI in items) PI.load_character(S) else // Load every category minus the global handle_sql_loading(SQL_CHARACTER) for(var/datum/category_item/player_setup_item/PI in items) PI.load_special(S) PI.sanitize_character(config.sql_saves) /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() if (!config.sql_saves || !establish_db_connection(dbcon)) for (var/datum/category_item/player_setup_item/PI in items) PI.save_character(S) else if (modified) // No save here, because this is only called from the menu and needs to save /everything/. handle_sql_saving(SQL_CHARACTER) modified = 0 /datum/category_group/player_setup_category/proc/load_preferences(var/savefile/S) if (!config.sql_saves || !establish_db_connection(dbcon)) for (var/datum/category_item/player_setup_item/PI in items) PI.load_preferences(S) else handle_sql_loading(SQL_PREFERENCES) for (var/datum/category_item/player_setup_item/PI in items) PI.sanitize_preferences(config.sql_saves) /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() if (!config.sql_saves || !establish_db_connection(dbcon)) for (var/datum/category_item/player_setup_item/PI in items) PI.save_preferences(S) else handle_sql_saving(SQL_PREFERENCES) /datum/category_group/player_setup_category/proc/update_setup(var/savefile/preferences, var/savefile/character) for(var/datum/category_item/player_setup_item/PI in items) . = . || PI.update_setup(preferences, character) /datum/category_group/player_setup_category/proc/content(var/mob/user) . = "
| " 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 . += " | "
. += "[PI.content(user)] " . += " |