ArBajt, MCrow
Share

Unturned BarricadeManager Events

List of events that be used in Rocket plugins from BarricadeManager class.

Important Notes

  • Always subscribe to events in Load() method
  • Always unsubscribe in Unload() to prevent memory leaks
  • Event handlers must match the exact signature of the event
  • Use ref parameters when required by the event signature

Quick Example

public class ExamplePlugin : RocketPlugin<ExampleConfiguration>
{
    protected override void Load()
    {
        BarricadeManager.OnRepaired += HandlePlayerOnRepairing;
    }

    protected override void Unload()
    {
        BarricadeManager.OnRepaired -= HandlePlayerOnRepairing;
    }

    private void HandlePlayerOnRepairing(CSteamID instigatorSteamID, Transform barricadeTransform, float totalHealing)
    {
        // Convert the CSteamID to an UnturnedPlayer class variable
        UnturnedPlayer unturnedPlayer = UnturnedPlayer.FromCSteamID(instigatorSteamID);

        // Informs the player that the barricade is being repaired with information on how much hp it is being repaired for 
        UnturnedChat.Say(unturnedPlayer, $"You repaired the barricade for {totalHealing} HP.!", Color.green);
    }
}

OnRepairRequested

This event is called when player is trying to repair a barricade.

private void HandlePlayerRepairRequested(CSteamID instigatorSteamID, Transform barricadeTransform, ref float pendingTotalHealing, ref bool shouldAllow)
{
    // Convert the CSteamID to an UnturnedPlayer class variable
    UnturnedPlayer unturnedPlayer = UnturnedPlayer.FromCSteamID(instigatorSteamID);

    pendingTotalHealing = 25f; // Healing set at 25 hp

    // Informs the player that the barricade is being repaired with information on how much hp it is being repaired for 
     UnturnedChat.Say(unturnedPlayer, $"You repair a barricade with {pendingTotalHealing} hp", Color.green);
}

onDamageBarricadeRequested

This event is called when player is trying to make a damage to barricade.

private void HandlePlayerDamageBarricadeRequest(CSteamID instigatorSteamID, Transform barricadeTransform, ref ushort pendingTotalDamage, ref bool shouldAllow, EDamageOrigin damageOrigin)
{
    // Convert the CSteamID to an UnturnedPlayer class variable
    UnturnedPlayer unturnedPlayer = UnturnedPlayer.FromCSteamID(instigatorSteamID);

    // Check if the source of damage is NOT a Rocket explosion
    if (damageOrigin != EDamageOrigin.Rocket_Explosion)
    {
        shouldAllow = true; // Allow damage from all sources except Rocket explosions
    }
    else
    {
        shouldAllow = false; // Disallow damage if the damage comes from a Rocket explosion
        UnturnedChat.Say(unturnedPlayer, "You cannot damage barricades with Rocket explosions!"); // Inform the player that Rocket explosions cannot damage barricades
    }
}

onDeployBarricadeRequested

This event is called when player is placing a barricade.

private void HandlePlayerDeployBarricadeRequest(Barricade barricade, ItemBarricadeAsset asset, Transform hit, ref Vector3 point, ref float angle_x, ref float angle_y, ref float angle_z, ref ulong owner, ref ulong group, ref bool shouldAllow)
{
    // Convert the owner SteamID (ulong) to an UnturnedPlayer class variable
    UnturnedPlayer unturnedPlayer = UnturnedPlayer.FromCSteamID(new CSteamID(owner));

    // Checks if the barricade being placed is a Metal Wardrobe (ID 1281)
    if (asset.id == 1281)
    {
        // Automatically rotate the barricade with id 1281(Metal Waredrobe) to 90 degrees on the Y axis
        angle_y += 90f;
        UnturnedChat.Say(unturnedPlayer, "You placed a barricade with custom rotation"); // Informs the player that he has placed a barricade.
    }
}

onOpenStorageRequested

This event is called when player opens a storage

private void HandlePlayerOpenStorageRequested(CSteamID instigator, InteractableStorage storage, ref bool shouldAllow)
{
    // Convert the CSteamID to an UnturnedPlayer class variable
    UnturnedPlayer unturnedPlayer = UnturnedPlayer.FromCSteamID(instigator);

    // Finds the storage based on it's transform
    BarricadeDrop drop = BarricadeManager.FindBarricadeByRootTransform(storage.transform);

    // Check if the player is the owner of the storage
    if (drop.GetServersideData().owner != unturnedPlayer.CSteamID.m_SteamID)
    {
        shouldAllow = false; // Deny access
        UnturnedChat.Say(unturnedPlayer, "You are not the owner of this storage!", Color.red);
    }
    else
    {
        shouldAllow = true; // Allow access
        UnturnedChat.Say(unturnedPlayer, "You opened your storage.", Color.green);
    }
}

onTransformRequested

This event is called when player is trying to transform the barricade for example in Edit Mode(Shift + F1, then Shift + F6)

private void HandlePlayerTransformBarricadeRequested(CSteamID instigator, byte x, byte y, ushort plant, uint instanceID, ref Vector3 point, ref byte angle_x, ref byte angle_y, ref byte angle_z, ref bool shouldAllow)
{
    // Convert the CSteamID to an UnturnedPlayer class variable
    UnturnedPlayer unturnedPlayer = UnturnedPlayer.FromCSteamID(instigator);

    // Get the barricade region at the specified map location
    BarricadeRegion region = BarricadeManager.regions[x, y];

    // Search for the barricade in this region using the instance ID
    BarricadeDrop targetedBarricade = region.drops.FirstOrDefault(d => d.instanceID == instanceID);

    // Check if the player is the owner of the barricade
    if (targetedBarricade.GetServersideData().owner != unturnedPlayer.CSteamID.m_SteamID)
    {
        // If the player is not the owner, block the transformation and rotation of the barricade
        shouldAllow = false;
        UnturnedChat.Say(unturnedPlayer, "You are not the owner of this barricade!", Color.red);
    }
    else
    {
        // If the player is the owner, allow the transformation and rotation of the barricade
        shouldAllow = true;
        UnturnedChat.Say(unturnedPlayer, "You moved your barricade.", Color.green);
    }
}

onBarricadeSpawned

This event is called when the barricade will be put up

private void HandlePlayerBarricadeSpawned(BarricadeRegion region, BarricadeDrop drop)
{
    // Get the SteamID of the player who owns the barricade.
    ulong owner = drop.GetServersideData().owner;

    // Convert the owner SteamID (ulong) to an UnturnedPlayer class variable
    UnturnedPlayer unturnedPlayer = UnturnedPlayer.FromCSteamID(new CSteamID(owner));

    // Send a message to the player confirming the barricade placement
    UnturnedChat.Say(unturnedPlayer, $"You placed a barricade", Color.green);
}

onModifySignRequested

This event is called when player tries to change the text on the sign

private void HandlePlayerModifySignRequested(CSteamID instigator, InteractableSign sign, ref string text, ref bool shouldAllow)
{
    // Convert the CSteamID to an UnturnedPlayer class variable
    UnturnedPlayer unturnedPlayer = UnturnedPlayer.FromCSteamID(instigator);

    // Check if text is not empty or whitespace
    if (!string.IsNullOrEmpty(text) || !string.IsNullOrWhiteSpace(text))
    {
        // Notify player about sign content
        UnturnedChat.Say(unturnedPlayer, $"Sign contains text: '{text}'", Color.green);
    }
    else
    {
        // Notify player about empty sign
        UnturnedChat.Say(unturnedPlayer, "Your sign is empty!", Color.red);
    }
}
Need help?

If you need assistance with the documentation or have any questions, our community is here to help you: