/****************************************************************************
* ResortMUD Version 5.0 was mainly programmed by Ntanel, Garinan, Josh, *
* Badastaz, Digifuzz, Senir, Kratas, Scion, Shogar and Tagith. *
* ------------------------------------------------------------------------ *
* Copyright (C) 1996 - 2001 Haslage Net Electronics: MudWorld of Lorain, *
* Ohio. ALL RIGHTS RESERVED See /doc/RMLicense.txt for more details. *
****************************************************************************/
/****************************************************************************
* [S]imulated [M]edieval [A]dventure multi[U]ser [G]ame | \\._.// *
* -----------------------------------------------------------| (0...0) *
* SMAUG 1.4 (C) 1994, 1995, 1996, 1998 by Derek Snider | ).:.( *
* -----------------------------------------------------------| {o o} *
* SMAUG code team: Thoric, Altrag, Blodkai, Narn, Haus, | / ' ' \ *
* Scryn, Rennard, Swordbearer, Gorog, Grishnakh, Nivek, |~'~.VxvxV.~'~*
* Tricops and Fireblade | *
* ------------------------------------------------------------------------ *
* Merc 2.1 Diku Mud improvments copyright (C) 1992, 1993 by Michael *
* Chastain, Michael Quan, and Mitchell Tse. *
* Original Diku Mud copyright (C) 1990, 1991 by Sebastian Hammer, *
* Michael Seifert, Hans Henrik St{rfeldt, Tom Madsen, and Katja Nyboe. *
* ------------------------------------------------------------------------ *
* Trivia Add-On *
****************************************************************************/
#include <string.h>
#include "mud.h"
void trivia_update( void );
void load_trivia( void );
void sort_questions( TRIVIA_DATA * pTriv );
int triviacycle = 0;
int topic = 0;
int onquestion = 0;
int maxquestions = 0;
bool TRIVIA_ON = FALSE;
void do_trivia( CHAR_DATA * ch, char *argument )
{
char arg1[MIL];
char arg2[MIL];
char arg3[MIL];
char buf[MSL];
argument = one_argument( argument, arg1 );
argument = one_argument( argument, arg2 );
argument = one_argument( argument, arg3 );
if( IS_NPC( ch ) )
return;
if( !( IS_IMMORTAL( ch ) ) )
return;
if( !arg1 || arg1[0] == '\0' )
{
send_to_char( "&WSyntax: Trivia <start/stop> <Topic #> <Rounds>\r\n", ch );
send_to_char( "Topics: 1. General 2. MUDding\r\n\r\n", ch );
send_to_char( "&CCurrent Status:\r\n", ch );
if( TRIVIA_ON )
{
sprintf( buf, "&wCurrently on round %d of %d\r\nTrivia Cycle is %d\r\n", onquestion, maxquestions, triviacycle );
send_to_char( buf, ch );
}
else
send_to_char( "Trivia is not currently running.\r\n", ch );
return;
}
if( !str_cmp( arg1, "start" ) )
{
send_to_char( "Starting Trivia.\r\n", ch );
TRIVIA_ON = TRUE;
}
else if( !str_cmp( arg1, "stop" ) )
{
send_to_char( "Stopping Trivia.\r\n", ch );
/* close_trivia();*/
TRIVIA_ON = FALSE;
sprintf( buf, "%s has stopped the trivia", ch->name );
do_info( NULL, buf );
return;
}
else
{
send_to_char( "Invalid Argument\r\n", ch );
return;
}
if( !arg2 || arg2[0] == '\0' || !is_number( arg2 ) )
{
send_to_char( "Setting topic to default: General\r\n", ch );
topic = 1;
}
else
topic = atoi( arg2 );
if( !arg3 || arg3[0] == '\0' || !is_number( arg3 ) )
{
send_to_char( "Setting number of questions to default: 20\r\n", ch );
maxquestions = 20;
}
else
maxquestions = atoi( arg3 );
sprintf( buf, "%s has started trivia, with %d rounds and a topic of %s", ch->name, maxquestions,
topic == 1 ? "General" : "MUDding" );
do_info( NULL, buf );
return;
}
void trivia_update( void )
{
char buf[MSL];
if( TRIVIA_ON )
{
switch ( triviacycle )
{
case 0:
onquestion++;
/* new_question();
display_question();
*/ triviacycle++;
sprintf( buf, "Simulated Question %d of %d", onquestion, maxquestions );
do_info( NULL, buf );
break;
case 1:
/* display_question();
display_hint();
*/ triviacycle++;
do_info( NULL, "Hint Time!" );
break;
case 2:
/* display_answer();
*/ triviacycle++;
do_info( NULL, "And the answer is..." );
break;
case 3:
if( onquestion < maxquestions )
{
do_info( NULL, "Get ready for the next round of trivia!" );
triviacycle = 0;
}
else
{
/* close_trivia();
*/ }
}
}
return;
}
void load_trivia( void )
{
TRIVIA_DATA *trivia;
FILE *fp;
if( !( fp = fopen( SYSTEM_DIR TRIVIA_FILE, "r" ) ) )
return;
for( ;; )
{
if( feof( fp ) )
{
bug( "Load_trivia: no $ found." );
fclose( fp );
return;
}
CREATE( trivia, TRIVIA_DATA, 1 );
trivia->question = fread_string_nohash( fp );
if( *trivia->question == '$' )
break;
sort_questions( trivia );
}
DISPOSE( trivia->question );
DISPOSE( trivia );
fclose( fp );
return;
}
TRIVIA_DATA *first_question;
TRIVIA_DATA *last_question;
void sort_questions( TRIVIA_DATA * pTriv )
{
TRIVIA_DATA *trivia = NULL;
if( !pTriv )
{
bug( "Sort_questions: NULL pTriv" );
return;
}
pTriv->next = NULL;
pTriv->prev = NULL;
for( trivia = first_question; trivia; trivia = trivia->next )
{
if( strcasecmp( pTriv->question, trivia->question ) > 0 )
{
INSERT( pTriv, trivia, first_question, next, prev );
break;
}
}
if( !trivia )
{
LINK( pTriv, first_question, last_question, next, prev );
}
return;
}