#include <amxmodx>
#include <amxmisc>
#include <cstrike>
new plugin[] = "Quiz"
new version[] = "0.6"
new author[] = "Doombringer"
new enabled, use_mode, reward, timelimit, min_display, max_display, display_mode
#define MAX_QUESTIONS 200
#define MAX_NUM_OF_CHAR 190
//#define MIN_TIME 20.0
//#define MAX_TIME 50.0
new Questions[MAX_QUESTIONS][MAX_NUM_OF_CHAR]
new Answers[MAX_QUESTIONS][MAX_NUM_OF_CHAR]
new bool:alreadyused[MAX_QUESTIONS]
new num_of_questions
new used_question[1][MAX_NUM_OF_CHAR]
new used_answer[1][MAX_NUM_OF_CHAR]
new text[MAX_NUM_OF_CHAR]
new answered_questions[32]
new quiz_file[62]
new g_MyMsgSync
public plugin_init()
{
register_plugin(plugin,version,author)
register_clcmd("say","handle_say")
register_clcmd("say_team","handle_say")
new config[64]
get_configsdir(config,63)
formatex(quiz_file,61,"%s/quiz_file.ini",config)
enabled = register_cvar("quiz_enabled","1")
use_mode = register_cvar("quiz_usemode","0")
if(is_module_loaded("cstrike") != -1)
reward = register_cvar("quiz_reward","2000")
timelimit = register_cvar("quiz_timelimit","120")
min_display = register_cvar("quiz_min_display","20")
max_display = register_cvar("quiz_max_display","50")
display_mode = register_cvar("quiz_display_mode","0")
register_cvar("amx_quiz_version",version,FCVAR_SERVER)
g_MyMsgSync = CreateHudSyncObj()
if(!file_exists(quiz_file))
{
new file = fopen(quiz_file,"wt")
fprintf(file, "; Quiz file^n")
fprintf(file, "; Here goes all questions/answers^n")
fprintf(file, "; Questions/Answers goes like ^"what is 1+1?^" ^"2^"^n")
fclose(file)
}
load_quiz()
pick_question()
set_display_time()
return PLUGIN_CONTINUE
}
public say(id, text_to_say[])
{
//remove_quotes(text_to_say)
if(get_pcvar_num(display_mode) == 0)
{
client_print(id, print_chat, "%s", text_to_say)
}
else if(get_pcvar_num(display_mode) == 1)
{
set_hudmessage(random(255), random(255), random(255), -1.0, 0.37, 0, 6.0, 7.0, 0.1, 0.2)
//show_hudmessage(id, "%s", text_to_say)
ShowSyncHudMsg(id, g_MyMsgSync, "%s", text_to_say)
}
else if(get_pcvar_num(display_mode) == 2)
{
client_print(id, print_chat, "%s", text_to_say)
set_hudmessage(random(255), random(255), random(255), -1.0, 0.37, 0, 6.0, 7.0, 0.1, 0.2)
ShowSyncHudMsg(id, g_MyMsgSync, "%s", text_to_say)
}
return PLUGIN_CONTINUE
}
public load_quiz()
{
if(get_pcvar_num(enabled) < 1)
return PLUGIN_HANDLED
new file = fopen(quiz_file,"rt")
if(!file)
{
server_print("[%s, load_quiz()] Error, File not found!",plugin)
return PLUGIN_HANDLED
}
new f_question[MAX_NUM_OF_CHAR], f_answer[MAX_NUM_OF_CHAR]
new Text[MAX_NUM_OF_CHAR]
while(!feof(file) && num_of_questions < MAX_QUESTIONS)
{
fgets(file, Text, MAX_NUM_OF_CHAR-1)
if( Text[0] == ';' || equal(Text,"") )
continue;
parse(Text, f_question, MAX_NUM_OF_CHAR-1, f_answer, MAX_NUM_OF_CHAR-1)
num_of_questions++
//trim(f_question)
//trim(f_answer)
remove_quotes(f_answer)
Questions[num_of_questions] = f_question
Answers[num_of_questions] = f_answer
}
fclose(file)
if(num_of_questions < 1)
{
server_print("[%s] ERROR! You need more questions, you have %d, you need more then 2",plugin, num_of_questions)
pause("ad")
}
server_print("[%s] Successfully loaded %d questions",plugin,num_of_questions)
return PLUGIN_HANDLED
}
public display_question()
{
new Players[32], playerCount, id
formatex(text, MAX_NUM_OF_CHAR-1,"Question: %s", used_question[0])
if(get_pcvar_num(use_mode) == 0)
{
get_players(Players, playerCount, "b")
for(new i=1;i<playerCount;i++)
{
id = Players[i]
say(id,text)
}
}
else if(get_pcvar_num(use_mode) == 1)
{
get_players(Players, playerCount, "a")
for(new i=1;i<playerCount;i++)
{
id = Players[i]
say(id,text)
}
}
else if(get_pcvar_num(use_mode) == 2)
say(0,text)
set_display_time()
}
public take_new_question()
{
new Players[32], playerCount, id
formatex(text, MAX_NUM_OF_CHAR-1,"[%s] We now passed the time-limit, picking new question...", plugin)
if(get_pcvar_num(use_mode) == 0)
{
get_players(Players, playerCount, "b")
for(new i=1;i<playerCount;i++)
{
id = Players[i]
say(id,text)
}
}
else if(get_pcvar_num(use_mode) == 1)
{
get_players(Players, playerCount, "a")
for(new i=1;i<playerCount;i++)
{
id = Players[i]
say(id,text)
}
}
else if(get_pcvar_num(use_mode) == 2)
say(0,text)
pick_question()
}
public set_timelimit()
{
if( (get_pcvar_num(timelimit) < 1) || (get_pcvar_num(enabled) < 1) )
return PLUGIN_CONTINUE
set_task(float(get_pcvar_num(timelimit)),"take_new_question", 33523)
return PLUGIN_CONTINUE
}
stock set_display_time()
{
if(get_pcvar_num(enabled) < 1)
return PLUGIN_CONTINUE
set_task(random_float(float(get_pcvar_num(min_display)),float(get_pcvar_num(max_display))),"display_question")
return PLUGIN_CONTINUE
}
public pick_question()
{
new number = random_num(1,num_of_questions)
if(alreadyused[number] == true)
set_task(0.1,"pick_question")
//used_question[0] = Questions[number]
//used_answer[0] = Answers[number]
copy(used_question[0], MAX_NUM_OF_CHAR-1, Questions[number])
copy(used_answer[0], MAX_NUM_OF_CHAR-1, Answers[number])
alreadyused[number] = true
set_timelimit()
return PLUGIN_HANDLED
}
give_reward(id, name[])
{
if(get_pcvar_num(use_mode) == 0)
{
new Players[32], playerCount, player
get_players(Players, playerCount, "b")
for(new i=1;i<playerCount;i++)
{
player = Players[i]
if(get_pcvar_num(display_mode) == 0)
{
formatex(text, MAX_NUM_OF_CHAR-1,"%s answered right on the question: %s",name,used_question[0])
say(player, text)
formatex(text, MAX_NUM_OF_CHAR-1,"%s has answered right to %d %s now",name,answered_questions[id], answered_questions[id] == 1 ? "question":"questions")
say(player, text)
}
else if(get_pcvar_num(display_mode) == 1)
{
formatex(text, MAX_NUM_OF_CHAR-1,"%s answered right on the question: %s^n%s has answered right to %d %s now",name,used_question[0],name,answered_questions[id], answered_questions[id] == 1 ? "question":"questions")
say(player, text)
}
}
}
else if(get_pcvar_num(use_mode) == 1)
{
new Players[32], playerCount, player
get_players(Players, playerCount, "a")
for(new i=1;i<playerCount;i++)
{
player = Players[i]
if(get_pcvar_num(display_mode) == 0)
{
formatex(text, MAX_NUM_OF_CHAR-1,"%s answered right on the question: %s",name,used_question[0])
say(player, text)
formatex(text, MAX_NUM_OF_CHAR-1,"%s has answered right to %d %s now",name,answered_questions[id], answered_questions[id] == 1 ? "question":"questions")
say(player, text)
}
else if(get_pcvar_num(display_mode) == 1)
{
formatex(text, MAX_NUM_OF_CHAR-1,"%s answered right on the question: %s^n%s has answered right to %d %s now",name,used_question[0],name,answered_questions[id], answered_questions[id] == 1 ? "question":"questions")
say(player, text)
}
}
}
else if(get_pcvar_num(use_mode) == 2)
{
if(get_pcvar_num(display_mode) == 0)
{
formatex(text, MAX_NUM_OF_CHAR-1,"%s answered right on the question: %s",name,used_question[0])
say(0, text)
formatex(text, MAX_NUM_OF_CHAR-1,"%s has answered right to %d %s now",name,answered_questions[id], answered_questions[id] == 1 ? "question":"questions")
say(0, text)
}
else if(get_pcvar_num(display_mode) == 1)
{
formatex(text, MAX_NUM_OF_CHAR-1,"%s answered right on the question: %s^n%s has answered right to %d %s now",name,used_question[0],name,answered_questions[id], answered_questions[id] == 1 ? "question":"questions")
say(0, text)
}
}
if(is_module_loaded("cstrike") != -1)
{
new R = get_pcvar_num(reward)
formatex(text, MAX_NUM_OF_CHAR-1,"You got %d $ for answering right", R)
say(id, text)
cs_set_user_money(id, cs_get_user_money(id) + R)
}
return PLUGIN_CONTINUE
}
public handle_say(id)
{
if(get_pcvar_num(enabled) < 1)
return PLUGIN_CONTINUE
if( (get_pcvar_num(use_mode) == 0) && (is_user_alive(id)) )
return PLUGIN_CONTINUE
else if( (get_pcvar_num(use_mode) == 1) && (!is_user_alive(id)) )
return PLUGIN_CONTINUE
new Arg[64]
read_args(Arg,63)
if(contain(Arg, used_answer[0]) != -1)
{
answered_questions[id]++
remove_task(33523)
new name[32]
get_user_name(id,name,31)
give_reward(id, name)
pick_question()
}
if(contain(Arg, "/question") != -1)
{
formatex(text, MAX_NUM_OF_CHAR-1,"Question: %s", used_question[0])
say(id, text)
}
return PLUGIN_CONTINUE
}