Advertisement
Mr-Co0L

Untitled

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