Continue last save/preview saves

Announcements, support questions, and discussion for Save System for Opsive Character Controllers.
tabtaste
Posts: 16
Joined: Fri Oct 07, 2022 11:46 am

Re: Continue last save/preview saves

Post by tabtaste »

hey,

the solution does not work. foreach only find the desctrutable objects in the current scene and only when the object is not destroyed or deactivated.

greetings
User avatar
Tony Li
Posts: 20705
Joined: Thu Jul 18, 2013 1:27 pm

Re: Continue last save/preview saves

Post by Tony Li »

Good point. You'll want to cache the list of destructible keys when the scene starts. For example:

Code: Select all

private List<string> destructibleKeys;

void Start()
{
    destructibleKeys = new List<string>(FindObjectsOfType<DestructibleSaver>());
}

void OnTriggerEnter(Collider other)
{
    if (other.CompareTag("Player"))
    {
        destructibleKeys.ForEach(key => SaveSystem.currentSavedGameData.DeleteData(key));
    }
}
tabtaste
Posts: 16
Joined: Fri Oct 07, 2022 11:46 am

Re: Continue last save/preview saves

Post by tabtaste »

yes thats right. But i want delete or reset all descructable saver in one moment/ scene from all descturable saver in the hole game. with this methood i only can delete thes from the actual scene right?

can i load the savedata delete all desturctable saver dater in hole save and save back or something?

EDIT:
Maybe is a outher way better: I want to save the descrutable status only for scene transition. i dont want to save or load this status. so wen i save or load the game all desctrutable object should delete there status.

I say it easyer. wen i save the game all enemy should respawn
User avatar
Tony Li
Posts: 20705
Joined: Thu Jul 18, 2013 1:27 pm

Re: Continue last save/preview saves

Post by Tony Li »

Hi,

It will help to be familiar with the SaveSystem API.

Assuming the SaveSystem component's Save Current Scene is ticked, you can do something like this:

1. Put a script like this on the SaveSystem GameObject:

RespawnEnemiesOnLoadGame.cs

Code: Select all

public class RespawnEnemiesOnLoadGame : MonoBehaviour
{
    public static bool isLoadingGame;
    
    void Start()
    {
        SaveSystem.loadStarted += OnLoadStarted; // We want to know when SaveSystem is loading a game...
        SaveSystem.saveDataApplied += OnSaveDataApplied; // ...and when it's done applying save data.
    }

    void OnDestroy()
    {
        SaveSystem.loadStarted -= OnLoadStarted;
        SaveSystem.saveDataApplied += OnSaveDataApplied;
    }

    void OnLoadStarted()
    {
        isLoadingGame = true;
    }
    
    void OnSaveDataApplied()
    {
        isLoadingGame = false;
    }
}
2. Make and use a subclass of DestructibleSaver that checks RespawnEnemiesOnLoadGame.isLoadingGame:

Code: Select all

public class RespawningDestructibleSaver : DestructibleSaver
{
    public override void ApplyData(string s)
    {
        if (!RespawnEnemiesOnLoadGame.isLoadingGame)
        {
            base.ApplyData(s);
        }
    }
}
tabtaste
Posts: 16
Joined: Fri Oct 07, 2022 11:46 am

Re: Continue last save/preview saves

Post by tabtaste »

hmm with this script alls enemys in the actual active scene respawn wen game is loaded.

i think my problem is that i will save the dead status between scene an on scene change the status is saved right?
so i think my only way to solve my problem is to write a function that get the savegame in slot and delete all infos about destrutable saver in it.

maybe i should right my own script for enemys for stay dead between scene and dont ever save enemy status with pixelcrusher.savesystem? did u have an idea ?

greetings
User avatar
Tony Li
Posts: 20705
Joined: Thu Jul 18, 2013 1:27 pm

Re: Continue last save/preview saves

Post by Tony Li »

tabtaste wrote: Mon Oct 10, 2022 11:04 amwith this script alls enemys in the actual active scene respawn wen game is loaded.
Isn't that what you asked to do? What do you want to work differently?
tabtaste
Posts: 16
Joined: Fri Oct 07, 2022 11:46 am

Re: Continue last save/preview saves

Post by tabtaste »

not exactly. i want to call a function wen i save the game. this function fill all health and energy from the player a should respawn ALL enemys in the whole game. when i change now a scene the enemys should spawn like bevor until i kill them again.

greetings
tabtaste
Posts: 16
Joined: Fri Oct 07, 2022 11:46 am

Re: Continue last save/preview saves

Post by tabtaste »

my idia now is to store a keys from dead enemy in a dont destroy on load obect and delete all date bevore save the game.

do you think that can be work or have an better idea?

Code: Select all

    public void AddDeadEnemyToList(string deadEnemy)// call wen enemy die
    {
        if (!deadEnemys.Contains(deadEnemy))
        {
            deadEnemys.Add(deadEnemy);
        }

    }
    public void DeleteEnemyDataAfterSave()// call bevor every time save the game
    {

        foreach (var enemy in deadEnemys)
        {
            SaveSystem.currentSavedGameData.DeleteData(enemy);
        }
        deadEnemys.Clear();
    }

Code: Select all

    public void EnemyKilledAndSetOnRespawnList()// i add this script to every enemy that should respawn
    {
        DestructibleSaver saver = GetComponent<DestructibleSaver>();
        HoldEnemyDeadKeys.Instance.AddDeadEnemyToList(saver.key);
    }
User avatar
Tony Li
Posts: 20705
Joined: Thu Jul 18, 2013 1:27 pm

Re: Continue last save/preview saves

Post by Tony Li »

The scripts I suggested above should respawn all enemies when you load a game. Is this not working?

You can extend the scripts to also reset the player's health and energy.
tabtaste
Posts: 16
Joined: Fri Oct 07, 2022 11:46 am

Re: Continue last save/preview saves

Post by tabtaste »

The Script from you above respawn all enemys in the current scene. Yes i can modify the Script to Also respawn when save the game but enemys in outher scenes dont respawn when i enter them after loading.
Post Reply