Exemplo n.º 1
0
        /// <summary>
        /// Vampirically drain health from target equal to damage delivered.
        /// Was not able to fully confirm this how effect works, but seems close from observation alone.
        /// Not sure if only base weapon should be delivered (e.g. exclude factors like critical strike).
        /// TODO: This will likely need more research and refinement.
        /// </summary>
        void VampiricEffectWhenStrikes(DaggerfallEnchantment enchantment, DaggerfallEntityBehaviour receiver, int damage)
        {
            // Must be correct vampiric effect type
            VampiricEffectTypes type = (VampiricEffectTypes)enchantment.param;

            if (type != VampiricEffectTypes.WhenStrikes)
            {
                return;
            }

            // Check this is an enemy type
            EnemyEntity enemyEntity = null;

            if (receiver.EntityType == EntityTypes.EnemyMonster || receiver.EntityType == EntityTypes.EnemyClass)
            {
                enemyEntity = receiver.Entity as EnemyEntity;
            }

            // Drain target entity by damage amount and heal this entity by same amount
            enemyEntity.CurrentHealth            -= damage;
            entityBehaviour.Entity.CurrentHealth += damage;
            //Debug.LogFormat("Entity {0} drained {1} health by striking {2}", entityBehaviour.Entity.Name, damage, enemyEntity.Name);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Vampirically drains health from nearby enemies.
        /// Classic seems to follow the 15 health per hour rule (or 1 health per 4 game minutes) at very close range.
        /// While exact range is unknown, testing in classic shows that player needs to be roughly within melee distance or no effect.
        /// </summary>
        void VampiricEffectRanged(DaggerfallEnchantment enchantment)
        {
            // Must be correct vampiric effect type
            VampiricEffectTypes type = (VampiricEffectTypes)enchantment.param;

            if (type != VampiricEffectTypes.AtRange)
            {
                return;
            }

            // This special only triggers once every regeneratePerRounds
            if (GameManager.Instance.EntityEffectBroker.MagicRoundsSinceStartup % regeneratePerRounds != 0)
            {
                return;
            }

            // Drain all enemies in range
            List <PlayerGPS.NearbyObject> nearby = GameManager.Instance.PlayerGPS.GetNearbyObjects(PlayerGPS.NearbyObjectFlags.Enemy, vampiricDrainRange);

            if (nearby != null && nearby.Count > 0)
            {
                foreach (PlayerGPS.NearbyObject enemy in nearby)
                {
                    // Get entity behaviour from found object
                    DaggerfallEntityBehaviour enemyBehaviour = (enemy.gameObject) ? enemy.gameObject.GetComponent <DaggerfallEntityBehaviour>() : null;
                    if (!enemyBehaviour)
                    {
                        continue;
                    }

                    // Transfer health from remote entity to this one
                    enemyBehaviour.Entity.CurrentHealth  -= regenerateAmount;
                    entityBehaviour.Entity.CurrentHealth += regenerateAmount;
                    //Debug.LogFormat("Entity {0} drained {1} health from nearby {2}", entityBehaviour.Entity.Name, regenerateAmount, enemyBehaviour.Entity.Name);
                }
            }
        }