Advertisement
Guest User

Untitled

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