public override void ReceiveDamage(IAttackerEntity attacker, CharacterItem weapon, Dictionary <DamageElement, MinMaxFloat> allDamageAmounts, CharacterBuff debuff, uint hitEffectsId) { if (!IsServer || IsDead()) { return; } base.ReceiveDamage(attacker, weapon, allDamageAmounts, debuff, hitEffectsId); float calculatingTotalDamage = 0f; if (allDamageAmounts.Count > 0) { foreach (KeyValuePair <DamageElement, MinMaxFloat> allDamageAmount in allDamageAmounts) { DamageElement damageElement = allDamageAmount.Key; MinMaxFloat damageAmount = allDamageAmount.Value; calculatingTotalDamage += damageAmount.Random(); } } // Apply damages int totalDamage = (int)calculatingTotalDamage; CurrentHp -= totalDamage; ReceivedDamage(attacker, CombatAmountType.NormalDamage, totalDamage); // If current hp <= 0, character dead if (IsDead()) { NetworkDestroy(); } }
private IEnumerator DoSpawnLoop() { yield return(null); DoInit(); yield return(null); var powerUpTimer = PowerUpTimer.Random(); var dangerousTimer = DangerousTimer.Random(); var normalSpawnTimer = SafeTimer.Random(); while (Spawning.Value) { var deltaTime = Time.deltaTime; powerUpTimer -= deltaTime; normalSpawnTimer -= deltaTime; dangerousTimer -= deltaTime; if (normalSpawnTimer <= 0) { DoSpawnInWorld(SafeSpawnables.UnityRandomObject().Next); normalSpawnTimer = SafeTimer.Random(); } if (powerUpTimer <= 0) { DoSpawnInWorld(PowerUpSpawnables.UnityRandomObject().Next); powerUpTimer = PowerUpTimer.Random(); } if (dangerousTimer <= 0) { DoSpawnInWorld(DangerousSpawnables.UnityRandomObject().Next); dangerousTimer = DangerousTimer.Random(); } yield return(null); } }