using GDWeave; using GDWeave.Modding; using Teemaw.Calico.LexicalTransformer; namespace Atproto; public class AtProtoSaveFactory { public static IScriptMod Create(IModInterface mod) { return new TransformationRuleScriptModBuilder() .ForMod(mod) .Named("AtProtoSave") .Patching("res://Scenes/Singletons/UserSave/usersave.gdc") .AddRule(new TransformationRuleBuilder() .Named("ready_slot_condition") .Matching(TransformationPatternFactory.CreateGdSnippetPattern("_load_save(last_loaded_slot)", 2)) .Do(Operation.ReplaceAll) .With(""" var Atproto = $"/root/Atproto" if last_loaded_slot != Atproto.ATPROTO_SLOT or Atproto.config.Autoload: _load_save(last_loaded_slot) else: last_loaded_slot = -1 """, 2) ) .AddRule(new TransformationRuleBuilder() .Named("save_file") .Matching(TransformationPatternFactory.CreateGdSnippetPattern( "\"locked_refs\": PlayerData.locked_refs, \n\t}\n", 2)) .Do(Operation.Append) .With("var atproto = $\"/root/Atproto\"\nif atproto.can_save_to_atproto():\n\tatproto.AtProtoClient.save_file()\n", 1) ) .Build(); } }