User:Gumi/CheckInventory
From The Mana World
(shamelessly skips the introductory blah blah)
Example Usage
get an item
setarray @getitem$, "Acorn"; setarray @getitem, 1; callfunc "CheckInventory";
remove an item
setarray @delitem$, "Acorn"; setarray @delitem, 1; callfunc "CheckInventory";
remove 2 items and get an item
setarray @delitem$, "Acorn", "Root"; setarray @delitem, 1, 1; setarray @getitem$, "RedApple"; setarray @getitem, 1; callfunc "CheckInventory";
remove an item and zeny and get another item
setarray @delitem$, "SnakeSkin"; setarray @delitem, 1; setarray @getitem$, "LeatherPatch"; setarray @getitem, 1; set @delzeny, 500; callfunc "CheckInventory";
The zeny transaction will ONLY occur if all the items can be added/removed. You can also use @getzeny to add zeny.
Error handlers
If a problem happens, @check_fail will be a non-0 value. You can either choose to use the default error handlers or to set your own.
0 = no error 1 = missing required items 2 = overweight 3 = no room in inventory 4 = not enough zeny
default handlers
catch-all handler
if (@check_fail) close;
This code will use the default handlers and stop the script if an error is found.
custom handlers
to use custom handlers, you need to set a special variable to disable the default handlers.
@silent = use custom handlers for all errors @silent1 = use custom handler for error 1 and default handlers for the others @silent2 = use custom handler for error 2 and default handlers for the others @silent3 = use custom handler for error 3 and default handlers for the others @silent4 = use custom handler for error 4 and default handlers for the others
The @silentX variables can be combined but if you want to handle all four errors please use @silent. You do not need to handle weight, zeny and inventory if you just want to delete items so you can use @silent and just handle error 1.
handle all
setarray @delitem$, "SnakeSkin", "Root", "GreenApple"; setarray @delitem, 1, 5, 20; setarray @getitem$, "ReedBundle", "CottonCloth"; setarray @getitem, 12, 1; set @delzeny, 500; set @silent, 1; callfunc "CheckInventory"; if (@check_fail == 1) goto L_Items; if (@check_fail == 2) goto L_Weight; if (@check_fail == 3) goto L_Inventory; if (@check_fail == 4) goto L_Zeny; mes "Transaction successful"; close; L_Items: mes "You do not have the required items."; close; L_Weight: mes "You need to drop some weight."; close; L_Inventory: mes "You are carrying too much items."; close; L_Zeny: mes "You do not have enough zeny. Go sell your house and try again."; close;
handle only some errors
setarray @delitem$, "SnakeSkin", "Root", "GreenApple"; setarray @delitem, 1, 5, 20; setarray @getitem$, "ReedBundle", "CottonCloth"; setarray @getitem, 12, 1; set @delzeny, 500; set @silent3, 1; set @silent4, 1; callfunc "CheckInventory"; if (@check_fail == 3) goto L_Inventory; if (@check_fail == 4) goto L_Zeny; mes "Transaction successful"; close; L_Inventory: mes "You are carrying too much items."; close; L_Zeny: mes "You do not have enough zeny. Go sell your house and try again."; close;