PackIt - Multi-bag system [GUI] V1.2.2

This bundle is marked as pending. It has not been reviewed by a staff member yet.

PackIt - A GUI Inventory System





Overview​


PackIt is a lightweight, GUI-friendly inventory extension system designed for single-player RPGs or campaigns. It provides players with additional storage units ("bags") that they can summon and store items in, using a clean, modular trigger setup with Game Cache as the backbone.


The system is designed to be easy to use and understand, especially for mapmakers with little to no JASS or Lua knowledge. It is fully made in GUI, requires no scripting, and is structured to be easily customized by beginners.


Inspired by the simplicity of early WoW addons, PackIt aims to solve the problem of running out of inventory space without overcomplicating things.




Installation​


To import the PackIt system into your map:


  1. Copy the following elements from the demo map:
    • The "Bag" trigger (core trigger).
    • The unit used as bag (named accordingly, with 6-slot inventories, invulnerable, no attack/move).
    • The ability that summons each bag.
    • The ability used by each bag to "Save Bag" (which stores and removes the bag).
    • The Spellbook ability that holds all bag summon abilities.
    • Any custom sounds or effects if you want the full visual/audio feedback.
  2. Ensure that you copy the global variables used by the system:
    • PACKIT_bag[] — the bag unit itself.
    • PACKIT_pos — point where bags are summoned.
    • PACKIT_hero[] — the casting unit per player (optional for multiplayer handling).
    • PACKIT_cast — bool variable used to track if a bag is being cast (optional for multiplayer use).



Tutorial - How to Add More Bags or Customize​


Adding a New Bag (e.g., Bag [2]):​


  1. Duplicate the existing "Bag [1]" action.
  2. Create a new Summon Bag ability (copying one of the existing ones).
  3. Add the new summon ability to the Spellbook.
  4. Update the new "if else" action:
    • Modify the PACKIT_ID to the next number for your bag (e.g., 5, 6, 7...).
    • Change the condition to reflect the newly created ability's casting order.
  5. You now have a new bag working independently!



Multiplayer Compatibility​


While this system is designed for single-player, you can adapt it for multiplayer by:


  • Replacing Game Cache with Hashtable.
  • Replacing single variables like PACKIT_bag with arrays per player.
  • Using GetPlayerId() to index properly.



Notes​


  • The system caps at 11 bags due to the spellbook max ability limit (66 total slots).
  • Designed with low item-density RPGs in mind (non-loot spam games).



UPDATES​


Thanks to @Rheiko for the suggestions for improvements.




[UPDATE 1.2.1]​


The system has been modularized to make it easier to add new bags. Here's what's new:


  1. Simplified Process:
    • To add a new bag, you only need to:
      • Copy the existing "if else" block for the bag system.
      • Change the PACKIT_ID to the next number in the sequence (e.g., 5, 6, 7...).
      • Modify the condition to match the new bag's casting ability.
      • Declare the total number of bags at the start.
      • Create a new ability for summoning the new bag.
  2. Automated Bag Handling:
    • The system now uses IDs to automatically handle bags.
    • Storing and restoring bags in the Game Cache is done automatically when you update the ID.
  3. No Need for Complex Changes:
    • After creating the new ability, the process is simple: copy the relevant "if else" action, update the ability condition, and you're done!

[UPDATE 1.2.2]​

The system no longer requires checking whether an ability has been cast for the first time.

Instead of checking whether or not to create a bag based on booleans, it attempts to load a bag from the cache from the start. If it fails, it creates a new one and stores it in the cache. (This was changed primarily because if you test the system and move it to another map with a different cache, it can generally break.) It now directly creates a new bag if it can't find one in the cache.
Previews
Contents

PackIt v1.2.2 (Map)

Reviews
Rheiko
Hello, thank you for the submission! Here's my review so far: This system is cool and could be really useful — but right now, it lacks proper configuration options. Adding a new bag seems unnecessarily tedious. I have to duplicate triggers and...

Rheiko

Spell Reviewer
Level 26
Joined
Aug 27, 2013
Messages
4,214
Hello, thank you for the submission! Here's my review so far:

This system is cool and could be really useful — but right now, it lacks proper configuration options. Adding a new bag seems unnecessarily tedious. I have to duplicate triggers and manually change variables? That introduces a high risk of user error, and the system might break if something is set incorrectly.

