// $Id: cmd_shops.inc,v 1.1 2003/12/12 13:19:54 druid Exp $ procedure do_balance(ch:GCharacter;param:string); var iterator : GIterator; banker, vict : GCharacter; begin banker := nil; iterator := ch.room.chars.iterator(); while (iterator.hasNext()) do begin vict := GCharacter(iterator.next()); if (vict.IS_NPC) and (vict.IS_BANKER) then begin banker := vict; break; end; end; iterator.Free(); if (banker = nil) then ch.sendBuffer('If only there was a banker in sight!'#13#10) else ch.sendBuffer('You currently have '+inttostr(GPlayer(ch).bankgold)+ ' coins stored at a bank.'#13#10); end; procedure do_withdraw(ch:GCharacter;param:string); var s:integer; iterator : GIterator; banker, vict : GCharacter; begin if (length(param)=0) then begin ch.sendBuffer('Withdraw how much?'#13#10); exit; end; banker := nil; iterator := ch.room.chars.iterator(); while (iterator.hasNext()) do begin vict := GCharacter(iterator.next()); if (vict.IS_NPC) and (vict.IS_BANKER) then begin banker := vict; break; end; end; iterator.Free(); if (banker = nil) then ch.sendBuffer('If only there was a banker in sight!'#13#10) else begin if (param[1] in ['0'..'9']) then begin try s := strtoint(param); except ch.sendBuffer('You must type a number.'#13#10); exit; end; if (s > GPlayer(ch).bankgold) then begin ch.sendBuffer('You don''t have that much money!'#13#10); exit; end; dec(GPlayer(ch).bankgold, s); ch.gold := ch.gold + s; ch.sendBuffer('You get ' + inttostr(s) + ' coins from your account.'#13#10); end else if (param = 'all') then begin s := GPlayer(ch).bankgold; if (s = 0) then begin ch.sendBuffer('You don''t have anything in your account!'#13#10); exit; end; GPlayer(ch).bankgold := 0; ch.gold := ch.gold + s; ch.sendBuffer('You get ' + inttostr(s) + ' coins from your account.'#13#10); end else ch.sendBuffer('Withdraw what?'#13#10); end; end; procedure do_deposit(ch:GCharacter;param:string); var s:integer; iterator : GIterator; banker, vict : GCharacter; begin if (length(param) = 0) then begin ch.sendBuffer('Deposit what?'#13#10); exit; end; banker := nil; iterator := ch.room.chars.iterator(); while (iterator.hasNext()) do begin vict := GCharacter(iterator.next()); if (vict.IS_NPC) and (vict.IS_BANKER) then begin banker := vict; break; end; end; iterator.Free(); if (banker = nil) then ch.sendBuffer('If only there was a banker in sight!'#13#10) else begin if (param[1] in ['0'..'9']) then begin try s := strtoint(param); except ch.sendBuffer('You must type a number.'#13#10); exit; end; if (s = 0) then begin ch.sendBuffer('The bank doesn''t accept 0 coins!'#13#10); exit; end; if (ch.gold = 0) or (ch.gold < s) then begin ch.sendBuffer('You are not carrying any money!'#13#10); exit; end; ch.gold := ch.gold - s; inc(GPlayer(ch).bankgold, s); ch.sendBuffer('You store ' + inttostr(s) + ' coins at the bank.'#13#10); end else if (param = 'all') then begin if (ch.gold = 0) then begin ch.sendBuffer('You are not carrying any money!'#13#10); exit; end; inc(GPlayer(ch).bankgold, ch.gold); ch.sendBuffer('You store ' + inttostr(ch.gold) + ' coins at the bank.'#13#10); ch.gold:=0; end else ch.sendBuffer('Deposit what?'#13#10); end; end; function getCost(keeper,ch:GCharacter; obj : GObject):integer; begin Result := (obj.cost*(100+ch.level)) div 500; end; procedure do_list(ch:GCharacter;param:string); var i:integer; iterator : GIterator; obj : GObject; keeper,vict:GCharacter; begin keeper := nil; iterator := ch.room.chars.iterator(); while (iterator.hasNext()) do begin vict := GCharacter(iterator.next()); if (vict.IS_NPC) and (vict.IS_SHOPKEEPER) then begin keeper := vict; break; end; end; iterator.Free(); if (keeper = nil) then begin ch.sendBuffer('You cannot do that here.'#13#10); exit; end; if (keeper.inventory.size() = 0) then begin interpret(keeper, 'say I am not selling anything today, '+ch.name+'.'); exit; end; iterator := keeper.inventory.iterator(); i:=0; while (iterator.hasNext()) do begin obj := GObject(iterator.next()); if (obj.item_type <> ITEM_MONEY) then act(AT_REPORT,'$6[$7'+pad_integer(i,2)+'$6]$7 $p, for $6'+inttostr(getCost(keeper,ch,obj))+'$7 coins',false,ch,obj,nil,TO_CHAR); inc(i); end; iterator.Free(); end; procedure do_buy(ch:GCharacter;param:string); var obj,newobj : GObject; iterator : GIterator; keeper,vict:GCharacter; cost:integer; begin keeper := nil; iterator := ch.room.chars.iterator(); while (iterator.hasNext()) do begin vict := GCharacter(iterator.next()); if (vict.IS_NPC) and (vict.IS_SHOPKEEPER) then begin keeper := vict; break; end; end; iterator.Free(); if (keeper = nil) then begin ch.sendBuffer('You cannot do that here.'#13#10); exit; end; if (length(param)=0) then begin ch.sendBuffer('Buy what?'#13#10); exit; end; if (keeper.inventory.size() = 0) then begin interpret(keeper, 'say I am not selling anything today, '+ch.name+'.'); exit; end; obj := keeper.findInventory(param); if obj=nil then interpret(keeper,'say I do not sell that object.') else begin cost := getCost(keeper,ch,obj); if (cost > ch.gold) then ch.sendBuffer('You cannot afford that.'#13#10) else begin newobj := obj.clone(); act(AT_REPORT,'You buy $p for '+inttostr(cost)+' coins.',false,ch,newobj,nil,TO_CHAR); newobj.toChar(ch); ch.gold := ch.gold - cost; end; end; end; procedure do_sell(ch : GCharacter; param : string); var i,sell,cost:integer; keeper,vict:GCharacter; iterator : GIterator; shop : GShop; obj : GObject; begin keeper := nil; iterator := ch.room.chars.iterator(); while (iterator.hasNext()) do begin vict := GCharacter(iterator.next()); if (vict.IS_NPC) and (vict.IS_SHOPKEEPER) then begin keeper := vict; break; end; end; iterator.Free(); if (keeper = nil) or (GNPC(keeper).npc_index.shop = nil) then begin ch.sendBuffer('You cannot do that here.'#13#10); exit; end; if (length(param)=0) then begin ch.sendBuffer('Sell what?'#13#10); exit; end; shop := GNPC(keeper).npc_index.shop; if (time_info.hour < shop.open_hour) or (time_info.hour > shop.close_hour) then begin interpret(keeper,'say I am closed!'); exit; end; obj := ch.findInventory(param); if (obj=nil) then begin interpret(keeper,'say You are not carrying that object!'); exit; end; sell:=0; for i:=1 to 5 do if (shop.item_buy[i]=obj.item_type) then sell:=i; cost := getCost(ch, keeper, obj); if (sell = 0) or (cost <= 0) then begin act(AT_REPORT,'$N looks at $p and shakes $S head.',false,ch,obj,keeper,TO_CHAR); exit; end; if (obj.count > 1) then obj.seperate(); obj.fromChar(); obj.toChar(keeper); ch.gold := ch.gold + cost; act(AT_REPORT,'You sold $p for ' + inttostr(cost) + ' coins.', false, ch, obj, nil, TO_CHAR); end;