#include <sys/types.h> #include <stdio.h> #include <stdlib.h> #include "define.h" #include "struct.h" void do_brandish( char_data *ch, char* ) { send( "Disabled\n\r", ch ); return; } void do_zap( char_data* ch, char* argument ) { char arg [ MAX_STRING_LENGTH ]; char_data* victim; obj_data* wand; cast_data* cast; obj_data* obj; room_data* room; int level; int duration; int spell; /* argument = one_argument( argument, arg ); if( ( wand = get_obj_inv( ch, arg ) ) == NULL && ( wand = get_obj_wear( ch, arg ) ) == NULL ) { send( ch, "You do not have that wand.\n\r" ); return; } if( wand->wear_loc == -1 ) { send( ch, "You need to be holding an item to zap it.\n\r" ); return; } if( wand->pIndexData->item_type != ITEM_WAND ) { send( ch, "You can only zap wands.\n\r" ); return; } if( ( spell = wand->pIndexData->value[0] ) < 0 || spell >= MAX_SPELL ) { send( ch, "That wand contains a non-existent spell.\n\r" ); bug( "Do_Zap: wand value out of range" ); return; } cast = new cast_data; cast->spell = spell; if( !get_target( ch, cast, argument ) ) { delete cast; return; } victim = cast->victim; obj = cast->obj; room = cast->room; delete cast; if( wand->value[3] <= 0 ) { send( ch, "You zap %s, but nothing happens.\n\r", wand ); send_seen( ch, "%s zaps %s, but nothing happens.\n\r", ch, wand ); return; } if( spell_table[ spell ].type == STYPE_OFFENSIVE ) { check_killer( ch, victim ); start_fight( victim, ch ); } wand->value[3]--; if( victim == NULL ) { send( ch, "You zaps %s.\n\r", wand ); send_seen( ch, "%s zaps %s.\n\r", ch, wand ); } else if( victim != ch ) { send( ch, "You zap %s at %s.\n\r", wand, victim ); send_seen( ch, "%s zaps %s at %s.\n\r", ch, wand, victim ); if( ch->Seen( victim ) ) send( victim, "%s zaps %s at you!\n\r", ch, wand ); } else { send( ch, "You zap %s at yourself.\n\r", wand ); send_seen( ch, "%s zaps %s at %sself.", ch, wand, ch->Him_Her( ) ); } remove_bit( &ch->status, STAT_HIDING ); remove_bit( ch->affected_by, AFF_HIDE ); remove_bit( &ch->status, STAT_CAMOUFLAGED ); remove_bit( ch->affected_by, AFF_CAMOUFLAGE ); remove_bit( ch->affected_by, AFF_INVISIBLE ); strip_affect( ch, AFF_INVISIBLE ); set_delay( ch, 20 ); level = wand->value[1]; duration = wand->value[2]; ( *spell_table[ spell ].function )( ch, victim, room == NULL ? obj : room, level, duration ); */ return; } /* * POTION FUNCTIONS */ void do_quaff( char_data* ch, char* argument ) { obj_data* obj; int level; int duration; int spell; if( *argument == '\0' ) { send( ch, "Quaff what?\n\r" ); return; } if( ( obj = one_object( ch, argument, "quaff", &ch->contents ) ) == NULL ) return; if( obj->pIndexData->item_type != ITEM_POTION ) { send( ch, "You can quaff only potions.\n\r" ); return; } if( ( spell = obj->pIndexData->value[0] ) < 0 || spell >= MAX_SPELL ) { send( ch, "That potion contains a non-existent spell.\n\r" ); bug( "Quaff: Spell out of Range." ); bug( "-- Potion = %s.", obj->Seen_Name( NULL ) ); return; } send( ch, "You quaff %s.\n\r", obj ); send_seen( ch, "%s quaffs %s.\n\r", ch, obj ); if( ( level = obj->value[1] ) < 1 || level > 25 ) { bug( "Quaff: Level out of range." ); bug( "-- Potion = %s", obj->Seen_Name( NULL ) ); level = 1; } if( ( duration = obj->value[2] ) < 1 ) { bug( "Quaff: Duration out of range." ); bug( "-- Potion = %s", obj->Seen_Name( NULL ) ); duration = 1; } set_delay( ch, 10 ); obj->Extract( 1 ); ( *spell_table[ spell ].function )( NULL, ch, NULL, level, duration ); return; } /* * SCROLL ROUTINES */ void do_recite( char_data* ch, char* argument ) { char arg [ MAX_STRING_LENGTH ]; cast_data* cast; obj_data* scroll; int level; int duration; int spell; if( not_player( ch ) ) return; if( is_set( &ch->status, STAT_BERSERK ) ) { send( ch, "Your mind is on killing, not reading scrolls.\n\r" ); return; } argument = one_argument( argument, arg ); if( ( scroll = one_object( ch, arg, "recite", &ch->contents ) ) == NULL ) return; if( scroll->pIndexData->item_type != ITEM_SCROLL ) { send( ch, "%s isn't a scroll.\n\r", scroll ); return; } if( !is_set( ch->pcdata->pfile->flags, PLR_HOLYLIGHT ) && ( is_set( ch->affected_by, AFF_BLIND ) || ch->in_room->is_dark( ) ) ) { send( ch, "It is too dark for you read any writing.\n\r" ); return; } if( ( spell = scroll->pIndexData->value[0] ) < 0 || spell >= MAX_SPELL ) { send( ch, "That scroll contains a non-existent spell.\n\r" ); bug( "Recite: Scroll spell out of range." ); bug( "-- Scroll = %s", scroll->Seen_Name( NULL ) ); return; } cast = new cast_data; cast->spell = spell; if( !get_target( ch, cast, argument ) ) { delete cast; return; } thing_data* target = cast->target; char_data* victim = character( target ); delete cast; if( spell_table[ spell ].type == STYPE_OFFENSIVE ) { check_killer( ch, victim ); ch->fighting = victim; react_attack( ch, victim ); } if( spell == SPELL_RECALL-SPELL_FIRST && is_set( &ch->in_room->room_flags, RFLAG_NO_RECALL ) ) { send( ch, "You attempt to pronounce the words on the scroll but\ absolutely nothing\n\rhappens.\n\r" ); return; } send( ch, "You recite %s.\n\r", scroll ); send_seen( ch, "%s recites %s.\n\r", ch, scroll ); remove_bit( &ch->status, STAT_HIDING ); remove_bit( ch->affected_by, AFF_HIDE ); remove_bit( &ch->status, STAT_CAMOUFLAGED ); remove_bit( ch->affected_by, AFF_CAMOUFLAGE ); strip_affect( ch, AFF_INVISIBLE ); if( ( level = scroll->value[1] ) < 1 || level > 25 ) { bug( "Recite: Level out of range." ); bug( "-- Scroll = %s", scroll->Seen_Name( NULL ) ); level = 1; } if( ( duration = scroll->value[2] ) < 1 ) { bug( "Recite: Duration out of range." ); bug( "-- Scroll = %s", scroll->Seen_Name( NULL ) ); bug( "-- Vnum = %d", scroll->pIndexData->vnum ); duration = 1; } set_delay( ch, 20 ); ( *spell_table[ spell ].function )( ch, victim, target, level, duration ); if( scroll->Is_Valid( ) ) scroll->Extract( 1 ); }