> I have always hated the idea that if you had 3 attacks, and seemingly the > average number of attacks characters get is about half of that. Mostly when > your > stats show you have 3 attacks, you should get 3 attacks. Not a percentage of > that! well..i made it so that each attack was a skill, so if you miss you skill check, you don't get the attack..i also added a cumulative penalty for missed attacks..ie, if you miss an attack, you get a 10% penalty, if you miss that one, you get a 20% penalty on the next one..here's my code if anyone is interested..its based originally on daniel's multi hit patch.. /* control the fights going on. Called every 2 seconds from comm.c. */ void perform_violence(void) { struct char_data *ch; struct char_data *vict; struct obj_data *weapon; int apr, i, missed = 0; int attack_skl[12] = { SKILL_SECOND_ATTACK, SKILL_THIRD_ATTACK, SKILL_FOURTH_ATTACK, SKILL_FIFTH_ATTACK, SKILL_SIXTH_ATTACK, SKILL_SEVENTH_ATTACK, SKILL_EIGHTH_ATTACK, SKILL_NINTH_ATTACK, SKILL_TENTH_ATTACK, SKILL_ELEVENTH_ATTACK, SKILL_TWELFTH_ATTACK, SKILL_THIRTEENTH_ATTACK }; int attack_dual[4] = { SKILL_DUAL_WIELD, SKILL_SECOND_DUAL_WIELD, SKILL_THIRD_DUAL_WIELD, SKILL_FOURTH_DUAL_WIELD }; for (ch = combat_list; ch; ch = next_combat_list) { next_combat_list = ch->next_fighting; apr = 0; . . stuff snipped . . if (!IS_NPC(ch)) for (i = 0; i <= 11; i++) if (GET_SKILL(ch, attack_skl[i])) if (skill_check(ch, attack_skl[i], "") && (!missed || number(0, (10 * missed)-1))) { improve_skill(ch, attack_skl[i]); apr++; } else missed++; if (IS_NPC(ch)) apr = (int)GET_LEVEL(ch)/10; if (IS_AFFECTED(ch, AFF_HASTE)) apr++; if (IS_AFFECTED(ch, AFF_SLOW)) apr--; if (IS_AFFECTED(ch, AFF_FRENZY)) { apr *= 2; REMOVE_BIT(AFF_FLAGS(ch), AFF_FRENZY); } if (is_ranger(ch)) apr = MAX(-1, MIN(apr, 0)); else apr = MAX(-1, MIN(apr, 30)); if (apr >= 0) for (; apr >= 0 && vict; apr--) if (GET_POS(vict) > POS_DEAD) hit(ch, vict, TYPE_UNDEFINED, weapon); else { stop_fighting(ch); if (FIGHTING(vict)) stop_fighting(vict); break; } if ((weapon = GET_EQ(ch, WEAR_WIELD_2)) && GET_OBJ_TYPE(weapon) == ITEM_WEAPON) { apr = 0; missed = 0; for (i = 0; i <= 3; i++) if (GET_SKILL(ch, attack_dual[i])) if (skill_check(ch, attack_dual[i], "") && !(missed && number(0, missed))) { improve_skill(ch, attack_dual[i]); apr++; } else missed++; if (apr >= 1) for (; apr >= 1 && vict; apr--) if (GET_POS(vict) > POS_DEAD) hit(ch, vict, TYPE_UNDEFINED, weapon); else { stop_fighting(ch); if (FIGHTING(vict)) stop_fighting(vict); break; } } siv +------------------------------------------------------------+ | Ensure that you have read the CircleMUD Mailing List FAQ: | | http://democracy.queensu.ca/~fletcher/Circle/list-faq.html | +------------------------------------------------------------+
This archive was generated by hypermail 2b30 : 12/15/00 PST