示例#1
0
 private void OnDestroy()
 {
     if (Label.INSTANCE != null)
         Label.INSTANCE.Target = null;
     Hack = null;
     Destroy(FindObjectOfType<HUD>());
 }
示例#2
0
        public string Address(BasePlayer player)
        {
            bool flag;

            if (player != null)
            {
                Networkable networkable = player.net;
                if (networkable != null)
                {
                    flag = networkable.connection;
                }
                else
                {
                    flag = false;
                }
            }
            else
            {
                flag = false;
            }
            if (!flag)
            {
                return(null);
            }
            return(this.Address(player.net.connection));
        }
示例#3
0
 private void OnDestroy()
 {
     if (Label.INSTANCE != null)
     {
         Label.INSTANCE.Target = null;
     }
     Hack = null;
     Destroy(FindObjectOfType <HUD>());
 }
示例#4
0
    private void MakeLine(Networkable a, Networkable b)
    {
        var dir = -Camera.main.transform.forward;

        var line = new GameObject("Line").AddComponent<LineRenderer>();
        line.transform.parent = transform;
        line.SetWidth(0.4f, 0.4f);
        line.SetPosition(0, a.transform.position + dir * 7);
        line.SetPosition(1, b.transform.position + dir * 7);
        line.sharedMaterial = NodeMaterial;
    }
示例#5
0
    private void MakeLine(Networkable a, Networkable b)
    {
        var dir = -Camera.main.transform.forward;

        var line = new GameObject("Line").AddComponent <LineRenderer>();

        line.transform.parent = transform;
        line.SetWidth(0.4f, 0.4f);
        line.SetPosition(0, a.transform.position + dir * 7);
        line.SetPosition(1, b.transform.position + dir * 7);
        line.sharedMaterial = NodeMaterial;
    }
示例#6
0
 public void Leave(Networkable nw)
 {
     if (this.networkables == null)
     {
         return;
     }
     if (!this.networkables.Contains(nw))
     {
         Debug.LogWarning("Leave: Network Group doesn't contain networkable!");
         return;
     }
     this.networkables.Remove(nw);
 }
示例#7
0
 public void Join(Networkable nw)
 {
     if (this.networkables == null)
     {
         return;
     }
     if (this.networkables.Contains(nw))
     {
         Debug.LogWarning("Insert: Network Group already contains networkable!");
         return;
     }
     this.networkables.Add(nw);
 }
示例#8
0
 private void DoLines(Networkable n)
 {
     if (LogA.Contains(n)) return;
     LogA.Add(n);
     DrawNode(n);
     foreach (var neighbor in n.Neighbors)
     {
         DrawNode(neighbor);
         MakeLine(n,neighbor);
         if (neighbor.Level <= Level && neighbor.Hacked)
             DoLines(neighbor);
     }
 }
示例#9
0
    private void DrawNode(Networkable n, bool hacked = false)
    {
        if (LogB.Contains(n)) return;
        LogB.Add(n);
        var dir = -Camera.main.transform.forward;

        var circle = GameObject.CreatePrimitive(PrimitiveType.Sphere).transform;
        circle.position = n.transform.position + dir * 8;
        circle.parent = transform;
        circle.GetComponent<MeshRenderer>().shadowCastingMode = ShadowCastingMode.Off;
        circle.GetComponent<MeshRenderer>().receiveShadows = false;
        circle.GetComponent<MeshRenderer>().sharedMaterial = NodeMaterial;
        circle.gameObject.AddComponent<NetNode>().Label = NodeLabel;
        circle.GetComponent<NetNode>().Origin = n;
        circle.GetComponent<NetNode>().CanHack = n.Level <= Level;
        if (hacked) circle.GetComponent<NetNode>().Hacked = true;
    }
示例#10
0
 private void DoLines(Networkable n)
 {
     if (LogA.Contains(n))
     {
         return;
     }
     LogA.Add(n);
     DrawNode(n);
     foreach (var neighbor in n.Neighbors)
     {
         DrawNode(neighbor);
         MakeLine(n, neighbor);
         if (neighbor.Level <= Level && neighbor.Hacked)
         {
             DoLines(neighbor);
         }
     }
 }
 public virtual void Spawn()
 {
     this.SpawnShared();
     if (this.net == null)
     {
         this.net = Network.Net.sv.CreateNetworkable();
     }
     this.creationFrame = UnityEngine.Time.frameCount;
     this.PreInitShared();
     this.InitShared();
     this.ServerInit();
     this.PostInitShared();
     this.UpdateNetworkGroup();
     this.isSpawned = true;
     Interface.CallHook("OnEntitySpawned", this);
     this.SendNetworkUpdateImmediate(true);
     if (Rust.Application.isLoading && !Rust.Application.isLoadingSave)
     {
         base.gameObject.SendOnSendNetworkUpdate(this as BaseEntity);
     }
 }
示例#12
0
 public virtual void Spawn()
 {
     this.SpawnShared();
     if (this.net == null)
     {
         this.net = ((Network.Server)Net.sv).CreateNetworkable();
     }
     this.creationFrame = Time.get_frameCount();
     this.PreInitShared();
     this.InitShared();
     this.ServerInit();
     this.PostInitShared();
     this.UpdateNetworkGroup();
     this.isSpawned = true;
     Interface.CallHook("OnEntitySpawned", (object)this);
     this.SendNetworkUpdateImmediate(true);
     if (Application.isLoading == null || Application.isLoadingSave != null)
     {
         return;
     }
     ((Component)this).get_gameObject().SendOnSendNetworkUpdate(this as BaseEntity);
 }
示例#13
0
    private bool HasTerminal(Networkable n, int level)
    {
        if (n == null || NLog.Contains(n))
        {
            return(false);
        }
        if (n.GetComponent <Terminal>() && n.Level >= level)
        {
            return(true);
        }

        NLog.Add(n);

        for (int i = 0; i < n.Neighbors.Count; ++i)
        {
            if (HasTerminal(n.Neighbors[i], level))
            {
                return(true);
            }
        }
        return(false);
    }
示例#14
0
    private void DrawNode(Networkable n, bool hacked = false)
    {
        if (LogB.Contains(n))
        {
            return;
        }
        LogB.Add(n);
        var dir = -Camera.main.transform.forward;

        var circle = GameObject.CreatePrimitive(PrimitiveType.Sphere).transform;

        circle.position = n.transform.position + dir * 8;
        circle.parent   = transform;
        circle.GetComponent <MeshRenderer>().shadowCastingMode = ShadowCastingMode.Off;
        circle.GetComponent <MeshRenderer>().receiveShadows    = false;
        circle.GetComponent <MeshRenderer>().sharedMaterial    = NodeMaterial;
        circle.gameObject.AddComponent <NetNode>().Label       = NodeLabel;
        circle.GetComponent <NetNode>().Origin  = n;
        circle.GetComponent <NetNode>().CanHack = n.Level <= Level;
        if (hacked)
        {
            circle.GetComponent <NetNode>().Hacked = true;
        }
    }
示例#15
0
    private bool HasTerminal(Networkable n, int level)
    {
        if (n == null || NLog.Contains(n)) return false;
        if (n.GetComponent<Terminal>() && n.Level >= level) return true;

        NLog.Add(n);

        for (int i = 0; i < n.Neighbors.Count; ++i)
        {
            if (HasTerminal(n.Neighbors[i], level)) return true;
        }
        return false;
    }
示例#16
0
 private void Start()
 {
     net = GetComponent<Networkable>();
 }
示例#17
0
 public void InitLoad(uint entityID)
 {
     this.net = ((Network.Server)Net.sv).CreateNetworkable(entityID);
     BaseNetworkable.serverEntities.RegisterID(this);
     this.PreServerLoad();
 }
示例#18
0
    public void Remake()
    {
        Generate = false;
        while (transform.childCount > 0)
        {
            DestroyImmediate(transform.GetChild(0).gameObject);
        }

        var map      = GetMap().OrderBy(room => room.Level);
        var maxLevel = 0;

        foreach (var room in map)
        {
            var g = new GameObject("Room").transform;
            g.parent   = transform;
            g.position = new Vector3(room.Position.x, 0, room.Position.y);
            g.tag      = "Merge";

            var floor = GameObject.CreatePrimitive(PrimitiveType.Cube).transform;
            floor.parent        = g;
            floor.localScale    = new Vector3(room.Size.x, 0.1f, room.Size.y);
            floor.localPosition = new Vector3(0, -0.05f, 0);
            floor.localRotation = Quaternion.identity;
            floor.GetComponent <MeshRenderer>().sharedMaterial = FloorMaterial;
            floor.gameObject.layer = LayerMask.NameToLayer("Ground");

            var patrol = new GameObject(room.Level + "-Patrol").transform;
            patrol.parent   = transform;
            patrol.position = new Vector3(room.Position.x, 0, room.Position.y);
            patrol.tag      = "Patrol";

            if (room.Level > maxLevel)
            {
                maxLevel = room.Level;
            }

            Networkable startDoor = null;
            foreach (Transform t in room.Spawns.Keys)
            {
                var spawn = Instantiate(t);
                spawn.transform.position = g.position + new Vector3(
                    Random.Range(-room.Size.x / 2 + WallThickness * 2, room.Size.x / 2 - WallThickness * 2),
                    0.5f,
                    Random.Range(-room.Size.y / 2 + WallThickness * 2, room.Size.y / 2 - WallThickness * 2));
                spawn.parent = transform;
                var human = spawn.GetComponent <Human>();
                var net   = spawn.GetComponent <Networkable>();
                if (human != null)
                {
                    human.Level = room.Spawns[t];
                }
                if (net != null)
                {
                    net.Level = room.Spawns[t];
                }
                if (net != null && room.Spawns.ContainsKey(Spawn.transform))
                {
                    startDoor = net;
                }
            }

            var wall = GameObject.CreatePrimitive(PrimitiveType.Cube).transform;
            wall.parent        = g;
            wall.localScale    = new Vector3(WallThickness, WallHeight, room.Size.y * (1 - room.Doors[0]) - (room.Doors[0] != 0 ? DoorWidth / 2 : 0));
            wall.localPosition = new Vector3(-room.Size.x / 2 + WallThickness / 2, WallHeight / 2, room.Size.y * room.Doors[0] / 2 + (room.Doors[0] != 0 ? DoorWidth / 4 : 0));
            wall.localRotation = Quaternion.identity;
            wall.GetComponent <MeshRenderer>().sharedMaterial = FloorMaterial;
            wall.gameObject.layer = LayerMask.NameToLayer("Obstacles");
            wall               = GameObject.CreatePrimitive(PrimitiveType.Cube).transform;
            wall.parent        = g;
            wall.localScale    = new Vector3(WallThickness, WallHeight, room.Size.y * (1 - room.Doors[1]) - (room.Doors[1] != 0 ? DoorWidth / 2 : 0));
            wall.localPosition = new Vector3(room.Size.x / 2 - WallThickness / 2, WallHeight / 2, room.Size.y * room.Doors[1] / 2 + (room.Doors[1] != 0 ? DoorWidth / 4 : 0));
            wall.localRotation = Quaternion.identity;
            wall.GetComponent <MeshRenderer>().sharedMaterial = FloorMaterial;
            wall.gameObject.layer = LayerMask.NameToLayer("Obstacles");

            wall               = GameObject.CreatePrimitive(PrimitiveType.Cube).transform;
            wall.parent        = g;
            wall.localScale    = new Vector3(WallThickness, WallHeight, room.Size.y * room.Doors[0] - (room.Doors[0] != 0 ? DoorWidth / 2 : 0));
            wall.localPosition = new Vector3(-room.Size.x / 2 + WallThickness / 2, WallHeight / 2, -room.Size.y * (1 - room.Doors[0]) / 2 - (room.Doors[0] != 0 ? DoorWidth / 4 : 0));
            wall.localRotation = Quaternion.identity;
            wall.GetComponent <MeshRenderer>().sharedMaterial = FloorMaterial;
            wall.gameObject.layer = LayerMask.NameToLayer("Obstacles");
            wall               = GameObject.CreatePrimitive(PrimitiveType.Cube).transform;
            wall.parent        = g;
            wall.localScale    = new Vector3(WallThickness, WallHeight, room.Size.y * room.Doors[1] - (room.Doors[1] != 0 ? DoorWidth / 2 : 0));
            wall.localPosition = new Vector3(room.Size.x / 2 - WallThickness / 2, WallHeight / 2, -room.Size.y * (1 - room.Doors[1]) / 2 - (room.Doors[1] != 0 ? DoorWidth / 4 : 0));
            wall.localRotation = Quaternion.identity;
            wall.GetComponent <MeshRenderer>().sharedMaterial = FloorMaterial;
            wall.gameObject.layer = LayerMask.NameToLayer("Obstacles");


            wall               = GameObject.CreatePrimitive(PrimitiveType.Cube).transform;
            wall.parent        = g;
            wall.localScale    = new Vector3(room.Size.x * (1 - room.Doors[2]) - (room.Doors[2] != 0 ? DoorWidth / 2 : 0), WallHeight, WallThickness);
            wall.localPosition = new Vector3(room.Size.x * room.Doors[2] / 2 + (room.Doors[2] != 0 ? DoorWidth / 4 : 0), WallHeight / 2, -room.Size.y / 2 + WallThickness / 2);
            wall.localRotation = Quaternion.identity;
            wall.GetComponent <MeshRenderer>().sharedMaterial = FloorMaterial;
            wall.gameObject.layer = LayerMask.NameToLayer("Obstacles");
            wall               = GameObject.CreatePrimitive(PrimitiveType.Cube).transform;
            wall.parent        = g;
            wall.localScale    = new Vector3(room.Size.x * (1 - room.Doors[3]) - (room.Doors[3] != 0 ? DoorWidth / 2 : 0), WallHeight, WallThickness);
            wall.localPosition = new Vector3(room.Size.x * room.Doors[3] / 2 + (room.Doors[3] != 0 ? DoorWidth / 4 : 0), WallHeight / 2, room.Size.y / 2 - WallThickness / 2);
            wall.localRotation = Quaternion.identity;
            wall.GetComponent <MeshRenderer>().sharedMaterial = FloorMaterial;
            wall.gameObject.layer = LayerMask.NameToLayer("Obstacles");

            wall               = GameObject.CreatePrimitive(PrimitiveType.Cube).transform;
            wall.parent        = g;
            wall.localScale    = new Vector3(room.Size.x * room.Doors[2] - (room.Doors[2] != 0 ? DoorWidth / 2 : 0), WallHeight, WallThickness);
            wall.localPosition = new Vector3(-room.Size.x * (1 - room.Doors[2]) / 2 - (room.Doors[2] != 0 ? DoorWidth / 4 : 0), WallHeight / 2, -room.Size.y / 2 + WallThickness / 2);
            wall.localRotation = Quaternion.identity;
            wall.GetComponent <MeshRenderer>().sharedMaterial = FloorMaterial;
            wall.gameObject.layer = LayerMask.NameToLayer("Obstacles");
            wall               = GameObject.CreatePrimitive(PrimitiveType.Cube).transform;
            wall.parent        = g;
            wall.localScale    = new Vector3(room.Size.x * room.Doors[3] - (room.Doors[3] != 0 ? DoorWidth / 2 : 0), WallHeight, WallThickness);
            wall.localPosition = new Vector3(-room.Size.x * (1 - room.Doors[3]) / 2 - (room.Doors[3] != 0 ? DoorWidth / 4 : 0), WallHeight / 2, room.Size.y / 2 - WallThickness / 2);
            wall.localRotation = Quaternion.identity;
            wall.GetComponent <MeshRenderer>().sharedMaterial = FloorMaterial;
            wall.gameObject.layer = LayerMask.NameToLayer("Obstacles");

            Transform door;
            var       lev = Mathf.Max(room.Level - (Random.value < 0.4 ? 1 : 0), 0);
            for (int i = 0; i < 4; ++i)
            {
                if (room.Neighbors[i] == null)
                {
                    continue;
                }

                var p = Vector3.zero;
                switch (i)
                {
                case 0:
                    p = new Vector3(
                        -room.Size.x / 2,
                        DoorHeight / 2,
                        room.Size.y * (room.Doors[0]) - room.Size.y / 2);
                    break;

                case 1:
                    p = new Vector3(
                        room.Size.x / 2,
                        DoorHeight / 2,
                        room.Size.y * (room.Doors[1]) - room.Size.y / 2);
                    break;

                case 2:
                    p = new Vector3(
                        room.Size.x * (room.Doors[2]) - room.Size.x / 2,
                        DoorHeight / 2,
                        -room.Size.y / 2);
                    break;

                case 3:
                    p = new Vector3(
                        room.Size.x * (room.Doors[3]) - room.Size.x / 2,
                        DoorHeight / 2,
                        room.Size.y / 2);
                    break;
                }

                var already = FindObjectsOfType <Door>()
                              .SingleOrDefault(d => Vector3.Distance(p + floor.position, d.transform.position) < 1);
                if (already == null)
                {
                    door               = Instantiate(Door).transform;
                    door.parent        = g;
                    door.localScale    = new Vector3(DoorWidth, DoorHeight, WallThickness);
                    door.localPosition = p;
                    if (i < 2)
                    {
                        door.Rotate(0, 90, 0);
                    }
                    door.parent = transform;
                    door.GetComponent <Networkable>().Level = lev;
                    if (startDoor != null)
                    {
                        door.GetComponent <Networkable>().Neighbors.Add(startDoor);
                        startDoor.Neighbors.Add(door.GetComponent <Networkable>());
                        door.GetComponent <Networkable>().Level = 2;
                    }
                }
                else
                {
                    door = already.transform;
                    if (startDoor != null)
                    {
                        door.GetComponent <Networkable>().Neighbors.Add(startDoor);
                        startDoor.Neighbors.Add(door.GetComponent <Networkable>());
                        door.GetComponent <Networkable>().Level = 2;
                    }
                }
            }
        }

        var network = FindObjectsOfType <Networkable>();

        for (int i = 0; i < maxLevel; ++i)
        {
            var nodes = network.Where(n => n.Level == i).ToArray();

            for (int l = 0; l < nodes.Length; ++l)
            {
                if (nodes[l].Neighbors.Count > 0)
                {
                    continue;
                }
                var j = 0;
                do
                {
                    j = Random.Range(0, nodes.Length);
                } while (j == l);
                nodes[l].Neighbors.Add(nodes[j]);
                nodes[j].Neighbors.Add(nodes[l]);
            }
        }
        var cabinets = FindObjectsOfType <Cabinet>();

        for (int i = 0; i < cabinets.Length; ++i)
        {
            NLog.Clear();
            var n = cabinets[i].GetComponent <Networkable>();
            var l = 0;
            while (!HasTerminal(n, n.Level) && l++ < 5)
            {
                var j = 0;
                do
                {
                    j = Random.Range(0, network.Length);
                } while (j == i && n.Neighbors.Contains(network[j]));
                n.Neighbors.Add(network[j]);
                network[j].Neighbors.Add(n);
            }
        }

        for (int i = 0; i < network.Length; ++i)
        {
            if (network[i].Neighbors.Count > 0)
            {
                continue;
            }
            var j = 0;
            do
            {
                j = Random.Range(0, network.Length);
            } while (j == i && network[i].Neighbors.Contains(network[j]));
            network[i].Neighbors.Add(network[j]);
            network[j].Neighbors.Add(network[i]);
        }

        //var merger = new GameObject("Merger").AddComponent<MergeMesh>();
        //merger.transform.parent = transform;
        //merger.Merge(GameObject.FindGameObjectsWithTag("Merge").Select(g=>g.transform).ToArray());
    }
示例#19
0
 private void Start()
 {
     net = GetComponent <Networkable>();
 }