Example #1
0
        /// <summary>
        /// Adds XP to a player's total XP, handles triggers (vitae, level up)
        /// </summary>
        private void UpdateXpAndLevel(long amount, XpType xpType)
        {
            // until we are max level we must make sure that we send
            var xpTable = DatManager.PortalDat.XpTable;

            var maxLevel   = GetMaxLevel();
            var maxLevelXp = xpTable.CharacterLevelXPList.Last();

            if (Level != maxLevel)
            {
                var addAmount = amount;

                var amountLeftToEnd = (long)maxLevelXp - TotalExperience ?? 0;
                if (amount > amountLeftToEnd)
                {
                    addAmount = amountLeftToEnd;
                }

                AvailableExperience += addAmount;
                TotalExperience     += addAmount;

                var xpTotalUpdate = new GameMessagePrivateUpdatePropertyInt64(this, PropertyInt64.TotalExperience, TotalExperience ?? 0);
                var xpAvailUpdate = new GameMessagePrivateUpdatePropertyInt64(this, PropertyInt64.AvailableExperience, AvailableExperience ?? 0);
                Session.Network.EnqueueSend(xpTotalUpdate, xpAvailUpdate);

                CheckForLevelup();
            }

            if (HasVitae && xpType != XpType.Allegiance)
            {
                UpdateXpVitae(amount);
            }
        }
Example #2
0
        private void UpdateXpAndLevel(long amount)
        {
            // until we are max level we must make sure that we send
            var xpTable = DatManager.PortalDat.XpTable;

            var maxLevel   = xpTable.CharacterLevelXPList.Count;
            var maxLevelXp = xpTable.CharacterLevelXPList.Last();

            if (Level != maxLevel)
            {
                var amountLeftToEnd = (long)maxLevelXp - TotalExperience ?? 0;
                if (amount > amountLeftToEnd)
                {
                    amount = amountLeftToEnd;
                }

                AvailableExperience += amount;
                TotalExperience     += amount;

                CheckForLevelup();
                var xpTotalUpdate = new GameMessagePrivateUpdatePropertyInt64(Session, PropertyInt64.TotalExperience, (long)TotalExperience);
                var xpAvailUpdate = new GameMessagePrivateUpdatePropertyInt64(Session, PropertyInt64.AvailableExperience, (long)AvailableExperience);
                Session.Network.EnqueueSend(xpTotalUpdate, xpAvailUpdate);
            }
        }
Example #3
0
        public void SpendXp(Enum.Ability ability, uint amount)
        {
            uint baseValue   = character.Abilities[ability].Base;
            uint result      = SpendAbilityXp(character.Abilities[ability], amount);
            bool isSecondary = (ability == Enum.Ability.Health || ability == Enum.Ability.Stamina || ability == Enum.Ability.Mana);

            if (result > 0u)
            {
                uint        ranks    = character.Abilities[ability].Ranks;
                uint        newValue = character.Abilities[ability].UnbuffedValue;
                var         xpUpdate = new GameMessagePrivateUpdatePropertyInt64(Session, PropertyInt64.AvailableExperience, character.AvailableExperience);
                GameMessage abilityUpdate;
                if (!isSecondary)
                {
                    abilityUpdate = new GameMessagePrivateUpdateAbility(Session, ability, ranks, baseValue, result);
                }
                else
                {
                    abilityUpdate = new GameMessagePrivateUpdateVital(Session, ability, ranks, baseValue, result, character.Abilities[ability].Current);
                }

                var soundEvent = new GameMessageSound(this.Guid, Network.Enum.Sound.AbilityIncrease, 1f);
                var message    = new GameMessageSystemChat($"Your base {ability} is now {newValue}!", ChatMessageType.Broadcast);
                Session.Network.EnqueueSend(xpUpdate, abilityUpdate, soundEvent, message);
            }
            else
            {
                ChatPacket.SendServerMessage(Session, $"Your attempt to raise {ability} has failed.", ChatMessageType.Broadcast);
            }
        }
Example #4
0
        /// <summary>
        /// gives available xp of the amount specified without increasing total xp
        /// </summary>
        public void RefundXp(long amount)
        {
            AvailableExperience += amount;

            var xpUpdate = new GameMessagePrivateUpdatePropertyInt64(Session, PropertyInt64.AvailableExperience, (long)AvailableExperience);

            Session.Network.EnqueueSend(xpUpdate);
        }
Example #5
0
        public void GrantXp(ulong amount)
        {
            character.GrantXp(amount);
            var xpTotalUpdate = new GameMessagePrivateUpdatePropertyInt64(Session, PropertyInt64.TotalExperience, character.TotalExperience);
            var xpAvailUpdate = new GameMessagePrivateUpdatePropertyInt64(Session, PropertyInt64.AvailableExperience, character.AvailableExperience);
            var message       = new GameMessageSystemChat($"{amount} experience granted.", ChatMessageType.Broadcast);

            Session.Network.EnqueueSend(xpTotalUpdate, xpAvailUpdate, message);
        }
Example #6
0
        /// <summary>
        /// spends the amount of xp specified, deducting it from avaiable experience
        /// </summary>
        public bool SpendXp(long amount)
        {
            if (AvailableExperience >= amount)
            {
                AvailableExperience -= amount;

                var xpUpdate = new GameMessagePrivateUpdatePropertyInt64(Session, PropertyInt64.AvailableExperience, (long)AvailableExperience);
                Session.Network.EnqueueSend(xpUpdate);

                return(true);
            }

            return(false);
        }
Example #7
0
        /// <summary>
        /// Raise the available luminance by a specified amount
        /// </summary>
        public void GrantLuminance(long amount)
        {
            if (AvailableLuminance + amount > MaximumLuminance)
            {
                amount = MaximumLuminance.Value - AvailableLuminance.Value;
            }

            AvailableLuminance += amount;

            var luminance = new GameMessagePrivateUpdatePropertyInt64(this, PropertyInt64.AvailableLuminance, AvailableLuminance ?? 0);
            var message   = new GameMessageSystemChat($"{amount} luminance granted.", ChatMessageType.Advancement);

            Session.Network.EnqueueSend(luminance, message);
        }
Example #8
0
        public void SpendLuminance(long amount)
        {
            if (amount > AvailableLuminance.Value)
            {
                return;
            }

            AvailableLuminance -= amount;

            var luminance = new GameMessagePrivateUpdatePropertyInt64(this, PropertyInt64.AvailableLuminance, AvailableLuminance ?? 0);
            var message   = new GameMessageSystemChat($"{amount} luminance spent.", ChatMessageType.Advancement);

            Session.Network.EnqueueSend(luminance, message);
        }
Example #9
0
        /// <summary>
        /// Raise the available luminance by a specified amount
        /// </summary>
        public void GrantLuminance(long amount)
        {
            // apply lum modifier
            amount = (long)(amount * PropertyManager.GetDouble("luminance_modifier").Item);

            if (AvailableLuminance + amount > MaximumLuminance)
            {
                amount = MaximumLuminance.Value - AvailableLuminance.Value;
            }

            AvailableLuminance += amount;

            var luminance = new GameMessagePrivateUpdatePropertyInt64(this, PropertyInt64.AvailableLuminance, AvailableLuminance ?? 0);
            var message   = new GameMessageSystemChat($"{amount:N0} luminance granted.", ChatMessageType.Advancement);

            Session.Network.EnqueueSend(luminance, message);
        }
Example #10
0
        /// <summary>
        /// Spends the amount of XP specified, deducting it from available experience
        /// </summary>
        public bool SpendXP(long amount, bool sendNetworkPropertyUpdate = true)
        {
            if (AvailableExperience >= amount)
            {
                AvailableExperience -= amount;

                if (sendNetworkPropertyUpdate)
                {
                    var xpUpdate = new GameMessagePrivateUpdatePropertyInt64(this, PropertyInt64.AvailableExperience, AvailableExperience ?? 0);
                    Session.Network.EnqueueSend(xpUpdate);
                }

                return(true);
            }

            return(false);
        }
