// MorgenGrauen MUDlib
//
// container/moneyhandler.c -- money handler for container
//
// $Id: moneyhandler.c 6738 2008-02-19 18:46:14Z Humni $
#pragma strong_types
#pragma save_types
#pragma range_check
#pragma no_clone

#define NEED_PROTOTYPES
#include <thing/properties.h>
#undef NEED_PROTOTYPES

#include <properties.h>
#include <moving.h>
#include <money.h>

public int AddMoney( int amount )
{
  object ob;
  int ret;

  if ( !amount )
    return 1;
    
  ob = clone_object( GELD );
  ob->SetProp( P_AMOUNT, amount );

  ret=ob->move( this_object(), M_PUT|M_MOVE_ALL );
  // Bei fehlerhaftem move ggf. wieder zerstoeren.
  if ((ret != MOVE_OK)
      && ob)
  {
    ob->remove(1);
  }
  return ret;
}

public int QueryMoney()
{
  object money;
  int geld;

  if ( money = present_clone(GELD, this_object()) )
    geld = money->QueryProp(P_AMOUNT);

  if ( money = present(GELDBOERSE_MIT_GELD, this_object()) )
    geld += money->QueryProp(P_AMOUNT);

  return geld;
}
