HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  1. #include <amxmodx>
  2. #include <amxmisc>
  3. #include <fakemeta>
  4.  
  5. #define PLUGIN "OX Event"
  6. #define VERSION "1.0"
  7. #define AUTHOR "Dooz"
  8.  
  9. #pragma semicolon 1
  10.  
  11. #define Prefix "rwT"
  12. #define Permission ADMIN_BAN
  13.  
  14. 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;
  15.  
  16. new g_Question[64], g_Answer[2][32], g_Good_Answer, g_Question_In_Progress, g_Random_Question_Num, g_MaxPlayers, g_Timer,
  17. Array:g_Questions, g_ArraySize, cvar_count_time, cvar_random_question_again;
  18.  
  19. enum _:QuestionData{
  20. Question[64],
  21. AnswerO[32],
  22. AnswerX[32],
  23. GoodAnswer[32],
  24. Used
  25. }
  26.  
  27. //Kérdések betöltése
  28. public plugin_precache(){
  29. new Data[QuestionData], Line[128], Folder[48], Question_File[64], Len, String[4][64];
  30.  
  31. g_Questions = ArrayCreate(QuestionData);
  32.  
  33. get_configsdir(Folder, 47);
  34. format(Question_File, 63, "%s/oxevent.ini", Folder);
  35.  
  36. if(file_exists(Question_File)){
  37. for(new i; i < file_size(Question_File, 1); i++){
  38.  
  39. read_file(Question_File, i, Line, 127, Len);
  40.  
  41. if(strlen(Line) < 5 || Line[0] == ';')
  42. continue;
  43.  
  44. parse(Line, String[0], 63, String[1], 63, String[2], 63, String[3], 63);
  45.  
  46. copy(Data[Question], 63, String[0]);
  47. copy(Data[AnswerO], 63, String[1]);
  48. copy(Data[AnswerX], 63, String[2]);
  49. copy(Data[GoodAnswer], 63, String[3]);
  50. Data[Used] = 0;
  51.  
  52. ArrayPushArray(g_Questions, Data);
  53. }
  54. g_ArraySize = ArraySize(g_Questions);
  55. }
  56. else{
  57. set_fail_state("[HIBA] Nem talalhato az oxevent.ini fajl!");
  58. return;
  59. }
  60. }
  61.  
  62. public plugin_init(){
  63. register_plugin(PLUGIN, VERSION, AUTHOR);
  64.  
  65. register_clcmd("oxeventmenu", "cmdEvent_Menu", Permission);
  66. register_clcmd("Question", "cmdQuestion");
  67. register_clcmd("Answer1", "cmdAnswer1");
  68. register_clcmd("Answer2", "cmdAnswer2");
  69. register_clcmd("GoodAnswer", "cmdGoodAnswer");
  70.  
  71. cvar_count_time = register_cvar("ox_count_time", "10");
  72. cvar_random_question_again = register_cvar("ox_random_question_again", "0");
  73.  
  74. register_logevent("Event_New_Round", 2, "1=Round_Start");
  75.  
  76. register_menu("Event Menu", KEYSMENU, "Event_Menu_Handler");
  77.  
  78. g_MaxPlayers = get_maxplayers();
  79. }
  80.  
  81. //Új körben újra lehet használni a véletlenszerü kérdéseket
  82. public Event_New_Round(){
  83. new Data[QuestionData];
  84. for(new i; i < g_ArraySize; i++){
  85. ArrayGetArray(g_Questions, i, Data);
  86. Data[Used] = 0;
  87. ArraySetArray(g_Questions, i, Data);
  88. }
  89. }
  90.  
  91. public cmdEvent_Menu(id){
  92. g_Question = "";
  93. g_Answer[0] = "";
  94. g_Answer[1] = "";
  95. g_Good_Answer = -1;
  96. Event_Menu(id);
  97. }
  98.  
  99. Event_Menu(id){
  100. new Menu[512], Len;
  101. Len += formatex(Menu[Len], charsmax(Menu) - Len, "\r%s \w| \dOX Event^n^n", Prefix);
  102.  
  103. Len += formatex(Menu[Len], charsmax(Menu) - Len, "\r1.\w Kérdés: \r%s^n", g_Question);
  104. Len += formatex(Menu[Len], charsmax(Menu) - Len, "\r2.\w O: \r%s^n", g_Answer[0]);
  105. Len += formatex(Menu[Len], charsmax(Menu) - Len, "\r3.\w X: \r%s^n", g_Answer[1]);
  106.  
  107. if(g_Good_Answer == -1)
  108. Len += formatex(Menu[Len], charsmax(Menu) - Len, "\r4.\w Helyes válasz:^n^n");
  109. else
  110. Len += formatex(Menu[Len], charsmax(Menu) - Len, "\r4.\w Helyes válasz: \r%s^n^n", g_Good_Answer ? "O" : "X");
  111.  
  112. Len += formatex(Menu[Len], charsmax(Menu) - Len, "\r5.\w Véletlenszerü kérdés^n^n");
  113.  
  114. Len += formatex(Menu[Len], charsmax(Menu) - Len, "\r6.\w Kérdés indítása^n");
  115.  
  116. Len += formatex(Menu[Len], charsmax(Menu) - Len, "^n\r0.\w Kilépés");
  117.  
  118. set_pdata_int(id, 205, 0);
  119. show_menu(id, KEYSMENU, Menu, -1, "Event Menu");
  120.  
  121. return PLUGIN_HANDLED;
  122. }
  123.  
  124. public Event_Menu_Handler(id, key){
  125. switch(key){
  126. case 0:{
  127. Event_Menu(id);
  128. client_cmd(id, "messagemode Question");
  129. }
  130. case 1:{
  131. Event_Menu(id);
  132. client_cmd(id, "messagemode Answer1");
  133. }
  134. case 2:{
  135. Event_Menu(id);
  136. client_cmd(id, "messagemode Answer2");
  137. }
  138. case 3:{
  139. Event_Menu(id);
  140. client_cmd(id, "messagemode GoodAnswer");
  141. }
  142. case 4: {
  143. if(Remained_Random_Question())
  144. RandomQuestion(id);
  145. else{
  146. client_printcolor(id, "!g[%s]!t »!n Nem található kérdés vagy már használva volt az összes!", Prefix);
  147. return PLUGIN_HANDLED;
  148. }
  149. }
  150. case 5:{
  151. if(g_Question_In_Progress || equali(g_Question, "") || equali(g_Answer[0], "") || equali(g_Answer[1], "") || g_Good_Answer == -1)
  152. return PLUGIN_HANDLED;
  153.  
  154. g_Timer = get_pcvar_num(cvar_count_time);
  155. g_Question_In_Progress = 1;
  156.  
  157. if(!get_pcvar_num(cvar_random_question_again)){
  158. new Data[QuestionData];
  159. ArrayGetArray(g_Questions, g_Random_Question_Num, Data);
  160. Data[Used] = 1;
  161. ArraySetArray(g_Questions, g_Random_Question_Num, Data);
  162. }
  163.  
  164. Start_Question();
  165. }
  166. }
  167.  
  168. return PLUGIN_HANDLED;
  169. }
  170.  
  171. public Start_Question(){
  172. if(g_Timer > 1){
  173. g_Timer --;
  174. set_hudmessage(255, 255, 255, -1.0, 0.17, 0, 6.0, 1.0);
  175. 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);
  176. set_task(1.0, "Start_Question");
  177. }
  178. else
  179. End_Question();
  180. }
  181.  
  182. public End_Question(){
  183. g_Question_In_Progress = 0;
  184. set_hudmessage(255, 255, 255, -1.0, 0.17, 0, 6.0, 3.0);
  185. show_hudmessage(0, "A helyes válasz:^n%s", g_Good_Answer ? g_Answer[0] : g_Answer[1]);
  186. Check_Players_Answer();
  187. }
  188.  
  189. public Check_Players_Answer(){
  190. new Float:Origin[3];
  191. for(new id = 1; id < g_MaxPlayers; id++){
  192. if(!is_user_connected(id))
  193. continue;
  194.  
  195. pev(id, pev_origin, Origin);
  196.  
  197. if(Origin[0]<= 300.0 && Origin[0]>= -873.0 && Origin[1] >= -162.0 && Origin[1] <= 1033.0 && g_Good_Answer == 1)
  198. client_printcolor(id, "!g[%s]!t »!n Helyes válasz!", Prefix);
  199. else{
  200. if(Origin[0]<= 300.0 && Origin[0]>= -873.0 && Origin[1] >= 1123.0 && Origin[1] <= 2194.0 && g_Good_Answer == 0)
  201. client_printcolor(id, "!g[%s]!t »!n Helyes válasz!", Prefix);
  202. else
  203. if(Origin[0]<= 300.0 && Origin[0]>= -873.0 && Origin[1] >= -162.0 && Origin[1] <= 2194.0){
  204. client_printcolor(id, "!g[%s]!t »!n Kiestél, mivel nem döntöttél vagy a válaszod helytelen volt!", Prefix);
  205. Origin[0] = 679.0; Origin[1] = 1094.0; Origin[2] = -265.0;
  206. set_pev(id, pev_origin, Origin);
  207. }
  208. }
  209. }
  210. }
  211.  
  212. public cmdQuestion(id){
  213. read_args(g_Question, 63);
  214. remove_quotes(g_Question);
  215. Event_Menu(id);
  216. }
  217.  
  218. public cmdAnswer1(id){
  219. read_args(g_Answer[0], 31);
  220. remove_quotes(g_Answer[0]);
  221. Event_Menu(id);
  222. }
  223.  
  224. public cmdAnswer2(id){
  225. read_args(g_Answer[1], 31);
  226. remove_quotes(g_Answer[1]);
  227. Event_Menu(id);
  228. }
  229.  
  230. public cmdGoodAnswer(id){
  231. new Answer[32];
  232. read_args(Answer, 31);
  233. remove_quotes(Answer);
  234.  
  235. if(equali(Answer, "O"))
  236. g_Good_Answer = 1;
  237. else if(equali(Answer, "X"))
  238. g_Good_Answer = 0;
  239. else {
  240. client_printcolor(id, "!g[%s]!t »!n A helyes válasz csak !tO!n vagy !tX!n lehet!", Prefix);
  241. client_cmd(id, "messagemode GoodAnswer");
  242. }
  243. Event_Menu(id);
  244. }
  245.  
  246. public RandomQuestion(id){
  247. new Data[QuestionData];
  248.  
  249. do{
  250. g_Random_Question_Num = random_num(0,g_ArraySize-1);
  251. ArrayGetArray(g_Questions, g_Random_Question_Num, Data);
  252. }while(Data[Used]);
  253.  
  254. if(equali(Data[GoodAnswer], "O"))
  255. g_Good_Answer = 1;
  256. else if(equali(Data[GoodAnswer], "X"))
  257. g_Good_Answer = 0;
  258. else {
  259. client_printcolor(id, "!g[%s]!t »!n Érvénytelen kérdés! Ellenőrizd az !toxevent.ini!n fájlt!", Prefix);
  260. return;
  261. }
  262.  
  263. copy(g_Question, 63, Data[Question]);
  264. copy(g_Answer[0], 31, Data[AnswerO]);
  265. copy(g_Answer[1], 31, Data[AnswerX]);
  266. Event_Menu(id);
  267. }
  268.  
  269. stock Remained_Random_Question(){
  270. new Data[QuestionData];
  271. for(new i; i < g_ArraySize; i++){
  272. ArrayGetArray(g_Questions, i, Data);
  273. if(!Data[Used])
  274. return 1;
  275. }
  276. return 0;
  277. }
  278.  
  279. stock client_printcolor(const id, const input[], any:...){
  280. new count = 1, players[32];
  281. static msg[191];
  282. vformat(msg, 190, input, 3);
  283.  
  284. replace_all(msg, 190, "!g", "^4");
  285. replace_all(msg, 190, "!n", "^1");
  286. replace_all(msg, 190, "!t", "^3");
  287.  
  288. if(id)
  289. players[0] = id;
  290. else
  291. get_players(players, count, "ch");
  292.  
  293. for(new i; i < count; i++){
  294. if(is_user_connected(id)){
  295. message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i]);
  296. write_byte(players[i]);
  297. write_string(msg);
  298. message_end();
  299. }
  300. }
  301.  
  302. return PLUGIN_HANDLED;
  303. }
  304.  
  305. public plugin_end()
  306. ArrayDestroy(g_Questions);