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); } }
public void SpendXp(Enum.Ability ability, uint amount) { uint baseValue = character.Abilities[ability].Base; uint result = character.Abilities[ability].SpendXp(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 GameEventPrivateUpdatePropertyInt64(Session, PropertyInt64.AvailableExperience, character.AvailableExperience); GameEventPacket abilityUpdate; if (!isSecondary) { abilityUpdate = new GameEventPrivateUpdateAbility(Session, ability, ranks, baseValue, result); } else { abilityUpdate = new GameEventPrivateUpdateVital(Session, ability, ranks, baseValue, result, character.Abilities[ability].Current); } var soundEvent = new GameEventSound(Session, Network.Enum.Sound.AbilityIncrease, 1f); xpUpdate.Send(); abilityUpdate.Send(); soundEvent.Send(); ChatPacket.SendSystemMessage(Session, $"Your base {ability} is now {newValue}!"); } else { ChatPacket.SendSystemMessage(Session, $"Your attempt to raise {ability} has failed."); } }
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); } }