bool spec_cast_cleric( CHAR_DATA *ch ) { CHAR_DATA *victim; CHAR_DATA *v_next; char *spell; int sn; summon_if_hating( ch ); if ( ch->position != POS_FIGHTING && ch->position != POS_EVASIVE && ch->position != POS_DEFENSIVE && ch->position != POS_AGGRESSIVE && ch->position != POS_BERSERK ) return FALSE; for ( victim = ch->in_room->first_person; victim; victim = v_next ) { v_next = victim->next_in_room; if ( who_fighting( victim ) == ch && number_bits( 2 ) == 0 ) break; } if ( !victim || victim == ch ) return FALSE; for ( ;; ) { int min_level; switch ( number_bits( 4 ) ) { case 0: min_level = 0; spell = "cause light"; break; case 1: min_level = 3; spell = "cause serious"; break; case 2: min_level = 6; spell = "earthquake"; break; case 3: min_level = 7; spell = "blindness"; break; case 4: min_level = 9; spell = "cause critical"; break; case 5: min_level = 10; spell = "dispel evil"; break; case 6: min_level = 12; spell = "curse"; break; case 7: min_level = 13; spell = "flamestrike"; break; case 8: case 9: case 10: min_level = 15; spell = "harm"; break; default: min_level = 16; spell = "dispel magic"; break; } if ( ch->level >= min_level ) break; } if ( ( sn = skill_lookup( spell ) ) < 0 ) return FALSE; (*skill_table[sn]->spell_fun) ( sn, ch->level, ch, victim ); return TRUE; }
bool spec_cast_mage( CHAR_DATA *ch ) { CHAR_DATA *victim; CHAR_DATA *v_next; char *spell; int sn; summon_if_hating( ch ); if ( ch->position != POS_FIGHTING && ch->position != POS_EVASIVE && ch->position != POS_DEFENSIVE && ch->position != POS_AGGRESSIVE && ch->position != POS_BERSERK ) return FALSE; for ( victim = ch->in_room->first_person; victim; victim = v_next ) { v_next = victim->next_in_room; if ( who_fighting( victim ) && number_bits( 2 ) == 0 ) break; } if ( !victim || victim == ch ) return FALSE; for ( ;; ) { int min_level; switch ( number_bits( 4 ) ) { case 0: min_level = 0; spell = "black hand"; break; case 1: min_level = 3; spell = "chill touch"; break; case 2: min_level = 7; spell = "weaken"; break; case 3: min_level = 8; spell = "galvanic whip"; break; case 4: min_level = 11; spell = "colour spray"; break; case 5: min_level = 12; spell = "weaken"; break; case 6: min_level = 13; spell = "energy drain"; break; case 7: min_level = 14; spell = "spectral furor"; break; case 8: case 9: min_level = 15; spell = "fireball"; break; default: min_level = 20; spell = "acid blast"; break; } if ( ch->level >= min_level ) break; } if ( ( sn = skill_lookup( spell ) ) < 0 ) return FALSE; (*skill_table[sn]->spell_fun) ( sn, ch->level, ch, victim ); return TRUE; }
bool spec_cast_undead( CHAR_DATA *ch ) { CHAR_DATA *victim; CHAR_DATA *v_next; char *spell; int sn; summon_if_hating( ch ); if ( ch->position != POS_FIGHTING && ch->position != POS_EVASIVE && ch->position != POS_DEFENSIVE && ch->position != POS_AGGRESSIVE && ch->position != POS_BERSERK ) return FALSE; for ( victim = ch->in_room->first_person; victim; victim = v_next ) { v_next = victim->next_in_room; if ( who_fighting( victim ) == ch && number_bits( 2 ) == 0 ) break; } if ( !victim || victim == ch ) return FALSE; for ( ;; ) { int min_level; switch ( number_bits( 4 ) ) { case 0: min_level = 0; spell = "chill touch"; break; case 1: min_level = 11; spell = "weaken"; break; case 2: min_level = 12; spell = "curse"; break; case 3: min_level = 13; spell = "blindness"; break; case 4: min_level = 14; spell = "poison"; break; case 5: min_level = 15; spell = "energy drain"; break; case 6: min_level = 18; spell = "harm"; break; default: min_level = 40; spell = "gate"; break; } if ( ch->level >= min_level ) break; } if ( ( sn = skill_lookup( spell ) ) < 0 ) return FALSE; (*skill_table[sn]->spell_fun) ( sn, ch->level, ch, victim ); return TRUE; }
SPEC_RET spec_cast_undead( CHAR_DATA *ch ) { CHAR_DATA *victim; CHAR_DATA *v_next; char *spell; int sn; summon_if_hating( ch ); if ( ch->position != POSITION_FIGHT && ch->position != POSITION_EVASIVE && ch->position != POSITION_DEFENSIVE && ch->position != POSITION_AGGRESSIVE && ch->position != POSITION_BERSERK ) { return FALSE; } for ( victim = ch->in_room->first_person; victim; victim = v_next ) { v_next = victim->next_in_room; if ( who_fighting(victim) != ch ) continue; if ( number_bits(2) == 0 ) continue; if ( IS_PG(victim) ) break; if ( IS_MOB(victim) && HAS_BIT(victim->affected_by, AFFECT_CHARM) ) break; } if ( !victim ) return FALSE; if ( victim == ch ) return FALSE; for ( ; ; ) { int min_level; switch ( number_bits(4) ) { case 0: min_level = 1; spell = "chill touch"; break; case 1: min_level = 22; spell = "weaken"; break; case 2: min_level = 24; spell = "curse"; break; case 3: min_level = 26; spell = "blindness"; break; case 4: min_level = 28; spell = "poison"; break; case 5: min_level = 30; spell = "energy drain"; break; case 6: min_level = 36; spell = "harm"; break; default: min_level = 80; spell = "gate"; break; } if ( get_level(ch) >= min_level ) break; } sn = skill_lookup( spell ); if ( sn < 0 ) return FALSE; (*table_skill[sn]->spell_fun) ( sn, get_level(ch)/2, ch, victim ); return TRUE; }
SPEC_RET spec_cast_mage( CHAR_DATA *ch ) { CHAR_DATA *victim; CHAR_DATA *v_next; char *spell; int sn; summon_if_hating( ch ); if ( ch->position != POSITION_FIGHT && ch->position != POSITION_EVASIVE && ch->position != POSITION_DEFENSIVE && ch->position != POSITION_AGGRESSIVE && ch->position != POSITION_BERSERK ) { return FALSE; } for ( victim = ch->in_room->first_person; victim; victim = v_next ) { v_next = victim->next_in_room; if ( who_fighting(victim) != ch ) continue; if ( number_bits(2) ) continue; if ( IS_PG(victim) ) break; if ( IS_MOB(victim) && HAS_BIT(victim->affected_by, AFFECT_CHARM) ) break; } if ( !victim ) return FALSE; if ( victim == ch ) return FALSE; for ( ; ; ) { int min_level; switch ( number_bits(4) ) { case 0: min_level = 1; spell = "magic missile"; break; case 1: min_level = 6; spell = "chill touch"; break; case 2: min_level = 14; spell = "weaken"; break; case 3: min_level = 16; spell = "galvanic whip"; break; case 4: min_level = 22; spell = "colour spray"; break; case 5: min_level = 24; spell = "weaken"; break; case 6: min_level = 26; spell = "energy drain"; break; case 7: min_level = 28; spell = "spectral furor"; break; case 8: case 9: min_level = 30; spell = "fireball"; break; default: min_level = 40; spell = "acid blast"; break; } if ( get_level(ch) >= min_level ) break; } sn = skill_lookup( spell ); if ( sn < 0 ) return FALSE; (*table_skill[sn]->spell_fun) ( sn, get_level(ch)/2, ch, victim ); return TRUE; }
SPEC_RET spec_cast_cleric( CHAR_DATA *ch ) { CHAR_DATA *victim; CHAR_DATA *v_next; char *spell; int sn; summon_if_hating( ch ); if ( ch->position != POSITION_FIGHT && ch->position != POSITION_EVASIVE && ch->position != POSITION_DEFENSIVE && ch->position != POSITION_AGGRESSIVE && ch->position != POSITION_BERSERK ) { return FALSE; } for ( victim = ch->in_room->first_person; victim; victim = v_next ) { v_next = victim->next_in_room; if ( who_fighting(victim) != ch ) continue; if ( number_bits(2) ) continue; if ( IS_PG(victim) ) break; if ( IS_MOB(victim) && HAS_BIT(victim->affected_by, AFFECT_CHARM) ) break; } if ( !victim ) return FALSE; if ( victim == ch ) return FALSE; for ( ; ; ) { int min_level; /* (FF) (LV) questi min_level forse sono da tarare */ switch ( number_bits(4) ) { case 0: min_level = 1; spell = "cause light"; break; case 1: min_level = 6; spell = "cause serious"; break; case 2: min_level = 12; spell = "earthquake"; break; case 3: min_level = 14; spell = "blindness"; break; case 4: min_level = 18; spell = "cause critical"; break; case 5: min_level = 20; spell = "dispel evil"; break; case 6: min_level = 24; spell = "curse"; break; case 7: min_level = 26; spell = "flamestrike"; break; case 8: case 9: case 10: min_level = 30; spell = "harm"; break; default: min_level = 32; spell = "dispel magic"; break; } if ( get_level(ch) >= min_level ) break; } sn = skill_lookup( spell ); if ( sn < 0 ) return FALSE; (*table_skill[sn]->spell_fun) ( sn, get_level(ch)/2, ch, victim ); return TRUE; }