Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class NPC : NetworkBehaviour, IInteractable, IDamageable
- {
- private void Start()
- {
- if (!IsServerInitialized)
- {
- GetComponent<NPC>().enabled = false;
- }
- }
- //IInteractable Methods
- public void Interact(GameObject gameObject)
- {
- // Gets the target's base stats
- targetStatManagerBaseStats = gameObject.GetComponent<IStat>().CharacterBaseStats;
- gameObjectTargeting = gameObject;
- TakeDamage(targetStatManagerBaseStats.statsDictionary[StatType.Primary][PrimaryStat.Strength].Value.StatValue);
- }
- public void TakeDamage(int damage)
- {
- npcStats.AddStat(StatType.Primary,PrimaryStat.HP,-damage);
- if (npcStats.statsDictionary[StatType.Primary][PrimaryStat.HP].Value.StatValue <= 0)
- {
- Die();
- }
- }
- [ServerRpc]
- public void Die()
- {
- // Check if gameObjectTargeting is a Player
- PlayerController player = gameObjectTargeting.GetComponent<PlayerController>();
- if (player != null && player.InteractableObject == (object)this)
- {
- // If so, set interactableObject to null
- player.InteractableObject = null;
- // Adds experience to the target
- targetStatManagerBaseStats.AddStat(StatType.Primary, PrimaryStat.Experience, npcVariables.experienceOnKill);
- // Drops loot
- DropLoot();
- InstanceFinder.ServerManager.Despawn(this.gameObject);
- LogManager.Instance.Log($"{gameObject.name} has died");
- return;
- }
- LogManager.Instance.Log($"{gameObject.name} has NOT died. No reference to PlayerController.");
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment