X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=src%2Fserver%2Fdispense.c;h=c994e335f037c8e5a1a54a38109821b91f55ab34;hb=45bee621d08d0471e92dd7b2092a635af8cc7f13;hp=15962a3e36f3544a97d7be6d0c120a08c5fd19be;hpb=950aea956b32f7c63c6f31c60aaf57dbe9bc1a80;p=tpg%2Fopendispense2.git diff --git a/src/server/dispense.c b/src/server/dispense.c index 15962a3..c994e33 100644 --- a/src/server/dispense.c +++ b/src/server/dispense.c @@ -45,6 +45,23 @@ int DispenseItem(int ActualUser, int User, tItem *Item) // Get username for debugging username = Bank_GetAcctName(User); + // Ordering: Pay, Drop. Worst case requires a refund, other ordering leads to drops when payment fails. + + // Take away money + if( Item->Price ) + { + char *reason; + reason = mkstr("Dispense - %s:%i %s", handler->Name, Item->ID, Item->Name); + if( _Transfer( User, salesAcct, Item->Price, reason ) != 0 ) { + Log_Error("Dispense failed (%s dispensing %s:%i '%s') - Cokebank error!", + username, Item->Handler->Name, Item->ID, Item->Name); + free(reason); + free( username ); + return -1; // -1: Unknown error + } + free(reason); + } + // Actually do the dispense if( handler->DoDispense ) { ret = handler->DoDispense( User, Item->ID ); @@ -52,26 +69,28 @@ int DispenseItem(int ActualUser, int User, tItem *Item) Log_Error("Dispense failed (%s dispensing %s:%i '%s')", username, Item->Handler->Name, Item->ID, Item->Name); free( username ); - return -1; // 1: Unknown Error again + return -1; // -1: Unknown Error } } - // Take away money - if( Item->Price ) - { - char *reason; - reason = mkstr("Dispense - %s:%i %s", handler->Name, Item->ID, Item->Name); - _Transfer( User, salesAcct, Item->Price, reason ); - free(reason); - } - actualUsername = Bank_GetAcctName(ActualUser); // And log that it happened - Log_Info("dispense '%s' (%s:%i) for %s by %s [cost %i, balance %i]", - Item->Name, handler->Name, Item->ID, - username, actualUsername, Item->Price, Bank_GetBalance(User) - ); + if( gbNoCostMode ) + { + // Special format for zero cost dispenses + Log_Info("test dispense '%s' (%s:%i) for %s by %s [no change]", + Item->Name, handler->Name, Item->ID, + username, actualUsername + ); + } + else + { + Log_Info("dispense '%s' (%s:%i) for %s by %s [cost %i, balance %i]", + Item->Name, handler->Name, Item->ID, + username, actualUsername, Item->Price, Bank_GetBalance(User) + ); + } free( username ); free( actualUsername ); @@ -192,9 +211,9 @@ int DispenseAdd(int ActualUser, int User, int Ammount, const char *ReasonGiven) char *dstName, *byName; #if DISPENSE_ADD_BELOW_MIN - ret = _Transfer( Bank_GetAcctByName(COKEBANK_DEBT_ACCT,1), User, Ammount, ReasonGiven ); + ret = _Transfer( Bank_GetAcctByName(COKEBANK_ADDSRC_ACCT,1), User, Ammount, ReasonGiven ); #else - ret = Bank_Transfer( Bank_GetAcctByName(COKEBANK_DEBT_ACCT,1), User, Ammount, ReasonGiven ); + ret = Bank_Transfer( Bank_GetAcctByName(COKEBANK_ADDSRC_ACCT,1), User, Ammount, ReasonGiven ); #endif if(ret) return 2; @@ -211,20 +230,22 @@ int DispenseAdd(int ActualUser, int User, int Ammount, const char *ReasonGiven) return 0; } -int DispenseSet(int ActualUser, int User, int Balance, const char *ReasonGiven) +int DispenseSet(int ActualUser, int User, int Balance, const char *ReasonGiven, int *OrigBalance) { int curBal = Bank_GetBalance(User); char *byName, *dstName; - _Transfer( Bank_GetAcctByName(COKEBANK_DEBT_ACCT,1), User, Balance-curBal, ReasonGiven ); + if( Bank_Transfer( Bank_GetAcctByName(COKEBANK_DEBT_ACCT,1), User, Balance-curBal, ReasonGiven ) ) + return -1; byName = Bank_GetAcctName(ActualUser); dstName = Bank_GetAcctName(User); - Log_Info("set balance of %s to %i by %s [balance %i] - %s", - dstName, Balance, byName, Bank_GetBalance(User), ReasonGiven + Log_Info("set balance of %s to %i by %s [was %i, balance %i] - %s", + dstName, Balance, byName, curBal, Bank_GetBalance(User), ReasonGiven ); + *OrigBalance = curBal; free(byName); free(dstName); @@ -319,9 +340,12 @@ int _GetMinBalance(int Account) /** * \brief Check if a transfer is possible + * \return Boolean success */ int _CanTransfer(int Source, int Destination, int Ammount) { +// if( Bank_GetFlags(Source) & USER_FLAG_DISABLED ) +// return 0; if( Ammount > 0 ) { if( Bank_GetBalance(Source) - Ammount < _GetMinBalance(Source) )