/// <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); } } } }
/// <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; } } } }