diff --git a/src/GameLogic/Player.cs b/src/GameLogic/Player.cs
index f13e77363..0a24ce652 100644
--- a/src/GameLogic/Player.cs
+++ b/src/GameLogic/Player.cs
@@ -1786,9 +1786,26 @@ private void RaisePlayerLeftMap(GameMap map)
this.PlayerLeftMap?.Invoke(this, (this, map));
}
+ ///
+ /// Adds the missing stat attributes, e.g. after the character class has been changed outside of the game.
+ ///
+ private void AddMissingStatAttributes()
+ {
+ if (this.SelectedCharacter is not { CharacterClass: { } characterClass } character)
+ {
+ return;
+ }
+
+ var missingStats = characterClass.StatAttributes.Where(a => this.SelectedCharacter.Attributes.All(c => c.Definition != a.Attribute));
+
+ var attributes = missingStats.Select(a => this.PersistenceContext.CreateNew(a.Attribute, a.BaseValue)).ToList();
+ attributes.ForEach(character.Attributes.Add);
+ }
+
private async ValueTask OnPlayerEnteredWorldAsync()
{
this.Attributes = new ItemAwareAttributeSystem(this.Account!, this.SelectedCharacter!);
+ this.AddMissingStatAttributes();
this.Inventory = new InventoryStorage(this, this.GameContext);
this.ShopStorage = new ShopStorage(this);
this.TemporaryStorage = new Storage(InventoryConstants.TemporaryStorageSize, new TemporaryItemStorage());
@@ -2123,4 +2140,4 @@ public GMMagicEffectDefinition()
this.PowerUpDefinitions = new List(0);
}
}
-}
\ No newline at end of file
+}
diff --git a/src/Persistence/Initialization/GameConfigurationInitializerBase.cs b/src/Persistence/Initialization/GameConfigurationInitializerBase.cs
index ff551f281..3b88d0342 100644
--- a/src/Persistence/Initialization/GameConfigurationInitializerBase.cs
+++ b/src/Persistence/Initialization/GameConfigurationInitializerBase.cs
@@ -39,6 +39,7 @@ public override void Initialize()
{
this.GameConfiguration.ExperienceRate = 1.0f;
this.GameConfiguration.MaximumLevel = 400;
+ this.GameConfiguration.MaximumMasterLevel = 400;
this.GameConfiguration.InfoRange = 12;
this.GameConfiguration.AreaSkillHitsPlayer = false;
this.GameConfiguration.MaximumInventoryMoney = int.MaxValue;
diff --git a/src/Persistence/Initialization/Updates/InfinityArrowSkillOnQuestCompletionPlugIn.cs b/src/Persistence/Initialization/Updates/InfinityArrowSkillOnQuestCompletionPlugIn.cs
index 09140246b..16de5c3f9 100644
--- a/src/Persistence/Initialization/Updates/InfinityArrowSkillOnQuestCompletionPlugIn.cs
+++ b/src/Persistence/Initialization/Updates/InfinityArrowSkillOnQuestCompletionPlugIn.cs
@@ -62,5 +62,6 @@ protected override async ValueTask ApplyAsync(IContext context, GameConfiguratio
skillReward.Value = 1;
skillReward.SkillReward = gameConfiguration.Skills.First(s => s.Number == (short)SkillNumber.InfinityArrow);
skillReward.RewardType = QuestRewardType.Skill;
+ quest.Rewards.Add(skillReward);
}
}
\ No newline at end of file
diff --git a/src/Persistence/Initialization/Updates/UpdateVersion.cs b/src/Persistence/Initialization/Updates/UpdateVersion.cs
index e5ec30f9e..cf9ee08d7 100644
--- a/src/Persistence/Initialization/Updates/UpdateVersion.cs
+++ b/src/Persistence/Initialization/Updates/UpdateVersion.cs
@@ -83,5 +83,5 @@ public enum UpdateVersion
///
/// The version of the .
///
- InfinityArrowSkillOnQuestCompletion = 14,
+ InfinityArrowSkillOnQuestCompletion = 15,
}
\ No newline at end of file
diff --git a/src/Persistence/Initialization/VersionSeasonSix/Quests.cs b/src/Persistence/Initialization/VersionSeasonSix/Quests.cs
index 537940b42..83799b3b6 100644
--- a/src/Persistence/Initialization/VersionSeasonSix/Quests.cs
+++ b/src/Persistence/Initialization/VersionSeasonSix/Quests.cs
@@ -249,6 +249,7 @@ private void GainHeroStatus(CharacterClassNumber characterClass)
skillReward.Value = 1;
skillReward.SkillReward = this.GameConfiguration.Skills.First(s => s.Number == (short)SkillNumber.InfinityArrow);
skillReward.RewardType = QuestRewardType.Skill;
+ heroStatus.Rewards.Add(skillReward);
}
heroStatus.Rewards.Add(pointReward);