LuxelSetManager

Просмотры: 56
  • ŔØ₲ŲĒᏃ᙭Ċ 🌌™ 🅳🆅🆁🅺 Разработчик

Серверный открытый API

ServerOpenAPI — это серверный API LuxelSetManager для других модов.

Он нужен, чтобы сторонний серверный мод мог:

  • реагировать на события LuxelSetManager;

  • выдавать игрокам пресеты оружия, экипировки и точек спавна;

  • удалять доступ к пресетам;

  • уменьшать срок действия уже выданных пресетов.


Где находится API

Класс API находится в серверной части LuxelSetManager, доступен для вызова из модулей:

  • 4_World

  • 5_Mission

Глобальный доступ к API:

ref LXSM_ServerOpenAPI LuxelSetManagerAPI = LXSM_GetServerOpenAPI();

Пример простого вызова:

LXSM_GetServerOpenAPI().GiveWeapon("76561199190066861", "AKM", 7);



Для каких модов это полезно

ServerOpenAPI удобно использовать в модах, где действия игрока должны превращаться в награды или ограничения.

Например:

  • система достижений;

  • BattlePass;

  • система уровней;

  • система репутации;

  • квестовый мод;

  • Deathmatch;

  • мод на фракции;

  • ивентовая система;

  • система ежедневных наград;

  • мод с профессиями или классами персонажей;

  • и т.п.


Важно!

Работайте со SteamID64 игрока.

Обычно его можно получить так:

string PlayerSteamID = Player.GetIdentity().GetPlainId();

Функции API возвращают bool:

  • true — действие успешно выполнено;

  • false — действие не выполнено.

Если действие не выполнено, LuxelSetManager запишет ошибку в свои серверные логи OpenAPI.


Сроки выдачи

Функции вида Give... используют параметр Days.

LXSM_GetServerOpenAPI().GiveWeapon(PlayerSteamID, "AKM", 7);

Значения:

  • -1 — выдать навсегда;

  • 1 и больше — выдать на указанное количество дней.

Если у игрока уже есть этот пресет со временным сроком, новый срок будет добавлен к текущему сроку.

Если у игрока нет этого пресета, срок считается от текущего серверного времени.


Выдача на минуты

Для коротких наград есть функции вида Give...Minutes.

LXSM_GetServerOpenAPI().GiveSpawnPointMinutes(PlayerSteamID, "NorthWestAirfield", 30);

Параметр Minutes должен быть больше 0.

Такие функции удобно использовать для временных ивентов, арен и тестовых наград.


События ServerOpenAPI

События можно переопределять через modded class LXSM_ServerOpenAPI.

OnPlayerRespawned

Вызывается после респавна игрока.

void OnPlayerRespawned(PlayerBase Player, string UsedSpawnPointPresetID, vector SpawnPosition, string UsedSurvivorClassname);

Параметры:

  • Player — игрок после респавна;

  • UsedSpawnPointPresetID — ID использованного пресета точки спавна;

  • SpawnPosition — итоговая позиция игрока;

  • UsedSurvivorClassname — класс созданного персонажа.

Пример:

#ifdef SERVER
modded class LXSM_ServerOpenAPI
{
	override void OnPlayerRespawned(PlayerBase Player, string UsedSpawnPointPresetID, vector SpawnPosition, string UsedSurvivorClassname)
	{
		super.OnPlayerRespawned(Player, UsedSpawnPointPresetID, SpawnPosition, UsedSurvivorClassname);
		
		if (!Player || !Player.GetIdentity())
		{
			return;
		}
		
		string PlayerSteamID = Player.GetIdentity().GetPlainId();
		Print("[MY MOD] PLAYER RESPAWNED: " + PlayerSteamID + " | SPAWN POINT: " + UsedSpawnPointPresetID + " | POSITION: " + SpawnPosition.ToString());
	}
}
#endif

Используйте этот шаблон как основу и добавляйте свою логику после получения SteamID64 игрока.

OnPlayerEquipped

Вызывается после экипирования игрока выбранной экипировкой.

void OnPlayerEquipped(PlayerBase Player, string UsedEquipmentPresetID);

Параметры:

  • Player — игрок;

  • UsedEquipmentPresetID — ID использованного пресета экипировки.

Пример:

#ifdef SERVER
modded class LXSM_ServerOpenAPI
{
	override void OnPlayerEquipped(PlayerBase Player, string UsedEquipmentPresetID)
	{
		super.OnPlayerEquipped(Player, UsedEquipmentPresetID);
		
		if (!Player || !Player.GetIdentity())
		{
			return;
		}
		
		if (UsedEquipmentPresetID == "MedicBlue")
		{
			Print("[MY MOD] MEDIC EQUIPMENT WAS USED BY: " + Player.GetIdentity().GetPlainId());
		}
	}
}
#endif

OnPlayerArmed

Вызывается после выдачи оружия игроку.

void OnPlayerArmed(PlayerBase Player, string UsedMainWeaponPresetID, string UsedSecondaryWeaponPresetID, string UsedPistolWeaponPresetID, string UsedKnifeWeaponPresetID);

Параметры:

  • Player — игрок;

  • UsedMainWeaponPresetID — ID основного оружия;

  • UsedSecondaryWeaponPresetID — ID дополнительного оружия;

  • UsedPistolWeaponPresetID — ID пистолета;

  • UsedKnifeWeaponPresetID — ID холодного оружия.

Пример:

#ifdef SERVER
modded class LXSM_ServerOpenAPI
{
	override void OnPlayerArmed(PlayerBase Player, string UsedMainWeaponPresetID, string UsedSecondaryWeaponPresetID, string UsedPistolWeaponPresetID, string UsedKnifeWeaponPresetID)
	{
		super.OnPlayerArmed(Player, UsedMainWeaponPresetID, UsedSecondaryWeaponPresetID, UsedPistolWeaponPresetID, UsedKnifeWeaponPresetID);
		
		if (!Player || !Player.GetIdentity())
		{
			return;
		}
		
		Print("[MY MOD] PLAYER ARMED: " + Player.GetIdentity().GetPlainId() + " | MAIN: " + UsedMainWeaponPresetID);
	}
}
#endif



Функции выдачи пресетов

Оружие

bool GiveWeapon(string PlayerSteamID, string PresetID, int Days = -1);
bool GiveWeapons(string PlayerSteamID, array<string> PresetIDs, int Days = -1);
bool GiveWeaponMinutes(string PlayerSteamID, string PresetID, int Minutes);
bool GiveWeaponsMinutes(string PlayerSteamID, array<string> PresetIDs, int Minutes);

Пример выдачи одного оружия на 7 дней:

bool Result = LXSM_GetServerOpenAPI().GiveWeapon(PlayerSteamID, "AKM", 7);

Пример выдачи нескольких оружий навсегда:

array<string> WeaponPresetIDs = new array<string>;
WeaponPresetIDs.Insert("AKM");
WeaponPresetIDs.Insert("M4A1");
WeaponPresetIDs.Insert("LAR");

bool Result = LXSM_GetServerOpenAPI().GiveWeapons(PlayerSteamID, WeaponPresetIDs, -1);

Или:

bool Result = LXSM_GetServerOpenAPI().GiveWeapons(PlayerSteamID, {"AKM", "M4A1", "LAR"}, -1);



Экипировка

bool GiveEquipment(string PlayerSteamID, string PresetID, int Days = -1);
bool GiveEquipments(string PlayerSteamID, array<string> PresetIDs, int Days = -1);
bool GiveEquipmentMinutes(string PlayerSteamID, string PresetID, int Minutes);
bool GiveEquipmentsMinutes(string PlayerSteamID, array<string> PresetIDs, int Minutes);

Пример выдачи экипировки на 14 дней:

bool Result = LXSM_GetServerOpenAPI().GiveEquipment(PlayerSteamID, "MilitaryTTSKO", 14);



Точки спавна

bool GiveSpawnPoint(string PlayerSteamID, string PresetID, int Days = -1);
bool GiveSpawnPoints(string PlayerSteamID, array<string> PresetIDs, int Days = -1);
bool GiveSpawnPointMinutes(string PlayerSteamID, string PresetID, int Minutes);
bool GiveSpawnPointsMinutes(string PlayerSteamID, array<string> PresetIDs, int Minutes);

Пример выдачи временной точки спавна на 120 минут (2 часа):

bool Result = LXSM_GetServerOpenAPI().GiveSpawnPointMinutes(PlayerSteamID, "NorthWestAirfield", 120);



Функции удаления пресетов

Оружие

bool RemoveWeapon(string PlayerSteamID, string PresetID);
bool RemoveWeapons(string PlayerSteamID, array<string> PresetIDs);

Экипировка

bool RemoveEquipment(string PlayerSteamID, string PresetID);
bool RemoveEquipments(string PlayerSteamID, array<string> PresetIDs);

Точки спавна

bool RemoveSpawnPoint(string PlayerSteamID, string PresetID);
bool RemoveSpawnPoints(string PlayerSteamID, array<string> PresetIDs);

Пример:

bool Result = LXSM_GetServerOpenAPI().RemoveEquipment(PlayerSteamID, "FactionBlueUniform");

Функции уменьшения срока

Оружие

bool DecreaseWeapon(string PlayerSteamID, string PresetID, int Days);
bool DecreaseWeapons(string PlayerSteamID, array<string> PresetIDs, int Days);

Экипировка

bool DecreaseEquipment(string PlayerSteamID, string PresetID, int Days);
bool DecreaseEquipments(string PlayerSteamID, array<string> PresetIDs, int Days);

