Esempio n. 1
0
    public void ClientHealthChange(float amount, GameObject attacker)
    {
        float health = base.health;

        base.AdjustClientSideHealth(amount);
        float num2           = amount;
        float num3           = Mathf.Abs((float)(num2 - health));
        bool  flag           = amount < health;
        float healthFraction = base.healthFraction;

        if (base.localControlled && (num3 >= 1f))
        {
            base.GetComponent <LocalDamageDisplay>().SetNewHealthPercent(healthFraction, attacker);
        }
        if ((((attacker != null) && flag) && (num3 >= 1f)) && ((hudDamagePrefab != null) || Bundling.Load <HUDDirectionalDamage>("content/hud/DirectionalDamage", out hudDamagePrefab)))
        {
            Vector3   vector;
            Character character;
            if (IDBase.GetMain <Character>(attacker, out character))
            {
                vector = base.eyesOrigin - character.eyesOrigin;
            }
            else
            {
                vector = base.origin - attacker.transform.position;
            }
            HUDDirectionalDamage.CreateIndicator(vector, (double)amount, NetCull.time, 1.6000000238418579, hudDamagePrefab);
        }
        RPOS.HealthUpdate(amount);
    }
Esempio n. 2
0
    // Token: 0x060003B3 RID: 947 RVA: 0x00011884 File Offset: 0x0000FA84
    public void ClientHealthChange(float amount, GameObject attacker)
    {
        float health = base.health;

        base.AdjustClientSideHealth(amount);
        float num            = Mathf.Abs(amount - health);
        bool  flag           = amount < health;
        float healthFraction = base.healthFraction;

        if (base.localControlled && num >= 1f)
        {
            base.GetComponent <global::LocalDamageDisplay>().SetNewHealthPercent(healthFraction, attacker);
        }
        if (attacker && flag && num >= 1f && (global::ClientVitalsSync.hudDamagePrefab || Facepunch.Bundling.Load <global::HUDDirectionalDamage>("content/hud/DirectionalDamage", out global::ClientVitalsSync.hudDamagePrefab)))
        {
            global::Character character;
            Vector3           worldDamageDirection;
            if (IDBase.GetMain <global::Character>(attacker, ref character))
            {
                worldDamageDirection = base.eyesOrigin - character.eyesOrigin;
            }
            else
            {
                worldDamageDirection = base.origin - attacker.transform.position;
            }
            global::HUDDirectionalDamage.CreateIndicator(worldDamageDirection, (double)amount, global::NetCull.time, 1.6000000238418579, global::ClientVitalsSync.hudDamagePrefab);
        }
        global::RPOS.HealthUpdate(amount);
    }
Esempio n. 3
0
    // Token: 0x06000426 RID: 1062 RVA: 0x00014C84 File Offset: 0x00012E84
    private static bool GetCharacterStuff(ref global::ConsoleSystem.Arg args, out global::Character character, out global::CameraMount camera, out global::ItemRepresentation itemRep, out global::ArmorModelRenderer armor)
    {
        character = null;
        itemRep   = null;
        armor     = null;
        camera    = global::CameraMount.current;
        if (!camera)
        {
            args.ReplyWith("Theres no active camera mount.");
            return(false);
        }
        character = (IDBase.GetMain(camera) as global::Character);
        if (!character)
        {
            args.ReplyWith("theres no character for the current mounted camera");
            return(false);
        }
        armor = character.GetLocal <global::ArmorModelRenderer>();
        global::InventoryHolder local = character.GetLocal <global::InventoryHolder>();

        if (local)
        {
            itemRep = local.itemRepresentation;
        }
        return(true);
    }
Esempio n. 4
0
        // Token: 0x0600063E RID: 1598 RVA: 0x00046938 File Offset: 0x00044B38
        public static GameObject GetLineObject(Vector3 start, Vector3 end, out Vector3 point, int layerMask = -1)
        {
            point = Vector3.zero;
            RaycastHit        raycastHit;
            bool              flag2;
            MeshBatchInstance meshBatchInstance;
            bool              flag = !Facepunch.MeshBatch.MeshBatchPhysics.Linecast(start, end, out raycastHit, layerMask, out flag2, out meshBatchInstance);
            GameObject        result;

            if (flag)
            {
                result = null;
            }
            else
            {
                IDMain idmain = flag2 ? meshBatchInstance.idMain : IDBase.GetMain(raycastHit.collider);
                point = raycastHit.point;
                bool flag3 = !(idmain != null);
                if (flag3)
                {
                    result = raycastHit.collider.gameObject;
                }
                else
                {
                    result = idmain.gameObject;
                }
            }
            return(result);
        }
Esempio n. 5
0
        private static bool smethod_0(TruthDetector truthDetector_0, Vector3 vector3_0, ref Vector3 vector3_1)
        {
            RaycastHit        hit;
            bool              flag;
            MeshBatchInstance instance;
            Vector3           vector = vector3_1 - vector3_0;

            if (vector.magnitude == 0f)
            {
                return(false);
            }
            Ray ray = new Ray(vector3_0 + new Vector3(0f, 0.75f, 0f), vector.normalized);

            if (!Facepunch.MeshBatch.MeshBatchPhysics.SphereCast(ray, 0.1f, out hit, vector.magnitude, 0x20180403, out flag, out instance))
            {
                return(false);
            }
            IDMain             main      = flag ? instance.idMain : IDBase.GetMain(hit.collider);
            GameObject         obj2      = (main != null) ? main.gameObject : hit.collider.gameObject;
            string             newValue  = obj2.name.Trim();
            DeployableObject   obj3      = obj2.GetComponent <DeployableObject>();
            StructureComponent component = obj2.GetComponent <StructureComponent>();

            if (newValue == "")
            {
                newValue = "Mesh Texture";
            }
            else if (obj3 != null)
            {
                newValue = Helper.NiceName(obj3.name);
                if (truthDetector_0.netUser.userID == obj3.ownerID)
                {
                    return(false);
                }
                if (Users.SharedGet(obj3.ownerID, truthDetector_0.netUser.userID))
                {
                    return(false);
                }
            }
            else if (component != null)
            {
                newValue = Helper.NiceName(component.name);
                if (truthDetector_0.netUser.userID == component._master.ownerID)
                {
                    return(false);
                }
                if (Users.SharedGet(component._master.ownerID, truthDetector_0.netUser.userID))
                {
                    return(false);
                }
            }
            PunishDetails = Config.GetMessageTruth("Truth.Punish.Reason.WallHack", truthDetector_0.netUser, "", 0, new DateTime());
            PunishDetails = PunishDetails.Replace("%OBJECT.NAME%", newValue);
            PunishDetails = PunishDetails.Replace("%OBJECT.POS%", hit.point.AsString());
            HackDetected  = HackMethod.WallHack;
            vector3_1     = MoveBack(truthDetector_0, vector3_0, vector3_1);
            return(true);
        }
 // Token: 0x06000269 RID: 617 RVA: 0x0000CEF8 File Offset: 0x0000B0F8
 public void TryReportHit(GameObject hitGameObject)
 {
     if (this._myItemInstance != null && !this.reported)
     {
         this.reported = true;
         IDMain main = IDBase.GetMain(hitGameObject);
         this._myItemInstance.ArrowReportHit(main, this);
     }
 }
Esempio n. 7
0
        public static EventTimer TimeEvent_TeleportTo(NetUser Sender, NetUser Target, string Command, double time)
        {
            Class38 class2 = new Class38 {
                netUser_0 = Sender,
                netUser_1 = Target,
                string_0  = Command
            };

            if (Core.CommandTeleportOutdoorsOnly)
            {
                foreach (Collider collider in Physics.OverlapSphere(class2.netUser_1.playerClient.controllable.character.transform.position, 1f, 0x10360401))
                {
                    IDMain main = IDBase.GetMain(collider);
                    if (main != null)
                    {
                        StructureMaster component = main.GetComponent <StructureMaster>();
                        if (((component != null) && (component.ownerID != class2.netUser_0.userID)) && (component.ownerID != class2.netUser_1.userID))
                        {
                            UserData bySteamID = Users.GetBySteamID(component.ownerID);
                            if ((bySteamID == null) || (!bySteamID.HasShared(class2.netUser_0.userID) && !bySteamID.HasShared(class2.netUser_1.userID)))
                            {
                                Broadcast.Notice(class2.netUser_0, "☢", Config.GetMessage("Command.Teleport.NoTeleport", class2.netUser_0, class2.netUser_1.displayName), 5f);
                                Broadcast.Notice(class2.netUser_1, "☢", Config.GetMessage("Command.Teleport.NotHere", class2.netUser_1, class2.netUser_0.displayName), 5f);
                                return(null);
                            }
                        }
                    }
                }
            }
            Broadcast.Message(class2.netUser_0, Config.GetMessage("Command.Teleport.IsConfirm", class2.netUser_0, null).Replace("%USERNAME%", class2.netUser_1.displayName), null, 0f);
            Broadcast.Message(class2.netUser_1, Config.GetMessage("Command.Teleport.Confirmed", class2.netUser_1, null).Replace("%USERNAME%", class2.netUser_0.displayName), null, 0f);
            if (!Character.FindByUser(class2.netUser_1.userID, out class2.character_0))
            {
                return(null);
            }
            if (time <= 0.0)
            {
                Teleport_PlayerTo(null, class2.netUser_0, class2.netUser_1, class2.string_0, class2.character_0.transform.position);
                return(null);
            }
            EventTimer timer = new EventTimer {
                Interval  = time * 1000.0,
                AutoReset = false
            };

            timer.Elapsed += new ElapsedEventHandler(class2.method_0);
            timer.Sender   = class2.netUser_0;
            timer.Target   = class2.netUser_1;
            timer.Command  = class2.string_0;
            Broadcast.Notice(class2.netUser_0, "☢", Config.GetMessage("Command.Teleport.Timewait", class2.netUser_0, null).Replace("%TIME%", timer.TimeLeft.ToString()), 5f);
            Broadcast.Notice(class2.netUser_1, "☢", Config.GetMessage("Command.Teleport.Timewait", class2.netUser_1, null).Replace("%TIME%", timer.TimeLeft.ToString()), 5f);
            timer.Start();
            return(timer);
        }
Esempio n. 8
0
        public GameObject GetLineObject(Vector3 start, Vector3 end, out Vector3 point, int layerMask = -1)
        {
            RaycastHit        hit;
            bool              flag;
            MeshBatchInstance instance;

            point = Vector3.zero;
            if (!Facepunch.MeshBatch.MeshBatchPhysics.Linecast(start, end, out hit, layerMask, out flag, out instance))
            {
                return(null);
            }
            IDMain main = flag ? instance.idMain : IDBase.GetMain(hit.collider);

            point = hit.point;
            return((main != null) ? main.gameObject : hit.collider.gameObject);
        }
Esempio n. 9
0
        public GameObject GetLookObject(Ray ray, out Vector3 point, float distance = 300f, int layerMask = -1)
        {
            RaycastHit        hit;
            bool              flag;
            MeshBatchInstance instance;

            point = Vector3.zero;
            if (!Facepunch.MeshBatch.MeshBatchPhysics.Raycast(ray, out hit, distance, layerMask, out flag, out instance))
            {
                return(null);
            }
            IDMain main = flag ? instance.idMain : IDBase.GetMain(hit.collider);

            point = hit.point;
            return((main != null) ? main.gameObject : hit.collider.gameObject);
        }
Esempio n. 10
0
    public static Hardpoint GetHardpointFromRay(Ray ray, Hardpoint.hardpoint_type type)
    {
        RaycastHit        raycastHit;
        bool              flag;
        MeshBatchInstance meshBatchInstance;

        if (Facepunch.MeshBatch.MeshBatchPhysics.Raycast(ray, out raycastHit, 10f, out flag, out meshBatchInstance))
        {
            IDMain dMain = (!flag ? IDBase.GetMain(raycastHit.collider) : meshBatchInstance.idMain);
            if (dMain)
            {
                HardpointMaster component = dMain.GetComponent <HardpointMaster>();
                if (component)
                {
                    return(component.GetHardpointNear(raycastHit.point, type));
                }
            }
        }
        return(null);
    }
    // Token: 0x06003BDE RID: 15326 RVA: 0x000D5B3C File Offset: 0x000D3D3C
    public static global::Hardpoint GetHardpointFromRay(Ray ray, global::Hardpoint.hardpoint_type type)
    {
        RaycastHit        raycastHit;
        bool              flag;
        MeshBatchInstance meshBatchInstance;

        if (Facepunch.MeshBatch.MeshBatchPhysics.Raycast(ray, ref raycastHit, 10f, ref flag, ref meshBatchInstance))
        {
            IDMain idmain = (!flag) ? IDBase.GetMain(raycastHit.collider) : meshBatchInstance.idMain;
            if (idmain)
            {
                global::HardpointMaster component = idmain.GetComponent <global::HardpointMaster>();
                if (component)
                {
                    return(component.GetHardpointNear(raycastHit.point, type));
                }
            }
        }
        return(null);
    }
Esempio n. 12
0
    public void GrabCarrier()
    {
        RaycastHit        raycastHit;
        bool              flag;
        MeshBatchInstance meshBatchInstance;
        Ray ray = new Ray(base.transform.position + (Vector3.up * 0.01f), Vector3.down);

        if (Facepunch.MeshBatch.MeshBatchPhysics.Raycast(ray, out raycastHit, 5f, out flag, out meshBatchInstance))
        {
            IDMain dMain = (!flag ? IDBase.GetMain(raycastHit.collider) : meshBatchInstance.idMain);
            if (dMain)
            {
                TransCarrier local = dMain.GetLocal <TransCarrier>();
                if (local)
                {
                    local.AddObject(this);
                }
            }
        }
    }
 // Token: 0x0600367F RID: 13951 RVA: 0x000C5808 File Offset: 0x000C3A08
 public bool CheckBlockers(Vector3 pos)
 {
     if (this._structureToPlace.type == global::StructureComponent.StructureComponentType.Foundation)
     {
         Collider[] array = Physics.OverlapSphere(pos, 12f, 271975425);
         foreach (Collider collider in array)
         {
             IDMain main = IDBase.GetMain(collider.gameObject);
             if (main)
             {
                 float num = global::TransformHelpers.Dist2D(main.transform.position, pos);
                 if (main.GetComponent <global::SpikeWall>() && num < 5f)
                 {
                     return(false);
                 }
             }
         }
     }
     return(global::NoPlacementZone.ValidPos(pos));
 }
Esempio n. 14
0
    public void GrabCarrier()
    {
        RaycastHit        hit;
        bool              flag;
        MeshBatchInstance instance;
        Ray ray = new Ray(base.transform.position + ((Vector3)(Vector3.up * 0.01f)), Vector3.down);

        if (Facepunch.MeshBatch.MeshBatchPhysics.Raycast(ray, out hit, 5f, out flag, out instance))
        {
            IDMain main = !flag?IDBase.GetMain(hit.collider) : instance.idMain;

            if (main != null)
            {
                TransCarrier local = main.GetLocal <TransCarrier>();
                if (local != null)
                {
                    local.AddObject(this);
                }
            }
        }
    }
Esempio n. 15
0
    public static Hardpoint GetHardpointFromRay(Ray ray, hardpoint_type type)
    {
        RaycastHit        hit;
        bool              flag;
        MeshBatchInstance instance;

        if (Facepunch.MeshBatch.MeshBatchPhysics.Raycast(ray, out hit, 10f, out flag, out instance))
        {
            IDMain main = !flag?IDBase.GetMain(hit.collider) : instance.idMain;

            if (main != null)
            {
                HardpointMaster component = main.GetComponent <HardpointMaster>();
                if (component != null)
                {
                    return(component.GetHardpointNear(hit.point, type));
                }
            }
        }
        return(null);
    }
    // Token: 0x06003C1A RID: 15386 RVA: 0x000D6C94 File Offset: 0x000D4E94
    public void GrabCarrier()
    {
        Ray ray;

        ray..ctor(base.transform.position + Vector3.up * 0.01f, Vector3.down);
        RaycastHit        raycastHit;
        bool              flag;
        MeshBatchInstance meshBatchInstance;

        if (Facepunch.MeshBatch.MeshBatchPhysics.Raycast(ray, ref raycastHit, 5f, ref flag, ref meshBatchInstance))
        {
            IDMain idmain = (!flag) ? IDBase.GetMain(raycastHit.collider) : meshBatchInstance.idMain;
            if (idmain)
            {
                global::TransCarrier local = idmain.GetLocal <global::TransCarrier>();
                if (local)
                {
                    local.AddObject(this);
                }
            }
        }
    }
Esempio n. 17
0
    public void ClientHealthChange(float amount, GameObject attacker)
    {
        Vector3   vector3;
        Character character;
        float     single = base.health;

        base.AdjustClientSideHealth(amount);
        float single1 = Mathf.Abs(amount - single);
        bool  flag    = amount < single;
        float single2 = base.healthFraction;

        if (base.localControlled && single1 >= 1f)
        {
            base.GetComponent <LocalDamageDisplay>().SetNewHealthPercent(single2, attacker);
        }
        if (attacker && flag && single1 >= 1f && (ClientVitalsSync.hudDamagePrefab || Bundling.Load <HUDDirectionalDamage>("content/hud/DirectionalDamage", out ClientVitalsSync.hudDamagePrefab)))
        {
            vector3 = (!IDBase.GetMain <Character>(attacker, out character) ? base.origin - attacker.transform.position : base.eyesOrigin - character.eyesOrigin);
            HUDDirectionalDamage.CreateIndicator(vector3, (double)amount, NetCull.time, 1.60000002384186, ClientVitalsSync.hudDamagePrefab);
        }
        RPOS.HealthUpdate(amount);
    }
Esempio n. 18
0
 public bool CheckBlockers(Vector3 pos)
 {
     if (this._structureToPlace.type == StructureComponent.StructureComponentType.Foundation)
     {
         foreach (Collider collider in Physics.OverlapSphere(pos, 12f, 0x10360401))
         {
             IDMain main = IDBase.GetMain(collider.gameObject);
             if (main != null)
             {
                 float num2 = TransformHelpers.Dist2D(main.transform.position, pos);
                 if ((main.GetComponent <SpikeWall>() != null) && (num2 < 5f))
                 {
                     return(false);
                 }
             }
         }
     }
     if (!NoPlacementZone.ValidPos(pos))
     {
         return(false);
     }
     return(true);
 }
 public bool CheckBlockers(Vector3 pos)
 {
     if (this._structureToPlace.type == StructureComponent.StructureComponentType.Foundation)
     {
         Collider[] colliderArray = Physics.OverlapSphere(pos, 12f, 271975425);
         for (int i = 0; i < (int)colliderArray.Length; i++)
         {
             IDMain main = IDBase.GetMain(colliderArray[i].gameObject);
             if (main)
             {
                 float single = TransformHelpers.Dist2D(main.transform.position, pos);
                 if (main.GetComponent <SpikeWall>() && single < 5f)
                 {
                     return(false);
                 }
             }
         }
     }
     if (!NoPlacementZone.ValidPos(pos))
     {
         return(false);
     }
     return(true);
 }
Esempio n. 20
0
    public void CheckPlacementResults(Ray ray, out Vector3 pos, out Quaternion rot, out TransCarrier carrier, out DeployableItemDataBlock.DeployPlaceResults results)
    {
        results = new DeployableItemDataBlock.DeployPlaceResults();
        RaycastHit        raycastHit;
        Vector3           vector3;
        Vector3           vector31;
        bool              flag;
        MeshBatchInstance meshBatchInstance;
        Ray               ray1;
        float             single;
        RaycastHit        raycastHit1;
        bool              flag1;
        MeshBatchInstance meshBatchInstance1;
        Quaternion        quaternion;
        bool              flag2;
        float             single1          = this.placeRange;
        IDMain            dMain            = null;
        bool              flag3            = false;
        bool              flag4            = false;
        bool              flag5            = false;
        DeployableObject  deployableObject = null;
        bool              flag6            = false;
        bool              flag7            = false;
        bool              flag8            = this.minCastRadius >= 1.401298E-45f;
        bool              flag9            = (!flag8 ? Facepunch.MeshBatch.MeshBatchPhysics.Raycast(ray, out raycastHit, single1, -472317957, out flag, out meshBatchInstance) : Facepunch.MeshBatch.MeshBatchPhysics.SphereCast(ray, this.minCastRadius, out raycastHit, single1, -472317957, out flag, out meshBatchInstance));
        Vector3           point            = ray.GetPoint(single1);

        if (!flag9)
        {
            Vector3 vector32 = point;
            vector32.y = vector32.y + 0.5f;
            flag6      = Facepunch.MeshBatch.MeshBatchPhysics.Raycast(vector32, Vector3.down, out raycastHit, 5f, -472317957, out flag, out meshBatchInstance);
        }
        if (flag9 || flag6)
        {
            dMain    = (!flag ? IDBase.GetMain(raycastHit.collider) : meshBatchInstance.idMain);
            flag5    = (dMain is StructureComponent ? true : dMain is StructureMaster);
            vector3  = raycastHit.point;
            vector31 = raycastHit.normal;
            if (flag5)
            {
                flag2 = false;
            }
            else
            {
                DeployableObject deployableObject1 = dMain as DeployableObject;
                deployableObject = deployableObject1;
                flag2            = deployableObject1;
            }
            flag3 = flag2;
            if (this.carrierSphereCastMode == DeployableItemDataBlock.CarrierSphereCastMode.Allowed || !flag9 || !flag8 || DeployableItemDataBlock.NonVariantSphereCast(ray, vector3))
            {
                carrier = ((!dMain ? raycastHit.collider.gameObject : dMain.gameObject)).GetComponent <TransCarrier>();
            }
            else
            {
                if (this.carrierSphereCastMode != DeployableItemDataBlock.CarrierSphereCastMode.AdjustedRay)
                {
                    single = single1 + this.minCastRadius;
                    ray1   = ray;
                }
                else
                {
                    Vector3 vector33 = ray.origin;
                    Vector3 vector34 = raycastHit.point - vector33;
                    single = vector34.magnitude + this.minCastRadius * 2f;
                    ray1   = new Ray(vector33, vector34);
                    Debug.DrawLine(ray.origin, ray.GetPoint(single), Color.cyan);
                }
                bool flag10 = Facepunch.MeshBatch.MeshBatchPhysics.Raycast(ray1, out raycastHit1, single, -472317957, out flag1, out meshBatchInstance1);
                bool flag11 = flag10;
                if (!flag10)
                {
                    Vector3 vector35 = vector3;
                    vector35.y = vector35.y + 0.5f;
                    flag11     = Facepunch.MeshBatch.MeshBatchPhysics.Raycast(vector35, Vector3.down, out raycastHit1, 5f, -472317957, out flag1, out meshBatchInstance1);
                }
                if (!flag11)
                {
                    carrier = null;
                }
                else
                {
                    IDMain dMain1 = (!flag1 ? IDBase.GetMain(raycastHit1.collider) : meshBatchInstance1.idMain);
                    carrier = (!dMain1 ? raycastHit1.collider.GetComponent <TransCarrier>() : dMain1.GetLocal <TransCarrier>());
                }
            }
            flag4 = (raycastHit.collider is TerrainCollider ? true : raycastHit.collider.gameObject.layer == 10);
            flag7 = true;
        }
        else
        {
            vector3  = point;
            vector31 = Vector3.up;
            carrier  = null;
        }
        bool      flag12           = false;
        Hardpoint hardpointFromRay = null;

        if (this.hardpointType != Hardpoint.hardpoint_type.None)
        {
            hardpointFromRay = Hardpoint.GetHardpointFromRay(ray, this.hardpointType);
            if (hardpointFromRay)
            {
                flag12   = true;
                vector3  = hardpointFromRay.transform.position;
                vector31 = hardpointFromRay.transform.up;
                carrier  = hardpointFromRay.GetMaster().GetTransCarrier();
                flag7    = true;
            }
        }
        bool flag13 = false;

        if (this.spacingRadius > 0f)
        {
            Collider[] colliderArray = Physics.OverlapSphere(vector3, this.spacingRadius);
            int        num           = 0;
            while (num < (int)colliderArray.Length)
            {
                Collider   collider   = colliderArray[num];
                GameObject gameObject = collider.gameObject;
                IDBase     component  = collider.gameObject.GetComponent <IDBase>();
                if (component != null)
                {
                    gameObject = component.idMain.gameObject;
                }
                if (!gameObject.CompareTag(this.ObjectToPlace.gameObject.tag) || Vector3.Distance(vector3, gameObject.transform.position) >= this.spacingRadius)
                {
                    num++;
                }
                else
                {
                    flag13 = true;
                    break;
                }
            }
        }
        bool flag14 = false;

        if (flag3 && !this.forcePlaceable && deployableObject.cantPlaceOn)
        {
            flag14 = true;
        }
        pos = vector3;
        if (this.orientationMode == DeployableOrientationMode.Default)
        {
            if (!this.uprightOnly)
            {
                this.orientationMode = DeployableOrientationMode.NormalUp;
            }
            else
            {
                this.orientationMode = DeployableOrientationMode.Upright;
            }
        }
        switch (this.orientationMode)
        {
        case DeployableOrientationMode.NormalUp:
        {
            quaternion = TransformHelpers.LookRotationForcedUp(ray.direction, vector31);
            break;
        }

        case DeployableOrientationMode.Upright:
        {
            quaternion = TransformHelpers.LookRotationForcedUp(ray.direction, Vector3.up);
            break;
        }

        case DeployableOrientationMode.NormalForward:
        {
            Vector3 vector36 = Vector3.Cross(ray.direction, Vector3.up);
            quaternion = TransformHelpers.LookRotationForcedUp(vector36, vector31);
            break;
        }

        case DeployableOrientationMode.HardpointPosRot:
        {
            quaternion = (!flag12 ? TransformHelpers.LookRotationForcedUp(ray.direction, Vector3.up) : hardpointFromRay.transform.rotation);
            break;
        }

        default:
        {
            throw new NotImplementedException();
        }
        }
        rot = quaternion * this.ObjectToPlace.transform.localRotation;
        bool flag15 = false;

        if (this.checkPlacementZones)
        {
            flag15 = NoPlacementZone.ValidPos(pos);
        }
        float single2 = Vector3.Angle(vector31, Vector3.up);

        results.falseFromDeployable      = (this.CanStackOnDeployables || !flag3 ? flag14 : true);
        results.falseFromTerrian         = (!this.TerrainOnly ? false : !flag4);
        results.falseFromClose           = (this.spacingRadius <= 0f ? false : flag13);
        results.falseFromHardpoint       = (!this.requireHardpoint ? false : !flag12);
        results.falseFromAngle           = (this.requireHardpoint ? false : single2 >= this.ObjectToPlace.maxSlope);
        results.falseFromPlacementZone   = (!this.checkPlacementZones ? false : !flag15);
        results.falseFromHittingNothing  = !flag7;
        results.falseFromStructure       = (!this.StructureOnly ? false : !flag5);
        results.falseFromFitRequirements = (this.fitRequirements == null ? false : !this.fitRequirements.Test(pos, (!this.fitTestForcedUp ? rot : TransformHelpers.LookRotationForcedUp(rot, Vector3.up)), this.ObjectToPlace.transform.localScale));
    }
    // Token: 0x060033CD RID: 13261 RVA: 0x000C2024 File Offset: 0x000C0224
    public void CheckPlacementResults(Ray ray, out Vector3 pos, out Quaternion rot, out global::TransCarrier carrier, out global::DeployableItemDataBlock.DeployPlaceResults results)
    {
        float num   = this.placeRange;
        bool  flag  = false;
        bool  flag2 = false;
        bool  flag3 = false;
        global::DeployableObject deployableObject = null;
        bool              flag4 = false;
        bool              flag5 = false;
        bool              flag6 = this.minCastRadius >= float.Epsilon;
        RaycastHit        raycastHit;
        bool              flag8;
        MeshBatchInstance meshBatchInstance;
        bool              flag7 = (!flag6) ? Facepunch.MeshBatch.MeshBatchPhysics.Raycast(ray, ref raycastHit, num, -472317957, ref flag8, ref meshBatchInstance) : Facepunch.MeshBatch.MeshBatchPhysics.SphereCast(ray, this.minCastRadius, ref raycastHit, num, -472317957, ref flag8, ref meshBatchInstance);
        Vector3           point = ray.GetPoint(num);

        if (!flag7)
        {
            Vector3 vector = point;
            vector.y += 0.5f;
            flag4     = Facepunch.MeshBatch.MeshBatchPhysics.Raycast(vector, Vector3.down, ref raycastHit, 5f, -472317957, ref flag8, ref meshBatchInstance);
        }
        Vector3 vector2;
        Vector3 vector3;

        if (flag7 || flag4)
        {
            IDMain idmain = (!flag8) ? IDBase.GetMain(raycastHit.collider) : meshBatchInstance.idMain;
            flag3   = (idmain is global::StructureComponent || idmain is global::StructureMaster);
            vector2 = raycastHit.point;
            vector3 = raycastHit.normal;
            flag    = (!flag3 && (deployableObject = (idmain as global::DeployableObject)));
            if (this.carrierSphereCastMode != global::DeployableItemDataBlock.CarrierSphereCastMode.Allowed && flag7 && flag6 && !global::DeployableItemDataBlock.NonVariantSphereCast(ray, vector2))
            {
                float num2;
                Ray   ray2;
                if (this.carrierSphereCastMode == global::DeployableItemDataBlock.CarrierSphereCastMode.AdjustedRay)
                {
                    Vector3 origin  = ray.origin;
                    Vector3 point2  = raycastHit.point;
                    Vector3 vector4 = point2 - origin;
                    num2 = vector4.magnitude + this.minCastRadius * 2f;
                    ray2..ctor(origin, vector4);
                    Debug.DrawLine(ray.origin, ray.GetPoint(num2), Color.cyan);
                }
                else
                {
                    num2 = num + this.minCastRadius;
                    ray2 = ray;
                }
                RaycastHit        raycastHit2;
                bool              flag10;
                MeshBatchInstance meshBatchInstance2;
                bool              flag9;
                if (!(flag9 = Facepunch.MeshBatch.MeshBatchPhysics.Raycast(ray2, ref raycastHit2, num2, -472317957, ref flag10, ref meshBatchInstance2)))
                {
                    Vector3 vector5 = vector2;
                    vector5.y += 0.5f;
                    flag9      = Facepunch.MeshBatch.MeshBatchPhysics.Raycast(vector5, Vector3.down, ref raycastHit2, 5f, -472317957, ref flag10, ref meshBatchInstance2);
                }
                if (flag9)
                {
                    IDMain idmain2 = (!flag10) ? IDBase.GetMain(raycastHit2.collider) : meshBatchInstance2.idMain;
                    carrier = ((!idmain2) ? raycastHit2.collider.GetComponent <global::TransCarrier>() : idmain2.GetLocal <global::TransCarrier>());
                }
                else
                {
                    carrier = null;
                }
            }
            else
            {
                carrier = ((!idmain) ? raycastHit.collider.gameObject : idmain.gameObject).GetComponent <global::TransCarrier>();
            }
            flag2 = (raycastHit.collider is TerrainCollider || raycastHit.collider.gameObject.layer == 10);
            flag5 = true;
        }
        else
        {
            vector2 = point;
            vector3 = Vector3.up;
            carrier = null;
        }
        bool flag11 = false;
        global::Hardpoint hardpoint = null;

        if (this.hardpointType != global::Hardpoint.hardpoint_type.None)
        {
            hardpoint = global::Hardpoint.GetHardpointFromRay(ray, this.hardpointType);
            if (hardpoint)
            {
                flag11  = true;
                vector2 = hardpoint.transform.position;
                vector3 = hardpoint.transform.up;
                carrier = hardpoint.GetMaster().GetTransCarrier();
                flag5   = true;
            }
        }
        bool flag12 = false;

        if (this.spacingRadius > 0f)
        {
            Collider[] array = Physics.OverlapSphere(vector2, this.spacingRadius);
            foreach (Collider collider in array)
            {
                GameObject gameObject = collider.gameObject;
                IDBase     component  = collider.gameObject.GetComponent <IDBase>();
                if (component != null)
                {
                    gameObject = component.idMain.gameObject;
                }
                if (gameObject.CompareTag(this.ObjectToPlace.gameObject.tag) && Vector3.Distance(vector2, gameObject.transform.position) < this.spacingRadius)
                {
                    flag12 = true;
                    break;
                }
            }
        }
        bool flag13 = false;

        if (flag && !this.forcePlaceable && deployableObject.cantPlaceOn)
        {
            flag13 = true;
        }
        pos = vector2;
        if (this.orientationMode == global::DeployableOrientationMode.Default)
        {
            if (this.uprightOnly)
            {
                this.orientationMode = global::DeployableOrientationMode.Upright;
            }
            else
            {
                this.orientationMode = global::DeployableOrientationMode.NormalUp;
            }
        }
        Quaternion quaternion;

        switch (this.orientationMode)
        {
        case global::DeployableOrientationMode.NormalUp:
            quaternion = global::TransformHelpers.LookRotationForcedUp(ray.direction, vector3);
            break;

        case global::DeployableOrientationMode.Upright:
            quaternion = global::TransformHelpers.LookRotationForcedUp(ray.direction, Vector3.up);
            break;

        case global::DeployableOrientationMode.NormalForward:
        {
            Vector3 forward = Vector3.Cross(ray.direction, Vector3.up);
            quaternion = global::TransformHelpers.LookRotationForcedUp(forward, vector3);
            break;
        }

        case global::DeployableOrientationMode.HardpointPosRot:
            if (flag11)
            {
                quaternion = hardpoint.transform.rotation;
            }
            else
            {
                quaternion = global::TransformHelpers.LookRotationForcedUp(ray.direction, Vector3.up);
            }
            break;

        default:
            throw new NotImplementedException();
        }
        rot = quaternion * this.ObjectToPlace.transform.localRotation;
        bool flag14 = false;

        if (this.checkPlacementZones)
        {
            flag14 = global::NoPlacementZone.ValidPos(pos);
        }
        float num3 = Vector3.Angle(vector3, Vector3.up);

        results.falseFromDeployable      = ((!this.CanStackOnDeployables && flag) || flag13);
        results.falseFromTerrian         = (this.TerrainOnly && !flag2);
        results.falseFromClose           = (this.spacingRadius > 0f && flag12);
        results.falseFromHardpoint       = (this.requireHardpoint && !flag11);
        results.falseFromAngle           = (!this.requireHardpoint && num3 >= this.ObjectToPlace.maxSlope);
        results.falseFromPlacementZone   = (this.checkPlacementZones && !flag14);
        results.falseFromHittingNothing  = !flag5;
        results.falseFromStructure       = (this.StructureOnly && !flag3);
        results.falseFromFitRequirements = (this.fitRequirements != null && !this.fitRequirements.Test(pos, (!this.fitTestForcedUp) ? rot : global::TransformHelpers.LookRotationForcedUp(rot, Vector3.up), this.ObjectToPlace.transform.localScale));
    }
Esempio n. 22
0
        public static bool Test_WeaponShot(Character Killer, GameObject hitObj, IBulletWeaponItem weapon, ItemRepresentation rep, Transform transform, Vector3 endPos, bool isHeadshot)
        {
            if ((Killer == null) || (transform == null))
            {
                return(true);
            }
            if (((transform == null) || (Killer == null)) || (Killer.netUser == null))
            {
                return(true);
            }
            if ((float.IsNaN(endPos.x) || float.IsNaN(endPos.y)) || float.IsNaN(endPos.z))
            {
                return(true);
            }
            Character component   = hitObj.GetComponent <Character>();
            NetUser   key         = ((Killer == null) || (Killer.controllable == null)) ? null : Killer.netUser;
            NetUser   user2       = ((component == null) || (component.controllable == null)) ? null : component.netUser;
            Vector3   origin      = Helper.GetEyesRay(Killer).origin;
            float     num         = Vector3.Distance(origin, endPos);
            float     bulletRange = ((BulletWeaponDataBlock)rep.datablock).bulletRange;

            if (component == null)
            {
                if (num > bulletRange)
                {
                    return(true);
                }
                foreach (Collider collider in Physics.OverlapSphere(Killer.eyesRay.origin, 0.2f))
                {
                    IDBase base2 = collider.gameObject.GetComponent <IDBase>();
                    if ((base2 != null) && (base2.idMain is StructureMaster))
                    {
                        return(true);
                    }
                }
                IDMain idMain = IDBase.GetMain(hitObj).idMain;
                if ((idMain.GetComponent <StructureComponent>() == null) && (idMain.GetComponent <SleepingAvatar>() == null))
                {
                    Ray     lookRay  = Helper.GetLookRay(Killer);
                    Vector3 position = hitObj.transform.position;
                    position.y += 0.1f;
                    if (Physics.RaycastAll(lookRay, Vector3.Distance(lookRay.origin, position), -1).Length > 1)
                    {
                        return(true);
                    }
                }
                return(false);
            }
            if ((CheckAimbot && !key.admin) && !component.dead)
            {
                string newValue = Helper.NiceName((user2 != null) ? user2.displayName : component.name);
                if (!WeaponShotEyes.ContainsKey(key))
                {
                    PlayerShotEyes eyes = new PlayerShotEyes {
                        origin = Killer.eyesRay.origin,
                        angles = Killer.eyesAngles,
                        count  = 0
                    };
                    WeaponShotEyes.Add(key, eyes);
                }
                Vector3 vector5 = transform.position - endPos;
                if (vector5.magnitude > 3f)
                {
                    PunishDetails = Config.GetMessageTruth("Truth.Punish.Reason.Aimbot.JackedSilent", key, "", 0, new DateTime());
                    PunishDetails = PunishDetails.Replace("%KILLER.NAME%", key.displayName);
                    PunishDetails = PunishDetails.Replace("%VICTIM.NAME%", newValue);
                    PunishDetails = PunishDetails.Replace("%KILLER.POS%", Killer.transform.position.AsString());
                    PunishDetails = PunishDetails.Replace("%VICTIM.POS%", component.transform.position.AsString());
                    PunishDetails = PunishDetails.Replace("%DISTANCE%", Math.Abs(num).ToString("N1"));
                    PunishDetails = PunishDetails.Replace("%WEAPON%", weapon.datablock.name);
                    Punish(key, Users.GetBySteamID(key.userID), HackMethod.AimedHack, true);
                    return(true);
                }
                if (num < 1f)
                {
                    return(false);
                }
                if (ShotThroughObjectBlock)
                {
                    Vector3    vector3;
                    GameObject obj2 = Helper.GetLineObject(origin, endPos, out vector3, 0x183e1411);
                    if ((obj2 != null) && ((obj2.GetComponent <StructureComponent>() != null) || (obj2.GetComponent <BasicDoor>() != null)))
                    {
                        PunishDetails = Config.GetMessageTruth("Truth.Punish.Reason.Aimbot.ShootBlocked", key, "", 0, new DateTime());
                        PunishDetails = PunishDetails.Replace("%KILLER.NAME%", key.displayName);
                        PunishDetails = PunishDetails.Replace("%VICTIM.NAME%", newValue);
                        PunishDetails = PunishDetails.Replace("%KILLER.POS%", Killer.transform.position.AsString());
                        PunishDetails = PunishDetails.Replace("%VICTIM.POS%", component.transform.position.AsString());
                        PunishDetails = PunishDetails.Replace("%OBJECT%", Helper.NiceName(obj2.name));
                        PunishDetails = PunishDetails.Replace("%OBJECT.NAME%", Helper.NiceName(obj2.name));
                        PunishDetails = PunishDetails.Replace("%OBJECT.POS%", obj2.transform.position.AsString());
                        PunishDetails = PunishDetails.Replace("%POINT%", vector3.AsString());
                        PunishDetails = PunishDetails.Replace("%DISTANCE%", Math.Abs(num).ToString("N1"));
                        PunishDetails = PunishDetails.Replace("%WEAPON.RANGE%", bulletRange.ToString("N1"));
                        PunishDetails = PunishDetails.Replace("%WEAPON%", weapon.datablock.name);
                        if (!Killer.stateFlags.movement)
                        {
                            if (ShotThroughObjectPunish)
                            {
                                Punish(key, Users.GetBySteamID(key.userID), HackMethod.AimedHack, false);
                            }
                            else
                            {
                                Helper.LogError(string.Concat(new object[] { "Blocked [", key.displayName, ":", key.userID, "]: ", PunishDetails }), true);
                            }
                            return(true);
                        }
                        Vector3 pos = key.truthDetector.prevSnap.pos;
                        pos.x = origin.x;
                        pos.z = origin.z;
                        if (Helper.GetLineObject(pos, endPos, out vector3, 0x183e1411) == obj2)
                        {
                            Helper.LogError(string.Concat(new object[] { "Blocked [", key.displayName, ":", key.userID, "]: ", PunishDetails }), true);
                            return(true);
                        }
                    }
                }
                uint num4 = ((uint)Environment.TickCount) - key.truthDetector.prevHitTime;
                if (num4 == Environment.TickCount)
                {
                    num4 = 0;
                }
                key.truthDetector.prevHitTime = (uint)Environment.TickCount;
                if ((num4 > 100) && (num4 < Environment.TickCount))
                {
                    float minShotRateByRange = MinShotRateByRange;
                    float num6 = ((float)num4) / num;
                    Config.Get("SERVER", "Truth.MinShotRateByRange." + weapon.datablock.name, ref minShotRateByRange, true);
                    if (num6 < minShotRateByRange)
                    {
                        PunishDetails = Config.GetMessageTruth("Truth.Punish.Reason.Aimbot.HighFireRate", key, "", 0, new DateTime());
                        PunishDetails = PunishDetails.Replace("%KILLER.NAME%", key.displayName);
                        PunishDetails = PunishDetails.Replace("%VICTIM.NAME%", newValue);
                        PunishDetails = PunishDetails.Replace("%KILLER.POS%", Killer.transform.position.AsString());
                        PunishDetails = PunishDetails.Replace("%VICTIM.POS%", component.transform.position.AsString());
                        PunishDetails = PunishDetails.Replace("%DISTANCE%", Math.Abs(num).ToString("N1"));
                        PunishDetails = PunishDetails.Replace("%WEAPON.RANGE%", bulletRange.ToString("N1"));
                        PunishDetails = PunishDetails.Replace("%WEAPON%", weapon.datablock.name);
                        PunishDetails = PunishDetails.Replace("%SHOTRATE%", num6.ToString("N2"));
                        PunishDetails = PunishDetails.Replace("%MINRATE%", minShotRateByRange.ToString("N2"));
                        Punish(key, Users.GetBySteamID(key.userID), HackMethod.AimedHack, false);
                        return(true);
                    }
                }
                if (CheckShotRange && (Math.Abs(num) > bulletRange))
                {
                    PunishDetails = Config.GetMessageTruth("Truth.Punish.Reason.Aimbot.OverWeaponRange", key, "", 0, new DateTime());
                    PunishDetails = PunishDetails.Replace("%KILLER.NAME%", key.displayName);
                    PunishDetails = PunishDetails.Replace("%VICTIM.NAME%", newValue);
                    PunishDetails = PunishDetails.Replace("%KILLER.POS%", Killer.transform.position.AsString());
                    PunishDetails = PunishDetails.Replace("%VICTIM.POS%", component.transform.position.AsString());
                    PunishDetails = PunishDetails.Replace("%DISTANCE%", Math.Abs(num).ToString("N1"));
                    PunishDetails = PunishDetails.Replace("%WEAPON.RANGE%", bulletRange.ToString("N1"));
                    PunishDetails = PunishDetails.Replace("%WEAPON%", weapon.datablock.name);
                    if (user2 != null)
                    {
                        bool punishBan = (ShotAboveMaxDistance > 0f) && ((num - bulletRange) >= ShotAboveMaxDistance);
                        Punish(key, Users.GetBySteamID(key.userID), HackMethod.AimedHack, punishBan);
                    }
                    else
                    {
                        Broadcast.MessageAll(ViolationColor, PunishDetails, null);
                        Helper.LogError(string.Concat(new object[] { "Noticed [", key.displayName, ":", key.userID, "]: ", PunishDetails }), true);
                    }
                    return(true);
                }
                float num7 = HeadshotAimTime * num;
                if (num4 > num7)
                {
                    key.truthDetector.headshotHold = 0;
                }
                if (isHeadshot)
                {
                    key.truthDetector.headshotHold += (int)num;
                }
                if (key.truthDetector.headshotHold >= HeadshotThreshold)
                {
                    PunishDetails = Config.GetMessageTruth("Truth.Punish.Reason.Aimbot.ThresholdHeadshots", key, "", 0, new DateTime());
                    PunishDetails = PunishDetails.Replace("%KILLER.NAME%", key.displayName);
                    PunishDetails = PunishDetails.Replace("%VICTIM.NAME%", newValue);
                    PunishDetails = PunishDetails.Replace("%KILLER.POS%", Killer.transform.position.AsString());
                    PunishDetails = PunishDetails.Replace("%VICTIM.POS%", component.transform.position.AsString());
                    PunishDetails = PunishDetails.Replace("%DISTANCE%", Math.Abs(num).ToString("N1"));
                    PunishDetails = PunishDetails.Replace("%WEAPON.RANGE%", bulletRange.ToString("N1"));
                    PunishDetails = PunishDetails.Replace("%WEAPON%", weapon.datablock.name);
                    Punish(key, Users.GetBySteamID(key.userID), HackMethod.AimedHack, false);
                    return(true);
                }
            }
            return(false);
        }
    public void CheckPlacementResults(Ray ray, out Vector3 pos, out Quaternion rot, out TransCarrier carrier, out DeployPlaceResults results)
    {
        RaycastHit        hit;
        Vector3           position;
        Vector3           normal;
        bool              flag6;
        MeshBatchInstance instance;
        Quaternion        rotation;
        float             placeRange = this.placeRange;
        IDMain            main       = null;
        bool              flag       = false;
        bool              flag2      = false;
        bool              flag3      = false;
        DeployableObject  obj2       = null;
        bool              flag4      = false;
        bool              flag5      = false;
        bool              flag7      = this.minCastRadius >= float.Epsilon;
        bool              flag8      = !flag7?MeshBatchPhysics.Raycast(ray, out hit, placeRange, -472317957, out flag6, out instance) : MeshBatchPhysics.SphereCast(ray, this.minCastRadius, out hit, placeRange, -472317957, out flag6, out instance);

        Vector3 point = ray.GetPoint(placeRange);

        if (!flag8)
        {
            Vector3 origin = point;
            origin.y += 0.5f;
            flag4     = MeshBatchPhysics.Raycast(origin, Vector3.down, out hit, 5f, -472317957, out flag6, out instance);
        }
        if (flag8 || flag4)
        {
            main = !flag6?IDBase.GetMain(hit.collider) : instance.idMain;

            flag3    = (main is StructureComponent) || (main is StructureMaster);
            position = hit.point;
            normal   = hit.normal;
            flag     = !flag3 && ((bool)(obj2 = main as DeployableObject));
            if (((this.carrierSphereCastMode != CarrierSphereCastMode.Allowed) && flag8) && (flag7 && !NonVariantSphereCast(ray, position)))
            {
                Ray               ray2;
                float             num2;
                RaycastHit        hit2;
                bool              flag9;
                MeshBatchInstance instance2;
                bool              flag10;
                if (this.carrierSphereCastMode == CarrierSphereCastMode.AdjustedRay)
                {
                    Vector3 vector5   = ray.origin;
                    Vector3 direction = hit.point - vector5;
                    num2 = direction.magnitude + (this.minCastRadius * 2f);
                    ray2 = new Ray(vector5, direction);
                    Debug.DrawLine(ray.origin, ray.GetPoint(num2), Color.cyan);
                }
                else
                {
                    num2 = placeRange + this.minCastRadius;
                    ray2 = ray;
                }
                if (!(flag10 = MeshBatchPhysics.Raycast(ray2, out hit2, num2, -472317957, out flag9, out instance2)))
                {
                    Vector3 vector8 = position;
                    vector8.y += 0.5f;
                    flag10     = MeshBatchPhysics.Raycast(vector8, Vector3.down, out hit2, 5f, -472317957, out flag9, out instance2);
                }
                if (flag10)
                {
                    IDMain main2 = !flag9?IDBase.GetMain(hit2.collider) : instance2.idMain;

                    carrier = (main2 == null) ? hit2.collider.GetComponent <TransCarrier>() : main2.GetLocal <TransCarrier>();
                }
                else
                {
                    carrier = null;
                }
            }
            else
            {
                carrier = ((main == null) ? hit.collider.gameObject : main.gameObject).GetComponent <TransCarrier>();
            }
            flag2 = (hit.collider is TerrainCollider) || (hit.collider.gameObject.layer == 10);
            flag5 = true;
        }
        else
        {
            position = point;
            normal   = Vector3.up;
            carrier  = null;
        }
        bool      flag11           = false;
        Hardpoint hardpointFromRay = null;

        if (this.hardpointType != Hardpoint.hardpoint_type.None)
        {
            hardpointFromRay = Hardpoint.GetHardpointFromRay(ray, this.hardpointType);
            if (hardpointFromRay != null)
            {
                flag11   = true;
                position = hardpointFromRay.transform.position;
                normal   = hardpointFromRay.transform.up;
                carrier  = hardpointFromRay.GetMaster().GetTransCarrier();
                flag5    = true;
            }
        }
        bool flag12 = false;

        if (this.spacingRadius > 0f)
        {
            foreach (Collider collider in Physics.OverlapSphere(position, this.spacingRadius))
            {
                GameObject gameObject = collider.gameObject;
                IDBase     component  = collider.gameObject.GetComponent <IDBase>();
                if (component != null)
                {
                    gameObject = component.idMain.gameObject;
                }
                if (gameObject.CompareTag(this.ObjectToPlace.gameObject.tag) && (Vector3.Distance(position, gameObject.transform.position) < this.spacingRadius))
                {
                    flag12 = true;
                    break;
                }
            }
        }
        bool flag13 = false;

        if ((flag && !this.forcePlaceable) && obj2.cantPlaceOn)
        {
            flag13 = true;
        }
        pos = position;
        if (this.orientationMode == DeployableOrientationMode.Default)
        {
            if (this.uprightOnly)
            {
                this.orientationMode = DeployableOrientationMode.Upright;
            }
            else
            {
                this.orientationMode = DeployableOrientationMode.NormalUp;
            }
        }
        switch (this.orientationMode)
        {
        case DeployableOrientationMode.NormalUp:
            rotation = TransformHelpers.LookRotationForcedUp(ray.direction, normal);
            break;

        case DeployableOrientationMode.Upright:
            rotation = TransformHelpers.LookRotationForcedUp(ray.direction, Vector3.up);
            break;

        case DeployableOrientationMode.NormalForward:
            rotation = TransformHelpers.LookRotationForcedUp(Vector3.Cross(ray.direction, Vector3.up), normal);
            break;

        case DeployableOrientationMode.HardpointPosRot:
            if (!flag11)
            {
                rotation = TransformHelpers.LookRotationForcedUp(ray.direction, Vector3.up);
                break;
            }
            rotation = hardpointFromRay.transform.rotation;
            break;

        default:
            throw new NotImplementedException();
        }
        rot = rotation * this.ObjectToPlace.transform.localRotation;
        bool flag14 = false;

        if (this.checkPlacementZones)
        {
            flag14 = NoPlacementZone.ValidPos(pos);
        }
        float num4 = Vector3.Angle(normal, Vector3.up);

        results.falseFromDeployable      = (!this.CanStackOnDeployables && flag) || flag13;
        results.falseFromTerrian         = this.TerrainOnly && !flag2;
        results.falseFromClose           = (this.spacingRadius > 0f) && flag12;
        results.falseFromHardpoint       = this.requireHardpoint && !flag11;
        results.falseFromAngle           = !this.requireHardpoint && (num4 >= this.ObjectToPlace.maxSlope);
        results.falseFromPlacementZone   = this.checkPlacementZones && !flag14;
        results.falseFromHittingNothing  = !flag5;
        results.falseFromStructure       = this.StructureOnly && !flag3;
        results.falseFromFitRequirements = (this.fitRequirements != null) && !this.fitRequirements.Test(pos, !this.fitTestForcedUp ? rot : TransformHelpers.LookRotationForcedUp(rot, Vector3.up), this.ObjectToPlace.transform.localScale);
    }
Esempio n. 24
0
        public static EventTimer TimeEvent_TeleportTo(NetUser Sender, NetUser Target, string Command, double time)
        {
            Events.Class38 @class = new Events.Class38();
            @class.netUser_0 = Sender;
            @class.netUser_1 = Target;
            @class.string_0  = Command;
            EventTimer result;

            if (Core.CommandTeleportOutdoorsOnly)
            {
                Vector3    position = @class.netUser_1.playerClient.controllable.character.transform.position;
                Collider[] array    = Physics.OverlapSphere(position, 1f, 271975425);
                for (int i = 0; i < array.Length; i++)
                {
                    Collider component = array[i];
                    IDMain   main      = IDBase.GetMain(component);
                    if (!(main == null))
                    {
                        StructureMaster component2 = main.GetComponent <StructureMaster>();
                        if (!(component2 == null) && component2.ownerID != @class.netUser_0.userID && component2.ownerID != @class.netUser_1.userID)
                        {
                            UserData bySteamID = Users.GetBySteamID(component2.ownerID);
                            if (bySteamID == null || (!bySteamID.HasShared(@class.netUser_0.userID) && !bySteamID.HasShared(@class.netUser_1.userID)))
                            {
                                Broadcast.Notice(@class.netUser_0, "☢", Config.GetMessage("Command.Teleport.NoTeleport", @class.netUser_0, @class.netUser_1.displayName), 5f);
                                Broadcast.Notice(@class.netUser_1, "☢", Config.GetMessage("Command.Teleport.NotHere", @class.netUser_1, @class.netUser_0.displayName), 5f);
                                result = null;
                                return(result);
                            }
                        }
                    }
                }
            }
            Broadcast.Message(@class.netUser_0, Config.GetMessage("Command.Teleport.IsConfirm", @class.netUser_0, null).Replace("%USERNAME%", @class.netUser_1.displayName), null, 0f);
            Broadcast.Message(@class.netUser_1, Config.GetMessage("Command.Teleport.Confirmed", @class.netUser_1, null).Replace("%USERNAME%", @class.netUser_0.displayName), null, 0f);
            if (!Character.FindByUser(@class.netUser_1.userID, out @class.character_0))
            {
                result = null;
            }
            else if (time <= 0.0)
            {
                Events.Teleport_PlayerTo(null, @class.netUser_0, @class.netUser_1, @class.string_0, @class.character_0.transform.position);
                result = null;
            }
            else
            {
                EventTimer eventTimer = new EventTimer
                {
                    Interval  = time * 1000.0,
                    AutoReset = false
                };
                eventTimer.Elapsed += new ElapsedEventHandler(@class.method_0);
                eventTimer.Sender   = @class.netUser_0;
                eventTimer.Target   = @class.netUser_1;
                eventTimer.Command  = @class.string_0;
                Broadcast.Notice(@class.netUser_0, "☢", Config.GetMessage("Command.Teleport.Timewait", @class.netUser_0, null).Replace("%TIME%", eventTimer.TimeLeft.ToString()), 5f);
                Broadcast.Notice(@class.netUser_1, "☢", Config.GetMessage("Command.Teleport.Timewait", @class.netUser_1, null).Replace("%TIME%", eventTimer.TimeLeft.ToString()), 5f);
                eventTimer.Start();
                result = eventTimer;
            }
            return(result);
        }
Esempio n. 25
0
        public override void Execute(ref ConsoleSystem.Arg Arguments, ref string[] ChatArguments)
        {
            var player = Fougerite.Server.Cache[Arguments.argUser.userID];
            var pl     = Fougerite.Server.Cache[Arguments.argUser.userID];

            if (RustPP.Components.AuthComponent.AuthComponent.UserIsLogged(player))
            {
                RustPP.Data.Entities.User usuario = Data.Globals.usersOnline.FindLast(x => x.Name == pl.Name);
                var position  = player.PlayerClient.controllable.character.transform.position;
                var direction = player.PlayerClient.controllable.character.eyesRay.direction;
                position.y += player.PlayerClient.controllable.character.stateFlags.crouch ? 0.85f : 1.65f;
                if (Facepunch.MeshBatch.MeshBatchPhysics.Raycast(new Ray(position, direction), out var raycastHit, 10, -1, out var flag, out var meshBatchInstance))
                {
                    var idmain = flag ? meshBatchInstance.idMain : IDBase.GetMain(raycastHit.collider);
                    if (idmain != null)
                    {
                        if (idmain.gameObject.GetComponent <StructureComponent>())
                        {
                            var id = idmain.gameObject.GetComponent <StructureComponent>()._master.ownerID;
                            if (Fougerite.Server.Cache.ContainsKey(id))
                            {
                                var user = Fougerite.Server.Cache[id];
                                player.Message("[color yellow]<!>[/color] Este " + idmain.gameObject.name + " pertenece a " + user.Name);
                                if (usuario.AdminLevel > 1)
                                {
                                    player.Message("Ubicación: " + idmain.gameObject.transform.position);
                                    player.Message("Vida: " + idmain.gameObject.GetComponent <TakeDamage>().health +
                                                   "/" + idmain.gameObject.GetComponent <TakeDamage>().maxHealth);
                                }
                            }
                            else
                            {
                                string Name = Data.Globals.GetUserNameBySteamid(id.ToString());
                                player.Message("[color yellow]<!>[/color] Este " + idmain.gameObject.name + " pertenece a " + Name);
                                if (usuario.AdminLevel > 1)
                                {
                                    player.Message("Ubicación: " + idmain.gameObject.transform.position);
                                    player.Message("Vida: " + idmain.gameObject.GetComponent <TakeDamage>().health +
                                                   "/" + idmain.gameObject.GetComponent <TakeDamage>().maxHealth);
                                }
                            }
                        }
                        if (idmain.gameObject.GetComponent <DeployableObject>())
                        {
                            var id = idmain.gameObject.GetComponent <DeployableObject>().ownerID;

                            if (Fougerite.Server.Cache.ContainsKey(id))
                            {
                                var user = Fougerite.Server.Cache[id];
                                player.Message("[color yellow]<!>[/color] Este " + idmain.gameObject.name + " pertenece a " + user.Name);
                                if (usuario.AdminLevel > 1)
                                {
                                    player.Message("Ubicación: " + idmain.gameObject.transform.position);
                                    player.Message("Vida: " + idmain.gameObject.GetComponent <TakeDamage>().health +
                                                   "/" + idmain.gameObject.GetComponent <TakeDamage>().maxHealth);
                                }
                            }
                            else
                            {
                                string Name = Data.Globals.GetUserNameBySteamid(id.ToString());
                                player.Message("[color yellow]<!>[/color] Este " + idmain.gameObject.name + " pertenece a " + Name);
                                if (usuario.AdminLevel > 1)
                                {
                                    player.Message("Ubicación: " + idmain.gameObject.transform.position);
                                    player.Message("Vida: " + idmain.gameObject.GetComponent <TakeDamage>().health +
                                                   "/" + idmain.gameObject.GetComponent <TakeDamage>().maxHealth);
                                }
                            }
                        }
                    }
                }
            }
            else
            {
                pl.SendClientMessage("[color red]<Error>[/color] Primero debes estar conectado (Utiliza [color orange] /login[/color])");
            }
        }
Esempio n. 26
0
 public static bool DamageOverride(TakeDamage take, ref DamageEvent damage, ref TakeDamage.Quantity quantity)
 {
     if (damage.attacker.idMain != damage.victim.idMain)
     {
         if (!Core.OverrideDamage || float.IsInfinity(damage.amount))
         {
             return(true);
         }
         if ((damage.victim.id.GetComponent <Character>() == null) && (damage.attacker.client != null))
         {
             ulong ownerID = (damage.victim.client != null) ? damage.victim.client.userID : ((ulong)0L);
             if (damage.victim.idMain is DeployableObject)
             {
                 ownerID = (damage.victim.idMain as DeployableObject).ownerID;
             }
             if (damage.victim.idMain is StructureComponent)
             {
                 ownerID = (damage.victim.idMain as StructureComponent)._master.ownerID;
             }
             ulong num2 = (damage.attacker.client != null) ? damage.attacker.client.userID : ((ulong)0L);
             if (damage.attacker.idMain is DeployableObject)
             {
                 num2 = (damage.attacker.idMain as DeployableObject).ownerID;
             }
             if (damage.attacker.idMain is StructureComponent)
             {
                 num2 = (damage.attacker.idMain as StructureComponent)._master.ownerID;
             }
             if (((ownerID == num2) || Users.SharedGet(ownerID, num2)) && (Core.OwnershipDestroy || Core.DestoryOwnership.ContainsKey(damage.attacker.client.userID)))
             {
                 Config.Get("OVERRIDE.DAMAGE", damage.attacker.idMain.name.Replace("(Clone)", "") + ".DAMAGE", ref damage.amount, true);
                 return(true);
             }
         }
         bool result = true;
         if ((damage.attacker.client != null) && (damage.attacker.idMain is Character))
         {
             WeaponImpact extraData = damage.extraData as WeaponImpact;
             string       str       = (extraData != null) ? extraData.dataBlock.name : "Hunting Bow";
             string       str2      = str.Replace(" ", "") + ".DAMAGE";
             string       key       = str2 + "." + damage.victim.idMain.name.Replace("(Clone)", "");
             string       str4      = str2 + ".HEADSHOT";
             if (Config.Get("OVERRIDE.DAMAGE", key, ref result, true) && !result)
             {
                 return(false);
             }
             float[] numArray = (extraData != null) ? new float[] { extraData.dataBlock.damageMin, extraData.dataBlock.damageMax } : new float[] { 75f, 75f };
             Config.Get("OVERRIDE.DAMAGE", (damage.bodyPart == BodyPart.Head) ? str4 : str2, ref numArray, true);
             damage.amount = UnityEngine.Random.Range(Math.Min(numArray[0], numArray[1]), Math.Max(numArray[0], numArray[1]));
             if ((extraData != null) && (damage.extraData is BulletWeaponDataBlock))
             {
                 damage.amount *= (damage.extraData as BulletWeaponDataBlock).IsSilenced(extraData.itemRep) ? 0.8f : 1f;
             }
             if ((extraData != null) && (damage.extraData is BulletWeaponImpact))
             {
                 quantity = new DamageTypeList(0f, damage.amount, 0f, 0f, 0f, 0f);
             }
             else
             {
                 quantity = new DamageTypeList(0f, 0f, damage.amount, 0f, 0f, 0f);
             }
             damage.amount = 0f;
             if (quantity.Unit == TakeDamage.Unit.List)
             {
                 ApplyDamageTypeList(take, ref damage, quantity.DamageTypeList);
             }
             Helper.Log(string.Concat(new object[] {
                 "Damage: ", damage.attacker.idMain, "[", damage.attacker.networkViewID, "] from ", str, " hit ", damage.victim.idMain, "[", damage.victim.networkViewID, "] on ", damage.amount, "(", numArray[0], "-", numArray[1],
                 ") pts."
             }), false);
         }
         else if (!(damage.attacker.idMain is Character))
         {
             float baseReturnDmg   = 0f;
             float explosionRadius = 0f;
             if (damage.attacker.id is TimedGrenade)
             {
                 baseReturnDmg   = (damage.attacker.id as TimedGrenade).damage;
                 explosionRadius = (damage.attacker.id as TimedGrenade).explosionRadius;
             }
             if (damage.attacker.id is TimedExplosive)
             {
                 baseReturnDmg   = (damage.attacker.id as TimedExplosive).damage;
                 explosionRadius = (damage.attacker.id as TimedExplosive).explosionRadius;
             }
             if (damage.attacker.id is SpikeWall)
             {
                 baseReturnDmg   = (damage.attacker.id as SpikeWall).baseReturnDmg;
                 explosionRadius = 0f;
             }
             if (baseReturnDmg > 0f)
             {
                 string str5 = damage.attacker.idMain.name.Replace("(Clone)", "") + ".DAMAGE";
                 string str6 = str5 + "." + damage.victim.idMain.name.Replace("(Clone)", "");
                 if (Config.Get("OVERRIDE.DAMAGE", str6, ref result, true) && !result)
                 {
                     return(false);
                 }
                 Config.Get("OVERRIDE.DAMAGE", str5, ref baseReturnDmg, true);
                 if (explosionRadius > 0f)
                 {
                     RaycastHit        hit;
                     bool              flag2;
                     MeshBatchInstance instance;
                     Vector3           center    = damage.victim.idMain.collider.bounds.center;
                     Vector3           a         = damage.attacker.idMain.collider.bounds.center;
                     Vector3           direction = center - a;
                     float             distance  = Vector3.Distance(a, center);
                     if (Facepunch.MeshBatch.MeshBatchPhysics.Raycast(a, direction, out hit, distance, 0x10360401, out flag2, out instance))
                     {
                         IDMain     main = flag2 ? instance.idMain : IDBase.GetMain(hit.collider);
                         GameObject obj2 = (main != null) ? main.gameObject : hit.collider.gameObject;
                         if (obj2 != damage.victim.idMain.gameObject)
                         {
                             damage.amount = (1f - Mathf.Clamp01(distance / explosionRadius)) * baseReturnDmg;
                             if (flag2)
                             {
                                 damage.amount *= 0.1f;
                             }
                         }
                     }
                 }
                 if (damage.attacker.id is SpikeWall)
                 {
                     quantity = new DamageTypeList(0f, 0f, damage.amount, 0f, 0f, 0f);
                 }
                 else
                 {
                     quantity = new DamageTypeList(0f, 0f, 0f, damage.amount, 0f, 0f);
                 }
                 damage.amount = 0f;
                 if (quantity.Unit == TakeDamage.Unit.List)
                 {
                     ApplyDamageTypeList(take, ref damage, quantity.DamageTypeList);
                 }
             }
             Helper.Log(string.Concat(new object[] { "Damage: ", damage.attacker.idMain, "[", damage.attacker.networkViewID, "] owned ", damage.attacker.client, " hit ", damage.victim.idMain, "[", damage.victim.networkViewID, "] on ", damage.amount, "(", baseReturnDmg, ") pts." }), false);
         }
     }
     return(true);
 }