diff --git a/code/modules/client/preferences/middleware/quirks.dm b/code/modules/client/preferences/middleware/quirks.dm index 92eb2bfb6cbc..27040f88eed5 100644 --- a/code/modules/client/preferences/middleware/quirks.dm +++ b/code/modules/client/preferences/middleware/quirks.dm @@ -118,7 +118,7 @@ /datum/preference_middleware/quirks/proc/give_quirk(list/params, mob/user) var/quirk_name = params["quirk"] // DARKPACK EDIT ADD - MERITS/FLAWS - var/datum/st_stat/freebie/freebie_points = preferences.preference_storyteller_stats["[STAT_FREEBIE_POINTS]"] + var/datum/st_stat/freebie/freebie_points = preferences.preference_storyteller_stats[STAT_FREEBIE_POINTS] var/datum/quirk/quirk_type = SSquirks.quirks[quirk_name] freebie_points.decrease_points(quirk_type.value) // DARKPACK EDIT END - MERITS/FLAWS @@ -140,7 +140,7 @@ /datum/preference_middleware/quirks/proc/remove_quirk(list/params, mob/user) var/quirk_name = params["quirk"] // DARKPACK EDIT ADD - MERITS/FLAWS - var/datum/st_stat/freebie/freebie_points = preferences.preference_storyteller_stats["[STAT_FREEBIE_POINTS]"] + var/datum/st_stat/freebie/freebie_points = preferences.preference_storyteller_stats[STAT_FREEBIE_POINTS] var/datum/quirk/quirk_type = SSquirks.quirks[quirk_name] freebie_points.increase_points(quirk_type.value) // DARKPACK EDIT END - MERITS/FLAWS @@ -172,7 +172,7 @@ //DARKPACK EDIT ADD - MERITS/FLAWS /datum/preference_middleware/quirks/proc/get_freebie_points() - var/datum/st_stat/freebie/freebie_stat = preferences.preference_storyteller_stats["[STAT_FREEBIE_POINTS]"] + var/datum/st_stat/freebie/freebie_stat = preferences.preference_storyteller_stats[STAT_FREEBIE_POINTS] if(!freebie_stat) return null diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index 1b152999c84c..e4b5812a6381 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -414,16 +414,24 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car // DARKPACK EDIT ADD END // DARKPACK EDIT ADD START - STORYTELLER_STATS + preference_storyteller_stats = list() // Ensure we dont have our stats from our old char slot. if(!stats_list) preference_storyteller_stats = create_new_stat_prefs(preference_storyteller_stats) for(var/stat_path in stats_list) - var/proper_stat_path = text2path(stat_path) + var/proper_stat_path + if(ispath(stat_path, /datum/st_stat)) + // I thought when its saved it becomes a string but that seems to not always be the case? + // I belive its because the json handling is held in byond after the first fetch? + proper_stat_path = stat_path + else + proper_stat_path = text2path(stat_path) + if(!proper_stat_path) + continue var/datum/st_stat/stat = new proper_stat_path() - if(stats_list[stat_path]) // If the stat_path already exists in our savefile, update our datum. - stat.set_score(stats_list[stat_path][STAT_SCORE]) - stat.set_points(stats_list[stat_path][STAT_POINTS]) - stat.freebie_cost_spent = stats_list[stat_path][STAT_FREEBIE_COST_SPENT] - preference_storyteller_stats[stat_path] = stat + stat.set_score(stats_list[stat_path][STAT_SCORE]) + stat.set_points(stats_list[stat_path][STAT_POINTS]) + stat.freebie_cost_spent = stats_list[stat_path][STAT_FREEBIE_COST_SPENT] + preference_storyteller_stats[proper_stat_path] = stat update_middleware_stats(preference_storyteller_stats) // DARKPACK EDIT ADD END diff --git a/modular_darkpack/modules/storyteller_dice/code/verbs.dm b/modular_darkpack/modules/storyteller_dice/code/verbs.dm index bba04c26d80d..bd0f3c9effba 100644 --- a/modular_darkpack/modules/storyteller_dice/code/verbs.dm +++ b/modular_darkpack/modules/storyteller_dice/code/verbs.dm @@ -8,9 +8,8 @@ ADMIN_VERB_ONLY_CONTEXT_MENU(roll_storyteller_dice, R_FUN, "Roll storyteller dic set desc = "Roll dice!" var/list/allowed_stats = list() - // Blame Xeon im pretty sure for the mobs storing this as a string. - for(var/stat_path_as_a_fucked_up_evil_string, dots_in in storyteller_stats) - var/datum/st_stat/stat = text2path(stat_path_as_a_fucked_up_evil_string) + for(var/stat_path, dots_in in storyteller_stats) + var/datum/st_stat/stat = stat_path if(!ispath(stat)) continue if(stat == stat::abstract_type) diff --git a/modular_darkpack/modules/storyteller_stats/code/global_procs.dm b/modular_darkpack/modules/storyteller_stats/code/global_procs.dm index 8abda0ab215b..d86756153527 100644 --- a/modular_darkpack/modules/storyteller_stats/code/global_procs.dm +++ b/modular_darkpack/modules/storyteller_stats/code/global_procs.dm @@ -2,7 +2,6 @@ var/list/stats_list = list() for(var/stat_path as anything in subtypesof(/datum/st_stat)) var/datum/st_stat/stat = new stat_path() - stat_path = "[stat_path]" stat.set_score(stat.starting_score) stats_list[stat_path] = stat preference_storyteller_stats = stats_list @@ -11,18 +10,18 @@ // This entire snowflake code is done purely so that we can properly update stats that are based on other stats. /proc/update_middleware_stats(list/preference_storyteller_stats) - var/datum/st_stat/stat_courage = preference_storyteller_stats["[STAT_COURAGE]"] - var/datum/st_stat/stat_permenant_willpower = preference_storyteller_stats["[STAT_PERMANENT_WILLPOWER]"] + var/datum/st_stat/stat_courage = preference_storyteller_stats[STAT_COURAGE] + var/datum/st_stat/stat_permenant_willpower = preference_storyteller_stats[STAT_PERMANENT_WILLPOWER] stat_permenant_willpower.add_stat_mod(clamp(-(stat_permenant_willpower.get_score(include_bonus = FALSE) - 10), 0, stat_courage.get_score(include_bonus = TRUE)), "COURAGE") - var/datum/st_stat/stat_temporary_willpower = preference_storyteller_stats["[STAT_TEMPORARY_WILLPOWER]"] + var/datum/st_stat/stat_temporary_willpower = preference_storyteller_stats[STAT_TEMPORARY_WILLPOWER] stat_temporary_willpower.set_score(stat_permenant_willpower.get_score(include_bonus = TRUE)) - var/datum/st_stat/morality_path/morality/stat_morality = preference_storyteller_stats["[STAT_MORALITY]"] + var/datum/st_stat/morality_path/morality/stat_morality = preference_storyteller_stats[STAT_MORALITY] if(stat_morality?.morality_path) - var/datum/st_stat/stat_conscience = preference_storyteller_stats["[STAT_CONSCIENCE]"] - var/datum/st_stat/stat_self_control = preference_storyteller_stats["[STAT_SELF_CONTROL]"] - var/datum/st_stat/stat_conviction = preference_storyteller_stats["[STAT_CONVICTION]"] - var/datum/st_stat/stat_instinct = preference_storyteller_stats["[STAT_INSTINCT]"] + var/datum/st_stat/stat_conscience = preference_storyteller_stats[STAT_CONSCIENCE] + var/datum/st_stat/stat_self_control = preference_storyteller_stats[STAT_SELF_CONTROL] + var/datum/st_stat/stat_conviction = preference_storyteller_stats[STAT_CONVICTION] + var/datum/st_stat/stat_instinct = preference_storyteller_stats[STAT_INSTINCT] if(stat_morality.morality_path.alignment == MORALITY_HUMANITY) stat_morality.set_score(clamp(stat_conscience.get_score(include_bonus = TRUE) + stat_self_control.get_score(include_bonus = TRUE), 0, 10)) diff --git a/modular_darkpack/modules/storyteller_stats/code/mob_affecting_adjustments/mob_procs.dm b/modular_darkpack/modules/storyteller_stats/code/mob_affecting_adjustments/mob_procs.dm index 4c818b3164af..c6e209737f15 100644 --- a/modular_darkpack/modules/storyteller_stats/code/mob_affecting_adjustments/mob_procs.dm +++ b/modular_darkpack/modules/storyteller_stats/code/mob_affecting_adjustments/mob_procs.dm @@ -1,24 +1,24 @@ /// Get a specific mob's stat from its stats list. /mob/living/proc/st_get_stat(stat_path, include_bonus) - var/datum/st_stat/given_stat = storyteller_stats["[stat_path]"] + var/datum/st_stat/given_stat = storyteller_stats[stat_path] return given_stat?.get_score(include_bonus) /// Wrapper for st_get_stat to reduce copypaste. Get a specific mob's stat from its stats list. /mob/living/proc/st_get_stats(list/stat_list, include_bonus) var/total_score = 0 for(var/stat_path in stat_list) - var/datum/st_stat/given_stat = storyteller_stats["[stat_path]"] + var/datum/st_stat/given_stat = storyteller_stats[stat_path] total_score += given_stat?.get_score(include_bonus) return total_score /// Set a specific mob's stat from its stats list. /mob/living/proc/st_set_stat(stat_path, amount) - var/datum/st_stat/given_stat = storyteller_stats["[stat_path]"] + var/datum/st_stat/given_stat = storyteller_stats[stat_path] return given_stat?.set_score(amount) /// Changes a specific mob's stat from its stats list by the given amount. /mob/living/proc/st_change_stat(stat_path, amount) - var/datum/st_stat/given_stat = storyteller_stats["[stat_path]"] + var/datum/st_stat/given_stat = storyteller_stats[stat_path] if(amount > 0) return given_stat?.increase_score(amount) else @@ -26,11 +26,11 @@ /mob/living/proc/st_add_stat_mod(stat_path, amount, source) - var/datum/st_stat/given_stat = storyteller_stats["[stat_path]"] + var/datum/st_stat/given_stat = storyteller_stats[stat_path] return given_stat?.add_stat_mod(amount, source) /mob/living/proc/st_remove_stat_mod(stat_path, source) - var/datum/st_stat/given_stat = storyteller_stats["[stat_path]"] + var/datum/st_stat/given_stat = storyteller_stats[stat_path] return given_stat?.remove_stat_mod(source) /datum/preferences/proc/apply_stats_from_prefs(mob/living/carbon/human/character) diff --git a/modular_darkpack/modules/storyteller_stats/code/stat_pref_middleware.dm b/modular_darkpack/modules/storyteller_stats/code/stat_pref_middleware.dm index 94421f8635bf..d4ac3140b003 100644 --- a/modular_darkpack/modules/storyteller_stats/code/stat_pref_middleware.dm +++ b/modular_darkpack/modules/storyteller_stats/code/stat_pref_middleware.dm @@ -33,9 +33,9 @@ to_chat(user, span_warning("You cannot be spawned in as this character to adjust its stats.")) return FALSE - var/datum/st_stat/stat_path = preferences.preference_storyteller_stats[params["stat"]] - var/datum/st_stat/abstract_stat = preferences.preference_storyteller_stats["[stat_path.abstract_type]"] - var/datum/st_stat/freebie_point_stat = preferences.preference_storyteller_stats["[STAT_FREEBIE_POINTS]"] + var/datum/st_stat/stat_path = preferences.preference_storyteller_stats[text2path(params["stat"])] + var/datum/st_stat/abstract_stat = preferences.preference_storyteller_stats[stat_path.abstract_type] + var/datum/st_stat/freebie_point_stat = preferences.preference_storyteller_stats[STAT_FREEBIE_POINTS] var/old_value = stat_path.get_score(include_bonus = FALSE) @@ -69,9 +69,9 @@ to_chat(user, span_warning("You have to be in the main menu to adjust your stats.")) return FALSE - var/datum/st_stat/stat_path = preferences.preference_storyteller_stats[params["stat"]] - var/datum/st_stat/abstract_stat = preferences.preference_storyteller_stats["[stat_path.abstract_type]"] - var/datum/st_stat/freebie_point_stat = preferences.preference_storyteller_stats["[STAT_FREEBIE_POINTS]"] + var/datum/st_stat/stat_path = preferences.preference_storyteller_stats[text2path(params["stat"])] + var/datum/st_stat/abstract_stat = preferences.preference_storyteller_stats[stat_path.abstract_type] + var/datum/st_stat/freebie_point_stat = preferences.preference_storyteller_stats[STAT_FREEBIE_POINTS] var/old_value = stat_path.get_score(include_bonus = FALSE) if(!stat_path.can_decrease_score(1)) @@ -103,6 +103,6 @@ var/real_name = user.client.prefs.read_preference(/datum/preference/name/real_name) user.log_message("reset all stats to default values on '[real_name]'", LOG_STATS) - preferences.preference_storyteller_stats = null + preferences.preference_storyteller_stats = list() preferences.preference_storyteller_stats = create_new_stat_prefs(preferences.preference_storyteller_stats) return TRUE diff --git a/modular_darkpack/modules/vampire_the_masquerade/code/preferences/morality/morality.dm b/modular_darkpack/modules/vampire_the_masquerade/code/preferences/morality/morality.dm index 92bbc3c16aba..e48b5926ad08 100644 --- a/modular_darkpack/modules/vampire_the_masquerade/code/preferences/morality/morality.dm +++ b/modular_darkpack/modules/vampire_the_masquerade/code/preferences/morality/morality.dm @@ -34,7 +34,7 @@ return choices[serialize(create_default_value())] /datum/preference/choiced/vtm_morality/apply_to_human(mob/living/carbon/human/target, value) - var/datum/st_stat/morality_path/morality/stat_morality = target.storyteller_stats["[STAT_MORALITY]"] + var/datum/st_stat/morality_path/morality/stat_morality = target.storyteller_stats[STAT_MORALITY] if(!stat_morality) return diff --git a/modular_darkpack/modules/vitae/code/embracing.dm b/modular_darkpack/modules/vitae/code/embracing.dm index 95f2e23b78c2..f4831fb60605 100644 --- a/modular_darkpack/modules/vitae/code/embracing.dm +++ b/modular_darkpack/modules/vitae/code/embracing.dm @@ -26,7 +26,7 @@ for(var/i in 1 to 3) childe.give_st_power(clan_disciplines[i]) - var/datum/st_stat/morality_path/morality/stat_morality_childe = childe.storyteller_stats["[STAT_MORALITY]"] + var/datum/st_stat/morality_path/morality/stat_morality_childe = childe.storyteller_stats[STAT_MORALITY] if(stat_morality_childe) stat_morality_childe.morality_path = new /datum/morality/humanity(childe) // set morality to path of humanity @@ -35,10 +35,10 @@ // update morality score and the splat enlightenment if(istype(kindred_splat)) - var/datum/st_stat/stat_conscience = childe.storyteller_stats["[STAT_CONSCIENCE]"] - var/datum/st_stat/stat_self_control = childe.storyteller_stats["[STAT_SELF_CONTROL]"] - var/datum/st_stat/stat_conviction = childe.storyteller_stats["[STAT_CONVICTION]"] - var/datum/st_stat/stat_instinct = childe.storyteller_stats["[STAT_INSTINCT]"] + var/datum/st_stat/stat_conscience = childe.storyteller_stats[STAT_CONSCIENCE] + var/datum/st_stat/stat_self_control = childe.storyteller_stats[STAT_SELF_CONTROL] + var/datum/st_stat/stat_conviction = childe.storyteller_stats[STAT_CONVICTION] + var/datum/st_stat/stat_instinct = childe.storyteller_stats[STAT_INSTINCT] if(stat_morality_childe.morality_path.alignment == MORALITY_HUMANITY) kindred_splat.enlightenment = FALSE @@ -90,7 +90,7 @@ write_preference_midround(/datum/preference/choiced/subsplat/vampire_clan, get_clan()?.name) // clan should already be changed by the embracing itself... // ...same with your morality path. unfortunately, this is a bit of a clusterfuck to get - var/datum/st_stat/morality_path/morality/stat_morality = storyteller_stats["[STAT_MORALITY]"] + var/datum/st_stat/morality_path/morality/stat_morality = storyteller_stats[STAT_MORALITY] if(stat_morality?.morality_path) write_preference_midround(/datum/preference/choiced/vtm_morality, stat_morality.morality_path.name) // the actual stat isnt editable, so i *shouldnt* need to worry about setting the stat in preferences,