Beispiel #1
0
    public bool LevelUp()
    {
        if (!ExpMetadataStorage.LevelExist((short)(Level + 1)))
        {
            return(false);
        }

        Level++;

        Player.Stats.AddBaseStats(Player);
        Player.FieldPlayer.RecoverHp(FieldPlayer.Stats[StatId.Hp].Bonus);

        Session.FieldManager.BroadcastPacket(RevivalConfirmPacket.Send(FieldPlayer.ObjectId, 0));
        Session.FieldManager.BroadcastPacket(LevelUpPacket.LevelUp(FieldPlayer.ObjectId, Level));
        Session.FieldManager.BroadcastPacket(FieldObjectPacket.UpdateCharacterLevel(Player));

        Session.FieldManager.BroadcastPacket(JobPacket.SendJob(FieldPlayer));

        Session.Send(StatPacket.SetStats(FieldPlayer));
        Session.FieldManager.BroadcastPacket(StatPacket.UpdateFieldStats(FieldPlayer), Session);

        Session.Send(KeyTablePacket.SendFullOptions(Player.GameOptions));

        TrophyManager.OnLevelUp(Player);
        QuestHelper.GetNewQuests(Player);
        return(true);
    }
Beispiel #2
0
    public void GainExp(long amount)
    {
        if (amount <= 0 || !ExpMetadataStorage.LevelExist((short)(Level + 1)))
        {
            return;
        }

        long newExp = Exp + amount + RestExp;

        if (RestExp > 0)
        {
            RestExp -= amount;
        }
        else
        {
            RestExp = 0;
        }

        bool hasLeveledUp = false;

        while (newExp >= ExpMetadataStorage.GetExpToLevel(Level))
        {
            newExp -= ExpMetadataStorage.GetExpToLevel(Level);
            if (LevelUp())
            {
                hasLeveledUp = true;
                continue;
            }

            newExp = 0;
            break;
        }

        Exp = newExp;
        Session.Send(ExperiencePacket.ExpUp(amount, newExp, RestExp));

        if (!hasLeveledUp)
        {
            return;
        }

        Session.FieldManager.BroadcastPacket(RevivalConfirmPacket.Send(FieldPlayer.ObjectId, 0));
        Session.FieldManager.BroadcastPacket(LevelUpPacket.LevelUp(FieldPlayer.ObjectId, Level));
        Session.FieldManager.BroadcastPacket(FieldObjectPacket.UpdateCharacterLevel(Player));

        // Find all new skills for current level
        HashSet <int> newSkillIds = SkillMetadataStorage.GetJobSkills(Player.Job)
                                    .Where(x => x.SkillLevels.First().SkillUpgrade.LevelRequired == Level)
                                    .Select(x => x.SkillId).ToHashSet();

        Session.FieldManager.BroadcastPacket(JobPacket.UpdateSkillTab(FieldPlayer, newSkillIds));

        Session.Send(StatPacket.SetStats(FieldPlayer));
        Session.FieldManager.BroadcastPacket(StatPacket.SetStats(FieldPlayer), Session);

        Session.Send(KeyTablePacket.SendFullOptions(Player.GameOptions));
        DatabaseManager.Characters.Update(Player);
    }
Beispiel #3
0
    public void SetLevel(short level)
    {
        Level = level;
        Exp   = 0;
        Session.Send(ExperiencePacket.ExpUp(0, Exp, 0));
        Session.FieldManager.BroadcastPacket(LevelUpPacket.LevelUp(FieldPlayer.ObjectId, Level));
        Session.FieldManager.BroadcastPacket(FieldObjectPacket.UpdateCharacterLevel(Player));

        QuestHelper.GetNewQuests(Player);
    }
Beispiel #4
0
        public void AddExperience(Skill skill, float experience)
        {
            if (experience <= 0)
            {
                return;
            }

            PlayerExperiences[skill] += experience;

            if (PlayerExperiences[skill] >= ServerSkillManager.MAX_EXPERIENCE)
            {
                PlayerExperiences[skill] = ServerSkillManager.MAX_EXPERIENCE;
                return;
            }

            if (_player.PlayerLevels[skill] >= ServerSkillManager.MAX_SKILL_LEVEL)
            {
                return;
            }

            double levelProgress = ServerSkillManager.Instance.GetLevelProgressPercentage(_player.PlayerLevels[skill], PlayerExperiences[skill]);

            if (levelProgress >= 1)
            {
                _player.PlayerLevels[skill]++;
                levelProgress = ServerSkillManager.Instance.GetLevelProgressPercentage(_player.PlayerLevels[skill], PlayerExperiences[skill]);

                if (skill == Skill.Healthpoints)
                {
                    _player.InitializePlayerHealth(_player.PlayerLevels[Skill.Healthpoints], _player.CurrentHealth + 1);
                }

                LevelUpPacket levelUpPacket = new LevelUpPacket()
                {
                    Skill = (int)skill,
                    Level = _player.PlayerLevels[skill]
                };

                _player.AssociatedPeer.Send(ServerPacketHandler.Instance.WriteSerializable(PacketType.LevelUpPacket, levelUpPacket), DeliveryMethod.ReliableUnordered);

                _player.CombatLevel = _player.CalculateCombatLevel;
            }

            SendExperiencePacket(skill, experience, false);
        }