Random Give Shield 2.0

Мод выдачи щитов в CS:GO

  1. FIVE

    FIVE Developer & Informer

    Сообщения:
    167
    Симпатии:
    124
    Пользователь FIVE разместил новый ресурс:

    Random Give Shield - Рандомно выдает игрокам щит

    Узнать больше об этом ресурсе...
     
    Lebios321256 нравится это.
  2. Grey83

    Grey83 похухоль

    Сообщения:
    2.448
    Симпатии:
    1.269
    секретный пароль для получения щита? Не проще ли использовать флаг доступа к команде или добавить квар для хранения секретного слова?
     
    R1KO нравится это.
  3. Faya™

    Faya™ Жуестер

    Сообщения:
    580
    Симпатии:
    242
    Разве так не проще?

    Команда sm_giveshield сделана для админов с флагом а
    Изменен квар sm_rgs_teamallow теперь его описание -1 - выключен, 2 - Только Т, 3 - Только КТ, 4 - Все
     

    Вложения:

  4. FIVE

    FIVE Developer & Informer

    Сообщения:
    167
    Симпатии:
    124
    Пользователь FIVE обновил ресурс Random Give Shield новой записью:

    Фикс ошибок

    Узнать больше об этом обновлении...
     
  5. Grey83

    Grey83 похухоль

    Сообщения:
    2.448
    Симпатии:
    1.269
    Почистил и немного оптимизировал код, добавил квар sm_rgs_key для возможности менять секретное слово без перекомпиляции (если оставить пустым, то щит с помощью команды сможет получить любой)

    @FIVE, по поводу имён кваров: обычно в плагинах имена капсом только для разных дефайнов (ну и я для констант юзаю).
    Для глобальных переменных перед её именем лучше указывать тип переменной:
    h - для хэндлов (Handle),
    b - для булевых (bool),
    i - для целых чисел (int),
    f - для чисел с плавающей запятой (float)
    s - для строковых (char и String, некоторые обозначают sz)
    Иногда ещё для глобальных переменных добавляют приставку g_ (когда ещё и локальным переменным указывают тип).
    Это позволяет не путаться в типах переменных в коде и несколько облегчает работу с кодом.

    Кстати, поменял значения квара sm_rgs_teamallow: 0 - выключен, 1 - Все, 2 - Только Т, 3 - Только КТ.
    Так запоминать удобнее какое значение за что отвечает (да и в коде обрабатывать значения удобнее)
    Поменял минимум у кваров sm_rgs_chance и sm_rgs_maxplayers с 0 до 1: не имеет смысла использовать значение 0 (ну для чего нам аж 3 способа выключить плагин?)
     

    Вложения:

    Последнее редактирование: 9 май 2019
    R1KO, igroman1266, kilroy и ещё 1-му нравится это.
  6. FIVE

    FIVE Developer & Informer

    Сообщения:
    167
    Симпатии:
    124
    Полностью согласен, когда писал квары были дефайнами поэтому они все большими буквами, щя перепишу в человеческий вид :)
     
  7. FIVE

    FIVE Developer & Informer

    Сообщения:
    167
    Симпатии:
    124
    Пользователь FIVE обновил ресурс Random Give Shield новой записью:

    Обновление

    Узнать больше об этом обновлении...
     
    kilroy нравится это.
  8. Grey83

    Grey83 похухоль

    Сообщения:
    2.448
    Симпатии:
    1.269
    @FIVE, снова каша в
    Интересно, если в консоль сервера прописать sm_giveshield <ключ>, то какую ошибку выдаст?
    Я же фиксил эту фигню
    В ShieldCMD() нужно сначала проверить от чьего имени написана команда. Если индекс игрока равна 0, то это сервер. Ему щит точно никак не пригодится.

    У тебя есть функции IsTargetValid() и IsClientValid() (при этом вторая содержит код, который используется в первой). Почему бы не вызывать тогда вторую из первой?
    PHP:
    stock bool IsTargetValid(int iClient)
    {
        static 
    int team;
        return 
    g_iTeamAllowWithShield && IsClientInGame(iClient) && !IsFakeClient(iClient) && IsPlayerAlive(iClient)
            && (
    team GetClientTeam(iClient)) > Team_Spec && (g_iTeamAllowWithShield == || g_iTeamAllowWithShield == team);
    }

    stock bool IsClientValid(int iClient)
    {
        return 
    IsClientInGame(iClient) && !IsFakeClient(iClient) && IsPlayerAlive(iClient);
    }
    -->
    PHP:
    stock bool IsTargetValid(int iClient)
    {
        static 
    int team;
        return 
    g_iTeamAllowWithShield && IsClientValid(iClient)
            && (
    team GetClientTeam(iClient)) > Team_Spec && (g_iTeamAllowWithShield == || g_iTeamAllowWithShield == team);
    }

    stock bool IsClientValid(int iClient)
    {
        return 
    IsClientInGame(iClient) && !IsFakeClient(iClient) && IsPlayerAlive(iClient);
    }
    Ещё на счёт циклов: если ты используешь целочисленную переменную только внутри цикла, то не нужно объявлять её вне цикла. Можно объявить её там же где инкрементную
    PHP:
        int iWeapon;
        for(
    int i64i++)
    -->
    PHP:
        for(int iiWeapon64i++)
    --- Добавлено позже ---
    А какой смысл 3 раза пересчитывать щиты?
    PHP:
        PlayersWithShield(false);   // 1-й
        
    CheckStart();   // 2-й
        
    if(g_bNotifyCGOPrintToChatAll("%t%i""TOTAL_SHIELDS"g_iTotalShields);
        
    PlayersWithShield(true)   // 3-й;
     
    Последнее редактирование: 9 май 2019
    kilroy и igroman1266 нравится это.
  9. FIVE

    FIVE Developer & Informer

    Сообщения:
    167
    Симпатии:
    124
    @Grey83,
    В первый раз идет подсчет всех игроков с щитом в начале раунда (вдруг у игрока остался щит в конце прошлого раунда)
    Во второй начинается выдача на основе уже подсчитанных
    Третий раз уже выводит сообщение с точным кол-вом щитов в команде(-ах)
    --- Добавлено позже ---
    В остальном исправлюсь!
     
  10. Grey83

    Grey83 похухоль

    Сообщения:
    2.448
    Симпатии:
    1.269
    Кстати, зачем убрали флаг EventHookMode_PostNoCopy у хука события round_start, неужели нам стало нужно получать какие-то данные о событии, помимо того, что это событие вообще произошло?
    И в round_end тоже надо бы этот флаг добавить по той же самой причине.
    и все 3 раза делается цикл по всем игрокам. Неужели нельзя это сделать с первого раза?
    Самое смешное в том, что первый раз функция не выполняет совершенно никаких полезных действий (потому что в CheckStart() снова каждый игрок проверяется функцией GetPlayerItem())
    Да и второй раз PlayersWithShield() тоже не нужна: достаточно вытащить из неё if(g_bNotify) CGOPrintToChatAll("%t%i", "PLAYERS_WITH_SHIELD", g_iPlayersWithShield); и поместить эту строку на место второго вызова этой функции. И оба вызова снести вместе с самой функцией.
    --- Добавлено позже ---
    Кстати, когда ты объявляешь переменную, то при компиляции плагина она всегда приравнивается к нулю, если ты во время объявления не присваиваешь ей другое значение, конечно:
    Handle становятся равными null
    bool
    становятся равными false
    int
    становятся равными 0
    float
    становятся равными 0.0
    Со всеми ячейками массивов происходит то же самоем (в строковых каждая ячейка становится равной '\0', т.е. 0).

    Так что писать что-то вроде int g_iPlayersWithShield = 0; не имеет никакого смысла (масло маслянное).
    --- Добавлено позже ---
    И форматирование для переводов ты используешь не слишком удачно:
    вместо CGOPrintToChatAll("%t%i", "TOTAL_SHIELDS", g_iTotalShields); было бы лучше сделать CGOPrintToChatAll("%t", "TOTAL_SHIELDS", g_iTotalShields);
    а в файле перевода вместо
    Код:
        "TOTAL_SHIELDS"
        {
            "en" ">>> {LIGHTRED}Total shields: {RED}"
            "ru" ">>> {LIGHTRED}Всего выдано щитов: {RED}"
        }
    сделать
    Код:
        "TOTAL_SHIELDS"
        {
            "#format"   "{1:d}"
            "en" ">>> {LIGHTRED}Total shields: {RED}{1}"
            "ru" ">>> {LIGHTRED}Всего выдано щитов: {RED}{1}"
        }
    --- Добавлено позже ---
    Вот как это должно было бы быть (в папке plugins лежит 3 версии плагина, скомпиленные с помощью SM 1.8 - 1.10, закидывать только ту, что соответствует версии на сервере; ещё добавил в архив инклюд csgo_colors.inc):
     

    Вложения:

    Последнее редактирование: 9 май 2019
    kilroy и igroman1266 нравится это.
  11. FIVE

    FIVE Developer & Informer

    Сообщения:
    167
    Симпатии:
    124
    Пользователь FIVE обновил ресурс Random Give Shield новой записью:

    Исправлены недочеты

    Узнать больше об этом обновлении...
    --- Добавлено позже ---
    Это забыл добавить, но править сил уже нет :)
    @Grey83 Не могу понять зачем ты в версии 1.2.1 убрал переменные m_hMyWeapons и m_iItemDefinitionIndex в вызов функции IsHasShield()? Просто мне кажется что каждый раз находить смещение будет не очень хорошо? Хотя они кешируются.
     
    Последнее редактирование: 9 май 2019
    kilroy нравится это.
  12. Grey83

    Grey83 похухоль

    Сообщения:
    2.448
    Симпатии:
    1.269
    Тебе именно кажется: после того как оффсет будет найден (после первого же вызова функции IsHasShield()), плагин перестанет искать оффсет.
    --- Добавлено позже ---
    По функции EntIsShield(): внутри функции else не нужна (у тебя, кстати, компилер не выдаёт текст, что функция должна возвращать значение?).
     
    Последнее редактирование: 9 май 2019
  13. Ozzy

    Ozzy

    Сообщения:
    313
    Симпатии:
    12
    Для выдачи одного терам и одного ментам писать так?
    Оффтоп
     
  14. Grey83

    Grey83 похухоль

    Сообщения:
    2.448
    Симпатии:
    1.269
    @Ozzy, а плагин не распределяет щиты равномерно по командам: нет там такой функции
    sm_rgs_teamallow 1 - тогда щиты будут выдаваться обеим командам вначале раунда
     
  15. spazm

    spazm

    Сообщения:
    649
    Симпатии:
    73
    А можно добавить в плагин еще и покупку шита? По команде !shield, !s допустим, с таким же ограничением по количеству
     
  16. FIVE

    FIVE Developer & Informer

    Сообщения:
    167
    Симпатии:
    124
    Пользователь FIVE обновил ресурс Random Give Shield новой записью:

    Обновление

    Узнать больше об этом обновлении...
    --- Добавлено позже ---
    Вроде нет)
    upload_2019-5-9_18-39-0.png
     
  17. Heinz

    Heinz

    Сообщения:
    146
    Симпатии:
    25
    эх...такую бы штуку для OB(((
     
  18. Grey83

    Grey83 похухоль

    Сообщения:
    2.448
    Симпатии:
    1.269
    @Heinz, можно импортировать модельку, но для её нормальной работы придётся серьёзно заморочиться.
    Хотя давно есть щит для L4D2: [L4D2] Shield - AlliedModders
     
  19. FIVE

    FIVE Developer & Informer

    Сообщения:
    167
    Симпатии:
    124
    Пользователь FIVE обновил ресурс Random Give Shield новой записью:

    Фикс ошибок

    Узнать больше об этом обновлении...
     
  20. arbigon

    arbigon

    Сообщения:
    234
    Симпатии:
    24
    Прикольно)))
     

    Вложения: