HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  1. #include <amxmodx>
  2. #include <amxmisc>
  3. #include <sqlx>
  4.  
  5. #define PLUGIN "Advanced SQL Advertisements"
  6. #define VERSION "1.0"
  7. #define AUTHOR "OxYgEn"
  8.  
  9. /////////////////////////////////
  10. /// START CUSTOMIZATION HERE! ///
  11. /////////////////////////////////
  12.  
  13. #define MAX_CHAT_MESSAGES 20
  14. #define MAX_HUD_MESSAGES 20
  15. #define MAX_DHUD_MESSAGES 20
  16.  
  17. #define ADMIN_FLAG ADMIN_BAN //Admin flag for commands
  18.  
  19. #define USE_PREFIX //define this if u don't want chat prefix
  20.  
  21. new Host[] = "127.0.0.1"
  22. new User[] = "root"
  23. new Pass[] = ""
  24. new DB[] = "amxx"
  25. new Table[] = "asa_messages"
  26.  
  27. new const Float:MIN_TIME_CHAT = 60.0
  28. new const Float:MAX_TIME_CHAT = 80.0
  29. new const Float:MIN_TIME_HUD = 120.0
  30. new const Float:MAX_TIME_HUD = 160.0
  31.  
  32. #if defined USE_PREFIX
  33. new const saychatprefix[] = { "!g[!nInformáció!g]!n" }
  34. #endif
  35.  
  36. ////////////////////////////////////
  37. /// CUSTOMIZATION ENDS HERE! ///
  38. ////////////////////////////////////
  39. /// DO NOT DO ANYTHING UNLESS ///
  40. /// YOU KNOW WHAT YOU ARE DOING ///
  41. ////////////////////////////////////
  42.  
  43. new Handle:g_hSqlTuple;
  44.  
  45. new asa_chat_messages[MAX_CHAT_MESSAGES][512]
  46. new asa_hud_messages[MAX_HUD_MESSAGES][512]
  47. new asa_hud_colors[MAX_HUD_MESSAGES][3]
  48. new asa_dhud_messages[MAX_DHUD_MESSAGES][512]
  49. new asa_dhud_colors[MAX_DHUD_MESSAGES][3]
  50.  
  51. new num_messages[3] = 0
  52. new count[3] = 0
  53.  
  54. new g_hud_advs
  55.  
  56. public plugin_init( )
  57. {
  58. register_plugin(PLUGIN, VERSION, AUTHOR)
  59.  
  60. register_concmd("asa_add_adv", "add_advertisements", ADMIN_FLAG, "<chat|dhud|hud> <message> <red> <green> <blue>")
  61. register_concmd("asa_del_adv", "delete_advertisements", ADMIN_FLAG, "<chat|dhud|hud> <message>")
  62. register_concmd("asa_show_advs", "show_advertisements", ADMIN_FLAG)
  63. register_concmd("asa_reload_advs", "reload_advertisements", ADMIN_FLAG)
  64. register_clcmd("say /advs", "advertisements_menu", ADMIN_FLAG)
  65.  
  66. g_hud_advs = CreateHudSyncObj()
  67.  
  68. set_task(1.0, "Mysql_Init")
  69. set_task(5.0, "advertise")
  70. }
  71.  
  72. /////////////////////////
  73. /// START MYSQL STUFF ///
  74. /////////////////////////
  75.  
  76. public Mysql_Init()
  77. {
  78. g_hSqlTuple = SQL_MakeDbTuple(Host, User, Pass, DB)
  79.  
  80. new g_Error[512]
  81. new ErrorCode
  82. new Handle:SqlConnection = SQL_Connect(g_hSqlTuple, ErrorCode, g_Error, charsmax(g_Error))
  83.  
  84. if(SqlConnection == Empty_Handle)
  85. set_fail_state(g_Error)
  86.  
  87. new Handle:Queries
  88. Queries = SQL_PrepareQuery( SqlConnection,
  89. "CREATE TABLE IF NOT EXISTS `%s`\
  90. (`adv_type` VARCHAR(9) NOT NULL,\
  91. `adv_message` VARCHAR(512) NOT NULL,\
  92. `adv_r` VARCHAR(4) NOT NULL,\
  93. `adv_g` VARCHAR(4) NOT NULL,\
  94. `adv_b` VARCHAR(4) NOT NULL)",
  95. Table)
  96.  
  97. if(!SQL_Execute(Queries))
  98. {
  99. SQL_QueryError(Queries, g_Error, charsmax(g_Error))
  100. set_fail_state(g_Error)
  101. }
  102.  
  103. SQL_FreeHandle(Queries)
  104. SQL_FreeHandle(SqlConnection)
  105.  
  106. set_task(1.0, "Load_Table")
  107. }
  108.  
  109. public Load_Table()
  110. {
  111. new szTemp[512]
  112. formatex(szTemp, charsmax(szTemp), "SELECT * FROM `%s`;", Table)
  113. SQL_ThreadQuery(g_hSqlTuple, "QuerySelectMessages", szTemp)
  114. }
  115.  
  116. public QuerySelectMessages(iFailState, Handle:hQuery, szError[ ], iError, iData[ ], iDataSize, Float:fQueueTime)
  117. {
  118. if(iFailState == TQUERY_CONNECT_FAILED
  119. || iFailState == TQUERY_QUERY_FAILED)
  120. {
  121. log_amx("[ASA]: Sikertelen Kapcsolodas [MYSQL]")
  122. }
  123. else if( SQL_NumResults(hQuery))
  124. {
  125. new szMessage[512]
  126. new szType[10]
  127.  
  128. while(SQL_MoreResults(hQuery))
  129. {
  130. SQL_ReadResult(hQuery, 0, szType, 9)
  131. SQL_ReadResult(hQuery, 1, szMessage, 511)
  132. if(equal(szType, "chat"))
  133. {
  134. format(asa_chat_messages[num_messages[0]], 511, szMessage)
  135. num_messages[0]++
  136. }
  137. if(equal(szType, "hud"))
  138. {
  139. format(asa_hud_messages[num_messages[1]], 511, szMessage)
  140. asa_hud_colors[num_messages[1]][0] = SQL_ReadResult(hQuery, 2)
  141. asa_hud_colors[num_messages[1]][1] = SQL_ReadResult(hQuery, 3)
  142. asa_hud_colors[num_messages[1]][2] = SQL_ReadResult(hQuery, 4)
  143. num_messages[1]++
  144. }
  145. if(equal(szType, "dhud"))
  146. {
  147. format(asa_dhud_messages[num_messages[2]], 511, szMessage)
  148. asa_dhud_colors[num_messages[2]][0] = SQL_ReadResult(hQuery, 2)
  149. asa_dhud_colors[num_messages[2]][1] = SQL_ReadResult(hQuery, 3)
  150. asa_dhud_colors[num_messages[2]][2] = SQL_ReadResult(hQuery, 4)
  151. num_messages[2]++
  152. }
  153. SQL_NextRow(hQuery)
  154. }
  155. }
  156. log_amx("[ASA]: Chat Üzenetek Betöltve: %d", num_messages[0])
  157. log_amx("[ASA]: HUD Üzenetek Betöltve: %d", num_messages[1])
  158. log_amx("[ASA]: DHUD Üzenetek Betöltve: %d", num_messages[2])
  159. }
  160.  
  161. public IgnoreHandle(FailState,Handle:Query,Error[],Errcode,Data[],DataSize)
  162. {
  163. SQL_FreeHandle(Query)
  164. return PLUGIN_HANDLED
  165. }
  166.  
  167. ///////////////////////
  168. /// END MYSQL STUFF ///
  169. ///////////////////////
  170.  
  171. ///////////////////////////////////////////
  172. /// START DISPLAYING THE ADVERTISEMENTS ///
  173. ///////////////////////////////////////////
  174.  
  175. public advertise()
  176. {
  177. if(num_messages[0] > 0)
  178. {
  179. set_task(random_float(MIN_TIME_CHAT, MAX_TIME_CHAT), "display_chat_messages")
  180. }
  181. if(num_messages[1] > 0)
  182. {
  183. set_task(random_float(MIN_TIME_HUD, MAX_TIME_HUD), "display_hud_messages")
  184. }
  185. if(num_messages[2] > 0)
  186. {
  187. set_task(random_float(MAX_TIME_HUD+15.0, MAX_TIME_HUD+40.0), "display_dhud_messages")
  188. }
  189. }
  190.  
  191. public display_chat_messages()
  192. {
  193. #if defined USE_PREFIX
  194. client_printc(0, "%s %s", saychatprefix, asa_chat_messages[count[0]])
  195. #else
  196. client_printc(0, asa_chat_messages[count[0]])
  197. #endif
  198. count[0]++
  199. if(count[0] == num_messages[0])
  200. count[0] = 0
  201. set_task(random_float(MIN_TIME_CHAT, MAX_TIME_CHAT), "display_chat_messages")
  202. }
  203.  
  204. public display_hud_messages()
  205. {
  206. set_hudmessage(asa_hud_colors[count[1]][0], asa_hud_colors[count[1]][1], asa_hud_colors[count[1]][2], -1.0, 0.20, 0, 6.0, 12.0)
  207. ShowSyncHudMsg(0, g_hud_advs, asa_hud_messages[count[1]])
  208. count[1]++
  209. if(count[1] == num_messages[1])
  210. count[1] = 0
  211. set_task(random_float(MIN_TIME_HUD, MAX_TIME_HUD), "display_hud_messages")
  212. }
  213.  
  214. public display_dhud_messages()
  215. {
  216. set_dhudmessage(asa_dhud_colors[count[2]][0], asa_dhud_colors[count[2]][1], asa_dhud_colors[count[2]][2], -1.0, 0.02, 0, 6.0, 12.0)
  217. show_dhudmessage(0, asa_dhud_messages[count[2]])
  218. count[2]++
  219. if(count[2] == num_messages[2])
  220. count[2] = 0
  221. set_task(random_float(MAX_TIME_HUD+15.0, MAX_TIME_HUD+40.0), "display_dhud_messages")
  222. }
  223.  
  224. /////////////////////////////////////////
  225. /// END DISPLAYING THE ADVERTISEMENTS ///
  226. /////////////////////////////////////////
  227.  
  228. //////////////////////////
  229. /// START ASA COMMANDS ///
  230. //////////////////////////
  231.  
  232. public add_advertisements(id, level, cid)
  233. {
  234. if (!cmd_access(id, level, cid, 2))
  235. return PLUGIN_HANDLED
  236.  
  237. new szTemp[512], type[9], message[512], red[4], green[4], blue[4]
  238. read_argv(1, type, charsmax(type))
  239. read_argv(2, message, charsmax(message))
  240. if(equal(type, "chat"))
  241. {
  242. format(szTemp,charsmax(szTemp),"INSERT INTO `%s` ( `adv_type`, `adv_message` ,`adv_r` ,`adv_g`,`adv_b`) VALUES ('%s','%s','0','0','0');",
  243. Table, type, message, red, green, blue)
  244. console_print(id, "[asa] Hozzá Adtál egy hírdetést: Tipus: %s, Message: %s", type, message)
  245. }
  246. else if(equal(type, "dhud"))
  247. {
  248. read_argv(3, red, charsmax(red))
  249. read_argv(4, blue, charsmax(blue))
  250. read_argv(5, green, charsmax(green))
  251. format(szTemp,charsmax(szTemp),"INSERT INTO `%s` ( `adv_type`, `adv_message` ,`adv_r` ,`adv_g`,`adv_b`) VALUES ('%s','%s','%s','%s','%s');",
  252. Table, type, message, red, green, blue)
  253. console_print(id, "[asa] Hozzá Adtál egy hírdetést: Tipus: %s, Üzenet: %s, Red: %s, Green: %s, Blue: %s", type, message, red, green, blue)
  254. }
  255. else if(equal(type, "hud"))
  256. {
  257. read_argv(3, red, charsmax(red))
  258. read_argv(4, blue, charsmax(blue))
  259. read_argv(5, green, charsmax(green))
  260. format(szTemp,charsmax(szTemp),"INSERT INTO `%s` ( `adv_type`, `adv_message` ,`adv_r` ,`adv_g`,`adv_b`) VALUES ('%s','%s','%s','%s','%s');",
  261. Table, type, message, red, green, blue)
  262. console_print(id, "[asa] Hozzá Adtál egy hírdetést: Tipus: %s, Üzenet: %s, Red: %s, Green: %s, Blue: %s", type, message, red, green, blue)
  263. }
  264. else
  265. {
  266. console_print(id, "[asa] Válasz mit szeretnél (chat)(hud)(dhud)")
  267. return PLUGIN_HANDLED
  268. }
  269. SQL_ThreadQuery(g_hSqlTuple,"IgnoreHandle",szTemp)
  270. console_print(id, "[asa] Sikeresen Hozzáadtad a Hírdetést!")
  271.  
  272. return PLUGIN_HANDLED
  273. }
  274.  
  275. public delete_advertisements(id, level, cid)
  276. {
  277. if (!cmd_access(id, level, cid, 2))
  278. return PLUGIN_HANDLED
  279.  
  280. new szTemp[512], type[9], message[512]
  281. read_argv(1, type, charsmax(type))
  282. read_argv(2, message, charsmax(message))
  283.  
  284. if(!equal(type, "chat") && !equal(type, "dhud") && !equal(type, "hud"))
  285. {
  286. console_print(id, "[asa] Válasz mit Szeretnél (chat)(hud)(dhud)")
  287. return PLUGIN_HANDLED
  288. }
  289.  
  290. format(szTemp,charsmax(szTemp),"DELETE FROM %s WHERE `adv_type`='%s' AND `adv_message`='%s';",
  291. Table, type, message)
  292.  
  293. SQL_ThreadQuery(g_hSqlTuple,"IgnoreHandle",szTemp)
  294.  
  295. console_print(id, "[asa] Sikeresen Törölted a Hírdetést: Tipus: %s, Message: %s", type, message)
  296. console_print(id, "[asa] Hírdetés Törölve")
  297.  
  298. return PLUGIN_HANDLED
  299. }
  300.  
  301. public show_advertisements(id, level, cid)
  302. {
  303. if (!cmd_access(id, level, cid, 0))
  304. return PLUGIN_HANDLED
  305.  
  306. if(num_messages[0] <= 0)
  307. {
  308. console_print(id, "[ASA]: Nincs Üzenet amit be lehet Tölteni")
  309. }
  310. else
  311. {
  312. for(new i=0; i<num_messages[0]; i++)
  313. console_print(id, "[ASA]: Tipus: Chat, üzenet: %s", asa_chat_messages[i])
  314. }
  315.  
  316. if(num_messages[1] <= 0)
  317. {
  318. console_print(id, "[ASA]: Nincs Hud üzenet Betöltve")
  319. }
  320. else
  321. {
  322. for(new i=0; i<num_messages[1]; i++)
  323. console_print(id, "[ASA]: Tipus: HUD, üzenet: %s, Red: %d, Green: %d, Blue: %d",
  324. asa_hud_messages[i], asa_hud_colors[i][0], asa_hud_colors[i][1], asa_hud_colors[i][2])
  325. }
  326.  
  327. if(num_messages[2] <= 0)
  328. {
  329. console_print(id, "[ASA]: Nincs DHUD üzenet Betöltve")
  330. }
  331. else
  332. {
  333. for(new i=0; i<num_messages[2]; i++)
  334. console_print(id, "[ASA]: Tipus: DHUD, üzenet: %s, Red: %d, Green: %d, Blue: %d",
  335. asa_dhud_messages[i], asa_dhud_colors[i][0], asa_dhud_colors[i][1], asa_dhud_colors[i][2])
  336. }
  337. return PLUGIN_HANDLED
  338. }
  339.  
  340. public reload_advertisements(id, level, cid)
  341. {
  342. if (!cmd_access(id, level, cid, 0))
  343. return PLUGIN_HANDLED
  344.  
  345. set_task(1.0, "Mysql_Init")
  346. console_print(id, "[ASA]: Hírdetések Sikeresen Újra Töltve")
  347.  
  348. return PLUGIN_HANDLED
  349. }
  350.  
  351. public advertisements_menu(id, level, cid)
  352. {
  353. if (!cmd_access(id, level, cid, 0))
  354. return PLUGIN_HANDLED
  355.  
  356. new total_advs
  357. for(new i=0; i<3; i++)
  358. total_advs += num_messages[i]
  359.  
  360. if(total_advs <= 0)
  361. {
  362. client_printc(id, "!g[!nHírdetés Kezellő SQL!g] Nincs !tÜzenet !gBetöltve!n! Hozz !gasa_add_adv !nLétre !tEgyett")
  363. }
  364. else
  365. {
  366. new menu = menu_create("[ASA]: Hírdetés Kezelő Menü:", "advertisements_menu_h")
  367. new Temp[525]
  368. if(num_messages[0] > 0)
  369. {
  370. for(new i=0; i<num_messages[0]; i++)
  371. {
  372. formatex(Temp, charsmax(Temp), "Tipusa: \rChat\w, Message: \r%s", asa_chat_messages[i])
  373. menu_additem(menu, Temp, "")
  374. }
  375. }
  376. if(num_messages[1] > 0)
  377. {
  378. for(new i=0; i<num_messages[1]; i++)
  379. {
  380. formatex(Temp, charsmax(Temp), "Tipusa: \rHUD\w, Message: \r%s\w, Red: \r%d\w, Green: \r%d\w, Blue: \r%d",
  381. asa_hud_messages[i], asa_hud_colors[i][0], asa_hud_colors[i][1], asa_hud_colors[i][2])
  382. menu_additem(menu, Temp, "")
  383. }
  384. }
  385. if(num_messages[2] > 0)
  386. {
  387. for(new i=0; i<num_messages[2]; i++)
  388. {
  389. formatex(Temp, charsmax(Temp), "Tipusa: \rDHUD\w, Message: \r%s\w, Red: \r%d\w, Green: \r%d\w, Blue: \r%d",
  390. asa_dhud_messages[i], asa_dhud_colors[i][0], asa_dhud_colors[i][1], asa_dhud_colors[i][2])
  391. menu_additem(menu, Temp, "")
  392. }
  393. }
  394. menu_display(id, menu, 0)
  395. menu_setprop(menu, MPROP_EXIT, MEXIT_ALL)
  396. }
  397. return PLUGIN_HANDLED
  398. }
  399.  
  400. public advertisements_menu_h(id, menu, item)
  401. return PLUGIN_HANDLED
  402.  
  403. ////////////////////////
  404. /// END ASA COMMANDS ///
  405. ////////////////////////
  406.  
  407. //////////////
  408. /// STOCKS ///
  409. //////////////
  410.  
  411. stock client_printc(const id, const input[], any:...)
  412. {
  413. new count = 1, players[32]
  414. static msg[191]
  415. vformat(msg, 190, input, 3)
  416.  
  417. replace_all(msg, 190, "!g", "^x04") // Green Color
  418. replace_all(msg, 190, "!n", "^x01") // Default Color
  419. replace_all(msg, 190, "!t", "^x03") // Team Color
  420.  
  421. if (id) players[0] = id; else get_players(players, count, "ch")
  422. {
  423. for (new i = 0; i < count; i++)
  424. {
  425. if (is_user_connected(players[i]))
  426. {
  427. message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i])
  428. write_byte(players[i])
  429. write_string(msg)
  430. message_end()
  431. }
  432. }
  433. }
  434. }
  435.  
  436. // DHUDMESSAGE, NOT TO NEED INCLUDE ;) Not copyright to me.
  437. stock __dhud_color;
  438. stock __dhud_x;
  439. stock __dhud_y;
  440. stock __dhud_effect;
  441. stock __dhud_fxtime;
  442. stock __dhud_holdtime;
  443. stock __dhud_fadeintime;
  444. stock __dhud_fadeouttime;
  445. stock __dhud_reliable;
  446.  
  447. stock set_dhudmessage( red = 0, green = 160, blue = 0, Float:x = -1.0, Float:y = 0.65, effects = 2, Float:fxtime = 6.0, Float:holdtime = 3.0, Float:fadeintime = 0.1, Float:fadeouttime = 1.5, bool:reliable = false )
  448. {
  449. #define clamp_byte(%1) ( clamp( %1, 0, 255 ) )
  450. #define pack_color(%1,%2,%3) ( %3 + ( %2 << 8 ) + ( %1 << 16 ) )
  451.  
  452. __dhud_color = pack_color( clamp_byte( red ), clamp_byte( green ), clamp_byte( blue ) );
  453. __dhud_x = _:x;
  454. __dhud_y = _:y;
  455. __dhud_effect = effects;
  456. __dhud_fxtime = _:fxtime;
  457. __dhud_holdtime = _:holdtime;
  458. __dhud_fadeintime = _:fadeintime;
  459. __dhud_fadeouttime = _:fadeouttime;
  460. __dhud_reliable = _:reliable;
  461.  
  462. return 1;
  463. }
  464.  
  465. stock show_dhudmessage( index, const message[], any:... )
  466. {
  467. new buffer[ 128 ];
  468. new numArguments = numargs();
  469.  
  470. if( numArguments == 2 )
  471. {
  472. send_dhudMessage( index, message );
  473. }
  474. else if( index || numArguments == 3 )
  475. {
  476. vformat( buffer, charsmax( buffer ), message, 3 );
  477. send_dhudMessage( index, buffer );
  478. }
  479. else
  480. {
  481. new playersList[ 32 ], numPlayers;
  482. get_players( playersList, numPlayers, "ch" );
  483.  
  484. if( !numPlayers )
  485. {
  486. return 0;
  487. }
  488.  
  489. new Array:handleArrayML = ArrayCreate();
  490.  
  491. for( new i = 2, j; i < numArguments; i++ )
  492. {
  493. if( getarg( i ) == LANG_PLAYER )
  494. {
  495. while( ( buffer[ j ] = getarg( i + 1, j++ ) ) ) {}
  496. j = 0;
  497.  
  498. if( GetLangTransKey( buffer ) != TransKey_Bad )
  499. {
  500. ArrayPushCell( handleArrayML, i++ );
  501. }
  502. }
  503. }
  504.  
  505. new size = ArraySize( handleArrayML );
  506.  
  507. if( !size )
  508. {
  509. vformat( buffer, charsmax( buffer ), message, 3 );
  510. send_dhudMessage( index, buffer );
  511. }
  512. else
  513. {
  514. for( new i = 0, j; i < numPlayers; i++ )
  515. {
  516. index = playersList[ i ];
  517.  
  518. for( j = 0; j < size; j++ )
  519. {
  520. setarg( ArrayGetCell( handleArrayML, j ), 0, index );
  521. }
  522.  
  523. vformat( buffer, charsmax( buffer ), message, 3 );
  524. send_dhudMessage( index, buffer );
  525. }
  526. }
  527.  
  528. ArrayDestroy( handleArrayML );
  529. }
  530.  
  531. return 1;
  532. }
  533.  
  534. stock send_dhudMessage( const index, const message[] )
  535. {
  536. message_begin( __dhud_reliable ? ( index ? MSG_ONE : MSG_ALL ) : ( index ? MSG_ONE_UNRELIABLE : MSG_BROADCAST ), SVC_DIRECTOR, _, index );
  537. {
  538. write_byte( strlen( message ) + 31 );
  539. write_byte( DRC_CMD_MESSAGE );
  540. write_byte( __dhud_effect );
  541. write_long( __dhud_color );
  542. write_long( __dhud_x );
  543. write_long( __dhud_y );
  544. write_long( __dhud_fadeintime );
  545. write_long( __dhud_fadeouttime );
  546. write_long( __dhud_holdtime );
  547. write_long( __dhud_fxtime );
  548. write_string( message );
  549. }
  550. message_end();
  551. }
  552.  
  553. /* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
  554. *{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1038\\ f0\\ fs16 \n\\ par }
  555. */
  556.