HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  1. #include <amxmodx>
  2. #include <hamsandwich>
  3. #include <sqlx>
  4.  
  5. new const PLUGIN[] = "Játszott Időre Vip"
  6. new const VERSION[] = "1.0"
  7. new const AUTHOR[] = "exodus" //Ne írd át köszi :)
  8.  
  9. //Ha SQL-be szeretnél menteni vedd ki előle a //-t majd a fájlmentés elé rakj egy //-t
  10. //#define SAVESQL //SQL Adatbázisba való mentés használata
  11. #define SAVEFILE //Fájlba való mentés használata
  12.  
  13. #define JOG ADMIN_LEVEL_H //A vip jog
  14. #define IDO 15 //Mennyi idő után adjon jogot (órában számolva)
  15.  
  16. #if defined SAVESQL
  17. new const SQL_INFO[][] =
  18. {
  19. "kiszolg", // HOST
  20. "felh", // USERNAME
  21. "jelszo", // PASSWORD
  22. "adatbazis" // DATABASE
  23. }
  24. #endif
  25.  
  26. new Jatszottido[33];
  27. #if defined SAVESQL
  28. new Handle:g_SqlTuple;
  29. new name[33][32];
  30. #endif
  31. #if defined SAVEFILE
  32. new filename[128];
  33. #endif
  34.  
  35. public plugin_init()
  36. {
  37. register_plugin(PLUGIN,VERSION,AUTHOR)
  38. #if defined SAVEFILE
  39. get_localinfo("amxx_configsdir", filename, charsmax(filename))
  40. format(filename, charsmax(filename), "%s/vip_idore.ini", filename)
  41. #endif
  42. }
  43.  
  44. public Ellenorzes(id)
  45. {
  46. if(Jatszottido[id] >= IDO*3600)
  47. {
  48. set_user_flags(id, get_user_flags(id) | JOG)
  49. }
  50. }
  51.  
  52. public client_putinserver(id)
  53. {
  54. #if defined SAVESQL
  55. if(!is_user_bot(id))
  56. {
  57. get_user_name(id, name[id], charsmax(name));
  58. load(id);
  59. }
  60. #endif
  61. #if defined SAVEFILE
  62. if(!is_user_bot(id) && !is_user_hltv(id))
  63. {
  64. load(id);
  65. }
  66. #endif
  67. set_task(5.0, "Ellenorzes");
  68. }
  69.  
  70. public client_disconnect(id)
  71. {
  72. #if defined SAVESQL
  73. if(!is_user_bot(id))
  74. {
  75. update(id)
  76. }
  77. Jatszottido[id] = 0
  78. copy(name[id], charsmax(name[]), "")
  79. #endif
  80. #if defined SAVEFILE
  81. if(!is_user_bot(id) && !is_user_hltv(id))
  82. {
  83. save(id);
  84. }
  85. #endif
  86. }
  87. #if defined SAVEFILE
  88. public save(id)
  89. {
  90. new szData[128];
  91. new steamid[32]; get_user_authid(id, steamid, charsmax(steamid));
  92. if(contain(steamid, "_ID_LAN") != -1) get_user_ip(id, steamid, charsmax(steamid), 1);
  93.  
  94. formatex(szData, charsmax(szData), "%i", Jatszottido[id]);
  95. set_data(steamid, szData)
  96. }
  97. public load(id)
  98. {
  99. new szData[128];
  100. new steamid[32]; get_user_authid(id, steamid, charsmax(steamid));
  101. if(contain(steamid, "_ID_LAN") != -1) get_user_ip(id, steamid, charsmax(steamid), 1);
  102.  
  103. if(get_data(steamid, szData, charsmax(szData))) {
  104. new ido[32];
  105. parse(szData, ido, charsmax(ido));
  106. Jatszottido[id] = str_to_num(ido)
  107. }
  108. }
  109. #endif
  110. #if defined SAVESQL
  111. public plugin_cfg()
  112. {
  113. new Query[512];
  114. g_SqlTuple = SQL_MakeDbTuple(SQL_INFO[0],SQL_INFO[1],SQL_INFO[2],SQL_INFO[3])
  115.  
  116. formatex(Query, charsmax(Query), "CREATE TABLE IF NOT EXISTS `vipek_idore` (`username` varchar(32) NOT NULL,`Ido` int(11) NOT NULL,`id` INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY)")
  117. SQL_ThreadQuery(g_SqlTuple,"createTableThread", Query)
  118. }
  119.  
  120. public createTableThread(FailState, Handle:Query, Error[], Errcode, Data[], DataSize, Float:Queuetime)
  121. {
  122. if(FailState == TQUERY_CONNECT_FAILED)
  123. set_fail_state("Nem tudtam csatlakozni az adatbazishoz.");
  124. else if(FailState == TQUERY_QUERY_FAILED)
  125. set_fail_state("Query Error");
  126. if(Errcode)
  127. log_amx("Hibat dobtam: %s",Error);
  128. }
  129.  
  130. public load(id)
  131. {
  132. new Query[512], Data[1]
  133. Data[0] = id
  134. formatex(Query, charsmax(Query), "SELECT * FROM `vipek_idore` WHERE username = ^"%s^";", name[id])
  135. SQL_ThreadQuery(g_SqlTuple, "QuerySelectData", Query, Data, 1)
  136. }
  137.  
  138. public QuerySelectData(FailState, Handle:Query, Error[], Errcode, Data[], DataSize, Float:Queuetime)
  139. {
  140. if(FailState == TQUERY_CONNECT_FAILED || FailState == TQUERY_QUERY_FAILED)
  141. {
  142. log_amx("%s", Error)
  143. return
  144. }
  145. else
  146. {
  147. new id = Data[0];
  148.  
  149. if(SQL_NumRows(Query) > 0)
  150. {
  151. Jatszottido[id] = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "Ido"))
  152. }
  153. else
  154. {
  155. save(id)
  156. }
  157. }
  158. }
  159.  
  160. public save(id)
  161. {
  162. new text[512];
  163. formatex(text, charsmax(text), "INSERT INTO `vipek_idore` (`username`, `Ido`) VALUES (^"%s^", ^"0^");", name[id])
  164. SQL_ThreadQuery(g_SqlTuple, "QuerySetData", text)
  165. }
  166.  
  167. public QuerySetData(FailState, Handle:Query, Error[], Errcode, Data[], DataSize, Float:Queuetime)
  168. {
  169. if(FailState == TQUERY_CONNECT_FAILED || FailState == TQUERY_QUERY_FAILED) {
  170. log_amx("%s", Error)
  171. return
  172. }
  173. }
  174.  
  175. public update(id)
  176. {
  177. new text[512];
  178. formatex(text, charsmax(text), "UPDATE `vipek_idore` SET Ido = ^"%i^" WHERE username = ^"%s^";", Jatszottido[id]+get_user_time(id), name[id])
  179. SQL_ThreadQuery(g_SqlTuple, "QuerySetData", text)
  180. }
  181.  
  182. public plugin_end()
  183. {
  184. SQL_FreeHandle(g_SqlTuple)
  185. }
  186. #endif
  187. #if defined SAVEFILE
  188. stock get_data(const key[], data[], len) {
  189. new vault = fopen(filename, "rt");
  190. new _data[512], _key[64];
  191.  
  192. while( !feof(vault) ) {
  193. fgets(vault, _data, charsmax(_data));
  194. parse(_data, _key, charsmax(_key), data, len);
  195.  
  196. if( equal(_key, key) ) {
  197. fclose(vault);
  198. return 1;
  199. }
  200. }
  201.  
  202. fclose(vault);
  203. copy(data, len, "");
  204.  
  205. return 0;
  206. }
  207.  
  208. stock set_data(const key[], const data[]) {
  209. static const temp_vault_name[] = "set_data.txt";
  210. new file = fopen(temp_vault_name, "wt");
  211.  
  212. new vault = fopen(filename, "rt");
  213. new _data[512], _key[64], _other[32];
  214. new bool:replaced = false;
  215.  
  216. while( !feof(vault) ) {
  217. fgets(vault, _data, charsmax(_data));
  218. parse(_data, _key, charsmax(_key), _other, charsmax(_other));
  219.  
  220. if( equal(_key, key) && !replaced ) {
  221. fprintf(file, "^"%s^" ^"%s^"^n", key, data);
  222.  
  223. replaced = true;
  224. }
  225. else {
  226. fputs(file, _data);
  227. }
  228. }
  229.  
  230. if( !replaced ) {
  231. fprintf(file, "^"%s^" ^"%s^"^n", key, data);
  232. }
  233.  
  234. fclose(file);
  235. fclose(vault);
  236.  
  237. delete_file(filename);
  238.  
  239. while( !rename_file(temp_vault_name, filename, 1) ) { }
  240.  
  241. //delete_file(temp_vault_name);
  242. }
  243. #endif