From 6ce8467c463e3e700a4587a895844ca7c36ea2a4 Mon Sep 17 00:00:00 2001 From: mt-gitlocalize Date: Mon, 20 Oct 2025 09:59:29 +0000 Subject: [PATCH] Translate v2-server-reference.md via GitLocalize --- .../scripting/server/v2-server-reference.md | 384 ++++++++++++++++++ 1 file changed, 384 insertions(+) create mode 100644 docs/ru/scripting/server/v2-server-reference.md diff --git a/docs/ru/scripting/server/v2-server-reference.md b/docs/ru/scripting/server/v2-server-reference.md new file mode 100644 index 00000000..1ab32003 --- /dev/null +++ b/docs/ru/scripting/server/v2-server-reference.md @@ -0,0 +1,384 @@ +!!! предупреждение "Этот сайт находится в стадии разработки!" + +``` +This site is being actively worked on. + +Feel you could help? Please do by clicking on the page with a pencil on the right! + +This can be done any page too. +``` + +# Справочник по серверным скриптам + +## Версия сервера 2.X + +!!! предупреждение + +``` +BeamMP server version 2.X is now unsupported. This documentation is provided as a reference only. +Please update to the latest version for maintenance and support. +``` + +--- + +> Это скрипт 2.x. Обращайтесь к нему только если ваш сервер старый/устаревший (версия 2.xx). Для получения последней документации см. [здесь](https://docs.beammp.com/scripting/server/latest-server-reference) . {.is-warning} + +### Примечания + +Чтобы получить вывод функции в консоли сервера, вам нужно обернуть его в оператор `print()` . Например: `print(GetPlayerName(0))` вернет имя первого игрока вашего сервера. + +`` начинается с 0. + +### Список доступных функций для написания скриптов + +#### GetPlayerName(идентификатор_сервера_игроков) + +Возвращает имя игрока в Discord в виде строки + +```lua +function onPlayerJoin(playerID) + local name = GetPlayerName(playerID) + -- Do something +end +``` + +#### GetPlayerDiscordID(playersServerID) + +Возвращает имя игрока в Discord в виде строки + +```lua +function onPlayerJoin(playerID) + local name = GetPlayerDiscordID(playerID) + -- Do something +end +``` + +#### GetPlayerHWID(идентификатор_сервера_игроков) + +Возвращает идентификатор игрока в Discord в виде строки + +```lua +function onPlayerJoin(playerID) + local name = GetPlayerHWID(playerID) + -- Do something +end +``` + +#### GetPlayerVehicles(идентификатор_сервера_игроков) + +Возвращает транспортные средства игрока в виде объекта/массива. + +```lua +function onChatMessage(playerID, senderName, message) + local vehicleList = GetPlayerVehicles(playerID) + for vehicleID, vehicleData in pairs(vehicleList) do + -- Do something + -- Could also be used to check how many vehicles a player have + end +end +``` + +#### DropPlayer(идентификатор_сервера_игроков) + +Сбрасывает соединение для определенного игрока. По сути выгоняет его + +```lua +function onVehicleSpawn(playerID, vehicleID, vehicleData) + -- Do something + DropPlayer(playerID) +end +``` + +#### SendChatMessage(playersServerID, сообщение) + +Отправляет сообщение по сети указанному пользователю. Используйте -1 для всех + +```lua +function onPlayerJoin(playerID) + SendChatMessage(-1, "Someone just joined!") +end +``` + +#### CancelEvent() -- УСТАРЕЛО + +Отменяет событие. Это может произойти скоро. Используйте `return 1` чтобы отменить событие. + +#### onInit() + +Если объявлено в файле lua, оно будет вызвано после того, как C++ успешно завершит загрузку текущего файла lua. + +```lua +function onInit() + print("Server ready") +end +``` + +#### Выход() + +Закрою сервер. + +```lua +function onInit() + print("Server Ready. But who needs a server which is running") + exit() -- Stops the server +end +``` + +#### CreateThread(имя_функции, интервал_вызова) + +Функция будет выполняться в выделенном потоке, и она будет запускать callInterval раз в секунду. 1 = Она будет запускаться каждую секунду. + +```lua +function yourFunction() + for i = 1,10 do + SendChatMessage(-1, "Countdown: "..i) + Sleep(1000) + end +end +CreateThread("yourFunction", 30) +``` + +УСТАРЕВШИЙ ПРИМЕР Функция будет выполняться в выделенном потоке + +```lua +function yourFunction() + for i = 1,10 do + SendChatMessage(-1, "Countdown: "..i) + Sleep(1000) + end +end +CreateThread("yourFunction", 30) +``` + +#### StopThread(имя_функции) + +Прекратит попытки вызвать функцию потока текущего скрипта. + +```lua +function yourFunction() + delayExpired = false + Sleep(10000) + delayExpired = true +end +CreateThread("yourFunction", 30) +-- Do something +if not delayExpired then + StopThread("yourFunction") +else + -- Do something +end + +``` + +#### Сон (миллисек) - ИЗНОС + +Приостановит выполнение на указанное время (предупреждение: это приведет к приостановке всего сервера, если вы не создали поток) + +```lua +function countdown() + for i = 1,10 do + SendChatMessage(-1, "Countdown: "..i) + Sleep(1000) + end +end +CreateThread("countdown", 10) +``` + +#### ПолучитьPlayerCount() + +Вернет количество подключенных игроков + +```lua +function onPlayerJoin(playerID) + SendChatMessage(playerID, "You are the "..GetPlayerCount().."th player!" +end +``` + +#### RemoveVehicle(playerServerID, VehicleID) + +Исчезнет транспортное средство. + +```lua +function onVehicleSpawn(playerID, vehicleID, vehicleData) + if --[[ Vehicle data equal something it shouldn't be ]] then + RemoveVehicle(playerID, vehicleIID) + end +end +``` + +#### ПолучитьИгроков() + +Вернет таблицу идентификаторов с именами + +```lua +local function onPlayerJoin(joinedPlayerID) + local players = GetPlayers() + for playerID, playerName in pairs(players) do + if playerID == joinedPlayerID then + -- Do something + end + end +end +``` + +#### RegisterEvent(имя_события, имя_функции) + +Зарегистрирует эту функцию для указанного события. Оба должны быть строками + +```lua + function anyEvent() + -- Do something + end + RegisterEvent("onAnyEventHappen", "anyEvent") + -- Do something + TriggerLocalEvent("onAnyEventHappen") +``` + +#### TriggerLocalEvent(имя_события) + +Будет вызывать каждую зарегистрированную функцию в той же папке плагина. + +```lua + function anyEvent() + -- Do something + end + RegisterEvent("onAnyEventHappen", "anyEvent") + -- Do something + TriggerLocalEvent("onAnyEventHappen") +``` + +#### TriggerGlobalEvent(имя_события) + +Будет вызывать каждую зарегистрированную функцию с этим именем события. + +```lua + -- File A + function anyEvent() + -- Do something + end + RegisterEvent("onAnyEventHappen", "anyEvent") +``` + +```lua + -- File B + TriggerGlobalEvent("onAnyEventHappen") +``` + +#### TriggerClientEvent(playerServerID, eventName, data) + +Вызовет это событие с указанными данными на указанном клиенте (-1 для широковещательной передачи) + +```lua + function onPlayerJoin(playerServerID) + TriggerClientEvent(playerServerID, "anyEvent", "You just joined the server") + end + RegisterEvent("onAnyEventHappen", "anyEvent") +``` + +#### Установить(configID, newValue) + +установит настройку конфигурации на новое указанное значение из таблицы ниже| + +```lua + function onChatMessage(playerID, senderName, message) + if playerID == adminPlayer then + if message == --[[ anything ]] then + Set(3, 10) + end + end + end +``` + +#### Список доступных настроек конфигурации для команды `Set()` + +> Обратите внимание, что они не будут сохранены в файле конфигурации. + +Идентификатор конфигурации | Имя | Приму только +--- | --- | --- +`0` | Настройка отладки | правда или ложь +`1` | Частная обстановка | правда или ложь +`2` | Макс. количество автомобилей на игрока | число +`3` | Макс. количество игроков | число +`4` | Карта | нить +`5` | Имя | нить +`6` | Описание | нить +любой другой идентификатор приведет к появлению предупреждения на консоли | | + +### Список доступных событий для написания сценариев + +#### События по умолчанию + +Пример использования события: + +```lua + function onInit() + RegisterEvent("onPlayerJoin", "onPlayerJoin") + end + + function onPlayerJoin(playerServerID) + -- Do something + end +``` + +Если вы не хотите, чтобы на вашем сервере были гости: + +```lua + function onInit() + print("noGuests Ready") + RegisterEvent("onPlayerAuth","onPlayerAuth") + end + + function onPlayerAuth(name, role, isGuest) + if isGuest then + return "You must be signed in to join this server!" + end + end +``` + +Событие | Параметры | Описание +--- | --- | --- +`onPlayerAuth` | Имя игрока, роль на форуме, гостевая учетная запись (bool) | Игрок прошел аутентификацию и запрашивает присоединение +`onPlayerConnecting` | Идентификатор игрока | Игрок загружается (до загрузки карты) +`onPlayerJoining` | Идентификатор игрока | Игрок загружает карту и скоро присоединится +`onPlayerJoin` | Идентификатор игрока | Игрок присоединился и загрузился +`onPlayerDisconnect` | Идентификатор игрока | Игрок отключился +`onChatMessage` | Идентификатор отправителя, имя и сообщение чата | Сообщение чата было отправлено. Это было бы хорошо для создания системы команд +`onVehicleSpawn` | Идентификатор игрока, идентификатор транспортного средства и данные транспортного средства | Это называется, когда кто-то создает транспортное средство. +`onVehicleEdited` | Идентификатор игрока, идентификатор транспортного средства и данные транспортного средства | Это называется, когда кто-то редактирует транспортное средство или заменяет существующее. +`onVehicleDeleted` | Идентификатор игрока и идентификатор транспортного средства | Это называется, когда кто-то удаляет принадлежащее ему транспортное средство. + +#### Пользовательские события + +Пользовательские события также могут быть созданы для вашего собственного использования. Это делается примерно так же, как и события по умолчанию. + +Пример использования пользовательского события: + +```lua + function onInit() + RegisterEvent("myCustomEvent", "myCustomEvent") + end + + function myCustomEvent(playerServerID, customData) + -- Do something + end +``` + +Затем его можно вызвать либо со стороны клиента, либо со стороны сервера, используя соответствующие функции. + +### Игроки + +Когда игрок подключается к вашему серверу, ему назначается serverID, начиная с 0 и далее. serverID используются повторно; если игрок покидает сервер и снова присоединяется, ему не будет назначен новый serverID, он просто получит другой доступный. Когда сервер перезапустится, serverID будут сброшены. + +#### Статические идентификаторы + +У игроков в BeamMP есть 3 статических идентификатора, которые можно получить из их serverID: имя, discordID и hardwareID или HWID. (Хотя последний из вышеупомянутых не реализован, мы будем действовать так, как будто он реализован). Каждый из трех типов идентификаторов имеет свое собственное происхождение и сильные/слабые стороны при использовании их для идентификации игрока. + +ТИП ИДЕНТИФИКАТОРА | ПЛЮСЫ | МИНУСЫ | ФУНКЦИЯ ДЛЯ ПОЛУЧЕНИЯ +--- | --- | --- | :-: +имя | легко получить, просто | не безопасно | ПолучитьИмяИгрока() +DiscordID | довольно безопасно | неудобно | GetPlayerDiscordID() +HWID | чрезвычайно безопасно | трудно получить | GetPlayerHWID() + +### Транспортные средства + +У транспортных средств в beamMP есть 3 атрибута, на которые обращает внимание сервер: serverID владельца, vehicleID транспортного средства и его данные. ServerID владельца прост, это serverID, у каждого транспортного средства также есть ID, идентификаторы транспортных средств не уникальны для транспортного средства; два транспортных средства могут иметь одинаковый ID, если они принадлежат разным владельцам. В отличие от serverID, vehicleID используются повторно, например, если у меня есть 4 транспортных средства, их идентификаторы — 0, 1, 2 и 3, если я удалю транспортное средство в vehicleID 2, у меня будут 0, 1 и 3, когда я создам новое транспортное средство, новое транспортное средство будет помещено в слот ID 2. Наконец, последний атрибут, который есть у транспортных средств, — это data, data содержит транспортное средство, название, детали и другие данные; как следует из названия. data хранится в виде необработанной строки JSON, поэтому вам понадобится библиотека JSON. В качестве альтернативы вы можете вручную пройти по строке и извлечь необходимую информацию.