8 * \brief Dispense an item for a user
10 * The core of the dispense system, I kinda like it :)
12 int DispenseItem(int User, tItem *Item)
18 handler = Item->Handler;
20 // Check if the dispense is possible
21 if( handler->CanDispense ) {
22 ret = handler->CanDispense( User, Item->ID );
23 if(ret) return 1; // 1: Unable to dispense
26 // Subtract the balance
27 ret = Transfer( User, GetUserID(">sales"), Item->Price, "" );
28 // What value should I use for this error?
29 // AlterBalance should return the final user balance
30 if(ret) return 2; // 2: No balance
32 // Get username for debugging
33 username = GetUserName(User);
35 // Actually do the dispense
36 if( handler->DoDispense ) {
37 ret = handler->DoDispense( User, Item->ID );
39 Log_Error("Dispense failed after deducting cost (%s dispensing %s - %ic)",
40 username, Item->Name, Item->Price);
41 Transfer( GetUserID(">sales"), User, Item->Price, "rollback" );
43 return -1; // 1: Unkown Error again
47 // And log that it happened
48 Log_Info("Dispensed %s (%i:%i) for %s [cost %i, balance %i cents]",
49 Item->Name, handler->Name, Item->ID,
50 username, Item->Price, GetBalance(User)