85 lines
2.4 KiB
Plaintext
85 lines
2.4 KiB
Plaintext
/**
|
|
* Stores trophies in curator display cases
|
|
*/
|
|
/datum/controller/subsystem/persistence
|
|
var/list/saved_trophies = list()
|
|
|
|
/datum/controller/subsystem/persistence/LoadGamePersistence()
|
|
. = ..()
|
|
LoadTrophies()
|
|
|
|
/datum/controller/subsystem/persistence/SaveGamePersistence()
|
|
. = ..()
|
|
CollectTrophies()
|
|
|
|
/datum/controller/subsystem/persistence/proc/LoadTrophies()
|
|
if(fexists("data/npc_saves/TrophyItems.sav")) //legacy compatability to convert old format to new
|
|
var/savefile/S = new /savefile("data/npc_saves/TrophyItems.sav")
|
|
var/saved_json
|
|
S >> saved_json
|
|
if(!saved_json)
|
|
return
|
|
saved_trophies = json_decode(saved_json)
|
|
fdel("data/npc_saves/TrophyItems.sav")
|
|
else
|
|
var/json_file = file("data/npc_saves/TrophyItems.json")
|
|
if(!fexists(json_file))
|
|
return
|
|
var/list/json = json_decode(file2text(json_file))
|
|
if(!json)
|
|
return
|
|
saved_trophies = json["data"]
|
|
SetUpTrophies(saved_trophies.Copy())
|
|
|
|
/datum/controller/subsystem/persistence/proc/SetUpTrophies(list/trophy_items)
|
|
for(var/A in GLOB.trophy_cases)
|
|
var/obj/structure/displaycase/trophy/T = A
|
|
if (T.showpiece)
|
|
continue
|
|
T.added_roundstart = TRUE
|
|
|
|
var/trophy_data = pick_n_take(trophy_items)
|
|
|
|
if(!islist(trophy_data))
|
|
continue
|
|
|
|
var/list/chosen_trophy = trophy_data
|
|
|
|
if(!chosen_trophy || isemptylist(chosen_trophy)) //Malformed
|
|
continue
|
|
|
|
var/path = text2path(chosen_trophy["path"]) //If the item no longer exist, this returns null
|
|
if(!path)
|
|
continue
|
|
|
|
T.showpiece = new /obj/item/showpiece_dummy(T, path)
|
|
T.trophy_message = chosen_trophy["message"]
|
|
T.placer_key = chosen_trophy["placer_key"]
|
|
T.update_icon()
|
|
|
|
/datum/controller/subsystem/persistence/proc/CollectTrophies()
|
|
var/json_file = file("data/npc_saves/TrophyItems.json")
|
|
var/list/file_data = list()
|
|
file_data["data"] = remove_duplicate_trophies(saved_trophies)
|
|
fdel(json_file)
|
|
WRITE_FILE(json_file, json_encode(file_data))
|
|
|
|
/datum/controller/subsystem/persistence/proc/remove_duplicate_trophies(list/trophies)
|
|
var/list/ukeys = list()
|
|
. = list()
|
|
for(var/trophy in trophies)
|
|
var/tkey = "[trophy["path"]]-[trophy["message"]]"
|
|
if(ukeys[tkey])
|
|
continue
|
|
else
|
|
. += list(trophy)
|
|
ukeys[tkey] = TRUE
|
|
|
|
/datum/controller/subsystem/persistence/proc/SaveTrophy(obj/structure/displaycase/trophy/T)
|
|
if(!T.added_roundstart && T.showpiece)
|
|
var/list/data = list()
|
|
data["path"] = T.showpiece.type
|
|
data["message"] = T.trophy_message
|
|
data["placer_key"] = T.placer_key
|
|
saved_trophies += list(data)
|