public bool Damage(Damage damage, float fMultiplier, float fAdditionalDamage) { fCurrentHealth -= (damage.fAmount + fAdditionalDamage) * fMultiplier; if (damage.debuff != DebuffData.Debuff.NO_DEBUFF) { DebuffData data = new DebuffData(); data.debuff = damage.debuff; data.debuffIcon = damage.debuffIcon; PFX_DebuffIcon debuffIcon = ApplyDebuff(data, damage.fDebuffDuration); if (debuffIcon != null) { debuffIcon.transform.SetParent(transform); debuffIcon.transform.localPosition = Vector3.zero; } } if ((fCurrentHealth <= 0.0f) || (damage.fInstadeathThreshold > 0.0f && fCurrentHealth / fMaxHealthPostBuffs < damage.fInstadeathThreshold)) { Destroy(gameObject); return(true); } return(false); }
public Resurrection(Resurrection other) { fMaxHealthModifier = other.fMaxHealthModifier; bZombify = other.bZombify; slotToRes = other.slotToRes; resPFX = other.resPFX; resSound = other.resSound; }
public override void OnTriggered(Buff buff, Actor actor) { PFX_DebuffIcon debuffIcon = actor.minion.ApplyDebuff(data, fDuration); if (debuffIcon != null) { debuffIcon.transform.SetParent(actor.transform); debuffIcon.transform.localPosition = Vector3.zero; } }
private void KillGroup(MinionSlotType slotType) { foreach (Actor_Player actor in Core.GetLevel().playerActors) { actor.minion.template.TriggerBuff(slotType == MinionSlotType.MELEE ? BuffTrigger.PLAYER_MELEE_DIED : BuffTrigger.PLAYER_RANGED_DIED, null); } List <Resurrection> resList = Core.GetLevel().singleUseResurrections; for (int i = 0; i < resList.Count; i++) { Resurrection res = resList [i]; if (res.slotToRes == slotType) { resList.RemoveAt(i); Core.GetAudioManager().PlayResSFX(res.resSound); // Do achievements Core.TriggerAchievement("BACK_FROM_THE_DEAD"); Core.IncrementStat("NUM_RESURRECTIONS", 2); if (bHasThreeResurrectsAvailable) { bool bLastResUsed = true; foreach (Resurrection check in resList) { if (check.slotToRes == slotType) { bLastResUsed = false; } } if (bLastResUsed) { Core.TriggerAchievement("AND_HERE_TO_STAY"); } } for (int j = 0; j < slotType.GetNumSlots(); j++) { MinionSlot slot = (MinionSlot)((int)slotType.GetFirst() + j); minions [(int)slot].fMaxHealthPreBuffs *= res.fMaxHealthModifier; minions [(int)slot].fMaxHealthPostBuffs *= res.fMaxHealthModifier; minions [(int)slot].isZombified = true; // Play PFX PFX_DebuffIcon pfx = Instantiate <PFX_DebuffIcon>(res.resPFX); pfx.transform.SetParent(Core.GetLevel().playerActors [(int)slot].transform); pfx.transform.localPosition = new Vector3(0.0f, 0.0f, -0.25f); pfx.Init(true); } RecalculateHealths(slotType); return; } } for (int i = 0; i < slotType.GetNumSlots(); i++) { MinionSlot slot = (MinionSlot)((int)slotType.GetFirst() + i); KillMinion(slot); } Core.GetLevel().PlayerLost(); }
public DebuffData(DebuffData old) { debuff = old.debuff; fTimeRemaining = old.fTimeRemaining; debuffIcon = old.debuffIcon; }
public override bool Damage(Damage damage, float fMultiplier, float fStunTime, float fAdditionalCritChance, float fAdditionalCritMultiplier, float fVampirism, float fAdditionalDamage) { if (IsDead()) { return(true); } if (fStunTime > 0.0f) { DebuffData data = new DebuffData(); data.debuff = DebuffData.Debuff.STUNNED; data.fTimeRemaining = fStunTime; data.debuffIcon = Core.GetMinionTemplateManager().stunPFXPrefab; PFX_DebuffIcon debuffIcon = minion.ApplyDebuff(data, fStunTime); if (debuffIcon != null) { debuffIcon.transform.SetParent(transform); debuffIcon.transform.localPosition = Vector3.zero; } } if (damage.fPushAmount > 0.0f) { fPushAmount = damage.fPushAmount; } float fCritChance = damage.fCritChance + fAdditionalCritChance; bool bCrit = Random.Range(0.0f, 1.0f) < fCritChance; if (IsSpotted()) { bCrit = true; } float fCritMultiplier = bCrit ? damage.fCritMultiplier + fAdditionalCritMultiplier : 1.0f; if (damage.GetSlotType() == MinionSlotType.MELEE) { fMultiplier *= GetMeleeDamageModifierFromDebuffs(); } if (damage.GetSlotType() == MinionSlotType.RANGED) { OnRangedHit(); } fMultiplier *= GetDamageModifierFromDebuffs(); // Give vampiric health to players Core.GetCurrentRoster().HealGroup(damage.GetSlotType(), (damage.fAmount + fAdditionalDamage) * fMultiplier * fCritMultiplier * fVampirism); if (damage.onHitEffect != null) { damage.onHitEffect.OnTriggered(null, null); } int iDamage = Mathf.FloorToInt((damage.fAmount + fAdditionalDamage) * fMultiplier * fCritMultiplier); if (bCrit) { Core.IncrementStat("CRITICAL_HITS", 1); } Core.IncrementStat("DAMAGE_DEALT", iDamage); if (iDamage >= 500) { Core.TriggerAchievement(damage.GetSlotType() == MinionSlotType.MELEE ? "BRUTAL" : "SNIPER"); } MakeDamageNumbers(iDamage, bCrit ? Core.GetMinionTemplateManager().criticalDamage : Core.GetMinionTemplateManager().enemyDamage); bool bDead = minion.Damage(damage, fMultiplier * fCritMultiplier, fAdditionalDamage); if (bDead) { minion.template.OnDeath(this); Core.GetLevel().EnemyDied(this); render.PlayDeathAnimation(); render.transform.SetParent(null); Destroy(gameObject); } return(bDead); }