include library.sui; include library.utils; include library.prose; include library.money; /***************** DEBUG/TESTING ***********************/ /* trigger OnSpeaking(string text) { if ( text.equals("paytest") ) { //debugSpeakMsg(self, "calling paytest functions!"); money.pay(self, money.ACCT_TEST, 10, "testAccountHandler", null, true); money.pay(self, money.ACCT_BETA_TEST, 10, "betaAccountHandler", null, true); return SCRIPT_OVERRIDE; } return SCRIPT_CONTINUE; } messageHandler testAccountHandler() { debugSpeakMsg(self, "TEST pay complete! sucess = " +(money.getReturnCode(params)==money.RET_SUCCESS)); return SCRIPT_CONTINUE; } messageHandler betaAccountHandler() { debugSpeakMsg(self, "BETA pay complete! sucess = " +(money.getReturnCode(params)==money.RET_SUCCESS)); return SCRIPT_CONTINUE; } */ /***************** PAY HANDLERS ***********************/ messageHandler handlePayDeposit() { //debugSpeakMsg(self, "handlePayDeposit - " + params.toString()); //debugSpeakMsg(self, "handlePayDeposit: entering"); if ( (params == null) || (params.isEmpty()) ) return SCRIPT_CONTINUE; obj_id target = params.getObjId(money.DICT_TARGET_ID); int total = params.getInt(money.DICT_TOTAL); string returnHandler = params.getString(money.DICT_PAY_HANDLER); if ( total < 1 ) return SCRIPT_CONTINUE; int retCode = money.getReturnCode(params); switch (retCode) { case money.RET_SUCCESS: //debugSpeakMsg(self, "handlePayDeposit: ret code = SUCCESS"); if ( !isIdValid(target) ) { string acct = params.getString(money.DICT_ACCT_NAME); //debugSpeakMsg(self, "handlePayDeposit: target = " + target + " acct = " + acct); if ( (acct == null) || (acct.equals("")) ) { return SCRIPT_CONTINUE; } else { transferBankCreditsToNamedAccount(self, acct, total, money.HANDLER_PAY_PASS, money.HANDLER_PAY_FAIL, params); utils.moneyOutMetric(self, acct, total); } } else { transferBankCreditsTo(self, target, total, money.HANDLER_PAY_PASS, money.HANDLER_PAY_FAIL, params); } return SCRIPT_CONTINUE; default: //debugSpeakMsg(self, "handlePayDeposit: ret code = NOT success"); if ( !isIdValid(target) ) { string acct = params.getString(money.DICT_ACCT_NAME); if ( (acct == null) || (acct.equals("")) ) { return SCRIPT_CONTINUE; } else { prose_package pp = prose.getPackage(money.PROSE_PAY_FAIL, acct, total); sendSystemMessageProse(self, pp); messageTo(self, returnHandler, params, 0, true); } } else { string targetName = params.getString(money.DICT_TARGET_NAME); if ( targetName != null && !targetName.equals("") ) { prose_package pp = prose.getPackage(money.PROSE_PAY_FAIL, self,null,null, target,targetName,null, null,null,null, total, 0f); sendSystemMessageProse(self, pp); } else { prose_package pp = prose.getPackage(money.PROSE_PAY_FAIL, self, target, total); sendSystemMessageProse(self, pp); } messageTo(target, returnHandler, params, 0, isObjectPersisted(target)); } return SCRIPT_CONTINUE; } } messageHandler handlePayPass() { //debugSpeakMsg(self, "handlePayPass: payment success!"); if ( (params == null) || (params.isEmpty()) ) return SCRIPT_CONTINUE; money.decrementPayTally(self, params); int retCode = money.getReturnCode(params); switch (retCode) { case -1: params.put(money.DICT_CODE, money.RET_SUCCESS); break; case money.RET_FAIL: messageTo(self, money.HANDLER_PAY_FAIL, params, 0, isObjectPersisted(self)); return SCRIPT_CONTINUE; } obj_id target = params.getObjId(money.DICT_TARGET_ID); int total = params.getInt(money.DICT_TOTAL); boolean notify = params.getBoolean(money.DICT_NOTIFY); if ( notify ) { if ( !isIdValid(target) ) { string acct = params.getString(money.DICT_ACCT_NAME); if ( (acct == null) || (acct.equals("")) ) { } else { string_id sid_acct = new string_id(money.STF_ACCT_N, toLower(acct)); if ( sid_acct != null ) { prose_package ppSidAcct = prose.getPackage(money.PROSE_PAY_ACCT_SUCCESS, sid_acct, total); sendSystemMessageProse(self, ppSidAcct); } else { prose_package ppAcct = prose.getPackage(money.PROSE_PAY_ACCT_SUCCESS, acct, total); sendSystemMessageProse(self, ppAcct); } } } else { string targetName = params.getString(money.DICT_TARGET_NAME); if ( targetName != null && !targetName.equals("") ) { prose_package pp = prose.getPackage(money.PROSE_PAY_SUCCESS, self,null,null, target,targetName,null, null,null,null, total, 0f); sendSystemMessageProse(self, pp); } else { if (exists(target)) { prose_package pp = prose.getPackage(money.PROSE_PAY_SUCCESS, self, target, total); sendSystemMessageProse(self, pp); } else { prose_package pp = prose.getPackage(money.PROSE_PAY_SUCCESS_NO_TARGET, self, target, total); sendSystemMessageProse(self, pp); } } } } string returnHandler = params.getString(money.DICT_PAY_HANDLER); int msgPayer = params.getInt(money.DICT_MSG_PAYER); if ( (target != null) && (target != obj_id.NULL_ID) && (msgPayer == 0) ) { messageTo(target, returnHandler, params, 0, isObjectPersisted(target)); } else { messageTo(self, returnHandler, params, 0, true); } return SCRIPT_CONTINUE; } messageHandler handlePayFail() { //debugSpeakMsg(self, "handlePayFail: payment failed!"); if ( (params == null) || (params.isEmpty()) ) return SCRIPT_CONTINUE; money.decrementPayTally(self, params); params.put(money.DICT_CODE, money.RET_FAIL); string returnHandler = params.getString(money.DICT_PAY_HANDLER); obj_id target = params.getObjId(money.DICT_TARGET_ID); if ( !isIdValid(target) ) { messageTo(self, returnHandler, params, 0, true); } else { messageTo(target, returnHandler, params, 0, isObjectPersisted(target)); } return SCRIPT_CONTINUE; } /***************** ACCT PAY HANDLERS ***********************/ messageHandler acctToPass() { //debugSpeakMsg(self, "handlePayDeposit - " + params.toString()); //debugSpeakMsg(self, "handlePayDeposit: entering"); if ( (params == null) || (params.isEmpty()) ) return SCRIPT_CONTINUE; int amt = params.getInt(money.DICT_AMOUNT); if ( amt < 1 ) return SCRIPT_CONTINUE; obj_id target = params.getObjId(money.DICT_TARGET_ID); if ( !isIdValid(target) ) return SCRIPT_CONTINUE; withdrawCashFromBank(target, amt, "withdrawPass", "xferFail", params); return SCRIPT_CONTINUE; } messageHandler withdrawPass() { //debugSpeakMsg(self, "handlePayPass: payment success!"); if ( (params == null) || (params.isEmpty()) ) return SCRIPT_CONTINUE; params.put(money.DICT_CODE, money.RET_SUCCESS); string returnHandler = params.getString(money.DICT_PAY_HANDLER); messageTo(self, returnHandler, params, 0, true); return SCRIPT_CONTINUE; } messageHandler xferFail() { //debugSpeakMsg(self, "handlePayFail: payment failed!"); if ( (params == null) || (params.isEmpty()) ) return SCRIPT_CONTINUE; params.put(money.DICT_CODE, money.RET_FAIL); string returnHandler = params.getString(money.DICT_PAY_HANDLER); messageTo(self, returnHandler, params, 0, true); return SCRIPT_CONTINUE; } /***************** MONEY CLEAR HANDLERS ***********************/ messageHandler handleCovertDepositReturn() { int cash = getCashBalance(self); if ( cash > 0 ) { money.covertDeposit(self, cash, "handleCovertDepositReturn", params); return SCRIPT_CONTINUE; } int bank = getBankBalance(self); if ( bank < 1 ) return SCRIPT_CONTINUE; string acct = params.getString("acct"); transferBankCreditsToNamedAccount(self, acct, bank, "finishClear", "finishClear", params); return SCRIPT_CONTINUE; } messageHandler finishClear() { return SCRIPT_CONTINUE; } //********* BANKING MESSAGEHANDLERS ************************************* messageHandler handleDepositWithdraw() { utils.removeScriptVar(self, "bankMenu"); if ( params == null ) { messageTo(self, money.HANDLER_BANK_UNKNOWN_ERROR, null, 0, true); return SCRIPT_CONTINUE; } int btnPressed = sui.getIntButtonPressed(params); switch(btnPressed) { case sui.BP_CANCEL: return SCRIPT_CONTINUE; } int cashIn = getCashBalance(self); int cashOut = sui.getTransferInputFrom(params); int bankIn = getBankBalance(self); int bankOut = sui.getTransferInputTo(params); if ( (cashOut < 0) || (bankOut < 0) ) { //debugSpeakMsg(self, "tsk tsk. I tried to get the system to accept negative number input!"); return SCRIPT_OVERRIDE; } int totalIn = cashIn + bankIn; int totalOut = cashOut + bankOut; if ( totalIn != totalOut ) { //debugSpeakMsg(self, "base_player:handleDepositWithdraw has noticed a discrepancy with bank ui values!"); return SCRIPT_OVERRIDE; } int amt = 0; dictionary d = new dictionary(); if ( cashIn > cashOut ) //deposit cash { amt = cashIn - cashOut; if ( !money.deposit(self, amt) ) { //debugSpeakMsg(self, "deposit transaction for " + amt + " credits was rejected by the system"); } } else if ( cashIn < cashOut ) //withdraw funds { amt = cashOut - cashIn; if ( !money.withdraw(self, amt) ) { //debugSpeakMsg(self, "withdraw transaction for " + amt + " credits was rejected by the system"); } } return SCRIPT_CONTINUE; } messageHandler handleBankSuccess() { money.bankSuccess(self, params); return SCRIPT_CONTINUE; } messageHandler handleBankUnknownError() { money.bankError(self); return SCRIPT_CONTINUE; } messageHandler handleBankWithdrawError() { money.bankWithdrawError(self); return SCRIPT_CONTINUE; } messageHandler handleBankDepositError() { money.bankDepositError(self); return SCRIPT_CONTINUE; } messageHandler handleBankTransferError() { money.bankTransferError(self); return SCRIPT_CONTINUE; } messageHandler handleCashTransferError() { money.cashTransferError(self); return SCRIPT_CONTINUE; } messageHandler handleCovertTransactionPass() { LOG("money", self + " covert transaction succeeded"); params.put(money.DICT_CODE, money.RET_SUCCESS); string returnHandler = params.getString(money.DICT_HANDLER); messageTo(self, returnHandler, params, 0, true); return SCRIPT_CONTINUE; } messageHandler handleCovertTransactionFail() { LOG("money", self + " covert transaction FAILED"); params.put(money.DICT_CODE, money.RET_FAIL); string returnHandler = params.getString(money.DICT_HANDLER); messageTo(self, returnHandler, params, 0, true); return SCRIPT_CONTINUE; } messageHandler handlePaymentRequest() { if ( (params == null) || (params.isEmpty()) ) { return SCRIPT_CONTINUE; } int amt = params.getInt(money.DICT_AMOUNT); string returnHandler = params.getString(money.DICT_HANDLER); boolean notify = params.getBoolean(money.DICT_NOTIFY); obj_id target = params.getObjId(money.DICT_TARGET_ID); if ( target == null ) { return SCRIPT_CONTINUE; } else if ( target == obj_id.NULL_ID ) { string acct = params.getString(money.DICT_ACCT_NAME); if ( (acct == null) || (acct.equals("")) ) { return SCRIPT_CONTINUE; } money.pay(self, acct, amt, returnHandler, params, notify); } else { money.pay(self, target, amt, returnHandler, params, notify); } return SCRIPT_CONTINUE; }