Permafat restored, cryo bug fix

Bug that caused cryopods to not teleport afk people fixed
Fixed issues regarding saving persistent fat or permanent weight while in another player's character
This commit is contained in:
Alphas00
2024-09-10 21:20:42 +02:00
parent 5ef1b7b466
commit ea735b47b0
8 changed files with 99 additions and 11 deletions
+35
View File
@@ -11,6 +11,8 @@ GLOBAL_LIST_INIT(uncapped_resize_areas, list(/area/bridge, /area/crew_quarters,
var/fat_hiders = list()
//The actual value a mob is at. Is equal to fatness if fat_hider is FALSE.
var/fatness_real = 0
//Permanent fatness, which sticks around between rounds
var/fatness_perma = 0
///At what rate does the parent mob gain weight? 1 = 100%
var/weight_gain_rate = 1
//At what rate does the parent mob lose weight? 1 = 100%
@@ -49,6 +51,7 @@ GLOBAL_LIST_INIT(uncapped_resize_areas, list(/area/bridge, /area/crew_quarters,
fatness = fatness_real //Make their current fatness their real fatness
hiders_apply() //Check and apply hiders
perma_apply() //Check and apply for permanent fat
xwg_resize() //Apply XWG
return TRUE
@@ -138,10 +141,42 @@ GLOBAL_LIST_INIT(uncapped_resize_areas, list(/area/bridge, /area/crew_quarters,
if(client?.prefs?.max_weight) //Check their prefs
fatness = min(fatness, (client?.prefs?.max_weight - 1)) //And make sure it's not above their preferred max
/mob/living/carbon/proc/perma_apply()
if(fatness_perma > 0) //Check if we need to make calcs at all
fatness = fatness + fatness_perma //Add permanent fat to fatness
if(client?.prefs?.max_weight) //Check for max weight prefs
fatness = min(fatness, (client?.prefs?.max_weight - 1)) //Apply max weight prefs
/mob/living/carbon/proc/adjust_perma(adjustment_amount, type_of_fattening = FATTENING_TYPE_ITEM)
if(!client)
return FALSE
if(!client.prefs.weight_gain_permanent)
return FALSE
if(!adjustment_amount || !type_of_fattening)
return FALSE
if(!HAS_TRAIT(src, TRAIT_UNIVERSAL_GAINER) && client?.prefs)
if(!check_weight_prefs(type_of_fattening))
return FALSE
var/amount_to_change = adjustment_amount
if(adjustment_amount > 0)
amount_to_change = amount_to_change * weight_gain_rate
else
amount_to_change = amount_to_change * weight_loss_rate
fatness_perma += amount_to_change
fatness_perma = max(fatness_perma, MINIMUM_FATNESS_LEVEL)
if(client?.prefs?.max_weight) // GS13
fatness_perma = min(fatness_perma, (client?.prefs?.max_weight - 1))
/mob/living/carbon/human/handle_breathing(times_fired)
. = ..()
fatness = fatness_real
hiders_apply()
perma_apply()
xwg_resize()
/mob/living/carbon/proc/xwg_resize()
+35 -2
View File
@@ -1,7 +1,36 @@
/mob/living/carbon
var/savekey
var/ckeyslot
/mob/living/carbon/proc/perma_fat_save(mob/living/carbon/character)
var/key = savekey
if(!key)
return FALSE
var/filename = "preferences.sav"
var/path = "data/player_saves/[key[1]]/[key]/[filename]"
var/savefile/S = new /savefile(path)
if(!path)
return FALSE
if(character.ckeyslot)
var/slot = character.ckeyslot
S.cd = "/character[slot]"
var/persi
S["weight_gain_persistent"] >> persi
if(persi)
WRITE_FILE(S["starting_weight"] , character.fatness_real)
var/perma
S["weight_gain_permanent"] >> perma
if(S["weight_gain_permanent"])
WRITE_FILE(S["permanent_fat"] , character.fatness_perma)
/*
/datum/preferences/proc/perma_fat_save(character)
if(iscarbon(character))
var/mob/living/carbon/C = character
if(!C.client.prefs.weight_gain_permanent)
if(!C.client.prefs.weight_gain_permanent && !C.client.prefs.weight_gain_persistent)
return FALSE
if(!path)
return 0
@@ -17,4 +46,8 @@
return 0
S.cd = "/character[default_slot]"
WRITE_FILE(S["starting_weight"] , C.fatness_real)
if(C.client.prefs.weight_gain_persistent)
WRITE_FILE(S["starting_weight"] , C.fatness_real)
if(C.client.prefs.weight_gain_permanent)
WRITE_FILE(S["permanent_fat"] , C.fatness_perma)
*/
@@ -19,6 +19,8 @@
var/blueberry_inflation = FALSE
///Extreme weight gain
var/weight_gain_extreme = FALSE
///Persistant fatness
var/weight_gain_persistent = FALSE
///Permanent weight gain
var/weight_gain_permanent = FALSE
/// At what weight will you start to get stuck in airlocks?
@@ -53,6 +53,7 @@
if(!iscarbon(M))
return..()
M.adjust_fatness(30, FATTENING_TYPE_CHEM)
M.adjust_perma(1, FATTENING_TYPE_CHEM)
..()
. = 1
@@ -62,6 +63,7 @@
return..()
var/mob/living/carbon/C = M
C.adjust_fatness(20, FATTENING_TYPE_CHEM)
C.adjust_perma(1, FATTENING_TYPE_CHEM)
..()
/datum/reagent/fermi_fat/overdose_start(mob/living/M)
@@ -179,7 +181,8 @@
/datum/reagent/fermi_slim/on_mob_life(mob/living/carbon/M)
if(!iscarbon(M))
return..()
M.adjust_fatness(-50, FATTENING_TYPE_CHEM)
M.adjust_fatness(-50, FATTENING_TYPE_WEIGHT_LOSS)
M.adjust_perma(-5, FATTENING_TYPE_WEIGHT_LOSS)
..()
. = 1
+5 -4
View File
@@ -6,10 +6,11 @@
//GS13 Process permanent fat
for(var/mob/m in GLOB.player_list)
if(m.client.prefs)
if(m.client.ckey)
m.client.prefs.perma_fat_save(m)
if(iscarbon(m))
var/mob/living/carbon/C = m
if(C)
C.perma_fat_save(C)
gather_antag_data()
record_nuke_disk_location()
var/json_file = file("[GLOB.log_directory]/round_end_data.json")
+10 -1
View File
@@ -105,9 +105,11 @@ GLOBAL_LIST_EMPTY(preferences_datums)
//GS13
var/starting_weight = 0 //how thicc you wanna be at start
var/permanent_fat = 0 //If it isn't the consequences of your own actions
var/wg_rate = 0.5
var/wl_rate = 0.5
var/voice = "human"
var/ckeyslot
//HS13 jobs
var/sillyroles = TRUE //for clown and mime
@@ -1076,7 +1078,8 @@ GLOBAL_LIST_EMPTY(preferences_datums)
dat += "This preference functions similar to the one before but allows for items with more drastic effects. <b>Do not enable this if you aren't okay with more drastic things happening to your character.</b><BR>"
dat += "<b>Extreme Fatness Vulnerability:</b><a href='?_src_=prefs;preference=extreme_fatness_vulnerable'>[extreme_fatness_vulnerable == TRUE ? "Enabled" : "Disabled"]</a><BR>"
dat += "<b>Extreme Weight Gain (Sprite Size scales with weight):</b><a href='?_src_=prefs;preference=weight_gain_extreme'>[weight_gain_extreme == TRUE ? "Enabled" : "Disabled"]</a><BR>"
dat += "<b>Weight Gain Permanent (endround/cryo weight becomes your new start weight):</b><a href='?_src_=prefs;preference=weight_gain_permanent'>[weight_gain_permanent == TRUE ? "Enabled" : "Disabled"]</a><BR>"
dat += "<b>Persistent Fat (endround/cryo weight becomes your new start weight):</b><a href='?_src_=prefs;preference=weight_gain_persistent'>[weight_gain_persistent == TRUE ? "Enabled" : "Disabled"]</a><BR>"
dat += "<b>Permanent Weight (hard to remove and persistent weight):</b><a href='?_src_=prefs;preference=weight_gain_permanent'>[weight_gain_permanent == TRUE ? "Enabled" : "Disabled"]</a><BR>"
dat += "<h2>GS13 Helplessness Preferences</h2>"
dat += "<b>Please be careful when using these mechanics as not to use them in a way that negatively impacts those around you. If you are seriously needed for something, especially something station critical, do not use these as an excuse to ignore your duty.</b><BR><BR>"
@@ -2666,6 +2669,8 @@ GLOBAL_LIST_EMPTY(preferences_datums)
weight_gain_nanites = !weight_gain_nanites
if("weight_gain_extreme")
weight_gain_extreme = !weight_gain_extreme
if("weight_gain_persistent")
weight_gain_persistent = !weight_gain_persistent
if("weight_gain_permanent")
weight_gain_permanent = !weight_gain_permanent
if("noncon_weight_gain")
@@ -3000,8 +3005,12 @@ GLOBAL_LIST_EMPTY(preferences_datums)
//GS13
character.fatness = starting_weight
character.fatness_real = starting_weight
if(weight_gain_permanent)
character.fatness_perma = permanent_fat
character.weight_gain_rate = wg_rate
character.weight_loss_rate = wl_rate
character.savekey = clientckey
character.ckeyslot = ckeyslot
character.gender = gender
character.age = age
@@ -298,6 +298,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
default_slot = slot
WRITE_FILE(S["default_slot"] , slot)
ckeyslot = slot
S.cd = "/character[slot]"
var/needs_update = savefile_needs_update(S)
if(needs_update == -2) //fatal, can't load any data
@@ -333,6 +334,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
S["age"] >> age
S["body_size"] >> body_size
S["starting_weight"] >> starting_weight
S["permanent_fat"] >> permanent_fat
S["wg_rate"] >> wg_rate
S["wl_rate"] >> wl_rate
S["hair_color"] >> hair_color
@@ -494,6 +496,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
S["weight_gain_nanites"] >> weight_gain_nanites
S["weight_gain_weapons"] >> weight_gain_weapons
S["weight_gain_extreme"] >> weight_gain_extreme
S["weight_gain_persistent"] >> weight_gain_persistent
S["weight_gain_permanent"] >> weight_gain_permanent
S["wg_rate"] >> wg_rate
S["wl_rate"] >> wl_rate
@@ -713,6 +716,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
WRITE_FILE(S["weight_gain_chems"], weight_gain_chems)
WRITE_FILE(S["weight_gain_weapons"], weight_gain_weapons)
WRITE_FILE(S["weight_gain_extreme"], weight_gain_extreme)
WRITE_FILE(S["weight_gain_persistent"], weight_gain_persistent)
WRITE_FILE(S["weight_gain_permanent"], weight_gain_permanent)
WRITE_FILE(S["wg_rate"], wg_rate)
WRITE_FILE(S["wl_rate"], wl_rate)
@@ -249,9 +249,10 @@
var/mob/living/mob_occupant = occupant
//GS13 Process permanent fat
if(mob_occupant.client.prefs)
if(mob_occupant.client.ckey)
mob_occupant.client.prefs.perma_fat_save(mob_occupant)
if(iscarbon(mob_occupant))
var/mob/living/carbon/C = mob_occupant
if(C)
C.perma_fat_save(C)
//Update any existing objectives involving this mob.
for(var/datum/objective/O in GLOB.objectives)