Advertisement
Guest User

lol

a guest
Oct 30th, 2017
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 66.61 KB | None | 0 0
  1. #include <amxmodx>
  2. #include <amxmisc>
  3. //#include <reapi>
  4. #include <engine>
  5. #include <sqlx>
  6. #include <fakemeta>
  7. #include <fun>
  8. #include <cstrike>
  9. #include <hamsandwich>
  10. #include <xs>
  11.  
  12. /* ColorChat Support */
  13. #define NORMAL DontChange
  14. #define GREEN DontChange
  15. #define TEAM_COLOR DontChange
  16. #define RED Red
  17. #define BLUE Blue
  18. #define GREY Grey
  19. #define ColorChat client_print_color
  20. /* ColorChat Support */
  21.  
  22. enum _:Colors {
  23.     DontChange,
  24.     Red,
  25.     Blue,
  26.     Grey
  27. }
  28.  
  29. stock const g_szTeamName[Colors][] =
  30. {
  31.     "UNASSIGNED",
  32.     "TERRORIST",
  33.     "CT",
  34.     "SPECTATOR"
  35. }
  36.  
  37. stock client_print_color(id, iColor=DontChange, const szMsg[], any:...)
  38. {
  39.     // check if id is different from 0
  40.     if( id && !is_user_connected(id) )
  41.     {
  42.         return 0;
  43.     }
  44.  
  45.     if( iColor > Grey )
  46.     {
  47.         iColor = DontChange;
  48.     }
  49.  
  50.     new szMessage[192];
  51.     if( iColor == DontChange )
  52.     {
  53.         szMessage[0] = 0x04;
  54.     }
  55.     else
  56.     {
  57.         szMessage[0] = 0x03;
  58.     }
  59.  
  60.     new iParams = numargs();
  61.     // Specific player code
  62.     if(id)
  63.     {
  64.         if( iParams == 3 )
  65.         {
  66.             copy(szMessage[1], charsmax(szMessage)-1, szMsg);
  67.         }
  68.         else
  69.         {
  70.             vformat(szMessage[1], charsmax(szMessage)-1, szMsg, 4);
  71.         }
  72.  
  73.         if( iColor )
  74.         {
  75.             new szTeam[11]; // store current team so we can restore it
  76.             get_user_team(id, szTeam, charsmax(szTeam));
  77.  
  78.             // set id TeamInfo in consequence
  79.             // so SayText msg gonna show the right color
  80.             Send_TeamInfo(id, id, g_szTeamName[iColor]);
  81.  
  82.             // Send the message
  83.             Send_SayText(id, id, szMessage);
  84.  
  85.             // restore TeamInfo
  86.             Send_TeamInfo(id, id, szTeam);
  87.         }
  88.         else
  89.         {
  90.             Send_SayText(id, id, szMessage);
  91.         }
  92.     }
  93.  
  94.     // Send message to all players
  95.     else
  96.     {
  97.         // Figure out if at least 1 player is connected
  98.         // so we don't send useless message if not
  99.         // and we gonna use that player as team reference (aka SayText message sender) for color change
  100.         new iPlayers[32], iNum;
  101.         get_players(iPlayers, iNum, "ch");
  102.         if( !iNum )
  103.         {
  104.             return 0;
  105.         }
  106.  
  107.         new iFool = iPlayers[0];
  108.  
  109.         new iMlNumber, i, j;
  110.         new Array:aStoreML = ArrayCreate();
  111.         if( iParams >= 5 ) // ML can be used
  112.         {
  113.             for(j=4; j<iParams; j++)
  114.             {
  115.                 // retrieve original param value and check if it's LANG_PLAYER value
  116.                 if( getarg(j) == LANG_PLAYER )
  117.                 {
  118.                     i=0;
  119.                     // as LANG_PLAYER == -1, check if next parm string is a registered language translation
  120.                     while( ( szMessage[ i ] = getarg( j + 1, i++ ) ) ) {}
  121.                     if( GetLangTransKey(szMessage) != TransKey_Bad )
  122.                     {
  123.                         // Store that arg as LANG_PLAYER so we can alter it later
  124.                         ArrayPushCell(aStoreML, j++);
  125.  
  126.                         // Update ML array saire so we'll know 1st if ML is used,
  127.                         // 2nd how many args we have to alterate
  128.                         iMlNumber++;
  129.                     }
  130.                 }
  131.             }
  132.         }
  133.  
  134.         // If arraysize == 0, ML is not used
  135.         // we can only send 1 MSG_BROADCAST message
  136.         if( !iMlNumber )
  137.         {
  138.             if( iParams == 3 )
  139.             {
  140.                 copy(szMessage[1], charsmax(szMessage)-1, szMsg);
  141.             }
  142.             else
  143.             {
  144.                 vformat(szMessage[1], charsmax(szMessage)-1, szMsg, 4);
  145.             }
  146.  
  147.             if( iColor )
  148.             {
  149.                 new szTeam[11];
  150.                 get_user_team(iFool, szTeam, charsmax(szTeam));
  151.                 Send_TeamInfo(0, iFool, g_szTeamName[iColor]);
  152.                 Send_SayText(0, iFool, szMessage);
  153.                 Send_TeamInfo(0, iFool, szTeam);
  154.             }
  155.             else
  156.             {
  157.                 Send_SayText(0, iFool, szMessage);
  158.             }
  159.         }
  160.  
  161.         // ML is used, we need to loop through all players,
  162.         // format text and send a MSG_ONE_UNRELIABLE SayText message
  163.         else
  164.         {
  165.             new szTeam[11], szFakeTeam[10];
  166.            
  167.             if( iColor )
  168.             {
  169.                 get_user_team(iFool, szTeam, charsmax(szTeam));
  170.                 copy(szFakeTeam, charsmax(szFakeTeam), g_szTeamName[iColor]);
  171.             }
  172.  
  173.             for( i = 0; i < iNum; i++ )
  174.             {
  175.                 id = iPlayers[i];
  176.  
  177.                 for(j=0; j<iMlNumber; j++)
  178.                 {
  179.                     // Set all LANG_PLAYER args to player index ( = id )
  180.                     // so we can format the text for that specific player
  181.                     setarg(ArrayGetCell(aStoreML, j), _, id);
  182.                 }
  183.  
  184.                 // format string for specific player
  185.                 vformat(szMessage[1], charsmax(szMessage)-1, szMsg, 4);
  186.  
  187.                 if( iColor )
  188.                 {
  189.                     Send_TeamInfo(id, iFool, szFakeTeam);
  190.                     Send_SayText(id, iFool, szMessage);
  191.                     Send_TeamInfo(id, iFool, szTeam);
  192.                 }
  193.                 else
  194.                 {
  195.                     Send_SayText(id, iFool, szMessage);
  196.                 }
  197.             }
  198.             ArrayDestroy(aStoreML);
  199.         }
  200.     }
  201.     return 1;
  202. }
  203.  
  204. stock Send_TeamInfo(iReceiver, iPlayerId, szTeam[])
  205. {
  206.     static iTeamInfo = 0;
  207.     if( !iTeamInfo )
  208.     {
  209.         iTeamInfo = get_user_msgid("TeamInfo");
  210.     }
  211.     message_begin(iReceiver ? MSG_ONE_UNRELIABLE : MSG_BROADCAST, iTeamInfo, .player=iReceiver);
  212.     write_byte(iPlayerId);
  213.     write_string(szTeam);
  214.     message_end();
  215. }
  216.  
  217. stock Send_SayText(iReceiver, iPlayerId, szMessage[])
  218. {
  219.     static iSayText = 0;
  220.     if( !iSayText )
  221.     {
  222.         iSayText = get_user_msgid("SayText");
  223.     }
  224.     message_begin(iReceiver ? MSG_ONE_UNRELIABLE : MSG_BROADCAST, iSayText, .player=iReceiver);
  225.     write_byte(iPlayerId);
  226.     write_string(szMessage);
  227.     message_end();
  228. }
  229.  
  230. stock register_dictionary_colored(const filename[])
  231. {
  232.     if( !register_dictionary(filename) )
  233.     {
  234.         return 0;
  235.     }
  236.  
  237.     new szFileName[256];
  238.     get_localinfo("amxx_datadir", szFileName, charsmax(szFileName));
  239.     format(szFileName, charsmax(szFileName), "%s/lang/%s", szFileName, filename);
  240.     new fp = fopen(szFileName, "rt");
  241.     if( !fp )
  242.     {
  243.         log_amx("Failed to open %s", szFileName);
  244.         return 0;
  245.     }
  246.  
  247.     new szBuffer[512], szLang[3], szKey[64], szTranslation[256], TransKey:iKey;
  248.  
  249.     while( !feof(fp) )
  250.     {
  251.         fgets(fp, szBuffer, charsmax(szBuffer));
  252.         trim(szBuffer);
  253.  
  254.         if( szBuffer[0] == '[' )
  255.         {
  256.             strtok(szBuffer[1], szLang, charsmax(szLang), szBuffer, 1, ']');
  257.         }
  258.         else if( szBuffer[0] )
  259.         {
  260.             strbreak(szBuffer, szKey, charsmax(szKey), szTranslation, charsmax(szTranslation));
  261.             iKey = GetLangTransKey(szKey);
  262.             if( iKey != TransKey_Bad )
  263.             {
  264.                 while( replace(szTranslation, charsmax(szTranslation), "!g", "^4") ){}
  265.                 while( replace(szTranslation, charsmax(szTranslation), "!t", "^3") ){}
  266.                 while( replace(szTranslation, charsmax(szTranslation), "!n", "^1") ){}
  267.                 AddTranslation(szLang, iKey, szTranslation[2]);
  268.             }
  269.         }
  270.     }
  271.    
  272.     fclose(fp);
  273.     return 1;
  274. }
  275.  
  276. new const PLUGIN[] = "Global Offensive";
  277. new const VERSION[] = "2.15";
  278. new const AUTHOR[] = "DeRoiD";
  279. new const Prefix[] = "[SwordGaming]";
  280.  
  281. new SQL_Host[32], SQL_Database[32], SQL_User[32], SQL_Password[32];
  282. new Handle:SQL_TUPLE;
  283. new ServerLoaded;
  284.  
  285. new const SkinFolder[] = "[SG]-GlobalOffensive/";
  286. new const DSkinFolder[] = "[SG]-GlobalOffensive/default/";
  287.  
  288. #define MAXP 32 + 1
  289. #define MAXWP 120 + 1
  290.  
  291. #define MAXCASES 6
  292. #define MAXKNIFESKINS 30 + 1
  293. #define MAXTRADEINSAMETIME 5
  294.  
  295. #define RARE 4
  296. #define COVERT 3
  297. #define RESTRICTED 2
  298. #define COMMON 1
  299.  
  300. #pragma semicolon 1
  301.  
  302. new Weapons[MAXP][MAXWP], SkinDataTrade[MAXWP][32], inUse[MAXP][4], Dollars[MAXP], Cases[MAXP][MAXCASES+1], Keys[MAXP], Name[MAXP][32],
  303. TradeFounding[MAXP], inTrade[MAXP], TradeID[MAXP], TradePiece[MAXP], TradeItem[MAXP], TradeDollars[MAXP],
  304. TradePartner[MAXP], Accept[MAXP], MarketDollar[MAXP], MarketItem[MAXP], InMarket[MAXP], bool:Logined[MAXP],
  305. User[MAXP][32], Password[MAXP][32], Found[MAXP], UserLoad[MAXP], RegisterMod[MAXP], inProgress[MAXP],
  306. UserID[MAXP], Activity[MAXP], Choosen[MAXP], CurrentRank[MAXP], Kills[MAXP];
  307.  
  308. new dSync;
  309.  
  310. new CvarHost, CvarDatabase, CvarUser, CvarPassword, CvarFoundCase, CvarFoundKey, CvarMinDollarDrop,
  311. CvarMaxDollarDrop, CvarMinDollarMarket, CvarMaxDollarMarket, CvarSkinCheck, CvarMenuButton, CvarWeaponMenu, CvarGiveSmokeGrenade;
  312. new MinDollarMarket, MaxDollarMarket, MinDollarDrop, MaxDollarDrop, FoundKeyChance, FoundCasesChance, GiveSmokeGrenade;
  313. new PendingTrade, PTradeId[MAXP];
  314.  
  315. new const AnimationIDs[][] =
  316. {
  317.     { 0, 0, 0 },
  318.     { 6, 0, 1 },
  319.     { 0, 0, 0 },
  320.     { 0, 0, 0 },
  321.     { 0, 0, 0 },
  322.     { 0, 0, 0 },
  323.     { 0, 0, 0 },
  324.     { 0, 0, 0 },
  325.     { 0, 0, 0 },
  326.     { 0, 0, 0 },
  327.     { 6, 0, 1 },
  328.     { 0, 0, 0 },
  329.     { 0, 0, 0 },
  330.     { 0, 0, 0 },
  331.     { 6, 0, 1 },
  332.     { 6, 0, 1 },
  333.     { 16, 17, 2 },
  334.     { 13, 0, 2 },
  335.     { 6, 0, 1 },
  336.     { 6, 0, 1 },
  337.     { 0, 0, 0 },
  338.     { 0, 0, 0 },
  339.     { 15, 14, 1 },
  340.     { 0, 0, 0 },
  341.     { 0, 0, 0 },
  342.     { 0, 0, 0 },
  343.     { 6, 0, 2 },
  344.     { 0, 0, 0 },
  345.     { 6, 0, 1 },
  346.     { 8, 0, 3 },
  347.     { 0, 0, 0 },
  348.     { 0, 0, 0 },
  349.     { 0, 0, 0 }
  350. };
  351.  
  352. new const DropData[][] =
  353. {
  354.     { 0, 00, 00, 00, 00, 00, 00, 00, 00, 00, 0000 },
  355.     { 0, 01, 11, 21, 33, 43, 53, 65, 75, 85, 0000 },
  356.     { 0, 31, 41, 51, 83, 73, 63, 35, 45, 55, 0000 },
  357.     { 1, 81, 71, 61, 13, 23, 03, 25, 15, 05, 0004 },
  358.     { 1, 02, 12, 22, 34, 44, 54, 66, 76, 86, 0008 },
  359.     { 1, 32, 42, 52, 84, 74, 64, 36, 46, 56, 0010 },
  360.     { 1, 82, 72, 62, 14, 24, 04, 26, 16, 06, 0020 }
  361. };
  362.  
  363. new const DefaultModels[][][] = {
  364.     { "", "" },
  365.     { "", "" },
  366.     { "", "" },
  367.     { "", "" },
  368.     { "HE.mdl", "weapon_hegrenade" },
  369.     { "", "" },
  370.     { "C4.mdl", "weapon_c4" },
  371.     { "", "" },
  372.     { "", "" },
  373.     { "", "" },
  374.     { "", "" },
  375.     { "", "" },
  376.     { "", "" },
  377.     { "", "" },
  378.     { "Galil.mdl", "weapon_galil" },
  379.     { "Famas.mdl", "weapon_famas" },
  380.     { "USP-S.mdl", "weapon_usp" },
  381.     { "Glock.mdl", "weapon_glock18" },
  382.     { "AWP.mdl", "weapon_awp" },
  383.     { "MP7.mdl", "weapon_mp5navy" },
  384.     { "", "" },
  385.     { "", "" },
  386.     { "M4A4.mdl", "weapon_m4a1" },
  387.     { "", "" },
  388.     { "", "" },
  389.     { "FLASH.mdl", "weapon_flashbang" },
  390.     { "Deagle.mdl", "weapon_deagle" },
  391.     { "", "" },
  392.     { "AK47.mdl", "weapon_ak47" },
  393.     { "Knife.mdl", "weapon_knife" },
  394.     { "", "" },
  395.     { "", "" },
  396.     { "", "" }
  397. };
  398.  
  399. new const RareData[][] =
  400. {
  401.     "",
  402.     "\d",
  403.     "\w",
  404.     "\r",
  405.     "\y"
  406. };
  407.  
  408. new const SkinData[][][] =
  409. {
  410.     { "Name", "VMODEL", "PMODEL", 0, 0 },
  411.     { "AK-47 | Outlaw", "ak47/Outlaw", "", CSW_AK47, COMMON },
  412.     { "AK-47 | Aquamarine Revenge", "ak47/Aquamarine", "", CSW_AK47, COMMON },
  413.     { "AK-47 | Jaguar", "ak47/Jaguar", "", CSW_AK47, RESTRICTED },
  414.     { "AK-47 | Vulcan", "ak47/Vulcan", "", CSW_AK47, RESTRICTED },
  415.     { "AK-47 | Wasteland Rebel", "ak47/Wasteland", "", CSW_AK47, COVERT },
  416.     { "AK-47 | Fireserpent", "ak47/Fireserpent", "", CSW_AK47, COVERT },
  417.     { "", "AK47/", "", CSW_AK47, 0 },
  418.     { "", "AK47/", "", CSW_AK47, 0 },
  419.     { "", "AK47/", "", CSW_AK47, 0 },
  420.     { "", "AK47/", "", CSW_AK47, 0 },
  421.     { "AWP | Worm God", "awp/WormGod", "", CSW_AWP, COMMON },
  422.     { "AWP | Man'o'war", "awp/Manowar", "", CSW_AWP, COMMON },
  423.     { "AWP | Redline", "awp/Redline", "", CSW_AWP, RESTRICTED },
  424.     { "AWP | Hyper Beast", "awp/HBeast", "", CSW_AWP, RESTRICTED },
  425.     { "AWP | Asiimov", "awp/Asiimov", "", CSW_AWP, COVERT },
  426.     { "AWP | Dragon Lore", "awp/DragonLore", "", CSW_AWP, COVERT },
  427.     { "", "AWP/", "", CSW_AWP, 0 },
  428.     { "", "AWP/", "", CSW_AWP, 0 },
  429.     { "", "AWP/", "", CSW_AWP, 0 },
  430.     { "", "AWP/", "", CSW_AWP, 0 },
  431.     { "M4A4 | Griffin", "m4a1/Griffin", "", CSW_M4A1, COMMON },
  432.     { "M4A4 | Bullet Rain", "m4a1/BulletRain", "", CSW_M4A1, COMMON },
  433.     { "M4A4 | Dragon King", "m4a1/DragonKing", "", CSW_M4A1, RESTRICTED },
  434.     { "M4A4 | Asiimov", "m4a1/Asiimov", "", CSW_M4A1, RESTRICTED },
  435.     { "M4A4 | Poseidon", "m4a1/Poseidon", "", CSW_M4A1, COVERT },
  436.     { "M4A4 | Howl", "m4a1/Howl", "", CSW_M4A1, COVERT },
  437.     { "", "m4a4/", "", CSW_M4A1, 0 },
  438.     { "", "m4a4/", "", CSW_M4A1, 0 },
  439.     { "", "m4a4/", "", CSW_M4A1, 0 },
  440.     { "", "m4a4/", "", CSW_M4A1, 0 },
  441.     { "FAMAS | Blue Way", "famas/BlueWay", "", CSW_FAMAS, COMMON },
  442.     { "FAMAS | Nuclear", "famas/Nuclear", "", CSW_FAMAS, COMMON },
  443.     { "FAMAS | Vanquish", "famas/Vanquish", "", CSW_FAMAS, RESTRICTED },
  444.     { "FAMAS | Biohazard", "famas/Biohazard", "", CSW_FAMAS, RESTRICTED },
  445.     { "FAMAS | Pulse", "famas/Pulse", "", CSW_FAMAS, COVERT },
  446.     { "FAMAS | Spitfire", "famas/Spitfire", "", CSW_FAMAS, COVERT },
  447.     { "", "famas/", "", CSW_FAMAS, 0 },
  448.     { "", "famas/", "", CSW_FAMAS, 0 },
  449.     { "", "famas/", "", CSW_FAMAS, 0 },
  450.     { "", "famas/", "", CSW_FAMAS, 0 },
  451.     { "GALIL-AR | Crimson Web", "galil/CrimsonWeb", "", CSW_GALIL, COMMON },
  452.     { "GALIL-AR | Blue Way", "galil/BlueWay", "", CSW_GALIL, COMMON },
  453.     { "GALIL-AR | Eco", "galil/Eco", "", CSW_GALIL, RESTRICTED },
  454.     { "GALIL-AR | Odyssy", "galil/Odyssy", "", CSW_GALIL, RESTRICTED },
  455.     { "GALIL-AR | Cerberus", "galil/Cerberus", "", CSW_GALIL, COVERT },
  456.     { "GALIL-AR | Chatterbox", "galil/Chatterbox", "", CSW_GALIL, COVERT },
  457.     { "", "galil/", "", CSW_GALIL, 0 },
  458.     { "", "galil/", "", CSW_GALIL, 0 },
  459.     { "", "galil/", "", CSW_GALIL, 0 },
  460.     { "", "galil/", "", CSW_GALIL, 0 },
  461.     { "MP7 | Blood", "mp5/Blood", "", CSW_MP5NAVY, COMMON },
  462.     { "MP7 | Now Purple!", "mp5/NowPurple", "", CSW_MP5NAVY, COMMON },
  463.     { "MP7 | Rising Sun", "mp5/RisingSun", "", CSW_MP5NAVY, RESTRICTED },
  464.     { "MP7 | Seaweed", "mp5/Seaweed", "", CSW_MP5NAVY, RESTRICTED },
  465.     { "MP7 | Carbonite", "mp5/Carbonite", "", CSW_MP5NAVY, COVERT },
  466.     { "MP7 | Urbanhazard", "mp5/UrbanHazard", "", CSW_MP5NAVY, COVERT },
  467.     { "", "mp5/", "", CSW_MP5NAVY, 0 },
  468.     { "", "mp5/", "", CSW_MP5NAVY, 0 },
  469.     { "", "mp5/", "", CSW_MP5NAVY, 0 },
  470.     { "", "mp5/", "", CSW_MP5NAVY, 0 },
  471.     { "USP-S | Stainless", "usp/Stainless", "", CSW_USP, COMMON },
  472.     { "USP-S | Vertex", "usp/Vertex", "", CSW_USP, COMMON },
  473.     { "USP-S | Caiman", "usp/Caiman", "", CSW_USP, RESTRICTED },
  474.     { "USP-S | Road Rash", "usp/Rash", "", CSW_USP, RESTRICTED },
  475.     { "USP-S | Orion", "usp/Orion", "", CSW_USP, COVERT },
  476.     { "USP-S | Kill Confirmed", "usp/KConfirmed", "", CSW_USP, COVERT },
  477.     { "", "usp/", "", CSW_USP, 0 },
  478.     { "", "usp/", "", CSW_USP, 0 },
  479.     { "", "usp/", "", CSW_USP, 0 },
  480.     { "", "usp/", "", CSW_USP, 0 },
  481.     { "DEAGLE | Engraved", "deagle/Engraved", "", CSW_DEAGLE, COMMON },
  482.     { "DEAGLE | Golden Rose", "deagle/GoldenRose", "", CSW_DEAGLE, COMMON },
  483.     { "DEAGLE | Biohazard", "deagle/Biohazard", "", CSW_DEAGLE, RESTRICTED },
  484.     { "DEAGLE | Jungle", "deagle/Jungle", "", CSW_DEAGLE, RESTRICTED },
  485.     { "DEAGLE | Hypnotic", "deagle/Hypnotic", "", CSW_DEAGLE, COVERT },
  486.     { "DEAGLE | Blaze", "deagle/Blaze", "", CSW_DEAGLE, COVERT },
  487.     { "", "deagle/", "", CSW_DEAGLE, 0 },
  488.     { "", "deagle/", "", CSW_DEAGLE, 0 },
  489.     { "", "deagle/", "", CSW_DEAGLE, 0 },
  490.     { "", "deagle/", "", CSW_DEAGLE, 0 },
  491.     { "GLOCK-18 | Candy Apple", "glock/Candy", "", CSW_GLOCK18, COMMON },
  492.     { "GLOCK-18 | Green Way", "glock/GreenWay", "", CSW_GLOCK18, COMMON },
  493.     { "GLOCK-18 | Catacombs", "glock/Catacombs", "", CSW_GLOCK18, RESTRICTED },
  494.     { "GLOCK-18 | Grinder", "glock/Grinder", "", CSW_GLOCK18, RESTRICTED },
  495.     { "GLOCK-18 | Water Elemental", "glock/WaterElemental", "", CSW_GLOCK18, COVERT },
  496.     { "GLOCK-18 | Fade", "glock/Fade", "", CSW_GLOCK18, COVERT },
  497.     { "", "glock/", "", CSW_GLOCK18, 0 },
  498.     { "", "glock/", "", CSW_GLOCK18, 0 },
  499.     { "", "glock/", "", CSW_GLOCK18, 0 },
  500.     { "", "glock/", "", CSW_GLOCK18, 0 },
  501.     { "Karambit | Doppler Ocean", "knife/DopplerOcean_K", "", CSW_KNIFE, RARE },
  502.     { "Karambit | Doppler Pink", "knife/DopplerPink_K", "", CSW_KNIFE, RARE },
  503.     { "Karambit | Crimson Web", "knife/Crimson_K", "", CSW_KNIFE, RARE },
  504.     { "Butterfly Knife | Sea", "knife/Sea_BF", "", CSW_KNIFE, RARE },
  505.     { "Butterfly Knife | Hawaiian", "knife/Hawaiian_BF", "", CSW_KNIFE, RARE },
  506.     { "Butterfly Knife | Crimson Web", "knife/Crimson_BF", "", CSW_KNIFE, RARE },
  507.     { "Bayonet M9 | Fade", "knife/Fade_B", "", CSW_KNIFE, RARE },
  508.     { "Bayonet M9 | Doppler Sapphire", "knife/Sapphire_B", "", CSW_KNIFE, RARE },
  509.     { "Bayonet | Space", "knife/Space_B", "", CSW_KNIFE, RARE },
  510.     { "Gut Knife | Asiimov", "knife/Asiimov_GUT", "", CSW_KNIFE, RARE },
  511.     { "Gut Knife | Doppler", "knife/Doppler_GUT", "", CSW_KNIFE, RARE },
  512.     { "Gut Knife | Razer", "knife/Razer_GUT", "", CSW_KNIFE, RARE },
  513.     { "Flip Knife | ROG", "knife/ROG_FL", "", CSW_KNIFE, RARE },
  514.     { "Flip Knife | Fade", "knife/Fade_FL", "", CSW_KNIFE, RARE },
  515.     { "Flip Knife | Marble Fade", "knife/MarbleFade_FL", "", CSW_KNIFE, RARE },
  516.     { "Shadow Daggers", "knife/Def_SD", "", CSW_KNIFE, RARE },
  517.     { "Shadow Daggers | Magma", "knife/Magma_SD", "", CSW_KNIFE, RARE },
  518.     { "Shadow Daggers | Rainbow", "knife/Rainbow_SD", "", CSW_KNIFE, RARE },
  519.     { "Falchion Knife | Orange", "knife/Orange_F", "", CSW_KNIFE, RARE },
  520.     { "Falchion Knife | Diamond", "knife/Diamond_F", "", CSW_KNIFE, RARE },
  521.     { "Falchion Knife", "knife/Def_F", "", CSW_KNIFE, RARE },
  522.     { "Huntsman Knife | Fade", "knife/Fade_HM", "", CSW_KNIFE, RARE },
  523.     { "Huntsman Knife | Crimson Web", "knife/Crimson_HM", "", CSW_KNIFE, RARE },
  524.     { "Huntsman Knife | Slaughter", "knife/Slaughter_HM", "", CSW_KNIFE, RARE },
  525.     { "", "knife/", "", CSW_KNIFE, 0 },
  526.     { "", "knife/", "", CSW_KNIFE, 0 },
  527.     { "", "knife/", "", CSW_KNIFE, 0 },
  528.     { "", "knife/", "", CSW_KNIFE, 0 },
  529.     { "", "knife/", "", CSW_KNIFE, 0 },
  530.     { "", "knife/", "", CSW_KNIFE, 0 }
  531. };
  532.  
  533. new const KeyName[] = "Key";
  534.  
  535. new const Case_Data[][][] =
  536. {
  537.     { "Case Name", "Found Num 0.1-100.0%" }, //Last must be 1
  538.     { "Chroma Case", 1000 }, //First must be 1000
  539.     { "Chroma 2 Case", 1025 },
  540.     { "Chroma 3 Case", 0380 },
  541.     { "Gamma Case", 0105 },
  542.     { "Gamma 2 Case", 0017 },
  543.     { "Falchion Case", 0009 }
  544. };
  545.  
  546. new const FirstWeaponNames[][][] =
  547. {
  548.     { "", "", 0 },
  549.     { "AK47", "weapon_ak47", CSW_AK47 },
  550.     { "M4A4", "weapon_m4a1", CSW_M4A1 },
  551.     { "AWP", "weapon_awp", CSW_AWP },
  552.     { "FAMAS", "weapon_famas", CSW_FAMAS },
  553.     { "MP5", "weapon_mp5navy", CSW_MP5NAVY },
  554.     { "GALIL", "weapon_galil", CSW_GALIL }
  555. };
  556.  
  557. new const SecondaryWeaponNames[][][] =
  558. {
  559.     { "", "", 0 },
  560.     { "DEAGLE", "weapon_deagle", CSW_DEAGLE },
  561.     { "USP", "weapon_usp", CSW_USP },
  562.     { "GLOCK-18", "weapon_glock18", CSW_GLOCK18 }
  563. };
  564.  
  565. new const Ranks[][] =
  566. {
  567.     "",
  568.     "Silver I",
  569.     "Silver II",
  570.     "Silver III",
  571.     "Silver IV",
  572.     "Silver Elite",
  573.     "Silver Elite Master",
  574.     "Gold Nova I",
  575.     "Gold Nova II",
  576.     "Gold Nova III",
  577.     "Gold Nova Master",
  578.     "Master Guardian I",
  579.     "Master Guardian II",
  580.     "Master Guardian Elite",
  581.     "Distinguished Master Guardian",
  582.     "Legendary Eagle",
  583.     "Legendary Eagle Master",
  584.     "Supreme Master First Class",
  585.     "Global Elite",
  586.     ""
  587. };
  588.  
  589. new const RankKills[] =
  590. {
  591.     0,
  592.     0,
  593.     25,
  594.     100,
  595.     250,
  596.     750,
  597.     1000,
  598.     1500,
  599.     2250,
  600.     3000,
  601.     3900,
  602.     4900,
  603.     5900,
  604.     7000,
  605.     8500,
  606.     10000,
  607.     15000,
  608.     22000,
  609.     30000,
  610.     40000,
  611.     0
  612. };
  613.  
  614. public plugin_precache()
  615. {
  616.     new Mdl[96];
  617.    
  618.     for(new i = 1; i < sizeof(SkinData); i++)
  619.     {
  620.         if(strlen(SkinData[i][0]) > 1)
  621.         {
  622.             formatex(Mdl, charsmax(Mdl), "models/%s%s.mdl", SkinFolder, SkinData[i][1]);
  623.             precache_model(Mdl);
  624.         }
  625.        
  626.         if(strlen(SkinData[i][2]) > 1)
  627.         {
  628.             formatex(Mdl, charsmax(Mdl), "models/%s%s.mdl", SkinFolder, SkinData[i][2]);
  629.             precache_model(Mdl);
  630.         }
  631.     }
  632.    
  633.     for(new i = 1; i < sizeof(DefaultModels); i++)
  634.     {
  635.         if(strlen(DefaultModels[i][0]) > 1)
  636.         {
  637.             formatex(Mdl, charsmax(Mdl), "models/%s%s", DSkinFolder, DefaultModels[i][0]);
  638.             precache_model(Mdl);
  639.         }
  640.     }
  641. }
  642.  
  643. public plugin_end()
  644. {
  645.     SQL_FreeHandle(SQL_TUPLE);
  646. }
  647.  
  648. public plugin_init()
  649. {
  650.     for(new i; i < MAXWP; i++)
  651.     {
  652.         copy(SkinDataTrade[i], 31, SkinData[i][0]);
  653.     }
  654.    
  655.     register_plugin(PLUGIN, VERSION, AUTHOR);
  656.     register_cvar(PLUGIN, VERSION, FCVAR_SERVER);
  657.     register_dictionary("csgov2.txt");
  658.    
  659.     CvarHost = register_cvar("csgo_host", "127.0.0.1");
  660.     CvarDatabase = register_cvar("csgo_db", "mysql");
  661.     CvarUser = register_cvar("csgo_user", "root");
  662.     CvarPassword = register_cvar("csgo_pw", "FFBFHCSET");
  663.    
  664.     get_pcvar_string(CvarHost, SQL_Host, charsmax(SQL_Host));
  665.     get_pcvar_string(CvarDatabase, SQL_Database, charsmax(SQL_Database));
  666.     get_pcvar_string(CvarUser, SQL_User, charsmax(SQL_User));
  667.     get_pcvar_string(CvarPassword, SQL_Password, charsmax(SQL_Password));
  668.  
  669.     CvarFoundCase = register_cvar("csgo_casefound", "10");
  670.     CvarFoundKey = register_cvar("csgo_keyfound", "7");
  671.     CvarMinDollarDrop = register_cvar("csgo_minddrop", "0");
  672.     CvarMaxDollarDrop = register_cvar("csgo_maxddrop", "2");
  673.     CvarMinDollarMarket = register_cvar("csgo_minmarketd", "5");
  674.     CvarMaxDollarMarket = register_cvar("csgo_maxmarketd", "1000000");
  675.     CvarSkinCheck = register_cvar("csgo_scheck", "1");
  676.     CvarMenuButton = register_cvar("csgo_mbutton", "1");
  677.     CvarWeaponMenu = register_cvar("csgo_wpmenu", "0");
  678.     CvarGiveSmokeGrenade = register_cvar("csgo_givesg", "0");
  679.    
  680.     FoundCasesChance = get_pcvar_num(CvarFoundCase);
  681.     FoundKeyChance = get_pcvar_num(CvarFoundKey);
  682.     MinDollarDrop = get_pcvar_num(CvarMinDollarDrop);
  683.     MaxDollarDrop = get_pcvar_num(CvarMaxDollarDrop);
  684.     MinDollarMarket = get_pcvar_num(CvarMinDollarMarket);
  685.     MaxDollarMarket = get_pcvar_num(CvarMaxDollarMarket);
  686.     FoundCasesChance = get_pcvar_num(CvarFoundCase);
  687.     GiveSmokeGrenade = get_pcvar_num(CvarGiveSmokeGrenade);
  688.    
  689.     //register_concmd("TRADEPIECE", "cmdPiece");
  690.     register_concmd("TRADEDOLLARS", "cmdDollarT");
  691.     register_concmd("MARKETDOLLAR", "cmdDollarM");
  692.     register_concmd("MY_USERNAME", "cmdUser");
  693.     register_concmd("MY_PASSWORD", "cmdPassword");
  694.    
  695.     register_clcmd("say /menu", "MainMenu");
  696.  
  697.    
  698.     if(get_pcvar_num(CvarSkinCheck) == 1)
  699.         register_impulse(100, "SkinCheck");
  700.        
  701.     if(get_pcvar_num(CvarMenuButton) == 1)
  702.         register_impulse(201, "MainMenu");
  703.        
  704.     register_event("DeathMsg", "Death", "a");
  705.    
  706.     dSync = CreateHudSyncObj();
  707.    
  708.     for(new i = 1; i < sizeof(DefaultModels); i++)
  709.     {
  710.         if(strlen(DefaultModels[i][1]) > 0)
  711.         {
  712.             RegisterHam(Ham_Item_Deploy, DefaultModels[i][1], "WeaponSkin", 1);
  713.         }
  714.     }
  715.    
  716.     RegisterHam(Ham_Spawn, "player", "PlayerSpawn", 1);
  717.    
  718.     if(get_pcvar_num(CvarWeaponMenu) == 1)
  719.     {
  720.         register_message(get_user_msgid("StatusIcon"), "msgStatusIcon");
  721.         register_clcmd("say /guns", "Guns");
  722.         register_clcmd("say guns", "Guns");
  723.     }
  724.    
  725.     register_clcmd("say", "HandleSay");
  726.    
  727.     set_task(55.0, "Message", 20170309, _, _, "b");
  728.    
  729.     SQL_FirstLoad() ;
  730. }
  731.  
  732. public msgStatusIcon(msgid, msgdest, id)
  733. {
  734.     static szIcon[8];
  735.     get_msg_arg_string(2, szIcon, 7);
  736.    
  737.     if(equal(szIcon, "buyzone") && get_msg_arg_int(1))
  738.     {
  739.         set_pdata_int(id, 235, get_pdata_int(id, 235) & ~(1<<0));
  740.         return PLUGIN_HANDLED;
  741.     }
  742.    
  743.     return PLUGIN_CONTINUE;
  744. }
  745.  
  746. public Message()
  747. {
  748.     for(new i; i < MAXP; i++)
  749.         if(is_user_connected(i))
  750.             print_color(i, "!g%s!y %L", Prefix, i, "SVMESSAGE");
  751. }
  752.  
  753. public HandleSay(id)
  754. {
  755.     new Message[192], None[2][32], Chat[192], Alive[16];
  756.    
  757.     read_args(Message, 191);
  758.     remove_quotes(Message);
  759.  
  760.     formatex(None[0], 31, "");
  761.     formatex(None[1], 31, " ");
  762.    
  763.     if(Message[0] == '@' || Message[0] == '!' || equal (Message, ""))
  764.         return PLUGIN_HANDLED;
  765.    
  766.     if(!is_user_alive(id))
  767.         Alive = "*DEATH* ";
  768.     else
  769.         Alive = "";
  770.        
  771.     if(!equali(Message, None[0]) && !equali(Message, None[1]))
  772.     {
  773.         if(Logined[id])
  774.         {
  775.             formatex(Chat, 191, "^1%s^4[%s] ^3%s^1 : %s", Alive, Ranks[CurrentRank[id]], Name[id], Message);
  776.         }
  777.         else
  778.         {
  779.             formatex(Chat, 191, "^1%s^4[Unranked] ^3%s^1 : %s", Alive, Name[id], Message);
  780.         }
  781.        
  782.         switch(cs_get_user_team(id))
  783.         {
  784.             case CS_TEAM_T: ColorChat(0, RED, Chat);
  785.             case CS_TEAM_CT: ColorChat(0, BLUE, Chat);
  786.             case CS_TEAM_SPECTATOR: ColorChat(0, GREY, Chat);
  787.         }
  788.        
  789.         return PLUGIN_HANDLED;
  790.     }
  791.    
  792.     return PLUGIN_HANDLED;
  793. }
  794.  
  795. public Death()
  796. {
  797.     new id = read_data(1);
  798.     new x = read_data(2);
  799.    
  800.     if(id == 0 || id == x || x == 0 || !Logined[id])
  801.     {
  802.         return;
  803.     }
  804.    
  805.     new DollarDrop = random_num(MinDollarDrop, MaxDollarDrop);
  806.    
  807.     Dollars[id] += DollarDrop;
  808.    
  809.     set_hudmessage(0, 255, 0, -1.00, 0.85, 0, 6.0, 2.0);
  810.     ShowSyncHudMsg(id, dSync, "+%d$", x);
  811.    
  812.     new Drop = random_num(1, 100);
  813.    
  814.     if(FoundCasesChance >= Drop)
  815.     {
  816.         DropCase(id);
  817.     }
  818.     else if(FoundCasesChance+FoundKeyChance >= Drop)
  819.     {
  820.         for(new i; i < MAXP; i++)
  821.             if(is_user_connected(i))
  822.                 print_color(i, "!g%s!y %L", Prefix, i, "FOUND", Name[id], KeyName);
  823.         Keys[id]++;
  824.     }
  825.    
  826.     Kills[id]++;
  827.    
  828.     if(RankKills[CurrentRank[id]+1] <= Kills[id] && RankKills[CurrentRank[id]+1] != 0)
  829.     {
  830.         CurrentRank[id]++;
  831.         print_color(id, "!g%s!y %L", Prefix, id, "RANKNEWLV", Ranks[CurrentRank[id]]);
  832.     }
  833.        
  834.     SQL_UpdateUser(id);
  835. }
  836.  
  837. public DropCase(id)
  838. {
  839.     new RandomNum;
  840.     RandomNum = random(1001);
  841.    
  842.     for(new i = 1; i < sizeof(Case_Data); i++)
  843.     {
  844.         if(Case_Data[i][1][0] <= RandomNum)
  845.         {
  846.             for(new x; x < MAXP; x++)
  847.                 if(is_user_connected(x))
  848.                     print_color(x, "!g%s!y %L", Prefix, x, "FOUND", Name[id], Case_Data[i][0]);
  849.                    
  850.             Cases[id][i]++;
  851.             break;
  852.         }
  853.     }
  854.    
  855.     SQL_UpdateUser(id);
  856. }
  857.  
  858. public SkinDrop(id, CaseNum)
  859. {
  860.     new RandomNum = random_num(1, 1000);
  861.    
  862.     if(DropData[CaseNum][10] >= RandomNum && DropData[CaseNum][0] == 1)
  863.     {
  864.         new RandomKnife = random_num(91, 90+MAXKNIFESKINS-1);
  865.         Weapons[id][RandomKnife]++;
  866.        
  867.         for(new i; i < MAXP; i++)
  868.             if(is_user_connected(i))
  869.                 print_color(i, "!g%s!y %L", Prefix, i, "UNBOXING", Name[id], SkinData[RandomKnife][0]);
  870.     }
  871.     else
  872.     {
  873.         new RandomNums[2], DroppedSkin;
  874.         RandomNum = random_num(1, 10);
  875.        
  876.         if(RandomNum == 1)
  877.         {
  878.             RandomNums[0] = 7; RandomNums[1] = 9;
  879.         }
  880.         else if(RandomNum <= 4)
  881.         {
  882.             RandomNums[0] = 4; RandomNums[1] = 6;
  883.         }
  884.         else if(RandomNum <= 10)
  885.         {
  886.             RandomNums[0] = 1; RandomNums[1] = 3;
  887.         }
  888.        
  889.         DroppedSkin = DropData[CaseNum][random_num(RandomNums[0], RandomNums[1])];
  890.        
  891.         Weapons[id][DroppedSkin]++;
  892.        
  893.         for(new i; i < MAXP; i++)
  894.             if(is_user_connected(i))
  895.                 print_color(i, "!g%s!y %L", Prefix, i, "UNBOXING", Name[id], SkinData[DroppedSkin][0]);
  896.     }
  897.    
  898.     SQL_UpdateUser(id);
  899. }
  900.  
  901. public WeaponSkin(f)
  902. {
  903.     new id = get_pdata_cbase(f, 41, 4);
  904.     new wid = cs_get_weapon_id(f);
  905.    
  906.     if(id > 32 || id < 1 || !is_user_alive(id))
  907.     {
  908.         return HAM_SUPERCEDE;
  909.     }
  910.    
  911.     new k = AnimationIDs[wid][2], Mdl[86];
  912.    
  913.     if(inUse[id][k] > 0 && SkinData[inUse[id][k]][3][0] == wid && Weapons[id][inUse[id][k]] > 0)
  914.     {
  915.         formatex(Mdl, charsmax(Mdl), "models/%s%s.mdl", SkinFolder, SkinData[inUse[id][k]][1]);
  916.         set_pev(id, pev_viewmodel2, Mdl);
  917.        
  918.         if(strlen(SkinData[inUse[id][k]][2]) > 0)
  919.         {
  920.             formatex(Mdl, charsmax(Mdl), "models/%s%s.mdl", SkinFolder, SkinData[inUse[id][k]][2]);
  921.             set_pev(id, pev_weaponmodel2, Mdl);
  922.         }
  923.     }
  924.     else
  925.     {
  926.         formatex(Mdl, charsmax(Mdl), "models/%s%s", DSkinFolder, DefaultModels[wid][0]);
  927.         set_pev(id, pev_viewmodel2, Mdl);
  928.     }
  929.    
  930.     return HAM_IGNORED;
  931. }
  932.  
  933. public MainMenu(id)
  934. {
  935.     if(!Logined[id])
  936.     {
  937.         RegMenu(id);
  938.         return;
  939.     }
  940.    
  941.     new String[128];
  942.     formatex(String, charsmax(String), "%L", id, "MAINMENU", Dollars[id]);
  943.     new Menu = menu_create(String, "MainMenuh");
  944.    
  945.     formatex(String, charsmax(String), "%L", id, "INVENTORY");
  946.     menu_additem(Menu, String, "1");
  947.    
  948.     formatex(String, charsmax(String), "%L", id, "CASEOPEN");
  949.     menu_additem(Menu, String, "2");
  950.    
  951.     formatex(String, charsmax(String), "%L", id, "TRADE");
  952.     menu_additem(Menu, String, "3");
  953.    
  954.     formatex(String, charsmax(String), "%L^n", id, "MARKET");
  955.     menu_additem(Menu, String, "4");
  956.    
  957.     if(RankKills[CurrentRank[id]+1] != 0)
  958.     {
  959.         formatex(String, charsmax(String), "%L%L", id, "TRASH", id, "RANKMENU",
  960.         Ranks[CurrentRank[id]], Kills[id], RankKills[CurrentRank[id]+1], Ranks[CurrentRank[id]+1]);
  961.     }
  962.     else
  963.     {
  964.         formatex(String, charsmax(String), "%L%L", id, "TRASH", id, "RANKMENUMAX",
  965.         Ranks[CurrentRank[id]], Kills[id]);
  966.     }
  967.     menu_additem(Menu, String, "5");
  968.    
  969.     menu_display(id, Menu);
  970. }
  971.  
  972. public MainMenuh(id, Menu, Item)
  973. {
  974.     if(Item == MENU_EXIT)
  975.     {
  976.         menu_destroy(Menu);
  977.         return;
  978.     }
  979.    
  980.     new Data[14], Line[32];
  981.     new Access, Callback;
  982.     menu_item_getinfo(Menu, Item, Access, Data, charsmax(Data), Line, charsmax(Line), Callback);
  983.    
  984.     new x = str_to_num(Data);
  985.    
  986.     switch(x)
  987.     {
  988.         case 1 : {
  989.             Inventory(id);
  990.         }
  991.        
  992.         case 2 : {
  993.             CaseMenu(id);
  994.            
  995.             if(MarketItem[id] > 0 || TradeItem[id] > 0 || inTrade[id] > 0)
  996.             {
  997.                 print_color(id, "!g%s!y %L", Prefix, id, "TMMESSAGE");
  998.                 DeleteTradeandMarket(id);
  999.             }
  1000.         }
  1001.        
  1002.         case 3 : {
  1003.             /*if(PendingTrade > MAXTRADEINSAMETIME && PTradeId[id] == 0)
  1004.             {
  1005.                 print_color(id, "!g%s!y %L", Prefix, id, "BLOCKTRADE");
  1006.                 return;
  1007.             }
  1008.            
  1009.             TradeMenu(id);
  1010.            
  1011.             if(MarketItem[id] > 0)
  1012.             {
  1013.                 print_color(id, "!g%s!y %L", Prefix, id, "TMMESSAGE");
  1014.                 DeleteTradeandMarket(id);
  1015.             }*/
  1016.             client_print(id, print_chat, "%s Trades are Coming Soon!");
  1017.             menu_destroy(Menu);
  1018.         }
  1019.        
  1020.         case 4 : {
  1021.             MMarketMenu(id);
  1022.            
  1023.             if(TradeItem[id] > 0 || inTrade[id] > 0)
  1024.             {
  1025.                 print_color(id, "!g%s!y %L", Prefix, id, "TMMESSAGE");
  1026.                 DeleteTradeandMarket(id);
  1027.             }
  1028.         }
  1029.        
  1030.         case 5 : {
  1031.             TrashMenu(id);
  1032.            
  1033.             if(MarketItem[id] > 0 || TradeItem[id] > 0 || inTrade[id] > 0)
  1034.             {
  1035.                 print_color(id, "!g%s!y %L", Prefix, id, "TMMESSAGE");
  1036.                 DeleteTradeandMarket(id);
  1037.             }
  1038.         }
  1039.     }
  1040. }
  1041.  
  1042. public CaseMenu(id)
  1043. {
  1044.     new String[128];
  1045.     formatex(String, charsmax(String), "%L", id, "CASEOPENM", Keys[id]);
  1046.     new Menu = menu_create(String, "CaseMenuh");
  1047.    
  1048.     for(new i = 1; i < sizeof(Case_Data); i++)
  1049.     {
  1050.         new NumToString[6];
  1051.         num_to_str(i, NumToString, 5);
  1052.         formatex(String, charsmax(String), "%s \r(%d)", Case_Data[i][0], Cases[id][i]);
  1053.         menu_additem(Menu, String, NumToString);
  1054.     }
  1055.    
  1056.     menu_display(id, Menu);
  1057. }
  1058.  
  1059. public CaseMenuh(id, Menu, Item)
  1060. {
  1061.     if(Item == MENU_EXIT)
  1062.     {
  1063.         menu_destroy(Menu);
  1064.         return;
  1065.     }
  1066.    
  1067.     new Data[14], Line[32];
  1068.     new Access, Callback;
  1069.     menu_item_getinfo(Menu, Item, Access, Data, charsmax(Data), Line, charsmax(Line), Callback);
  1070.    
  1071.     new x = str_to_num(Data);
  1072.    
  1073.     if(Cases[id][x] > 0 && Keys[id] > 0)
  1074.     {
  1075.         Keys[id]--;
  1076.         Cases[id][x]--;
  1077.         SkinDrop(id, x);
  1078.     }
  1079.     else if(Keys[id] == 0)
  1080.     {
  1081.         print_color(id, "!g%s!y %L", Prefix, id, "NOTENOUGHK");
  1082.     }
  1083.     else
  1084.     {
  1085.         print_color(id, "!g%s!y %L", Prefix, id, "NOTENOUGHC");
  1086.     }
  1087.    
  1088.     CaseMenu(id);
  1089. }
  1090.  
  1091. public TrashMenu(id)
  1092. {
  1093.     new String[128];
  1094.     formatex(String, charsmax(String), "%L", id, "TRASH");
  1095.     new Menu = menu_create(String, "TrashMenuh");
  1096.    
  1097.     for(new i = 1; i < sizeof(SkinData); i++)
  1098.     {
  1099.         if(Weapons[id][i] > 0 && strlen(SkinData[i][0]) > 1)
  1100.         {
  1101.             new NumToString[6];
  1102.             num_to_str(i, NumToString, 5);
  1103.            
  1104.             if(SkinData[i][3][0] != CSW_KNIFE)
  1105.                 formatex(String, charsmax(String), "%s%s \y(%d)", RareData[SkinData[i][4][0]], SkinData[i][0], Weapons[id][i]);
  1106.             else
  1107.                 formatex(String, charsmax(String), "%s%s \w(%d)", RareData[SkinData[i][4][0]], SkinData[i][0], Weapons[id][i]);
  1108.             menu_additem(Menu, String, NumToString);
  1109.         }
  1110.     }
  1111.    
  1112.     menu_display(id, Menu);
  1113. }
  1114.  
  1115. public TrashMenuh(id, Menu, Item)
  1116. {
  1117.     if(Item == MENU_EXIT)
  1118.     {
  1119.         menu_destroy(Menu);
  1120.         return;
  1121.     }
  1122.    
  1123.     new Data[14], Line[32];
  1124.     new Access, Callback;
  1125.     menu_item_getinfo(Menu, Item, Access, Data, charsmax(Data), Line, charsmax(Line), Callback);
  1126.     new x = str_to_num(Data);
  1127.    
  1128.     Weapons[id][x]--;
  1129.     TrashMenu(id);
  1130.     SQL_UpdateUser(id);
  1131. }
  1132.  
  1133. public Inventory(id)
  1134. {
  1135.     new String[128];
  1136.     formatex(String, charsmax(String), "%L", id, "INVENTORY");
  1137.     new Menu = menu_create(String, "Inventoryh");
  1138.    
  1139.     for(new i = 1; i < sizeof(SkinData); i++)
  1140.     {
  1141.         if(Weapons[id][i] > 0 && strlen(SkinData[i][0]) > 1)
  1142.         {
  1143.             new NumToString[6];
  1144.             num_to_str(i, NumToString, 5);
  1145.            
  1146.             if(SkinData[i][3][0] != CSW_KNIFE)
  1147.                 formatex(String, charsmax(String), "%s%s \y(%d)", RareData[SkinData[i][4][0]], SkinDataTrade[i], Weapons[id][i]);
  1148.             else
  1149.                 formatex(String, charsmax(String), "%s%s \w(%d)", RareData[SkinData[i][4][0]], SkinDataTrade[i], Weapons[id][i]);
  1150.             menu_additem(Menu, String, NumToString);
  1151.         }
  1152.     }
  1153.    
  1154.     menu_display(id, Menu);
  1155. }
  1156.  
  1157. public Inventoryh(id, Menu, Item)
  1158. {
  1159.     if(Item == MENU_EXIT)
  1160.     {
  1161.         menu_destroy(Menu);
  1162.         return;
  1163.     }
  1164.    
  1165.     new Data[14], Line[32];
  1166.     new Access, Callback;
  1167.     menu_item_getinfo(Menu, Item, Access, Data, charsmax(Data), Line, charsmax(Line), Callback);
  1168.     new x = str_to_num(Data);
  1169.    
  1170.     if(SkinData[x][3][0] == 16 || SkinData[x][3][0] == 17 || SkinData[x][3][0] == 26)
  1171.     {
  1172.         inUse[id][2] = x;
  1173.     }
  1174.     else if(SkinData[x][3][0] == 29)
  1175.     {
  1176.         inUse[id][3] = x;
  1177.     }
  1178.     else
  1179.     {
  1180.         inUse[id][1] = x;
  1181.     }
  1182. }
  1183.  
  1184. public SkinCheck(id)
  1185. {
  1186.     if(!is_user_alive(id))
  1187.         return PLUGIN_HANDLED;
  1188.    
  1189.     new Sil, WPName[32];
  1190.     formatex(WPName, charsmax(WPName), DefaultModels[get_user_weapon(id)][1]);
  1191.     new WPN = find_ent_by_owner(-1, DefaultModels[get_user_weapon(id)][1], id);
  1192.    
  1193.     if(get_user_weapon(id) == CSW_M4A1 || get_user_weapon(id) == CSW_USP)
  1194.         Sil = cs_get_weapon_silen(WPN);
  1195.        
  1196.     if(get_user_weapon(id) == CSW_AWP)
  1197.         cs_set_user_zoom(id, 0, 0);
  1198.    
  1199.     PlayAnimation(id, AnimationIDs[get_user_weapon(id)][Sil]);
  1200.  
  1201.     return PLUGIN_HANDLED;
  1202. }
  1203.  
  1204. public TradeMenu(id)
  1205. {
  1206.     if(TradePiece[id] == 0)
  1207.     {
  1208.         TradePiece[id] = 1;
  1209.     }
  1210.    
  1211.     new String[128], kid, Menu;
  1212.    
  1213.     if(TradePartner[id] > 0)
  1214.         kid = TradePartner[id];
  1215.     else
  1216.         kid = TradeID[id];
  1217.  
  1218.     if(TradeFounding[id] == 1)
  1219.     {
  1220.         formatex(String, charsmax(String), "%L", id, "WANTTRADE", Name[kid]);
  1221.     }
  1222.     else if(inTrade[id] == 1 && inTrade[kid] == 1)
  1223.     {
  1224.         formatex(String, charsmax(String), "%L", id, "TRADEITEMS", Name[kid]);
  1225.     }
  1226.     else
  1227.     {
  1228.         formatex(String, charsmax(String), "%L", id, "TRADEDOLLAR", Dollars[id]);
  1229.     }
  1230.    
  1231.     Menu = menu_create(String, "TradeMenuh");
  1232.    
  1233.     if(TradeFounding[id] == 1)
  1234.     {
  1235.         formatex(String, charsmax(String), "%L", id, "TRADEACCEPT");
  1236.         menu_additem(Menu, String, "-3");
  1237.        
  1238.         formatex(String, charsmax(String), "%L", id, "TRADEREJECT");
  1239.         menu_additem(Menu, String, "-2");
  1240.     }
  1241.     else if(inTrade[id] == 1 && inTrade[kid] == 1)
  1242.     {
  1243.         if(TradeItem[kid] == 0)
  1244.         {
  1245.             formatex(String, charsmax(String), "%L", id, "TRADENOTHING");
  1246.         }
  1247.         else if(TradeItem[kid] > 0 && TradeItem[kid] <= 90+MAXKNIFESKINS)
  1248.         {
  1249.             formatex(String, charsmax(String), "%L", id, "TRADEITEM", SkinDataTrade[TradeItem[kid]], TradePiece[kid]);
  1250.         }
  1251.         else if(TradeItem[kid] > 90+MAXKNIFESKINS && TradeItem[kid] <= 90+MAXKNIFESKINS+MAXCASES)
  1252.         {
  1253.             formatex(String, charsmax(String), "%L", id, "TRADEITEM", Case_Data[TradeItem[kid]-(90+MAXKNIFESKINS)][0], TradePiece[kid]);
  1254.         }
  1255.         else
  1256.         {
  1257.             formatex(String, charsmax(String), "%L", id, "TRADEITEM", KeyName, TradePiece[kid]);
  1258.         }
  1259.            
  1260.         menu_additem(Menu, String, "0");
  1261.        
  1262.         formatex(String, charsmax(String), "%L", id, "TRADEYOURITEMS", TradeDollars[kid]);
  1263.         menu_additem(Menu, String, "0");
  1264.        
  1265.         if(TradeItem[id] == 0)
  1266.         {
  1267.             formatex(String, charsmax(String), "%L", id, "TRADENOTHING");
  1268.         }
  1269.         else if(TradeItem[id] > 0 && TradeItem[id] <= 90+MAXKNIFESKINS)
  1270.         {
  1271.             formatex(String, charsmax(String), "%L", id, "TRADEITEM", SkinDataTrade[TradeItem[id]], TradePiece[id]);
  1272.         }
  1273.         else if(TradeItem[id] > 90+MAXKNIFESKINS && TradeItem[id] <= 90+MAXKNIFESKINS+MAXCASES)
  1274.         {
  1275.             formatex(String, charsmax(String), "%L", id, "TRADEITEM", Case_Data[TradeItem[id]-(90+MAXKNIFESKINS)][0], TradePiece[id]);
  1276.         }
  1277.         else
  1278.         {
  1279.             formatex(String, charsmax(String), "%L", id, "TRADEITEM", KeyName, TradePiece[id]);
  1280.         }
  1281.         menu_additem(Menu, String, "-4");
  1282.        
  1283.         formatex(String, charsmax(String), "%L", id, "TRADEDOLLAR2", TradeDollars[id]);
  1284.         menu_additem(Menu, String, "-5");
  1285.        
  1286.         formatex(String, charsmax(String), "%L", id, "TRADEACCEPT");
  1287.         menu_additem(Menu, String, "-6");
  1288.        
  1289.         formatex(String, charsmax(String), "%L", id, "TRADEREJECT");
  1290.         menu_additem(Menu, String, "-7");
  1291.     }
  1292.     else if(TradeID[id] == 0)
  1293.     {
  1294.         for(new i; i < MAXP; i++)
  1295.         {
  1296.             new NumToStr[6];
  1297.             if(is_user_connected(i))
  1298.             {
  1299.                 if(i == id || is_user_bot(i))
  1300.                     continue;
  1301.                    
  1302.                 if(TradeFounding[i] == 0 && inTrade[i] == 0)
  1303.                 {
  1304.                     num_to_str(i, NumToStr, 5);
  1305.                     formatex(String, charsmax(String), "%s", Name[i]);
  1306.                     menu_additem(Menu, String, NumToStr);
  1307.                 }
  1308.             }
  1309.         }
  1310.     }
  1311.     else if(TradeID[id] > 0)
  1312.     {
  1313.         print_color(id, "!g%s!y %L", Prefix, id, "DONTACCEPTEDTRADE");
  1314.         return;
  1315.     }
  1316.  
  1317.     menu_display(id, Menu);
  1318. }
  1319. public TradeMenuh(id, Menu, Item)
  1320. {
  1321.     if(Item == MENU_EXIT)
  1322.     {
  1323.         menu_destroy(Menu);
  1324.         return;
  1325.     }
  1326.    
  1327.     new Data[14], Line[32];
  1328.     new Access, Callback;
  1329.     menu_item_getinfo(Menu, Item, Access, Data, charsmax(Data), Line, charsmax(Line), Callback);
  1330.    
  1331.     new x = str_to_num(Data);
  1332.    
  1333.     if(x <= 0)
  1334.     {
  1335.         switch(x)
  1336.         {
  1337.             case 0 : TradeMenu(id);
  1338.            
  1339.             case -3 : {
  1340.                 if(PendingTrade > MAXTRADEINSAMETIME)
  1341.                 {
  1342.                     print_color(id, "!g%s!y %L", Prefix, id, "BLOCKTRADE");
  1343.                     return;
  1344.                 }
  1345.                
  1346.                 TradeFounding[id] = 0;
  1347.                 inTrade[id] = 1;
  1348.                 new kid;
  1349.                 if(TradePartner[id] > 0)
  1350.                     kid = TradePartner[id];
  1351.                 else
  1352.                     kid = TradeID[id];
  1353.                 inTrade[kid] = 1;
  1354.                 TradePiece[id] = 0;
  1355.                 TradePiece[kid] = 0;
  1356.                 PTradeId[id] = 1;
  1357.                 PTradeId[kid] = 1;
  1358.                 TradeMenu(id);
  1359.                 TradeMenu(kid);
  1360.                 PendingTrade++;
  1361.             }
  1362.            
  1363.             case -2 : {
  1364.                 new kid;
  1365.                 if(TradePartner[id] > 0)
  1366.                     kid = TradePartner[id];
  1367.                 else
  1368.                     kid = TradeID[id];
  1369.                 inTrade[id] = 0;
  1370.                 TradePartner[id] = 0;
  1371.                 TradeFounding[id] = 0;
  1372.                 inTrade[kid] = 0;
  1373.                 TradeID[kid] = 0;
  1374.                 TradeID[id] = 0;
  1375.             }
  1376.            
  1377.             case -4 : {
  1378.                 TChooseItem(id);
  1379.             }
  1380.            
  1381.             case -5 : {
  1382.                 client_cmd(id, "messagemode TRADEDOLLARS");
  1383.             }
  1384.            
  1385.             case -6 : {
  1386.                 new kid;
  1387.                
  1388.                 if(TradePartner[id] > 0)
  1389.                     kid = TradePartner[id];
  1390.                 else
  1391.                     kid = TradeID[id];
  1392.                    
  1393.                 Accept[id] = 1;
  1394.                
  1395.                 if(Accept[id] == 1 && Accept[kid] == 1)
  1396.                 {
  1397.                     Trade(id, kid);
  1398.                 }
  1399.                 else
  1400.                 {
  1401.                     MainMenu(id);
  1402.                 }
  1403.             }
  1404.            
  1405.             case -7 : {
  1406.                 new kid;
  1407.                 if(TradePartner[id] > 0)
  1408.                     kid = TradePartner[id];
  1409.                 else
  1410.                     kid = TradeID[id];
  1411.                
  1412.                 inTrade[id] = 0;
  1413.                 TradePartner[id] = 0;
  1414.                 TradeFounding[id] = 0;
  1415.                 TradeID[id] = 0;
  1416.                 inTrade[kid] = 0;
  1417.                 TradePartner[kid] = 0;
  1418.                 TradeFounding[kid] = 0;
  1419.                 TradeID[kid] = 0;
  1420.                 PTradeId[id] = 0;
  1421.                 PTradeId[kid] = 0;
  1422.                 PendingTrade--;
  1423.             }
  1424.         }
  1425.     }
  1426.     else
  1427.     {
  1428.         if(PendingTrade > MAXTRADEINSAMETIME && PTradeId[id] == 0)
  1429.         {
  1430.             print_color(id, "!g%s!y %L", Prefix, id, "BLOCKTRADE");
  1431.             return;
  1432.         }
  1433.            
  1434.         TradeID[id] = x;
  1435.         print_color(x, "!g%s!y %L", Prefix, x, "WANTTRADE2", Name[id]);
  1436.         TradeFounding[x] = 1;
  1437.         TradeFounding[id] = 0;
  1438.         inTrade[id] = 1;
  1439.         TradePartner[x] = id;
  1440.         remove_task(TradeID[id]+9929);
  1441.         set_task(30.0, "DeleteTrade", TradeID[id]+9929);
  1442.     }
  1443. }
  1444.  
  1445. public DeleteTrade(id)
  1446. {
  1447.     id = id - 9929;
  1448.     if(Logined[id])
  1449.     {
  1450.         if(inTrade[id] == 0)
  1451.         {
  1452.             inTrade[id] = 0;
  1453.             TradePartner[id] = 0;
  1454.             TradeFounding[id] = 0;
  1455.         }
  1456.     }
  1457. }
  1458.  
  1459. public Trade(x, y) {
  1460.     if(Logined[x] && Logined[y] ||
  1461.     inTrade[x] == 1 && inTrade[y] == 1  ||
  1462.     Accept[x] == 1 && Accept[y] == 1)
  1463.     {
  1464.         PendingTrade--;
  1465.        
  1466.         if(TradeItem[x] > 0 && TradeItem[x] <= 90+MAXKNIFESKINS)
  1467.         {
  1468.             Weapons[y][TradeItem[x]] += TradePiece[x];
  1469.             Weapons[x][TradeItem[x]] -= TradePiece[x];
  1470.         }
  1471.         else if(TradeItem[x] > 90+MAXKNIFESKINS && TradeItem[x] <= 90+MAXKNIFESKINS+MAXCASES)
  1472.         {
  1473.             Cases[y][TradeItem[x]-(90+MAXKNIFESKINS)] += TradePiece[x];
  1474.             Cases[x][TradeItem[x]-(90+MAXKNIFESKINS)] -= TradePiece[x];
  1475.         }
  1476.         else if(TradeItem[x] > 0)
  1477.         {
  1478.             Keys[y] += TradePiece[x];
  1479.             Keys[x] -= TradePiece[x];
  1480.         }
  1481.        
  1482.         if(TradeItem[y] > 0 && TradeItem[y] <= 90+MAXKNIFESKINS)
  1483.         {
  1484.             Weapons[y][TradeItem[y]] -= TradePiece[y];
  1485.             Weapons[x][TradeItem[y]] += TradePiece[y];
  1486.         }
  1487.         else if(TradeItem[y] > 90+MAXKNIFESKINS && TradeItem[y] <= 90+MAXKNIFESKINS+MAXCASES)
  1488.         {
  1489.             Cases[y][TradeItem[y]-(90+MAXKNIFESKINS)] -= TradePiece[y];
  1490.             Cases[x][TradeItem[y]-(90+MAXKNIFESKINS)] += TradePiece[y];
  1491.         }
  1492.         else if(TradeItem[y] > 0)
  1493.         {
  1494.             Keys[y] -= TradePiece[y];
  1495.             Keys[x] += TradePiece[y];
  1496.         }
  1497.        
  1498.         Dollars[x] += TradeDollars[y];
  1499.         Dollars[y] += TradeDollars[x];
  1500.         Dollars[x] -= TradeDollars[x];
  1501.         Dollars[y] -= TradeDollars[y];
  1502.        
  1503.         print_color(x, "!g%s!y %L", Prefix, x, "SUCCESSTRADE");
  1504.         print_color(y, "!g%s!y %L", Prefix, y, "SUCCESSTRADE");
  1505.        
  1506.         DeleteTradeandMarket(x);
  1507.         DeleteTradeandMarket(y);
  1508.        
  1509.         show_menu(x, 0, "^n", 1);
  1510.         show_menu(y, 0, "^n", 1);
  1511.        
  1512.         set_task(0.5, "SQL_UpdateUser", x);
  1513.         set_task(0.5, "SQL_UpdateUser", y);
  1514.        
  1515.         PTradeId[x] = 0;
  1516.         PTradeId[y] = 0;
  1517.     }  
  1518. }
  1519.  
  1520. public TChooseItem(id)
  1521. {
  1522.     new String[128];
  1523.     formatex(String, charsmax(String), "%L", id, "CHOOSEITEM");
  1524.     new Menu = menu_create(String, "TChooseItemh");
  1525.    
  1526.     for(new i = 1; i < sizeof(SkinData); i++)
  1527.     {
  1528.         if(Weapons[id][i] > 0 && strlen(SkinDataTrade[i]) > 1)
  1529.         {
  1530.             new NumToString[6];
  1531.             num_to_str(i, NumToString, 5);
  1532.            
  1533.             if(SkinData[i][3][0] != CSW_KNIFE)
  1534.                 formatex(String, charsmax(String), "%s%s \y(%d)", RareData[SkinData[i][4][0]], SkinDataTrade[i], Weapons[id][i]);
  1535.             else
  1536.                 formatex(String, charsmax(String), "%s%s \w(%d)", RareData[SkinData[i][4][0]], SkinDataTrade[i], Weapons[id][i]);
  1537.             menu_additem(Menu, String, NumToString);
  1538.         }
  1539.     }
  1540.    
  1541.     for(new i = 1; i < sizeof(Case_Data); i++)
  1542.     {
  1543.         if(Cases[id][i] > 0)
  1544.         {
  1545.             new NumToString[6];
  1546.             num_to_str(i+sizeof(SkinData), NumToString, 5);
  1547.             formatex(String, charsmax(String), "%s \r(%d)", Case_Data[i][0], Cases[id][i]);
  1548.             menu_additem(Menu, String, NumToString);
  1549.         }
  1550.     }
  1551.    
  1552.     if(Keys[id] > 0)
  1553.     {
  1554.         new NumToString[6];
  1555.         num_to_str(1+sizeof(SkinData)+sizeof(Case_Data), NumToString, 5);
  1556.         formatex(String, charsmax(String), "%s \r(%d)", KeyName, Keys[id]);
  1557.         menu_additem(Menu, String, NumToString);
  1558.     }
  1559.    
  1560.     menu_display(id, Menu);
  1561. }
  1562.  
  1563. public TChooseItemh(id, Menu, Item)
  1564. {
  1565.     if(Item == MENU_EXIT)
  1566.     {
  1567.         menu_destroy(Menu);
  1568.         return;
  1569.     }
  1570.    
  1571.     new Data[14], Line[32];
  1572.     new Access, Callback;
  1573.     menu_item_getinfo(Menu, Item, Access, Data, charsmax(Data), Line, charsmax(Line), Callback);
  1574.     new x = str_to_num(Data);
  1575.    
  1576.     TradeItem[id] = x;
  1577.     client_cmd(id, "messagemode TRADEPIECE");
  1578. }
  1579.  
  1580. public MChooseItem(id)
  1581. {
  1582.     new String[128];
  1583.     formatex(String, charsmax(String), "%L", id, "CHOOSEITEM");
  1584.     new Menu = menu_create(String, "MChooseItemh");
  1585.    
  1586.     for(new i = 1; i < sizeof(SkinData); i++)
  1587.     {
  1588.         if(Weapons[id][i] > 0 && strlen(SkinDataTrade[i]) > 1)
  1589.         {
  1590.             new NumToString[6];
  1591.             num_to_str(i, NumToString, 5);
  1592.            
  1593.             if(SkinData[i][3][0] != CSW_KNIFE)
  1594.                 formatex(String, charsmax(String), "%s%s \y(%d)", RareData[SkinData[i][4][0]], SkinDataTrade[i], Weapons[id][i]);
  1595.             else
  1596.                 formatex(String, charsmax(String), "%s%s \w(%d)", RareData[SkinData[i][4][0]], SkinDataTrade[i], Weapons[id][i]);
  1597.             menu_additem(Menu, String, NumToString);
  1598.         }
  1599.     }
  1600.    
  1601.     for(new i = 1; i < sizeof(Case_Data); i++)
  1602.     {
  1603.         if(Cases[id][i] > 0)
  1604.         {
  1605.             new NumToString[6];
  1606.             num_to_str(i+sizeof(SkinData), NumToString, 5);
  1607.             formatex(String, charsmax(String), "%s \r(%d)", Case_Data[i][0], Cases[id][i]);
  1608.             menu_additem(Menu, String, NumToString);
  1609.         }
  1610.     }
  1611.    
  1612.     if(Keys[id] > 0)
  1613.     {
  1614.         new NumToString[6];
  1615.         num_to_str(1+sizeof(SkinData)+sizeof(Case_Data), NumToString, 5);
  1616.         formatex(String, charsmax(String), "%s \r(%d)", KeyName, Keys[id]);
  1617.         menu_additem(Menu, String, NumToString);
  1618.     }
  1619.    
  1620.     menu_display(id, Menu);
  1621. }
  1622.  
  1623. public MChooseItemh(id, Menu, Item)
  1624. {
  1625.     if(Item == MENU_EXIT)
  1626.     {
  1627.         menu_destroy(Menu);
  1628.         return;
  1629.     }
  1630.    
  1631.     new Data[14], Line[32];
  1632.     new Access, Callback;
  1633.     menu_item_getinfo(Menu, Item, Access, Data, charsmax(Data), Line, charsmax(Line), Callback);
  1634.     new x = str_to_num(Data);
  1635.    
  1636.     MarketItem[id] = x;
  1637.     MarketMenu(id);
  1638. }
  1639.  
  1640. public cmdDollarM(id)
  1641. {
  1642.     if(inTrade[id] == 1 || !Logined[id])
  1643.         return;
  1644.    
  1645.     new Price, Data[32];
  1646.     read_args(Data, charsmax(Data));
  1647.     remove_quotes(Data);
  1648.    
  1649.     Price = str_to_num(Data);
  1650.    
  1651.     if(Price <= MinDollarMarket)
  1652.     {
  1653.         print_color(id, "!g%s!y %L", Prefix, id, "LOWPRICE", MinDollarMarket);
  1654.         client_cmd(id, "messagemode MARKETDOLLAR");
  1655.         MarketMenu(id);
  1656.     }
  1657.     else if(MaxDollarMarket >= Price)
  1658.     {
  1659.         MarketDollar[id] = Price;
  1660.         MarketMenu(id);
  1661.     }
  1662.     else
  1663.     {
  1664.         print_color(id, "!g%s!y %L", Prefix, id, "HIGHPRICE", MaxDollarMarket);
  1665.         client_cmd(id, "messagemode MARKETDOLLAR");
  1666.         MarketMenu(id);
  1667.     }
  1668. }
  1669.  
  1670. public cmdDollarT(id)
  1671. {
  1672.     if(inTrade[id] == 0 || !Logined[id])
  1673.         return;
  1674.    
  1675.     new Piece, Data[32], kid;
  1676.     read_args(Data, charsmax(Data));
  1677.     remove_quotes(Data);
  1678.    
  1679.     Piece = str_to_num(Data);
  1680.    
  1681.     if(TradePartner[id] > 0)
  1682.         kid = TradePartner[id];
  1683.     else
  1684.         kid = TradeID[id];
  1685.    
  1686.     if(Piece <= 0)
  1687.     {
  1688.         client_cmd(id, "messagemode TRADEDOLLARS");
  1689.     }
  1690.     else if(Dollars[id] >= Piece)
  1691.     {
  1692.         TradeDollars[id] = Piece;
  1693.         TradeMenu(id);
  1694.         TradeMenu(kid);
  1695.         Accept[id] = 0;
  1696.         Accept[kid] = 0;
  1697.     }
  1698.     else
  1699.     {
  1700.         TradeDollars[id] = Dollars[id];
  1701.         TradeMenu(id);
  1702.         TradeMenu(kid);
  1703.         Accept[id] = 0;
  1704.         Accept[kid] = 0;
  1705.     }
  1706. }
  1707. public cmdPiece(id)
  1708. {
  1709.     new kid;
  1710.    
  1711.     if(TradePartner[id] > 0)
  1712.         kid = TradePartner[id];
  1713.     else
  1714.         kid = TradeID[id];
  1715.        
  1716.     if(inTrade[id] == 0 || inTrade[kid] == 0 || !Logined[id])
  1717.         return;
  1718.    
  1719.     new Piece, Data[32];
  1720.     read_args(Data, charsmax(Data));
  1721.     remove_quotes(Data);
  1722.    
  1723.     Piece = str_to_num(Data);
  1724.    
  1725.     if(TradeItem[id] > 0 && TradeItem[id] <= 90+MAXKNIFESKINS)
  1726.     {
  1727.         if(Weapons[id][TradeItem[id]] >= Piece && Piece >= 1)
  1728.         {
  1729.             TradePiece[id] = Piece;
  1730.             TradeMenu(id);
  1731.             TradeMenu(kid);
  1732.             Accept[id] = 0;
  1733.             Accept[kid] = 0;
  1734.         }
  1735.     }
  1736.     else if(TradeItem[id] > 90+MAXKNIFESKINS && TradeItem[id] <= 90+MAXKNIFESKINS+MAXCASES)
  1737.     {
  1738.         if(Cases[id][TradeItem[id]-(90+MAXKNIFESKINS)] >= Piece && Piece >= 1)
  1739.         {
  1740.             TradePiece[id] = Piece;
  1741.             TradeMenu(id);
  1742.             TradeMenu(kid);
  1743.             Accept[id] = 0;
  1744.             Accept[kid] = 0;
  1745.         }
  1746.     }
  1747.     else if(TradeItem[id] > 0)
  1748.     {
  1749.         if(Keys[id] >= Piece && Piece >= 1)
  1750.         {
  1751.             TradePiece[id] = Piece;
  1752.             TradeMenu(id);
  1753.             TradeMenu(kid);
  1754.             Accept[id] = 0;
  1755.             Accept[kid] = 0;
  1756.         }
  1757.     }
  1758.     else
  1759.     {
  1760.         TradePiece[id] = 0;
  1761.         TradeMenu(id);
  1762.         TradeMenu(kid);
  1763.         Accept[id] = 0;
  1764.         Accept[kid] = 0;
  1765.         return;
  1766.     }
  1767. }
  1768.  
  1769. public RegMenu(id)
  1770. {
  1771.     if(ServerLoaded == 0)
  1772.     {
  1773.         print_color(id, "!g%s!y %L", Prefix, id, "SERVERLOADING");
  1774.         return;
  1775.     }
  1776.    
  1777.    
  1778.     new String[128];
  1779.     formatex(String, charsmax(String), "%L", id, "REGISTERMENU");
  1780.     new menu = menu_create(String, "RegMenuh" );
  1781.        
  1782.     if(strlen(User[id]) > 0)
  1783.     {
  1784.         formatex(String, charsmax(String), "%L", id, "USERNAME", User[id]);
  1785.         menu_additem(menu, String, "1");
  1786.        
  1787.         formatex(String, charsmax(String), "%L^n", id, "PASSWORD", Password[id]);
  1788.         menu_additem(menu, String, "2");
  1789.     }
  1790.     else
  1791.     {
  1792.         formatex(String, charsmax(String), "%L", id, "USERNAME2", User[id]);
  1793.         menu_additem(menu, String, "1");
  1794.     }
  1795.    
  1796.     if(strlen(User[id]) > 0 && strlen(Password[id]) > 0 && UserLoad[id] == 0 && inProgress[id] == 0)
  1797.     {
  1798.         if(Found[id])
  1799.         {
  1800.             formatex(String, charsmax(String), "%L", id, "LOGIN");
  1801.             menu_additem(menu, String, "3");
  1802.         }
  1803.         else
  1804.         {
  1805.             formatex(String, charsmax(String), "%L", id, "REGISTER");
  1806.             menu_additem(menu, String, "4");
  1807.         }
  1808.     }
  1809.    
  1810.     menu_display(id, menu);
  1811. }
  1812.  
  1813. public RegMenuh(id, Menu, Item)
  1814. {
  1815.     if(Item == MENU_EXIT)
  1816.     {
  1817.         menu_destroy(Menu);
  1818.         return;
  1819.     }
  1820.    
  1821.     new Data[14], Line[32];
  1822.     new Access, Callback;
  1823.     menu_item_getinfo(Menu, Item, Access, Data, charsmax(Data), Line, charsmax(Line), Callback);
  1824.    
  1825.     new x = str_to_num(Data);
  1826.    
  1827.     switch(x)
  1828.     {
  1829.         case 1 : {
  1830.             client_cmd(id, "messagemode MY_USERNAME");
  1831.             RegMenu(id);
  1832.         }
  1833.        
  1834.         case 2 : {
  1835.             client_cmd(id, "messagemode MY_PASSWORD");
  1836.             RegMenu(id);
  1837.         }
  1838.        
  1839.         case 3 : {
  1840.             if(inProgress[id] == 0)
  1841.             {
  1842.                 inProgress[id] = 1;
  1843.                 print_color(id, "!g%s!y %L", Prefix, id, "LOGINPENDING");
  1844.                 RegisterMod[id] = 1;
  1845.                 SQL_Check(id);
  1846.                 RegMenu(id);
  1847.             }
  1848.             else
  1849.             {
  1850.                 RegMenu(id);
  1851.             }
  1852.         }
  1853.        
  1854.         case 4 : {
  1855.             if(inProgress[id] == 0)
  1856.             {
  1857.                 inProgress[id] = 1;
  1858.                 print_color(id, "!g%s!y %L", Prefix, id, "REGISTERPENDING");
  1859.                 RegisterMod[id] = 2;
  1860.                 SQL_Check(id);
  1861.                 RegMenu(id);
  1862.             }
  1863.             else
  1864.             {
  1865.                 RegMenu(id);
  1866.             }
  1867.         }
  1868.     }
  1869. }
  1870.  
  1871. public SQL_RegCheck(id)
  1872. {
  1873.     new szQuery[128], Len, a[32];
  1874.    
  1875.     formatex(a, 31, "%s", User[id]);
  1876.  
  1877.     replace_all(a, 31, "\", "\\");
  1878.     replace_all(a, 31, "'", "\'");
  1879.    
  1880.     Len += formatex(szQuery[Len], 128, "SELECT * FROM globaloffensive ");
  1881.     Len += formatex(szQuery[Len], 128-Len,"WHERE USER = '%s'", a);
  1882.    
  1883.     new szData[2];
  1884.     szData[0] = id;
  1885.     szData[1] = get_user_userid(id);
  1886.    
  1887.     SQL_ThreadQuery(SQL_TUPLE, "SQL_RegCheckResult", szQuery, szData, 2);
  1888.    
  1889.     UserLoad[id] = 1;
  1890. }
  1891.  
  1892. public SQL_RegCheckResult(FailState, Handle:Query, Error[], Errcode, szData[], DataSize)
  1893. {
  1894.     if(FailState == TQUERY_CONNECT_FAILED || FailState == TQUERY_QUERY_FAILED)
  1895.     {
  1896.         log_amx("%s", Error);
  1897.         return;
  1898.     }
  1899.    
  1900.     new id = szData[0];
  1901.    
  1902.     if(szData[1] != get_user_userid(id))
  1903.         return;
  1904.    
  1905.     if(SQL_NumRows(Query) > 0)
  1906.     {
  1907.         Found[id] = true;
  1908.     }
  1909.     else
  1910.     {
  1911.         Found[id] = false;
  1912.     }
  1913.    
  1914.     UserLoad[id] = 0;
  1915.     RegMenu(id);
  1916. }
  1917.  
  1918. public SQL_Check(id)
  1919. {
  1920.     new szQuery[128], Len, a[32];
  1921.    
  1922.     formatex(a, 31, "%s", User[id]);
  1923.  
  1924.     replace_all(a, 31, "\", "\\");
  1925.     replace_all(a, 31, "'", "\'");
  1926.    
  1927.     Len += formatex(szQuery[Len], 128, "SELECT * FROM globaloffensive ");
  1928.     Len += formatex(szQuery[Len], 128-Len,"WHERE USER = '%s'", a);
  1929.    
  1930.     new szData[2];
  1931.     szData[0] = id;
  1932.     szData[1] = get_user_userid(id);
  1933.    
  1934.     SQL_ThreadQuery(SQL_TUPLE, "SQL_CheckResult", szQuery, szData, 2);
  1935. }
  1936.  
  1937. public SQL_CheckResult(FailState, Handle:Query, Error[], Errcode, szData[], DataSize)
  1938. {
  1939.     if(FailState == TQUERY_CONNECT_FAILED || FailState == TQUERY_QUERY_FAILED)
  1940.     {
  1941.         log_amx("%s", Error);
  1942.         return;
  1943.     }
  1944.    
  1945.     new id = szData[0];
  1946.    
  1947.     if(szData[1] != get_user_userid(id))
  1948.         return;
  1949.    
  1950.     if(RegisterMod[id] == 2)
  1951.     {  
  1952.         if(SQL_NumRows(Query) > 0)
  1953.         {
  1954.             print_color(id, "!g%s!y %L", Prefix, id, "USERNAMEUSING");
  1955.             inProgress[id] = 0;
  1956.             RegMenu(id);
  1957.         }
  1958.         else
  1959.         {
  1960.             SQL_NewAccount(id);
  1961.         }
  1962.     }
  1963.     else if(RegisterMod[id] == 1)
  1964.     {
  1965.         if(SQL_NumRows(Query) == 0)
  1966.         {
  1967.             print_color(id, "!g%s!y %L", Prefix, id, "BADPW");
  1968.             inProgress[id] = 0;
  1969.             RegMenu(id);
  1970.         }
  1971.         else
  1972.         {
  1973.             SQL_UserLoad(id);
  1974.         }
  1975.     }
  1976. }
  1977.  
  1978. public SQL_NewAccount(id)
  1979. {
  1980.     new szQuery[512], Len, a[32], b[32], c[32];
  1981.    
  1982.     formatex(a, 31, "%s", User[id]);
  1983.     formatex(b, 31, "%s", Password[id]);
  1984.     formatex(c, 31, "%s", Name[id]);
  1985.  
  1986.     replace_all(a, 31, "\", "\\");
  1987.     replace_all(a, 31, "'", "\'");
  1988.     replace_all(b, 31, "\", "\\");
  1989.     replace_all(b, 31, "'", "\'");
  1990.     replace_all(c, 31, "\", "\\");
  1991.     replace_all(c, 31, "'", "\'");
  1992.      
  1993.     Len += formatex(szQuery[Len], 511, "INSERT INTO globaloffensive ");
  1994.     Len += formatex(szQuery[Len], 511-Len,"(USER,PW,NAME) VALUES('%s','%s','%s')", a, b, c);
  1995.    
  1996.     new szData[2];
  1997.     szData[0] = id;
  1998.     szData[1] = get_user_userid(id);
  1999.  
  2000.     SQL_ThreadQuery(SQL_TUPLE,"SQL_NewAccountResult", szQuery, szData, 2);
  2001. }
  2002.  
  2003. public SQL_NewAccountResult(FailState, Handle:Query, Error[], Errcode, szData[], DataSize)
  2004. {
  2005.     if(FailState == TQUERY_CONNECT_FAILED || FailState == TQUERY_QUERY_FAILED)
  2006.     {
  2007.         log_amx("%s", Error);
  2008.         return;
  2009.     }
  2010.        
  2011.     new id = szData[0];
  2012.    
  2013.     if(szData[1] != get_user_userid(id))
  2014.         return;
  2015.    
  2016.     inProgress[id] = 0;
  2017.     RegisterMod[id] = 2;
  2018.     print_color(id, "!g%s!y %L", Prefix, id, "REGISTERED");
  2019.     print_color(id, "!g%s!y %L", Prefix, id, "REGDATAS", User[id], Password[id]);
  2020.     SQL_RegCheck(id);
  2021.    
  2022.     return;
  2023. }
  2024.  
  2025. public SQL_UserLoad(id)
  2026. {
  2027.     new szQuery[256], Len, a[32];
  2028.    
  2029.     formatex(a, 31, "%s", User[id]);
  2030.  
  2031.     replace_all(a, 31, "\", "\\");
  2032.     replace_all(a, 31, "'", "\'");
  2033.    
  2034.     Len += formatex(szQuery[Len], 256, "SELECT * FROM globaloffensive ");
  2035.     Len += formatex(szQuery[Len], 256-Len,"WHERE USER = '%s'", a);
  2036.    
  2037.     new szData[2];
  2038.     szData[0] = id;
  2039.     szData[1] = get_user_userid(id);
  2040.  
  2041.     SQL_ThreadQuery(SQL_TUPLE,"SQL_UserLoadResult", szQuery, szData, 2);
  2042. }
  2043.  
  2044. public SQL_UserLoadResult(FailState, Handle:Query, Error[], Errcode, szData[], DataSize)
  2045. {
  2046.     if(FailState == TQUERY_CONNECT_FAILED || FailState == TQUERY_QUERY_FAILED)
  2047.     {
  2048.         log_amx("%s", Error);
  2049.         return;
  2050.     }
  2051.     else
  2052.     {
  2053.         new id = szData[0];
  2054.        
  2055.         if(szData[1] != get_user_userid(id))
  2056.             return;
  2057.        
  2058.         new SqlPassword[32], i;
  2059.         SQL_ReadResult(Query, 2, SqlPassword, 31);
  2060.        
  2061.         if(equal(Password[id], SqlPassword))
  2062.         {  
  2063.             SQL_ReadResult(Query, 2, Password[id], 31);
  2064.             Activity[id] = SQL_ReadResult(Query, 132);
  2065.            
  2066.             if(Activity[id] > 0)
  2067.             {
  2068.                 print_color(id, "!g%s!y %L", Prefix, id, "USERUSING");
  2069.                 inProgress[id] = 0;
  2070.                 RegMenu(id);
  2071.                 return;
  2072.             }
  2073.            
  2074.             UserID[id] = SQL_ReadResult(Query, 0);
  2075.            
  2076.             Dollars[id] = SQL_ReadResult(Query, 4);
  2077.             Keys[id] = SQL_ReadResult(Query, 11);
  2078.            
  2079.             for(i = 1; i < sizeof(Case_Data); i++)
  2080.             {
  2081.                 Cases[id][i] = SQL_ReadResult(Query, 4+i);
  2082.             }
  2083.            
  2084.             for(i = 1; i < sizeof(SkinData); i++)
  2085.             {
  2086.                 Weapons[id][i] = SQL_ReadResult(Query, 11+i);
  2087.             }
  2088.            
  2089.             Activity[id] = 1;
  2090.            
  2091.             Kills[id] = SQL_ReadResult(Query, 133);
  2092.             CurrentRank[id] = SQL_ReadResult(Query, 134);
  2093.            
  2094.             if(CurrentRank[id] == 0)
  2095.             {
  2096.                 CurrentRank[id] = 1;
  2097.             }
  2098.            
  2099.             SQL_UpdateActivity(id);
  2100.            
  2101.             print_color(id, "!g%s!y %L", Prefix, id, "LOGINED");
  2102.            
  2103.             inProgress[id] = 0;
  2104.             Logined[id] = true;
  2105.             MainMenu(id);
  2106.         }
  2107.         else
  2108.         {
  2109.             print_color(id, "!g%s!y %L", Prefix, id, "BADPW");
  2110.             inProgress[id] = 0;
  2111.             RegMenu(id);
  2112.         }
  2113.     }
  2114. }
  2115.  
  2116. public cmdUser(id)
  2117. {
  2118.     if(Logined[id])
  2119.     {
  2120.         return PLUGIN_HANDLED;
  2121.     }
  2122.    
  2123.     if(UserLoad[id] == 1)
  2124.     {
  2125.         RegMenu(id);
  2126.         return PLUGIN_HANDLED;
  2127.     }
  2128.    
  2129.     new cmdData[32], cmdLength;
  2130.     cmdData[0] = EOS;
  2131.     read_args(cmdData, 31);
  2132.     remove_quotes(cmdData);
  2133.    
  2134.     cmdLength = strlen(cmdData);
  2135.    
  2136.     if(cmdLength < 4)
  2137.     {
  2138.         print_color(id, "!g%s!y %L", Prefix, id, "SHORT");
  2139.         return PLUGIN_HANDLED;
  2140.     }
  2141.    
  2142.     if(cmdLength > 19)
  2143.     {
  2144.         print_color(id, "!g%s!y %L", Prefix, id, "LONG");
  2145.         return PLUGIN_HANDLED;
  2146.     }
  2147.    
  2148.     copy(User[id], 31, cmdData);
  2149.     forceCmd(id, "setinfo _pw ^"^"");
  2150.     forceCmd(id, "setinfo _csgo %s", cmdData);
  2151.     SQL_RegCheck(id);
  2152.     return PLUGIN_HANDLED;
  2153. }
  2154.  
  2155. public cmdPassword(id)
  2156. {
  2157.     if(Logined[id] || strlen(User[id]) == 0)
  2158.     {
  2159.         return PLUGIN_HANDLED;
  2160.     }
  2161.    
  2162.     new cmdData[32], cmdLength;
  2163.     cmdData[0] = EOS;
  2164.     read_args(cmdData, 31);
  2165.     remove_quotes(cmdData);
  2166.    
  2167.     cmdLength = strlen(cmdData);
  2168.    
  2169.     if(cmdLength < 4)
  2170.     {
  2171.         print_color(id, "!g%s!y %L", Prefix, id, "SHORT");
  2172.         return PLUGIN_HANDLED;
  2173.     }
  2174.    
  2175.     if(cmdLength > 19)
  2176.     {
  2177.         print_color(id, "!g%s!y %L", Prefix, id, "LONG");
  2178.         return PLUGIN_HANDLED;
  2179.     }
  2180.    
  2181.     copy(Password[id], 31, cmdData);
  2182.     RegMenu(id);
  2183.     return PLUGIN_HANDLED;
  2184. }
  2185.  
  2186. public SQL_Results(FailState, Handle:Query, Error[], Errcode, szData[], DataSize)
  2187. {
  2188.     if(FailState == TQUERY_CONNECT_FAILED || FailState == TQUERY_QUERY_FAILED)
  2189.     {
  2190.         log_amx("%s", Error);
  2191.         return;
  2192.     }
  2193. }
  2194.  
  2195. public SQL_FirstLoad()
  2196. {
  2197.     SQL_TUPLE = SQL_MakeDbTuple(SQL_Host, SQL_User, SQL_Password, SQL_Database);
  2198.     SQL_Reload();
  2199. }
  2200.  
  2201. public SQL_Reload()
  2202. {
  2203.     new szQuery[256], Len;
  2204.    
  2205.     Len += formatex(szQuery[Len], 256, "UPDATE globaloffensive SET ");
  2206.     Len += formatex(szQuery[Len], 255-Len,"ACT = '0' ");
  2207.     Len += formatex(szQuery[Len], 255-Len,"WHERE ACT = '1'");
  2208.    
  2209.     SQL_ThreadQuery(SQL_TUPLE,"SQL_Results", szQuery);
  2210.     ServerLoaded = 1;
  2211. }
  2212.  
  2213. public SQL_UpdateActivity(id)
  2214. {
  2215.     new sQuery[512], szQuery[256], a[32];
  2216.     formatex(a, 31, "%s", Name[id]);
  2217.  
  2218.     replace_all(a, 31, "\", "\\");
  2219.     replace_all(a, 31, "'", "\'");
  2220.    
  2221.     formatex(szQuery, charsmax(szQuery), "UPDATE globaloffensive SET ");
  2222.     add(sQuery, charsmax(sQuery), szQuery);
  2223.    
  2224.     formatex(szQuery, charsmax(szQuery),"NAME = '%s', ", a);
  2225.     add(sQuery, charsmax(sQuery), szQuery);
  2226.    
  2227.     formatex(szQuery, charsmax(szQuery),"ACT = '%d' ", Activity[id]);
  2228.     add(sQuery, charsmax(sQuery), szQuery);
  2229.    
  2230.     formatex(szQuery, charsmax(szQuery),"WHERE Id = '%d'", UserID[id]);
  2231.     add(sQuery, charsmax(sQuery), szQuery);
  2232.    
  2233.     SQL_ThreadQuery(SQL_TUPLE, "SQL_Results", sQuery);
  2234. }
  2235.  
  2236. public SQL_UpdateUser(id)
  2237. {  
  2238.     if(!Logined[id])
  2239.         return;
  2240.    
  2241.     new sQuery[2000], szQuery[256];
  2242.     new a[32], i;
  2243.     formatex(a, 31, "%s", Name[id]);
  2244.  
  2245.     replace_all(a, 31, "\", "\\");
  2246.     replace_all(a, 31, "'", "\'");
  2247.    
  2248.     formatex(szQuery, charsmax(szQuery), "UPDATE globaloffensive SET ");
  2249.     add(sQuery, charsmax(sQuery), szQuery);
  2250.    
  2251.     formatex(szQuery, charsmax(szQuery),"NAME = '%s', ", a);
  2252.     add(sQuery, charsmax(sQuery), szQuery);
  2253.    
  2254.     formatex(szQuery, charsmax(szQuery),"DOLLAR = '%d', ", Dollars[id]);
  2255.     add(sQuery, charsmax(sQuery), szQuery);
  2256.    
  2257.     formatex(szQuery, charsmax(szQuery),"K = '%d', ", Keys[id]);
  2258.     add(sQuery, charsmax(sQuery), szQuery);
  2259.    
  2260.     formatex(szQuery, charsmax(szQuery),"KILLS = '%d', ", Kills[id]);
  2261.     add(sQuery, charsmax(sQuery), szQuery);
  2262.    
  2263.     formatex(szQuery, charsmax(szQuery),"RANK = '%d', ", CurrentRank[id]);
  2264.     add(sQuery, charsmax(sQuery), szQuery);
  2265.    
  2266.     for(i = 1; i < sizeof(Case_Data); i++)
  2267.     {
  2268.         formatex(szQuery, charsmax(szQuery), "C%d = '%d', ", i, Cases[id][i]);
  2269.         add(sQuery, charsmax(sQuery), szQuery);
  2270.     }
  2271.    
  2272.     for(i = 1; i < sizeof(SkinData); i++)
  2273.     {
  2274.         formatex(szQuery, charsmax(szQuery), "W%d = '%d', ", i, Weapons[id][i]);
  2275.         add(sQuery, charsmax(sQuery), szQuery);
  2276.     }
  2277.    
  2278.     formatex(szQuery, charsmax(szQuery),"ACT = '%d' ", Activity[id]);
  2279.     add(sQuery, charsmax(sQuery), szQuery);
  2280.    
  2281.     formatex(szQuery, charsmax(szQuery),"WHERE Id = '%d'", UserID[id]);
  2282.     add(sQuery, charsmax(sQuery), szQuery);
  2283.    
  2284.     SQL_ThreadQuery(SQL_TUPLE, "SQL_Results", sQuery);
  2285. }
  2286.  
  2287. public client_putinserver(id)
  2288. {
  2289.     if(is_user_bot(id) || is_user_hltv(id))
  2290.         return PLUGIN_HANDLED;
  2291.    
  2292.     for(new i = 1; i < 3; i++)
  2293.         inUse[id][i] = 0;
  2294.        
  2295.     UserLoad[id] = 0;
  2296.     inProgress[id] = 0;
  2297.     Logined[id] = false;
  2298.     client_print(id, print_console, "#1");
  2299.     copy(Password[id], 31, "");
  2300.     copy(User[id], 31, "");
  2301.     get_user_name(id, Name[id], 31);
  2302.     client_print(id, print_console, "#1");
  2303.     get_user_info(id, "_csgo", User[id], charsmax(User[]));
  2304.     if(19 > strlen(User[id]) > 4)
  2305.         set_task(5.0, "SQL_RegCheck", id);
  2306.     else
  2307.         copy(User[id], 31, "");
  2308.     client_print(id, print_console, "#1");
  2309.     forceCmd(id, "bind t ^"impulse 201^"");
  2310.     forceCmd(id, "bind f ^"impulse 100^"");
  2311.     client_print(id, print_console, "#1");
  2312.     Activity[id] = 0;
  2313.     DeleteTradeandMarket(id);
  2314.    
  2315.     return PLUGIN_CONTINUE;
  2316. }
  2317.  
  2318. public client_disconnected(id)
  2319. {
  2320.     DeleteTradeandMarket(id);
  2321.     remove_task(id);
  2322.     if(Logined[id])
  2323.     {
  2324.         Logined[id] = false;
  2325.         Activity[id] = 0;
  2326.         SQL_UpdateActivity(id);
  2327.         log_amx("User Disconnected");
  2328.     }
  2329. }
  2330.  
  2331. public DeleteTradeandMarket(id)
  2332. {
  2333.     new kid;
  2334.    
  2335.     if(TradePartner[id] > 0)
  2336.         kid = TradePartner[id];
  2337.     else if(TradeID[id] > 0)
  2338.         kid = TradeID[id];
  2339.    
  2340.     inTrade[id] = 0;
  2341.     TradeDollars[id] = 0;
  2342.     TradeFounding[id] = 0;
  2343.     TradePartner[id] = 0;
  2344.     TradeItem[id] = 0;
  2345.     TradeID[id] = 0;
  2346.    
  2347.     if(kid > 0)
  2348.     {
  2349.         inTrade[id] = 0;
  2350.         TradeDollars[id] = 0;
  2351.         TradeFounding[id] = 0;
  2352.         TradePartner[id] = 0;
  2353.         TradeItem[id] = 0;
  2354.         TradeID[id] = 0;
  2355.         PTradeId[id] = 0;
  2356.         PTradeId[kid] = 0;
  2357.     }
  2358. }
  2359.  
  2360. public MMarketMenu(id)
  2361. {
  2362.     new String[128];
  2363.     formatex(String, charsmax(String), "%L", id, "MMARKET", Dollars[id]);
  2364.     new Menu = menu_create(String, "MMarketMenuh");
  2365.    
  2366.     formatex(String, charsmax(String), "%L", id, "SELLI");
  2367.     menu_additem(Menu, String, "1");
  2368.    
  2369.     formatex(String, charsmax(String), "%L", id, "BUYI");
  2370.     menu_additem(Menu, String, "2");
  2371.    
  2372.     menu_display(id, Menu);
  2373. }
  2374.  
  2375. public MMarketMenuh(id, Menu, Item)
  2376. {
  2377.     if(Item == MENU_EXIT)
  2378.     {
  2379.         menu_destroy(Menu);
  2380.         return;
  2381.     }
  2382.    
  2383.     new Data[14], Line[32];
  2384.     new Access, Callback;
  2385.     menu_item_getinfo(Menu, Item, Access, Data, charsmax(Data), Line, charsmax(Line), Callback);
  2386.    
  2387.     new x = str_to_num(Data);
  2388.    
  2389.     switch(x)
  2390.     {
  2391.         case 1 : {
  2392.             MarketMenu(id);
  2393.         }
  2394.        
  2395.         case 2 : {
  2396.             BuyMenu(id);
  2397.         }
  2398.     }
  2399. }
  2400.  
  2401. public MarketMenu(id)
  2402. {      
  2403.     new String[128], ItemName[32];
  2404.    
  2405.     if(MarketItem[id] > 0 && MarketItem[id] <= 90+MAXKNIFESKINS)
  2406.     {
  2407.         formatex(ItemName, charsmax(ItemName), "%s", SkinData[MarketItem[id]][0]);
  2408.     }
  2409.     else if(MarketItem[id] > 90+MAXKNIFESKINS && MarketItem[id] <= 90+MAXKNIFESKINS+MAXCASES)
  2410.     {
  2411.         formatex(ItemName, charsmax(ItemName), "%s", Case_Data[MarketItem[id]-(90+MAXKNIFESKINS)][0]);
  2412.     }
  2413.     else if(MarketItem[id] > 0)
  2414.     {
  2415.         formatex(ItemName, charsmax(ItemName), "%s", KeyName);
  2416.     }
  2417.    
  2418.     formatex(String, charsmax(String), "%L", id, "MARKET");
  2419.     new menu = menu_create(String, "MarketMenuh" );
  2420.    
  2421.     if(InMarket[id] == 0)
  2422.     {
  2423.         if(MarketItem[id] == 0)
  2424.         {
  2425.             formatex(String, charsmax(String), "%L^n", id, "CHOOSEITEM");
  2426.         }
  2427.         else
  2428.         {
  2429.             formatex(String, charsmax(String), "%L", id, "ITEM", ItemName);
  2430.         }
  2431.         menu_additem(menu, String, "1");
  2432.        
  2433.         formatex(String, charsmax(String), "%L", id, "CHOOSESELLITEM", MarketDollar[id]);
  2434.         menu_additem(menu, String, "2");
  2435.        
  2436.         formatex(String, charsmax(String), "%L", id, "TOMARKET");
  2437.         menu_additem(menu, String, "3");
  2438.     }
  2439.     else
  2440.     {
  2441.         formatex(String, charsmax(String), "%L", id, "INMARKET", ItemName, MarketDollar[id]);
  2442.         menu_additem(menu, String, "0");
  2443.     }
  2444.    
  2445.     menu_display(id, menu);
  2446. }
  2447.  
  2448. public MarketMenuh(id, Menu, Item)
  2449. {
  2450.     if(Item == MENU_EXIT)
  2451.     {
  2452.         menu_destroy(Menu);
  2453.         return;
  2454.     }
  2455.    
  2456.     new Data[14], Line[32];
  2457.     new Access, Callback;
  2458.     menu_item_getinfo(Menu, Item, Access, Data, charsmax(Data), Line, charsmax(Line), Callback);
  2459.    
  2460.     new x = str_to_num(Data);
  2461.    
  2462.     switch(x)
  2463.     {
  2464.         case 0:
  2465.         {
  2466.             if(InMarket[id]) {
  2467.                 if(MarketItem[id] > 0 && MarketItem[id] <= 90+MAXKNIFESKINS)
  2468.                 {
  2469.                     Weapons[id][MarketItem[id]]++;
  2470.                 }
  2471.                 else if(MarketItem[id] > 90+MAXKNIFESKINS && MarketItem[id] <= 90+MAXKNIFESKINS+MAXCASES)
  2472.                 {
  2473.                     Cases[id][MarketItem[id]-(90+MAXKNIFESKINS)]++;
  2474.                 }
  2475.                 else if(MarketItem[id] > 0)
  2476.                 {
  2477.                     Keys[id]++;
  2478.                 }
  2479.             }
  2480.             InMarket[id] = 0;
  2481.             MarketItem[id] = 0;
  2482.             MarketDollar[id] = 0;
  2483.             MChooseItem(id);
  2484.         }
  2485.        
  2486.         case 1:
  2487.         {
  2488.             MChooseItem(id);
  2489.         }
  2490.        
  2491.         case 2:
  2492.         {
  2493.             client_cmd(id, "messagemode MARKETDOLLAR");
  2494.             MarketMenu(id);
  2495.         }
  2496.        
  2497.         case 3:
  2498.         {
  2499.             if(MarketItem[id] > 0)
  2500.             {
  2501.                 new ItemName[32];
  2502.    
  2503.                 if(MarketItem[id] > 0 && MarketItem[id] <= 90+MAXKNIFESKINS)
  2504.                 {
  2505.                     formatex(ItemName, charsmax(ItemName), "%s", SkinData[MarketItem[id]][0]);
  2506.                     Weapons[id][MarketItem[id]]--;
  2507.                 }
  2508.                 else if(MarketItem[id] > 90+MAXKNIFESKINS && MarketItem[id] <= 90+MAXKNIFESKINS+MAXCASES)
  2509.                 {
  2510.                     formatex(ItemName, charsmax(ItemName), "%s", Case_Data[MarketItem[id]-(90+MAXKNIFESKINS)][0]);
  2511.                     Cases[id][MarketItem[id]-(90+MAXKNIFESKINS)]--;
  2512.                 }
  2513.                 else if(MarketItem[id] > 0)
  2514.                 {
  2515.                     formatex(ItemName, charsmax(ItemName), "%s", KeyName);
  2516.                     Keys[id]--;
  2517.                 }
  2518.                
  2519.                 for(new i; i < MAXP; i++)
  2520.                     if(is_user_connected(i))
  2521.                         print_color(i, "!g%s!y %L", Prefix, i, "SOLVEDTOMARKET", Name[id], ItemName, MarketDollar[id]);
  2522.                        
  2523.                 InMarket[id] = 1;
  2524.                 MarketMenu(id);
  2525.             }
  2526.             else
  2527.             {
  2528.                 MarketMenu(id);
  2529.             }
  2530.         }
  2531.     }
  2532. }
  2533.  
  2534. public BuyMenu(id)
  2535. {      
  2536.     new String[128], ItemName[32];
  2537.    
  2538.     formatex(String, charsmax(String), "%L", id, "MARKETMENUBUY", Dollars[id]);
  2539.     new Menu = menu_create(String, "BuyMenuh" );
  2540.    
  2541.     for(new i; i < MAXP; i++)
  2542.     {
  2543.         if(!is_user_connected(i) || !Logined[i] || id == i || InMarket[i] == 0)
  2544.             continue;
  2545.        
  2546.         if(MarketItem[i] > 0 && MarketItem[i] <= 90+MAXKNIFESKINS)
  2547.         {
  2548.             formatex(ItemName, charsmax(ItemName), "%s", SkinDataTrade[MarketItem[i]]);
  2549.         }
  2550.         else if(MarketItem[i] > 90+MAXKNIFESKINS && MarketItem[i] <= 90+MAXKNIFESKINS+MAXCASES)
  2551.         {
  2552.             formatex(ItemName, charsmax(ItemName), "%s", Case_Data[MarketItem[i]-(90+MAXKNIFESKINS)][0]);
  2553.         }
  2554.         else if(MarketItem[i] > 0)
  2555.         {
  2556.             formatex(ItemName, charsmax(ItemName), "%s", KeyName);
  2557.         }
  2558.        
  2559.         new Nts[3];
  2560.         num_to_str(i, Nts, 2);
  2561.         formatex(String, charsmax(String), "%L", id, "SELLITEM", ItemName, MarketDollar[i], Name[i]);
  2562.         menu_additem(Menu, String, Nts);
  2563.     }
  2564.    
  2565.     menu_display(id, Menu);
  2566. }
  2567.  
  2568. public BuyMenuh(id, Menu, Item)
  2569. {
  2570.     if(Item == MENU_EXIT)
  2571.     {
  2572.         menu_destroy(Menu);
  2573.         return;
  2574.     }
  2575.    
  2576.     new Data[14], Line[32];
  2577.     new Access, Callback;
  2578.     menu_item_getinfo(Menu, Item, Access, Data, charsmax(Data), Line, charsmax(Line), Callback);
  2579.    
  2580.     new x = str_to_num(Data);
  2581.    
  2582.     if(InMarket[x] > 0 && MarketItem[x] > 0 && MarketDollar[x] > 0)
  2583.     {
  2584.         if(Dollars[id] < MarketDollar[x])
  2585.         {
  2586.             print_color(id, "!g%s!y %L", Prefix, id, "NOTENOUGHDOLLAR");
  2587.             return;
  2588.         }
  2589.        
  2590.         if(MarketItem[x] > 0 && MarketItem[x] <= 90+MAXKNIFESKINS)
  2591.         {
  2592.             Weapons[id][MarketItem[x]]++;
  2593.         }
  2594.         else if(MarketItem[x] > 90+MAXKNIFESKINS && MarketItem[x] <= 90+MAXKNIFESKINS+MAXCASES)
  2595.         {
  2596.             Cases[id][MarketItem[x]-(90+MAXKNIFESKINS)]++;
  2597.         }
  2598.         else if(MarketItem[x] > 0)
  2599.         {
  2600.             Keys[id]++;
  2601.         }
  2602.        
  2603.         Dollars[id] -= MarketDollar[x];
  2604.         Dollars[x] += MarketDollar[x];
  2605.         InMarket[x] = 0;
  2606.        
  2607.         new ItemName[32];
  2608.    
  2609.         if(MarketItem[id] > 0 && MarketItem[id] <= 90+MAXKNIFESKINS)
  2610.         {
  2611.             formatex(ItemName, charsmax(ItemName), "%s", SkinData[MarketItem[id]][0]);
  2612.         }
  2613.         else if(MarketItem[id] > 90+MAXKNIFESKINS && MarketItem[id] <= 90+MAXKNIFESKINS+MAXCASES)
  2614.         {
  2615.             formatex(ItemName, charsmax(ItemName), "%s", Case_Data[MarketItem[id]-(90+MAXKNIFESKINS)][0]);
  2616.         }
  2617.         else if(MarketItem[id] > 0)
  2618.         {
  2619.             formatex(ItemName, charsmax(ItemName), "%s", KeyName);
  2620.         }
  2621.        
  2622.        
  2623.         for(new i; i < MAXP; i++)
  2624.             if(is_user_connected(i))
  2625.                 print_color(i, "!g%s!y %L", Prefix, i, "BUYINGITEM", Name[id], ItemName, MarketDollar[x], Name[x]);
  2626.                
  2627.         MarketDollar[x] = 0;
  2628.         MarketItem[x] = 0;
  2629.         SQL_UpdateUser(id);
  2630.         SQL_UpdateUser(x);
  2631.     }
  2632. }
  2633.  
  2634. public Guns(id)
  2635. {
  2636.     if(Choosen[id] > 1)
  2637.     {
  2638.         print_color(id, "!g%s!y %L", Prefix, id, "WPMESSAGE");
  2639.     }
  2640.     else if(Choosen[id] < 1)
  2641.     {
  2642.         Choosen[id] = 0;
  2643.         TakeWeapons(id);
  2644.     }
  2645. }
  2646.  
  2647. public PlayerSpawn(id)
  2648. {
  2649.     if(!is_user_alive(id))
  2650.         return;
  2651.    
  2652.     if(get_pcvar_num(CvarWeaponMenu) == 1)
  2653.     {
  2654.         Choosen[id] = 0;
  2655.         TakeWeapons(id);
  2656.        
  2657.         give_item(id, "item_kevlar");
  2658.         give_item(id, "item_assaultsuit");
  2659.     }
  2660. }
  2661.  
  2662. public TakeWeapons(id)
  2663. {
  2664.     if(is_user_alive(id))
  2665.     {
  2666.         Choosen[id] = 0;
  2667.         new HasC4;
  2668.        
  2669.         if(user_has_weapon(id, CSW_C4))
  2670.         {
  2671.             HasC4 = 1;
  2672.         }
  2673.        
  2674.         strip_user_weapons(id);
  2675.         give_item(id, "weapon_knife");
  2676.         WeaponMenu(id);
  2677.        
  2678.         if(HasC4 == 1)
  2679.         {
  2680.             give_item(id, "weapon_c4");
  2681.         }
  2682.        
  2683.         if(cs_get_user_team(id) == CS_TEAM_CT)
  2684.         {
  2685.             give_item(id, "item_thighpack");
  2686.         }
  2687.     }
  2688.     return PLUGIN_CONTINUE;
  2689. }
  2690.  
  2691. public WeaponMenu(id)
  2692. {
  2693.     if(Choosen[id] > 1)
  2694.         return;
  2695.        
  2696.     new String[128], Menu;
  2697.    
  2698.     if(Choosen[id] == 0)
  2699.     {
  2700.         formatex(String, 127, "%s %L", Prefix, LANG_SERVER, "WPMENU2");
  2701.         Menu = menu_create(String, "WeaponMenuh");
  2702.        
  2703.         for(new i = 1; i < sizeof(FirstWeaponNames); i++)
  2704.         {
  2705.             new NumToString[6];
  2706.             num_to_str(i, NumToString, 5);
  2707.             formatex(String, charsmax(String), "%s", FirstWeaponNames[i][0]);
  2708.             menu_additem(Menu, String, NumToString);
  2709.         }
  2710.     }
  2711.    
  2712.     if(Choosen[id] == 1)
  2713.     {
  2714.         formatex(String, 127, "%s %L", Prefix, LANG_SERVER, "WPMENU2");
  2715.         Menu = menu_create(String, "WeaponMenuh");
  2716.        
  2717.         for(new i = 1; i < sizeof(SecondaryWeaponNames); i++)
  2718.         {
  2719.             new NumToString[6];
  2720.             num_to_str(i, NumToString, 5);
  2721.             formatex(String, charsmax(String), "%s", SecondaryWeaponNames[i][0]);
  2722.             menu_additem(Menu, String, NumToString);
  2723.         }
  2724.     }
  2725.    
  2726.     menu_display(id, Menu);
  2727. }
  2728.  
  2729. public WeaponMenuh(id, Menu, Item)
  2730. {
  2731.     if(Item == MENU_EXIT)
  2732.     {
  2733.         menu_destroy(Menu);
  2734.         return;
  2735.     }
  2736.    
  2737.     new Data[14], Line[32];
  2738.     new Access, Callback;
  2739.     menu_item_getinfo(Menu, Item, Access, Data, charsmax(Data), Line, charsmax(Line), Callback);
  2740.    
  2741.     new x = str_to_num(Data);
  2742.    
  2743.     if(Choosen[id] == 0)
  2744.     {
  2745.         give_item(id, FirstWeaponNames[x][1]);
  2746.         cs_set_user_bpammo(id, FirstWeaponNames[x][2][0], 90);
  2747.     }
  2748.     if(Choosen[id] == 1)
  2749.     {
  2750.         give_item(id, SecondaryWeaponNames[x][1]);
  2751.         cs_set_user_bpammo(id, SecondaryWeaponNames[x][2][0], 90);
  2752.     }
  2753.        
  2754.     Choosen[id]++;
  2755.    
  2756.     if(Choosen[id] >= 2)
  2757.     {
  2758.         Grenades(id);
  2759.     }
  2760.        
  2761.     WeaponMenu(id);
  2762. }
  2763.  
  2764. stock PlayAnimation(const Player, const Sequence)
  2765. {
  2766.     set_pev(Player, pev_weaponanim, Sequence);
  2767.    
  2768.     message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, .player = Player);
  2769.     write_byte(Sequence);
  2770.     write_byte(pev(Player, pev_body));
  2771.     message_end();
  2772. }
  2773.  
  2774. stock print_color(const id, const input[], any:...)
  2775. {
  2776.     new count = 1, players[32];
  2777.     static msg[191];
  2778.     vformat(msg, 190, input, 3);
  2779.  
  2780.     replace_all(msg, 190, "!g", "^4");
  2781.     replace_all(msg, 190, "!y", "^1");
  2782.     replace_all(msg, 190, "!t", "^3");  
  2783.  
  2784.     if(id) players[0] = id; else get_players(players, count, "ch");
  2785.     {
  2786.         for (new i = 0; i < count; i++)
  2787.         {
  2788.             if (is_user_connected(players[i]))
  2789.             {
  2790.                 message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i]);
  2791.                 write_byte(players[i]);
  2792.                 write_string(msg);
  2793.                 message_end();
  2794.             }
  2795.         }
  2796.     }
  2797.  
  2798.     return PLUGIN_HANDLED;
  2799. }
  2800.  
  2801. stock Grenades(id)
  2802. {
  2803.     give_item(id, "weapon_hegrenade");
  2804.     give_item(id, "weapon_flashbang");
  2805.    
  2806.     if(GiveSmokeGrenade == 1)
  2807.     {
  2808.         give_item(id, "weapon_smokegrenade");
  2809.     }
  2810. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement