Перехватчики разработчика
Это пользовательские хуки, которые могут отслеживать другие плагины. Просто определите метод с тем же именем и ожидаемыми параметрами в вашем плагине для обработки события. Хуки срабатывают в ключевые моменты и полезны для расширения функционала плагина или реагирования на его поведение.
OnFortDeploy
Вызывается перед началом развертывания форта, позволяя другим плагинам предотвратить или изменить развертывание.
object OnFortDeploy(BasePlayer player, TimedExplosive grenade, string pasteFile)
Параметры:
player— Игрок, бросивший гранату
grenade-- Объект TimedExplosive (сама граната)
pasteFile-- Название файла для вставки, который будет развернут
Возвращаемые значения:
Разрешить развертывание (возвращает null):
return null;
Блокировка развертывания с пользовательским сообщением:
return "You cannot deploy forts in this area!";
Блокировка развертывания в фоновом режиме:
return false;
Измените вставленный файл:
return new Dictionary<string, string> { ["PasteFile"] = "AlternateFort" };
Пример использования:
JSON:
// Block deployment in safe zones
object OnFortDeploy(BasePlayer player, TimedExplosive grenade, string pasteFile)
{
if (IsInSafeZone(player.transform.position))
{
return "Cannot deploy forts in safe zones!";
}
return null;
}
// Replace paste file based on player permission
object OnFortDeploy(BasePlayer player, TimedExplosive grenade, string pasteFile)
{
if (permission.UserHasPermission(player.UserIDString, "portablefort.vip"))
{
return new Dictionary<string, string>
{
["PasteFile"] = "VIPFort"
};
}
return null;
}
// Count deployments
object OnFortDeploy(BasePlayer player, TimedExplosive grenade, string pasteFile)
{
IncrementPlayerFortCount(player.userID);
if (GetPlayerFortCount(player.userID) > 5)
{
return "You've reached your fort deployment limit!";
}
return null;
}
OnFortFinishedPasting
Вызывается после того, как форт полностью завершит свое создание и все анимации строительства/улучшения будут завершены.
void OnFortFinishedPasting(BasePlayer player, List<BaseEntity> entities)
Параметры:
player— Игрок, бросивший гранату
entities-- Все созданные объекты (строительные блоки, развертываемые объекты и т. д.)
Возвращаемое значение: None (void hook)
Пример использования:
JSON:
// Announce fort deployment
void OnFortFinishedPasting(BasePlayer player, List<BaseEntity> entities)
{
PrintToChat($"{player.displayName} deployed a fort with {entities.Count} entities!");
}
// Track spawned entities
void OnFortFinishedPasting(BasePlayer player, List<BaseEntity> entities)
{
foreach (var entity in entities)
{
RegisterEntity(player.userID, entity.net.ID);
}
}
// Auto-lock doors
void OnFortFinishedPasting(BasePlayer player, List<BaseEntity> entities)
{
foreach (var entity in entities)
{
Door door = entity as Door;
if (door != null)
{
door.SetFlag(BaseEntity.Flags.Locked, true);
CodeLock codeLock = GameManager.server.CreateEntity("assets/prefabs/locks/keypad/lock.code.prefab") as CodeLock;
if (codeLock != null)
{
codeLock.Spawn();
codeLock.SetParent(door);
// Additional codelock setup...
}
}
}
}
// Trigger server event
void OnFortFinishedPasting(BasePlayer player, List<BaseEntity> entities)
{
Interface.CallHook("OnPlayerDeployedFort", player, entities);
}