A system should be easy to configure, especially for beginners. I assume that’s one of the goals of this system: ease of use. In general, users shouldn’t need to understand or touch the internal logic of the system. Instead, they should be able to change configurations via a dedicated configuration trigger.

So instead of having multiple triggers for each bag, consider using a smaller set of core triggers that handle all bags dynamically, and expose configuration settings through a separate trigger.

Duplicate triggers, while sometimes harmless, should generally be avoided — they can cause unnecessary performance overhead and make debugging harder.

Here are a few configuration values that should be exposed via a config trigger:
  • Number of bags (no trigger duplication should be needed).
  • Model used for the special effect and its attachment point (string variables work great here).
  • Sound effect used.
  • Unit type used as the bag.
  • The ability associated with the bag.
Also, I recommend using a 2 to 4 digit prefix for all your variables. This helps avoid conflicts with other systems or triggers that might be used in the same map. See: GPAG - GUI Proper Application Guide

You mentioned the system could be made multiplayer-compatible by switching from Game Cache to Hashtable. So why not use Hashtable from the start? That way, users don’t have to worry about compatibility depending on the map type — it’ll just work.

In its current form, the system isn’t quite lightweight or beginner-friendly enough. That said, it’s a great idea and a promising start. I really hope you keep improving it — looking forward to the next version!

Cheers!

Awaiting Update
 
Last edited:
Hello, thank you for the submission! Here's my review so far:

This system is cool and could be really useful — but right now, it lacks proper configuration options. Adding a new bag seems unnecessarily tedious. I have to duplicate triggers and manually change variables? That introduces a high risk of user error, and the system might break if something is set incorrectly.

A system should be easy to configure, especially for beginners. I assume that’s one of the goals of this system: ease of use. In general, users shouldn’t need to understand or touch the internal logic of the system. Instead, they should be able to change configurations via a dedicated configuration trigger.

So instead of having multiple triggers for each bag, consider using a smaller set of core triggers that handle all bags dynamically, and expose configuration settings through a separate trigger.

Duplicate triggers, while sometimes harmless, should generally be avoided — they can cause unnecessary performance overhead and make debugging harder.

Here are a few configuration values that should be exposed via a config trigger:
  • Number of bags (no trigger duplication should be needed).
  • Model used for the special effect and its attachment point (string variables work great here).
  • Sound effect used.
  • Unit type used as the bag.
  • The ability associated with the bag.
Also, I recommend using a 2 to 4 digit prefix for all your variables. This helps avoid conflicts with other systems or triggers that might be used in the same map. See: GPAG - GUI Proper Application Guide

You mentioned the system could be made multiplayer-compatible by switching from Game Cache to Hashtable. So why not use Hashtable from the start? That way, users don’t have to worry about compatibility depending on the map type — it’ll just work.

In its current form, the system isn’t quite lightweight or beginner-friendly enough. That said, it’s a great idea and a promising start. I really hope you keep improving it — looking forward to the next version!

Cheers!

Awaiting Update
Hi! Thanks for your suggestions. I'll work on a more convenient mode that uses fewer duplicates of the same trigger. When I have some free time, I'll work on refocusing the system better.

The reason I'm using GameCache is because the system, as it is, is focused on single-player, campaigns in general, or similar maps. Not multiplayer. That's why GameCache is necessary, since as far as I know, the hash tables only record and load data for the same map. :peasant-work-work:
 

Rheiko

Spell Reviewer
Level 26
Joined
Aug 27, 2013
Messages
4,214
The reason I'm using GameCache is because the system, as it is, is focused on single-player, campaigns in general, or similar maps. Not multiplayer. That's why GameCache is necessary, since as far as I know, the hash tables only record and load data for the same map. :peasant-work-work:
I see! If you ever want to make a multiplayer support for this that utilizes hashtable, you could make a separate system, so user can simply choose between the two. Just update the instruction, so they don't get confused.


Hi! Thanks for your suggestions. I'll work on a more convenient mode that uses fewer duplicates of the same trigger. When I have some free time, I'll work on refocusing the system better.
Awesome! glad to hear that. Looking forward to it. :)
 
I see! If you ever want to make a multiplayer support for this that utilizes hashtable, you could make a separate system, so user can simply choose between the two. Just update the instruction, so they don't get confused.
I'll work on that once I have the system more polished as it is.

Awesome! glad to hear that. Looking forward to it. :)
Update completed. I still need a way to further minimize user intervention. For now, I think the system is even clearer than before, and more automatic.
 
Top