Fix infinite recursion crash in BalanceManager on payment pulse

Исправлена бесконечная рекурсия (StackOverflowException) при синхронизации баланса с кредитами платы.

Детали изменений:
- В класс BalanceManager добавлен флаг-предохранитель _isSyncingCredits.
- Обработчик OnImpulsePaid теперь игнорирует события начисления кредитов, вызванные синхронизацией.
- В методе SyncCreditsWithBalance вызов ComSystemManager.SetCredits обернут в блок try-finally для безопасного управления флагом _isSyncingCredits.
This commit is contained in:
Данил Ярош 2026-06-30 11:11:11 +03:00
parent 942c5dd9fa
commit e9d5562684

View File

@ -36,6 +36,7 @@ namespace RR.Common.Managers
private int _startGameCost = 10;
private int _continueGameCost = 5;
private bool _freeGame;
private bool _isSyncingCredits;
private void Awake()
{
@ -143,6 +144,9 @@ namespace RR.Common.Managers
/// </summary>
private void OnImpulsePaid(int creditsCount)
{
if (_isSyncingCredits)
return;
// creditsCount - это количество добавленных кредитов (всегда 1 для одного импульса)
// Начисляем стоимость импульса
AddBalance(_impulseCost);
@ -302,8 +306,16 @@ namespace RR.Common.Managers
if (targetCredits == currentCredits)
return; // Кредиты уже синхронизированы
// Устанавливаем кредиты напрямую через SetCredits
ComSystemManager.SetCredits(targetCredits);
_isSyncingCredits = true;
try
{
// Устанавливаем кредиты напрямую через SetCredits
ComSystemManager.SetCredits(targetCredits);
}
finally
{
_isSyncingCredits = false;
}
}
/// <summary>