Advertisement
Mr-Co0L

Untitled

Apr 22nd, 2019
165
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 32.84 KB | None | 0 0
  1. #include <amxmodx>
  2. #include <amxmisc>
  3. #include <hamsandwich>
  4. #include <fakemeta>
  5. #include <engine>
  6. #include <cstrike>
  7. #include <fun>
  8. #include <csx>
  9. #include <nvault>
  10.  
  11. #define PLUGIN "CSGO OUTSTANDING"
  12. #define VERSION "1.3"
  13.  
  14. #define ENG_NULLENT -1
  15. #define EV_INT_WEAPONKEY EV_INT_impulse
  16.  
  17. #define SKINS_MAX 32
  18. #define MAX_RANKS 32
  19.  
  20. #define KEY_COST 50
  21. #define RAFFLE_COST 10
  22.  
  23. #define FRAGMENTS_TO_CRAFT 3
  24. #define DROP_FRAGMENTS_CHANCE 60
  25.  
  26. #define POINTS_CHANCE 50
  27. #define POINTS_FOR_KILL 5
  28.  
  29. #define DROP_CASE_CHANCE 10
  30.  
  31. enum Data {
  32. Points,
  33. Case,
  34. Keys,
  35. Fragments
  36. }
  37. enum eData {
  38. Name[32],
  39. vModel[64],
  40. pModel[64],
  41. Type,
  42. Chance
  43. }
  44.  
  45. new g_aSkins[SKINS_MAX][eData];
  46.  
  47. /* Ranks system */
  48. enum eRankData {
  49. RankName[32],
  50. valFirst,
  51. valSecond
  52. }
  53.  
  54. new g_szRanks[MAX_RANKS][eRankData] ;
  55. new g_szRank[33][2][32], ranksNum;
  56.  
  57. /* Gift system */
  58. new g_iReceiver[33], g_iIterator[33], g_iSkinToGift[33];
  59.  
  60. /* Destroy system */
  61. new g_iSkinToDestroy[33];
  62.  
  63. /* Raffle system */
  64. new g_iRafflePlayers[33], raffleMembers;
  65.  
  66. /* Market system */
  67. new g_iSkinsInMarket[33][SKINS_MAX], g_iPrice[33], iSeller[33][SKINS_MAX];
  68.  
  69. /* Mute system */
  70. new iMutedPlayers[33][33];
  71.  
  72. /* Core */
  73. new g_iPlayerSkins[33][SKINS_MAX], g_iPlayerData[33][Data];
  74. new g_iSkins[33][SKINS_MAX], g_iMaxChance, g_iShowedSkin[33][31], skinsNum;
  75.  
  76. new const szTag[] = "[CS:GO OUTSTANDING]"
  77. public plugin_init()
  78. {
  79. register_plugin(PLUGIN, VERSION, "FaTzZu a.k.a Jailbreak suge ****");
  80.  
  81. register_clcmd("say /menu", "cmdSayMenu");
  82. register_clcmd("chooseteam", "cmdSayMenu");
  83.  
  84. register_logevent("evRoundEnd",2, "1=Round_End");
  85. register_event("DeathMsg", "evDeathMsg", "a");
  86.  
  87. register_event("SendAudio", "terroristsWin" , "a", "2&%!MRAD_terwin");
  88. register_event("SendAudio", "ctsWin", "a", "2&%!MRAD_ctwin");
  89.  
  90. // Weapon entity names
  91. new const szWeaponNames[][] = {
  92. "", "weapon_p228", "", "weapon_scout", "weapon_hegrenade", "weapon_xm1014", "weapon_c4", "weapon_mac10",
  93. "weapon_aug", "weapon_smokegrenade", "weapon_elite", "weapon_fiveseven", "weapon_ump45", "weapon_sg550",
  94. "weapon_galil", "weapon_famas", "weapon_usp", "weapon_glock18", "weapon_awp", "weapon_mp5navy", "weapon_m249",
  95. "weapon_m3", "weapon_m4a1", "weapon_tmp", "weapon_g3sg1", "weapon_flashbang", "weapon_deagle", "weapon_sg552",
  96. "weapon_ak47", "weapon_knife", "weapon_p90"
  97. };
  98. for (new i; i < sizeof(szWeaponNames); i++)
  99. {
  100. if (szWeaponNames[i][0])
  101. {
  102. RegisterHam(Ham_Item_AddToPlayer, szWeaponNames[i], "hamAddWeaponToPlayer");
  103. RegisterHam(Ham_Item_Deploy, szWeaponNames[i], "hamItemDeploy", 1);
  104. }
  105. }
  106. register_forward(FM_SetModel, "fwSetModel");
  107.  
  108. register_clcmd("Insert_price", "cmdInsertPrice");
  109.  
  110. }
  111. /* Precaching models */
  112. public plugin_precache()
  113. {
  114. new szConfigsDir[128], szMessage[64];
  115.  
  116. get_configsdir(szConfigsDir, charsmax(szConfigsDir));
  117. add(szConfigsDir, charsmax(szConfigsDir), "%s/csgo/skins.ini");
  118.  
  119. if(!file_exists(szConfigsDir))
  120. {
  121. write_file(szConfigsDir, ";TYPES 28=Ak47 22=M4a1 18=AWP 26=Deagle 29=Knife");
  122. write_file(szConfigsDir, ";Skin name v_Model p_Model TYPE Chance");
  123. write_file(szConfigsDir, ";Exemplu:");
  124. write_file(szConfigsDir, ";^"Ak47 Dragon Lore^" ^"models/GO/v_ak47_dragonlore.mdl^" ^"models/GO/p_ak47_dragonlore.mdl^" ^"28^" ^"20^"");
  125. }
  126.  
  127. new f = fopen(szConfigsDir, "rt");
  128. if(!f)
  129. return;
  130. new szLineData[256], szName[32], szViewModel[64], szPlayerModel[64], szType[8], szChance[4];
  131. while(!feof(f))
  132. {
  133. fgets(f, szLineData, charsmax(szLineData));
  134.  
  135. if(strlen(szLineData) < 2 || szLineData[0] == ';' || !szLineData[0])
  136. continue;
  137.  
  138. parse(szLineData, szName, charsmax(szName), szViewModel, charsmax(szViewModel), szPlayerModel, charsmax(szPlayerModel), szType, charsmax(szType), szChance, charsmax(szChance))
  139.  
  140. new iType = str_to_num(szType);
  141. new iChance = str_to_num(szChance)
  142.  
  143. copy(g_aSkins[skinsNum][Name], 31, szName);
  144. copy(g_aSkins[skinsNum][vModel], 63, szViewModel);
  145. copy(g_aSkins[skinsNum][pModel], 63, szPlayerModel);
  146. g_aSkins[skinsNum][Type] = iType;
  147. g_aSkins[skinsNum][Chance] = iChance;
  148.  
  149. skinsNum++
  150. }
  151.  
  152. fclose(f);
  153.  
  154. g_iMaxChance = g_aSkins[0][Chance];
  155. for (new i; i < skinsNum; i++)
  156. {
  157. if (g_aSkins[0][Chance] > g_iMaxChance)
  158. {
  159. g_iMaxChance = g_aSkins[0][Chance];
  160. }
  161. }
  162.  
  163. for (new i; i < skinsNum; i++)
  164. {
  165. if (!file_exists(g_aSkins[0][vModel]))
  166. {
  167. formatex(szMessage, charsmax(szMessage), "Missing model [%s]", g_aSkins[0][vModel]);
  168. set_fail_state(szMessage);
  169. }
  170. if (strlen(g_aSkins[0][pModel]) > 3)
  171. {
  172. if (!file_exists(g_aSkins[0][pModel]))
  173. {
  174. formatex(szMessage, charsmax(szMessage), "Missing model [%s]", g_aSkins[0][pModel]);
  175. set_fail_state(szMessage);
  176. }
  177. }
  178.  
  179. precache_model(g_aSkins[i][vModel]);
  180.  
  181. if (strlen(g_aSkins[i][pModel]) > 3)
  182. {
  183. precache_model(g_aSkins[i][pModel]);
  184. }
  185. }
  186. }
  187. /* Executing cfg's */
  188. public plugin_cfg()
  189. {
  190. new szConfigsDir[128];
  191. get_configsdir(szConfigsDir, charsmax(szConfigsDir));
  192.  
  193. add(szConfigsDir, charsmax(szConfigsDir), "%s/csgo/ranks.ini");
  194.  
  195. if(!file_exists(szConfigsDir))
  196. write_file(szConfigsDir, ";RANK - PRIMA VALOARE - A 2-A VALOARE", -1);
  197.  
  198. new f = fopen(szConfigsDir, "rt");
  199. if(!f)
  200. return;
  201. new szLineRankData[128], szRank[32], szFirstVal[8], szLastVal[8];
  202. while(!feof(f))
  203. {
  204. fgets(f, szLineRankData, charsmax(szLineRankData));
  205.  
  206. if(!szLineRankData[0] || szLineRankData[0] == ';' || strlen(szLineRankData) < 2)
  207. continue;
  208.  
  209. parse(szLineRankData, szRank, charsmax(szRank), szFirstVal, charsmax(szFirstVal), szLastVal, charsmax(szLastVal));
  210.  
  211. new iFirstVal = str_to_num(szFirstVal);
  212. new iLastVal = str_to_num(szLastVal);
  213.  
  214. copy(g_szRanks[ranksNum][RankName], charsmax(g_szRanks[]), szRank);
  215. g_szRanks[ranksNum][valFirst] = iFirstVal
  216. g_szRanks[ranksNum][valSecond] = iLastVal
  217.  
  218. ranksNum++;
  219. }
  220.  
  221.  
  222. }
  223. /* When client connects */
  224. public client_putinserver(id)
  225. {
  226. new iPlayers[32], iNum;
  227. get_players(iPlayers, iNum);
  228.  
  229. for(new i; i < iNum; i++)
  230. iMutedPlayers[id][iPlayers[i]] = 0;
  231.  
  232. for(new i; i < 31; i++)
  233. g_iShowedSkin[id][i] = skinsNum;
  234.  
  235. g_iSkinToGift[id] = skinsNum;
  236. g_iSkinToDestroy[id] = skinsNum;
  237. g_iPrice[id] = 0;
  238.  
  239. set_task(1.5, "taskSetRank", id);
  240.  
  241. LoadData(id);
  242. LoadMarket(id);
  243. }
  244. /* Set user's rank on putinserver and on player kill*/
  245. public taskSetRank(id)
  246. {
  247. new iStats[8], iBody[8];
  248. new iRankPos = get_user_stats(id, iStats, iBody);
  249.  
  250. for(new i; i <= ranksNum; i++)
  251. {
  252. if(g_szRanks[i][valFirst] <= iRankPos <= g_szRanks[i][valSecond])
  253. {
  254. copy(g_szRank[id][0], 31, g_szRanks[i][RankName])
  255. if(i!=0)
  256. copy(g_szRank[id][1], 31, g_szRanks[i-1][RankName])
  257.  
  258. break;
  259. }
  260. }
  261. }
  262. /* Hook DeathMsg event */
  263. public evDeathMsg()
  264. {
  265. refreshRanks();
  266.  
  267. new iChance;
  268. new iKiller = read_data(1);
  269. new iVictim = read_data(2);
  270.  
  271. if(!is_user_alive(iKiller) || iKiller == iVictim)
  272. return;
  273.  
  274. iChance = random_num(1, 100);
  275. if (iChance <= POINTS_CHANCE)
  276. {
  277. g_iPlayerData[iKiller][Points] += POINTS_FOR_KILL;
  278. client_print(iKiller, print_center, "+%d Points", POINTS_FOR_KILL);
  279. }
  280. if(iChance <= DROP_CASE_CHANCE)
  281. {
  282. g_iPlayerData[iKiller][Case]++;
  283. }
  284.  
  285. refreshRanks();
  286. }
  287. /* Refreshing every player rank */
  288. stock refreshRanks()
  289. {
  290. new iPlayers[32], iNum;
  291. get_players(iPlayers, iNum);
  292. for(new i;i<iNum;i++)
  293. {
  294. new id = iPlayers[i];
  295. new iStats[8], iBody[8];
  296. new iRankPos = get_user_stats(id, iStats, iBody);
  297.  
  298. for(new i; i <= ranksNum; i++)
  299. if(g_szRanks[i][valFirst] <= iRankPos <= g_szRanks[i][valSecond])
  300. {
  301. copy(g_szRank[id][0], 31, g_szRanks[i][RankName])
  302. if(i!=0)
  303. copy(g_szRank[id][1], 31, g_szRanks[i-1][RankName])
  304.  
  305. break;
  306. }
  307. }
  308. }
  309. /* When client disconnect */
  310. public client_disconnect(id)
  311. {
  312. SaveData(id)
  313. }
  314. /* Ham_Item_Deploy */
  315. public hamItemDeploy(ent)
  316. {
  317. static id;
  318. id = fm_cs_get_weapon_ent_owner(ent);
  319.  
  320. if (!pev_valid(id)) {
  321. return;
  322. }
  323.  
  324. if (g_iShowedSkin[id][cs_get_weapon_id(ent)] < skinsNum)
  325. {
  326. set_pev(id, pev_viewmodel2, g_aSkins[ g_iShowedSkin[id][cs_get_weapon_id(ent)]][vModel]);
  327.  
  328. if(strlen(g_aSkins[ g_iShowedSkin[id][cs_get_weapon_id(ent)]][pModel]) > 3)
  329. {
  330. set_pev(id, pev_weaponmodel2, g_aSkins[ g_iShowedSkin[id][cs_get_weapon_id(ent)]][pModel]);
  331. }
  332. }
  333. }
  334. /** Principal Menu **/
  335. public cmdSayMenu(id)
  336. {
  337. new menu, szText[128], szText2[128];
  338.  
  339. formatex(szText, charsmax(szText), "\w[ \yCSGO OUTSTANDING \w] Points: \y%d \w| Keys: \y%d \w^n Case: \y%d \w| Fragments: \y%d", g_iPlayerData[id][Points], g_iPlayerData[id][Keys], g_iPlayerData[id][Case], g_iPlayerData[id][Fragments])
  340. menu = menu_create(szText, "menuHandler");
  341.  
  342. menu_additem(menu, "Aplica \ySKIN");
  343. menu_additem(menu, "Deschide \ycufere \w| Crafteaza \ychei^n");
  344.  
  345. menu_additem(menu, "Ofera un \ycadou");
  346. menu_additem(menu, "Distruge un \yskin^n");
  347.  
  348. menu_additem(menu, "\wSkins \yMarket^n");
  349.  
  350. if(strlen(g_szRank[id][1]))
  351. {
  352. formatex(szText2, charsmax(szText2), "Rank actual: \y%s^n\wRank urmator: \y%s", g_szRank[id][0], g_szRank[id][1]);
  353. }
  354. else
  355. {
  356. formatex(szText2, charsmax(szText2), "Rank actual: \y%s \w( \dRank maxim \w)", g_szRank[id][0]);
  357. }
  358.  
  359. formatex(szText, charsmax(szText), "Jocuri de \ynoroc\w^n^n%s", szText2);
  360. menu_additem(menu, szText);
  361.  
  362. menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
  363. menu_display(id, menu, 0);
  364.  
  365. return PLUGIN_HANDLED;
  366. }
  367. public menuHandler(id, menu, item)
  368. {
  369. if(item == MENU_EXIT)
  370. {
  371. menu_destroy(menu);
  372. return PLUGIN_HANDLED;
  373. }
  374.  
  375. switch(item)
  376. {
  377. case 0:
  378. {
  379. if (user_have_skins(id))
  380. {
  381. showSkins(id);
  382. }
  383. else
  384. {
  385. ColorChat(id, "!g%s!nNu ai !gskinuri !nin inventar!", szTag);
  386. cmdSayMenu(id);
  387. }
  388. }
  389.  
  390. case 1: openCaseMenu(id);
  391.  
  392. case 2:
  393. {
  394. if (user_have_skins(id))
  395. {
  396. showGiftMenu(id);
  397. }
  398. else
  399. {
  400. ColorChat(id, "!g%s!nNu ai !gskinuri !nin inventar!", szTag);
  401. cmdSayMenu(id);
  402. }
  403. }
  404.  
  405. case 3:
  406. {
  407. if (user_have_skins(id))
  408. {
  409. showDestroyMenu(id);
  410. }
  411. else
  412. {
  413. ColorChat(id, "!g%s!nNu ai !gskinuri !nin inventar!", szTag);
  414. cmdSayMenu(id);
  415. }
  416. }
  417.  
  418. case 4: cmdShowMarket(id)
  419.  
  420. //case 5: cmdShowTradeMenu(id);
  421.  
  422. case 5: showGamesMenu(id)
  423. }
  424.  
  425. menu_destroy(menu);
  426. return PLUGIN_HANDLED;
  427. }
  428. /* Apply skin menu */
  429. public showSkins(id)
  430. {
  431. new menu, szText[64], k=0;
  432. menu = menu_create("\w[ \yCS:GO OUTSTANDING \w] \ySkinurile \wtale", "skinsMenuHandler");
  433.  
  434. for(new i; i < skinsNum; i++)
  435. {
  436. if(g_iPlayerSkins[id][i])
  437. {
  438. formatex(szText, charsmax(szText), "%s - \y%d \wBucati", g_aSkins[i][Name], g_iPlayerSkins[id][i]);
  439. menu_additem(menu, szText);
  440. g_iSkins[id][k++] = i;
  441. }
  442. }
  443.  
  444. menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
  445. menu_display(id, menu, 0);
  446. }
  447. public skinsMenuHandler(id, menu, item)
  448. {
  449. if( item == MENU_EXIT )
  450. {
  451. menu_destroy(menu);
  452. return PLUGIN_HANDLED;
  453. }
  454.  
  455. new iSkinID = g_iSkins[id][item];
  456.  
  457. g_iShowedSkin [id][g_aSkins[iSkinID][Type]] = iSkinID;
  458. ColorChat(id, "!g%s!nAi aplicat skinul !g%s!n.", szTag, g_aSkins[iSkinID][Name]);
  459. client_cmd(id, "lastinv");
  460. showSkins(id);
  461.  
  462. menu_destroy(menu);
  463. return PLUGIN_HANDLED;
  464. }
  465. /* Open case menu */
  466. public openCaseMenu(id)
  467. {
  468. new menu, szText[128];
  469. formatex(szText, charsmax(szText), "\w[ \yCSGO OUTSTANDING \w] Points: \y%d \w| Keys: \y%d \w| Case: \y%d \w| Fragments: \y%d", g_iPlayerData[id][Points], g_iPlayerData[id][Keys], g_iPlayerData[id][Case], g_iPlayerData[id][Fragments])
  470. menu = menu_create(szText, "openCaseMenuHandler");
  471.  
  472. if(!g_iPlayerData[id][Keys] || !g_iPlayerData[id][Case])
  473. {
  474. formatex(szText, charsmax(szText), "\dDeschide \ycufar^n");
  475. }
  476. else
  477. {
  478. formatex(szText, charsmax(szText), "Deschide \ycufar^n");
  479. }
  480. menu_additem(menu, szText);
  481.  
  482. if(g_iPlayerData[id][Fragments] < FRAGMENTS_TO_CRAFT)
  483. {
  484. formatex(szText, charsmax(szText), "\dCrafteaza o \ycheie \d( \y%d \d/ \y%d \d)", g_iPlayerData[id][Fragments], FRAGMENTS_TO_CRAFT);
  485. }
  486. else
  487. {
  488. formatex(szText, charsmax(szText), "Crafteaza o \ycheie \w( \y%d \w/ \y%d \w)", g_iPlayerData[id][Fragments], FRAGMENTS_TO_CRAFT);
  489. }
  490.  
  491. menu_additem(menu, szText);
  492.  
  493. if(g_iPlayerData[id][Points] < KEY_COST)
  494. {
  495. formatex(szText, charsmax(szText), "\dCumpara o \ycheie \w- \y%d \dPuncte", KEY_COST);
  496. }
  497. else
  498. {
  499. formatex(szText, charsmax(szText), "Cumpara o \ycheie \w- \y%d \wPuncte", KEY_COST);
  500. }
  501. menu_additem(menu, szText);
  502.  
  503. menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
  504. menu_display(id, menu, 0);
  505. }
  506. public openCaseMenuHandler(id, menu, item)
  507. {
  508. if( item == MENU_EXIT )
  509. {
  510. menu_destroy(menu);
  511. return PLUGIN_HANDLED;
  512. }
  513.  
  514. switch(item)
  515. {
  516. case 0:
  517. {
  518. if(!g_iPlayerData[id][Keys])
  519. {
  520. ColorChat(id, "!g%s!n Nu ai o !gcheie!n!", szTag);
  521. return PLUGIN_HANDLED;
  522. }
  523. if(!g_iPlayerData[id][Case])
  524. {
  525. ColorChat(id, "!g%s!n Nu ai un !gcufar!n!", szTag);
  526. return PLUGIN_HANDLED;
  527. }
  528.  
  529. new iSkins[SKINS_MAX], iRand, iChance, k=0;
  530.  
  531. iChance = random_num(1, g_iMaxChance);
  532. for(new i; i < skinsNum; i++)
  533. {
  534. if(iChance <= g_aSkins[i][Chance])
  535. iSkins[k++] = i;
  536. }
  537.  
  538. iRand = k == 0 ? iSkins[k] : iSkins[random(k)];
  539.  
  540. g_iPlayerSkins[id][iRand]++;
  541. g_iPlayerData[id][Keys]--;
  542. g_iPlayerData[id][Case]--;
  543.  
  544. ColorChat(id, "!g%s!nAi deschis un cufar si ai primit skinul !g%s!n.", szTag, g_aSkins[iRand][Name]);
  545. SaveData(id);
  546.  
  547. openCaseMenu(id);
  548. }
  549. case 1:
  550. {
  551. if(g_iPlayerData[id][Fragments] < FRAGMENTS_TO_CRAFT)
  552. {
  553. ColorChat(id, "!g%s!n Insuficiente !gfragmente !npentru a crafta o !gcheie!n.", szTag);
  554. return PLUGIN_HANDLED;
  555. }
  556. g_iPlayerData[id][Keys]++;
  557. g_iPlayerData[id][Fragments] -= FRAGMENTS_TO_CRAFT;
  558.  
  559. ColorChat(id, "!g%s!n Ai transformat !g%d!n fragmente intr-o !gcheie!n.", szTag, FRAGMENTS_TO_CRAFT);
  560.  
  561. openCaseMenu(id);
  562. }
  563. case 2:
  564. {
  565. if(g_iPlayerData[id][Points] < KEY_COST)
  566. {
  567. ColorChat(id, "!g%s!n Insuficiente !gpuncte !npentru a cumpara o !gcheie!n.", szTag);
  568. return PLUGIN_HANDLED;
  569. }
  570. g_iPlayerData[id][Keys]++;
  571. g_iPlayerData[id][Points] -= KEY_COST;
  572. ColorChat(id, "!g%s!n Ai achizitionat o !gcheie!n.", szTag);
  573. SaveData(id);
  574.  
  575. openCaseMenu(id);
  576. }
  577. }
  578. menu_destroy(menu);
  579. return PLUGIN_HANDLED;
  580. }
  581. /* Gift menu */
  582. public showGiftMenu(id)
  583. {
  584. new menu, szText[128], szName[32];
  585. menu = menu_create("\w[ \yCS:GO OUTSTANDING\w] \yGift \wMenu", "giftMenuHandler");
  586.  
  587. if(g_iReceiver[id])
  588. {
  589. get_user_name(g_iReceiver[id], szName, charsmax(szName));
  590. formatex(szText, charsmax(szText), "Jucator: \y%s", szName);
  591. }
  592. else formatex(szText, charsmax(szText), "Alege \yjucator\w:");
  593. menu_additem(menu, szText);
  594.  
  595. if(g_iSkinToGift[id] == skinsNum)
  596. formatex(szText, charsmax(szText), "Alege \ySkin^n");
  597. else formatex(szText, charsmax(szText), "Skin spre oferire: \y%s^n", g_aSkins[g_iSkinToGift[id]][Name]);
  598. menu_additem(menu, szText);
  599. menu_additem(menu, "\rTrimite");
  600.  
  601. menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
  602. menu_display(id, menu, 0);
  603. }
  604. public giftMenuHandler(id, menu, item)
  605. {
  606. if( item == MENU_EXIT )
  607. {
  608. menu_destroy(menu);
  609. return PLUGIN_HANDLED;
  610. }
  611.  
  612. switch(item)
  613. {
  614. case 0:
  615. {
  616. new iPlayers[32], iNum, idReceiver;
  617. get_players(iPlayers, iNum);
  618.  
  619. idReceiver = iPlayers[g_iIterator[id]]
  620. g_iReceiver[id] = idReceiver;
  621. g_iIterator[id]++;
  622.  
  623. if(g_iIterator[id] == iNum)
  624. g_iIterator[id] = 0;
  625.  
  626. showGiftMenu(id);
  627. }
  628. case 1:
  629. {
  630. showSkinsForGift(id);
  631. }
  632. case 2:
  633. {
  634. if(g_iSkinToGift[id] == skinsNum)
  635. {
  636. ColorChat(id, "!g%s!n Alege un !gskin!n!",szTag);
  637. showGiftMenu(id)
  638. return PLUGIN_HANDLED;
  639. }
  640. if(g_iReceiver[id] == id)
  641. {
  642. ColorChat(id, "!g%s!n Nu iti da !gskinuri !ntie!",szTag);
  643. showGiftMenu(id)
  644. return PLUGIN_HANDLED;
  645. }
  646. new szName[32];
  647. get_user_name(id, szName, charsmax(szName));
  648.  
  649. g_iPlayerSkins[id][g_iSkinToGift[id]]--;
  650. g_iPlayerSkins[g_iReceiver[id]][g_iSkinToGift[id]]++;
  651.  
  652. ColorChat(g_iReceiver[id], "!g%s!nAi primit !g%s !n de la !g%s!n.", szTag, g_aSkins[g_iSkinToGift[id]][Name], szName);
  653. g_iSkinToGift[id] = skinsNum;
  654.  
  655. SaveData(id);
  656. SaveData(g_iReceiver[id]);
  657. }
  658. }
  659. menu_destroy(menu);
  660. return PLUGIN_HANDLED;
  661. }
  662. /* Skins List for gift */
  663. public showSkinsForGift(id)
  664. {
  665. new menu, szText[64], k=0;
  666. menu = menu_create("\w[ \yCS:GO OUTSTANDING \w] Alege skinul pe care vrei sa il daruiesti", "skinsForGiftMenuHandler");
  667.  
  668. for(new i; i < skinsNum; i++)
  669. if(g_iPlayerSkins[id][i])
  670. {
  671. formatex(szText, charsmax(szText), "%s - \y%d \wBucati", g_aSkins[i][Name], g_iPlayerSkins[id][i]);
  672. menu_additem(menu, szText);
  673. g_iSkins[id][k++] = i;
  674. }
  675.  
  676. menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
  677. menu_display(id, menu, 0);
  678. }
  679. public skinsForGiftMenuHandler(id, menu, item)
  680. {
  681. if( item == MENU_EXIT )
  682. {
  683. menu_destroy(menu);
  684. return PLUGIN_HANDLED;
  685. }
  686.  
  687. g_iSkinToGift[id] = g_iSkins[id][item];
  688. showGiftMenu(id);
  689.  
  690. menu_destroy(menu);
  691. return PLUGIN_HANDLED;
  692. }
  693. /* Destroy skin menu */
  694. public showDestroyMenu(id)
  695. {
  696. new menu, szText[128];
  697. menu = menu_create("\w[ \yCS:GO OUTSTANDING \w] \wDestroy \ySkin \wMenu", "destroyMenuHandler");
  698.  
  699. if(g_iSkinToDestroy[id] == skinsNum)
  700. formatex(szText, charsmax(szText), "Alege \ySkin^n");
  701. else formatex(szText, charsmax(szText), "Skin pentru distrugere: \y%s^n", g_aSkins[g_iSkinToDestroy[id]][Name]);
  702. menu_additem(menu, szText);
  703. menu_additem(menu, "\rDistruge");
  704.  
  705. menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
  706. menu_display(id, menu, 0);
  707. }
  708. public destroyMenuHandler(id, menu, item)
  709. {
  710. if( item == MENU_EXIT )
  711. {
  712. menu_destroy(menu);
  713. return PLUGIN_HANDLED;
  714. }
  715.  
  716. switch(item)
  717. {
  718. case 0:
  719. {
  720. showSkinsForDestroy(id);
  721. }
  722. case 1:
  723. {
  724. if(g_iSkinToDestroy[id] == skinsNum)
  725. {
  726. ColorChat(id, "!g%s!n Alege un !gskin!n!",szTag);
  727. showDestroyMenu(id)
  728. return PLUGIN_HANDLED;
  729. }
  730.  
  731. g_iPlayerSkins[id][g_iSkinToDestroy[id]]--;
  732. g_iPlayerData[id][Fragments]++;
  733. ColorChat(id, "!g%s!nAi distrus skinul !g%s!n si ai primit un !gfragment !nde !gcheie!n.", szTag, g_aSkins[g_iSkinToDestroy[id]][Name]);
  734.  
  735. g_iSkinToDestroy[id] = skinsNum;
  736. SaveData(id);
  737.  
  738. showDestroyMenu(id);
  739. }
  740. }
  741. menu_destroy(menu);
  742. return PLUGIN_HANDLED;
  743. }
  744. /* Skins List to destroy */
  745. public showSkinsForDestroy(id)
  746. {
  747. new menu, szText[64], k=0;
  748. menu = menu_create("\w[ \yCS:GO OUTSTANDING \w] Alege skinul pe care vrei sa il distrugi", "skinsForDestroyMenuHandler");
  749.  
  750. for(new i; i < skinsNum; i++)
  751. if(g_iPlayerSkins[id][i])
  752. {
  753. formatex(szText, charsmax(szText), "%s - \y%d \wBucati", g_aSkins[i][Name], g_iPlayerSkins[id][i]);
  754. menu_additem(menu, szText);
  755. g_iSkins[id][k++] = i;
  756. }
  757.  
  758. menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
  759. menu_display(id, menu, 0);
  760. }
  761. public skinsForDestroyMenuHandler(id, menu, item)
  762. {
  763. if( item == MENU_EXIT )
  764. {
  765. menu_destroy(menu);
  766. return PLUGIN_HANDLED;
  767. }
  768.  
  769. g_iSkinToDestroy[id] = g_iSkins[id][item];
  770. showDestroyMenu(id);
  771.  
  772. menu_destroy(menu);
  773. return PLUGIN_HANDLED;
  774. }
  775. /* Market menu */
  776. public cmdShowMarket(id)
  777. {
  778. new menu;
  779.  
  780. menu = menu_create("\w[ \yCSGO OUTSTANDING \w] Market Shop", "marketMenuHandler");
  781.  
  782. menu_additem(menu, "\wCumpara \yskin^n");
  783.  
  784. menu_additem(menu, "Adauga \yskin \win market");
  785. menu_additem(menu, "Retrage \yskin \wdin market");
  786.  
  787. menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
  788. menu_display(id, menu, 0);
  789. }
  790. public marketMenuHandler(id, menu, item)
  791. {
  792. if( item == MENU_EXIT )
  793. {
  794. menu_destroy(menu);
  795. return PLUGIN_HANDLED;
  796. }
  797.  
  798. switch(item)
  799. {
  800. case 0: showSkinsInMarketMenu(id);
  801. case 1: showSkinsToSellMenu(id);
  802. case 2: showRemoveSkinMenu(id);
  803. }
  804.  
  805. menu_destroy(menu);
  806. return PLUGIN_HANDLED;
  807. }
  808. /* Skins in market */
  809. public showSkinsInMarketMenu(id)
  810. {
  811. new menu, szText[256], szName[32], k=0;
  812.  
  813. new iPlayers[32], iNum, idV;
  814. get_players(iPlayers, iNum);
  815.  
  816. menu = menu_create("\w[ \yCSGO OUTSTANDING \w] Skinuri in market", "skinsInMarketMenuHandler");
  817.  
  818. for(new i; i < iNum; i++)
  819. {
  820. idV = iPlayers[i];
  821. for(new j; j < skinsNum; j++)
  822. {
  823. if(g_iSkinsInMarket[idV][j])
  824. {
  825. get_user_name(idV, szName, charsmax(szName));
  826.  
  827. formatex(szText, charsmax(szText), "\y%s \w[ \y%d \wpoints \w] [ Vanzator: \y%s \w]", g_aSkins[j][Name], g_iSkinsInMarket[idV][j], szName);
  828. menu_additem(menu, szText);
  829. g_iSkins[id][k] = j;
  830. iSeller[id][k++] = idV;
  831. }
  832. }
  833. }
  834.  
  835. menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
  836. menu_display(id, menu, 0);
  837. }
  838. public skinsInMarketMenuHandler(id, menu, item)
  839. {
  840. if( item == MENU_EXIT )
  841. {
  842. menu_destroy(menu);
  843. return PLUGIN_HANDLED;
  844. }
  845. new szSellerName[32], szName[32];
  846.  
  847. new iSkinID = g_iSkins[id][item]
  848. new iSellerID = iSeller[id][item];
  849.  
  850. if(g_iPlayerData[id][Points] < g_iSkinsInMarket[iSellerID][iSkinID])
  851. {
  852. ColorChat(id, "!g%s!nPuncte insuficiente pentru a cumpara skinul!", szTag);
  853. return PLUGIN_HANDLED;
  854. }
  855.  
  856. get_user_name(id, szName, charsmax(szName));
  857. get_user_name(iSellerID, szSellerName, charsmax(szSellerName));
  858.  
  859. g_iPlayerData[id][Points] -= g_iSkinsInMarket[iSellerID][iSkinID];
  860. g_iPlayerData[iSellerID][Points] += g_iSkinsInMarket[iSellerID][iSkinID];
  861.  
  862. g_iPlayerSkins[id][iSkinID]++;
  863.  
  864. ColorChat(0, "!g%s!nA fost achizitionat skinul !g%s !nde la !g%s !ncu !g%d !npuncte de catre !g%s!n.", szTag, g_aSkins[iSkinID][Name], szSellerName, g_iSkinsInMarket[iSellerID][iSkinID], szName);
  865. ColorChat(iSellerID, "!g%s!nTi-a fost achizitionat skinul !g%s !ncu !g%d !npuncte de catre !g%s!n.", szTag, g_aSkins[iSkinID][Name], g_iSkinsInMarket[iSellerID][iSkinID], szName);
  866.  
  867. g_iSkinsInMarket[iSellerID][iSkinID] = 0;
  868.  
  869. SaveData(id);
  870. SaveMarket(id);
  871.  
  872. menu_destroy(menu);
  873. return PLUGIN_HANDLED;
  874. }
  875. /* Skins to sell */
  876. public showSkinsToSellMenu(id)
  877. {
  878. new menu, szText[128], k=0;
  879.  
  880. menu = menu_create("\w[ \yCSGO OUTSTANDING \w] Alege skinul", "skinsToSellMenuHandler");
  881.  
  882. if(!g_iPrice[id])
  883. formatex(szText, charsmax(szText), "Alege \ypretul^n");
  884. else
  885. formatex(szText, charsmax(szText), "\yPret\r: \w%d^n", g_iPrice[id]);
  886. menu_additem(menu, szText);
  887. for(new i; i < skinsNum; i++)
  888. {
  889. if(g_iPlayerSkins[id][i])
  890. {
  891. formatex(szText, charsmax(szText), "\y%s \w- \r*\y%d \wBucati", g_aSkins[i][Name], g_iPlayerSkins[id][i]);
  892. menu_additem(menu, szText);
  893.  
  894. g_iSkins[id][k++] = i;
  895. }
  896. }
  897.  
  898. menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
  899. menu_display(id, menu, 0);
  900. }
  901. public skinsToSellMenuHandler(id, menu, item)
  902. {
  903. if( item == MENU_EXIT )
  904. {
  905. menu_destroy(menu);
  906. return PLUGIN_HANDLED;
  907. }
  908. new iSkinID, szName[32];
  909. get_user_name(id, szName, charsmax(szName));
  910. if(item == 0)
  911. {
  912. client_cmd(id, "messagemode Insert_price");
  913. menu_destroy(menu);
  914. return PLUGIN_HANDLED;
  915. }
  916. if(!g_iPrice[id])
  917. {
  918. ColorChat(id, "!g%s!nNu ai ales inca pretul!", szTag);
  919. showSkinsToSellMenu(id)
  920. return PLUGIN_HANDLED
  921. }
  922. iSkinID = g_iSkins[id][item-1];
  923.  
  924. if(g_iSkinsInMarket[id][iSkinID])
  925. {
  926. ColorChat(id, "!g%s!nAi pus deja acest !gskin in !gmarket!n!", szTag);
  927. showSkinsToSellMenu(id);
  928. return PLUGIN_HANDLED;
  929. }
  930.  
  931. g_iPlayerSkins[id][iSkinID]--;
  932. g_iSkinsInMarket[id][iSkinID] = g_iPrice[id];
  933.  
  934. ColorChat(id, "!g%s!nAi adaugat skinul !g%s !nin market cu !g%d !npuncte.", szTag, g_aSkins[iSkinID][Name], g_iPrice[id]);
  935. ColorChat(0, "!g%s!nJucatorul !g%s !na adaugat skinul !g%s !nin market cu !g%d !npuncte.", szTag, szName, g_aSkins[iSkinID][Name], g_iPrice[id]);
  936. g_iPrice[id] = 0;
  937.  
  938. SaveData(id)
  939. SaveMarket(id);
  940.  
  941. showSkinsToSellMenu(id);
  942.  
  943. menu_destroy(menu);
  944. return PLUGIN_HANDLED;
  945. }
  946. public cmdInsertPrice(id)
  947. {
  948. new szPrice[8];
  949. read_args(szPrice, charsmax(szPrice));
  950. remove_quotes(szPrice);
  951.  
  952. new iPrice = str_to_num(szPrice);
  953. if(!iPrice || iPrice < 0)
  954. {
  955. ColorChat(id, "!g%s!nInvalid number, try again!", szTag);
  956. client_cmd(id, "messagemode Insert_price");
  957. }
  958.  
  959. g_iPrice[id] = iPrice;
  960. showSkinsToSellMenu(id);
  961. }
  962. /* Remove skin from market */
  963. public showRemoveSkinMenu(id)
  964. {
  965. new menu, szText[128], k=0;
  966.  
  967. menu = menu_create("\w[ \yCSGO OUTSTANDING \w] Alege skinul pe care doresti sa il retragi", "skinsToRemoveMenuHandler");
  968. for(new i; i < skinsNum; i++)
  969. {
  970. if(g_iSkinsInMarket[id][i])
  971. {
  972. formatex(szText, charsmax(szText), "\y%s", g_aSkins[i][Name]);
  973. menu_additem(menu, szText);
  974.  
  975. g_iSkins[id][k++] = i;
  976. }
  977. }
  978.  
  979. menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
  980. menu_display(id, menu, 0);
  981. }
  982. public skinsToRemoveMenuHandler(id, menu, item)
  983. {
  984. if(item == MENU_EXIT)
  985. {
  986. cmdShowMarket(id);
  987. return PLUGIN_HANDLED;
  988. }
  989.  
  990. new szName[32], iSkinID;
  991.  
  992. get_user_name(id, szName, charsmax(szName));
  993. iSkinID = g_iSkins[id][item];
  994.  
  995. g_iSkinsInMarket[id][iSkinID] = 0;
  996. g_iPlayerSkins[id][iSkinID]++;
  997.  
  998. ColorChat(0, "!g%s!nJucatorul !g%s !na retras skinul !g%s !ndin market.", szTag, szName, g_aSkins[iSkinID][Name]);
  999.  
  1000. cmdShowMarket(id);
  1001. return PLUGIN_HANDLED;
  1002. }
  1003. /* Games Menu */
  1004. public showGamesMenu(id)
  1005. {
  1006. new menu, szText[64];
  1007. menu = menu_create("\w[ \yCS:GO OUTSTANDING \w] Meniu de \yjocuri", "gamesMenuHandler");
  1008.  
  1009. formatex(szText, charsmax(szText), "Tombola | \y%d \wPuncte", RAFFLE_COST)
  1010. menu_additem(menu, szText);
  1011.  
  1012. menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
  1013. menu_display(id, menu, 0);
  1014. }
  1015. public gamesMenuHandler(id, menu, item)
  1016. {
  1017. if( item == MENU_EXIT )
  1018. {
  1019. menu_destroy(menu);
  1020. return PLUGIN_HANDLED;
  1021. }
  1022.  
  1023. switch(item)
  1024. {
  1025. case 0:
  1026. {
  1027. if(g_iPlayerData[id][Points] < RAFFLE_COST)
  1028. {
  1029. ColorChat(id, "!g%s!nInsuficiente !gpuncte !npentru a juca la tombola", szTag);
  1030. return PLUGIN_HANDLED;
  1031. }
  1032. new szName[32];
  1033. get_user_name(id, szName, charsmax(szName));
  1034.  
  1035. for(new i; i < raffleMembers; i++)
  1036. {
  1037. if(g_iRafflePlayers[i] == id)
  1038. {
  1039. ColorChat(id, "!g%s!nTe-ai inscris deja in tombola runda asta!", szTag);
  1040. return PLUGIN_HANDLED;
  1041. }
  1042. }
  1043.  
  1044. g_iRafflePlayers[raffleMembers++] = id;
  1045. g_iPlayerData[id][Points] -= RAFFLE_COST
  1046. ColorChat(0, "!g%s!nJucatorul !g%s !ns-a inscris in !gtombola!n.Jucatori inscrisi: !g%d!n.", szTag, szName, raffleMembers);
  1047. }
  1048. }
  1049.  
  1050. menu_destroy(menu);
  1051. return PLUGIN_HANDLED;
  1052. }
  1053. /* Round end event */
  1054. public evRoundEnd()
  1055. {
  1056. if(raffleMembers)
  1057. {
  1058. new iRand, szName[32];
  1059.  
  1060. iRand = random(raffleMembers);
  1061. get_user_name(g_iRafflePlayers[iRand], szName, charsmax(szName));
  1062.  
  1063. g_iPlayerData[g_iRafflePlayers[iRand]][Points] += RAFFLE_COST*raffleMembers;
  1064.  
  1065. ColorChat(0, "!g%s!nTombola pe runda aceasta s-a incheiat !", szTag);
  1066. ColorChat(0, "!g%s!nJucatorul !g%s !na avut bulan si a castigat !g%d!n puncte !", szTag, szName, RAFFLE_COST*raffleMembers);
  1067. ColorChat(0, "!g%s!nNu fiti suparati, vorba aia, prost sa fii noroc sa ai !", szTag);
  1068.  
  1069. raffleMembers = 0;
  1070. }
  1071. else
  1072. {
  1073. ColorChat(0, "!g%s!nNiciun jucator !ginscris !nin aceasta runda !", szTag);
  1074. ColorChat(0, "!g%s!nAsteptam extragerea din runda urmatoare !", szTag);
  1075. }
  1076. }
  1077. /* Giving keys when win a round */
  1078. public terroristsWin()
  1079. {
  1080. new iPlayers[32], iNum, id, iRand;
  1081. get_players(iPlayers, iNum, "ae", "TERRORISTS");
  1082.  
  1083. for(new i; i < iNum; i++)
  1084. {
  1085. id = iPlayers[i];
  1086. iRand = random_num(1, 100);
  1087.  
  1088. if(iRand <= DROP_FRAGMENTS_CHANCE)
  1089. {
  1090. g_iPlayerData[id][Fragments]++;
  1091. ColorChat(id, "!g%s!nFelicitari, ai primit un !gfragment !nde cheie !", szTag);
  1092.  
  1093. SaveData(id);
  1094. }
  1095. }
  1096. }
  1097. public ctsWin()
  1098. {
  1099. new iPlayers[32], iNum, id, iRand;
  1100. get_players(iPlayers, iNum, "ae", "CT");
  1101.  
  1102. for(new i; i < iNum; i++)
  1103. {
  1104. id = iPlayers[i];
  1105. iRand = random_num(1, 100);
  1106.  
  1107. if(iRand <= DROP_FRAGMENTS_CHANCE)
  1108. {
  1109. g_iPlayerData[id][Fragments]++;
  1110. ColorChat(id, "!g%s!nFelicitari, ai primit un !gfragment !nde cheie !", szTag);
  1111.  
  1112. SaveData(id);
  1113. }
  1114. }
  1115. }
  1116. public hamAddWeaponToPlayer(ent, id)
  1117. {
  1118. if(!is_valid_ent(ent) || !is_user_connected(id))
  1119. return HAM_IGNORED;
  1120.  
  1121. for (new i; i < skinsNum; i++) {
  1122. if(entity_get_int(ent, EV_INT_WEAPONKEY) == 500+i)
  1123. {
  1124. entity_set_int(ent, EV_INT_WEAPONKEY, 0);
  1125. g_iShowedSkin[id][g_aSkins[i][Type]] = i;
  1126.  
  1127. return HAM_HANDLED;
  1128. }
  1129. }
  1130. return HAM_IGNORED;
  1131. }
  1132. public fwSetModel(entity, model[])
  1133. {
  1134. if(!is_valid_ent(entity))
  1135. return FMRES_IGNORED;
  1136.  
  1137. static szClassName[33];
  1138. entity_get_string(entity, EV_SZ_classname, szClassName, charsmax(szClassName));
  1139.  
  1140. if(!equal(szClassName, "weaponbox"))
  1141. return FMRES_IGNORED;
  1142.  
  1143. static iOwner;
  1144.  
  1145. new szModels[][][] = {
  1146. {"models/w_ak47.mdl", "weapon_ak47" },
  1147. {"models/w_m4a1.mdl", "weapon_m4a1" },
  1148. {"models/w_awp.mdl", "weapon_awp" }
  1149. }
  1150.  
  1151. new iWeapons[] = {
  1152. CSW_AK47,
  1153. CSW_M4A1,
  1154. CSW_AWP
  1155. }
  1156.  
  1157. iOwner = entity_get_edict(entity, EV_ENT_owner);
  1158.  
  1159. for(new i; i < sizeof(szModels); i++)
  1160. if(equal(model, szModels[i][0]))
  1161. {
  1162.  
  1163. static iStoredAugID;
  1164. iStoredAugID = find_ent_by_owner(ENG_NULLENT, szModels[i][1], entity);
  1165.  
  1166. if(!is_valid_ent(iStoredAugID))
  1167. return FMRES_IGNORED;
  1168.  
  1169. entity_set_int(iStoredAugID, EV_INT_WEAPONKEY, 500+g_iShowedSkin[iOwner][iWeapons[i]]);
  1170. entity_set_model(entity, szModels[i][0]);
  1171.  
  1172. return FMRES_SUPERCEDE;
  1173. }
  1174. return FMRES_IGNORED;
  1175. }
  1176. /* Save & Load Data */
  1177. public SaveData(id)
  1178. {
  1179. new iVault = nvault_open("CSGOData2");
  1180.  
  1181. new szName[32], szData[256];
  1182. get_user_name(id, szName, charsmax(szName));
  1183.  
  1184. formatex(szData, charsmax(szData), "%i#%i#%i#%i", g_iPlayerData[id][Points], g_iPlayerData[id][Case], g_iPlayerData[id][Keys], g_iPlayerData[id][Fragments]);
  1185.  
  1186. for(new i; i < skinsNum; i++)
  1187. format(szData, charsmax(szData), "%s#%i", szData, g_iPlayerSkins[id][i]);
  1188.  
  1189. nvault_set(iVault, szName, szData);
  1190.  
  1191. nvault_close(iVault);
  1192. }
  1193. public LoadData(id)
  1194. {
  1195. new iVault = nvault_open("CSGOData2");
  1196.  
  1197. if(iVault == INVALID_HANDLE) {
  1198. log_amx("ERROR: Unable to open vault file %s", "CSGOData2");
  1199. return PLUGIN_HANDLED;
  1200. }
  1201.  
  1202.  
  1203. new szName[32], szData[256], szArg[SKINS_MAX][9], iArg[SKINS_MAX], iTimestamp;
  1204. get_user_name(id, szName, charsmax(szName));
  1205.  
  1206. if(nvault_lookup(iVault, szName, szData, charsmax(szData), iTimestamp))
  1207. {
  1208. /* +4 because we must load points keys case and fragments */
  1209. for(new i; i < skinsNum + 4; i ++)
  1210. {
  1211. strtok(szData, szArg[i], charsmax(szArg[]), szData, charsmax(szData), '#');
  1212. iArg[i] = str_to_num(szArg[i]);
  1213. }
  1214.  
  1215. g_iPlayerData[id][Points] = iArg[0];
  1216. g_iPlayerData[id][Case] = iArg[1];
  1217. g_iPlayerData[id][Keys] = iArg[2];
  1218. g_iPlayerData[id][Fragments] = iArg[3];
  1219.  
  1220. for(new i; i < skinsNum; i++)
  1221. g_iPlayerSkins[id][i] = iArg[i+4]; /* +4 because we loaded points keys case and fragments */
  1222. }
  1223. else
  1224. {
  1225. g_iPlayerData[id][Points] = 15;
  1226. g_iPlayerData[id][Case] = 1;
  1227. g_iPlayerData[id][Keys] = 1;
  1228. g_iPlayerData[id][Fragments] = 0;
  1229.  
  1230. for(new i; i < skinsNum; i++)
  1231. g_iPlayerSkins[id][i] = 0;
  1232. }
  1233. nvault_close(iVault);
  1234. return PLUGIN_CONTINUE;
  1235. }
  1236. /* Save & Load Market */
  1237. public SaveMarket(id)
  1238. {
  1239. new iVault = nvault_open("CSGOMarket");
  1240.  
  1241. new szName[32], szData[256];
  1242. get_user_name(id, szName, charsmax(szName));
  1243.  
  1244. for(new i; i < skinsNum; i++)
  1245. format(szData, charsmax(szData), "%s#%i", szData, g_iSkinsInMarket[id][i]);
  1246.  
  1247. nvault_set(iVault, szName, szData);
  1248.  
  1249. nvault_close(iVault);
  1250. }
  1251. public LoadMarket(id)
  1252. {
  1253. new iVault = nvault_open("CSGOMarket");
  1254.  
  1255. new szName[32], szData[256], szArg[SKINS_MAX][9], iArg[SKINS_MAX];
  1256. get_user_name(id, szName, charsmax(szName));
  1257.  
  1258. nvault_get(iVault, szName, szData, charsmax(szData));
  1259.  
  1260. for(new i; i < skinsNum; i ++)
  1261. {
  1262. strtok(szData, szArg[i], charsmax(szArg[]), szData, charsmax(szData), '#');
  1263. iArg[i] = str_to_num(szArg[i]);
  1264. }
  1265. for(new i; i < skinsNum; i++)
  1266. g_iSkinsInMarket[id][i] = iArg[i];
  1267. nvault_close(iVault);
  1268. }
  1269. /* ColorChat */
  1270. stock ColorChat(const id,const input[], any:...) {
  1271. new iNum = 1, iPlayers[32];
  1272. static szMessage[191];
  1273. vformat(szMessage, charsmax(szMessage),input, 3);
  1274.  
  1275. replace_all(szMessage, charsmax(szMessage), "!g", "^4");
  1276. replace_all(szMessage, charsmax(szMessage), "!n", "^1");
  1277. replace_all(szMessage, charsmax(szMessage), "!t", "^3");
  1278.  
  1279. if(id) iPlayers[0] = id;
  1280. else get_players(iPlayers, iNum, "ch");
  1281.  
  1282. for(new i = 0; i < iNum; i++)
  1283. {
  1284. if(is_user_connected(iPlayers[i]))
  1285. {
  1286. message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, iPlayers[i]);
  1287. write_byte(iPlayers[i]);
  1288. write_string(szMessage);
  1289. message_end();
  1290. }
  1291. }
  1292. }
  1293. // Get Weapon Entity's Owner
  1294. stock fm_cs_get_weapon_ent_owner(ent)
  1295. {
  1296. // Prevent server crash if entity's private data not initalized
  1297. if (pev_valid(ent) != 2) return -1;
  1298.  
  1299. return get_pdata_cbase(ent, 41, 4);
  1300. }
  1301. stock user_have_skins(id) {
  1302. new ok = 0;
  1303. for (new i; i < skinsNum; i++) {
  1304. if (g_iPlayerSkins[id][i] > 0) {
  1305. ok = 1;
  1306. }
  1307. }
  1308. return ok;
  1309. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement