# on_damage

*LSL event*

```lsl
on_damage(integer num_detected)
```

- `integer num_detected`: Number of pending damage events.

This event is triggered when damage has been inflicted on an avatar or task in the world but before damage has been applied or distributed.

All llDetected\* functions that are normally available within a collision event are available while processing this event. Additionally the [llDetectedDamage](/functions/llDetectedDamage/) and [llAdjustDamage](/functions/llAdjustDamage/) methods may be called while processing this event.

```lsl title="How to use" frame="terminal"
on_damage(integer num_detected)
{

}
```

## Caveats

- Requires the region to [allow damage adjustment](/functions/llGetEnv/) for the event to run

## Examples

<details open>
<summary>Example 1</summary>

```lsl collapse={1-41}
string damageType2String(integer type)
{
    if (type == DAMAGE_TYPE_GENERIC)
        return "generic";
    else if (type == DAMAGE_TYPE_ACID)
        return "acid";
    else if (type == DAMAGE_TYPE_BLUDGEONING)
        return "bludgeoning";
    else if (type == DAMAGE_TYPE_COLD)
        return "cold";
    else if (type == DAMAGE_TYPE_ELECTRIC)
        return "electric";
    else if (type == DAMAGE_TYPE_FIRE)
        return "fire";
    else if (type == DAMAGE_TYPE_FORCE)
        return "force";
    else if (type == DAMAGE_TYPE_NECROTIC)
        return "necrotic";
    else if (type == DAMAGE_TYPE_PIERCING)
        return "piercing";
    else if (type == DAMAGE_TYPE_POISON)
        return "poison";
    else if (type == DAMAGE_TYPE_PSYCHIC)
        return "psychic";
    else if (type == DAMAGE_TYPE_RADIANT)
        return "radiant";
    else if (type == DAMAGE_TYPE_SLASHING)
        return "slashing";
    else if (type == DAMAGE_TYPE_SONIC)
        return "sonic";
    else if (type == DAMAGE_TYPE_EMOTIONAL)
        return "emotional";

    return "type " + (string)type;
}

default
{
    on_death()
    {
        llSay(0, "I'll be back!");
    }

    on_damage(integer count)
    {
        integer index;
        for (index = 0; index < count; ++index)
        {
            key object = llDetectedKey(index);
            string object_name = llDetectedName(index);
            key owner = llDetectedOwner(index);
            key rezzer = llDetectedRezzer(index);
            list damage = llDetectedDamage(index);

            string owner_name = llKey2Name(owner);
            string rezzer_name = llKey2Name(rezzer);

            llSay(0, "I was struck by " + object_name + "{" + (string)object + "} owned by " +
                owner_name + "{" + (string)owner + "} rezzed by " +
                rezzer_name + "{" + (string)rezzer + "} for " +
                (string)llList2Float(damage, 0) + " points of " + damageType2String(llList2Integer(damage, 1)) +
                " damage (originally " + (string)llList2Float(damage, 2));

            float new_damage = llList2Float(damage, 0) / 2.0;

            llSay(0, "Reducing damage by 50% to " + (string)new_damage);
            llAdjustDamage(index, new_damage);
            llSay(0, "llDetectDamage = [" + llDumpList2String(llDetectedDamage(index), ", ") + "]");
        }

    }
}
```

</details>

## See also

### Functions

- [llDetectedDamage](/functions/llDetectedDamage/)
- [llAdjustDamage](/functions/llAdjustDamage/)
- [llDamage](/functions/llDamage/)

### Events

- [on_death](/events/on_death/)
- [final_damage](/events/final_damage/)

---

*Source: [On damage](https://wiki.secondlife.com/wiki/On_damage) on the Second Life Wiki. Content from the Second Life Wiki article On damage (revision 1217939, 2025-02-01), CC BY-SA 3.0.*

---

From lsl.dev: https://lsl.dev/events/on_damage/
