X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=src%2Fserver%2Fdispense.c;h=b0a59364e5c8ae63479e151adfbf66d3b8148157;hb=0e15ed888a4d398530a74a6b713414e649767358;hp=4c6bd512085d568f8b5b1ef917a530b2e47be1ea;hpb=7aab29aca5fcb29bf86beb6602a721bec4ba1d08;p=tpg%2Fopendispense2.git diff --git a/src/server/dispense.c b/src/server/dispense.c index 4c6bd51..b0a5936 100644 --- a/src/server/dispense.c +++ b/src/server/dispense.c @@ -8,6 +8,7 @@ int _GetMinBalance(int Account); int _CanTransfer(int Source, int Destination, int Ammount); int _Transfer(int Source, int Destination, int Ammount, const char *Reason); + int _GetSalesAcct(tItem *Item); // === CODE === /** @@ -21,7 +22,9 @@ int DispenseItem(int ActualUser, int User, tItem *Item) tHandler *handler; char *username, *actualUsername; - salesAcct = Bank_GetAcctByName(COKEBANK_SALES_ACCT); + handler = Item->Handler; + + salesAcct = _GetSalesAcct(Item); // Check if the user can afford it if( Item->Price && !_CanTransfer(User, salesAcct, Item->Price) ) @@ -29,9 +32,7 @@ int DispenseItem(int ActualUser, int User, tItem *Item) return 2; // 2: No balance } - handler = Item->Handler; - - // KNOWN HACK: Naming a slot "dead" disables it + // HACK: Naming a slot "dead" disables it if( strcmp(Item->Name, "dead") == 0 ) return 1; @@ -49,7 +50,7 @@ int DispenseItem(int ActualUser, int User, tItem *Item) ret = handler->DoDispense( User, Item->ID ); if(ret) { Log_Error("Dispense failed (%s dispensing %s:%i '%s')", - username, Item->Name, Item->Handler->Name, Item->ID); + username, Item->Handler->Name, Item->ID, Item->Name); free( username ); return -1; // 1: Unknown Error again } @@ -86,7 +87,7 @@ int DispenseRefund(int ActualUser, int DestUser, tItem *Item, int OverridePrice) int src_acct, price; char *username, *actualUsername; - src_acct = Bank_GetAcctByName(COKEBANK_SALES_ACCT); + src_acct = _GetSalesAcct(Item); if( OverridePrice > 0 ) price = OverridePrice; @@ -119,6 +120,10 @@ int DispenseGive(int ActualUser, int SrcUser, int DestUser, int Ammount, const c char *actualUsername; char *srcName, *dstName; + // HACK: Naming a slot "dead" disables it (catch for snack) + if( strcmp(ReasonGiven, "dead") == 0 ) + return 1; + if( Ammount < 0 ) return 1; // Um... negative give? Not on my watch! ret = _Transfer( SrcUser, DestUser, Ammount, ReasonGiven ); @@ -187,9 +192,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), User, Ammount, ReasonGiven ); + ret = _Transfer( Bank_GetAcctByName(COKEBANK_DEBT_ACCT,1), User, Ammount, ReasonGiven ); #else - ret = Bank_Transfer( Bank_GetAcctByName(COKEBANK_DEBT_ACCT), User, Ammount, ReasonGiven ); + ret = Bank_Transfer( Bank_GetAcctByName(COKEBANK_DEBT_ACCT,1), User, Ammount, ReasonGiven ); #endif if(ret) return 2; @@ -211,7 +216,7 @@ int DispenseSet(int ActualUser, int User, int Balance, const char *ReasonGiven) int curBal = Bank_GetBalance(User); char *byName, *dstName; - _Transfer( Bank_GetAcctByName(COKEBANK_DEBT_ACCT), User, Balance-curBal, ReasonGiven ); + _Transfer( Bank_GetAcctByName(COKEBANK_DEBT_ACCT,1), User, Balance-curBal, ReasonGiven ); byName = Bank_GetAcctName(ActualUser); dstName = Bank_GetAcctName(User); @@ -236,7 +241,7 @@ int DispenseDonate(int ActualUser, int User, int Ammount, const char *ReasonGive if( Ammount < 0 ) return 2; - ret = _Transfer( User, Bank_GetAcctByName(COKEBANK_DEBT_ACCT), Ammount, ReasonGiven ); + ret = _Transfer( User, Bank_GetAcctByName(COKEBANK_DONATE_ACCT,1), Ammount, ReasonGiven ); if(ret) return 2; byName = Bank_GetAcctName(ActualUser); @@ -314,9 +319,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) ) @@ -336,3 +344,11 @@ int _Transfer(int Source, int Destination, int Ammount, const char *Reason) return 1; return Bank_Transfer(Source, Destination, Ammount, Reason); } + +int _GetSalesAcct(tItem *Item) +{ + char string[sizeof(COKEBANK_SALES_PREFIX)+strlen(Item->Handler->Name)]; + strcpy(string, COKEBANK_SALES_PREFIX); + strcat(string, Item->Handler->Name); + return Bank_GetAcctByName(string, 1); +}