Guest User

Untitled

a guest
May 2nd, 2019
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 41.05 KB | None | 0 0
  1. #include < amxmodx >
  2. #include < amxmisc >
  3. #include < hamsandwich >
  4. #include < fakemeta >
  5. #include < adv_vault >
  6. /* ====== START EDIT SECTION ====== */
  7.  
  8. // Aqui cambia "32" por la cantidad maxima de jugadores que pueden entrar a tu server
  9. #define MAXPLAYERS 32
  10.  
  11. #define CLANNAME_LENGHT 20
  12. #define CLAN_MAXMEMBERS 5
  13. #define CLAN_MINMEMBERS 2
  14. #define MENU_TITTLE_LENGHT 128
  15. #define PASSWORD_LENGHT 50
  16.  
  17. new const MENU_PREFIX[ ] = "\r[ \yCS:GO Outstanding \dCLAN \ySYSTEM \r]\w";
  18. new const CHAT_PREFIX[ ] = "!g[ CS:GO Outstanding CLAN SYSTEM ]!n";
  19.  
  20. /* ==== END EDIT SECTION ==== */
  21.  
  22. #define MP MAXPLAYERS+1
  23.  
  24. #define flag_get(%1,%2) (%1 & (1 << (%2 & 31)))
  25. #define flag_set(%1,%2) (%1 |= (1 << (%2 & 31)))
  26. #define flag_unset(%1,%2) (%1 &= ~(1 << (%2 & 31)))
  27.  
  28. #define TASK_HUD 1000
  29. #define ID_HUD ( taskid - TASK_HUD )
  30.  
  31. enum
  32. {
  33. C_MEMBERSHIP, C_CLANNAME, C_DATE, C_PASS, C_PNAME, C_KILLS, C_DEATHS, C_HS_KILLS, C_HS_DEATHS,
  34. C_KNIFE_KILLS, C_KNIFE_DEATHS, C_SUICIDES, C_SPAWNS, C_RANGE, C_CLAN_CHAT,
  35.  
  36. C_MAX
  37. }
  38.  
  39. enum { WITHOUT_CLAN = 0, CLAN_MEMBER, CLAN_BOSS, CLAN_OWNER, MAX_MEMBER_RANGES }
  40. enum { LOAD= 0, SAVE }
  41. enum _:RANGES { Rank_NAME[ 50 ], Rank_FRAGS }
  42. enum { NOT_REGISTERED = 0, REGISTERED, LOGGUED, MAX_STATUS }
  43. enum _:DATA_RANK { KILLS, DEATHS, HS_KILLS, HS_DEATHS, KNIFE_KILLS, KNIFE_DEATHS, SUICIDES, SPAWNS }
  44. enum _:BITS { CONNECTED, ALIVE, CAN_CHANGE_PW }
  45. enum _:MSGS { MSG_VGUI, MSG_SHOWMENU, MSG_SAYTEXT, MSG_TEAMINFO }
  46.  
  47. new const P_NAME[ ] = "CLAN SYSTEM";
  48. new const P_VERSION[ ] = "1.1b";
  49. new const P_AUTOR[ ] = "kikizon";
  50.  
  51. new kBits[BITS], kMsg[MSGS];
  52.  
  53. new kClanMembership[ MP ], kRange[ MP ], kActivatedClanChat[ MP ];
  54.  
  55. new kInvited[ MP ], kClanOwner[ MP ], kDataRank[ MP ][ DATA_RANK ];
  56.  
  57. new kClanName[ MP ][ CLANNAME_LENGHT ], kClanNameConfirmated[ MP ];
  58.  
  59. new kPlayerName[ MP ][ 32 ], kPname[ MP ][ 32 ];
  60.  
  61. new vault, kFields[ C_MAX ], kPassword[ MP ][ PASSWORD_LENGHT ], kPassword2[ MP ][ PASSWORD_LENGHT ], kDate[ MP ][ 32 ], kStatus[ MP ];
  62.  
  63. new hudSync;
  64.  
  65. new const Status[ MAX_STATUS ][ ] = { "Neinregistrat", "Inregistrat", "Logat" };
  66. new const MemberRange[ MAX_MEMBER_RANGES ][ ] = { "Fara Clan", "Membru", "Conducator", "Fondator" };
  67.  
  68. new const Ranks[][RANGES] =
  69. {
  70. { "Silver I",0 },
  71. { "Silver II", 300 },
  72. { "Silver III", 500 },
  73. { "Silver IV", 700 },
  74. { "Silver Elite", 800 },
  75. { "Silver Elite Master", 900 },
  76. { "Gold Nova I", 1000 },
  77. { "Gold Nova II", 1200 },
  78. { "Gold Nova III", 1300 },
  79. { "Gold Nova Master", 1400 },
  80. { "Master Guardian I",1500 },
  81. { "Master Guardian II", 1700 },
  82. { "Master Guardian Elite", 1800 },
  83. { "Distinguished Master Guardian", 1900 },
  84. { "Legendary Eagle", 2000 },
  85. { "Legendary Eagle Master", 2100 },
  86. { "Supreme Master First Class", 2200 },
  87. { "The Global Elite", 2500 }
  88. };
  89.  
  90.  
  91. /* ================ */
  92.  
  93. public plugin_init()
  94. {
  95. register_plugin( P_NAME, P_VERSION, P_AUTOR );
  96.  
  97. register_event("DeathMsg", "ev_DeathMsg", "a");
  98.  
  99. RegisterHam(Ham_Killed, "player", "ham_PlayerKilledPost", true );
  100. RegisterHam(Ham_Spawn, "player", "ham_PlayerSpawnPost", true );
  101.  
  102. register_forward( FM_ClientUserInfoChanged, "fm_ClientInfoChanged" );
  103.  
  104. register_clcmd( "say", "Block_Say" );
  105. register_clcmd( "say_team", "Block_TeamSay" );
  106. register_clcmd( "say /clan", "cmd_CLAN" );
  107. register_clcmd( "JOIN_CLAN_NAME", "JoinClanName" );
  108. register_clcmd( "JOIN_PASSWORD", "JoinPassword" );
  109.  
  110.  
  111. kMsg[MSG_VGUI] = get_user_msgid("VGUIMenu");
  112. kMsg[MSG_SHOWMENU] = get_user_msgid("ShowMenu");
  113. kMsg[MSG_SAYTEXT] = get_user_msgid("SayText");
  114. kMsg[MSG_TEAMINFO] = get_user_msgid("TeamInfo");
  115. register_message(kMsg[MSG_VGUI], "message_VGUImenu");
  116. register_message(kMsg[MSG_SHOWMENU], "message_VGUImenu");
  117.  
  118.  
  119. hudSync = CreateHudSyncObj();
  120.  
  121.  
  122. vault = adv_vault_open( "CLAN_SYSTEM", true );
  123.  
  124. kFields[ C_MEMBERSHIP ] = adv_vault_register_field( vault, "MEMBRESIA");
  125. kFields[ C_CLANNAME ] = adv_vault_register_field( vault, "NOMBRE DE CLAN", DATATYPE_STRING, CLANNAME_LENGHT-1 );
  126. kFields[ C_DATE ] = adv_vault_register_field( vault, "FECHA", DATATYPE_STRING, 32 );
  127. kFields[ C_PASS ] = adv_vault_register_field( vault, "PASSWORD", DATATYPE_STRING, PASSWORD_LENGHT-1 );
  128. kFields[ C_PNAME ] = adv_vault_register_field( vault, "NOMBRE", DATATYPE_STRING, 31 );
  129. kFields[ C_KILLS ] = adv_vault_register_field( vault, "KILLS" );
  130. kFields[ C_DEATHS ] = adv_vault_register_field( vault, "DEATHS" );
  131. kFields[ C_HS_KILLS ] = adv_vault_register_field( vault, "HS KILLS" );
  132. kFields[ C_HS_DEATHS ] = adv_vault_register_field( vault, "HS DEATHS" );
  133. kFields[ C_KNIFE_KILLS ] = adv_vault_register_field( vault, "KNIFE KILLS" );
  134. kFields[ C_KNIFE_DEATHS ] = adv_vault_register_field( vault, "KNIFE DEATHS" );
  135. kFields[ C_SUICIDES ] = adv_vault_register_field( vault, "SUICIDES" );
  136. kFields[ C_SPAWNS ] = adv_vault_register_field( vault, "RESPAWNS" );
  137. kFields[ C_RANGE ] = adv_vault_register_field( vault, "Rank" );
  138. kFields[ C_CLAN_CHAT ] = adv_vault_register_field( vault, "CLANCHAT" );
  139.  
  140. adv_vault_init( vault );
  141. }
  142.  
  143. public client_putinserver( index )
  144. {
  145. flag_set(kBits[CONNECTED], index);
  146. get_user_name( index, kPlayerName[ index ], 31 );
  147. get_time( "%c", kDate[ index ], 31);
  148.  
  149. kClanMembership[ index ] = WITHOUT_CLAN;
  150. kClanName[ index ] = "^0";
  151. kPassword[ index ] = "^0";
  152. kClanNameConfirmated[ index ] = false;
  153. kRange[ index ] = 0;
  154. kActivatedClanChat[ index ] = false;
  155.  
  156. DataManagement( index, LOAD );
  157. }
  158.  
  159. public client_disconnect( index )
  160. {
  161. remove_task( index+TASK_HUD );
  162. DataManagement( index, SAVE );
  163.  
  164. flag_unset(kBits[CONNECTED], index);
  165. }
  166.  
  167. public Block_Say(index)
  168. {
  169. static said[191];
  170. read_args(said, charsmax(said));
  171. szRemove_Quotes(said, said);
  172. replace_all(said, charsmax(said), "%", "");
  173. replace_all(said, charsmax(said), "#", "");
  174.  
  175. if (!ValidMessage(said, 1)) return PLUGIN_CONTINUE;
  176.  
  177. static color[11], prefix[111], range[64];
  178. get_user_team(index, color, charsmax(color));
  179.  
  180. formatex(range, charsmax(range), "^x03(^x04 %s^x01 |^x04 %s ^x03)", Ranks[kRange[index]][Rank_NAME], kClanName[ index ][ 0 ] ? kClanName[ index ] : "Fara Clan" );
  181. formatex(prefix, charsmax(prefix), "%s%s^x03 %s", flag_get(kBits[ALIVE],index)?"^x01":"^x01*Mort* ", range, kPlayerName[index]);
  182.  
  183. if (is_user_admin(index)) format(said, charsmax(said), "^x04%s", said);
  184.  
  185. format(said, charsmax(said), "%s^x01 : %s", prefix, said);
  186.  
  187. static i, team[11];
  188.  
  189. for (i = 1; i <= MAXPLAYERS; ++i)
  190. {
  191. if (!flag_get(kBits[CONNECTED],i)) continue;
  192.  
  193. 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))
  194. {
  195. get_user_team(i, team, charsmax(team));
  196. changeTeamInfo(i, color);
  197. writeMessage(i, said);
  198. changeTeamInfo(i, team);
  199. }
  200. }
  201.  
  202. return PLUGIN_HANDLED_MAIN;
  203. }
  204.  
  205.  
  206. public Block_TeamSay(index)
  207. {
  208. static said[191];
  209. read_args(said, 190);
  210. szRemove_Quotes( said, said );
  211. replace_all(said, 190, "%", "");
  212. replace_all(said, 190, "#", "");
  213.  
  214. if(kActivatedClanChat[ index ] )
  215. {
  216. if(!ValidMessage(said, 1) || kClanMembership[ index ] == WITHOUT_CLAN)
  217. {
  218. ColorChat(0, "!gMesajul dvs. este inevalid sau nu sunteti intr-un clan");
  219. return PLUGIN_HANDLED;
  220. }
  221.  
  222. static i, team[11], color[11], range[128], prefix[111];
  223. get_user_team(index, color, charsmax(color));
  224.  
  225. formatex(range, charsmax(range), "^x03(^x01 PRIVATE CHAT:^x04 %s ^x03)", kClanName[ index ]);
  226. formatex(prefix, charsmax(prefix), "%s%s^x03 %s", flag_get(kBits[ALIVE],index)?"^x01":"^x01*Mort* ", range, kPlayerName[index]);
  227.  
  228. if (kClanMembership[ index ] == CLAN_OWNER || kClanMembership[ index ] == CLAN_BOSS) format(said, charsmax(said), "^x04%s", said);
  229.  
  230. format(said, charsmax(said), "%s^x01 : %s", prefix, said);
  231.  
  232. for (i = 1; i <= MAXPLAYERS; ++i)
  233. {
  234. if (!flag_get(kBits[CONNECTED],i)) continue;
  235.  
  236. if ( equal(kClanName[ index ], kClanName[ i ]) )
  237. {
  238. get_user_team(i, team, charsmax(team));
  239. changeTeamInfo(i, color);
  240. writeMessage(i, said);
  241. changeTeamInfo(i, team);
  242. }
  243. }
  244. }
  245. else
  246. {
  247. if (!ValidMessage(said, 1)) return PLUGIN_CONTINUE;
  248.  
  249. static playerTeam, playerTeamName[19];
  250. playerTeam = get_user_team(index);
  251.  
  252. switch (playerTeam)
  253. {
  254. case 1: copy (playerTeamName, 6, "^x03 * CT *");
  255. case 2: copy (playerTeamName, 8, "^x03 * TT *");
  256. default: copy (playerTeamName, 11, "* SPEC *");
  257. }
  258.  
  259. static color[11], prefix[111], range[128];
  260. get_user_team(index, color, charsmax(color));
  261.  
  262. formatex(range, charsmax(range), "^x03(^x04 %s^x01 |^x04 %s ^x03)", Ranks[kRange[index]][Rank_NAME], kClanName[ index ][ 0 ] ? kClanName[ index ] : "Fara Clan" );
  263. formatex(prefix, charsmax(prefix), "%s%s %s^x03 %s", flag_get(kBits[ALIVE],index)?"^x01":"^x01*Mort* ", playerTeamName, range, kPlayerName[index]);
  264.  
  265. if (is_user_admin(index)) format(said, charsmax(said), "^x04%s", said);
  266.  
  267. format(said, charsmax(said), "%s^x01 : %s", prefix, said);
  268.  
  269. static i, team[11];
  270. for (i = 1; i <= MAXPLAYERS; ++i)
  271. {
  272. if (!flag_get(kBits[CONNECTED],i)) continue;
  273.  
  274. if (get_user_team(i) == playerTeam)
  275. {
  276. if (flag_get(kBits[ALIVE],index) && flag_get(kBits[ALIVE],i) || !flag_get(kBits[ALIVE],index) && !flag_get(kBits[ALIVE],i))
  277. {
  278. get_user_team(i, team, charsmax(team));
  279. changeTeamInfo(i, color);
  280. writeMessage(i, said);
  281. changeTeamInfo(i, team);
  282. }
  283. }
  284. }
  285. }
  286.  
  287. return PLUGIN_HANDLED_MAIN;
  288. }
  289.  
  290. public ham_PlayerKilledPost( victim, attacker, shouldgib )
  291. {
  292. if( !is_user_connected( attacker ) || victim == attacker || !attacker )
  293. return;
  294.  
  295. if(get_user_weapon( attacker ) == CSW_KNIFE)
  296. {
  297. ++kDataRank[ attacker ][ KNIFE_KILLS ];
  298. ++kDataRank[ victim ][ KNIFE_DEATHS ];
  299. }
  300.  
  301. ++kDataRank[ attacker ][ KILLS ];
  302. ++kDataRank[ victim ][ DEATHS ];
  303.  
  304. flag_unset(kBits[ALIVE],victim);
  305.  
  306. UpdateRange( attacker );
  307. }
  308.  
  309. public ham_PlayerSpawnPost( index )
  310. {
  311. flag_set(kBits[ALIVE],index);
  312.  
  313. if( !flag_get(kBits[ALIVE], index)) return;
  314.  
  315. ++kDataRank[ index ][ SPAWNS ];
  316. }
  317.  
  318. public ev_DeathMsg()
  319. {
  320. static victim, attacker, headshot;
  321.  
  322. attacker = read_data(1);
  323. victim = read_data(2);
  324. headshot = read_data(3);
  325.  
  326. if( !attacker || victim == attacker )
  327. {
  328. ++kDataRank[ victim ][ SUICIDES ];
  329. return;
  330. }
  331.  
  332. if( headshot )
  333. {
  334. ++kDataRank[ attacker ][ HS_KILLS ];
  335. ++kDataRank[ victim ][ HS_DEATHS ];
  336. }
  337. }
  338.  
  339. /* ================ */
  340.  
  341. public cmd_CLAN( index )
  342. {
  343. if( kClanMembership[ index ] == WITHOUT_CLAN )
  344. {
  345. ShowMenuCreateClan( index );
  346. return PLUGIN_HANDLED;
  347. }
  348.  
  349. ShowMenuClan( index );
  350. return PLUGIN_HANDLED;
  351. }
  352.  
  353. public JoinClanName( index )
  354. {
  355. read_args(kClanName[ index ], CLANNAME_LENGHT-1);
  356. szRemove_Quotes(kClanName[ index ], kClanName[ index ]);
  357. trim(kClanName[ index ]);
  358.  
  359. if( kClanNameConfirmated[ index ])
  360. {
  361. ColorChat(0, "!gAi confirmat deja numele clanului");
  362. ShowMenuCreateClan( index );
  363. return;
  364. }
  365.  
  366. if( !kClanName[ index ][ 0 ])
  367. {
  368. ColorChat(0, "!g INTRODUCETI NUMELE CLANULUI ");
  369. client_cmd( index, "messagemode ^"JOIN_CLAN_NAME^"");
  370. return;
  371. }
  372.  
  373. static xd; xd = get_membersnum( index );
  374.  
  375. if( xd )
  376. {
  377. ColorChat(0, "!gAcest clan este folosit");
  378. kClanName[ index ] = "^0";
  379. ShowMenuCreateClan( index )
  380. return;
  381. }
  382.  
  383. ShowMenuConfirmateClanName( index );
  384. }
  385.  
  386. public JoinPassword( index )
  387. {
  388. read_args(kPassword[ index ], PASSWORD_LENGHT-1);
  389. szRemove_Quotes(kPassword[ index ], kPassword[ index ]);
  390. trim(kPassword[ index ]);
  391.  
  392. if( !kPassword[ index ][ 0 ] || containi( kPassword[ index ], " ") != -1 )
  393. {
  394. ColorChat(0, "!gEroare parola" );
  395. client_cmd( index, "messagemode ^"JOIN_PASSWORD^"");
  396. return;
  397. }
  398.  
  399. switch(kStatus[ index ])
  400. {
  401. case NOT_REGISTERED:
  402. {
  403. ColorChat(0, "!gConfirmati parola pentru a continua");
  404. copy(kPassword2[ index ], PASSWORD_LENGHT-1, kPassword[ index ]);
  405.  
  406. ShowMenuConfirmatePw( index );
  407. }
  408. case REGISTERED:
  409. {
  410. new buffer[PASSWORD_LENGHT];
  411. adv_vault_get_prepare( vault, _, kPassword[ index ]);
  412. adv_vault_get_field( vault, kFields[ C_PASS ], buffer, charsmax(buffer));
  413.  
  414. if(! equal(buffer, kPassword[ index ]))
  415. {
  416. ShowLogMenu( index );
  417. ColorChat(0, "!gParola incorecta" );
  418. return;
  419. }
  420.  
  421. ColorChat(0, "!gTe-ai conectat la contul tau");
  422. ForceJoinTeam( index );
  423. }
  424. case LOGGUED:
  425. {
  426. if(flag_get(kBits[CAN_CHANGE_PW], index))
  427. {
  428. ColorChat(0, "!gV-ati schimbat deja contorul pe aceasta harta");
  429. return;
  430. }
  431.  
  432. ColorChat(0, "!gConfirmati-va parola pentru a o schimba ..." );
  433. copy(kPassword2[ index ], PASSWORD_LENGHT-1, kPassword[ index ]);
  434. ShowMenuConfirmatePw( index );
  435. }
  436. }
  437. }
  438.  
  439. /*============================
  440. MENUS
  441. ============================*/
  442.  
  443. ShowMenuCreateClan( index )
  444. {
  445. static menu, tittle[MENU_TITTLE_LENGHT], members; members = get_membersnum( index );
  446. formatex( tittle, MENU_TITTLE_LENGHT-1, "%s CREAZA CLAN", MENU_PREFIX );
  447. menu = menu_create( tittle, "menu_create_hand" );
  448.  
  449. formatex( tittle, MENU_TITTLE_LENGHT-1, "Numele Clan: \d%s", kClanName[ index ] );
  450. menu_additem( menu, (!kClanName[ index ][ 0 ])?"Introduceti numele clanului":tittle, "1" );
  451.  
  452. formatex( tittle, MENU_TITTLE_LENGHT-1, "Adaugati membrii ... \d( \r%d \y/ \r%d \d)", members, CLAN_MAXMEMBERS);
  453. menu_additem( menu, (!kClanName[ index ][ 0 ])?"\dAdaugati membri":tittle, "2" );
  454.  
  455. menu_additem( menu, (members >= CLAN_MINMEMBERS )?"CREARE CLAN":"\dCREARE CLAN", "3" );
  456.  
  457. menu_display( index, menu );
  458. }
  459.  
  460. public menu_create_hand( index, menu, item )
  461. {
  462. switch( item )
  463. {
  464. case MENU_EXIT: { menu_destroy( menu ); return PLUGIN_HANDLED; }
  465.  
  466. case 0:
  467. {
  468. if(!kClanNameConfirmated[ index ] )
  469. {
  470. ColorChat(0, "!g INTRODUCETI NUMELE CLANULUI" );
  471. client_cmd( index, "messagemode ^"JOIN_CLAN_NAME^"" );
  472.  
  473. return PLUGIN_HANDLED;
  474. }
  475.  
  476. ColorChat(0, "!gAti confirmat deja numele clanului" );
  477. ShowMenuCreateClan( index );
  478. }
  479. case 1:
  480. {
  481. if(!kClanName[ index ][ 0 ])
  482. {
  483. ColorChat(0, "!gTrebuie sa creati numele clanului inainte");
  484. ShowMenuCreateClan( index );
  485. return PLUGIN_HANDLED;
  486. }
  487.  
  488. ShowInviteMenu( index );
  489. }
  490. case 2:
  491. {
  492. static members; members = get_membersnum( index );
  493.  
  494. if(members >= CLAN_MINMEMBERS )
  495. CreateClan( index );
  496. else
  497. ColorChat(0, "!gAi nevoie de cel putin %d membrii pentru a crea clan", CLAN_MINMEMBERS );
  498. }
  499. }
  500.  
  501. menu_destroy( menu );
  502. return PLUGIN_HANDLED;
  503. }
  504.  
  505. ShowMenuClan( index )
  506. {
  507. static menu, tittle[ MENU_TITTLE_LENGHT ], members; members = get_membersnum( index );
  508. formatex( tittle, MENU_TITTLE_LENGHT-1, "%s MENU CLAN: \r%s^n\wMembrii: \y%d \d/ \y%d",
  509. MENU_PREFIX, kClanName[ index ], members, CLAN_MAXMEMBERS );
  510. menu = menu_create( tittle, "menu_clan" );
  511.  
  512.  
  513. switch(kClanMembership[ index ])
  514. {
  515. case CLAN_OWNER:
  516. {
  517. menu_additem( menu, "Vedeti membrii", "1" );
  518. menu_additem( menu, "Scoateti membrii", "2" );
  519. menu_additem( menu, (members >= CLAN_MAXMEMBERS)?"\dInvita membrii":"Invita membrii", "3" );
  520. menu_additem( menu, "Editeaza Rankurile \d( Din Clan )^n", "4" );
  521.  
  522. formatex(tittle, MENU_TITTLE_LENGHT-1, "%s \wClan Chat \y( \dPrivate chat \d^"\rTEAM SAY\d^"\y)",
  523. kActivatedClanChat[ index ] ? "\rDesactiveaza":"\rActiveaza");
  524. menu_additem( menu, tittle, "5");
  525. }
  526. case CLAN_BOSS:
  527. {
  528. menu_additem( menu, "Vedeti membrii", "1" );
  529. menu_additem( menu, "Scoateti membrii", "2" );
  530. menu_additem( menu, (members >= CLAN_MAXMEMBERS)?"\dInvita membrii":"Invita membrii", "3" );
  531.  
  532. formatex(tittle, MENU_TITTLE_LENGHT-1, "%s \wClan Chat \y( \dPrivate chat \d^"\rTEAM SAY\d^"\y)",
  533. kActivatedClanChat[ index ] ? "Dezactiveaza":"Activeaza");
  534. menu_additem( menu, tittle, "4");
  535. }
  536. case CLAN_MEMBER:
  537. {
  538. menu_additem( menu, "Vedeti membrii^n", "1" );
  539.  
  540. formatex(tittle, MENU_TITTLE_LENGHT-1, "%s \wClan Chat \y( \dPrivate chat \d^"\rTEAM SAY\d^"\y)",
  541. kActivatedClanChat[ index ] ? "Dezactiveaza":"Activeaza");
  542. menu_additem( menu, tittle, "2");
  543. }
  544. }
  545.  
  546. menu_display( index, menu );
  547. }
  548.  
  549. public menu_clan( index, menu, item )
  550. {
  551. if( item == MENU_EXIT )
  552. {
  553. menu_destroy( menu );
  554. return PLUGIN_HANDLED;
  555. }
  556.  
  557. static members; members = get_membersnum( index );
  558. switch(kClanMembership[ index ])
  559. {
  560. case CLAN_OWNER:
  561. {
  562. switch( item )
  563. {
  564. case 0: ShowClanMembers( index );
  565. case 1: ShowKickMembersMenu( index );
  566. case 2:
  567. {
  568. if(members < CLAN_MAXMEMBERS)
  569. {
  570. ShowInviteMenu( index );
  571. return PLUGIN_HANDLED;
  572. }
  573.  
  574. ColorChat(0,"!gNumarul maxim de membri a fost deja atins");
  575. }
  576.  
  577. case 3: EditRangesMembers( index );
  578. case 4:
  579. {
  580. if(kActivatedClanChat[ index ])
  581. {
  582. kActivatedClanChat[ index ] = false;
  583. ShowMenuClan( index );
  584. return PLUGIN_HANDLED;
  585. }
  586.  
  587. kActivatedClanChat[ index ] = true;
  588. ShowMenuClan( index );
  589. }
  590. }
  591. }
  592. case CLAN_BOSS:
  593. {
  594. switch( item )
  595. {
  596. case 0: ShowClanMembers( index );
  597. case 1: ShowKickMembersMenu( index );
  598. case 2:
  599. {
  600. if(members < CLAN_MAXMEMBERS)
  601. {
  602. ShowInviteMenu( index );
  603. return PLUGIN_HANDLED;
  604. }
  605.  
  606. ColorChat(0,"!gNumarul maxim de membri a fost deja atins");
  607. }
  608. case 3:
  609. {
  610. if(kActivatedClanChat[ index ])
  611. {
  612. kActivatedClanChat[ index ] = false;
  613. ShowMenuClan( index );
  614. return PLUGIN_HANDLED;
  615. }
  616.  
  617. kActivatedClanChat[ index ] = true;
  618. ShowMenuClan( index );
  619. }
  620. }
  621. }
  622. case CLAN_MEMBER:
  623. {
  624. switch( item )
  625. {
  626. case 0: ShowClanMembers( index );
  627. case 1:
  628. {
  629. if(kActivatedClanChat[ index ])
  630. {
  631. kActivatedClanChat[ index ] = false;
  632. ShowMenuClan( index );
  633. return PLUGIN_HANDLED;
  634. }
  635.  
  636. kActivatedClanChat[ index ] = true;
  637. ShowMenuClan( index );
  638. }
  639. }
  640. }
  641. }
  642.  
  643. menu_destroy( menu );
  644. return PLUGIN_HANDLED;
  645. }
  646.  
  647. ShowInviteMenu( index )
  648. {
  649. static n, menu, pos[3], tittle[MENU_TITTLE_LENGHT];
  650. formatex( tittle, MENU_TITTLE_LENGHT-1, "%s Trimiteti invitatii pentru a se alatura clanului", MENU_PREFIX );
  651. menu = menu_create( tittle, "menu_invite_hand" );
  652.  
  653. for( n = 1; n <= MAXPLAYERS; ++n )
  654. {
  655. if( !flag_get(kBits[CONNECTED], n) ) continue;
  656.  
  657. if( kClanMembership[ n ] != WITHOUT_CLAN ) continue;
  658.  
  659. if( index == n ) continue;
  660.  
  661. num_to_str( n, pos, 2 );
  662.  
  663. menu_additem( menu, kPlayerName[ n ], pos );
  664. }
  665.  
  666. menu_display( index, menu );
  667. }
  668.  
  669. public menu_invite_hand( index, menu, item )
  670. {
  671. if( item == MENU_EXIT )
  672. {
  673. menu_destroy( menu );
  674. return PLUGIN_HANDLED;
  675. }
  676.  
  677. static iKey[ 6 ], iAccess, iCallback;
  678.  
  679. menu_item_getinfo( menu, item, iAccess, iKey, charsmax( iKey ), _, _, iCallback );
  680. kInvited[ index ] = str_to_num( iKey );
  681.  
  682. if( get_membersnum( index ) == CLAN_MAXMEMBERS )
  683. {
  684. ColorChat(0, "!g[CS:GO Outstanding] Ati atins numarul maxim de membri");
  685. menu_destroy( menu );
  686. return PLUGIN_HANDLED;
  687. }
  688.  
  689. ColorChat(0, "!g[CS:GO Outstanding] Ati invitat %s sa se alature clanului.", kPlayerName[ kInvited[index] ] );
  690. 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 ] );
  691.  
  692. kClanOwner[ kInvited[ index ] ] = index;
  693.  
  694. if(is_user_bot( kInvited[ index ] ) )
  695. {
  696. kClanMembership[ kInvited[ index ] ] = CLAN_MEMBER;
  697. copy(kClanName[ kInvited[index] ], CLANNAME_LENGHT-1, kClanName[ index ] );
  698. ColorChat(0, "!g[CS:GO Outstanding] %s a acceptat solicitarea dvs.", kPlayerName[ kInvited[index] ] );
  699.  
  700. DataManagement( kInvited[ index ], SAVE );
  701. cmd_CLAN( index );
  702. }
  703. else
  704. ShowMenuInvited( kInvited[ index ] , index );
  705.  
  706. menu_destroy( menu );
  707. return PLUGIN_HANDLED;
  708. }
  709.  
  710. ShowMenuInvited( invited, owner )
  711. {
  712. static menu, tittle[ MENU_TITTLE_LENGHT ];
  713. formatex( tittle, MENU_TITTLE_LENGHT-1, "%s \r%s \w?i-a trimis o invita?ie de a intra in clan: \y%s",
  714. MENU_PREFIX, kPlayerName[ owner ], kClanName[ owner ] );
  715.  
  716. menu = menu_create(tittle, "menu_invited_hand");
  717.  
  718. menu_additem( menu, "\yAcepta", "1");
  719.  
  720. menu_additem( menu, "\rRespinge", "2");
  721.  
  722. menu_setprop( menu, MPROP_EXIT, MEXIT_NEVER );
  723.  
  724. menu_display( invited, menu );
  725. }
  726.  
  727. public menu_invited_hand( index, menu, item )
  728. {
  729. switch (item)
  730. {
  731. case 0:
  732. {
  733. kClanMembership[ index ] = CLAN_MEMBER;
  734. copy(kClanName[ index ], CLANNAME_LENGHT-1, kClanName[ kClanOwner[index] ]);
  735. client_print( kClanOwner[ index ], print_chat, "[CS:GO Outstanding] %s a acceptat solicitarea dvs.", kPlayerName[ index ]);
  736.  
  737. cmd_CLAN( kClanOwner[ index ] );
  738. }
  739. case 1:
  740. {
  741. client_print( kClanOwner[ index ], print_chat, "[CS:GO Outstanding] %s a respins solicitarea dvs", kPlayerName[ index ]);
  742.  
  743. cmd_CLAN( kClanOwner[ index ] );
  744.  
  745. kClanMembership[ index ] = WITHOUT_CLAN;
  746. kClanOwner[ index ] = 0;
  747. kClanName[ index ] = "^0";
  748. }
  749.  
  750. case MENU_EXIT: { menu_destroy(menu); return PLUGIN_HANDLED; }
  751. }
  752.  
  753. menu_destroy(menu);
  754.  
  755. return PLUGIN_HANDLED;
  756. }
  757.  
  758. ShowMenuConfirmateClanName( index )
  759. {
  760. static menu, tittle[ MENU_TITTLE_LENGHT ];
  761. formatex( tittle, MENU_TITTLE_LENGHT-1, "%s Numele clanului va fi: \d%s", MENU_PREFIX, kClanName[ index ] );
  762. menu = menu_create( tittle, "menu_confirm_hand" );
  763.  
  764. menu_additem( menu, "Da, Continua", "1" );
  765. menu_additem( menu, "Nu, Vreau sa il rescriu", "2");
  766.  
  767. menu_setprop( menu, MPROP_EXIT, MEXIT_NEVER );
  768. menu_display( index, menu );
  769. }
  770.  
  771. public menu_confirm_hand( index, menu, item )
  772. {
  773. switch( item )
  774. {
  775. case MENU_EXIT: { menu_destroy(menu); return PLUGIN_HANDLED; }
  776.  
  777. case 0:
  778. {
  779. ColorChat(0, "!g[CS:GO Outstanding] Numele clanului a fost creat corect." );
  780. kClanNameConfirmated[ index ] = true;
  781. DataManagement( index, SAVE );
  782. ShowMenuCreateClan( index );
  783. }
  784. case 1:
  785. {
  786. ColorChat(0, "!g INTRODUCEtI NUMELE CLANULUI ");
  787. client_cmd( index, "messagemode ^"JOIN_CLAN_NAME^"");
  788. }
  789. }
  790.  
  791. menu_destroy( menu );
  792. return PLUGIN_HANDLED;
  793. }
  794.  
  795. ShowClanMembers( index )
  796. {
  797. static menu, keyindex, szkeyindex[5], item[128], item2[50], tittle[ MENU_TITTLE_LENGHT ];
  798. formatex( tittle, MENU_TITTLE_LENGHT-1, "%s Lista membrilor din clan: \d %s", MENU_PREFIX, kClanName[ index ]);
  799. menu = menu_create( tittle, "menu_members_hand");
  800.  
  801. adv_vault_find_start( vault, kFields[ C_CLANNAME ], kClanName[ index ], FINDFLAGS_EQUAL);
  802.  
  803. while((keyindex = adv_vault_find_next( vault )))
  804. {
  805. adv_vault_get_field( vault, kFields[ C_PNAME], item2, charsmax(item2) );
  806. num_to_str( keyindex, szkeyindex, charsmax(szkeyindex) );
  807. formatex( item, charsmax(item), "%s \d( \y %s \d)", item2, MemberRange[adv_vault_get_field(vault, kFields[C_MEMBERSHIP])] );
  808. menu_additem( menu, item, szkeyindex);
  809. }
  810.  
  811. adv_vault_find_closed( vault );
  812.  
  813. menu_display( index, menu );
  814. }
  815.  
  816. public menu_members_hand( index, menu, item )
  817. {
  818. if( item == MENU_EXIT)
  819. {
  820. cmd_CLAN( index );
  821. menu_destroy( menu );
  822. return PLUGIN_HANDLED;
  823. }
  824.  
  825. static iKey, szitem[5], keyindex;
  826. menu_item_getinfo( menu, item, iKey, szitem, charsmax(szitem), _, _, iKey );
  827. keyindex = str_to_num(szitem);
  828.  
  829. ShowMenuPlayerStats( index, keyindex );
  830.  
  831. menu_destroy( menu );
  832. return PLUGIN_HANDLED;
  833. }
  834.  
  835. ShowMenuPlayerStats( index, keyindex )
  836. {
  837. new name[32], tittle[ MENU_TITTLE_LENGHT ], menu
  838.  
  839. if(!adv_vault_get_prepare( vault, keyindex ))
  840. return;
  841.  
  842. adv_vault_get_field( vault, kFields[ C_PNAME ], name, 31 );
  843. formatex( tittle, MENU_TITTLE_LENGHT-1, "%s \wInformatii despre: \y%s \r", MENU_PREFIX, name );
  844.  
  845. menu = menu_create( tittle, "menu_playerstats_hand" );
  846.  
  847. formatex( tittle, MENU_TITTLE_LENGHT-1, "\wRank din clan: \y%s",
  848. MemberRange[ adv_vault_get_field( vault, kFields[ C_MEMBERSHIP]) ]);
  849. menu_additem( menu, tittle, "" );
  850.  
  851. formatex( tittle, MENU_TITTLE_LENGHT-1, "\wRank General: \y%s",
  852. Ranks[ adv_vault_get_field(vault, kFields[C_RANGE ]) ][ Rank_NAME ]);
  853. menu_additem( menu, tittle, "" );
  854.  
  855. formatex(tittle, MENU_TITTLE_LENGHT-1, "\wKills: \y%d", adv_vault_get_field( vault, kFields[ C_KILLS ]) );
  856. menu_additem( menu , tittle, "" );
  857.  
  858. formatex(tittle, MENU_TITTLE_LENGHT-1, "\wDeaths: \y%d", adv_vault_get_field( vault, kFields[ C_DEATHS ]) );
  859. menu_additem( menu, tittle, "" );
  860.  
  861. formatex(tittle, MENU_TITTLE_LENGHT-1, "\wHeadshot Kills: \y%d", adv_vault_get_field( vault, kFields[ C_HS_KILLS]) );
  862. menu_additem( menu, tittle, "");
  863.  
  864. formatex(tittle, MENU_TITTLE_LENGHT-1, "\wHeadshot Deaths: \y%d", adv_vault_get_field( vault, kFields[ C_HS_DEATHS]) );
  865. menu_additem( menu, tittle, "");
  866.  
  867. formatex(tittle, MENU_TITTLE_LENGHT-1, "\wKnife Kills: \y%d", adv_vault_get_field( vault, kFields[ C_KNIFE_KILLS ]) );
  868. menu_additem( menu, tittle, "");
  869.  
  870. formatex(tittle, MENU_TITTLE_LENGHT-1, "\wKnife Deaths: \y%d", adv_vault_get_field( vault, kFields[ C_KNIFE_DEATHS]) );
  871. menu_additem( menu, tittle, "");
  872.  
  873. formatex(tittle, MENU_TITTLE_LENGHT-1, "\wSuicides: \y%d", adv_vault_get_field( vault, kFields[ C_SUICIDES ]) );
  874. menu_additem( menu, tittle, "");
  875.  
  876. formatex(tittle, MENU_TITTLE_LENGHT-1, "\wRespawns: \y%d", adv_vault_get_field( vault, kFields[ C_SPAWNS ]) );
  877. menu_additem( menu, tittle, "");
  878.  
  879. menu_display( index, menu );
  880. }
  881.  
  882. public menu_playerstats_hand( index, menu, item )
  883. {
  884. if( item == MENU_EXIT )
  885. {
  886. menu_destroy( menu );
  887. return PLUGIN_HANDLED;
  888. }
  889.  
  890. if(item < 6)
  891. menu_display( index, menu, 0);
  892. else
  893. menu_display( index, menu, 1);
  894.  
  895. return PLUGIN_HANDLED;
  896. }
  897.  
  898. ShowKickMembersMenu( index )
  899. {
  900. static menu, keyindex, szkeyindex[5], item[128], tittle[ MENU_TITTLE_LENGHT ];
  901. formatex( tittle, MENU_TITTLE_LENGHT-1, "%s Scoateti Jucatorii Clanului: \d %s", MENU_PREFIX, kClanName[ index ]);
  902. menu = menu_create( tittle, "menu_kick_hand");
  903.  
  904. adv_vault_find_start( vault, kFields[ C_CLANNAME ], kClanName[ index ], FINDFLAGS_EQUAL);
  905.  
  906. while((keyindex = adv_vault_find_next( vault )))
  907. {
  908. adv_vault_get_field( vault, kFields[ C_PNAME ], item, charsmax(item) );
  909. num_to_str( keyindex, szkeyindex, charsmax(szkeyindex) );
  910. menu_additem( menu, item, szkeyindex);
  911. }
  912.  
  913. adv_vault_find_closed( vault );
  914.  
  915. menu_display( index, menu );
  916. }
  917.  
  918. public menu_kick_hand( index, menu, item )
  919. {
  920. if( item == MENU_EXIT)
  921. {
  922. cmd_CLAN( index );
  923. menu_destroy( menu );
  924. return PLUGIN_HANDLED;
  925. }
  926.  
  927. static iKey, szitem[5], keyindex;
  928. menu_item_getinfo( menu, item, iKey, szitem, charsmax(szitem), _, _, iKey );
  929. keyindex = str_to_num(szitem);
  930.  
  931. if(!adv_vault_get_prepare( vault, keyindex ))
  932. return PLUGIN_HANDLED;
  933.  
  934. static level, name[32];
  935. adv_vault_get_field( vault, kFields[ C_PNAME ], name, 31);
  936. level = adv_vault_get_field( vault, kFields[ C_MEMBERSHIP]);
  937.  
  938. if(equal(name, kPlayerName[ index ]) )
  939. {
  940. ColorChat(0,"!gNu te pooi expedia singur");
  941. ShowMenuClan( index );
  942. return PLUGIN_HANDLED;
  943. }
  944.  
  945. if( level == CLAN_OWNER)
  946. {
  947. ColorChat(0,"!gNu puteti expedia fondatorul clanului");
  948. ShowMenuClan( index );
  949. return PLUGIN_HANDLED;
  950. }
  951.  
  952. adv_vault_set_start( vault )
  953. adv_vault_set_field( vault, kFields[ C_CLANNAME ], "^0");
  954. adv_vault_set_field( vault, kFields[ C_MEMBERSHIP ], WITHOUT_CLAN );
  955. adv_vault_set_field( vault, kFields[ C_CLAN_CHAT ], false);
  956. adv_vault_set_end( vault, _, name);
  957.  
  958. Color_Print(index, "Ai expulzat din Clan: %s", name );
  959. ShowMenuClan( index );
  960.  
  961. menu_destroy( menu );
  962. return PLUGIN_HANDLED;
  963. }
  964.  
  965. EditRangesMembers( index )
  966. {
  967. static menu, keyindex, szkeyindex[5], item[128], item2[50], tittle[ MENU_TITTLE_LENGHT ];
  968. formatex( tittle, MENU_TITTLE_LENGHT-1, "%s Clan Ranks Editor: \d %s", MENU_PREFIX, kClanName[ index ]);
  969. menu = menu_create( tittle, "menu_ranges_hand");
  970.  
  971. adv_vault_find_start( vault, kFields[ C_CLANNAME ], kClanName[ index ], FINDFLAGS_EQUAL);
  972.  
  973. while((keyindex = adv_vault_find_next( vault )))
  974. {
  975. adv_vault_get_field( vault, kFields[ C_PNAME], item2, charsmax(item2) );
  976. num_to_str( keyindex, szkeyindex, charsmax(szkeyindex) );
  977. formatex( item, charsmax(item), "%s \d( \y %s \d)", item2, MemberRange[adv_vault_get_field(vault, kFields[C_MEMBERSHIP])] );
  978. menu_additem( menu, item, szkeyindex);
  979. }
  980.  
  981. adv_vault_find_closed( vault );
  982.  
  983. menu_display( index, menu );
  984. }
  985.  
  986. public menu_ranges_hand( index, menu, item )
  987. {
  988. if( item == MENU_EXIT)
  989. {
  990. cmd_CLAN( index );
  991. menu_destroy( menu );
  992. return PLUGIN_HANDLED;
  993. }
  994.  
  995. static iKey, szitem[5], keyindex;
  996. menu_item_getinfo( menu, item, iKey, szitem, charsmax(szitem), _, _, iKey );
  997. keyindex = str_to_num(szitem);
  998.  
  999. if(!adv_vault_get_prepare( vault, keyindex ))
  1000. return PLUGIN_HANDLED;
  1001.  
  1002. static level, name[32];
  1003. adv_vault_get_field( vault, kFields[ C_PNAME ], name, 31);
  1004. level = adv_vault_get_field( vault, kFields[ C_MEMBERSHIP]);
  1005.  
  1006. if(equal(name, kPlayerName[ index ]) )
  1007. {
  1008. ColorChat(0,"!gNu poti schimba rangul, singur");
  1009. ShowMenuClan( index );
  1010. return PLUGIN_HANDLED;
  1011. }
  1012.  
  1013. if( level == CLAN_OWNER)
  1014. {
  1015. ColorChat(0,"!gNu puteti schimba Rank la fondatorul clanului");
  1016. ShowMenuClan( index );
  1017. return PLUGIN_HANDLED;
  1018. }
  1019.  
  1020. adv_vault_set_start( vault )
  1021.  
  1022. if( level == CLAN_MEMBER )
  1023. adv_vault_set_field( vault, kFields[ C_MEMBERSHIP ], CLAN_BOSS );
  1024. else if( level == CLAN_BOSS )
  1025. adv_vault_set_field( vault, kFields[ C_MEMBERSHIP ], CLAN_MEMBER );
  1026.  
  1027. adv_vault_set_end( vault, _, name);
  1028.  
  1029. Color_Print(index, "Ati schimbat rangul la: %s", name );
  1030. ShowMenuClan( index );
  1031.  
  1032. menu_destroy( menu );
  1033. return PLUGIN_HANDLED;
  1034. }
  1035.  
  1036. /* ACCOUNT SYSTEM */
  1037.  
  1038. ShowLogMenu( index)
  1039. {
  1040. static menu, tittle[MENU_TITTLE_LENGHT];
  1041. 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",
  1042. kPlayerName[ index ], Status[ kStatus[ index ] ], kDate[ index ] );
  1043.  
  1044. menu = menu_create( tittle, "menu_log_hand" );
  1045.  
  1046. menu_additem(menu, (kStatus[ index ] == REGISTERED ) ? "Conectati-va":"\dConectati-va", "1" );
  1047. menu_additem(menu, (kStatus[ index ] == NOT_REGISTERED ) ? "inregistrare^n":"\dinregistrare^n", "2" );
  1048. menu_additem(menu, (kStatus[ index ] == LOGGUED && !flag_get(kBits[CAN_CHANGE_PW],index)) ? "Schimbati parola":"\dSchimbati parola", "3" );
  1049.  
  1050. menu_setprop( menu, MPROP_EXIT, MEXIT_NEVER );
  1051.  
  1052. menu_display( index, menu );
  1053. }
  1054.  
  1055. public menu_log_hand( index, menu, item )
  1056. {
  1057. switch( item )
  1058. {
  1059. case 0:
  1060. {
  1061. if(kStatus[ index ] == REGISTERED)
  1062. {
  1063. ColorChat(0, "!gIntroduceti parola pentru a intra in cont" );
  1064. client_cmd( index,"messagemode ^"JOIN_PASSWORD^"" );
  1065. }
  1066. else
  1067. {
  1068. ColorChat(0, "!gNu puteti alege aceasta optiune");
  1069. ShowLogMenu( index );
  1070. return PLUGIN_HANDLED;
  1071. }
  1072. }
  1073. case 1:
  1074. {
  1075. if(kStatus[ index ] == NOT_REGISTERED )
  1076. {
  1077. ColorChat(0, "!gIntroduceti o parola pentru a crea un cont" );
  1078. client_cmd( index ,"messagemode ^"JOIN_PASSWORD^"" );
  1079. }
  1080. else
  1081. {
  1082. ColorChat(0, "!gNu puteti alege aceasta optiune" );
  1083. ShowLogMenu( index );
  1084. return PLUGIN_HANDLED;
  1085. }
  1086. }
  1087. case 2:
  1088. {
  1089. if(kStatus[ index ] == LOGGUED && !flag_get(kBits[CAN_CHANGE_PW],index))
  1090. {
  1091. ColorChat(0, "!gIntroduceti noua parola" );
  1092. client_cmd( index,"messagemode ^"JOIN_PASSWORD^"");
  1093. }
  1094. else
  1095. {
  1096. ColorChat(0, "!gNu sunteti conectat sau v-ati schimbat deja parola pe parcursul hartii" );
  1097. ShowLogMenu( index );
  1098. return PLUGIN_HANDLED;
  1099. }
  1100. }
  1101.  
  1102. case MENU_EXIT: { menu_destroy( menu ); return PLUGIN_HANDLED; }
  1103. }
  1104.  
  1105. menu_destroy( menu );
  1106. return PLUGIN_HANDLED;
  1107. }
  1108.  
  1109. ShowMenuConfirmatePw( index )
  1110. {
  1111. static menu, Tit[ MENU_TITTLE_LENGHT ];
  1112. formatex( Tit, MENU_TITTLE_LENGHT-1,"Parola va fii \r%s^n^n\yconfirmi??", kPassword2[ index ]);
  1113.  
  1114. menu = menu_create( Tit, "menu_confirmpw_hand" );
  1115.  
  1116. menu_additem( menu,"\rDa\w, Confirma","1" );
  1117. menu_additem( menu,"\rNu\w,Vreau sa o rescriu","2" );
  1118.  
  1119. menu_setprop( menu, MPROP_EXIT, MEXIT_NEVER );
  1120.  
  1121. menu_display( index, menu );
  1122. }
  1123.  
  1124. public menu_confirmpw_hand( index, menu, item )
  1125. {
  1126. switch(item)
  1127. {
  1128. case 0:
  1129. {
  1130. if( kStatus[ index ] == LOGGUED )
  1131. {
  1132. copy(kPassword[ index ], PASSWORD_LENGHT-1, kPassword2[ index ]);
  1133. DataManagement( index, SAVE );
  1134. ColorChat(0, "!gParola dvs. a fost modificata cu succes");
  1135. flag_set(kBits[CAN_CHANGE_PW], index);
  1136. }
  1137. else
  1138. {
  1139. copy(kPassword[ index ], PASSWORD_LENGHT-1, kPassword2[ index ]);
  1140. ColorChat(0, "!gContul dvs. a fost creat cu succes" );
  1141. DataManagement( index, SAVE );
  1142. ForceJoinTeam( index );
  1143. }
  1144. }
  1145. case 1:
  1146. {
  1147. menu_destroy(menu);
  1148.  
  1149. client_cmd( index, "messagemode ^"JOIN_PASSWORD^"" );
  1150.  
  1151. if( kStatus[ index ] == LOGGUED )
  1152. ColorChat(0, "!gIntroduceti noua Parola" );
  1153. else
  1154. ColorChat(0, "!gIntroduceti Parola pentru contul dvs. nou" );
  1155. }
  1156.  
  1157. case MENU_EXIT: { menu_destroy( menu ); return PLUGIN_HANDLED; }
  1158. }
  1159.  
  1160. menu_destroy( menu );
  1161. return PLUGIN_HANDLED;
  1162. }
  1163.  
  1164. /*============================
  1165. STOCKS
  1166. ============================*/
  1167.  
  1168. stock szRemove_Quotes( const szStr[ ], szOut[ ] )
  1169. {
  1170. if ( !szStr[ 1 ] )
  1171. {
  1172. szOut[ 0 ] = EOS;
  1173. return 0;
  1174. }
  1175.  
  1176. copy( szOut, strlen( szStr )-2, szStr[ 1 ] );
  1177. trim( szOut );
  1178.  
  1179. static iLen, i;
  1180. iLen = strlen( szOut );
  1181.  
  1182. for ( i = 0; i < iLen; ++i)
  1183. {
  1184. if (szOut[ i ] == '"')
  1185. return 0;
  1186. }
  1187.  
  1188. return iLen;
  1189. }
  1190.  
  1191. stock ValidMessage(text[], maxcount)
  1192. {
  1193. static len, i, count;
  1194. len = strlen(text);
  1195. count = 0;
  1196.  
  1197. if (!len) return false;
  1198.  
  1199. for (i = 0; i < len; ++i)
  1200. {
  1201. if (text[i] != ' ')
  1202. {
  1203. ++count;
  1204.  
  1205. if (count >= maxcount)
  1206. return true;
  1207. }
  1208. }
  1209.  
  1210. return false;
  1211. }
  1212.  
  1213. public changeTeamInfo(player, team[])
  1214. {
  1215. message_begin(MSG_ONE, kMsg[MSG_TEAMINFO], _, player);
  1216. write_byte(player);
  1217. write_string(team);
  1218. message_end();
  1219. }
  1220.  
  1221. public writeMessage(player, message[])
  1222. {
  1223. message_begin(MSG_ONE, kMsg[MSG_SAYTEXT], {0, 0, 0}, player);
  1224. write_byte(player);
  1225. write_string(message);
  1226. message_end();
  1227. }
  1228.  
  1229. stock Color_Print(const id, const input[], any:...)
  1230. {
  1231. new count = 1, players[32];
  1232. static msg[191], len;
  1233.  
  1234. len = formatex(msg, charsmax(msg), "%s ", CHAT_PREFIX);
  1235. vformat(msg[len], 190 - len, input, 3);
  1236.  
  1237. replace_all(msg, 190, "!g", "^4");
  1238. replace_all(msg, 190, "!n", "^1");
  1239. replace_all(msg, 190, "!t", "^3");
  1240.  
  1241.  
  1242. if(id)
  1243. players[0] = id;
  1244. else
  1245. get_players(players, count, "ch");
  1246.  
  1247. for (new i = 0; i < count; ++i)
  1248. {
  1249. if(flag_get(kBits[CONNECTED], players[i]))
  1250. {
  1251. message_begin(MSG_ONE_UNRELIABLE, kMsg[MSG_SAYTEXT], _, players[i]);
  1252. write_byte(players[i]);
  1253. write_string(msg);
  1254. message_end();
  1255. }
  1256. }
  1257.  
  1258. }
  1259.  
  1260. public message_VGUImenu( msgid, dest, index )
  1261. {
  1262. if( kStatus[ index ] != LOGGUED )
  1263. ShowLogMenu( index );
  1264.  
  1265. return 1;
  1266. }
  1267.  
  1268. public DataManagement( index, type )
  1269. {
  1270. if( !flag_get(kBits[CONNECTED],index) ) return;
  1271.  
  1272. if(type == LOAD)
  1273. {
  1274. if( !adv_vault_get_prepare( vault, _, kPlayerName[ index ] ) )
  1275. {
  1276. kStatus[ index ] = NOT_REGISTERED;
  1277. return;
  1278. }
  1279. else
  1280. {
  1281. kStatus[ index ] = REGISTERED;
  1282.  
  1283. kClanMembership[ index ] = adv_vault_get_field( vault, kFields[ C_MEMBERSHIP ] );
  1284. adv_vault_get_field( vault, kFields[ C_CLANNAME ], kClanName[ index ], CLANNAME_LENGHT );
  1285. adv_vault_get_field( vault, kFields[ C_DATE ], kDate[ index ], 31);
  1286. adv_vault_get_field( vault, kFields[ C_PASS ], kPassword[ index ], PASSWORD_LENGHT-1);
  1287. adv_vault_get_field( vault, kFields[ C_PNAME ], kPname[ index ], 31 );
  1288. kDataRank[ index ][ KILLS ] = adv_vault_get_field( vault, kFields[ C_KILLS ] );
  1289. kDataRank[ index ][ DEATHS ] = adv_vault_get_field( vault, kFields[ C_DEATHS ] );
  1290. kDataRank[ index ][ HS_KILLS ] = adv_vault_get_field( vault, kFields[ C_HS_KILLS ] );
  1291. kDataRank[ index ][ HS_DEATHS ] = adv_vault_get_field( vault, kFields[C_HS_DEATHS ] );
  1292. kDataRank[ index ][ KNIFE_KILLS ] = adv_vault_get_field( vault, kFields[C_KNIFE_KILLS ] );
  1293. kDataRank[ index ][ KNIFE_DEATHS ] = adv_vault_get_field( vault, kFields[C_KNIFE_DEATHS ] );
  1294. kDataRank[ index ][ SUICIDES ] = adv_vault_get_field( vault, kFields[C_SUICIDES ] );
  1295. kDataRank[ index ][ SPAWNS ] = adv_vault_get_field( vault, kFields[C_SPAWNS ] );
  1296. kActivatedClanChat[ index ] = adv_vault_get_field( vault, kFields[ C_CLAN_CHAT ] );
  1297. }
  1298. }
  1299. else
  1300. {
  1301. copy(kPname[ index ], 31, kPlayerName[ index ]);
  1302. adv_vault_set_start( vault );
  1303.  
  1304. adv_vault_set_field( vault, kFields[ C_MEMBERSHIP ], kClanMembership[ index ] );
  1305. adv_vault_set_field( vault, kFields[ C_CLANNAME ], kClanName[ index ] );
  1306. adv_vault_set_field( vault, kFields[ C_DATE ], kDate[ index ]);
  1307. adv_vault_set_field( vault, kFields[ C_PASS ], kPassword[ index ]);
  1308. adv_vault_set_field( vault, kFields[ C_PNAME ], kPname[ index ]);
  1309. adv_vault_set_field( vault, kFields[ C_KILLS ], kDataRank[ index ][ KILLS ]);
  1310. adv_vault_set_field( vault, kFields[ C_DEATHS ], kDataRank[ index ][DEATHS]);
  1311. adv_vault_set_field( vault, kFields[ C_HS_KILLS ], kDataRank[ index ][ HS_KILLS ]);
  1312. adv_vault_set_field( vault, kFields[ C_HS_DEATHS ], kDataRank[ index ][ HS_DEATHS ]);
  1313. adv_vault_set_field( vault, kFields[ C_KNIFE_KILLS ], kDataRank[ index ][ KNIFE_KILLS ]);
  1314. adv_vault_set_field( vault, kFields[ C_KNIFE_DEATHS], kDataRank[ index ][ KNIFE_DEATHS ]);
  1315. adv_vault_set_field( vault, kFields[ C_SUICIDES], kDataRank[ index ][ SUICIDES ]);
  1316. adv_vault_set_field( vault, kFields[ C_SPAWNS ], kDataRank[ index ][ SPAWNS ]);
  1317. adv_vault_set_field( vault, kFields[ C_CLAN_CHAT ], kActivatedClanChat[ index ] );
  1318.  
  1319. adv_vault_set_end( vault, 0, kPlayerName[ index ] );
  1320. }
  1321. }
  1322.  
  1323. public fm_ClientInfoChanged( index, buffer )
  1324. {
  1325. if( flag_get(kBits[CONNECTED],index) )
  1326. {
  1327. if(kStatus[ index ] == LOGGUED)
  1328. {
  1329. static OldName[33];
  1330.  
  1331. engfunc(EngFunc_InfoKeyValue, buffer, "name", OldName, sizeof OldName - 1);
  1332.  
  1333. if(equal(OldName, kPlayerName[ index ]))
  1334. return FMRES_IGNORED;
  1335.  
  1336. set_user_info( index, "name", kPlayerName[ index ]);
  1337. client_cmd( index, "setinfo ^"name^" ^"%s^"", kPlayerName[ index ]);
  1338. }
  1339. }
  1340.  
  1341. return FMRES_IGNORED;
  1342. }
  1343.  
  1344. public ForceJoinTeam( index )
  1345. {
  1346. static teammsg_block, teammsg_block_vgui, restore, vgui;
  1347.  
  1348. restore = get_pdata_int( index, 510 );
  1349. vgui = restore & (1<<0);
  1350.  
  1351. if ( vgui ) set_pdata_int( index, 510, restore & ~(1<<0) );
  1352.  
  1353. teammsg_block = get_msg_block( kMsg[MSG_SHOWMENU] );
  1354. teammsg_block_vgui = get_msg_block( kMsg[MSG_VGUI] );
  1355.  
  1356. set_msg_block( kMsg[MSG_SHOWMENU], BLOCK_ONCE );
  1357. set_msg_block( kMsg[MSG_VGUI], BLOCK_ONCE );
  1358.  
  1359. engclient_cmd( index, "jointeam", "5" );
  1360. engclient_cmd( index, "joinclass", "5" );
  1361.  
  1362. set_msg_block( kMsg[MSG_SHOWMENU], teammsg_block);
  1363. set_msg_block( kMsg[MSG_VGUI], teammsg_block_vgui);
  1364.  
  1365. if (vgui) set_pdata_int( index, 510, restore );
  1366.  
  1367. kStatus[ index ] = LOGGUED;
  1368.  
  1369. set_task( 1.0, "ShowHUD", index + TASK_HUD, _, _, "b" );
  1370. }
  1371.  
  1372. public ShowHUD( taskid )
  1373. {
  1374. static index; index = ID_HUD;
  1375.  
  1376. if ( !is_user_alive(index) )
  1377. {
  1378. index = pev( index, pev_iuser2 );
  1379.  
  1380. if ( !flag_get(kBits[ALIVE],index)) return;
  1381. }
  1382.  
  1383.  
  1384. if( index != ID_HUD)
  1385. {
  1386. set_hudmessage(255, 200, 220, 0.60, 0.50, 0, 6.0, 1.1, 0.0, 0.0, -1);
  1387. ShowSyncHudMsg(index, hudSync, "%s^nClan: %s || Rank: %s",
  1388. kPlayerName[ index ], kClanName[index][0]?kClanName[index]:"Fara Clan", Ranks[kRange[index]][Rank_NAME] );
  1389. }
  1390. else
  1391. {
  1392. set_hudmessage(0, 255, 0, 0.0, 0.0, 0, 6.0, 1.1, 0.0, 0.0, -1);
  1393. ShowSyncHudMsg(index, hudSync, "Rank: %s^nClan: %s^nKilluri: %d / %d",
  1394. Ranks[ kRange[index] ][ Rank_NAME ], kClanName[ index ][0]?kClanName[ index ]:"Fara Clan", kDataRank[ index ][ KILLS ], Ranks[ kRange[index] ][ Rank_FRAGS ] );
  1395. }
  1396. }
  1397.  
  1398. UpdateRange( index )
  1399. {
  1400. static range; range = kRange[ index ];
  1401.  
  1402. while( kDataRank[ index ][ KILLS ] >=Ranks[ kRange[index] ][ Rank_FRAGS ])
  1403. ++kRange[ index ];
  1404.  
  1405. if(kRange[ index ] > range )
  1406. ColorChat(0,"!gFelicitari ai urcat in rang: !g%s", Ranks[ kRange[index] ][Rank_NAME]);
  1407. }
  1408.  
  1409. public get_membersnum( index )
  1410. {
  1411. if( !kClanName[ index ][ 0 ]) return 0;
  1412.  
  1413. static num, keyindex, keyname[32]; num = 0;
  1414.  
  1415. adv_vault_find_start( vault, kFields[ C_CLANNAME ], kClanName[ index ], FINDFLAGS_EQUAL );
  1416.  
  1417. while((keyindex = adv_vault_find_next( vault )))
  1418. {
  1419. adv_vault_get_keyname( vault, keyindex, keyname, 31 );
  1420. ++num;
  1421. }
  1422.  
  1423. adv_vault_find_closed( vault );
  1424.  
  1425. if(!num) return 0;
  1426.  
  1427. return num;
  1428. }
  1429.  
  1430. CreateClan( index )
  1431. {
  1432. if(!flag_get(kBits[CONNECTED],index) ) return;
  1433.  
  1434. kClanMembership[ index ] = CLAN_OWNER;
  1435.  
  1436. DataManagement( index, SAVE );
  1437.  
  1438. cmd_CLAN( index );
  1439. }
  1440. stock ColorChat(const id,const input[], any:...) {
  1441. new iNum = 1, iPlayers[32];
  1442. static szMessage[191];
  1443. vformat(szMessage, charsmax(szMessage),input, 3);
  1444.  
  1445. replace_all(szMessage, charsmax(szMessage), "!g", "^4");
  1446. replace_all(szMessage, charsmax(szMessage), "!n", "^1");
  1447. replace_all(szMessage, charsmax(szMessage), "!t", "^3");
  1448.  
  1449. if(id) iPlayers[0] = id;
  1450. else get_players(iPlayers, iNum, "ch");
  1451.  
  1452. for(new i = 0; i < iNum; i++)
  1453. {
  1454. if(is_user_connected(iPlayers[i]))
  1455. {
  1456. message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, iPlayers[i]);
  1457. write_byte(iPlayers[i]);
  1458. write_string(szMessage);
  1459. message_end();
  1460. }
  1461. }
  1462. }
Add Comment
Please, Sign In to add comment