Advertisement
Guest User

Untitled

a guest
Apr 23rd, 2019
154
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 53.06 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. #include <xs>
  11.  
  12. #define PLUGIN "CSGO OUTSTANDING"
  13. #define VERSION "1.3"
  14. #define AUTHOR "FaTzZu reparat de SideWinter"
  15.  
  16. #define get_user_money(%1) cs_get_user_money(%1)
  17. #define set_user_money(%1,%2) cs_set_user_money(%1,%2)
  18. #define ENG_NULLENT -1
  19. #define EV_INT_WEAPONKEY EV_INT_impulse
  20.  
  21. #define SKINS_MAX 32
  22. #define MAX_RANKS 32
  23.  
  24. #define KEY_COST 50
  25. #define RAFFLE_COST 10
  26.  
  27. #define FRAGMENTS_TO_CRAFT 3
  28. #define DROP_FRAGMENTS_CHANCE 60
  29.  
  30. #define POINTS_CHANCE 50
  31. #define POINTS_FOR_KILL 5
  32.  
  33. #define DROP_CASE_CHANCE 10
  34. new go[33]
  35. new sec = 60
  36. new Rosu[33]
  37. new Gri[33]
  38. new ruleta = 0
  39. new playr
  40. new Galben[33]
  41. new FW_PRETHINK_POST
  42. new user_coin_bet[33], user_incoin_challenge[33], user_coin[33];
  43. enum Data {
  44. Points,
  45. Case,
  46. Keys,
  47. Fragments
  48. }
  49. enum eData {
  50. Name[32],
  51. vModel[64],
  52. pModel[64],
  53. Type,
  54. Chance
  55. }
  56.  
  57. new g_aSkins[SKINS_MAX][eData];
  58.  
  59. /* Ranks system */
  60. enum eRankData {
  61. RankName[32],
  62. valFirst,
  63. valSecond
  64. }
  65.  
  66. new g_szRanks[MAX_RANKS][eRankData] ;
  67. new g_szRank[33][2][32], ranksNum;
  68.  
  69. /* Gift system */
  70. new g_iReceiver[33], g_iIterator[33], g_iSkinToGift[33];
  71.  
  72. /* Destroy system */
  73. new g_iSkinToDestroy[33];
  74.  
  75. /* Raffle system */
  76. new g_iRafflePlayers[33], raffleMembers;
  77.  
  78. /* Market system */
  79. new g_iSkinsInMarket[33][SKINS_MAX], g_iPrice[33], iSeller[33][SKINS_MAX];
  80.  
  81. /* Mute system */
  82. new iMutedPlayers[33][33];
  83.  
  84. /* Core */
  85. new g_iPlayerSkins[33][SKINS_MAX], g_iPlayerData[33][Data];
  86. new g_iSkins[33][SKINS_MAX], g_iMaxChance, g_iShowedSkin[33][31], skinsNum;
  87.  
  88. new const szTag[] = "[CS:GO OUTSTANDING]"
  89. public plugin_init()
  90. {
  91. register_plugin(PLUGIN, VERSION, AUTHOR)
  92.  
  93. register_clcmd("say /menu", "cmdSayMenu");
  94. register_clcmd("chooseteam", "cmdSayMenu");
  95. register_clcmd("enter_coin_bet", "clcmd_coinbet")
  96. register_concmd("Rosu", "RosuRuleta");
  97. register_concmd("Galben", "GalbenRuleta");
  98. register_concmd("Gri", "GriRuleta");
  99.  
  100. register_logevent("evRoundEnd",2, "1=Round_End");
  101. register_event("DeathMsg", "evDeathMsg", "a");
  102.  
  103. register_event("SendAudio", "terroristsWin" , "a", "2&%!MRAD_terwin");
  104. register_event("SendAudio", "ctsWin", "a", "2&%!MRAD_ctwin");
  105.  
  106. // Weapon entity names
  107. new const szWeaponNames[][] = {
  108. "", "weapon_p228", "", "weapon_scout", "weapon_hegrenade", "weapon_xm1014", "weapon_c4", "weapon_mac10",
  109. "weapon_aug", "weapon_smokegrenade", "weapon_elite", "weapon_fiveseven", "weapon_ump45", "weapon_sg550",
  110. "weapon_galil", "weapon_famas", "weapon_usp", "weapon_glock18", "weapon_awp", "weapon_mp5navy", "weapon_m249",
  111. "weapon_m3", "weapon_m4a1", "weapon_tmp", "weapon_g3sg1", "weapon_flashbang", "weapon_deagle", "weapon_sg552",
  112. "weapon_ak47", "weapon_knife", "weapon_p90"
  113. };
  114. for (new i; i < sizeof(szWeaponNames); i++)
  115. {
  116. if (szWeaponNames[i][0])
  117. {
  118. RegisterHam(Ham_Item_AddToPlayer, szWeaponNames[i], "hamAddWeaponToPlayer");
  119. RegisterHam(Ham_Item_Deploy, szWeaponNames[i], "hamItemDeploy", 1);
  120. }
  121. }
  122. register_forward(FM_SetModel, "fwSetModel");
  123.  
  124. register_clcmd("Insert_price", "cmdInsertPrice");
  125.  
  126. }
  127. /* Precaching models */
  128. public plugin_precache()
  129. {
  130. precache_model("models/coin.mdl")
  131. new szConfigsDir[128], szMessage[64];
  132.  
  133. get_configsdir(szConfigsDir, charsmax(szConfigsDir));
  134. add(szConfigsDir, charsmax(szConfigsDir), "%s/skins.cfg");
  135.  
  136. if(!file_exists(szConfigsDir))
  137. {
  138. write_file(szConfigsDir, ";TYPES 28=Ak47 22=M4a1 18=AWP 26=Deagle 29=Knife");
  139. write_file(szConfigsDir, ";Skin name v_Model p_Model TYPE Chance");
  140. write_file(szConfigsDir, ";Exemplu:");
  141. write_file(szConfigsDir, ";^"Ak47 Dragon Lore^" ^"models/GO/v_ak47_dragonlore.mdl^" ^"models/GO/p_ak47_dragonlore.mdl^" ^"28^" ^"20^"");
  142. }
  143.  
  144. new f = fopen(szConfigsDir, "rt");
  145. if(!f)
  146. return;
  147. new szLineData[256], szName[32], szViewModel[64], szPlayerModel[64], szType[8], szChance[4];
  148. while(!feof(f))
  149. {
  150. fgets(f, szLineData, charsmax(szLineData));
  151.  
  152. if(strlen(szLineData) < 2 || szLineData[0] == ';' || !szLineData[0])
  153. continue;
  154.  
  155. parse(szLineData, szName, charsmax(szName), szViewModel, charsmax(szViewModel), szPlayerModel, charsmax(szPlayerModel), szType, charsmax(szType), szChance, charsmax(szChance))
  156.  
  157. new iType = str_to_num(szType);
  158. new iChance = str_to_num(szChance)
  159.  
  160. copy(g_aSkins[skinsNum][Name], 31, szName);
  161. copy(g_aSkins[skinsNum][vModel], 63, szViewModel);
  162. copy(g_aSkins[skinsNum][pModel], 63, szPlayerModel);
  163. g_aSkins[skinsNum][Type] = iType;
  164. g_aSkins[skinsNum][Chance] = iChance;
  165.  
  166. skinsNum++
  167. }
  168.  
  169. fclose(f);
  170.  
  171. g_iMaxChance = g_aSkins[0][Chance];
  172. for (new i; i < skinsNum; i++)
  173. {
  174. if (g_aSkins[0][Chance] > g_iMaxChance)
  175. {
  176. g_iMaxChance = g_aSkins[0][Chance];
  177. }
  178. }
  179.  
  180. for (new i; i < skinsNum; i++)
  181. {
  182. if (!file_exists(g_aSkins[0][vModel]))
  183. {
  184. formatex(szMessage, charsmax(szMessage), "Missing model [%s]", g_aSkins[0][vModel]);
  185. set_fail_state(szMessage);
  186. }
  187. if (strlen(g_aSkins[0][pModel]) > 3)
  188. {
  189. if (!file_exists(g_aSkins[0][pModel]))
  190. {
  191. formatex(szMessage, charsmax(szMessage), "Missing model [%s]", g_aSkins[0][pModel]);
  192. set_fail_state(szMessage);
  193. }
  194. }
  195.  
  196. precache_model(g_aSkins[i][vModel]);
  197.  
  198. if (strlen(g_aSkins[i][pModel]) > 3)
  199. {
  200. precache_model(g_aSkins[i][pModel]);
  201. }
  202. }
  203. }
  204. /* Executing cfg's */
  205. public plugin_cfg()
  206. {
  207. new szConfigsDir[128];
  208. get_configsdir(szConfigsDir, charsmax(szConfigsDir));
  209.  
  210. add(szConfigsDir, charsmax(szConfigsDir), "%s/ranks.cfg");
  211.  
  212. if(!file_exists(szConfigsDir))
  213. write_file(szConfigsDir, ";RANK - PRIMA VALOARE - A 2-A VALOARE", -1);
  214.  
  215. new f = fopen(szConfigsDir, "rt");
  216. if(!f)
  217. return;
  218. new szLineRankData[128], szRank[32], szFirstVal[8], szLastVal[8];
  219. while(!feof(f))
  220. {
  221. fgets(f, szLineRankData, charsmax(szLineRankData));
  222.  
  223. if(!szLineRankData[0] || szLineRankData[0] == ';' || strlen(szLineRankData) < 2)
  224. continue;
  225.  
  226. parse(szLineRankData, szRank, charsmax(szRank), szFirstVal, charsmax(szFirstVal), szLastVal, charsmax(szLastVal));
  227.  
  228. new iFirstVal = str_to_num(szFirstVal);
  229. new iLastVal = str_to_num(szLastVal);
  230.  
  231. copy(g_szRanks[ranksNum][RankName], charsmax(g_szRanks[]), szRank);
  232. g_szRanks[ranksNum][valFirst] = iFirstVal
  233. g_szRanks[ranksNum][valSecond] = iLastVal
  234.  
  235. ranksNum++;
  236. }
  237.  
  238.  
  239. }
  240. /* When client connects */
  241. public client_putinserver(id)
  242. {
  243. new iPlayers[32], iNum;
  244. get_players(iPlayers, iNum);
  245.  
  246. for(new i; i < iNum; i++)
  247. iMutedPlayers[id][iPlayers[i]] = 0;
  248.  
  249. for(new i; i < 31; i++)
  250. g_iShowedSkin[id][i] = skinsNum;
  251.  
  252. g_iSkinToGift[id] = skinsNum;
  253. g_iSkinToDestroy[id] = skinsNum;
  254. g_iPrice[id] = 0;
  255.  
  256. set_task(1.5, "taskSetRank", id);
  257.  
  258. LoadData(id);
  259. LoadMarket(id);
  260. }
  261. /* Set user's rank on putinserver and on player kill*/
  262. public taskSetRank(id)
  263. {
  264. new iStats[8], iBody[8];
  265. new iRankPos = get_user_stats(id, iStats, iBody);
  266.  
  267. for(new i; i <= ranksNum; i++)
  268. {
  269. if(g_szRanks[i][valFirst] <= iRankPos <= g_szRanks[i][valSecond])
  270. {
  271. copy(g_szRank[id][0], 31, g_szRanks[i][RankName])
  272. if(i!=0)
  273. copy(g_szRank[id][1], 31, g_szRanks[i-1][RankName])
  274.  
  275. break;
  276. }
  277. }
  278. }
  279. /* Hook DeathMsg event */
  280. public evDeathMsg()
  281. {
  282. refreshRanks();
  283.  
  284. new iChance;
  285. new iKiller = read_data(1);
  286. new iVictim = read_data(2);
  287.  
  288. if(!is_user_alive(iKiller) || iKiller == iVictim)
  289. return;
  290.  
  291. iChance = random_num(1, 100);
  292. if (iChance <= POINTS_CHANCE)
  293. {
  294. g_iPlayerData[iKiller][Points] += POINTS_FOR_KILL;
  295. client_print(iKiller, print_center, "+%d Points", POINTS_FOR_KILL);
  296. }
  297. if(iChance <= DROP_CASE_CHANCE)
  298. {
  299. g_iPlayerData[iKiller][Case]++;
  300. }
  301.  
  302. refreshRanks();
  303. }
  304. /* Refreshing every player rank */
  305. stock refreshRanks()
  306. {
  307. new iPlayers[32], iNum;
  308. get_players(iPlayers, iNum);
  309. for(new i;i<iNum;i++)
  310. {
  311. new id = iPlayers[i];
  312. new iStats[8], iBody[8];
  313. new iRankPos = get_user_stats(id, iStats, iBody);
  314.  
  315. for(new i; i <= ranksNum; i++)
  316. if(g_szRanks[i][valFirst] <= iRankPos <= g_szRanks[i][valSecond])
  317. {
  318. copy(g_szRank[id][0], 31, g_szRanks[i][RankName])
  319. if(i!=0)
  320. copy(g_szRank[id][1], 31, g_szRanks[i-1][RankName])
  321.  
  322. break;
  323. }
  324. }
  325. }
  326. /* When client disconnect */
  327. public client_disconnect(id)
  328. {
  329. SaveData(id)
  330. user_incoin_challenge[id] = 0;
  331. user_coin_bet[id] = 0;
  332. if(user_coin[id] > 0)
  333. {
  334. engfunc(EngFunc_RemoveEntity, user_coin[id])
  335. user_coin[id] = 0;
  336.  
  337. if(!get_challengers_num() && FW_PRETHINK_POST != 0)
  338. {
  339. unregister_forward(FM_PlayerPreThink, FW_PRETHINK_POST, 1)
  340. FW_PRETHINK_POST = 0;
  341. }
  342. }
  343. }
  344. /* Ham_Item_Deploy */
  345. public hamItemDeploy(ent)
  346. {
  347. static id;
  348. id = fm_cs_get_weapon_ent_owner(ent);
  349.  
  350. if (!pev_valid(id)) {
  351. return;
  352. }
  353.  
  354. if (g_iShowedSkin[id][cs_get_weapon_id(ent)] < skinsNum)
  355. {
  356. set_pev(id, pev_viewmodel2, g_aSkins[ g_iShowedSkin[id][cs_get_weapon_id(ent)]][vModel]);
  357.  
  358. if(strlen(g_aSkins[ g_iShowedSkin[id][cs_get_weapon_id(ent)]][pModel]) > 3)
  359. {
  360. set_pev(id, pev_weaponmodel2, g_aSkins[ g_iShowedSkin[id][cs_get_weapon_id(ent)]][pModel]);
  361. }
  362. }
  363. }
  364. /** Principal Menu **/
  365. public cmdSayMenu(id)
  366. {
  367. new menu, szText[128], szText2[128];
  368.  
  369. 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])
  370. menu = menu_create(szText, "menuHandler");
  371.  
  372. menu_additem(menu, "Aplica \ySKIN");
  373. menu_additem(menu, "Deschide \ycufere \w| Crafteaza \ychei^n");
  374.  
  375. menu_additem(menu, "Ofera un \ycadou");
  376. menu_additem(menu, "Distruge un \yskin^n");
  377.  
  378. menu_additem(menu, "\wSkins \yMarket^n");
  379.  
  380. if(strlen(g_szRank[id][1]))
  381. {
  382. formatex(szText2, charsmax(szText2), "Rank actual: \y%s^n\wRank urmator: \y%s", g_szRank[id][0], g_szRank[id][1]);
  383. }
  384. else
  385. {
  386. formatex(szText2, charsmax(szText2), "Rank actual: \y%s \w( \dRank maxim \w)", g_szRank[id][0]);
  387. }
  388.  
  389. formatex(szText, charsmax(szText), "Jocuri de \ynoroc\w^n^n%s", szText2);
  390. menu_additem(menu, szText);
  391.  
  392. menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
  393. menu_display(id, menu, 0);
  394.  
  395. return PLUGIN_HANDLED;
  396. }
  397. public RosuRuleta(id)
  398. {
  399. if(ruleta || Rosu[id] || Gri[id] || Galben[id])
  400. return PLUGIN_HANDLED;
  401.  
  402. new Data[32], Cost;
  403. read_args(Data, 31);
  404. remove_quotes(Data);
  405.  
  406. Cost = str_to_num(Data);
  407.  
  408. if(Cost < 0 || Cost > Points[id] || Cost == 0)
  409. {
  410. client_cmd(id, "messagemode Rosu");
  411. return PLUGIN_HANDLED;
  412. }
  413. else
  414. {
  415. Rosu[id] = Cost;
  416. Points[id] -= Cost
  417. Save(id)
  418. ruletta(id)
  419. playr++
  420. if(playr == 2 && sec == 60)
  421. playruleta()
  422.  
  423. return PLUGIN_CONTINUE;
  424. }
  425. return PLUGIN_CONTINUE;
  426. }
  427. public playruleta()
  428. {
  429. sec = 60
  430. print_color(0, "!g%s!t Ruleta a pornit!",Prefix);
  431. set_task(1.0, "CnT", 1534554, _, _, "b");
  432. }
  433. public unplay()
  434. {
  435. ruleta = 0
  436. sec = 60
  437. print_color(0, "!g%s!g Ruleta !teste !gdeschisa !tacum!",Prefix);
  438. }
  439. public ruletta(id)
  440. {
  441. new Line[128]
  442. if(!Rosu[id] && !Gri[id] && !Galben[id])
  443. {
  444. if(playr >= 2 && sec >= 10)
  445. formatex(Line, 127, "Ruleta[\dPunctele tale: \y%i\w]^nUltimele numere: %s %s %s %s %s %s %s^n\wRuleta porneste in %i secunde", Points[id], nr[0], nr[1], nr[2], nr[3], nr[4], nr[5], nr[6], sec);
  446. else
  447. formatex(Line, 127, "Ruleta[\dPunctele tale: \y%i\w]^nUltimele numere: %s %s %s %s %s %s %s^n\wAsteptam decizia...", Points[id], nr[0], nr[1], nr[2], nr[3], nr[4], nr[5], nr[6]);
  448. }
  449. else
  450. {
  451. if(playr >= 2 && sec >= 10)
  452. formatex(Line, 127, "Ruleta[\dPunctele tale: \y%i\w]^nUltimele numere: %s %s %s %s %s %s %s^n\wRosu %d - Galben %d - Gri %d^nRuleta porneste in %i secunde", Points[id], nr[0], nr[1], nr[2], nr[3], nr[4], nr[5], nr[6], Rosu[id], Galben[id], Gri[id], sec);
  453. else
  454. formatex(Line, 127, "Ruleta[\dPunctele tale: \y%i\w]^nUltimele numere: %s %s %s %s %s %s %s^n\wRosu %d - Galben %d - Gri %d^nAsteptam decizia...", Points[id], nr[0], nr[1], nr[2], nr[3], nr[4], nr[5], nr[6], Rosu[id], Galben[id], Gri[id]);
  455. }
  456. new Menu = menu_create(Line, "RuletaHandlers");
  457.  
  458. new a,b,c
  459. for(new i; i < 32; i++)
  460. {
  461. if(is_user_connected(i))
  462. {
  463. a += Rosu[i]
  464. b += Galben[i]
  465. c += Gri[i]
  466. }
  467. }
  468.  
  469. if(sec >= 10)
  470. {
  471. formatex(Line, 127, "\rRosu \w2x\d(1,2,3,4,5,6,7) \w- %d", a);
  472. menu_additem(Menu, Line, "1");
  473.  
  474. formatex(Line, 127, "\yGalben \w7x\d(0) \w- %d", b);
  475. menu_additem(Menu, Line, "2");
  476.  
  477. formatex(Line, 127, "\dGri \w2x\d(7,8,9,10,11,12,13,14) \w- %d", c);
  478. menu_additem(Menu, Line, "3");
  479. }
  480. else
  481. {
  482. formatex(Line, 127, "\dRosu 2x(1,2,3,4,5,6,7) - %d", a);
  483. menu_additem(Menu, Line, "0");
  484.  
  485. formatex(Line, 127, "\dGalben 7x(0) - %d", b);
  486. menu_additem(Menu, Line, "0");
  487.  
  488. formatex(Line, 127, "\dGri 2x(7,8,9,10,11,12,13,14) - %d", c);
  489. menu_additem(Menu, Line, "0");
  490. }
  491.  
  492. menu_additem(Menu, "Refresh", "4");
  493. menu_setprop(Menu, MPROP_EXIT, MEXIT_ALL);
  494. menu_display(id, Menu, 0);
  495. }
  496. public RuletaHandlers(id, menu, item)
  497. {
  498. if( item == MENU_EXIT )
  499. {
  500. menu_destroy ( menu );
  501. return PLUGIN_HANDLED;
  502. }
  503.  
  504. new Data[6], Name[64];
  505. new Access, CallBack;
  506. menu_item_getinfo(menu, item, Access, Data,5, Name, 63, CallBack);
  507. new Key = str_to_num(Data);
  508. switch(Key)
  509. {
  510. case 0:
  511. {
  512. print_color(id, "!g%s!t Nu ai puncte pentru ruleta!",Prefix);
  513. }
  514. case 1:
  515. {
  516. client_cmd(id, "messagemode Rosu");
  517. }
  518. case 2:
  519. {
  520. client_cmd(id, "messagemode Galben");
  521. }
  522. case 3:
  523. {
  524. client_cmd(id, "messagemode Gri");
  525. }
  526. case 4:
  527. {
  528. ruletta(id)
  529. }
  530. }
  531. return PLUGIN_HANDLED;
  532. }
  533. public GriRuleta(id)
  534. {
  535. if(ruleta || Rosu[id] || Gri[id] || Galben[id])
  536. return PLUGIN_HANDLED;
  537.  
  538. new Data[32], Cost;
  539. read_args(Data, 31);
  540. remove_quotes(Data);
  541.  
  542. Cost = str_to_num(Data);
  543.  
  544. if(Cost < 0 || Cost > Points[id] || Cost == 0)
  545. {
  546. client_cmd(id, "messagemode Gri");
  547. return PLUGIN_HANDLED;
  548. }
  549. else
  550. {
  551. Gri[id] = Cost;
  552. Points[id] -= Cost
  553. Save(id)
  554. ruletta(id)
  555. playr++
  556. if(playr == 2 && sec == 60)
  557. playruleta()
  558.  
  559. return PLUGIN_CONTINUE;
  560. }
  561. return PLUGIN_CONTINUE;
  562. }
  563. public GalbenRuleta(id)
  564. {
  565. if(ruleta || Rosu[id] || Gri[id] || Galben[id])
  566. return PLUGIN_HANDLED;
  567.  
  568. new Data[32], Cost;
  569. read_args(Data, 31);
  570. remove_quotes(Data);
  571.  
  572. Cost = str_to_num(Data);
  573.  
  574. if(Cost < 0 || Cost > Points[id] || Cost == 0)
  575. {
  576. client_cmd(id, "messagemode Galben");
  577. return PLUGIN_HANDLED;
  578. }
  579. else
  580. {
  581. Galben[id] = Cost;
  582. Points[id] -= Cost
  583. Save(id)
  584. ruletta(id)
  585. playr++
  586. if(playr == 2 && sec == 60)
  587. playruleta()
  588.  
  589. return PLUGIN_CONTINUE;
  590. }
  591. return PLUGIN_CONTINUE;
  592. }
  593. public clcmd_coinbet(id)
  594. {
  595. if(user_incoin_challenge[id] > 0) return 1;
  596.  
  597. new szArgs[30];
  598. read_args(szArgs, charsmax(szArgs))
  599. remove_quotes(szArgs)
  600.  
  601. new amount = str_to_num(szArgs);
  602.  
  603. if(amount > get_user_money(id)) {
  604. client_print(id, print_center, "You dont have that amount of money!")
  605. }
  606. else {
  607. user_coin_bet[id] = amount;
  608. }
  609.  
  610. clcmd_stack_menu(id);
  611. return 1;
  612. }
  613.  
  614. public clcmd_stack_menu(id)
  615. {
  616. if(user_incoin_challenge[id] > 0) return 1;
  617.  
  618. new menu = menu_create("\rCoin Challenge^n\yChoose your stack!", "coin_menu_handle");
  619.  
  620. new szText[32]
  621. formatex(szText, charsmax(szText), "\wChoose your Stack: \r%d$^n^n", user_coin_bet[id])
  622. menu_additem(menu, szText, "STACK")
  623. menu_additem(menu, "\rReady!", "STACK")
  624.  
  625. menu_display(id, menu)
  626. return 1;
  627. }
  628.  
  629. public clclmd_coin_menu(id)
  630. {
  631. if(user_coin_bet[id] <= 0)
  632. {
  633. clcmd_stack_menu(id)
  634. client_print(id, print_center, "Choose your stack!")
  635. return PLUGIN_HANDLED;
  636. }
  637.  
  638. new menu = menu_create("\rCoin Challenge^n\yChoose your opponent!", "coin_menu_handle");
  639.  
  640. new players[32], pnum;
  641. get_players(players, pnum, "ch")
  642.  
  643. if(pnum <= 1 || user_incoin_challenge[id] > 0)
  644. {
  645. menu_destroy(menu);
  646. return PLUGIN_HANDLED;
  647. }
  648.  
  649. for(new i, szName[32], player, szInfo[3]; i < pnum; i++)
  650. {
  651. player = players[i];
  652. if(player == id || user_incoin_challenge[player] > 0) continue;
  653. get_user_name(player, szName, charsmax(szName))
  654. num_to_str(player, szInfo, charsmax(szInfo))
  655. menu_additem(menu, szName, szInfo)
  656. }
  657.  
  658. menu_display(id, menu)
  659. return PLUGIN_HANDLED;
  660. }
  661.  
  662. public coin_menu_handle(id, menu, item)
  663. {
  664. if(item == MENU_EXIT || user_incoin_challenge[id] > 0)
  665. {
  666. menu_destroy(menu);
  667. return PLUGIN_HANDLED;
  668. }
  669.  
  670. new sData[12], paccess, iCallback;
  671. menu_item_getinfo(menu, item, paccess, sData, charsmax(sData), "", 0, iCallback)
  672. menu_destroy(menu)
  673.  
  674. if(equal(sData, "STACK"))
  675. {
  676. switch( item )
  677. {
  678. case 0:
  679. {
  680. client_print(id, print_center, "Choose an amount of money above than zero!")
  681. client_cmd(id, "messagemode enter_coin_bet")
  682. }
  683. case 1: clclmd_coin_menu(id)
  684. }
  685.  
  686. return PLUGIN_HANDLED;
  687. }
  688. if(equal(sData, "DUEL", 4))
  689. {
  690. strtok(sData, "", 0, sData, charsmax(sData), '|')
  691. new player = str_to_num(sData);
  692. if(!is_user_connected(player) || user_incoin_challenge[player] > 0) return PLUGIN_HANDLED;
  693.  
  694. new szTargetname[32], szPlayername[32];
  695. get_user_name(player, szTargetname, charsmax(szTargetname))
  696. get_user_name(id, szPlayername, charsmax(szPlayername))
  697.  
  698. switch( item )
  699. {
  700. case 0:
  701. {
  702. client_print(player, print_chat, "%s has accepted your coin challenge!", szPlayername)
  703. client_print(0, print_chat, "%s vs %s in coin flip challenge!", szTargetname, szPlayername)
  704.  
  705. new rand = random_num(1,2);
  706.  
  707. set_hudmessage(101, 236, 38, -1.0, 0.34, 0, 6.0, 4.0, _, _, -1)
  708. show_hudmessage(rand == 1 ? id:player, "You are Tails!")
  709.  
  710. set_hudmessage(101, 236, 38, -1.0, 0.34, 0, 6.0, 4.0, _, _, -1)
  711. show_hudmessage(rand == 1 ? player:id, "You are Heads!")
  712.  
  713. if(!get_challengers_num() && FW_PRETHINK_POST == 0)
  714. {
  715. FW_PRETHINK_POST = register_forward(FM_PlayerPreThink, "fw_client_prethink_post", 1);
  716. }
  717.  
  718. user_coin_bet[id] = user_coin_bet[player]
  719.  
  720. user_incoin_challenge[id] = rand == 1 ? 2:1;
  721. user_incoin_challenge[player] = rand == 1 ? 1:2;
  722.  
  723. new chosen = random_num(1,2);
  724. display_coin(id, chosen)
  725. display_coin(player, chosen)
  726.  
  727. client_print(0, print_chat, "%s is tails & %s is heads!", rand == 1 ? szPlayername:szTargetname, rand == 1 ? szTargetname:szPlayername)
  728. }
  729. case 1:
  730. {
  731. client_print(player, print_chat, "%s has denied your coin challenge!", szPlayername)
  732. }
  733. }
  734. return PLUGIN_HANDLED;
  735. }
  736.  
  737. new player = str_to_num(sData);
  738. if(!is_user_connected(player) || user_incoin_challenge[player] > 0)
  739. {
  740. clclmd_coin_menu(id)
  741. return PLUGIN_HANDLED;
  742. }
  743.  
  744. new oldmenu, newmenu;
  745. player_menu_info(player, oldmenu, newmenu);
  746. if(oldmenu > 0 || newmenu > 0)
  747. {
  748. new szTargetname[32]
  749. get_user_name(player, szTargetname, charsmax(szTargetname))
  750. client_print(id, print_center, "%s seems to be busy!", szTargetname)
  751. clclmd_coin_menu(id)
  752. return PLUGIN_HANDLED;
  753. }
  754.  
  755. coin_menu_duel(id, player)
  756. return PLUGIN_HANDLED;
  757. }
  758.  
  759. coin_menu_duel(id, target)
  760. {
  761. new szText[64], szName[32]
  762. get_user_name(id, szName, charsmax(szName))
  763. formatex(szText, charsmax(szText), "\w%s has Challenged you for \r%d$^n\yIn a coin flip game!^n", szName, user_coin_bet[id])
  764. new menu = menu_create(szText, "coin_menu_handle");
  765.  
  766. formatex(szText, charsmax(szText), "DUEL|%d", id)
  767. menu_additem(menu, "Accept the Challenge!^n", szText)
  768. menu_additem(menu, "Deny the Challenge!", szText)
  769.  
  770. menu_setprop(menu, MPROP_EXIT, MEXIT_NEVER)
  771.  
  772. menu_display(target, menu)
  773. }
  774.  
  775. display_coin(target, chosen)
  776. {
  777. new ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"));
  778.  
  779. if(!ent) return;
  780.  
  781. user_coin[target] = ent;
  782.  
  783. static Float:fOrigin[3], Float:fAim[3];
  784. pev(target, pev_origin, fOrigin)
  785. pev(target, pev_view_ofs, fAim)
  786. xs_vec_add(fOrigin, fAim, fOrigin)
  787. pev(target, pev_v_angle, fAim)
  788. angle_vector(fAim, ANGLEVECTOR_FORWARD, fAim)
  789. xs_vec_mul_scalar(fAim, 10.0, fAim)
  790. xs_vec_add(fOrigin, fAim, fOrigin)
  791. pev(target, pev_v_angle, fAim)
  792.  
  793. set_pev(ent, pev_classname, "coin")
  794. set_pev(ent, pev_movetype, MOVETYPE_NOCLIP)
  795. set_pev(ent, pev_solid, SOLID_NOT)
  796. set_pev(ent, pev_origin, fOrigin)
  797. set_pev(ent, pev_v_angle, fAim)
  798. engfunc(EngFunc_SetModel, ent, "models/coin.mdl")
  799.  
  800. set_pev(ent, pev_animtime, get_gametime() + 2.0)
  801. set_pev(ent, pev_sequence, 1)
  802. set_pev(ent, pev_frame, 2.0)
  803. set_pev(ent, pev_framerate, 1.0)
  804. set_pev(ent, pev_iuser4, chosen)
  805. set_pev(ent, pev_iuser2, target)
  806.  
  807. set_task(6.0, "task_chosen_side", ent)
  808. }
  809.  
  810. public task_chosen_side(const ent)
  811. {
  812. new classname[6]
  813. pev(ent, pev_classname, classname ,charsmax(classname))
  814.  
  815. if(!pev_valid(ent) || !equal(classname, "coin")) return;
  816.  
  817. set_pev(ent, pev_sequence, 0)
  818. set_pev(ent, pev_frame, 1.0)
  819. set_pev(ent, pev_framerate, 1.0)
  820. if(pev(ent, pev_iuser4) == 2) set_pev(ent, pev_iuser3, 1)
  821. new owner = pev(ent, pev_iuser2);
  822. set_task(3.0, "client_disconnect", owner)
  823.  
  824. switch(user_incoin_challenge[owner] == pev(ent, pev_iuser4)) {
  825. case true:{
  826. set_user_money(owner, (get_user_money(owner)+user_coin_bet[owner]))
  827. new sName[32];
  828. get_user_name(owner, sName, charsmax(sName))
  829. client_print(0, print_chat, "%s won the flip the coin game!", sName)
  830.  
  831. set_hudmessage(21, 243, 13, -1.0, 0.28, 0, 6.0, 4.0, _, _, -1)
  832. show_hudmessage(owner, "You have Won!")
  833. }
  834. case false:
  835. {
  836. set_user_money(owner, (get_user_money(owner)-user_coin_bet[owner]))
  837. set_hudmessage(243, 21, 13, -1.0, 0.28, 0, 6.0, 4.0, _, _, -1)
  838. show_hudmessage(owner, "You have lost!")
  839. }
  840. }
  841. }
  842.  
  843. get_challengers_num()
  844. {
  845. new players[32],pnum, count;
  846. get_players(players, pnum, "ch")
  847. for(new i; i < pnum; i++)
  848. {
  849. if(user_incoin_challenge[players[i]] > 0)
  850. {
  851. count++;
  852. }
  853. }
  854. return count;
  855. }
  856. public fw_client_prethink_post(target)
  857. {
  858. static ent;
  859. if((ent = user_coin[target]) > 0)
  860. {
  861. static Float:fOrigin[3], Float:fAim[3];
  862. pev(target, pev_origin, fOrigin)
  863. pev(target, pev_view_ofs, fAim)
  864. xs_vec_add(fOrigin, fAim, fOrigin)
  865. pev(target, pev_v_angle, fAim)
  866. angle_vector(fAim, ANGLEVECTOR_FORWARD, fAim)
  867. xs_vec_mul_scalar(fAim, 10.0, fAim)
  868. xs_vec_add(fOrigin, fAim, fOrigin)
  869. pev(target, pev_v_angle, fAim)
  870. set_pev(ent, pev_origin, fOrigin)
  871. pev(ent, pev_angles, fOrigin)
  872. fAim[0] = fOrigin[0];
  873. fAim[2] = fOrigin[2];
  874. fAim[1] += 180.0;
  875. if(pev(ent, pev_iuser3) == 1)
  876. {
  877. fAim[1] += 180.0;
  878. }
  879.  
  880. set_pev(ent, pev_angles, fAim)
  881. }
  882. }
  883. public menuHandler(id, menu, item)
  884. {
  885. if(item == MENU_EXIT)
  886. {
  887. menu_destroy(menu);
  888. return PLUGIN_HANDLED;
  889. }
  890.  
  891. switch(item)
  892. {
  893. case 0:
  894. {
  895. if (user_have_skins(id))
  896. {
  897. showSkins(id);
  898. }
  899. else
  900. {
  901. ColorChat(id, "!g%s!nNu ai !gskinuri !nin inventar!", szTag);
  902. cmdSayMenu(id);
  903. }
  904. }
  905.  
  906. case 1: openCaseMenu(id);
  907.  
  908. case 2:
  909. {
  910. if (user_have_skins(id))
  911. {
  912. showGiftMenu(id);
  913. }
  914. else
  915. {
  916. ColorChat(id, "!g%s!nNu ai !gskinuri !nin inventar!", szTag);
  917. cmdSayMenu(id);
  918. }
  919. }
  920.  
  921. case 3:
  922. {
  923. if (user_have_skins(id))
  924. {
  925. showDestroyMenu(id);
  926. }
  927. else
  928. {
  929. ColorChat(id, "!g%s!nNu ai !gskinuri !nin inventar!", szTag);
  930. cmdSayMenu(id);
  931. }
  932. }
  933.  
  934. case 4: cmdShowMarket(id)
  935.  
  936. //case 5: cmdShowTradeMenu(id);
  937.  
  938. case 5: showGamesMenu(id)
  939. }
  940.  
  941. menu_destroy(menu);
  942. return PLUGIN_HANDLED;
  943. }
  944. /* Apply skin menu */
  945. public showSkins(id)
  946. {
  947. new menu, szText[64], k=0;
  948. menu = menu_create("\w[ \yCS:GO OUTSTANDING \w] \ySkinurile \wtale", "skinsMenuHandler");
  949.  
  950. for(new i; i < skinsNum; i++)
  951. {
  952. if(g_iPlayerSkins[id][i])
  953. {
  954. formatex(szText, charsmax(szText), "%s - \y%d \wBucati", g_aSkins[i][Name], g_iPlayerSkins[id][i]);
  955. menu_additem(menu, szText);
  956. g_iSkins[id][k++] = i;
  957. }
  958. }
  959.  
  960. menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
  961. menu_display(id, menu, 0);
  962. }
  963. public skinsMenuHandler(id, menu, item)
  964. {
  965. if( item == MENU_EXIT )
  966. {
  967. menu_destroy(menu);
  968. return PLUGIN_HANDLED;
  969. }
  970.  
  971. new iSkinID = g_iSkins[id][item];
  972.  
  973. g_iShowedSkin [id][g_aSkins[iSkinID][Type]] = iSkinID;
  974. ColorChat(id, "!g%s!nAi aplicat skinul !g%s!n.", szTag, g_aSkins[iSkinID][Name]);
  975. client_cmd(id, "lastinv");
  976. showSkins(id);
  977.  
  978. menu_destroy(menu);
  979. return PLUGIN_HANDLED;
  980. }
  981. /* Open case menu */
  982. public openCaseMenu(id)
  983. {
  984. new menu, szText[128];
  985. 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])
  986. menu = menu_create(szText, "openCaseMenuHandler");
  987.  
  988. if(!g_iPlayerData[id][Keys] || !g_iPlayerData[id][Case])
  989. {
  990. formatex(szText, charsmax(szText), "\dDeschide \ycufar^n");
  991. }
  992. else
  993. {
  994. formatex(szText, charsmax(szText), "Deschide \ycufar^n");
  995. }
  996. menu_additem(menu, szText);
  997.  
  998. if(g_iPlayerData[id][Fragments] < FRAGMENTS_TO_CRAFT)
  999. {
  1000. formatex(szText, charsmax(szText), "\dCrafteaza o \ycheie \d( \y%d \d/ \y%d \d)", g_iPlayerData[id][Fragments], FRAGMENTS_TO_CRAFT);
  1001. }
  1002. else
  1003. {
  1004. formatex(szText, charsmax(szText), "Crafteaza o \ycheie \w( \y%d \w/ \y%d \w)", g_iPlayerData[id][Fragments], FRAGMENTS_TO_CRAFT);
  1005. }
  1006.  
  1007. menu_additem(menu, szText);
  1008.  
  1009. if(g_iPlayerData[id][Points] < KEY_COST)
  1010. {
  1011. formatex(szText, charsmax(szText), "\dCumpara o \ycheie \w- \y%d \dPuncte", KEY_COST);
  1012. }
  1013. else
  1014. {
  1015. formatex(szText, charsmax(szText), "Cumpara o \ycheie \w- \y%d \wPuncte", KEY_COST);
  1016. }
  1017. menu_additem(menu, szText);
  1018.  
  1019. menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
  1020. menu_display(id, menu, 0);
  1021. }
  1022. public openCaseMenuHandler(id, menu, item)
  1023. {
  1024. if( item == MENU_EXIT )
  1025. {
  1026. menu_destroy(menu);
  1027. return PLUGIN_HANDLED;
  1028. }
  1029.  
  1030. switch(item)
  1031. {
  1032. case 0:
  1033. {
  1034. if(!g_iPlayerData[id][Keys])
  1035. {
  1036. ColorChat(id, "!g%s!n Nu ai o !gcheie!n!", szTag);
  1037. return PLUGIN_HANDLED;
  1038. }
  1039. if(!g_iPlayerData[id][Case])
  1040. {
  1041. ColorChat(id, "!g%s!n Nu ai un !gcufar!n!", szTag);
  1042. return PLUGIN_HANDLED;
  1043. }
  1044.  
  1045. new iSkins[SKINS_MAX], iRand, iChance, k=0;
  1046.  
  1047. iChance = random_num(1, g_iMaxChance);
  1048. for(new i; i < skinsNum; i++)
  1049. {
  1050. if(iChance <= g_aSkins[i][Chance])
  1051. iSkins[k++] = i;
  1052. }
  1053.  
  1054. iRand = k == 0 ? iSkins[k] : iSkins[random(k)];
  1055.  
  1056. g_iPlayerSkins[id][iRand]++;
  1057. g_iPlayerData[id][Keys]--;
  1058. g_iPlayerData[id][Case]--;
  1059.  
  1060. ColorChat(id, "!g%s!nAi deschis un cufar si ai primit skinul !g%s!n.", szTag, g_aSkins[iRand][Name]);
  1061. SaveData(id);
  1062.  
  1063. openCaseMenu(id);
  1064. }
  1065. case 1:
  1066. {
  1067. if(g_iPlayerData[id][Fragments] < FRAGMENTS_TO_CRAFT)
  1068. {
  1069. ColorChat(id, "!g%s!n Insuficiente !gfragmente !npentru a crafta o !gcheie!n.", szTag);
  1070. return PLUGIN_HANDLED;
  1071. }
  1072. g_iPlayerData[id][Keys]++;
  1073. g_iPlayerData[id][Fragments] -= FRAGMENTS_TO_CRAFT;
  1074.  
  1075. ColorChat(id, "!g%s!n Ai transformat !g%d!n fragmente intr-o !gcheie!n.", szTag, FRAGMENTS_TO_CRAFT);
  1076.  
  1077. openCaseMenu(id);
  1078. }
  1079. case 2:
  1080. {
  1081. if(g_iPlayerData[id][Points] < KEY_COST)
  1082. {
  1083. ColorChat(id, "!g%s!n Insuficiente !gpuncte !npentru a cumpara o !gcheie!n.", szTag);
  1084. return PLUGIN_HANDLED;
  1085. }
  1086. g_iPlayerData[id][Keys]++;
  1087. g_iPlayerData[id][Points] -= KEY_COST;
  1088. ColorChat(id, "!g%s!n Ai achizitionat o !gcheie!n.", szTag);
  1089. SaveData(id);
  1090.  
  1091. openCaseMenu(id);
  1092. }
  1093. }
  1094. menu_destroy(menu);
  1095. return PLUGIN_HANDLED;
  1096. }
  1097. /* Gift menu */
  1098. public showGiftMenu(id)
  1099. {
  1100. new menu, szText[128], szName[32];
  1101. menu = menu_create("\w[ \yCS:GO OUTSTANDING\w] \yGift \wMenu", "giftMenuHandler");
  1102.  
  1103. if(g_iReceiver[id])
  1104. {
  1105. get_user_name(g_iReceiver[id], szName, charsmax(szName));
  1106. formatex(szText, charsmax(szText), "Jucator: \y%s", szName);
  1107. }
  1108. else formatex(szText, charsmax(szText), "Alege \yjucator\w:");
  1109. menu_additem(menu, szText);
  1110.  
  1111. if(g_iSkinToGift[id] == skinsNum)
  1112. formatex(szText, charsmax(szText), "Alege \ySkin^n");
  1113. else formatex(szText, charsmax(szText), "Skin spre oferire: \y%s^n", g_aSkins[g_iSkinToGift[id]][Name]);
  1114. menu_additem(menu, szText);
  1115. menu_additem(menu, "\rTrimite");
  1116.  
  1117. menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
  1118. menu_display(id, menu, 0);
  1119. }
  1120. public giftMenuHandler(id, menu, item)
  1121. {
  1122. if( item == MENU_EXIT )
  1123. {
  1124. menu_destroy(menu);
  1125. return PLUGIN_HANDLED;
  1126. }
  1127.  
  1128. switch(item)
  1129. {
  1130. case 0:
  1131. {
  1132. new iPlayers[32], iNum, idReceiver;
  1133. get_players(iPlayers, iNum);
  1134.  
  1135. idReceiver = iPlayers[g_iIterator[id]]
  1136. g_iReceiver[id] = idReceiver;
  1137. g_iIterator[id]++;
  1138.  
  1139. if(g_iIterator[id] == iNum)
  1140. g_iIterator[id] = 0;
  1141.  
  1142. showGiftMenu(id);
  1143. }
  1144. case 1:
  1145. {
  1146. showSkinsForGift(id);
  1147. }
  1148. case 2:
  1149. {
  1150. if(g_iSkinToGift[id] == skinsNum)
  1151. {
  1152. ColorChat(id, "!g%s!n Alege un !gskin!n!",szTag);
  1153. showGiftMenu(id)
  1154. return PLUGIN_HANDLED;
  1155. }
  1156. if(g_iReceiver[id] == id)
  1157. {
  1158. ColorChat(id, "!g%s!n Nu iti da !gskinuri !ntie!",szTag);
  1159. showGiftMenu(id)
  1160. return PLUGIN_HANDLED;
  1161. }
  1162. new szName[32];
  1163. get_user_name(id, szName, charsmax(szName));
  1164.  
  1165. g_iPlayerSkins[id][g_iSkinToGift[id]]--;
  1166. g_iPlayerSkins[g_iReceiver[id]][g_iSkinToGift[id]]++;
  1167.  
  1168. ColorChat(g_iReceiver[id], "!g%s!nAi primit !g%s !n de la !g%s!n.", szTag, g_aSkins[g_iSkinToGift[id]][Name], szName);
  1169. g_iSkinToGift[id] = skinsNum;
  1170.  
  1171. SaveData(id);
  1172. SaveData(g_iReceiver[id]);
  1173. }
  1174. }
  1175. menu_destroy(menu);
  1176. return PLUGIN_HANDLED;
  1177. }
  1178. /* Skins List for gift */
  1179. public showSkinsForGift(id)
  1180. {
  1181. new menu, szText[64], k=0;
  1182. menu = menu_create("\w[ \yCS:GO OUTSTANDING \w] Alege skinul pe care vrei sa il daruiesti", "skinsForGiftMenuHandler");
  1183.  
  1184. for(new i; i < skinsNum; i++)
  1185. if(g_iPlayerSkins[id][i])
  1186. {
  1187. formatex(szText, charsmax(szText), "%s - \y%d \wBucati", g_aSkins[i][Name], g_iPlayerSkins[id][i]);
  1188. menu_additem(menu, szText);
  1189. g_iSkins[id][k++] = i;
  1190. }
  1191.  
  1192. menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
  1193. menu_display(id, menu, 0);
  1194. }
  1195. public skinsForGiftMenuHandler(id, menu, item)
  1196. {
  1197. if( item == MENU_EXIT )
  1198. {
  1199. menu_destroy(menu);
  1200. return PLUGIN_HANDLED;
  1201. }
  1202.  
  1203. g_iSkinToGift[id] = g_iSkins[id][item];
  1204. showGiftMenu(id);
  1205.  
  1206. menu_destroy(menu);
  1207. return PLUGIN_HANDLED;
  1208. }
  1209. /* Destroy skin menu */
  1210. public showDestroyMenu(id)
  1211. {
  1212. new menu, szText[128];
  1213. menu = menu_create("\w[ \yCS:GO OUTSTANDING \w] \wDestroy \ySkin \wMenu", "destroyMenuHandler");
  1214.  
  1215. if(g_iSkinToDestroy[id] == skinsNum)
  1216. formatex(szText, charsmax(szText), "Alege \ySkin^n");
  1217. else formatex(szText, charsmax(szText), "Skin pentru distrugere: \y%s^n", g_aSkins[g_iSkinToDestroy[id]][Name]);
  1218. menu_additem(menu, szText);
  1219. menu_additem(menu, "\rDistruge");
  1220.  
  1221. menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
  1222. menu_display(id, menu, 0);
  1223. }
  1224. public destroyMenuHandler(id, menu, item)
  1225. {
  1226. if( item == MENU_EXIT )
  1227. {
  1228. menu_destroy(menu);
  1229. return PLUGIN_HANDLED;
  1230. }
  1231.  
  1232. switch(item)
  1233. {
  1234. case 0:
  1235. {
  1236. showSkinsForDestroy(id);
  1237. }
  1238. case 1:
  1239. {
  1240. if(g_iSkinToDestroy[id] == skinsNum)
  1241. {
  1242. ColorChat(id, "!g%s!n Alege un !gskin!n!",szTag);
  1243. showDestroyMenu(id)
  1244. return PLUGIN_HANDLED;
  1245. }
  1246.  
  1247. g_iPlayerSkins[id][g_iSkinToDestroy[id]]--;
  1248. g_iPlayerData[id][Fragments]++;
  1249. 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]);
  1250.  
  1251. g_iSkinToDestroy[id] = skinsNum;
  1252. SaveData(id);
  1253.  
  1254. showDestroyMenu(id);
  1255. }
  1256. }
  1257. menu_destroy(menu);
  1258. return PLUGIN_HANDLED;
  1259. }
  1260. /* Skins List to destroy */
  1261. public showSkinsForDestroy(id)
  1262. {
  1263. new menu, szText[64], k=0;
  1264. menu = menu_create("\w[ \yCS:GO OUTSTANDING \w] Alege skinul pe care vrei sa il distrugi", "skinsForDestroyMenuHandler");
  1265.  
  1266. for(new i; i < skinsNum; i++)
  1267. if(g_iPlayerSkins[id][i])
  1268. {
  1269. formatex(szText, charsmax(szText), "%s - \y%d \wBucati", g_aSkins[i][Name], g_iPlayerSkins[id][i]);
  1270. menu_additem(menu, szText);
  1271. g_iSkins[id][k++] = i;
  1272. }
  1273.  
  1274. menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
  1275. menu_display(id, menu, 0);
  1276. }
  1277. public skinsForDestroyMenuHandler(id, menu, item)
  1278. {
  1279. if( item == MENU_EXIT )
  1280. {
  1281. menu_destroy(menu);
  1282. return PLUGIN_HANDLED;
  1283. }
  1284.  
  1285. g_iSkinToDestroy[id] = g_iSkins[id][item];
  1286. showDestroyMenu(id);
  1287.  
  1288. menu_destroy(menu);
  1289. return PLUGIN_HANDLED;
  1290. }
  1291. /* Market menu */
  1292. public cmdShowMarket(id)
  1293. {
  1294. new menu;
  1295.  
  1296. menu = menu_create("\w[ \yCSGO OUTSTANDING \w] Market Shop", "marketMenuHandler");
  1297.  
  1298. menu_additem(menu, "\wCumpara \yskin^n");
  1299.  
  1300. menu_additem(menu, "Adauga \yskin \win market");
  1301. menu_additem(menu, "Retrage \yskin \wdin market");
  1302.  
  1303. menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
  1304. menu_display(id, menu, 0);
  1305. }
  1306. public marketMenuHandler(id, menu, item)
  1307. {
  1308. if( item == MENU_EXIT )
  1309. {
  1310. menu_destroy(menu);
  1311. return PLUGIN_HANDLED;
  1312. }
  1313.  
  1314. switch(item)
  1315. {
  1316. case 0: showSkinsInMarketMenu(id);
  1317. case 1: showSkinsToSellMenu(id);
  1318. case 2: showRemoveSkinMenu(id);
  1319. }
  1320.  
  1321. menu_destroy(menu);
  1322. return PLUGIN_HANDLED;
  1323. }
  1324. /* Skins in market */
  1325. public showSkinsInMarketMenu(id)
  1326. {
  1327. new menu, szText[256], szName[32], k=0;
  1328.  
  1329. new iPlayers[32], iNum, idV;
  1330. get_players(iPlayers, iNum);
  1331.  
  1332. menu = menu_create("\w[ \yCSGO OUTSTANDING \w] Skinuri in market", "skinsInMarketMenuHandler");
  1333.  
  1334. for(new i; i < iNum; i++)
  1335. {
  1336. idV = iPlayers[i];
  1337. for(new j; j < skinsNum; j++)
  1338. {
  1339. if(g_iSkinsInMarket[idV][j])
  1340. {
  1341. get_user_name(idV, szName, charsmax(szName));
  1342.  
  1343. formatex(szText, charsmax(szText), "\y%s \w[ \y%d \wpoints \w] [ Vanzator: \y%s \w]", g_aSkins[j][Name], g_iSkinsInMarket[idV][j], szName);
  1344. menu_additem(menu, szText);
  1345. g_iSkins[id][k] = j;
  1346. iSeller[id][k++] = idV;
  1347. }
  1348. }
  1349. }
  1350.  
  1351. menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
  1352. menu_display(id, menu, 0);
  1353. }
  1354. public skinsInMarketMenuHandler(id, menu, item)
  1355. {
  1356. if( item == MENU_EXIT )
  1357. {
  1358. menu_destroy(menu);
  1359. return PLUGIN_HANDLED;
  1360. }
  1361. new szSellerName[32], szName[32];
  1362.  
  1363. new iSkinID = g_iSkins[id][item]
  1364. new iSellerID = iSeller[id][item];
  1365.  
  1366. if(g_iPlayerData[id][Points] < g_iSkinsInMarket[iSellerID][iSkinID])
  1367. {
  1368. ColorChat(id, "!g%s!nPuncte insuficiente pentru a cumpara skinul!", szTag);
  1369. return PLUGIN_HANDLED;
  1370. }
  1371.  
  1372. get_user_name(id, szName, charsmax(szName));
  1373. get_user_name(iSellerID, szSellerName, charsmax(szSellerName));
  1374.  
  1375. g_iPlayerData[id][Points] -= g_iSkinsInMarket[iSellerID][iSkinID];
  1376. g_iPlayerData[iSellerID][Points] += g_iSkinsInMarket[iSellerID][iSkinID];
  1377.  
  1378. g_iPlayerSkins[id][iSkinID]++;
  1379.  
  1380. 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);
  1381. 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);
  1382.  
  1383. g_iSkinsInMarket[iSellerID][iSkinID] = 0;
  1384.  
  1385. SaveData(id);
  1386. SaveMarket(id);
  1387.  
  1388. menu_destroy(menu);
  1389. return PLUGIN_HANDLED;
  1390. }
  1391. /* Skins to sell */
  1392. public showSkinsToSellMenu(id)
  1393. {
  1394. new menu, szText[128], k=0;
  1395.  
  1396. menu = menu_create("\w[ \yCSGO OUTSTANDING \w] Alege skinul", "skinsToSellMenuHandler");
  1397.  
  1398. if(!g_iPrice[id])
  1399. formatex(szText, charsmax(szText), "Alege \ypretul^n");
  1400. else
  1401. formatex(szText, charsmax(szText), "\yPret\r: \w%d^n", g_iPrice[id]);
  1402. menu_additem(menu, szText);
  1403. for(new i; i < skinsNum; i++)
  1404. {
  1405. if(g_iPlayerSkins[id][i])
  1406. {
  1407. formatex(szText, charsmax(szText), "\y%s \w- \r*\y%d \wBucati", g_aSkins[i][Name], g_iPlayerSkins[id][i]);
  1408. menu_additem(menu, szText);
  1409.  
  1410. g_iSkins[id][k++] = i;
  1411. }
  1412. }
  1413.  
  1414. menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
  1415. menu_display(id, menu, 0);
  1416. }
  1417. public skinsToSellMenuHandler(id, menu, item)
  1418. {
  1419. if( item == MENU_EXIT )
  1420. {
  1421. menu_destroy(menu);
  1422. return PLUGIN_HANDLED;
  1423. }
  1424. new iSkinID, szName[32];
  1425. get_user_name(id, szName, charsmax(szName));
  1426. if(item == 0)
  1427. {
  1428. client_cmd(id, "messagemode Insert_price");
  1429. menu_destroy(menu);
  1430. return PLUGIN_HANDLED;
  1431. }
  1432. if(!g_iPrice[id])
  1433. {
  1434. ColorChat(id, "!g%s!nNu ai ales inca pretul!", szTag);
  1435. showSkinsToSellMenu(id)
  1436. return PLUGIN_HANDLED
  1437. }
  1438. iSkinID = g_iSkins[id][item-1];
  1439.  
  1440. if(g_iSkinsInMarket[id][iSkinID])
  1441. {
  1442. ColorChat(id, "!g%s!nAi pus deja acest !gskin in !gmarket!n!", szTag);
  1443. showSkinsToSellMenu(id);
  1444. return PLUGIN_HANDLED;
  1445. }
  1446.  
  1447. g_iPlayerSkins[id][iSkinID]--;
  1448. g_iSkinsInMarket[id][iSkinID] = g_iPrice[id];
  1449.  
  1450. ColorChat(id, "!g%s!nAi adaugat skinul !g%s !nin market cu !g%d !npuncte.", szTag, g_aSkins[iSkinID][Name], g_iPrice[id]);
  1451. 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]);
  1452. g_iPrice[id] = 0;
  1453.  
  1454. SaveData(id)
  1455. SaveMarket(id);
  1456.  
  1457. showSkinsToSellMenu(id);
  1458.  
  1459. menu_destroy(menu);
  1460. return PLUGIN_HANDLED;
  1461. }
  1462. public cmdInsertPrice(id)
  1463. {
  1464. new szPrice[8];
  1465. read_args(szPrice, charsmax(szPrice));
  1466. remove_quotes(szPrice);
  1467.  
  1468. new iPrice = str_to_num(szPrice);
  1469. if(!iPrice || iPrice < 0)
  1470. {
  1471. ColorChat(id, "!g%s!nInvalid number, try again!", szTag);
  1472. client_cmd(id, "messagemode Insert_price");
  1473. }
  1474.  
  1475. g_iPrice[id] = iPrice;
  1476. showSkinsToSellMenu(id);
  1477. }
  1478. /* Remove skin from market */
  1479. public showRemoveSkinMenu(id)
  1480. {
  1481. new menu, szText[128], k=0;
  1482.  
  1483. menu = menu_create("\w[ \yCSGO OUTSTANDING \w] Alege skinul pe care doresti sa il retragi", "skinsToRemoveMenuHandler");
  1484. for(new i; i < skinsNum; i++)
  1485. {
  1486. if(g_iSkinsInMarket[id][i])
  1487. {
  1488. formatex(szText, charsmax(szText), "\y%s", g_aSkins[i][Name]);
  1489. menu_additem(menu, szText);
  1490.  
  1491. g_iSkins[id][k++] = i;
  1492. }
  1493. }
  1494.  
  1495. menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
  1496. menu_display(id, menu, 0);
  1497. }
  1498. public skinsToRemoveMenuHandler(id, menu, item)
  1499. {
  1500. if(item == MENU_EXIT)
  1501. {
  1502. cmdShowMarket(id);
  1503. return PLUGIN_HANDLED;
  1504. }
  1505.  
  1506. new szName[32], iSkinID;
  1507.  
  1508. get_user_name(id, szName, charsmax(szName));
  1509. iSkinID = g_iSkins[id][item];
  1510.  
  1511. g_iSkinsInMarket[id][iSkinID] = 0;
  1512. g_iPlayerSkins[id][iSkinID]++;
  1513.  
  1514. ColorChat(0, "!g%s!nJucatorul !g%s !na retras skinul !g%s !ndin market.", szTag, szName, g_aSkins[iSkinID][Name]);
  1515.  
  1516. cmdShowMarket(id);
  1517. return PLUGIN_HANDLED;
  1518. }
  1519. /* Games Menu */
  1520. public showGamesMenu(id)
  1521. {
  1522. new menu, szText[64];
  1523. menu = menu_create("\w[ \yCS:GO OUTSTANDING \w] Meniu de \yjocuri", "gamesMenuHandler");
  1524.  
  1525. formatex(szText, charsmax(szText), "Tombola | \y%d \wPuncte", RAFFLE_COST)
  1526. menu_additem(menu, szText);
  1527.  
  1528. formatex(szText, charsmax(szText), "Coin \yFlip")
  1529. menu_additem(menu, szText);
  1530.  
  1531. menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
  1532. menu_display(id, menu, 0);
  1533. }
  1534. public gamesMenuHandler(id, menu, item)
  1535. {
  1536. if( item == MENU_EXIT )
  1537. {
  1538. menu_destroy(menu);
  1539. return PLUGIN_HANDLED;
  1540. }
  1541.  
  1542. switch(item)
  1543. {
  1544. case 0:
  1545. {
  1546. if(g_iPlayerData[id][Points] < RAFFLE_COST)
  1547. {
  1548. ColorChat(id, "!g%s!nInsuficiente !gpuncte !npentru a juca la tombola", szTag);
  1549. return PLUGIN_HANDLED;
  1550. }
  1551. new szName[32];
  1552. get_user_name(id, szName, charsmax(szName));
  1553.  
  1554. for(new i; i < raffleMembers; i++)
  1555. {
  1556. if(g_iRafflePlayers[i] == id)
  1557. {
  1558. ColorChat(id, "!g%s!nTe-ai inscris deja in tombola runda asta!", szTag);
  1559. return PLUGIN_HANDLED;
  1560. }
  1561. }
  1562.  
  1563. g_iRafflePlayers[raffleMembers++] = id;
  1564. g_iPlayerData[id][Points] -= RAFFLE_COST
  1565. ColorChat(0, "!g%s!nJucatorul !g%s !ns-a inscris in !gtombola!n.Jucatori inscrisi: !g%d!n.", szTag, szName, raffleMembers);
  1566. }
  1567. }
  1568.  
  1569. if( item == MENU_EXIT )
  1570. {
  1571. menu_destroy(menu);
  1572. return PLUGIN_HANDLED;
  1573. }
  1574.  
  1575. switch(item)
  1576. {
  1577. case 1:
  1578. {
  1579. if(user_incoin_challenge[id] > 0) return 1;
  1580.  
  1581. new menu = menu_create("\rCoin Challenge^n\yChoose your stack!", "coin_menu_handle");
  1582.  
  1583. new szText[32]
  1584. formatex(szText, charsmax(szText), "\wChoose your Stack: \r%d$^n^n", user_coin_bet[id])
  1585. menu_additem(menu, szText, "STACK")
  1586. menu_additem(menu, "\rReady!", "STACK")
  1587.  
  1588. menu_display(id, menu)
  1589. return 1;
  1590. }
  1591. }
  1592. }
  1593. /* Round end event */
  1594. public evRoundEnd()
  1595. {
  1596. if(raffleMembers)
  1597. {
  1598. new iRand, szName[32];
  1599.  
  1600. iRand = random(raffleMembers);
  1601. get_user_name(g_iRafflePlayers[iRand], szName, charsmax(szName));
  1602.  
  1603. g_iPlayerData[g_iRafflePlayers[iRand]][Points] += RAFFLE_COST*raffleMembers;
  1604.  
  1605. ColorChat(0, "!g%s!nTombola pe runda aceasta s-a incheiat !", szTag);
  1606. ColorChat(0, "!g%s!nJucatorul !g%s !na avut bulan si a castigat !g%d!n puncte !", szTag, szName, RAFFLE_COST*raffleMembers);
  1607. ColorChat(0, "!g%s!nNu fiti suparati, vorba aia, prost sa fii noroc sa ai !", szTag);
  1608.  
  1609. raffleMembers = 0;
  1610. }
  1611. else
  1612. {
  1613. ColorChat(0, "!g%s!nNiciun jucator !ginscris !nin aceasta runda !", szTag);
  1614. ColorChat(0, "!g%s!nAsteptam extragerea din runda urmatoare !", szTag);
  1615. }
  1616. }
  1617. /* Giving keys when win a round */
  1618. public terroristsWin()
  1619. {
  1620. new iPlayers[32], iNum, id, iRand;
  1621. get_players(iPlayers, iNum, "ae", "TERRORISTS");
  1622.  
  1623. for(new i; i < iNum; i++)
  1624. {
  1625. id = iPlayers[i];
  1626. iRand = random_num(1, 100);
  1627.  
  1628. if(iRand <= DROP_FRAGMENTS_CHANCE)
  1629. {
  1630. g_iPlayerData[id][Fragments]++;
  1631. ColorChat(id, "!g%s!nFelicitari, ai primit un !gfragment !nde cheie !", szTag);
  1632.  
  1633. SaveData(id);
  1634. }
  1635. }
  1636. }
  1637. public ctsWin()
  1638. {
  1639. new iPlayers[32], iNum, id, iRand;
  1640. get_players(iPlayers, iNum, "ae", "CT");
  1641.  
  1642. for(new i; i < iNum; i++)
  1643. {
  1644. id = iPlayers[i];
  1645. iRand = random_num(1, 100);
  1646.  
  1647. if(iRand <= DROP_FRAGMENTS_CHANCE)
  1648. {
  1649. g_iPlayerData[id][Fragments]++;
  1650. ColorChat(id, "!g%s!nFelicitari, ai primit un !gfragment !nde cheie !", szTag);
  1651.  
  1652. SaveData(id);
  1653. }
  1654. }
  1655. }
  1656. public hamAddWeaponToPlayer(ent, id)
  1657. {
  1658. if(!is_valid_ent(ent) || !is_user_connected(id))
  1659. return HAM_IGNORED;
  1660.  
  1661. for (new i; i < skinsNum; i++) {
  1662. if(entity_get_int(ent, EV_INT_WEAPONKEY) == 500+i)
  1663. {
  1664. entity_set_int(ent, EV_INT_WEAPONKEY, 0);
  1665. g_iShowedSkin[id][g_aSkins[i][Type]] = i;
  1666.  
  1667. return HAM_HANDLED;
  1668. }
  1669. }
  1670. return HAM_IGNORED;
  1671. }
  1672. public fwSetModel(entity, model[])
  1673. {
  1674. if(!is_valid_ent(entity))
  1675. return FMRES_IGNORED;
  1676.  
  1677. static szClassName[33];
  1678. entity_get_string(entity, EV_SZ_classname, szClassName, charsmax(szClassName));
  1679.  
  1680. if(!equal(szClassName, "weaponbox"))
  1681. return FMRES_IGNORED;
  1682.  
  1683. static iOwner;
  1684.  
  1685. new szModels[][][] = {
  1686. {"models/w_ak47.mdl", "weapon_ak47" },
  1687. {"models/w_m4a1.mdl", "weapon_m4a1" },
  1688. {"models/w_awp.mdl", "weapon_awp" }
  1689. }
  1690.  
  1691. new iWeapons[] = {
  1692. CSW_AK47,
  1693. CSW_M4A1,
  1694. CSW_AWP
  1695. }
  1696.  
  1697. iOwner = entity_get_edict(entity, EV_ENT_owner);
  1698.  
  1699. for(new i; i < sizeof(szModels); i++)
  1700. if(equal(model, szModels[i][0]))
  1701. {
  1702.  
  1703. static iStoredAugID;
  1704. iStoredAugID = find_ent_by_owner(ENG_NULLENT, szModels[i][1], entity);
  1705.  
  1706. if(!is_valid_ent(iStoredAugID))
  1707. return FMRES_IGNORED;
  1708.  
  1709. entity_set_int(iStoredAugID, EV_INT_WEAPONKEY, 500+g_iShowedSkin[iOwner][iWeapons[i]]);
  1710. entity_set_model(entity, szModels[i][0]);
  1711.  
  1712. return FMRES_SUPERCEDE;
  1713. }
  1714. return FMRES_IGNORED;
  1715. }
  1716. /* Save & Load Data */
  1717. public SaveData(id)
  1718. {
  1719. new iVault = nvault_open("CSGOData2");
  1720.  
  1721. new szName[32], szData[256];
  1722. get_user_name(id, szName, charsmax(szName));
  1723.  
  1724. formatex(szData, charsmax(szData), "%i#%i#%i#%i", g_iPlayerData[id][Points], g_iPlayerData[id][Case], g_iPlayerData[id][Keys], g_iPlayerData[id][Fragments]);
  1725.  
  1726. for(new i; i < skinsNum; i++)
  1727. format(szData, charsmax(szData), "%s#%i", szData, g_iPlayerSkins[id][i]);
  1728.  
  1729. nvault_set(iVault, szName, szData);
  1730.  
  1731. nvault_close(iVault);
  1732. }
  1733. public LoadData(id)
  1734. {
  1735. new iVault = nvault_open("CSGOData2");
  1736.  
  1737. if(iVault == INVALID_HANDLE) {
  1738. log_amx("ERROR: Unable to open vault file %s", "CSGOData2");
  1739. return PLUGIN_HANDLED;
  1740. }
  1741.  
  1742.  
  1743. new szName[32], szData[256], szArg[SKINS_MAX][9], iArg[SKINS_MAX], iTimestamp;
  1744. get_user_name(id, szName, charsmax(szName));
  1745.  
  1746. if(nvault_lookup(iVault, szName, szData, charsmax(szData), iTimestamp))
  1747. {
  1748. /* +4 because we must load points keys case and fragments */
  1749. for(new i; i < skinsNum + 4; i ++)
  1750. {
  1751. strtok(szData, szArg[i], charsmax(szArg[]), szData, charsmax(szData), '#');
  1752. iArg[i] = str_to_num(szArg[i]);
  1753. }
  1754.  
  1755. g_iPlayerData[id][Points] = iArg[0];
  1756. g_iPlayerData[id][Case] = iArg[1];
  1757. g_iPlayerData[id][Keys] = iArg[2];
  1758. g_iPlayerData[id][Fragments] = iArg[3];
  1759.  
  1760. for(new i; i < skinsNum; i++)
  1761. g_iPlayerSkins[id][i] = iArg[i+4]; /* +4 because we loaded points keys case and fragments */
  1762. }
  1763. else
  1764. {
  1765. g_iPlayerData[id][Points] = 15;
  1766. g_iPlayerData[id][Case] = 1;
  1767. g_iPlayerData[id][Keys] = 1;
  1768. g_iPlayerData[id][Fragments] = 0;
  1769.  
  1770. for(new i; i < skinsNum; i++)
  1771. g_iPlayerSkins[id][i] = 0;
  1772. }
  1773. nvault_close(iVault);
  1774. return PLUGIN_CONTINUE;
  1775. }
  1776. /* Save & Load Market */
  1777. public SaveMarket(id)
  1778. {
  1779. new iVault = nvault_open("CSGOMarket");
  1780.  
  1781. new szName[32], szData[256];
  1782. get_user_name(id, szName, charsmax(szName));
  1783.  
  1784. for(new i; i < skinsNum; i++)
  1785. format(szData, charsmax(szData), "%s#%i", szData, g_iSkinsInMarket[id][i]);
  1786.  
  1787. nvault_set(iVault, szName, szData);
  1788.  
  1789. nvault_close(iVault);
  1790. }
  1791. public LoadMarket(id)
  1792. {
  1793. new iVault = nvault_open("CSGOMarket");
  1794.  
  1795. new szName[32], szData[256], szArg[SKINS_MAX][9], iArg[SKINS_MAX];
  1796. get_user_name(id, szName, charsmax(szName));
  1797.  
  1798. nvault_get(iVault, szName, szData, charsmax(szData));
  1799.  
  1800. for(new i; i < skinsNum; i ++)
  1801. {
  1802. strtok(szData, szArg[i], charsmax(szArg[]), szData, charsmax(szData), '#');
  1803. iArg[i] = str_to_num(szArg[i]);
  1804. }
  1805. for(new i; i < skinsNum; i++)
  1806. g_iSkinsInMarket[id][i] = iArg[i];
  1807. nvault_close(iVault);
  1808. }
  1809. /* ColorChat */
  1810. stock ColorChat(const id,const input[], any:...) {
  1811. new iNum = 1, iPlayers[32];
  1812. static szMessage[191];
  1813. vformat(szMessage, charsmax(szMessage),input, 3);
  1814.  
  1815. replace_all(szMessage, charsmax(szMessage), "!g", "^4");
  1816. replace_all(szMessage, charsmax(szMessage), "!n", "^1");
  1817. replace_all(szMessage, charsmax(szMessage), "!t", "^3");
  1818.  
  1819. if(id) iPlayers[0] = id;
  1820. else get_players(iPlayers, iNum, "ch");
  1821.  
  1822. for(new i = 0; i < iNum; i++)
  1823. {
  1824. if(is_user_connected(iPlayers[i]))
  1825. {
  1826. message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, iPlayers[i]);
  1827. write_byte(iPlayers[i]);
  1828. write_string(szMessage);
  1829. message_end();
  1830. }
  1831. }
  1832. }
  1833. // Get Weapon Entity's Owner
  1834. stock fm_cs_get_weapon_ent_owner(ent)
  1835. {
  1836. // Prevent server crash if entity's private data not initalized
  1837. if (pev_valid(ent) != 2) return -1;
  1838.  
  1839. return get_pdata_cbase(ent, 41, 4);
  1840. }
  1841. stock user_have_skins(id) {
  1842. new ok = 0;
  1843. for (new i; i < skinsNum; i++) {
  1844. if (g_iPlayerSkins[id][i] > 0) {
  1845. ok = 1;
  1846. }
  1847. }
  1848. return ok;
  1849. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement