• 🏆 Texturing Contest #33 is OPEN! Contestants must re-texture a SD unit model found in-game (Warcraft 3 Classic), recreating the unit into a peaceful NPC version. 🔗Click here to enter!
  • It's time for the first HD Modeling Contest of 2024. Join the theme discussion for Hive's HD Modeling Contest #6! Click here to post your idea!

[vJass] (System) CustomInventory

By far the biggest inventory system for Warcraft 3.
It's designed to have optional features, like FullScreenInventory-UI.

With a little bit of modification you can use this Inventory System in the normal Warcraft 3 Inventory too.

It is written in vJASS and has the following features:
- 12 Slot Equipment
- MPI
- Very flexible
- Easy to add bonuses to items
- Item Stacking
- Item Forging
- Item Sets (With bonuses)
- Inventory fixes warcraft 3 bugs (Double pickup bug)
- Fast
- Gives the ability to add your own areas with a little bit of code

A small note on the classes:

##############################################################################
# USER INTERFACE - CUSTOM WINDOW
##############################################################################
---------------
CWDestructable
---------------
It's an object that has an destructable for a local player.
(Such as icons, borders and more)

---------------
CWTrackable
---------------
This is basically an object that triggers player events for hovering the icons (CWDestructable).
Whenever an event occurs, it fires an action to the CustomWindow

---------------
CustomWindow
---------------
A collection of CWTrackable and CWDestructable. Every destructable will have an trackable object.
So whenever you hover over or click a trackable, this will be fired.
You will use this object to create hooks to the inventory system.

##############################################################################
# CUSTOM WINDOW - HOOK AND EXTENDING
##############################################################################

---------------
CIAll
---------------
This is a container object of items. It has conditions for pickup and drop and is the base
class for any container, like Slots, Potions, Equipment or even spell slots that you could create!
It has a variety of methods like adding, removing and checks and throws errors.

---------------
CIActions
---------------
This is a library which only use is to find out what the user wants to do. It supports up to 5
different steps which can be done in a row so if you need to build up something complicated here you go.
This action decides when to move, drop, pick and destroy items. It's bound to CIWindow and uses its
events to trigger / delegate events to the CISlots/CIEquips/CIPotions objects.

---------------
CIContent
---------------
This is a little help class for the CIActions object which puts a wrapper around the Equipment,
Potions and Slots. It will also update the camera.

---------------
CIWindow
---------------
This is the hook between CustomWindow, CIActions and the CustomInventory. It also provides
fake units to provide the Interface Functionality and delegates events to CIActions.

---------------
CISlots / CIEquips / CIPotions
---------------
The containers you see (Top left, top right and bottom left) are basically these objects.
They have special / unique conditions for pickup / drop and handle when to add or remove bonuses from the hero.

##############################################################################
# CUSTOM INVENTORY - CORE
##############################################################################

---------------
CIForging
---------------
This module forges items. You can combine any items and merge them to a bigger item. This will
always happen when your inventory updates.

---------------
CIStacking
---------------
You like items that can stack in your Inventory? Well this module is for you!
Create stackable items and make a maximum conditions. Item stacking is automatic, whenever
inventory updates.

---------------
CISet
---------------
Don't we all love this thing from World of Warcraft? Collecting items of a special set and
then get some bonus stuff once we have all of them. If you are cool, use this feature. It
even supports SET STACKING!

---------------
CIAttachment
---------------
Not done yet.

---------------
CIBonus
---------------
This is the hook between items and the unit state modifier library. You can use this module
to add and remove bonuses to the hero on the fly whenever needed.

---------------
CIError
---------------
Throw errors to the user whenever something bad happens.

---------------
CIEventHandler
---------------
Like every other Inventory system, we need some kind of hook for pickup/drop actions to
connect them with our CustomInventory. This will trigger the CustomInventory events.

---------------
CIEvents
---------------
Name may not be completely self-speaking, but this actually triggers the events on the item.
But only when the unit really has the item. (Safety layer)

---------------
CIItemDrop
---------------
This will allow pickup/drop actions of the items WITHOUT triggering the inventory events.
It will be required for many things so this module is a life safer!

---------------
CIItemInfo
---------------
Wouldn't it be cool if items could display what they are in a multiboard. Yes it would.
This module is exactly for that.

