Blipples

NPCInteractCode

May 9th, 2024
31
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.73 KB | None | 0 0
  1. public class NPC : NetworkBehaviour, IInteractable, IDamageable
  2. {
  3. private void Start()
  4. {
  5. if (!IsServerInitialized)
  6. {
  7. GetComponent<NPC>().enabled = false;
  8. }
  9. }
  10.  
  11. //IInteractable Methods
  12. public void Interact(GameObject gameObject)
  13. {
  14. // Gets the target's base stats
  15. targetStatManagerBaseStats = gameObject.GetComponent<IStat>().CharacterBaseStats;
  16.  
  17. gameObjectTargeting = gameObject;
  18.  
  19. TakeDamage(targetStatManagerBaseStats.statsDictionary[StatType.Primary][PrimaryStat.Strength].Value.StatValue);
  20. }
  21.  
  22. public void TakeDamage(int damage)
  23. {
  24. npcStats.AddStat(StatType.Primary,PrimaryStat.HP,-damage);
  25.  
  26. if (npcStats.statsDictionary[StatType.Primary][PrimaryStat.HP].Value.StatValue <= 0)
  27. {
  28. Die();
  29. }
  30. }
  31.  
  32. [ServerRpc]
  33. public void Die()
  34. {
  35. // Check if gameObjectTargeting is a Player
  36. PlayerController player = gameObjectTargeting.GetComponent<PlayerController>();
  37.  
  38. if (player != null && player.InteractableObject == (object)this)
  39. {
  40. // If so, set interactableObject to null
  41. player.InteractableObject = null;
  42.  
  43. // Adds experience to the target
  44. targetStatManagerBaseStats.AddStat(StatType.Primary, PrimaryStat.Experience, npcVariables.experienceOnKill);
  45.  
  46. // Drops loot
  47. DropLoot();
  48.  
  49. InstanceFinder.ServerManager.Despawn(this.gameObject);
  50.  
  51. LogManager.Instance.Log($"{gameObject.name} has died");
  52.  
  53. return;
  54. }
  55.  
  56. LogManager.Instance.Log($"{gameObject.name} has NOT died. No reference to PlayerController.");
  57. }
  58. }
Advertisement
Add Comment
Please, Sign In to add comment