浏览代码

Add "special" property for secondary skills

Tomasz Zieliński 11 月之前
父节点
当前提交
9e6cd9b94d
共有 4 个文件被更改,包括 20 次插入2 次删除
  1. 4 0
      config/schemas/skill.json
  2. 9 0
      docs/modders/Entities_Format/Secondary_Skill_Format.md
  3. 6 2
      lib/CSkillHandler.cpp
  4. 1 0
      lib/CSkillHandler.h

+ 4 - 0
config/schemas/skill.json

@@ -94,5 +94,9 @@
 	"onlyOnWaterMap" : {
 	"onlyOnWaterMap" : {
 		"type" : "boolean",
 		"type" : "boolean",
 		"description" : "It true, skill won't be available on a map without water"
 		"description" : "It true, skill won't be available on a map without water"
+	},
+	"special" : {
+		"type" : "boolean",
+		"description" : "If true, skill is not available on maps at random"
 	}
 	}
 }
 }

+ 9 - 0
docs/modders/Entities_Format/Secondary_Skill_Format.md

@@ -2,6 +2,15 @@
 
 
 ## Main format
 ## Main format
 
 
+```jsonc
+{
+	// Skill be only be available on maps with water
+	"onlyOnWaterMap" : false,
+	// Skill is not available on maps at random
+	"special" : true
+}
+```
+
 ```jsonc
 ```jsonc
 {
 {
 	"skillName":
 	"skillName":

+ 6 - 2
lib/CSkillHandler.cpp

@@ -32,7 +32,9 @@ CSkill::CSkill(const SecondarySkill & id, std::string identifier, bool obligator
 	id(id),
 	id(id),
 	identifier(std::move(identifier)),
 	identifier(std::move(identifier)),
 	obligatoryMajor(obligatoryMajor),
 	obligatoryMajor(obligatoryMajor),
-	obligatoryMinor(obligatoryMinor)
+	obligatoryMinor(obligatoryMinor),
+	special(false),
+	onlyOnWaterMap(false)
 {
 {
 	gainChance[0] = gainChance[1] = 0; //affects CHeroClassHandler::afterLoadFinalization()
 	gainChance[0] = gainChance[1] = 0; //affects CHeroClassHandler::afterLoadFinalization()
 	levels.resize(NSecondarySkill::levels.size() - 1);
 	levels.resize(NSecondarySkill::levels.size() - 1);
@@ -216,6 +218,7 @@ std::shared_ptr<CSkill> CSkillHandler::loadFromJson(const std::string & scope, c
 	skill->modScope = scope;
 	skill->modScope = scope;
 
 
 	skill->onlyOnWaterMap = json["onlyOnWaterMap"].Bool();
 	skill->onlyOnWaterMap = json["onlyOnWaterMap"].Bool();
+	skill->special = json["special"].Bool();
 
 
 	VLC->generaltexth->registerString(scope, skill->getNameTextID(), json["name"]);
 	VLC->generaltexth->registerString(scope, skill->getNameTextID(), json["name"]);
 	switch(json["gainChance"].getType())
 	switch(json["gainChance"].getType())
@@ -275,7 +278,8 @@ std::set<SecondarySkill> CSkillHandler::getDefaultAllowed() const
 	std::set<SecondarySkill> result;
 	std::set<SecondarySkill> result;
 
 
 	for (auto const & skill : objects)
 	for (auto const & skill : objects)
-		result.insert(skill->getId());
+		if (!skill->special)
+			result.insert(skill->getId());
 
 
 	return result;
 	return result;
 }
 }

+ 1 - 0
lib/CSkillHandler.h

@@ -75,6 +75,7 @@ public:
 	void serializeJson(JsonSerializeFormat & handler);
 	void serializeJson(JsonSerializeFormat & handler);
 
 
 	bool onlyOnWaterMap;
 	bool onlyOnWaterMap;
+	bool special;
 
 
 	friend class CSkillHandler;
 	friend class CSkillHandler;
 	friend DLL_LINKAGE std::ostream & operator<<(std::ostream & out, const CSkill & skill);
 	friend DLL_LINKAGE std::ostream & operator<<(std::ostream & out, const CSkill & skill);