Advertisement
Guest User

Untitled

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