客户端rsa,冗余清理,bug修复,安卓build问题

This commit is contained in:
FloatGaming
2026-07-14 01:43:49 +08:00
parent fd22501f71
commit f8985d91d2
682 changed files with 4595 additions and 11216 deletions
@@ -19,6 +19,7 @@ public sealed class PlayerExperienceLedger : MonoBehaviour
private PlayerExperiencePayload payload;
private bool initialized;
private bool loadedFromSave;
private bool hasAnyRecoverableLocalState;
private Player_SO boundPlayerData;
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)]
@@ -75,6 +76,8 @@ public sealed class PlayerExperienceLedger : MonoBehaviour
return;
}
hasAnyRecoverableLocalState = SecureSaveVault.HasAnyRecoverableState("player_experience", "runtime", GetLegacySavePath())
|| PlayerProgressBackupService.HasPlayerExperienceBackup();
loadedFromSave = SecureSaveVault.TryLoadJson("player_experience", "runtime", out payload, GetLegacySavePath());
if (payload == null)
{
@@ -91,6 +94,8 @@ public sealed class PlayerExperienceLedger : MonoBehaviour
}
}
hasAnyRecoverableLocalState = hasAnyRecoverableLocalState || loadedFromSave;
initialized = true;
}
@@ -104,11 +109,16 @@ public sealed class PlayerExperienceLedger : MonoBehaviour
InitializeIfNeeded();
boundPlayerData = playerData;
if (!loadedFromSave)
if (!loadedFromSave && !hasAnyRecoverableLocalState)
{
payload.playerExp = Mathf.Max(0, playerData.player_currentEXP);
// 首次启动且无任何可恢复存档:用硬编码默认值(0)建立初始存档,
// 不读取 Player_SO 的烘焙经验值,避免打包测试数据污染玩家进度。
payload = CreateDefaultPayload();
SyncToPlayerData();
SaveNow();
loadedFromSave = true;
hasAnyRecoverableLocalState = true;
NotifyExperienceChanged();
return;
}
@@ -122,6 +132,13 @@ public sealed class PlayerExperienceLedger : MonoBehaviour
return payload.playerExp;
}
public void SetExperience(int amount)
{
InitializeIfNeeded();
payload.playerExp = Mathf.Max(0, amount);
SaveNow();
}
public void AddExperience(int amount)
{
if (amount == 0)
@@ -181,6 +198,16 @@ public sealed class PlayerExperienceLedger : MonoBehaviour
NotifyExperienceChanged();
}
public void ClearPersistentState()
{
InitializeIfNeeded();
payload = CreateDefaultPayload();
SecureSaveVault.Delete("player_experience", "runtime", GetLegacySavePath());
PlayerProgressBackupService.ClearPlayerExperienceBackup();
SyncToPlayerData();
NotifyExperienceChanged();
}
private void SyncToPlayerData()
{
if (boundPlayerData == null || payload == null)