{
	"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" : {
		"type" : {
			"type" : "string",
			"description" : "type"
		},
		"subtype" : {
			"anyOf" : [
				{ "type" : "string" },
				{ "type" : "number" }
			],
			"description" : "subtype"
		},
		"sourceID" : {
			"type" : "number",
			"description" : "sourceID"
		},
		"sourceType" : {
			"type" : "string",
			"description" : "sourceType"
		},
		"targetSourceType" : {
			"type" : "string",
			"description" : "targetSourceType"
		},
		"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
						}
					}
				}
			]
		},
		"propagationUpdater" : {
			"anyOf" : [
				{
					"type" : "string"
				},
				{
					"description" : "propagationUpdater",
					"type" : "object",
					"required" : ["type", "parameters"],
					"additionalProperties" : false,
					"properties" : {
						"type" : {
							"type" : "string",
							"description" : "type"
						},
						"parameters" : {
							"type" : "array",
							"description" : "parameters",
							"additionalItems" : true
						}
					}
				}
			]
		},
		"limiters" : {
			"$ref" : "#/definitions/nestedLimiter",
			"description" : "limiter"
		},
		"effectRange" : {
			"type" : "string",
			"description" : "effectRange"
		},
		"val" : {
			"type" : "number",
			"description" : "val"
		},
		"valueType" : {
			"type" : "string",
			"description" : "valueType"
		},
		"addInfo" : {
			"anyOf" : [
				{ "type" : "string" },
				{ "type" : "number" },
				{
					"type" : "array",
					"items" : {
						"anyof" : [
							{ "type" : "string" },
							{ "type" : "number" }
						]
					}
				}
			],
			"description" : "addInfo"
		},
		"duration" : {
                        "anyOf" : [
                                { "type" : "string"},
                                { "type" : "array", "items" : {"type" : "string"} }
                        ],
			"description" : "duration"
		},
		"turns" : {
			"type" : "number",
			"description" : "turns"
		},
		"stacking" : {
			"type" : "string",
			"description" : "stacking"
		},
		"description" : {
			"type" : "string",
			"description" : "description"
		}
	}
}
