Exemple #1
0
 public EnemyClimbAction(EnemyMotor enemyMotor, EnemyBehaviour enemyBehaviour, AnimationsController animationsController)
 {
     _animationsController = animationsController;
     _enemyMotor           = enemyMotor;
     _enemyBehaviour       = enemyBehaviour;
     _transform            = _enemyBehaviour.transform;
 }
    //spawns the enemies
    private void SpawnEnemy(int prefabIndex = -1)
    {
        Vector3    initialPos = new Vector3(0, 0, 0); //initializes
        int        thirdRand  = Random.Range(0, enemyPrefabs.Length);
        GameObject go;

        if (prefabIndex == -1) //prevents any errors from happening
        {
            go = Instantiate(enemyPrefabs[thirdRand]) as GameObject;
        }
        else
        {
            go = Instantiate(enemyPrefabs[prefabIndex]) as GameObject;
        }
        //this keeps changing the position of the spawned enemies from one side of the tile to the other so they arn't going in only 1 direction
        if (num1 == -1)
        {
            initialPos = new Vector3(spawnX, 0.14f, spawnZ - offset);
        }
        if (num1 == 1)
        {
            initialPos = new Vector3(-spawnX, 0.14f, spawnZ - offset);
            EnemyMotor enemyMotor = go.GetComponent <EnemyMotor>();
            enemyMotor.forward    = Vector3.forward; //changes the forward variable in EnemyMotor script to the opposite direction
            go.transform.rotation = Quaternion.Euler(0, 90, 0);
        }

        go.transform.position = initialPos;
        go.transform.SetParent(enemyParentTransform); //instantiated objects go in the EnemyParent gameobject
        activeEnemies.Add(go);                        //adds the instantiated prefab to the active enemies list
        num1 = -num1;
    }
 // Start is called before the first frame update
 void Start()
 {
     selfStats        = GetComponent <CharacterStats>();
     selfCombat       = GetComponent <CharacterCombat>();
     motor            = GetComponent <EnemyMotor>();
     aggroZone.radius = aggroRadius;
 }
        private void Update()
        {
            // Ensure target resource has this behaviour assigned
            // Coupling is otherwise lost when reloading a game
            if (targetResource != null)
            {
                if (!targetResource.QuestResourceBehaviour)
                {
                    targetResource.QuestResourceBehaviour = this;
                }
            }

            // Handle enemy checks
            if (enemyEntityBehaviour)
            {
                // Get foe resource
                Foe foe = (Foe)targetResource;
                if (foe == null)
                {
                    return;
                }

                // If foe is hidden then remove self from game
                if (foe.IsHidden)
                {
                    Destroy(gameObject);
                    return;
                }

                // Handle restrained check
                // This might need some tuning in relation to injured and death checks
                if (foe.IsRestrained)
                {
                    // Make enemy non-hostile
                    EnemyMotor enemyMotor = transform.GetComponent <EnemyMotor>();
                    if (enemyMotor)
                    {
                        enemyMotor.IsHostile = false;
                    }

                    // Lower flag now this has been handled
                    foe.ClearRestrained();
                }

                // Handle injured check
                // This has to happen before death or script actions attached to injured event will not trigger
                if (enemyEntityBehaviour.Entity.CurrentHealth < enemyEntityBehaviour.Entity.MaxHealth && !foe.InjuredTrigger)
                {
                    foe.SetInjured();
                    return;
                }

                // Handle death check
                if (enemyEntityBehaviour.Entity.CurrentHealth <= 0 && !isFoeDead)
                {
                    foe.IncrementKills();
                    isFoeDead = true;
                }
            }
        }
