/
CVS/
boards/CVS/
clans/
gmc/CVS/
help/CVS/
include/CVS/
players/
progs/CVS/
races/CVS/
system/CVS/
text/
text/CVS/
todo/
todo/CVS/
units/CVS/
procedure do_balance(ch:GCharacter;param:string);
var
   node : GListNode;
   banker, vict : GCharacter;
begin
  banker := nil;
  node := ch.room.chars.head;

  while (node <> nil) do
    begin
    vict := node.element;

    if (vict.IS_NPC) and (vict.IS_BANKER) then
      begin
      banker := vict;
      break;
      end;

    node := node.next;
    end;

  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;
    node : GListNode;
    banker,vict:GCharacter;
begin
  if (length(param)=0) then
    begin
    ch.sendBuffer('Withdraw how much?'#13#10);
    exit;
    end;

  banker := nil;
  node := ch.room.chars.head;

  while (node <> nil) do
    begin
    vict := node.element;

    if (vict.IS_NPC) and (vict.IS_BANKER) then
      begin
      banker := vict;
      break;
      end;

    node := node.next;
    end;

  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);
      inc(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;
      inc(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;
    banker,vict:GCharacter;
    node : GListNode;
begin
  if (length(param)=0) then
    begin
    ch.sendBuffer('Deposit what?'#13#10);
    exit;
    end;

  banker := nil;
  node := ch.room.chars.head;

  while (node <> nil) do
    begin
    vict := node.element;

    if (vict.IS_NPC) and (vict.IS_BANKER) then
      begin
      banker := vict;
      break;
      end;

    node := node.next;
    end;

  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;
      dec(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;
    obj : GObject;
    node : GListNode;
    keeper,vict:GCharacter;
begin
  keeper := nil;
  node := ch.room.chars.head;

  while (node <> nil) do
    begin
    vict := node.element;

    if (vict.IS_NPC) and (vict.IS_SHOPKEEPER) then
      begin
      keeper := vict;
      break;
      end;

    node := node.next;
    end;

  if (keeper=nil) then
    begin
    ch.sendBuffer('You cannot do that here.'#13#10);
    exit;
    end;

  if (keeper.objects.getSize = 0) then
    begin
    interpret(keeper, 'say I am not selling anything today, '+ch.name^+'.');
    exit;
    end;

  node := keeper.objects.head;
  i:=0;

  while (node <> nil) do
    begin
    obj := node.element;

    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);
    node := node.next;
    end;
end;

procedure do_buy(ch:GCharacter;param:string);
var obj,newobj : GObject;
    keeper,vict:GCharacter;
    node : GListNode;
    cost:integer;
begin
  keeper := nil;
  node := ch.room.chars.head;

  while (node <> nil) do
    begin
    vict := node.element;

    if (vict.IS_NPC) and (vict.IS_SHOPKEEPER) then
      begin
      keeper := vict;
      break;
      end;

    node := node.next;
    end;

  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.objects.getSize = 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 := instanceObject(obj.obj_index);

      act(AT_REPORT,'You buy $p for '+inttostr(cost)+' coins.',false,ch,newobj,nil,TO_CHAR);

      newobj.toChar(ch);
      dec(ch.gold,cost);
      end;
    end;
end;

procedure do_sell(ch:GCharacter;param:string);
var i,sell,cost:integer;
    keeper,vict:GCharacter;
    node : GListNode;
    shop : GShop;
    obj : GObject;
begin
  keeper := nil;
  node := ch.room.chars.head;

  while (node <> nil) do
    begin
    vict := node.element;

    if (vict.IS_NPC) and (vict.IS_SHOPKEEPER) then
      begin
      keeper := vict;
      break;
      end;

    node := node.next;
    end;

  if (keeper=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;

  obj.fromChar;
  obj.toChar(keeper);
  inc(ch.gold, cost);
  act(AT_REPORT,'You sold $p for ' + inttostr(cost) + ' coins.', false, ch, obj, nil, TO_CHAR);
end;