void cast_poison( byte level, struct char_data *ch, char *arg, int type, struct char_data *tar_ch, struct obj_data *tar_obj ) { switch (type) { case SPELL_TYPE_SPELL: spell_poison(level, ch, tar_ch, tar_obj); break; case SPELL_TYPE_POTION: spell_poison(level, ch, ch, 0); break; case SPELL_TYPE_STAFF: for (tar_ch = world[ch->in_room].people ; tar_ch ; tar_ch = tar_ch->next_in_room) if (tar_ch != ch) spell_poison(level,ch,tar_ch,0); break; default : log("Serious screw-up in poison!"); break; } }
bool spec_poison( CHAR_DATA * ch ) { CHAR_DATA *victim; if( ch->position != POS_FIGHTING || ( victim = who_fighting( ch ) ) == NULL || number_percent( ) > 2 * ch->top_level ) return FALSE; act( AT_HIT, "You bite $N!", ch, NULL, victim, TO_CHAR ); act( AT_ACTION, "$n bites $N!", ch, NULL, victim, TO_NOTVICT ); act( AT_POISON, "$n bites you!", ch, NULL, victim, TO_VICT ); spell_poison( gsn_poison, ch->top_level, ch, victim ); return TRUE; }
bool spec_poison( CHAR_DATA *ch ) { CHAR_DATA *victim; if ( ch->position != POS_FIGHTING || ( victim = ch->fighting ) == NULL || number_percent( ) > 2 * ch->level ) return FALSE; act( "You bite $N!", ch, NULL, victim, TO_CHAR ); act( "$n bites $N!", ch, NULL, victim, TO_NOTVICT ); act( "$n bites you!", ch, NULL, victim, TO_VICT ); spell_poison( gsn_poison, ch->level, ch, victim,TARGET_CHAR); return TRUE; }
int spell_ethereal_snake_bite(int sn, int level, CHAR_DATA *ch, void *vo ) { CHAR_DATA *victim = (CHAR_DATA *) vo; int dam; if ( !saves_spell( level, victim ) ) { dam = number_range( ch->level * 5, ch->level * 6 ); } else { dam = number_range( ch->level * 7, ch->level * 9 ); spell_poison( skill_lookup("poison"), ch->level, ch, victim ); } damage( ch, victim, dam, sn ); return SKPELL_NO_DAMAGE; }
SPEC_RET spec_poison( CHAR_DATA *ch ) { CHAR_DATA *victim; if ( ch->position != POSITION_FIGHT && ch->position != POSITION_EVASIVE && ch->position != POSITION_DEFENSIVE && ch->position != POSITION_AGGRESSIVE && ch->position != POSITION_BERSERK ) { return FALSE; } victim = who_fighting( ch ); if ( !victim ) return FALSE; if ( number_percent() > get_level(ch)/2 ) return FALSE; act( AT_HIT, "Mordi $N!", ch, NULL, victim, TO_CHAR ); act( AT_ACTION, "$n morde $N!", ch, NULL, victim, TO_NOVICT ); act( AT_POISON, "$n ti morde!", ch, NULL, victim, TO_VICT ); spell_poison( gsn_poison, get_level(ch)/2, ch, victim ); return TRUE; }