# Bonus Limiters

## Predefined Limiters

The limiters take no parameters:

- SHOOTER_ONLY
- DRAGON_NATURE
- IS_UNDEAD
- CREATURE_NATIVE_TERRAIN
- CREATURE_FACTION
- SAME_FACTION
- CREATURES_ONLY
- OPPOSITE_SIDE

Example:

```json
"limiters" : [ "SHOOTER_ONLY" ]
```

## Customizable Limiters

### HAS_ANOTHER_BONUS_LIMITER

Parameters:

- Bonus type
- (optional) bonus subtype
- (optional) bonus sourceType and sourceId in struct
- example: (from Adele's bless):

```json
	"limiters" : [
		{
			"type" : "HAS_ANOTHER_BONUS_LIMITER",
			"parameters" : [
				"GENERAL_DAMAGE_PREMY",
				1,
				{
					"type" : "SPELL_EFFECT",
					"id" : "spell.bless"
				}
				]
		}
	],
```

### CREATURE_TYPE_LIMITER

Parameters:

- Creature id (string)
- (optional) include upgrades - default is false

### CREATURE_ALIGNMENT_LIMITER

Parameters:

- Alignment identifier

### CREATURE_LEVEL_LIMITER

If parameters is empty, level limiter works as CREATURES_ONLY limiter

Parameters:

- Minimal level
- Maximal level

### FACTION_LIMITER

Parameters:

- Faction identifier

### CREATURE_TERRAIN_LIMITER

Parameters:

- Terrain identifier

Example:

```json
"limiters": [ {
	"type":"CREATURE_TYPE_LIMITER",
	"parameters": [ "angel", true ]
} ],
```

```json
"limiters" : [ {
	"type" : "CREATURE_TERRAIN_LIMITER",
	"parameters" : ["sand"]
} ]
```

### UNIT_ON_HEXES

Parameters:

- List of affected battlefield hexes

## Aggregate Limiters

The following limiters must be specified as the first element of a list,
and operate on the remaining limiters in that list:

- allOf (default when no aggregate limiter is specified)
- anyOf
- noneOf

Example:

```json
"limiters" : [
    "noneOf",
    "IS_UNDEAD",
    {
        "type" : "HAS_ANOTHER_BONUS_LIMITER",
        "parameters" : [ "SIEGE_WEAPON" ]
    }
]
```
