HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  1. #include <amxmodx>
  2. #include <amxmisc>
  3. #include <cstrike>
  4.  
  5. new plugin[] = "Quiz"
  6. new version[] = "0.6"
  7. new author[] = "Doombringer"
  8.  
  9. new enabled, use_mode, reward, timelimit, min_display, max_display, display_mode
  10.  
  11. #define MAX_QUESTIONS 200
  12. #define MAX_NUM_OF_CHAR 190
  13.  
  14. //#define MIN_TIME 20.0
  15. //#define MAX_TIME 50.0
  16.  
  17.  
  18. new Questions[MAX_QUESTIONS][MAX_NUM_OF_CHAR]
  19. new Answers[MAX_QUESTIONS][MAX_NUM_OF_CHAR]
  20. new bool:alreadyused[MAX_QUESTIONS]
  21. new num_of_questions
  22.  
  23. new used_question[1][MAX_NUM_OF_CHAR]
  24. new used_answer[1][MAX_NUM_OF_CHAR]
  25. new text[MAX_NUM_OF_CHAR]
  26.  
  27. new answered_questions[32]
  28.  
  29. new quiz_file[62]
  30. new g_MyMsgSync
  31.  
  32. public plugin_init()
  33. {
  34. register_plugin(plugin,version,author)
  35.  
  36. register_clcmd("say","handle_say")
  37. register_clcmd("say_team","handle_say")
  38.  
  39. new config[64]
  40. get_configsdir(config,63)
  41.  
  42. formatex(quiz_file,61,"%s/quiz_file.ini",config)
  43.  
  44. enabled = register_cvar("quiz_enabled","1")
  45. use_mode = register_cvar("quiz_usemode","1")
  46.  
  47. if(is_module_loaded("cstrike") != -1)
  48. reward = register_cvar("quiz_reward","3000")
  49.  
  50. timelimit = register_cvar("quiz_timelimit","30")
  51.  
  52. min_display = register_cvar("quiz_min_display","20")
  53. max_display = register_cvar("quiz_max_display","50")
  54. display_mode = register_cvar("quiz_display_mode","0")
  55.  
  56. register_cvar("amx_quiz_version",version,FCVAR_SERVER)
  57.  
  58. g_MyMsgSync = CreateHudSyncObj()
  59.  
  60. if(!file_exists(quiz_file))
  61. {
  62. new file = fopen(quiz_file,"wt")
  63. fprintf(file, "; Quiz file^n")
  64. fprintf(file, "; Here goes all questions/answers^n")
  65. fprintf(file, "; Questions/Answers goes like ^"what is 1+1?^" ^"2^"^n")
  66. fclose(file)
  67. }
  68.  
  69. load_quiz()
  70.  
  71. pick_question()
  72.  
  73. set_display_time()
  74.  
  75. return PLUGIN_CONTINUE
  76. }
  77.  
  78. public say(id, text_to_say[])
  79. {
  80. //remove_quotes(text_to_say)
  81.  
  82. if(get_pcvar_num(display_mode) == 0)
  83. {
  84. client_print(id, print_chat, "%s", text_to_say)
  85. }
  86. else if(get_pcvar_num(display_mode) == 1)
  87. {
  88. set_hudmessage(random(255), random(255), random(255), -1.0, 0.37, 0, 6.0, 7.0, 0.1, 0.2)
  89. //show_hudmessage(id, "%s", text_to_say)
  90. ShowSyncHudMsg(id, g_MyMsgSync, "%s", text_to_say)
  91. }
  92. else if(get_pcvar_num(display_mode) == 2)
  93. {
  94. client_print(id, print_chat, "%s", text_to_say)
  95.  
  96. set_hudmessage(random(255), random(255), random(255), -1.0, 0.37, 0, 6.0, 7.0, 0.1, 0.2)
  97. ShowSyncHudMsg(id, g_MyMsgSync, "%s", text_to_say)
  98. }
  99.  
  100. return PLUGIN_CONTINUE
  101. }
  102.  
  103.  
  104. public load_quiz()
  105. {
  106. if(get_pcvar_num(enabled) < 1)
  107. return PLUGIN_HANDLED
  108.  
  109. new file = fopen(quiz_file,"rt")
  110.  
  111. if(!file)
  112. {
  113. server_print("[%s, load_quiz()] Error, File not found!",plugin)
  114. return PLUGIN_HANDLED
  115. }
  116.  
  117. new f_question[MAX_NUM_OF_CHAR], f_answer[MAX_NUM_OF_CHAR]
  118.  
  119. new Text[MAX_NUM_OF_CHAR]
  120.  
  121. while(!feof(file) && num_of_questions < MAX_QUESTIONS)
  122. {
  123. fgets(file, Text, MAX_NUM_OF_CHAR-1)
  124.  
  125. if( Text[0] == ';' || equal(Text,"") )
  126. continue;
  127.  
  128. parse(Text, f_question, MAX_NUM_OF_CHAR-1, f_answer, MAX_NUM_OF_CHAR-1)
  129.  
  130. num_of_questions++
  131.  
  132. //trim(f_question)
  133. //trim(f_answer)
  134.  
  135. remove_quotes(f_answer)
  136.  
  137. Questions[num_of_questions] = f_question
  138. Answers[num_of_questions] = f_answer
  139. }
  140.  
  141. fclose(file)
  142.  
  143. if(num_of_questions < 1)
  144. {
  145. server_print("[%s] ERROR! You need more questions, you have %d, you need more then 2",plugin, num_of_questions)
  146. pause("ad")
  147. }
  148.  
  149. server_print("[%s] Successfully loaded %d questions",plugin,num_of_questions)
  150.  
  151. return PLUGIN_HANDLED
  152. }
  153.  
  154. public display_question()
  155. {
  156. new Players[32], playerCount, id
  157.  
  158. formatex(text, MAX_NUM_OF_CHAR-1,"Kerdes: %s (Ido a valaszra: 30mp)", used_question[0])
  159.  
  160. if(get_pcvar_num(use_mode) == 0)
  161. {
  162. get_players(Players, playerCount, "b")
  163.  
  164. for(new i=1;i<playerCount;i++)
  165. {
  166. id = Players[i]
  167.  
  168. say(id,text)
  169. }
  170. }
  171. else if(get_pcvar_num(use_mode) == 1)
  172. {
  173. get_players(Players, playerCount, "a")
  174.  
  175. for(new i=1;i<playerCount;i++)
  176. {
  177. id = Players[i]
  178.  
  179. say(id,text)
  180. }
  181. }
  182. else if(get_pcvar_num(use_mode) == 2)
  183. say(0,text)
  184.  
  185. set_display_time()
  186. }
  187.  
  188. public take_new_question()
  189. {
  190. new Players[32], playerCount, id
  191.  
  192. formatex(text, MAX_NUM_OF_CHAR-1,"[%s] Letelet az ido-hatar, ujkerdes kovetkezik...", plugin)
  193.  
  194. if(get_pcvar_num(use_mode) == 0)
  195. {
  196. get_players(Players, playerCount, "b")
  197.  
  198. for(new i=1;i<playerCount;i++)
  199. {
  200. id = Players[i]
  201.  
  202. say(id,text)
  203. }
  204. }
  205. else if(get_pcvar_num(use_mode) == 1)
  206. {
  207. get_players(Players, playerCount, "a")
  208.  
  209. for(new i=1;i<playerCount;i++)
  210. {
  211. id = Players[i]
  212.  
  213. say(id,text)
  214. }
  215. }
  216. else if(get_pcvar_num(use_mode) == 2)
  217. say(0,text)
  218.  
  219. pick_question()
  220. }
  221.  
  222. public set_timelimit()
  223. {
  224. if( (get_pcvar_num(timelimit) < 1) || (get_pcvar_num(enabled) < 1) )
  225. return PLUGIN_CONTINUE
  226.  
  227. set_task(float(get_pcvar_num(timelimit)),"take_new_question", 33523)
  228.  
  229. return PLUGIN_CONTINUE
  230. }
  231.  
  232. stock set_display_time()
  233. {
  234. if(get_pcvar_num(enabled) < 1)
  235. return PLUGIN_CONTINUE
  236.  
  237. set_task(random_float(float(get_pcvar_num(min_display)),float(get_pcvar_num(max_display))),"display_question")
  238.  
  239. return PLUGIN_CONTINUE
  240. }
  241.  
  242. public pick_question()
  243. {
  244. new number = random_num(1,num_of_questions)
  245.  
  246. if(alreadyused[number] == true)
  247. set_task(0.1,"pick_question")
  248.  
  249. //used_question[0] = Questions[number]
  250. //used_answer[0] = Answers[number]
  251.  
  252. copy(used_question[0], MAX_NUM_OF_CHAR-1, Questions[number])
  253. copy(used_answer[0], MAX_NUM_OF_CHAR-1, Answers[number])
  254.  
  255. alreadyused[number] = true
  256.  
  257. set_timelimit()
  258.  
  259. return PLUGIN_HANDLED
  260. }
  261.  
  262. give_reward(id, name[])
  263. {
  264. if(get_pcvar_num(use_mode) == 0)
  265. {
  266. new Players[32], playerCount, player
  267.  
  268. get_players(Players, playerCount, "b")
  269.  
  270. for(new i=1;i<playerCount;i++)
  271. {
  272. player = Players[i]
  273.  
  274. if(get_pcvar_num(display_mode) == 0)
  275. {
  276. formatex(text, MAX_NUM_OF_CHAR-1,"%s valasztott kerdese: %s",name,used_question[0])
  277. say(player, text)
  278.  
  279. formatex(text, MAX_NUM_OF_CHAR-1,"%s valasza erre %d %s most",name,answered_questions[id], answered_questions[id] == 1 ? "question":"questions")
  280. say(player, text)
  281. }
  282. else if(get_pcvar_num(display_mode) == 1)
  283. {
  284. formatex(text, MAX_NUM_OF_CHAR-1,"%s valasztott kerdese: %s^n%s valasza erre %d %s most",name,used_question[0],name,answered_questions[id], answered_questions[id] == 1 ? "question":"questions")
  285. say(player, text)
  286. }
  287. }
  288. }
  289. else if(get_pcvar_num(use_mode) == 1)
  290. {
  291. new Players[32], playerCount, player
  292.  
  293. get_players(Players, playerCount, "a")
  294.  
  295. for(new i=1;i<playerCount;i++)
  296. {
  297. player = Players[i]
  298.  
  299. if(get_pcvar_num(display_mode) == 0)
  300. {
  301. formatex(text, MAX_NUM_OF_CHAR-1,"%s valasztott kerdese: %s",name,used_question[0])
  302. say(player, text)
  303.  
  304. formatex(text, MAX_NUM_OF_CHAR-1,"%s valasza erre %d %s most",name,answered_questions[id], answered_questions[id] == 1 ? "question":"questions")
  305. say(player, text)
  306. }
  307. else if(get_pcvar_num(display_mode) == 1)
  308. {
  309. formatex(text, MAX_NUM_OF_CHAR-1,"%s valasztott kerdese: %s^n%s valasza erre %d %s most",name,used_question[0],name,answered_questions[id], answered_questions[id] == 1 ? "question":"questions")
  310. say(player, text)
  311. }
  312. }
  313. }
  314. else if(get_pcvar_num(use_mode) == 2)
  315. {
  316. if(get_pcvar_num(display_mode) == 0)
  317. {
  318. formatex(text, MAX_NUM_OF_CHAR-1,"%s valasztott kerdese: %s",name,used_question[0])
  319. say(0, text)
  320.  
  321. formatex(text, MAX_NUM_OF_CHAR-1,"%s valasza erre %d %s most",name,answered_questions[id], answered_questions[id] == 1 ? "question":"questions")
  322. say(0, text)
  323. }
  324. else if(get_pcvar_num(display_mode) == 1)
  325. {
  326. formatex(text, MAX_NUM_OF_CHAR-1,"%s valasztott kerdese: %s^n%s valasza erre %d %s most",name,used_question[0],name,answered_questions[id], answered_questions[id] == 1 ? "question":"questions")
  327. say(0, text)
  328. }
  329. }
  330.  
  331. if(is_module_loaded("cstrike") != -1)
  332. {
  333. new R = get_pcvar_num(reward)
  334. formatex(text, MAX_NUM_OF_CHAR-1,"Kaptal %d $-t a helyes valaszert!", R)
  335. say(id, text)
  336.  
  337. cs_set_user_money(id, cs_get_user_money(id) + R)
  338. }
  339.  
  340. return PLUGIN_CONTINUE
  341. }
  342.  
  343. public handle_say(id)
  344. {
  345. if(get_pcvar_num(enabled) < 1)
  346. return PLUGIN_CONTINUE
  347.  
  348. if( (get_pcvar_num(use_mode) == 0) && (is_user_alive(id)) )
  349. return PLUGIN_CONTINUE
  350.  
  351. else if( (get_pcvar_num(use_mode) == 1) && (!is_user_alive(id)) )
  352. return PLUGIN_CONTINUE
  353.  
  354. new Arg[64]
  355.  
  356. read_args(Arg,63)
  357.  
  358. if(contain(Arg, used_answer[0]) != -1)
  359. {
  360. answered_questions[id]++
  361.  
  362. remove_task(33523)
  363.  
  364. new name[32]
  365. get_user_name(id,name,31)
  366.  
  367. give_reward(id, name)
  368. pick_question()
  369. }
  370.  
  371. if(contain(Arg, "/quiz") != -1)
  372. {
  373. formatex(text, MAX_NUM_OF_CHAR-1,"Kerdes: %s (Ido a valaszra: 30mp)", used_question[0])
  374. say(id, text)
  375. }
  376.  
  377. return PLUGIN_CONTINUE
  378. }
  379.