1. Andrey777 Пользователь

    Регистрация:
    30.03.15
    Сообщения:
    259
    Симпатии:
    36
    Пол:
    Мужской
    Skype:
    Andrey777best
    Всем привет, нужен такой плагин думаю многим пригодится от задротов которые не выпускают авп из рук...
    Суть в том: ограничение awp всем игрокам, допустим не больше 2х раундов подряд с авп может играть или покупать, но потом чтобы дропнулось, и 2 раунда без авп с любым другим оружием чтобы нельзя было не купить не поднять итд.. и чтобы колор чат писало допустим вы сыграли 2 раунда подряд используйте любое другое оружие или как то так, желательно с cfg. для удобства настройки плагина...
    Естественоо карты awp, fy, aim не учитываются...
     
  2. neygomon Его Темнейшество :j Команда форума

    Регистрация:
    26.02.15
    Сообщения:
    7.543
    Симпатии:
    4.142
    Пол:
    Мужской
    Andrey777, а в cfg то что будет? о_О
     
  3. gudaus Команда форума

    Регистрация:
    27.02.15
    Сообщения:
    1.508
    Симпатии:
    1.102
    Пол:
    Мужской
    Странная идея. Вангую, что если после 2 раундов будет дропать авп из рук, игроки останутся недовольны. Разве что после смерти игрока с авп ему не будет давать купить.
    Не учитывать awp, fy, aim можно стандартными средствами amx.
    plugins-awp.ini, plugins-fy.ini, plugins-aim.ini.
     
    ozmosis нравится это.
  4. neygomon Его Темнейшество :j Команда форума

    Регистрация:
    26.02.15
    Сообщения:
    7.543
    Симпатии:
    4.142
    Пол:
    Мужской
    Gudaus, ну да, после смерти блочить лучше...
    более честно по сравнению с дропом
     
  5. Andrey777 Пользователь

    Регистрация:
    30.03.15
    Сообщения:
    259
    Симпатии:
    36
    Пол:
    Мужской
    Skype:
    Andrey777best
    Можно и так, после смерти заблочить на 2 раунда покупку...но нужно заблочить не только покупку а любую попытку его взять
    cfg можно и не делать хз зачем написал))
     
    Последнее редактирование: 29.04.15
  6. Andrey777 Пользователь

    Регистрация:
    30.03.15
    Сообщения:
    259
    Симпатии:
    36
    Пол:
    Мужской
    Skype:
    Andrey777best
    neygomon, Напиши плиз этот плагин)), а то за**** меня и игроков задроты с рук не выпускают)
     
  7. neygomon Его Темнейшество :j Команда форума

    Регистрация:
    26.02.15
    Сообщения:
    7.543
    Симпатии:
    4.142
    Пол:
    Мужской
    Andrey777, мне не до этого щас.
    я думаю как багу кое какую закрыть =)
     
  8. Andrey777 Пользователь

    Регистрация:
    30.03.15
    Сообщения:
    259
    Симпатии:
    36
    Пол:
    Мужской
    Skype:
    Andrey777best
    neygomon, Привет можешь помочь с плагином, написали мне тут плагин как я и хотел с ограничением авп, но вот почему то CT не могут использовать авп пишет что уже есть в команде хотя никто не брал и не может, ТТ нормально берут авп...
    Код (Unknown Language):
    1. #include <amxmodx>
    2. #include <fakemeta>
    3. #include <hamsandwich>
    4.  
    5. #if AMXX_VERSION_NUM < 183
    6.     #include <colorchat>
    7. #endif
    8.  
    9. new const VERSION[] = "1.0";
    10.  
    11. #define get_bit(%1,%2)   (%1 & (1 << (%2 & 31)))
    12. #define set_bit(%1,%2)   %1 |= (1 << (%2 & 31))
    13. #define clr_bit(%1,%2)   %1 &= ~(1 << (%2 & 31))
    14.  
    15. #define is_primary_weapon(%0) (PRIMARY_WEAPONS_BITSUM & (1 << %0))
    16. #define OFFSET_WEAPONID 43
    17. #define EXTRAOFFSET_WEAPONS 4
    18.  
    19. const PRIMARY_WEAPONS_BITSUM = (1 << CSW_SCOUT) | (1 << CSW_XM1014) | (1 << CSW_MAC10) | (1 << CSW_AUG) | (1 << CSW_UMP45) | (1 << CSW_SG550) | (1 << CSW_GALIL) | (1 << CSW_FAMAS) | (1 << CSW_AWP) | (1 << CSW_MP5NAVY) | (1 << CSW_M249) | (1 << CSW_M3) | (1 << CSW_M4A1) | (1 << CSW_TMP) | (1 << CSW_G3SG1) | (1 << CSW_SG552) | (1 << CSW_AK47) | (1 << CSW_P90) | (1 << 0);
    20. const MAX_CLIENTS = 32;
    21. const AUTH_LEN    = 34;
    22. const IP_LEN      = 16;
    23. const MSG_LEN     = 191;
    24. const POST        = 1;
    25. const PRE         = 0;
    26. const KEYS        = 511;
    27.  
    28. enum
    29. {
    30.     TEAM_UNASSIGNED = 0,
    31.     TEAM_TERRORIST  = 1,
    32.     TEAM_CT         = 2,
    33.     TEAM_SPECTATOR  = 3
    34. }
    35.  
    36. new user_team[MAX_CLIENTS + 1], ip[IP_LEN], authid[AUTH_LEN], pcv_awp_timelimit, pcv_awp_limit_by_team, awp_limit_by_team,
    37. need_block_awp[MAX_CLIENTS + 1], need_block_awp_by_time[MAX_CLIENTS + 1],
    38. Float: awp_use_time[MAX_CLIENTS + 1], Float: last_ctime[MAX_CLIENTS + 1], Float: awp_timelimit,
    39. awp_count_by_team[4], awp_access;
    40.  
    41. new const BLOCK_AUTHID[][] = {
    42.     "",
    43.     ""
    44. };
    45.  
    46. new const BLOCK_IP[][] = {
    47.     "",
    48.     ""
    49. };
    50.  
    51.  
    52. /*    Список карт на которых нужно отключить плагин
    53.     можно указывать название полностью или только префикс карты
    54. */
    55.  
    56. new const MAPLIST_DISABLED[][] = {
    57.     "aim_",
    58.     "awp_",
    59.     "fy_"
    60. };
    61.  
    62. /*    Список карт на которых нужна принудительная блокировка, несмотря на условия
    63.     можно указывать название полностью или только префикс карты
    64.  
    65. */
    66.  
    67. new const MAPLIST_FORCED[][] = {
    68.     "xxx_"
    69. };
    70.  
    71. stock const CHAT_INFO_PREFIX[]          = "^1[^4Лимит|18+|^1]^4";
    72. stock const AWP_RESTRICT_MSG[]          = "%s На этой карте запрещено пользоваться ^3AWP";
    73. stock const AWP_RESTRICT_PERSONAL_MSG[] = "%s ^3Вам ^4запрещено использовать ^3AWP. ^4Обратитесь к Администратору";
    74. stock const AWP_RESTRICT_BY_TIME_MSG[]  = "%s ^3Вы ^4сможете взять ^3AWP, ^4когда сыграете ^3%.0f сек. ^4с другим оружием!";
    75. stock const AWP_RESTRICT_BY_TEAM_MSG[]  = "%s В команде уже есть ^3%d ^4AWP";
    76.  
    77. stock const PLAYER[]                   = "player";
    78.  
    79. public plugin_init()
    80. {
    81.     register_plugin ("AWP Restrictions", VERSION, "Free");
    82.    
    83.     register_clcmd ("awp", "clcmd_awp");
    84.     register_clcmd ("magnum", "clcmd_awp");
    85.    
    86.     register_event ("TextMsg", "event_restart", "a", "2=#Game_will_restart_in");
    87.     register_menucmd (register_menuid("BuyRifle", 1), KEYS, "buy_rifle");
    88.  
    89.     register_message (get_user_msgid ("TeamInfo"), "msg_TeamInfo");
    90.    
    91.     register_srvcmd  ("amx_reloadcvars", "load_cvars");
    92. }
    93.  
    94. public plugin_cfg()
    95. {
    96.     load_cvars();
    97.    
    98.     new map_name[32];
    99.     get_mapname(map_name, charsmax(map_name));
    100.    
    101.     new i, j, need_pause_plugin, need_block_awp_forcibly;
    102.    
    103.     for (; i < sizeof MAPLIST_DISABLED && !need_pause_plugin; i++) {
    104.         while (MAPLIST_DISABLED[i][j] && map_name[j]) {
    105.             if (map_name[j] == MAPLIST_DISABLED[i][j]) {
    106.                 switch (MAPLIST_DISABLED[i][j + 1]) {
    107.                     case   0: {
    108.                         if (map_name[j + 1] == 0) {
    109.                             need_pause_plugin = 1;
    110.                             break;
    111.                         }
    112.                     }
    113.                     case '_': {
    114.                         if (!MAPLIST_DISABLED[i][j + 2]) {
    115.                             need_pause_plugin = 1;
    116.                             break;
    117.                         }
    118.                     }
    119.                 }
    120.             }
    121.             else {
    122.                 break;
    123.             }
    124.            
    125.             j++;
    126.         }
    127.     }
    128.    
    129.     if (need_pause_plugin) {
    130.         pause("ad");
    131.     }
    132.    
    133.     i = j = 0;
    134.    
    135.     for (; i < sizeof MAPLIST_FORCED && !need_block_awp_forcibly; i++) {
    136.         while (MAPLIST_FORCED[i][j] && map_name[j]) {
    137.             if (map_name[j] == MAPLIST_FORCED[i][j]) {
    138.                 switch (MAPLIST_FORCED[i][j + 1]) {
    139.                     case   0: {
    140.                         if (map_name[j + 1] == 0) {
    141.                             need_block_awp_forcibly = 1;
    142.                             break;
    143.                         }
    144.                     }
    145.                     case '_': {
    146.                         if (MAPLIST_FORCED[i][j + 2] == 0) {
    147.                             need_block_awp_forcibly = 1;
    148.                             break;
    149.                         }
    150.                     }
    151.                 }
    152.             }
    153.             else {
    154.                 break;
    155.             }
    156.            
    157.             j++;
    158.         }
    159.     }
    160.    
    161.     if (need_block_awp_forcibly) {
    162.         state block_awp_forcibly_enabled;
    163.         register_event ("CurWeapon", "event_CurWeapon", "be", "1=1", "2=18");
    164.     }
    165.     else {
    166.         state block_awp_forcibly_disabled;
    167.         register_event ("CurWeapon", "event_CurWeapon", "be", "1=1");
    168.        
    169.         if (awp_timelimit > 0.0) {
    170.             RegisterHam (Ham_Killed, PLAYER, "player_Killed_Post", POST);
    171.             RegisterHam (Ham_Spawn,  PLAYER, "player_Spawn_Post", POST);
    172.         }
    173.     }
    174.    
    175.     if (awp_limit_by_team) {
    176.         RegisterHam (Ham_AddPlayerItem, PLAYER, "AddPlayerItem", POST);
    177.         RegisterHam (Ham_RemovePlayerItem, PLAYER, "RemovePlayerItem", PRE);
    178.     }
    179.     else {
    180.         awp_access = -1;
    181.     }
    182. }
    183.  
    184. public load_cvars()
    185. {
    186.     static is_cvars_registered;
    187.    
    188.     log_amx((is_cvars_registered) ? "Cvars Reloaded" : "Cvars Loaded");
    189.    
    190.     if (!is_cvars_registered) {
    191.         pcv_awp_timelimit       = register_cvar ("awp_timelimit", "120");
    192.         pcv_awp_limit_by_team   = register_cvar ("awp_limit_by_team", ""); //кол-во AWP в команде
    193.        
    194.         is_cvars_registered = 1;
    195.     }
    196.    
    197.     server_exec();
    198.     awp_timelimit     = get_pcvar_float (pcv_awp_timelimit);
    199.     awp_limit_by_team = get_pcvar_num (pcv_awp_limit_by_team);
    200. }
    201.  
    202. public event_restart()
    203. {
    204.     #emit CONST.ALT need_block_awp
    205.     #emit ZERO.PRI
    206.     #emit FILL 132
    207.    
    208.     if (awp_timelimit > 0.0) {
    209.         #emit CONST.ALT need_block_awp_by_time
    210.         #emit ZERO.PRI
    211.         #emit FILL 132
    212.        
    213.         arrayset(_:awp_use_time, _:0.0, sizeof awp_use_time);
    214.     }
    215.    
    216.     if (awp_limit_by_team) {
    217.         #emit CONST.ALT awp_count_by_team
    218.         #emit ZERO.PRI
    219.         #emit FILL 16
    220.        
    221.         awp_access = 0;
    222.     }
    223. }
    224.  
    225. public client_putinserver(id) <block_awp_forcibly_enabled> {}
    226.  
    227. public client_putinserver(id) <block_awp_forcibly_disabled>
    228. {
    229.     need_block_awp[id] = need_block_awp_by_time[id] = 0;
    230.     awp_use_time[id] = 0.0;
    231.    
    232.     if (awp_limit_by_team) {
    233.         clr_bit(awp_access, id);
    234.     }
    235.    
    236.     get_user_ip(id, ip, charsmax(ip), 1)
    237.    
    238.     for(new i; i < sizeof BLOCK_IP; i++) {
    239.         if (equal(ip, BLOCK_IP[i]) ) {
    240.             need_block_awp[id] = 1;
    241.             break;
    242.         }
    243.     }
    244.    
    245.    
    246.     if (!need_block_awp[id]) {
    247.         get_user_authid(id, authid, charsmax(authid));
    248.        
    249.         for(new i; i < sizeof BLOCK_AUTHID; i++) {
    250.             if (equal(authid, BLOCK_AUTHID[i])) {
    251.                 need_block_awp[id] = 1;
    252.                 break;
    253.             }
    254.         }
    255.     }
    256. }
    257.  
    258. public clcmd_awp(id) <block_awp_forcibly_enabled>
    259. {
    260.     return PLUGIN_HANDLED;
    261. }
    262.  
    263. public clcmd_awp(id) <block_awp_forcibly_disabled>
    264. {
    265.     if (need_block_awp[id]) {
    266.         client_print_color (id, print_team_default, AWP_RESTRICT_PERSONAL_MSG, CHAT_INFO_PREFIX);
    267.         return PLUGIN_HANDLED;
    268.     }
    269.     else if (need_block_awp_by_time[id]) {
    270.         client_print_color (id, print_team_default, AWP_RESTRICT_BY_TIME_MSG, CHAT_INFO_PREFIX, awp_use_time[id]);
    271.         return PLUGIN_HANDLED;
    272.     }
    273.     else if (awp_count_by_team[user_team[id]] >= awp_limit_by_team && !get_bit(awp_access, id)) {
    274.         client_print_color (id, print_team_default, AWP_RESTRICT_BY_TEAM_MSG, CHAT_INFO_PREFIX, awp_limit_by_team);
    275.         return PLUGIN_HANDLED;
    276.     }
    277.    
    278.     return PLUGIN_CONTINUE;
    279. }
    280.  
    281. public buy_rifle(id, item) <block_awp_forcibly_disabled>
    282. {
    283.     static need_block, block_awp_msg[MSG_LEN];
    284.     need_block = 0;
    285.    
    286.     if (need_block_awp[id]) {
    287.         need_block = 1;
    288.         formatex (block_awp_msg, charsmax(block_awp_msg), AWP_RESTRICT_MSG, CHAT_INFO_PREFIX);
    289.     }
    290.     else if (need_block_awp_by_time[id]) {
    291.         need_block = 1;
    292.         formatex (block_awp_msg, charsmax(block_awp_msg), AWP_RESTRICT_BY_TIME_MSG, CHAT_INFO_PREFIX, awp_use_time[id]);
    293.     }
    294.     else if (awp_count_by_team[user_team[id]] >= awp_limit_by_team && !get_bit(awp_access, id)) {
    295.         need_block = 1;
    296.         formatex (block_awp_msg, charsmax(block_awp_msg), AWP_RESTRICT_BY_TEAM_MSG, CHAT_INFO_PREFIX, awp_limit_by_team);
    297.     }
    298.    
    299.     if (need_block) {
    300.         switch (user_team[id]) {
    301.             case TEAM_CT: {
    302.                 if (item == 5) {
    303.                     client_print_color (id, print_team_default, block_awp_msg);
    304.                     return PLUGIN_HANDLED;
    305.                 }
    306.             }
    307.             case TEAM_TERRORIST: {
    308.                 if (item == 4) {
    309.                     client_print_color (id, print_team_default, block_awp_msg);
    310.                     return PLUGIN_HANDLED;
    311.                 }
    312.             }
    313.         }
    314.     }
    315.    
    316.     return PLUGIN_CONTINUE;
    317. }
    318.  
    319.  
    320. public buy_rifle(id, item) <block_awp_forcibly_enabled>
    321. {
    322.     switch (user_team[id]) {
    323.         case TEAM_CT: {
    324.             if (item == 5) {
    325.                 client_print_color (id, print_team_default, AWP_RESTRICT_MSG, CHAT_INFO_PREFIX);
    326.                 return PLUGIN_HANDLED;
    327.             }
    328.         }
    329.         case TEAM_TERRORIST: {
    330.             if (item == 4) {
    331.                 client_print_color (id, print_team_default, AWP_RESTRICT_MSG, CHAT_INFO_PREFIX);
    332.                 return PLUGIN_HANDLED;
    333.             }
    334.         }
    335.     }
    336.    
    337.    
    338.     return PLUGIN_CONTINUE;
    339. }
    340.  
    341.  
    342. public event_CurWeapon(id) <block_awp_forcibly_enabled>
    343. {
    344.     engclient_cmd (id, "drop", "weapon_awp");
    345.     client_print_color (id, print_team_default, AWP_RESTRICT_MSG, CHAT_INFO_PREFIX);
    346. }
    347.  
    348.  
    349. public event_CurWeapon(id) <block_awp_forcibly_disabled>
    350. {
    351.     static csw_id, last_csw_id[MAX_CLIENTS + 1],
    352.     Float: ctime;
    353.    
    354.     csw_id = read_data(2);
    355.    
    356.     if (is_primary_weapon(csw_id)) {
    357.         ctime = get_gametime();
    358.        
    359.         if (csw_id == CSW_AWP) {
    360.             if (need_block_awp[id]) {
    361.                 engclient_cmd (id, "drop", "weapon_awp");
    362.                 client_print_color (id, print_team_default, AWP_RESTRICT_PERSONAL_MSG, CHAT_INFO_PREFIX);
    363.             }
    364.             else if (need_block_awp_by_time[id]) {
    365.                 engclient_cmd (id, "drop", "weapon_awp");
    366.                 client_print_color (id, print_team_default, AWP_RESTRICT_BY_TIME_MSG, CHAT_INFO_PREFIX, awp_use_time[id]);
    367.             }
    368.             else if (awp_count_by_team[user_team[id]] >= awp_limit_by_team && !get_bit(awp_access, id)) {
    369.                 engclient_cmd (id, "drop", "weapon_awp");
    370.                 client_print_color (id, print_team_default, AWP_RESTRICT_BY_TEAM_MSG, CHAT_INFO_PREFIX, awp_limit_by_team);
    371.             }
    372.             else if (last_csw_id[id] == CSW_AWP || !is_primary_weapon(last_csw_id[id])) {
    373.                 awp_use_time[id] += ctime - last_ctime[id];
    374.             }
    375.         }
    376.         else {
    377.             awp_use_time[id] -= ctime - last_ctime[id];
    378.            
    379.             if (awp_use_time[id] < 0.0) {
    380.                 awp_use_time[id] = 0.0;
    381.                 need_block_awp_by_time[id] = 0;
    382.             }
    383.         }
    384.     }
    385.    
    386.     last_ctime[id]  = ctime;
    387.     last_csw_id[id] = csw_id;
    388. }
    389.  
    390. public player_Spawn_Post(id)
    391. {
    392.     last_ctime[id]  = get_gametime();
    393. }
    394.  
    395. public player_Killed_Post(id, attacker, should_gib)
    396. {
    397.     if (awp_use_time[id] > awp_timelimit) {
    398.         awp_use_time[id] = awp_timelimit;
    399.         need_block_awp_by_time[id] = 1;
    400.         client_print_color (id, print_team_default, AWP_RESTRICT_BY_TIME_MSG, CHAT_INFO_PREFIX, awp_timelimit);
    401.     }
    402. }
    403.  
    404. public AddPlayerItem (id, entity)
    405. {
    406.     if (get_pdata_int (entity, OFFSET_WEAPONID, EXTRAOFFSET_WEAPONS) == CSW_AWP) {
    407.         static team; team = user_team[id];
    408.  
    409.         if (awp_count_by_team[team] < awp_limit_by_team) {
    410.             set_bit(awp_access, id);
    411.             ++awp_count_by_team[team];
    412.         }
    413.         else {
    414.             ++awp_count_by_team[team];
    415.         }
    416.     }
    417. }
    418.  
    419. public RemovePlayerItem (id, entity)
    420. {
    421.     if (get_pdata_int (entity, OFFSET_WEAPONID, EXTRAOFFSET_WEAPONS) == CSW_AWP) {
    422.         static team; team = user_team[id];
    423.  
    424.         if (awp_count_by_team[team] > 0) {
    425.             --awp_count_by_team[team];
    426.             clr_bit(awp_access, id);
    427.         }
    428.     }
    429. }
    430.  
    431. public msg_TeamInfo ()
    432. {
    433.     static id, team_name_tmp[11];
    434.     id = get_msg_arg_int(1);
    435.     get_msg_arg_string(2, team_name_tmp, charsmax(team_name_tmp));
    436.    
    437.     switch (team_name_tmp[0]) {
    438.         case 'T': {
    439.             if (awp_count_by_team[user_team[id]] && get_bit(awp_access, id)) {
    440.                 --awp_count_by_team[user_team[id]];
    441.                 user_team[id] = TEAM_TERRORIST;
    442.                 ++awp_count_by_team[user_team[id]];
    443.             }
    444.             else {
    445.                 user_team[id] = TEAM_TERRORIST;
    446.             }
    447.         }
    448.         case 'C': {
    449.             if (awp_count_by_team[user_team[id]] && get_bit(awp_access, id)) {
    450.                 --awp_count_by_team[user_team[id]];
    451.                 user_team[id] = TEAM_CT;
    452.                 ++awp_count_by_team[user_team[id]];
    453.             }
    454.             else {
    455.                 user_team[id] = TEAM_CT;
    456.             }
    457.         }
    458.         case 'S': user_team[id] = TEAM_SPECTATOR;
    459.         case 'U': user_team[id] = TEAM_UNASSIGNED;
    460.     }
    461. }
     
  9. neygomon Его Темнейшество :j Команда форума

    Регистрация:
    26.02.15
    Сообщения:
    7.543
    Симпатии:
    4.142
    Пол:
    Мужской
    Andrey777, потому что написали говно.
    есть 2 плагина лимитов у меня.
    чем не устраивают? -_-