Просмотр исходного кода

Pull inventory out into own schema file

Samuel Jaffe 8 лет назад
Родитель
Сommit
712a542a5f
2 измененных файлов с 151 добавлено и 155 удалено
  1. 1 155
      schema/character.json
  2. 150 0
      schema/inventory.json

+ 1 - 155
schema/character.json

@@ -59,161 +59,7 @@
       },
       "type": "array"
     },
-    "inventory": {
-      "properties": {
-        "items": {
-          "items": {
-            "properties": {
-              "name": {"type": "string"},
-              "count": {"type": "integer", "minimum": 1},
-              "countEquipped": {"type": "integer", "minimum": 0},
-              "value": {"$ref": "#/definitions/money"},
-              "page": {"type": "string"},
-              "slot": {
-                "type": "string",
-                "enum": [
-                  "HEAD",
-                  "FACE",
-                  "NECK",
-                  "TORSO",
-                  "BODY",
-                  "WAIST",
-                  "SHOULDER",
-                  "ARM",
-                  "HAND",
-                  "RING",
-                  "FEET",
-                  "MAIN_HAND",
-                  "OFF_HAND",
-                  "ONE_HAND",
-                  "TWO_HANDS"
-                ]
-              },
-              "weight": {"type": "number"},
-              "weapon": {
-                "dependencies":{
-                  
-                },
-                "properties": {
-                  "attackBonus": {"type": "integer"},
-                  "damageBonus": {"type": "integer"},
-                  "damage": {"type": "string"},
-                  "secondaryDamage": {"type": "string"},
-                  "criticalThreat": {"type": "integer", "maximum": 20},
-                  "criticalDamage": {"type": "integer", "minimum": 2},
-                  "secondaryCriticalDamage": {"type": "integer", "minimum": 2},
-                  "range": {
-                    "type": "string"
-                  },
-                  "type": {
-                    "type": "string", 
-                    "enum": [
-                      "Slashing",
-                      "Piercing",
-                      "Bludgeoning"
-                    ]
-                  }
-                },
-                "required": [
-                  "damage",
-                  "type",
-                  "range",
-                  "criticalThreat",
-                  "criticalDamage"
-                ],
-                "type": "object"
-              },
-              "armor": {
-                "properties": {
-                  "bonus": {"type": "integer", "minimum": 0},
-                  "type": {
-                    "type": "string", 
-                    "enum": ["Light", "Medium", "Heavy"]
-                  },
-                  "maxDex": {"type": "integer", "minimum": 0},
-                  "checkPenalty": {"type": "integer", "maximum": 0},
-                  "spellFailure": {"type": "integer", "minimum": 0, "maximum": 100},
-                  "speed": {"type": "integer"}
-                },
-                "type": "object"
-              }
-            },
-            "oneOf": [
-              {
-                "properties": {
-                  "slot": {"enum": ["BODY", "OFF_HAND"]}
-                },
-                "required": [
-                  "armor"
-                ]
-              },
-              {
-                "properties": {
-                  "slot": {
-                    "enum": [
-                      "MAIN_HAND", 
-                      "OFF_HAND", 
-                      "ONE_HAND",
-                      "TWO_HANDS"
-                    ]
-                  }
-                },
-                "required": [
-                  "weapon"
-                ]
-              },
-              {
-                "not": {
-                  "properties": {
-                    "weapon": {},
-                    "armor": {}
-                  }
-                }
-              }
-            ],
-            "required": [
-              "name",
-              "count",
-              "value",
-              "weight"
-            ],
-            "type": "object"
-          },
-          "type": "array"
-        },
-        "equipment": {
-          "properties": {
-            "HEAD": {"type": "string"},
-            "FACE": {"type": "string"},
-            "NECK": {"type": "string"},
-            "TORSO": {"type": "string"},
-            "BODY": {"type": "string"},
-            "WAIST": {"type": "string"},
-            "SHOULDER": {"type": "string"},
-            "ARM": {"type": "string"},
-            "HAND": {"type": "string"},
-            "RING1": {"type": "string"},
-            "RING2": {"type": "string"},
-            "FEET": {"type": "string"},
-            "MAIN_HAND": {"type": "string"},
-            "OFF_HAND": {"type": "string"}
-          },
-          "type": "object"
-        }
-      },
-      "type": "object"
-    }
-  },
-  "definitions": {
-    "money": {
-      "properties": {
-        "pp": {"type": "integer", "minimum": 0},
-        "gp": {"type": "integer", "minimum": 0},
-        "sp": {"type": "integer", "minimum": 0},
-        "cp": {"type": "integer", "minimum": 0}
-      },
-      "type": "object"
-    }
+    "inventory": {"$ref": "file:inventory.json#"}
   },
   "type": "object"
 }

