Fix infinite recursion crash in BalanceManager on payment pulse
Исправлена бесконечная рекурсия (StackOverflowException) при синхронизации баланса с кредитами платы. Детали изменений: - В класс BalanceManager добавлен флаг-предохранитель _isSyncingCredits. - Обработчик OnImpulsePaid теперь игнорирует события начисления кредитов, вызванные синхронизацией. - В методе SyncCreditsWithBalance вызов ComSystemManager.SetCredits обернут в блок try-finally для безопасного управления флагом _isSyncingCredits.
This commit is contained in:
parent
942c5dd9fa
commit
e9d5562684
@ -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>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user