Exemple #5
0
 void Start()
 {
     motor = GetComponent <EnemyMotor>();
     rb    = GetComponent <Rigidbody>();
     body  = GetComponentInChildren <Body>();
     flag  = false;
 }
        public object GetSaveData()
        {
            if (!enemy)
            {
                return(null);
            }

            // Get entity behaviour
            DaggerfallEntityBehaviour entityBehaviour = enemy.GetComponent <DaggerfallEntityBehaviour>();

            if (!entityBehaviour)
            {
                return(null);
            }

            // Create save data
            EnemyEntity  entity = entityBehaviour.Entity as EnemyEntity;
            EnemyMotor   motor  = enemy.GetComponent <EnemyMotor>();
            EnemyData_v1 data   = new EnemyData_v1();

            data.loadID          = LoadID;
            data.currentPosition = enemy.transform.position;
            data.currentRotation = enemy.transform.rotation;
            data.entityType      = entity.EntityType;
            data.careerName      = entity.Career.Name;
            data.careerIndex     = entity.CareerIndex;
            data.startingHealth  = entity.MaxHealth;
            data.currentHealth   = entity.CurrentHealth;
            data.currentFatigue  = entity.CurrentFatigue;
            data.currentMagicka  = entity.CurrentMagicka;
            data.isHostile       = motor.IsHostile;
            data.isDead          = (entity.CurrentHealth <= 0) ? true : false;

            return(data);
        }
Exemple #7
0
 private void Start()
 {
     animAction = GetComponent <EnemyAnimation>();
     motor      = GetComponent <EnemyMotor>();
     gun        = GetComponent <Gun>();
     gunAnim    = GetComponent <GunAnimation>();
 }
        public object GetSaveData()
        {
            if (!enemy)
            {
                return(null);
            }

            // Get entity behaviour
            DaggerfallEntityBehaviour entityBehaviour = enemy.GetComponent <DaggerfallEntityBehaviour>();

            if (!entityBehaviour)
            {
                return(null);
            }

            // Create save data
            EnemyEntity          entity      = entityBehaviour.Entity as EnemyEntity;
            EnemyMotor           motor       = enemy.GetComponent <EnemyMotor>();
            EnemySenses          senses      = enemy.GetComponent <EnemySenses>();
            DaggerfallMobileUnit mobileEnemy = enemy.GetComponentInChildren <DaggerfallMobileUnit>();
            EnemyData_v1         data        = new EnemyData_v1();

            data.loadID               = LoadID;
            data.gameObjectName       = entityBehaviour.gameObject.name;
            data.currentPosition      = enemy.transform.position;
            data.localPosition        = enemy.transform.localPosition;
            data.currentRotation      = enemy.transform.rotation;
            data.worldContext         = entity.WorldContext;
            data.worldCompensation    = GameManager.Instance.StreamingWorld.WorldCompensation;
            data.entityType           = entity.EntityType;
            data.careerName           = entity.Career.Name;
            data.careerIndex          = entity.CareerIndex;
            data.startingHealth       = entity.MaxHealth;
            data.currentHealth        = entity.CurrentHealth;
            data.currentFatigue       = entity.CurrentFatigue;
            data.currentMagicka       = entity.CurrentMagicka;
            data.isHostile            = motor.IsHostile;
            data.hasEncounteredPlayer = senses.HasEncounteredPlayer;
            data.isDead               = (entity.CurrentHealth <= 0) ? true : false;
            data.questSpawn           = enemy.QuestSpawn;
            data.mobileGender         = mobileEnemy.Summary.Enemy.Gender;
            data.items                   = entity.Items.SerializeItems();
            data.equipTable              = entity.ItemEquipTable.SerializeEquipTable();
            data.instancedEffectBundles  = GetComponent <EntityEffectManager>().GetInstancedBundlesSaveData();
            data.alliedToPlayer          = mobileEnemy.Summary.Enemy.Team == MobileTeams.PlayerAlly;
            data.questFoeSpellQueueIndex = entity.QuestFoeSpellQueueIndex;
            data.questFoeItemQueueIndex  = entity.QuestFoeItemQueueIndex;
            data.wabbajackActive         = entity.WabbajackActive;
            data.team = (int)entity.Team + 1;

            // Add quest resource data if present
            QuestResourceBehaviour questResourceBehaviour = GetComponent <QuestResourceBehaviour>();

            if (questResourceBehaviour)
            {
                data.questResource = questResourceBehaviour.GetSaveData();
            }

            return(data);
        }
    void Start()
    {
        Motor = GetComponent<EnemyMotor>();
        Damagable = GetComponent<Damagable>();

        GameHandler.Instance.EnemiesLeftInScene.Add(this.gameObject);
        this.GetComponent<Damagable>().Damaged += CivilianController_Damaged;
    }
