state("ACBSP")
{
    int Percentage: 0x025B08A4, 0x278, 0x4, 0xC, 0x7C; //Percentage
    int Money: 0x025C63AC, 0x24, 0x40; //Money
    bool Main_Loading: 0x25B0B60; // 1 = non gameplay, 0 = gameplay
}

init
{
    vars.AllMainMissions = new HashSet<int>{100, 150, 250, 400, 600, 700, 800, 1000, 1200, 1300, 1400, 1500, 2100, 2200, 2400, 2500, 3000, 5200, 6000, 6300, 6800}; //Money gained from main missions
    vars.NegativeMoney = 400; //Money your lose
    vars.stopwatch = new Stopwatch();
    vars.SplitTime = 0;
}

update
{
    vars.SplitTime = (int)vars.stopwatch.Elapsed.TotalSeconds;
}

start
{
    if (!current.Main_Loading && old.Main_Loading && current.Money == null)
    {
        return true;
    }
}

onStart
{
    if (vars.SplitTime > 0)
    {
        vars.stopwatch.Restart();
    } else
    {
        vars.stopwatch.Start();
    } 
}

split
{
    if (current.Percentage > old.Percentage && (vars.AllMainMissions.Contains(current.Money - old.Money) 
    || vars.NegativeMoney == current.Money - old.Money) && vars.SplitTime > 2) //splits when the percentage increases and money increases
    {
        vars.stopwatch.Restart();
        return true;
    } else if(vars.AllMainMissions.Contains(Math.Abs(current.Money - old.Money)) && vars.SplitTime > 2) // if first condition fails it checks if only the money has increased
    {
        vars.stopwatch.Restart();
        return true;
    } else if(current.Percentage > old.Percentage && vars.SplitTime > 2) // if the stuff before this fails it checks if only the percentage has increased
    {
        vars.stopwatch.Restart();
        return true;
    }

    if (!current.Main_Loading && currnet.Money == null && old.Main_Loading && vars.SplitTime > 2) //splits when leaving the animus
    {
        vars.stopwatch.Restart();
        return true;
    } else if(current.Main_Loading && currnet.Money != null && !old.Main_Loading && vars.SplitTime > 2) //splits when entering the animus
    {
        vars.stopwatch.Restart();
        return true;
    }
}

isLoading
{
    if (current.Menu_Loading && current.Money == 0)
    {
        return true;
    } else
    {
        return false;
    }
}

onReset
{
    vars.stopwatch.Stop();
}