---------------
CIItemBoard
---------------
Yes, this is the multiboard which displays all the item statistics. It uses hooks to get
the attached events from the CUstomWindow.

---------------
CIItemProtection
---------------
Every item has states, like locked, owend, equiped and such. This module gives the ability
to change the states and make them available.

---------------
CIItemDest
---------------
Simple module for setting the destructable (icon) for the CustomWindow.

---------------
CIItemSeek
---------------
Module which is build to search and collect information about the inventory.
Find out how many items of which type you have that are not stacked, find out how many duplicated
items you have and even if you have errors in your inventory indexing.

---------------
CIItemSlot
---------------
Small module that adds classes to the items. You can only equip items with the right class
on the right positions.

---------------
CIItemEffect
---------------
This module allows to attach effects to an item wearer. Do whatever you want, but keep in mind
that one item has a maximum of 3 effects.

---------------
CIPowerup
---------------
Not done yet.

---------------
CISetup
---------------
Changes the area around the inventory to be black and create the UI for all players.


---------------
CustomItem
---------------
The item object itself. Will trigger and get triggered from all kind of sources.
Modules are completing the collection of members and methods.

---------------
CustomInventory
---------------
The main object. It forges, stacks, creates sets, triggers events, gets triggered and uses
optional modules to provide the full repository of features to the user.



-Fixed a bug found by Dr. Boom:
Dead units were able to change the inventory and caused bugs.
-Also added a little bit of documentation.


Keywords:
CustomInventory, Inventory, Custom, Anachron, FullScreen, Module, vJass, Stack, Forge, Combine, Set, Powerup, Drop, Equip, Equipment, Equip, System
Contents

CustomInventory - 0.2.2.6 (Map)

Reviews
18:27, 18th Feb 2010 The_Reborn_Devil: Ohsh- That describes pretty much what I'm thinking. My eyes were sore even before I was done reviewing half of the code. The code looks really good and I couldn't find just one little thing that would be...
Level 12
Joined
Feb 11, 2008
Messages
809
Actually i have a bug to report whenever i try to save the map using JNGP with EGUI it gives me this error (image attached)

EDIT*

my bad thats hard to read it says:
Line 923: unable to find textmacro: "optional"
 

Attachments

  • Error.GIF
    Error.GIF
    42.8 KB · Views: 126
Alright i did what you said and it worked at first but when i saved a second time i got this error:

External not found in config file: "ObjectMerger"

sorry to bother you anachron
Install a new JNGP version.

Sorry if I missed something but where do you declare that the item slots and such is trackables? I need to change it to units. Will this be a big problem?
Its a bigger thing. I will make it easier in the future.
 
Level 12
Joined
Feb 11, 2008
Messages
809
Alright after playing around with your system some i found that if you clear the players selection when he presses the Esc. key (opens the inventory) that there will be no false right clicks which is what currently happens.

This is just a quick fix of course but you might want to try to get Ammorths right click detection script and disable right clicks while the inventory is opened which would be much more efficient then what i did.

Just thought this might help good luck on making this awesome system.
 
Level 13
Joined
Jun 9, 2009
Messages
1,129
Wuhu im in credits :D. Anachron I will review this when I get home. I also might ask some questions.

By the way this is the first spell / system that has gotten a Directors Cut!
And the best system.
Edit : Wooohooo im redownloaded a JNGP and Jasshelper, no problems. Thx i will +rep you when i can because you're get +rep.
Edit 2 : Shaman claws or Claws of attack are unable do set at left hand.
Edit 3 :
Is this bug.JPG

Weapons can be on the potion slots? :/
 
Last edited:
Level 13
Joined
Jun 9, 2009
Messages
1,129
Yeah, it works now. Maybe again something like lag or leak?-or blizzards mistake.
Do you want to make a video where will you show how to do something in fullscreen? - you 're say that before you post video
Edit : Can you make slots bigger, its hard to set an item when all other items are on requested slots.
 
Level 12
Joined
Feb 11, 2008
Messages
809
Bugs/glitches

1.When the inventory is open you can still right click and run in random direction.

2.When i pick up a clarity potion my game now crashes.

3.When you move your mouse over the "sell" button or the "exit" button it should show on the multiboard what they are and what they are used for.

4.i personally think that the icons/buttons used are too dark and need to brighter but that could be changed by the users.

