SHARE
TWEET

Untitled

Mr-Co0L Apr 25th, 2019 79 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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.02, 0.90, 0, 6.00, 1.10, 0.00, 0.00, -1);
  2903.         ShowSyncHudMsg(index, hudSync, "%s - Clan: %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.02, 0.90, 0, 6.00, 1.10, 0.00, 0.00, -1);
  2909.         ShowSyncHudMsg(index, hudSync, "Rank: %s - Clan: %s - Killuri: %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. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top