/// <summary> /// Applies the boost from the consumable, broadcasts the sound, /// sends message to player, and consumes from inventory /// </summary> public void ApplyConsumable(Player player) { var buffType = (ConsumableBuffType)BoosterEnum; GameMessageSystemChat buffMessage = null; // spells if (buffType == ConsumableBuffType.Spell) { var spellID = SpellDID ?? 0; var result = player.CreateSingleSpell(spellID); if (result) { var spell = new Server.Entity.Spell(spellID); buffMessage = new GameMessageSystemChat($"{Name} casts {spell.Name} on you.", ChatMessageType.Magic); } else { buffMessage = new GameMessageSystemChat($"{Name} has invalid spell id {spellID}", ChatMessageType.Broadcast); } } // vitals else { var vital = player.GetCreatureVital(BoosterEnum); if (vital != null) { var vitalChange = (uint)Math.Abs(player.UpdateVitalDelta(vital, BoostValue)); if (BoosterEnum == PropertyAttribute2nd.Health) { if (BoostValue >= 0) { player.DamageHistory.OnHeal(vitalChange); } else { player.DamageHistory.Add(this, DamageType.Health, vitalChange); } } var verb = BoostValue >= 0 ? "restores" : "takes"; buffMessage = new GameMessageSystemChat($"The {Name} {verb} {vitalChange} points of your {BoosterEnum}.", ChatMessageType.Broadcast); } else { buffMessage = new GameMessageSystemChat($"{Name} ({Guid}) contains invalid vital {BoosterEnum}", ChatMessageType.Broadcast); } } var soundEvent = new GameMessageSound(player.Guid, GetUseSound(), 1.0f); player.EnqueueBroadcast(soundEvent); player.Session.Network.EnqueueSend(buffMessage); player.TryConsumeFromInventoryWithNetworking(this, 1); }