Example #11
0
        public void SpendXp(Enum.Ability ability, uint amount)
        {
            uint   baseValue   = character.Abilities[ability].Base;
            uint   result      = SpendAbilityXp(character.Abilities[ability], amount);
            bool   isSecondary = (ability == Enum.Ability.Health || ability == Enum.Ability.Stamina || ability == Enum.Ability.Mana);
            uint   ranks       = character.Abilities[ability].Ranks;
            uint   newValue    = character.Abilities[ability].UnbuffedValue;
            string messageText = "";

            if (result > 0u)
            {
                GameMessage abilityUpdate;
                if (!isSecondary)
                {
                    abilityUpdate = new GameMessagePrivateUpdateAbility(Session, ability, ranks, baseValue, result);
                }
                else
                {
                    abilityUpdate = new GameMessagePrivateUpdateVital(Session, ability, ranks, baseValue, result, character.Abilities[ability].Current);
                }

                // checks if max rank is achieved and plays fireworks w/ special text
                if (IsAbilityMaxRank(ranks, isSecondary))
                {
                    // fireworks
                    PlayParticleEffect(Effect.WeddingBliss);
                    messageText = $"Your base {ability} is now {newValue} and has reached its upper limit!";
                }
                else
                {
                    messageText = $"Your base {ability} is now {newValue}!";
                }
                var xpUpdate   = new GameMessagePrivateUpdatePropertyInt64(Session, PropertyInt64.AvailableExperience, character.AvailableExperience);
                var soundEvent = new GameMessageSound(this.Guid, Network.Enum.Sound.RaiseTrait, 1f);
                var message    = new GameMessageSystemChat(messageText, ChatMessageType.Advancement);
                Session.Network.EnqueueSend(abilityUpdate, xpUpdate, soundEvent, message);
            }
            else
            {
                ChatPacket.SendServerMessage(Session, $"Your attempt to raise {ability} has failed.", ChatMessageType.Broadcast);
            }
        }
Example #12
0
        /// <summary>
        /// Raise the available XP by a specified amount
        /// </summary>
        /// <param name="amount">A unsigned long containing the desired XP amount to raise</param>
        public void GrantXp(ulong amount)
        {
            // until we are max level we must make sure that we send
            var            chart    = DatabaseManager.Charts.GetLevelingXpChart();
            CharacterLevel maxLevel = chart.Levels.Last();

            if (character.Level != maxLevel.Level)
            {
                ulong amountLeftToEnd = maxLevel.TotalXp - character.TotalExperience;
                if (amount > amountLeftToEnd)
                {
                    amount = amountLeftToEnd;
                }
                character.GrantXp(amount);
                CheckForLevelup();
                var xpTotalUpdate = new GameMessagePrivateUpdatePropertyInt64(Session, PropertyInt64.TotalExperience, character.TotalExperience);
                var xpAvailUpdate = new GameMessagePrivateUpdatePropertyInt64(Session, PropertyInt64.AvailableExperience, character.AvailableExperience);
                var message       = new GameMessageSystemChat($"{amount} experience granted.", ChatMessageType.Broadcast);
                Session.Network.EnqueueSend(xpTotalUpdate, xpAvailUpdate, message);
            }
        }
