bonus.json 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. {
  2. "type" : "object",
  3. "$schema" : "http://json-schema.org/draft-04/schema",
  4. "title" : "VCMI bonus system format",
  5. "description" : "Subsection of several formats, used to add generic bonuses to objects",
  6. "required" : ["type"],
  7. "definitions" :
  8. {
  9. "nestedLimiter" : {
  10. "anyOf" : [
  11. {
  12. "type" : "string",
  13. "enum" : [ "SHOOTER_ONLY", "DRAGON_NATURE", "IS_UNDEAD", "CREATURE_NATIVE_TERRAIN", "CREATURE_FACTION", "SAME_FACTION", "CREATURES_ONLY", "OPPOSITE_SIDE" ],
  14. "description" : "parameterless limiter or boolean operator at start of array"
  15. },
  16. {
  17. "type" : "object",
  18. "additionalProperties" : false,
  19. "properties" : {
  20. "type" : {
  21. "type" : "string",
  22. "enum" : [ "CREATURE_TYPE_LIMITER", "HAS_ANOTHER_BONUS_LIMITER", "CREATURE_ALIGNMENT_LIMITER", "FACTION_LIMITER", "CREATURE_LEVEL_LIMITER", "CREATURE_TERRAIN_LIMITER", "UNIT_ON_HEXES" ],
  23. "description" : "type"
  24. },
  25. "parameters" : {
  26. "type" : "array",
  27. "description" : "parameters",
  28. "additionalItems" : true
  29. }
  30. }
  31. },
  32. {
  33. "type" : "array",
  34. "additionalItems" : {
  35. "$ref" : "#/definitions/nestedLimiter",
  36. "description" : "nested limiters optionally prefixed with boolean operator"
  37. }
  38. }
  39. ]
  40. }
  41. },
  42. "additionalProperties" : false,
  43. "properties" : {
  44. "type" : {
  45. "type" : "string",
  46. "description" : "type"
  47. },
  48. "subtype" : {
  49. "type" : "string",
  50. "description" : "subtype"
  51. },
  52. "sourceID" : {
  53. "type" : "number",
  54. "description" : "sourceID"
  55. },
  56. "sourceType" : {
  57. "type" : "string",
  58. "enum" : [ "ARTIFACT", "ARTIFACT_INSTANCE", "OBJECT_TYPE", "OBJECT_INSTANCE", "CREATURE_ABILITY", "TERRAIN_NATIVE", "TERRAIN_OVERLAY", "SPELL_EFFECT", "TOWN_STRUCTURE", "HERO_BASE_SKILL", "SECONDARY_SKILL", "HERO_SPECIAL", "ARMY", "CAMPAIGN_BONUS", "STACK_EXPERIENCE", "COMMANDER", "GLOBAL", "OTHER", ],
  59. "description" : "sourceType"
  60. },
  61. "targetSourceType" : {
  62. "type" : "string",
  63. "enum" : [ "ARTIFACT", "ARTIFACT_INSTANCE", "OBJECT_TYPE", "OBJECT_INSTANCE", "CREATURE_ABILITY", "TERRAIN_NATIVE", "TERRAIN_OVERLAY", "SPELL_EFFECT", "TOWN_STRUCTURE", "HERO_BASE_SKILL", "SECONDARY_SKILL", "HERO_SPECIAL", "ARMY", "CAMPAIGN_BONUS", "STACK_EXPERIENCE", "COMMANDER", "GLOBAL", "OTHER", ],
  64. "description" : "targetSourceType"
  65. },
  66. "propagator" : {
  67. "description" : "propagator",
  68. "type" : "string",
  69. "enum" : [ "BATTLE_WIDE", "VISITED_TOWN_AND_VISITOR", "PLAYER_PROPAGATOR", "HERO", "TEAM_PROPAGATOR", "GLOBAL_EFFECT" ]
  70. },
  71. "updater" : {
  72. "anyOf" : [
  73. {
  74. "type" : "string",
  75. "enum" : [ "TIMES_HERO_LEVEL", "TIMES_STACK_LEVEL", "ARMY_MOVEMENT", "BONUS_OWNER_UPDATER" ]
  76. },
  77. {
  78. "description" : "updater",
  79. "type" : "object",
  80. "required" : ["type", "parameters"],
  81. "additionalProperties" : false,
  82. "properties" : {
  83. "type" : {
  84. "type" : "string",
  85. "enum" : [ "GROWS_WITH_LEVEL", "ARMY_MOVEMENT" ],
  86. "description" : "type"
  87. },
  88. "parameters" : {
  89. "type" : "array",
  90. "description" : "parameters",
  91. "additionalItems" : true
  92. }
  93. }
  94. }
  95. ]
  96. },
  97. "propagationUpdater" : {
  98. "anyOf" : [
  99. {
  100. "type" : "string",
  101. "enum" : [ "TIMES_HERO_LEVEL", "TIMES_STACK_LEVEL", "ARMY_MOVEMENT", "BONUS_OWNER_UPDATER" ]
  102. },
  103. {
  104. "description" : "propagationUpdater",
  105. "type" : "object",
  106. "required" : ["type", "parameters"],
  107. "additionalProperties" : false,
  108. "properties" : {
  109. "type" : {
  110. "type" : "string",
  111. "enum" : [ "GROWS_WITH_LEVEL", "ARMY_MOVEMENT" ],
  112. "description" : "type"
  113. },
  114. "parameters" : {
  115. "type" : "array",
  116. "description" : "parameters",
  117. "additionalItems" : true
  118. }
  119. }
  120. }
  121. ]
  122. },
  123. "limiters" : {
  124. "$ref" : "#/definitions/nestedLimiter",
  125. "description" : "limiter"
  126. },
  127. "effectRange" : {
  128. "type" : "string",
  129. "enum" : [ "NO_LIMIT", "ONLY_DISTANCE_FIGHT", "ONLY_MELEE_FIGHT" ],
  130. "description" : "effectRange"
  131. },
  132. "val" : {
  133. "type" : "number",
  134. "description" : "val"
  135. },
  136. "valueType" : {
  137. "type" : "string",
  138. "enum" : ["ADDITIVE_VALUE", "BASE_NUMBER", "PERCENT_TO_ALL", "PERCENT_TO_BASE", "PERCENT_TO_SOURCE", "PERCENT_TO_TARGET_TYPE", "INDEPENDENT_MAX", "INDEPENDENT_MIN" ],
  139. "description" : "valueType"
  140. },
  141. "addInfo" : {
  142. "anyOf" : [
  143. { "type" : "string" },
  144. { "type" : "number" },
  145. {
  146. "type" : "array",
  147. "items" : {
  148. "anyof" : [
  149. { "type" : "string" },
  150. { "type" : "number" }
  151. ]
  152. }
  153. }
  154. ],
  155. "description" : "addInfo"
  156. },
  157. "duration" : {
  158. "anyOf" : [
  159. {
  160. "type" : "string",
  161. "enum" : ["PERMANENT", "ONE_BATTLE", "ONE_DAY", "ONE_WEEK", "N_TURNS", "N_DAYS", "UNTIL_BEING_ATTACKED", "UNTIL_ATTACK", "STACK_GETS_TURN", "COMMANDER_KILLED", "UNTIL_OWN_ATTACK" ]
  162. },
  163. {
  164. "type" : "array",
  165. "items" : {
  166. "type" : "string",
  167. "enum" : ["PERMANENT", "ONE_BATTLE", "ONE_DAY", "ONE_WEEK", "N_TURNS", "N_DAYS", "UNTIL_BEING_ATTACKED", "UNTIL_ATTACK", "STACK_GETS_TURN", "COMMANDER_KILLED", "UNTIL_OWN_ATTACK" ]
  168. }
  169. }
  170. ],
  171. "description" : "duration"
  172. },
  173. "turns" : {
  174. "type" : "number",
  175. "description" : "turns"
  176. },
  177. "stacking" : {
  178. "type" : "string",
  179. "description" : "stacking"
  180. },
  181. "description" : {
  182. "type" : "string",
  183. "description" : "description"
  184. }
  185. }
  186. }