[CS: Source] Легкий Anti Team kill

Тема в разделе "Новые плагины", создана пользователем Черная вдова, 4 мар 2014.

  1. Черная вдова

    Черная вдова

    Сообщения:
    1.621
    Симпатии:
    234
    Вот попытался реализовать более легкую версию anti team kill
    Уложился в достаточно небольшое количество строк
    Функции:

    1)Система очков
    a)За попадание по напарнику +1 очко
    b)За попадание по напарнику в начале раунда(первые 10 сек) +9 очков + смерть
    c)За убийство напарника + 9 очков

    2)Очки не даются если урон меньше 3 hp

    3)При убийстве напарника, ему открывается окно с выбором (убить/простить)
    a)В случае прощения убийце прощаются 3 очка

    4)Система сохранения очков при входе/выходе

    5)Система прощения очков за некоторое сыгранное время

    5)При попадании наноситься зеркальный урон равный нанесенному
    a)Если урон превысил здоровье, то убьет

    6)Система Бана по SB если игрок набрал 20 и более очков
    a)Если игрок вышел не получив наказание (Убил кого то и сразу вышел), то его забанит

    7)Если игрок имеет флаг A, то для него лимит в 2 раза больше, зеркальный урон с 20 очков и бан с 40

    Плагин еще толком не протестирован, буду благодарен за нахождение ошибок.
    Версия 1.1: Приняты поправки 1,4,5 от R1ko
     

    Вложения:

    Последнее редактирование: 30 мар 2014
    nesterov86 и KapaT нравится это.
  2. Danyas

    Danyas Спасибо, браток © yand3xmail Модератор

    Сообщения:
    1.730
    Симпатии:
    461
  3. KapaT

    KapaT Эгоист

    Сообщения:
    1.983
    Симпатии:
    408
    Только отечественного производства
     
  4. Черная вдова

    Черная вдова

    Сообщения:
    1.621
    Симпатии:
    234
    я тот плагин не смотрел, но брал некоторый(ые) за основу и указал их в авторах
    тем более тот плагин 40 кб а мой 6.6, но без кваров и переводов, вобщем для себя писал сначала
     
  5. R1KO

    R1KO Супер-модератор

    Сообщения:
    6.005
    Симпатии:
    2.994
    1.
    PHP:
    if(GetUserFlagBits(client) & ADMFLAG_RESERVATION || GetUserFlagBits(client) & ADMFLAG_ROOT)
    Лучше 1 раз получи флаги, запиши в переменную и тогда сравнивай.

    PHP:
    new iFlags GetUserFlagBits(client);
    if(
    iFlags ADMFLAG_RESERVATION || iFlags ADMFLAG_ROOT)
    2.
    PHP:
    #include <sourcebans>
    SBBanPlayer(0client20"Убийство товарищей по команде");
    Без СБ плагин не будет работать. Лучше сделать так:
    PHP:
    ServerCommand("sm_ban #%i 20 \"Убийство товарищей по команде\""GetClientUserId(client));
    Будет банить всегда, а если сб - бан будет в него заноситься.

    3.
    PHP:
    #include <colors>
    CPrintToChatAllEx(attacker"[SM]{teamcolor} %N {default}был убит за атаку товарища по команде на спавне"attacker);
    Вообще молчу. Зачем инкудить библиотеку если и без неё это можно сделать. Тем более вывода в phases нет.
    4.
    PHP:
    DrawPanelItem(menu"Не жмите просто так 1,"ITEMDRAW_DISABLED);
    DrawPanelItem(menu"подумайте стоит ли убивать или прощать игрока,"ITEMDRAW_DISABLED);
    DrawPanelItem(menu"сделавшего это убийство"ITEMDRAW_DISABLED);    
    А не лучше ли сделать так:
    PHP:
    DrawPanelText(menu"Не жмите просто так 1,");
    DrawPanelText(menu"подумайте стоит ли убивать или прощать игрока,");
    DrawPanelText(menu"сделавшего это убийство");    
    Но тогда в Select_Panel будет:
    PHP:
    if(option == 0)
    {
        
    CPrintToChatAllEx(client"[SM]{teamcolor} %N {default}Убил {teamcolor}%N {default}за тимкилл"client cankill[client]);
        
    ForcePlayerSuicide(cankill[client]);
    }
    else if(
    option == 1)
    {
        
    CPrintToChatAllEx(client"[SM]{teamcolor} %N {default}Простил {teamcolor}%N {default}за тимкилл"client cankill[client]);
        
    teamattack[cankill[client]] = teamattack[cankill[client]] - 3;
        if(
    teamattack[cankill[client]] < 0teamattack[cankill[client]] = 0;
    }
    5.
    PHP:
    SendPanelToClient(menuvictimSelect_Panel10);
    После этого закрой Handle панели.
     
    Черная вдова нравится это.
  6. Черная вдова

    Черная вдова

    Сообщения:
    1.621
    Симпатии:
    234
    прям как sourcemod plugin approver, завтра подправим
     
  7. Черная вдова

    Черная вдова

    Сообщения:
    1.621
    Симпатии:
    234
    На счет 4 не очень понял, можно поподробнее
     
  8. R1KO

    R1KO Супер-модератор

    Сообщения:
    6.005
    Симпатии:
    2.994
    Черная вдова, Смотри.
    PHP:
    DrawPanelItem(menu"Не жмите просто так 1,"ITEMDRAW_DISABLED);
    Добавляет пункт, но его нельзя выбрать.
    Тоесть как param он будет.


    PHP:
    DrawPanelText(menu"Не жмите просто так 1,");
    Добавляет текст, по сути тот же пункт, но он не будет учитываться в param.


    Тоесть выходит так:
    PHP:
    DrawPanelItem(menu"Пункт 1"ITEMDRAW_DISABLED);
    DrawPanelItem(menu"Пункт 2"ITEMDRAW_DISABLED);
    DrawPanelItem(menu"Пункт 3");
    DrawPanelItem(menu"Пункт 4"ITEMDRAW_DISABLED);
    В обратном вызове param может быть только = 2 (пункт 3 но номерация с 0)
    Ты сможешь выбрать только "Пункт 3".


    В другом случае:
    PHP:
    DrawPanelText(menu"Пункт 1");
    DrawPanelText(menu"Пункт 2");
    DrawPanelItem(menu"Пункт 3");
    DrawPanelText(menu"Пункт 4");
    В обратном вызове param может быть только = 0 (пункт 3 но пунктов у нас 1, а остальное тескт.)
    Ты сможешь выбрать только "Пункт 3".
     
    Черная вдова нравится это.
  9. Черная вдова

    Черная вдова

    Сообщения:
    1.621
    Симпатии:
    234
    а насчет закрытия, я утечку получается сделал? И закрыть надо сразу после строки отправки?
     
  10. R1KO

    R1KO Супер-модератор

    Сообщения:
    6.005
    Симпатии:
    2.994
    Черная вдова, да
     
    Черная вдова нравится это.
  11. nesterov86

    nesterov86

    Сообщения:
    55
    Симпатии:
    8
  12. Черная вдова

    Черная вдова

    Сообщения:
    1.621
    Симпатии:
    234
    nesterov86, о cs go ничего не известно
     
  13. nesterov86

    nesterov86

    Сообщения:
    55
    Симпатии:
    8
    Черная вдова, вечером поставлю -отпишусь)