Advertisement
Guest User

Untitled

a guest
Apr 20th, 2019
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.13 KB | None | 0 0
  1. /*new const knifeModels - Modele
  2. new const knifeNames - Nazwy
  3. new const knifeCosts - Koszt
  4. new const knifeAccess - Dostęp (0 - dla każdego, ADMIN_LEVEL_* - dla danej flagi)
  5.  
  6. #define KNIFE_COUNT - ilość kos, jeśli masz 3, to KNIFE_COUNT = 3*/
  7.  
  8.  
  9. #include <amxmodx>
  10. #include <amxmisc>
  11. #include <fakemeta>
  12. #include <engine>
  13. #include <vault>
  14. #include <fun>
  15. #include <ColorChat>
  16. #include <nvault>
  17.  
  18. #define PLUGIN "Kup kose za farbki"
  19. #define VERSION "2.1"
  20.  
  21.  
  22. new const prefix[] = "[^x04 PB ^x01]"
  23.  
  24.  
  25. #define FLAG_VIP ADMIN_LEVEL_H
  26. #define MAX_PLAYERS 32
  27. #define KNIFE_COUNT 14
  28.  
  29.  
  30. #define ForArray(%1,%2) for(new %1 = 0; %1 < sizeof %2; %1++)
  31. #define ForRange(%1,%2,%3) for(new %1 = %2; %1 <= %3; %1++)
  32.  
  33.  
  34. native cod_get_user_coins(id);
  35. native cod_set_user_coins(id, wartosc);
  36.  
  37.  
  38. new userKnife[MAX_PLAYERS + 1],
  39.  
  40. bool:userBought[KNIFE_COUNT][MAX_PLAYERS + 1],
  41.  
  42. vaultHandle;
  43.  
  44.  
  45. new const knifeCommands[][] =
  46. {
  47. "/knife",
  48. "/kosy",
  49. "/noz"
  50. };
  51.  
  52. new const knifeModels[][] =
  53. {
  54. "models/v_knife.mdl",
  55. "models/pb/pbkosy/v_knifedaggerslau.mdl",
  56. "models/pb/pbkosy/v_knifesplintzer.mdl",
  57.  
  58. "models/pb/pbkosy/v_knifedreamer.mdl",
  59. "models/pb/pbkosy/v_knifebutternorth.mdl",
  60. "models/pb/pbkosy/v_knife9dopler.mdl",
  61.  
  62. "models/pb/pbkosy/v_knifekarlore.mdl",
  63. "models/pb/pbkosy/v_Kosa1.mdl",
  64. "models/pb/pbkosy/v_knifem9bayonet.mdl",
  65.  
  66. "models/pb/pbkosy/v_knifemarblefade.mdl",
  67. "models/pb/pbkosy/v_knifeabyssal.mdl",
  68. "models/pb/pbkosy/v_knifeM9mgardient.mdl",
  69.  
  70. "models/pb/pbkosy/v_knifered.mdl",
  71. "models/pb/pbkosy/v_knifebay33.mdl",
  72. "models/pb/pbkosy/v_knifeauto.mdl",
  73.  
  74. "models/pb/pbkosy/v_knifegold.mdl",
  75. "models/pb/pbkosy_vip/v_testkvip.mdl"
  76. };
  77.  
  78. new const knifeNames[][] =
  79. {
  80. "Zwykly Noz",
  81. "Shadow Dagers | Slaughter",
  82. "Bagnet M9 | Splinter",
  83.  
  84. "Karambit | Blue Dreamer",
  85. "ButterFly | North",
  86. "Bayonet M9 | Dopler",
  87.  
  88. //"Bayonet M9 | Fade",
  89. "Karambit | Dragon Lore",
  90. "Karambit | Marble Fade",
  91.  
  92. "Bayonet M9 | Abyssal",
  93. "Bayonet M9 | Marble Gradient",
  94. "Karambit | Red Dreamer",
  95.  
  96. "Bayonet M9 | Damascus Steel",
  97. "Gut Knife | Autotronic",
  98. "CrossFire | Noble Gold"
  99. };
  100.  
  101. new const knifeCosts[] =
  102. {
  103. 0,
  104. 0,
  105. 30,
  106.  
  107. 50,
  108. 80,
  109. 100,
  110.  
  111. //350,
  112. 420,
  113. 580,
  114.  
  115. 620,
  116. 700,
  117. 800,
  118.  
  119. 900,
  120. 1000,
  121. 7
  122. };
  123.  
  124. new const knifeAccess[] =
  125. {
  126. 0,
  127. 0,
  128. 0,
  129.  
  130. 0,
  131. 0,
  132. 0,
  133.  
  134. //0,
  135. 0,
  136. 0,
  137.  
  138. 0,
  139. 0,
  140. 0,
  141.  
  142. 0,
  143. FLAG_VIP,
  144. FLAG_VIP
  145. };
  146.  
  147. public plugin_init()
  148. {
  149. register_plugin(PLUGIN, VERSION, "K@MILOVVSKY");
  150.  
  151. register_event("CurWeapon", "CurWeapon", "be", "1=1");
  152.  
  153. registerCommands(knifeCommands, sizeof(knifeCommands), "chooseSkins");
  154.  
  155. vaultHandle = nvault_open("Pb_Kosy");
  156.  
  157. if(vaultHandle == INVALID_HANDLE)
  158. {
  159. set_fail_state("Nie mozna otworzyc pliku.");
  160. }
  161. }
  162.  
  163.  
  164. public plugin_precache()
  165. {
  166. ForArray(i, knifeModels)
  167. {
  168. precache_model(knifeModels[i]);
  169. }
  170. }
  171.  
  172. public client_authorized(id)
  173. {
  174. Wczytaj(id);
  175. LoadDataKnife(id);
  176. }
  177.  
  178. public client_disconnected(id)
  179. {
  180. Zapisz(id);
  181.  
  182. ForRange(i, 0, KNIFE_COUNT - 1)
  183. {
  184. userBought[i][id] = false;
  185. }
  186. }
  187.  
  188. public plugin_end()
  189. {
  190. nvault_close(vaultHandle);
  191. }
  192.  
  193. public chooseSkins(index)
  194. {
  195. new menuIndex = menu_create("Skiny dla:", "chooseSkins_handler"),
  196. menuCallbackVip = menu_makecallback("vipSkinsChosen"),
  197. menuCallbackVipNotAvailable = menu_makecallback("vipSkinsNotActive");
  198.  
  199. menu_additem(menuIndex, "Graczy");
  200. menu_additem(menuIndex, "VIPow", "", 0, get_user_flags(index) & FLAG_VIP ? menuCallbackVip : menuCallbackVipNotAvailable);
  201.  
  202. menu_display(index, menuIndex);
  203.  
  204. return PLUGIN_HANDLED;
  205. }
  206.  
  207. public chooseSkins_handler(index, menu, item)
  208. {
  209. menu_destroy(menu);
  210.  
  211. if(item == MENU_EXIT)
  212. {
  213. return PLUGIN_HANDLED;
  214. }
  215.  
  216. chooseKnife(index, item);
  217.  
  218. return PLUGIN_HANDLED;
  219. }
  220.  
  221. public vipSkinsChosen(index, menu, item)
  222. {
  223. return ITEM_ENABLED;
  224. }
  225.  
  226. public vipSkinsNotActive(index, menu, item)
  227. {
  228. return ITEM_DISABLED;
  229. }
  230.  
  231. public chooseKnife(index, vipKnifes)
  232. {
  233. new aktywna = menu_makecallback("aktywna_func"),
  234. nieaktywna = menu_makecallback("nieaktywna_func"),
  235.  
  236. menuTitle[128],
  237. menuItem[128],
  238. menuIndex,
  239. menuData[4],
  240.  
  241. bool:available,
  242. bool:costAvailable;
  243.  
  244. formatex(menuTitle, charsmax(menuTitle), "\d==> \rDeagleShot.eu \d<==^n\wWybierz skin do \ykosy");
  245.  
  246. menuIndex = menu_create(menuTitle, "knifeChosen");
  247.  
  248. /*FREE*/
  249. if(vipKnifes)
  250. {
  251. menu_additem(menuIndex, "\wZwykly Noz", "0", 0, aktywna);
  252. menu_additem(menuIndex, "Shadow Dagers | Slaughter", "1", 0, aktywna);
  253. }
  254.  
  255. ForRange(i, 2, KNIFE_COUNT - 1)
  256. {
  257. if(vipKnifes && !knifeAccess[i])
  258. {
  259. continue;
  260. }
  261. else if(!vipKnifes && knifeAccess[i])
  262. {
  263. continue;
  264. }
  265.  
  266. if(userBought[i][index])
  267. {
  268. formatex(menuItem, charsmax(menuItem), "\w%s \d=>\yKupiono\d<=", knifeNames[i]);
  269.  
  270. available = true;
  271. }
  272. else
  273. {
  274. costAvailable = bool:(cod_get_user_coins(index) >= knifeCosts[i]);
  275.  
  276. formatex(menuItem, charsmax(menuItem), "\w%s \y[%s%s\r%i farbek \y]", knifeNames[i], costAvailable ? "\d" : "\y", costAvailable ? "koszt: " : "", knifeCosts[i]);
  277.  
  278. available = costAvailable;
  279. }
  280.  
  281. num_to_str(i, menuData, charsmax(menuData));
  282.  
  283. menu_additem(menuIndex, menuItem, menuData, 0, available ? aktywna : nieaktywna);
  284. }
  285.  
  286. menu_setprop(menuIndex, MPROP_BACKNAME, "Wstecz");
  287. menu_setprop(menuIndex, MPROP_NEXTNAME, "Dalej");
  288. menu_setprop(menuIndex, MPROP_EXITNAME, "Wyjdz");
  289. menu_display(index, menuIndex);
  290. }
  291.  
  292. public knifeChosen(index, menu, item)
  293. {
  294. new blank, menuData[6];
  295.  
  296. menu_item_getinfo(menu, item, blank, menuData, charsmax(menuData), _, _, blank);
  297.  
  298. item = str_to_num(menuData);
  299.  
  300. menu_destroy(menu);
  301.  
  302. if(!userBought[item][index] && cod_get_user_coins(index) >= knifeCosts[item])
  303. {
  304. /*
  305. if(knifeAccess[item])
  306. {
  307. if(!(get_user_flags(index) & knifeAccess[item]))
  308. {
  309. ColorChat(index, NORMAL, "%s Nie masz do tego dostepu.", prefix);
  310.  
  311. return PLUGIN_HANDLED;
  312. }
  313. }
  314. */
  315.  
  316. cod_set_user_coins(index, cod_get_user_coins(index) - knifeCosts[item]);
  317. ColorChat(index, NORMAL, "%s Kupiles ^x04%s^x01 za^x03 %i ^x01farbek.", prefix, knifeNames[item], knifeCosts[item]);
  318. userBought[item][index] = true;
  319. Zapisz(index);
  320. }
  321. else if(!userBought[item][index])
  322. {
  323. return PLUGIN_HANDLED;
  324. }
  325.  
  326. SetKnife(index, item);
  327. SaveDataKnife(index)
  328.  
  329. return PLUGIN_HANDLED
  330. }
  331.  
  332. public SetKnife(id, Knife)
  333. {
  334. userKnife[id] = Knife;
  335.  
  336. if(get_user_weapon(id) != CSW_KNIFE)
  337. {
  338. return PLUGIN_HANDLED;
  339. }
  340.  
  341. entity_set_string(id, EV_SZ_viewmodel, knifeModels[Knife]);
  342.  
  343. return PLUGIN_HANDLED;
  344. }
  345.  
  346. public CurWeapon(id)
  347. {
  348. if(!is_user_alive(id))
  349. {
  350. return PLUGIN_HANDLED;
  351. }
  352.  
  353. SetKnife(id, userKnife[id])
  354.  
  355. return PLUGIN_HANDLED;
  356. }
  357.  
  358. SaveDataKnife(id)
  359. {
  360. new steamIndex[32],
  361. vaultKey[64],
  362. vaultData[64];
  363.  
  364. get_user_authid(id, steamIndex, charsmax(steamIndex));
  365.  
  366. format(vaultKey, charsmax(vaultKey), "Knife_%s", steamIndex);
  367. format(vaultData, charsmax(vaultData), "%d", userKnife[id]);
  368.  
  369. set_vaultdata(vaultKey, vaultData);
  370. }
  371.  
  372. LoadDataKnife(id)
  373. {
  374. new steamIndex[32],
  375. vaultKey[64];
  376.  
  377. get_user_authid(id, steamIndex, charsmax(steamIndex));
  378.  
  379. format(vaultKey, charsmax(vaultKey), "Knife_%s", steamIndex);
  380.  
  381. userKnife[id] = get_vaultdata(vaultKey);
  382. }
  383.  
  384. public aktywna_func(id, menu, item)
  385. {
  386. return ITEM_ENABLED;
  387. }
  388.  
  389. public nieaktywna_func(id, menu, item)
  390. {
  391. return ITEM_DISABLED;
  392. }
  393.  
  394. public client_putinserver(id)
  395. {
  396. if(get_user_flags(id) & ADMIN_LEVEL_H || get_user_flags(id) & ADMIN_LEVEL_G)
  397. {
  398. return PLUGIN_HANDLED;
  399. }
  400.  
  401. SetKnife(id, 0);
  402.  
  403. return PLUGIN_HANDLED;
  404. }
  405.  
  406. public Zapisz(id)
  407. {
  408. new steamIndex[35];
  409.  
  410. get_user_name(id, steamIndex, charsmax(steamIndex));
  411.  
  412. new vaultKey[64],
  413. vaultData[256];
  414.  
  415. format(vaultKey, charsmax(vaultKey), "%s-Skiny", steamIndex);
  416.  
  417. ForRange(i, 0, KNIFE_COUNT - 1)
  418. {
  419. format(vaultData, charsmax(vaultData), "%s%d%s", vaultData, userBought[id], i == KNIFE_COUNT - 1 ? "" : "#");
  420. }
  421.  
  422. nvault_set(vaultHandle, vaultKey, vaultData);
  423.  
  424. return PLUGIN_CONTINUE;
  425. }
  426.  
  427. public Wczytaj(id)
  428. {
  429. new steamIndex[35],
  430. vaultKey[64],
  431. vaultData[256];
  432.  
  433. get_user_name(id, steamIndex, charsmax(steamIndex));
  434.  
  435. format(vaultKey, charsmax(vaultKey), "%s-Skiny", steamIndex);
  436.  
  437. nvault_get(vaultHandle, vaultKey, vaultData, charsmax(vaultData));
  438.  
  439. new vaultReadData[KNIFE_COUNT + 1][33];
  440.  
  441. explode(vaultData, '#', vaultReadData, KNIFE_COUNT + 1, sizeof(vaultReadData));
  442.  
  443. ForRange(i, 0, KNIFE_COUNT - 1)
  444. {
  445. userBought[i][id] = bool:str_to_num(vaultReadData[i]);
  446. }
  447.  
  448. return PLUGIN_CONTINUE;
  449. }
  450.  
  451. stock explode(const string[], const character, output[][], const maxs, const maxlen)
  452. {
  453. new iDo = 0,
  454. len = strlen(string),
  455. oLen = 0;
  456.  
  457. do
  458. {
  459. oLen += (1 + copyc(output[iDo++], maxlen, string[oLen], character))
  460. }
  461.  
  462. while(oLen < len && iDo < maxs)
  463. }
  464.  
  465. stock registerCommands(const array[][], arraySize, function[])
  466. {
  467. #if !defined ForRange
  468.  
  469. #define ForRange(%1,%2,%3) for(new %1 = %2; %1 <= %3; %1++)
  470.  
  471. #endif
  472.  
  473. new newCommand[33];
  474.  
  475. ForRange(i, 0, arraySize - 1)
  476. {
  477. ForRange(j, 0, 1)
  478. {
  479. formatex(newCommand, charsmax(newCommand), "%s %s", !j ? "say" : "say_team", array[i]);
  480. register_clcmd(newCommand, function);
  481. }
  482. }
  483. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement