15 KiB
::: warning "Этот сайт находится в стадии разработки!"
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). Для получения последней документации см. здесь. {.is-warning}
Примечания
Чтобы получить вывод функции в консоли сервера, вам нужно обернуть его в оператор print(). Например: print(GetPlayerName(0)) вернет имя первого игрока вашего сервера.
<PlayersServerID> начинается с 0.
Список доступных функций для написания скриптов
GetPlayerName(playersServerID)
Возвращает имя игрока в Discord в виде строки
function onPlayerJoin(playerID)
local name = GetPlayerName(playerID)
-- Do something
end
GetPlayerDiscordID(playersServerID)
Возвращает имя игрока в Discord в виде строки
function onPlayerJoin(playerID)
local name = GetPlayerDiscordID(playerID)
-- Do something
end
GetPlayerHWID(playersServerID)
Возвращает идентификатор игрока в Discord в виде строки
function onPlayerJoin(playerID)
local name = GetPlayerHWID(playerID)
-- Do something
end
GetPlayerVehicles(playersServerID)
Возвращает транспортные средства игрока в виде объекта/массива.
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(playersServerID)
Сбрасывает соединение для определенного игрока. По сути выгоняет его
function onVehicleSpawn(playerID, vehicleID, vehicleData)
-- Do something
DropPlayer(playerID)
end
SendChatMessage(playersServerID, сообщение)
Отправляет сообщение по сети указанному пользователю. Используйте -1 для всех
function onPlayerJoin(playerID)
SendChatMessage(-1, "Someone just joined!")
end
CancelEvent() -- УСТАРЕЛО
Отменяет событие. Это может произойти скоро. Используйте return 1 чтобы отменить событие.
onInit()
Если объявлено в файле lua, оно будет вызвано после того, как C++ успешно завершит загрузку текущего файла lua.
function onInit()
print("Server ready")
end
exit()
Закроет сервер
function onInit()
print("Server Ready. But who needs a server which is running")
exit() -- Stops the server
end
CreateThread(functionName, callInterval)
Функция будет выполняться в выделенном потоке, и она будет запускать callInterval раз в секунду. 1 = Она будет запускаться каждую секунду.
function yourFunction()
for i = 1,10 do
SendChatMessage(-1, "Countdown: "..i)
Sleep(1000)
end
end
CreateThread("yourFunction", 30)
УСТАРЕВШИЙ ПРИМЕР Функция будет выполняться в выделенном потоке
function yourFunction()
for i = 1,10 do
SendChatMessage(-1, "Countdown: "..i)
Sleep(1000)
end
end
CreateThread("yourFunction", 30)
StopThread(functionName)
Прекратит попытки вызвать функцию потока текущего скрипта.
function yourFunction()
delayExpired = false
Sleep(10000)
delayExpired = true
end
CreateThread("yourFunction", 30)
-- Do something
if not delayExpired then
StopThread("yourFunction")
else
-- Do something
end
Sleep(миллисек) - УСТАРЕЛО
Приостановит выполнение на указанное время (предупреждение: это приведет к приостановке всего сервера, если вы не создали поток)
function countdown()
for i = 1,10 do
SendChatMessage(-1, "Countdown: "..i)
Sleep(1000)
end
end
CreateThread("countdown", 10)
GetPlayerCount()
Вернет количество подключенных игроков
function onPlayerJoin(playerID)
SendChatMessage(playerID, "You are the "..GetPlayerCount().."th player!"
end
RemoveVehicle(playerServerID, VehicleID)
Деспавнит транспортное средство
function onVehicleSpawn(playerID, vehicleID, vehicleData)
if --[[ Vehicle data equal something it shouldn't be ]] then
RemoveVehicle(playerID, vehicleIID)
end
end
GetPlayers()
Вернет таблицу идентификаторов с именами
local function onPlayerJoin(joinedPlayerID)
local players = GetPlayers()
for playerID, playerName in pairs(players) do
if playerID == joinedPlayerID then
-- Do something
end
end
end
RegisterEvent(eventName, functionName)
Зарегистрирует эту функцию в указанном событии. Оба варианта должны быть строками
function anyEvent()
-- Do something
end
RegisterEvent("onAnyEventHappen", "anyEvent")
-- Do something
TriggerLocalEvent("onAnyEventHappen")
TriggerLocalEvent(eventName)
Будет вызывать каждую зарегистрированную функцию в той же папке плагина.
function anyEvent()
-- Do something
end
RegisterEvent("onAnyEventHappen", "anyEvent")
-- Do something
TriggerLocalEvent("onAnyEventHappen")
TriggerGlobalEvent(eventName)
Будет вызывать каждую зарегистрированную функцию с этим именем события.
-- File A
function anyEvent()
-- Do something
end
RegisterEvent("onAnyEventHappen", "anyEvent")
-- File B
TriggerGlobalEvent("onAnyEventHappen")
TriggerClientEvent(playerServerID, eventName, data)
Вызовет это событие с указанными данными на указанном клиенте (-1 для широковещательной передачи)
function onPlayerJoin(playerServerID)
TriggerClientEvent(playerServerID, "anyEvent", "You just joined the server")
end
RegisterEvent("onAnyEventHappen", "anyEvent")
Set(configID, newValue)
установит настройку конфигурации на новое указанное значение из таблицы ниже|
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 |
Описание | нить |
| любой другой идентификатор приведет к появлению предупреждения на консоли |
Список доступных событий для написания сценариев
События по Умолчанию
Пример использования события:
function onInit()
RegisterEvent("onPlayerJoin", "onPlayerJoin")
end
function onPlayerJoin(playerServerID)
-- Do something
end
Если вы не хотите, чтобы на вашем сервере были гости:
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 |
Идентификатор игрока и идентификатор транспортного средства | Это происходит, когда кто-то удаляет принадлежащее ему транспортное средство |
Пользовательские События
Пользовательские события также могут быть созданы для вашего собственного использования. Это делается примерно так же, как и события по умолчанию.
Пример использования пользовательского события:
function onInit()
RegisterEvent("myCustomEvent", "myCustomEvent")
end
function myCustomEvent(playerServerID, customData)
-- Do something
end
Затем его можно вызвать либо со стороны клиента, либо со стороны сервера, используя соответствующие функции.
Игроки
Когда игрок подключается к вашему серверу, ему назначается serverID, начиная с 0 и далее. serverID используются повторно; если игрок покидает сервер и снова присоединяется, ему не будет назначен новый serverID, он просто получит другой доступный. Когда сервер перезапустится, serverID будут сброшены.
Статические идентификаторы
У игроков в BeamMP есть 3 статических идентификатора, которые можно получить из их serverID: имя, discordID и hardwareID или HWID. (Хотя последний из вышеупомянутых не реализован, мы будем действовать так, как будто он реализован). Каждый из трех типов идентификаторов имеет свое собственное происхождение и сильные/слабые стороны при использовании их для идентификации игрока.
| ТИП ИДЕНТИФИКАТОРА | ПЛЮСЫ | МИНУСЫ | ФУНКЦИЯ ДЛЯ ПОЛУЧЕНИЯ |
|---|---|---|---|
| имя | легко получить, просто | не безопасно | GetPlayerName() |
| 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. В качестве альтернативы вы можете вручную пройти по строке и извлечь необходимую информацию.