Точки спавна

bool DecreaseSpawnPoint(string PlayerSteamID, string PresetID, int Days);
bool DecreaseSpawnPoints(string PlayerSteamID, array<string> PresetIDs, int Days);

Пример штрафа: уменьшить срок владения точкой спавна на 1 день.

bool Result = LXSM_GetServerOpenAPI().DecreaseSpawnPoint(PlayerSteamID, "NorthWestAirfield", 1);

Если после уменьшения срок закончился, доступ к пресету будет удалён.

Если пресет был выдан навсегда, уменьшение срока удалит этот пресет у игрока.


Пример: награда за достижение

Допустим, Ваш мод достижений считает убийства игрока. Когда игрок достигает 100 убийств, можно выдать ему оружие на 7 дней.

#ifdef SERVER
class MyAchievementsHandler
{
	void TryGiveKillsReward(PlayerBase Player, int KillsCount)
	{
		if (!Player || !Player.GetIdentity())
		{
			return;
		}
		if (KillsCount < 100)
		{
			return;
		}
		
		string 	PlayerSteamID 	= Player.GetIdentity().GetPlainId();
		bool 	Result 			= LXSM_GetServerOpenAPI().GiveWeapon(PlayerSteamID, "AKM", 7);
		
		if (Result)
		{
			Print("[MY ACHIEVEMENTS] REWARD GIVEN TO: " + PlayerSteamID);
		}
	}
}
#endif



Пример: награда BattlePass

На определённом уровне BattlePass можно выдать сразу несколько пресетов.

#ifdef SERVER
class MyBattlepassHandler
{
	void GiveLevelReward(PlayerBase Player)
	{
		if (!Player || !Player.GetIdentity())
		{
			return;
		}
		
		string PlayerSteamID = Player.GetIdentity().GetPlainId();
		
		array<string> EquipmentPresetIDs = new array<string>;
		EquipmentPresetIDs.Insert("MilitaryTTSKO");
		EquipmentPresetIDs.Insert("MilitaryGorkaWinter");
		
		LXSM_GetServerOpenAPI().GiveEquipments(PlayerSteamID, EquipmentPresetIDs, 30);
		LXSM_GetServerOpenAPI().GiveSpawnPoint(PlayerSteamID, "NorthWestAirfield", 30);
	}
}
#endif



Пример: система фракций

Когда игрок вступает во фракцию, можно выдать ему форму и точку спавна. Когда выходит — удалить.

#ifdef SERVER
class MyFactionHandler
{
	void OnPlayerJoinedFaction(PlayerBase Player)
	{
		if (!Player || !Player.GetIdentity())
		{
			return;
		}
		
		string PlayerSteamID = Player.GetIdentity().GetPlainId();
		
		LXSM_GetServerOpenAPI().GiveEquipment(PlayerSteamID, "FactionBlueUniform", -1);
		LXSM_GetServerOpenAPI().GiveSpawnPoint(PlayerSteamID, "FactionBlueBase", -1);
	}
	
	void OnPlayerLeftFaction(PlayerBase Player)
	{
		if (!Player || !Player.GetIdentity())
		{
			return;
		}
		
		string PlayerSteamID = Player.GetIdentity().GetPlainId();
		
		LXSM_GetServerOpenAPI().RemoveEquipment(PlayerSteamID, "FactionBlueUniform");
		LXSM_GetServerOpenAPI().RemoveSpawnPoint(PlayerSteamID, "FactionBlueBase");
	}
}
#endif



Выдача доступа ко всем пресетам

Через ServerOpenAPI можно выдать игроку доступ сразу ко всем предустановленным пресетам определённой категории.

Для этого используется специальный ID:

$ALL_PRESETS$

$ALL_PRESETS$ работает отдельно для каждой категории:

  • GiveWeapon - все предустановленные пресеты оружия;

  • GiveEquipment - все предустановленные пресеты экипировки;

  • GiveSpawnPoint - все предустановленные точки спавна.

Пример выдачи всех предустановленных оружий навсегда:

string PlayerSteamID = Player.GetIdentity().GetPlainId();

LXSM_GetServerOpenAPI().GiveWeapon(PlayerSteamID, "$ALL_PRESETS$", -1);

Пример выдачи всех предустановленных экипировок на 7 дней:

string PlayerSteamID = Player.GetIdentity().GetPlainId();

LXSM_GetServerOpenAPI().GiveEquipment(PlayerSteamID, "$ALL_PRESETS$", 7);

Пример выдачи всех предустановленных точек спавна на 60 минут:

string PlayerSteamID = Player.GetIdentity().GetPlainId();

LXSM_GetServerOpenAPI().GiveSpawnPointMinutes(PlayerSteamID, "$ALL_PRESETS$", 60);