#include "ctype.h"
#include "sys/types.h"
#include "stdio.h"
#include "stdlib.h"
#include "define.h"
#include "struct.h"
const char* arg_type_name[] = { "none", "any", "string", "integer",
"character", "object", "room", "direction", "clan", "skill", "rflag",
"stat", "class", "religion", "race", "thing" };
/*
* FUNCTION TABLE
*/
#define nn NONE
#define st STRING
#define ch CHARACTER
#define ob OBJECT
#define in INTEGER
#define rm ROOM
#define sk SKILL
#define sa STAT
#define di DIRECTION
#define rf RFLAG
#define na NATION
#define cl CLASS
#define re RELIGION
#define rc RACE
#define th THING
const class cfunc_type cfunc_list [] =
{
{ "acode", &code_acode, nn, { rm, in, nn, nn } },
{ "act_area", &code_act_area, nn, { st, ch, ob, ch } },
{ "act_room", &code_act_room, nn, { st, ch, ob, ch } },
{ "act_notchar", &code_act_notchar, nn, { st, ch, ob, ch } },
{ "act_notvict", &code_act_notchar, nn, { st, ch, ob, ch } },
{ "act_tochar", &code_act_tochar, nn, { st, ch, ob, ch } },
{ "act_neither", &code_act_neither, nn, { st, ch, ob, ch } },
{ "assign_quest", &code_assign_quest, nn, { ch, in, nn, nn } },
{ "attack", &code_attack, in, { ch, ch, in, st } },
{ "attack_acid", &code_attack_acid, in, { ch, ch, in, st } },
{ "attack_cold", &code_attack_cold, in, { ch, ch, in, st } },
{ "attack_fire", &code_attack_fire, in, { ch, ch, in, st } },
{ "attack_shock", &code_attack_shock, in, { ch, ch, in, st } },
{ "attack_room", &code_attack_room, nn, { ch, in, st, nn } },
{ "attack_weapon", &code_attack_weapon, in, { ch, ch, in, st } },
{ "can_fly", &code_can_fly, in, { ch, nn, nn, nn } },
{ "cast_spell", &code_cast_spell, nn, { sk, ch, ch, nn } },
{ "char_in_room", &code_char_in_room, in, { ch, rm, nn, nn } },
{ "cflag", &code_cflag, in, { in, ch, nn, nn } },
{ "class", &code_class, cl, { ch, nn, nn, nn } },
{ "close", &code_close, nn, { rm, di, nn, nn } },
{ "coin_value", &code_coin_value, in, { ob, nn, nn, nn } },
{ "dam_message", &code_dam_message, nn, { ch, in, st, nn } },
{ "dice", &code_dice, in, { in, in, in, nn } },
{ "disarm", &code_disarm, in, { ch, in, nn, nn } },
{ "do_spell", &code_do_spell, nn, { sk, ch, ch, nn } },
{ "doing_quest", &code_doing_quest, in, { ch, in, nn, nn } },
{ "done_quest", &code_done_quest, in, { ch, in, nn, nn } },
{ "drain_exp", &code_drain_exp, nn, { ch, in, nn, nn } },
{ "drain_stat", &code_drain_stat, nn, { ch, sa, in, in } },
{ "find_room", &code_find_room, rm, { in, nn, nn, nn } },
{ "find_skill", &code_find_skill, in, { ch, sk, nn, nn } },
{ "find_stat", &code_find_stat, in, { ch, sa, nn, nn } },
{ "get_room", &code_get_room, rm, { ch, nn, nn, nn } },
{ "junk_mob", &code_junk_mob, nn, { ch, nn, nn, nn } },
{ "junk_obj", &code_junk_obj, nn, { ob, in, nn, nn } },
{ "has_obj", &code_has_obj, ob, { in, ch, nn, nn } },
{ "has_quest", &code_has_quest, in, { ch, in, nn, nn } },
{ "heal", &code_heal, nn, { ch, in, nn, nn } },
{ "inflict", &code_inflict, in, { ch, ch, in, st } },
{ "inflict_acid", &code_inflict_acid, in, { ch, ch, in, st } },
{ "inflict_cold", &code_inflict_cold, in, { ch, ch, in, st } },
{ "inflict_fire", &code_inflict_fire, in, { ch, ch, in, st } },
{ "inflict_shock", &code_inflict_shock, in, { ch, ch, in, st } },
{ "interpret", &code_interpret, nn, { ch, st, ch, nn } },
{ "is_exhausted", &code_is_exhausted, in, { ch, in, nn, nn } },
{ "is_fighting", &code_is_fighting, in, { ch, nn, nn, nn } },
{ "is_follower", &code_is_follower, in, { ch, nn, nn, nn } },
{ "is_locked", &code_is_locked, in, { rm, di, nn, nn } },
{ "is_mounted", &code_is_mounted, in, { ch, nn, nn, nn } },
{ "is_name", &code_is_name, in, { st, st, nn, nn } },
{ "is_open", &code_is_open, in, { rm, di, nn, nn } },
{ "is_player", &code_is_player, in, { ch, nn, nn, nn } },
{ "is_resting", &code_is_resting, in, { ch, nn, nn, nn } },
{ "is_searching", &code_is_searching, in, { ch, nn, nn, nn } },
{ "is_silenced", &code_is_silenced, in, { ch, nn, nn, nn } },
{ "lock", &code_lock, nn, { rm, di, nn, nn } },
{ "num_in_room", &code_num_in_room, in, { rm, nn, nn, nn } },
{ "num_mob", &code_num_mob, in, { in, rm, nn, nn } },
{ "mpcode", &code_mpcode, nn, { ch, in, nn, nn } },
{ "mload", &code_mload, ch, { in, rm, nn, nn } },
{ "mob_in_room", &code_mob_in_room, ch, { in, rm, nn, nn } },
{ "modify_mana", &code_modify_mana, in, { ch, in, nn, nn } },
{ "modify_move", &code_modify_move, in, { ch, in, nn, nn } },
{ "obj_name", &code_obj_name, st, { ob, nn, nn, nn } },
{ "obj_in_room", &code_obj_in_room, ob, { in, rm, nn, nn } },
{ "obj_to_room", &code_obj_to_room, nn, { ob, rm, nn, nn } },
{ "obj_to_char", &code_obj_to_char, nn, { ob, ch, nn, nn } },
{ "obj_value", &code_obj_value, in, { ob, in, nn, nn } },
{ "oload", &code_oload, ob, { in, nn, nn, nn } },
{ "opcode", &code_opcode, nn, { ob, in, nn, nn } },
{ "open", &code_open, nn, { rm, di, nn, nn } },
{ "plague", &code_plague, nn, { ch, nn, nn, nn } },
{ "players_area", &code_players_area, in, { rm, nn, nn, nn } },
{ "players_room", &code_players_room, in, { rm, nn, nn, nn } },
{ "poison", &code_poison, nn, { ch, nn, nn, nn } },
{ "race", &code_race, rc, { ch, nn, nn, nn } },
{ "random", &code_random, in, { in, in, nn, nn } },
{ "rand_char", &code_rand_char, ch, { rm, nn, nn, nn } },
{ "rand_player", &code_rand_player, ch, { rm, nn, nn, nn } },
{ "remove_cflag", &code_remove_cflag, nn, { in, ch, nn, nn } },
{ "remove_rflag", &code_remove_rflag, nn, { rf, rm, nn, nn } },
{ "reputation", &code_reputation, in, { ch, na, nn, nn } },
{ "rflag", &code_rflag, in, { rf, rm, nn, nn } },
{ "send_to_area", &code_send_to_area, nn, { st, rm, nn, nn } },
{ "send_to_char", &code_send_to_char, nn, { st, ch, nn, nn } },
{ "send_to_room", &code_send_to_room, nn, { st, rm, nn, nn } },
{ "set_cflag", &code_set_cflag, nn, { in, ch, nn, nn } },
{ "set_religion", &code_set_religion, nn, { ch, re, nn, nn } },
{ "set_rflag", &code_set_rflag, nn, { rf, rm, nn, nn } },
{ "show", &code_show, nn, { ch, rm, in, nn } },
{ "size", &code_size, in, { ch, nn, nn, nn } },
{ "summon", &code_summon, nn, { ch, ch, nn, nn } },
{ "tell", &code_tell, nn, { ch, ch, st, nn } },
{ "transfer", &code_transfer, nn, { ch, rm, nn, nn } },
{ "transfer_all", &code_transfer_all, nn, { rm, rm, nn, nn } },
{ "unlock", &code_unlock, nn, { rm, di, nn, nn } },
{ "update_quest", &code_update_quest, nn, { ch, in, nn, nn } },
{ "wait", &code_wait, nn, { in, nn, nn, nn } },
{ "weight", &code_weight, in, { th, nn, nn, nn } },
{ "", NULL, nn, { nn, nn, nn, nn } }
};
#undef nn
#undef st
#undef ch
#undef ob
#undef in
#undef rm
#undef sk
#undef st
#undef di
#undef rf
#undef na
#undef re
#undef th
/*
* POSITION ROUTINES
*/
void* code_is_mounted( void** argument )
{
char_data* ch = (char_data*) argument[0];
return (void*) ( ch->mount != NULL );
}
void* code_is_resting( void** argument )
{
char_data* ch = (char_data*) argument[0];
if( ch == NULL ) {
code_bug( "Is_Resting: NULL character." );
return FALSE;
}
return (void*) ( ch->position == POS_RESTING );
}
void* code_is_fighting( void** argument )
{
char_data* ch = (char_data*) argument[0];
if( ch == NULL ) {
code_bug( "Is_Fighting: NULL character." );
return (void*) FALSE;
}
return (void*) ( ch->position == POS_FIGHTING );
}
void* code_is_player( void** argument )
{
char_data* ch = (char_data*) argument[0];
if( ch == NULL ) {
code_bug( "Is_Player: NULL character." );
return (void*) FALSE;
}
return (void*) ( ch->species == NULL );
}
/*
* ROOM ROUTINES
*/
void* code_rflag( void** argument )
{
int flag = (int) argument[0];
room_data* room = (room_data*) argument[1];
if( room == NULL ) {
code_bug( "Code_rflag: NULL room" );
return (void*) FALSE;
}
return (void*) is_set( &room->room_flags, flag );
}
void* code_set_rflag( void** argument )
{
int flag = (int) argument[0];
room_data* room = (room_data*) argument[1];
if( room == NULL ) {
code_bug( "Code_rflag: NULL room" );
return NULL;
}
set_bit( &room->room_flags, flag );
return NULL;
}
void* code_remove_rflag( void** argument )
{
int flag = (int) argument[0];
room_data* room = (room_data*) argument[1];
if( room == NULL ) {
code_bug( "Code_rflag: NULL room" );
return NULL;
}
remove_bit( &room->room_flags, flag );
return NULL;
}
void* code_get_room( void** argument )
{
char_data* ch = (char_data*) argument[0];
if( ch == NULL ) {
code_bug( "Get_room: NULL character" );
return NULL;
}
return ch->in_room;
}
/*
* CHARACTER ROUTINES
*/
void* code_size( void** argument )
{
char_data* ch = (char_data*) argument[0];
if( ch == NULL ) {
code_bug( "Size: Null argument" );
return NULL;
}
return (void*) ch->Size( );
}
void* code_weight( void** argument )
{
thing_data* thing = (char_data*) argument[0];
if( thing == NULL ) {
code_bug( "Weight: Null argument" );
return NULL;
}
return (void*) thing->Weight( );
}
void* code_race( void** argument )
{
char_data* ch = (char_data*) argument[0];
if( ch == NULL ) {
code_bug( "Race: Null character." );
return NULL;
}
return (void*) ch->shdata->race;
}
void* code_class( void** argument )
{
char_data* ch = (char_data*) argument[0];
if( ch == NULL ) {
code_bug( "Class: Null character." );
return NULL;
}
if( ch->species != NULL ) {
code_bug( "Class: Non-Player character." );
return NULL;
}
return (void*) ch->pcdata->clss;
}
/*
* CFLAG ROUTINES
*/
void* code_cflag( void** argument )
{
int flag = (int) argument[0];
char_data* ch = (char_data*) argument[1];
if( ch == NULL ) {
code_bug( "Code_Cflag: NULL character." );
return (void*) FALSE;
}
if( flag < 0 || flag >= 32*MAX_CFLAG ) {
code_bug( "Code_Cflag: flag out of range." );
return (void*) FALSE;
}
if( ch->pcdata == NULL )
return (void*) FALSE;
return (void*) is_set( ch->pcdata->cflags, flag );
}
void* code_set_cflag( void** argument )
{
int flag = (int) argument[0];
char_data* ch = (char_data*) argument[1];
if( ch == NULL ) {
code_bug( "Code_Set_Cflag: NULL character." );
return NULL;
}
if( flag < 0 || flag >= 32*MAX_CFLAG ) {
code_bug( "Code_Set_Cflag: flag out of range." );
return NULL;
}
if( ch->pcdata != NULL )
set_bit( ch->pcdata->cflags, flag );
return NULL;
}
void* code_remove_cflag( void** argument )
{
int flag = (int) argument[0];
char_data* ch = (char_data*) argument[1];
if( ch == NULL ) {
code_bug( "Code_Remove_Cflag: NULL character." );
return NULL;
}
if( flag < 0 || flag >= 32*MAX_CFLAG ) {
code_bug( "Code_Remove_Cflag: flag out of range." );
return NULL;
}
if( ch->pcdata != NULL )
remove_bit( ch->pcdata->cflags, flag );
return NULL;
}
/*
* CHARACTER STATUS ROUTINES
*/
void* code_can_fly( void** argument )
{
char_data* ch = (char_data*) argument[0];
if( ch == NULL ) {
code_bug( "Can_Fly: NULL Character." );
return (void*) FALSE;
}
return (void*) ch->can_fly( );
}
void* code_is_silenced( void** argument )
{
char_data* ch = (char_data*) argument[0];
if( ch == NULL ) {
code_bug( "Is_Silenced: NULL Character." );
return (void*) FALSE;
}
return (void*) is_set( ch->affected_by, AFF_SILENCE );
}
/*
* UNCLASSIFIED
*/
void* code_interpret( void** argument )
{
char_data* ch = (char_data*) argument[0];
char* string = (char*) argument[1];
char_data* victim = (char_data*) argument[2];
char tmp [ MAX_INPUT_LENGTH ];
if( ch != NULL ) {
if( victim == NULL )
interpret( ch, string );
else {
sprintf( tmp, "%s %s", string, victim->descr->name );
interpret( ch, tmp );
}
}
return NULL;
}
void* code_send_to_char( void** argument )
{
char *string = (char*) argument[0];
char_data *ch = (char_data*) argument[1];
send( string, ch );
return NULL;
}
void* code_send_to_room( void** argument )
{
char* string = (char*) argument[0];
room_data* room = (room_data*) argument[1];
if( room != NULL )
act_room( room, string );
return NULL;
}
void* code_send_to_area( void** argument )
{
char *string = (char*) argument[0];
room_data *room = (room_data*) argument[1];
if( room != NULL )
send_to_area( string, room->area );
return NULL;
}
void* code_act_room( void** argument )
{
char* string = (char*) argument[0];
char_data* ch = (char_data*) argument[1];
// obj_data* obj = (obj_data*) argument[2];
// char_data* victim = (char_data*) argument[3];
if( ch != NULL && ch->in_room != NULL )
act_room( ch->in_room, string );
return NULL;
}
void* code_act_neither( void** argument )
{
char* string = (char*) argument[0];
char_data* ch = (char_data*) argument[1];
obj_data* obj = (obj_data*) argument[2];
char_data* victim = (char_data*) argument[3];
act_neither( string, ch, victim, obj );
return NULL;
}
void* code_act_tochar( void** argument )
{
char* string = (char*) argument[0];
char_data* ch = (char_data*) argument[1];
obj_data* obj = (obj_data*) argument[2];
char_data* victim = (char_data*) argument[3];
act( ch, string, ch, victim, obj );
return NULL;
}
void* code_act_area( void** argument )
{
char* string = (char*) argument[0];
char_data* ch = (char_data*) argument[1];
obj_data* obj = (obj_data*) argument[2];
char_data* victim = (char_data*) argument[3];
if( ch == NULL ) {
code_bug( "Act_Area: Character = null pointer." );
return NULL;
}
act_area( string, ch, victim, obj );
return NULL;
}
void* code_act_notchar( void** argument )
{
char* string = (char*) argument[0];
char_data* ch = (char_data*) argument[1];
obj_data* obj = (obj_data*) argument[2];
char_data* victim = (char_data*) argument[3];
if( ch != NULL )
act_notchar( string, ch, victim, obj );
return NULL;
}
void* code_act_notvict( void** argument )
{
// char *string = (char*) argument[0];
// char_data *ch = (char_data*) argument[1];
// obj_data *obj = (obj_data*) argument[2];
// char_data *victim = (char_data*) argument[3];
/*
act( string, ch, obj, victim, TO_NOTVICT );
act_to( string, ch, obj, victim, var_ch );
*/
return NULL;
}
void* code_junk_mob( void** argument )
{
char_data* ch = (char_data*) argument[0];
if( ch == NULL )
return NULL;
if( !IS_NPC( ch ) ) {
code_bug( "Junk_mob: character is a player??" );
return NULL;
}
ch->Extract( );
return NULL;
}
void* code_drain_stat( void** argument )
{
char_data* ch = (char_data*) argument[0];
int i = (int) argument[1];
int j = (int) argument[2];
int m = (int) argument[3];
int loc[] = { APPLY_STR, APPLY_INT, APPLY_WIS, APPLY_DEX, APPLY_CON };
affect_data affect;
if( ch == NULL || i < 0 || i > 4 || j <= 0 || m < -1 || m > 1 )
return NULL;
affect.type = AFF_NONE;
affect.location = loc[i];
affect.modifier = m;
affect.duration = j;
affect.level = 5;
affect.leech = NULL;
add_affect( ch, &affect );
return NULL;
}
void* code_find_stat( void** argument )
{
char_data* ch = (char_data*) argument[0];
int i = (int) argument[1];
if( ch == NULL )
return NULL;
if( i < 0 || i > 8 ) {
code_bug( "Find_Stat: Impossible field." );
return NULL;
}
if( ch->species != NULL ) {
int value[] = { ch->Strength( ), ch->Intelligence( ),
ch->Wisdom( ), ch->Dexterity( ), ch->Constitution( ),
ch->shdata->level, 0, 0, ch->shdata->alignment };
return (void*) value[i];
}
else {
int value[] = { ch->Strength( ), ch->Intelligence( ),
ch->Wisdom( ), ch->Dexterity( ), ch->Constitution( ),
ch->shdata->level, ch->pcdata->piety,
ch->pcdata->clss, ch->shdata->alignment };
return (void*) value[i];
}
}
void* code_random( void** argument )
{
int n1 = (int) argument[0];
int n2 = (int) argument[1];
return (void*) ( number_range( n1,n2 ) );
}
void* code_dice( void** argument )
{
int n1 = (int) argument[0];
int n2 = (int) argument[1];
int n3 = (int) argument[2];
return (void*) ( roll_dice( n1,n2 )+n3 );
}
void* code_find_skill( void** argument )
{
char_data* ch = (char_data*) argument[0];
int skill = (int) argument[1];
if( ch == NULL ) {
code_bug( "Find_Skill: NULL character." );
return NULL;
}
return (void*) ch->get_skill( skill );
}
void* code_summon( void** argument )
{
char_data* ch = (char_data*) argument[0];
char_data* victim = (char_data*) argument[1];
if( ch != NULL )
summon_help( ch, victim );
return NULL;
}
void* code_reputation( void** argument )
{
char_data* ch = (char_data*) argument[0];
// int nation = (int) argument[1];
if( ch == NULL ) {
code_bug( "Reputation: Null character." );
return NULL;
}
return (void*) 50;
}
void* code_find_room( void** argument )
{
int vnum = (int) argument[0];
room_data* room;
if( ( room = get_room_index( vnum, FALSE ) ) == NULL )
code_bug( "Find_Room: Non-existent room." );
return room;
}
void* code_cast_spell( void** argument )
{
int spell = (int) argument[0];
char_data* ch = (char_data*) argument[1];
char_data* victim = (char_data*) argument[2];
if( ch == NULL || spell < SPELL_FIRST || spell >= WEAPON_UNARMED )
return NULL;
switch( spell_table[ spell-SPELL_FIRST ].type ) {
case STYPE_SELF_ONLY :
case STYPE_PEACEFUL :
if( victim == NULL )
victim = ch;
break;
case STYPE_OFFENSIVE :
if( victim == NULL )
return NULL;
break;
default :
return NULL;
}
/*
stop_active( ch );
event = new cast_event( ch, victim );
event->vo = victim;
event->spell = *spell-SPELL_FIRST;
event->prepare = FALSE;
event->wait = spell_table[*spell-SPELL_FIRST].prepare-1;
ch->active = event;
has_reagents( ch, event );
execute_cast( event );
*/
return NULL;
}
void* code_do_spell( void** argument )
{
int spell = (int) argument[0];
char_data* ch = (char_data*) argument[1];
char_data* victim = (char_data*) argument[2];
if( ch == NULL )
return NULL;
if( victim == NULL )
victim = ch;
if( spell >= SPELL_FIRST && spell < WEAPON_UNARMED )
( spell_table[spell-SPELL_FIRST].function )( ch, victim,
NULL, 10, -1 );
return NULL;
}
void* code_num_in_room( void** argument )
{
room_data* room = (room_data*) argument[0];
int num = 0;
if( room != NULL )
for( int i = 0; i < room->contents; i++ )
num += ( character( room->contents[i] ) != NULL );
return (void*) num;
}
void* code_players_area( void** argument )
{
room_data* room = (room_data*) argument[0];
if( room == NULL ) {
code_bug( "Players_Area: NULL room." );
return NULL;
}
return (void*) room->area->nplayer;
}
void* code_players_room( void** argument )
{
room_data* room = (room_data*) argument[0];
int num = 0;
if( room != NULL )
for( int i = 0; i < room->contents; i++ )
num += ( player( room->contents[i] ) != NULL );
return (void*) num;
}
void* code_num_mob( void** argument )
{
int vnum = (int) argument[0];
room_data* room = (room_data*) argument[1];
mob_data* rch;
int num = 0;
if( room != NULL )
for( int i = 0; i < room->contents; i++ )
if( ( rch = mob( room->contents[i] ) ) != NULL
&& rch->species->vnum == vnum )
num++;
return (void*) num;
}
void* code_transfer( void** argument )
{
char_data* ch = (char_data*) argument[0];
room_data* room = (room_data*) argument[1];
if( room != NULL && room->vnum == 4 )
room = get_room_index( ROOM_PRISON );
if( room == NULL ) {
send( "A script attempts to send you to a non-existent room??\n\r", ch );
return NULL;
}
if( ch == NULL )
return NULL;
if( ch->rider != NULL )
ch = ch->rider;
ch->From( );
ch->To( room );
if( ch->mount != NULL ) {
ch->mount->From( );
ch->mount->To( room );
}
send( "\n\r", ch );
do_look( ch, "" );
return NULL;
}
void* code_transfer_all( void** argument )
{
room_data* from = (room_data*) argument[0];
room_data* to = (room_data*) argument[1];
char_data* rch;
thing_array list;
if( to == NULL )
return NULL;
copy( list, from->contents );
for( int i = 0; i < list; i++ )
if( ( rch = character( list[i] ) ) != NULL ) {
rch->From( );
rch->To( to );
}
for( int i = 0; i < list; i++ )
if( ( rch = character( list[i] ) ) != NULL ) {
send( "\n\r", rch );
show_room( rch, to, FALSE, FALSE );
}
return NULL;
}
void* code_mload( void** argument )
{
int vnum = (int) argument[0];
room_data* room = (room_data*) argument[1];
mob_data* mob;
species_data* species;
if( room == NULL || ( species = get_species( vnum ) ) == NULL ) {
code_bug( "Mload: non-existent species or null room." );
return NULL;
}
mob = create_mobile( species );
mreset_mob( mob );
mob->To( room );
return mob;
}
void* code_rand_char( void** argument )
{
room_data* room = (room_data*) argument[0];
char_data* rch;
if( room == NULL )
return NULL;
rch = random_pers( room );
return rch;
}
void* code_rand_player( void** argument )
{
room_data* room = (room_data*) argument[0];
char_data* rch;
if( room == NULL )
return NULL;
rch = rand_player( room );
return rch;
}
void* code_obj_in_room( void** argument )
{
int vnum = (int) argument[0];
room_data* room = (room_data*) argument[1];
if( room == NULL ) {
code_bug( "Obj_in_room: NULL room." );
return NULL;
}
return find_vnum( room->contents, vnum );
}
void* code_mob_in_room( void** argument )
{
int vnum = (int) argument[0];
room_data* room = (room_data*) argument[1];
char_data* rch;
if( room == NULL ) {
code_bug( "Mob_in_Room: Null Room??" );
return NULL;
}
for( int i = 0; i < room->contents; i++ )
if( ( rch = mob( room->contents[i] ) ) != NULL
&& rch->species->vnum == vnum )
return rch;
return NULL;
}
void* code_has_obj( void** argument )
{
int vnum = (int) argument[0];
char_data* ch = (char_data*) argument[1];
if( ch == NULL ) {
code_bug( "Has_Obj: NULL character." );
return NULL;
}
return find_vnum( ch->contents, vnum );
}
void* code_obj_to_room( void** argument )
{
obj_data* obj = (obj_data*) argument[0];
room_data* room = (room_data*) argument[1];
if( obj == NULL || room == NULL )
return NULL;
obj->To( room );
return NULL;
}
void* code_obj_to_char( void** argument )
{
obj_data* obj = (obj_data*) argument[0];
char_data* ch = (char_data*) argument[1];
if( obj == NULL || ch == NULL )
return NULL;
obj->To( ch );
return obj;
}
void* code_coin_value( void** argument )
{
obj_data* obj = (obj_data*) argument[0];
int i;
if( obj == NULL || obj->pIndexData->item_type != ITEM_MONEY )
return NULL;
for( i = 0; i < MAX_COIN; i++ )
if( obj->pIndexData->vnum == coin_vnum[i] )
return (void*) ( coin_value[i]*obj->number );
return NULL;;
}
void* code_plague( void** argument )
{
char_data* ch = (char_data*) argument[0];
affect_data affect;
if( ch == NULL || ch->save_vs_poison( 5 ) )
return NULL;
if( var_mob != NULL && var_mob->species != NULL
&& !is_set( ch->affected_by, AFF_PLAGUE ) )
var_mob->species->special += 20;
affect.type = AFF_PLAGUE;
affect.duration = 11;
affect.level = 0;
affect.leech = NULL;
add_affect( ch, &affect );
return NULL;
}
void* code_poison( void** argument )
{
char_data* ch = (char_data*) argument[0];
affect_data affect;
if( ch == NULL || ch->save_vs_poison( 5 ) )
return NULL;
if( var_mob != NULL && var_mob->species != NULL
&& !is_set( ch->affected_by, AFF_POISON ) )
var_mob->species->special += 10;
affect.type = AFF_POISON;
affect.duration = 10;
affect.level = 8;
affect.leech = NULL;
add_affect( ch, &affect );
return NULL;
}
void* code_heal( void** argument )
{
char_data* ch = (char_data*) argument[0];
int i = (int) argument[1];
if( ch != NULL ) {
ch->hit += i;
ch->hit = min( ch->hit, ch->max_hit );
}
return NULL;
}
void* code_modify_mana( void** argument )
{
char_data* ch = (char_data*) argument[0];
int i = (int) argument[1];
if( ch == NULL || ch->mana+i < 0 )
return (void*) FALSE;
ch->mana += i;
ch->mana = min( ch->mana, ch->max_mana );
return (void*) TRUE;
}
void* code_drain_exp( void** argument )
{
char_data *ch = (char_data*) argument[0];
int i = (int) argument[1];
if( ch != NULL && ch->species == NULL )
add_exp( ch, -i, "You lose %d exp!!\n\r" );
return NULL;
}
/*
* FUNCTION CALLS
*/
void* code_acode( void** argument )
{
room_data *room = (room_data*) argument[0];
int i = (int) argument[1];
action_data* action;
int j = 1;
if( room == NULL ) {
code_bug( "Code_acode: NULL room." );
return NULL;
}
for( action = room->action; action != NULL; action = action->next )
if( j++ == i ) {
push( );
execute( action );
pop( );
break;
}
if( action == NULL )
code_bug( "Code_acode: NULL action." );
return NULL;
}
void* code_mpcode( void** argument )
{
char_data* mob = (char_data*) argument[0];
int i = (int) argument[1];
mprog_data* mprog;
int j = 1;
if( mob == NULL || mob->species == NULL ) {
code_bug( "Code_mpcode: NULL mob or mob is a player." );
return NULL;
}
for( mprog = mob->species->mprog; mprog != NULL; mprog = mprog->next )
if( j++ == i ) {
push( );
execute( mprog );
pop( );
break;
}
if( mprog == NULL )
code_bug( "Code_mpcode: NULL mprog." );
return NULL;
}
void* code_opcode( void** argument )
{
obj_data *obj = (obj_data*) argument[0];
int i = (int) argument[1];
oprog_data* oprog;
int j = 1;
if( obj == NULL ) {
code_bug( "Opcode: NULL obj." );
return NULL;
}
for( oprog = obj->pIndexData->oprog; oprog != NULL; oprog = oprog->next )
if( j++ == i ) {
push( );
execute( oprog );
pop( );
break;
}
if( oprog == NULL )
code_bug( "Opcode: NULL oprog." );
return NULL;
}
void* code_wait( void** argument )
{
int i = (int) argument[0];
queue_data* queue = new queue_data;
end_prog = TRUE;
queue_prog = TRUE;
queue->time = i;
queue->room = var_room;
queue->mob = var_mob;
queue->ch = var_ch;
queue->obj = var_obj;
queue->i = var_i;
queue->arg = curr_arg;
queue->next = queue_list;
queue_list = queue;
return NULL;
}
void* code_is_searching( void** argument )
{
char_data* ch = (char_data*) argument[0];
return (void*) ( ch != NULL && ch->pcdata != NULL
&& is_set( ch->pcdata->pfile->flags, PLR_SEARCHING ) );
}
void* code_is_follower( void** argument )
{
char_data* ch = (char_data*) argument[0];
return (void*) ( ch == NULL || is_set( &ch->status, STAT_FOLLOWER ) );
}
void* code_char_in_room( void** argument )
{
char_data* ch = (char_data*) argument[0];
room_data* room = (room_data*) argument[1];
return (void*) ( ch != NULL && ch->in_room == room );
}
void* code_is_name( void** argument )
{
char* str = (char*) argument[0];
char* namelist = (char*) argument[1];
if( str == NULL || namelist == NULL )
return (void*) FALSE;
return (void*) is_name( str, namelist );
}
void* code_set_religion( void** argument )
{
char_data* ch = (char_data*) argument[0];
int i = (int) argument[1];
if( ch == NULL || ch->pcdata == NULL )
return NULL;
if( i < 0 || i >= MAX_RELIGION ) {
code_bug( "Code_set_religion: religion value out of range." );
return NULL;
}
ch->pcdata->religion = i;
return NULL;
}
void* code_tell( void** argument )
{
char_data* ch = (char_data*) argument[0];
char_data* victim = (char_data*) argument[1];
char* string = (char*) argument[2];
char tmp [ 3*MAX_STRING_LENGTH ];
if( victim == NULL || ch == NULL || victim->pcdata == NULL )
return NULL;
act_print( tmp, string, victim, ch, NULL, NULL, NULL, NULL, victim );
process_tell( ch, victim, tmp );
return NULL;
}
void* code_obj_name( void** argument )
{
obj_data* obj = (obj_data*) argument[0];
if( obj == NULL )
return NULL;
return obj->singular;
}
void* code_disarm( void** argument )
{
char_data* ch = (char_data*) argument[0];
int j = (int) argument[1];
if( ch == NULL ) {
code_bug( "Disarm: NULL character or level." );
return NULL;
}
return (void*) ( ch->check_skill( SKILL_UNTRAP )
&& number_range( 0, 20 ) > j );
}
/*
* MOVEMENT ROUTINES
*/
void* code_modify_move( void** argument )
{
char_data* ch = (char_data*) argument[0];
int i = (int) argument[1];
if( ch == NULL || ch->move+i < 0 )
return (void*) FALSE;
ch->move += i;
ch->move = min( ch->move, ch->max_move );
return (void*) TRUE;
}
void* code_is_exhausted( void** argument )
{
char_data* ch = (char_data*) argument[0];
int i = (int) argument[1];
if( ch == NULL )
return (void*) TRUE;
if( ch->move-i < 0 ) {
send( ch, "You are too exhausted.\n\r" );
return (void*) TRUE;
}
ch->move -= i;
return (void*) FALSE;
}