浏览代码

changed indentation from spaces to tabs

Henning Koehler 8 年之前
父节点
当前提交
36d671b093
共有 4 个文件被更改,包括 933 次插入933 次删除
  1. 36 36
      config/schemas/skill.json
  2. 796 796
      config/skills.json
  3. 65 65
      lib/CSkillHandler.cpp
  4. 36 36
      lib/CSkillHandler.h

+ 36 - 36
config/schemas/skill.json

@@ -1,48 +1,48 @@
 {
 
-	"type":"object",
-	"$schema": "http://json-schema.org/draft-04/schema",
+	"type" : "object",
+	"$schema" : "http://json-schema.org/draft-04/schema",
 
 	"title" : "VCMI skill format",
 	"description" : "Format used to replace bonuses provided by secondary skills in VCMI",
 
 	"definitions" : {
 
-        "skillBonus":{
-            "type": "object",
-            "description": "Set of bonuses provided by skill at given level",
-            "required" : ["effects"],
-            "properties": {
-                "description": {
-                    "type": "string",
-                    "description": "localizable description"
-                },
-                "effects": {
-                    "type": "object",
-                    "additionalProperties" : {
-                        "$ref" : "vcmi:bonus"
-                    }
-                }
-            }
-        },
+		"skillBonus" : {
+			"type" : "object",
+			"description" : "Set of bonuses provided by skill at given level",
+			"required" : ["effects"],
+			"properties" : {
+				"description" : {
+					"type" : "string",
+					"description" : "localizable description"
+				},
+				"effects" : {
+					"type" : "object",
+					"additionalProperties" : {
+						"$ref" : "vcmi:bonus"
+					}
+				}
+			}
+		},
 
-        "required" : ["basic", "advanced", "expert"],
+		"required" : ["basic", "advanced", "expert"],
 
-        "properties": {
-            "base":{
-                "type": "object",
-                "description": "will be merged with all levels",
-                "additionalProperties": true
-            },
-            "basic":{
-                "$ref" : "#/definitions/skillBonus"
-            },
-            "advanced":{
-                "$ref" : "#/definitions/skillBonus"
-            },
-            "expert":{
-                "$ref" : "#/definitions/skillBonus"
-            }
-        }
+		"properties" : {
+			"base" : {
+				"type" : "object",
+				"description" : "will be merged with all levels",
+				"additionalProperties" : true
+			},
+			"basic" : {
+				"$ref" : "#/definitions/skillBonus"
+			},
+			"advanced" : {
+				"$ref" : "#/definitions/skillBonus"
+			},
+			"expert" : {
+				"$ref" : "#/definitions/skillBonus"
+			}
+		}
 	}
 }

+ 796 - 796
config/skills.json

