/*--------------------------------------------------------------------------* * ** WolfPaw 3.0 ** * *--------------------------------------------------------------------------* * WolfPaw 3.0 (c) 1997 - 1999 by Dale Corse * *--------------------------------------------------------------------------* * The WolfPaw Coding Team is headed by: Greywolf * * With the Assitance from: Callinon, Dhamon, Sentra, Wyverns, Altrag * * Scryn, Thoric, Justice, Tricops and Brogar. * *--------------------------------------------------------------------------* * Based on SMAUG 1.2a. Copyright 1994 - 1996 by Derek Snider * * SMAUG Coding Team: Thoric, Altrag, Blodkai, Narn, Haus, Scryn, Rennard, * * Swordbearer, Gorog, Grishnakh and Tricops. * *--------------------------------------------------------------------------* * Merc 2.1 Diku MUD Improvments (C) 1992 - 1993 by Michael Chastain, * * Michael Quan, and Michael Tse. * * Original Diku MUD (C) 1990 - 1991 by Sebastian Hammer, Michael Seifert, * * Hans Hendrik Strfeldt, Tom Madsen, and Katja Nyboe. * *--------------------------------------------------------------------------* * Object Handling Module 2 * *--------------------------------------------------------------------------*/ #include <sys/types.h> #include <stdio.h> #include <string.h> #include <time.h> #include <sys/stat.h> #include "mud.h" bool anti_class_check( CHAR_DATA *ch, OBJ_DATA *obj ); /* * Checks to see if the person has the right class to use the item --GW * Returns: * TRUE is they may use it * FALSE if they may not */ bool anti_class_check( CHAR_DATA *ch, OBJ_DATA *obj ) { bool mage=FALSE; bool cleric=FALSE; bool warrior=FALSE; bool thief=FALSE; bool vampire=FALSE; bool druid=FALSE; bool ranger=FALSE; bool augurer=FALSE; bool kinju=FALSE; bool paladin=FALSE; bool assassin=FALSE; bool psi=FALSE; bool werewolf=FALSE; bool avatar=FALSE; bool dragon=FALSE; bool bishop=FALSE; bool archmage=FALSE; bool blademaster=FALSE; bool alchemist=FALSE; bool prophet=FALSE; bool crusader=FALSE; bool samurai=FALSE; bool hunter=FALSE; bool adept=FALSE; bool ninja=FALSE; bool jackel=FALSE; bool wraith=FALSE; bool mystic=FALSE; /* mobs can wear all ! */ if ( IS_NPC(ch) ) return TRUE; /* Gods can wear all ! */ if ( IS_IMMORTAL(ch) ) return TRUE; /* Figure out what bits are set on it */ /* So its cludgy and slow .. sue me */ if ( IS_SET( obj->extra_flags, ITEM_MAGE_ONLY ) ) mage=TRUE; if ( IS_SET( obj->extra_flags, ITEM_THIEF_ONLY ) ) thief=TRUE; if ( IS_SET( obj->extra_flags, ITEM_WARRIOR_ONLY ) ) warrior=TRUE; if ( IS_SET( obj->extra_flags, ITEM_CLERIC_ONLY ) ) cleric=TRUE; if ( IS_SET( obj->extra_flags, ITEM_VAMPIRE_ONLY ) ) vampire=TRUE; if ( IS_SET( obj->extra_flags, ITEM_DRUID_ONLY ) ) druid=TRUE; if ( IS_SET( obj->second_flags, ITEM2_RANGER_ONLY ) ) ranger=TRUE; if ( IS_SET( obj->second_flags, ITEM2_AUGURER_ONLY ) ) augurer=TRUE; if ( IS_SET( obj->second_flags, ITEM2_KINJU_ONLY ) ) kinju=TRUE; if ( IS_SET( obj->second_flags, ITEM2_PALADIN_ONLY ) ) paladin=TRUE; if ( IS_SET( obj->second_flags, ITEM2_ASSASSIN_ONLY ) ) assassin=TRUE; if ( IS_SET( obj->second_flags, ITEM2_PSI_ONLY ) ) psi=TRUE; if ( IS_SET( obj->second_flags, ITEM2_WEREWOLF_ONLY ) ) werewolf=TRUE; if ( IS_SET( obj->second_flags, ITEM2_AVATAR_ONLY ) ) avatar=TRUE; if ( IS_SET( obj->second_flags, ITEM2_DRAGON_ONLY ) ) dragon=TRUE; if ( IS_SET( obj->second_flags, ITEM2_BISHOP_ONLY ) ) bishop=TRUE; if ( IS_SET( obj->second_flags, ITEM2_ARCHMAGE_ONLY ) ) archmage=TRUE; if ( IS_SET( obj->second_flags, ITEM2_BLADEMASTER_ONLY ) ) blademaster=TRUE; if ( IS_SET( obj->second_flags, ITEM2_ALCHEMIST_ONLY ) ) alchemist=TRUE; if ( IS_SET( obj->second_flags, ITEM2_PROPHET_ONLY ) ) prophet=TRUE; if ( IS_SET( obj->second_flags, ITEM2_CRUSADER_ONLY ) ) crusader=TRUE; if ( IS_SET( obj->second_flags, ITEM2_SAMURAI_ONLY ) ) samurai=TRUE; if ( IS_SET( obj->second_flags, ITEM2_WRAITH_ONLY ) ) wraith=TRUE; if ( IS_SET( obj->second_flags, ITEM2_HUNTER_ONLY ) ) hunter=TRUE; if ( IS_SET( obj->second_flags, ITEM2_ADEPT_ONLY ) ) adept=TRUE; if ( IS_SET( obj->second_flags, ITEM2_NINJA_ONLY ) ) ninja=TRUE; if ( IS_SET( obj->second_flags, ITEM2_JACKEL_ONLY ) ) jackel=TRUE; if ( IS_SET( obj->second_flags, ITEM2_MYSTIC_ONLY ) ) mystic=TRUE; /* 1st Classes */ switch( ch->class ) { case CLASS_MAGE: if ( mage ) return TRUE; break; case CLASS_WARRIOR: if ( warrior ) return TRUE; break; case CLASS_CLERIC: if ( cleric ) return TRUE; break; case CLASS_THIEF: if ( thief ) return TRUE; break; case CLASS_VAMPIRE: if ( vampire ) return TRUE; break; case CLASS_DRUID: if ( druid ) return TRUE; break; case CLASS_RANGER: if ( ranger ) return TRUE; break; case CLASS_AUGURER: if ( augurer ) return TRUE; break; case CLASS_KINJU: if ( kinju ) return TRUE; break; case CLASS_PALADIN: if ( paladin ) return TRUE; break; case CLASS_ASSASSIN: if ( assassin ) return TRUE; break; case CLASS_PSIONICIST: if ( psi ) return TRUE; break; case CLASS_WEREWOLF: if ( werewolf ) return TRUE; break; } /* Second Classes */ switch( ch->class2 ) { case CLASS_MAGE: if ( mage ) return TRUE; break; case CLASS_WARRIOR: if ( warrior ) return TRUE; break; case CLASS_CLERIC: if ( cleric ) return TRUE; break; case CLASS_THIEF: if ( thief ) return TRUE; break; case CLASS_VAMPIRE: if ( vampire ) return TRUE; break; case CLASS_DRUID: if ( druid ) return TRUE; break; case CLASS_RANGER: if ( ranger ) return TRUE; break; case CLASS_AUGURER: if ( augurer ) return TRUE; break; case CLASS_KINJU: if ( kinju ) return TRUE; break; case CLASS_PALADIN: if ( paladin ) return TRUE; break; case CLASS_ASSASSIN: if ( assassin ) return TRUE; break; case CLASS_PSIONICIST: if ( psi ) return TRUE; break; case CLASS_WEREWOLF: if ( werewolf ) return TRUE; break; } /* Advanced Classes */ switch( ch->advclass ) { case CLASS_AVATAR: if ( avatar ) return TRUE; break; case CLASS_DRAGON: if ( dragon ) return TRUE; break; } /* Dual Advanced Classes */ switch( ch->advclass2 ) { case CLASS_BISHOP: if ( bishop ) return TRUE; break; case CLASS_ARCHMAGE: if ( archmage ) return TRUE; break; case CLASS_BERSERKER: if ( blademaster ) return TRUE; break; case CLASS_ALCHEMIST: if ( alchemist ) return TRUE; break; case CLASS_PROPHET: if ( prophet ) return TRUE; break; case CLASS_CRUSADER: if ( crusader ) return TRUE; break; case CLASS_SAMURAI: if ( samurai ) return TRUE; break; case CLASS_WRAITH: if ( wraith ) return TRUE; break; case CLASS_HUNTER: if ( hunter ) return TRUE; break; case CLASS_ADEPT: if ( adept ) return TRUE; break; case CLASS_NINJA: if ( ninja ) return TRUE; break; case CLASS_JACKEL: if ( jackel ) return TRUE; break; case CLASS_MYSTIC: if ( mystic ) return TRUE; break; } /* Ok So it has NONE of these bits .. let it pass --GW */ if ( !mage && !thief && !warrior && !cleric && !vampire && !druid && !ranger && !augurer && !kinju && !paladin && !assassin && !psi && !werewolf && !avatar && !dragon && !bishop && !archmage && !blademaster && !alchemist && !prophet && !crusader && !samurai && !wraith && !hunter && !adept && !ninja && !jackel && !mystic ) return TRUE; /* Guess your screwed.. --GW */ return FALSE; } /* * Figure out if the char has life protection on --GW * TRUE if they do * FALSE if not */ bool get_life_protection_char( CHAR_DATA *ch ) { OBJ_DATA *obj; ROOM_INDEX_DATA *startroom; char buf[MSL]; startroom = get_room_index( ch->pcdata->start_room, 1 ); for( obj=ch->last_carrying; obj; obj=obj->prev_content ) { if ( obj->item_type == ITEM_LIFE_PROTECTION ) { obj_from_char(obj); extract_obj(obj); send_to_char("Your Life Protection Crumbles to Dust..\n\r",ch); send_to_char("Your Life has been Spared!\n\r",ch); sprintf(buf,"%s had a LIFE_PROTECTION Object, voiding Death", capitalize(ch->name)); log_string(buf); stop_fighting(ch,TRUE); char_from_room(ch); char_to_room(ch,startroom); ch->hit = ch->max_hit; ch->mana = ch->max_mana; ch->move = ch->max_move; save_char_obj(ch); return TRUE; } } return FALSE; }