From 1a948751fa76fd89e511762be9fdb5dbf6d07f70 Mon Sep 17 00:00:00 2001 From: Misaka-ZeroTwo <45165615+Misaka-ZeroTwo@users.noreply.github.com> Date: Tue, 12 Nov 2024 02:10:08 -0500 Subject: [PATCH 1/2] Update EXILED.props --- EXILED/EXILED.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/EXILED/EXILED.props b/EXILED/EXILED.props index b4aecc1f3..62d6e57cd 100644 --- a/EXILED/EXILED.props +++ b/EXILED/EXILED.props @@ -15,7 +15,7 @@ - 8.14.0 + 8.14.1 false From 3f0d9ecc491c918cd0a69bc9664b976cd16d7156 Mon Sep 17 00:00:00 2001 From: Jiraya <177346249+intjiraya@users.noreply.github.com> Date: Sat, 16 Nov 2024 11:25:19 +0300 Subject: [PATCH 2/2] =?UTF-8?q?Update=20README-=D0=A0=D1=83=D1=81=D1=81?= =?UTF-8?q?=D0=BA=D0=B8=D0=B9.md=20(Russian)=20with=20localization=20impro?= =?UTF-8?q?vements?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...21\201\321\201\320\272\320\270\320\271.md" | 54 +++++++++---------- 1 file changed, 26 insertions(+), 28 deletions(-) diff --git "a/.github/documentation/localization/README-\320\240\321\203\321\201\321\201\320\272\320\270\320\271.md" "b/.github/documentation/localization/README-\320\240\321\203\321\201\321\201\320\272\320\270\320\271.md" index d04018da3..214a0cd82 100644 --- "a/.github/documentation/localization/README-\320\240\321\203\321\201\321\201\320\272\320\270\320\271.md" +++ "b/.github/documentation/localization/README-\320\240\321\203\321\201\321\201\320\272\320\270\320\271.md" @@ -2,7 +2,7 @@
[CI](https://github.com/ExMod-Team/EXILED/actions/workflows/main.yml/badge.svg?branch=master) -GitHub Releases +GitHub Releases Downloads ![Github Commits](https://img.shields.io/github/commit-activity/w/ExMod-Team/EXILED/apis-rework?style=for-the-badge&logo=git) @@ -10,22 +10,21 @@
-EXILED - низкоуровневый фреймворк для серверов SCP: Secret Laboratory. Он предлагает систему событий, которую разработчики могут использовать для различных манипуляций, изменения кода игры или реализации собственных функций. Все ивенты EXILED сделаны с помощью Harmony, это означает, что для их функционирования не требуется прямого редактирования серверных сборок, что позволяет получить два уникальных преимущества: +EXILED - высокоуровневый фреймворк для серверов SCP: Secret Laboratory. Он предлагает систему событий, которую разработчики могут использовать для различных манипуляций, изменения кода игры или реализации собственных функций. Все ивенты EXILED сделаны с помощью Harmony, что исключает необходимость прямого редактирования серверных сборок. Это обеспечивает два важных преимущества: - Во-первых, весь код фреймворка может быть свободно опубликован и распространен, что позволяет разработчикам лучше понять, *как* он работает, а также предложить свои предложения по дополнению или изменению его функций. - Во-вторых, поскольку весь код, связанный с фреймворком, выполняется вне сборки сервера, такие вещи, как небольшие обновления игры, будут иметь незначительное влияние на фреймворк, если вообще будут иметь. Это делает его наиболее совместимым с будущими обновлениями игры, а также облегчает обновление, когда это *нужно* сделать. -# Скачивание -Установка EXILED может показаться более сложной, чем установка других фреймворков, но на самом деле она довольно проста. -Как упоминалось выше, большая часть EXILED не содержится в файле Assembly-CSharp.dll сервера, однако в файл Assembly-CSharp.dll необходимо внести одно изменение, которое требуется для того, чтобы EXILED действительно *загружался* на сервер при запуске, чистая сборка игры с уже внесенными изменениями будет поставляться с релизами. +# Установка +Установка EXILED довольно проста. Она загружается через Plugin API Northwood. Именно поэтому в архиве ``Exiled.tar.gz``, доступном в релизах, находятся две папки: ``SCP Secret Laboratory`` и ``EXILED``. Просто переместите их в указанные ниже пути, и всё готово! -Если вы решите использовать программу установки, она, при правильном запуске, "позаботится" об установке `Exiled.Loader`, `Exiled.Updater`, `Exiled.Permissions`, `Exiled.API` и `Exiled.Events`, а также о том, чтобы на вашем сервере был установлен правильный файл Assembly-CSharp.dll. +Если вы выберете установку через инсталлятор, он автоматически выполнит все необходимые шаги. # Windows ### Автоматическая установка ([подробнее](https://github.com/ExMod-Team/EXILED/blob/master/Exiled.Installer/README.md)) -**Примечание**: Перед запуском программы установки убедитесь, что вы находитесь под пользователем, который запускает сервер, или у вас есть права администратора. +**Примечание**: Убедитесь, что вы используете учётную запись, с которой запускается сервер, или обладаете правами администратора. -- Скачайте **`Exiled.Installer-Win.exe` [отсюда](https://github.com/ExMod-Team/EXILED/releases)** (нажмите на Assets -> нажмите на Installer). +- Скачайте **`Exiled.Installer-Win.exe` [отсюда](https://github.com/ExMod-Team/EXILED/releases)** (нажмите на Assets -> выберите Installer). - Поместите его в папку вашего сервера (если вы еще не скачали выделенный сервер) - Дважды щелкните **`Exiled.Installer.exe`** или **[скачайте этот .bat](https://www.dropbox.com/scl/fi/7yh0r3q0vdn6ic4rhuu3l/install-prerelease.bat?rlkey=99fwjbwy1xg61qgtak0qzb9rd&st=8xs4xks8&dl=1)** и поместите его в папку сервера для установки последней предварительной версии. - Чтобы установить и получить плагины, ознакомьтесь с разделом [Установка плагинов](#Установка-плагинов-Windows) ниже. @@ -36,13 +35,13 @@ EXILED - низкоуровневый фреймворк для серверов - Распакуйте его содержимое с помощью [7Zip](https://www.7-zip.org/) или [WinRar](https://www.win-rar.com/download.html?&L=6). - Переместите папку **`EXILED`** в **`%appdata%`** *Примечание: Эта папка должна находиться в ``C:\Users\%UserName%\AppData\Roaming``, и ***НЕ*** ``C:\Users\%UserName%\AppData\Roaming\SCP Secret Laboratory``, и **ЭТО ДОЛЖНО** быть в (. ...)\AppData\Roaming, а не (...)\AppData\!*. - Переместите **``SCP Secret Laboratory``** в **`%appdata%`**. - - Windows 10: - Напишите `%appdata%` в Cortana / значке поиска или в строке проводника Windows. - - Любая другая версия Windows: + - Windows 10 & 11: + Введите `%appdata%` в Cortana, строку поиска или адресную строку проводника Windows. + - Другие версии Windows: Нажмите Win + R и введите `%appdata%`. -### Установка плагинов Windows -Вот и все, теперь EXILED должен быть установлен и активен при следующей загрузке вашего сервера. Обратите внимание, что EXILED сам по себе почти ничего не делает, поэтому обязательно получайте новые плагины с **[нашего сервера Discord](https://discord.gg/PyUkWTg)**. +### Установка плагинов +На этом установка EXILED завершена, и он будет активен при следующем запуске сервера. Обратите внимание, что EXILED сам по себе почти ничего не делает, поэтому обязательно получайте новые плагины с **[нашего сервера Discord](https://discord.gg/PyUkWTg)**. - Чтобы установить плагин, просто: - Скачайте плагин с [*их* страницы релизов](https://i.imgur.com/u34wgPD.jpg) (**он ДОЛЖЕН быть `.dll`!**) - Переместите его в: ``C:\Users\%UserName%\AppData\Roaming\EXILED\Plugins`` (переместите его сюда, нажав Win + R, а затем написав `%appdata%`) @@ -84,21 +83,20 @@ EXILED сам по себе предлагает некоторые опции Более полные и активно обновляемые руководства вы найдете на [сайте EXILED](https://exmod-team.github.io/EXILED/). -- Ваш плагин должен содержать класс, который наследуется от Exiled.API.Features.Plugin<>, если это не так, EXILED не загрузит ваш плагин при запуске сервера. -- Когда плагин загружен, код в методе ``OnEnabled()`` вышеупомянутого класса срабатывает немедленно, он не ждет загрузки других плагинов. Он не ждет завершения процесса запуска сервера. ***Он не ждет ничего.*** При настройке метода ``OnEnabled()`` убедитесь, что вы не обращаетесь к вещам, которые еще не инициализированы сервером, таким как ServerConsole.Port или PlayerManager.localPlayer. -- Если вам нужно получить доступ к вещам, которые не инициализированы до загрузки плагина, рекомендуется просто дождаться события WaitingForPlayers, если по какой-то причине вам нужно сделать это раньше, оберните код в цикл `` while(!x)``, который проверяет, что переменная/объект, который вам нужен, больше не является ``null``, прежде чем продолжить. -- EXILED поддерживает динамическую перезагрузку сборок плагинов во время работы сервера. Это означает, что если вам нужно обновить плагин, это можно сделать без перезагрузки сервера, однако, если вы обновляете плагин в середине выполнения, плагин должен быть правильно настроен для поддержки этого, иначе у вас будут очень плохие времена. Обратитесь к разделу ``Динамические обновления`` для получения дополнительной информации и рекомендаций. -- В EXILED ***НЕТ*** событий OnUpdate, OnFixedUpdate или OnLateUpdate. Если вам по какой-то причине нужно запускать код так часто, вы можете использовать MEC-корутину, которая ждет один кадр, 0.01f, или использовать временной слой, например Timing.FixedUpdate. +Основные правила для разработчиков: -### Отключение исправлений событий EXILED. -***В настоящее время эта функция больше не поддерживается.*** +- Ваш плагин должен содержать класс, наследуемый от ``Exiled.API.Features.Plugin<>``. Иначе EXILED не загрузит его при запуске сервера. +- Когда плагин загружен, код в методе ``OnEnabled()`` вышеупомянутого класса срабатывает немедленно, он не ждет загрузки других плагинов. Он не ждет завершения процесса запуска сервера. ***Он не ждет ничего.*** При настройке метода ``OnEnabled()`` убедитесь, что вы не обращаетесь к объектам, которые еще не инициализированы сервером, таким как ``ServerConsole.Port`` или ``PlayerManager.localPlayer``. +- Если вам нужно получить доступ к элементам, которые не инициализированы до загрузки плагина, рекомендуется просто дождаться события ``WaitingForPlayers``, если по какой-то причине вам нужно сделать это раньше, оберните код в цикл `` while(!x)``, который проверяет, что переменная/объект, который вам нужен, больше не является ``null``, прежде чем продолжить. +- EXILED поддерживает динамическую перезагрузку сборок плагинов во время выполнения, что позволяет обновлять плагин без перезапуска сервера. Однако для поддержки этой функции плагин должен быть корректно настроен. Обратитесь к разделу ``Динамические обновления`` для получения дополнительной информации и рекомендаций. +- В EXILED ***НЕТ*** событий OnUpdate, OnFixedUpdate или OnLateUpdate. Если вам по какой-то причине нужно запускать код так часто, вы можете использовать MEC-корутину, которая ждет один кадр, 0.01f, или использовать временной слой, например Timing.FixedUpdate. ### MEC Coroutines -Если вы незнакомы с MEC, это будет очень краткий и простой учебник, который поможет вам начать работу. +Если вы не знакомы с MEC, это будет очень краткий и простой учебник, который поможет вам начать работу. MEC Coroutines - это методы с таймером, которые поддерживают периоды ожидания перед продолжением выполнения, не прерывая основной поток игры. -Корутины MEC безопасны для использования в Unity, в отличие от традиционной работы с потоками. ***НЕ пытайтесь создавать новые потоки для взаимодействия с Unity, они приведут к крашу сервера.*** +Они безопасны для использования с Unity, в отличие от традиционных потоков. ***НЕ пытайтесь создавать новые потоки для взаимодействия с Unity, они приведут к крашу сервера.*** -Чтобы использовать MEC, нужно будет добавить ссылку ``Assembly-CSharp-firstpass.dll`` из файлов сервера и написать ``using MEC;``. +Для использования MEC добавьте ссылку на ``Assembly-CSharp-firstpass.dll`` из файлов сервера и напишите ``using MEC;``. Пример вызова простой корутины, которая повторяет себя с задержкой между каждым циклом: ```cs using MEC; @@ -125,7 +123,7 @@ public IEnumerator MyCoroutine() EXILED как фреймворк поддерживает динамическую перезагрузку сборок плагинов, не требуя перезагрузки сервера. Например, если вы запускаете сервер с единственным плагином `Exiled.Events` и хотите добавить новый, вам не нужно перезагружать сервер для выполнения этой задачи. Вы можете просто использовать команду `reload plugins` в RemoteAdmin или в консоли сервера для перезагрузки всех плагинов EXILED, и загрузки новых, которые не были загружены ранее. -Это также означает, что вы можете *обновлять* плагины без полной перезагрузки сервера. Однако есть несколько рекомендаций, которым должен следовать разработчик плагина, чтобы это было сделано правильно: +Это также позволяет *обновлять* плагины без полной перезагрузки сервера. Однако, чтобы это было сделано должным образом, разработчик плагина должен следовать нескольким рекомендациям: ***Для хостеров*** - Если вы обновляете плагин, убедитесь, что имя его сборки не совпадает с именем текущей установленной версии (если таковая имеется). Чтобы это сработало, плагин должен быть создан разработчиком с учетом динамических обновлений, простое переименование файла не поможет. @@ -135,12 +133,12 @@ EXILED как фреймворк поддерживает динамическу ***Для разработчиков*** - Плагины, которые хотят поддерживать динамическое обновление, должны отписываться от всех событий к которым они подключены, когда они отключены или перезагружены. -- Плагины, имеющие пользовательские патчи Harmony, должны использовать какую-либо изменяемую переменную в имени экземпляра Harmony, и должны UnPatchAll() для своего экземпляра, когда плагин отключен или перезагружен. -- Любые корутины, запущенные плагином в OnEnabled(), также должны быть завершены при отключении или перезагрузке плагина. +- Плагины, имеющие собственные патчи Harmony, должны использовать какую-либо изменяемую переменную в имени экземпляра Harmony, и вызывать ``UnPatchAll()`` для своего экземпляра, когда плагин отключен или перезагружен. +- Любые корутины, запущенные плагином в ``OnEnabled()``, также должны быть завершены при отключении или перезагрузке плагина. -Все это можно сделать в методах OnReloaded() или OnDisabled() в классе плагина. Когда EXILED перезагружает плагины, он вызывает OnDisabled(), затем OnReloaded(), затем загружает новые сборки, а затем выполняет OnEnabled(). +Все это можно сделать в методах ``OnReloaded()`` или ``OnDisabled()`` в классе плагина. Когда EXILED перезагружает плагины, он вызывает ``OnDisabled()``, затем ``OnReloaded()``, затем загружает новые сборки, а затем выполняет ``OnEnabled()``. -Обратите внимание, что я сказал *новые* сборки. Если вы замените сборку другой сборкой с таким же именем, она ***НЕ*** будет обновлена. Это связано с GAC (Global Assembly Cache), если вы попытаетесь "загрузить" сборку, которая уже находится в кэше, то вместо нее всегда будет использоваться кэшированная сборка. +Обратите внимание, что загружаются именно *новые* сборки. Если вы замените сборку другой сборкой с таким же именем, она ***НЕ*** будет обновлена. Это связано с GAC (Global Assembly Cache), если вы попытаетесь "загрузить" сборку, которая уже находится в кэше, то вместо нее всегда будет использоваться кэшированная сборка. По этой причине, если ваш плагин будет поддерживать динамические обновления, вы должны собирать каждую версию с другим именем сборки в опциях сборки (переименование файла не работает). Также, поскольку старая сборка не "уничтожается", то вы не сможете отписаться, распатчить ваш экземпляр, остановить корутины и т.д., этот код будет продолжать выполняться, как и код новой версии. Это очень плохо.