@@ -1,798 +1,798 @@
 {
-    "pathfinding" : {
-        "base" : {
-            "description" : "",
-            "effects" : {
-                "main" : {
-                    "subtype" : "skill.pathfinding",
-                    "type" : "SECONDARY_SKILL_PREMY",
-                    "valueType" : "BASE_NUMBER"
-                }
-            }
-        },
-        "basic" : {
-            "effects" : {
-                "main" : { "val" : 25 }
-            }
-        },
-        "advanced" : {
-            "effects" : {
-                "main" : { "val" : 50 }
-            }
-        },
-        "expert" : {
-            "effects" : {
-                "main" : { "val" : 75 }
-            }
-        }
-    },
-    "archery" : {
-        "base" : {
-            "description" : "",
-            "effects" : {
-                "main" : {
-                    "subtype" : "skill.archery",
-                    "type" : "SECONDARY_SKILL_PREMY",
-                    "valueType" : "BASE_NUMBER"
-                }
-            }
-        },
-        "basic" : {
-            "effects" : {
-                "main" : { "val" : 10 }
-            }
-        },
-        "advanced" : {
-            "effects" : {
-                "main" : { "val" : 25 }
-            }
-        },
-        "expert" : {
-            "effects" : {
-                "main" : { "val" : 50 }
-            }
-        }
-    },
-    "logistics" : {
-        "base" : {
-            "description" : "",
-            "effects" : {
-                "main" : {
-                    "subtype" : "skill.logistics",
-                    "type" : "SECONDARY_SKILL_PREMY",
-                    "valueType" : "BASE_NUMBER"
-                }
-            }
-        },
-        "basic" : {
-            "effects" : {
-                "main" : { "val" : 10 }
-            }
-        },
-        "advanced" : {
-            "effects" : {
-                "main" : { "val" : 20 }
-            }
-        },
-        "expert" : {
-            "effects" : {
-                "main" : { "val" : 30 }
-            }
-        }
-    },
-    "scouting" : {
-        "base" : {
-            "description" : "",
-            "effects" : {
-                "main" : {
-                    "type" : "SIGHT_RADIOUS",
-                    "valueType" : "BASE_NUMBER"
-                }
-            }
-        },
-        "basic" : {
-            "effects" : {
-                "main" : { "val" : 1 }
-            }
-        },
-        "advanced" : {
-            "effects" : {
-                "main" : { "val" : 2 }
-            }
-        },
-        "expert" : {
-            "effects" : {
-                "main" : { "val" : 3 }
-            }
-        }
-    },
-    "diplomacy" : {
-        "base" : {
-            "description" : "",
-            "effects" : {
-                "main" : {
-                    "subtype" : "skill.diplomacy",
-                    "type" : "SECONDARY_SKILL_PREMY",
-                    "valueType" : "BASE_NUMBER"
-                },
-                "surr" : {
-                    "type" : "SURRENDER_DISCOUNT",
-                    "val" : 20,
-                    "valueType" : "BASE_NUMBER"
-                }
-            }
-        },
-        "basic" : {
-            "effects" : {
-                "main" : { "val" : 1 },
-                "surr" : { "val" : 20 }
-            }
-        },
-        "advanced" : {
-            "effects" : {
-                "main" : { "val": 2 },
-                "surr" : { "val" : 40 }
-            }
-        },
-        "expert" : {
-            "effects" : {
-                "main" : { "val": 3 },
-                "surr" : { "val" : 60 }
-            }
-        }
-    },
-    "navigation" : {
-        "base" : {
-            "description" : "",
-            "effects" : {
-                "main" : {
-                    "subtype" : "skill.navigation",
-                    "type" : "SECONDARY_SKILL_PREMY",
-                    "valueType" : "BASE_NUMBER"
-                }
-            }
-        },
-        "basic" : {
-            "effects" : {
-                "main" : { "val" : 50 }
-            }
-        },
-        "advanced" : {
-            "effects" : {
-                "main" : { "val" : 100 }
-            }
-        },
-        "expert" : {
-            "effects" : {
-                "main" : { "val" : 150 }
-            }
-        }
-    },
-    "leadership" : {
-        "base" : {
-            "description" : "",
-            "effects" : {
-                "main" : {
-                    "type" : "MORALE",
-                    "valueType" : "BASE_NUMBER"
-                }
-            }
-        },
-        "basic" : {
-            "effects" : {
-                "main" : { "val" : 1 }
-            }
-        },
-        "advanced" : {
-            "effects" : {
-                "main" : { "val" : 2 }
-            }
-        },
-        "expert" : {
-            "effects" : {
-                "main" : { "val" : 3 }
-            }
-        }
-    },
-    "wisdom" : {
-        "base" : {
-            "description" : "",
-            "effects" : {
-                "main" : {
-                    "subtype" : "skill.wisdom",
-                    "type" : "SECONDARY_SKILL_PREMY",
-                    "valueType" : "BASE_NUMBER"
-                }
-            }
-        },
-        "basic" : {
-            "effects" : {
-                "main" : { "val" : 1 }
-            }
-        },
-        "advanced" : {
-            "effects" : {
-                "main" : { "val" : 2 }
-            }
-        },
-        "expert" : {
-            "effects" : {
-                "main" : { "val" : 3 }
-            }
-        }
-    },
-    "mysticism" : {
-        "base" : {
-            "description" : "",
-            "effects" : {
-                "main" : {
-                    "type" : "MANA_REGENERATION",
-                    "valueType" : "BASE_NUMBER"
-                }
-            }
-        },
-        "basic" : {
-            "effects" : {
-                "main" : { "val" : 1 }
-            }
-        },
-        "advanced" : {
-            "effects" : {
-                "main" : { "val" : 2 }
-            }
-        },
-        "expert" : {
-            "effects" : {
-                "main" : { "val" : 3 }
-            }
-        }
-    },
-    "luck" : {
-        "base" : {
-            "description" : "",
-            "effects" : {
-                "main" : {
-                    "type" : "LUCK",
-                    "valueType" : "BASE_NUMBER"
-                }
-            }
-        },
-        "basic" : {
-            "effects" : {
-                "main" : { "val" : 1 }
-            }
-        },
-        "advanced" : {
-            "effects" : {
-                "main" : { "val" : 2 }
-            }
-        },
-        "expert" : {
-            "effects" : {
-                "main" : { "val" : 3 }
-            }
-        }
-    },
-    "ballistics" : {
-        "base" : {
-            "description" : "",
-            "effects" : {
-                "main" : {
-                    "subtype" : "skill.ballistics",
-                    "type" : "SECONDARY_SKILL_PREMY",
-                    "valueType" : "BASE_NUMBER"
-                },
-                "ctrl" : {
-                    "subtype" : "creature.catapult",
-                    "type" : "MANUAL_CONTROL",
-                    "val" : 100,
-                    "valueType" : "BASE_NUMBER"
-                }
-            }
-        },
-        "basic" : {
-            "effects" : {
-                "main" : { "val" : 1 }
-            }
-        },
-        "advanced" : {
-            "effects" : {
-                "main" : { "val" : 2 }
-            }
-        },
-        "expert" : {
-            "effects" : {
-                "main" : { "val" : 3 }
-            }
-        }
-    },
-    "eagleEye" : {
-        "base" : {
-            "description" : "",
-            "effects" : {
-                "main" : {
-                    "subtype" : "skill.eagleEye",
-                    "type" : "SECONDARY_SKILL_PREMY",
-                    "valueType" : "BASE_NUMBER"
-                },
-                "val2" : {
-                    "subtype" : "skill.eagleEye",
-                    "type" : "SECONDARY_SKILL_VAL2",
-                    "valueType" : "BASE_NUMBER"
-                }
-            }
-        },
-        "basic" : {
-            "effects" : {
-                "main" : { "val" : 40 },
-                "val2" : { "val" : 2 }
-            }
-        },
-        "advanced" : {
-            "effects" : {
-                "main" : { "val" : 50 },
-                "val2" : { "val" : 3 }
-            }
-        },
-        "expert" : {
-            "effects" : {
-                "main" : { "val" : 60 },
-                "val2" : { "val" : 4 }
-            }
-        }
-    },
-    "necromancy" : {
-        "base" : {
-            "description" : "",
-            "effects" : {
-                "main" : {
-                    "subtype" : "skill.necromancy",
-                    "type" : "SECONDARY_SKILL_PREMY",
-                    "valueType" : "BASE_NUMBER"
-                }
-            }
-        },
-        "basic" : {
-            "effects" : {
-                "main" : { "val" : 10 }
-            }
-        },
-        "advanced" : {
-            "effects" : {
-                "main" : { "val" : 20 }
-            }
-        },
-        "expert" : {
-            "effects" : {
-                "main" : { "val" : 30 }
-            }
-        }
-    },
-    "estates" : {
-        "base" : {
-            "effects" : {
-                "main" : {
-                    "subtype" : "skill.estates",
-                    "type" : "SECONDARY_SKILL_PREMY",
-                    "valueType" : "BASE_NUMBER"
-                }
-            }
-        },
-        "basic" : {
-            "description" : "With Basic Estates, a hero contributes 125 gold per day to your cause.",
-            "effects" : {
-                "main" : { "val" : 125 }
-            }
-        },
-        "advanced" : {
-            "description" : "With Advanced Estates, a hero contributes 250 gold per day to your cause.",
-            "effects" : {
-                "main" : { "val" : 250 }
-            }
-        },
-        "expert" : {
-            "description" : "With Expert Estates, a hero contributes 500 gold per day to your cause.",
-            "effects" : {
-                "main" : { "val" : 500 }
-            }
-        }
-    },
-    "fireMagic" : {
-        "base" : {
-            "description" : "",
-            "effects" : {
-                "main" : {
-                    "subtype" : "skill.fireMagic",
-                    "type" : "SECONDARY_SKILL_PREMY",
-                    "valueType" : "BASE_NUMBER"
-                }
-            }
-        },
-        "basic" : {
-            "effects" : {
-                "main" : { "val" : 1 }
-            }
-        },
-        "advanced" : {
-            "effects" : {
-                "main" : { "val" : 2 }
-            }
-        },
-        "expert" : {
-            "effects" : {
-                "main" : { "val" : 3 }
-            }
-        }
-    },
-    "airMagic" : {
-        "base" : {
-            "description" : "",
-            "effects" : {
-                "main" : {
-                    "subtype" : "skill.airMagic",
-                    "type" : "SECONDARY_SKILL_PREMY",
-                    "valueType" : "BASE_NUMBER"
-                }
-            }
-        },
-        "basic" : {
-            "effects" : {
-                "main" : { "val" : 1 }
-            }
-        },
-        "advanced" : {
-            "effects" : {
-                "main" : { "val" : 2 }
-            }
-        },
-        "expert" : {
-            "effects" : {
-                "main" : { "val" : 3 }
-            }
-        }
-    },
-    "waterMagic" : {
-        "base" : {
-            "description" : "",
-            "effects" : {
-                "main" : {
-                    "subtype" : "skill.waterMagic",
-                    "type" : "SECONDARY_SKILL_PREMY",
-                    "valueType" : "BASE_NUMBER"
-                }
-            }
-        },
-        "basic" : {
-            "effects" : {
-                "main" : { "val" : 1 }
-            }
-        },
-        "advanced" : {
-            "effects" : {
-                "main" : { "val" : 2 }
-            }
-        },
-        "expert" : {
-            "effects" : {
-                "main" : { "val" : 3 }
-            }
-        }
-    },
-    "earthMagic" : {
-        "base" : {
-            "description" : "",
-            "effects" : {
-                "main" : {
-                    "subtype" : "skill.earthMagic",
-                    "type" : "SECONDARY_SKILL_PREMY",
-                    "valueType" : "BASE_NUMBER"
-                }
-            }
-        },
-        "basic" : {
-            "effects" : {
-                "main" : { "val" : 1 }
-            }
-        },
-        "advanced" : {
-            "effects" : {
-                "main" : { "val" : 2 }
-            }
-        },
-        "expert" : {
-            "effects" : {
-                "main" : { "val" : 3 }
-            }
-        }
-    },
-    "scholar" : {
-        "base" : {
-            "description" : "",
-            "effects" : {
-                "main" : {
-                    "subtype" : "skill.scholar",
-                    "type" : "SECONDARY_SKILL_PREMY",
-                    "valueType" : "BASE_NUMBER"
-                }
-            }
-        },
-        "basic" : {
-            "effects" : {
-                "main" : { "val" : 2 }
-            }
-        },
-        "advanced" : {
-            "effects" : {
-                "main" : { "val" : 3 }
-            }
-        },
-        "expert" : {
-            "effects" : {
-                "main" : { "val" : 4 }
-            }
-        }
-    },
-    "tactics" : {
-        "base" : {
-            "description" : "",
-            "effects" : {
-                "main" : {
-                    "subtype" : "skill.tactics",
-                    "type" : "SECONDARY_SKILL_PREMY",
-                    "valueType" : "BASE_NUMBER"
-                }
-            }
-        },
-        "basic" : {
-            "effects" : {
-                "main" : { "val" : 3 }
-            }
-        },
-        "advanced" : {
-            "effects" : {
-                "main" : { "val" : 5 }
-            }
-        },
-        "expert" : {
-            "effects" : {
-                "main" : { "val" : 7 }
-            }
-        }
-    },
-    "artillery" : {
-        "base" : {
-            "description" : "",
-            "effects" : {
-                "main" : {
-                    "subtype" : "skill.artillery",
-                    "type" : "SECONDARY_SKILL_PREMY",
-                    "valueType" : "BASE_NUMBER"
-                },
-                "val2" : {
-                    "subtype" : "skill.artillery",
-                    "type" : "SECONDARY_SKILL_VAL2",
-                    "valueType" : "BASE_NUMBER"
-                },
-                "ctrl" : {
-                    "subtype" : "creature.ballista",
-                    "type" : "MANUAL_CONTROL",
-                    "val" : 100,
-                    "valueType" : "BASE_NUMBER"
-                }
-            }
-        },
-        "basic" : {
-            "effects" : {
-                "main" : { "val" : 50 },
-                "val2" : { "val" : 0 }
-            }
-        },
-        "advanced" : {
-            "effects" : {
-                "main" : { "val" : 75 },
-                "val2" : { "val" : 1 }
-            }
-        },
-        "expert" : {
-            "effects" : {
-                "main" : { "val" : 100 },
-                "val2" : { "val" : 1 }
-            }
-        }
-    },
-    "learning" : {
-        "base" : {
-            "description" : "",
-            "effects" : {
-                "main" : {
-                    "subtype" : "skill.learning",
-                    "type" : "SECONDARY_SKILL_PREMY",
-                    "valueType" : "BASE_NUMBER"
-                }
-            }
-        },
-        "basic" : {
-            "effects" : {
-                "main" : { "val" : 5 }
-            }
-        },
-        "advanced" : {
-            "effects" : {
-                "main" : { "val" : 10 }
-            }
-        },
-        "expert" : {
-            "effects" : {
-                "main" : { "val" : 15 }
-            }
-        }
-    },
-    "offence" : {
-        "base" : {
-            "description" : "",
-            "effects" : {
-                "main" : {
-                    "subtype" : "skill.offence",
-                    "type" : "SECONDARY_SKILL_PREMY",
-                    "valueType" : "BASE_NUMBER"
-                }
-            }
-        },
-        "basic" : {
-            "effects" : {
-                "main" : { "val" : 10 }
-            }
-        },
-        "advanced" : {
-            "effects" : {
-                "main" : { "val" : 20 }
-            }
-        },
-        "expert" : {
-            "effects" : {
-                "main" : { "val" : 30 }
-            }
-        }
-    },
-    "armorer" : {
-        "base" : {
-            "description" : "",
-            "effects" : {
-                "main" : {
-                    "subtype" : "skill.armorer",
-                    "type" : "SECONDARY_SKILL_PREMY",
-                    "valueType" : "BASE_NUMBER"
-                }
-            }
-        },
-        "basic" : {
-            "effects" : {
-                "main" : { "val" : 5 }
-            }
-        },
-        "advanced" : {
-            "effects" : {
-                "main" : { "val" : 10 }
-            }
-        },
-        "expert" : {
-            "effects" : {
-                "main" : { "val" : 15 }
-            }
-        }
-    },
-    "intelligence" : {
-        "base" : {
-            "description" : "",
-            "effects" : {
-                "main" : {
-                    "subtype" : "skill.intelligence",
-                    "type" : "SECONDARY_SKILL_PREMY",
-                    "valueType" : "BASE_NUMBER"
-                }
-            }
-        },
-        "basic" : {
-            "effects" : {
-                "main" : { "val" : 25 }
-            }
-        },
-        "advanced" : {
-            "effects" : {
-                "main" : { "val" : 50 }
-            }
-        },
-        "expert" : {
-            "effects" : {
-                "main" : { "val" : 100 }
-            }
-        }
-    },
-    "sorcery" : {
-        "base" : {
-            "description" : "",
-            "effects" : {
-                "main" : {
-                    "subtype" : "skill.sorcery",
-                    "type" : "SECONDARY_SKILL_PREMY",
-                    "valueType" : "BASE_NUMBER"
-                }
-            }
-        },
-        "basic" : {
-            "effects" : {
-                "main" : { "val" : 5 }
-            }
-        },
-        "advanced" : {
-            "effects" : {
-                "main" : { "val" : 10 }
-            }
-        },
-        "expert" : {
-            "effects" : {
-                "main" : { "val" : 15 }
-            }
-        }
-    },
-    "resistance" : {
-        "base" : {
-            "description" : "",
-            "effects" : {
-                "main" : {
-                    "subtype" : "skill.resistance",
-                    "type" : "SECONDARY_SKILL_PREMY",
-                    "valueType" : "BASE_NUMBER"
-                }
-            }
-        },
-        "basic" : {
-            "effects" : {
-                "main" : { "val" : 5 }
-            }
-        },
-        "advanced" : {
-            "effects" : {
-                "main" : { "val" : 10 }
-            }
-        },
-        "expert" : {
-            "effects" : {
-                "main" : { "val" : 20 }
-            }
-        }
-    },
-    "firstAid" : {
-        "base" : {
-            "description" : "",
-            "effects" : {
-                "main" : {
-                    "subtype" : "skill.firstAid",
-                    "type" : "SECONDARY_SKILL_PREMY",
-                    "valueType" : "BASE_NUMBER"
-                },
-                "ctrl" : {
-                    "subtype" : "creature.firstAidTent",
-                    "type" : "MANUAL_CONTROL",
-                    "val" : 100,
-                    "valueType" : "BASE_NUMBER"
-                }
-            }
-        },
-        "basic" : {
-            "effects" : {
-                "main" : { "val" : 50 }
-            }
-        },
-        "advanced" : {
-            "effects" : {
-                "main" : { "val" : 75 }
-            }
-        },
-        "expert" : {
-            "effects" : {
-                "main" : { "val" : 100 }
-            }
-        }
-    }
+	"pathfinding" : {
+		"base" : {
+			"description" : "",
+			"effects" : {
+				"main" : {
+					"subtype" : "skill.pathfinding",
+					"type" : "SECONDARY_SKILL_PREMY",
+					"valueType" : "BASE_NUMBER"
+				}
+			}
+		},
+		"basic" : {
+			"effects" : {
+				"main" : { "val" : 25 }
+			}
+		},
+		"advanced" : {
+			"effects" : {
+				"main" : { "val" : 50 }
+			}
+		},
+		"expert" : {
+			"effects" : {
+				"main" : { "val" : 75 }
+			}
+		}
+	},
+	"archery" : {
+		"base" : {
+			"description" : "",
+			"effects" : {
+				"main" : {
+					"subtype" : "skill.archery",
+					"type" : "SECONDARY_SKILL_PREMY",
+					"valueType" : "BASE_NUMBER"
+				}
+			}
+		},
+		"basic" : {
+			"effects" : {
+				"main" : { "val" : 10 }
+			}
+		},
+		"advanced" : {
+			"effects" : {
+				"main" : { "val" : 25 }
+			}
+		},
+		"expert" : {
+			"effects" : {
+				"main" : { "val" : 50 }
+			}
+		}
+	},
+	"logistics" : {
+		"base" : {
+			"description" : "",
+			"effects" : {
+				"main" : {
+					"subtype" : "skill.logistics",
+					"type" : "SECONDARY_SKILL_PREMY",
+					"valueType" : "BASE_NUMBER"
+				}
+			}
+		},
+		"basic" : {
+			"effects" : {
+				"main" : { "val" : 10 }
+			}
+		},
+		"advanced" : {
+			"effects" : {
+				"main" : { "val" : 20 }
+			}
+		},
+		"expert" : {
+			"effects" : {
+				"main" : { "val" : 30 }
+			}
+		}
+	},
+	"scouting" : {
+		"base" : {
+			"description" : "",
+			"effects" : {
+				"main" : {
+					"type" : "SIGHT_RADIOUS",
+					"valueType" : "BASE_NUMBER"
+				}
+			}
+		},
+		"basic" : {
+			"effects" : {
+				"main" : { "val" : 1 }
+			}
+		},
+		"advanced" : {
+			"effects" : {
+				"main" : { "val" : 2 }
+			}
+		},
+		"expert" : {
+			"effects" : {
+				"main" : { "val" : 3 }
+			}
+		}
+	},
+	"diplomacy" : {
+		"base" : {
+			"description" : "",
+			"effects" : {
+				"main" : {
+					"subtype" : "skill.diplomacy",
+					"type" : "SECONDARY_SKILL_PREMY",
+					"valueType" : "BASE_NUMBER"
+				},
+				"surr" : {
+					"type" : "SURRENDER_DISCOUNT",
+					"val" : 20,
+					"valueType" : "BASE_NUMBER"
+				}
+			}
+		},
+		"basic" : {
+			"effects" : {
+				"main" : { "val" : 1 },
+				"surr" : { "val" : 20 }
+			}
+		},
+		"advanced" : {
+			"effects" : {
+				"main" : { "val": 2 },
+				"surr" : { "val" : 40 }
+			}
+		},
+		"expert" : {
+			"effects" : {
+				"main" : { "val": 3 },
+				"surr" : { "val" : 60 }
+			}
+		}
+	},
+	"navigation" : {
+		"base" : {
+			"description" : "",
+			"effects" : {
+				"main" : {
+					"subtype" : "skill.navigation",
+					"type" : "SECONDARY_SKILL_PREMY",
+					"valueType" : "BASE_NUMBER"
+				}
+			}
+		},
+		"basic" : {
+			"effects" : {
+				"main" : { "val" : 50 }
+			}
+		},
+		"advanced" : {
+			"effects" : {
+				"main" : { "val" : 100 }
+			}
+		},
+		"expert" : {
+			"effects" : {
+				"main" : { "val" : 150 }
+			}
+		}
+	},
+	"leadership" : {
+		"base" : {
+			"description" : "",
+			"effects" : {
+				"main" : {
+					"type" : "MORALE",
+					"valueType" : "BASE_NUMBER"
+				}
+			}
+		},
+		"basic" : {
+			"effects" : {
+				"main" : { "val" : 1 }
+			}
+		},
+		"advanced" : {
+			"effects" : {
+				"main" : { "val" : 2 }
+			}
+		},
+		"expert" : {
+			"effects" : {
+				"main" : { "val" : 3 }
+			}
+		}
+	},
+	"wisdom" : {
+		"base" : {
+			"description" : "",
+			"effects" : {
+				"main" : {
+					"subtype" : "skill.wisdom",
+					"type" : "SECONDARY_SKILL_PREMY",
+					"valueType" : "BASE_NUMBER"
+				}
+			}
+		},
+		"basic" : {
+			"effects" : {
+				"main" : { "val" : 1 }
+			}
+		},
+		"advanced" : {
+			"effects" : {
+				"main" : { "val" : 2 }
+			}
+		},
+		"expert" : {
+			"effects" : {
+				"main" : { "val" : 3 }
+			}
+		}
+	},
+	"mysticism" : {
+		"base" : {
+			"description" : "",
+			"effects" : {
+				"main" : {
+					"type" : "MANA_REGENERATION",
+					"valueType" : "BASE_NUMBER"
+				}
+			}
+		},
+		"basic" : {
+			"effects" : {
+				"main" : { "val" : 1 }
+			}
+		},
+		"advanced" : {
+			"effects" : {
+				"main" : { "val" : 2 }
+			}
+		},
+		"expert" : {
+			"effects" : {
+				"main" : { "val" : 3 }
+			}
+		}
+	},
+	"luck" : {
+		"base" : {
+			"description" : "",
+			"effects" : {
+				"main" : {
+					"type" : "LUCK",
+					"valueType" : "BASE_NUMBER"
+				}
+			}
+		},
+		"basic" : {
+			"effects" : {
+				"main" : { "val" : 1 }
+			}
+		},
+		"advanced" : {
+			"effects" : {
+				"main" : { "val" : 2 }
+			}
+		},
+		"expert" : {
+			"effects" : {
+				"main" : { "val" : 3 }
+			}
+		}
+	},
+	"ballistics" : {
+		"base" : {
+			"description" : "",
+			"effects" : {
+				"main" : {
+					"subtype" : "skill.ballistics",
+					"type" : "SECONDARY_SKILL_PREMY",
+					"valueType" : "BASE_NUMBER"
+				},
+				"ctrl" : {
+					"subtype" : "creature.catapult",
+					"type" : "MANUAL_CONTROL",
+					"val" : 100,
+					"valueType" : "BASE_NUMBER"
+				}
+			}
+		},
+		"basic" : {
+			"effects" : {
+				"main" : { "val" : 1 }
+			}
+		},
+		"advanced" : {
+			"effects" : {
+				"main" : { "val" : 2 }
+			}
+		},
+		"expert" : {
+			"effects" : {
+				"main" : { "val" : 3 }
+			}
+		}
+	},
+	"eagleEye" : {
+		"base" : {
+			"description" : "",
+			"effects" : {
+				"main" : {
+					"subtype" : "skill.eagleEye",
+					"type" : "SECONDARY_SKILL_PREMY",
+					"valueType" : "BASE_NUMBER"
+				},
+				"val2" : {
+					"subtype" : "skill.eagleEye",
+					"type" : "SECONDARY_SKILL_VAL2",
+					"valueType" : "BASE_NUMBER"
+				}
+			}
+		},
+		"basic" : {
+			"effects" : {
+				"main" : { "val" : 40 },
+				"val2" : { "val" : 2 }
+			}
+		},
+		"advanced" : {
+			"effects" : {
+				"main" : { "val" : 50 },
+				"val2" : { "val" : 3 }
+			}
+		},
+		"expert" : {
+			"effects" : {
+				"main" : { "val" : 60 },
+				"val2" : { "val" : 4 }
+			}
+		}
+	},
+	"necromancy" : {
+		"base" : {
+			"description" : "",
+			"effects" : {
+				"main" : {
+					"subtype" : "skill.necromancy",
+					"type" : "SECONDARY_SKILL_PREMY",
+					"valueType" : "BASE_NUMBER"
+				}
+			}
+		},
+		"basic" : {
+			"effects" : {
+				"main" : { "val" : 10 }
+			}
+		},
+		"advanced" : {
+			"effects" : {
+				"main" : { "val" : 20 }
+			}
+		},
+		"expert" : {
+			"effects" : {
+				"main" : { "val" : 30 }
+			}
+		}
+	},
+	"estates" : {
+		"base" : {
+			"effects" : {
+				"main" : {
+					"subtype" : "skill.estates",
+					"type" : "SECONDARY_SKILL_PREMY",
+					"valueType" : "BASE_NUMBER"
+				}
+			}
+		},
+		"basic" : {
+			"description" : "With Basic Estates, a hero contributes 125 gold per day to your cause.",
+			"effects" : {
+				"main" : { "val" : 125 }
+			}
+		},
+		"advanced" : {
+			"description" : "With Advanced Estates, a hero contributes 250 gold per day to your cause.",
+			"effects" : {
+				"main" : { "val" : 250 }
+			}
+		},
+		"expert" : {
+			"description" : "With Expert Estates, a hero contributes 500 gold per day to your cause.",
+			"effects" : {
+				"main" : { "val" : 500 }
+			}
+		}
+	},
+	"fireMagic" : {
+		"base" : {
+			"description" : "",
+			"effects" : {
+				"main" : {
+					"subtype" : "skill.fireMagic",
+					"type" : "SECONDARY_SKILL_PREMY",
+					"valueType" : "BASE_NUMBER"
+				}
+			}
+		},
+		"basic" : {
+			"effects" : {
+				"main" : { "val" : 1 }
+			}
+		},
+		"advanced" : {
+			"effects" : {
+				"main" : { "val" : 2 }
+			}
+		},
+		"expert" : {
+			"effects" : {
+				"main" : { "val" : 3 }
+			}
+		}
+	},
+	"airMagic" : {
+		"base" : {
+			"description" : "",
+			"effects" : {
+				"main" : {
+					"subtype" : "skill.airMagic",
+					"type" : "SECONDARY_SKILL_PREMY",
+					"valueType" : "BASE_NUMBER"
+				}
+			}
+		},
+		"basic" : {
+			"effects" : {
+				"main" : { "val" : 1 }
+			}
+		},
+		"advanced" : {
+			"effects" : {
+				"main" : { "val" : 2 }
+			}
+		},
+		"expert" : {
+			"effects" : {
+				"main" : { "val" : 3 }
+			}
+		}
+	},
+	"waterMagic" : {
+		"base" : {
+			"description" : "",
+			"effects" : {
+				"main" : {
+					"subtype" : "skill.waterMagic",
+					"type" : "SECONDARY_SKILL_PREMY",
+					"valueType" : "BASE_NUMBER"
+				}
+			}
+		},
+		"basic" : {
+			"effects" : {
+				"main" : { "val" : 1 }
+			}
+		},
+		"advanced" : {
+			"effects" : {
+				"main" : { "val" : 2 }
+			}
+		},
+		"expert" : {
+			"effects" : {
+				"main" : { "val" : 3 }
+			}
+		}
+	},
+	"earthMagic" : {
+		"base" : {
+			"description" : "",
+			"effects" : {
+				"main" : {
+					"subtype" : "skill.earthMagic",
+					"type" : "SECONDARY_SKILL_PREMY",
+					"valueType" : "BASE_NUMBER"
+				}
+			}
+		},
+		"basic" : {
+			"effects" : {
+				"main" : { "val" : 1 }
+			}
+		},
+		"advanced" : {
+			"effects" : {
+				"main" : { "val" : 2 }
+			}
+		},
+		"expert" : {
+			"effects" : {
+				"main" : { "val" : 3 }
+			}
+		}
+	},
+	"scholar" : {
+		"base" : {
+			"description" : "",
+			"effects" : {
+				"main" : {
+					"subtype" : "skill.scholar",
+					"type" : "SECONDARY_SKILL_PREMY",
+					"valueType" : "BASE_NUMBER"
+				}
+			}
+		},
+		"basic" : {
+			"effects" : {
+				"main" : { "val" : 2 }
+			}
+		},
+		"advanced" : {
+			"effects" : {
+				"main" : { "val" : 3 }
+			}
+		},
+		"expert" : {
+			"effects" : {
+				"main" : { "val" : 4 }
+			}
+		}
+	},
+	"tactics" : {
+		"base" : {
+			"description" : "",
+			"effects" : {
+				"main" : {
+					"subtype" : "skill.tactics",
+					"type" : "SECONDARY_SKILL_PREMY",
+					"valueType" : "BASE_NUMBER"
+				}
+			}
+		},
+		"basic" : {
+			"effects" : {
+				"main" : { "val" : 3 }
+			}
+		},
+		"advanced" : {
+			"effects" : {
+				"main" : { "val" : 5 }
+			}
+		},
+		"expert" : {
+			"effects" : {
+				"main" : { "val" : 7 }
+			}
+		}
+	},
+	"artillery" : {
+		"base" : {
+			"description" : "",
+			"effects" : {
+				"main" : {
+					"subtype" : "skill.artillery",
+					"type" : "SECONDARY_SKILL_PREMY",
+					"valueType" : "BASE_NUMBER"
+				},
+				"val2" : {
+					"subtype" : "skill.artillery",
+					"type" : "SECONDARY_SKILL_VAL2",
+					"valueType" : "BASE_NUMBER"
+				},
+				"ctrl" : {
+					"subtype" : "creature.ballista",
+					"type" : "MANUAL_CONTROL",
+					"val" : 100,
+					"valueType" : "BASE_NUMBER"
+				}
+			}
+		},
+		"basic" : {
+			"effects" : {
+				"main" : { "val" : 50 },
+				"val2" : { "val" : 0 }
+			}
+		},
+		"advanced" : {
+			"effects" : {
+				"main" : { "val" : 75 },
+				"val2" : { "val" : 1 }
+			}
+		},
+		"expert" : {
+			"effects" : {
+				"main" : { "val" : 100 },
+				"val2" : { "val" : 1 }
+			}
+		}
+	},
+	"learning" : {
+		"base" : {
+			"description" : "",
+			"effects" : {
+				"main" : {
+					"subtype" : "skill.learning",
+					"type" : "SECONDARY_SKILL_PREMY",
+					"valueType" : "BASE_NUMBER"
+				}
+			}
+		},
+		"basic" : {
+			"effects" : {
+				"main" : { "val" : 5 }
+			}
+		},
+		"advanced" : {
+			"effects" : {
+				"main" : { "val" : 10 }
+			}
+		},
+		"expert" : {
+			"effects" : {
+				"main" : { "val" : 15 }
+			}
+		}
+	},
+	"offence" : {
+		"base" : {
+			"description" : "",
+			"effects" : {
+				"main" : {
+					"subtype" : "skill.offence",
+					"type" : "SECONDARY_SKILL_PREMY",
+					"valueType" : "BASE_NUMBER"
+				}
+			}
+		},
+		"basic" : {
+			"effects" : {
+				"main" : { "val" : 10 }
+			}
+		},
+		"advanced" : {
+			"effects" : {
+				"main" : { "val" : 20 }
+			}
+		},
+		"expert" : {
+			"effects" : {
+				"main" : { "val" : 30 }
+			}
+		}
+	},
+	"armorer" : {
+		"base" : {
+			"description" : "",
+			"effects" : {
+				"main" : {
+					"subtype" : "skill.armorer",
+					"type" : "SECONDARY_SKILL_PREMY",
+					"valueType" : "BASE_NUMBER"
+				}
+			}
+		},
+		"basic" : {
+			"effects" : {
+				"main" : { "val" : 5 }
+			}
+		},
+		"advanced" : {
+			"effects" : {
+				"main" : { "val" : 10 }
+			}
+		},
+		"expert" : {
+			"effects" : {
+				"main" : { "val" : 15 }
+			}
+		}
+	},
+	"intelligence" : {
+		"base" : {
+			"description" : "",
+			"effects" : {
+				"main" : {
+					"subtype" : "skill.intelligence",
+					"type" : "SECONDARY_SKILL_PREMY",
+					"valueType" : "BASE_NUMBER"
+				}
+			}
+		},
+		"basic" : {
+			"effects" : {
+				"main" : { "val" : 25 }
+			}
+		},
+		"advanced" : {
+			"effects" : {
+				"main" : { "val" : 50 }
+			}
+		},
+		"expert" : {
+			"effects" : {
+				"main" : { "val" : 100 }
+			}
+		}
+	},
+	"sorcery" : {
+		"base" : {
+			"description" : "",
+			"effects" : {
+				"main" : {
+					"subtype" : "skill.sorcery",
+					"type" : "SECONDARY_SKILL_PREMY",
+					"valueType" : "BASE_NUMBER"
+				}
+			}
+		},
+		"basic" : {
+			"effects" : {
+				"main" : { "val" : 5 }
+			}
+		},
+		"advanced" : {
+			"effects" : {
+				"main" : { "val" : 10 }
+			}
+		},
+		"expert" : {
+			"effects" : {
+				"main" : { "val" : 15 }
+			}
+		}
+	},
+	"resistance" : {
+		"base" : {
+			"description" : "",
+			"effects" : {
+				"main" : {
+					"subtype" : "skill.resistance",
+					"type" : "SECONDARY_SKILL_PREMY",
+					"valueType" : "BASE_NUMBER"
+				}
+			}
+		},
+		"basic" : {
+			"effects" : {
+				"main" : { "val" : 5 }
+			}
+		},
+		"advanced" : {
+			"effects" : {
+				"main" : { "val" : 10 }
+			}
+		},
+		"expert" : {
+			"effects" : {
+				"main" : { "val" : 20 }
+			}
+		}
+	},
+	"firstAid" : {
+		"base" : {
+			"description" : "",
+			"effects" : {
+				"main" : {
+					"subtype" : "skill.firstAid",
+					"type" : "SECONDARY_SKILL_PREMY",
+					"valueType" : "BASE_NUMBER"
+				},
+				"ctrl" : {
+					"subtype" : "creature.firstAidTent",
+					"type" : "MANUAL_CONTROL",
+					"val" : 100,
+					"valueType" : "BASE_NUMBER"
+				}
+			}
+		},
+		"basic" : {
+			"effects" : {
+				"main" : { "val" : 50 }
+			}
+		},
+		"advanced" : {
+			"effects" : {
+				"main" : { "val" : 75 }
+			}
+		},
+		"expert" : {
+			"effects" : {
+				"main" : { "val" : 100 }
+			}
+		}
+	}
 }

