


Actually included the updated plugin file this time...
Recompiled and updated for v72!
UnlockableItem.hasBeenUnlockedByPlayer wasn't being set for unlockable items upon joining a lobby, and SyncShipUnlockablesClientRpc()'s storedItems parameter sent to clients was always just an empty array.Removed goofy TerminalFormatter compatibility, also recompiled for v69.
v0.2.24 is currently incompatible; rotating item discounts aren't displayed (though they still apply), and any available items above the vanilla cap are not shown (but they can still be purchased).
Basic API added for managing rotating items, fixed rotating shop desync with 'removePurchased' setting.
RotationItemsAPI class, which contains several helper methods for interacting with which items can appear in store rotations.
RotateShipDecorSelectionPatch and UnlockShipObjectPatches to use the new API.Bind() call, which could very slightly impact loading performance.stockPurchased setting to removePurchased, and inverted its function.removePurchased setting enabled when joining a lobby with already-purchased items, or items placed in storage.
StartOfRound.SyncShipUnlockablesServerRpc() to actually fill the storedItems list before sending it to all clients.
PlaceableShipObject instance is despawned, but StartOfRound.SyncShipUnlockablesServerRpc() uses Object.FindObjectsOfType<PlaceableShipObject>() to fill the storedItems list, so it ends up always being empty.SyncShipUnlockablesClientRpc() to update each of the ship unlockables' hasBeenUnlockedByPlayer and inStorage fields on all clients.StartOfRound.UnlockShipObject() a bit.Confirming compatibility with v61, but also a minor fix.
v61, but I'll keep an eye out if anything breaks in the latest updates.relativeScroll setting being accidentally inverted in the previous release.Basic API added for rotation sales, enabled 'Nullable' in the project file.
RotationSalesAPI class, which contains several helper methods for interacting with the rotation sales system.
TerminalItemSalesPatches and TerminalFormatterCompatibility to use the new API.Nullable value types in the .csproj file so the compiler can yell at me if I forget a null check somewhere.
terminalFormatterCompat setting to toggle compatibility with TerminalFormatter.
Miscellaneous fixes for various issues.
itemWhitelist itself) when stockPurchased is set to disabled.saleChance determine sales likelihood more accurately now.
85% and above could end up being exactly the same as 100%, depending on the maxSaleItems setting.Terminal.TextPostProcess() transpiler occasionally replacing other items' displayed prices when appending a sale tag to a rotating item.
minDiscount be used for maxDiscount when minDiscount is greater than maxDiscount, just like the other range settings.Compatibility with TerminalFormatter's modified store, among other things.
Store.GetNodeText() to display discounted prices and amounts in the store page whenever an item is on sale.relativeScroll now unpatches itself if TerminalFormatter is installed, since it already includes it.Compatibility patch for Lategame Upgrades (and likely other moon-routing price adjustment mods).
Efficient Engines upgrade.
Terminal.LoadNewNodeIfAffordable() transpiler no longer removes instructions or touches Terminal.totalCostOfItems when routing to a moon.Terminal.LoadNewNodeIfAffordable() to High (600), so it's applied earlier.Configurable item sales, whitelisting, and blacklisting.
Terminal.RotateShipDecorSelection() to assign rotating item sales after every quota.Terminal.TextPostProcess() to show discounts in the store page.
TerminalFormatter); further testing is needed.Terminal.LoadNewNodeIfAffordable() to actually apply the rotating item discounts right before a purchase.saleChance determines the likelihood for ANY item to be on sale in every store rotation, with the value 0 disabling the entire sale system.minSaleItems and maxSaleItems control the number of items that can be on sale at a time.minDiscount and maxDiscount control the amount an item can be discounted by.roundToNearestTen rounds sale amounts to the nearest ten (like the regular store).itemWhitelist guarantees an item to be in stock every rotation, while itemBlacklist prevents them from ever showing up.itemWhitelist will take priority over itemBlacklist, if an item is found in both lists.itemWhitelist adds items separate from the range specified by the minItems and maxItems settings.Terminal.RotateShipDecorSelection() patch.
maxItems value is now used instead of minItems when minItems is greater than maxItems, as intended.stockAll disabled.TerminalNode.creatureName (name displayed in the store page) instead of UnlockableItem.unlockableName.relativeScroll to enabled.v45.LICENSE name and year.Compatibility with v56, previous game versions should still work.
StartOfRound.SyncShipUnlockablesClientRpc() patch target reference to not include any parameters.
vehicleID was added in v55, and each parameter was previously declared explicitly in the patch (despite not actually using any).Info.Transpilers now used in place of some prefix patches, some minor refactoring.
Terminal.RotateShipDecorSelection() and PlayerControllerB.ScrollMouse_performed() patches.
maxItems and minItems to use their absolute values when rotating the store, to avoid any issues with negative numbers in the configuration file.linesToScroll in-game (e.g. through LethalConfig) should now apply changes immediately, instead of until after scrolling on a different terminal page.CSync library dependency to patch v5.0.1.
v5.0.1, and is recommended.Update to 'CSync' v5, more configuration for terminal scrolling.
CSync library dependency to v5.0.0.
README.md notes regarding CSync version compatibility.linesToScroll client-side setting (20 by default).
relativeScroll to be enabled.Fixes for 'stockPurchased' and 'relativeScroll' settings.
stockPurchased is set to disabled.
Terminal.RotateShipDecorSelection() now waits until after StartOfRound.SyncShipUnlockablesClientRpc() is executed when first joining a lobby.relativeScroll scroll amount should no longer apply an additional time for each player in the lobby.
GameNetworkManager.Instance.localPlayerController was being used instead of the actual PlayerControllerB instance calling PlayerControllerB.ScrollMouse_performed().Update to 'CSync' v4; support for v3 relegated to previous release.
CSync library dependency requirement to v4.1.0, making it compatible with other mods that use CSync v4.README.md suggesting downgrading to v1.3.0 if CSync v3 is needed.CSync reimplements the ability to join a lobby with either the client or host missing this mod.Added setting to configure whether already-purchased items should show up in the store rotation.
stockPurchased server-side setting (on by default).
CSync v4, this specific version can be downgraded to if CSync v3 compatibility is required.Minor (optional) tweak to terminal scrolling.
relativeScroll client-side setting (off by default).
sortItems setting to be client-side instead of synced.README.md regarding using CSync v4 with this mod.Minor adjustments to project and code.
Config.Instance to the actual Config instance in the Plugin class, mainly in preparation for eventually updating to CSync v4.README.md, mostly in the compatibility section.
v45 and v50 (only v49 had been previously tested).Terminal.ShipDecorSelection list intentionally not being modified when joining a lobby without the mod installed on the host computer.StoreRotationConfig.csproj to include additional features.
StoreRotationConfig.dll plugin.
StoreRotationConfig.pdb in every release.LICENSE file (MIT) is now packaged into the built StoreRotationConfig.dll plugin.IDE0051 warning is now ignored (to remove unused warning from Plugin.Awake() method).Config class.Config, Plugin, and RotateShipDecorSelection classes.Switch to 'CSync' library fork.
Configuration now done through 'CSync' library; some refactoring and tweaks.
Config class now uses CSync by Owen3H to ensure parity between host and clients.
Terminal.RotateShipDecorSelection() method only runs for clients after receiving config settings from the host, otherwise it simply executes the vanilla method.
stockAll setting is set to true on client-side only).sortItems option to display the rotating store in alphabetical order.
stockAll, the sorted list is cached to avoid having to generate it more than once.Plugin.cs into several files, for organizational purposes.README.md to contain more information.Hotfix for 'stockAll' setting.
stockAll setting should work properly now.
i increased.Initial release.
Config class.minItems, maxItems, and showAll added to Config class.RotateShipDecorSelection() method in Terminal class.minItems is greater than maxItems).maxItems upper bound inclusive (Random.Next(minValue, maxValue) isn't).