Advertisement
Khivory

Evento Reação

Feb 25th, 2020
321
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.13 KB | None | 0 0
  1. // ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ //
  2. // -- Créditos • Khivory -------------------------------------------------------------------------------------------------------------------------------------------------------- //
  3. // ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ //
  4.  
  5.  
  6. #include <a_samp>
  7. #include <math>
  8. #include <zcmd>
  9.  
  10.  
  11. // ---------------------------------------- //
  12. // -- Defines ----------------------------- //
  13.  
  14.  
  15. #define D_REACTION_EVENT 5000
  16. #define D_REACTION_EVENT_DIFFICULTY 5001
  17.  
  18. // ----- //
  19.  
  20. #define COLOR_REACTION_EVENT FF0066
  21. #define MAXIMUM_REWARD_REACTION_EVENT 750
  22. #define INTERVAL_REASON_EVENT 60 /*- Tempo em Segundos -*/
  23.  
  24. // ----- //
  25.  
  26. #define RANDOM_NUMBER_REASON_EVENT (1 * (InfoReaction[DIFFICULTY_REACTION] + 1) * 25) + random(((InfoReaction[DIFFICULTY_REACTION] + 1) * 250) - (1 * (InfoReaction[DIFFICULTY_REACTION] + 1) * 25))
  27. #define RANDOM_REWARD_REASON_EVENT (1 * (InfoReaction[DIFFICULTY_REACTION] + 1) * 15) + random(((InfoReaction[DIFFICULTY_REACTION] + 1) * 150) - (1 * (InfoReaction[DIFFICULTY_REACTION] + 1) * 15))
  28.  
  29.  
  30. // ---------------------------------------- //
  31. // -- Variáveis --------------------------- //
  32.  
  33.  
  34. static gStr[128],
  35. gString[256];
  36.  
  37. // ----- //
  38.  
  39. static TIMER_REACTION_EVENT;
  40.  
  41. // ----- //
  42.  
  43. static pNome[MAX_PLAYERS][30];
  44.  
  45.  
  46. // ---------------------------------------- //
  47. // -- Enums & Arrays ---------------------- //
  48.  
  49.  
  50. enum Enum_InfoReaction {
  51. CATEGORY_REACTION,
  52. DIFFICULTY_REACTION,
  53. ANSWERED_REACTION,
  54. REWARD_REACTION,
  55. CODE_REACTION[50],
  56. RESULT_REACTION[20],
  57. }
  58.  
  59. // ----- //
  60.  
  61. static InfoReaction[Enum_InfoReaction];
  62.  
  63.  
  64. // -------------------- //
  65. // -------------------- //
  66.  
  67.  
  68. enum _:STATES_EVENT {
  69. STOPPED_EVENT,
  70. CALCULATIONS_EVENT,
  71. CHARACTERS_EVENT,
  72. }
  73.  
  74. // ----- //
  75.  
  76. enum _:STEPS_EVENT {
  77. STEP_NEW_CHALLENGE,
  78. STEP_INTERVAL_CHALLENGE,
  79. }
  80.  
  81. // ----- //
  82.  
  83. enum _:DIFFICULTIES_EVENT {
  84. VERY_EASY,
  85. EASY,
  86. MEDIUM,
  87. HARD,
  88. VERY_HARD,
  89. }
  90.  
  91.  
  92. // -------------------- //
  93. // -------------------- //
  94.  
  95.  
  96. static const InfoAlfabeto[1 + ('z' - 'a')] =
  97. {'a', 'b', ...};
  98.  
  99. // ----- //
  100.  
  101. static const InfoNumeros[1 + ('9' - '0')] =
  102. {'0', '1', ...};
  103.  
  104. // ----- //
  105.  
  106. static const InfoOperations[][] =
  107. {" + ", " - ", " * ", " / "};
  108.  
  109. // ----- //
  110.  
  111. static const InfoDifficulties[][] =
  112. {"Muito Fácil", "Fácil", "Médio", "Difícil", "Muito Difícil"};
  113.  
  114.  
  115. main() {
  116. printf("Script by Khivory");
  117. }
  118.  
  119.  
  120. // -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- //
  121. // -- Publics --------------------------------------------------------------------------------------------------------------------------------------------------------------------- //
  122.  
  123. public OnGameModeInit() {
  124. InfoReaction[DIFFICULTY_REACTION] = MEDIUM;
  125. return true;
  126. }
  127.  
  128. // -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- //
  129.  
  130. public OnPlayerConnect(playerid) {
  131. GetPlayerName(playerid, pNome[playerid], MAX_PLAYER_NAME);
  132. return true;
  133. }
  134.  
  135. // -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- //
  136.  
  137. public OnPlayerText(playerid, text[]) {
  138. switch(InfoReaction[CATEGORY_REACTION]) {
  139. case CALCULATIONS_EVENT, CHARACTERS_EVENT: {
  140. if(!InfoReaction[ANSWERED_REACTION]) {
  141. if(!strcmp(InfoReaction[InfoReaction[CATEGORY_REACTION] == CALCULATIONS_EVENT ? RESULT_REACTION : CODE_REACTION], text, false)) {
  142.  
  143. if(InfoReaction[CATEGORY_REACTION] == CALCULATIONS_EVENT)
  144. format(gString, sizeof(gString), "› {"#COLOR_REACTION_EVENT"}O(A) jogador(a) {FFFFFF}%s{"#COLOR_REACTION_EVENT"} é o(a) vencedor(a) do Evento de Reação ({FFFFFF}%s = %s{"#COLOR_REACTION_EVENT"}).", pName(playerid), InfoReaction[CODE_REACTION], InfoReaction[RESULT_REACTION]);
  145. else format(gString, sizeof(gString), "› {"#COLOR_REACTION_EVENT"}O(A) jogador(a) {FFFFFF}%s{"#COLOR_REACTION_EVENT"} é o(a) vencedor(a) do Evento de Reação ({FFFFFF}%s{"#COLOR_REACTION_EVENT"}).", pName(playerid), InfoReaction[CODE_REACTION]);
  146.  
  147. SendClientMessageToAll(-1, gString);
  148. GivePlayerMoney(playerid, InfoReaction[REWARD_REACTION]);
  149.  
  150. InfoReaction[ANSWERED_REACTION] = 1;
  151. FunctionsReactionEvent(STEP_INTERVAL_CHALLENGE);
  152. }
  153. }
  154. }
  155. }
  156. return false;
  157. }
  158.  
  159. // -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- //
  160.  
  161. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) {
  162. switch(dialogid) {
  163. case D_REACTION_EVENT: {
  164. if(response) {
  165. switch(listitem) {
  166. case 0, 1: /*- Cálculos e Caracteres -*/ {
  167. if(InfoReaction[CATEGORY_REACTION] == (listitem + 1))
  168. return SendClientMessage(playerid, -1, "[ x ] Já existe um evento de reação deste tipo em andamento!");
  169.  
  170. format(gStr, sizeof(gStr), "›{"#COLOR_REACTION_EVENT"} Evento Reação '{FFFFFF}%s{"#COLOR_REACTION_EVENT"}' iniciado com sucesso!", listitem + 1 == CALCULATIONS_EVENT ? ("Cálculos") : ("Caracteres"));
  171. SendClientMessage(playerid, -1, gStr);
  172.  
  173. InfoReaction[CATEGORY_REACTION] = listitem + 1;
  174. FunctionsReactionEvent(STEP_NEW_CHALLENGE);
  175. }
  176.  
  177. // ----- //
  178.  
  179. case 2: /*- Dificuldade -*/
  180. return ShowPlayerDialog(playerid, D_REACTION_EVENT_DIFFICULTY, DIALOG_STYLE_LIST, "{FFFFFF}•{"#COLOR_REACTION_EVENT"} Evento Reação - Dificuldade", "{"#COLOR_REACTION_EVENT"}›{FFFFFF} Muito Fácil\n{"#COLOR_REACTION_EVENT"}›{FFFFFF} Fácil\n{"#COLOR_REACTION_EVENT"}›{FFFFFF} Média\t\t{"#COLOR_REACTION_EVENT"}(Padrão)\n{"#COLOR_REACTION_EVENT"}›{FFFFFF} Difícil\n{"#COLOR_REACTION_EVENT"}›{FFFFFF} Muito Difícil", "Alterar", "Voltar");
  181.  
  182. // ----- //
  183.  
  184. case 3: /*- Parar Evento -*/ {
  185. if(InfoReaction[CATEGORY_REACTION] == STOPPED_EVENT)
  186. return SendClientMessage(playerid, -1, "[ x ] Não há nenhum evento de reação em andamento!");
  187.  
  188. format(gStr, sizeof(gStr), "›{"#COLOR_REACTION_EVENT"} Evento Reação '{FFFFFF}%s{"#COLOR_REACTION_EVENT"}' parado com sucesso!", InfoReaction[CATEGORY_REACTION] == CALCULATIONS_EVENT ? ("Cálculos") : ("Caracteres"));
  189. SendClientMessage(playerid, -1, gStr);
  190.  
  191. InfoReaction[CATEGORY_REACTION] = STOPPED_EVENT;
  192. KillTimer(TIMER_REACTION_EVENT);
  193. }
  194. }
  195. }
  196. }
  197.  
  198. // ----- //
  199.  
  200. case D_REACTION_EVENT_DIFFICULTY: {
  201. if(response) {
  202. format(gStr, sizeof(gStr), "›{"#COLOR_REACTION_EVENT"} Você alterou a dificuldade do Evento de Reação de {FFFFFF}%s{"#COLOR_REACTION_EVENT"} para {FFFFFF}%s{"#COLOR_REACTION_EVENT"}.", InfoDifficulties[InfoReaction[DIFFICULTY_REACTION]], InfoDifficulties[listitem]);
  203. SendClientMessage(playerid, -1, gStr);
  204.  
  205. InfoReaction[DIFFICULTY_REACTION] = listitem;
  206. return true;
  207. }
  208.  
  209. format(gString, 200, "Cálculos\t\t%s\nCaracteres\t\t%s\n{"#COLOR_REACTION_EVENT"}› {FFFFFF}Dificuldade\t\t{"#COLOR_REACTION_EVENT"}(%s)\n{"#COLOR_REACTION_EVENT"}›{FFFFFF} Parar Evento", InfoReaction[CATEGORY_REACTION] == CALCULATIONS_EVENT ? ("{"#COLOR_REACTION_EVENT"}(Atual)") : (""), InfoReaction[CATEGORY_REACTION] == CHARACTERS_EVENT ? ("{"#COLOR_REACTION_EVENT"}(Atual)") : (""), InfoDifficulties[InfoReaction[DIFFICULTY_REACTION]]);
  210. ShowPlayerDialog(playerid, D_REACTION_EVENT, DIALOG_STYLE_LIST, "{FFFFFF}•{"#COLOR_REACTION_EVENT"} Evento Reação - Painel", gString, "Selecionar", "Sair");
  211. }
  212. }
  213. return true;
  214. }
  215.  
  216. // -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- //
  217. // -- Comandos -------------------------------------------------------------------------------------------------------------------------------------------------------------------- //
  218.  
  219. CMD:ereason(playerid) {
  220. if(!IsPlayerAdmin(playerid))
  221. return SendClientMessage(playerid, -1, "[ x ] Você não tem permissão!");
  222.  
  223. format(gString, 200, "Cálculos\t\t%s\nCaracteres\t\t%s\n{"#COLOR_REACTION_EVENT"}› {FFFFFF}Dificuldade\t\t{"#COLOR_REACTION_EVENT"}(%s)\n{"#COLOR_REACTION_EVENT"}›{FFFFFF} Parar Evento", InfoReaction[CATEGORY_REACTION] == CALCULATIONS_EVENT ? ("{"#COLOR_REACTION_EVENT"}(Atual)") : (""), InfoReaction[CATEGORY_REACTION] == CHARACTERS_EVENT ? ("{"#COLOR_REACTION_EVENT"}(Atual)") : (""), InfoDifficulties[InfoReaction[DIFFICULTY_REACTION]]);
  224. ShowPlayerDialog(playerid, D_REACTION_EVENT, DIALOG_STYLE_LIST, "{FFFFFF}•{"#COLOR_REACTION_EVENT"} Evento Reação - Painel", gString, "Selecionar", "Sair");
  225. return true;
  226. }
  227.  
  228. // -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- //
  229. // -- Timers ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- //
  230.  
  231. forward FunctionsReactionEvent(STEP);
  232. public FunctionsReactionEvent(STEP) {
  233. KillTimer(TIMER_REACTION_EVENT);
  234.  
  235. switch(STEP) {
  236. case STEP_NEW_CHALLENGE: {
  237. InfoReaction[ANSWERED_REACTION] = 0;
  238. InfoReaction[CODE_REACTION] = EOS;
  239.  
  240. switch(InfoReaction[CATEGORY_REACTION]) {
  241. case CALCULATIONS_EVENT: {
  242. for(new i; i < (2 + InfoReaction[DIFFICULTY_REACTION]); ++i) {
  243. format(gStr, 10, "%d%s", RANDOM_NUMBER_REASON_EVENT, i == (2 + InfoReaction[DIFFICULTY_REACTION]) -1 ? "" : InfoOperations[random(sizeof(InfoOperations))]);
  244. strcat(InfoReaction[CODE_REACTION], gStr);
  245. }
  246.  
  247. if(!IsAnInteger(MathEval(InfoReaction[CODE_REACTION])))
  248. format(InfoReaction[RESULT_REACTION], 10, "%.2f", MathEval(InfoReaction[CODE_REACTION]));
  249. else format(InfoReaction[RESULT_REACTION], 10, "%d", floatround(InfoReaction[CODE_REACTION], floatround_round));
  250. }
  251.  
  252. // ----- //
  253.  
  254. case CHARACTERS_EVENT:
  255. format(InfoReaction[CODE_REACTION], 50, "%s", gRandomString(10 + (InfoReaction[DIFFICULTY_REACTION] * 2)));
  256. }
  257.  
  258. InfoReaction[REWARD_REACTION] = RANDOM_REWARD_REASON_EVENT;
  259.  
  260. if(InfoReaction[REWARD_REACTION] > MAXIMUM_REWARD_REACTION_EVENT)
  261. InfoReaction[REWARD_REACTION] = MAXIMUM_REWARD_REACTION_EVENT;
  262.  
  263. format(gStr, sizeof(gStr), "›{"#COLOR_REACTION_EVENT"} O(A) jogador(a) que %s '{FFFFFF}%s{"#COLOR_REACTION_EVENT"}' ganhará {FFFFFF}R$%d{"#COLOR_REACTION_EVENT"}.", InfoReaction[CATEGORY_REACTION] == CALCULATIONS_EVENT ? ("calcular") : ("digitar"), InfoReaction[CODE_REACTION], InfoReaction[REWARD_REACTION]);
  264. SendClientMessageToAll(-1, gStr);
  265.  
  266. TIMER_REACTION_EVENT = SetTimerEx("FunctionsReactionEvent", 25000 / floatround(InfoReaction[DIFFICULTY_REACTION] + 0.5, floatround_round), false, "d", STEP_INTERVAL_CHALLENGE);
  267. return true;
  268. }
  269.  
  270. // ----- //
  271.  
  272. case STEP_INTERVAL_CHALLENGE: {
  273. TIMER_REACTION_EVENT = SetTimerEx("FunctionsReactionEvent", INTERVAL_REASON_EVENT * 1000, false, "d", STEP_NEW_CHALLENGE);
  274. return true;
  275. }
  276. }
  277. return true;
  278. }
  279.  
  280. // -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- //
  281. // -- Stocks ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- //
  282.  
  283. stock pName(playerid)
  284. return pNome[playerid];
  285.  
  286. // -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- //
  287.  
  288. stock IsAnInteger(const Float:sFloat) {
  289. format(gStr, 10, "%2.f", sFloat);
  290. return strfind(gStr, ".00", true) != -1;
  291. }
  292.  
  293. // -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- //
  294.  
  295. stock gRandomString(sSize = 0xff)
  296. {
  297. static stringBuff[0xff];
  298.  
  299. if(sSize < 0xff && sSize) {
  300. for(new i; i < sSize; ++i)
  301. stringBuff[i] = bool: random(2) ? InfoAlfabeto[random(sizeof(InfoAlfabeto))] : InfoNumeros[random(sizeof(InfoNumeros))];
  302.  
  303. stringBuff[sSize] = EOS;
  304. }
  305. return stringBuff;
  306. }
  307.  
  308. // -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- //
  309. // -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- //
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement