예제 #1
0
 public void Init()
 {
     if (ioEnt != null && !entityRef.IsValid(true))
     {
         entityRef.Set(ioEnt);
     }
     if (entityRef.IsValid(true))
     {
         ioEnt = entityRef.Get(true).GetComponent <IOEntity>();
     }
 }
예제 #2
0
    public virtual void BecomeDud()
    {
        Vector3    position  = base.transform.position;
        Quaternion rotation  = base.transform.rotation;
        bool       flag      = false;
        EntityRef  entityRef = parentEntity;

        while (entityRef.IsValid(base.isServer) && !flag)
        {
            BaseEntity baseEntity = entityRef.Get(base.isServer);
            if (baseEntity.syncPosition)
            {
                flag = true;
            }
            entityRef = baseEntity.parentEntity;
        }
        if (flag)
        {
            SetParent(null);
        }
        base.transform.SetPositionAndRotation(position, rotation);
        SetFlag(Flags.On, false);
        SetCollisionEnabled(true);
        if (flag)
        {
            SetMotionEnabled(true);
        }
        Effect.server.Run("assets/bundled/prefabs/fx/impacts/blunt/concrete/concrete1.prefab", this, 0u, Vector3.zero, Vector3.zero);
        SendNetworkUpdate();
        CancelInvoke(base.KillMessage);
        Invoke(base.KillMessage, 1200f);
    }
예제 #3
0
            void Perforate()
            {
                Vector3 targetDir = target.Get(true).transform.position - transform.position;

                targetDir.Normalize();

                for (int i = 0; i < 10; i++)
                {
                    var ent     = GameManager.server.CreateEntity("assets/prefabs/npc/m2bradley/maincannonshell.prefab", transform.position);
                    var proj    = ent.GetComponent <ServerProjectile>();
                    var timedEx = ent.GetComponent <TimedExplosive>();

                    proj.InitializeVelocity(targetDir * 100 + UnityEngine.Random.insideUnitSphere * 20);
                    proj.gravityModifier = 1;
                    proj.drag            = 1;

                    timedEx.damageTypes.Clear();

                    timedEx.damageTypes.Add(new Rust.DamageTypeEntry {
                        type   = Rust.DamageType.Bullet,
                        amount = 100.0f
                    });

                    timedEx.damageTypes.Add(new Rust.DamageTypeEntry {
                        type   = Rust.DamageType.Explosion,
                        amount = 10.0f
                    });

                    ent.Spawn();
                }
            }
예제 #4
0
 public BaseMountable GetSaddle()
 {
     if (!saddleRef.IsValid(base.isServer))
     {
         return(null);
     }
     return(saddleRef.Get(base.isServer).GetComponent <BaseMountable>());
 }
예제 #5
0
        public CardTablePlayerStorage GetStorage()
        {
            BaseEntity baseEntity = storageInstance.Get(true);

            if (baseEntity != null && BaseEntityEx.IsValid(baseEntity))
            {
                return(baseEntity as CardTablePlayerStorage);
            }
            return(null);
        }
예제 #6
0
    public StorageContainer GetPot()
    {
        BaseEntity baseEntity = PotInstance.Get(true);

        if (baseEntity != null && BaseEntityEx.IsValid(baseEntity))
        {
            return(baseEntity as StorageContainer);
        }
        return(null);
    }
예제 #7
0
    public StorageContainer GetFuelContainer()
    {
        BaseEntity baseEntity = fuelStorageInstance.Get(isServer);

        if (baseEntity != null && BaseEntityEx.IsValid(baseEntity))
        {
            return(baseEntity as StorageContainer);
        }
        return(null);
    }
    public CardTable GetCardTable()
    {
        BaseEntity baseEntity = cardTableRef.Get(base.isServer);

        if (baseEntity != null && BaseEntityEx.IsValid(baseEntity))
        {
            return(baseEntity as CardTable);
        }
        return(null);
    }
예제 #9
0
    public void AssignPoints()
    {
        BaseGameMode activeGameMode = BaseGameMode.GetActiveGameMode(true);

        if (activeGameMode == null || !activeGameMode.IsMatchActive())
        {
            return;
        }
        if (activeGameMode.IsTeamGame())
        {
            if (captureTeam != -1 && captureFraction == 1f)
            {
                activeGameMode.ModifyTeamScore(captureTeam, scorePerSecond);
            }
        }
        else if (capturedPlayer.IsValid(true))
        {
            activeGameMode.ModifyPlayerGameScore(capturedPlayer.Get(true).GetComponent <BasePlayer>(), "score", scorePerSecond);
        }
    }
예제 #10
0
    public void StopControl(BasePlayer ply)
    {
        BaseEntity baseEntity = currentlyControllingEnt.Get(true);

        if ((bool)baseEntity)
        {
            if (Interface.CallHook("OnBookmarkControlEnd", this, ply, baseEntity) != null)
            {
                return;
            }
            baseEntity.GetComponent <IRemoteControllable>().StopControl();
            if ((bool)ply)
            {
                ply.net.SwitchSecondaryGroup(null);
            }
        }
        currentlyControllingEnt.uid = 0u;
        SendNetworkUpdate();
        SendControlBookmarks(ply);
        CancelInvoke(ControlCheck);
        Interface.CallHook("OnBookmarkControlEnded", this, ply, baseEntity);
    }
예제 #11
0
 public virtual void SetupInitialDoorConnection()
 {
     if (targetDoor == null && !entityRef.IsValid(true))
     {
         SetTargetDoor(FindDoor(PairWithLockedDoors()));
     }
     if (targetDoor != null && !entityRef.IsValid(true))
     {
         entityRef.Set(targetDoor);
     }
     if (entityRef.IsValid(true) && targetDoor == null)
     {
         SetTargetDoor(entityRef.Get(true).GetComponent <Door>());
     }
 }
예제 #12
0
        public void ObjectRemoved_Reassign()
        {
            string testData = "TestData1";
            EntityRef <GameObject> testRef = pool.Create(new GameObject {
                Data = testData
            });

            pool.Remove(testRef);
            pool.EndOfFrame();

            Assert.IsFalse(testRef.Get(out var entity));
            Assert.AreEqual(null, entity);

            string testData2 = "testData2";
            EntityRef <GameObject> testRef2 = pool.Create(new GameObject {
                Data = testData2
            });

            Assert.IsTrue(testRef2.Get(out entity));
            Assert.AreEqual(testData2, entity.Data);
        }
예제 #13
0
 public RidableHorse GetHorse(bool isServer = true)
 {
     return(horse.Get(isServer) as RidableHorse);
 }
예제 #14
0
    public void UpdateCaptureAmount()
    {
        if (base.isClient)
        {
            return;
        }
        float        num            = captureFraction;
        BaseGameMode activeGameMode = BaseGameMode.GetActiveGameMode(true);

        if (activeGameMode == null)
        {
            return;
        }
        if (captureTrigger.entityContents == null)
        {
            SetFlag(Flags.Busy, false, false, false);
        }
        else
        {
            if (!activeGameMode.IsMatchActive())
            {
                return;
            }
            if (activeGameMode.IsTeamGame())
            {
                int[] array = new int[activeGameMode.GetNumTeams()];
                foreach (BaseEntity entityContent in captureTrigger.entityContents)
                {
                    if (!(entityContent == null) && !entityContent.isClient)
                    {
                        BasePlayer component = entityContent.GetComponent <BasePlayer>();
                        if (!(component == null) && component.IsAlive() && !component.IsNpc && component.gamemodeteam != -1)
                        {
                            array[component.gamemodeteam]++;
                        }
                    }
                }
                int num2 = 0;
                for (int i = 0; i < array.Length; i++)
                {
                    if (array[i] > 0)
                    {
                        num2++;
                    }
                }
                if (num2 < 2)
                {
                    int num3 = -1;
                    int num4 = 0;
                    for (int j = 0; j < array.Length; j++)
                    {
                        if (array[j] > num4)
                        {
                            num4 = array[j];
                            num3 = j;
                        }
                    }
                    if (captureTeam == -1 && captureFraction == 0f)
                    {
                        capturingTeam = num3;
                    }
                    if (captureFraction > 0f && num3 != captureTeam && num3 != capturingTeam)
                    {
                        captureFraction = Mathf.Clamp01(captureFraction - Time.deltaTime / timeToCapture);
                        if (captureFraction == 0f)
                        {
                            captureTeam = -1;
                        }
                    }
                    else if (captureTeam == -1 && captureFraction < 1f && capturingTeam == num3)
                    {
                        DoProgressEffect();
                        captureFraction = Mathf.Clamp01(captureFraction + Time.deltaTime / timeToCapture);
                        if (captureFraction == 1f)
                        {
                            DoCaptureEffect();
                            captureTeam = num3;
                        }
                    }
                }
                SetFlag(Flags.Busy, num2 > 1);
            }
            else
            {
                if (!capturingPlayer.IsValid(true) && !capturedPlayer.IsValid(true))
                {
                    captureFraction = 0f;
                }
                if (captureTrigger.entityContents.Count == 0)
                {
                    capturingPlayer.Set(null);
                }
                if (captureTrigger.entityContents.Count == 1)
                {
                    foreach (BaseEntity entityContent2 in captureTrigger.entityContents)
                    {
                        BasePlayer component2 = entityContent2.GetComponent <BasePlayer>();
                        if (component2 == null)
                        {
                            continue;
                        }
                        if (!capturedPlayer.IsValid(true) && captureFraction == 0f)
                        {
                            capturingPlayer.Set(component2);
                        }
                        if (captureFraction > 0f && component2 != capturedPlayer.Get(true) && component2 != capturingPlayer.Get(true))
                        {
                            captureFraction = Mathf.Clamp01(captureFraction - Time.deltaTime / timeToCapture);
                            if (captureFraction == 0f)
                            {
                                capturedPlayer.Set(null);
                            }
                        }
                        else if (!capturedPlayer.Get(true) && captureFraction < 1f && capturingPlayer.Get(true) == component2)
                        {
                            DoProgressEffect();
                            captureFraction = Mathf.Clamp01(captureFraction + Time.deltaTime / timeToCapture);
                            if (captureFraction == 1f)
                            {
                                DoCaptureEffect();
                                capturedPlayer.Set(component2);
                            }
                        }
                        break;
                    }
                }
                SetFlag(Flags.Busy, captureTrigger.entityContents.Count > 1);
            }
            if (num != captureFraction)
            {
                SendNetworkUpdate();
            }
        }
    }
예제 #15
0
 public BaseEntity GetWorldEntity()
 {
     return(worldEnt.Get(isServer));
 }
예제 #16
0
 public BaseEntity GetHeldEntity()
 {
     return(heldEntity.Get(isServer));
 }