Thats all for now i will report more after next release hope this helps.
 
Level 14
Joined
Mar 30, 2009
Messages
971
Weapons can be on the potion slots? :/
i actually regarded to that as a feature :)
i liked it :p

btw the overlapping borders dont look so good. when you do some things like equip an item then the borders flicker. a piece of border should end where the other piece of border starts.

imo you for the 2handers you should maybe use somekind of filter destructible (e.g. 75% transparent) on the other slot, so it shows that both slots are already used. but thats just my opinion.

about the nocturnal darkness of the icons you could use some kind of light source (similar to torches or more precisely the "light" doodad in UTM).

EDIT: if it isnt too difficult/time consuming then you could add stack numbers to items that can stack. just like the wow or standard w3 inventory.

btw why do you only use 4 of the 6 potion slots?
 
Level 12
Joined
Feb 11, 2008
Messages
809
Bugs/glitches

1.When the inventory is open you can still right click and run in random direction.

2.When i pick up a clarity potion my game now crashes.

3.When you move your mouse over the "sell" button or the "exit" button it should show on the multiboard what they are and what they are used for.

4.i personally think that the icons/buttons used are too dark and need to brighter but that could be changed by the users.

Thats all for now i will report more after next release hope this helps.

Just wandering if you read my suggestions since they were on the page before.
 
It ain't that hard to code at all. You just add an On-Hover function to the exit and drop trackables. I guess Anachron could easily do this.
Exactly.

About the potions, is there a way that you could make the potions move into their slot when you pick them up, instead of moving them there from your inventory.
I will, but not now :p

Just wandering if you read my suggestions since they were on the page before.
I did, was just busy, sorry.

Bugs/glitches

1.When the inventory is open you can still right click and run in random direction.
>> That was more a feature that the hero can actually do any action while checking the inventory.
2.When i pick up a clarity potion my game now crashes.
>> With the last version? (0.1.U)?
3.When you move your mouse over the "sell" button or the "exit" button it should show on the multiboard what they are and what they are used for.
>> Yeah, I maybe add that later.
4.i personally think that the icons/buttons used are too dark and need to brighter but that could be changed by the users.
>> You can easily change that by changing the icons in the object editor.
Thats all for now i will report more after next release hope this helps.
Thanks.
 
Level 12
Joined
Feb 11, 2008
Messages
809
Thanks for answering my post and also i do like the fact that you can still move with inventory open BUT i just want right clicks to be disabled while its open.

As in click to run to an area then open inventory do w/e then close inventory and your still on your way to the same area but without any accidental right clicks while inventory is open.

I'm shure you understand what im saying and i really enjoy how you can continue actions while the inventory is open.

Thats the whole reason i must edited it to deselect all unit/s belonging to triggering player then when you close it to reselect the unit/s which really works like a charm.

like i said thanks again and i will definitely be using this :thumbs_up:
 
Great System definitly deserves DC but it's very difficult for jass newbies to understand...

maybe add a HOW TO for them...

But for me it's perfect :D:D

Just one question: how did you rotate the pala in the inventory view so he can be seen in the window... you didn't create a custom unit and i don't want to look through that huge code....
 
Well, its not even triggered, check object editor and the fake paladin.

About the howto:
Really no. I mean its that complicated that you really need high vJass knowledge to change it, so a how to for non-Jassers would really be bad.

Edit: Okay guys, I finally know what to do.
Because of the really fast pickups I will have to wait until you haven't picked up for a second.
That means, after 1 second of your last pickup, the inventory goes through all kind of functions, like stacking, forging, combining, enchanting, item set checking and such.
This means you either have to pick up items slower or wait for the inventory for being finished.

This will hopefully remove all the pickup bugs which are created through stack overflow.
 
Rofl, glad you like it.
Why won't you use it anyway?

Edit:
# Update - 0.1.V is online.

Changelog
Inventory now refreshes after one second doing something,
preventing mass item pickups to cause a stack overflow at wc3 and creating bugs in my system.

# Update - 0.1.W is online.

Changelog
Fixed a very big bug in the stacking module, causing random items to be removed,
inventory to not displayed correctly, thread crashes and such things. Now its fixed.

# Update - 0.1.X is online.

Changelog
Added an automatic destructable creater script written by Ammorth at wc3c.net.
You can check it here.
 
Last edited:
Top