1. Скачайте по ЭТОЙ ссылке weapon_limit.hueco_mundo и переместите в addons/sourcemod/plugins/ws_vip/ или plugins/ws_knife_arena и т.п. (требуется один любой купленный плагин из ЭТИХ).
2. Распакуйте ЭТОТ архив с конфигами. 3. Включите/перезагрузите сервер.
Это улучшенная (с 0 переписанная) версия вот этой бесплатной. Работает по принципу SDKHook_WeaponCanUse, когда ограниченное оружие лежит на земле и ничего с ним не сделать. Но есть отличие от plugin'ов, что я видел на форумах, а именно: слабая нагрузка. Например, в SDKHook_WeaponCanUse callback'е (а он вызывается 66/100 раз в секунду) не используется ни один native. Поэтому, даже если 64 игрока будут стоять на ограниченном оружии, то вряд ли это как-то грузанёт сервер.
Теперь поддерживается всё актуальное CSGO оружие. Раньше можно было ограничить только сразу m4a1 + m4a1_silencer, а теперь можно и отдельные на выбор. Теперь можно ограничить оружие 'x' для команды T и 'y' (другое число) для команды CT, или ограничить только T или CT.
cfg/weapon_limit/weapon_limit.cfg - настройки. cfg/weapon_limit/weapon_limit.txt - ограничить оружие на нужных картах. addons/sourcemod/scripting/include/weapon_limit.inc - api.
Код
// 1 = ограничение оружия работает. // 0 = ограничение оружия приостановлено. Перед сменой карты изменится на 1, но раз здесь 0, то будет снова 0. wl_enabled "1"
// awp ограничено 1 на команду. // Игрок с иммунитетом поднял awp. // Товарищ по команде без иммунитета пытается поднять второе awp. // 0 = сможет поднять. // 1 = не сможет. wl_count_immune_players "0"
// Если оружие ограничено 0 на команду, сможет ли игрок с иммунитетом его покупать/использовать? (1 = да, 0 = нет). wl_immunity_when_zero "0"
// Если начался новый раунд и у команды в руках больше оружия, чем положено: // 0 = ничего не делать.Оружие станет недоступным для игрока, только когда он сам его выбросит, и только если у него нет иммунитета. // 1 = выбросить лишнее оружие. // 2 = удалить лишнее оружие. // Чьё из игроков оружие будет выброшено/удалено: игроки выбираются случайно из тех, у кого нет иммунитета. // Команда может оказаться с лишним оружием, например, из-за смены команды игроков в конце раунда, когда перемещаются живые игроки . wl_drop_limited_at_round_start "1"
// Звук предупреждения, когда игрок не может купить оружие, т.к. оно ограничено ("" = откл). wl_sound "resource/warning.wav"
В примере ниже ограничение для awp работает:
- на карте cs_office. - на всех de картах, кроме de_dust2. - на всех awp_ картах. - у T по одному awp на каждые 5 товарищей по команде. - игрокам CT покупать/поднимать awp запрещено.
Код
"awp" { // Количество на команду. // // Если wl_count_immune_players "0" (игроков с иммунитетом не считать), и иммунитет для оружия работает, то игроки с иммунитетом не считаются. // Может быть указано только одно значение для "tt_limit" и одно для "ct_limit". // "tt_limit" и "ct_limit" никак не связаны, т.к. ограничение настраивается для конкретной команды (неважно что там в другой). // // Способ 1: Постоянное значение. //-1 = разрешено всем (или можно указать "", или удалить параметр). // 0 = запрещено всем. // 1 = одно оружие на команду. // 2 = два оружия на команду и т.д. // // Способ 2: Соотношение "1:x" (по одному оружию на каждые 'x' товарищей по команде). // "1:" указывать обязательно, а "x" может быть от 2 и выше. // Например, при "tt_limit" "1:3" ограничение работает так: // 1-3 t игрока = 1 оружие на t команду. // 4-6 t игрока = 2 оружия на t команду. // 7-9 t игрока = 3 оружия на t команду. // 10-12 t игрока = 4 оружия на t команду. // И т.д. (всегда добавляется +3, т.к. указано "1:3"). // "tt_limit" "1:5" "ct_limit" "0"
// На каких картах работает ограничение. "ALL" = на всех картах. "map" { "cs_office" "" }
// На каких картах работает ограничение (любые префиксы). "map prefixes" { "de" "" "awp_" "" }
// На каких картах ограничение НЕ работает. "map ignore" { "de_dust2" "" }
// На каких картах ограничение НЕ работает (любые префиксы). "map prefixes ignore" {
typeset WL_CB { function bool (int client, const char[] sWeapon, int limit, bool &warningSound); function void (CSWeaponID weapon_id, int old_tt_limit, int new_tt_limit, int old_ct_limit, int new_ct_limit); }
native bool WL_GetWeaponLimit(CSWeaponID weapon_id, int &tt_limit, int &ct_limit, int &tt_ratio=0, int &ct_ratio=0); native void WL_SetWeaponLimit(CSWeaponID weapon_id, int tt_limit=-2, int ct_limit=-2, bool ratio=false);
native ArrayList WL_GetWeaponRefList(CSWeaponID weapon_id, int &arrayLength=0); native bool WL_IsValidWeaponID(CSWeaponID &weapon_id); native bool WL_IsClientCanPickupWeapon(int client, int weapon_index);
native WL_SetImmunity (и WL_SetWeaponImmunity) сделан так, чтобы плагины друг с другом не конфликтовали. Когда plugin выдаёт иммунитет игроку, то счётчик увеличивается и иммунитет работает, пока число > 0. А когда plugin отбирает иммунитет или отключается, то он отбирает конкретно тот, который выдал (отобрать чужие не получится).
После смены карты весь иммунитет очищается и вступают в силу настройки из weapon_limit.txt.
Я перекомпилил по твоему варианту, где подсчет ведется когда 5Т 5CT, и с иммункой. Далее у меня проблема в том, что "игнор" не работает. На авп карте не игнорируется запрет. Играется только 1 авп 5х5
Конфиг:
"awp" { "tt_limit" "1:5" "ct_limit" "1:5"
"map" { "de_alexandra2" "" "de_infernew_fix" ""
}
// На каких картах работает ограничение (любые префиксы). "map prefixes" { "de" "ALL" }
// На каких картах ограничение НЕ работает. "map ignore" { "awp_lego_2s" "" }
// На каких картах ограничение НЕ работает (любые префиксы). "map prefixes ignore" { "awp_" "" } }
Дата: Суббота, 23.07.2022, 21:44:43 | Сообщение # 17
Цитатаaromatny ()
"awp" { "tt_limit" "1:5" "ct_limit" "1:5"
"map" { "de_alexandra2" "" "de_infernew_fix" ""
}
// На каких картах работает ограничение (любые префиксы). "map prefixes" { "de" "ALL" }
// На каких картах ограничение НЕ работает. "map ignore" { "awp_lego_2s" "" }
// На каких картах ограничение НЕ работает (любые префиксы). "map prefixes ignore" { "awp_" "" } }
Не вижу смысла в таких настройках. Зачем указывать de_alexandra2 и de_infernew_fix в "map", если ограничение работает на всех "de" картах ("map prefixes")? И "de" "ALL" прописано неправильно, во-первых писать "ALL" можно только в "map", и второе: писать нужно "ALL" "" (вместо имени карты), но "de" префикс подхватит все равно (т.е. даже так сработает). И зачем в "ignore" разделах прописаны "awp_" карты непонятно, т.к. какой смысл их игнорировать, если на них и так ограничение работать не будет, т.к. в "map" и "map prefixes" нет ничего про "awp". "ignore" используется, если, например, в "map prefixes" прописано "de_", но не хочется, чтобы учитывало "de_dust". Всё, что дают такие настройки, это "Ограничение оружия работает на всех de картах, а на других не работает.".
Не вижу смысла в таких настройках. Зачем указывать de_alexandra2 и de_infernew_fix в "map", если ограничение работает на всех "de" картах ("map prefixes")? И "de" "ALL" прописано неправильно, во-первых писать "ALL" можно только в "map", и второе: писать нужно "ALL" "" (вместо имени карты), но "de" префикс подхватит все равно (т.е. даже так сработает). И зачем в "ignore" разделах прописаны "awp_" карты непонятно, т.к. какой смысл их игнорировать, если на них и так ограничение работать не будет, т.к. в "map" и "map prefixes" нет ничего про "awp". "ignore" используется, если, например, в "map prefixes" прописано "de_", но не хочется, чтобы учитывало "de_dust". Всё, что дают такие настройки, это "Ограничение оружия работает на всех de картах, а на других не работает.".