#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#define PLUGIN "OX Event"
#define VERSION "1.0"
#define AUTHOR "Dooz"
#pragma semicolon 1
#define Prefix "rwT"
#define Permission ADMIN_BAN
const KEYSMENU = MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4|MENU_KEY_5|MENU_KEY_6|MENU_KEY_7|MENU_KEY_8|MENU_KEY_9|MENU_KEY_0;
new g_Question[64], g_Answer[2][32], g_Good_Answer, g_Question_In_Progress, g_Random_Question_Num, g_MaxPlayers, g_Timer,
Array:g_Questions, g_ArraySize, cvar_count_time, cvar_random_question_again;
enum _:QuestionData{
Question[64],
AnswerO[32],
AnswerX[32],
GoodAnswer[32],
Used
}
//Kérdések betöltése
public plugin_precache(){
new Data[QuestionData], Line[128], Folder[48], Question_File[64], Len, String[4][64];
g_Questions = ArrayCreate(QuestionData);
get_configsdir(Folder, 47);
format(Question_File, 63, "%s/oxevent.ini", Folder);
if(file_exists(Question_File)){
for(new i; i < file_size(Question_File, 1); i++){
read_file(Question_File, i, Line, 127, Len);
if(strlen(Line) < 5 || Line[0] == ';')
continue;
parse(Line, String[0], 63, String[1], 63, String[2], 63, String[3], 63);
copy(Data[Question], 63, String[0]);
copy(Data[AnswerO], 63, String[1]);
copy(Data[AnswerX], 63, String[2]);
copy(Data[GoodAnswer], 63, String[3]);
Data[Used] = 0;
ArrayPushArray(g_Questions, Data);
}
g_ArraySize = ArraySize(g_Questions);
}
else{
set_fail_state("[HIBA] Nem talalhato az oxevent.ini fajl!");
return;
}
}
public plugin_init(){
register_plugin(PLUGIN, VERSION, AUTHOR);
register_clcmd("oxeventmenu", "cmdEvent_Menu", Permission);
register_clcmd("Question", "cmdQuestion");
register_clcmd("Answer1", "cmdAnswer1");
register_clcmd("Answer2", "cmdAnswer2");
register_clcmd("GoodAnswer", "cmdGoodAnswer");
cvar_count_time = register_cvar("ox_count_time", "10");
cvar_random_question_again = register_cvar("ox_random_question_again", "0");
register_logevent("Event_New_Round", 2, "1=Round_Start");
register_menu("Event Menu", KEYSMENU, "Event_Menu_Handler");
g_MaxPlayers = get_maxplayers();
}
//Új körben újra lehet használni a véletlenszerü kérdéseket
public Event_New_Round(){
new Data[QuestionData];
for(new i; i < g_ArraySize; i++){
ArrayGetArray(g_Questions, i, Data);
Data[Used] = 0;
ArraySetArray(g_Questions, i, Data);
}
}
public cmdEvent_Menu(id){
g_Question = "";
g_Answer[0] = "";
g_Answer[1] = "";
g_Good_Answer = -1;
Event_Menu(id);
}
Event_Menu(id){
new Menu[512], Len;
Len += formatex(Menu[Len], charsmax(Menu) - Len, "\r%s \w| \dOX Event^n^n", Prefix);
Len += formatex(Menu[Len], charsmax(Menu) - Len, "\r1.\w Kérdés: \r%s^n", g_Question);
Len += formatex(Menu[Len], charsmax(Menu) - Len, "\r2.\w O: \r%s^n", g_Answer[0]);
Len += formatex(Menu[Len], charsmax(Menu) - Len, "\r3.\w X: \r%s^n", g_Answer[1]);
if(g_Good_Answer == -1)
Len += formatex(Menu[Len], charsmax(Menu) - Len, "\r4.\w Helyes válasz:^n^n");
else
Len += formatex(Menu[Len], charsmax(Menu) - Len, "\r4.\w Helyes válasz: \r%s^n^n", g_Good_Answer ? "O" : "X");
Len += formatex(Menu[Len], charsmax(Menu) - Len, "\r5.\w Véletlenszerü kérdés^n^n");
Len += formatex(Menu[Len], charsmax(Menu) - Len, "\r6.\w Kérdés indítása^n");
Len += formatex(Menu[Len], charsmax(Menu) - Len, "^n\r0.\w Kilépés");
set_pdata_int(id, 205, 0);
show_menu(id, KEYSMENU, Menu, -1, "Event Menu");
return PLUGIN_HANDLED;
}
public Event_Menu_Handler(id, key){
switch(key){
case 0:{
Event_Menu(id);
client_cmd(id, "messagemode Question");
}
case 1:{
Event_Menu(id);
client_cmd(id, "messagemode Answer1");
}
case 2:{
Event_Menu(id);
client_cmd(id, "messagemode Answer2");
}
case 3:{
Event_Menu(id);
client_cmd(id, "messagemode GoodAnswer");
}
case 4: {
if(Remained_Random_Question())
RandomQuestion(id);
else{
client_printcolor(id, "!g[%s]!t »!n Nem található kérdés vagy már használva volt az összes!", Prefix);
return PLUGIN_HANDLED;
}
}
case 5:{
if(g_Question_In_Progress || equali(g_Question, "") || equali(g_Answer[0], "") || equali(g_Answer[1], "") || g_Good_Answer == -1)
return PLUGIN_HANDLED;
g_Timer = get_pcvar_num(cvar_count_time);
g_Question_In_Progress = 1;
if(!get_pcvar_num(cvar_random_question_again)){
new Data[QuestionData];
ArrayGetArray(g_Questions, g_Random_Question_Num, Data);
Data[Used] = 1;
ArraySetArray(g_Questions, g_Random_Question_Num, Data);
}
Start_Question();
}
}
return PLUGIN_HANDLED;
}
public Start_Question(){
if(g_Timer > 1){
g_Timer --;
set_hudmessage(255, 255, 255, -1.0, 0.17, 0, 6.0, 1.0);
show_hudmessage(0, "Kérdés: %s^nO: %s^nX: %s^nA gondolkodásra még van %d másodpercetek!", g_Question, g_Answer[0], g_Answer[1], g_Timer);
set_task(1.0, "Start_Question");
}
else
End_Question();
}
public End_Question(){
g_Question_In_Progress = 0;
set_hudmessage(255, 255, 255, -1.0, 0.17, 0, 6.0, 3.0);
show_hudmessage(0, "A helyes válasz:^n%s", g_Good_Answer ? g_Answer[0] : g_Answer[1]);
Check_Players_Answer();
}
public Check_Players_Answer(){
new Float:Origin[3];
for(new id = 1; id < g_MaxPlayers; id++){
if(!is_user_connected(id))
continue;
pev(id, pev_origin, Origin);
if(Origin[0]<= 300.0 && Origin[0]>= -873.0 && Origin[1] >= -162.0 && Origin[1] <= 1033.0 && g_Good_Answer == 1)
client_printcolor(id, "!g[%s]!t »!n Helyes válasz!", Prefix);
else{
if(Origin[0]<= 300.0 && Origin[0]>= -873.0 && Origin[1] >= 1123.0 && Origin[1] <= 2194.0 && g_Good_Answer == 0)
client_printcolor(id, "!g[%s]!t »!n Helyes válasz!", Prefix);
else
if(Origin[0]<= 300.0 && Origin[0]>= -873.0 && Origin[1] >= -162.0 && Origin[1] <= 2194.0){
client_printcolor(id, "!g[%s]!t »!n Kiestél, mivel nem döntöttél vagy a válaszod helytelen volt!", Prefix);
Origin[0] = 679.0; Origin[1] = 1094.0; Origin[2] = -265.0;
set_pev(id, pev_origin, Origin);
}
}
}
}
public cmdQuestion(id){
read_args(g_Question, 63);
remove_quotes(g_Question);
Event_Menu(id);
}
public cmdAnswer1(id){
read_args(g_Answer[0], 31);
remove_quotes(g_Answer[0]);
Event_Menu(id);
}
public cmdAnswer2(id){
read_args(g_Answer[1], 31);
remove_quotes(g_Answer[1]);
Event_Menu(id);
}
public cmdGoodAnswer(id){
new Answer[32];
read_args(Answer, 31);
remove_quotes(Answer);
if(equali(Answer, "O"))
g_Good_Answer = 1;
else if(equali(Answer, "X"))
g_Good_Answer = 0;
else {
client_printcolor(id, "!g[%s]!t »!n A helyes válasz csak !tO!n vagy !tX!n lehet!", Prefix);
client_cmd(id, "messagemode GoodAnswer");
}
Event_Menu(id);
}
public RandomQuestion(id){
new Data[QuestionData];
do{
g_Random_Question_Num = random_num(0,g_ArraySize-1);
ArrayGetArray(g_Questions, g_Random_Question_Num, Data);
}while(Data[Used]);
if(equali(Data[GoodAnswer], "O"))
g_Good_Answer = 1;
else if(equali(Data[GoodAnswer], "X"))
g_Good_Answer = 0;
else {
client_printcolor(id, "!g[%s]!t »!n Érvénytelen kérdés! Ellenőrizd az !toxevent.ini!n fájlt!", Prefix);
return;
}
copy(g_Question, 63, Data[Question]);
copy(g_Answer[0], 31, Data[AnswerO]);
copy(g_Answer[1], 31, Data[AnswerX]);
Event_Menu(id);
}
stock Remained_Random_Question(){
new Data[QuestionData];
for(new i; i < g_ArraySize; i++){
ArrayGetArray(g_Questions, i, Data);
if(!Data[Used])
return 1;
}
return 0;
}
stock client_printcolor(const id, const input[], any:...){
new count = 1, players[32];
static msg[191];
vformat(msg, 190, input, 3);
replace_all(msg, 190, "!g", "^4");
replace_all(msg, 190, "!n", "^1");
replace_all(msg, 190, "!t", "^3");
if(id)
players[0] = id;
else
get_players(players, count, "ch");
for(new i; i < count; i++){
if(is_user_connected(id)){
message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i]);
write_byte(players[i]);
write_string(msg);
message_end();
}
}
return PLUGIN_HANDLED;
}
public plugin_end()
ArrayDestroy(g_Questions);