Exemple #10
0
 void Start()
 {
     animator = GetComponent<Animator>();
     motor = GetComponent<EnemyMotor>();
     logic = GetComponent<EnemyLogic>();
     animator.SetBool("Jumping",false);
     animator.SetLayerWeight(1,1);
 }
Exemple #11
0
    public EnemyMovementActionManager(EnemyBehaviour enemyBehaviour, EnemyMotor enemyMotor, AnimationsController animationsController)
    {
        _enemyBehaviour       = enemyBehaviour;
        _enemyMotor           = enemyMotor;
        _animationsController = animationsController;

        CreateActions();
    }
Exemple #12
0
        protected override void Start()
        {
            enemyMotor = GetComponent <EnemyMotor>();
            controller = GetComponent <CharacterController>();
            mobile     = GetComponent <DaggerfallMobileUnit>();

            base.Start();
        }
Exemple #13
0
 private void Start()
 {
     player = GameObject.Find("FPSController");
     info   = GetComponent <EnemyStatusInfo>();
     anim   = GetComponent <EnemyAnimation>();
     motor  = GetComponent <EnemyMotor>();
     gun    = GetComponentInChildren <Gun>();
 }
 void Start()
 {
     hasTouchThis      = false;
     canBeUsed         = false;
     SR                = GetComponent <SpriteRenderer> ();
     SR.material.color = new Color32(255, 255, 255, 35);
     gm                = GameObject.FindGameObjectWithTag("Player").GetComponent <GameManager> ();
     em                = GameObject.FindGameObjectWithTag("Enemy").GetComponent <EnemyMotor> ();
 }
Exemple #15
0
    private void Awake()
    {
        GetComponent <EnemyMotor>().OnObstacleCollide += ObstacleCollideCallback;
        health = maxHealth;

        m_Character = GetComponent <EnemyMotor>();
        Physics2D.IgnoreLayerCollision(LayerMask.NameToLayer("Enemy"), LayerMask.NameToLayer("Enemy"));
        target = GameManager.Instance.EnemyTarget;
    }
Exemple #16
0
    public void Init(int wId, EnemyMultiBrain emb, EnemyMotor em, EnemyProjectile ep, Transform we)
    {
        weaponID = wId;

        brain            = emb;
        motor            = em;
        projectilePrefab = ep;
        gunEnd           = we;
        //projectilePrefab.weaponStats.Init(weaponID);
    }
Exemple #17
0
        /// <summary>
        /// Handle shared logic when player attacks entity.
        /// </summary>
        public void HandleAttackFromSource(DaggerfallEntityBehaviour sourceEntityBehaviour)
        {
            // Break "normal power" concealment effects on source
            if (sourceEntityBehaviour.Entity.IsMagicallyConcealedNormalPower)
            {
                EntityEffectManager.BreakNormalPowerConcealmentEffects(sourceEntityBehaviour);
            }

            // When source is player
            if (sourceEntityBehaviour == GameManager.Instance.PlayerEntityBehaviour)
            {
                // Handle civilian NPC crime reporting
                if (EntityType == EntityTypes.CivilianNPC)
                {
                    PlayerEntity    playerEntity = GameManager.Instance.PlayerEntity;
                    MobilePersonNPC mobileNpc    = transform.GetComponent <MobilePersonNPC>();
                    if (mobileNpc)
                    {
                        // Handle assault or murder
                        if (Entity.CurrentHealth > 0)
                        {
                            playerEntity.CrimeCommitted = PlayerEntity.Crimes.Assault;
                            playerEntity.SpawnCityGuards(true);
                        }
                        else
                        {
                            playerEntity.TallyCrimeGuildRequirements(false, 5);
                            // TODO: LOS check from each townsperson. If seen, register crime and start spawning guards as below.
                            playerEntity.CrimeCommitted = PlayerEntity.Crimes.Murder;
                            playerEntity.SpawnCityGuards(true);

                            // Disable when dead
                            mobileNpc.Motor.gameObject.SetActive(false);
                        }
                    }
                }

                // Handle mobile enemy aggro
                if (EntityType == EntityTypes.EnemyClass || EntityType == EntityTypes.EnemyMonster)
                {
                    // Make enemy aggressive to player
                    EnemyMotor enemyMotor = transform.GetComponent <EnemyMotor>();
                    if (enemyMotor)
                    {
                        if (!enemyMotor.IsHostile)
                        {
                            GameManager.Instance.MakeEnemiesHostile();
                        }
                        enemyMotor.MakeEnemyHostileToAttacker(GameManager.Instance.PlayerEntityBehaviour);
                    }
                }
            }
        }
