/**************************************************************************/ // lookup.cpp - most of the lookup commands /*************************************************************************** * The Dawn of Time v1.69r (c)1997-2004 Michael Garratt * * >> A number of people have contributed to the Dawn codebase, with the * * majority of code written by Michael Garratt - www.dawnoftime.org * * >> To use this source code, you must fully comply with all the licenses * * in licenses.txt... In particular, you may not remove this copyright * * notice. * *************************************************************************** * >> Original Diku Mud copyright (c)1990, 1991 by Sebastian Hammer, * * Michael Seifert, Hans Henrik St{rfeldt, Tom Madsen, & Katja Nyboe. * * >> Merc Diku Mud improvements copyright (C) 1992, 1993 by Michael * * Chastain, Michael Quan, and Mitchell Tse. * * >> ROM 2.4 is copyright 1993-1995 Russ Taylor and has been brought to * * you by the ROM consortium: Russ Taylor(rtaylor@pacinfo.com), * * Gabrielle Taylor(gtaylor@pacinfo.com) & Brian Moore(rom@rom.efn.org) * * >> Oblivion 1.2 is copyright 1996 Wes Wagner * **************************************************************************/ #include "include.h" // dawn standard includes #include "ictime.h" /**************************************************************************/ int position_lookup (const char *name) { int pos; for (pos = 0; position_table[pos].name != NULL; pos++) { if (LOWER(name[0]) == LOWER(position_table[pos].name[0]) && !str_prefix(name,position_table[pos].name)) return pos; } return -1; } /**************************************************************************/ int sex_lookup (const char *name) { int sex; for (sex = 0; sex_table[sex].name != NULL; sex++) { if (LOWER(name[0]) == LOWER(sex_table[sex].name[0]) && !str_prefix(name,sex_table[sex].name)) return sex; } return -1; } /**************************************************************************/ int size_lookup (const char *name) { int size; for ( size = 0; size_table[size].name != NULL; size++) { if (LOWER(name[0]) == LOWER(size_table[size].name[0]) && !str_prefix( name,size_table[size].name)) return size; } return -1; } /**************************************************************************/ // returns race number - doing exact matching int race_exact_lookup(const char *name) { int race; // do an exact lookup on a race name for ( race = 0; race_table[race]; race++) { if(!str_cmp( name, race_table[race]->name)) return race; } return -1; } /**************************************************************************/ // returns race number int race_lookup(const char *name) { int race; // first attempt exact match race=race_exact_lookup(name); if(race>=0){ return race; } // now attempt a prefix match for ( race = 0; race_table[race]; race++) { if (LOWER(name[0]) == LOWER(race_table[race]->name[0]) && !str_prefix( name,race_table[race]->name)) return race; } return -1; } /**************************************************************************/ // returns race number int pcrace_lookup(const char *name) { int race; // first attempt exact match for ( race = 0; race_table[race]; race++) { if(!race_table[race]->pc_race()) continue; if (LOWER(name[0]) == LOWER(race_table[race]->name[0]) && !str_cmp( name,race_table[race]->name)) return race; } // now attempt a prefix match for ( race = 0; race_table[race]; race++) { if(!race_table[race]->pc_race()){ continue; } if(!str_prefix( name,race_table[race]->name)){ return race; } } return -1; } /**************************************************************************/ // returns class index number using an exact match int class_exact_lookup(const char *name) { int classIndex; if (IS_NULLSTR(name)){ return -1; } // first attempt exact match for ( classIndex = 0; !IS_NULLSTR(class_table[classIndex].name); classIndex++){ if(!str_cmp( name,class_table[classIndex].name)){ return classIndex; } } return -1; } /**************************************************************************/ // returns class index number int class_lookup(const char *name) { int classIndex; if (IS_NULLSTR(name)){ return -1; } // first attempt exact match classIndex=class_exact_lookup(name); if(classIndex>-1){ return classIndex; } // now attempt a prefix match for ( classIndex = 0; !IS_NULLSTR(class_table[classIndex].name); classIndex++){ if(!str_prefix( name,class_table[classIndex].name)){ return classIndex; } } return -1; } /**************************************************************************/ int liq_lookup (const char *name) { int liq; for ( liq = 0; liq_table[liq].liq_name != NULL; liq++) { if (LOWER(name[0]) == LOWER(liq_table[liq].liq_name[0]) && !str_prefix(name,liq_table[liq].liq_name)) return liq; } return -1; } /**************************************************************************/ int attack_lookup(const char *name) { int att; for ( att = 0; attack_table[att].name != NULL; att++) { if (LOWER(name[0]) == LOWER(attack_table[att].name[0]) && !str_prefix(name,attack_table[att].name)) return att; } return 0; } /**************************************************************************/ int attack_lookup_with_error(const char *name) { int att; for ( att = 0; attack_table[att].name != NULL; att++) { if(!str_prefix(name,attack_table[att].name)){ return att; } } return -1; } /**************************************************************************/ // returns a flag for wiznet int wiznet_lookup (const char *name) { int flag; for (flag = 0; wiznet_table[flag].name != NULL; flag++) { if (LOWER(name[0]) == LOWER(wiznet_table[flag].name[0]) && !str_prefix(name,wiznet_table[flag].name)) return flag; } return -1; } /**************************************************************************/ /**************************************************************************/ // returns a pointer to the area data of the area which name matches // exactly the name supplied. returns NULL if no area was found. AREA_DATA * area_lookup( char *name) { AREA_DATA *pArea; for ( pArea = area_first; pArea; pArea = pArea->next) { if (!str_cmp( name, pArea->name)) return pArea; } return NULL; } /**************************************************************************/ int sector_lookup( const char *name) { int sect; for ( sect = 0; sect < SECT_MAX; sect++) { if ( LOWER( name[0] ) == LOWER( sect_table[sect].name[0]) && !str_prefix( name, sect_table[sect].name )) return sect; } return -1; } /**************************************************************************/ int dir_lookup( char *dir ) { if ( !str_cmp( dir, "n" ) || !str_cmp( dir, "north" )) return 0; else if ( !str_cmp( dir, "e" ) || !str_cmp( dir, "east" )) return 1; else if ( !str_cmp( dir, "s" ) || !str_cmp( dir, "south" )) return 2; else if ( !str_cmp( dir, "w" ) || !str_cmp( dir, "west" )) return 3; else if ( !str_cmp( dir, "u" ) || !str_cmp( dir, "up" )) return 4; else if ( !str_cmp( dir, "d" ) || !str_cmp( dir, "down" )) return 5; else if ( !str_cmp( dir, "ne" ) || !str_cmp( dir, "northeast" )) return 6; else if ( !str_cmp( dir, "se" ) || !str_cmp( dir, "southeast" )) return 7; else if ( !str_cmp( dir, "sw" ) || !str_cmp( dir, "southwest" )) return 8; else if ( !str_cmp( dir, "nw" ) || !str_cmp( dir, "northwest" )) return 9; return -1; } /**************************************************************************/ int stat_lookup( char *stat ) { int mod; for ( mod = 0; stat_flags[mod].name != NULL; mod++ ) { if (LOWER( stat[0]) == LOWER( stat_flags[mod].name[0]) && !str_prefix( stat, stat_flags[mod].name)) return mod; } return -1; } /**************************************************************************/ continent_type *continent_lookup(const char *name) { continent_type*c; for ( c=continent_list; c; c=c->next){ if( !str_prefix( name, c->name)){ return c; } } return NULL; } /**************************************************************************/ int continent_count(continent_type *cont) { if(cont){ int count=0; continent_type*c; for ( c=continent_list; c; c=c->next){ count++; if(c==cont){ return count; } } } return 0; } /**************************************************************************/ int season_lookup( const char *name ) { int seas; for ( seas = 0; seas < WEATHER_SEASON_MAX; seas++ ) { if ( LOWER( name[0] ) == LOWER( season_table[seas].name[0] ) && !str_prefix( name, season_table[seas].name )) return seas; } return -1; } /**************************************************************************/ int time_lookup( const char *name ) { int time; for ( time = 0; time < TIME_MAX; time++ ) { if ( LOWER( name[0] ) == LOWER( timefield_table[time].name[0] ) && !str_prefix( name, timefield_table[time].name )) return time; } return -1; } /**************************************************************************/ int difficulty_lookup( const char *name ) { int mod; for ( mod = 0; mod < DIFF_MAX; mod++ ) { if ( LOWER( name[0] ) == LOWER( modifier_table[mod].name[0] ) && !str_prefix( name, modifier_table[mod].name )) return mod; } return -1; } /**************************************************************************/ int mixtype_lookup (const char *name) { int mix; for ( mix = 0; mixtype_types[mix].name != NULL; mix++ ) { if (LOWER(name[0]) == LOWER( mixtype_types[mix].name[0]) && !str_prefix( name, mixtype_types[mix].name)) return mix; } return -1; } /**************************************************************************/ /**************************************************************************/ /**************************************************************************/ /**************************************************************************/ /**************************************************************************/