/* Dice Game Snippet for the EmberMUD Codebase by Rahl */ /*************************************************************************** * Original Diku Mud copyright (C) 1990, 1991 by Sebastian Hammer, * * Michael Seifert, Hans Henrik St{rfeldt, Tom Madsen, and Katja Nyboe. * * * * Merc Diku Mud improvments copyright (C) 1992, 1993 by Michael * * Chastain, Michael Quan, and Mitchell Tse. * * * * In order to use any part of this Merc Diku Mud, you must comply with * * both the original Diku license in 'license.doc' as well the Merc * * license in 'license.txt'. In particular, you may not remove either of * * these copyright notices. * * * * Much time and thought has gone into this software and you are * * benefitting. We hope that you share your changes too. What goes * * around, comes around. * ***************************************************************************/ /*************************************************************************** * A few really simple dice games. If you want to change the odds, simply * * change the dice() numbers. * * * * To install: add dice_games.o to your makefile, add do_games to interp.c * * and interp.h, and add spec_gamemaster to special.c * * * * If you choose to use this code, please retain my name in this file and * * send me an email (dwa1844@rit.edu) saying you are using it. Suggestions * * for improvement are welcome. -- Rahl (Daniel Anderson) * ***************************************************************************/ #if defined(macintosh) #include <types.h> #include <time.h> #else #include <sys/types.h> #include <sys/time.h> #endif #include <stdio.h> #include <string.h> #include <stdlib.h> #include "merc.h" void win( CHAR_DATA *ch, long amnt ); void lose( CHAR_DATA *ch, long amnt ); void win( CHAR_DATA *ch, long amnt ) { char buf[MAX_STRING_LENGTH]; buf[0] = '\0'; ch->gold += amnt; sprintf( buf, "You win %ld gold!\n\r", amnt ); send_to_char( buf, ch ); } void lose( CHAR_DATA *ch, long amnt ) { char buf[MAX_STRING_LENGTH]; buf[0] = '\0'; ch->gold -= amnt; sprintf( buf, "You lost %ld gold!\n\r", amnt ); send_to_char( buf, ch ); } void game_even_odd( CHAR_DATA *ch, char *argument ) { char arg[MAX_INPUT_LENGTH]; char arg2[MAX_INPUT_LENGTH]; char buf[MAX_STRING_LENGTH]; long amount; int roll; CHAR_DATA *gamemaster; argument = one_argument( argument, arg ); argument = one_argument( argument, arg2 ); buf[0] = '\0'; if ( arg[0] == '\0' || arg2[0] == '\0' ) { send_to_char( "Syntax: game even-odd <even|odd> <amount>\n\r", ch ); return; } for ( gamemaster = ch->in_room->people; gamemaster != NULL; gamemaster = gamemaster->next_in_room ) { if ( !IS_NPC( gamemaster ) ) continue; if ( gamemaster->spec_fun == spec_lookup( "spec_gamemaster" ) ) break; } if ( gamemaster == NULL || gamemaster->spec_fun != spec_lookup( "spec_gamemaster" ) ) { send_to_char("You can't do that here.\n\r",ch); return; } if ( gamemaster->fighting != NULL) { send_to_char("Wait until the fighting stops.\n\r",ch); return; } if ( !is_number( arg2 ) ) { send_to_char( "You must bet a number.\n\r", ch ); return; } roll = dice( 2, 6 ); amount = atol( arg2 ); if ( amount < 1 ) { send_to_char( "Bet SOMETHING, will you?\n\r", ch ); return; } sprintf( buf, "%s rolls the dice.\n\rThe roll is %d.\n\r", gamemaster->short_descr, roll ); send_to_char( buf, ch ); if ( !str_cmp( arg, "odd" ) ) { if ( roll %2 != 0 ) /* you win! */ win( ch, amount ); else lose( ch, amount ); return; } else if ( !str_cmp( arg, "even" ) ) { if ( roll %2 == 0 ) win( ch, amount ); else lose( ch, amount ); return; } else { send_to_char( "Syntax: game even-odd <even|odd> <amount>\n\r", ch ); } return; } void game_high_low( CHAR_DATA *ch, char *argument ) { char arg[MAX_INPUT_LENGTH]; char arg2[MAX_INPUT_LENGTH]; char buf[MAX_STRING_LENGTH]; long amount; int roll; CHAR_DATA *gamemaster; argument = one_argument( argument, arg ); argument = one_argument( argument, arg2 ); buf[0] = '\0'; if ( arg[0] == '\0' || arg2[0] == '\0' ) { send_to_char( "Syntax: game high-low <high|low> <amount>\n\r", ch ); return; } for ( gamemaster = ch->in_room->people; gamemaster != NULL; gamemaster = gamemaster->next_in_room ) { if ( !IS_NPC( gamemaster ) ) continue; if ( gamemaster->spec_fun == spec_lookup( "spec_gamemaster" ) ) break; } if ( gamemaster == NULL || gamemaster->spec_fun != spec_lookup( "spec_gamemaster" ) ) { send_to_char("You can't do that here.\n\r",ch); return; } if ( gamemaster->fighting != NULL) { send_to_char("Wait until the fighting stops.\n\r",ch); return; } if ( !is_number( arg2 ) ) { send_to_char( "You must bet a number.\n\r", ch ); return; } roll = dice( 1, 9 ); amount = atol( arg2 ); if ( amount < 1 ) { send_to_char( "Bet SOMETHING, will you?\n\r", ch ); return; } sprintf( buf, "%s rolls the dice.\n\rThe roll is %d.\n\r", gamemaster->short_descr, roll ); send_to_char( buf, ch ); if ( !str_cmp( arg, "high" ) ) { if ( roll > 6 ) /* you win! */ win( ch, amount * 1.5 ); else lose( ch, amount ); return; } else if ( !str_cmp( arg, "low" ) ) { if ( roll < 6 ) win( ch, amount * 1.5 ); else lose( ch, amount ); return; } else { send_to_char( "Syntax: game high-low <high|low> <amount>\n\r", ch ); } return; } void game_higher_lower( CHAR_DATA *ch, char *argument ) { char arg[MAX_INPUT_LENGTH]; char buf[MAX_STRING_LENGTH]; long amount; int your_roll, his_roll; CHAR_DATA *gamemaster; argument = one_argument( argument, arg ); buf[0] = '\0'; if ( arg[0] == '\0' ) { send_to_char( "Syntax: game higher-lower <amount>\n\r", ch ); return; } for ( gamemaster = ch->in_room->people; gamemaster != NULL; gamemaster = gamemaster->next_in_room ) { if ( !IS_NPC( gamemaster ) ) continue; if ( gamemaster->spec_fun == spec_lookup( "spec_gamemaster" ) ) break; } if ( gamemaster == NULL || gamemaster->spec_fun != spec_lookup( "spec_gamemaster" ) ) { send_to_char("You can't do that here.\n\r",ch); return; } if ( gamemaster->fighting != NULL) { send_to_char("Wait until the fighting stops.\n\r",ch); return; } if ( !is_number( arg ) ) { send_to_char( "You must bet a number.\n\r", ch ); return; } your_roll = dice( 2, 6 ); his_roll = dice( 2, 6 ); amount = atol( arg ); if ( amount < 1 ) { send_to_char( "Bet SOMETHING, will you?\n\r", ch ); return; } sprintf( buf, "%s rolls the dice and gets a %d.\n\rYour roll is %d.\n\r", gamemaster->short_descr, his_roll, your_roll ); send_to_char( buf, ch ); if ( your_roll > his_roll ) /* you win! */ win( ch, amount * 2 ); else lose( ch, amount ); return; } void do_game( CHAR_DATA *ch, char *argument ) { char arg[MAX_INPUT_LENGTH]; argument = one_argument( argument, arg ); if ( !str_cmp( arg, "higher-lower" ) ) game_higher_lower( ch, argument ); else if ( !str_cmp( arg, "even-odd" ) ) game_even_odd( ch, argument ); else if ( !str_cmp( arg, "high-low" ) ) game_high_low( ch, argument ); else { send_to_char( "Current games are: higher-lower, even-odd, and high-low.\n\r", ch ); return; } } /* ============================================================================= / ______ _______ ____ _____ ___ __ _ ______ ____ ____ _____ / \ | ____|__ __| _ \ / ____\ / _ \| \ / | ____| / __ \| _ \ / ____\ \ / | |__ | | | |_| | | | |_| | |\/| | |___ | | | | |_| | | / / | ___| | | | ___/| | __| _ | | | | ____| | | | | __/| | ___ \ \ | | | | | | | |___| | | | | | | | |____ | |__| | |\ \| |___| | / / |_| |_| |_| o \_____/|_| |_|_| |_|______|o \____/|_| \_|\_____/ \ \ / ============================================================================ ------------------------------------------------------------------------------ ftp://ftp.game.org/pub/mud FTP.GAME.ORG http://www.game.org/ftpsite/ ------------------------------------------------------------------------------ This file came from FTP.GAME.ORG, the ultimate source for MUD resources. ------------------------------------------------------------------------------ */