/***************************************************************************
* This code may be used freely within any non-commercial MUD, all I ask *
* is that these comments remain in tact and that you give me any feedback *
* or bug reports you come up with. *
* -- Midboss (eclipsing.souls@gmail.com) *
***************************************************************************/
/***************************************************************************
* Add this file to your source directory, and if applicable, makefile. *
* Add the DECLARE_DO_FUN() and cmd_table entry for do_dice, and compile. *
* This one was a suggestion from Samira. *
***************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include "merc.h"
/*
* This is just a hack of one of the *_argument functions in interp.c,
* modified to handle dice.
*/
int dice_argument (char *argument, char *arg)
{
char *pdot;
int number;
for (pdot = argument; *pdot != '\0'; pdot++)
{
if (*pdot == 'd')
{
*pdot = '\0';
number = atoi (argument);
*pdot = 'd';
strcpy (arg, pdot + 1);
return number;
}
}
strcpy (arg, argument);
return -1;
}
/*
* Simple dice rolling command that lets you specify number of die and sides.
*/
void do_dice (CHAR_DATA * ch, char * argument)
{
char arg[MIL], buf[MSL];
unsigned int result = 0;
sh_int num = 0, size = 0;
if (argument[0] == '\0')
{
send_to_char ("Roll how many dice with how many sides? [roll <num>d<size>]\n\r", ch);
return;
}
if ((num = dice_argument (argument, arg)) < 0)
{
send_to_char ("Roll HOW many?\n\r", ch);
return;
}
if (num > 255)
{
send_to_char ("You may only roll as many as 255 dice.\n\r", ch);
return;
}
if (!is_number (arg) || arg[0] == '\0')
{
send_to_char ("How many sides?\n\r", ch);
return;
}
size = atoi (arg);
if (size > 255)
{
send_to_char ("You can only find up to 255 sided dice... And even that's a little absurd.\n\r", ch);
return;
}
result = dice (num, size);
sprintf (buf, "You roll %d on %d %d-sided dice.\n\r", result, num, size);
send_to_char (buf, ch);
sprintf (buf, "$n rolls %d on %d %d-sided dice.\n\r", result, num, size);
act (buf, ch, NULL, NULL, TO_ROOM);
}