Exemple #18
0
        public object GetSaveData()
        {
            if (!enemy)
            {
                return(null);
            }

            // Get entity behaviour
            DaggerfallEntityBehaviour entityBehaviour = enemy.GetComponent <DaggerfallEntityBehaviour>();

            if (!entityBehaviour)
            {
                return(null);
            }

            // Create save data
            EnemyEntity          entity      = entityBehaviour.Entity as EnemyEntity;
            EnemyMotor           motor       = enemy.GetComponent <EnemyMotor>();
            EnemySenses          senses      = enemy.GetComponent <EnemySenses>();
            DaggerfallMobileUnit mobileEnemy = enemy.GetComponentInChildren <DaggerfallMobileUnit>();
            EnemyData_v1         data        = new EnemyData_v1();

            data.loadID               = LoadID;
            data.gameObjectName       = entityBehaviour.gameObject.name;
            data.currentPosition      = enemy.transform.position;
            data.currentRotation      = enemy.transform.rotation;
            data.entityType           = entity.EntityType;
            data.careerName           = entity.Career.Name;
            data.careerIndex          = entity.CareerIndex;
            data.startingHealth       = entity.MaxHealth;
            data.currentHealth        = entity.CurrentHealth;
            data.currentFatigue       = entity.CurrentFatigue;
            data.currentMagicka       = entity.CurrentMagicka;
            data.isHostile            = motor.IsHostile;
            data.hasEncounteredPlayer = senses.HasEncounteredPlayer;
            data.isDead               = (entity.CurrentHealth <= 0) ? true : false;
            data.questSpawn           = enemy.QuestSpawn;
            data.mobileGender         = mobileEnemy.Summary.Enemy.Gender;
            data.items      = entity.Items.SerializeItems();
            data.equipTable = entity.ItemEquipTable.SerializeEquipTable();

            // Add quest resource data if present
            QuestResourceBehaviour questResourceBehaviour = GetComponent <QuestResourceBehaviour>();

            if (questResourceBehaviour)
            {
                data.questResource = questResourceBehaviour.GetSaveData();
            }

            return(data);
        }
        public void RestoreSaveData(object dataIn)
        {
            if (!enemy)
            {
                return;
            }

            EnemyData_v1 data = (EnemyData_v1)dataIn;

            if (data.loadID != LoadID)
            {
                return;
            }

            DaggerfallEntityBehaviour entityBehaviour = enemy.GetComponent <DaggerfallEntityBehaviour>();
            EnemySenses senses = enemy.GetComponent <EnemySenses>();
            EnemyMotor  motor  = enemy.GetComponent <EnemyMotor>();
            EnemyEntity entity = entityBehaviour.Entity as EnemyEntity;

            // Quiesce entity during state restore
            entity.Quiesce = true;

            // Restore enemy career or class if different
            if (entity.EntityType != data.entityType || entity.CareerIndex != data.careerIndex)
            {
                SetupDemoEnemy setupEnemy = enemy.GetComponent <SetupDemoEnemy>();
                setupEnemy.ApplyEnemySettings(data.entityType, data.careerIndex, data.isHostile);
                setupEnemy.AlignToGround();
            }

            // Restore enemy position
            enemy.transform.position    = data.currentPosition;
            enemy.transform.rotation    = data.currentRotation;
            entity.MaxHealth            = data.startingHealth;
            entity.CurrentHealth        = data.currentHealth;
            entity.CurrentFatigue       = data.currentFatigue;
            entity.CurrentMagicka       = data.currentMagicka;
            motor.IsHostile             = data.isHostile;
            senses.HasEncounteredPlayer = true;

            // Disable dead enemies
            if (data.isDead)
            {
                entityBehaviour.gameObject.SetActive(false);
            }

            // Resume entity
            entity.Quiesce = false;
        }
