Серверный публичный API
Публичный API предназначен для совместимости LuxelPartyMod с другими модами. Через него можно получить список друзей игрока и проверить, находятся ли два игрока в друзьях.
Основа
В модулях World (4_World) и Mission (5_Mission) на стороне сервера доступен класс LXPM_PublicAPI, который можно получить через LXPM_GetPublicAPI():
ref LXPM_PublicAPI LuxelPartyModAPI = LXPM_GetPublicAPI();
Для получения API используйте LXPM_GetPublicAPI(), создавать отдельный экземпляр класса не нужно.
SteamID64 и результаты функций
Используйте SteamID64, который возвращает GetPlainId():
string PlayerSteamID = CurrentIdentity.GetPlainId();
Здесь CurrentIdentity должен быть действующим PlayerIdentity. Хэшированный ID из GetId() для этих функций не подходит.
Функции, возвращающие array<string>, различают два случая:
- Пустой массив: данные игрока найдены, но подходящих друзей нет.
NULL: данные самого игрока не найдены или их не удалось прочитать.
Функции, возвращающие array<PlayerIdentity>, возвращают массив подключённых игроков. Если подходящих игроков нет или исходные данные не найдены, массив будет пустым. Они не возвращают PlayerIdentity офлайн-игроков.
GetPlayerFriendsIDs
array<string> GetPlayerFriendsIDs(string SteamID);
Описание: возвращает массив со SteamID64 всех друзей игрока (в том числе офлайн).
Параметры:
SteamID: SteamID64 игрока, у которого необходимо получить список друзей.
Возвращаемое значение:
Возвращает пустой массив, если у игрока нет друзей.
Возвращает NULL, если данные искомого игрока не найдены или не удалось их прочитать (например, указан неверный SteamID).
ref array<string> FriendSteamIDs = LXPM_GetPublicAPI().GetPlayerFriendsIDs("7656119XXXXXXXXXX");
if (FriendSteamIDs)
{
foreach (string FriendSteamID: FriendSteamIDs)
{
Print(FriendSteamID);
}
}
GetPlayerOnlineFriendsIDs
array<string> GetPlayerOnlineFriendsIDs(string SteamID);
Описание: возвращает массив со SteamID64 друзей игрока, которые в данный момент онлайн (в их число не входят онлайн-игроки, находящиеся в офлайн-режиме).
Параметры:
SteamID: SteamID64 игрока, у которого необходимо получить список друзей.
Возвращаемое значение:
Возвращает пустой массив, если у игрока нет онлайн-друзей, которые не находятся в офлайн-режиме.
Возвращает NULL, если данные искомого игрока не найдены или не удалось их прочитать (например, указан неверный SteamID).
ref array<string> OnlineFriendSteamIDs = LXPM_GetPublicAPI().GetPlayerOnlineFriendsIDs("7656119XXXXXXXXXX");
GetPlayerOnlineFriendsIDs_Pure
array<string> GetPlayerOnlineFriendsIDs_Pure(string SteamID);
Описание: возвращает массив со SteamID64 друзей игрока, которые в данный момент онлайн (в том числе тех, кто онлайн и находится в офлайн-режиме).
Параметры:
SteamID: SteamID64 игрока, у которого необходимо получить список друзей.
Возвращаемое значение:
Возвращает пустой массив, если у игрока нет онлайн-друзей, в том числе находящихся в офлайн-режиме.
Возвращает NULL, если данные искомого игрока не найдены или не удалось их прочитать (например, указан неверный SteamID).
ref array<string> ConnectedFriendSteamIDs = LXPM_GetPublicAPI().GetPlayerOnlineFriendsIDs_Pure("7656119XXXXXXXXXX");
GetPlayerFriendsIdentities
array<PlayerIdentity> GetPlayerFriendsIdentities(string SteamID);
Описание: возвращает массив с PlayerIdentity друзей игрока, которые подключены к серверу (в том числе находящихся в офлайн-режиме). У отключённых от сервера игроков нет действующего PlayerIdentity, поэтому в результат они не входят.
Параметры:
SteamID: SteamID64 игрока, у которого необходимо получить список друзей.
Возвращаемое значение:
Возвращает пустой массив, если подходящих онлайн-друзей нет или данные искомого игрока не найдены. В отличие от функций, возвращающих SteamID64, результатом здесь будет массив, а не NULL.
ref array<PlayerIdentity> FriendIdentities = LXPM_GetPublicAPI().GetPlayerFriendsIdentities("7656119XXXXXXXXXX");
GetPlayerOnlineFriendsIdentities
array<PlayerIdentity> GetPlayerOnlineFriendsIdentities(string SteamID);
Описание: возвращает массив с PlayerIdentity друзей игрока, которые в данный момент онлайн (в их число не входят онлайн-игроки, находящиеся в офлайн-режиме).
Параметры:
SteamID: SteamID64 игрока, у которого необходимо получить список друзей.
Возвращаемое значение:
Возвращает пустой массив, если подходящих онлайн-друзей нет или данные искомого игрока не найдены. В отличие от функций, возвращающих SteamID64, результатом здесь будет массив, а не NULL.
ref array<PlayerIdentity> OnlineFriendIdentities = LXPM_GetPublicAPI().GetPlayerOnlineFriendsIdentities("7656119XXXXXXXXXX");
GetPlayerOnlineFriendsIdentities_Pure
array<PlayerIdentity> GetPlayerOnlineFriendsIdentities_Pure(string SteamID);
Описание: возвращает массив с PlayerIdentity друзей игрока, которые в данный момент онлайн (в том числе тех, кто онлайн и находится в офлайн-режиме).
Параметры:
SteamID: SteamID64 игрока, у которого необходимо получить список друзей.
Возвращаемое значение:
Возвращает пустой массив, если у игрока нет онлайн-друзей или данные искомого игрока не найдены. В отличие от функций, возвращающих SteamID64, результатом здесь будет массив, а не NULL.
ref array<PlayerIdentity> ConnectedFriendIdentities = LXPM_GetPublicAPI().GetPlayerOnlineFriendsIdentities_Pure("7656119XXXXXXXXXX");
IsFriends
bool IsFriends(string FirstSteamID, string SecondSteamID);
Описание: проверяет, находятся ли два игрока в друзьях. Проверка выполняется по списку друзей первого игрока.
Параметры:
FirstSteamID: SteamID64 первого игрока, по списку друзей которого выполняется проверка.SecondSteamID: SteamID64 второго игрока.
Результат: true, если второй игрок записан другом первого. Если первый игрок не найден или записи о дружбе нет, возвращается false.
При согласованных списках друзей порядок SteamID не влияет на результат. При этом сама функция не проверяет данные второго игрока отдельно, поэтому использовать её для проверки взаимного соответствия записей в базе не следует.
bool AreFriends = LXPM_GetPublicAPI().IsFriends("7656119XXXXXXXX01", "7656119XXXXXXXX02");
События загрузки и завершения
OnLoaded() вызывается при создании серверного обработчика пати-мода. OnDestroyed() вызывается при его завершении. Для своей интеграции эти методы можно переопределить:
#ifdef SERVER
#ifdef LUXELPARTYMOD_SERVER
modded class LXPM_PublicAPI
{
override void OnLoaded()
{
super.OnLoaded();
// INITIALIZE YOUR INTEGRATION HERE.
}
override void OnDestroyed()
{
// STOP YOUR INTEGRATION HERE.
super.OnDestroyed();
}
}
#endif
#endif
Пример проверки двух игроков
Пример серверной функции, которой передаются две действующие личности игроков:
#ifdef SERVER
#ifdef LUXELPARTYMOD_SERVER
class MyPartyIntegration
{
static bool ArePlayersFriends(PlayerIdentity FirstIdentity, PlayerIdentity SecondIdentity)
{
if (!FirstIdentity || !SecondIdentity)
{
return false;
}
string FirstSteamID = FirstIdentity.GetPlainId();
string SecondSteamID = SecondIdentity.GetPlainId();
return LXPM_GetPublicAPI().IsFriends(FirstSteamID, SecondSteamID);
}
}
#endif
#endif
В своём моде дайте классу имя в стиле Вашего проекта. Вызывайте функцию после загрузки пати-мода, когда нужны сведения о конкретных игроках. Не выполняйте поиск друзей каждый кадр, если для Вашей задачи достаточно проверки в момент действия.
Что нужно учитывать
GetPlayerFriendsIDsможет вернуть друзей игрока, который сейчас офлайн, если его данные есть на сервере.- Полученные массивы являются результатом запроса. Изменение массива не добавляет и не удаляет друзей в базе пати.
- Не сохраняйте
PlayerIdentityнадолго без учёта отключения игрока. Если действие отложено, получите актуальное подключение к моменту выполнения. - Для
foreachсначала присвойте результат функции переменной, как в примере выше. Не обходите вызов API прямо в заголовке цикла. - В этом публичном API нет функций принудительного добавления и удаления друзей. Не заменяйте их прямой записью JSON при работающем сервере.