public override void StackEffect(Effect e) { DotStack t = (DotStack)e; duration += t.duration; Debug.Log(duration); }
void Damageable.Dot(DotFrame frame) { if (Invulnerable) { return; } if (Faction != Factions.AgainstAll) { if (frame.attacker != null) { if (frame.attacker.Faction != Factions.AgainstAll) { if (frame.attacker.Faction == Faction) { return; } } } } //these would stick forever if (frame.damagePerApplication <= 0) { return; } OnDot.Invoke(frame); if (frame.attacker != null) { if (frame.attacker.Faction == Factions.Player) { frame.totalDamage = (int)System.Math.Round((double)frame.totalDamage * ((double)Difficulty.PlayerDamage / 100d)); } else { frame.totalDamage = (int)System.Math.Round((double)frame.totalDamage * ((double)Difficulty.EnemyDamage / 100d)); } } GameObject ailment = new GameObject("dot"); ailment.transform.SetParent(transform); DotStack d = ailment.AddComponent <DotStack>(); d.damageType = frame.damageType; d.totalDamage = frame.totalDamage; d.damagePerApplication = frame.damagePerApplication; }
public override string GetAmount(Character origin, Character target) { int damage = 0; foreach (Effect e in target.statusEffects) { if (e.GetType() == stack.GetType()) { DotStack s = (DotStack)e; damage = s.duration; break; } } return(damage.ToString()); }
public override int Apply(Character origin, Character target) { int damage = 0; foreach (Effect e in target.statusEffects) { if (e.GetType() == stack.GetType()) { DotStack s = (DotStack)e; damage = s.duration; break; } } target.ChangeHealth(-damage); return(0); }
private void AddDotModBurnDamageFix(GameObject attackerObject, float duration, DotIndex dotIndex, float damageMultiplier, float damageThatProccedIt) { if (!NetworkServer.active) { Debug.LogWarning("[Server] function 'System.Void RoR2.DotController::AddDot(UnityEngine.GameObject,System.Single,RoR2.DotController/DotIndex,System.Single)' called on client"); return; } if (dotIndex < DotIndex.Bleed || dotIndex >= DotIndex.Count) { return; } TeamIndex teamIndex = TeamIndex.Neutral; float single = 0f; TeamComponent component = attackerObject.GetComponent <TeamComponent>(); if (component) { teamIndex = component.teamIndex; } CharacterBody characterBody = attackerObject.GetComponent <CharacterBody>(); if (characterBody) { single = characterBody.damage; } DotDef dotDef = dotDefs[(int)dotIndex]; DotStack dotStack = new DotStack { dotIndex = dotIndex, dotDef = dotDef, attackerObject = attackerObject, attackerTeam = teamIndex, timer = duration, damageType = DamageType.Generic }; if (teamIndex != TeamIndex.Monster || damageThatProccedIt == 0f) { dotStack.damage = dotDef.damageCoefficient * single * damageMultiplier; } else { dotStack.damage = dotDef.damageCoefficient * damageThatProccedIt * damageMultiplier * 0.6f; } if (dotIndex == DotIndex.Helfire) { if (!characterBody) { return; } HealthComponent healthComponent = characterBody.healthComponent; if (!healthComponent) { return; } dotStack.damage = healthComponent.fullHealth * 0.01f * damageMultiplier; if (victimObject == attackerObject) { DotStack dotStack1 = dotStack; dotStack1.damageType = dotStack1.damageType | DamageType.NonLethal | DamageType.Silent; } else if (victimTeam != teamIndex) { dotStack.damage *= 24f; } else { dotStack.damage *= 0.5f; } int num = 0; int count = dotStackList.Count; while (num < count) { if (dotStackList[num].dotIndex == DotIndex.Helfire && dotStackList[num].attackerObject == attackerObject) { dotStackList[num].timer = Mathf.Max(dotStackList[num].timer, duration); dotStackList[num].damage = dotStack.damage; return; } num++; } if (victimBody) { EffectManager.instance.SpawnEffect(Resources.Load <GameObject>("Prefabs/Effects/HelfireIgniteEffect"), new EffectData { origin = victimBody.corePosition }, true); } } dotStackList.Add(dotStack); }