+ 65 - 65
lib/CSkillHandler.cpp

@@ -37,14 +37,14 @@ CSkill::LevelInfo::~LevelInfo()
 
 CSkill::CSkill(SecondarySkill id) : id(id)
 {
-    if(id == SecondarySkill::DEFAULT)
-        identifier = "default";
-    else
-        identifier = NSecondarySkill::names[id];
-    // init levels
-    LevelInfo emptyLevel;
-    for(int level = 1; level < NSecondarySkill::levels.size(); level++)
-        levels.push_back(emptyLevel);
+	if(id == SecondarySkill::DEFAULT)
+		identifier = "default";
+	else
+		identifier = NSecondarySkill::names[id];
+	// init levels
+	LevelInfo emptyLevel;
+	for(int level = 1; level < NSecondarySkill::levels.size(); level++)
+		levels.push_back(emptyLevel);
 }
 
 CSkill::~CSkill()
@@ -53,42 +53,42 @@ CSkill::~CSkill()
 
 void CSkill::addNewBonus(const std::shared_ptr<Bonus>& b, int level)
 {
-    b->source = Bonus::SECONDARY_SKILL;
+	b->source = Bonus::SECONDARY_SKILL;
 	b->sid = id;
-    b->duration = Bonus::PERMANENT;
-    b->description = identifier;
-    levels[level-1].effects.push_back(b);
+	b->duration = Bonus::PERMANENT;
+	b->description = identifier;
+	levels[level-1].effects.push_back(b);
 }
 
 void CSkill::setDescription(const std::string & desc, int level)
 {
-    levels[level-1].description = desc;
+	levels[level-1].description = desc;
 }
 
 const std::vector<std::shared_ptr<Bonus>> & CSkill::getBonus(int level) const
 {
-    return levels[level-1].effects;
+	return levels[level-1].effects;
 }
 
 const std::string & CSkill::getDescription(int level) const
 {
-    return levels[level-1].description;
+	return levels[level-1].description;
 }
 
 DLL_LINKAGE std::ostream & operator<<(std::ostream &out, const CSkill::LevelInfo &info)
 {
-    out << "(\"" << info.description << "\", [";
-    for(int i=0; i < info.effects.size(); i++)
-        out << (i ? "," : "") << info.effects[i]->Description();
-    return out << "])";
+	out << "(\"" << info.description << "\", [";
+	for(int i=0; i < info.effects.size(); i++)
+		out << (i ? "," : "") << info.effects[i]->Description();
+	return out << "])";
 }
 
 DLL_LINKAGE std::ostream & operator<<(std::ostream &out, const CSkill &skill)
 {
-    out << "Skill(" << (int)skill.id << "," << skill.identifier << "): [";
-    for(int i=0; i < skill.levels.size(); i++)
-        out << (i ? "," : "") << skill.levels[i];
-    return out << "]";
+	out << "Skill(" << (int)skill.id << "," << skill.identifier << "): [";
+	for(int i=0; i < skill.levels.size(); i++)
+		out << (i ? "," : "") << skill.levels[i];
+	return out << "]";
 }
 
 std::string CSkill::toString() const
@@ -101,14 +101,14 @@ std::string CSkill::toString() const
 ///CSkillHandler
 CSkillHandler::CSkillHandler()
 {
-    for(int id = 0; id < GameConstants::SKILL_QUANTITY; id++)
-    {
-        CSkill * skill = new CSkill(SecondarySkill(id));
-        for(int level = 1; level < NSecondarySkill::levels.size(); level++)
+	for(int id = 0; id < GameConstants::SKILL_QUANTITY; id++)
+	{
+		CSkill * skill = new CSkill(SecondarySkill(id));
+		for(int level = 1; level < NSecondarySkill::levels.size(); level++)
 			for (auto bonus : defaultBonus(SecondarySkill(id), level))
 				skill->addNewBonus(bonus, level);
-        objects.push_back(skill);
-    }
+		objects.push_back(skill);
+	}
 }
 
 std::vector<JsonNode> CSkillHandler::loadLegacyData(size_t dataSize)
@@ -141,42 +141,42 @@ const std::string CSkillHandler::getTypeName() const
 
 CSkill * CSkillHandler::loadFromJson(const JsonNode & json, const std::string & identifier)
 {
-    CSkill * skill = NULL;
-
-    for(int id = 0; id < GameConstants::SKILL_QUANTITY; id++)
-    {
-        if(NSecondarySkill::names[id].compare(identifier) == 0)
-        {
-            skill = new CSkill(SecondarySkill(id));
-            break;
-        }
-    }
-
-    if(!skill)
-    {
-        logGlobal->error("unknown secondary skill %s", identifier);
-        throw std::runtime_error("invalid skill");
-    }
-
-    for(int level = 1; level < NSecondarySkill::levels.size(); level++)
-    {
-        const std::string & levelName = NSecondarySkill::levels[level]; // basic, advanced, expert
-        const JsonNode & levelNode = json[levelName];
-        // parse bonus effects
+	CSkill * skill = NULL;
+
+	for(int id = 0; id < GameConstants::SKILL_QUANTITY; id++)
+	{
+		if(NSecondarySkill::names[id].compare(identifier) == 0)
+		{
+			skill = new CSkill(SecondarySkill(id));
+			break;
+		}
+	}
+
+	if(!skill)
+	{
+		logGlobal->error("unknown secondary skill %s", identifier);
+		throw std::runtime_error("invalid skill");
+	}
+
+	for(int level = 1; level < NSecondarySkill::levels.size(); level++)
+	{
+		const std::string & levelName = NSecondarySkill::levels[level]; // basic, advanced, expert
+		const JsonNode & levelNode = json[levelName];
+		// parse bonus effects
 		for(auto b : levelNode["effects"].Struct())
-        {
+		{
 			auto bonus = JsonUtils::parseBonus(b.second);
-            bonus->sid = skill->id;
-            skill->addNewBonus(bonus, level);
-        }
-        // parse skill description - tracked separately
-        if(vstd::contains(levelNode.Struct(), "description") && !levelNode["description"].isNull())
-            skill->setDescription(levelNode["description"].String(), level);
-    }
-    logMod->debug("loaded secondary skill %s(%d)", identifier, (int)skill->id);
-    logMod->trace("%s", skill->toString());
-
-    return skill;
+			bonus->sid = skill->id;
+			skill->addNewBonus(bonus, level);
+		}
+		// parse skill description - tracked separately
+		if(vstd::contains(levelNode.Struct(), "description") && !levelNode["description"].isNull())
+			skill->setDescription(levelNode["description"].String(), level);
+	}
+	logMod->debug("loaded secondary skill %s(%d)", identifier, (int)skill->id);
+	logMod->trace("%s", skill->toString());
+
+	return skill;
 }
 
 void CSkillHandler::loadObject(std::string scope, std::string name, const JsonNode & data)
@@ -231,8 +231,8 @@ CSkillHandler::~CSkillHandler()
 
 std::vector<bool> CSkillHandler::getDefaultAllowed() const
 {
-    std::vector<bool> allowedSkills(objects.size(), true);
-    return allowedSkills;
+	std::vector<bool> allowedSkills(objects.size(), true);
+	return allowedSkills;
 }
 
 // HMM3 default bonus provided by secondary skill

+ 36 - 36
lib/CSkillHandler.h

@@ -38,51 +38,51 @@ protected:
 	std::vector<LevelInfo> levels; // bonuses provided by basic, advanced and expert level
 
 public:
-    CSkill(SecondarySkill id = SecondarySkill::DEFAULT);
-    ~CSkill();
-
-    void addNewBonus(const std::shared_ptr<Bonus>& b, int level);
-    void setDescription(const std::string & desc, int level);
-    const std::vector<std::shared_ptr<Bonus>> & getBonus(int level) const;
-    const std::string & getDescription(int level) const;
-    std::string toString() const;
-
-    SecondarySkill id;
-    std::string identifier;
-
-    template <typename Handler> void serialize(Handler &h, const int version)
-    {
-        h & id & identifier;
-        h & levels;
-    }
-
-    friend class CSkillHandler;
-    friend std::ostream & operator<<(std::ostream &out, const CSkill &skill);
-    friend std::ostream & operator<<(std::ostream &out, const CSkill::LevelInfo &info);
+	CSkill(SecondarySkill id = SecondarySkill::DEFAULT);
+	~CSkill();
+
+	void addNewBonus(const std::shared_ptr<Bonus>& b, int level);
+	void setDescription(const std::string & desc, int level);
+	const std::vector<std::shared_ptr<Bonus>> & getBonus(int level) const;
+	const std::string & getDescription(int level) const;
+	std::string toString() const;
+
+	SecondarySkill id;
+	std::string identifier;
+
+	template <typename Handler> void serialize(Handler &h, const int version)
+	{
+		h & id & identifier;
+		h & levels;
+	}
+
+	friend class CSkillHandler;
+	friend std::ostream & operator<<(std::ostream &out, const CSkill &skill);
+	friend std::ostream & operator<<(std::ostream &out, const CSkill::LevelInfo &info);
 };
 
 class DLL_LINKAGE CSkillHandler: public CHandlerBase<SecondarySkill, CSkill>
 {
 public:
-    CSkillHandler();
-    virtual ~CSkillHandler();
+	CSkillHandler();
+	virtual ~CSkillHandler();
 
-    ///IHandler base
-    std::vector<JsonNode> loadLegacyData(size_t dataSize) override;
-    void afterLoadFinalization() override;
-    void beforeValidate(JsonNode & object) override;
+	///IHandler base
+	std::vector<JsonNode> loadLegacyData(size_t dataSize) override;
+	void afterLoadFinalization() override;
+	void beforeValidate(JsonNode & object) override;
 
-    std::vector<bool> getDefaultAllowed() const override;
-    const std::string getTypeName() const override;
-    void loadObject(std::string scope, std::string name, const JsonNode & data) override;
-    void loadObject(std::string scope, std::string name, const JsonNode & data, size_t index) override;
+	std::vector<bool> getDefaultAllowed() const override;
+	const std::string getTypeName() const override;
+	void loadObject(std::string scope, std::string name, const JsonNode & data) override;
+	void loadObject(std::string scope, std::string name, const JsonNode & data, size_t index) override;
 
-    template <typename Handler> void serialize(Handler &h, const int version)
-    {
-        h & objects ;
-    }
+	template <typename Handler> void serialize(Handler &h, const int version)
+	{
+		h & objects ;
+	}
 
 protected:
-    CSkill * loadFromJson(const JsonNode & json, const std::string & identifier) override;
+	CSkill * loadFromJson(const JsonNode & json, const std::string & identifier) override;
 	std::vector<std::shared_ptr<Bonus>> defaultBonus(SecondarySkill skill, int level) const;
 };