Advertisement
Guest User

Untitled

a guest
Apr 22nd, 2019
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 96.94 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. #define MAX_PARTY_SLOTS 5
  29. new PartySlots[33], bool:PartyCreated[33], bool:PartyInvites[33][33], InParty[33];
  30.  
  31. #define DROP_CASE_CHANCE 10
  32.  
  33. enum Data {
  34. Points,
  35. Case,
  36. Keys,
  37. Fragments
  38. }
  39. enum eData {
  40. Name[32],
  41. vModel[64],
  42. pModel[64],
  43. Type,
  44. Chance
  45. }
  46.  
  47. new g_aSkins[SKINS_MAX][eData];
  48.  
  49. /* Ranks system */
  50. enum eRankData {
  51. RankName[32],
  52. valFirst,
  53. valSecond
  54. }
  55.  
  56. new g_szRanks[MAX_RANKS][eRankData] ;
  57. new g_szRank[33][2][32], ranksNum;
  58.  
  59. /* Gift system */
  60. new g_iReceiver[33], g_iIterator[33], g_iSkinToGift[33];
  61.  
  62. /* Destroy system */
  63. new g_iSkinToDestroy[33];
  64.  
  65. /* Raffle system */
  66. new g_iRafflePlayers[33], raffleMembers;
  67.  
  68. /* Market system */
  69. new g_iSkinsInMarket[33][SKINS_MAX], g_iPrice[33], iSeller[33][SKINS_MAX];
  70.  
  71. /* Mute system */
  72. new iMutedPlayers[33][33];
  73.  
  74. /* Core */
  75. new g_iPlayerSkins[33][SKINS_MAX], g_iPlayerData[33][Data];
  76. new g_iSkins[33][SKINS_MAX], g_iMaxChance, g_iShowedSkin[33][31], skinsNum;
  77.  
  78. new const szTag[] = "[CS:GO OUTSTANDING]"
  79. public plugin_init()
  80. {
  81. register_plugin(PLUGIN, VERSION, "FaTzZu a.k.a Jailbreak suge ****");
  82.  
  83. register_clcmd("say /menu", "cmdSayMenu");
  84. register_clcmd("chooseteam", "cmdSayMenu");
  85. register_concmd("set", "PartyMenu");
  86.  
  87. register_logevent("evRoundEnd",2, "1=Round_End");
  88. register_event("DeathMsg", "evDeathMsg", "a");
  89.  
  90. register_event("SendAudio", "terroristsWin" , "a", "2&%!MRAD_terwin");
  91. register_event("SendAudio", "ctsWin", "a", "2&%!MRAD_ctwin");
  92.  
  93. // Weapon entity names
  94. new const szWeaponNames[][] = {
  95. "", "weapon_p228", "", "weapon_scout", "weapon_hegrenade", "weapon_xm1014", "weapon_c4", "weapon_mac10",
  96. "weapon_aug", "weapon_smokegrenade", "weapon_elite", "weapon_fiveseven", "weapon_ump45", "weapon_sg550",
  97. "weapon_galil", "weapon_famas", "weapon_usp", "weapon_glock18", "weapon_awp", "weapon_mp5navy", "weapon_m249",
  98. "weapon_m3", "weapon_m4a1", "weapon_tmp", "weapon_g3sg1", "weapon_flashbang", "weapon_deagle", "weapon_sg552",
  99. "weapon_ak47", "weapon_knife", "weapon_p90"
  100. };
  101. for (new i; i < sizeof(szWeaponNames); i++)
  102. {
  103. if (szWeaponNames[i][0])
  104. {
  105. RegisterHam(Ham_Item_AddToPlayer, szWeaponNames[i], "hamAddWeaponToPlayer");
  106. RegisterHam(Ham_Item_Deploy, szWeaponNames[i], "hamItemDeploy", 1);
  107. }
  108. }
  109. register_forward(FM_SetModel, "fwSetModel");
  110.  
  111. register_clcmd("Insert_price", "cmdInsertPrice");
  112.  
  113. }
  114. /* Precaching models */
  115. public plugin_precache()
  116. {
  117. new szConfigsDir[128], szMessage[64];
  118.  
  119. get_configsdir(szConfigsDir, charsmax(szConfigsDir));
  120. add(szConfigsDir, charsmax(szConfigsDir), "%s/csgo/skins.ini");
  121.  
  122. if(!file_exists(szConfigsDir))
  123. {
  124. write_file(szConfigsDir, ";TYPES 28=Ak47 22=M4a1 18=AWP 26=Deagle 29=Knife");
  125. write_file(szConfigsDir, ";Skin name v_Model p_Model TYPE Chance");
  126. write_file(szConfigsDir, ";Exemplu:");
  127. write_file(szConfigsDir, ";^"Ak47 Dragon Lore^" ^"models/GO/v_ak47_dragonlore.mdl^" ^"models/GO/p_ak47_dragonlore.mdl^" ^"28^" ^"20^"");
  128. }
  129.  
  130. new f = fopen(szConfigsDir, "rt");
  131. if(!f)
  132. return;
  133. new szLineData[256], szName[32], szViewModel[64], szPlayerModel[64], szType[8], szChance[4];
  134. while(!feof(f))
  135. {
  136. fgets(f, szLineData, charsmax(szLineData));
  137.  
  138. if(strlen(szLineData) < 2 || szLineData[0] == ';' || !szLineData[0])
  139. continue;
  140.  
  141. parse(szLineData, szName, charsmax(szName), szViewModel, charsmax(szViewModel), szPlayerModel, charsmax(szPlayerModel), szType, charsmax(szType), szChance, charsmax(szChance))
  142.  
  143. new iType = str_to_num(szType);
  144. new iChance = str_to_num(szChance)
  145.  
  146. copy(g_aSkins[skinsNum][Name], 31, szName);
  147. copy(g_aSkins[skinsNum][vModel], 63, szViewModel);
  148. copy(g_aSkins[skinsNum][pModel], 63, szPlayerModel);
  149. g_aSkins[skinsNum][Type] = iType;
  150. g_aSkins[skinsNum][Chance] = iChance;
  151.  
  152. skinsNum++
  153. }
  154.  
  155. fclose(f);
  156.  
  157. g_iMaxChance = g_aSkins[0][Chance];
  158. for (new i; i < skinsNum; i++)
  159. {
  160. if (g_aSkins[0][Chance] > g_iMaxChance)
  161. {
  162. g_iMaxChance = g_aSkins[0][Chance];
  163. }
  164. }
  165.  
  166. for (new i; i < skinsNum; i++)
  167. {
  168. if (!file_exists(g_aSkins[0][vModel]))
  169. {
  170. formatex(szMessage, charsmax(szMessage), "Missing model [%s]", g_aSkins[0][vModel]);
  171. set_fail_state(szMessage);
  172. }
  173. if (strlen(g_aSkins[0][pModel]) > 3)
  174. {
  175. if (!file_exists(g_aSkins[0][pModel]))
  176. {
  177. formatex(szMessage, charsmax(szMessage), "Missing model [%s]", g_aSkins[0][pModel]);
  178. set_fail_state(szMessage);
  179. }
  180. }
  181.  
  182. precache_model(g_aSkins[i][vModel]);
  183.  
  184. if (strlen(g_aSkins[i][pModel]) > 3)
  185. {
  186. precache_model(g_aSkins[i][pModel]);
  187. }
  188. }
  189. }
  190. /* Executing cfg's */
  191. public plugin_cfg()
  192. {
  193. new szConfigsDir[128];
  194. get_configsdir(szConfigsDir, charsmax(szConfigsDir));
  195.  
  196. add(szConfigsDir, charsmax(szConfigsDir), "%s/csgo/ranks.ini");
  197.  
  198. if(!file_exists(szConfigsDir))
  199. write_file(szConfigsDir, ";RANK - PRIMA VALOARE - A 2-A VALOARE", -1);
  200.  
  201. new f = fopen(szConfigsDir, "rt");
  202. if(!f)
  203. return;
  204. new szLineRankData[128], szRank[32], szFirstVal[8], szLastVal[8];
  205. while(!feof(f))
  206. {
  207. fgets(f, szLineRankData, charsmax(szLineRankData));
  208.  
  209. if(!szLineRankData[0] || szLineRankData[0] == ';' || strlen(szLineRankData) < 2)
  210. continue;
  211.  
  212. parse(szLineRankData, szRank, charsmax(szRank), szFirstVal, charsmax(szFirstVal), szLastVal, charsmax(szLastVal));
  213.  
  214. new iFirstVal = str_to_num(szFirstVal);
  215. new iLastVal = str_to_num(szLastVal);
  216.  
  217. copy(g_szRanks[ranksNum][RankName], charsmax(g_szRanks[]), szRank);
  218. g_szRanks[ranksNum][valFirst] = iFirstVal
  219. g_szRanks[ranksNum][valSecond] = iLastVal
  220.  
  221. ranksNum++;
  222. }
  223.  
  224.  
  225. }
  226. /* When client connects */
  227. public client_putinserver(id)
  228. {
  229. new iPlayers[32], iNum;
  230. get_players(iPlayers, iNum);
  231.  
  232. for(new i; i < iNum; i++)
  233. iMutedPlayers[id][iPlayers[i]] = 0;
  234.  
  235. for(new i; i < 31; i++)
  236. g_iShowedSkin[id][i] = skinsNum;
  237.  
  238. g_iSkinToGift[id] = skinsNum;
  239. g_iSkinToDestroy[id] = skinsNum;
  240. g_iPrice[id] = 0;
  241.  
  242. PartySlots[id] = 0;
  243. InParty[id] = 0;
  244. PartyCreated[id] = false;
  245.  
  246. for(new i = 1; i <= 32; i++) PartyInvites[i][id] = false;
  247.  
  248. set_task(1.5, "taskSetRank", id);
  249.  
  250. LoadData(id);
  251. LoadMarket(id);
  252. }
  253. /* Set user's rank on putinserver and on player kill*/
  254. public taskSetRank(id)
  255. {
  256. new iStats[8], iBody[8];
  257. new iRankPos = get_user_stats(id, iStats, iBody);
  258.  
  259. for(new i; i <= ranksNum; i++)
  260. {
  261. if(g_szRanks[i][valFirst] <= iRankPos <= g_szRanks[i][valSecond])
  262. {
  263. copy(g_szRank[id][0], 31, g_szRanks[i][RankName])
  264. if(i!=0)
  265. copy(g_szRank[id][1], 31, g_szRanks[i-1][RankName])
  266.  
  267. break;
  268. }
  269. }
  270. }
  271. /* Hook DeathMsg event */
  272. public evDeathMsg()
  273. {
  274. refreshRanks();
  275.  
  276. new iChance;
  277. new iKiller = read_data(1);
  278. new iVictim = read_data(2);
  279.  
  280. if(!is_user_alive(iKiller) || iKiller == iVictim)
  281. return;
  282.  
  283. iChance = random_num(1, 100);
  284. if (iChance <= POINTS_CHANCE)
  285. {
  286. g_iPlayerData[iKiller][Points] += POINTS_FOR_KILL;
  287. client_print(iKiller, print_center, "+%d Points", POINTS_FOR_KILL);
  288. }
  289. if(iChance <= DROP_CASE_CHANCE)
  290. {
  291. g_iPlayerData[iKiller][Case]++;
  292. }
  293.  
  294. refreshRanks();
  295. }
  296. /* Refreshing every player rank */
  297. stock refreshRanks()
  298. {
  299. new iPlayers[32], iNum;
  300. get_players(iPlayers, iNum);
  301. for(new i;i<iNum;i++)
  302. {
  303. new id = iPlayers[i];
  304. new iStats[8], iBody[8];
  305. new iRankPos = get_user_stats(id, iStats, iBody);
  306.  
  307. for(new i; i <= ranksNum; i++)
  308. if(g_szRanks[i][valFirst] <= iRankPos <= g_szRanks[i][valSecond])
  309. {
  310. copy(g_szRank[id][0], 31, g_szRanks[i][RankName])
  311. if(i!=0)
  312. copy(g_szRank[id][1], 31, g_szRanks[i-1][RankName])
  313.  
  314. break;
  315. }
  316. }
  317. }
  318. /* When client disconnect */
  319. public client_disconnect(id)
  320. {
  321. SaveData(id)
  322. }
  323. /* Ham_Item_Deploy */
  324. public hamItemDeploy(ent)
  325. {
  326. static id;
  327. id = fm_cs_get_weapon_ent_owner(ent);
  328.  
  329. if (!pev_valid(id)) {
  330. return;
  331. }
  332.  
  333. if (g_iShowedSkin[id][cs_get_weapon_id(ent)] < skinsNum)
  334. {
  335. set_pev(id, pev_viewmodel2, g_aSkins[ g_iShowedSkin[id][cs_get_weapon_id(ent)]][vModel]);
  336.  
  337. if(strlen(g_aSkins[ g_iShowedSkin[id][cs_get_weapon_id(ent)]][pModel]) > 3)
  338. {
  339. set_pev(id, pev_weaponmodel2, g_aSkins[ g_iShowedSkin[id][cs_get_weapon_id(ent)]][pModel]);
  340. }
  341. }
  342. }
  343. /** Principal Menu **/
  344. public cmdSayMenu(id)
  345. {
  346. new menu, szText[128], szText2[128];
  347.  
  348. 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])
  349. menu = menu_create(szText, "menuHandler");
  350.  
  351. menu_additem(menu, "Aplica \ySKIN");
  352. menu_additem(menu, "Deschide \ycufere \w| Crafteaza \ychei^n");
  353.  
  354. menu_additem(menu, "Ofera un \ycadou");
  355. menu_additem(menu, "Distruge un \yskin^n");
  356.  
  357. menu_additem(menu, "\wSkins \yMarket^n");
  358.  
  359. if(strlen(g_szRank[id][1]))
  360. {
  361. formatex(szText2, charsmax(szText2), "Rank actual: \y%s^n\wRank urmator: \y%s", g_szRank[id][0], g_szRank[id][1]);
  362. }
  363. else
  364. {
  365. formatex(szText2, charsmax(szText2), "Rank actual: \y%s \w( \dRank maxim \w)", g_szRank[id][0]);
  366. }
  367.  
  368. formatex(szText, charsmax(szText), "Jocuri de \ynoroc\w^n^n%s", szText2);
  369. menu_additem(menu, szText);
  370.  
  371. menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
  372. menu_display(id, menu, 0);
  373.  
  374. return PLUGIN_HANDLED;
  375. }
  376. public menuHandler(id, menu, item)
  377. {
  378. if(item == MENU_EXIT)
  379. {
  380. menu_destroy(menu);
  381. return PLUGIN_HANDLED;
  382. }
  383.  
  384. switch(item)
  385. {
  386. case 0:
  387. {
  388. if (user_have_skins(id))
  389. {
  390. showSkins(id);
  391. }
  392. else
  393. {
  394. ColorChat(id, "!g%s!nNu ai !gskinuri !nin inventar!", szTag);
  395. cmdSayMenu(id);
  396. }
  397. }
  398.  
  399. case 1: openCaseMenu(id);
  400.  
  401. case 2:
  402. {
  403. if (user_have_skins(id))
  404. {
  405. showGiftMenu(id);
  406. }
  407. else
  408. {
  409. ColorChat(id, "!g%s!nNu ai !gskinuri !nin inventar!", szTag);
  410. cmdSayMenu(id);
  411. }
  412. }
  413.  
  414. case 3:
  415. {
  416. if (user_have_skins(id))
  417. {
  418. showDestroyMenu(id);
  419. }
  420. else
  421. {
  422. ColorChat(id, "!g%s!nNu ai !gskinuri !nin inventar!", szTag);
  423. cmdSayMenu(id);
  424. }
  425. }
  426.  
  427. case 4: cmdShowMarket(id)
  428.  
  429. //case 5: cmdShowTradeMenu(id);
  430.  
  431. case 5: showGamesMenu(id)
  432. }
  433.  
  434. menu_destroy(menu);
  435. return PLUGIN_HANDLED;
  436. }
  437. /* Apply skin menu */
  438. public showSkins(id)
  439. {
  440. new menu, szText[64], k=0;
  441. menu = menu_create("\w[ \yCS:GO OUTSTANDING \w] \ySkinurile \wtale", "skinsMenuHandler");
  442.  
  443. for(new i; i < skinsNum; i++)
  444. {
  445. if(g_iPlayerSkins[id][i])
  446. {
  447. formatex(szText, charsmax(szText), "%s - \y%d \wBucati", g_aSkins[i][Name], g_iPlayerSkins[id][i]);
  448. menu_additem(menu, szText);
  449. g_iSkins[id][k++] = i;
  450. }
  451. }
  452.  
  453. menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
  454. menu_display(id, menu, 0);
  455. }
  456. public skinsMenuHandler(id, menu, item)
  457. {
  458. if( item == MENU_EXIT )
  459. {
  460. menu_destroy(menu);
  461. return PLUGIN_HANDLED;
  462. }
  463.  
  464. new iSkinID = g_iSkins[id][item];
  465.  
  466. g_iShowedSkin [id][g_aSkins[iSkinID][Type]] = iSkinID;
  467. ColorChat(id, "!g%s!nAi aplicat skinul !g%s!n.", szTag, g_aSkins[iSkinID][Name]);
  468. client_cmd(id, "lastinv");
  469. showSkins(id);
  470.  
  471. menu_destroy(menu);
  472. return PLUGIN_HANDLED;
  473. }
  474. /* Open case menu */
  475. public openCaseMenu(id)
  476. {
  477. new menu, szText[128];
  478. 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])
  479. menu = menu_create(szText, "openCaseMenuHandler");
  480.  
  481. if(!g_iPlayerData[id][Keys] || !g_iPlayerData[id][Case])
  482. {
  483. formatex(szText, charsmax(szText), "\dDeschide \ycufar^n");
  484. }
  485. else
  486. {
  487. formatex(szText, charsmax(szText), "Deschide \ycufar^n");
  488. }
  489. menu_additem(menu, szText);
  490.  
  491. if(g_iPlayerData[id][Fragments] < FRAGMENTS_TO_CRAFT)
  492. {
  493. formatex(szText, charsmax(szText), "\dCrafteaza o \ycheie \d( \y%d \d/ \y%d \d)", g_iPlayerData[id][Fragments], FRAGMENTS_TO_CRAFT);
  494. }
  495. else
  496. {
  497. formatex(szText, charsmax(szText), "Crafteaza o \ycheie \w( \y%d \w/ \y%d \w)", g_iPlayerData[id][Fragments], FRAGMENTS_TO_CRAFT);
  498. }
  499.  
  500. menu_additem(menu, szText);
  501.  
  502. if(g_iPlayerData[id][Points] < KEY_COST)
  503. {
  504. formatex(szText, charsmax(szText), "\dCumpara o \ycheie \w- \y%d \dPuncte", KEY_COST);
  505. }
  506. else
  507. {
  508. formatex(szText, charsmax(szText), "Cumpara o \ycheie \w- \y%d \wPuncte", KEY_COST);
  509. }
  510. menu_additem(menu, szText);
  511.  
  512. menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
  513. menu_display(id, menu, 0);
  514. }
  515. public openCaseMenuHandler(id, menu, item)
  516. {
  517. if( item == MENU_EXIT )
  518. {
  519. menu_destroy(menu);
  520. return PLUGIN_HANDLED;
  521. }
  522.  
  523. switch(item)
  524. {
  525. case 0:
  526. {
  527. if(!g_iPlayerData[id][Keys])
  528. {
  529. ColorChat(id, "!g%s!n Nu ai o !gcheie!n!", szTag);
  530. return PLUGIN_HANDLED;
  531. }
  532. if(!g_iPlayerData[id][Case])
  533. {
  534. ColorChat(id, "!g%s!n Nu ai un !gcufar!n!", szTag);
  535. return PLUGIN_HANDLED;
  536. }
  537.  
  538. new iSkins[SKINS_MAX], iRand, iChance, k=0;
  539.  
  540. iChance = random_num(1, g_iMaxChance);
  541. for(new i; i < skinsNum; i++)
  542. {
  543. if(iChance <= g_aSkins[i][Chance])
  544. iSkins[k++] = i;
  545. }
  546.  
  547. iRand = k == 0 ? iSkins[k] : iSkins[random(k)];
  548.  
  549. g_iPlayerSkins[id][iRand]++;
  550. g_iPlayerData[id][Keys]--;
  551. g_iPlayerData[id][Case]--;
  552.  
  553. ColorChat(id, "!g%s!nAi deschis un cufar si ai primit skinul !g%s!n.", szTag, g_aSkins[iRand][Name]);
  554. SaveData(id);
  555.  
  556. openCaseMenu(id);
  557. }
  558. case 1:
  559. {
  560. if(g_iPlayerData[id][Fragments] < FRAGMENTS_TO_CRAFT)
  561. {
  562. ColorChat(id, "!g%s!n Insuficiente !gfragmente !npentru a crafta o !gcheie!n.", szTag);
  563. return PLUGIN_HANDLED;
  564. }
  565. g_iPlayerData[id][Keys]++;
  566. g_iPlayerData[id][Fragments] -= FRAGMENTS_TO_CRAFT;
  567.  
  568. ColorChat(id, "!g%s!n Ai transformat !g%d!n fragmente intr-o !gcheie!n.", szTag, FRAGMENTS_TO_CRAFT);
  569.  
  570. openCaseMenu(id);
  571. }
  572. case 2:
  573. {
  574. if(g_iPlayerData[id][Points] < KEY_COST)
  575. {
  576. ColorChat(id, "!g%s!n Insuficiente !gpuncte !npentru a cumpara o !gcheie!n.", szTag);
  577. return PLUGIN_HANDLED;
  578. }
  579. g_iPlayerData[id][Keys]++;
  580. g_iPlayerData[id][Points] -= KEY_COST;
  581. ColorChat(id, "!g%s!n Ai achizitionat o !gcheie!n.", szTag);
  582. SaveData(id);
  583.  
  584. openCaseMenu(id);
  585. }
  586. }
  587. menu_destroy(menu);
  588. return PLUGIN_HANDLED;
  589. }
  590. /* Gift menu */
  591. public showGiftMenu(id)
  592. {
  593. new menu, szText[128], szName[32];
  594. menu = menu_create("\w[ \yCS:GO OUTSTANDING\w] \yGift \wMenu", "giftMenuHandler");
  595.  
  596. if(g_iReceiver[id])
  597. {
  598. get_user_name(g_iReceiver[id], szName, charsmax(szName));
  599. formatex(szText, charsmax(szText), "Jucator: \y%s", szName);
  600. }
  601. else formatex(szText, charsmax(szText), "Alege \yjucator\w:");
  602. menu_additem(menu, szText);
  603.  
  604. if(g_iSkinToGift[id] == skinsNum)
  605. formatex(szText, charsmax(szText), "Alege \ySkin^n");
  606. else formatex(szText, charsmax(szText), "Skin spre oferire: \y%s^n", g_aSkins[g_iSkinToGift[id]][Name]);
  607. menu_additem(menu, szText);
  608. menu_additem(menu, "\rTrimite");
  609.  
  610. menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
  611. menu_display(id, menu, 0);
  612. }
  613. public giftMenuHandler(id, menu, item)
  614. {
  615. if( item == MENU_EXIT )
  616. {
  617. menu_destroy(menu);
  618. return PLUGIN_HANDLED;
  619. }
  620.  
  621. switch(item)
  622. {
  623. case 0:
  624. {
  625. new iPlayers[32], iNum, idReceiver;
  626. get_players(iPlayers, iNum);
  627.  
  628. idReceiver = iPlayers[g_iIterator[id]]
  629. g_iReceiver[id] = idReceiver;
  630. g_iIterator[id]++;
  631.  
  632. if(g_iIterator[id] == iNum)
  633. g_iIterator[id] = 0;
  634.  
  635. showGiftMenu(id);
  636. }
  637. case 1:
  638. {
  639. showSkinsForGift(id);
  640. }
  641. case 2:
  642. {
  643. if(g_iSkinToGift[id] == skinsNum)
  644. {
  645. ColorChat(id, "!g%s!n Alege un !gskin!n!",szTag);
  646. showGiftMenu(id)
  647. return PLUGIN_HANDLED;
  648. }
  649. if(g_iReceiver[id] == id)
  650. {
  651. ColorChat(id, "!g%s!n Nu iti da !gskinuri !ntie!",szTag);
  652. showGiftMenu(id)
  653. return PLUGIN_HANDLED;
  654. }
  655. new szName[32];
  656. get_user_name(id, szName, charsmax(szName));
  657.  
  658. g_iPlayerSkins[id][g_iSkinToGift[id]]--;
  659. g_iPlayerSkins[g_iReceiver[id]][g_iSkinToGift[id]]++;
  660.  
  661. ColorChat(g_iReceiver[id], "!g%s!nAi primit !g%s !n de la !g%s!n.", szTag, g_aSkins[g_iSkinToGift[id]][Name], szName);
  662. g_iSkinToGift[id] = skinsNum;
  663.  
  664. SaveData(id);
  665. SaveData(g_iReceiver[id]);
  666. }
  667. }
  668. menu_destroy(menu);
  669. return PLUGIN_HANDLED;
  670. }
  671. /* Skins List for gift */
  672. public showSkinsForGift(id)
  673. {
  674. new menu, szText[64], k=0;
  675. menu = menu_create("\w[ \yCS:GO OUTSTANDING \w] Alege skinul pe care vrei sa il daruiesti", "skinsForGiftMenuHandler");
  676.  
  677. for(new i; i < skinsNum; i++)
  678. if(g_iPlayerSkins[id][i])
  679. {
  680. formatex(szText, charsmax(szText), "%s - \y%d \wBucati", g_aSkins[i][Name], g_iPlayerSkins[id][i]);
  681. menu_additem(menu, szText);
  682. g_iSkins[id][k++] = i;
  683. }
  684.  
  685. menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
  686. menu_display(id, menu, 0);
  687. }
  688. public skinsForGiftMenuHandler(id, menu, item)
  689. {
  690. if( item == MENU_EXIT )
  691. {
  692. menu_destroy(menu);
  693. return PLUGIN_HANDLED;
  694. }
  695.  
  696. g_iSkinToGift[id] = g_iSkins[id][item];
  697. showGiftMenu(id);
  698.  
  699. menu_destroy(menu);
  700. return PLUGIN_HANDLED;
  701. }
  702. /* Destroy skin menu */
  703. public showDestroyMenu(id)
  704. {
  705. new menu, szText[128];
  706. menu = menu_create("\w[ \yCS:GO OUTSTANDING \w] \wDestroy \ySkin \wMenu", "destroyMenuHandler");
  707.  
  708. if(g_iSkinToDestroy[id] == skinsNum)
  709. formatex(szText, charsmax(szText), "Alege \ySkin^n");
  710. else formatex(szText, charsmax(szText), "Skin pentru distrugere: \y%s^n", g_aSkins[g_iSkinToDestroy[id]][Name]);
  711. menu_additem(menu, szText);
  712. menu_additem(menu, "\rDistruge");
  713.  
  714. menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
  715. menu_display(id, menu, 0);
  716. }
  717. public destroyMenuHandler(id, menu, item)
  718. {
  719. if( item == MENU_EXIT )
  720. {
  721. menu_destroy(menu);
  722. return PLUGIN_HANDLED;
  723. }
  724.  
  725. switch(item)
  726. {
  727. case 0:
  728. {
  729. showSkinsForDestroy(id);
  730. }
  731. case 1:
  732. {
  733. if(g_iSkinToDestroy[id] == skinsNum)
  734. {
  735. ColorChat(id, "!g%s!n Alege un !gskin!n!",szTag);
  736. showDestroyMenu(id)
  737. return PLUGIN_HANDLED;
  738. }
  739.  
  740. g_iPlayerSkins[id][g_iSkinToDestroy[id]]--;
  741. g_iPlayerData[id][Fragments]++;
  742. 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]);
  743.  
  744. g_iSkinToDestroy[id] = skinsNum;
  745. SaveData(id);
  746.  
  747. showDestroyMenu(id);
  748. }
  749. }
  750. menu_destroy(menu);
  751. return PLUGIN_HANDLED;
  752. }
  753. /* Skins List to destroy */
  754. public showSkinsForDestroy(id)
  755. {
  756. new menu, szText[64], k=0;
  757. menu = menu_create("\w[ \yCS:GO OUTSTANDING \w] Alege skinul pe care vrei sa il distrugi", "skinsForDestroyMenuHandler");
  758.  
  759. for(new i; i < skinsNum; i++)
  760. if(g_iPlayerSkins[id][i])
  761. {
  762. formatex(szText, charsmax(szText), "%s - \y%d \wBucati", g_aSkins[i][Name], g_iPlayerSkins[id][i]);
  763. menu_additem(menu, szText);
  764. g_iSkins[id][k++] = i;
  765. }
  766.  
  767. menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
  768. menu_display(id, menu, 0);
  769. }
  770. public skinsForDestroyMenuHandler(id, menu, item)
  771. {
  772. if( item == MENU_EXIT )
  773. {
  774. menu_destroy(menu);
  775. return PLUGIN_HANDLED;
  776. }
  777.  
  778. g_iSkinToDestroy[id] = g_iSkins[id][item];
  779. showDestroyMenu(id);
  780.  
  781. menu_destroy(menu);
  782. return PLUGIN_HANDLED;
  783. }
  784. /* Market menu */
  785. public cmdShowMarket(id)
  786. {
  787. new menu;
  788.  
  789. menu = menu_create("\w[ \yCSGO OUTSTANDING \w] Market Shop", "marketMenuHandler");
  790.  
  791. menu_additem(menu, "\wCumpara \yskin^n");
  792.  
  793. menu_additem(menu, "Adauga \yskin \win market");
  794. menu_additem(menu, "Retrage \yskin \wdin market");
  795.  
  796. menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
  797. menu_display(id, menu, 0);
  798. }
  799. public marketMenuHandler(id, menu, item)
  800. {
  801. if( item == MENU_EXIT )
  802. {
  803. menu_destroy(menu);
  804. return PLUGIN_HANDLED;
  805. }
  806.  
  807. switch(item)
  808. {
  809. case 0: showSkinsInMarketMenu(id);
  810. case 1: showSkinsToSellMenu(id);
  811. case 2: showRemoveSkinMenu(id);
  812. }
  813.  
  814. menu_destroy(menu);
  815. return PLUGIN_HANDLED;
  816. }
  817. /* Skins in market */
  818. public showSkinsInMarketMenu(id)
  819. {
  820. new menu, szText[256], szName[32], k=0;
  821.  
  822. new iPlayers[32], iNum, idV;
  823. get_players(iPlayers, iNum);
  824.  
  825. menu = menu_create("\w[ \yCSGO OUTSTANDING \w] Skinuri in market", "skinsInMarketMenuHandler");
  826.  
  827. for(new i; i < iNum; i++)
  828. {
  829. idV = iPlayers[i];
  830. for(new j; j < skinsNum; j++)
  831. {
  832. if(g_iSkinsInMarket[idV][j])
  833. {
  834. get_user_name(idV, szName, charsmax(szName));
  835.  
  836. formatex(szText, charsmax(szText), "\y%s \w[ \y%d \wpoints \w] [ Vanzator: \y%s \w]", g_aSkins[j][Name], g_iSkinsInMarket[idV][j], szName);
  837. menu_additem(menu, szText);
  838. g_iSkins[id][k] = j;
  839. iSeller[id][k++] = idV;
  840. }
  841. }
  842. }
  843.  
  844. menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
  845. menu_display(id, menu, 0);
  846. }
  847. public skinsInMarketMenuHandler(id, menu, item)
  848. {
  849. if( item == MENU_EXIT )
  850. {
  851. menu_destroy(menu);
  852. return PLUGIN_HANDLED;
  853. }
  854. new szSellerName[32], szName[32];
  855.  
  856. new iSkinID = g_iSkins[id][item]
  857. new iSellerID = iSeller[id][item];
  858.  
  859. if(g_iPlayerData[id][Points] < g_iSkinsInMarket[iSellerID][iSkinID])
  860. {
  861. ColorChat(id, "!g%s!nPuncte insuficiente pentru a cumpara skinul!", szTag);
  862. return PLUGIN_HANDLED;
  863. }
  864.  
  865. get_user_name(id, szName, charsmax(szName));
  866. get_user_name(iSellerID, szSellerName, charsmax(szSellerName));
  867.  
  868. g_iPlayerData[id][Points] -= g_iSkinsInMarket[iSellerID][iSkinID];
  869. g_iPlayerData[iSellerID][Points] += g_iSkinsInMarket[iSellerID][iSkinID];
  870.  
  871. g_iPlayerSkins[id][iSkinID]++;
  872.  
  873. 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);
  874. 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);
  875.  
  876. g_iSkinsInMarket[iSellerID][iSkinID] = 0;
  877.  
  878. SaveData(id);
  879. SaveMarket(id);
  880.  
  881. menu_destroy(menu);
  882. return PLUGIN_HANDLED;
  883. }
  884. /* Skins to sell */
  885. public showSkinsToSellMenu(id)
  886. {
  887. new menu, szText[128], k=0;
  888.  
  889. menu = menu_create("\w[ \yCSGO OUTSTANDING \w] Alege skinul", "skinsToSellMenuHandler");
  890.  
  891. if(!g_iPrice[id])
  892. formatex(szText, charsmax(szText), "Alege \ypretul^n");
  893. else
  894. formatex(szText, charsmax(szText), "\yPret\r: \w%d^n", g_iPrice[id]);
  895. menu_additem(menu, szText);
  896. for(new i; i < skinsNum; i++)
  897. {
  898. if(g_iPlayerSkins[id][i])
  899. {
  900. formatex(szText, charsmax(szText), "\y%s \w- \r*\y%d \wBucati", g_aSkins[i][Name], g_iPlayerSkins[id][i]);
  901. menu_additem(menu, szText);
  902.  
  903. g_iSkins[id][k++] = i;
  904. }
  905. }
  906.  
  907. menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
  908. menu_display(id, menu, 0);
  909. }
  910. public skinsToSellMenuHandler(id, menu, item)
  911. {
  912. if( item == MENU_EXIT )
  913. {
  914. menu_destroy(menu);
  915. return PLUGIN_HANDLED;
  916. }
  917. new iSkinID, szName[32];
  918. get_user_name(id, szName, charsmax(szName));
  919. if(item == 0)
  920. {
  921. client_cmd(id, "messagemode Insert_price");
  922. menu_destroy(menu);
  923. return PLUGIN_HANDLED;
  924. }
  925. if(!g_iPrice[id])
  926. {
  927. ColorChat(id, "!g%s!nNu ai ales inca pretul!", szTag);
  928. showSkinsToSellMenu(id)
  929. return PLUGIN_HANDLED
  930. }
  931. iSkinID = g_iSkins[id][item-1];
  932.  
  933. if(g_iSkinsInMarket[id][iSkinID])
  934. {
  935. ColorChat(id, "!g%s!nAi pus deja acest !gskin in !gmarket!n!", szTag);
  936. showSkinsToSellMenu(id);
  937. return PLUGIN_HANDLED;
  938. }
  939.  
  940. g_iPlayerSkins[id][iSkinID]--;
  941. g_iSkinsInMarket[id][iSkinID] = g_iPrice[id];
  942.  
  943. ColorChat(id, "!g%s!nAi adaugat skinul !g%s !nin market cu !g%d !npuncte.", szTag, g_aSkins[iSkinID][Name], g_iPrice[id]);
  944. 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]);
  945. g_iPrice[id] = 0;
  946.  
  947. SaveData(id)
  948. SaveMarket(id);
  949.  
  950. showSkinsToSellMenu(id);
  951.  
  952. menu_destroy(menu);
  953. return PLUGIN_HANDLED;
  954. }
  955. public cmdInsertPrice(id)
  956. {
  957. new szPrice[8];
  958. read_args(szPrice, charsmax(szPrice));
  959. remove_quotes(szPrice);
  960.  
  961. new iPrice = str_to_num(szPrice);
  962. if(!iPrice || iPrice < 0)
  963. {
  964. ColorChat(id, "!g%s!nInvalid number, try again!", szTag);
  965. client_cmd(id, "messagemode Insert_price");
  966. }
  967.  
  968. g_iPrice[id] = iPrice;
  969. showSkinsToSellMenu(id);
  970. }
  971. /* Remove skin from market */
  972. public showRemoveSkinMenu(id)
  973. {
  974. new menu, szText[128], k=0;
  975.  
  976. menu = menu_create("\w[ \yCSGO OUTSTANDING \w] Alege skinul pe care doresti sa il retragi", "skinsToRemoveMenuHandler");
  977. for(new i; i < skinsNum; i++)
  978. {
  979. if(g_iSkinsInMarket[id][i])
  980. {
  981. formatex(szText, charsmax(szText), "\y%s", g_aSkins[i][Name]);
  982. menu_additem(menu, szText);
  983.  
  984. g_iSkins[id][k++] = i;
  985. }
  986. }
  987.  
  988. menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
  989. menu_display(id, menu, 0);
  990. }
  991. public skinsToRemoveMenuHandler(id, menu, item)
  992. {
  993. if(item == MENU_EXIT)
  994. {
  995. cmdShowMarket(id);
  996. return PLUGIN_HANDLED;
  997. }
  998.  
  999. new szName[32], iSkinID;
  1000.  
  1001. get_user_name(id, szName, charsmax(szName));
  1002. iSkinID = g_iSkins[id][item];
  1003.  
  1004. g_iSkinsInMarket[id][iSkinID] = 0;
  1005. g_iPlayerSkins[id][iSkinID]++;
  1006.  
  1007. ColorChat(0, "!g%s!nJucatorul !g%s !na retras skinul !g%s !ndin market.", szTag, szName, g_aSkins[iSkinID][Name]);
  1008.  
  1009. cmdShowMarket(id);
  1010. return PLUGIN_HANDLED;
  1011. }
  1012. /* Games Menu */
  1013. public showGamesMenu(id)
  1014. {
  1015. new menu, szText[64];
  1016. menu = menu_create("\w[ \yCS:GO OUTSTANDING \w] Meniu de \yjocuri", "gamesMenuHandler");
  1017.  
  1018. formatex(szText, charsmax(szText), "Tombola | \y%d \wPuncte", RAFFLE_COST)
  1019. menu_additem(menu, szText);
  1020.  
  1021. menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
  1022. menu_display(id, menu, 0);
  1023. }
  1024. public gamesMenuHandler(id, menu, item)
  1025. {
  1026. if( item == MENU_EXIT )
  1027. {
  1028. menu_destroy(menu);
  1029. return PLUGIN_HANDLED;
  1030. }
  1031.  
  1032. switch(item)
  1033. {
  1034. case 0:
  1035. {
  1036. if(g_iPlayerData[id][Points] < RAFFLE_COST)
  1037. {
  1038. ColorChat(id, "!g%s!nInsuficiente !gpuncte !npentru a juca la tombola", szTag);
  1039. return PLUGIN_HANDLED;
  1040. }
  1041. new szName[32];
  1042. get_user_name(id, szName, charsmax(szName));
  1043.  
  1044. for(new i; i < raffleMembers; i++)
  1045. {
  1046. if(g_iRafflePlayers[i] == id)
  1047. {
  1048. ColorChat(id, "!g%s!nTe-ai inscris deja in tombola runda asta!", szTag);
  1049. return PLUGIN_HANDLED;
  1050. }
  1051. }
  1052.  
  1053. g_iRafflePlayers[raffleMembers++] = id;
  1054. g_iPlayerData[id][Points] -= RAFFLE_COST
  1055. ColorChat(0, "!g%s!nJucatorul !g%s !ns-a inscris in !gtombola!n.Jucatori inscrisi: !g%d!n.", szTag, szName, raffleMembers);
  1056. }
  1057. }
  1058.  
  1059. menu_destroy(menu);
  1060. return PLUGIN_HANDLED;
  1061. }
  1062. /* Round end event */
  1063. public evRoundEnd()
  1064. {
  1065. if(raffleMembers)
  1066. {
  1067. new iRand, szName[32];
  1068.  
  1069. iRand = random(raffleMembers);
  1070. get_user_name(g_iRafflePlayers[iRand], szName, charsmax(szName));
  1071.  
  1072. g_iPlayerData[g_iRafflePlayers[iRand]][Points] += RAFFLE_COST*raffleMembers;
  1073.  
  1074. ColorChat(0, "!g%s!nTombola pe runda aceasta s-a incheiat !", szTag);
  1075. ColorChat(0, "!g%s!nJucatorul !g%s !na avut bulan si a castigat !g%d!n puncte !", szTag, szName, RAFFLE_COST*raffleMembers);
  1076. ColorChat(0, "!g%s!nNu fiti suparati, vorba aia, prost sa fii noroc sa ai !", szTag);
  1077.  
  1078. raffleMembers = 0;
  1079. }
  1080. else
  1081. {
  1082. ColorChat(0, "!g%s!nNiciun jucator !ginscris !nin aceasta runda !", szTag);
  1083. ColorChat(0, "!g%s!nAsteptam extragerea din runda urmatoare !", szTag);
  1084. }
  1085. }
  1086. /* Giving keys when win a round */
  1087. public terroristsWin()
  1088. {
  1089. new iPlayers[32], iNum, id, iRand;
  1090. get_players(iPlayers, iNum, "ae", "TERRORISTS");
  1091.  
  1092. for(new i; i < iNum; i++)
  1093. {
  1094. id = iPlayers[i];
  1095. iRand = random_num(1, 100);
  1096.  
  1097. if(iRand <= DROP_FRAGMENTS_CHANCE)
  1098. {
  1099. g_iPlayerData[id][Fragments]++;
  1100. ColorChat(id, "!g%s!nFelicitari, ai primit un !gfragment !nde cheie !", szTag);
  1101.  
  1102. SaveData(id);
  1103. }
  1104. }
  1105. }
  1106. public ctsWin()
  1107. {
  1108. new iPlayers[32], iNum, id, iRand;
  1109. get_players(iPlayers, iNum, "ae", "CT");
  1110.  
  1111. for(new i; i < iNum; i++)
  1112. {
  1113. id = iPlayers[i];
  1114. iRand = random_num(1, 100);
  1115.  
  1116. if(iRand <= DROP_FRAGMENTS_CHANCE)
  1117. {
  1118. g_iPlayerData[id][Fragments]++;
  1119. ColorChat(id, "!g%s!nFelicitari, ai primit un !gfragment !nde cheie !", szTag);
  1120.  
  1121. SaveData(id);
  1122. }
  1123. }
  1124. }
  1125. public hamAddWeaponToPlayer(ent, id)
  1126. {
  1127. if(!is_valid_ent(ent) || !is_user_connected(id))
  1128. return HAM_IGNORED;
  1129.  
  1130. for (new i; i < skinsNum; i++) {
  1131. if(entity_get_int(ent, EV_INT_WEAPONKEY) == 500+i)
  1132. {
  1133. entity_set_int(ent, EV_INT_WEAPONKEY, 0);
  1134. g_iShowedSkin[id][g_aSkins[i][Type]] = i;
  1135.  
  1136. return HAM_HANDLED;
  1137. }
  1138. }
  1139. return HAM_IGNORED;
  1140. }
  1141. public fwSetModel(entity, model[])
  1142. {
  1143. if(!is_valid_ent(entity))
  1144. return FMRES_IGNORED;
  1145.  
  1146. static szClassName[33];
  1147. entity_get_string(entity, EV_SZ_classname, szClassName, charsmax(szClassName));
  1148.  
  1149. if(!equal(szClassName, "weaponbox"))
  1150. return FMRES_IGNORED;
  1151.  
  1152. static iOwner;
  1153.  
  1154. new szModels[][][] = {
  1155. {"models/w_ak47.mdl", "weapon_ak47" },
  1156. {"models/w_m4a1.mdl", "weapon_m4a1" },
  1157. {"models/w_awp.mdl", "weapon_awp" }
  1158. }
  1159.  
  1160. new iWeapons[] = {
  1161. CSW_AK47,
  1162. CSW_M4A1,
  1163. CSW_AWP
  1164. }
  1165.  
  1166. iOwner = entity_get_edict(entity, EV_ENT_owner);
  1167.  
  1168. for(new i; i < sizeof(szModels); i++)
  1169. if(equal(model, szModels[i][0]))
  1170. {
  1171.  
  1172. static iStoredAugID;
  1173. iStoredAugID = find_ent_by_owner(ENG_NULLENT, szModels[i][1], entity);
  1174.  
  1175. if(!is_valid_ent(iStoredAugID))
  1176. return FMRES_IGNORED;
  1177.  
  1178. entity_set_int(iStoredAugID, EV_INT_WEAPONKEY, 500+g_iShowedSkin[iOwner][iWeapons[i]]);
  1179. entity_set_model(entity, szModels[i][0]);
  1180.  
  1181. return FMRES_SUPERCEDE;
  1182. }
  1183. return FMRES_IGNORED;
  1184. }
  1185. /* Save & Load Data */
  1186. public SaveData(id)
  1187. {
  1188. new iVault = nvault_open("CSGOData2");
  1189.  
  1190. new szName[32], szData[256];
  1191. get_user_name(id, szName, charsmax(szName));
  1192.  
  1193. formatex(szData, charsmax(szData), "%i#%i#%i#%i", g_iPlayerData[id][Points], g_iPlayerData[id][Case], g_iPlayerData[id][Keys], g_iPlayerData[id][Fragments]);
  1194.  
  1195. for(new i; i < skinsNum; i++)
  1196. format(szData, charsmax(szData), "%s#%i", szData, g_iPlayerSkins[id][i]);
  1197.  
  1198. nvault_set(iVault, szName, szData);
  1199.  
  1200. nvault_close(iVault);
  1201. }
  1202. public LoadData(id)
  1203. {
  1204. new iVault = nvault_open("CSGOData2");
  1205.  
  1206. if(iVault == INVALID_HANDLE) {
  1207. log_amx("ERROR: Unable to open vault file %s", "CSGOData2");
  1208. return PLUGIN_HANDLED;
  1209. }
  1210.  
  1211.  
  1212. new szName[32], szData[256], szArg[SKINS_MAX][9], iArg[SKINS_MAX], iTimestamp;
  1213. get_user_name(id, szName, charsmax(szName));
  1214.  
  1215. if(nvault_lookup(iVault, szName, szData, charsmax(szData), iTimestamp))
  1216. {
  1217. /* +4 because we must load points keys case and fragments */
  1218. for(new i; i < skinsNum + 4; i ++)
  1219. {
  1220. strtok(szData, szArg[i], charsmax(szArg[]), szData, charsmax(szData), '#');
  1221. iArg[i] = str_to_num(szArg[i]);
  1222. }
  1223.  
  1224. g_iPlayerData[id][Points] = iArg[0];
  1225. g_iPlayerData[id][Case] = iArg[1];
  1226. g_iPlayerData[id][Keys] = iArg[2];
  1227. g_iPlayerData[id][Fragments] = iArg[3];
  1228.  
  1229. for(new i; i < skinsNum; i++)
  1230. g_iPlayerSkins[id][i] = iArg[i+4]; /* +4 because we loaded points keys case and fragments */
  1231. }
  1232. else
  1233. {
  1234. g_iPlayerData[id][Points] = 15;
  1235. g_iPlayerData[id][Case] = 1;
  1236. g_iPlayerData[id][Keys] = 1;
  1237. g_iPlayerData[id][Fragments] = 0;
  1238.  
  1239. for(new i; i < skinsNum; i++)
  1240. g_iPlayerSkins[id][i] = 0;
  1241. }
  1242. nvault_close(iVault);
  1243. return PLUGIN_CONTINUE;
  1244. }
  1245. /* Save & Load Market */
  1246. public SaveMarket(id)
  1247. {
  1248. new iVault = nvault_open("CSGOMarket");
  1249.  
  1250. new szName[32], szData[256];
  1251. get_user_name(id, szName, charsmax(szName));
  1252.  
  1253. for(new i; i < skinsNum; i++)
  1254. format(szData, charsmax(szData), "%s#%i", szData, g_iSkinsInMarket[id][i]);
  1255.  
  1256. nvault_set(iVault, szName, szData);
  1257.  
  1258. nvault_close(iVault);
  1259. }
  1260. public LoadMarket(id)
  1261. {
  1262. new iVault = nvault_open("CSGOMarket");
  1263.  
  1264. new szName[32], szData[256], szArg[SKINS_MAX][9], iArg[SKINS_MAX];
  1265. get_user_name(id, szName, charsmax(szName));
  1266.  
  1267. nvault_get(iVault, szName, szData, charsmax(szData));
  1268.  
  1269. for(new i; i < skinsNum; i ++)
  1270. {
  1271. strtok(szData, szArg[i], charsmax(szArg[]), szData, charsmax(szData), '#');
  1272. iArg[i] = str_to_num(szArg[i]);
  1273. }
  1274. for(new i; i < skinsNum; i++)
  1275. g_iSkinsInMarket[id][i] = iArg[i];
  1276. nvault_close(iVault);
  1277. }
  1278. /* ColorChat */
  1279. stock ColorChat(const id,const input[], any:...) {
  1280. new iNum = 1, iPlayers[32];
  1281. static szMessage[191];
  1282. vformat(szMessage, charsmax(szMessage),input, 3);
  1283.  
  1284. replace_all(szMessage, charsmax(szMessage), "!g", "^4");
  1285. replace_all(szMessage, charsmax(szMessage), "!n", "^1");
  1286. replace_all(szMessage, charsmax(szMessage), "!t", "^3");
  1287.  
  1288. if(id) iPlayers[0] = id;
  1289. else get_players(iPlayers, iNum, "ch");
  1290.  
  1291. for(new i = 0; i < iNum; i++)
  1292. {
  1293. if(is_user_connected(iPlayers[i]))
  1294. {
  1295. message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, iPlayers[i]);
  1296. write_byte(iPlayers[i]);
  1297. write_string(szMessage);
  1298. message_end();
  1299. }
  1300. }
  1301. }
  1302. // Get Weapon Entity's Owner
  1303. stock fm_cs_get_weapon_ent_owner(ent)
  1304. {
  1305. // Prevent server crash if entity's private data not initalized
  1306. if (pev_valid(ent) != 2) return -1;
  1307.  
  1308. return get_pdata_cbase(ent, 41, 4);
  1309. }
  1310. stock user_have_skins(id) {
  1311. new ok = 0;
  1312. for (new i; i < skinsNum; i++) {
  1313. if (g_iPlayerSkins[id][i] > 0) {
  1314. ok = 1;
  1315. }
  1316. }
  1317. return ok;
  1318. }
  1319.  
  1320. public PartyMenu(id)
  1321. {
  1322. new szText[128];
  1323.  
  1324. formatex(szText, sizeof(szText), "\r%L %L", LANG_PLAYER, "KMAIN", LANG_PLAYER, "YPOINT", Points[id]);
  1325.  
  1326. new menu = menu_create(szText, "PartyMenuHandler");
  1327.  
  1328. formatex(szText, charsmax(szText), "Buy 1 place - \r%d \wpoints \d%d/%d", SLOT_COST, PartySlots[id], MAX_PARTY_SLOTS);
  1329. menu_additem(menu, szText, "0");
  1330.  
  1331. if(PartyCreated[id])
  1332. {
  1333. formatex(szText, charsmax(szText), "Send an invitation \y[\r%d\y]", GetInvitableMembers());
  1334. menu_additem(menu, szText, "3");
  1335.  
  1336. formatex(szText, charsmax(szText), "Throw away \y[\r%d\y]", GetPartyMembers(id));
  1337. menu_additem(menu, szText, "4");
  1338.  
  1339. formatex(szText, charsmax(szText), "\rDelete group");
  1340. menu_additem(menu, szText, "5");
  1341. }
  1342. else if(InParty[id])
  1343. {
  1344. formatex(szText, charsmax(szText), "\rLeave the group");
  1345. menu_additem(menu, szText, "6");
  1346. }
  1347. else
  1348. {
  1349. formatex(szText, charsmax(szText), "%sCreate a group", PartySlots[id] ? "\w":"\d");
  1350. menu_additem(menu, szText, "1");
  1351.  
  1352. formatex(szText, charsmax(szText), "Invitations \y[\r%d\y]", GetPartyInvitations(id));
  1353. menu_additem(menu, szText, "2");
  1354. }
  1355.  
  1356. menu_display(id, menu, 0);
  1357. }
  1358.  
  1359. public PartyMenuHandler(id, menu, item)
  1360. {
  1361. if(item == MENU_EXIT)
  1362. {
  1363. menu_destroy(menu);
  1364. return PLUGIN_CONTINUE;
  1365. }
  1366.  
  1367. new data[9], name[64], Key;
  1368. new access, callback;
  1369. menu_item_getinfo(menu, item, access, data, charsmax(data), name, charsmax(name), callback);
  1370.  
  1371. Key = str_to_num(data);
  1372.  
  1373. switch(Key)
  1374. {
  1375. case 0:
  1376. {
  1377. if(Points[id] >= SLOT_COST)
  1378. {
  1379. if(PartySlots[id] < MAX_PARTY_SLOTS)
  1380. {
  1381. Points[id] -= SLOT_COST;
  1382. PartySlots[id]++;
  1383. SaveData(id);
  1384. }
  1385. else client_print_color(id, print_team_default, "[^4CS-GO Public^1] ^4You already have the maximum number of places!");
  1386. }
  1387. else client_print_color(id, print_team_default, "[^4CS-GO Public^1] ^3Not enough points!");
  1388. }
  1389. case 1:
  1390. {
  1391. if(PartySlots[id])
  1392. {
  1393. PartyCreated[id] = true;
  1394. InParty[id] = id;
  1395.  
  1396. new name[34];
  1397. get_user_name(id, name, 33);
  1398. client_print_color(0, print_team_default, "[^4CS-GO Public^1] ^3%s ^4Created a group!", name);
  1399. }
  1400. else client_print_color(id, print_team_default, "[^4CS-GO Public^1] ^4You do not have a group of places to create it!");
  1401. }
  1402. case 2:
  1403. {
  1404. PartyInvitations(id);
  1405. return PLUGIN_HANDLED;
  1406. }
  1407. case 3:
  1408. {
  1409. PartyInvitePeople(id);
  1410. return PLUGIN_HANDLED;
  1411. }
  1412. case 4:
  1413. {
  1414. PartyDeletePeople(id);
  1415. return PLUGIN_HANDLED;
  1416. }
  1417. case 5:
  1418. {
  1419. PartyCreated[id] = false;
  1420. InParty[id] = 0;
  1421.  
  1422. for(new i = 1; i <= 32; i++)
  1423. {
  1424. if(InParty[i] == id && i != id)
  1425. {
  1426. client_print_color(i, print_team_default, "[^4CS-GO Public^1] ^4Deleted!");
  1427. InParty[i] = 0;
  1428. }
  1429. }
  1430. client_print_color(id, print_team_default, "[^4CS-GO Public^1] ^4You deleted the group!");
  1431. }
  1432. case 6:
  1433. {
  1434. new name[34];
  1435. get_user_name(id, name, 33);
  1436.  
  1437. for(new i = 1; i <= 32; i++)
  1438. {
  1439. if(InParty[i] == InParty[id] && i != id)
  1440. {
  1441. client_print_color(i, print_team_default, "[^4CS-GO Public^1] ^3%s ^4Left the group!", name);
  1442. }
  1443. }
  1444. InParty[id] = 0;
  1445. client_print_color(id, print_team_default, "[^4CS-GO Public^1] ^4Left the group!");
  1446. }
  1447. }
  1448. PartyMenu(id);
  1449. return PLUGIN_HANDLED;
  1450. }
  1451.  
  1452. stock GetPartyMembers(id)
  1453. {
  1454. new Num = 0;
  1455.  
  1456. for(new i = 1; i <= 32; i++)
  1457. {
  1458. if(InParty[i] == InParty[id] && i != id)
  1459. {
  1460. Num++;
  1461. }
  1462. }
  1463. return Num;
  1464. }
  1465.  
  1466. stock GetInvitableMembers()
  1467. {
  1468. new Num = 0;
  1469.  
  1470. for(new i = 1; i <= 32; i++)
  1471. {
  1472. if(!InParty[i])
  1473. {
  1474. Num++;
  1475. }
  1476. }
  1477. return Num;
  1478. }
  1479.  
  1480. stock GetPartyInvitations(id)
  1481. {
  1482. new Num = 0;
  1483.  
  1484. for(new i = 1; i <= 32; i++)
  1485. {
  1486. if(i != id && PartyCreated[i] && PartyInvites[i][id])
  1487. {
  1488. Num++;
  1489. }
  1490. }
  1491. return Num;
  1492. }
  1493.  
  1494. public PartyInvitations(id)
  1495. {
  1496. new menu = menu_create("\y[\rCS-GO Public\y] Get Invitations", "PartyInvitationsHandler");
  1497.  
  1498. new players[32], pNum, tempid;
  1499.  
  1500. new szName[32], szUserId[32];
  1501. get_players(players, pNum);
  1502.  
  1503. for(new i; i < pNum; i++)
  1504. {
  1505. tempid = players[i];
  1506.  
  1507. if(tempid != id && PartyCreated[tempid] && PartyInvites[tempid][id] && PartySlots[tempid] > GetPartyMembers(tempid))
  1508. {
  1509. get_user_name(tempid, szName, charsmax(szName));
  1510. formatex(szUserId, charsmax(szUserId), "%d", get_user_userid(tempid));
  1511. menu_additem(menu, szName, szUserId, 0);
  1512. }
  1513. }
  1514. if(menu_items(menu)) menu_display(id, menu, 0);
  1515. else PartyMenu(id);
  1516. }
  1517.  
  1518. public PartyInvitationsHandler(id, menu, item)
  1519. {
  1520. if(item == MENU_EXIT)
  1521. {
  1522. menu_destroy(menu);
  1523. PartyMenu(id);
  1524. return PLUGIN_HANDLED;
  1525. }
  1526.  
  1527. new szData[6], szName[64];
  1528. new _access, item_callback;
  1529. menu_item_getinfo(menu, item, _access, szData, charsmax(szData), szName, charsmax(szName), item_callback);
  1530.  
  1531. new userid = str_to_num(szData);
  1532.  
  1533. new player = find_player("k", userid); // flag "k" : find player from userid
  1534.  
  1535. if(player)
  1536. {
  1537. if(PartySlots[player] > GetPartyMembers(player))
  1538. {
  1539. new szName[34];
  1540. get_user_name(id, szName, charsmax(szName));
  1541.  
  1542. InParty[id] = player;
  1543. client_print_color(id, print_team_default, "[^4CS-GO Public^1] ^4You are successfully logged in!");
  1544.  
  1545. for(new i = 1; i <= 32; i++)
  1546. {
  1547. if(i != id && InParty[i] == player)
  1548. {
  1549. client_print_color(i, print_team_default, "[^4CS-GO Public^1] ^3%s ^4Joined the group!", szName);
  1550. }
  1551. }
  1552. }
  1553. else client_print_color(id, print_team_default, "[^4CS-GO Public^1] ^4This group is full");
  1554. }
  1555.  
  1556. menu_destroy(menu);
  1557. PartyMenu(id);
  1558. return PLUGIN_HANDLED;
  1559. }
  1560.  
  1561. public PartyInvitePeople(id)
  1562. {
  1563. new menu = menu_create("\y[\rCS-GO Public\y] Invite to the group", "PartyInvitePeopleHandler");
  1564.  
  1565. new players[32], pNum, tempid;
  1566.  
  1567. new szName[40], szUserId[32];
  1568. get_players(players, pNum);
  1569.  
  1570. for(new i; i < pNum; i++)
  1571. {
  1572. tempid = players[i];
  1573.  
  1574. if(!InParty[tempid])
  1575. {
  1576. get_user_name(tempid, szName, charsmax(szName));
  1577.  
  1578. formatex(szName, charsmax(szName), "%s%s", szName, PartyInvites[id][tempid] ? "\r*" : "");
  1579. formatex(szUserId, charsmax(szUserId), "%d", get_user_userid(tempid));
  1580.  
  1581. menu_additem(menu, szName, szUserId, 0);
  1582. }
  1583. }
  1584. if(menu_items(menu)) menu_display(id, menu, 0);
  1585. else PartyMenu(id);
  1586. }
  1587.  
  1588. public PartyInvitePeopleHandler(id, menu, item)
  1589. {
  1590. if (item == MENU_EXIT)
  1591. {
  1592. menu_destroy(menu);
  1593. PartyMenu(id);
  1594. return PLUGIN_HANDLED;
  1595. }
  1596.  
  1597. new szData[6], szName[64];
  1598. new _access, item_callback;
  1599. menu_item_getinfo(menu, item, _access, szData, charsmax(szData), szName,charsmax(szName), item_callback);
  1600.  
  1601. new userid = str_to_num(szData);
  1602.  
  1603. new player = find_player("k", userid); // flag "k" : find player from userid
  1604.  
  1605. if(player)
  1606. {
  1607. PartyInvites[id][player] = !PartyInvites[id][player];
  1608.  
  1609. if(PartyInvites[id][player])
  1610. {
  1611. new szName[34];
  1612. get_user_name(id, szName, charsmax(szName));
  1613. client_print_color(player, print_team_default, "[^4CS-GO Public^1] ^3%s ^4Invited to join the group!", szName);
  1614. client_print_color(id, print_team_default, "[^4CS-GO Public^1] ^4Invitation sent!");
  1615. }
  1616. }
  1617.  
  1618. menu_destroy(menu);
  1619. PartyMenu(id);
  1620. return PLUGIN_HANDLED;
  1621. }
  1622.  
  1623. public PartyDeletePeople(id)
  1624. {
  1625. new menu = menu_create("\y[\rCS-GO Public\y] Drop from group", "PartyDeletePeopleHandler");
  1626.  
  1627. new players[32], pNum, tempid;
  1628.  
  1629. new szName[32], szUserId[32];
  1630. get_players(players, pNum);
  1631.  
  1632. for(new i; i < pNum; i++)
  1633. {
  1634. tempid = players[i];
  1635.  
  1636. if(tempid != id && InParty[tempid] == id)
  1637. {
  1638. get_user_name(tempid, szName, charsmax(szName));
  1639. formatex(szUserId, charsmax(szUserId), "%d", get_user_userid(tempid));
  1640.  
  1641. menu_additem(menu, szName, szUserId, 0);
  1642. }
  1643. }
  1644.  
  1645. if(menu_items(menu)) menu_display(id, menu, 0);
  1646. else PartyMenu(id);
  1647. }
  1648.  
  1649. public PartyDeletePeopleHandler(id, menu, item)
  1650. {
  1651. if(item == MENU_EXIT)
  1652. {
  1653. menu_destroy(menu);
  1654. PartyMenu(id);
  1655. return PLUGIN_HANDLED;
  1656. }
  1657.  
  1658. new szData[6], szName[64];
  1659. new _access, item_callback;
  1660. menu_item_getinfo(menu, item, _access, szData, charsmax(szData), szName, charsmax(szName), item_callback);
  1661.  
  1662. new userid = str_to_num(szData);
  1663.  
  1664. new player = find_player("k", userid); // flag "k" : find player from userid
  1665.  
  1666. if(player && InParty[player] == id)
  1667. {
  1668. client_print_color(player, print_team_default, "[^4CS-GO Public^1] ^3Threw you away from the group!");
  1669. InParty[player] = 0;
  1670. }
  1671.  
  1672. menu_destroy(menu);
  1673. PartyDeletePeople(id);
  1674. return PLUGIN_HANDLED;
  1675. }#include <amxmodx>
  1676. #include <amxmisc>
  1677. #include <hamsandwich>
  1678. #include <fakemeta>
  1679. #include <engine>
  1680. #include <cstrike>
  1681. #include <fun>
  1682. #include <csx>
  1683. #include <nvault>
  1684.  
  1685. #define PLUGIN "CSGO OUTSTANDING"
  1686. #define VERSION "1.3"
  1687.  
  1688. #define ENG_NULLENT -1
  1689. #define EV_INT_WEAPONKEY EV_INT_impulse
  1690.  
  1691. #define SKINS_MAX 32
  1692. #define MAX_RANKS 32
  1693.  
  1694. #define KEY_COST 50
  1695. #define RAFFLE_COST 10
  1696.  
  1697. #define FRAGMENTS_TO_CRAFT 3
  1698. #define DROP_FRAGMENTS_CHANCE 60
  1699.  
  1700. #define POINTS_CHANCE 50
  1701. #define POINTS_FOR_KILL 5
  1702. #define MAX_PARTY_SLOTS 5
  1703. new PartySlots[33], bool:PartyCreated[33], bool:PartyInvites[33][33], InParty[33];
  1704.  
  1705. #define DROP_CASE_CHANCE 10
  1706.  
  1707. enum Data {
  1708. Points,
  1709. Case,
  1710. Keys,
  1711. Fragments
  1712. }
  1713. enum eData {
  1714. Name[32],
  1715. vModel[64],
  1716. pModel[64],
  1717. Type,
  1718. Chance
  1719. }
  1720.  
  1721. new g_aSkins[SKINS_MAX][eData];
  1722.  
  1723. /* Ranks system */
  1724. enum eRankData {
  1725. RankName[32],
  1726. valFirst,
  1727. valSecond
  1728. }
  1729.  
  1730. new g_szRanks[MAX_RANKS][eRankData] ;
  1731. new g_szRank[33][2][32], ranksNum;
  1732.  
  1733. /* Gift system */
  1734. new g_iReceiver[33], g_iIterator[33], g_iSkinToGift[33];
  1735.  
  1736. /* Destroy system */
  1737. new g_iSkinToDestroy[33];
  1738.  
  1739. /* Raffle system */
  1740. new g_iRafflePlayers[33], raffleMembers;
  1741.  
  1742. /* Market system */
  1743. new g_iSkinsInMarket[33][SKINS_MAX], g_iPrice[33], iSeller[33][SKINS_MAX];
  1744.  
  1745. /* Mute system */
  1746. new iMutedPlayers[33][33];
  1747.  
  1748. /* Core */
  1749. new g_iPlayerSkins[33][SKINS_MAX], g_iPlayerData[33][Data];
  1750. new g_iSkins[33][SKINS_MAX], g_iMaxChance, g_iShowedSkin[33][31], skinsNum;
  1751.  
  1752. new const szTag[] = "[CS:GO OUTSTANDING]"
  1753. public plugin_init()
  1754. {
  1755. register_plugin(PLUGIN, VERSION, "FaTzZu a.k.a Jailbreak suge ****");
  1756.  
  1757. register_clcmd("say /menu", "cmdSayMenu");
  1758. register_clcmd("chooseteam", "cmdSayMenu");
  1759. register_concmd("set", "PartyMenu");
  1760.  
  1761. register_logevent("evRoundEnd",2, "1=Round_End");
  1762. register_event("DeathMsg", "evDeathMsg", "a");
  1763.  
  1764. register_event("SendAudio", "terroristsWin" , "a", "2&%!MRAD_terwin");
  1765. register_event("SendAudio", "ctsWin", "a", "2&%!MRAD_ctwin");
  1766.  
  1767. // Weapon entity names
  1768. new const szWeaponNames[][] = {
  1769. "", "weapon_p228", "", "weapon_scout", "weapon_hegrenade", "weapon_xm1014", "weapon_c4", "weapon_mac10",
  1770. "weapon_aug", "weapon_smokegrenade", "weapon_elite", "weapon_fiveseven", "weapon_ump45", "weapon_sg550",
  1771. "weapon_galil", "weapon_famas", "weapon_usp", "weapon_glock18", "weapon_awp", "weapon_mp5navy", "weapon_m249",
  1772. "weapon_m3", "weapon_m4a1", "weapon_tmp", "weapon_g3sg1", "weapon_flashbang", "weapon_deagle", "weapon_sg552",
  1773. "weapon_ak47", "weapon_knife", "weapon_p90"
  1774. };
  1775. for (new i; i < sizeof(szWeaponNames); i++)
  1776. {
  1777. if (szWeaponNames[i][0])
  1778. {
  1779. RegisterHam(Ham_Item_AddToPlayer, szWeaponNames[i], "hamAddWeaponToPlayer");
  1780. RegisterHam(Ham_Item_Deploy, szWeaponNames[i], "hamItemDeploy", 1);
  1781. }
  1782. }
  1783. register_forward(FM_SetModel, "fwSetModel");
  1784.  
  1785. register_clcmd("Insert_price", "cmdInsertPrice");
  1786.  
  1787. }
  1788. /* Precaching models */
  1789. public plugin_precache()
  1790. {
  1791. new szConfigsDir[128], szMessage[64];
  1792.  
  1793. get_configsdir(szConfigsDir, charsmax(szConfigsDir));
  1794. add(szConfigsDir, charsmax(szConfigsDir), "%s/csgo/skins.ini");
  1795.  
  1796. if(!file_exists(szConfigsDir))
  1797. {
  1798. write_file(szConfigsDir, ";TYPES 28=Ak47 22=M4a1 18=AWP 26=Deagle 29=Knife");
  1799. write_file(szConfigsDir, ";Skin name v_Model p_Model TYPE Chance");
  1800. write_file(szConfigsDir, ";Exemplu:");
  1801. write_file(szConfigsDir, ";^"Ak47 Dragon Lore^" ^"models/GO/v_ak47_dragonlore.mdl^" ^"models/GO/p_ak47_dragonlore.mdl^" ^"28^" ^"20^"");
  1802. }
  1803.  
  1804. new f = fopen(szConfigsDir, "rt");
  1805. if(!f)
  1806. return;
  1807. new szLineData[256], szName[32], szViewModel[64], szPlayerModel[64], szType[8], szChance[4];
  1808. while(!feof(f))
  1809. {
  1810. fgets(f, szLineData, charsmax(szLineData));
  1811.  
  1812. if(strlen(szLineData) < 2 || szLineData[0] == ';' || !szLineData[0])
  1813. continue;
  1814.  
  1815. parse(szLineData, szName, charsmax(szName), szViewModel, charsmax(szViewModel), szPlayerModel, charsmax(szPlayerModel), szType, charsmax(szType), szChance, charsmax(szChance))
  1816.  
  1817. new iType = str_to_num(szType);
  1818. new iChance = str_to_num(szChance)
  1819.  
  1820. copy(g_aSkins[skinsNum][Name], 31, szName);
  1821. copy(g_aSkins[skinsNum][vModel], 63, szViewModel);
  1822. copy(g_aSkins[skinsNum][pModel], 63, szPlayerModel);
  1823. g_aSkins[skinsNum][Type] = iType;
  1824. g_aSkins[skinsNum][Chance] = iChance;
  1825.  
  1826. skinsNum++
  1827. }
  1828.  
  1829. fclose(f);
  1830.  
  1831. g_iMaxChance = g_aSkins[0][Chance];
  1832. for (new i; i < skinsNum; i++)
  1833. {
  1834. if (g_aSkins[0][Chance] > g_iMaxChance)
  1835. {
  1836. g_iMaxChance = g_aSkins[0][Chance];
  1837. }
  1838. }
  1839.  
  1840. for (new i; i < skinsNum; i++)
  1841. {
  1842. if (!file_exists(g_aSkins[0][vModel]))
  1843. {
  1844. formatex(szMessage, charsmax(szMessage), "Missing model [%s]", g_aSkins[0][vModel]);
  1845. set_fail_state(szMessage);
  1846. }
  1847. if (strlen(g_aSkins[0][pModel]) > 3)
  1848. {
  1849. if (!file_exists(g_aSkins[0][pModel]))
  1850. {
  1851. formatex(szMessage, charsmax(szMessage), "Missing model [%s]", g_aSkins[0][pModel]);
  1852. set_fail_state(szMessage);
  1853. }
  1854. }
  1855.  
  1856. precache_model(g_aSkins[i][vModel]);
  1857.  
  1858. if (strlen(g_aSkins[i][pModel]) > 3)
  1859. {
  1860. precache_model(g_aSkins[i][pModel]);
  1861. }
  1862. }
  1863. }
  1864. /* Executing cfg's */
  1865. public plugin_cfg()
  1866. {
  1867. new szConfigsDir[128];
  1868. get_configsdir(szConfigsDir, charsmax(szConfigsDir));
  1869.  
  1870. add(szConfigsDir, charsmax(szConfigsDir), "%s/csgo/ranks.ini");
  1871.  
  1872. if(!file_exists(szConfigsDir))
  1873. write_file(szConfigsDir, ";RANK - PRIMA VALOARE - A 2-A VALOARE", -1);
  1874.  
  1875. new f = fopen(szConfigsDir, "rt");
  1876. if(!f)
  1877. return;
  1878. new szLineRankData[128], szRank[32], szFirstVal[8], szLastVal[8];
  1879. while(!feof(f))
  1880. {
  1881. fgets(f, szLineRankData, charsmax(szLineRankData));
  1882.  
  1883. if(!szLineRankData[0] || szLineRankData[0] == ';' || strlen(szLineRankData) < 2)
  1884. continue;
  1885.  
  1886. parse(szLineRankData, szRank, charsmax(szRank), szFirstVal, charsmax(szFirstVal), szLastVal, charsmax(szLastVal));
  1887.  
  1888. new iFirstVal = str_to_num(szFirstVal);
  1889. new iLastVal = str_to_num(szLastVal);
  1890.  
  1891. copy(g_szRanks[ranksNum][RankName], charsmax(g_szRanks[]), szRank);
  1892. g_szRanks[ranksNum][valFirst] = iFirstVal
  1893. g_szRanks[ranksNum][valSecond] = iLastVal
  1894.  
  1895. ranksNum++;
  1896. }
  1897.  
  1898.  
  1899. }
  1900. /* When client connects */
  1901. public client_putinserver(id)
  1902. {
  1903. new iPlayers[32], iNum;
  1904. get_players(iPlayers, iNum);
  1905.  
  1906. for(new i; i < iNum; i++)
  1907. iMutedPlayers[id][iPlayers[i]] = 0;
  1908.  
  1909. for(new i; i < 31; i++)
  1910. g_iShowedSkin[id][i] = skinsNum;
  1911.  
  1912. g_iSkinToGift[id] = skinsNum;
  1913. g_iSkinToDestroy[id] = skinsNum;
  1914. g_iPrice[id] = 0;
  1915.  
  1916. PartySlots[id] = 0;
  1917. InParty[id] = 0;
  1918. PartyCreated[id] = false;
  1919.  
  1920. for(new i = 1; i <= 32; i++) PartyInvites[i][id] = false;
  1921.  
  1922. set_task(1.5, "taskSetRank", id);
  1923.  
  1924. LoadData(id);
  1925. LoadMarket(id);
  1926. }
  1927. /* Set user's rank on putinserver and on player kill*/
  1928. public taskSetRank(id)
  1929. {
  1930. new iStats[8], iBody[8];
  1931. new iRankPos = get_user_stats(id, iStats, iBody);
  1932.  
  1933. for(new i; i <= ranksNum; i++)
  1934. {
  1935. if(g_szRanks[i][valFirst] <= iRankPos <= g_szRanks[i][valSecond])
  1936. {
  1937. copy(g_szRank[id][0], 31, g_szRanks[i][RankName])
  1938. if(i!=0)
  1939. copy(g_szRank[id][1], 31, g_szRanks[i-1][RankName])
  1940.  
  1941. break;
  1942. }
  1943. }
  1944. }
  1945. /* Hook DeathMsg event */
  1946. public evDeathMsg()
  1947. {
  1948. refreshRanks();
  1949.  
  1950. new iChance;
  1951. new iKiller = read_data(1);
  1952. new iVictim = read_data(2);
  1953.  
  1954. if(!is_user_alive(iKiller) || iKiller == iVictim)
  1955. return;
  1956.  
  1957. iChance = random_num(1, 100);
  1958. if (iChance <= POINTS_CHANCE)
  1959. {
  1960. g_iPlayerData[iKiller][Points] += POINTS_FOR_KILL;
  1961. client_print(iKiller, print_center, "+%d Points", POINTS_FOR_KILL);
  1962. }
  1963. if(iChance <= DROP_CASE_CHANCE)
  1964. {
  1965. g_iPlayerData[iKiller][Case]++;
  1966. }
  1967.  
  1968. refreshRanks();
  1969. }
  1970. /* Refreshing every player rank */
  1971. stock refreshRanks()
  1972. {
  1973. new iPlayers[32], iNum;
  1974. get_players(iPlayers, iNum);
  1975. for(new i;i<iNum;i++)
  1976. {
  1977. new id = iPlayers[i];
  1978. new iStats[8], iBody[8];
  1979. new iRankPos = get_user_stats(id, iStats, iBody);
  1980.  
  1981. for(new i; i <= ranksNum; i++)
  1982. if(g_szRanks[i][valFirst] <= iRankPos <= g_szRanks[i][valSecond])
  1983. {
  1984. copy(g_szRank[id][0], 31, g_szRanks[i][RankName])
  1985. if(i!=0)
  1986. copy(g_szRank[id][1], 31, g_szRanks[i-1][RankName])
  1987.  
  1988. break;
  1989. }
  1990. }
  1991. }
  1992. /* When client disconnect */
  1993. public client_disconnect(id)
  1994. {
  1995. SaveData(id)
  1996. }
  1997. /* Ham_Item_Deploy */
  1998. public hamItemDeploy(ent)
  1999. {
  2000. static id;
  2001. id = fm_cs_get_weapon_ent_owner(ent);
  2002.  
  2003. if (!pev_valid(id)) {
  2004. return;
  2005. }
  2006.  
  2007. if (g_iShowedSkin[id][cs_get_weapon_id(ent)] < skinsNum)
  2008. {
  2009. set_pev(id, pev_viewmodel2, g_aSkins[ g_iShowedSkin[id][cs_get_weapon_id(ent)]][vModel]);
  2010.  
  2011. if(strlen(g_aSkins[ g_iShowedSkin[id][cs_get_weapon_id(ent)]][pModel]) > 3)
  2012. {
  2013. set_pev(id, pev_weaponmodel2, g_aSkins[ g_iShowedSkin[id][cs_get_weapon_id(ent)]][pModel]);
  2014. }
  2015. }
  2016. }
  2017. /** Principal Menu **/
  2018. public cmdSayMenu(id)
  2019. {
  2020. new menu, szText[128], szText2[128];
  2021.  
  2022. 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])
  2023. menu = menu_create(szText, "menuHandler");
  2024.  
  2025. menu_additem(menu, "Aplica \ySKIN");
  2026. menu_additem(menu, "Deschide \ycufere \w| Crafteaza \ychei^n");
  2027.  
  2028. menu_additem(menu, "Ofera un \ycadou");
  2029. menu_additem(menu, "Distruge un \yskin^n");
  2030.  
  2031. menu_additem(menu, "\wSkins \yMarket^n");
  2032.  
  2033. if(strlen(g_szRank[id][1]))
  2034. {
  2035. formatex(szText2, charsmax(szText2), "Rank actual: \y%s^n\wRank urmator: \y%s", g_szRank[id][0], g_szRank[id][1]);
  2036. }
  2037. else
  2038. {
  2039. formatex(szText2, charsmax(szText2), "Rank actual: \y%s \w( \dRank maxim \w)", g_szRank[id][0]);
  2040. }
  2041.  
  2042. formatex(szText, charsmax(szText), "Jocuri de \ynoroc\w^n^n%s", szText2);
  2043. menu_additem(menu, szText);
  2044.  
  2045. menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
  2046. menu_display(id, menu, 0);
  2047.  
  2048. return PLUGIN_HANDLED;
  2049. }
  2050. public menuHandler(id, menu, item)
  2051. {
  2052. if(item == MENU_EXIT)
  2053. {
  2054. menu_destroy(menu);
  2055. return PLUGIN_HANDLED;
  2056. }
  2057.  
  2058. switch(item)
  2059. {
  2060. case 0:
  2061. {
  2062. if (user_have_skins(id))
  2063. {
  2064. showSkins(id);
  2065. }
  2066. else
  2067. {
  2068. ColorChat(id, "!g%s!nNu ai !gskinuri !nin inventar!", szTag);
  2069. cmdSayMenu(id);
  2070. }
  2071. }
  2072.  
  2073. case 1: openCaseMenu(id);
  2074.  
  2075. case 2:
  2076. {
  2077. if (user_have_skins(id))
  2078. {
  2079. showGiftMenu(id);
  2080. }
  2081. else
  2082. {
  2083. ColorChat(id, "!g%s!nNu ai !gskinuri !nin inventar!", szTag);
  2084. cmdSayMenu(id);
  2085. }
  2086. }
  2087.  
  2088. case 3:
  2089. {
  2090. if (user_have_skins(id))
  2091. {
  2092. showDestroyMenu(id);
  2093. }
  2094. else
  2095. {
  2096. ColorChat(id, "!g%s!nNu ai !gskinuri !nin inventar!", szTag);
  2097. cmdSayMenu(id);
  2098. }
  2099. }
  2100.  
  2101. case 4: cmdShowMarket(id)
  2102.  
  2103. //case 5: cmdShowTradeMenu(id);
  2104.  
  2105. case 5: showGamesMenu(id)
  2106. }
  2107.  
  2108. menu_destroy(menu);
  2109. return PLUGIN_HANDLED;
  2110. }
  2111. /* Apply skin menu */
  2112. public showSkins(id)
  2113. {
  2114. new menu, szText[64], k=0;
  2115. menu = menu_create("\w[ \yCS:GO OUTSTANDING \w] \ySkinurile \wtale", "skinsMenuHandler");
  2116.  
  2117. for(new i; i < skinsNum; i++)
  2118. {
  2119. if(g_iPlayerSkins[id][i])
  2120. {
  2121. formatex(szText, charsmax(szText), "%s - \y%d \wBucati", g_aSkins[i][Name], g_iPlayerSkins[id][i]);
  2122. menu_additem(menu, szText);
  2123. g_iSkins[id][k++] = i;
  2124. }
  2125. }
  2126.  
  2127. menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
  2128. menu_display(id, menu, 0);
  2129. }
  2130. public skinsMenuHandler(id, menu, item)
  2131. {
  2132. if( item == MENU_EXIT )
  2133. {
  2134. menu_destroy(menu);
  2135. return PLUGIN_HANDLED;
  2136. }
  2137.  
  2138. new iSkinID = g_iSkins[id][item];
  2139.  
  2140. g_iShowedSkin [id][g_aSkins[iSkinID][Type]] = iSkinID;
  2141. ColorChat(id, "!g%s!nAi aplicat skinul !g%s!n.", szTag, g_aSkins[iSkinID][Name]);
  2142. client_cmd(id, "lastinv");
  2143. showSkins(id);
  2144.  
  2145. menu_destroy(menu);
  2146. return PLUGIN_HANDLED;
  2147. }
  2148. /* Open case menu */
  2149. public openCaseMenu(id)
  2150. {
  2151. new menu, szText[128];
  2152. 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])
  2153. menu = menu_create(szText, "openCaseMenuHandler");
  2154.  
  2155. if(!g_iPlayerData[id][Keys] || !g_iPlayerData[id][Case])
  2156. {
  2157. formatex(szText, charsmax(szText), "\dDeschide \ycufar^n");
  2158. }
  2159. else
  2160. {
  2161. formatex(szText, charsmax(szText), "Deschide \ycufar^n");
  2162. }
  2163. menu_additem(menu, szText);
  2164.  
  2165. if(g_iPlayerData[id][Fragments] < FRAGMENTS_TO_CRAFT)
  2166. {
  2167. formatex(szText, charsmax(szText), "\dCrafteaza o \ycheie \d( \y%d \d/ \y%d \d)", g_iPlayerData[id][Fragments], FRAGMENTS_TO_CRAFT);
  2168. }
  2169. else
  2170. {
  2171. formatex(szText, charsmax(szText), "Crafteaza o \ycheie \w( \y%d \w/ \y%d \w)", g_iPlayerData[id][Fragments], FRAGMENTS_TO_CRAFT);
  2172. }
  2173.  
  2174. menu_additem(menu, szText);
  2175.  
  2176. if(g_iPlayerData[id][Points] < KEY_COST)
  2177. {
  2178. formatex(szText, charsmax(szText), "\dCumpara o \ycheie \w- \y%d \dPuncte", KEY_COST);
  2179. }
  2180. else
  2181. {
  2182. formatex(szText, charsmax(szText), "Cumpara o \ycheie \w- \y%d \wPuncte", KEY_COST);
  2183. }
  2184. menu_additem(menu, szText);
  2185.  
  2186. menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
  2187. menu_display(id, menu, 0);
  2188. }
  2189. public openCaseMenuHandler(id, menu, item)
  2190. {
  2191. if( item == MENU_EXIT )
  2192. {
  2193. menu_destroy(menu);
  2194. return PLUGIN_HANDLED;
  2195. }
  2196.  
  2197. switch(item)
  2198. {
  2199. case 0:
  2200. {
  2201. if(!g_iPlayerData[id][Keys])
  2202. {
  2203. ColorChat(id, "!g%s!n Nu ai o !gcheie!n!", szTag);
  2204. return PLUGIN_HANDLED;
  2205. }
  2206. if(!g_iPlayerData[id][Case])
  2207. {
  2208. ColorChat(id, "!g%s!n Nu ai un !gcufar!n!", szTag);
  2209. return PLUGIN_HANDLED;
  2210. }
  2211.  
  2212. new iSkins[SKINS_MAX], iRand, iChance, k=0;
  2213.  
  2214. iChance = random_num(1, g_iMaxChance);
  2215. for(new i; i < skinsNum; i++)
  2216. {
  2217. if(iChance <= g_aSkins[i][Chance])
  2218. iSkins[k++] = i;
  2219. }
  2220.  
  2221. iRand = k == 0 ? iSkins[k] : iSkins[random(k)];
  2222.  
  2223. g_iPlayerSkins[id][iRand]++;
  2224. g_iPlayerData[id][Keys]--;
  2225. g_iPlayerData[id][Case]--;
  2226.  
  2227. ColorChat(id, "!g%s!nAi deschis un cufar si ai primit skinul !g%s!n.", szTag, g_aSkins[iRand][Name]);
  2228. SaveData(id);
  2229.  
  2230. openCaseMenu(id);
  2231. }
  2232. case 1:
  2233. {
  2234. if(g_iPlayerData[id][Fragments] < FRAGMENTS_TO_CRAFT)
  2235. {
  2236. ColorChat(id, "!g%s!n Insuficiente !gfragmente !npentru a crafta o !gcheie!n.", szTag);
  2237. return PLUGIN_HANDLED;
  2238. }
  2239. g_iPlayerData[id][Keys]++;
  2240. g_iPlayerData[id][Fragments] -= FRAGMENTS_TO_CRAFT;
  2241.  
  2242. ColorChat(id, "!g%s!n Ai transformat !g%d!n fragmente intr-o !gcheie!n.", szTag, FRAGMENTS_TO_CRAFT);
  2243.  
  2244. openCaseMenu(id);
  2245. }
  2246. case 2:
  2247. {
  2248. if(g_iPlayerData[id][Points] < KEY_COST)
  2249. {
  2250. ColorChat(id, "!g%s!n Insuficiente !gpuncte !npentru a cumpara o !gcheie!n.", szTag);
  2251. return PLUGIN_HANDLED;
  2252. }
  2253. g_iPlayerData[id][Keys]++;
  2254. g_iPlayerData[id][Points] -= KEY_COST;
  2255. ColorChat(id, "!g%s!n Ai achizitionat o !gcheie!n.", szTag);
  2256. SaveData(id);
  2257.  
  2258. openCaseMenu(id);
  2259. }
  2260. }
  2261. menu_destroy(menu);
  2262. return PLUGIN_HANDLED;
  2263. }
  2264. /* Gift menu */
  2265. public showGiftMenu(id)
  2266. {
  2267. new menu, szText[128], szName[32];
  2268. menu = menu_create("\w[ \yCS:GO OUTSTANDING\w] \yGift \wMenu", "giftMenuHandler");
  2269.  
  2270. if(g_iReceiver[id])
  2271. {
  2272. get_user_name(g_iReceiver[id], szName, charsmax(szName));
  2273. formatex(szText, charsmax(szText), "Jucator: \y%s", szName);
  2274. }
  2275. else formatex(szText, charsmax(szText), "Alege \yjucator\w:");
  2276. menu_additem(menu, szText);
  2277.  
  2278. if(g_iSkinToGift[id] == skinsNum)
  2279. formatex(szText, charsmax(szText), "Alege \ySkin^n");
  2280. else formatex(szText, charsmax(szText), "Skin spre oferire: \y%s^n", g_aSkins[g_iSkinToGift[id]][Name]);
  2281. menu_additem(menu, szText);
  2282. menu_additem(menu, "\rTrimite");
  2283.  
  2284. menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
  2285. menu_display(id, menu, 0);
  2286. }
  2287. public giftMenuHandler(id, menu, item)
  2288. {
  2289. if( item == MENU_EXIT )
  2290. {
  2291. menu_destroy(menu);
  2292. return PLUGIN_HANDLED;
  2293. }
  2294.  
  2295. switch(item)
  2296. {
  2297. case 0:
  2298. {
  2299. new iPlayers[32], iNum, idReceiver;
  2300. get_players(iPlayers, iNum);
  2301.  
  2302. idReceiver = iPlayers[g_iIterator[id]]
  2303. g_iReceiver[id] = idReceiver;
  2304. g_iIterator[id]++;
  2305.  
  2306. if(g_iIterator[id] == iNum)
  2307. g_iIterator[id] = 0;
  2308.  
  2309. showGiftMenu(id);
  2310. }
  2311. case 1:
  2312. {
  2313. showSkinsForGift(id);
  2314. }
  2315. case 2:
  2316. {
  2317. if(g_iSkinToGift[id] == skinsNum)
  2318. {
  2319. ColorChat(id, "!g%s!n Alege un !gskin!n!",szTag);
  2320. showGiftMenu(id)
  2321. return PLUGIN_HANDLED;
  2322. }
  2323. if(g_iReceiver[id] == id)
  2324. {
  2325. ColorChat(id, "!g%s!n Nu iti da !gskinuri !ntie!",szTag);
  2326. showGiftMenu(id)
  2327. return PLUGIN_HANDLED;
  2328. }
  2329. new szName[32];
  2330. get_user_name(id, szName, charsmax(szName));
  2331.  
  2332. g_iPlayerSkins[id][g_iSkinToGift[id]]--;
  2333. g_iPlayerSkins[g_iReceiver[id]][g_iSkinToGift[id]]++;
  2334.  
  2335. ColorChat(g_iReceiver[id], "!g%s!nAi primit !g%s !n de la !g%s!n.", szTag, g_aSkins[g_iSkinToGift[id]][Name], szName);
  2336. g_iSkinToGift[id] = skinsNum;
  2337.  
  2338. SaveData(id);
  2339. SaveData(g_iReceiver[id]);
  2340. }
  2341. }
  2342. menu_destroy(menu);
  2343. return PLUGIN_HANDLED;
  2344. }
  2345. /* Skins List for gift */
  2346. public showSkinsForGift(id)
  2347. {
  2348. new menu, szText[64], k=0;
  2349. menu = menu_create("\w[ \yCS:GO OUTSTANDING \w] Alege skinul pe care vrei sa il daruiesti", "skinsForGiftMenuHandler");
  2350.  
  2351. for(new i; i < skinsNum; i++)
  2352. if(g_iPlayerSkins[id][i])
  2353. {
  2354. formatex(szText, charsmax(szText), "%s - \y%d \wBucati", g_aSkins[i][Name], g_iPlayerSkins[id][i]);
  2355. menu_additem(menu, szText);
  2356. g_iSkins[id][k++] = i;
  2357. }
  2358.  
  2359. menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
  2360. menu_display(id, menu, 0);
  2361. }
  2362. public skinsForGiftMenuHandler(id, menu, item)
  2363. {
  2364. if( item == MENU_EXIT )
  2365. {
  2366. menu_destroy(menu);
  2367. return PLUGIN_HANDLED;
  2368. }
  2369.  
  2370. g_iSkinToGift[id] = g_iSkins[id][item];
  2371. showGiftMenu(id);
  2372.  
  2373. menu_destroy(menu);
  2374. return PLUGIN_HANDLED;
  2375. }
  2376. /* Destroy skin menu */
  2377. public showDestroyMenu(id)
  2378. {
  2379. new menu, szText[128];
  2380. menu = menu_create("\w[ \yCS:GO OUTSTANDING \w] \wDestroy \ySkin \wMenu", "destroyMenuHandler");
  2381.  
  2382. if(g_iSkinToDestroy[id] == skinsNum)
  2383. formatex(szText, charsmax(szText), "Alege \ySkin^n");
  2384. else formatex(szText, charsmax(szText), "Skin pentru distrugere: \y%s^n", g_aSkins[g_iSkinToDestroy[id]][Name]);
  2385. menu_additem(menu, szText);
  2386. menu_additem(menu, "\rDistruge");
  2387.  
  2388. menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
  2389. menu_display(id, menu, 0);
  2390. }
  2391. public destroyMenuHandler(id, menu, item)
  2392. {
  2393. if( item == MENU_EXIT )
  2394. {
  2395. menu_destroy(menu);
  2396. return PLUGIN_HANDLED;
  2397. }
  2398.  
  2399. switch(item)
  2400. {
  2401. case 0:
  2402. {
  2403. showSkinsForDestroy(id);
  2404. }
  2405. case 1:
  2406. {
  2407. if(g_iSkinToDestroy[id] == skinsNum)
  2408. {
  2409. ColorChat(id, "!g%s!n Alege un !gskin!n!",szTag);
  2410. showDestroyMenu(id)
  2411. return PLUGIN_HANDLED;
  2412. }
  2413.  
  2414. g_iPlayerSkins[id][g_iSkinToDestroy[id]]--;
  2415. g_iPlayerData[id][Fragments]++;
  2416. 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]);
  2417.  
  2418. g_iSkinToDestroy[id] = skinsNum;
  2419. SaveData(id);
  2420.  
  2421. showDestroyMenu(id);
  2422. }
  2423. }
  2424. menu_destroy(menu);
  2425. return PLUGIN_HANDLED;
  2426. }
  2427. /* Skins List to destroy */
  2428. public showSkinsForDestroy(id)
  2429. {
  2430. new menu, szText[64], k=0;
  2431. menu = menu_create("\w[ \yCS:GO OUTSTANDING \w] Alege skinul pe care vrei sa il distrugi", "skinsForDestroyMenuHandler");
  2432.  
  2433. for(new i; i < skinsNum; i++)
  2434. if(g_iPlayerSkins[id][i])
  2435. {
  2436. formatex(szText, charsmax(szText), "%s - \y%d \wBucati", g_aSkins[i][Name], g_iPlayerSkins[id][i]);
  2437. menu_additem(menu, szText);
  2438. g_iSkins[id][k++] = i;
  2439. }
  2440.  
  2441. menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
  2442. menu_display(id, menu, 0);
  2443. }
  2444. public skinsForDestroyMenuHandler(id, menu, item)
  2445. {
  2446. if( item == MENU_EXIT )
  2447. {
  2448. menu_destroy(menu);
  2449. return PLUGIN_HANDLED;
  2450. }
  2451.  
  2452. g_iSkinToDestroy[id] = g_iSkins[id][item];
  2453. showDestroyMenu(id);
  2454.  
  2455. menu_destroy(menu);
  2456. return PLUGIN_HANDLED;
  2457. }
  2458. /* Market menu */
  2459. public cmdShowMarket(id)
  2460. {
  2461. new menu;
  2462.  
  2463. menu = menu_create("\w[ \yCSGO OUTSTANDING \w] Market Shop", "marketMenuHandler");
  2464.  
  2465. menu_additem(menu, "\wCumpara \yskin^n");
  2466.  
  2467. menu_additem(menu, "Adauga \yskin \win market");
  2468. menu_additem(menu, "Retrage \yskin \wdin market");
  2469.  
  2470. menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
  2471. menu_display(id, menu, 0);
  2472. }
  2473. public marketMenuHandler(id, menu, item)
  2474. {
  2475. if( item == MENU_EXIT )
  2476. {
  2477. menu_destroy(menu);
  2478. return PLUGIN_HANDLED;
  2479. }
  2480.  
  2481. switch(item)
  2482. {
  2483. case 0: showSkinsInMarketMenu(id);
  2484. case 1: showSkinsToSellMenu(id);
  2485. case 2: showRemoveSkinMenu(id);
  2486. }
  2487.  
  2488. menu_destroy(menu);
  2489. return PLUGIN_HANDLED;
  2490. }
  2491. /* Skins in market */
  2492. public showSkinsInMarketMenu(id)
  2493. {
  2494. new menu, szText[256], szName[32], k=0;
  2495.  
  2496. new iPlayers[32], iNum, idV;
  2497. get_players(iPlayers, iNum);
  2498.  
  2499. menu = menu_create("\w[ \yCSGO OUTSTANDING \w] Skinuri in market", "skinsInMarketMenuHandler");
  2500.  
  2501. for(new i; i < iNum; i++)
  2502. {
  2503. idV = iPlayers[i];
  2504. for(new j; j < skinsNum; j++)
  2505. {
  2506. if(g_iSkinsInMarket[idV][j])
  2507. {
  2508. get_user_name(idV, szName, charsmax(szName));
  2509.  
  2510. formatex(szText, charsmax(szText), "\y%s \w[ \y%d \wpoints \w] [ Vanzator: \y%s \w]", g_aSkins[j][Name], g_iSkinsInMarket[idV][j], szName);
  2511. menu_additem(menu, szText);
  2512. g_iSkins[id][k] = j;
  2513. iSeller[id][k++] = idV;
  2514. }
  2515. }
  2516. }
  2517.  
  2518. menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
  2519. menu_display(id, menu, 0);
  2520. }
  2521. public skinsInMarketMenuHandler(id, menu, item)
  2522. {
  2523. if( item == MENU_EXIT )
  2524. {
  2525. menu_destroy(menu);
  2526. return PLUGIN_HANDLED;
  2527. }
  2528. new szSellerName[32], szName[32];
  2529.  
  2530. new iSkinID = g_iSkins[id][item]
  2531. new iSellerID = iSeller[id][item];
  2532.  
  2533. if(g_iPlayerData[id][Points] < g_iSkinsInMarket[iSellerID][iSkinID])
  2534. {
  2535. ColorChat(id, "!g%s!nPuncte insuficiente pentru a cumpara skinul!", szTag);
  2536. return PLUGIN_HANDLED;
  2537. }
  2538.  
  2539. get_user_name(id, szName, charsmax(szName));
  2540. get_user_name(iSellerID, szSellerName, charsmax(szSellerName));
  2541.  
  2542. g_iPlayerData[id][Points] -= g_iSkinsInMarket[iSellerID][iSkinID];
  2543. g_iPlayerData[iSellerID][Points] += g_iSkinsInMarket[iSellerID][iSkinID];
  2544.  
  2545. g_iPlayerSkins[id][iSkinID]++;
  2546.  
  2547. 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);
  2548. 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);
  2549.  
  2550. g_iSkinsInMarket[iSellerID][iSkinID] = 0;
  2551.  
  2552. SaveData(id);
  2553. SaveMarket(id);
  2554.  
  2555. menu_destroy(menu);
  2556. return PLUGIN_HANDLED;
  2557. }
  2558. /* Skins to sell */
  2559. public showSkinsToSellMenu(id)
  2560. {
  2561. new menu, szText[128], k=0;
  2562.  
  2563. menu = menu_create("\w[ \yCSGO OUTSTANDING \w] Alege skinul", "skinsToSellMenuHandler");
  2564.  
  2565. if(!g_iPrice[id])
  2566. formatex(szText, charsmax(szText), "Alege \ypretul^n");
  2567. else
  2568. formatex(szText, charsmax(szText), "\yPret\r: \w%d^n", g_iPrice[id]);
  2569. menu_additem(menu, szText);
  2570. for(new i; i < skinsNum; i++)
  2571. {
  2572. if(g_iPlayerSkins[id][i])
  2573. {
  2574. formatex(szText, charsmax(szText), "\y%s \w- \r*\y%d \wBucati", g_aSkins[i][Name], g_iPlayerSkins[id][i]);
  2575. menu_additem(menu, szText);
  2576.  
  2577. g_iSkins[id][k++] = i;
  2578. }
  2579. }
  2580.  
  2581. menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
  2582. menu_display(id, menu, 0);
  2583. }
  2584. public skinsToSellMenuHandler(id, menu, item)
  2585. {
  2586. if( item == MENU_EXIT )
  2587. {
  2588. menu_destroy(menu);
  2589. return PLUGIN_HANDLED;
  2590. }
  2591. new iSkinID, szName[32];
  2592. get_user_name(id, szName, charsmax(szName));
  2593. if(item == 0)
  2594. {
  2595. client_cmd(id, "messagemode Insert_price");
  2596. menu_destroy(menu);
  2597. return PLUGIN_HANDLED;
  2598. }
  2599. if(!g_iPrice[id])
  2600. {
  2601. ColorChat(id, "!g%s!nNu ai ales inca pretul!", szTag);
  2602. showSkinsToSellMenu(id)
  2603. return PLUGIN_HANDLED
  2604. }
  2605. iSkinID = g_iSkins[id][item-1];
  2606.  
  2607. if(g_iSkinsInMarket[id][iSkinID])
  2608. {
  2609. ColorChat(id, "!g%s!nAi pus deja acest !gskin in !gmarket!n!", szTag);
  2610. showSkinsToSellMenu(id);
  2611. return PLUGIN_HANDLED;
  2612. }
  2613.  
  2614. g_iPlayerSkins[id][iSkinID]--;
  2615. g_iSkinsInMarket[id][iSkinID] = g_iPrice[id];
  2616.  
  2617. ColorChat(id, "!g%s!nAi adaugat skinul !g%s !nin market cu !g%d !npuncte.", szTag, g_aSkins[iSkinID][Name], g_iPrice[id]);
  2618. 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]);
  2619. g_iPrice[id] = 0;
  2620.  
  2621. SaveData(id)
  2622. SaveMarket(id);
  2623.  
  2624. showSkinsToSellMenu(id);
  2625.  
  2626. menu_destroy(menu);
  2627. return PLUGIN_HANDLED;
  2628. }
  2629. public cmdInsertPrice(id)
  2630. {
  2631. new szPrice[8];
  2632. read_args(szPrice, charsmax(szPrice));
  2633. remove_quotes(szPrice);
  2634.  
  2635. new iPrice = str_to_num(szPrice);
  2636. if(!iPrice || iPrice < 0)
  2637. {
  2638. ColorChat(id, "!g%s!nInvalid number, try again!", szTag);
  2639. client_cmd(id, "messagemode Insert_price");
  2640. }
  2641.  
  2642. g_iPrice[id] = iPrice;
  2643. showSkinsToSellMenu(id);
  2644. }
  2645. /* Remove skin from market */
  2646. public showRemoveSkinMenu(id)
  2647. {
  2648. new menu, szText[128], k=0;
  2649.  
  2650. menu = menu_create("\w[ \yCSGO OUTSTANDING \w] Alege skinul pe care doresti sa il retragi", "skinsToRemoveMenuHandler");
  2651. for(new i; i < skinsNum; i++)
  2652. {
  2653. if(g_iSkinsInMarket[id][i])
  2654. {
  2655. formatex(szText, charsmax(szText), "\y%s", g_aSkins[i][Name]);
  2656. menu_additem(menu, szText);
  2657.  
  2658. g_iSkins[id][k++] = i;
  2659. }
  2660. }
  2661.  
  2662. menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
  2663. menu_display(id, menu, 0);
  2664. }
  2665. public skinsToRemoveMenuHandler(id, menu, item)
  2666. {
  2667. if(item == MENU_EXIT)
  2668. {
  2669. cmdShowMarket(id);
  2670. return PLUGIN_HANDLED;
  2671. }
  2672.  
  2673. new szName[32], iSkinID;
  2674.  
  2675. get_user_name(id, szName, charsmax(szName));
  2676. iSkinID = g_iSkins[id][item];
  2677.  
  2678. g_iSkinsInMarket[id][iSkinID] = 0;
  2679. g_iPlayerSkins[id][iSkinID]++;
  2680.  
  2681. ColorChat(0, "!g%s!nJucatorul !g%s !na retras skinul !g%s !ndin market.", szTag, szName, g_aSkins[iSkinID][Name]);
  2682.  
  2683. cmdShowMarket(id);
  2684. return PLUGIN_HANDLED;
  2685. }
  2686. /* Games Menu */
  2687. public showGamesMenu(id)
  2688. {
  2689. new menu, szText[64];
  2690. menu = menu_create("\w[ \yCS:GO OUTSTANDING \w] Meniu de \yjocuri", "gamesMenuHandler");
  2691.  
  2692. formatex(szText, charsmax(szText), "Tombola | \y%d \wPuncte", RAFFLE_COST)
  2693. menu_additem(menu, szText);
  2694.  
  2695. menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
  2696. menu_display(id, menu, 0);
  2697. }
  2698. public gamesMenuHandler(id, menu, item)
  2699. {
  2700. if( item == MENU_EXIT )
  2701. {
  2702. menu_destroy(menu);
  2703. return PLUGIN_HANDLED;
  2704. }
  2705.  
  2706. switch(item)
  2707. {
  2708. case 0:
  2709. {
  2710. if(g_iPlayerData[id][Points] < RAFFLE_COST)
  2711. {
  2712. ColorChat(id, "!g%s!nInsuficiente !gpuncte !npentru a juca la tombola", szTag);
  2713. return PLUGIN_HANDLED;
  2714. }
  2715. new szName[32];
  2716. get_user_name(id, szName, charsmax(szName));
  2717.  
  2718. for(new i; i < raffleMembers; i++)
  2719. {
  2720. if(g_iRafflePlayers[i] == id)
  2721. {
  2722. ColorChat(id, "!g%s!nTe-ai inscris deja in tombola runda asta!", szTag);
  2723. return PLUGIN_HANDLED;
  2724. }
  2725. }
  2726.  
  2727. g_iRafflePlayers[raffleMembers++] = id;
  2728. g_iPlayerData[id][Points] -= RAFFLE_COST
  2729. ColorChat(0, "!g%s!nJucatorul !g%s !ns-a inscris in !gtombola!n.Jucatori inscrisi: !g%d!n.", szTag, szName, raffleMembers);
  2730. }
  2731. }
  2732.  
  2733. menu_destroy(menu);
  2734. return PLUGIN_HANDLED;
  2735. }
  2736. /* Round end event */
  2737. public evRoundEnd()
  2738. {
  2739. if(raffleMembers)
  2740. {
  2741. new iRand, szName[32];
  2742.  
  2743. iRand = random(raffleMembers);
  2744. get_user_name(g_iRafflePlayers[iRand], szName, charsmax(szName));
  2745.  
  2746. g_iPlayerData[g_iRafflePlayers[iRand]][Points] += RAFFLE_COST*raffleMembers;
  2747.  
  2748. ColorChat(0, "!g%s!nTombola pe runda aceasta s-a incheiat !", szTag);
  2749. ColorChat(0, "!g%s!nJucatorul !g%s !na avut bulan si a castigat !g%d!n puncte !", szTag, szName, RAFFLE_COST*raffleMembers);
  2750. ColorChat(0, "!g%s!nNu fiti suparati, vorba aia, prost sa fii noroc sa ai !", szTag);
  2751.  
  2752. raffleMembers = 0;
  2753. }
  2754. else
  2755. {
  2756. ColorChat(0, "!g%s!nNiciun jucator !ginscris !nin aceasta runda !", szTag);
  2757. ColorChat(0, "!g%s!nAsteptam extragerea din runda urmatoare !", szTag);
  2758. }
  2759. }
  2760. /* Giving keys when win a round */
  2761. public terroristsWin()
  2762. {
  2763. new iPlayers[32], iNum, id, iRand;
  2764. get_players(iPlayers, iNum, "ae", "TERRORISTS");
  2765.  
  2766. for(new i; i < iNum; i++)
  2767. {
  2768. id = iPlayers[i];
  2769. iRand = random_num(1, 100);
  2770.  
  2771. if(iRand <= DROP_FRAGMENTS_CHANCE)
  2772. {
  2773. g_iPlayerData[id][Fragments]++;
  2774. ColorChat(id, "!g%s!nFelicitari, ai primit un !gfragment !nde cheie !", szTag);
  2775.  
  2776. SaveData(id);
  2777. }
  2778. }
  2779. }
  2780. public ctsWin()
  2781. {
  2782. new iPlayers[32], iNum, id, iRand;
  2783. get_players(iPlayers, iNum, "ae", "CT");
  2784.  
  2785. for(new i; i < iNum; i++)
  2786. {
  2787. id = iPlayers[i];
  2788. iRand = random_num(1, 100);
  2789.  
  2790. if(iRand <= DROP_FRAGMENTS_CHANCE)
  2791. {
  2792. g_iPlayerData[id][Fragments]++;
  2793. ColorChat(id, "!g%s!nFelicitari, ai primit un !gfragment !nde cheie !", szTag);
  2794.  
  2795. SaveData(id);
  2796. }
  2797. }
  2798. }
  2799. public hamAddWeaponToPlayer(ent, id)
  2800. {
  2801. if(!is_valid_ent(ent) || !is_user_connected(id))
  2802. return HAM_IGNORED;
  2803.  
  2804. for (new i; i < skinsNum; i++) {
  2805. if(entity_get_int(ent, EV_INT_WEAPONKEY) == 500+i)
  2806. {
  2807. entity_set_int(ent, EV_INT_WEAPONKEY, 0);
  2808. g_iShowedSkin[id][g_aSkins[i][Type]] = i;
  2809.  
  2810. return HAM_HANDLED;
  2811. }
  2812. }
  2813. return HAM_IGNORED;
  2814. }
  2815. public fwSetModel(entity, model[])
  2816. {
  2817. if(!is_valid_ent(entity))
  2818. return FMRES_IGNORED;
  2819.  
  2820. static szClassName[33];
  2821. entity_get_string(entity, EV_SZ_classname, szClassName, charsmax(szClassName));
  2822.  
  2823. if(!equal(szClassName, "weaponbox"))
  2824. return FMRES_IGNORED;
  2825.  
  2826. static iOwner;
  2827.  
  2828. new szModels[][][] = {
  2829. {"models/w_ak47.mdl", "weapon_ak47" },
  2830. {"models/w_m4a1.mdl", "weapon_m4a1" },
  2831. {"models/w_awp.mdl", "weapon_awp" }
  2832. }
  2833.  
  2834. new iWeapons[] = {
  2835. CSW_AK47,
  2836. CSW_M4A1,
  2837. CSW_AWP
  2838. }
  2839.  
  2840. iOwner = entity_get_edict(entity, EV_ENT_owner);
  2841.  
  2842. for(new i; i < sizeof(szModels); i++)
  2843. if(equal(model, szModels[i][0]))
  2844. {
  2845.  
  2846. static iStoredAugID;
  2847. iStoredAugID = find_ent_by_owner(ENG_NULLENT, szModels[i][1], entity);
  2848.  
  2849. if(!is_valid_ent(iStoredAugID))
  2850. return FMRES_IGNORED;
  2851.  
  2852. entity_set_int(iStoredAugID, EV_INT_WEAPONKEY, 500+g_iShowedSkin[iOwner][iWeapons[i]]);
  2853. entity_set_model(entity, szModels[i][0]);
  2854.  
  2855. return FMRES_SUPERCEDE;
  2856. }
  2857. return FMRES_IGNORED;
  2858. }
  2859. /* Save & Load Data */
  2860. public SaveData(id)
  2861. {
  2862. new iVault = nvault_open("CSGOData2");
  2863.  
  2864. new szName[32], szData[256];
  2865. get_user_name(id, szName, charsmax(szName));
  2866.  
  2867. formatex(szData, charsmax(szData), "%i#%i#%i#%i", g_iPlayerData[id][Points], g_iPlayerData[id][Case], g_iPlayerData[id][Keys], g_iPlayerData[id][Fragments]);
  2868.  
  2869. for(new i; i < skinsNum; i++)
  2870. format(szData, charsmax(szData), "%s#%i", szData, g_iPlayerSkins[id][i]);
  2871.  
  2872. nvault_set(iVault, szName, szData);
  2873.  
  2874. nvault_close(iVault);
  2875. }
  2876. public LoadData(id)
  2877. {
  2878. new iVault = nvault_open("CSGOData2");
  2879.  
  2880. if(iVault == INVALID_HANDLE) {
  2881. log_amx("ERROR: Unable to open vault file %s", "CSGOData2");
  2882. return PLUGIN_HANDLED;
  2883. }
  2884.  
  2885.  
  2886. new szName[32], szData[256], szArg[SKINS_MAX][9], iArg[SKINS_MAX], iTimestamp;
  2887. get_user_name(id, szName, charsmax(szName));
  2888.  
  2889. if(nvault_lookup(iVault, szName, szData, charsmax(szData), iTimestamp))
  2890. {
  2891. /* +4 because we must load points keys case and fragments */
  2892. for(new i; i < skinsNum + 4; i ++)
  2893. {
  2894. strtok(szData, szArg[i], charsmax(szArg[]), szData, charsmax(szData), '#');
  2895. iArg[i] = str_to_num(szArg[i]);
  2896. }
  2897.  
  2898. g_iPlayerData[id][Points] = iArg[0];
  2899. g_iPlayerData[id][Case] = iArg[1];
  2900. g_iPlayerData[id][Keys] = iArg[2];
  2901. g_iPlayerData[id][Fragments] = iArg[3];
  2902.  
  2903. for(new i; i < skinsNum; i++)
  2904. g_iPlayerSkins[id][i] = iArg[i+4]; /* +4 because we loaded points keys case and fragments */
  2905. }
  2906. else
  2907. {
  2908. g_iPlayerData[id][Points] = 15;
  2909. g_iPlayerData[id][Case] = 1;
  2910. g_iPlayerData[id][Keys] = 1;
  2911. g_iPlayerData[id][Fragments] = 0;
  2912.  
  2913. for(new i; i < skinsNum; i++)
  2914. g_iPlayerSkins[id][i] = 0;
  2915. }
  2916. nvault_close(iVault);
  2917. return PLUGIN_CONTINUE;
  2918. }
  2919. /* Save & Load Market */
  2920. public SaveMarket(id)
  2921. {
  2922. new iVault = nvault_open("CSGOMarket");
  2923.  
  2924. new szName[32], szData[256];
  2925. get_user_name(id, szName, charsmax(szName));
  2926.  
  2927. for(new i; i < skinsNum; i++)
  2928. format(szData, charsmax(szData), "%s#%i", szData, g_iSkinsInMarket[id][i]);
  2929.  
  2930. nvault_set(iVault, szName, szData);
  2931.  
  2932. nvault_close(iVault);
  2933. }
  2934. public LoadMarket(id)
  2935. {
  2936. new iVault = nvault_open("CSGOMarket");
  2937.  
  2938. new szName[32], szData[256], szArg[SKINS_MAX][9], iArg[SKINS_MAX];
  2939. get_user_name(id, szName, charsmax(szName));
  2940.  
  2941. nvault_get(iVault, szName, szData, charsmax(szData));
  2942.  
  2943. for(new i; i < skinsNum; i ++)
  2944. {
  2945. strtok(szData, szArg[i], charsmax(szArg[]), szData, charsmax(szData), '#');
  2946. iArg[i] = str_to_num(szArg[i]);
  2947. }
  2948. for(new i; i < skinsNum; i++)
  2949. g_iSkinsInMarket[id][i] = iArg[i];
  2950. nvault_close(iVault);
  2951. }
  2952. /* ColorChat */
  2953. stock ColorChat(const id,const input[], any:...) {
  2954. new iNum = 1, iPlayers[32];
  2955. static szMessage[191];
  2956. vformat(szMessage, charsmax(szMessage),input, 3);
  2957.  
  2958. replace_all(szMessage, charsmax(szMessage), "!g", "^4");
  2959. replace_all(szMessage, charsmax(szMessage), "!n", "^1");
  2960. replace_all(szMessage, charsmax(szMessage), "!t", "^3");
  2961.  
  2962. if(id) iPlayers[0] = id;
  2963. else get_players(iPlayers, iNum, "ch");
  2964.  
  2965. for(new i = 0; i < iNum; i++)
  2966. {
  2967. if(is_user_connected(iPlayers[i]))
  2968. {
  2969. message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, iPlayers[i]);
  2970. write_byte(iPlayers[i]);
  2971. write_string(szMessage);
  2972. message_end();
  2973. }
  2974. }
  2975. }
  2976. // Get Weapon Entity's Owner
  2977. stock fm_cs_get_weapon_ent_owner(ent)
  2978. {
  2979. // Prevent server crash if entity's private data not initalized
  2980. if (pev_valid(ent) != 2) return -1;
  2981.  
  2982. return get_pdata_cbase(ent, 41, 4);
  2983. }
  2984. stock user_have_skins(id) {
  2985. new ok = 0;
  2986. for (new i; i < skinsNum; i++) {
  2987. if (g_iPlayerSkins[id][i] > 0) {
  2988. ok = 1;
  2989. }
  2990. }
  2991. return ok;
  2992. }
  2993.  
  2994. public PartyMenu(id)
  2995. {
  2996. new szText[128];
  2997.  
  2998. formatex(szText, sizeof(szText), "\r%L %L", LANG_PLAYER, "KMAIN", LANG_PLAYER, "YPOINT", Points[id]);
  2999.  
  3000. new menu = menu_create(szText, "PartyMenuHandler");
  3001.  
  3002. formatex(szText, charsmax(szText), "Buy 1 place - \r%d \wpoints \d%d/%d", SLOT_COST, PartySlots[id], MAX_PARTY_SLOTS);
  3003. menu_additem(menu, szText, "0");
  3004.  
  3005. if(PartyCreated[id])
  3006. {
  3007. formatex(szText, charsmax(szText), "Send an invitation \y[\r%d\y]", GetInvitableMembers());
  3008. menu_additem(menu, szText, "3");
  3009.  
  3010. formatex(szText, charsmax(szText), "Throw away \y[\r%d\y]", GetPartyMembers(id));
  3011. menu_additem(menu, szText, "4");
  3012.  
  3013. formatex(szText, charsmax(szText), "\rDelete group");
  3014. menu_additem(menu, szText, "5");
  3015. }
  3016. else if(InParty[id])
  3017. {
  3018. formatex(szText, charsmax(szText), "\rLeave the group");
  3019. menu_additem(menu, szText, "6");
  3020. }
  3021. else
  3022. {
  3023. formatex(szText, charsmax(szText), "%sCreate a group", PartySlots[id] ? "\w":"\d");
  3024. menu_additem(menu, szText, "1");
  3025.  
  3026. formatex(szText, charsmax(szText), "Invitations \y[\r%d\y]", GetPartyInvitations(id));
  3027. menu_additem(menu, szText, "2");
  3028. }
  3029.  
  3030. menu_display(id, menu, 0);
  3031. }
  3032.  
  3033. public PartyMenuHandler(id, menu, item)
  3034. {
  3035. if(item == MENU_EXIT)
  3036. {
  3037. menu_destroy(menu);
  3038. return PLUGIN_CONTINUE;
  3039. }
  3040.  
  3041. new data[9], name[64], Key;
  3042. new access, callback;
  3043. menu_item_getinfo(menu, item, access, data, charsmax(data), name, charsmax(name), callback);
  3044.  
  3045. Key = str_to_num(data);
  3046.  
  3047. switch(Key)
  3048. {
  3049. case 0:
  3050. {
  3051. if(Points[id] >= SLOT_COST)
  3052. {
  3053. if(PartySlots[id] < MAX_PARTY_SLOTS)
  3054. {
  3055. Points[id] -= SLOT_COST;
  3056. PartySlots[id]++;
  3057. SaveData(id);
  3058. }
  3059. else client_print_color(id, print_team_default, "[^4CS-GO Public^1] ^4You already have the maximum number of places!");
  3060. }
  3061. else client_print_color(id, print_team_default, "[^4CS-GO Public^1] ^3Not enough points!");
  3062. }
  3063. case 1:
  3064. {
  3065. if(PartySlots[id])
  3066. {
  3067. PartyCreated[id] = true;
  3068. InParty[id] = id;
  3069.  
  3070. new name[34];
  3071. get_user_name(id, name, 33);
  3072. client_print_color(0, print_team_default, "[^4CS-GO Public^1] ^3%s ^4Created a group!", name);
  3073. }
  3074. else client_print_color(id, print_team_default, "[^4CS-GO Public^1] ^4You do not have a group of places to create it!");
  3075. }
  3076. case 2:
  3077. {
  3078. PartyInvitations(id);
  3079. return PLUGIN_HANDLED;
  3080. }
  3081. case 3:
  3082. {
  3083. PartyInvitePeople(id);
  3084. return PLUGIN_HANDLED;
  3085. }
  3086. case 4:
  3087. {
  3088. PartyDeletePeople(id);
  3089. return PLUGIN_HANDLED;
  3090. }
  3091. case 5:
  3092. {
  3093. PartyCreated[id] = false;
  3094. InParty[id] = 0;
  3095.  
  3096. for(new i = 1; i <= 32; i++)
  3097. {
  3098. if(InParty[i] == id && i != id)
  3099. {
  3100. client_print_color(i, print_team_default, "[^4CS-GO Public^1] ^4Deleted!");
  3101. InParty[i] = 0;
  3102. }
  3103. }
  3104. client_print_color(id, print_team_default, "[^4CS-GO Public^1] ^4You deleted the group!");
  3105. }
  3106. case 6:
  3107. {
  3108. new name[34];
  3109. get_user_name(id, name, 33);
  3110.  
  3111. for(new i = 1; i <= 32; i++)
  3112. {
  3113. if(InParty[i] == InParty[id] && i != id)
  3114. {
  3115. client_print_color(i, print_team_default, "[^4CS-GO Public^1] ^3%s ^4Left the group!", name);
  3116. }
  3117. }
  3118. InParty[id] = 0;
  3119. client_print_color(id, print_team_default, "[^4CS-GO Public^1] ^4Left the group!");
  3120. }
  3121. }
  3122. PartyMenu(id);
  3123. return PLUGIN_HANDLED;
  3124. }
  3125.  
  3126. stock GetPartyMembers(id)
  3127. {
  3128. new Num = 0;
  3129.  
  3130. for(new i = 1; i <= 32; i++)
  3131. {
  3132. if(InParty[i] == InParty[id] && i != id)
  3133. {
  3134. Num++;
  3135. }
  3136. }
  3137. return Num;
  3138. }
  3139.  
  3140. stock GetInvitableMembers()
  3141. {
  3142. new Num = 0;
  3143.  
  3144. for(new i = 1; i <= 32; i++)
  3145. {
  3146. if(!InParty[i])
  3147. {
  3148. Num++;
  3149. }
  3150. }
  3151. return Num;
  3152. }
  3153.  
  3154. stock GetPartyInvitations(id)
  3155. {
  3156. new Num = 0;
  3157.  
  3158. for(new i = 1; i <= 32; i++)
  3159. {
  3160. if(i != id && PartyCreated[i] && PartyInvites[i][id])
  3161. {
  3162. Num++;
  3163. }
  3164. }
  3165. return Num;
  3166. }
  3167.  
  3168. public PartyInvitations(id)
  3169. {
  3170. new menu = menu_create("\y[\rCS-GO Public\y] Get Invitations", "PartyInvitationsHandler");
  3171.  
  3172. new players[32], pNum, tempid;
  3173.  
  3174. new szName[32], szUserId[32];
  3175. get_players(players, pNum);
  3176.  
  3177. for(new i; i < pNum; i++)
  3178. {
  3179. tempid = players[i];
  3180.  
  3181. if(tempid != id && PartyCreated[tempid] && PartyInvites[tempid][id] && PartySlots[tempid] > GetPartyMembers(tempid))
  3182. {
  3183. get_user_name(tempid, szName, charsmax(szName));
  3184. formatex(szUserId, charsmax(szUserId), "%d", get_user_userid(tempid));
  3185. menu_additem(menu, szName, szUserId, 0);
  3186. }
  3187. }
  3188. if(menu_items(menu)) menu_display(id, menu, 0);
  3189. else PartyMenu(id);
  3190. }
  3191.  
  3192. public PartyInvitationsHandler(id, menu, item)
  3193. {
  3194. if(item == MENU_EXIT)
  3195. {
  3196. menu_destroy(menu);
  3197. PartyMenu(id);
  3198. return PLUGIN_HANDLED;
  3199. }
  3200.  
  3201. new szData[6], szName[64];
  3202. new _access, item_callback;
  3203. menu_item_getinfo(menu, item, _access, szData, charsmax(szData), szName, charsmax(szName), item_callback);
  3204.  
  3205. new userid = str_to_num(szData);
  3206.  
  3207. new player = find_player("k", userid); // flag "k" : find player from userid
  3208.  
  3209. if(player)
  3210. {
  3211. if(PartySlots[player] > GetPartyMembers(player))
  3212. {
  3213. new szName[34];
  3214. get_user_name(id, szName, charsmax(szName));
  3215.  
  3216. InParty[id] = player;
  3217. client_print_color(id, print_team_default, "[^4CS-GO Public^1] ^4You are successfully logged in!");
  3218.  
  3219. for(new i = 1; i <= 32; i++)
  3220. {
  3221. if(i != id && InParty[i] == player)
  3222. {
  3223. client_print_color(i, print_team_default, "[^4CS-GO Public^1] ^3%s ^4Joined the group!", szName);
  3224. }
  3225. }
  3226. }
  3227. else client_print_color(id, print_team_default, "[^4CS-GO Public^1] ^4This group is full");
  3228. }
  3229.  
  3230. menu_destroy(menu);
  3231. PartyMenu(id);
  3232. return PLUGIN_HANDLED;
  3233. }
  3234.  
  3235. public PartyInvitePeople(id)
  3236. {
  3237. new menu = menu_create("\y[\rCS-GO Public\y] Invite to the group", "PartyInvitePeopleHandler");
  3238.  
  3239. new players[32], pNum, tempid;
  3240.  
  3241. new szName[40], szUserId[32];
  3242. get_players(players, pNum);
  3243.  
  3244. for(new i; i < pNum; i++)
  3245. {
  3246. tempid = players[i];
  3247.  
  3248. if(!InParty[tempid])
  3249. {
  3250. get_user_name(tempid, szName, charsmax(szName));
  3251.  
  3252. formatex(szName, charsmax(szName), "%s%s", szName, PartyInvites[id][tempid] ? "\r*" : "");
  3253. formatex(szUserId, charsmax(szUserId), "%d", get_user_userid(tempid));
  3254.  
  3255. menu_additem(menu, szName, szUserId, 0);
  3256. }
  3257. }
  3258. if(menu_items(menu)) menu_display(id, menu, 0);
  3259. else PartyMenu(id);
  3260. }
  3261.  
  3262. public PartyInvitePeopleHandler(id, menu, item)
  3263. {
  3264. if (item == MENU_EXIT)
  3265. {
  3266. menu_destroy(menu);
  3267. PartyMenu(id);
  3268. return PLUGIN_HANDLED;
  3269. }
  3270.  
  3271. new szData[6], szName[64];
  3272. new _access, item_callback;
  3273. menu_item_getinfo(menu, item, _access, szData, charsmax(szData), szName,charsmax(szName), item_callback);
  3274.  
  3275. new userid = str_to_num(szData);
  3276.  
  3277. new player = find_player("k", userid); // flag "k" : find player from userid
  3278.  
  3279. if(player)
  3280. {
  3281. PartyInvites[id][player] = !PartyInvites[id][player];
  3282.  
  3283. if(PartyInvites[id][player])
  3284. {
  3285. new szName[34];
  3286. get_user_name(id, szName, charsmax(szName));
  3287. client_print_color(player, print_team_default, "[^4CS-GO Public^1] ^3%s ^4Invited to join the group!", szName);
  3288. client_print_color(id, print_team_default, "[^4CS-GO Public^1] ^4Invitation sent!");
  3289. }
  3290. }
  3291.  
  3292. menu_destroy(menu);
  3293. PartyMenu(id);
  3294. return PLUGIN_HANDLED;
  3295. }
  3296.  
  3297. public PartyDeletePeople(id)
  3298. {
  3299. new menu = menu_create("\y[\rCS-GO Public\y] Drop from group", "PartyDeletePeopleHandler");
  3300.  
  3301. new players[32], pNum, tempid;
  3302.  
  3303. new szName[32], szUserId[32];
  3304. get_players(players, pNum);
  3305.  
  3306. for(new i; i < pNum; i++)
  3307. {
  3308. tempid = players[i];
  3309.  
  3310. if(tempid != id && InParty[tempid] == id)
  3311. {
  3312. get_user_name(tempid, szName, charsmax(szName));
  3313. formatex(szUserId, charsmax(szUserId), "%d", get_user_userid(tempid));
  3314.  
  3315. menu_additem(menu, szName, szUserId, 0);
  3316. }
  3317. }
  3318.  
  3319. if(menu_items(menu)) menu_display(id, menu, 0);
  3320. else PartyMenu(id);
  3321. }
  3322.  
  3323. public PartyDeletePeopleHandler(id, menu, item)
  3324. {
  3325. if(item == MENU_EXIT)
  3326. {
  3327. menu_destroy(menu);
  3328. PartyMenu(id);
  3329. return PLUGIN_HANDLED;
  3330. }
  3331.  
  3332. new szData[6], szName[64];
  3333. new _access, item_callback;
  3334. menu_item_getinfo(menu, item, _access, szData, charsmax(szData), szName, charsmax(szName), item_callback);
  3335.  
  3336. new userid = str_to_num(szData);
  3337.  
  3338. new player = find_player("k", userid); // flag "k" : find player from userid
  3339.  
  3340. if(player && InParty[player] == id)
  3341. {
  3342. client_print_color(player, print_team_default, "[^4CS-GO Public^1] ^3Threw you away from the group!");
  3343. InParty[player] = 0;
  3344. }
  3345.  
  3346. menu_destroy(menu);
  3347. PartyDeletePeople(id);
  3348. return PLUGIN_HANDLED;
  3349. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement