/* This goes into fight.c*/ Do_Fun(do_dispatch) { dam_class dam_type; char arg[MAX_INPUT_LENGTH]; CharData *victim; ObjData *wield; wield = get_eq_char(ch, WEAR_WIELD); int dam, chance, diceroll = number_percent(); one_argument(argument, arg); ObjData *obj; if (wield != NULL) dam_type = attack_table[wield->value[3]].damage; else dam_type = attack_table[ch->dam_type].damage; if (dam_type == -1) dam_type = DAM_BASH; if (NullStr(arg)) { chprintln(ch, "Who will you try to kill?"); return; } if (ch->fighting != NULL) { chprintln(ch, "You're already engaged in battle."); return; } else if ((victim = get_char_room(ch, NULL, arg)) == NULL) { chprintln(ch, "They aren't here."); return; } if ((obj = get_eq_char(ch, WEAR_WIELD)) == NULL) { chprintln(ch, "To attempt that you need to wield a weapon."); return; } if (victim == ch) { chprintln(ch, "Try the 'delete' command."); return; } if (is_safe(ch, victim)) return; if (IsNPC(victim) && victim->fighting != NULL && !is_same_group(ch, victim->fighting)) { chprintln(ch, "Kill stealing is not permitted."); return; } chance = ((get_skill(ch, gsn_dispatch) / 10) - (victim->level - ch->level)); if (IsAffected(ch, AFF_SNEAK)) chance += 10; if (IsAffected(ch, AFF_HIDE)) chance += 5; if (IsAffected(ch, AFF_HASTE)) chance += 5; check_killer(ch, victim); chance = Max(2, chance); chance = Min(50, chance); WaitState(ch, skill_table[gsn_dispatch].beats); if (diceroll < chance || (get_skill(ch, gsn_dispatch) >= 2 && !IsAwake(victim))) { check_improve(ch, gsn_dispatch, true, 1); if (skill_table[gsn_dispatch].sound) act_sound(skill_table[gsn_dispatch].sound, ch, victim, skill_table[gsn_dispatch].sound->to, POS_RESTING); victim->hit = 1; dam = Max(99999, victim->max_hit); damage(ch, victim, dam, gsn_dispatch, DAM_NONE, false); chprintln(victim, "A movement out of the corner of your eye makes you turn around, but it is too late..."); chprintln(ch, "You quietly deal with your mark. It is done."); if (victim->level > ch->level) { chprintln(ch, "Your impeccable performance has earned you a reward. You feel favored."); ch->max_hit += 1; ch->hit += 1; ch->pcdata->perm_hit += 1; } } else { chprintln(ch, "Your mark notices you, and you're forced to attempt a backstab."); check_improve(ch, gsn_dispatch, false, 1); do_function(ch, &do_backstab, arg); } return; } /* This goes into special.c, in spec_nasty, under for (victim = ch->in_room->person_first; victim != NULL; victim = v_next)*/ else if (!IsNPC(victim) && (victim->level > ch->level) && (victim->level < ch->level + 10)) { do_function(ch, &do_dispatch, victim->name); if (ch->position != POS_FIGHTING) { do_function(ch, &do_dispatch, victim->name); } return true; }