{
    "type": "object",
    "$schema": "http://json-schema.org/draft-04/schema",
    "title": "VCMI bonus system format",
    "description": "Subsection of several formats, used to add generic bonuses to objects",
    "required": [
        "type"
    ],
    "definitions": {
        "nestedLimiter": {
            "anyOf": [
                {
                    "type": "string",
                    "description": "parameterless limiter or boolean operator at start of array"
                },
                {
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                        "type": {
                            "type": "string",
                            "description": "type"
                        },
                        "parameters": {
                            "type": "array",
                            "description": "parameters",
                            "additionalItems": true
                        }
                    }
                },
                {
                    "type": "array",
                    "additionalItems": {
                        "$ref": "#/definitions/nestedLimiter",
                        "description": "nested limiters optionally prefixed with boolean operator"
                    }
                }
            ]
        }
    },
    "additionalProperties": false,
    "properties": {
        "addInfo": {
            "anyOf": [
                {
                    "type": "string"
                },
                {
                    "type": "number"
                },
                {
                    "type": "array",
                    "items": {
                        "anyof": [
                            {
                                "type": "string"
                            },
                            {
                                "type": "number"
                            }
                        ]
                    }
                }
            ],
            "description": "addInfo"
        },
        "description": {
            "type": "string",
            "description": "description"
        },
        "duration": {
            "anyOf": [
                {
                    "type": "string"
                },
                {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                }
            ],
            "description": "duration"
        },
        "effectRange": {
            "type": "string",
            "description": "effectRange"
        },
        "limiters": {
            "$ref": "#/definitions/nestedLimiter",
            "description": "limiter"
        },
        "propagator": {
            "description": "propagator",
            "anyOf": [
                {
                    "type": "string"
                },
                {
                    "type": "array",
                    "items": {
                        "type": "string",
                        "description": "0"
                    }
                }
            ]
        },
        "updater": {
            "anyOf": [
                {
                    "type": "string"
                },
                {
                    "description": "updater",
                    "type": "object",
                    "required": [
                        "type",
                        "parameters"
                    ],
                    "additionalProperties": false,
                    "properties": {
                        "type": {
                            "type": "string",
                            "description": "type"
                        },
                        "parameters": {
                            "type": "array",
                            "description": "parameters",
                            "additionalItems": true
                        }
                    }
                }
            ]
        },
        "sourceID": {
            "type": "number",
            "description": "sourceID"
        },
        "sourceType": {
            "type": "string",
            "description": "sourceType"
        },
        "stacking": {
            "type": "string",
            "description": "stacking"
        },
        "subtype": {
            "anyOf": [
                {
                    "type": "string"
                },
                {
                    "type": "number"
                }
            ],
            "description": "subtype"
        },
        "turns": {
            "type": "number",
            "description": "turns"
        },
        "type": {
            "type": "string",
            "description": "type"
        },
        "val": {
            "type": "number",
            "description": "val"
        },
        "valueType": {
            "type": "string",
            "description": "valueType"
        }
    }
}