Advertisement
Mr-Co0L

Untitled

Apr 25th, 2019
166
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 87.21 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. #include <adv_vault>
  12.  
  13. #define PLUGIN "CSGO OUTSTANDING"
  14. #define VERSION "2.0_final"
  15. #define AUTHOR "FaTzZu reparat de SideWinder"
  16.  
  17. #define get_user_money(%1) cs_get_user_money(%1)
  18. #define set_user_money(%1,%2) cs_set_user_money(%1,%2)
  19. #define ENG_NULLENT -1
  20. #define EV_INT_WEAPONKEY EV_INT_impulse
  21.  
  22. #define SKINS_MAX 32
  23.  
  24.  
  25. #define KEY_COST 50
  26. #define RAFFLE_COST 10
  27.  
  28. #define FRAGMENTS_TO_CRAFT 3
  29. #define DROP_FRAGMENTS_CHANCE 60
  30.  
  31. #define POINTS_CHANCE 50
  32. #define POINTS_FOR_KILL 5
  33.  
  34. #define DROP_CASE_CHANCE 10
  35. #define MAXPLAYERS 32
  36.  
  37. #define CLANNAME_LENGHT 20
  38. #define CLAN_MAXMEMBERS 5
  39. #define CLAN_MINMEMBERS 2
  40. #define MENU_TITTLE_LENGHT 128
  41. #define PASSWORD_LENGHT 50
  42.  
  43. new const MENU_PREFIX[ ] = "\r[ \yCS:GO Outstanding \dCLAN \ySYSTEM \r]\w";
  44. new const CHAT_PREFIX[ ] = "!g[ CS:GO Outstanding CLAN SYSTEM ]!n";
  45.  
  46. /* ==== END EDIT SECTION ==== */
  47.  
  48. #define MP MAXPLAYERS+1
  49.  
  50. #define flag_get(%1,%2) (%1 & (1 << (%2 & 31)))
  51. #define flag_set(%1,%2) (%1 |= (1 << (%2 & 31)))
  52. #define flag_unset(%1,%2) (%1 &= ~(1 << (%2 & 31)))
  53.  
  54. #define TASK_HUD 1000
  55. #define ID_HUD ( taskid - TASK_HUD )
  56.  
  57. enum
  58. {
  59. C_MEMBERSHIP, C_CLANNAME, C_DATE, C_PASS, C_PNAME, C_KILLS, C_DEATHS, C_HS_KILLS, C_HS_DEATHS,
  60. C_KNIFE_KILLS, C_KNIFE_DEATHS, C_SUICIDES, C_SPAWNS, C_RANGE, C_CLAN_CHAT,
  61.  
  62. C_MAX
  63. }
  64.  
  65. enum { WITHOUT_CLAN = 0, CLAN_MEMBER, CLAN_BOSS, CLAN_OWNER, MAX_MEMBER_RANGES }
  66. enum { LOAD= 0, SAVE }
  67. enum _:RANGES { Rank_NAME[ 50 ], Rank_FRAGS }
  68. enum { NOT_REGISTERED = 0, REGISTERED, LOGGUED, MAX_STATUS }
  69. enum _:DATA_RANK { KILLS, DEATHS, HS_KILLS, HS_DEATHS, KNIFE_KILLS, KNIFE_DEATHS, SUICIDES, SPAWNS }
  70. enum _:BITS { CONNECTED, ALIVE, CAN_CHANGE_PW }
  71. enum _:MSGS { MSG_VGUI, MSG_SHOWMENU, MSG_SAYTEXT, MSG_TEAMINFO }
  72.  
  73. new kBits[BITS], kMsg[MSGS];
  74.  
  75. new kClanMembership[ MP ], kRange[ MP ], kActivatedClanChat[ MP ];
  76.  
  77. new kInvited[ MP ], kClanOwner[ MP ], kDataRank[ MP ][ DATA_RANK ];
  78.  
  79. new kClanName[ MP ][ CLANNAME_LENGHT ], kClanNameConfirmated[ MP ];
  80.  
  81. new kPlayerName[ MP ][ 32 ], kPname[ MP ][ 32 ];
  82.  
  83. new vault, kFields[ C_MAX ], kPassword[ MP ][ PASSWORD_LENGHT ], kPassword2[ MP ][ PASSWORD_LENGHT ], kDate[ MP ][ 32 ], kStatus[ MP ];
  84.  
  85. new hudSync;
  86.  
  87. new const Status[ MAX_STATUS ][ ] = { "Neinregistrat", "Inregistrat", "Logat" };
  88. new const MemberRange[ MAX_MEMBER_RANGES ][ ] = { "Fara Clan", "Membru", "Conducator", "Fondator" };
  89.  
  90. new const Ranks[][RANGES] =
  91. {
  92. { "Silver I",0 },
  93. { "Silver II", 300 },
  94. { "Silver III", 500 },
  95. { "Silver IV", 700 },
  96. { "Silver Elite", 800 },
  97. { "Silver Elite Master", 900 },
  98. { "Gold Nova I", 1000 },
  99. { "Gold Nova II", 1200 },
  100. { "Gold Nova III", 1300 },
  101. { "Gold Nova Master", 1400 },
  102. { "Master Guardian I",1500 },
  103. { "Master Guardian II", 1700 },
  104. { "Master Guardian Elite", 1800 },
  105. { "Distinguished Master Guardian", 1900 },
  106. { "Legendary Eagle", 2000 },
  107. { "Legendary Eagle Master", 2100 },
  108. { "Supreme Master First Class", 2200 },
  109. { "The Global Elite", 2500 }
  110. };
  111.  
  112. enum
  113. {
  114. FM_CS_TEAM_UNASSIGNED = 0,
  115. FM_CS_TEAM_T,
  116. FM_CS_TEAM_CT,
  117. FM_CS_TEAM_SPECTATOR
  118. };
  119.  
  120. new FW_PRETHINK_POST
  121.  
  122. new user_coin_bet[33], user_incoin_challenge[33], user_coin[33];
  123.  
  124. enum Data {
  125. Points,
  126. Case,
  127. Keys,
  128. Fragments
  129. }
  130. enum eData {
  131. Name[32],
  132. vModel[64],
  133. pModel[64],
  134. Type,
  135. Chance
  136. }
  137.  
  138. new g_aSkins[SKINS_MAX][eData];
  139.  
  140. /* Gift system */
  141. new g_iReceiver[33], g_iIterator[33], g_iSkinToGift[33];
  142.  
  143. /* Destroy system */
  144. new g_iSkinToDestroy[33];
  145.  
  146. /* Raffle system */
  147. new g_iRafflePlayers[33], raffleMembers;
  148.  
  149. /* Market system */
  150. new g_iSkinsInMarket[33][SKINS_MAX], g_iPrice[33], iSeller[33][SKINS_MAX];
  151.  
  152. /* Mute system */
  153. new iMutedPlayers[33][33];
  154.  
  155. /* Core */
  156. new g_iPlayerSkins[33][SKINS_MAX], g_iPlayerData[33][Data];
  157. new g_iSkins[33][SKINS_MAX], g_iMaxChance, g_iShowedSkin[33][31], skinsNum;
  158.  
  159. new const szTag[] = "[CS:GO OUTSTANDING]"
  160. public plugin_init()
  161. {
  162. register_plugin(PLUGIN, VERSION, AUTHOR)
  163.  
  164. register_clcmd("enter_coin_bet", "clcmd_coinbet")
  165.  
  166. register_logevent("evRoundEnd",2, "1=Round_End");
  167. register_event("DeathMsg", "evDeathMsg", "a");
  168.  
  169. register_clcmd ( "chooseteam", "cmdChangeTeam" );
  170. register_clcmd ( "jointeam", "cmdChangeTeam" );
  171.  
  172. register_event("SendAudio", "terroristsWin" , "a", "2&%!MRAD_terwin");
  173. register_event("SendAudio", "ctsWin", "a", "2&%!MRAD_ctwin");
  174. RegisterHam(Ham_Killed, "player", "ham_PlayerKilledPost", true );
  175. RegisterHam(Ham_Spawn, "player", "ham_PlayerSpawnPost", true );
  176.  
  177. register_forward( FM_ClientUserInfoChanged, "fm_ClientInfoChanged" );
  178.  
  179. register_clcmd( "say", "Block_Say" );
  180. register_clcmd( "say_team", "Block_TeamSay" );
  181. register_clcmd( "JOIN_CLAN_NAME", "JoinClanName" );
  182. register_clcmd( "JOIN_PASSWORD", "JoinPassword" );
  183.  
  184.  
  185. kMsg[MSG_VGUI] = get_user_msgid("VGUIMenu");
  186. kMsg[MSG_SHOWMENU] = get_user_msgid("ShowMenu");
  187. kMsg[MSG_SAYTEXT] = get_user_msgid("SayText");
  188. kMsg[MSG_TEAMINFO] = get_user_msgid("TeamInfo");
  189. register_message(kMsg[MSG_VGUI], "message_VGUImenu");
  190. register_message(kMsg[MSG_SHOWMENU], "message_VGUImenu");
  191.  
  192.  
  193. hudSync = CreateHudSyncObj();
  194.  
  195.  
  196. vault = adv_vault_open( "CLAN_SYSTEM", true );
  197.  
  198. kFields[ C_MEMBERSHIP ] = adv_vault_register_field( vault, "MEMBRESIA");
  199. kFields[ C_CLANNAME ] = adv_vault_register_field( vault, "NOMBRE DE CLAN", DATATYPE_STRING, CLANNAME_LENGHT-1 );
  200. kFields[ C_DATE ] = adv_vault_register_field( vault, "FECHA", DATATYPE_STRING, 32 );
  201. kFields[ C_PASS ] = adv_vault_register_field( vault, "PASSWORD", DATATYPE_STRING, PASSWORD_LENGHT-1 );
  202. kFields[ C_PNAME ] = adv_vault_register_field( vault, "NOMBRE", DATATYPE_STRING, 31 );
  203. kFields[ C_KILLS ] = adv_vault_register_field( vault, "KILLS" );
  204. kFields[ C_DEATHS ] = adv_vault_register_field( vault, "DEATHS" );
  205. kFields[ C_HS_KILLS ] = adv_vault_register_field( vault, "HS KILLS" );
  206. kFields[ C_HS_DEATHS ] = adv_vault_register_field( vault, "HS DEATHS" );
  207. kFields[ C_KNIFE_KILLS ] = adv_vault_register_field( vault, "KNIFE KILLS" );
  208. kFields[ C_KNIFE_DEATHS ] = adv_vault_register_field( vault, "KNIFE DEATHS" );
  209. kFields[ C_SUICIDES ] = adv_vault_register_field( vault, "SUICIDES" );
  210. kFields[ C_SPAWNS ] = adv_vault_register_field( vault, "RESPAWNS" );
  211. kFields[ C_RANGE ] = adv_vault_register_field( vault, "Rank" );
  212. kFields[ C_CLAN_CHAT ] = adv_vault_register_field( vault, "CLANCHAT" );
  213.  
  214. adv_vault_init( vault );
  215.  
  216. // Weapon entity names
  217. new const szWeaponNames[][] = {
  218. "", "weapon_p228", "", "weapon_scout", "weapon_hegrenade", "weapon_xm1014", "weapon_c4", "weapon_mac10",
  219. "weapon_aug", "weapon_smokegrenade", "weapon_elite", "weapon_fiveseven", "weapon_ump45", "weapon_sg550",
  220. "weapon_galil", "weapon_famas", "weapon_usp", "weapon_glock18", "weapon_awp", "weapon_mp5navy", "weapon_m249",
  221. "weapon_m3", "weapon_m4a1", "weapon_tmp", "weapon_g3sg1", "weapon_flashbang", "weapon_deagle", "weapon_sg552",
  222. "weapon_ak47", "weapon_knife", "weapon_p90"
  223. };
  224. for (new i; i < sizeof(szWeaponNames); i++)
  225. {
  226. if (szWeaponNames[i][0])
  227. {
  228. RegisterHam(Ham_Item_AddToPlayer, szWeaponNames[i], "hamAddWeaponToPlayer");
  229. RegisterHam(Ham_Item_Deploy, szWeaponNames[i], "hamItemDeploy", 1);
  230. }
  231. }
  232. register_forward(FM_SetModel, "fwSetModel");
  233.  
  234. register_clcmd("Insert_price", "cmdInsertPrice");
  235. }
  236.  
  237. public cmdChangeTeam ( id )
  238. {
  239. static team
  240. team = fm_cs_get_user_team(id)
  241.  
  242. // Unless it's a spectator joining the game
  243. if (team == FM_CS_TEAM_SPECTATOR || team == FM_CS_TEAM_UNASSIGNED)
  244. return PLUGIN_CONTINUE;
  245.  
  246. // Pressing 'M' (chooseteam) ingame should show the main menu instead
  247. cmdSayMenu(id)
  248. return PLUGIN_HANDLED;
  249. }
  250.  
  251. /* Precaching models */
  252. public plugin_precache()
  253. {
  254. precache_model("models/v_knife.mdl")
  255. new szConfigsDir[128], szMessage[64];
  256.  
  257. get_configsdir(szConfigsDir, charsmax(szConfigsDir));
  258. add(szConfigsDir, charsmax(szConfigsDir), "/csgo_outstanding/skinsv");
  259.  
  260. if(!file_exists(szConfigsDir))
  261. {
  262. write_file(szConfigsDir, ";TYPES 28=Ak47 22=M4a1 18=AWP 26=Deagle 29=Knife");
  263. write_file(szConfigsDir, ";Skin name v_Model p_Model TYPE Chance");
  264. write_file(szConfigsDir, ";Exemplu:");
  265. write_file(szConfigsDir, ";^"Ak47 Dragon Lore^" ^"models/GO/v_ak47_dragonlore.mdl^" ^"models/GO/p_ak47_dragonlore.mdl^" ^"28^" ^"20^"");
  266. }
  267.  
  268. new f = fopen(szConfigsDir, "rt");
  269. if(!f)
  270. return;
  271. new szLineData[256], szName[32], szViewModel[64], szPlayerModel[64], szType[8], szChance[4];
  272. while(!feof(f))
  273. {
  274. fgets(f, szLineData, charsmax(szLineData));
  275.  
  276. if(strlen(szLineData) < 2 || szLineData[0] == ';' || !szLineData[0])
  277. continue;
  278.  
  279. parse(szLineData, szName, charsmax(szName), szViewModel, charsmax(szViewModel), szPlayerModel, charsmax(szPlayerModel), szType, charsmax(szType), szChance, charsmax(szChance))
  280.  
  281. new iType = str_to_num(szType);
  282. new iChance = str_to_num(szChance)
  283.  
  284. copy(g_aSkins[skinsNum][Name], 31, szName);
  285. copy(g_aSkins[skinsNum][vModel], 63, szViewModel);
  286. copy(g_aSkins[skinsNum][pModel], 63, szPlayerModel);
  287. g_aSkins[skinsNum][Type] = iType;
  288. g_aSkins[skinsNum][Chance] = iChance;
  289.  
  290. skinsNum++
  291. }
  292.  
  293. fclose(f);
  294.  
  295. g_iMaxChance = g_aSkins[0][Chance];
  296. for (new i; i < skinsNum; i++)
  297. {
  298. if (g_aSkins[0][Chance] > g_iMaxChance)
  299. {
  300. g_iMaxChance = g_aSkins[0][Chance];
  301. }
  302. }
  303.  
  304. for (new i; i < skinsNum; i++)
  305. {
  306. if (!file_exists(g_aSkins[0][vModel]))
  307. {
  308. formatex(szMessage, charsmax(szMessage), "Missing model [%s]", g_aSkins[0][vModel]);
  309. set_fail_state(szMessage);
  310. }
  311. if (strlen(g_aSkins[0][pModel]) > 3)
  312. {
  313. if (!file_exists(g_aSkins[0][pModel]))
  314. {
  315. formatex(szMessage, charsmax(szMessage), "Missing model [%s]", g_aSkins[0][pModel]);
  316. set_fail_state(szMessage);
  317. }
  318. }
  319.  
  320. precache_model(g_aSkins[i][vModel]);
  321.  
  322. if (strlen(g_aSkins[i][pModel]) > 3)
  323. {
  324. precache_model(g_aSkins[i][pModel]);
  325. }
  326. }
  327. }
  328. /* When client connects */
  329. public client_putinserver( index )
  330. {
  331. new iPlayers[32], iNum;
  332. get_players(iPlayers, iNum);
  333.  
  334. for(new i; i < iNum; i++)
  335. iMutedPlayers[index][iPlayers[i]] = 0;
  336.  
  337. for(new i; i < 31; i++)
  338. g_iShowedSkin[index][i] = skinsNum;
  339.  
  340. g_iSkinToGift[index] = skinsNum;
  341. g_iSkinToDestroy[index] = skinsNum;
  342. g_iPrice[index] = 0;
  343.  
  344.  
  345.  
  346. LoadData(index);
  347. LoadMarket(index);
  348. flag_set(kBits[CONNECTED], index);
  349. get_user_name( index, kPlayerName[ index ], 31 );
  350. get_time( "%c", kDate[ index ], 31);
  351.  
  352. kClanMembership[ index ] = WITHOUT_CLAN;
  353. kClanName[ index ] = "^0";
  354. kPassword[ index ] = "^0";
  355. kClanNameConfirmated[ index ] = false;
  356. kRange[ index ] = 0;
  357. kActivatedClanChat[ index ] = false;
  358.  
  359. DataManagement( index, LOAD );
  360. }
  361.  
  362. public client_disconnect( index )
  363. {
  364. remove_task( index+TASK_HUD );
  365. DataManagement( index, SAVE );
  366.  
  367. flag_unset(kBits[CONNECTED], index);
  368. SaveData(index)
  369. user_incoin_challenge[index] = 0;
  370. user_coin_bet[index] = 0;
  371. if(user_coin[index] > 0)
  372. {
  373. engfunc(EngFunc_RemoveEntity, user_coin[index])
  374. user_coin[index] = 0;
  375.  
  376. if(!get_challengers_num() && FW_PRETHINK_POST != 0)
  377. {
  378. unregister_forward(FM_PlayerPreThink, FW_PRETHINK_POST, 1)
  379. FW_PRETHINK_POST = 0;
  380. }
  381. }
  382. }
  383.  
  384. /* Hook DeathMsg event */
  385. public evDeathMsg()
  386. {
  387. new iChance;
  388. new iKiller = read_data(1);
  389. new iVictim = read_data(2);
  390.  
  391. if(!is_user_alive(iKiller) || iKiller == iVictim)
  392. return;
  393.  
  394. iChance = random_num(1, 100);
  395. if (iChance <= POINTS_CHANCE)
  396. {
  397. g_iPlayerData[iKiller][Points] += POINTS_FOR_KILL;
  398. client_print(iKiller, print_center, "+%d Points", POINTS_FOR_KILL);
  399. }
  400. if(iChance <= DROP_CASE_CHANCE)
  401. {
  402. g_iPlayerData[iKiller][Case]++;
  403. }
  404. static victim, attacker, headshot;
  405.  
  406. attacker = read_data(1);
  407. victim = read_data(2);
  408. headshot = read_data(3);
  409.  
  410. if( !attacker || victim == attacker )
  411. {
  412. ++kDataRank[ victim ][ SUICIDES ];
  413. return;
  414. }
  415.  
  416. if( headshot )
  417. {
  418. ++kDataRank[ attacker ][ HS_KILLS ];
  419. ++kDataRank[ victim ][ HS_DEATHS ];
  420. }
  421. }
  422. /* When client disconnect */
  423.  
  424. /* Ham_Item_Deploy */
  425. public hamItemDeploy(ent)
  426. {
  427. static id;
  428. id = fm_cs_get_weapon_ent_owner(ent);
  429.  
  430. if (!pev_valid(id)) {
  431. return;
  432. }
  433.  
  434. if (g_iShowedSkin[id][cs_get_weapon_id(ent)] < skinsNum)
  435. {
  436. set_pev(id, pev_viewmodel2, g_aSkins[ g_iShowedSkin[id][cs_get_weapon_id(ent)]][vModel]);
  437.  
  438. if(strlen(g_aSkins[ g_iShowedSkin[id][cs_get_weapon_id(ent)]][pModel]) > 3)
  439. {
  440. set_pev(id, pev_weaponmodel2, g_aSkins[ g_iShowedSkin[id][cs_get_weapon_id(ent)]][pModel]);
  441. }
  442. }
  443. }
  444. /** Principal Menu **/
  445. public cmdSayMenu(id)
  446. {
  447. new menu, szText[128], szText2[128];
  448.  
  449. 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])
  450. menu = menu_create(szText, "menuHandler");
  451.  
  452. menu_additem(menu, "Aplica \ySKIN");
  453. menu_additem(menu, "Deschide \ycufere \w| Crafteaza \ychei^n");
  454. menu_additem(menu, "Ofera un \ycadou");
  455. menu_additem(menu, "Distruge un \yskin^n");
  456. menu_additem(menu, "\wSkins \yMarket^n");
  457. formatex(szText, charsmax(szText), "Jocuri de \ynoroc\w^n^n%s", szText2);
  458. menu_additem(menu, "Clan \ySystem");
  459. menu_additem(menu, szText);
  460.  
  461. menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
  462. menu_display(id, menu, 0);
  463.  
  464. return PLUGIN_HANDLED;
  465. }
  466. public clcmd_coinbet(id)
  467. {
  468. if(user_incoin_challenge[id] > 0) return 1;
  469.  
  470. new szArgs[30];
  471. read_args(szArgs, charsmax(szArgs))
  472. remove_quotes(szArgs)
  473.  
  474. new amount = str_to_num(szArgs);
  475.  
  476. if(amount > get_user_money(id)) {
  477. client_print(id, print_center, "You dont have that amount of money!")
  478. }
  479. else {
  480. user_coin_bet[id] = amount;
  481. }
  482.  
  483. clcmd_stack_menu(id);
  484. return 1;
  485. }
  486.  
  487. public clcmd_stack_menu(id)
  488. {
  489. if(user_incoin_challenge[id] > 0) return 1;
  490.  
  491. new menu = menu_create("\rCoin Challenge^n\yChoose your stack!", "coin_menu_handle");
  492.  
  493. new szText[32]
  494. formatex(szText, charsmax(szText), "\wChoose your Stack: \r%d$^n^n", user_coin_bet[id])
  495. menu_additem(menu, szText, "STACK")
  496. menu_additem(menu, "\rReady!", "STACK")
  497.  
  498. menu_display(id, menu)
  499. return 1;
  500. }
  501.  
  502. public clclmd_coin_menu(id)
  503. {
  504. if(user_coin_bet[id] <= 0)
  505. {
  506. clcmd_stack_menu(id)
  507. client_print(id, print_center, "Choose your stack!")
  508. return PLUGIN_HANDLED;
  509. }
  510.  
  511. new menu = menu_create("\rCoin Challenge^n\yChoose your opponent!", "coin_menu_handle");
  512.  
  513. new players[32], pnum;
  514. get_players(players, pnum, "ch")
  515.  
  516. if(pnum <= 1 || user_incoin_challenge[id] > 0)
  517. {
  518. menu_destroy(menu);
  519. return PLUGIN_HANDLED;
  520. }
  521.  
  522. for(new i, szName[32], player, szInfo[3]; i < pnum; i++)
  523. {
  524. player = players[i];
  525. if(player == id || user_incoin_challenge[player] > 0) continue;
  526. get_user_name(player, szName, charsmax(szName))
  527. num_to_str(player, szInfo, charsmax(szInfo))
  528. menu_additem(menu, szName, szInfo)
  529. }
  530.  
  531. menu_display(id, menu)
  532. return PLUGIN_HANDLED;
  533. }
  534.  
  535. public coin_menu_handle(id, menu, item)
  536. {
  537. if(item == MENU_EXIT || user_incoin_challenge[id] > 0)
  538. {
  539. menu_destroy(menu);
  540. return PLUGIN_HANDLED;
  541. }
  542.  
  543. new sData[12], paccess, iCallback;
  544. menu_item_getinfo(menu, item, paccess, sData, charsmax(sData), "", 0, iCallback)
  545. menu_destroy(menu)
  546.  
  547. if(equal(sData, "STACK"))
  548. {
  549. switch( item )
  550. {
  551. case 0:
  552. {
  553. client_print(id, print_center, "Choose an amount of money above than zero!")
  554. client_cmd(id, "messagemode enter_coin_bet")
  555. }
  556. case 1: clclmd_coin_menu(id)
  557. }
  558.  
  559. return PLUGIN_HANDLED;
  560. }
  561. if(equal(sData, "DUEL", 4))
  562. {
  563. strtok(sData, "", 0, sData, charsmax(sData), '|')
  564. new player = str_to_num(sData);
  565. if(!is_user_connected(player) || user_incoin_challenge[player] > 0) return PLUGIN_HANDLED;
  566.  
  567. new szTargetname[32], szPlayername[32];
  568. get_user_name(player, szTargetname, charsmax(szTargetname))
  569. get_user_name(id, szPlayername, charsmax(szPlayername))
  570.  
  571. switch( item )
  572. {
  573. case 0:
  574. {
  575. client_print(player, print_chat, "%s has accepted your coin challenge!", szPlayername)
  576. client_print(0, print_chat, "%s vs %s in coin flip challenge!", szTargetname, szPlayername)
  577.  
  578. new rand = random_num(1,2);
  579.  
  580. set_hudmessage(101, 236, 38, -1.0, 0.34, 0, 6.0, 4.0, _, _, -1)
  581. show_hudmessage(rand == 1 ? id:player, "You are Tails!")
  582.  
  583. set_hudmessage(101, 236, 38, -1.0, 0.34, 0, 6.0, 4.0, _, _, -1)
  584. show_hudmessage(rand == 1 ? player:id, "You are Heads!")
  585.  
  586. if(!get_challengers_num() && FW_PRETHINK_POST == 0)
  587. {
  588. FW_PRETHINK_POST = register_forward(FM_PlayerPreThink, "fw_client_prethink_post", 1);
  589. }
  590.  
  591. user_coin_bet[id] = user_coin_bet[player]
  592.  
  593. user_incoin_challenge[id] = rand == 1 ? 2:1;
  594. user_incoin_challenge[player] = rand == 1 ? 1:2;
  595.  
  596. new chosen = random_num(1,2);
  597. display_coin(id, chosen)
  598. display_coin(player, chosen)
  599.  
  600. client_print(0, print_chat, "%s is tails & %s is heads!", rand == 1 ? szPlayername:szTargetname, rand == 1 ? szTargetname:szPlayername)
  601. }
  602. case 1:
  603. {
  604. client_print(player, print_chat, "%s has denied your coin challenge!", szPlayername)
  605. }
  606. }
  607. return PLUGIN_HANDLED;
  608. }
  609.  
  610. new player = str_to_num(sData);
  611. if(!is_user_connected(player) || user_incoin_challenge[player] > 0)
  612. {
  613. clclmd_coin_menu(id)
  614. return PLUGIN_HANDLED;
  615. }
  616.  
  617. new oldmenu, newmenu;
  618. player_menu_info(player, oldmenu, newmenu);
  619. if(oldmenu > 0 || newmenu > 0)
  620. {
  621. new szTargetname[32]
  622. get_user_name(player, szTargetname, charsmax(szTargetname))
  623. client_print(id, print_center, "%s seems to be busy!", szTargetname)
  624. clclmd_coin_menu(id)
  625. return PLUGIN_HANDLED;
  626. }
  627.  
  628. coin_menu_duel(id, player)
  629. return PLUGIN_HANDLED;
  630. }
  631.  
  632. coin_menu_duel(id, target)
  633. {
  634. new szText[64], szName[32]
  635. get_user_name(id, szName, charsmax(szName))
  636. formatex(szText, charsmax(szText), "\w%s has Challenged you for \r%d$^n\yIn a coin flip game!^n", szName, user_coin_bet[id])
  637. new menu = menu_create(szText, "coin_menu_handle");
  638.  
  639. formatex(szText, charsmax(szText), "DUEL|%d", id)
  640. menu_additem(menu, "Accept the Challenge!^n", szText)
  641. menu_additem(menu, "Deny the Challenge!", szText)
  642.  
  643. menu_setprop(menu, MPROP_EXIT, MEXIT_NEVER)
  644.  
  645. menu_display(target, menu)
  646. }
  647.  
  648. display_coin(target, chosen)
  649. {
  650. new ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"));
  651.  
  652. if(!ent) return;
  653.  
  654. user_coin[target] = ent;
  655.  
  656. static Float:fOrigin[3], Float:fAim[3];
  657. pev(target, pev_origin, fOrigin)
  658. pev(target, pev_view_ofs, fAim)
  659. xs_vec_add(fOrigin, fAim, fOrigin)
  660. pev(target, pev_v_angle, fAim)
  661. angle_vector(fAim, ANGLEVECTOR_FORWARD, fAim)
  662. xs_vec_mul_scalar(fAim, 10.0, fAim)
  663. xs_vec_add(fOrigin, fAim, fOrigin)
  664. pev(target, pev_v_angle, fAim)
  665.  
  666. set_pev(ent, pev_classname, "coin")
  667. set_pev(ent, pev_movetype, MOVETYPE_NOCLIP)
  668. set_pev(ent, pev_solid, SOLID_NOT)
  669. set_pev(ent, pev_origin, fOrigin)
  670. set_pev(ent, pev_v_angle, fAim)
  671. engfunc(EngFunc_SetModel, ent, "models/coin.mdl")
  672.  
  673. set_pev(ent, pev_animtime, get_gametime() + 2.0)
  674. set_pev(ent, pev_sequence, 1)
  675. set_pev(ent, pev_frame, 2.0)
  676. set_pev(ent, pev_framerate, 1.0)
  677. set_pev(ent, pev_iuser4, chosen)
  678. set_pev(ent, pev_iuser2, target)
  679.  
  680. set_task(6.0, "task_chosen_side", ent)
  681. }
  682.  
  683. public task_chosen_side(const ent)
  684. {
  685. new classname[6]
  686. pev(ent, pev_classname, classname ,charsmax(classname))
  687.  
  688. if(!pev_valid(ent) || !equal(classname, "coin")) return;
  689.  
  690. set_pev(ent, pev_sequence, 0)
  691. set_pev(ent, pev_frame, 1.0)
  692. set_pev(ent, pev_framerate, 1.0)
  693. if(pev(ent, pev_iuser4) == 2) set_pev(ent, pev_iuser3, 1)
  694. new owner = pev(ent, pev_iuser2);
  695. set_task(3.0, "client_disconnect", owner)
  696.  
  697. switch(user_incoin_challenge[owner] == pev(ent, pev_iuser4)) {
  698. case true:{
  699. set_user_money(owner, (get_user_money(owner)+user_coin_bet[owner]))
  700. new sName[32];
  701. get_user_name(owner, sName, charsmax(sName))
  702. client_print(0, print_chat, "%s won the flip the coin game!", sName)
  703.  
  704. set_hudmessage(21, 243, 13, -1.0, 0.28, 0, 6.0, 4.0, _, _, -1)
  705. show_hudmessage(owner, "You have Won!")
  706. }
  707. case false:
  708. {
  709. set_user_money(owner, (get_user_money(owner)-user_coin_bet[owner]))
  710. set_hudmessage(243, 21, 13, -1.0, 0.28, 0, 6.0, 4.0, _, _, -1)
  711. show_hudmessage(owner, "You have lost!")
  712. }
  713. }
  714. }
  715.  
  716. get_challengers_num()
  717. {
  718. new players[32],pnum, count;
  719. get_players(players, pnum, "ch")
  720. for(new i; i < pnum; i++)
  721. {
  722. if(user_incoin_challenge[players[i]] > 0)
  723. {
  724. count++;
  725. }
  726. }
  727. return count;
  728. }
  729. public fw_client_prethink_post(target)
  730. {
  731. static ent;
  732. if((ent = user_coin[target]) > 0)
  733. {
  734. static Float:fOrigin[3], Float:fAim[3];
  735. pev(target, pev_origin, fOrigin)
  736. pev(target, pev_view_ofs, fAim)
  737. xs_vec_add(fOrigin, fAim, fOrigin)
  738. pev(target, pev_v_angle, fAim)
  739. angle_vector(fAim, ANGLEVECTOR_FORWARD, fAim)
  740. xs_vec_mul_scalar(fAim, 10.0, fAim)
  741. xs_vec_add(fOrigin, fAim, fOrigin)
  742. pev(target, pev_v_angle, fAim)
  743. set_pev(ent, pev_origin, fOrigin)
  744. pev(ent, pev_angles, fOrigin)
  745. fAim[0] = fOrigin[0];
  746. fAim[2] = fOrigin[2];
  747. fAim[1] += 180.0;
  748. if(pev(ent, pev_iuser3) == 1)
  749. {
  750. fAim[1] += 180.0;
  751. }
  752.  
  753. set_pev(ent, pev_angles, fAim)
  754. }
  755. }
  756. public menuHandler(id, menu, item)
  757. {
  758. if(item == MENU_EXIT)
  759. {
  760. menu_destroy(menu);
  761. return PLUGIN_HANDLED;
  762. }
  763.  
  764. switch(item)
  765. {
  766. case 0:
  767. {
  768. if (user_have_skins(id))
  769. {
  770. showSkins(id);
  771. }
  772. else
  773. {
  774. ColorChat(id, "!g%s!nNu ai !gskinuri !nin inventar!", szTag);
  775. cmdSayMenu(id);
  776. }
  777. }
  778.  
  779. case 1: openCaseMenu(id);
  780.  
  781. case 2:
  782. {
  783. if (user_have_skins(id))
  784. {
  785. showGiftMenu(id);
  786. }
  787. else
  788. {
  789. ColorChat(id, "!g%s!nNu ai !gskinuri !nin inventar!", szTag);
  790. cmdSayMenu(id);
  791. }
  792. }
  793.  
  794. case 3:
  795. {
  796. if (user_have_skins(id))
  797. {
  798. showDestroyMenu(id);
  799. }
  800. else
  801. {
  802. ColorChat(id, "!g%s!nNu ai !gskinuri !nin inventar!", szTag);
  803. cmdSayMenu(id);
  804. }
  805. }
  806.  
  807. case 4: cmdShowMarket(id)
  808.  
  809. //case 5: cmdShowTradeMenu(id);
  810.  
  811. case 5: showGamesMenu(id)
  812.  
  813. case 6: cmd_CLAN( id )
  814. }
  815.  
  816. return PLUGIN_HANDLED;
  817. }
  818. /* Apply skin menu */
  819. public showSkins(id)
  820. {
  821. new menu, szText[64], k=0;
  822. menu = menu_create("\w[ \yCS:GO OUTSTANDING \w] \ySkinurile \wtale", "skinsMenuHandler");
  823.  
  824. for(new i; i < skinsNum; i++)
  825. {
  826. if(g_iPlayerSkins[id][i])
  827. {
  828. formatex(szText, charsmax(szText), "%s - \y%d \wBucati", g_aSkins[i][Name], g_iPlayerSkins[id][i]);
  829. menu_additem(menu, szText);
  830. g_iSkins[id][k++] = i;
  831. }
  832. }
  833.  
  834. menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
  835. menu_display(id, menu, 0);
  836. }
  837. public skinsMenuHandler(id, menu, item)
  838. {
  839. if( item == MENU_EXIT )
  840. {
  841. menu_destroy(menu);
  842. return PLUGIN_HANDLED;
  843. }
  844.  
  845. new iSkinID = g_iSkins[id][item];
  846.  
  847. g_iShowedSkin [id][g_aSkins[iSkinID][Type]] = iSkinID;
  848. ColorChat(id, "!g%s!nAi aplicat skinul !g%s!n.", szTag, g_aSkins[iSkinID][Name]);
  849. client_cmd(id, "lastinv");
  850. showSkins(id);
  851.  
  852. menu_destroy(menu);
  853. return PLUGIN_HANDLED;
  854. }
  855. /* Open case menu */
  856. public openCaseMenu(id)
  857. {
  858. new menu, szText[128];
  859. 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])
  860. menu = menu_create(szText, "openCaseMenuHandler");
  861.  
  862. if(!g_iPlayerData[id][Keys] || !g_iPlayerData[id][Case])
  863. {
  864. formatex(szText, charsmax(szText), "\dDeschide \ycufar^n");
  865. }
  866. else
  867. {
  868. formatex(szText, charsmax(szText), "Deschide \ycufar^n");
  869. }
  870. menu_additem(menu, szText);
  871.  
  872. if(g_iPlayerData[id][Fragments] < FRAGMENTS_TO_CRAFT)
  873. {
  874. formatex(szText, charsmax(szText), "\dCrafteaza o \ycheie \d( \y%d \d/ \y%d \d)", g_iPlayerData[id][Fragments], FRAGMENTS_TO_CRAFT);
  875. }
  876. else
  877. {
  878. formatex(szText, charsmax(szText), "Crafteaza o \ycheie \w( \y%d \w/ \y%d \w)", g_iPlayerData[id][Fragments], FRAGMENTS_TO_CRAFT);
  879. }
  880.  
  881. menu_additem(menu, szText);
  882.  
  883. if(g_iPlayerData[id][Points] < KEY_COST)
  884. {
  885. formatex(szText, charsmax(szText), "\dCumpara o \ycheie \w- \y%d \dPuncte", KEY_COST);
  886. }
  887. else
  888. {
  889. formatex(szText, charsmax(szText), "Cumpara o \ycheie \w- \y%d \wPuncte", KEY_COST);
  890. }
  891. menu_additem(menu, szText);
  892.  
  893. menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
  894. menu_display(id, menu, 0);
  895. }
  896. public openCaseMenuHandler(id, menu, item)
  897. {
  898. if( item == MENU_EXIT )
  899. {
  900. menu_destroy(menu);
  901. return PLUGIN_HANDLED;
  902. }
  903.  
  904. switch(item)
  905. {
  906. case 0:
  907. {
  908. if(!g_iPlayerData[id][Keys])
  909. {
  910. ColorChat(id, "!g%s!n Nu ai o !gcheie!n!", szTag);
  911. return PLUGIN_HANDLED;
  912. }
  913. if(!g_iPlayerData[id][Case])
  914. {
  915. ColorChat(id, "!g%s!n Nu ai un !gcufar!n!", szTag);
  916. return PLUGIN_HANDLED;
  917. }
  918.  
  919. new iSkins[SKINS_MAX], iRand, iChance, k=0;
  920.  
  921. iChance = random_num(1, g_iMaxChance);
  922. for(new i; i < skinsNum; i++)
  923. {
  924. if(iChance <= g_aSkins[i][Chance])
  925. iSkins[k++] = i;
  926. }
  927.  
  928. iRand = k == 0 ? iSkins[k] : iSkins[random(k)];
  929.  
  930. g_iPlayerSkins[id][iRand]++;
  931. g_iPlayerData[id][Keys]--;
  932. g_iPlayerData[id][Case]--;
  933.  
  934. ColorChat(id, "!g%s!nAi deschis un cufar si ai primit skinul !g%s!n.", szTag, g_aSkins[iRand][Name]);
  935. SaveData(id);
  936.  
  937. openCaseMenu(id);
  938. }
  939. case 1:
  940. {
  941. if(g_iPlayerData[id][Fragments] < FRAGMENTS_TO_CRAFT)
  942. {
  943. ColorChat(id, "!g%s!n Insuficiente !gfragmente !npentru a crafta o !gcheie!n.", szTag);
  944. return PLUGIN_HANDLED;
  945. }
  946. g_iPlayerData[id][Keys]++;
  947. g_iPlayerData[id][Fragments] -= FRAGMENTS_TO_CRAFT;
  948.  
  949. ColorChat(id, "!g%s!n Ai transformat !g%d!n fragmente intr-o !gcheie!n.", szTag, FRAGMENTS_TO_CRAFT);
  950.  
  951. openCaseMenu(id);
  952. }
  953. case 2:
  954. {
  955. if(g_iPlayerData[id][Points] < KEY_COST)
  956. {
  957. ColorChat(id, "!g%s!n Insuficiente !gpuncte !npentru a cumpara o !gcheie!n.", szTag);
  958. return PLUGIN_HANDLED;
  959. }
  960. g_iPlayerData[id][Keys]++;
  961. g_iPlayerData[id][Points] -= KEY_COST;
  962. ColorChat(id, "!g%s!n Ai achizitionat o !gcheie!n.", szTag);
  963. SaveData(id);
  964.  
  965. openCaseMenu(id);
  966. }
  967. }
  968. menu_destroy(menu);
  969. return PLUGIN_HANDLED;
  970. }
  971. /* Gift menu */
  972. public showGiftMenu(id)
  973. {
  974. new menu, szText[128], szName[32];
  975. menu = menu_create("\w[ \yCS:GO OUTSTANDING\w] \yGift \wMenu", "giftMenuHandler");
  976.  
  977. if(g_iReceiver[id])
  978. {
  979. get_user_name(g_iReceiver[id], szName, charsmax(szName));
  980. formatex(szText, charsmax(szText), "Jucator: \y%s", szName);
  981. }
  982. else formatex(szText, charsmax(szText), "Alege \yjucator\w:");
  983. menu_additem(menu, szText);
  984.  
  985. if(g_iSkinToGift[id] == skinsNum)
  986. formatex(szText, charsmax(szText), "Alege \ySkin^n");
  987. else formatex(szText, charsmax(szText), "Skin spre oferire: \y%s^n", g_aSkins[g_iSkinToGift[id]][Name]);
  988. menu_additem(menu, szText);
  989. menu_additem(menu, "\rTrimite");
  990.  
  991. menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
  992. menu_display(id, menu, 0);
  993. }
  994. public giftMenuHandler(id, menu, item)
  995. {
  996. if( item == MENU_EXIT )
  997. {
  998. menu_destroy(menu);
  999. return PLUGIN_HANDLED;
  1000. }
  1001.  
  1002. switch(item)
  1003. {
  1004. case 0:
  1005. {
  1006. new iPlayers[32], iNum, idReceiver;
  1007. get_players(iPlayers, iNum);
  1008.  
  1009. idReceiver = iPlayers[g_iIterator[id]]
  1010. g_iReceiver[id] = idReceiver;
  1011. g_iIterator[id]++;
  1012.  
  1013. if(g_iIterator[id] == iNum)
  1014. g_iIterator[id] = 0;
  1015.  
  1016. showGiftMenu(id);
  1017. }
  1018. case 1:
  1019. {
  1020. showSkinsForGift(id);
  1021. }
  1022. case 2:
  1023. {
  1024. if(g_iSkinToGift[id] == skinsNum)
  1025. {
  1026. ColorChat(id, "!g%s!n Alege un !gskin!n!",szTag);
  1027. showGiftMenu(id)
  1028. return PLUGIN_HANDLED;
  1029. }
  1030. if(g_iReceiver[id] == id)
  1031. {
  1032. ColorChat(id, "!g%s!n Nu iti da !gskinuri !ntie!",szTag);
  1033. showGiftMenu(id)
  1034. return PLUGIN_HANDLED;
  1035. }
  1036. new szName[32];
  1037. get_user_name(id, szName, charsmax(szName));
  1038.  
  1039. g_iPlayerSkins[id][g_iSkinToGift[id]]--;
  1040. g_iPlayerSkins[g_iReceiver[id]][g_iSkinToGift[id]]++;
  1041.  
  1042. ColorChat(g_iReceiver[id], "!g%s!nAi primit !g%s !n de la !g%s!n.", szTag, g_aSkins[g_iSkinToGift[id]][Name], szName);
  1043. g_iSkinToGift[id] = skinsNum;
  1044.  
  1045. SaveData(id);
  1046. SaveData(g_iReceiver[id]);
  1047. }
  1048. }
  1049. menu_destroy(menu);
  1050. return PLUGIN_HANDLED;
  1051. }
  1052. /* Skins List for gift */
  1053. public showSkinsForGift(id)
  1054. {
  1055. new menu, szText[64], k=0;
  1056. menu = menu_create("\w[ \yCS:GO OUTSTANDING \w] Alege skinul pe care vrei sa il daruiesti", "skinsForGiftMenuHandler");
  1057.  
  1058. for(new i; i < skinsNum; i++)
  1059. if(g_iPlayerSkins[id][i])
  1060. {
  1061. formatex(szText, charsmax(szText), "%s - \y%d \wBucati", g_aSkins[i][Name], g_iPlayerSkins[id][i]);
  1062. menu_additem(menu, szText);
  1063. g_iSkins[id][k++] = i;
  1064. }
  1065.  
  1066. menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
  1067. menu_display(id, menu, 0);
  1068. }
  1069. public skinsForGiftMenuHandler(id, menu, item)
  1070. {
  1071. if( item == MENU_EXIT )
  1072. {
  1073. menu_destroy(menu);
  1074. return PLUGIN_HANDLED;
  1075. }
  1076.  
  1077. g_iSkinToGift[id] = g_iSkins[id][item];
  1078. showGiftMenu(id);
  1079.  
  1080. menu_destroy(menu);
  1081. return PLUGIN_HANDLED;
  1082. }
  1083. /* Destroy skin menu */
  1084. public showDestroyMenu(id)
  1085. {
  1086. new menu, szText[128];
  1087. menu = menu_create("\w[ \yCS:GO OUTSTANDING \w] \wDestroy \ySkin \wMenu", "destroyMenuHandler");
  1088.  
  1089. if(g_iSkinToDestroy[id] == skinsNum)
  1090. formatex(szText, charsmax(szText), "Alege \ySkin^n");
  1091. else formatex(szText, charsmax(szText), "Skin pentru distrugere: \y%s^n", g_aSkins[g_iSkinToDestroy[id]][Name]);
  1092. menu_additem(menu, szText);
  1093. menu_additem(menu, "\rDistruge");
  1094.  
  1095. menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
  1096. menu_display(id, menu, 0);
  1097. }
  1098. public destroyMenuHandler(id, menu, item)
  1099. {
  1100. if( item == MENU_EXIT )
  1101. {
  1102. menu_destroy(menu);
  1103. return PLUGIN_HANDLED;
  1104. }
  1105.  
  1106. switch(item)
  1107. {
  1108. case 0:
  1109. {
  1110. showSkinsForDestroy(id);
  1111. }
  1112. case 1:
  1113. {
  1114. if(g_iSkinToDestroy[id] == skinsNum)
  1115. {
  1116. ColorChat(id, "!g%s!n Alege un !gskin!n!",szTag);
  1117. showDestroyMenu(id)
  1118. return PLUGIN_HANDLED;
  1119. }
  1120.  
  1121. g_iPlayerSkins[id][g_iSkinToDestroy[id]]--;
  1122. g_iPlayerData[id][Fragments]++;
  1123. 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]);
  1124.  
  1125. g_iSkinToDestroy[id] = skinsNum;
  1126. SaveData(id);
  1127.  
  1128. showDestroyMenu(id);
  1129. }
  1130. }
  1131. menu_destroy(menu);
  1132. return PLUGIN_HANDLED;
  1133. }
  1134. /* Skins List to destroy */
  1135. public showSkinsForDestroy(id)
  1136. {
  1137. new menu, szText[64], k=0;
  1138. menu = menu_create("\w[ \yCS:GO OUTSTANDING \w] Alege skinul pe care vrei sa il distrugi", "skinsForDestroyMenuHandler");
  1139.  
  1140. for(new i; i < skinsNum; i++)
  1141. if(g_iPlayerSkins[id][i])
  1142. {
  1143. formatex(szText, charsmax(szText), "%s - \y%d \wBucati", g_aSkins[i][Name], g_iPlayerSkins[id][i]);
  1144. menu_additem(menu, szText);
  1145. g_iSkins[id][k++] = i;
  1146. }
  1147.  
  1148. menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
  1149. menu_display(id, menu, 0);
  1150. }
  1151. public skinsForDestroyMenuHandler(id, menu, item)
  1152. {
  1153. if( item == MENU_EXIT )
  1154. {
  1155. menu_destroy(menu);
  1156. return PLUGIN_HANDLED;
  1157. }
  1158.  
  1159. g_iSkinToDestroy[id] = g_iSkins[id][item];
  1160. showDestroyMenu(id);
  1161.  
  1162. menu_destroy(menu);
  1163. return PLUGIN_HANDLED;
  1164. }
  1165. /* Market menu */
  1166. public cmdShowMarket(id)
  1167. {
  1168. new menu;
  1169.  
  1170. menu = menu_create("\w[ \yCSGO OUTSTANDING \w] Market Shop", "marketMenuHandler");
  1171.  
  1172. menu_additem(menu, "\wCumpara \yskin^n");
  1173.  
  1174. menu_additem(menu, "Adauga \yskin \win market");
  1175. menu_additem(menu, "Retrage \yskin \wdin market");
  1176.  
  1177. menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
  1178. menu_display(id, menu, 0);
  1179. }
  1180. public marketMenuHandler(id, menu, item)
  1181. {
  1182. if( item == MENU_EXIT )
  1183. {
  1184. menu_destroy(menu);
  1185. return PLUGIN_HANDLED;
  1186. }
  1187.  
  1188. switch(item)
  1189. {
  1190. case 0: showSkinsInMarketMenu(id);
  1191. case 1: showSkinsToSellMenu(id);
  1192. case 2: showRemoveSkinMenu(id);
  1193. }
  1194.  
  1195. menu_destroy(menu);
  1196. return PLUGIN_HANDLED;
  1197. }
  1198. /* Skins in market */
  1199. public showSkinsInMarketMenu(id)
  1200. {
  1201. new menu, szText[256], szName[32], k=0;
  1202.  
  1203. new iPlayers[32], iNum, idV;
  1204. get_players(iPlayers, iNum);
  1205.  
  1206. menu = menu_create("\w[ \yCSGO OUTSTANDING \w] Skinuri in market", "skinsInMarketMenuHandler");
  1207.  
  1208. for(new i; i < iNum; i++)
  1209. {
  1210. idV = iPlayers[i];
  1211. for(new j; j < skinsNum; j++)
  1212. {
  1213. if(g_iSkinsInMarket[idV][j])
  1214. {
  1215. get_user_name(idV, szName, charsmax(szName));
  1216.  
  1217. formatex(szText, charsmax(szText), "\y%s \w[ \y%d \wpoints \w] [ Vanzator: \y%s \w]", g_aSkins[j][Name], g_iSkinsInMarket[idV][j], szName);
  1218. menu_additem(menu, szText);
  1219. g_iSkins[id][k] = j;
  1220. iSeller[id][k++] = idV;
  1221. }
  1222. }
  1223. }
  1224.  
  1225. menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
  1226. menu_display(id, menu, 0);
  1227. }
  1228. public skinsInMarketMenuHandler(id, menu, item)
  1229. {
  1230. if( item == MENU_EXIT )
  1231. {
  1232. menu_destroy(menu);
  1233. return PLUGIN_HANDLED;
  1234. }
  1235. new szSellerName[32], szName[32];
  1236.  
  1237. new iSkinID = g_iSkins[id][item]
  1238. new iSellerID = iSeller[id][item];
  1239.  
  1240. if(g_iPlayerData[id][Points] < g_iSkinsInMarket[iSellerID][iSkinID])
  1241. {
  1242. ColorChat(id, "!g%s!nPuncte insuficiente pentru a cumpara skinul!", szTag);
  1243. return PLUGIN_HANDLED;
  1244. }
  1245.  
  1246. get_user_name(id, szName, charsmax(szName));
  1247. get_user_name(iSellerID, szSellerName, charsmax(szSellerName));
  1248.  
  1249. g_iPlayerData[id][Points] -= g_iSkinsInMarket[iSellerID][iSkinID];
  1250. g_iPlayerData[iSellerID][Points] += g_iSkinsInMarket[iSellerID][iSkinID];
  1251.  
  1252. g_iPlayerSkins[id][iSkinID]++;
  1253.  
  1254. 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);
  1255. 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);
  1256.  
  1257. g_iSkinsInMarket[iSellerID][iSkinID] = 0;
  1258.  
  1259. SaveData(id);
  1260. SaveMarket(id);
  1261.  
  1262. menu_destroy(menu);
  1263. return PLUGIN_HANDLED;
  1264. }
  1265. /* Skins to sell */
  1266. public showSkinsToSellMenu(id)
  1267. {
  1268. new menu, szText[128], k=0;
  1269.  
  1270. menu = menu_create("\w[ \yCSGO OUTSTANDING \w] Alege skinul", "skinsToSellMenuHandler");
  1271.  
  1272. if(!g_iPrice[id])
  1273. formatex(szText, charsmax(szText), "Alege \ypretul^n");
  1274. else
  1275. formatex(szText, charsmax(szText), "\yPret\r: \w%d^n", g_iPrice[id]);
  1276. menu_additem(menu, szText);
  1277. for(new i; i < skinsNum; i++)
  1278. {
  1279. if(g_iPlayerSkins[id][i])
  1280. {
  1281. formatex(szText, charsmax(szText), "\y%s \w- \r*\y%d \wBucati", g_aSkins[i][Name], g_iPlayerSkins[id][i]);
  1282. menu_additem(menu, szText);
  1283.  
  1284. g_iSkins[id][k++] = i;
  1285. }
  1286. }
  1287.  
  1288. menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
  1289. menu_display(id, menu, 0);
  1290. }
  1291. public skinsToSellMenuHandler(id, menu, item)
  1292. {
  1293. if( item == MENU_EXIT )
  1294. {
  1295. menu_destroy(menu);
  1296. return PLUGIN_HANDLED;
  1297. }
  1298. new iSkinID, szName[32];
  1299. get_user_name(id, szName, charsmax(szName));
  1300. if(item == 0)
  1301. {
  1302. client_cmd(id, "messagemode Insert_price");
  1303. menu_destroy(menu);
  1304. return PLUGIN_HANDLED;
  1305. }
  1306. if(!g_iPrice[id])
  1307. {
  1308. ColorChat(id, "!g%s!nNu ai ales inca pretul!", szTag);
  1309. showSkinsToSellMenu(id)
  1310. return PLUGIN_HANDLED
  1311. }
  1312. iSkinID = g_iSkins[id][item-1];
  1313.  
  1314. if(g_iSkinsInMarket[id][iSkinID])
  1315. {
  1316. ColorChat(id, "!g%s!nAi pus deja acest !gskin in !gmarket!n!", szTag);
  1317. showSkinsToSellMenu(id);
  1318. return PLUGIN_HANDLED;
  1319. }
  1320.  
  1321. g_iPlayerSkins[id][iSkinID]--;
  1322. g_iSkinsInMarket[id][iSkinID] = g_iPrice[id];
  1323.  
  1324. ColorChat(id, "!g%s!nAi adaugat skinul !g%s !nin market cu !g%d !npuncte.", szTag, g_aSkins[iSkinID][Name], g_iPrice[id]);
  1325. 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]);
  1326. g_iPrice[id] = 0;
  1327.  
  1328. SaveData(id)
  1329. SaveMarket(id);
  1330.  
  1331. showSkinsToSellMenu(id);
  1332.  
  1333. menu_destroy(menu);
  1334. return PLUGIN_HANDLED;
  1335. }
  1336. public cmdInsertPrice(id)
  1337. {
  1338. new szPrice[8];
  1339. read_args(szPrice, charsmax(szPrice));
  1340. remove_quotes(szPrice);
  1341.  
  1342. new iPrice = str_to_num(szPrice);
  1343. if(!iPrice || iPrice < 0)
  1344. {
  1345. ColorChat(id, "!g%s!nInvalid number, try again!", szTag);
  1346. client_cmd(id, "messagemode Insert_price");
  1347. }
  1348.  
  1349. g_iPrice[id] = iPrice;
  1350. showSkinsToSellMenu(id);
  1351. }
  1352. /* Remove skin from market */
  1353. public showRemoveSkinMenu(id)
  1354. {
  1355. new menu, szText[128], k=0;
  1356.  
  1357. menu = menu_create("\w[ \yCSGO OUTSTANDING \w] Alege skinul pe care doresti sa il retragi", "skinsToRemoveMenuHandler");
  1358. for(new i; i < skinsNum; i++)
  1359. {
  1360. if(g_iSkinsInMarket[id][i])
  1361. {
  1362. formatex(szText, charsmax(szText), "\y%s", g_aSkins[i][Name]);
  1363. menu_additem(menu, szText);
  1364.  
  1365. g_iSkins[id][k++] = i;
  1366. }
  1367. }
  1368.  
  1369. menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
  1370. menu_display(id, menu, 0);
  1371. }
  1372. public skinsToRemoveMenuHandler(id, menu, item)
  1373. {
  1374. if(item == MENU_EXIT)
  1375. {
  1376. cmdShowMarket(id);
  1377. return PLUGIN_HANDLED;
  1378. }
  1379.  
  1380. new szName[32], iSkinID;
  1381.  
  1382. get_user_name(id, szName, charsmax(szName));
  1383. iSkinID = g_iSkins[id][item];
  1384.  
  1385. g_iSkinsInMarket[id][iSkinID] = 0;
  1386. g_iPlayerSkins[id][iSkinID]++;
  1387.  
  1388. ColorChat(0, "!g%s!nJucatorul !g%s !na retras skinul !g%s !ndin market.", szTag, szName, g_aSkins[iSkinID][Name]);
  1389.  
  1390. cmdShowMarket(id);
  1391. return PLUGIN_HANDLED;
  1392. }
  1393. /* Games Menu */
  1394. public showGamesMenu(id)
  1395. {
  1396. new menu, szText[64];
  1397. menu = menu_create("\w[ \yCS:GO OUTSTANDING \w] Meniu de \yjocuri", "gamesMenuHandler");
  1398.  
  1399. formatex(szText, charsmax(szText), "Tombola | \y%d \wPuncte", RAFFLE_COST)
  1400. menu_additem(menu, szText);
  1401.  
  1402. formatex(szText, charsmax(szText), "Coin \yFlip")
  1403. menu_additem(menu, szText);
  1404.  
  1405. menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
  1406. menu_display(id, menu, 0);
  1407. }
  1408. public gamesMenuHandler(id, menu, item)
  1409. {
  1410. if( item == MENU_EXIT )
  1411. {
  1412. menu_destroy(menu);
  1413. return PLUGIN_HANDLED;
  1414. }
  1415.  
  1416. switch(item)
  1417. {
  1418. case 0:
  1419. {
  1420. if(g_iPlayerData[id][Points] < RAFFLE_COST)
  1421. {
  1422. ColorChat(id, "!g%s!nInsuficiente !gpuncte !npentru a juca la tombola", szTag);
  1423. return PLUGIN_HANDLED;
  1424. }
  1425. new szName[32];
  1426. get_user_name(id, szName, charsmax(szName));
  1427.  
  1428. for(new i; i < raffleMembers; i++)
  1429. {
  1430. if(g_iRafflePlayers[i] == id)
  1431. {
  1432. ColorChat(id, "!g%s!nTe-ai inscris deja in tombola runda asta!", szTag);
  1433. return PLUGIN_HANDLED;
  1434. }
  1435. }
  1436.  
  1437. g_iRafflePlayers[raffleMembers++] = id;
  1438. g_iPlayerData[id][Points] -= RAFFLE_COST
  1439. ColorChat(0, "!g%s!nJucatorul !g%s !ns-a inscris in !gtombola!n.Jucatori inscrisi: !g%d!n.", szTag, szName, raffleMembers);
  1440. }
  1441. }
  1442.  
  1443. if( item == MENU_EXIT )
  1444. {
  1445. menu_destroy(menu);
  1446. return PLUGIN_HANDLED;
  1447. }
  1448.  
  1449. switch(item)
  1450. {
  1451. case 1:
  1452. {
  1453. if(user_incoin_challenge[id] > 0) return 1;
  1454.  
  1455. new menu = menu_create("\rCoin Challenge^n\yChoose your stack!", "coin_menu_handle");
  1456.  
  1457. new szText[32]
  1458. formatex(szText, charsmax(szText), "\wChoose your Stack: \r%d$^n^n", user_coin_bet[id])
  1459. menu_additem(menu, szText, "STACK")
  1460. menu_additem(menu, "\rReady!", "STACK")
  1461.  
  1462. menu_display(id, menu)
  1463. }
  1464. }
  1465. return 1;
  1466. }
  1467. /* Round end event */
  1468. public evRoundEnd()
  1469. {
  1470. if(raffleMembers)
  1471. {
  1472. new iRand, szName[32];
  1473.  
  1474. iRand = random(raffleMembers);
  1475. get_user_name(g_iRafflePlayers[iRand], szName, charsmax(szName));
  1476.  
  1477. g_iPlayerData[g_iRafflePlayers[iRand]][Points] += RAFFLE_COST*raffleMembers;
  1478.  
  1479. ColorChat(0, "!g%s!nTombola pe runda aceasta s-a incheiat !", szTag);
  1480. ColorChat(0, "!g%s!nJucatorul !g%s !na avut bulan si a castigat !g%d!n puncte !", szTag, szName, RAFFLE_COST*raffleMembers);
  1481. ColorChat(0, "!g%s!nNu fiti suparati, vorba aia, prost sa fii noroc sa ai !", szTag);
  1482.  
  1483. raffleMembers = 0;
  1484. }
  1485. else
  1486. {
  1487. ColorChat(0, "!g%s!nNiciun jucator !ginscris !nin aceasta runda !", szTag);
  1488. ColorChat(0, "!g%s!nAsteptam extragerea din runda urmatoare !", szTag);
  1489. }
  1490. }
  1491. /* Giving keys when win a round */
  1492. public terroristsWin()
  1493. {
  1494. new iPlayers[32], iNum, id, iRand;
  1495. get_players(iPlayers, iNum, "ae", "TERRORISTS");
  1496.  
  1497. for(new i; i < iNum; i++)
  1498. {
  1499. id = iPlayers[i];
  1500. iRand = random_num(1, 100);
  1501.  
  1502. if(iRand <= DROP_FRAGMENTS_CHANCE)
  1503. {
  1504. g_iPlayerData[id][Fragments]++;
  1505. ColorChat(id, "!g%s!nFelicitari, ai primit un !gfragment !nde cheie !", szTag);
  1506.  
  1507. SaveData(id);
  1508. }
  1509. }
  1510. }
  1511. public ctsWin()
  1512. {
  1513. new iPlayers[32], iNum, id, iRand;
  1514. get_players(iPlayers, iNum, "ae", "CT");
  1515.  
  1516. for(new i; i < iNum; i++)
  1517. {
  1518. id = iPlayers[i];
  1519. iRand = random_num(1, 100);
  1520.  
  1521. if(iRand <= DROP_FRAGMENTS_CHANCE)
  1522. {
  1523. g_iPlayerData[id][Fragments]++;
  1524. ColorChat(id, "!g%s!nFelicitari, ai primit un !gfragment !nde cheie !", szTag);
  1525.  
  1526. SaveData(id);
  1527. }
  1528. }
  1529. }
  1530. public hamAddWeaponToPlayer(ent, id)
  1531. {
  1532. if(!is_valid_ent(ent) || !is_user_connected(id))
  1533. return HAM_IGNORED;
  1534.  
  1535. for (new i; i < skinsNum; i++) {
  1536. if(entity_get_int(ent, EV_INT_WEAPONKEY) == 500+i)
  1537. {
  1538. entity_set_int(ent, EV_INT_WEAPONKEY, 0);
  1539. g_iShowedSkin[id][g_aSkins[i][Type]] = i;
  1540.  
  1541. return HAM_HANDLED;
  1542. }
  1543. }
  1544. return HAM_IGNORED;
  1545. }
  1546. public fwSetModel(entity, model[])
  1547. {
  1548. if(!is_valid_ent(entity))
  1549. return FMRES_IGNORED;
  1550.  
  1551. static szClassName[33];
  1552. entity_get_string(entity, EV_SZ_classname, szClassName, charsmax(szClassName));
  1553.  
  1554. if(!equal(szClassName, "weaponbox"))
  1555. return FMRES_IGNORED;
  1556.  
  1557. static iOwner;
  1558.  
  1559. new szModels[][][] = {
  1560. {"models/w_ak47.mdl", "weapon_ak47" },
  1561. {"models/w_m4a1.mdl", "weapon_m4a1" },
  1562. {"models/w_awp.mdl", "weapon_awp" }
  1563. }
  1564.  
  1565. new iWeapons[] = {
  1566. CSW_AK47,
  1567. CSW_M4A1,
  1568. CSW_AWP
  1569. }
  1570.  
  1571. iOwner = entity_get_edict(entity, EV_ENT_owner);
  1572.  
  1573. for(new i; i < sizeof(szModels); i++)
  1574. if(equal(model, szModels[i][0]))
  1575. {
  1576.  
  1577. static iStoredAugID;
  1578. iStoredAugID = find_ent_by_owner(ENG_NULLENT, szModels[i][1], entity);
  1579.  
  1580. if(!is_valid_ent(iStoredAugID))
  1581. return FMRES_IGNORED;
  1582.  
  1583. entity_set_int(iStoredAugID, EV_INT_WEAPONKEY, 500+g_iShowedSkin[iOwner][iWeapons[i]]);
  1584. entity_set_model(entity, szModels[i][0]);
  1585.  
  1586. return FMRES_SUPERCEDE;
  1587. }
  1588. return FMRES_IGNORED;
  1589. }
  1590. /* Save & Load Data */
  1591. public SaveData(id)
  1592. {
  1593. new iVault = nvault_open("CSGOData2");
  1594.  
  1595. new szName[32], szData[256];
  1596. get_user_name(id, szName, charsmax(szName));
  1597.  
  1598. formatex(szData, charsmax(szData), "%i#%i#%i#%i", g_iPlayerData[id][Points], g_iPlayerData[id][Case], g_iPlayerData[id][Keys], g_iPlayerData[id][Fragments]);
  1599.  
  1600. for(new i; i < skinsNum; i++)
  1601. format(szData, charsmax(szData), "%s#%i", szData, g_iPlayerSkins[id][i]);
  1602.  
  1603. nvault_set(iVault, szName, szData);
  1604.  
  1605. nvault_close(iVault);
  1606. }
  1607. public LoadData(id)
  1608. {
  1609. new iVault = nvault_open("CSGOData2");
  1610.  
  1611. if(iVault == INVALID_HANDLE) {
  1612. log_amx("ERROR: Unable to open vault file %s", "CSGOData2");
  1613. return PLUGIN_HANDLED;
  1614. }
  1615.  
  1616.  
  1617. new szName[32], szData[256], szArg[SKINS_MAX][9], iArg[SKINS_MAX], iTimestamp;
  1618. get_user_name(id, szName, charsmax(szName));
  1619.  
  1620. if(nvault_lookup(iVault, szName, szData, charsmax(szData), iTimestamp))
  1621. {
  1622. /* +4 because we must load points keys case and fragments */
  1623. for(new i; i < skinsNum + 4; i ++)
  1624. {
  1625. strtok(szData, szArg[i], charsmax(szArg[]), szData, charsmax(szData), '#');
  1626. iArg[i] = str_to_num(szArg[i]);
  1627. }
  1628.  
  1629. g_iPlayerData[id][Points] = iArg[0];
  1630. g_iPlayerData[id][Case] = iArg[1];
  1631. g_iPlayerData[id][Keys] = iArg[2];
  1632. g_iPlayerData[id][Fragments] = iArg[3];
  1633.  
  1634. for(new i; i < skinsNum; i++)
  1635. g_iPlayerSkins[id][i] = iArg[i+4]; /* +4 because we loaded points keys case and fragments */
  1636. }
  1637. else
  1638. {
  1639. g_iPlayerData[id][Points] = 15;
  1640. g_iPlayerData[id][Case] = 1;
  1641. g_iPlayerData[id][Keys] = 1;
  1642. g_iPlayerData[id][Fragments] = 0;
  1643.  
  1644. for(new i; i < skinsNum; i++)
  1645. g_iPlayerSkins[id][i] = 0;
  1646. }
  1647. nvault_close(iVault);
  1648. return PLUGIN_CONTINUE;
  1649. }
  1650. /* Save & Load Market */
  1651. public SaveMarket(id)
  1652. {
  1653. new iVault = nvault_open("CSGOMarket");
  1654.  
  1655. new szName[32], szData[256];
  1656. get_user_name(id, szName, charsmax(szName));
  1657.  
  1658. for(new i; i < skinsNum; i++)
  1659. format(szData, charsmax(szData), "%s#%i", szData, g_iSkinsInMarket[id][i]);
  1660.  
  1661. nvault_set(iVault, szName, szData);
  1662.  
  1663. nvault_close(iVault);
  1664. }
  1665. public LoadMarket(id)
  1666. {
  1667. new iVault = nvault_open("CSGOMarket");
  1668.  
  1669. new szName[32], szData[256], szArg[SKINS_MAX][9], iArg[SKINS_MAX];
  1670. get_user_name(id, szName, charsmax(szName));
  1671.  
  1672. nvault_get(iVault, szName, szData, charsmax(szData));
  1673.  
  1674. for(new i; i < skinsNum; i ++)
  1675. {
  1676. strtok(szData, szArg[i], charsmax(szArg[]), szData, charsmax(szData), '#');
  1677. iArg[i] = str_to_num(szArg[i]);
  1678. }
  1679. for(new i; i < skinsNum; i++)
  1680. g_iSkinsInMarket[id][i] = iArg[i];
  1681. nvault_close(iVault);
  1682. }
  1683. public Block_Say(index)
  1684. {
  1685. static said[191];
  1686. read_args(said, charsmax(said));
  1687. szRemove_Quotes(said, said);
  1688. replace_all(said, charsmax(said), "%", "");
  1689. replace_all(said, charsmax(said), "#", "");
  1690.  
  1691. if (!ValidMessage(said, 1)) return PLUGIN_CONTINUE;
  1692.  
  1693. static color[11], prefix[111], range[64];
  1694. get_user_team(index, color, charsmax(color));
  1695.  
  1696. formatex(range, charsmax(range), "^x03(^x04 %s^x01 |^x04 %s ^x03)", Ranks[kRange[index]][Rank_NAME], kClanName[ index ][ 0 ] ? kClanName[ index ] : "Fara Clan" );
  1697. formatex(prefix, charsmax(prefix), "%s%s^x03 %s", flag_get(kBits[ALIVE],index)?"^x01":"^x01*Mort* ", range, kPlayerName[index]);
  1698.  
  1699. if (is_user_admin(index)) format(said, charsmax(said), "^x04%s", said);
  1700.  
  1701. format(said, charsmax(said), "%s^x01 : %s", prefix, said);
  1702.  
  1703. static i, team[11];
  1704.  
  1705. for (i = 1; i <= MAXPLAYERS; ++i)
  1706. {
  1707. if (!flag_get(kBits[CONNECTED],i)) continue;
  1708.  
  1709. if (is_user_admin(i) || flag_get(kBits[ALIVE],index) && flag_get(kBits[ALIVE],i) || !flag_get(kBits[ALIVE],index) && !flag_get(kBits[ALIVE],i))
  1710. {
  1711. get_user_team(i, team, charsmax(team));
  1712. changeTeamInfo(i, color);
  1713. writeMessage(i, said);
  1714. changeTeamInfo(i, team);
  1715. }
  1716. }
  1717.  
  1718. return PLUGIN_HANDLED_MAIN;
  1719. }
  1720.  
  1721.  
  1722. public Block_TeamSay(index)
  1723. {
  1724. static said[191];
  1725. read_args(said, 190);
  1726. szRemove_Quotes( said, said );
  1727. replace_all(said, 190, "%", "");
  1728. replace_all(said, 190, "#", "");
  1729.  
  1730. if(kActivatedClanChat[ index ] )
  1731. {
  1732. if(!ValidMessage(said, 1) || kClanMembership[ index ] == WITHOUT_CLAN)
  1733. {
  1734. ColorChat(0, "!g[CS:GO Outstanding]Mesajul dvs. este inevalid sau nu sunteti intr-un clan");
  1735. return PLUGIN_HANDLED;
  1736. }
  1737.  
  1738. static i, team[11], color[11], range[128], prefix[111];
  1739. get_user_team(index, color, charsmax(color));
  1740.  
  1741. formatex(range, charsmax(range), "^x03(^x01 PRIVATE CHAT:^x04 %s ^x03)", kClanName[ index ]);
  1742. formatex(prefix, charsmax(prefix), "%s%s^x03 %s", flag_get(kBits[ALIVE],index)?"^x01":"^x01*Mort* ", range, kPlayerName[index]);
  1743.  
  1744. if (kClanMembership[ index ] == CLAN_OWNER || kClanMembership[ index ] == CLAN_BOSS) format(said, charsmax(said), "^x04%s", said);
  1745.  
  1746. format(said, charsmax(said), "%s^x01 : %s", prefix, said);
  1747.  
  1748. for (i = 1; i <= MAXPLAYERS; ++i)
  1749. {
  1750. if (!flag_get(kBits[CONNECTED],i)) continue;
  1751.  
  1752. if ( equal(kClanName[ index ], kClanName[ i ]) )
  1753. {
  1754. get_user_team(i, team, charsmax(team));
  1755. changeTeamInfo(i, color);
  1756. writeMessage(i, said);
  1757. changeTeamInfo(i, team);
  1758. }
  1759. }
  1760. }
  1761. else
  1762. {
  1763. if (!ValidMessage(said, 1)) return PLUGIN_CONTINUE;
  1764.  
  1765. static playerTeam, playerTeamName[19];
  1766. playerTeam = get_user_team(index);
  1767.  
  1768. switch (playerTeam)
  1769. {
  1770. case 1: copy (playerTeamName, 6, "^x03 * CT *");
  1771. case 2: copy (playerTeamName, 8, "^x03 * TT *");
  1772. default: copy (playerTeamName, 11, "* SPEC *");
  1773. }
  1774.  
  1775. static color[11], prefix[111], range[128];
  1776. get_user_team(index, color, charsmax(color));
  1777.  
  1778. formatex(range, charsmax(range), "^x03(^x04 %s^x01 |^x04 %s ^x03)", Ranks[kRange[index]][Rank_NAME], kClanName[ index ][ 0 ] ? kClanName[ index ] : "Fara Clan" );
  1779. formatex(prefix, charsmax(prefix), "%s%s %s^x03 %s", flag_get(kBits[ALIVE],index)?"^x01":"^x01*Mort* ", playerTeamName, range, kPlayerName[index]);
  1780.  
  1781. if (is_user_admin(index)) format(said, charsmax(said), "^x04%s", said);
  1782.  
  1783. format(said, charsmax(said), "%s^x01 : %s", prefix, said);
  1784.  
  1785. static i, team[11];
  1786. for (i = 1; i <= MAXPLAYERS; ++i)
  1787. {
  1788. if (!flag_get(kBits[CONNECTED],i)) continue;
  1789.  
  1790. if (get_user_team(i) == playerTeam)
  1791. {
  1792. if (flag_get(kBits[ALIVE],index) && flag_get(kBits[ALIVE],i) || !flag_get(kBits[ALIVE],index) && !flag_get(kBits[ALIVE],i))
  1793. {
  1794. get_user_team(i, team, charsmax(team));
  1795. changeTeamInfo(i, color);
  1796. writeMessage(i, said);
  1797. changeTeamInfo(i, team);
  1798. }
  1799. }
  1800. }
  1801. }
  1802.  
  1803. return PLUGIN_HANDLED_MAIN;
  1804. }
  1805.  
  1806. public ham_PlayerKilledPost( victim, attacker, shouldgib )
  1807. {
  1808. if( !is_user_connected( attacker ) || victim == attacker || !attacker )
  1809. return;
  1810.  
  1811. if(get_user_weapon( attacker ) == CSW_KNIFE)
  1812. {
  1813. ++kDataRank[ attacker ][ KNIFE_KILLS ];
  1814. ++kDataRank[ victim ][ KNIFE_DEATHS ];
  1815. }
  1816.  
  1817. ++kDataRank[ attacker ][ KILLS ];
  1818. ++kDataRank[ victim ][ DEATHS ];
  1819.  
  1820. flag_unset(kBits[ALIVE],victim);
  1821.  
  1822. UpdateRange( attacker );
  1823. }
  1824.  
  1825. public ham_PlayerSpawnPost( index )
  1826. {
  1827. flag_set(kBits[ALIVE],index);
  1828.  
  1829. if( !flag_get(kBits[ALIVE], index)) return;
  1830.  
  1831. ++kDataRank[ index ][ SPAWNS ];
  1832. }
  1833.  
  1834. public ev_DeathMsg()
  1835. {
  1836. static victim, attacker, headshot;
  1837.  
  1838. attacker = read_data(1);
  1839. victim = read_data(2);
  1840. headshot = read_data(3);
  1841.  
  1842. if( !attacker || victim == attacker )
  1843. {
  1844. ++kDataRank[ victim ][ SUICIDES ];
  1845. return;
  1846. }
  1847.  
  1848. if( headshot )
  1849. {
  1850. ++kDataRank[ attacker ][ HS_KILLS ];
  1851. ++kDataRank[ victim ][ HS_DEATHS ];
  1852. }
  1853. }
  1854.  
  1855. /* ================ */
  1856.  
  1857. public cmd_CLAN( index )
  1858. {
  1859. if( kClanMembership[ index ] == WITHOUT_CLAN )
  1860. {
  1861. ShowMenuCreateClan( index );
  1862. return PLUGIN_HANDLED;
  1863. }
  1864.  
  1865. ShowMenuClan( index );
  1866. return PLUGIN_HANDLED;
  1867. }
  1868.  
  1869. public JoinClanName( index )
  1870. {
  1871. read_args(kClanName[ index ], CLANNAME_LENGHT-1);
  1872. szRemove_Quotes(kClanName[ index ], kClanName[ index ]);
  1873. trim(kClanName[ index ]);
  1874.  
  1875. if( kClanNameConfirmated[ index ])
  1876. {
  1877. ColorChat(0, "!g[CS:GO Outstanding]Ai confirmat deja numele clanului");
  1878. ShowMenuCreateClan( index );
  1879. return;
  1880. }
  1881.  
  1882. if( !kClanName[ index ][ 0 ])
  1883. {
  1884. ColorChat(0, "!g[CS:GO Outstanding] INTRODUCETI NUMELE CLANULUI ");
  1885. client_cmd( index, "messagemode ^"JOIN_CLAN_NAME^"");
  1886. return;
  1887. }
  1888.  
  1889. static xd; xd = get_membersnum( index );
  1890.  
  1891. if( xd )
  1892. {
  1893. ColorChat(0, "!g[CS:GO Outstanding]Acest clan este folosit");
  1894. kClanName[ index ] = "^0";
  1895. ShowMenuCreateClan( index )
  1896. return;
  1897. }
  1898.  
  1899. ShowMenuConfirmateClanName( index );
  1900. }
  1901.  
  1902. public JoinPassword( index )
  1903. {
  1904. read_args(kPassword[ index ], PASSWORD_LENGHT-1);
  1905. szRemove_Quotes(kPassword[ index ], kPassword[ index ]);
  1906. trim(kPassword[ index ]);
  1907.  
  1908. if( !kPassword[ index ][ 0 ] || containi( kPassword[ index ], " ") != -1 )
  1909. {
  1910. ColorChat(0, "!g[CS:GO Outstanding]Eroare parola" );
  1911. client_cmd( index, "messagemode ^"JOIN_PASSWORD^"");
  1912. return;
  1913. }
  1914.  
  1915. switch(kStatus[ index ])
  1916. {
  1917. case NOT_REGISTERED:
  1918. {
  1919. ColorChat(0, "!g[CS:GO Outstanding]Confirmati parola pentru a continua");
  1920. copy(kPassword2[ index ], PASSWORD_LENGHT-1, kPassword[ index ]);
  1921.  
  1922. ShowMenuConfirmatePw( index );
  1923. }
  1924. case REGISTERED:
  1925. {
  1926. new buffer[PASSWORD_LENGHT];
  1927. adv_vault_get_prepare( vault, _, kPassword[ index ]);
  1928. adv_vault_get_field( vault, kFields[ C_PASS ], buffer, charsmax(buffer));
  1929.  
  1930. if(! equal(buffer, kPassword[ index ]))
  1931. {
  1932. ShowLogMenu( index );
  1933. ColorChat(0, "!g[CS:GO Outstanding]Parola incorecta" );
  1934. return;
  1935. }
  1936.  
  1937. ColorChat(0, "!g[CS:GO Outstanding]Te-ai conectat la contul tau");
  1938. ForceJoinTeam( index );
  1939. }
  1940. case LOGGUED:
  1941. {
  1942. if(flag_get(kBits[CAN_CHANGE_PW], index))
  1943. {
  1944. ColorChat(0, "!g[CS:GO Outstanding]V-ati schimbat deja contorul pe aceasta harta");
  1945. return;
  1946. }
  1947.  
  1948. ColorChat(0, "!g[CS:GO Outstanding]Confirmati-va parola pentru a o schimba ..." );
  1949. copy(kPassword2[ index ], PASSWORD_LENGHT-1, kPassword[ index ]);
  1950. ShowMenuConfirmatePw( index );
  1951. }
  1952. }
  1953. }
  1954.  
  1955. /*============================
  1956. MENUS
  1957. ============================*/
  1958.  
  1959. ShowMenuCreateClan( index )
  1960. {
  1961. static menu, tittle[MENU_TITTLE_LENGHT], members; members = get_membersnum( index );
  1962. formatex( tittle, MENU_TITTLE_LENGHT-1, "%s CREAZA CLAN", MENU_PREFIX );
  1963. menu = menu_create( tittle, "menu_create_hand" );
  1964.  
  1965. formatex( tittle, MENU_TITTLE_LENGHT-1, "Numele Clan: \d%s", kClanName[ index ] );
  1966. menu_additem( menu, (!kClanName[ index ][ 0 ])?"Introduceti numele clanului":tittle, "1" );
  1967.  
  1968. formatex( tittle, MENU_TITTLE_LENGHT-1, "Adaugati membrii ... \d( \r%d \y/ \r%d \d)", members, CLAN_MAXMEMBERS);
  1969. menu_additem( menu, (!kClanName[ index ][ 0 ])?"\dAdaugati membri":tittle, "2" );
  1970.  
  1971. menu_additem( menu, (members >= CLAN_MINMEMBERS )?"CREARE CLAN":"\dCREARE CLAN", "3" );
  1972.  
  1973. menu_display( index, menu );
  1974. }
  1975.  
  1976. public menu_create_hand( index, menu, item )
  1977. {
  1978. switch( item )
  1979. {
  1980. case MENU_EXIT: { menu_destroy( menu ); return PLUGIN_HANDLED; }
  1981.  
  1982. case 0:
  1983. {
  1984. if(!kClanNameConfirmated[ index ] )
  1985. {
  1986. ColorChat(0, "!g[CS:GO Outstanding] INTRODUCETI NUMELE CLANULUI" );
  1987. client_cmd( index, "messagemode ^"JOIN_CLAN_NAME^"" );
  1988.  
  1989. return PLUGIN_HANDLED;
  1990. }
  1991.  
  1992. ColorChat(0, "!g[CS:GO Outstanding]Ati confirmat deja numele clanului" );
  1993. ShowMenuCreateClan( index );
  1994. }
  1995. case 1:
  1996. {
  1997. if(!kClanName[ index ][ 0 ])
  1998. {
  1999. ColorChat(0, "!g[CS:GO Outstanding]Trebuie sa creati numele clanului inainte");
  2000. ShowMenuCreateClan( index );
  2001. return PLUGIN_HANDLED;
  2002. }
  2003.  
  2004. ShowInviteMenu( index );
  2005. }
  2006. case 2:
  2007. {
  2008. static members; members = get_membersnum( index );
  2009.  
  2010. if(members >= CLAN_MINMEMBERS )
  2011. CreateClan( index );
  2012. else
  2013. ColorChat(0, "!g[CS:GO Outstanding]Ai nevoie de cel putin %d membrii pentru a crea clan", CLAN_MINMEMBERS );
  2014. }
  2015. }
  2016.  
  2017. menu_destroy( menu );
  2018. return PLUGIN_HANDLED;
  2019. }
  2020.  
  2021. ShowMenuClan( index )
  2022. {
  2023. static menu, tittle[ MENU_TITTLE_LENGHT ], members; members = get_membersnum( index );
  2024. formatex( tittle, MENU_TITTLE_LENGHT-1, "%s MENU CLAN: \r%s^n\wMembrii: \y%d \d/ \y%d",
  2025. MENU_PREFIX, kClanName[ index ], members, CLAN_MAXMEMBERS );
  2026. menu = menu_create( tittle, "menu_clan" );
  2027.  
  2028.  
  2029. switch(kClanMembership[ index ])
  2030. {
  2031. case CLAN_OWNER:
  2032. {
  2033. menu_additem( menu, "Vedeti membrii", "1" );
  2034. menu_additem( menu, "Scoateti membrii", "2" );
  2035. menu_additem( menu, (members >= CLAN_MAXMEMBERS)?"\dInvita membrii":"Invita membrii", "3" );
  2036. menu_additem( menu, "Editeaza Rankurile \d( Din Clan )^n", "4" );
  2037.  
  2038. formatex(tittle, MENU_TITTLE_LENGHT-1, "%s \wClan Chat \y( \dPrivate chat \d^"\rTEAM SAY\d^"\y)",
  2039. kActivatedClanChat[ index ] ? "\rDesactiveaza":"\rActiveaza");
  2040. menu_additem( menu, tittle, "5");
  2041. }
  2042. case CLAN_BOSS:
  2043. {
  2044. menu_additem( menu, "Vedeti membrii", "1" );
  2045. menu_additem( menu, "Scoateti membrii", "2" );
  2046. menu_additem( menu, (members >= CLAN_MAXMEMBERS)?"\dInvita membrii":"Invita membrii", "3" );
  2047.  
  2048. formatex(tittle, MENU_TITTLE_LENGHT-1, "%s \wClan Chat \y( \dPrivate chat \d^"\rTEAM SAY\d^"\y)",
  2049. kActivatedClanChat[ index ] ? "Dezactiveaza":"Activeaza");
  2050. menu_additem( menu, tittle, "4");
  2051. }
  2052. case CLAN_MEMBER:
  2053. {
  2054. menu_additem( menu, "Vedeti membrii^n", "1" );
  2055.  
  2056. formatex(tittle, MENU_TITTLE_LENGHT-1, "%s \wClan Chat \y( \dPrivate chat \d^"\rTEAM SAY\d^"\y)",
  2057. kActivatedClanChat[ index ] ? "Dezactiveaza":"Activeaza");
  2058. menu_additem( menu, tittle, "2");
  2059. }
  2060. }
  2061.  
  2062. menu_display( index, menu );
  2063. }
  2064.  
  2065. public menu_clan( index, menu, item )
  2066. {
  2067. if( item == MENU_EXIT )
  2068. {
  2069. menu_destroy( menu );
  2070. return PLUGIN_HANDLED;
  2071. }
  2072.  
  2073. static members; members = get_membersnum( index );
  2074. switch(kClanMembership[ index ])
  2075. {
  2076. case CLAN_OWNER:
  2077. {
  2078. switch( item )
  2079. {
  2080. case 0: ShowClanMembers( index );
  2081. case 1: ShowKickMembersMenu( index );
  2082. case 2:
  2083. {
  2084. if(members < CLAN_MAXMEMBERS)
  2085. {
  2086. ShowInviteMenu( index );
  2087. return PLUGIN_HANDLED;
  2088. }
  2089.  
  2090. ColorChat(0,"!g[CS:GO Outstanding]Numarul maxim de membri a fost deja atins");
  2091. }
  2092.  
  2093. case 3: EditRangesMembers( index );
  2094. case 4:
  2095. {
  2096. if(kActivatedClanChat[ index ])
  2097. {
  2098. kActivatedClanChat[ index ] = false;
  2099. ShowMenuClan( index );
  2100. return PLUGIN_HANDLED;
  2101. }
  2102.  
  2103. kActivatedClanChat[ index ] = true;
  2104. ShowMenuClan( index );
  2105. }
  2106. }
  2107. }
  2108. case CLAN_BOSS:
  2109. {
  2110. switch( item )
  2111. {
  2112. case 0: ShowClanMembers( index );
  2113. case 1: ShowKickMembersMenu( index );
  2114. case 2:
  2115. {
  2116. if(members < CLAN_MAXMEMBERS)
  2117. {
  2118. ShowInviteMenu( index );
  2119. return PLUGIN_HANDLED;
  2120. }
  2121.  
  2122. ColorChat(0,"!g[CS:GO Outstanding]Numarul maxim de membri a fost deja atins");
  2123. }
  2124. case 3:
  2125. {
  2126. if(kActivatedClanChat[ index ])
  2127. {
  2128. kActivatedClanChat[ index ] = false;
  2129. ShowMenuClan( index );
  2130. return PLUGIN_HANDLED;
  2131. }
  2132.  
  2133. kActivatedClanChat[ index ] = true;
  2134. ShowMenuClan( index );
  2135. }
  2136. }
  2137. }
  2138. case CLAN_MEMBER:
  2139. {
  2140. switch( item )
  2141. {
  2142. case 0: ShowClanMembers( index );
  2143. case 1:
  2144. {
  2145. if(kActivatedClanChat[ index ])
  2146. {
  2147. kActivatedClanChat[ index ] = false;
  2148. ShowMenuClan( index );
  2149. return PLUGIN_HANDLED;
  2150. }
  2151.  
  2152. kActivatedClanChat[ index ] = true;
  2153. ShowMenuClan( index );
  2154. }
  2155. }
  2156. }
  2157. }
  2158.  
  2159. menu_destroy( menu );
  2160. return PLUGIN_HANDLED;
  2161. }
  2162.  
  2163. ShowInviteMenu( index )
  2164. {
  2165. static n, menu, pos[3], tittle[MENU_TITTLE_LENGHT];
  2166. formatex( tittle, MENU_TITTLE_LENGHT-1, "%s Trimiteti invitatii pentru a se alatura clanului", MENU_PREFIX );
  2167. menu = menu_create( tittle, "menu_invite_hand" );
  2168.  
  2169. for( n = 1; n <= MAXPLAYERS; ++n )
  2170. {
  2171. if( !flag_get(kBits[CONNECTED], n) ) continue;
  2172.  
  2173. if( kClanMembership[ n ] != WITHOUT_CLAN ) continue;
  2174.  
  2175. if( index == n ) continue;
  2176.  
  2177. num_to_str( n, pos, 2 );
  2178.  
  2179. menu_additem( menu, kPlayerName[ n ], pos );
  2180. }
  2181.  
  2182. menu_display( index, menu );
  2183. }
  2184.  
  2185. public menu_invite_hand( index, menu, item )
  2186. {
  2187. if( item == MENU_EXIT )
  2188. {
  2189. menu_destroy( menu );
  2190. return PLUGIN_HANDLED;
  2191. }
  2192.  
  2193. static iKey[ 6 ], iAccess, iCallback;
  2194.  
  2195. menu_item_getinfo( menu, item, iAccess, iKey, charsmax( iKey ), _, _, iCallback );
  2196. kInvited[ index ] = str_to_num( iKey );
  2197.  
  2198. if( get_membersnum( index ) == CLAN_MAXMEMBERS )
  2199. {
  2200. ColorChat(0, "!g[CS:GO Outstanding][CS:GO Outstanding] Ati atins numarul maxim de membri");
  2201. menu_destroy( menu );
  2202. return PLUGIN_HANDLED;
  2203. }
  2204.  
  2205. ColorChat(0, "!g[CS:GO Outstanding][CS:GO Outstanding] Ati invitat %s sa se alature clanului.", kPlayerName[ kInvited[index] ] );
  2206. client_print( kInvited[ index ], print_chat, "[CS:GO Outstanding] %s ti-a trimis o invitatie sa et alaturi clanului lui: %s", kPlayerName[ index ], kClanName[ index ] );
  2207.  
  2208. kClanOwner[ kInvited[ index ] ] = index;
  2209.  
  2210. if(is_user_bot( kInvited[ index ] ) )
  2211. {
  2212. kClanMembership[ kInvited[ index ] ] = CLAN_MEMBER;
  2213. copy(kClanName[ kInvited[index] ], CLANNAME_LENGHT-1, kClanName[ index ] );
  2214. ColorChat(0, "!g[CS:GO Outstanding][CS:GO Outstanding] %s a acceptat solicitarea dvs.", kPlayerName[ kInvited[index] ] );
  2215.  
  2216. DataManagement( kInvited[ index ], SAVE );
  2217. cmd_CLAN( index );
  2218. }
  2219. else
  2220. ShowMenuInvited( kInvited[ index ] , index );
  2221.  
  2222. menu_destroy( menu );
  2223. return PLUGIN_HANDLED;
  2224. }
  2225.  
  2226. ShowMenuInvited( invited, owner )
  2227. {
  2228. static menu, tittle[ MENU_TITTLE_LENGHT ];
  2229. formatex( tittle, MENU_TITTLE_LENGHT-1, "%s \r%s \w?i-a trimis o invita?ie de a intra in clan: \y%s",
  2230. MENU_PREFIX, kPlayerName[ owner ], kClanName[ owner ] );
  2231.  
  2232. menu = menu_create(tittle, "menu_invited_hand");
  2233.  
  2234. menu_additem( menu, "\yAcepta", "1");
  2235.  
  2236. menu_additem( menu, "\rRespinge", "2");
  2237.  
  2238. menu_setprop( menu, MPROP_EXIT, MEXIT_NEVER );
  2239.  
  2240. menu_display( invited, menu );
  2241. }
  2242.  
  2243. public menu_invited_hand( index, menu, item )
  2244. {
  2245. switch (item)
  2246. {
  2247. case 0:
  2248. {
  2249. kClanMembership[ index ] = CLAN_MEMBER;
  2250. copy(kClanName[ index ], CLANNAME_LENGHT-1, kClanName[ kClanOwner[index] ]);
  2251. client_print( kClanOwner[ index ], print_chat, "[CS:GO Outstanding] %s a acceptat solicitarea dvs.", kPlayerName[ index ]);
  2252.  
  2253. cmd_CLAN( kClanOwner[ index ] );
  2254. }
  2255. case 1:
  2256. {
  2257. client_print( kClanOwner[ index ], print_chat, "[CS:GO Outstanding] %s a respins solicitarea dvs", kPlayerName[ index ]);
  2258.  
  2259. cmd_CLAN( kClanOwner[ index ] );
  2260.  
  2261. kClanMembership[ index ] = WITHOUT_CLAN;
  2262. kClanOwner[ index ] = 0;
  2263. kClanName[ index ] = "^0";
  2264. }
  2265.  
  2266. case MENU_EXIT: { menu_destroy(menu); return PLUGIN_HANDLED; }
  2267. }
  2268.  
  2269. menu_destroy(menu);
  2270.  
  2271. return PLUGIN_HANDLED;
  2272. }
  2273.  
  2274. ShowMenuConfirmateClanName( index )
  2275. {
  2276. static menu, tittle[ MENU_TITTLE_LENGHT ];
  2277. formatex( tittle, MENU_TITTLE_LENGHT-1, "%s Numele clanului va fi: \d%s", MENU_PREFIX, kClanName[ index ] );
  2278. menu = menu_create( tittle, "menu_confirm_hand" );
  2279.  
  2280. menu_additem( menu, "Da, Continua", "1" );
  2281. menu_additem( menu, "Nu, Vreau sa il rescriu", "2");
  2282.  
  2283. menu_setprop( menu, MPROP_EXIT, MEXIT_NEVER );
  2284. menu_display( index, menu );
  2285. }
  2286.  
  2287. public menu_confirm_hand( index, menu, item )
  2288. {
  2289. switch( item )
  2290. {
  2291. case MENU_EXIT: { menu_destroy(menu); return PLUGIN_HANDLED; }
  2292.  
  2293. case 0:
  2294. {
  2295. ColorChat(0, "!g[CS:GO Outstanding][CS:GO Outstanding] Numele clanului a fost creat corect." );
  2296. kClanNameConfirmated[ index ] = true;
  2297. DataManagement( index, SAVE );
  2298. ShowMenuCreateClan( index );
  2299. }
  2300. case 1:
  2301. {
  2302. ColorChat(0, "!g[CS:GO Outstanding] INTRODUCEtI NUMELE CLANULUI ");
  2303. client_cmd( index, "messagemode ^"JOIN_CLAN_NAME^"");
  2304. }
  2305. }
  2306.  
  2307. menu_destroy( menu );
  2308. return PLUGIN_HANDLED;
  2309. }
  2310.  
  2311. ShowClanMembers( index )
  2312. {
  2313. static menu, keyindex, szkeyindex[5], item[128], item2[50], tittle[ MENU_TITTLE_LENGHT ];
  2314. formatex( tittle, MENU_TITTLE_LENGHT-1, "%s Lista membrilor din clan: \d %s", MENU_PREFIX, kClanName[ index ]);
  2315. menu = menu_create( tittle, "menu_members_hand");
  2316.  
  2317. adv_vault_find_start( vault, kFields[ C_CLANNAME ], kClanName[ index ], FINDFLAGS_EQUAL);
  2318.  
  2319. while((keyindex = adv_vault_find_next( vault )))
  2320. {
  2321. adv_vault_get_field( vault, kFields[ C_PNAME], item2, charsmax(item2) );
  2322. num_to_str( keyindex, szkeyindex, charsmax(szkeyindex) );
  2323. formatex( item, charsmax(item), "%s \d( \y %s \d)", item2, MemberRange[adv_vault_get_field(vault, kFields[C_MEMBERSHIP])] );
  2324. menu_additem( menu, item, szkeyindex);
  2325. }
  2326.  
  2327. adv_vault_find_closed( vault );
  2328.  
  2329. menu_display( index, menu );
  2330. }
  2331.  
  2332. public menu_members_hand( index, menu, item )
  2333. {
  2334. if( item == MENU_EXIT)
  2335. {
  2336. cmd_CLAN( index );
  2337. menu_destroy( menu );
  2338. return PLUGIN_HANDLED;
  2339. }
  2340.  
  2341. static iKey, szitem[5], keyindex;
  2342. menu_item_getinfo( menu, item, iKey, szitem, charsmax(szitem), _, _, iKey );
  2343. keyindex = str_to_num(szitem);
  2344.  
  2345. ShowMenuPlayerStats( index, keyindex );
  2346.  
  2347. menu_destroy( menu );
  2348. return PLUGIN_HANDLED;
  2349. }
  2350.  
  2351. ShowMenuPlayerStats( index, keyindex )
  2352. {
  2353. new name[32], tittle[ MENU_TITTLE_LENGHT ], menu
  2354.  
  2355. if(!adv_vault_get_prepare( vault, keyindex ))
  2356. return;
  2357.  
  2358. adv_vault_get_field( vault, kFields[ C_PNAME ], name, 31 );
  2359. formatex( tittle, MENU_TITTLE_LENGHT-1, "%s \wInformatii despre: \y%s \r", MENU_PREFIX, name );
  2360.  
  2361. menu = menu_create( tittle, "menu_playerstats_hand" );
  2362.  
  2363. formatex( tittle, MENU_TITTLE_LENGHT-1, "\wRank din clan: \y%s",
  2364. MemberRange[ adv_vault_get_field( vault, kFields[ C_MEMBERSHIP]) ]);
  2365. menu_additem( menu, tittle, "" );
  2366.  
  2367. formatex( tittle, MENU_TITTLE_LENGHT-1, "\wRank General: \y%s",
  2368. Ranks[ adv_vault_get_field(vault, kFields[C_RANGE ]) ][ Rank_NAME ]);
  2369. menu_additem( menu, tittle, "" );
  2370.  
  2371. formatex(tittle, MENU_TITTLE_LENGHT-1, "\wKills: \y%d", adv_vault_get_field( vault, kFields[ C_KILLS ]) );
  2372. menu_additem( menu , tittle, "" );
  2373.  
  2374. formatex(tittle, MENU_TITTLE_LENGHT-1, "\wDeaths: \y%d", adv_vault_get_field( vault, kFields[ C_DEATHS ]) );
  2375. menu_additem( menu, tittle, "" );
  2376.  
  2377. formatex(tittle, MENU_TITTLE_LENGHT-1, "\wHeadshot Kills: \y%d", adv_vault_get_field( vault, kFields[ C_HS_KILLS]) );
  2378. menu_additem( menu, tittle, "");
  2379.  
  2380. formatex(tittle, MENU_TITTLE_LENGHT-1, "\wHeadshot Deaths: \y%d", adv_vault_get_field( vault, kFields[ C_HS_DEATHS]) );
  2381. menu_additem( menu, tittle, "");
  2382.  
  2383. formatex(tittle, MENU_TITTLE_LENGHT-1, "\wKnife Kills: \y%d", adv_vault_get_field( vault, kFields[ C_KNIFE_KILLS ]) );
  2384. menu_additem( menu, tittle, "");
  2385.  
  2386. formatex(tittle, MENU_TITTLE_LENGHT-1, "\wKnife Deaths: \y%d", adv_vault_get_field( vault, kFields[ C_KNIFE_DEATHS]) );
  2387. menu_additem( menu, tittle, "");
  2388.  
  2389. formatex(tittle, MENU_TITTLE_LENGHT-1, "\wSuicides: \y%d", adv_vault_get_field( vault, kFields[ C_SUICIDES ]) );
  2390. menu_additem( menu, tittle, "");
  2391.  
  2392. formatex(tittle, MENU_TITTLE_LENGHT-1, "\wRespawns: \y%d", adv_vault_get_field( vault, kFields[ C_SPAWNS ]) );
  2393. menu_additem( menu, tittle, "");
  2394.  
  2395. menu_display( index, menu );
  2396. }
  2397.  
  2398. public menu_playerstats_hand( index, menu, item )
  2399. {
  2400. if( item == MENU_EXIT )
  2401. {
  2402. menu_destroy( menu );
  2403. return PLUGIN_HANDLED;
  2404. }
  2405.  
  2406. if(item < 6)
  2407. menu_display( index, menu, 0);
  2408. else
  2409. menu_display( index, menu, 1);
  2410.  
  2411. return PLUGIN_HANDLED;
  2412. }
  2413.  
  2414. ShowKickMembersMenu( index )
  2415. {
  2416. static menu, keyindex, szkeyindex[5], item[128], tittle[ MENU_TITTLE_LENGHT ];
  2417. formatex( tittle, MENU_TITTLE_LENGHT-1, "%s Scoateti Jucatorii Clanului: \d %s", MENU_PREFIX, kClanName[ index ]);
  2418. menu = menu_create( tittle, "menu_kick_hand");
  2419.  
  2420. adv_vault_find_start( vault, kFields[ C_CLANNAME ], kClanName[ index ], FINDFLAGS_EQUAL);
  2421.  
  2422. while((keyindex = adv_vault_find_next( vault )))
  2423. {
  2424. adv_vault_get_field( vault, kFields[ C_PNAME ], item, charsmax(item) );
  2425. num_to_str( keyindex, szkeyindex, charsmax(szkeyindex) );
  2426. menu_additem( menu, item, szkeyindex);
  2427. }
  2428.  
  2429. adv_vault_find_closed( vault );
  2430.  
  2431. menu_display( index, menu );
  2432. }
  2433.  
  2434. public menu_kick_hand( index, menu, item )
  2435. {
  2436. if( item == MENU_EXIT)
  2437. {
  2438. cmd_CLAN( index );
  2439. menu_destroy( menu );
  2440. return PLUGIN_HANDLED;
  2441. }
  2442.  
  2443. static iKey, szitem[5], keyindex;
  2444. menu_item_getinfo( menu, item, iKey, szitem, charsmax(szitem), _, _, iKey );
  2445. keyindex = str_to_num(szitem);
  2446.  
  2447. if(!adv_vault_get_prepare( vault, keyindex ))
  2448. return PLUGIN_HANDLED;
  2449.  
  2450. static level, name[32];
  2451. adv_vault_get_field( vault, kFields[ C_PNAME ], name, 31);
  2452. level = adv_vault_get_field( vault, kFields[ C_MEMBERSHIP]);
  2453.  
  2454. if(equal(name, kPlayerName[ index ]) )
  2455. {
  2456. ColorChat(0,"!g[CS:GO Outstanding]Nu te pooi expedia singur");
  2457. ShowMenuClan( index );
  2458. return PLUGIN_HANDLED;
  2459. }
  2460.  
  2461. if( level == CLAN_OWNER)
  2462. {
  2463. ColorChat(0,"!g[CS:GO Outstanding]Nu puteti expedia fondatorul clanului");
  2464. ShowMenuClan( index );
  2465. return PLUGIN_HANDLED;
  2466. }
  2467.  
  2468. adv_vault_set_start( vault )
  2469. adv_vault_set_field( vault, kFields[ C_CLANNAME ], "^0");
  2470. adv_vault_set_field( vault, kFields[ C_MEMBERSHIP ], WITHOUT_CLAN );
  2471. adv_vault_set_field( vault, kFields[ C_CLAN_CHAT ], false);
  2472. adv_vault_set_end( vault, _, name);
  2473.  
  2474. ColorChat(0, "!g[CS:GO Outstanding]Ai expulzat din Clan: %s", name );
  2475. ShowMenuClan( index );
  2476.  
  2477. menu_destroy( menu );
  2478. return PLUGIN_HANDLED;
  2479. }
  2480.  
  2481. EditRangesMembers( index )
  2482. {
  2483. static menu, keyindex, szkeyindex[5], item[128], item2[50], tittle[ MENU_TITTLE_LENGHT ];
  2484. formatex( tittle, MENU_TITTLE_LENGHT-1, "%s Clan Ranks Editor: \d %s", MENU_PREFIX, kClanName[ index ]);
  2485. menu = menu_create( tittle, "menu_ranges_hand");
  2486.  
  2487. adv_vault_find_start( vault, kFields[ C_CLANNAME ], kClanName[ index ], FINDFLAGS_EQUAL);
  2488.  
  2489. while((keyindex = adv_vault_find_next( vault )))
  2490. {
  2491. adv_vault_get_field( vault, kFields[ C_PNAME], item2, charsmax(item2) );
  2492. num_to_str( keyindex, szkeyindex, charsmax(szkeyindex) );
  2493. formatex( item, charsmax(item), "%s \d( \y %s \d)", item2, MemberRange[adv_vault_get_field(vault, kFields[C_MEMBERSHIP])] );
  2494. menu_additem( menu, item, szkeyindex);
  2495. }
  2496.  
  2497. adv_vault_find_closed( vault );
  2498.  
  2499. menu_display( index, menu );
  2500. }
  2501.  
  2502. public menu_ranges_hand( index, menu, item )
  2503. {
  2504. if( item == MENU_EXIT)
  2505. {
  2506. cmd_CLAN( index );
  2507. menu_destroy( menu );
  2508. return PLUGIN_HANDLED;
  2509. }
  2510.  
  2511. static iKey, szitem[5], keyindex;
  2512. menu_item_getinfo( menu, item, iKey, szitem, charsmax(szitem), _, _, iKey );
  2513. keyindex = str_to_num(szitem);
  2514.  
  2515. if(!adv_vault_get_prepare( vault, keyindex ))
  2516. return PLUGIN_HANDLED;
  2517.  
  2518. static level, name[32];
  2519. adv_vault_get_field( vault, kFields[ C_PNAME ], name, 31);
  2520. level = adv_vault_get_field( vault, kFields[ C_MEMBERSHIP]);
  2521.  
  2522. if(equal(name, kPlayerName[ index ]) )
  2523. {
  2524. ColorChat(0,"!g[CS:GO Outstanding]Nu poti schimba rangul, singur");
  2525. ShowMenuClan( index );
  2526. return PLUGIN_HANDLED;
  2527. }
  2528.  
  2529. if( level == CLAN_OWNER)
  2530. {
  2531. ColorChat(0,"!g[CS:GO Outstanding]Nu puteti schimba Rank la fondatorul clanului");
  2532. ShowMenuClan( index );
  2533. return PLUGIN_HANDLED;
  2534. }
  2535.  
  2536. adv_vault_set_start( vault )
  2537.  
  2538. if( level == CLAN_MEMBER )
  2539. adv_vault_set_field( vault, kFields[ C_MEMBERSHIP ], CLAN_BOSS );
  2540. else if( level == CLAN_BOSS )
  2541. adv_vault_set_field( vault, kFields[ C_MEMBERSHIP ], CLAN_MEMBER );
  2542.  
  2543. adv_vault_set_end( vault, _, name);
  2544.  
  2545. ColorChat(0, "!g[CS:GO Outstanding]Ati schimbat rangul la: %s", name );
  2546. ShowMenuClan( index );
  2547.  
  2548. menu_destroy( menu );
  2549. return PLUGIN_HANDLED;
  2550. }
  2551.  
  2552. /* ACCOUNT SYSTEM */
  2553.  
  2554. ShowLogMenu( index)
  2555. {
  2556. static menu, tittle[MENU_TITTLE_LENGHT];
  2557. formatex(tittle, MENU_TITTLE_LENGHT-1, "Sistem de logare \dCS:GO Outstanding^n\wBine ai venit \r%s^n\wStare: \r%s^n\wUltima ta visita a fost pe: \r%s",
  2558. kPlayerName[ index ], Status[ kStatus[ index ] ], kDate[ index ] );
  2559.  
  2560. menu = menu_create( tittle, "menu_log_hand" );
  2561.  
  2562. menu_additem(menu, (kStatus[ index ] == REGISTERED ) ? "Conectati-va":"\dConectati-va", "1" );
  2563. menu_additem(menu, (kStatus[ index ] == NOT_REGISTERED ) ? "inregistrare^n":"\dinregistrare^n", "2" );
  2564. menu_additem(menu, (kStatus[ index ] == LOGGUED && !flag_get(kBits[CAN_CHANGE_PW],index)) ? "Schimbati parola":"\dSchimbati parola", "3" );
  2565.  
  2566. menu_setprop( menu, MPROP_EXIT, MEXIT_NEVER );
  2567.  
  2568. menu_display( index, menu );
  2569. }
  2570.  
  2571. public menu_log_hand( index, menu, item )
  2572. {
  2573. switch( item )
  2574. {
  2575. case 0:
  2576. {
  2577. if(kStatus[ index ] == REGISTERED)
  2578. {
  2579. ColorChat(0, "!g[CS:GO Outstanding]Introduceti parola pentru a intra in cont" );
  2580. client_cmd( index,"messagemode ^"JOIN_PASSWORD^"" );
  2581. }
  2582. else
  2583. {
  2584. ColorChat(0, "!g[CS:GO Outstanding]Nu puteti alege aceasta optiune");
  2585. ShowLogMenu( index );
  2586. return PLUGIN_HANDLED;
  2587. }
  2588. }
  2589. case 1:
  2590. {
  2591. if(kStatus[ index ] == NOT_REGISTERED )
  2592. {
  2593. ColorChat(0, "!g[CS:GO Outstanding]Introduceti o parola pentru a crea un cont" );
  2594. client_cmd( index ,"messagemode ^"JOIN_PASSWORD^"" );
  2595. }
  2596. else
  2597. {
  2598. ColorChat(0, "!g[CS:GO Outstanding]Nu puteti alege aceasta optiune" );
  2599. ShowLogMenu( index );
  2600. return PLUGIN_HANDLED;
  2601. }
  2602. }
  2603. case 2:
  2604. {
  2605. if(kStatus[ index ] == LOGGUED && !flag_get(kBits[CAN_CHANGE_PW],index))
  2606. {
  2607. ColorChat(0, "!g[CS:GO Outstanding]Introduceti noua parola" );
  2608. client_cmd( index,"messagemode ^"JOIN_PASSWORD^"");
  2609. }
  2610. else
  2611. {
  2612. ColorChat(0, "!g[CS:GO Outstanding]Nu sunteti conectat sau v-ati schimbat deja parola pe parcursul hartii" );
  2613. ShowLogMenu( index );
  2614. return PLUGIN_HANDLED;
  2615. }
  2616. }
  2617.  
  2618. case MENU_EXIT: { menu_destroy( menu ); return PLUGIN_HANDLED; }
  2619. }
  2620.  
  2621. menu_destroy( menu );
  2622. return PLUGIN_HANDLED;
  2623. }
  2624.  
  2625. ShowMenuConfirmatePw( index )
  2626. {
  2627. static menu, Tit[ MENU_TITTLE_LENGHT ];
  2628. formatex( Tit, MENU_TITTLE_LENGHT-1,"Parola va fii \r%s^n^n\yconfirmi??", kPassword2[ index ]);
  2629.  
  2630. menu = menu_create( Tit, "menu_confirmpw_hand" );
  2631.  
  2632. menu_additem( menu,"\rDa\w, Confirma","1" );
  2633. menu_additem( menu,"\rNu\w,Vreau sa o rescriu","2" );
  2634.  
  2635. menu_setprop( menu, MPROP_EXIT, MEXIT_NEVER );
  2636.  
  2637. menu_display( index, menu );
  2638. }
  2639.  
  2640. public menu_confirmpw_hand( index, menu, item )
  2641. {
  2642. switch(item)
  2643. {
  2644. case 0:
  2645. {
  2646. if( kStatus[ index ] == LOGGUED )
  2647. {
  2648. copy(kPassword[ index ], PASSWORD_LENGHT-1, kPassword2[ index ]);
  2649. DataManagement( index, SAVE );
  2650. ColorChat(0, "!g[CS:GO Outstanding]Parola dvs. a fost modificata cu succes");
  2651. flag_set(kBits[CAN_CHANGE_PW], index);
  2652. }
  2653. else
  2654. {
  2655. copy(kPassword[ index ], PASSWORD_LENGHT-1, kPassword2[ index ]);
  2656. ColorChat(0, "!g[CS:GO Outstanding]Contul dvs. a fost creat cu succes" );
  2657. DataManagement( index, SAVE );
  2658. ForceJoinTeam( index );
  2659. }
  2660. }
  2661. case 1:
  2662. {
  2663. menu_destroy(menu);
  2664.  
  2665. client_cmd( index, "messagemode ^"JOIN_PASSWORD^"" );
  2666.  
  2667. if( kStatus[ index ] == LOGGUED )
  2668. ColorChat(0, "!g[CS:GO Outstanding]Introduceti noua Parola" );
  2669. else
  2670. ColorChat(0, "!g[CS:GO Outstanding]Introduceti Parola pentru contul dvs. nou" );
  2671. }
  2672.  
  2673. case MENU_EXIT: { menu_destroy( menu ); return PLUGIN_HANDLED; }
  2674. }
  2675.  
  2676. menu_destroy( menu );
  2677. return PLUGIN_HANDLED;
  2678. }
  2679.  
  2680. /*============================
  2681. STOCKS
  2682. ============================*/
  2683.  
  2684. stock szRemove_Quotes( const szStr[ ], szOut[ ] )
  2685. {
  2686. if ( !szStr[ 1 ] )
  2687. {
  2688. szOut[ 0 ] = EOS;
  2689. return 0;
  2690. }
  2691.  
  2692. copy( szOut, strlen( szStr )-2, szStr[ 1 ] );
  2693. trim( szOut );
  2694.  
  2695. static iLen, i;
  2696. iLen = strlen( szOut );
  2697.  
  2698. for ( i = 0; i < iLen; ++i)
  2699. {
  2700. if (szOut[ i ] == '"')
  2701. return 0;
  2702. }
  2703.  
  2704. return iLen;
  2705. }
  2706.  
  2707. stock ValidMessage(text[], maxcount)
  2708. {
  2709. static len, i, count;
  2710. len = strlen(text);
  2711. count = 0;
  2712.  
  2713. if (!len) return false;
  2714.  
  2715. for (i = 0; i < len; ++i)
  2716. {
  2717. if (text[i] != ' ')
  2718. {
  2719. ++count;
  2720.  
  2721. if (count >= maxcount)
  2722. return true;
  2723. }
  2724. }
  2725.  
  2726. return false;
  2727. }
  2728.  
  2729. public changeTeamInfo(player, team[])
  2730. {
  2731. message_begin(MSG_ONE, kMsg[MSG_TEAMINFO], _, player);
  2732. write_byte(player);
  2733. write_string(team);
  2734. message_end();
  2735. }
  2736.  
  2737. public writeMessage(player, message[])
  2738. {
  2739. message_begin(MSG_ONE, kMsg[MSG_SAYTEXT], {0, 0, 0}, player);
  2740. write_byte(player);
  2741. write_string(message);
  2742. message_end();
  2743. }
  2744.  
  2745. stock Color_Print(const id, const input[], any:...)
  2746. {
  2747. new count = 1, players[32];
  2748. static msg[191], len;
  2749.  
  2750. len = formatex(msg, charsmax(msg), "%s ", CHAT_PREFIX);
  2751. vformat(msg[len], 190 - len, input, 3);
  2752.  
  2753. replace_all(msg, 190, "!g", "^4");
  2754. replace_all(msg, 190, "!n", "^1");
  2755. replace_all(msg, 190, "!t", "^3");
  2756.  
  2757.  
  2758. if(id)
  2759. players[0] = id;
  2760. else
  2761. get_players(players, count, "ch");
  2762.  
  2763. for (new i = 0; i < count; ++i)
  2764. {
  2765. if(flag_get(kBits[CONNECTED], players[i]))
  2766. {
  2767. message_begin(MSG_ONE_UNRELIABLE, kMsg[MSG_SAYTEXT], _, players[i]);
  2768. write_byte(players[i]);
  2769. write_string(msg);
  2770. message_end();
  2771. }
  2772. }
  2773.  
  2774. }
  2775.  
  2776. public message_VGUImenu( msgid, dest, index )
  2777. {
  2778. if( kStatus[ index ] != LOGGUED )
  2779. ShowLogMenu( index );
  2780.  
  2781. return 1;
  2782. }
  2783.  
  2784. public DataManagement( index, type )
  2785. {
  2786. if( !flag_get(kBits[CONNECTED],index) ) return;
  2787.  
  2788. if(type == LOAD)
  2789. {
  2790. if( !adv_vault_get_prepare( vault, _, kPlayerName[ index ] ) )
  2791. {
  2792. kStatus[ index ] = NOT_REGISTERED;
  2793. return;
  2794. }
  2795. else
  2796. {
  2797. kStatus[ index ] = REGISTERED;
  2798.  
  2799. kClanMembership[ index ] = adv_vault_get_field( vault, kFields[ C_MEMBERSHIP ] );
  2800. adv_vault_get_field( vault, kFields[ C_CLANNAME ], kClanName[ index ], CLANNAME_LENGHT );
  2801. adv_vault_get_field( vault, kFields[ C_DATE ], kDate[ index ], 31);
  2802. adv_vault_get_field( vault, kFields[ C_PASS ], kPassword[ index ], PASSWORD_LENGHT-1);
  2803. adv_vault_get_field( vault, kFields[ C_PNAME ], kPname[ index ], 31 );
  2804. kDataRank[ index ][ KILLS ] = adv_vault_get_field( vault, kFields[ C_KILLS ] );
  2805. kDataRank[ index ][ DEATHS ] = adv_vault_get_field( vault, kFields[ C_DEATHS ] );
  2806. kDataRank[ index ][ HS_KILLS ] = adv_vault_get_field( vault, kFields[ C_HS_KILLS ] );
  2807. kDataRank[ index ][ HS_DEATHS ] = adv_vault_get_field( vault, kFields[C_HS_DEATHS ] );
  2808. kDataRank[ index ][ KNIFE_KILLS ] = adv_vault_get_field( vault, kFields[C_KNIFE_KILLS ] );
  2809. kDataRank[ index ][ KNIFE_DEATHS ] = adv_vault_get_field( vault, kFields[C_KNIFE_DEATHS ] );
  2810. kDataRank[ index ][ SUICIDES ] = adv_vault_get_field( vault, kFields[C_SUICIDES ] );
  2811. kDataRank[ index ][ SPAWNS ] = adv_vault_get_field( vault, kFields[C_SPAWNS ] );
  2812. kActivatedClanChat[ index ] = adv_vault_get_field( vault, kFields[ C_CLAN_CHAT ] );
  2813. }
  2814. }
  2815. else
  2816. {
  2817. copy(kPname[ index ], 31, kPlayerName[ index ]);
  2818. adv_vault_set_start( vault );
  2819.  
  2820. adv_vault_set_field( vault, kFields[ C_MEMBERSHIP ], kClanMembership[ index ] );
  2821. adv_vault_set_field( vault, kFields[ C_CLANNAME ], kClanName[ index ] );
  2822. adv_vault_set_field( vault, kFields[ C_DATE ], kDate[ index ]);
  2823. adv_vault_set_field( vault, kFields[ C_PASS ], kPassword[ index ]);
  2824. adv_vault_set_field( vault, kFields[ C_PNAME ], kPname[ index ]);
  2825. adv_vault_set_field( vault, kFields[ C_KILLS ], kDataRank[ index ][ KILLS ]);
  2826. adv_vault_set_field( vault, kFields[ C_DEATHS ], kDataRank[ index ][DEATHS]);
  2827. adv_vault_set_field( vault, kFields[ C_HS_KILLS ], kDataRank[ index ][ HS_KILLS ]);
  2828. adv_vault_set_field( vault, kFields[ C_HS_DEATHS ], kDataRank[ index ][ HS_DEATHS ]);
  2829. adv_vault_set_field( vault, kFields[ C_KNIFE_KILLS ], kDataRank[ index ][ KNIFE_KILLS ]);
  2830. adv_vault_set_field( vault, kFields[ C_KNIFE_DEATHS], kDataRank[ index ][ KNIFE_DEATHS ]);
  2831. adv_vault_set_field( vault, kFields[ C_SUICIDES], kDataRank[ index ][ SUICIDES ]);
  2832. adv_vault_set_field( vault, kFields[ C_SPAWNS ], kDataRank[ index ][ SPAWNS ]);
  2833. adv_vault_set_field( vault, kFields[ C_CLAN_CHAT ], kActivatedClanChat[ index ] );
  2834.  
  2835. adv_vault_set_end( vault, 0, kPlayerName[ index ] );
  2836. }
  2837. }
  2838.  
  2839. public fm_ClientInfoChanged( index, buffer )
  2840. {
  2841. if( flag_get(kBits[CONNECTED],index) )
  2842. {
  2843. if(kStatus[ index ] == LOGGUED)
  2844. {
  2845. static OldName[33];
  2846.  
  2847. engfunc(EngFunc_InfoKeyValue, buffer, "name", OldName, sizeof OldName - 1);
  2848.  
  2849. if(equal(OldName, kPlayerName[ index ]))
  2850. return FMRES_IGNORED;
  2851.  
  2852. set_user_info( index, "name", kPlayerName[ index ]);
  2853. client_cmd( index, "setinfo ^"name^" ^"%s^"", kPlayerName[ index ]);
  2854. }
  2855. }
  2856.  
  2857. return FMRES_IGNORED;
  2858. }
  2859.  
  2860. public ForceJoinTeam( index )
  2861. {
  2862. static teammsg_block, teammsg_block_vgui, restore, vgui;
  2863.  
  2864. restore = get_pdata_int( index, 510 );
  2865. vgui = restore & (1<<0);
  2866.  
  2867. if ( vgui ) set_pdata_int( index, 510, restore & ~(1<<0) );
  2868.  
  2869. teammsg_block = get_msg_block( kMsg[MSG_SHOWMENU] );
  2870. teammsg_block_vgui = get_msg_block( kMsg[MSG_VGUI] );
  2871.  
  2872. set_msg_block( kMsg[MSG_SHOWMENU], BLOCK_ONCE );
  2873. set_msg_block( kMsg[MSG_VGUI], BLOCK_ONCE );
  2874.  
  2875. engclient_cmd( index, "jointeam", "5" );
  2876. engclient_cmd( index, "joinclass", "5" );
  2877.  
  2878. set_msg_block( kMsg[MSG_SHOWMENU], teammsg_block);
  2879. set_msg_block( kMsg[MSG_VGUI], teammsg_block_vgui);
  2880.  
  2881. if (vgui) set_pdata_int( index, 510, restore );
  2882.  
  2883. kStatus[ index ] = LOGGUED;
  2884.  
  2885. set_task( 1.0, "ShowHUD", index + TASK_HUD, _, _, "b" );
  2886. }
  2887.  
  2888. public ShowHUD( taskid )
  2889. {
  2890. static index; index = ID_HUD;
  2891.  
  2892. if ( !is_user_alive(index) )
  2893. {
  2894. index = pev( index, pev_iuser2 );
  2895.  
  2896. if ( !flag_get(kBits[ALIVE],index)) return;
  2897. }
  2898.  
  2899.  
  2900. if( index != ID_HUD)
  2901. {
  2902. set_hudmessage(255, 0, 0, 0.60, 0.50, 0, 6.0, 1.1, 0.0, 0.0, -1);
  2903. ShowSyncHudMsg(index, hudSync, "%s^nClan: %s || Rank: %s",
  2904. kPlayerName[ index ], kClanName[index][0]?kClanName[index]:"Fara Clan", Ranks[kRange[index]][Rank_NAME] );
  2905. }
  2906. else
  2907. {
  2908. set_hudmessage(255, 0, 0, 0.0, 0.0, 0, 6.0, 1.1, 0.0, 0.0, -1);
  2909. ShowSyncHudMsg(index, hudSync, "Rank: %s^nClan: %s^nKilluri: %d / %d",
  2910. Ranks[ kRange[index] ][ Rank_NAME ], kClanName[ index ][0]?kClanName[ index ]:"Fara Clan", kDataRank[ index ][ KILLS ], Ranks[ kRange[index] ][ Rank_FRAGS ] );
  2911. }
  2912. }
  2913.  
  2914. UpdateRange( index )
  2915. {
  2916. static range; range = kRange[ index ];
  2917.  
  2918. while( kDataRank[ index ][ KILLS ] >=Ranks[ kRange[index] ][ Rank_FRAGS ])
  2919. ++kRange[ index ];
  2920.  
  2921. if(kRange[ index ] > range )
  2922. ColorChat(0,"!g[CS:GO Outstanding]Felicitari ai urcat in rang: !g%s", Ranks[ kRange[index] ][Rank_NAME]);
  2923. }
  2924.  
  2925. public get_membersnum( index )
  2926. {
  2927. if( !kClanName[ index ][ 0 ]) return 0;
  2928.  
  2929. static num, keyindex, keyname[32]; num = 0;
  2930.  
  2931. adv_vault_find_start( vault, kFields[ C_CLANNAME ], kClanName[ index ], FINDFLAGS_EQUAL );
  2932.  
  2933. while((keyindex = adv_vault_find_next( vault )))
  2934. {
  2935. adv_vault_get_keyname( vault, keyindex, keyname, 31 );
  2936. ++num;
  2937. }
  2938.  
  2939. adv_vault_find_closed( vault );
  2940.  
  2941. if(!num) return 0;
  2942.  
  2943. return num;
  2944. }
  2945.  
  2946. CreateClan( index )
  2947. {
  2948. if(!flag_get(kBits[CONNECTED],index) ) return;
  2949.  
  2950. kClanMembership[ index ] = CLAN_OWNER;
  2951.  
  2952. DataManagement( index, SAVE );
  2953.  
  2954. cmd_CLAN( index );
  2955. }
  2956.  
  2957. /* ColorChat */
  2958. stock ColorChat(const id,const input[], any:...) {
  2959. new iNum = 1, iPlayers[32];
  2960. static szMessage[191];
  2961. vformat(szMessage, charsmax(szMessage),input, 3);
  2962.  
  2963. replace_all(szMessage, charsmax(szMessage), "!g", "^4");
  2964. replace_all(szMessage, charsmax(szMessage), "!n", "^1");
  2965. replace_all(szMessage, charsmax(szMessage), "!t", "^3");
  2966.  
  2967. if(id) iPlayers[0] = id;
  2968. else get_players(iPlayers, iNum, "ch");
  2969.  
  2970. for(new i = 0; i < iNum; i++)
  2971. {
  2972. if(is_user_connected(iPlayers[i]))
  2973. {
  2974. message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, iPlayers[i]);
  2975. write_byte(iPlayers[i]);
  2976. write_string(szMessage);
  2977. message_end();
  2978. }
  2979. }
  2980. }
  2981.  
  2982. // Get Weapon Entity's Owner
  2983. stock fm_cs_get_weapon_ent_owner(ent)
  2984. {
  2985. // Prevent server crash if entity's private data not initalized
  2986. if (pev_valid(ent) != 2) return -1;
  2987.  
  2988. return get_pdata_cbase(ent, 41, 4);
  2989. }
  2990. stock user_have_skins(id) {
  2991. new ok = 0;
  2992. for (new i; i < skinsNum; i++) {
  2993. if (g_iPlayerSkins[id][i] > 0) {
  2994. ok = 1;
  2995. }
  2996. }
  2997. return ok;
  2998. }
  2999.  
  3000. stock fm_cs_get_user_team ( id )
  3001. {
  3002. return get_pdata_int ( id, 114, 5 );
  3003. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement