/// <inheritdoc /> public void UpdateStatistics(IPlayerEntity player, ushort strength, ushort stamina, ushort dexterity, ushort intelligence) { _logger.LogDebug("Modify sttus"); var total = strength + stamina + dexterity + intelligence; var statsPoints = player.Statistics.StatPoints; if (statsPoints <= 0 || total > statsPoints) { _logger.LogError("No statspoints available, but trying to upgrade {0}.", player.Object.Name); return; } if (strength > statsPoints || stamina > statsPoints || dexterity > statsPoints || intelligence > statsPoints || total <= 0 || total > ushort.MaxValue) { _logger.LogError("Invalid upgrade request due to bad total calculation (trying to dupe) {0}.", player.Object.Name); return; } player.Attributes.IncreaseAttribute(DefineAttributes.STR, strength); player.Attributes.IncreaseAttribute(DefineAttributes.STA, stamina); player.Attributes.IncreaseAttribute(DefineAttributes.DEX, dexterity); player.Attributes.IncreaseAttribute(DefineAttributes.INT, intelligence); player.Statistics.StatPoints -= (ushort)total; _playerPacketFactory.SendPlayerUpdateState(player); }