TinyMAZE/
TinyMAZE/config/
TinyMAZE/doc/
TinyMAZE/run/msgs/
TinyMAZE/src/
TinyMAZE/src/db/
TinyMAZE/src/ident/
TinyMAZE/src/io/
TinyMAZE/src/prog/
TinyMAZE/src/softcode/
TinyMAZE/src/util/
#include <stdio.h>
#include <ctype.h>
#include "db.h"
#include "externs.h"

void do_giveto(OBJ *player, char *arg, char *amnt)
{
  int amount;
  OBJ *who;
  char buf[4096];

  who = match_object(player, arg, TYPE_PLAYER);
  if(!who)
  {
    notify(player, no_match(arg));
    return;
  }

  amount = atoi(amnt);

  if(!amount)
  {
    notify(player, tprintf("What good would giving 0 %s do?",
      config.currency_plural));
    return;
  }
  if(amount < 0 && !controls(player, who, POW_STEAL))
  {
    notify(player, "You can only @giveto positive amounts.");
    return;
  }
  if(!payfor(player, amount))
  {
    notify(player, "You can't pay for that much!");
    return;
  }
  giveto(who, amount);
  notify(player, "Given.");
  strcpy(buf, unparse_object(who, who));
  log_misc(tprintf("%s gave %s %d %s",
    unparse_object(player, player), buf, amount,
    check_plural(amount, config.currency_name, config.currency_plural)));
}

void do_give(OBJ *player, char *recipient, char *amnt)
{
  OBJ *who, *thing;
  int amount;
  char *s;
  char buf[4096], buf2[4096];
      
  who = match_object(player, recipient, TYPE_PLAYER);
  if(!who)
  {
    notify(player, no_match(recipient));
    return;
  }
  
/* See if amount is all digits */
  s = amnt;
  if(*s == '-')
    s++;
  while(isdigit(*s))
    s++;

  if(*s)     /* Must be giving an object */
  {
    thing = match_object(player, amnt, TYPE_THING);
    if(!thing)
    {
      notify(player, "You're carrying no such item!");
      return;
    }

    if(!could_doit(player, thing, "LOCK"))
      if(!controls(player, who, POW_TELEPORT))
      {
        notify(player, perm_denied());
        return;
      }

    moveto(thing, who);
    notify(who,
      tprintf("%s gave you %s.", name(player), name(thing)));
    notify(player, "Given.");
    notify(thing, tprintf("%s gave you to %s.", name(player), name(who)));
    strcpy(buf, unparse_object(who, who));
    strcpy(buf2, unparse_object(thing, thing));
    log_misc(tprintf("%s gave %s %s",
      unparse_object(player, player), buf, buf2));
    return;
  }

  amount = atoi(amnt);

  if(!amount)
  {
    notify(player, tprintf("Why give 0 %s?", config.currency_plural));
    return;
  }
  if(amount < 0 && !controls(player, who, POW_STEAL))
  {
    notify(player, tprintf("You must specify a positive number of %s.",
      config.currency_plural));
    return;
  }
  
/* Try to do the give */
  if(!payfor(player, amount))
  {
    notify(player, tprintf("You don't have that many %s to give!",
      config.currency_plural));
    return;
  }

  if(amount < 0)
    notify(player, tprintf("You take %d %s from %s.", -(amount),
      check_plural(-(amount), config.currency_name, config.currency_plural),
      name(who)));
  else
    notify(player, tprintf("You give %d %s to %s.", amount,
      check_plural(amount, config.currency_name, config.currency_plural),
      name(who)));

  if(amount < 0)
    notify(who, tprintf("%s takes %d %s from you.", name(player), -(amount),
      check_plural(-(amount), config.currency_name, config.currency_plural)));
  else
    notify(who, tprintf("%s gives you %d %s%s.",
      name(player), amount,
      check_plural(amount, config.currency_name, config.currency_plural)));

  giveto(who, amount);

  strcpy(buf, unparse_object(who, who));
  log_misc(tprintf("%s gave %s %d %s",
    unparse_object(player, player), buf, amount,
    check_plural(amount, config.currency_name, config.currency_plural)));
}

void do_money(OBJ *player, char *arg)
{
  OBJ *who;
  int total = 0;
  char *str;
  char buf[1024];

  if(!*arg)
    who = player;
  else
  {
    who = match_object(player, arg, TYPE_PLAYER);
    if(!who)
    {
      notify(player, no_match(arg));
      return;
    }

    if(!controls(player, who, POW_EXAMINE) && !(who->flags & VISIBLE))
    {
      notify(player, perm_denied());
      return;
    }
  }

/* Calculate money */
  total = Pennies(who);
  if(inf_mon(who))
    str = "|+G|(INFINITE)";
  else
    str = "";

  notify(player, tprintf("|+B|.%s.", my_string("-", 46)));
  notify(player, tprintf("|+B|||+W|%s|+B||",
    my_center("FUNDS", 46)));

  notify(player, tprintf("|+B||%s|", my_string("-", 46)));
  strcpy(buf, comma(tprintf("%ld", Pennies(who))));
  notify(player, tprintf("|+B|| %s|+B||",
    my_ljust(tprintf("|+C|On Hand|+W|      : |+Y|%s %s",
    buf, str), 45)));
  strcpy(buf, comma(tprintf("%d", total)));
  notify(player, tprintf("|+B|| %s|+B||",
    my_ljust(tprintf("|+C|Total Funds  |+W|: |+Y|%s",
    buf), 45)));
  notify(player, tprintf("|+B|`%s'", my_string("-", 46)));
}