+ 150 - 0
schema/inventory.json

@@ -0,0 +1,150 @@
+{
+  "$schema": "http://json-schema.org/draft-06/schema#",
+  "properties": {
+    "items": {
+      "items": {
+        "properties": {
+          "name": {"type": "string"},
+          "count": {"type": "integer", "minimum": 1},
+          "countEquipped": {"type": "integer", "minimum": 0},
+          "value": {"$ref": "#/definitions/money"},
+          "page": {"type": "string"},
+          "slot": {
+            "allOf":[
+              {"$ref": "#/definitions/slot"},
+              {"not": {"enum": ["RING1", "RING2"]}}
+            ]
+          },
+          "weight": {"type": "number"}
+        },
+        "oneOf": [
+          {
+            "properties": {
+              "weapon": {"$ref": "#/definitions/weapon"},
+              "armor": false
+            }
+          },
+          {
+            "properties": {
+              "weapon": false,
+              "armor": {"$ref": "#/definitions/armor"}
+            }
+          },
+          {
+            "properties": {
+              "weapon": false,
+              "armor": false
+            }
+          }
+        ],
+        "required": [
+          "name",
+          "count",
+          "value",
+          "weight"
+        ],
+        "type": "object"
+      },
+      "type": "array"
+    },
+    "equipment": {
+      "propertyNames": {"$ref": "#/definitions/slot"},
+      "properties": {
+        "RING": false,
+        "ONE_HAND": false,
+        "TWO_HANDS": false
+      },
+      "additionalProperties": {"type": "string"},
+      "type": "object"
+    }
+  },
+  "definitions": {
+    "slot": {
+      "type": "string",
+      "enum": [
+        "HEAD",
+        "FACE",
+        "NECK",
+        "TORSO",
+        "BODY",
+        "WAIST",
+        "SHOULDER",
+        "ARM",
+        "HAND",
+        "RING",
+        "RING1",
+        "RING2",
+        "FEET",
+        "MAIN_HAND",
+        "OFF_HAND",
+        "ONE_HAND",
+        "TWO_HANDS"
+      ]
+    },
+    "weapon": {
+      "dependencies":{
+        "secondaryCriticalDamage": ["secondaryDamage"]
+      },
+      "properties": {
+        "attackBonus": {"type": "integer"},
+        "damageBonus": {"type": "integer"},
+        "damage": {"type": "string"},
+        "secondaryDamage": {"type": "string"},
+        "criticalThreat": {"type": "integer", "maximum": 20},
+        "criticalDamage": {"type": "integer", "minimum": 2},
+        "secondaryCriticalDamage": {"type": "integer", "minimum": 2},
+        "range": {
+          "type": "string"
+        },
+        "type": {
+          "type": "string", 
+          "enum": [
+            "Slashing",
+            "Piercing",
+            "Bludgeoning"
+          ]
+        }
+      },
+      "required": [
+        "damage",
+        "type",
+        "range",
+        "criticalThreat",
+        "criticalDamage"
+      ],
+      "type": "object"
+    },
+    "armor": {
+      "dependencies": {
+        "speed": {"properties": {"type": {"not": {"const": "Shield"}}}}
+      },
+      "properties": {
+        "bonus": {"type": "integer", "minimum": 0},
+        "type": {
+          "type": "string", 
+          "enum": ["Light", "Medium", "Heavy", "Shield"]
+        },
+        "maxDex": {"type": "integer", "minimum": 0},
+        "checkPenalty": {"type": "integer", "maximum": 0},
+        "spellFailure": {"type": "integer", "minimum": 0, "maximum": 100},
+        "speed": {"type": "integer"}
+      },
+      "required": [
+        "bonus",
+        "type",
+        "checkPenalty",
+        "spellFailure"
+      ],
+      "type": "object"
+    },
+    "money": {
+      "properties": {
+        "pp": {"type": "integer", "minimum": 0},
+        "gp": {"type": "integer", "minimum": 0},
+        "sp": {"type": "integer", "minimum": 0},
+        "cp": {"type": "integer", "minimum": 0}
+      },
+      "type": "object"
+    }
+  }
+}