Example #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;
        }
    }
Example #2
0
    /// <summary>
    /// Something spawned on world.
    /// </summary>
    /// <param name="value">Incoming message</param>
    private void OnSpawn(string[] value)
    {
        SNet_Network.Spawn readMessage = SNet_Network.SNetMessage.ReadMessage <SNet_Network.Spawn>(value[0]);
        readMessage.s = ulong.Parse(value[1]);

        if (GameMap.instance == null || !SNet_Network.instance.isHost(readMessage.s))
        {
            return;
        }

        SNet_Identity go = null;

        if (SNet_Identity.find(readMessage.i, out go))
        {
            // Already have that identity.
            return;
        }

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

        if (prefab == null)
        {
            Debug.Log("Null spawn prefab: " + readMessage.b);
            return;
        }

        string pName = prefab.name;

        prefab      = Instantiate(prefab, readMessage.p, (readMessage.r != Quaternion.identity) ? readMessage.r : prefab.rotation);
        prefab.name = pName + " (Networked)";
        if (readMessage.c != Vector3.zero)
        {
            prefab.localScale = readMessage.c;
        }

        Destroy(prefab.GetComponent <Snet_SceneObject_AutoSpawn>());

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

        if (identity != null)
        {
            identity.Set(readMessage.i, readMessage.b);

            Rigidbody rBody = identity.GetComponent <Rigidbody>();
            if (rBody != null)
            {
                // Default force
                rBody.AddForce(identity.transform.forward * readMessage.f);
            }
        }
    }
Example #3
0
    /// <summary>
    /// Player spawn.
    /// </summary>
    /// <param name="value">Incoming message</param>
    private void OnSpawn_Player(string[] value)
    {
        SNet_Network.Spawn_Player readMessage = SNet_Network.SNetMessage.ReadMessage <SNet_Network.Spawn_Player>(value[0]);
        readMessage.s = ulong.Parse(value[1]);

        if (GameMap.instance == null)
        {
            return;
        }

        SNet_Identity go = null;

        if (SNet_Identity.find(readMessage.i, out go))
        {
            // Already have that identity.
            return;
        }

        Debug.Log("Spawn_Player(): " + readMessage.s);

        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>();
        bool          isLocalPlayer = readMessage.s == Client.Instance.SteamId;

        prefab.gameObject.AddComponent <PlayerInventory>().isLocalPlayer = isLocalPlayer;
        prefab.gameObject.AddComponent <SNet_Controller>().isLocalPlayer = isLocalPlayer;
        prefab.gameObject.AddComponent <SNet_Animator>();

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