Advertisement
Guest User

CSGO Outstanding

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