Advertisement
Guest User

Untitled

a guest
Apr 20th, 2019
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.84 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 15
  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. };
  49.  
  50. new const knifeModels[][] =
  51. {
  52. "models/v_knife.mdl",
  53. "models/pb/pbkosy/v_knifedaggerslau.mdl",
  54. "models/pb/pbkosy/v_knifesplintzer.mdl",
  55.  
  56. "models/pb/pbkosy/v_knifedreamer.mdl",
  57. "models/pb/pbkosy/v_knifebutternorth.mdl",
  58. "models/pb/pbkosy/v_knife9dopler.mdl",
  59.  
  60. "models/pb/pbkosy/v_knifekarlore.mdl",
  61. "models/pb/pbkosy/v_Kosa1.mdl",
  62. "models/pb/pbkosy/v_knifem9bayonet.mdl",
  63.  
  64. "models/pb/pbkosy/v_knifemarblefade.mdl",
  65. "models/pb/pbkosy/v_knifeabyssal.mdl",
  66. "models/pb/pbkosy/v_knifeM9mgardient.mdl",
  67.  
  68. "models/pb/pbkosy/v_knifered.mdl",
  69. "models/pb/pbkosy/v_knifebay33.mdl",
  70. "models/pb/pbkosy/v_knifeauto.mdl",
  71.  
  72. "models/pb/pbkosy/v_knifegold.mdl",
  73. "models/pb/pbkosy_vip/v_testkvip.mdl"
  74. };
  75.  
  76. new const knifeNames[][] =
  77. {
  78. "Zwykly Noz",
  79. "Shadow Dagers | Slaughter",
  80. "Bagnet M9 | Splinter",
  81.  
  82. "Karambit | Blue Dreamer",
  83. "ButterFly | North",
  84. "Bayonet M9 | Dopler",
  85.  
  86. "Bayonet M9 | Fade",
  87. "Karambit | Dragon Lore",
  88. "Karambit | Marble Fade",
  89.  
  90. "Bayonet M9 | Abyssal",
  91. "Bayonet M9 | Marble Gradient",
  92. "Karambit | Red Dreamer",
  93.  
  94. "Bayonet M9 | Damascus Steel",
  95. "Gut Knife | Autotronic",
  96. "CrossFire | Noble Gold"
  97. };
  98.  
  99. new const knifeCosts[] =
  100. {
  101. 0,
  102. 0,
  103. 30,
  104.  
  105. 50,
  106. 80,
  107. 100,
  108.  
  109. 350,
  110. 420,
  111. 580,
  112.  
  113. 620,
  114. 700,
  115. 800,
  116.  
  117. 900,
  118. 1000,
  119. 1200
  120. };
  121.  
  122. new const knifeAccess[] =
  123. {
  124. 0,
  125. 0,
  126. 0,
  127.  
  128. 0,
  129. 0,
  130. 0,
  131.  
  132. 0,
  133. 0,
  134. 0,
  135.  
  136. 0,
  137. 0,
  138. 0,
  139.  
  140. 0,
  141. FLAG_VIP,
  142. FLAG_VIP
  143. };
  144.  
  145. public plugin_init()
  146. {
  147. register_plugin(PLUGIN, VERSION, "K@MILOVVSKY");
  148.  
  149. register_event("CurWeapon", "CurWeapon", "be", "1=1");
  150.  
  151. registerCommands(knifeCommands, sizeof(knifeCommands), "chooseKnife");
  152.  
  153. vaultHandle = nvault_open("Pb_Kosy");
  154.  
  155. if(vaultHandle == INVALID_HANDLE)
  156. {
  157. set_fail_state("Nie mozna otworzyc pliku.");
  158. }
  159. }
  160.  
  161.  
  162. public plugin_precache()
  163. {
  164. ForArray(i, knifeModels)
  165. {
  166. precache_model(knifeModels[i]);
  167. }
  168. }
  169.  
  170. public client_authorized(id)
  171. {
  172. Wczytaj(id);
  173. LoadDataKnife(id);
  174. }
  175.  
  176. public client_disconnected(id)
  177. {
  178. Zapisz(id);
  179.  
  180. ForRange(i, 0, KNIFE_COUNT - 1)
  181. {
  182. userBought[i][id] = false;
  183. }
  184. }
  185.  
  186. public plugin_end()
  187. {
  188. nvault_close(vaultHandle);
  189. }
  190.  
  191. public chooseKnife(id)
  192. {
  193. new aktywna = menu_makecallback("aktywna_func"),
  194. nieaktywna = menu_makecallback("niekatywna_func"),
  195.  
  196. menuTitle[128],
  197. menuItem[128],
  198. menuIndex,
  199.  
  200. bool:available,
  201. bool:costAvailable;
  202.  
  203. formatex(menuTitle, charsmax(menuTitle), "\d==> \rDeagleShot.eu \d<==^n\wWybierz skin do \ykosy");
  204.  
  205. menuIndex = menu_create(menuTitle, "knifemenu");
  206.  
  207. /*FREE*/
  208. menu_additem(menuIndex, "\wZwykly Noz", "", 0, aktywna);
  209. menu_additem(menuIndex, "Shadow Dagers | Slaughter", "", 0, aktywna);
  210.  
  211. ForRange(i, 2, KNIFE_COUNT - 1)
  212. {
  213. if(userBought[i][id])
  214. {
  215. formatex(menuItem, charsmax(menuItem), "\w%s \d=>\yKupiono\d<=", knifeNames[i]);
  216.  
  217. available = true;
  218. }
  219. else
  220. {
  221. costAvailable = bool:(cod_get_user_coins(id) >= knifeCosts[i]);
  222.  
  223. formatex(menuItem, charsmax(menuItem), "\w%s \y[%s%s\r%i farbek \y]", knifeNames[i], costAvailable ? "\d" : "\y", costAvailable ? "koszt: " : "", knifeCosts[i]);
  224.  
  225. available = costAvailable;
  226. }
  227.  
  228. menu_additem(menuIndex, menuItem, "", 0, available ? aktywna : nieaktywna);
  229. }
  230.  
  231. menu_setprop(menuIndex, MPROP_BACKNAME, "Wstecz");
  232. menu_setprop(menuIndex, MPROP_NEXTNAME, "Dalej");
  233. menu_setprop(menuIndex, MPROP_EXITNAME, "Wyjdz");
  234. menu_display(id, menuIndex);
  235. }
  236.  
  237. public knifemenu(id, menu, item)
  238. {
  239. if(!userBought[item][id] && cod_get_user_coins(id) >= knifeCosts[item])
  240. {
  241. if(knifeAccess[item])
  242. {
  243. if(!(get_user_flags(id) & knifeAccess[item]))
  244. {
  245. ColorChat(id, NORMAL, "%s Nie masz do tego dostepu.", prefix);
  246.  
  247. return PLUGIN_HANDLED;
  248. }
  249. }
  250.  
  251. cod_set_user_coins(id, cod_get_user_coins(id) - knifeCosts[item]);
  252. ColorChat(id, NORMAL, "%s Kupiles ^x04%s^x01 za^x03 %i ^x01farbek.", prefix, knifeNames[item], knifeCosts[item]);
  253. userBought[item][id] = true;
  254. Zapisz(id);
  255. }
  256. else if(!userBought[item][id])
  257. {
  258. return PLUGIN_HANDLED;
  259. }
  260.  
  261. SetKnife(id, item);
  262. SaveDataKnife(id)
  263.  
  264. return PLUGIN_HANDLED
  265. }
  266.  
  267. public SetKnife(id, Knife)
  268. {
  269. userKnife[id] = Knife;
  270.  
  271. if(get_user_weapon(id) != CSW_KNIFE)
  272. {
  273. return PLUGIN_HANDLED;
  274. }
  275.  
  276. entity_set_string(id, EV_SZ_viewmodel, knifeModels[Knife]);
  277.  
  278. return PLUGIN_HANDLED;
  279. }
  280.  
  281. public CurWeapon(id)
  282. {
  283. if(!is_user_alive(id))
  284. {
  285. return PLUGIN_HANDLED;
  286. }
  287.  
  288. SetKnife(id, userKnife[id])
  289.  
  290. return PLUGIN_HANDLED;
  291. }
  292.  
  293. SaveDataKnife(id)
  294. {
  295. new steamIndex[32],
  296. vaultKey[64],
  297. vaultData[64];
  298.  
  299. get_user_authid(id, steamIndex, charsmax(steamIndex));
  300.  
  301. format(vaultKey, charsmax(vaultKey), "Knife_%s", steamIndex);
  302. format(vaultData, charsmax(vaultData), "%d", userKnife[id]);
  303.  
  304. set_vaultdata(vaultKey, vaultData);
  305. }
  306.  
  307. LoadDataKnife(id)
  308. {
  309. new steamIndex[32],
  310. vaultKey[64];
  311.  
  312. get_user_authid(id, steamIndex, charsmax(steamIndex));
  313.  
  314. format(vaultKey, charsmax(vaultKey), "Knife_%s", steamIndex);
  315.  
  316. userKnife[id] = get_vaultdata(vaultKey);
  317. }
  318.  
  319. public aktywna_func(id, menu, item)
  320. {
  321. return ITEM_ENABLED;
  322. }
  323.  
  324. public nieaktywna_func(id, menu, item)
  325. {
  326. return ITEM_DISABLED;
  327. }
  328.  
  329. public client_putinserver(id)
  330. {
  331. if(get_user_flags(id) & ADMIN_LEVEL_H || get_user_flags(id) & ADMIN_LEVEL_G)
  332. {
  333. return PLUGIN_HANDLED;
  334. }
  335.  
  336. SetKnife(id, 0);
  337.  
  338. return PLUGIN_HANDLED;
  339. }
  340.  
  341. public Zapisz(id)
  342. {
  343. new steam_id[35];
  344.  
  345. get_user_name(id, steam_id, charsmax(steam_id));
  346.  
  347. new vaultKey[64],
  348. vaultData[256];
  349.  
  350. format(vaultKey, charsmax(vaultKey), "%s-Skiny", steam_id);
  351.  
  352. ForRange(i, 0, KNIFE_COUNT - 1)
  353. {
  354. format(vaultData, charsmax(vaultData), "%s%d%s", vaultData, userBought[id], i == KNIFE_COUNT - 1 ? "" : "#");
  355. }
  356.  
  357. nvault_set(vaultHandle, vaultKey, vaultData);
  358.  
  359. return PLUGIN_CONTINUE;
  360. }
  361.  
  362. public Wczytaj(id)
  363. {
  364. new steamIndex[35],
  365. vaultKey[64],
  366. vaultData[256];
  367.  
  368. get_user_name(id, steamIndex, charsmax(steamIndex));
  369.  
  370. format(vaultKey, charsmax(vaultKey), "%s-Skiny", steamIndex);
  371.  
  372. nvault_get(vaultHandle, vaultKey, vaultData, charsmax(vaultData));
  373.  
  374. new vaultReadData[KNIFE_COUNT + 1][33];
  375.  
  376. explode(vaultData, '#', vaultReadData, KNIFE_COUNT + 1, sizeof(vaultReadData));
  377.  
  378. ForRange(i, 0, KNIFE_COUNT - 1)
  379. {
  380. userBought[i][id] = bool:str_to_num(vaultReadData[i]);
  381. }
  382.  
  383. return PLUGIN_CONTINUE;
  384. }
  385.  
  386. stock explode(const string[], const character, output[][], const maxs, const maxlen)
  387. {
  388.  
  389. new iDo = 0,
  390. len = strlen(string),
  391. oLen = 0;
  392.  
  393. do
  394. {
  395. oLen += (1+copyc(output[iDo++],maxlen,string[oLen],character))
  396. }
  397. while(oLen < len && iDo < maxs)
  398. }
  399.  
  400. stock registerCommands(const array[][], arraySize, function[])
  401. {
  402. #if !defined ForRange
  403.  
  404. #define ForRange(%1,%2,%3) for(new %1 = %2; %1 <= %3; %1++)
  405.  
  406. #endif
  407.  
  408. new newCommand[33];
  409.  
  410. ForRange(i, 0, arraySize - 1)
  411. {
  412. ForRange(j, 0, 1)
  413. {
  414. formatex(newCommand, charsmax(newCommand), "%s %s", !j ? "say" : "say_team", array[i]);
  415. register_clcmd(newCommand, function);
  416. }
  417. }
  418. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement