Advertisement
Guest User

Untitled

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