SHARE
TWEET

Untitled

a guest Apr 23rd, 2019 105 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top