rewardable.json 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363
  1. {
  2. "type" : "object",
  3. "$schema" : "http://json-schema.org/draft-04/schema",
  4. "title" : "VCMI map object format",
  5. "description" : "Description of map object class",
  6. "required" : [ "rewards" ],
  7. "additionalProperties" : false,
  8. "definitions" : {
  9. "value" : {
  10. "anyOf" : [
  11. {
  12. "type" : "number"
  13. },
  14. {
  15. "type" : "string" // variable name
  16. },
  17. {
  18. "type" : "array",
  19. "items" : {
  20. "$ref" : "#/definitions/value"
  21. }
  22. },
  23. {
  24. "type" : "object",
  25. "additionalProperties" : true,
  26. "properties" : {
  27. "amount" : { "$ref" : "#/definitions/value" },
  28. "min" : { "$ref" : "#/definitions/value" },
  29. "max" : { "$ref" : "#/definitions/value" }
  30. }
  31. }
  32. ]
  33. },
  34. "identifier" : {
  35. "anyOf" : [
  36. {
  37. "type" : "string"
  38. },
  39. {
  40. "type" : "object",
  41. "additionalProperties" : true,
  42. "properties" : {
  43. "type" : {
  44. "$ref" : "#/definitions/identifier"
  45. },
  46. "anyOf" : {
  47. "type" : "array",
  48. "items" : {
  49. "$ref" : "#/definitions/identifier"
  50. }
  51. },
  52. "noneOf" : {
  53. "type" : "array",
  54. "items" : {
  55. "$ref" : "#/definitions/identifier"
  56. }
  57. }
  58. }
  59. }
  60. ]
  61. },
  62. "identifierList" : {
  63. "type" : "array",
  64. "items" : {
  65. "$ref" : "#/definitions/identifier"
  66. }
  67. },
  68. "identifierWithValueList" : {
  69. "anyOf" : [
  70. {
  71. "type" : "array",
  72. "items" : {
  73. "allOf" : [
  74. { "$ref" : "#/definitions/identifier" },
  75. { "$ref" : "#/definitions/value" }
  76. ]
  77. }
  78. },
  79. {
  80. "type" : "object",
  81. "additionalProperties" : {
  82. "$ref" : "#/definitions/value"
  83. }
  84. }
  85. ]
  86. },
  87. "reward" : {
  88. "type" : "object",
  89. "additionalProperties" : false,
  90. "properties" : {
  91. "appearChance" : {
  92. "type" : "object",
  93. "additionalProperties" : false,
  94. "properties" : {
  95. "dice" : { "type" : "number" },
  96. "min" : { "type" : "number", "minimum" : 0, "exclusiveMaximum" : 100 },
  97. "max" : { "type" : "number", "exclusiveMinimum" : 0, "maximum" : 100 }
  98. }
  99. },
  100. "guards" : { "$ref" : "#/definitions/identifierWithValueList" },
  101. "limiter" : { "$ref" : "#/definitions/limiter" },
  102. "message" : { "$ref" : "#/definitions/message" },
  103. "description" : { "$ref" : "#/definitions/message" },
  104. "heroExperience" : { "$ref" : "#/definitions/value" },
  105. "heroLevel" : { "$ref" : "#/definitions/value" },
  106. "movePercentage" : { "$ref" : "#/definitions/value" },
  107. "movePoints" : { "$ref" : "#/definitions/value" },
  108. "manaPercentage" : { "$ref" : "#/definitions/value" },
  109. "manaPoints" : { "$ref" : "#/definitions/value" },
  110. "manaOverflowFactor" : { "$ref" : "#/definitions/value" },
  111. "removeObject" : { "type" : "boolean" },
  112. "bonuses" : {
  113. "type":"array",
  114. "description": "List of bonuses that will be granted to visiting hero",
  115. "items": { "$ref" : "bonusInstance.json" }
  116. },
  117. "commanderBonuses" : {
  118. "type":"array",
  119. "description": "List of bonuses that will be granted to commander of a visiting hero",
  120. "items": { "$ref" : "bonusInstance.json" }
  121. },
  122. "playerBonuses" : {
  123. "type":"array",
  124. "description": "List of bonuses that will be granted to player that owns visiting hero",
  125. "items": { "$ref" : "bonusInstance.json" }
  126. },
  127. "resources" : { "$ref" : "#/definitions/identifierWithValueList" },
  128. "secondary" : { "$ref" : "#/definitions/identifierWithValueList" },
  129. "creatures" : { "$ref" : "#/definitions/identifierWithValueList" },
  130. "takenCreatures" : { "$ref" : "#/definitions/identifierWithValueList" },
  131. "primary" : { "$ref" : "#/definitions/identifierWithValueList" },
  132. "artifacts" : { "$ref" : "#/definitions/identifierList" },
  133. "takenArtifacts" : { "$ref" : "#/definitions/identifierList" },
  134. "takenArtifactSlots" : { "$ref" : "#/definitions/identifierList" },
  135. "scrolls" : { "$ref" : "#/definitions/identifierList" },
  136. "takenScrolls" : { "$ref" : "#/definitions/identifierList" },
  137. "spells" : { "$ref" : "#/definitions/identifierList" },
  138. "spellCast" : {
  139. "type" : "object",
  140. "additionalProperties" : false,
  141. "properties" : {
  142. "spell" : { "$ref" : "#/definitions/identifier" },
  143. "schoolLevel" : { "type" : "number" }
  144. }
  145. },
  146. "revealTiles" : {
  147. "type" : "object",
  148. "additionalProperties" : false,
  149. "properties" : {
  150. "hide" : { "type" : "boolean" },
  151. "radius" : { "type" : "number" },
  152. "surface" : { "type" : "number" },
  153. "subterra" : { "type" : "number" },
  154. "water" : { "type" : "number" },
  155. "rock" : { "type" : "number" }
  156. }
  157. },
  158. "changeCreatures" : {
  159. "type" : "object",
  160. "additionalProperties" : { "type" : "string" }
  161. }
  162. }
  163. },
  164. "limiter" : {
  165. "type" : "object",
  166. "additionalProperties" : false,
  167. "properties" : {
  168. "dayOfWeek" : { "$ref" : "#/definitions/value" },
  169. "daysPassed" : { "$ref" : "#/definitions/value" },
  170. "heroExperience" : { "$ref" : "#/definitions/value" },
  171. "heroLevel" : { "$ref" : "#/definitions/value" },
  172. "manaPercentage" : { "$ref" : "#/definitions/value" },
  173. "manaPoints" : { "$ref" : "#/definitions/value" },
  174. "canLearnSkills" : { "type" : "boolean" },
  175. "commanderAlive" : { "type" : "boolean" },
  176. "hasExtraCreatures" : { "type" : "boolean" },
  177. "resources" : { "$ref" : "#/definitions/identifierWithValueList" },
  178. "secondary" : { "$ref" : "#/definitions/identifierWithValueList" },
  179. "creatures" : { "$ref" : "#/definitions/identifierWithValueList" },
  180. "canReceiveCreatures" : { "$ref" : "#/definitions/identifierWithValueList" },
  181. "primary" : { "$ref" : "#/definitions/identifierWithValueList" },
  182. "canLearnSpells" : { "$ref" : "#/definitions/identifierList" },
  183. "heroClasses" : { "$ref" : "#/definitions/identifierList" },
  184. "artifacts" : { "$ref" : "#/definitions/identifierList" },
  185. "scrolls" : { "$ref" : "#/definitions/identifierList" },
  186. "spells" : { "$ref" : "#/definitions/identifierList" },
  187. "colors" : { "$ref" : "#/definitions/identifierList" },
  188. "heroes" : { "$ref" : "#/definitions/identifierList" },
  189. "availableSlots" : { "$ref" : "#/definitions/identifierList" },
  190. "anyOf" : {
  191. "type" : "array",
  192. "items" : { "$ref" : "#/definitions/limiter" }
  193. },
  194. "allOf" : {
  195. "type" : "array",
  196. "items" : { "$ref" : "#/definitions/limiter" }
  197. },
  198. "noneOf" : {
  199. "type" : "array",
  200. "items" : { "$ref" : "#/definitions/limiter" }
  201. }
  202. }
  203. },
  204. "message" : {
  205. "anyOf" : [
  206. {
  207. "type" : "array",
  208. "items" : {
  209. "anyOf" : [
  210. { "type" : "number" },
  211. { "type" : "string" }
  212. ]
  213. }
  214. },
  215. {
  216. "type" : "number"
  217. },
  218. {
  219. "type" : "string"
  220. }
  221. ]
  222. },
  223. "variableList" : {
  224. "type" : "object",
  225. "additionalProperties" : {
  226. "$ref" : "#/definitions/identifier"
  227. }
  228. }
  229. },
  230. "properties" : {
  231. "rewards" : {
  232. "type" : "array",
  233. "items" : { "$ref" : "#/definitions/reward" }
  234. },
  235. "onVisited" : {
  236. "type" : "array",
  237. "items" : { "$ref" : "#/definitions/reward" }
  238. },
  239. "onEmpty" : {
  240. "type" : "array",
  241. "items" : { "$ref" : "#/definitions/reward" }
  242. },
  243. "variables" : {
  244. "type" : "object",
  245. "additionalProperties" : false,
  246. "properties" : {
  247. "number" : {
  248. "type" : "object",
  249. "additionalProperties" : {
  250. "$ref" : "#/definitions/value"
  251. }
  252. },
  253. "artifact" : {
  254. "$ref" : "#/definitions/variableList"
  255. },
  256. "spell" : {
  257. "$ref" : "#/definitions/variableList"
  258. },
  259. "primarySkill" : {
  260. "$ref" : "#/definitions/variableList"
  261. },
  262. "secondarySkill" : {
  263. "$ref" : "#/definitions/variableList"
  264. }
  265. }
  266. },
  267. "onGuardedMessage" : {
  268. "$ref" : "#/definitions/message"
  269. },
  270. "onSelectMessage" : {
  271. "$ref" : "#/definitions/message"
  272. },
  273. "description" : {
  274. "$ref" : "#/definitions/message"
  275. },
  276. "notVisitedTooltip" : {
  277. "$ref" : "#/definitions/message"
  278. },
  279. "visitedTooltip" : {
  280. "$ref" : "#/definitions/message"
  281. },
  282. "onVisitedMessage" : {
  283. "$ref" : "#/definitions/message"
  284. },
  285. "onEmptyMessage" : {
  286. "$ref" : "#/definitions/message"
  287. },
  288. "canRefuse": {
  289. "type" : "boolean"
  290. },
  291. "forceCombat": {
  292. "type" : "boolean"
  293. },
  294. "showScoutedPreview": {
  295. "type" : "boolean"
  296. },
  297. "showInInfobox": {
  298. "type" : "boolean"
  299. },
  300. "coastVisitable": {
  301. "type" : "boolean"
  302. },
  303. "visitMode": {
  304. "enum" : [ "unlimited", "once", "hero", "bonus", "limiter", "player", "playerGlobal" ],
  305. "type" : "string"
  306. },
  307. "guardsLayout": {
  308. "type" : "string"
  309. },
  310. "visitLimiter": { "$ref" : "#/definitions/limiter" },
  311. "selectMode": {
  312. "enum" : [ "selectFirst", "selectPlayer", "selectRandom", "selectAll" ],
  313. "type" : "string"
  314. },
  315. "resetParameters" : {
  316. "type" : "object",
  317. "additionalProperties" : false,
  318. "properties" : {
  319. "visitors" : { "type" : "boolean" },
  320. "rewards" : { "type" : "boolean" },
  321. "period" : { "type" : "number" }
  322. }
  323. },
  324. // Properties that might appear since this node is shared with object config
  325. "compatibilityIdentifiers" : { },
  326. "blockedVisitable" : { },
  327. "removable" : { },
  328. "aiValue" : { },
  329. "index" : { },
  330. "base" : { },
  331. "name" : { },
  332. "rmg" : { },
  333. "templates" : { },
  334. "battleground" : { },
  335. "sounds" : { }
  336. }
  337. }