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);