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