public bool RewardAchievement(AchievementTemplate achievement, PlayerAchievementReward owner, out int experience, out int guildExperience)
        {
            experience      = 0;
            guildExperience = 0;
            if (!owner.Remove(achievement))
            {
                return(false);
            }

            experience = achievement.GetExperienceReward(this.Owner.Client);
            if (experience > 0)
            {
                if (this.Owner.GuildMember != null && this.Owner.GuildMember.GivenPercent > 0)
                {
                    int guildXP = (int)(experience * (this.Owner.GuildMember.GivenPercent * 0.01));
                    int adjustedGuildExperience = (int)this.Owner.Guild.AdjustGivenExperience(this.Owner, (long)guildXP);
                    adjustedGuildExperience = Math.Min(Guild.MaxGuildXP, adjustedGuildExperience);

                    experience = (int)(experience * (100.0 - this.Owner.GuildMember.GivenPercent) * 0.01);
                    if (adjustedGuildExperience > 0)
                    {
                        guildExperience = adjustedGuildExperience;
                    }
                }
            }
            if (experience < 0)
            {
                experience = 0;
            }

            var kamas = achievement.GetKamasReward(this.Owner.Client);

            if (kamas > 0)
            {
                this.Owner.Inventory.AddKamas(kamas);
            }

            foreach (var item in achievement.Rewards)
            {
                for (int i = 0; i < item.ItemsReward.Length; i++)
                {
                    var id       = item.ItemsReward[i];
                    var quantity = item.ItemsQuantityReward[i];

                    var itemTemplate = Singleton <ItemManager> .Instance.TryGetTemplate((int)id);

                    if (itemTemplate != null)
                    {
                        this.Owner.Inventory.AddItem(itemTemplate, quantity);
                    }
                }

                foreach (var emoteId in item.EmotesReward)
                {
                    // TODO
                }

                foreach (int spellId in item.SpellsReward)
                {
                    if (!this.Owner.Spells.HasSpell(spellId))
                    {
                        this.Owner.Spells.LearnSpell(spellId);
                    }
                }

                foreach (ushort titleId in item.TitlesReward)
                {
                    if (!this.Owner.HasTitle(titleId))
                    {
                        this.Owner.AddTitle(titleId);
                    }
                }

                foreach (ushort ornamentId in item.OrnamentsReward)
                {
                    if (!this.Owner.HasOrnament(ornamentId))
                    {
                        this.Owner.AddOrnament(ornamentId);
                    }
                }
            }
            // TODO : items

            if (!owner.Any())
            {
                this.Owner.Record.AchievementRewards.Remove(owner);
            }

            return(true);
        }