Exemple #20
0
    private void CreateEnemy()
    {
        //选择一条可用路线
        WayLine[] usableLines = FindUsaleWayLines();
        WayLine   way         = usableLines[Random.Range(0, usableLines.Length)];
        //延迟时间随机
        int        index = Random.Range(0, enemyTypes.Length);
        GameObject enemy = Instantiate(enemyTypes[index], way.wayPoints[0], Quaternion.identity) as GameObject;

        EnemyManager.monsters.Add(enemy);

        EnemyMotor motor = enemy.GetComponent <EnemyMotor>();
        Enemy      e     = enemy.GetComponent <Enemy>();

        e.spawn      = this;
        motor.line   = way;
        way.isUsable = false;
    }
Exemple #21
0
    private void CreateEnemy()
    {
        WayLine[] result = SelectUsableWayLine();
        WayLine   line   = result[Random.Range(0, result.Length)];

        //创建敌人
        //Object.Instantiate(敌人预制件,第一个点的位置,旋转角度)
        int        count = Random.Range(0, enemyType.Length);
        GameObject go    = Instantiate(enemyType[count], line.WayPoints[0], Quaternion.identity);
        //设置参数
        EnemyMotor motor = go.GetComponent <EnemyMotor>();

        motor.line    = line;
        line.isUsable = false;//不可使用
        //********************************

        //传递生成器引用给EnemyStatusInfo
        go.GetComponent <EnemyStatusInfo>().spawn = this;
    }
Exemple #22
0
    void CreateEnemy()
    {
        Transform spawnPoint = spawnPoints[Random.Range(0, spawnPoints.Count)];
        //   Debug.Log("spawning enemy : " + enemyID);

        GameObject enemyObj = Instantiate(EnemyPrefab, spawnPoint);

        enemyObj.transform.localPosition = Vector3.zero;
        EnemyHurt enemyHurt = enemyObj.GetComponent <EnemyHurt>();

        enemyHurt.master = master;

        EnemyMotor motor = enemyObj.GetComponent <EnemyMotor>();

        motor.master              = master;
        motor.bulletSpeedMulti   += levelData.bulletSpeedIncrease.Evaluate(Time.time);
        motor.bulletIntervalMulti = levelData.bulletIntervalMulti.Evaluate(Time.time);

        enemyID++;
    }
Exemple #23
0
 private static void PacifyWere(bool isBeast)
 {
     DaggerfallEntityBehaviour[] entityBehaviours = FindObjectsOfType <DaggerfallEntityBehaviour>();
     for (int i = 0; i < entityBehaviours.Length; i++)
     {
         DaggerfallEntityBehaviour entityBehaviour = entityBehaviours[i];
         if (entityBehaviour.EntityType == EntityTypes.EnemyMonster)
         {
             EnemyEntity enemyEntity = entityBehaviour.Entity as EnemyEntity;
             EnemySenses enemySenses = entityBehaviour.GetComponent <EnemySenses>();
             EnemyMotor  enemyMotor  = entityBehaviour.GetComponent <EnemyMotor>();
             if (enemySenses && enemySenses.HasEncounteredPlayer && enemyEntity.MobileEnemy.Team == MobileTeams.Werecreatures && enemyMotor.IsHostile && enemyEntity.MobileEnemy.Team != MobileTeams.PlayerAlly)
             {
                 if (isBeast)
                 {
                     enemyMotor.IsHostile = false;
                     DaggerfallUI.AddHUDText("Pacified " + enemyEntity.Name + " using your lycanthropy.");
                 }
             }
         }
     }
 }
        public override void MagicRound()
        {
            base.MagicRound();

            // Get peered entity gameobject
            DaggerfallEntityBehaviour entityBehaviour = GetPeeredEntityBehaviour(manager);

            if (!entityBehaviour)
            {
                return;
            }

            // Set target non-hostile
            if (IsAffinityMatch(entityBehaviour.Entity))
            {
                EnemyMotor enemyMotor = entityBehaviour.GetComponent <EnemyMotor>();
                if (enemyMotor)
                {
                    enemyMotor.IsHostile = false;
                    Debug.LogFormat("Enemy {0} is now non-hostile", enemyMotor.name);
                }
            }
        }
