public void OnHurt(HurtingEventArgs ev) { if (ev.Target.IsNPC()) { Npc npc = Npc.Get(ev.Target); npc.FireEvent(new NPCHurtEvent(npc, ev.Attacker)); } }
public static Npc CreateNPC(Vector3 pos, Vector2 rot, Vector3 scale, RoleType type = RoleType.ClassD, ItemType itemHeld = ItemType.None, string name = "(EMPTY)", string root_node = "default_node.yml") { GameObject obj = UnityEngine.Object.Instantiate( NetworkManager.singleton.spawnPrefabs.FirstOrDefault(p => p.gameObject.name == "Player")); CharacterClassManager ccm = obj.GetComponent <CharacterClassManager>(); pos = new Vector3(pos.x, pos.y - (1f - scale.y) * Plugin.Instance.Config.NpcSizePositionMultiplier, pos.z); obj.transform.localScale = scale; obj.transform.position = pos; QueryProcessor processor = obj.GetComponent <QueryProcessor>(); processor.NetworkPlayerId = QueryProcessor._idIterator++; processor._ipAddress = "127.0.0.WAN"; ccm.CurClass = type; obj.GetComponent <PlayerStats>().SetHPAmount(ccm.Classes.SafeGet(type).maxHP); obj.GetComponent <NicknameSync>().Network_myNickSync = name; ServerRoles roles = obj.GetComponent <ServerRoles>(); roles.MyText = "NPC"; roles.MyColor = "red"; NetworkServer.Spawn(obj); PlayerManager.AddPlayer(obj); //I'm not sure if I need this Player ply_obj = new Player(obj); Player.Dictionary.Add(obj, ply_obj); Player.IdsCache.Add(ply_obj.Id, ply_obj); Npc npcc = obj.AddComponent <Npc>(); npcc.ItemHeld = itemHeld; npcc.RootNode = TalkNode.FromFile(Path.Combine(Config.NPCs_nodes_path, root_node)); npcc.NPCPlayer.ReferenceHub.transform.localScale = scale; npcc.NPCPlayer.SessionVariables.Add("IsNPC", true); npcc.AttachedCoroutines.Add(Timing.CallDelayed(0.3f, () => { npcc.NPCPlayer.ReferenceHub.playerMovementSync.OverridePosition(pos, 0, true); npcc.NPCPlayer.Rotations = rot; })); npcc.AttachedCoroutines.Add(Timing.CallDelayed(0.4f, () => { npcc.FireEvent(new NPCOnCreatedEvent(npcc, null)); })); return(npcc); }
public void OnDying(DyingEventArgs ev) { if (ev.Target.IsNPC()) { Npc cmp = Npc.Get(ev.Target); NPCDiedEvent npc_ev = new NPCDiedEvent(cmp, ev.Killer); cmp.FireEvent(npc_ev); cmp.Kill(ev.HitInformation.GetDamageType() != DamageTypes.RagdollLess); ev.IsAllowed = false; } }