Advertisement
Guest User

Untitled

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