소스 검색

- Made sure that stack artifacts will not spawn when they are turned off
- Description for "Spell-like attack"

DjWarmonger 12 년 전
부모
커밋
cf7108f075
4개의 변경된 파일16개의 추가작업 그리고 3개의 파일을 삭제
  1. 1 0
      config/bonusnames.json
  2. 9 3
      lib/CArtHandler.cpp
  3. 1 0
      lib/CArtHandler.h
  4. 5 0
      lib/CCreatureSet.cpp

+ 1 - 0
config/bonusnames.json

@@ -8,6 +8,7 @@
 			{ "id": "TWO_HEX_ATTACK_BREATH", "name": "Breath", "description": "Breath Attack (2-hex range)" },
 			{ "id": "SPELL_AFTER_ATTACK", "name": "Caster - %s", "description": "%d% chance to cast after attack" },
 			{ "id": "SPELL_BEFORE_ATTACK", "name": "Caster - %s", "description": "%d% chance to cast before attack" },
+			{ "id": "SPELL_LIKE_ATTACK", "name": "Spell-like attack", "description": "Attacks with %s" },
 			{ "id": "CATAPULT", "name": "Catapult", "description": "Attacks siege walls" },
 			{ "id": "JOUSTING", "name": "Champion Charge", "description": "+5% damage per hex travelled" },
 			{ "id": "DOUBLE_DAMAGE_CHANCE", "name": "Death Blow", "description": "%d% chance for double damage" },

+ 9 - 3
lib/CArtHandler.cpp

@@ -776,13 +776,20 @@ void CArtHandler::clearHlpLists()
 	relics.clear();
 }
 
+bool CArtHandler::legalArtifact(int id)
+{
+	return (artifacts[id]->possibleSlots[ArtBearer::HERO].size() ||
+			artifacts[id]->possibleSlots[ArtBearer::COMMANDER].size() && VLC->modh->modules.COMMANDERS) ||
+			(artifacts[id]->possibleSlots[ArtBearer::CREATURE].size() && VLC->modh->modules.STACK_ARTIFACT);
+}
+
 void CArtHandler::initAllowedArtifactsList(const std::vector<ui8> &allowed)
 {
 	allowedArtifacts.clear();
 	clearHlpLists();
 	for (int i=0; i<144; ++i) //yes, 144
 	{
-		if (allowed[i])
+		if (allowed[i] && legalArtifact(i))
 			allowedArtifacts.push_back(artifacts[i]);
 	}
 	if (VLC->modh->modules.COMMANDERS) //allow all commander artifacts for testing
@@ -798,8 +805,7 @@ void CArtHandler::initAllowedArtifactsList(const std::vector<ui8> &allowed)
 			allowedArtifacts.push_back(artifacts[i]);
 		 else //check if active modules allow artifact to be every used
 		 {
-			 if ((artifacts[i]->possibleSlots[ArtBearer::COMMANDER].size() && VLC->modh->modules.COMMANDERS) ||
-				 (artifacts[i]->possibleSlots[ArtBearer::CREATURE].size() && VLC->modh->modules.STACK_ARTIFACT))
+			 if (legalArtifact(i))
 				 allowedArtifacts.push_back(artifacts[i]);
 			 //keep im mind that artifact can be worn by more than one type of bearer
 		 }

+ 1 - 0
lib/CArtHandler.h

@@ -243,6 +243,7 @@ public:
 	void clearHlpLists();
 	ui16 getRandomArt (int flags);
 	ui16 getArtSync (ui32 rand, int flags);
+	bool CArtHandler::legalArtifact(int id);
 	void getAllowedArts(std::vector<ConstTransitivePtr<CArtifact> > &out, std::vector<CArtifact*> *arts, int flag);
 	void getAllowed(std::vector<ConstTransitivePtr<CArtifact> > &out, int flags);
 	void erasePickedArt (TArtifactInstanceID id);

+ 5 - 0
lib/CCreatureSet.cpp

@@ -646,6 +646,11 @@ std::string CStackInstance::bonusToString(Bonus *bonus, bool description) const
 					boost::algorithm::replace_first(text, "%s", VLC->spellh->spells[bonus->subtype]->name);
 					break;
 				}
+				case Bonus::SPELL_LIKE_ATTACK:
+				{
+					boost::algorithm::replace_first(text, "%s", VLC->spellh->spells[bonus->subtype]->name);
+					break;
+				}
 				default:
 					{}//TODO: allow custom bonus types... someday, somehow
 			}