Client String Bank Script


//#CLIENTSIDE
if(created||playerenters){
  // Initialize the attributes
  x=43.5;
  showcharacter;
  setcharprop #3,head2.png;
  setcharprop #C0,white;
  setcharprop #C1,white;
  setcharprop #C2,orange;
  setcharprop #C3,lightblue;
  setcharprop #C4,lightblue;
  setcharprop #n,Bank Teller;
  setcharprop #2,no-shield.gif;
  shieldpower = 1;
  dir = 2;
}


if(playerchats){
tokenize #c;

  if(strequals(#t(0),balance)){
    setcharprop #c, Balance : #s(client.bankaccount) Rupees;
    sleep 2;
    setcharprop #c,;
  }

  if(strequals(#t(0),deposit)){
  this.depositammount=strtofloat(#t(1));
    if(playerrupees >= 1){
      if(strtofloat(#v(this.depositammount)) <= playerrupees){
        playerrupees = playerrupees-strtofloat(#v(this.depositammount));
        this.newbalance = strtofloat(#s(client.bankaccount)) + strtofloat(#v(this.depositammount));
        setstring client.bankaccount,#v(this.newbalance);
        setcharprop #c, Balance : #s(client.bankaccount) Rupees;
        sleep 2;
        setcharprop #c,;
      } else {
        setcharprop #c,Not enough money !;
        sleep 2;
        setcharprop #c,;
      }

      if(strequals(#t(1),all)){
        this.ammount=strtofloat(#s(client.bankaccount))+playerrupees;
        setstring client.bankaccount,#v(this.ammount);
        playerrupees = 0;
        //playerrupees = playerrupees-strtofloat(#v(this.ammount));
        setcharprop #c, Balance : #s(client.bankaccount) Rupees;
        sleep 2;
        setcharprop #c,;
      }
    } else {
        setcharprop #c,Not enough money !;
        sleep 2;
        setcharprop #c,;
    }
  }

  if(strequals(#t(0),withdraw)){
   this.withdrawammount = strtofloat(#t(1));

    //withdraw some
    if(strtofloat(#s(client.bankaccount)) >= strtofloat(#t(1))){
      this.newvalue = strtofloat(#s(client.bankaccount)) - strtofloat(#v(this.withdrawammount));
      playerrupees = playerrupees+strtofloat(#v(this.withdrawammount));
      setstring client.bankaccount,#v(this.newvalue);
      setcharprop #c, Balance : #s(client.bankaccount) Rupees;
      sleep 2;
      setcharprop #c,;
    } else {
      setcharprop #c,Not enough money in account !;
      sleep 2;
      setcharprop #c,;
    }

      if(strequals(#t(1),all)){
        if(strtofloat(#s(client.bankaccount)) >= 0){
          this.ammount = strtofloat(#s(client.bankaccount));
          sleep 0.05;
          setstring client.bankaccount,0;
          playerrupees = playerrupees+strtofloat(#v(this.ammount));
          setcharprop #c, Balance : #s(client.bankaccount) Rupees;
          sleep 2;
          setcharprop #c,;
        } else {
          setcharprop #c,Not enough money in account !;
          sleep 2;
          setcharprop #c,;
       }
     }
   }
}
  

edit: the strtofloat’s are the only way i could get it to work right . so i did it that way .

Well, you don’t need to strtofloat variables. As it says, it converts strings to floating values, and since it’s not a string… well, it’s not needed :slight_smile:

On the withdraw some:
if(strtofloat(#s(client.bankaccount)) <= strtofloat(#t(1))){
Would imply a check that makes sure the bank amount is less than the withdraw amount?

You also forgot checks for if the withdraw is greater than 0, and handling decimals.

___Merged doublepost__________________

Edited it some for you:

[code]//#CLIENTSIDE
if (created||playerenters) {
// Initialize the attributes
timereverywhere; // ALLOW TIMEOUTS FOR EACH PLAYER… NEVER USED THIS BEFORE
x += .5;
showcharacter;
setcharprop #3,head2.png;
setcharprop #C0,white;
setcharprop #C1,white;
setcharprop #C2,orange;
setcharprop #C3,lightblue;
setcharprop #C4,lightblue;
setcharprop #n,Bank Teller;
setcharprop #2,no-shield.gif;
shieldpower = 1;
dir = 2;
message;
this.oldbalance = strtofloat(#s(client.bankaccount)); // RECORD PREVIOUS BALANCE
}

if (playerchats) {
tokenize #c;
this.chkammount = abs(int(strtofloat(#t(1)))); // GET ABSOLUTE VALUE AND ELIMINATE FLOATING POINT
if (strequals(#t(0),deposit)) {
// CHECK DEPOSIT
if (strequals(#t(1),all)) {
if (playerrupees > 0) {
setstring client.bankaccount,#v(strtofloat(#s(client.bankaccount)) + playerrupees);
playerrupees = 0;
} else message You have no money!;
} else {
if (this.chkammount <= playerrupees && playerrupees > 0) {
setstring client.bankaccount,#v(strtofloat(#s(client.bankaccount)) + this.chkammount);
playerrupees -= this.chkammount;
} else message You don’t have enough money!;
}
// END DEPOSIT WITHDRAW
} else if (strequals(#t(0),withdraw)) {
// CHECK WITHDRAW
if (strequals(#t(1),all)) {
if (strtofloat(#s(client.bankaccount)) > 0) {
setstring client.bankaccount,0;
playerrupees += strtofloat(#s(client.bankaccount));
} else message No money in your account!;
} else {
if (this.chkammount > 0) {
if (strtofloat(#s(client.bankaccount)) - this.chkammount > 0) {
setstring client.bankaccount,#v(strtofloat(#s(client.bankaccount)) - this.chkammount);
playerrupees += this.chkammount;
} else message Not enough money in your account!;
} else message Invalid amount!;
}
}
// CHECK IF PLAYER HAS ASKED FOR BALANCE OR BALANCE HAS CHANGED
if (strequals(#c,balance) || strtofloat(#s(client.bankaccount)) != this.oldbalance) {
message Balance : #s(client.bankaccount) Rupees; // IF SO, LET PLAYER KNOW THEIR BALANCE
}
timeout = 3; // AFTER THREE SECONDS, CLEAR CHAT WITH TIMEOUT
this.oldbalance = strtofloat(#s(client.bankaccount)); // RECORD NEW BALANCE
}

if (timeout) message; // CLEAR CHAT
[/code]

Thougfht I would leave this here since I found this post today (in response to Urza is working on bank system for Xoria)

Originally posted by Downsider


___Merged doublepost__________________

Also I found this…

// Graal Online Bank
//   Account Card
//    by Kyle0654
//
// 11-12-00
//  - Scripting started
//  - Encoded Accounts Finished
//
// 11-13-00
//  - Loading Screen Finished (w/o version)
//
// 11-14-00
//  - Version # put on Loading Screen
//  - Added basic interface, including showing
//    account balance, and allowing user to select
//    an action via arrow keys.  Exit may be skipped
//    to by pressing D.
//
// 11-15-00
//  - Finished EVERYTHING
//
// 11-16-00
//  - Okay, maybe not...made it show 0 if you have no
//    balance, and made it hard to die.
//
// Variable names:
//  C = control
//  D = decode
//  E = encode
//  G = graphical
//  Z = temporary
//  TZ = Test variables
//

if (playerenters&&strequals(#L,gobankcard.graal)) {//&&(!hasweapon(*bank card)||strtofloat(#s(bankversion))<strtofloat(#s(server.bankversion)))) {
  if (!hasweapon(*bank card)) {
    this.Tzba=strtofloat(#s(bankaccount));
    if (this.Tzba>0) {
      this.Cbankaccount={this.Tzba,this.Tzba,this.Tzba};
      setstring bankaccount,0;
    }
    Cencode();
    setstring bankcardnum, #s(server.bankcardnum);
    setstring server.bankcardnum, #v(strtofloat(#s(server.bankcardnum))+1);
  }
  toweapons *bank card;
  setstring bankversion, #s(server.bankversion);
  say 0;
  timeout=.05;
}
if (weaponfired&&this.Con!=1&&isbank==1) {
  Coldxy();
  Cgetversion();
  this.Ckeypress={0,0,0,0,0,0,0,0,0,0,0};
  this.Gpanelpos={20,100};
//                   x, y, xlen, ylen, xpos, ypos
  this.Gloadsprites={0,113,211,116,this.Gpanelpos[0],this.Gpanelpos[1],
                     1,0,135,19,this.Gpanelpos[0]+12,this.Gpanelpos[1]+12,
                     9*this.Cversion[0],88,9,11,this.Gpanelpos[0]+77,this.Gpanelpos[1]+21,
                     9*this.Cversion[1],88,9,11,this.Gpanelpos[0]+89,this.Gpanelpos[1]+21,
                     66,78,27,4,this.Gpanelpos[0]+165,this.Gpanelpos[1]+98,
                     94,78,6,4,this.Gpanelpos[0]+192,this.Gpanelpos[1]+98};
  this.Gpanelsprites={0,113,211,116,this.Gpanelpos[0],this.Gpanelpos[1],
                      1,0,135,41,this.Gpanelpos[0]+12,this.Gpanelpos[1]+12,
                      9*this.Cversion[0],88,9,11,this.Gpanelpos[0]+77,this.Gpanelpos[1]+21,
                      9*this.Cversion[1],88,9,11,this.Gpanelpos[0]+89,this.Gpanelpos[1]+21};
  this.Gpanelactpos={this.Gpanelpos[0]+12,this.Gpanelpos[1]+56};
  this.Gpanelactions={0,43,65,11,  66,43,65,11,
                      0,54,65,11,  66,54,65,11,
                      0,65,65,11,  66,65,65,11};
  this.Cpanelactsel=0;
  this.Gnumpos={this.Gpanelpos[0]+20,this.Gpanelpos[1]+43};
  this.Gamtsprite={1,77,48,11,3,12,
                   0,31, 9,11,0,25};
  this.Gactsprite={99,88,9,11,
                   90,88,9,11,
                  108,88,9,11};
  this.Gsprites=banksprites;
  this.Gloadtime=(100-playerap)*.05;
  this.Cmode=0;
  this.Ckfrzsecs=.1;
  this.Con=1;
  this.Cstorehearts=playerhearts;
  timeout=.05;
}

if (timeout) {
// Account Protection
  Cdecode();
  Cencode();
// Bank Access
  if (this.Con==1) {
    playerhearts=this.Cstorehearts;
    Csetxy();
    Coldxy();
    disableweapons;
    if (this.Gloadtime>0) {
      this.Gloadtime-=.05;
      Gload();
    }
    else {
      if (this.Ckfrzsecs>0) this.Ckfrzsecs-=.05;
      Cgetkey();
      Caction();
      Gpanel();
    }
//    if (!strequals(#w,*bank card)) this.Cend=1;
    if (this.Cend==1) Cend();
    timeout=.05;
  }
  else timeout=1;
}

// Bank Access Functions
function Caction() {
  if (this.Cmode==0) {
    this.Zgpc=this.Gpanelactsel;
    this.Gpanelactsel=(this.Gpanelactsel-this.Ckeypress[0]+this.Ckeypress[2])%3;
    if (this.Gpanelactsel!=this.Zgpc) this.Ckfrzsecs=.1;
    if (this.Ckeypress[4]==1||(this.Ckeypress[6]==1&&this.Gpanelactsel==2)) {
      this.Cmode=1;
      this.Cact=this.Gpanelactsel;
      this.Ccurspos=0;
      this.Camount={0,0,0,0,0,0,0,0};
    }
    else if (this.Ckeypress[6]==1) this.Gpanelactsel=2
  }
  else if (this.Cmode==1) {
    if (this.Cact==2) this.Cend=1;
    this.Ccurspos=(this.Ccurspos-(this.Ckeypress[1])+(this.Ckeypress[3]))%11;
    if (this.Ckeypress[4]==1||(this.Ckeypress[6]==1&&this.Ccurspos==10)) {
      if (this.Ccurspos==8) Cmaxamt();
      if (this.Ccurspos<8) this.Ccurspos=9;
      else if (this.Ccurspos==9) {
        Caccept();
        Ghidegreat();
        this.Cmode==0;
      }
      if (this.Ccurspos==10) {
        Ghidegreat();
        this.Cmode==0;
      }
    }
    else if (this.Ckeypress[6]==1) this.Ccurspos=10;
    if (1 in {this.Ckeypress[0],this.Ckeypress[2]}&&this.Ccurspos<8) {
      this.Camount[this.Ccurspos]=(this.Camount[this.Ccurspos]+(this.Ckeypress[0]-this.Ckeypress[2]))%10;
      Ccheckmax();
    }
    if (1 in this.Ckeypress) this.Ckfrzsecs=.05;
    if (this.Cmode==0) this.Ckfrzsecs=.1;
  }
}

function Caccept() {
  this.Zca=0;
  for (this.Zac=0;this.Zac<arraylen(this.Camount);this.Zac++)
    this.Zca+=(this.Camount[this.Zac]*(10^(arraylen(this.Camount)-1-this.Zac)));
  if (this.Cact==1) this.Zca*=-1;
  playerrupees+=this.Zca;
  this.Znba=strtofloat(#s(bankaccounta))-this.Zca;
  this.Cbankaccount={this.Znba,this.Znba,this.Znba};
  Cencode();
  play extra.wav;
}

function Ccheckmax() {
  this.Zca=0;
  for (this.Zac=0;this.Zac<arraylen(this.Camount);this.Zac++)
    this.Zca+=(this.Camount[this.Zac]*(10^(arraylen(this.Camount)-1-this.Zac)));
  if (this.Zca>(strtofloat(#s(bankaccounta))*(this.Cact==0))+(playerrupees*(this.Cact==1)))
    Cmaxamt();
}

function Cmaxamt() {
  this.Zbal=(strtofloat(#s(bankaccounta))*(this.Cact==0))+(playerrupees*(this.Cact==1));
  for (this.Zma=0;this.Zma<arraylen(this.Camount);this.Zma++) {
    this.Camount[arraylen(this.Camount)-1-this.Zma]=
     ((this.Zbal-(this.Zbal%(10^this.Zma)))%(10^(this.Zma+1)))/(10^this.Zma);
  }
}
function Cgetkey() {
  for (this.Cckey=0;this.Cckey<11;this.Cckey++)
    this.Ckeypress[this.Cckey]=(keydown(this.Cckey)&&this.Ckfrzsecs<=0);
}
function Coldxy() {
  this.Cox=playerx;
  this.Coy=playery;
  this.Coh=playerhearts;
}
function Csetxy() {
  playerx=this.Cox;
  playery=this.Coy;
  playerhearts=this.Coh;
  playersprite=0;
  playerdir=2;
}

function Ghidegreat() {
  for (this.Zhg=(arraylen(this.Gpanelsprites)/6)+(arraylen(this.Gdigits));this.Zhg<275;this.Zhg++) hideimg this.Zhg;
}

function Gpanel() {
  this.Gspritenum=200;
  for (this.Zsp=0;this.Zsp<arraylen(this.Gpanelsprites)/6;this.Zsp++) {
    this.Gspritenum++;
    showimg this.Gspritenum, banksprites#v(this.Gsprites).png, this.Gpanelsprites[this.Zsp*6+4], this.Gpanelsprites[this.Zsp*6+5];
    changeimgvis this.Gspritenum, 4;
    changeimgpart this.Gspritenum, this.Gpanelsprites[this.Zsp*6], this.Gpanelsprites[this.Zsp*6+1],
                                   this.Gpanelsprites[this.Zsp*6+2], this.Gpanelsprites[this.Zsp*6+3];
  }
  Ggetdigits();
  for (this.Zsd=0;this.Zsd<arraylen(this.Gdigits);this.Zsd++) {
    this.Gspritenum++;
    showimg this.Gspritenum, banksprites#v(this.Gsprites).png, this.Gnumpos[0]+this.Zsd*9, this.Gnumpos[1];
    changeimgvis this.Gspritenum, 4;
    changeimgpart this.Gspritenum, this.Gdigits[this.Zsd]*9,88,9,11;
  }
  if (this.Cmode==0) {
    for (this.Zpa=0;this.Zpa<arraylen(this.Gpanelactions)/8;this.Zpa++) {
      this.Gspritenum++;
      this.Zadim=((this.Gpanelactsel==this.Zpa)*4)+(8*this.Zpa);
      showimg this.Gspritenum, banksprites#v(this.Gsprites).png, this.Gpanelactpos[0], this.Gpanelactpos[1]+(11*this.Zpa);
      changeimgvis this.Gspritenum, 4;
      changeimgpart this.Gspritenum, this.Gpanelactions[this.Zadim], this.Gpanelactions[this.Zadim+1],
                                     this.Gpanelactions[this.Zadim+2], this.Gpanelactions[this.Zadim+3];
    }
  }

  else if (this.Cact<2) {
    this.Gspritenum++;
    showimg this.Gspritenum, banksprites#v(this.Gsprites).png, this.Gpanelactpos[0], this.Gpanelactpos[1];
    changeimgvis this.Gspritenum, 4;
    changeimgpart this.Gspritenum, this.Gpanelactions[this.Cact*8], this.Gpanelactions[this.Cact*8+1],
                                   this.Gpanelactions[this.Cact*8+2], this.Gpanelactions[this.Cact*8+3];
    for (this.Zas=0;this.Zas<arraylen(this.Gamtsprite)/6;this.Zas++) {
      this.Gspritenum++;
      showimg this.Gspritenum, banksprites#v(this.Gsprites).png, this.Gpanelactpos[0]+this.Gamtsprite[this.Zas*6+4], this.Gpanelactpos[1]+this.Gamtsprite[this.Zas*6+5];
      changeimgvis this.Gspritenum, 4;
      changeimgpart this.Gspritenum, this.Gamtsprite[this.Zas*6], this.Gamtsprite[this.Zas*6+1],
                                   this.Gamtsprite[this.Zas*6+2], this.Gamtsprite[this.Zas*6+3];
    }
    for (this.Zsd=0;this.Zsd<arraylen(this.Camount);this.Zsd++) {
      this.Gspritenum++;
      showimg this.Gspritenum, banksprites#v(this.Gsprites).png, this.Gpanelactpos[0]+this.Gamtsprite[10]+9*this.Zsd+9, this.Gpanelactpos[1]+this.Gamtsprite[11];
      changeimgvis this.Gspritenum, 4;
      changeimgpart this.Gspritenum, 9*this.Camount[this.Zsd], 88+(11*(this.Ccurspos==this.Zsd)),9,11;
    }
    for (this.Zsa=0;this.Zsa<arraylen(this.Gactsprite)/4;this.Zsa++) {
      this.Gspritenum++;
      this.Zsx=this.Gpanelactpos[0]+arraylen(this.Camount)*9+this.Gp+this.Gamtsprite[10]+9*this.Zsa+11;
      this.Zsy=this.Gpanelactpos[1]+this.Gamtsprite[11];
      showimg this.Gspritenum, banksprites#v(this.Gsprites).png, this.Zsx, this.Zsy;
      changeimgvis this.Gspritenum, 4;
      changeimgpart this.Gspritenum, this.Gactsprite[4*this.Zsa], this.Gactsprite[4*this.Zsa+1]+(11*(this.Ccurspos==(arraylen(this.Camount)+this.Zsa))),
                                     this.Gactsprite[4*this.Zsa+2], this.Gactsprite[4*this.Zsa+3];
    }
  }
}

function Ggetdigits() {
  this.Zbal=strtofloat(#s(bankaccounta));
  this.Zdigits=0;
  while (this.Zbal>=10^this.Zdigits) this.Zdigits++;
  if (this.Zdigits<=0) this.Zdigits=1;
  setarray this.Gdigits, this.Zdigits;
  for (this.Zsda=0;this.Zsda<this.Zdigits;this.Zsda++)
    this.Gdigits[this.Zdigits-1-this.Zsda]=((this.Zbal-(this.Zbal%(10^this.Zsda)))%(10^(this.Zsda+1)))/(10^this.Zsda);
}

function Gload() {
  for (this.Zls=0;this.Zls<(arraylen(this.Gloadsprites)/6);this.Zls++) {
    showimg 200+this.Zls, banksprites#v(this.Gsprites).png, this.Gloadsprites[this.Zls*6+4], this.Gloadsprites[this.Zls*6+5];
    changeimgvis 200+this.Zls, 4;
    if (this.Zls<arraylen(this.Gloadsprites)/6-1)
      changeimgpart 200+this.Zls, this.Gloadsprites[this.Zls*6], this.Gloadsprites[this.Zls*6+1],
                                this.Gloadsprites[this.Zls*6+2], this.Gloadsprites[this.Zls*6+3];
    else
      changeimgpart 200+this.Zls, this.Gloadsprites[this.Zls*6], this.Gloadsprites[this.Zls*6+1],
                                this.Gloadsprites[this.Zls*6+2]-((.1-(this.Gloadtime%.15))*40), this.Gloadsprites[this.Zls*6+3];
  }
  if (this.Gloadtime<=0) {
    for (this.Zhload=0;this.Zhload<(arraylen(this.Gloadsprites)/6);this.Zhload++)
      hideimg 200+this.Zhload;
  }
}

function Cgetversion() {
  this.Zver=strtofloat(#s(bankversion));
  this.Cversion={this.Zver-(this.Zver%1),this.Zver%1};
}

// Regular Timeout Functions

function Cdecode() {
  this.Cbankaccount={strtofloat(#s(bankaccounta)),
                     strtofloat(#s(bankaccountb)),
                     strtofloat(#s(bankaccountc))};
  this.Cbankaccount[1]*=.5;
  this.Cbankaccount[2]=(this.Cbankaccount[2]*137+12);
  if (!(this.Cbankaccount[0] in {this.Cbankaccount[1],this.Cbankaccount[2]})||this.Cbankaccount[1]!=this.Cbankaccount[2]) {
    this.Zlow=this.Cbankaccount[0];
    if (this.Cbankaccount[1]<this.Zlow) this.Zlow=this.Cbankaccount[1];
    if (this.Cbankaccount[2]<this.Zlow) this.Zlow=this.Cbankaccount[2];
    for (this.Zresetnums=0;this.Zresetnums<4;this.Zresetnums++) this.Cbankaccount[this.Zresetnums]=this.Zlow;
  }
}

function Cencode() {
  setstring bankaccounta, #v(this.Cbankaccount[0]);
  setstring bankaccountb, #v(this.Cbankaccount[1]*2);
  setstring bankaccountc, #v((this.Cbankaccount[2]-12)/137);
}

// Turn off

function Cend() {
  this.Con=0;
  enableweapons;
  for (this.Zendhide=200;this.Zendhide<260;this.Zendhide++) hideimg this.Zendhide;
  this.Cend==0;
}

that script arcain is unnecessarily unecessary

why?

Because it’s accessively accessive, and bank cards are a waste of time.

You mean excessively excessive?

I think they could be useful in situation where players don’t want to risk losing their moneys to pkers when making a trip to the store, especially since Xoria is set to make you spit up the max amount of rupees/gralets when you die (I think its only natural a person who kills you should be able to take everything not only a set variable of what you had on you -_-). That and it saves a trip to the bank.

Eh, I got the impression those bank cards are from Classic… and the bank card had no purpose other than to trigger the ATM at the bank… so you still had to go to the store.

edit: yup, it IS… so ya, what’s your point? You still gotta go to the bank to use the bank card.

Probably need to get rid of the isbank==1 checks and then it will work anywhere.

My intention is not to make the bank card like that on classic… I posted that script in this thread purely for anyone who might want to look at it for an example. O.o

My intention with the bank card is EXACTLY what i described in my post above. To be used at shops as an alternative to carrying rupees. What is your point?

PS. DustyPorViva on Graal Online Forums has that exact same siggie as you. Are you him?
http://forums.graalonline.com/forums/member.php?u=3024

Nope.

Yeah Shiny=Dusty. Lols.

No, Shiny is obviously a completely different person. :confused:

Silly me, I must be a fucking idiot. ._.

Do the official Graal admins freak out about their own player base being affiliated with Reborn? Or do they not care…

They hate anything to do with this project. They block out the domain names for here. Pretty gay, the only one who really cares is Stefan.

I suspected as much considering all of the crap Stefanie has been involved with ie scare tactics and general fagotry from her. Probably not the wisest idea to use the same identifiers such as signatures. Or unless your not that person in which case your framing them.

They aren’t going to come to GraalReborn and search for anybody that goes on GraalOnline. Pointless and stupid.

well stef is probably too busy picking up french male prostitutes during his off time from making crap clients

Sorry to break off current topic but… Shiny, in your version of the bank account script you have:

} else if (strequals(#t(0),withdraw)) {
    // CHECK WITHDRAW
    if (strequals(#t(1),all)) {
      if (strtofloat(#s(client.bankaccount)) > 0) {
        setstring client.bankaccount,0;
        playerrupees += strtofloat(#s(client.bankaccount));

But wouldn’t this set your bank account to 0 and then increment playerrupees by 0?

If my bank did that when I withdrew all my cash I’d be pissed. :wink: