### Install Satchel from GitHub Releases Source: https://github.com/ryanlua/satchel/blob/main/README.md This guide explains how to install the Satchel module by downloading the .rbxmx file from GitHub Releases. It involves downloading the file, using the 'Insert from file...' option in Roblox Studio, and placing the module in StarterPlayerScripts. ```roblox 1. Download the `Satchel.rbxmx` file from [Releases](../../releases). 2. Open Roblox Studio and create a new place or open an existing place. 3. Go to [Explorer](https://create.roblox.com/docs/studio/explorer) and right click on [`StarterPlayerScripts`](https://create.roblox.com/docs/reference/engine/classes/StarterPlayerScripts) and click on `Insert from file...`. 4. Select the `Satchel.rbxmx` you downloaded from GitHub and click `Open`. 5. Ensure that `Satchel`is in [StarterPlayerScripts](https://create.roblox.com/docs/reference/engine/classes/StarterPlayerScripts). ``` -------------------------------- ### Satchel Installation and Usage Guide Source: https://github.com/ryanlua/satchel/blob/main/docs/index.md This section provides an overview of Satchel's features, installation methods, and customization options. It highlights compatibility with different devices and Rojo, along with its open-source nature. ```markdown ## Satchel Satchel is a modern open-source alternative to Roblox's default backpack. Satchel aims to be more customizable and easier to use than the default backpack while still having a "vanilla" feel. Installation of Satchel is as simple as dropping the module into your game and setting up a few properties if you like to customize it. It has a familiar feel and structure as to the default backpack for ease of use for both developers and players. This documentation will allow you to install Satchel and learn about how to script using Satchel. ### Features: * **Fast and easy installation**: Install Satchel from the [Creator Marketplace](https://create.roblox.com/marketplace/asset/13947506401) or [GitHub Releases](https://github.com/RyanLua/Satchel/releases). * **Full device support**: Compatible with computers, phones, tablets, consoles, and VR. * **Highly customizable**: Change colors, fonts, language, icons, and logo using instance attributes. * **Open Source, MPL-2.0**: Licensed under the Mozilla Public License Version 2.0. * **Blazingly performant and lightweight**: Takes less than 0.1 MB of space and is highly performant. * **Rojo sync compatibility**: Compatible with Rojo, distributed through Wally or Git Submodules. ``` -------------------------------- ### GitHub Codespaces Setup and Dependencies Source: https://github.com/ryanlua/satchel/blob/main/docs/contributing.md This snippet details the automatic setup and dependencies available when creating a GitHub Codespace for the Satchel project. It includes tools like Rojo, Selene, StyLua, and Wally, and mentions integration with Visual Studio Code. ```shell # GitHub Codespaces setup for Satchel project # Automatically installs: # - Rojo sync (with VS Code extension) # - Rojo, Selene, and StyLua Extensions # - Wally packages # Preconfigured with pre-builds and dev containers. ``` -------------------------------- ### Install Satchel from Creator Marketplace Source: https://github.com/ryanlua/satchel/blob/main/README.md This guide explains how to install the Satchel module from the Roblox Creator Marketplace. It involves finding the module in the Marketplace, inserting it into your Roblox Studio project, and placing it in the StarterPlayerScripts. ```roblox 1. Get the Satchel module from the [Creator Marketplace](https://create.roblox.com/marketplace/asset/13947506401). 2. Open Roblox Studio and create a new place or open an existing place. 3. Open or locate the [Toolbox](https://create.roblox.com/docs/studio/toolbox). 4. Open your [Inventory](https://create.roblox.com/docs/studio/toolbox#inventory) from the [Toolbox]. 5. Search for `Satchel` created by `WinnersTakesAll` and click on it. 6. Insert `Satchel` into the [Explorer](https://create.roblox.com/docs/studio/explorer) and drag it into [StarterPlayerScripts](https://create.roblox.com/docs/reference/engine/classes/StarterPlayerScripts). ``` -------------------------------- ### Install Satchel using Wally Source: https://github.com/ryanlua/satchel/blob/main/docs/installation.md This snippet shows how to require the Satchel module after installing it via Wally. It assumes Satchel is located in ReplicatedStorage.Packages. ```lua local ReplicatedStorage = game:GetService("ReplicatedStorage") local Satchel = ReplicatedStorage.Packages.Satchel -- Make sure this points to where Satchel is require(Satchel) ``` -------------------------------- ### Install Satchel via Creator Marketplace Source: https://github.com/ryanlua/satchel/wiki/Installation Steps to find and insert the Satchel module from the Roblox Creator Marketplace into your Roblox Studio project. This involves searching the Toolbox, locating Satchel, and placing it in StarterPlayerScripts. ```Roblox Lua -- 1. Get the Satchel module from the Creator Marketplace. -- 2. Open Roblox Studio and create/open a place. -- 3. Open the Toolbox. -- 4. Open your Inventory from the Toolbox. -- 5. Search for 'Satchel' created by 'WinnersTakesAll' and click on it. -- 6. Insert 'Satchel' into the Explorer and drag it into StarterPlayerScripts. ``` -------------------------------- ### Install Satchel via GitHub Releases Source: https://github.com/ryanlua/satchel/wiki/Installation Instructions for downloading the Satchel module as an .rbxmx file from GitHub Releases and inserting it into your Roblox Studio project. This method involves downloading the file and using the 'Insert from file...' option in the Explorer. ```Roblox Lua -- 1. Download the 'Satchel.rbxmx' file from Releases. -- 2. Open Roblox Studio and create/open a place. -- 3. In the Explorer, right-click on StarterPlayerScripts and click 'Insert from file...'. -- 4. Select the downloaded 'Satchel.rbxmx' file and click 'Open'. -- 5. Ensure 'Satchel' is in StarterPlayerScripts. ``` -------------------------------- ### Satchel Installation and Customization Source: https://github.com/ryanlua/satchel/blob/main/README.md Satchel is installed by dropping the module into your game. Customization is achieved through instance attributes, allowing modification of appearance and behavior. It aims for a vanilla feel while being more versatile than the default backpack. ```lua -- Installation involves dropping the module into your Roblox game. -- Customization is done via instance attributes. -- Example of accessing and modifying an attribute (conceptual): -- local satchelModule = game.ServerStorage.Satchel -- satchelModule.Attributes.PrimaryColor = Color3.fromRGB(255, 0, 0) -- satchelModule.Attributes.HotbarSlots = 6 ``` -------------------------------- ### Wally Configuration Source: https://github.com/ryanlua/satchel/blob/main/docs/installation.md This snippet shows the TOML configuration for adding Satchel as a dependency in a Wally project. It specifies the package name, author, and version. ```toml satchel = "ryanlua/satchel@1.2.0" ``` -------------------------------- ### Coding Style and Linting Tools Source: https://github.com/ryanlua/satchel/blob/main/docs/contributing.md This section specifies the coding style guidelines for Lua code in the Satchel project, emphasizing the use of the Roblox Lua Style Guide and linting tools like Selene and StyLua. ```lua -- Ensure all Lua code follows the Roblox Lua Style Guide. -- Use Selene for linting and StyLua for formatting. ``` -------------------------------- ### Get Backpack GUI Enabled State Source: https://github.com/ryanlua/satchel/blob/main/docs/api-reference.md This method returns a boolean value indicating whether the backpack GUI is currently enabled or disabled. It requires the Satchel module to be required from ReplicatedStorage. ```lua local ReplicatedStorage = game:GetService("ReplicatedStorage") local Satchel = require(ReplicatedStorage:WaitForChild("Satchel")) local isEnabled = Satchel.GetBackpackEnabled() ``` -------------------------------- ### Satchel Methods Source: https://github.com/ryanlua/satchel/wiki/API-Reference Methods for interacting with the Satchel UI, including checking its state and managing its visibility. ```APIDOC Methods: IsOpened(): boolean Description: Returns whether the inventory is opened or not. SetBackpackEnabled(enabled: boolean): void Description: Sets whether the backpack gui is enabled or disabled. GetBackpackEnabled(): boolean Description: Returns whether the backpack gui is enabled or disabled. GetStateChangedEvent(): RBXScriptSignal Description: Returns a signal that fires when the inventory is opened or closed. ``` -------------------------------- ### Microsoft Clarity Analytics Integration Source: https://github.com/ryanlua/satchel/blob/main/docs/overrides/main.html This snippet integrates Microsoft Clarity for user behavior analytics. It initializes the Clarity script asynchronously and adds it to the document. ```javascript (function (c, l, a, r, i, t, y) { c[a] = c[a] || function () { (c[a].q = c[a].q || []).push(arguments) }; t = l.createElement(r); t.async = 1; t.src = "https://www.clarity.ms/tag/" + i; y = l.getElementsByTagName(r)[0]; y.parentNode.insertBefore(t, y); })(window, document, "clarity", "script", "kb3k38q2gy"); ``` -------------------------------- ### Satchel Scripting Methods Source: https://github.com/ryanlua/satchel/wiki/Usage This section outlines the available scripting methods for interacting with the Satchel module. These methods allow developers to check the inventory's state, control backpack visibility, and subscribe to state change events. ```APIDOC IsOpened(): [`boolean`](https://create.roblox.com/docs/scripting/luau/booleans) Returns whether the inventory is opened or not. SetBackpackEnabled(enabled: boolean): `void` Sets whether the backpack gui is enabled or disabled. GetBackpackEnabled(): [`boolean`](https://create.roblox.com/docs/scripting/luau/booleans) Returns whether the backpack gui is enabled or disabled. GetStateChangedEvent(): [`RBXScriptSignal`](https://create.roblox.com/docs/reference/engine/datatypes/RBXScriptSignal) Returns a signal that fires when the inventory is opened or closed. ``` -------------------------------- ### Satchel Disclaimer of Warranty Source: https://github.com/ryanlua/satchel/blob/main/LICENSE.txt This section outlines the 'as is' basis for the Covered Software, disclaiming all warranties, including merchantability and fitness for a particular purpose. It places the entire risk on the user. ```APIDOC Section 6: Disclaimer of Warranty - Covered Software is provided 'as is' without warranty of any kind. - Disclaims warranties of merchantability, fitness for a particular purpose, and non-infringement. - The entire risk regarding quality and performance is with You. - You assume the cost of servicing, repair, or correction for any defective Covered Software. ``` -------------------------------- ### Satchel License Terms and Conditions Source: https://github.com/ryanlua/satchel/blob/main/LICENSE.txt This section details the legal framework governing the Satchel project, including contributor reinstatement, patent infringement clauses, and survival of end-user license agreements upon termination. ```APIDOC Section 5.1: Contributor Reinstatement - Contributors are reinstated on an ongoing basis if they notify You of non-compliance and You become compliant within 30 days of notice. Section 5.2: Patent Litigation Termination - If You initiate patent infringement litigation against any entity (excluding specific declaratory actions), your rights under Section 2.1 terminate. Section 5.3: Survival of Agreements - Upon termination under Sections 5.1 or 5.2, end-user license agreements validly granted by You or Your distributors survive. ``` -------------------------------- ### Satchel Instance Attributes Source: https://github.com/ryanlua/satchel/wiki/Usage This section details the customizable instance attributes for the Satchel module. These attributes allow developers to modify the appearance and behavior of the inventory UI, such as background colors, corner radii, fonts, and text properties. ```APIDOC BackgroundColor3: [`Color3`](https://create.roblox.com/docs/reference/engine/datatypes/Color3) Determines the background color of the default inventory window and slots. Default: `[25, 27, 29]` BackgroundTransparency: [`number`](https://create.roblox.com/docs/scripting/luau/numbers) Determines the background transparency of the default inventory window and slots. Default: 0.3 CornerRadius: [`UDim`](https://create.roblox.com/docs/reference/engine/datatypes/UDim) Determines the radius, in pixels, of the default inventory window and slots. Default: `0, 8` EquipBorderColor3: [`Color3`](https://create.roblox.com/docs/reference/engine/datatypes/Color3) Determines the color of the equip border when a slot is equipped. Default: `[255, 255, 255]` EquipBorderSizePixel: [`number`](https://create.roblox.com/docs/scripting/luau/numbers) Determines the pixel width of the equip border when a slot is equipped. Default: 5 FontFace: [`Font`](https://create.roblox.com/docs/reference/engine/enums/Font) Determines the font of the default inventory window and slots. Default: `Gotham SSm` InsetIconPadding: [`boolean`](https://create.roblox.com/docs/scripting/luau/booleans) Determines whether or not the tool icon is padded in the default inventory window and slots. Default: True OutlineEquipBorder: [`boolean`](https://create.roblox.com/docs/scripting/luau/booleans) Determines whether or not the equip border is outline or inset when a slot is equipped. Default: True TextColor3: [`Color3`](https://create.roblox.com/docs/reference/engine/datatypes/Color3) Determines the color of the text in default inventory window and slots. Default: `[255, 255, 255]` TextSize: [`number`](https://create.roblox.com/docs/scripting/luau/numbers) Determines the size of the text in the default inventory window and slots. Default: 14 TextStrokeColor3: [`Color3`](https://create.roblox.com/docs/reference/engine/datatypes/Color3) Determines the color of the text stroke of text in default inventory window and slots. Default: `[0, 0, 0]` TextStrokeTransparency: [`number`](https://create.roblox.com/docs/scripting/luau/numbers) Determines the transparency of the text stroke of text in default chat window and slots. Default: 0.5 ``` -------------------------------- ### Inventory State Management Source: https://github.com/ryanlua/satchel/wiki/API-Reference Provides methods to check the inventory's open state, control the backpack GUI's enabled status, and subscribe to inventory state change events. ```APIDOC IsOpened(): boolean Description: Returns whether the inventory is opened or not. SetBackpackEnabled(enabled: boolean): void Description: Sets whether the backpack GUI is enabled or disabled. Parameters: enabled: A boolean value to enable or disable the backpack GUI. GetBackpackEnabled(): boolean Description: Returns whether the backpack GUI is enabled or disabled. GetStateChangedEvent(): RBXScriptSignal Description: Returns a signal that fires when the inventory is opened or closed. ``` -------------------------------- ### Satchel Attributes and Methods Source: https://github.com/ryanlua/satchel/blob/main/docs/api-reference.md This API documentation details the configurable attributes and available methods for the Satchel module. Attributes control the visual appearance and behavior of the inventory, while methods provide programmatic control over its state and event handling. ```APIDOC Attributes: BackgroundColor3: [`Color3`](https://create.roblox.com/docs/reference/engine/datatypes/Color3) | Determines the background color of the default inventory window and slots. | `[25, 27, 29]` BackgroundTransparency: [`number`](https://create.roblox.com/docs/scripting/luau/numbers) | Determines the background transparency of the default inventory window and slots. | 0.3 CornerRadius: [`UDim`](https://create.roblox.com/docs/reference/engine/datatypes/UDim) | Determines the radius, in pixels, of the default inventory window and slots. | `0, 8` EquipBorderColor3: [`Color3`](https://create.roblox.com/docs/reference/engine/datatypes/Color3) | Determines the color of the equip border when a slot is equipped. | `[255, 255, 255]` EquipBorderSizePixel: [`number`](https://create.roblox.com/docs/scripting/luau/numbers) | Determines the pixel width of the equip border when a slot is equipped. | `5` FontFace: [`Font`](https://create.roblox.com/docs/reference/engine/enums/Font) | Determines the font of the default inventory window and slots. | `Builder Sans` InsetIconPadding: [`boolean`](https://create.roblox.com/docs/scripting/luau/booleans) | Determines whether or not the tool icon is padded in the default inventory window and slots. | True OutlineEquipBorder: [`boolean`](https://create.roblox.com/docs/scripting/luau/booleans) | Determines whether or not the equip border is outline or inset when a slot is equipped. | True TextColor3: [`Color3`](https://create.roblox.com/docs/reference/engine/datatypes/Color3) | Determines the color of the text in default inventory window and slots. | `[255, 255, 255]` TextSize: [`number`](https://create.roblox.com/docs/scripting/luau/numbers) | Determines the size of the text in the default inventory window and slots. | `14` TextStrokeColor3: [`Color3`](https://create.roblox.com/docs/reference/engine/datatypes/Color3) | Determines the color of the text stroke of text in default inventory window and slots. | `[0, 0, 0]` TextStrokeTransparency: [`number`](https://create.roblox.com/docs/scripting/luau/numbers) | Determines the transparency of the text stroke of text in default inventory window and slots. | 0.5 Methods: IsOpened(): [`boolean`](https://create.roblox.com/docs/scripting/luau/booleans) Returns whether the inventory is opened or not. SetBackpackEnabled(enabled: boolean): `void` Sets whether the backpack gui is enabled or disabled. GetBackpackEnabled(): [`boolean`](https://create.roblox.com/docs/scripting/luau/booleans) Returns whether the backpack gui is enabled or disabled. GetStateChangedEvent(): [`RBXScriptSignal`](https://create.roblox.com/docs/reference/engine/datatypes/RBXScriptSignal) Returns a signal that fires when the inventory is opened or closed. ``` -------------------------------- ### Satchel License Versions Source: https://github.com/ryanlua/satchel/blob/main/LICENSE.txt This section addresses the process for new versions of the Satchel license, identifying the Mozilla Foundation as the license steward. ```APIDOC Section 10: Versions of the License - Section 10.1: New Versions - Mozilla Foundation is the license steward. - Only the license steward has the right to modify the license, except as provided in Section 10.3. ``` -------------------------------- ### Google Analytics Integration Source: https://github.com/ryanlua/satchel/blob/main/docs/overrides/main.html This snippet integrates Google Analytics (gtag.js) for website traffic analysis. It initializes the dataLayer and sends configuration and page view events. ```javascript window.dataLayer = window.dataLayer || []; function gtag() { dataLayer.push(arguments); } gtag('js', new Date()); gtag('config', 'G-PPVP56SBQQ'); ``` -------------------------------- ### Detect Inventory State Changes Source: https://github.com/ryanlua/satchel/blob/main/docs/api-reference.md This code sample shows how to connect to the Satchel's state changed event. The provided callback function will be executed whenever the inventory is opened or closed, printing a message to the console indicating the new state. ```lua local ReplicatedStorage = game:GetService("ReplicatedStorage") local Satchel = require(ReplicatedStorage:WaitForChild("Satchel")) Satchel.GetStateChangedEvent():Connect(function(isOpened: boolean) if isOpened then print("Inventory opened") else print("Inventory closed") end end) ``` -------------------------------- ### Control Backpack GUI Visibility Source: https://github.com/ryanlua/satchel/blob/main/docs/api-reference.md This method allows enabling or disabling the backpack GUI. It takes a boolean parameter where 'true' enables the backpack and 'false' disables it. The function returns void. ```lua local ReplicatedStorage = game:GetService("ReplicatedStorage") local Satchel = require(ReplicatedStorage:WaitForChild("Satchel")) -- Disable the backpack GUI Satchel.SetBackpackEnabled(false) -- Enable the backpack GUI Satchel.SetBackpackEnabled(true) ``` -------------------------------- ### Satchel Methods Source: https://github.com/ryanlua/satchel/blob/main/README.md Provides access to Satchel's internal methods for scripting interactions with the inventory. These methods allow checking inventory state, enabling/disabling backpack UI, and subscribing to state change events. ```luau IsOpened(): boolean -- Returns whether the inventory is opened or not. SetBackpackEnabled(enabled: boolean): void -- Sets whether the backpack gui is enabled or disabled. GetBackpackEnabled(): boolean -- Returns whether the backpack gui is enabled or disabled. GetStateChangedEvent(): RBXScriptSignal -- Returns a signal that fires when the inventory is opened or closed. ``` -------------------------------- ### Toggle Satchel Inventory Source: https://github.com/ryanlua/satchel/blob/main/docs/api-reference.md This code sample demonstrates how to create a TextButton that toggles the Satchel inventory's visibility when clicked. It checks the current state and calls the appropriate Satchel function to open or close the inventory. ```lua local ReplicatedStorage = game:GetService("ReplicatedStorage") local Satchel = require(ReplicatedStorage:WaitForChild("Satchel")) local button = Instance.new("TextButton") button.AnchorPoint = Vector2.new(0.5, 0.5) button.Position = UDim2.new(0.5, 0, 0.5, 0) button.Text = "Toggle Inventory" button.MouseButton1Click:Connect(function() if Satchel:GetBackpackEnabled() then Satchel.SetBackpackEnabled(false) else Satchel.SetBackpackEnabled(true) end end) ``` -------------------------------- ### Core Requirements Source: https://github.com/ryanlua/satchel/blob/main/requirements.txt Specifies the Python packages required for the core functionality of the Satchel project, primarily for documentation generation. ```python mkdocs mkdocs-material ``` -------------------------------- ### Satchel UI Properties Source: https://github.com/ryanlua/satchel/blob/main/docs/api-reference.md Defines properties for customizing the appearance of the Satchel UI, including background colors, transparency, corner radius, equip border styles, font, and text properties. These settings affect various elements of the default inventory window and slots. ```lua BackgroundColor3: Color3 BackgroundTransparency: number CornerRadius: UDim EquipBorderColor3: Color3 EquipBorderSizePixel: number FontFace: Enum.Font InsetIconPadding: bool OutlineEquipBorder: bool TextColor3: Color3 TextSize: number TextStrokeColor3: Color3 TextStrokeTransparency: number ``` -------------------------------- ### Satchel Attributes Source: https://github.com/ryanlua/satchel/wiki/API-Reference Customizable attributes for Satchel's appearance and behavior, including colors, fonts, and layout. ```APIDOC Attributes: BackgroundColor3: Color3 Description: Determines the background color of the default inventory window and slots. Default: [25, 27, 29] BackgroundTransparency: number Description: Determines the background transparency of the default inventory window and slots. Default: 0.3 CornerRadius: UDim Description: Determines the radius, in pixels, of the default inventory window and slots. Default: 0, 8 EquipBorderColor3: Color3 Description: Determines the color of the equip border when a slot is equipped. Default: [255, 255, 255] EquipBorderSizePixel: number Description: Determines the pixel width of the equip border when a slot is equipped. Default: 5 FontFace: Font Description: Determines the font of the default inventory window and slots. Default: Gotham SSm InsetIconPadding: boolean Description: Determines whether or not the tool icon is padded in the default inventory window and slots. Default: True OutlineEquipBorder: boolean Description: Determines whether or not the equip border is outline or inset when a slot is equipped. Default: True TextColor3: Color3 Description: Determines the color of the text in default inventory window and slots. Default: [255, 255, 255] TextSize: number Description: Determines the size of the text in the default inventory window and slots. Default: 14 TextStrokeColor3: Color3 Description: Determines the color of the text stroke of text in default inventory window and slots. Default: [0, 0, 0] TextStrokeTransparency: number Description: Determines the transparency of the text stroke of text in default chat window and slots. Default: 0.5 ``` -------------------------------- ### Satchel Limitation of Liability Source: https://github.com/ryanlua/satchel/blob/main/LICENSE.txt This section limits the liability of Contributors and distributors for any damages arising from the use of Covered Software, including indirect, special, incidental, or consequential damages. ```APIDOC Section 7: Limitation of Liability - No Contributor or distributor is liable for direct, indirect, special, incidental, or consequential damages. - This includes damages for lost profits, goodwill, work stoppage, or computer failure. - Limitation does not apply to liability for death or personal injury due to negligence where prohibited by law. - Exclusions and limitations may not apply in jurisdictions that do not allow them. ``` -------------------------------- ### Satchel API - GetStateChangedEvent Source: https://github.com/ryanlua/satchel/blob/main/docs/api-reference.md Provides a signal that fires when the inventory state changes (opened or closed). This is crucial for reacting to user interactions with the inventory UI. ```APIDOC GetStateChangedEvent(): RBXScriptSignal - Returns a signal that fires when the inventory is opened or closed. - Parameters: - None - Returns: - RBXScriptSignal: A signal that emits a boolean value indicating the inventory state. - isOpened (boolean): True if the inventory is opened, false if closed. ``` -------------------------------- ### Check if Inventory is Opened Source: https://github.com/ryanlua/satchel/blob/main/docs/api-reference.md This method checks and returns a boolean value indicating whether the inventory window is currently open. It requires the Satchel module to be required from ReplicatedStorage. ```lua local ReplicatedStorage = game:GetService("ReplicatedStorage") local Satchel = require(ReplicatedStorage:WaitForChild("Satchel")) local isOpened = Satchel.IsOpened() ``` -------------------------------- ### Satchel Litigation and Miscellaneous Provisions Source: https://github.com/ryanlua/satchel/blob/main/LICENSE.txt This section specifies the jurisdiction for litigation, governing law, and miscellaneous clauses including the completeness of the agreement and reformation of unenforceable provisions. ```APIDOC Section 8: Litigation - Litigation must be brought in the courts of the defendant's principal place of business. - Litigation is governed by the laws of that jurisdiction, excluding conflict-of-law provisions. - Does not prevent cross-claims or counter-claims. Section 9: Miscellaneous - This License represents the complete agreement. - Unenforceable provisions shall be reformed only as necessary. - Language shall not be construed against the drafter. ``` -------------------------------- ### Satchel Playground Information Source: https://github.com/ryanlua/satchel/blob/main/README.md A Roblox game is provided as an open-source playground for Satchel. Players can test and experiment with Satchel's features directly in this game, and it serves as a reference for implementation. ```roblox -- Satchel Playground Link: -- https://www.roblox.com/games/13592168150 -- Features: -- - Place copying enabled for user modification. -- - Test and play with Satchel before integrating into your own game. -- - Use as a reference for Satchel implementation and customization. ``` -------------------------------- ### Detect Inventory State Change Source: https://github.com/ryanlua/satchel/blob/main/docs/api-reference.md This code sample detects when the Satchel inventory is opened or closed by connecting to the GetStateChangedEvent signal. It prints a message to the console indicating the current state. ```lua local ReplicatedStorage = game:GetService("ReplicatedStorage") local Satchel = require(ReplicatedStorage:WaitForChild("Satchel")) Satchel.GetStateChangedEvent():Connect(function(isOpened: boolean) if isOpened then print("Inventory opened") else print("Inventory closed") end end) ``` -------------------------------- ### Topbar Plus Integration Source: https://github.com/ryanlua/satchel/blob/main/README.md Satchel supports integration with Topbar Plus, a UI enhancement for Roblox. This allows users to open the Satchel inventory via a button on the top bar, providing quicker access. ```lua -- Satchel supports Topbar Plus for inventory access. -- This integration allows a top bar button to open the Satchel inventory. -- Example of how Satchel might hook into Topbar Plus (conceptual): -- local Satchel = require(game.ServerStorage.Satchel) -- local TopbarPlus = require(game.StarterGui.TopbarPlus) -- TopbarPlus.AddButton(Satchel.InventoryButton) ``` -------------------------------- ### Social Requirements Source: https://github.com/ryanlua/satchel/blob/main/requirements.txt Specifies the Python packages required for the social features of the Satchel project, likely related to image processing and conversion. ```python cairosvg pillow ```