MAATRIX GAMES / Блог / Terraria: сложности с настройкой PVP на сервере

Terraria: сложности с настройкой PVP на сервере

MAATRIX GAMES

Заводишь PVP-режим на сервере, пишешь в чат /pvp по привычке из других игр — и получаешь в ответ «Unknown command». Или наоборот: настроил всё через config.json, а игроки всё равно жалуются, что кто-то «читерит» с PVP-тумблером. Разберём, откуда растут обе проблемы: как PVP на самом деле устроено в Terraria, чем он отличается от привычных командных PVP-систем других игр, и что реально настраивается на TShock-сервере, а что нет.

Как устроено PVP в Terraria: тумблер, а не команда

Вот первое, что важно понять: PVP в Terraria — это не серверная команда и не право доступа, а личный переключатель каждого игрока. Открываешь инвентарь, в правом верхнем углу иконка скрещённых мечей — клик по ней включает или выключает PVP лично для тебя. Рядом с мечами — иконки цветных флагов, это выбор команды (Team PVP, о нём ниже).

Урон между двумя игроками проходит только если PVP включено у обоих одновременно. Если у тебя PVP включён, а у оппонента нет — ты не нанесёшь ему ни единицы урона, и наоборот. Это чисто клиентская механика на уровне персонажа, унаследованная из ванильной игры один в один что на выделенном дедике, что на TShock-сборке — сервер тут просто транслирует пакет статуса между игроками, а не решает, кому можно драться.

Из этого прямо следует, почему многие ждут команду /pvp и не находят её — привычка идёт из других проектов (в Minecraft-плагинах, Rust, ARK такие команды часто действительно есть), но в архитектуре Terraria PVP изначально не задумывался как серверная функция, которую включает администратор одной командой для конкретного игрока.

Почему /pvp выдаёт "Unknown command"

Если завести на TShock-сервере в чате /pvp, сервер честно ответит что-то в духе «Unknown command». Причина простая: ни в ванильном дедике, ни в базовой сборке TShock такой команды нет. Можно убедиться самостоятельно — в TShock из PVP-связанного зашиты только /pvpdeath (показывает твою личную статистику смертей в PVP) и /allpvpdeath (то же самое по всем онлайн-игрокам). Это чисто статистические команды, они не переключают и не форсируют режим.

Соответственно и разговоры про «TShock-права для /pvp» — это не совсем точная формулировка проблемы. Дело не в правах: команды физически не существует, поэтому никакая группа и никакой /group addperm её не откроют. Управлять PVP на сервере можно только двумя путями:

  1. Через серверный конфиг — задать общий режим для всех сразу (см. следующий раздел).
  2. Через сторонний плагин — если нужна именно команда для админа, форсирующая PVP конкретному игроку или снимающая тумблер дистанционно.

По второму пути в сообществе TShock ходит несколько небольших плагинов вроде PvPToggle — они добавляют собственные команды и разрешения поверх стандартного API SetPvP, которым TShock умеет менять статус игрока программно. Но это уже сторонний код: перед установкой проверяй, под какую версию TShock он собран, и тестируй на локальной копии мира — заброшенные однодневные плагины на TShock не редкость, а падение сервера из-за несовместимого плагина разбирали отдельно в статье про краш плагина на TShock.

Поднять сервер Terraria за пару минут

Готовый образ MAATRIX GAMES: NVMe, AMD EPYC, DDoS-защита, панель управления. Локации UK, US, RU. Оплата картой РФ, СБП или криптой.

Создать сервер

PvPMode в config.json: общий рубильник для всех

Если задача — не точечно управлять конкретными игроками, а задать правило для всего сервера, нужен параметр PvPMode в tshock/config.json. У него три допустимых значения:

"PvPMode": "normal"
  • normal (по умолчанию) — обычное поведение: каждый игрок сам решает через иконку в инвентаре, драться ему или нет.
  • always — PVP принудительно включено абсолютно у всех, тумблер игроков игнорируется. Подходит для чисто PVP-серверов, арен и ивентов «последний выживший».
  • disabled — PVP выключено полностью, урон между игроками не проходит независимо от личных настроек. Хороший вариант для чисто кооперативных серверов, где хочется исключить случайный или намеренный гриф друг друга.

Меняется значение прямо в файле конфига (путь обычно tshock/config.json в папке сервера), сохраняется — и применяется командой /reload из консоли или чата от имени супер-админа, либо после полного рестарта процесса. Если сервер крутится через systemd-юнит, перезапуск делается штатно, это разбирали в статье про systemd, screen и tmux для игровых процессов.

Практический нюанс: always — довольно резкий режим. Если у тебя смешанный сервер (часть игроков строит, часть хочет драться), always заставит драться вообще всех, включая новичков у спавна. Для смешанного сценария разумнее оставить normal и объяснить в правилах/MOTD, как включать PVP самому — либо выделить под принудительный PVP отдельный регион или отдельный мир.

Настройки по соседству: DisableInvisPvP и SpawnProtection

