Aura.Channel.Scripting.Scripts.ItemScript.Buff C# (CSharp) Метод

Buff() защищенный Метод

Activates food stat mods for the given timeout and stats.
protected Buff ( Creature creature, Item item, int timeout, double str, double int_, double dex, double will, double luck, double life, double mana, double stamina, double lifeRecovery, double manaRecovery, double staminaRecovery, double injuryRecovery, int defense, int protection ) : void
creature Aura.Channel.World.Entities.Creature
item Item
timeout int
str double
int_ double
dex double
will double
luck double
life double
mana double
stamina double
lifeRecovery double
manaRecovery double
staminaRecovery double
injuryRecovery double
defense int
protection int
Результат void
		protected void Buff(Creature creature, Item item, int timeout, double str = 0, double int_ = 0, double dex = 0, double will = 0, double luck = 0, double life = 0, double mana = 0, double stamina = 0, double lifeRecovery = 0, double manaRecovery = 0, double staminaRecovery = 0, double injuryRecovery = 0, int defense = 0, int protection = 0)
		{
			var statModSource = StatModSource.TmpFood;
			var statModIdent = 0;
			var regenGroup = "TmpFoodRegen";

			// Prepare quality value for the calculations
			// Bonus Formula: floor(dbValue / 200 * (quality + 100))
			var quality = 0;
			var hasQuality = false;
			if (item.MetaData1.Has("QUAL"))
			{
				quality = item.MetaData1.GetInt("QUAL");
				hasQuality = true;
			}
			quality += 100;

			// Remove previous buffs
			creature.StatMods.Remove(statModSource, statModIdent);
			creature.Regens.Remove(regenGroup);

			// Add stat buffs
			if (str != 0)
				creature.StatMods.Add(Stat.StrMod, (float)Math.Floor(str / 200f * quality), statModSource, statModIdent, timeout);

			if (int_ != 0)
				creature.StatMods.Add(Stat.IntMod, (float)Math.Floor(int_ / 200f * quality), statModSource, statModIdent, timeout);

			if (dex != 0)
				creature.StatMods.Add(Stat.DexMod, (float)Math.Floor(dex / 200f * quality), statModSource, statModIdent, timeout);

			if (will != 0)
				creature.StatMods.Add(Stat.WillMod, (float)Math.Floor(will / 200f * quality), statModSource, statModIdent, timeout);

			if (luck != 0)
				creature.StatMods.Add(Stat.LuckMod, (float)Math.Floor(luck / 200f * quality), statModSource, statModIdent, timeout);

			if (defense != 0)
				creature.StatMods.Add(Stat.DefenseMod, (float)Math.Floor(defense / 200f * quality), statModSource, statModIdent, timeout);

			if (protection != 0)
				creature.StatMods.Add(Stat.ProtectionMod, (float)Math.Floor(protection / 200f * quality), statModSource, statModIdent, timeout);

			if (life != 0)
			{
				creature.StatMods.Add(Stat.LifeMaxMod, (float)Math.Floor(life / 200f * quality), statModSource, statModIdent, timeout);
				creature.Life = creature.Life; // Cap in case max was reduced
			}

			if (mana != 0)
			{
				creature.StatMods.Add(Stat.ManaMaxMod, (float)Math.Floor(mana / 200f * quality), statModSource, statModIdent, timeout);
				creature.Mana = creature.Mana; // Cap in case max was reduced
			}

			if (stamina != 0)
			{
				creature.StatMods.Add(Stat.StaminaMaxMod, (float)Math.Floor(stamina / 200f * quality), statModSource, statModIdent, timeout);
				creature.Stamina = creature.Stamina; // Cap in case max was reduced
			}

			// Add regens
			if (lifeRecovery != 0)
			{
				var value = (float)lifeRecovery;
				if (hasQuality)
					value = (float)Math.Floor(value / 200f * quality);

				creature.Regens.Add(regenGroup, Stat.Life, value, creature.LifeInjured, timeout * 1000);
			}

			if (manaRecovery != 0)
			{
				var value = (float)manaRecovery;
				if (hasQuality)
					value = (float)Math.Floor(value / 200f * quality);

				creature.Regens.Add(regenGroup, Stat.Mana, value, creature.ManaMax, timeout * 1000);
			}

			if (staminaRecovery != 0)
			{
				var value = (float)staminaRecovery;
				if (hasQuality)
					value = (float)Math.Floor(value / 200f * quality);

				creature.Regens.Add(regenGroup, Stat.Stamina, value, creature.StaminaMax, timeout * 1000);
			}

			if (injuryRecovery != 0)
			{
				var value = (float)injuryRecovery;
				if (hasQuality)
					value = (float)Math.Floor(value / 200f * quality);

				creature.Regens.Add(regenGroup, Stat.LifeInjured, value, creature.LifeMax, timeout * 1000);
			}

			// Update client
			Send.StatUpdate(creature, StatUpdateType.Private,
				Stat.StrMod, Stat.IntMod, Stat.DexMod, Stat.WillMod, Stat.LuckMod,
				Stat.Life, Stat.LifeInjured, Stat.LifeMaxMod, Stat.LifeMax,
				Stat.Mana, Stat.ManaMaxMod, Stat.ManaMax,
				Stat.Stamina, Stat.StaminaMaxMod, Stat.StaminaMax,
				Stat.DefenseMod, Stat.ProtectionMod
			);
			Send.StatUpdate(creature, StatUpdateType.Public, Stat.Life, Stat.LifeInjured, Stat.LifeMaxMod, Stat.LifeMax);
		}