void do_kick (CHAR_DATA * ch, char *argy) { CHAR_DATA *victim; int ii, i; bool notft = FALSE; int dl = 0; DEFINE_COMMAND ("kick", do_kick, POSITION_FIGHTING, 0, LOG_NORMAL, "This command allows you to kick an opponent. Success is based on kicking skill, power is based on level.") check_fgt (ch); /*if (!FIGHTING(ch)) { send_to_char("You cannot start combat with a kick. Use KILL instead.\n\r",ch); return; } */ if (ch->wait > 2) return; if (ch->fgt->ears > 9) { send_to_char ("You can't kick this soon after a bash.\n\r", ch); return; } if (FIGHTING (ch) == NULL) { notft = TRUE; if (argy[0] == '\0' || argy == "") { send_to_char ("Who?\n\r", ch); /* WAIT_STATE(ch, 1*PULSE_VIOLENCE); */ return; } if ((victim = get_char_room (ch, argy)) == NULL) { send_to_char ("Who?\n\r", ch); /* WAIT_STATE(ch, 1*PULSE_VIOLENCE); */ return; } if (victim == ch) { send_to_char ("You kick yourself in the butt, but it doesn't hurt that much.\n\r", ch); WAIT_STATE(ch, 5*PULSE_VIOLENCE); return; } /* ----------------------------------------- */ /* Protecting Neutral align. */ /* ----------------------------------------- */ if (IS_PLAYER(ch) && IS_PLAYER(victim) && ALIGN(victim) == 0 && !IN_BATTLE(ch) && ch->fgt->challenge != 10) { send_to_char ("A strange force prevents you from harming this person.\n\r", ch); return; } if ( IS_PLAYER(ch) && IS_PLAYER(victim) && ALIGN (ch) == 0 && !IN_BATTLE(ch) && ch->fgt->challenge != 10) { send_to_char ("A strange force prevents you from attacking other players.\n\r", ch); return; } /* ----------------------------------------- */ /* Protecting LinkDead-NoTimers */ /* ----------------------------------------- */ if(IS_PLAYER(victim) && victim->desc == NULL) { if(!(victim->pcdata->no_quit_pk > 0)) { send_to_char ("You cannot attack someone who exists slightly outside reality.\n\r", ch); return; } } } else victim = ch->fgt->fighting; if (victim->data_type==50) return; if (is_safe (ch, victim)) { return; } if (!DIFF_ALIGN(ch, victim) && ALIGN(victim) <= 3 && IS_PLAYER(victim) && !IS_MOB(ch) && !IN_BATTLE(ch) && !IN_BATTLE(victim)) { send_to_char ("No more Same side pk to prevent same align-pkdeath. You can not attack members of the same alignment!\n\r", ch); return; } check_same_side_pk(ch, victim); check_ced (ch); check_ced (victim); if (!(IS_IN_MELEE (ch, victim))) { send_to_char ("You aren't on the front lines of that battle!\n\r", ch); return; } if (ch->position == POSITION_BASHED) { send_to_char ("You try to kick, but from the ground you can't hit your opponent.\n\r", ch); return; } if (ch->position == POSITION_GROUNDFIGHTING) { send_to_char ("You can't kick when you are locked into mortal combat on the ground!\n\r", ch); return; } if (kickable (victim) == 0) { act ("You can't kick that type of creature!", ch, NULL, victim, TO_CHAR); return; } dl = 43; if (notft) dl = (PULSE_VIOLENCE); WAIT_STATE (ch, dl); if (kickable (victim) == 2) { act ("You try to kick $N, but $E flies out of the way!", ch, NULL, victim, TO_CHAR); return; } set_fighting (ch, victim); if (((IS_PLAYER(ch) && is_member(ch, GUILD_BATTLEMASTER)) && number_percent()<(ch->pcdata->learned[gsn_double_kick]/5)) || (IS_MOB(ch)&&number_percent() < LEVEL(ch)/9)) { i = 2; if (IS_PLAYER(ch) && number_range(1,20) == 4) skill_gain(ch, gsn_double_kick, TRUE); } else i = 1; for (; i > 0; i--) { int chance = 0; chance += ch->pcdata->learned[gsn_kick]; if (is_member(ch, GUILD_WARRIOR)) chance += 5; if (is_member(ch, GUILD_BATTLEMASTER)) chance += 5; if (IS_PLAYER(victim) && (victim->pcdata->learned[gsn_steadiness] > 10)) { chance -= (victim->pcdata->learned[gsn_steadiness]/4); skill_gain(victim, gsn_steadiness, TRUE); } if (IS_PLAYER(victim) && (victim->pcdata->learned[gsn_block] > 10)) { if (number_percent() < (victim->pcdata->learned[gsn_block]/3)) { act("$N blocks $s's kick and twists away.", ch, NULL,victim, TO_NOTVICT); act ("$N blocks your kick and twists away.", ch,NULL,victim, TO_CHAR); act ("You block $n's kick and twist away.", ch, NULL,victim, TO_VICT); if (number_range(1,10) == 3) skill_gain(victim, gsn_block, TRUE); return; } } if (IS_MOB (ch) || (!IS_AWAKE (victim) || (IS_PLAYER (ch) && number_percent () < chance))) { char buf[500]; int i; int damm; damm = translate (damt.kick_dam, LEVEL (ch), ch); if (IS_AUGMENTED(ch, AUG_LEG_STR)) damm += number_range(1,4); if (IS_AUGMENTED(ch, AUG_FOOT_STR)) damm += number_range(3,6); if (IS_PLAYER (ch) && number_range (1, 3) == 2) skill_gain (ch, gsn_kick, TRUE); if (ch->in_room != victim->in_room || victim->data_type == 50) return; if (CHALLENGE (ch) == 10 && number_range(1,3) == 2) { i = number_range (1, 3); if (i == 1) sprintf (buf, "($B$1Arena$N$7) $B%s kicks %s in the ribs... snap crackle pop!", NAME (ch), NAME (victim)); if (i == 2) sprintf (buf, "($B$1Arena$N$7) $B%s kicks %s's knee; that's gotta hurt!", NAME (ch), NAME (victim)); if (i == 3) sprintf (buf, "($B$1Arena$N$7) $B%s's kick catches %s in the side of the head!", NAME (ch), NAME (victim)); do_arenaecho (ch, buf, TRUE); } if (can_yell (victim)) { if (damm < 5) { act ("\x1B[1;35mYour weak kick barely bruises $N's shin.\x1B[37;0m", ch, NULL, victim, TO_CHAR); act ("\x1B[1;37m$n's weak kick barely bruises $N's shin.\x1B[0m", ch, NULL, victim, TO_NOTVICT); act ("\x1B[1;36m$n's weak kick bruises your shin.\x1B[37;0m", ch, NULL, victim, TO_VICT); } else { ii = number_range (1, 5); if (ii == 1) { act ("\x1B[1;35mYour kick slams into $N's shin!\x1B[37;0m", ch, NULL, victim, TO_CHAR); act ("\x1B[1;37m$n's kick slams into $N's shin.\x1B[0m", ch, NULL, victim, TO_NOTVICT); act ("\x1B[1;36m$n's kick slams into your shin!\x1B[37;0m", ch, NULL, victim, TO_VICT); } else if (ii == 2) { act ("\x1B[1;35mYour kick smashes into $N's solar plexus!\x1B[37;0m", ch, NULL, victim, TO_CHAR); act ("\x1B[1;37m$n kicks $N directly in the solar plexus!\x1B[0m", ch, NULL, victim, TO_NOTVICT); act ("\x1B[1;36m$n kicks you in the solar plexus! Ouch!\x1B[37;0m", ch, NULL, victim, TO_VICT); } else if (ii == 3) { act ("\x1B[1;35mYour kick smashes into $N's knee!\x1B[37;0m", ch, NULL, victim, TO_CHAR); act ("\x1B[1;37m$n kicks $N's knee very hard!\x1B[0m", ch, NULL, victim, TO_NOTVICT); act ("\x1B[1;36m$n kicks your knee, and you nearly fall over...\x1B[37;0m", ch, NULL, victim, TO_VICT); } else if (ii == 4) { act ("\x1B[1;35mYou lift your leg high, and kick $N in the head!!\x1B[37;0m", ch, NULL, victim, TO_CHAR); act ("\x1B[1;37m$n kicks $N's right in the face! Ouch...\x1B[0m", ch, NULL, victim, TO_NOTVICT); act ("\x1B[1;36m$n kicks you in the face!\x1B[37;0m", ch, NULL, victim, TO_VICT); act ("\x1B[1;31mBlood spurts from $N's nose!\x1B[37;0m", ch, NULL, victim, TO_CHAR); act ("\x1B[1;31mBlood spurts from $N's nose!\x1B[37;0m", ch, NULL, victim, TO_NOTVICT); act ("\x1B[1;31mBlood pours forth from your injured nose!\x1B[37;0m", ch, NULL, victim, TO_VICT); } else if (ii == 5) { act ("\x1B[1;35mYour kick connects with $N's ribs!\x1B[37;0m", ch, NULL, victim, TO_CHAR); act ("\x1B[1;37m$n kicks $N in the ribs!\x1B[0m", ch, NULL, victim, TO_NOTVICT); act ("\x1B[1;36m$n kicks you in the ribs!! Ouch!\x1B[37;0m", ch, NULL, victim, TO_VICT); } } } else { act ("\x1B[1;35mWham! Your kick slams into $N!\x1B[37;0m", ch, NULL, victim, TO_CHAR); act ("\x1B[1;37m$n's kick slams into $N!\x1B[37;0m", ch, NULL, victim, TO_NOTVICT); act ("\x1B[1;37m$n's kick slams into you hard!\x1B[37;0m", ch, NULL, victim, TO_VICT); } show_hitdam (gsn_kick, "kick", damm, ch, victim); damage (ch, victim, damm/2, gsn_kick); } else { set_fighting (ch, victim); if (FIGHTING (victim) == NULL) victim->fgt->fighting = ch; act ("You miss a kick at $N.", ch, NULL, victim, TO_CHAR + 1000); act ("$n misses a kick at $N.", ch, NULL, victim, TO_NOTVICT + 1000); act ("$n tries to kick you but misses.", ch, NULL, victim, TO_VICT + 1000); } } return; }