Рядом с PvPMode в конфиге есть ещё пара параметров, которые не переключают PVP напрямую, но заметно влияют на то, как он ощущается в игре:

  • DisableInvisPvP — если true, эффект зелья невидимости перестаёт скрывать игрока от других во время PVP-боя (на клиенте эффект остаётся, но остальным игрокам он не транслируется). Полезно включить на PVP-ориентированных серверах: невидимость в честном PVP — довольно спорное преимущество, многие сообщества считают её читерской.
  • SpawnProtection и SpawnProtectionRadius — защита тайлов вокруг точки спавна от разрушения/постройки, задаётся радиусом в блоках (по умолчанию 10). Это не про урон между игроками напрямую, но при PvPMode: always стоит держать её включённой и разумного радиуса — иначе задержавшийся у спавна новичок рискует попасть под спавн-камп раньше, чем успеет сориентироваться и отбежать.

Сочетание PvPMode: always без внятной спавн-защиты — частая причина жалоб «на сервере невозможно играть, всех убивают у входа». Если ставишь принудительный PVP, продумай отдельно безопасную зону старта — либо через SpawnProtectionRadius, либо регионом с отдельными правилами, либо телепортом новых игроков сразу в безопасную зону через хук на плагине.

Team PVP: цветные флаги и командный режим

Помимо личного PVP-тумблера, в инвентаре рядом с мечами есть иконки команд — красная, зелёная, синяя, жёлтая, розовая или «без команды». Это встроенный ванильный механизм Team PVP: игроки одной команды не наносят урон друг другу даже при включённом PVP у обоих, а полоски здоровья и ники союзников подсвечиваются другим цветом. Игрок выбирает команду точно так же кликом по иконке — никакой отдельной команды в чате для этого тоже не предусмотрено.

Для организации турниров или регулярных PVP-ивентов «команда на команду» голого клиентского переключателя обычно мало — хочется раздавать команды принудительно, разводить игроков по точкам старта, лечить/возрождать по свистку. Здесь снова нужен сторонний плагин: у TShock нет встроенных команд /team kick, /team give и подобных — это функциональность community-плагинов уровня Team-Commands, которые добавляют серию административных команд поверх обычных прав TShock (кик, бан, лечение, телепорт — но уже с фильтром «только по цвету команды»). Перед использованием на боевом сервере стоит обкатать логику на тестовом мире: групповые команды массово бьют по игрокам, и ошибка в фильтре команды — не та вещь, которую хочется словить во время турнира.

Пятисекундный тайм-аут: защита от abuse при переключении

Отдельная деталь, которая часто вызывает вопросы «баг это или так и задумано»: между включением и выключением PVP (а также между сменами команды) в игре действует пятисекундный тайм-аут. Это не серверная настройка TShock, а встроенная механика самой Terraria — она защищает именно от того абьюза, из-за которого разработчики её и добавили: моментального переключения статуса ради нечестного преимущества. Пример классической схемы, которую тайм-аут ломает: игрок включает PVP прямо перед атакой ради внезапного удара, а сразу после — выключает, чтобы не получить сдачи и остаться неуязвимым для ответного урона. Без задержки то же самое работало бы и на грани смерти — переключился в последний момент и избежал добивания.

Для админа сервера практический вывод простой: не пытайся компенсировать этот тайм-аут конфигом или плагином «до кучи» — это стандартное поведение клиента, оно одинаково работает что на ванильном дедике, что на TShock, и трогать его штатными средствами сервера нельзя. Если игроки жалуются, что «PVP переключается с задержкой» — это не баг конкретно твоего сервера, а фича игры, и её стоит просто объяснить в правилах или FAQ сервера, чтобы не тратить время на бесполезную диагностику.

Поднять сервер Terraria за пару минут

Готовый образ MAATRIX GAMES: NVMe, AMD EPYC, DDoS-защита, панель управления. Локации UK, US, RU. Оплата картой РФ, СБП или криптой.

Создать сервер

Частые вопросы

Можно ли включить PVP только конкретному игроку, а не всем сразу?

Штатными средствами TShock — нет, PvPMode работает на весь сервер целиком. Точечное управление статусом отдельных игроков доступно только через сторонние плагины, использующие внутренний API SetPvP — команды в базовой поставке TShock под это нет.

Почему после смены PvPMode в конфиге ничего не изменилось?

Значение конфига применяется после /reload из консоли/чата суперадмина либо после рестарта процесса сервера. Если правил файл вручную через редактор — проверь, что не сломан JSON-синтаксис (лишняя или пропущенная запятая), иначе TShock может откатиться на значения по умолчанию при следующей загрузке.

PVP работает в одиночной игре или только на серверах?

Тумблер в инвентаре виден и в одиночной игре, но смысла не имеет — драться там банально не с кем. Играть в PVP по-настоящему можно только в мультиплеере, будь то ванильный дедик или TShock-сборка.

Team PVP автоматически защищает от урона окружения — ловушек, лавы, боссов?

Нет, командный режим блокирует только прямой урон от других игроков одной команды. Ловушки, стихийный урон, боссы и мобы бьют одинаково всех вне зависимости от команды и статуса PVP.

Нужно ли что-то отдельно настраивать для дуэлей 1 на 1?

Нет специального «режима дуэлей» ни в ванили, ни в базовом TShock — обычно это решается вручную (оба включают PVP, деремся) либо специализированным плагином для организованных боёв с очередью и аренами, если формат дуэлей нужен на регулярной основе.