HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  1. //
  2. //-------------------------------------------------------
  3. // @@@@@@@@@ @ @ @@@@@@@@ @@@@@@ @ @ @@@@@@@ |
  4. // @ @ @ @ @ @ @@ @ @ @ |
  5. // @ @ @ @ @ @ @ @ @ @ |
  6. // @@@@@@@@@ @ @ @ @ @ @ @ @@@@@@@ |
  7. // @ @ @ @ @ @ @ @ @ @ |
  8. // @ @ @ @ @ @ @@ @ @ @ |
  9. // @@@@@@@@@ @ @ @@@@@@@@ @@@@@@ @@@@@@@@@ @@@@@@@ |
  10. //-------------------------------------------------------
  11. //
  12. #include <amxmodx>
  13. #include <engine>
  14. #include <fakemeta>
  15. #include <colorchat>
  16. #include <hamsandwich>
  17. #include <sqlx>
  18.  
  19. new const PLUGIN[] = "Skin Menü"
  20. new const VERSION[] = "1.0"
  21. new const AUTHOR[] = "exodus"
  22.  
  23. //------------------------------------------------------------------------------------------------
  24. //Beállítások
  25. //------------------------------------------------------------------------------------------------
  26.  
  27. new const SQLINFO[][] = { "Host", "Felhasználó", "Jelszó", "Adatbázis" };
  28.  
  29. new const Prefix[] = "Skin Menü 1.0" //Menükben megjelenő prefix
  30. new const Chat_Prefix[] = "[Skin Menü]" //Chatben megjelenő prefix
  31. new const Website[] = "www.hlmod.hu" //Főmenüben a menük alatt megjelenő kiírás (pl.: fb oldal)
  32.  
  33. new const Drop[][] = { 10 }; //Mennyi ölés után adjon valamilyen skint.
  34.  
  35. #define MAX 50 //Felszerelhető skinek száma
  36. #define ADMIN ADMIN_BAN //Addoláshoz szükséges jog
  37.  
  38. //------------------------------------------------------------------------------------------------
  39. //------------------------------------------------------------------------------------------------
  40. //------------------------------------------------------------------------------------------------
  41. new t_OSkin[MAX][33], t_Skin[5][33], Oles[2][33], name[32][33];
  42. new Handle:g_SqlTuple;
  43. //------------------------------------------------------------------------------------------------
  44.  
  45. public plugin_init()
  46. {
  47. register_plugin(PLUGIN,VERSION,AUTHOR)
  48.  
  49. sql_create_table();
  50.  
  51. register_impulse(201, "m_Fomenu");
  52. register_clcmd("say /menu", "m_Fomenu");
  53. register_clcmd("say /add", "m_Addolas");
  54.  
  55. register_event("CurWeapon", "m_CurWeapon", "be", "1=1");
  56. register_event("DeathMsg", "m_Halal", "a");
  57. }
  58.  
  59. new const c_Fegyverek[MAX][] =
  60. {
  61. { "Adidas AK47" },
  62. { "Barcelone AK47" },
  63. { "Black AK47" },
  64. { "Blooded AK47" },
  65. { "Blue AK47" },
  66. { "Carboned AK47" },
  67. { "Collect AK47" },
  68. { "Color AK47" },
  69. { "Curzon AK47" },
  70. { "Galaxy AK47" },
  71. { "Acho M4A1" },
  72. { "Black M4A1" },
  73. { "Cool M4A1" },
  74. { "Crome M4A1" },
  75. { "Desert M4A1" },
  76. { "Dragon M4A1" },
  77. { "Fain M4A1" },
  78. { "Fotote M4A1" },
  79. { "Future M4A1" },
  80. { "Galaxy M4A1" },
  81. { "Átlátszó Deagle" },
  82. { "Battle Deagle" },
  83. { "Black Deagle" },
  84. { "Colt Deagle" },
  85. { "Dragon Deagle" },
  86. { "Egyed Deagle" },
  87. { "Famosas Deagle" },
  88. { "Fantazi Deagle" },
  89. { "Galaxy Deagle" },
  90. { "Gold Deagle" },
  91. { "Amerika AWP" },
  92. { "Arany AWP" },
  93. { "Camon AWP" },
  94. { "Galaxy AWP" },
  95. { "Gyik AWP" },
  96. { "Ice AWP" },
  97. { "Joker AWP" },
  98. { "Katona AWP" },
  99. { "Laser AWP" },
  100. { "Monster AWP" },
  101. { "Adidas Kés" },
  102. { "Atom Kés" },
  103. { "Black Kés" },
  104. { "Botkés" },
  105. { "Color Kés" },
  106. { "Dragon Kés" },
  107. { "Gold Kés" },
  108. { "Jungel Kés" },
  109. { "Megatron Kés" },
  110. { "Natural Kés" }
  111. };
  112.  
  113. new const m_AK47[][] =
  114. {
  115. "models/exodus_skinmenu/Ak47/Adidas.mdl",
  116. "models/exodus_skinmenu/Ak47/Barcelone.mdl",
  117. "models/exodus_skinmenu/Ak47/Black.mdl",
  118. "models/exodus_skinmenu/Ak47/Blooded.mdl",
  119. "models/exodus_skinmenu/Ak47/Blue.mdl",
  120. "models/exodus_skinmenu/Ak47/Carboned.mdl",
  121. "models/exodus_skinmenu/Ak47/Collect.mdl",
  122. "models/exodus_skinmenu/Ak47/Collor.mdl",
  123. "models/exodus_skinmenu/Ak47/Curzon.mdl",
  124. "models/exodus_skinmenu/Ak47/Galaxy.mdl"
  125. };
  126. new const m_M4A1[][] =
  127. {
  128. "models/exodus_skinmenu/M4a1/Acho.mdl",
  129. "models/exodus_skinmenu/M4a1/Black.mdl",
  130. "models/exodus_skinmenu/M4a1/Cool.mdl",
  131. "models/exodus_skinmenu/M4a1/Crome.mdl",
  132. "models/exodus_skinmenu/M4a1/Desert.mdl",
  133. "models/exodus_skinmenu/M4a1/Dragon.mdl",
  134. "models/exodus_skinmenu/M4a1/Fain.mdl",
  135. "models/exodus_skinmenu/M4a1/Fotote.mdl",
  136. "models/exodus_skinmenu/M4a1/Future.mdl",
  137. "models/exodus_skinmenu/M4a1/Galaxy.mdl"
  138. };
  139. new const m_DEAGLE[][] =
  140. {
  141. "models/exodus_skinmenu/Deagle/Atlatszo.mdl",
  142. "models/exodus_skinmenu/Deagle/Batle.mdl",
  143. "models/exodus_skinmenu/Deagle/Black.mdl",
  144. "models/exodus_skinmenu/Deagle/Colt.mdl",
  145. "models/exodus_skinmenu/Deagle/Dragon.mdl",
  146. "models/exodus_skinmenu/Deagle/Egyed.mdl",
  147. "models/exodus_skinmenu/Deagle/Famosas.mdl",
  148. "models/exodus_skinmenu/Deagle/Fantazi.mdl",
  149. "models/exodus_skinmenu/Deagle/Galaxy.mdl",
  150. "models/exodus_skinmenu/Deagle/Gold.mdl"
  151. };
  152. new const m_AWP[][] =
  153. {
  154. "models/exodus_skinmenu/awp/Amerika.mdl",
  155. "models/exodus_skinmenu/awp/Arany.mdl",
  156. "models/exodus_skinmenu/awp/Camon.mdl",
  157. "models/exodus_skinmenu/awp/Galaxy.mdl",
  158. "models/exodus_skinmenu/awp/Gyik.mdl",
  159. "models/exodus_skinmenu/awp/Ice.mdl",
  160. "models/exodus_skinmenu/awp/Joker.mdl",
  161. "models/exodus_skinmenu/awp/Katona.mdl",
  162. "models/exodus_skinmenu/awp/Laser.mdl",
  163. "models/exodus_skinmenu/awp/Monster.mdl"
  164. };
  165. new const m_KNIFE[][] =
  166. {
  167. "models/exodus_skinmenu/knife/Adidas.mdl",
  168. "models/exodus_skinmenu/knife/Atom.mdl",
  169. "models/exodus_skinmenu/knife/Black.mdl",
  170. "models/exodus_skinmenu/knife/Bot.mdl",
  171. "models/exodus_skinmenu/knife/Color.mdl",
  172. "models/exodus_skinmenu/knife/Dragon.mdl",
  173. "models/exodus_skinmenu/knife/Gold.mdl",
  174. "models/exodus_skinmenu/knife/Jungel.mdl",
  175. "models/exodus_skinmenu/knife/Megatron.mdl",
  176. "models/exodus_skinmenu/knife/Natural.mdl"
  177. };
  178. public m_Addolas(id)
  179. {
  180. if(get_user_flags(id) & ADMIN)
  181. {
  182. for(new i;i < MAX; i++)
  183. t_OSkin[i][id] += 1;
  184. ColorChat(id, GREEN, "%s^1Megkaptál minden skint!", Chat_Prefix);
  185. }
  186. else
  187. {
  188. ColorChat(id, GREEN, "%s^1Nincs jogod ehhez a parancshoz", Chat_Prefix);
  189. }
  190. }
  191. public m_Fomenu(id)
  192. {
  193. new cim[121];
  194. format(cim, charsmax(cim), "[%s] \r~ \dFőmenü^n\dKövetkező Drop: [\r%d\d/%dÖlés]", Prefix, Oles[0][id], Drop[0][0]);
  195. new menu = menu_create(cim, "h_Fomenu");
  196.  
  197. menu_additem(menu, "Felszerelések", "1", 0);
  198. format(cim, charsmax(cim), "Random Skin \d[\r%d\d/25Ölés]^n^n\d%s", Oles[1][id], Website);
  199. menu_additem(menu, cim, "2", 0);
  200.  
  201. menu_display(id, menu, 0);
  202. }
  203.  
  204. public h_Fomenu(id, menu, item)
  205. {
  206. if(item == MENU_EXIT)
  207. {
  208. menu_destroy(menu);
  209. return;
  210. }
  211.  
  212. new data[9], szName[64];
  213. new access, callback;
  214. menu_item_getinfo(menu, item, access, data,charsmax(data), szName,charsmax(szName), callback);
  215. new key = str_to_num(data);
  216.  
  217. switch(key)
  218. {
  219. case 1: m_Felszereles(id);
  220. case 2:
  221. {
  222. if(Oles[1][id] >= 25)
  223. {
  224. m_RandomDrop(id);
  225. }
  226. else
  227. {
  228. ColorChat(id, GREEN, "%s^1Nincs meg a szükséges 25 ölésed", Chat_Prefix);
  229. }
  230. }
  231. }
  232. }
  233.  
  234. public m_Felszereles(id)
  235. {
  236. new String[121];
  237. formatex(String, charsmax(String), "[%s] \r~ \dFelszerelés", Prefix);
  238. new menu = menu_create(String, "h_Felszereles");
  239.  
  240. for(new i;i < sizeof(c_Fegyverek); i++)
  241. {
  242. if(t_OSkin[i][id] > 0)
  243. {
  244. new Sor[6]; num_to_str(i, Sor, 5);
  245. formatex(String, charsmax(String), "%s \d[\r%d \dDB]", c_Fegyverek[i][0], t_OSkin[i][id]);
  246. menu_additem(menu, String, Sor);
  247. }
  248. }
  249.  
  250. menu_display(id, menu, 0);
  251. }
  252.  
  253. public h_Felszereles(id, menu, item)
  254. {
  255. if(item == MENU_EXIT)
  256. {
  257. menu_destroy(menu);
  258. return;
  259. }
  260.  
  261. new data[9], szName[64];
  262. new access, callback;
  263. menu_item_getinfo(menu, item, access, data,charsmax(data), szName,charsmax(szName), callback);
  264. new key = str_to_num(data);
  265.  
  266. switch(key)
  267. {
  268. case 0..9: t_Skin[0][id] = key;
  269. case 10..19: t_Skin[1][id] = key-9;
  270. case 20..29: t_Skin[2][id] = key-19;
  271. case 30..39: t_Skin[3][id] = key-29;
  272. case 40..49: t_Skin[4][id] = key-39;
  273. }
  274. }
  275.  
  276. public m_Halal()
  277. {
  278. new Gyilkos = read_data(1);
  279. new Aldozat = read_data(2);
  280.  
  281. if(Gyilkos == Aldozat)
  282. return PLUGIN_HANDLED;
  283.  
  284. for(new i;i < 2; i++)
  285. Oles[i][Gyilkos] ++;
  286.  
  287. m_Halal_Ellenorzes(Gyilkos);
  288. return PLUGIN_HANDLED;
  289. }
  290. public m_Halal_Ellenorzes(id)
  291. {
  292. new FegyverID = random_num(0, MAX)
  293.  
  294. if(Oles[0][id] >= Drop[0][0])
  295. {
  296. t_OSkin[FegyverID][id]++;
  297. Oles[0][id] = 0;
  298. ColorChat(id, GREEN, "%s^1Találtál egy ^4%s^1-t.", Chat_Prefix, c_Fegyverek[FegyverID]);
  299. }
  300. }
  301. public plugin_precache()
  302. {
  303. for(new i;i < sizeof(m_AK47); i++)
  304. {
  305. precache_model(m_AK47[i]);
  306. }
  307. for(new i;i < sizeof(m_M4A1); i++)
  308. {
  309. precache_model(m_M4A1[i]);
  310. }
  311. for(new i;i < sizeof(m_DEAGLE); i++)
  312. {
  313. precache_model(m_DEAGLE[i]);
  314. }
  315. for(new i;i < sizeof(m_AWP); i++)
  316. {
  317. precache_model(m_AWP[i]);
  318. }
  319. for(new i;i < sizeof(m_KNIFE); i++)
  320. {
  321. precache_model(m_KNIFE[i]);
  322. }
  323. }
  324. public m_CurWeapon(id)
  325. {
  326. new Weapon = get_user_weapon(id);
  327.  
  328. for(new i;i < sizeof(m_AK47); i++)
  329. {
  330. if(t_Skin[0][id] == 1 + i && Weapon == CSW_AK47)
  331. {
  332. set_pev(id, pev_viewmodel2, m_AK47[i]);
  333. }
  334. }
  335. for(new i;i < sizeof(m_M4A1); i++)
  336. {
  337. if(t_Skin[1][id] == 1 + i && Weapon == CSW_M4A1)
  338. {
  339. set_pev(id, pev_viewmodel2, m_M4A1[i]);
  340. }
  341. }
  342. for(new i;i < sizeof(m_DEAGLE); i++)
  343. {
  344. if(t_Skin[2][id] == 1 + i && Weapon == CSW_DEAGLE)
  345. {
  346. set_pev(id, pev_viewmodel2, m_DEAGLE[i]);
  347. }
  348. }
  349. for(new i;i < sizeof(m_AWP); i++)
  350. {
  351. if(t_Skin[3][id] == 1 + i && Weapon == CSW_AWP)
  352. {
  353. set_pev(id, pev_viewmodel2, m_AWP[i]);
  354. }
  355. }
  356. for(new i;i < sizeof(m_KNIFE); i++)
  357. {
  358. if(t_Skin[4][id] == 1 + i && Weapon == CSW_KNIFE)
  359. {
  360. set_pev(id, pev_viewmodel2, m_KNIFE[i]);
  361. }
  362. }
  363. }
  364. public m_RandomDrop(id)
  365. {
  366. new FegyverID = random_num(0, MAX)
  367.  
  368. t_OSkin[FegyverID][id]++;
  369. Oles[1][id] -= 25;
  370. ColorChat(id, GREEN, "%s^1Random Drop: ^4%s^1.", Chat_Prefix, c_Fegyverek[FegyverID]);
  371. }
  372. public client_disconnect(id)
  373. {
  374. if(!is_user_bot(id))
  375. {
  376. sql_update_user(id);
  377. }
  378. for(new i;i < 2; i++)
  379. Oles[i][id] = 0;
  380.  
  381. for(new i;i < MAX; i++)
  382. t_OSkin[i][id] = 0;
  383.  
  384. for(new i;i < 5; i++)
  385. t_Skin[i][id] = 0;
  386.  
  387. copy(name[id], charsmax(name[]), "");
  388. }
  389. public client_putinserver(id)
  390. {
  391. if(!is_user_bot(id))
  392. {
  393. get_user_name(id, name[id], charsmax(name));
  394. sql_load_user(id);
  395. }
  396. }
  397. public sql_create_table()
  398. {
  399. g_SqlTuple = SQL_MakeDbTuple(SQLINFO[0], SQLINFO[1], SQLINFO[2], SQLINFO[3]);
  400.  
  401. static Query[10048];
  402. new Len;
  403.  
  404. Len += formatex(Query[Len], charsmax(Query), "CREATE TABLE IF NOT EXISTS `skin_menu_1.0`");
  405. Len += formatex(Query[Len], charsmax(Query)-Len, "(`Nev` varchar(32) NOT NULL, ");
  406.  
  407. for(new i;i < MAX; i++)
  408. Len += formatex(Query[Len], charsmax(Query)-Len, "`IT_%d` int(11) NOT NULL,", i);
  409.  
  410. for(new i;i < 2; i++)
  411. Len += formatex(Query[Len], charsmax(Query)-Len, "`Kill_%d` int(11) NOT NULL,", i);
  412.  
  413. for(new i;i < 5; i++)
  414. Len += formatex(Query[Len], charsmax(Query)-Len, "`SK_%d` int(11) NOT NULL,", i);
  415.  
  416. Len += formatex(Query[Len], charsmax(Query)-Len, "`id` INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY)");
  417.  
  418. SQL_ThreadQuery(g_SqlTuple, "createTableThread", Query);
  419. }
  420.  
  421. public sql_load_user(id)
  422. {
  423. static Query[10048];
  424. new Data[1];
  425. Data[0] = id;
  426.  
  427. formatex(Query, charsmax(Query), "SELECT * FROM `skin_menu_1.0` WHERE Nev = ^"%s^";", name[id]);
  428. SQL_ThreadQuery(g_SqlTuple, "QuerySelectData", Query, Data, 1);
  429. }
  430. public QuerySelectData(FailState, Handle:Query, Error[], Errcode, Data[], DataSize, Float:Queuetime)
  431. {
  432. if(FailState == TQUERY_CONNECT_FAILED || FailState == TQUERY_QUERY_FAILED)
  433. {
  434. log_amx("%s", Error);
  435. return;
  436. }
  437. else
  438. {
  439. new id = Data[0];
  440.  
  441. if(SQL_NumRows(Query) > 0)
  442. {
  443. for(new i;i < 2; i++)
  444. {
  445. new String[64];
  446. formatex(String, charsmax(String), "Kill_%d", i);
  447. Oles[i][id] = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, String));
  448. }
  449.  
  450. for(new i;i < MAX; i++)
  451. {
  452. new String[64];
  453. formatex(String, charsmax(String), "IT_%d", i);
  454. t_OSkin[i][id] = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, String));
  455. }
  456.  
  457. for(new i;i < 5; i++)
  458. {
  459. new String[64];
  460. formatex(String, charsmax(String), "SK%d", i);
  461. t_Skin[i][id] = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, String));
  462. }
  463. }
  464. else
  465. {
  466. sql_save_user(id);
  467. }
  468. }
  469. }
  470. public sql_save_user(id)
  471. {
  472. static Query[256];
  473.  
  474. formatex(Query, charsmax(Query), "INSERT INTO `skin_menu_1.0` (`Nev`) VALUES (^"%s^");", name[id]);
  475. SQL_ThreadQuery(g_SqlTuple, "QuerySetData", Query);
  476. }
  477. public sql_update_user(id)
  478. {
  479. static Query[10048];
  480. new Len;
  481.  
  482. Len += formatex(Query[Len], charsmax(Query), "UPDATE `skin_menu_1.0` SET Kill_1 = ^"%i^", ",Oles[0][id]);
  483.  
  484. for(new i;i < MAX; i++)
  485. Len += formatex(Query[Len], charsmax(Query)-Len, "IT_%d = ^"%i^", ", i, t_OSkin[i][id]);
  486.  
  487. for(new i;i < 5; i++)
  488. Len += formatex(Query[Len], charsmax(Query)-Len, "SK_%d = ^"%i^", ", i, t_Skin[i][id]);
  489.  
  490. Len += formatex(Query[Len], charsmax(Query)-Len, "Kill_0 = ^"%i^" WHERE Nev = ^"%s^";", Oles[1][id], name[id]);
  491.  
  492. SQL_ThreadQuery(g_SqlTuple, "QuerySetData", Query);
  493. }
  494. public createTableThread(FailState, Handle:Query, Error[], Errcode, Data[], DataSize, Float:Queuetime)
  495. {
  496. if(FailState == TQUERY_CONNECT_FAILED)
  497. set_fail_state("[HIBA*] NEM TUDTAM CSATLAKOZNI AZ ADATBAZISHOZ!");
  498. else if(FailState == TQUERY_QUERY_FAILED)
  499. set_fail_state("Query Error");
  500. if(Errcode)
  501. log_amx("[HIBA*] HIBAT DOBTAM: %s",Error);
  502. }
  503. public QuerySetData(FailState, Handle:Query, Error[], Errcode, Data[], DataSize, Float:Queuetime)
  504. {
  505. if(FailState == TQUERY_CONNECT_FAILED || FailState == TQUERY_QUERY_FAILED)
  506. {
  507. log_amx("%s", Error);
  508. return;
  509. }
  510. }
  511. public plugin_end()
  512. {
  513. SQL_FreeHandle(g_SqlTuple);
  514. }