Release Candidate 8.1.0#479
Open
kirre-bylund wants to merge 47 commits into
Open
Conversation
- Add LootLockerMultiUserSessionMode enum (Hotseat/SingleSession/ProfileSwitching/NotSet) at namespace scope in LootLockerConfig.cs - Add multiUserSessionMode config field with detailed inspector tooltip - Add [InitializeOnLoadMethod] pre-migration: NotSet resolves to Hotseat (existing projects with API key) or SingleSession (new installs) and is persisted to the asset - Modify _SetPlayerData to apply session mode: - SingleSession: clears all previous state before saving, always sets new player as default - ProfileSwitching: deactivates other players (keeps cold cache), sets new player as default - Hotseat (default): preserves existing behaviour, first auth in session is default
- SingleSession: save new player first, then wipe others via _ClearAllSavedStatesExceptForPlayer to prevent data loss on IO failure - ExternalFileConfig: add multi_user_session_mode field - Config.Get(): apply multi_user_session_mode from external file config (only if != NotSet) - CheckForSettingOverrides: add -multiusersessionmode command-line override
NotSet is now resolved the same way migration does: no API key → SingleSession, otherwise Hotseat.
This reverts commit d929eaf.
- Add LootLockerBanInfo DTO with ban_reason, banned_on, banned_until, permanent - Add LootLockerBanStatusRequest/Response in LootLockerBanRequest.cs - Add LootLockerBanInfo ban field to LootLockerErrorData for player_banned 403 responses - Add banStatusRequest endpoint (POST session/ban-status) - Add LootLockerSDKManager.GetPlayerBanStatus(playerUlid, onComplete) - Add admin test helpers: banPlayer and unbanPlayer in LootLockerTestConfigurationBan.cs - Add banPlayer/unbanPlayer endpoints in LootLockerTestConfigurationEndpoints.cs - Add BanTest.cs with 3 integration tests covering ban status and session rejection
…aderboard detail response Adds two new fields to LootLockerLeaderboardDetailResponse: - allow_manual_resets: whether the leaderboard allows manual resets - upcoming_resets: array of LootLockerLeaderboardUpcomingReset, containing pending manual resets ordered by scheduled_for ascending Also introduces the new LootLockerLeaderboardUpcomingReset class with id, name, and scheduled_for fields. Part of #1279
Field removed from LootLockerLeaderboardDetails as the backend no longer requires the per-board opt-in. Manual resets are unconditionally available.
…on after SDK updates Previously StoreSDKVersion() early-outed when sdk_version was already populated, meaning it would never update after an SDK upgrade on disk. Now it fires OnSdkVersionDetermined immediately with the cached value for responsiveness, then always re-queues Client.List() to get the fresh authoritative version. Also adds SdkVersionDetermined bool so InitializeOnLoad subscribers that register after the event has already fired can still act on it.
Adds LootLockerUpdateChecker ([InitializeOnLoad]) that: - Waits StartupDelaySeconds (60s) after editor load before checking, to avoid dialogs interrupting heavy project loads - Subscribes to LootLockerConfig.OnSdkVersionDetermined (or runs immediately if the version was already resolved before the delay) - Calls the GitHub Releases API at most once per 24h - Skips silently for UPM Registry installs (Package Manager handles it) - Shows a non-blocking EditorWindow with: Update Now, Skip This Version, Remind in 7 Days, Never Notify - Manual trigger always available at Window > LootLocker > Check for Updates Silence settings persisted in EditorPrefs per machine.
- Add bounds check on args array before parsing -enableeditoradminextension and -multiusersessionmode - Guard CreateNewSettings when IsFileConfigActive is true
The file config was being re-applied on every read (hot path in Get()), overwriting all config fields unconditionally. This is wasteful since settings are UI-locked while a file config is active. The file config is now applied only once on cold load, and reset on play mode entry.
✅ Release PR Validation Passed
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
LootLocker_UnitySDKv8.1.0
Features
• 🎮 Xbox Store IAP —
GetXboxServiceTicket(),RedeemXboxStorePurchaseForPlayer(), andRedeemXboxStorePurchaseForClass()support the Xbox Store purchase flow from the client.• 👥 Multi-User Session Modes — Three new session strategies via
LootLockerMultiUserSessionMode:Pass the mode to
LootLockerSDKManager.Init()or configure it in LootLocker Settings. Existing projects auto-migrate to Hotseat; new installs default to SingleSession.• 🏛️ New Prefabs — We have added prefabs for Cloud Saves and for Universal Player Authentication. Feel free to use these in your projects to add LootLocker functionality in an even simpler way.
• 🚫 Player Ban Support —
LootLockerSDKManager.GetPlayerBanStatus()queries a player's ban reason, dates, and permanent flag. When a session start fails with error codeplayer_banned, the ban details are now available onerrorData.ban.CheckConnectionStatus()also returns aBannedstate with ban information.• 📡 Connection State Check —
LootLockerSDKManager.CheckConnectionStatus()pings the server and returns aLootLockerConnectionState:NotInitialized→NotSignedIn→SavedButInactive→SignedInAndConnected/Banned/SessionExpired/NoConnection/ServerError. Use this to diagnose session issues and show appropriate UI.• 🛒 Catalog Items by ID —
LootLockerSDKManager.ListCatalogItemsById()looks up catalog entries bycatalog_listing_id(up to 100 at once). Returns inlined entity details for assets, currencies, progression items, and groups with nested group associations and optional metadata filtering.• 🏆 Upcoming Leaderboard Resets — Leaderboard detail responses now include an
upcoming_resetsarray with pending manual reset information (id, name, scheduled time).• 🎁 Notification Asset Instance IDs —
LootLockerNotificationRewardAssetnow has anAsset_instance_idsfield listing the specific instance IDs granted for multi-quantity rewards.• 🔌 Manual Session Start —
LootLockerSDKManager.StartSessionManual()lets you inject externally-sourced player state (from a server token exchange, for example) without making an authentication call.• 📣 In-Editor Update Checker — The SDK now checks GitHub Releases every 24 hours and shows a notification when a newer version is available. Manual check via Tools → LootLocker Tools → Check for Updates. Supports Skip, Remind Later, and Never Notify. Respects UPM registry-managed packages.
• 🔒 Credential Obfuscation — 14 additional sensitive fields (
steam_ticket,id_token,auth_code,bearer_token,purchase_token, etc.) are now redacted in log output.• ⚙️ Editor Admin Extension Toggle — New
enableEditorAdminExtensionconfig setting to disable the LootLocker admin tools in the editor for production setups.Fixes
• Broadcast localization keys — Custom key-value pairs in broadcast localizations are no longer dropped during deserialization.
• Editor branding — All menu paths and window titles now use dynamic
PackageNameinstead of hardcoded"LootLocker", supporting white-label SDK distributions.Breaking Changes
•
LootLockerSDKManager.Init()signature — The method now accepts an optionalLootLockerMultiUserSessionModeparameter (defaults toNotSet, which preserves existing behavior). Most callers are unaffected.•
LootLockerConfig.PackageName— Changed fromprivate static readonlytopublic const. If you were accessing this via reflection, update your code.Deprecations
•
LootLockerGroupDetails.metadata— Marked[Obsolete]. This field was never populated by the backend and will be removed in a future version.Full Changelog: v8.0.0...v8.1.0