// coins.c
// The basic money object.
// Sets the property "money". You can identify coins by checking that property.
// Created by Mobydick@TMI-2, 8-24-92
#include <move.h>
#include <mudlib.h>
inherit OBJECT ;
string type ;
int number ;
/* Set_descs() is called whenever the number or type of coins is changed. */
void set_descs() {
set ("id", ({ "coin", "coins", type+" coin", type+" coins", type }) ) ;
if (number==1) set ("short", "a "+type+" coin") ;
else set ("short", type+" coins") ;
set ("mass", number) ;
switch (number) {
case 1 : {
set ("long", "A single "+type+" coin.\n") ;
break ;
}
case 2..5 : {
set ("long", "A few "+type+" coins.\n") ;
break ;
}
case 6..15 : {
set ("long", "A handful of "+type+" coins.\n") ;
break ;
}
case 16..25 : {
set ("long", "About twenty "+type+" coins.\n") ;
break ;
}
case 26..35 : {
set ("long", "About thirty "+type+" coins.\n") ;
break ;
}
case 36..65 : {
set ("long", "About fifty "+type+" coins.\n") ;
break ;
}
case 66..85 : {
set ("long", "About seventy-five "+type+" coins.\n") ;
break ;
}
case 86..150: {
set ("long", "About one hundred "+type+" coins.\n") ;
break ;
}
case 151..350 : {
set ("long", "About 250 "+type+" coins.\n") ;
break ;
}
case 351..750 : {
set ("long", "About 500 "+type+" coins.\n") ;
break ;
}
default : {
set ("long", "A very large pile of "+type+" coins.\n") ;
}
}
return ;
}
void create() {
type = "gold" ;
number = 1 ;
set_descs() ;
set ("money",1) ;
}
void set_type (string str) {
type = str ;
set_descs() ;
}
void set_number (int num) {
if (num<1) remove() ;
number = num ;
set ("mass", num) ;
set_descs() ;
}
string query_type() { return type ; }
int query_number() { return number ; }
// When coins move we need to do two checks. First, if we just moved into a
// player, put money into his wealth variable and remove this object. Second,
// if our destination has a pile of the same type of coins, increase the
// number of that pile, and remove this object. If neither of these is true,
// then move the object itself.
int move(mixed dest) {
string tmp ;
int i ;
object ob ;
if (dest->query("capacity")<number) {
return MOVE_TOO_HEAVY ;
}
if (living(dest)) {
i = dest->query("wealth/"+type) ;
dest->set("wealth/"+type,i+number) ;
dest->set("capacity",(int)dest->query("capacity")-number) ;
remove() ;
return MOVE_OK ;
}
tmp = type + " coins" ;
ob = present(tmp,dest) ;
if (!ob) {
i = ::move(dest) ;
return i ;
}
i = ob->query_number() ;
ob->set_number(i+number) ;
dest->set("capacity",(int)dest->query("capacity")-number) ;
remove() ;
return MOVE_OK ;
}