#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include "define.h"
#include "struct.h"
const char* burden_name [] = { "unburdened", "lightly burdened",
"encumbered", "heavily burdened",
"strained", "stressed", "over-taxed" };
/*
* CAN_CARRY FUNCTION
*/
bool can_carry( char_data* ch, obj_data *obj, bool msg )
{
// int wght = obj->Weight( );
// int num = obj->Number( );
/*
if( ch->num_ins+num > ch->can_carry_n( ) ) {
if( msg )
send( ch, "[ %s: too many items. ]\n\r", obj );
return FALSE;
}
if( ch->wght_ins+wght > ch->can_carry_w( ) ) {
if( msg )
send( ch, "[ %s: too heavy. ]\n\r", obj );
return FALSE;
}
*/
return TRUE;
}
/*
* NUMBER FUNCTIONS
*/
int Thing_Data :: Number( int i )
{
if( i == -1 )
return number;
return i;
}
int Obj_Data :: Number( int i )
{
if( pIndexData->item_type == ITEM_MONEY )
return 0;
if( i == -1 )
return number;
return i;
}
/*
* BASE WEIGHT FUNCTIONS
*/
int thing_data :: Capacity( ) { return 0; }
int thing_data :: Empty_Capacity( ) { return 0; }
int Thing_Data :: Empty_Weight( int ) { return 0; }
int Thing_Data :: Weight( int )
{
return contents.weight;
}
/*
* CHARACTER FUNCTIONS
*/
int Char_Data :: Empty_Capacity( )
{
return 3000*Strength( );
}
int Char_Data :: Capacity( )
{
return Empty_Capacity( )-contents.weight-wearing.weight/2;
}
int Char_Data :: Empty_Weight( int )
{
int default_weight [] =
{ 10, 200, 2000, 5000, 15000, 35000,
100000, 150000, 400000, 1000000 };
int i = 0;
if( species != NULL ) {
if( species->weight != 0 )
i += species->weight;
else
i += default_weight[ species->size ];
}
else {
if( shdata->race < MAX_PLYR_RACE )
i += plyr_race_table[ shdata->race ].weight;
}
return i;
}
int Char_Data :: Weight( int )
{
int i;
i = contents.weight+wearing.weight;
i += Empty_Weight( );
return i;
}
/*
* OBJECT FUNCTIONS
*/
int Obj_Data :: Empty_Capacity( )
{
return 100*pIndexData->value[0];
}
int Obj_Data :: Capacity( )
{
return Empty_Capacity( )-contents.weight;
}
int Obj_Data :: Weight( int i )
{
int sum = contents.weight;
if( pIndexData->item_type == ITEM_CONTAINER
&& is_set( &value[1], CONT_HOLDING ) )
sum /= 2;
if( pIndexData->item_type == ITEM_DRINK_CON
&& value[1] > 0 )
sum += int( 2.2*value[1] );
sum += Empty_Weight( );
sum *= ( i == -1 ? number : i );
return sum;
}
inline int metal_weight( obj_data* obj )
{
for( int i = MAT_BRONZE; i <= MAT_ADAMANTINE; i++ )
if( is_set( &obj->materials, i ) )
return obj->weight*material_table[i].weight/10;
return obj->weight;
}
int Obj_Data :: Empty_Weight( int )
{
if( ( pIndexData->item_type != ITEM_WEAPON
&& pIndexData->item_type != ITEM_ARMOR )
|| !is_set( pIndexData->extra_flags, OFLAG_RANDOM_METAL ) )
return weight;
return metal_weight( this );
}