Ejemplo n.º 1
0
 public void OnHurt(HurtingEventArgs ev)
 {
     if (ev.Target.IsNPC())
     {
         Npc npc = Npc.Get(ev.Target);
         npc.FireEvent(new NPCHurtEvent(npc, ev.Attacker));
     }
 }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
 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;
     }
 }