8 * \brief Dispense an item for a user
10 * The core of the dispense system, I kinda like it :)
12 int DispenseItem(int User, int Item)
19 // Sanity check please?
20 if(Item < 0 || Item >= giNumItems)
24 item = &gaItems[Item];
25 handler = item->Handler;
27 // Check if the dispense is possible
28 ret = handler->CanDispense( User, item->ID );
31 // Subtract the balance
32 ret = AlterBalance( User, -item->Price );
33 // What value should I use for this error?
34 // AlterBalance should return the final user balance
35 if(ret == 0) return 1;
37 // Get username for debugging
38 username = GetUserName(User);
40 // Actually do the dispense
41 ret = handler->DoDispense( User, item->ID );
43 Log_Error("Dispense failed after deducting cost (%s dispensing %s - %ic)",
44 username, item->Name, item->Price);
45 AlterBalance( User, item->Price );
50 // And log that it happened
51 Log_Info("Dispensed %s (%i:%i) for %s [cost %i, balance %i cents]",
52 item->Name, handler->Name, item->ID,
53 username, item->Price, GetBalance(User)