/*** Coder: --Silence Tyire How it works: Rolls a pair of dice and gives the character a hr/dr buffer based off of what the number was rolled on each die. It displays the the die numbers to the char and prevents them from rolling multiple times to have an outrageous hr/dr buff. I always thought that thief's/assassins/rogues/whatever your MU* calls them should have their own hr/dr buffer, so I wrote this simple skill: ***/ /*** I put this in fight.c, but I'm sure it'll work in any file. ***/ void do_dice_roll(CHAR_DATA *ch, char *argument) { AFFECT_DATA af; if(IS_AFFECTED2(ch, AFF2_DICED)) { stc("You must wait to roll again.", ch); return; } /***Hitroll***/ switch(number_range(0,5)) { case (0): stc("{cYou roll a {W[{D1{W]{x ", ch); af.where = TO_AFFECTS2; af.type = gsn_dice_roll; af.level = ch->level; af.duration = 30; af.location = APPLY_HITROLL; af.modifier = 5 + (ch->perm_stat[STAT_DEX] / 6); af.bitvector = AFF2_DICED; affect_to_char (ch, &af); act ("$n rolls his first dice.", NULL, NULL, NULL, TO_ROOM); break; case (1): stc("{cYou roll a {W[{D2{W]{x ", ch); af.where = TO_AFFECTS2; af.type = gsn_dice_roll; af.level = ch->level; af.duration = 30; af.location = APPLY_HITROLL; af.modifier = 10 + (ch->perm_stat[STAT_DEX] / 5); af.bitvector = AFF2_DICED; affect_to_char (ch, &af); act ("$n rolls his first dice.", NULL, NULL, NULL, TO_ROOM); break; case (2): stc("{cYou roll a {W[{D3{W]{x ", ch); af.where = TO_AFFECTS2; af.type = gsn_dice_roll; af.level = ch->level; af.duration = 30; af.location = APPLY_HITROLL; af.modifier = 15 + (ch->perm_stat[STAT_DEX] / 4); af.bitvector = AFF2_DICED; affect_to_char (ch, &af); act ("$n rolls his first dice.", NULL, NULL, NULL, TO_ROOM); break; case (3): stc("{cYou roll a {W[{D4{W]{x ", ch); af.where = TO_AFFECTS2; af.type = gsn_dice_roll; af.level = ch->level; af.duration = 30; af.location = APPLY_HITROLL; af.modifier = 20 + (ch->perm_stat[STAT_DEX] / 3); af.bitvector = AFF2_DICED; affect_to_char (ch, &af); act ("$n rolls his first dice.", NULL, NULL, NULL, TO_ROOM); break; case (4): stc("{cYou roll a {W[{D5{W]{x ", ch); af.where = TO_AFFECTS2; af.type = gsn_dice_roll; af.level = ch->level; af.duration = 30; af.location = APPLY_HITROLL; af.modifier = 25 + (ch->perm_stat[STAT_DEX] / 2); af.bitvector = AFF2_DICED; affect_to_char (ch, &af); act ("$n rolls his first dice.", NULL, NULL, NULL, TO_ROOM); break; case (5): stc("{cYou roll a {W[{D6{W]{x ", ch); af.where = TO_AFFECTS2; af.type = gsn_dice_roll; af.level = ch->level; af.duration = 30; af.location = APPLY_HITROLL; af.modifier = 30 + (ch->perm_stat[STAT_DEX] / 1); af.bitvector = AFF2_DICED; affect_to_char (ch, &af); act ("$n rolls his first dice.", NULL, NULL, NULL, TO_ROOM); break; } /***Damroll***/ switch(number_range(0,5)) { case (0): stc("{cand a {W[{D1{W]{x\n\r", ch); af.where = TO_AFFECTS2; af.type = gsn_dice_roll; af.level = ch->level; af.duration = 30; af.location = APPLY_DAMROLL; af.modifier = 5 + (ch->perm_stat[STAT_STR] / 6); af.bitvector = AFF2_DICED; affect_to_char (ch, &af); act ("$n rolls his second dice.", NULL, NULL, NULL, TO_ROOM); break; case (1): stc("{cand a {W[{D2{W]{x\n\r", ch); af.where = TO_AFFECTS2; af.type = gsn_dice_roll; af.level = ch->level; af.duration = 30; af.location = APPLY_DAMROLL; af.modifier = 10 + (ch->perm_stat[STAT_STR] / 5); af.bitvector = AFF2_DICED; affect_to_char (ch, &af); act ("$n rolls his second dice.", NULL, NULL, NULL, TO_ROOM); break; case (2): stc("{cand a {W[{D3{W]{x\n\r", ch); af.where = TO_AFFECTS2; af.type = gsn_dice_roll; af.level = ch->level; af.duration = 30; af.location = APPLY_DAMROLL; af.modifier = 15 + (ch->perm_stat[STAT_STR] / 4); af.bitvector = AFF2_DICED; affect_to_char (ch, &af); act ("$n rolls his second dice.", NULL, NULL, NULL, TO_ROOM); break; case (3): stc("{cand a {W[{D4{W]{x\n\r", ch); af.where = TO_AFFECTS2; af.type = gsn_dice_roll; af.level = ch->level; af.duration = 30; af.location = APPLY_DAMROLL; af.modifier = 20 + (ch->perm_stat[STAT_STR] / 3); af.bitvector = AFF2_DICED; affect_to_char (ch, &af); act ("$n rolls his second dice.", NULL, NULL, NULL, TO_ROOM); break; case (4): stc("{cand a {W[{D5{W]{x\n\r", ch); af.where = TO_AFFECTS2; af.type = gsn_dice_roll; af.level = ch->level; af.duration = 30; af.location = APPLY_DAMROLL; af.modifier = 25 + (ch->perm_stat[STAT_STR] / 2); af.bitvector = AFF2_DICED; affect_to_char (ch, &af); act ("$n rolls his second dice.", NULL, NULL, NULL, TO_ROOM); break; case (5): stc("{cand a {W[{D6{W]{x\n\r", ch); af.where = TO_AFFECTS2; af.type = gsn_dice_roll; af.level = ch->level; af.duration = 30; af.location = APPLY_DAMROLL; af.modifier = 30 + (ch->perm_stat[STAT_STR] / 1); af.bitvector = AFF2_DICED; affect_to_char (ch, &af); act ("$n rolls his second dice.", NULL, NULL, NULL, TO_ROOM); break; } return; } /*** in merc.h define the aff_diced and set the gsn. I don't have the unlimited bits code so mine is defined as an aff2 ***/ #define AFF2_DICED (G) /*** With the other gsn_defines (mine is under the gsn_third_attack) ***/ extern sh_int gsn_dice_roll; /*** in const.c set the skill I have 5 classes, be sure to set or remove the class gains according to how your mud is set. ***/ { "dice roll", {-1, -1, 13, -1, -1}, { 0, 0, 4, 0, 0}, spell_null, TAR_IGNORE, POS_STANDING, &gsn_dice_roll, SLOT (0), 0, 24, "dice roll", "!dice roll", ""}, /*** in db.c define the gsn again (mine is below gsn_third_attack) ***/ sh_int gsn_dice_roll; /*** in handler.c under 'char *affect_bit_name (int vector)' define the aff2_diced ***/ if (vector & AFF2_DICED) strcat (buf, " dice_roll"); /*** in tables.c set the flag type for dice_roll under 'const struct flag_type affect_flags[] ' ***/ {"dice_roll", G, TRUE}, /*** Make sure you have it defined in interp.c and interp.h run a clean compile, and you have a new hr/dr buffer ***/