Example #13
0
File: Player.cs Project: sr314/ACE
        public void SpendXp(Skill skill, uint amount)
        {
            uint baseValue = 0;
            uint result    = SpendSkillXp(character.Skills[skill], amount);

            if (result > 0u)
            {
                uint ranks        = character.Skills[skill].Ranks;
                uint newValue     = character.Skills[skill].UnbuffedValue;
                var  status       = character.Skills[skill].Status;
                var  xpUpdate     = new GameMessagePrivateUpdatePropertyInt64(Session, PropertyInt64.AvailableExperience, character.AvailableExperience);
                var  ablityUpdate = new GameMessagePrivateUpdateSkill(Session, skill, status, ranks, baseValue, result);
                var  soundEvent   = new GameMessageSound(this.Guid, Network.Enum.Sound.AbilityIncrease, 1f);
                var  message      = new GameMessageSystemChat($"Your base {skill} is now {newValue}!", ChatMessageType.Broadcast);
                NetworkManager.SendWorldMessages(Session, new GameMessage[] { xpUpdate, ablityUpdate, soundEvent, message });
            }
            else
            {
                ChatPacket.SendServerMessage(Session, $"Your attempt to raise {skill} has failed.", ChatMessageType.Broadcast);
            }
        }
Example #14
0
        /// <summary>
        /// Adds XP to a player's total XP, handles triggers (vitae, level up)
        /// </summary>
        private void UpdateXpAndLevel(long amount, XpType xpType)
        {
            // until we are max level we must make sure that we send
            var xpTable = DatManager.PortalDat.XpTable;

            var maxLevel   = GetMaxLevel();
            var maxLevelXp = 9223372036854775807UL; // max int64 number

            if (Level != maxLevel)
            {
                var addAmount = amount;

                var amountLeftToEnd = (long)maxLevelXp - TotalExperience ?? 0;
                if (amount > amountLeftToEnd)
                {
                    addAmount = amountLeftToEnd;
                }

                AvailableExperience += addAmount;
                TotalExperience     += addAmount;

                var xpTotalUpdate = new GameMessagePrivateUpdatePropertyInt64(this, PropertyInt64.TotalExperience, TotalExperience ?? 0);
                var xpAvailUpdate = new GameMessagePrivateUpdatePropertyInt64(this, PropertyInt64.AvailableExperience, AvailableExperience ?? 0);
                Session.Network.EnqueueSend(xpTotalUpdate, xpAvailUpdate);

                CheckForLevelup();
            }

            if (xpType == XpType.Quest)
            {
                Session.Network.EnqueueSend(new GameMessageSystemChat($"You've earned {amount:N0} experience.", ChatMessageType.Broadcast));
            }

            if (HasVitae && xpType != XpType.Allegiance)
            {
                UpdateXpVitae(amount);
            }
        }
Example #15
0
        /// <summary>
        /// Spend xp Skill ranks
        /// </summary>
        public void SpendXp(Skill skill, uint amount)
        {
            uint baseValue = 0;
            uint result    = SpendSkillXp(character.Skills[skill], amount);

            uint   ranks       = character.Skills[skill].Ranks;
            uint   newValue    = character.Skills[skill].UnbuffedValue;
            var    status      = character.Skills[skill].Status;
            var    xpUpdate    = new GameMessagePrivateUpdatePropertyInt64(Session, PropertyInt64.AvailableExperience, character.AvailableExperience);
            var    skillUpdate = new GameMessagePrivateUpdateSkill(Session, skill, status, ranks, baseValue, result);
            var    soundEvent  = new GameMessageSound(this.Guid, Network.Enum.Sound.AbilityIncrease, 1f);
            string messageText = "";

            if (result > 0u)
            {
                //if the skill ranks out at the top of our xp chart
                //then we will start fireworks effects and have special text!
                if (IsSkillMaxRank(ranks, status))
                {
                    //fireworks on rank up is 0x8D
                    PlayParticleEffect(0x8D);
                    messageText = $"Your base {skill} is now {newValue} and has reached its upper limit!";
                }
                else
                {
                    messageText = $"Your base {skill} is now {newValue}!";
                }
            }
            else
            {
                messageText = $"Your attempt to raise {skill} has failed!";
            }
            var message = new GameMessageSystemChat(messageText, ChatMessageType.Advancement);

            Session.Network.EnqueueSend(xpUpdate, skillUpdate, soundEvent, message);
        }