Exemple #25
0
    override public void OnStateExit(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
    {
        if (_playerController != null)
        {
            _playerController.SwitchState <NormalState>();
            _playerMotor.HasGravity = true;
            _animationsController.Climb(false);
            animator.applyRootMotion = false;
            _playerController        = null;
        }

        if (_enemyMotor != null)
        {
            _enemyMotor.RigidBody.isKinematic = true;
            _enemyMotor.ResetRigidbodyConstraints();
            _enemyMotor.UpdateTransformToNavmesh = true;
            _enemyMotor.Warp(_enemyMotor.transform.position);
            _animationsController.Climb(false);
            animator.applyRootMotion = false;
            _enemyBehaviour.StopMovementAction();
            _enemyMotor = null;
        }
    }
        void StartLevitating()
        {
            // Get peered entity gameobject
            DaggerfallEntityBehaviour entityBehaviour = GetPeeredEntityBehaviour(manager);

            if (!entityBehaviour)
            {
                return;
            }

            // Enable levitation for player or enemies
            if (entityBehaviour.EntityType == EntityTypes.Player)
            {
                GameManager.Instance.PlayerMotor.GetComponent <LevitateMotor>().IsLevitating = true;
            }
            else if (entityBehaviour.EntityType == EntityTypes.EnemyMonster || entityBehaviour.EntityType == EntityTypes.EnemyClass)
            {
                EnemyMotor enemyMotor = entityBehaviour.GetComponent <EnemyMotor>();
                if (enemyMotor)
                {
                    enemyMotor.IsLevitating = true;
                }
            }
        }
 private static void Halt()
 {
     DaggerfallEntityBehaviour[] entityBehaviours = FindObjectsOfType <DaggerfallEntityBehaviour>();
     for (int i = 0; i < entityBehaviours.Length; i++)
     {
         DaggerfallEntityBehaviour entityBehaviour = entityBehaviours[i];
         if (entityBehaviour.EntityType == EntityTypes.EnemyClass && !playerEntity.HaveShownSurrenderToGuardsDialogue)
         {
             EnemyEntity enemyEntity = entityBehaviour.Entity as EnemyEntity;
             EnemyMotor  enemyMotor  = entityBehaviour.GetComponent <EnemyMotor>();
             if (enemyEntity.MobileEnemy.Team == MobileTeams.CityWatch && enemyMotor.IsHostile && Vector3.Distance(entityBehaviour.transform.position, GameManager.Instance.PlayerObject.transform.position) < 4f)
             {
                 EnemySenses enemySenses       = entityBehaviour.GetComponent <EnemySenses>();
                 bool        guardCanSeePlayer = enemySenses.Target == GameManager.Instance.PlayerEntityBehaviour && enemySenses.TargetInSight;
                 if (guardCanSeePlayer)
                 {
                     playerEntity.HaveShownSurrenderToGuardsDialogue = true;
                     BribePrompt();
                     return;
                 }
             }
         }
     }
 }
        public void RestoreSaveData(object dataIn)
        {
            if (!enemy)
            {
                return;
            }

            EnemyData_v1 data = (EnemyData_v1)dataIn;

            if (data.loadID != LoadID)
            {
                return;
            }

            DaggerfallEntityBehaviour entityBehaviour = enemy.GetComponent <DaggerfallEntityBehaviour>();
            EnemySenses senses = enemy.GetComponent <EnemySenses>();
            EnemyMotor  motor  = enemy.GetComponent <EnemyMotor>();
            EnemyEntity entity = entityBehaviour.Entity as EnemyEntity;

            // Restore enemy career or class if different
            if (entity == null || entity.EntityType != data.entityType || entity.CareerIndex != data.careerIndex)
            {
                SetupDemoEnemy setupEnemy = enemy.GetComponent <SetupDemoEnemy>();
                setupEnemy.ApplyEnemySettings(data.entityType, data.careerIndex, data.mobileGender, data.isHostile, alliedToPlayer: data.alliedToPlayer);
                setupEnemy.AlignToGround();

                if (entity == null)
                {
                    entity = entityBehaviour.Entity as EnemyEntity;
                }
            }

            // Quiesce entity during state restore
            entity.Quiesce = true;

            // Restore enemy data
            entityBehaviour.gameObject.name = data.gameObjectName;
            enemy.transform.rotation        = data.currentRotation;
            entity.QuestFoeSpellQueueIndex  = data.questFoeSpellQueueIndex;
            entity.QuestFoeItemQueueIndex   = data.questFoeItemQueueIndex;
            entity.WabbajackActive          = data.wabbajackActive;
            entity.Items.DeserializeItems(data.items);
            entity.ItemEquipTable.DeserializeEquipTable(data.equipTable, entity.Items);
            entity.MaxHealth = data.startingHealth;
            entity.SetHealth(data.currentHealth, true);
            entity.SetFatigue(data.currentFatigue, true);
            entity.SetMagicka(data.currentMagicka, true);
            int team = data.team;

            if (team > 0)   // Added 1 to made backwards compatible. 0 = no team saved
            {
                entity.Team = (MobileTeams)(team - 1);
            }
            motor.IsHostile             = data.isHostile;
            senses.HasEncounteredPlayer = data.hasEncounteredPlayer;

            // Restore enemy position and migrate to floating y support for exteriors
            // Interiors seem to be working fine at this stage with any additional support
            // Dungeons are not involved with floating y and don't need any changes
            WorldContext enemyContext = GetEnemyWorldContext(enemy);

            if (enemyContext == WorldContext.Exterior)
            {
                RestoreExteriorPositionHandler(enemy, data, enemyContext);
            }
            else
            {
                // Everything else
                enemy.transform.position = data.currentPosition;
            }

            // Disable dead enemies
            if (data.isDead)
            {
                entityBehaviour.gameObject.SetActive(false);
            }

            // Restore quest resource link
            enemy.QuestSpawn = data.questSpawn;
            if (enemy.QuestSpawn)
            {
                // Add QuestResourceBehaviour to GameObject
                QuestResourceBehaviour questResourceBehaviour = entityBehaviour.gameObject.AddComponent <QuestResourceBehaviour>();
                questResourceBehaviour.RestoreSaveData(data.questResource);

                // Destroy QuestResourceBehaviour if no actual quest properties are restored from save
                if (questResourceBehaviour.QuestUID == 0 || questResourceBehaviour.TargetSymbol == null)
                {
                    enemy.QuestSpawn = false;
                    Destroy(questResourceBehaviour);
                }
            }

            // Restore instanced effect bundles
            GetComponent <EntityEffectManager>().RestoreInstancedBundleSaveData(data.instancedEffectBundles);

            // Resume entity
            entity.Quiesce = false;
        }
Exemple #29
0
        private void Update()
        {
            // Ensure target resource has this behaviour assigned
            // Coupling is otherwise lost when reloading a game
            if (targetResource != null)
            {
                if (!targetResource.QuestResourceBehaviour)
                {
                    targetResource.QuestResourceBehaviour = this;
                }
            }

            // Handle NPC checks
            if (targetResource is Person && targetResource.QuestResourceBehaviour)
            {
                // Disable person resource if hidden or destroyed
                // Normally this is done via QuestResource.Tick() but this stops receiving ticks when quest terminates
                // Sometimes a quest person is hidden at same time quest is ended, e.g. $CUREWER when spawning lycanthrope foe
                // Also disabling here to handle this situation
                Person targetPerson = (Person)targetResource;
                if (targetPerson.IsHidden || targetPerson.IsDestroyed)
                {
                    targetPerson.QuestResourceBehaviour.gameObject.SetActive(false);
                }
            }

            // Handle enemy checks
            if (enemyEntityBehaviour)
            {
                // Get foe resource
                Foe foe = (Foe)targetResource;
                if (foe == null)
                {
                    return;
                }

                // If foe is hidden then remove self from game
                if (foe.IsHidden)
                {
                    Destroy(gameObject);
                    return;
                }

                // Handle restrained check
                // This might need some tuning in relation to injured and death checks
                if (foe.IsRestrained)
                {
                    // Make enemy non-hostile
                    EnemyMotor enemyMotor = transform.GetComponent <EnemyMotor>();
                    if (enemyMotor)
                    {
                        enemyMotor.IsHostile = false;
                    }

                    // Lower flag now this has been handled
                    foe.ClearRestrained();
                }

                // Handle injured check
                // This has to happen before death or script actions attached to injured event will not trigger
                if (enemyEntityBehaviour.Entity.CurrentHealth < enemyEntityBehaviour.Entity.MaxHealth && !foe.InjuredTrigger)
                {
                    foe.SetInjured();
                    return;
                }

                // Handle death check
                if (enemyEntityBehaviour.Entity.CurrentHealth <= 0 && !isFoeDead)
                {
                    foe.IncrementKills();
                    isFoeDead = true;
                }
            }
        }
Exemple #30
0
 // Use this for initialization
 void Start()
 {
     player   = GameObject.FindGameObjectWithTag("Player");
     motor    = GetComponent <EnemyMotor> ();
     animator = GetComponent <Animator> ();
 }
Exemple #31
0
        /// <summary>
        /// Handle shared logic when player attacks entity.
        /// </summary>
        public void HandleAttackFromSource(DaggerfallEntityBehaviour sourceEntityBehaviour)
        {
            // Break "normal power" concealment effects on source
            if (sourceEntityBehaviour.Entity.IsMagicallyConcealedNormalPower)
            {
                EntityEffectManager.BreakNormalPowerConcealmentEffects(sourceEntityBehaviour);
            }

            // When source is player
            if (sourceEntityBehaviour == GameManager.Instance.PlayerEntityBehaviour)
            {
                PlayerEntity playerEntity = GameManager.Instance.PlayerEntity;
                // Handle civilian NPC crime reporting
                if (EntityType == EntityTypes.CivilianNPC)
                {
                    MobilePersonNPC mobileNpc = transform.GetComponent <MobilePersonNPC>();
                    if (mobileNpc)
                    {
                        // Handle assault or murder
                        if (Entity.CurrentHealth > 0)
                        {
                            playerEntity.CrimeCommitted = PlayerEntity.Crimes.Assault;
                            playerEntity.SpawnCityGuards(true);
                        }
                        else
                        {
                            if (!mobileNpc.IsGuard)
                            {
                                playerEntity.TallyCrimeGuildRequirements(false, 5);
                                playerEntity.CrimeCommitted = PlayerEntity.Crimes.Murder;
                                playerEntity.SpawnCityGuards(true);
                            }
                            else
                            {
                                playerEntity.CrimeCommitted = PlayerEntity.Crimes.Assault;
                                playerEntity.SpawnCityGuard(mobileNpc.transform.position, mobileNpc.transform.forward);
                            }

                            // Disable when dead
                            mobileNpc.Motor.gameObject.SetActive(false);
                        }
                    }
                }

                // Handle mobile enemy aggro
                if (EntityType == EntityTypes.EnemyClass || EntityType == EntityTypes.EnemyMonster)
                {
                    // Make enemy aggressive to player
                    EnemyMotor enemyMotor = transform.GetComponent <EnemyMotor>();
                    if (enemyMotor)
                    {
                        if (!enemyMotor.IsHostile)
                        {
                            GameManager.Instance.MakeEnemiesHostile();
                        }
                        enemyMotor.MakeEnemyHostileToAttacker(GameManager.Instance.PlayerEntityBehaviour);
                    }

                    // Handle killing guards
                    EnemyEntity enemyEntity = entity as EnemyEntity;
                    if (enemyEntity.MobileEnemy.ID == (int)MobileTypes.Knight_CityWatch && entity.CurrentHealth <= 0)
                    {
                        playerEntity.TallyCrimeGuildRequirements(false, 1);
                        playerEntity.CrimeCommitted = PlayerEntity.Crimes.Murder;
                    }
                }
            }
        }
Exemple #32
0
        /// <summary>
        /// Check if this entity is a hostile enemy.
        /// Currently only used to block damage and aggro from Sleep spell in N0B00Y08.
        /// </summary>
        /// <returns>True if this entity is a hostile enemy.</returns>
        bool IsHostileEnemy()
        {
            EnemyMotor enemyMotor = transform.GetComponent <EnemyMotor>();

            return(enemyMotor && enemyMotor.IsHostile);
        }