Skip to content

Commit 4cddc31

Browse files
Fixed bug random faction selection is incompatible with race
1 parent 281f520 commit 4cddc31

File tree

10 files changed

+49
-28
lines changed

10 files changed

+49
-28
lines changed

modules/Fading Suns Revised Edition/factions.xml

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1379,13 +1379,8 @@
13791379
Kirana, Lestari, Mawar, Melati, Ndari, Nurul, Puspita, Sarwendah, Roro
13801380
</female>
13811381
</names>
1382-
<surnames>Darmawan, Djajadiningrat, Soerjaatmadja, Prawiranegara, Nasution, Hutagaol, Sitompul, Karokaro,
1383-
Rajagukguk, Sinaga, Amuata, Falakhi, Laoly, Marunduri, Ote, Wau, Bodi, Caniago, Sikumbang, Koto,
1384-
Piliang, Baidan, Djaim, Senen, Sastrowardoyo, Djojohadikusumo, Kolopaking, Natalegawa, Rakeyan, Raden,
1385-
Tumenggung, Hadiningrat, Sudrajat Belawan, Manuwu, Ngayoh, Kuntai, Unus, Apui, Usat, Laing, Djalung,
1386-
Merang, Gerung, Mogot, Rawung, Pangemanan, Sondakh, Wowor, Tendean, Kansil, Manganang, Mohede,
1387-
Tatengkeng, Batusura, Lumba, Rambulangi, Manganan, Malaiholo, Hehamahua, Sahanaya, Sahilatua, Hurek,
1388-
Riberu, Lamaborak, Leyn, Suebu, Solossa, Maniani, Wanggai Wonda
1382+
<surnames>Sari, Hidayat, Saputra, Wati, Rahayu, Kurniawan, Santoso, Susanti, Wahyuni, Ningsih, Gunawan,
1383+
Arifin, Siregar, Astuti, Wijaya, Handayani, Irawan
13891384
</surnames>
13901385
<probabilityMultiplier>100</probabilityMultiplier>
13911386
</random>

modules/Fading Suns Revised Edition/npc_definitions.xml

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -625,7 +625,7 @@
625625
</suggestedSkills>
626626
<mandatoryBeneficesSpecialization>passageContracts_2</mandatoryBeneficesSpecialization>
627627
<mandatoryBenefices>cash</mandatoryBenefices>
628-
<weapons>typicalHeavyAutofeed, typicalShotgun</weapons>
628+
<weapons>typicalHvyAutofeed, typicalShotgun</weapons>
629629
<armours>chainMailMetal</armours>
630630
</muster>
631631
<reeves>
@@ -670,7 +670,7 @@
670670
<speciality>rhetoric</speciality>
671671
</skill>
672672
</suggestedSkills>
673-
<mandatoryBeneficesSpecialization>passageContracts_6, cash_6, language [latinLanguage]
673+
<mandatoryBeneficesSpecialization>passageContracts_6, cash [firebirds2000], language [latinLanguage]
674674
</mandatoryBeneficesSpecialization>
675675
</reeves>
676676
<freeMen>
@@ -680,7 +680,6 @@
680680
</name>
681681
<group>faction</group>
682682
<faction>freeMen</faction>
683-
<profile>guild</profile>
684683
</freeMen>
685684
<militia>
686685
<name>

modules/Fading Suns Revised Edition/profiles.xml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,6 @@
120120
</skill>
121121
</suggestedSkills>
122122
<suggestedBenefices>assets</suggestedBenefices>
123-
<mandatoryBenefices>nobility</mandatoryBenefices>
124123
</general>
125124
<thug>
126125
<name>

think-machine-random/src/main/java/com/softwaremagico/tm/character/RandomizeCharacter.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
import com.softwaremagico.tm.character.occultism.RandomPsique;
5050
import com.softwaremagico.tm.character.occultism.RandomPsiquePath;
5151
import com.softwaremagico.tm.character.races.Race;
52+
import com.softwaremagico.tm.character.races.RaceFactory;
5253
import com.softwaremagico.tm.character.races.RandomRace;
5354
import com.softwaremagico.tm.character.skills.AvailableSkill;
5455
import com.softwaremagico.tm.character.skills.RandomSkillExperience;
@@ -280,6 +281,11 @@ protected void setCharacterDefinition() throws InvalidXmlElementException, Inval
280281
if (characterPlayer.getFaction() == null) {
281282
if (requiredFaction != null) {
282283
try {
284+
//Race not correct for this faction. Correct it.
285+
if (!requiredFaction.getRestrictedToRaces().isEmpty() && !requiredFaction.getRestrictedToRaces().contains(characterPlayer.getRace())) {
286+
characterPlayer.setRace(RaceFactory.getInstance().getElement("human", characterPlayer.getLanguage(),
287+
characterPlayer.getModuleName()));
288+
}
283289
characterPlayer.setFaction(requiredFaction);
284290
} catch (RestrictedElementException e) {
285291
//Faction cannot be added.

think-machine-random/src/main/java/com/softwaremagico/tm/character/occultism/RandomPsiquePath.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -170,10 +170,14 @@ private void assignPowersOfPath(OccultismPath path, int maxLevelSelected) throws
170170
break;
171171
}
172172
if (remainingPoints - power.getLevel() * CostCalculator.OCCULTISM_POWER_LEVEL_COST >= 0) {
173-
getCharacterPlayer().addOccultismPower(power);
174-
RandomGenerationLog.info(this.getClass().getName(), "Assinged power '{}' to path '{}'.", power, path);
175-
remainingPoints -= power.getLevel() * CostCalculator.OCCULTISM_POWER_LEVEL_COST;
176-
totalPowers++;
173+
try {
174+
getCharacterPlayer().addOccultismPower(power);
175+
RandomGenerationLog.info(this.getClass().getName(), "Assigned power '{}' to path '{}'.", power, path);
176+
remainingPoints -= power.getLevel() * CostCalculator.OCCULTISM_POWER_LEVEL_COST;
177+
totalPowers++;
178+
} catch (InvalidFactionOfPowerException e) {
179+
//Restricted to faction. Ignore.
180+
}
177181
}
178182

179183
}

think-machine-random/src/test/java/com/softwaremagico/tm/character/RandomCharacterTests.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -450,4 +450,15 @@ public void experience() throws
450450
Assert.assertTrue(characterPlayer.getExperienceEarned() - characterPlayer.getExperienceExpended() < 2);
451451
}
452452

453+
@Test
454+
public void royalVorox() throws InvalidXmlElementException, RestrictedElementException, InvalidRandomElementSelectedException {
455+
final CharacterPlayer characterPlayer = new CharacterPlayer(LANGUAGE, PathManager.DEFAULT_MODULE_FOLDER);
456+
characterPlayer
457+
.setRace(RaceFactory.getInstance().getElement("vorox", LANGUAGE, PathManager.DEFAULT_MODULE_FOLDER));
458+
characterPlayer
459+
.setFaction(FactionsFactory.getInstance().getElement("royalVorox", LANGUAGE, PathManager.DEFAULT_MODULE_FOLDER));
460+
final RandomizeCharacter randomizeCharacter = new RandomizeCharacter(characterPlayer);
461+
randomizeCharacter.createCharacter();
462+
}
463+
453464
}

think-machine-random/src/test/java/com/softwaremagico/tm/random/npc/NpcTests.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import com.softwaremagico.tm.file.PathManager;
2525
import com.softwaremagico.tm.random.exceptions.InvalidRandomElementSelectedException;
2626
import com.softwaremagico.tm.random.predefined.PredefinedMerger;
27+
import com.softwaremagico.tm.random.predefined.characters.Npc;
2728
import com.softwaremagico.tm.random.predefined.characters.NpcFactory;
2829
import com.softwaremagico.tm.random.selectors.AgePreferences;
2930
import com.softwaremagico.tm.random.selectors.BlessingPreferences;
@@ -162,6 +163,15 @@ public void checkParent() throws InvalidXmlElementException {
162163
.getCharacteristicMinimumValues(CharacteristicName.STRENGTH).getValue(), 6);
163164
}
164165

