Exemple #1
0
    /// <summary>
    /// Spawn lootable item on world.
    /// </summary>
    /// <param name="value">Incoming message</param>
    private void OnSpawn_Item(string[] value)
    {
        SNet_Network.Spawn_Item readMessage = SNet_Network.SNetMessage.ReadMessage <SNet_Network.Spawn_Item>(value[0]);
        readMessage.s = ulong.Parse(value[1]);

        if (!SNet_Network.instance.isHost(readMessage.s))
        {
            return; // Only the host can send this
        }
        SNet_Identity go = null;

        if (SNet_Identity.find(readMessage.i, out go))
        {
            if (readMessage.a > 0)
            {
                go.GetComponent <Item>().item.ammo = readMessage.a;
            }
            // Already have that identity.
            return;
        }

        Transform prefab = ResourcesLoader.prefabs.Find(x => x.name == readMessage.b);

        prefab = Instantiate(prefab, readMessage.p, readMessage.r);
        if (readMessage.c != Vector3.zero)
        {
            prefab.localScale = readMessage.c;
        }

        SNet_Identity identity = prefab.GetComponent <SNet_Identity>();

        identity.Set(readMessage.i, readMessage.b);

        if (readMessage.a > 0) // or it has default ammo
        {
            identity.GetComponent <Item>().item.ammo = readMessage.a;
        }

        Collider cldr = prefab.GetComponent <Collider>();

        if (cldr != null)
        {
            cldr.enabled = true;
        }

        Rigidbody rb = prefab.GetComponent <Rigidbody>();

        if (rb != null)
        {
            rb.isKinematic = false;
        }

        DestroyIn dIn = prefab.GetComponent <DestroyIn>();

        if (dIn != null)
        {
            dIn.enabled = true;
        }
    }
Exemple #2
0
    void Spawn(Spawnable spawnable)
    {
        Vector3 position = spawnable.position.get();

        if (Physics.OverlapSphere(position, spawnable.checkDistance).ToList().Find(x => x.GetComponent <SNet_Identity>()))
        {
            return; // Closest identity detected range sphere
        }
        string target = spawnable.requestPrefabByRate();

        SNet_Network.Spawn_Item si = new SNet_Network.Spawn_Item
                                         (target, position + Vector3.up, Random.rotation, Vector3.zero, 0);
        SNet_Network.instance.Send_Message(si);
    }