166+
@Test
167+
public void checkNoError() throws InvalidXmlElementException, InvalidRandomElementSelectedException, RestrictedElementException {
168+
for (Npc npc : NpcFactory.getInstance().getElements(LANGUAGE, PathManager.DEFAULT_MODULE_FOLDER)) {
169+
final CharacterPlayer characterPlayer = new CharacterPlayer(LANGUAGE, PathManager.DEFAULT_MODULE_FOLDER);
170+
final RandomizeCharacter randomizeCharacter = new RandomizeCharacter(characterPlayer, npc);
171+
randomizeCharacter.createCharacter();
172+
}
173+
}
174+
165175
@Test
166176
public void serf() throws InvalidXmlElementException,
167177
InvalidRandomElementSelectedException, RestrictedElementException {

think-machine-rules/src/main/java/com/softwaremagico/tm/character/CharacterPlayer.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1515,7 +1515,8 @@ private void checkBeneficesRestrictions(AvailableBenefice benefice) throws Inval
15151515
if (benefice.getBeneficeDefinition().getRestrictedToFactionGroup() != null && (getFaction() == null ||
15161516
!Objects.equals(benefice.getBeneficeDefinition().getRestrictedToFactionGroup(), getFaction().getFactionGroup()))) {
15171517
throw new RestrictedElementException("Benefice '" + benefice
1518-
+ "' is restricted to faction '" + benefice.getBeneficeDefinition().getRestrictedToFactionGroup() + "'");
1518+
+ "' is restricted to faction '" + benefice.getBeneficeDefinition().getRestrictedToFactionGroup() + "' and currently is" +
1519+
"'" + getFaction() + "'.");
15191520
}
15201521
if (!benefice.getBeneficeDefinition().getRestrictedToRaces().isEmpty() &&
15211522
!benefice.getBeneficeDefinition().getRestrictedToRaces().contains(getRace())) {

think-machine-rules/src/main/java/com/softwaremagico/tm/character/Name.java

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ public Name(String id, String name, String customName, String language, String m
5050
}
5151

5252
public Name(String name, String language, String moduleName, Gender gender, Faction faction) {
53-
super(getId(name, moduleName), name, null, language, moduleName);
53+
super(getId(name, faction, moduleName), name, null, language, moduleName);
5454
this.gender = gender;
5555
this.faction = faction;
5656
this.customName = name;
@@ -78,11 +78,9 @@ public boolean equals(Object obj) {
7878
return super.equals(obj);
7979
}
8080

81-
private static String getId(String name, String moduleName) {
82-
if (moduleName == null) {
83-
return name.toLowerCase();
84-
}
85-
return name.replaceAll("\\s+", "_").toLowerCase() + "_" + moduleName.replaceAll("\\s+", "_").toLowerCase();
81+
private static String getId(String name, Faction faction, String moduleName) {
82+
return name.replaceAll("\\s+", "_").toLowerCase() + (faction != null ? "_" + faction : "") +
83+
(moduleName != null ? "_" + moduleName.replaceAll("\\s+", "_").toLowerCase() : "");
8684
}
8785

8886
public String getCustomName() {

think-machine-rules/src/main/java/com/softwaremagico/tm/character/Surname.java

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ public Surname(String id, String surname, String customSurname, String language,
4646
}
4747

4848
public Surname(String surname, String language, String moduleName, Faction faction) {
49-
super(getId(surname, moduleName), surname, null, language, moduleName);
49+
super(getId(surname, faction, moduleName), surname, null, language, moduleName);
5050
this.faction = faction;
5151
this.customSurname = surname;
5252
}
@@ -69,11 +69,9 @@ public String getName() {
6969
return super.getName();
7070
}
7171

72-
private static String getId(String surname, String moduleName) {
73-
if (moduleName == null) {
74-
return surname.toLowerCase();
75-
}
76-
return surname.toLowerCase() + "_" + moduleName.replaceAll("\\s+", "_").toLowerCase();
72+
private static String getId(String surname, Faction faction, String moduleName) {
73+
return surname.replaceAll("\\s+", "_").toLowerCase() + (faction != null ? "_" + faction : "") +
74+
(moduleName != null ? "_" + moduleName.replaceAll("\\s+", "_").toLowerCase() : "");
7775
}
7876

7977
public String getCustomSurname() {

0 commit comments

Comments
 (0)