Ejemplo n.º 1
0
 public override void VehicleFixedUpdate()
 {
     base.VehicleFixedUpdate();
     if (!base.isClient && isSpawned)
     {
         if (IsEditableNow != prevEditable)
         {
             SendNetworkUpdate();
             prevEditable = IsEditableNow;
         }
         if (VehicleIsActive)
         {
             Velocity    = GetWorldVelocity();
             waterlogged = WaterLevel.Test(waterSample.transform.position, true, this);
         }
         else
         {
             Velocity = Vector3.zero;
         }
         SetFlag(Flags.Reserved6, rigidBody.isKinematic);
         if (LightsAreOn && !HasDriver())
         {
             SetLightsState(false);
         }
         for (int i = 0; i < NumAttachedModules; i++)
         {
             AttachedModuleEntities[i].VehicleFixedUpdate(VehicleIsActive);
         }
     }
 }
Ejemplo n.º 2
0
 public void CalculateGroundQuality(bool firstCheck)
 {
     if (underWater && !firstCheck)
     {
         GroundQuality = 0f;
         return;
     }
     if (firstCheck)
     {
         Vector3 position = base.transform.position;
         if (WaterLevel.Test(position, true, this))
         {
             underWater    = true;
             GroundQuality = 0f;
             return;
         }
         underWater       = false;
         terrainTypeValue = GetGroundTypeValue(position);
     }
     if (GetPlanter() != null)
     {
         GroundQuality  = 0.6f;
         GroundQuality += (Fertilized ? 0.4f : 0f);
     }
     else
     {
         GroundQuality = terrainTypeValue;
         float num = (float)Genes.GetGeneTypeCount(GrowableGenetics.GeneType.Hardiness) * 0.2f;
         float b   = GroundQuality + num;
         GroundQuality = Mathf.Min(0.6f, b);
     }
     GroundQuality = RemapValue(GroundQuality, 0f, Properties.OptimalGroundQuality, 0f, 1f);
 }
 public override bool DoCheck(Construction.Placement place)
 {
     if (WaterLevel.Test(Vector3.op_Addition(place.position, Quaternion.op_Multiply(place.rotation, this.worldPosition))) == this.wantsInWater)
     {
         return(true);
     }
     Construction.lastPlacementError = "Failed Check: InWater (" + this.hierachyName + ")";
     return(false);
 }
Ejemplo n.º 4
0
 public override bool DoCheck(Construction.Placement place)
 {
     if (WaterLevel.Test(place.position + (place.rotation * this.worldPosition)) == this.wantsInWater)
     {
         return(true);
     }
     Construction.lastPlacementError = string.Concat("Failed Check: InWater (", this.hierachyName, ")");
     return(false);
 }
    public float ObstacleDistanceCheck(float speed = 15f)
    {
        RaycastHit raycastHit;
        Vector3    vector3  = base.transform.position;
        int        num      = 1;
        int        num1     = Mathf.CeilToInt((float)(Mathf.Max(2, Mathf.CeilToInt(speed)) / num));
        float      single   = 0f;
        Vector3    vector31 = QuaternionEx.LookRotationForcedUp(base.transform.forward, Vector3.up) * Vector3.forward;
        Vector3    vector32 = this.movementLOSOrigin.transform.position;

        vector32.y = base.transform.position.y;
        Vector3 vector33 = base.transform.up;

        for (int i = 0; i < num1; i++)
        {
            float   single1  = (float)num;
            bool    flag     = false;
            float   single2  = 0f;
            Vector3 vector34 = Vector3.zero;
            Vector3 vector35 = Vector3.up;
            Vector3 vector36 = vector32 + (Vector3.up * 0.5f);
            if (Physics.SphereCast(vector36, this.obstacleDetectionRadius, vector31, out raycastHit, single1, 1486954753))
            {
                single2  = raycastHit.distance;
                vector34 = raycastHit.point;
                vector35 = raycastHit.normal;
                flag     = true;
            }
            if (!flag)
            {
                if (!TransformUtil.GetGroundInfo((vector36 + (vector31 * 1f)) + (Vector3.up * 2f), out vector34, out vector35, 4f, 278986753, null))
                {
                    return(single);
                }
                single2 = Vector3.Distance(vector36, vector34);
                if (WaterLevel.Test(vector34 + (Vector3.one * this.maxWaterDepth)))
                {
                    vector35 = -base.transform.forward;
                }
                flag = true;
            }
            if (flag)
            {
                float single3 = Vector3.Angle(vector33, vector35);
                float single4 = Vector3.Angle(vector35, Vector3.up);
                if (single3 > 45f && single4 > 50f)
                {
                    return(single);
                }
            }
            single  += single2;
            vector31 = QuaternionEx.LookRotationForcedUp(base.transform.forward, vector35) * Vector3.forward;
            vector32 = vector34;
        }
        return(single);
    }
Ejemplo n.º 6
0
    public static float WorkoutGroundConditions(Vector3 pos)
    {
        if (WaterLevel.Test(pos))
        {
            return(-1f);
        }
        TerrainSplat.Enum splatMaxType = (TerrainSplat.Enum)TerrainMeta.SplatMap.GetSplatMaxType(pos, -1);
        if (splatMaxType <= 16)
        {
            switch (splatMaxType - 1)
            {
            case 0:
                return(0.5f);

            case 1:
                return(-1f);

            case 2:
                break;

            case 3:
                return(-0.3f);

            default:
                if (splatMaxType == 8)
                {
                    return(-0.7f);
                }
                if (splatMaxType == 16)
                {
                    return(0.5f);
                }
                break;
            }
        }
        else
        {
            if (splatMaxType == 32)
            {
                return(0.4f);
            }
            if (splatMaxType == 64 || splatMaxType == 128)
            {
                return(-0.6f);
            }
        }
        return(0.5f);
    }
Ejemplo n.º 7
0
 protected override void VehicleFixedUpdate()
 {
     if (!base.isClient)
     {
         if (!EngineOn())
         {
             gasPedal = 0f;
             steering = 0f;
         }
         base.VehicleFixedUpdate();
         bool flag = WaterLevel.Test(thrustPoint.position, true, this);
         if (gasPedal != 0f && flag && buoyancy.submergedFraction > 0.3f)
         {
             Vector3 force = (base.transform.forward + base.transform.right * steering * steeringScale).normalized * gasPedal * engineThrust;
             rigidBody.AddForceAtPosition(force, thrustPoint.position, ForceMode.Force);
         }
     }
 }
Ejemplo n.º 8
0
 public bool Waterlogged()
 {
     return(WaterLevel.Test(((Component)this.waterSample).get_transform().get_position()));
 }
Ejemplo n.º 9
0
 public bool Waterlogged()
 {
     return(WaterLevel.Test(this.waterSample.transform.position));
 }
Ejemplo n.º 10
0
    public float ObstacleDistanceCheck(float speed = 10f)
    {
        Vector3 position = base.transform.position;
        int     num      = Mathf.Max(2, Mathf.Min((int)speed, 10));
        float   num2     = 0.5f;
        int     num3     = Mathf.CeilToInt((float)num / num2);
        float   num4     = 0f;
        Vector3 vector   = QuaternionEx.LookRotationForcedUp(base.transform.forward, Vector3.up) * Vector3.forward;
        Vector3 vector2  = movementLOSOrigin.transform.position;

        vector2.y = base.transform.position.y;
        Vector3 up = base.transform.up;

        for (int i = 0; i < num3; i++)
        {
            float      num5    = num2;
            bool       flag    = false;
            float      num6    = 0f;
            Vector3    pos     = Vector3.zero;
            Vector3    normal  = Vector3.up;
            Vector3    vector3 = vector2;
            Vector3    origin  = vector3 + Vector3.up * (maxStepHeight + obstacleDetectionRadius);
            Vector3    vector4 = vector3 + vector * num5;
            float      num7    = maxStepDownHeight + obstacleDetectionRadius;
            RaycastHit hitInfo;
            if (UnityEngine.Physics.SphereCast(origin, obstacleDetectionRadius, vector, out hitInfo, num5, 1486954753))
            {
                num6   = hitInfo.distance;
                pos    = hitInfo.point;
                normal = hitInfo.normal;
                flag   = true;
            }
            if (!flag)
            {
                if (!TransformUtil.GetGroundInfo(vector4 + Vector3.up * 2f, out pos, out normal, 2f + num7, 278986753))
                {
                    return(num4);
                }
                num6 = Vector3.Distance(vector3, pos);
                if (WaterLevel.Test(pos + Vector3.one * maxWaterDepth, true, this))
                {
                    normal = -base.transform.forward;
                    return(num4);
                }
                flag = true;
            }
            if (flag)
            {
                float num8 = Vector3.Angle(up, normal);
                float num9 = Vector3.Angle(normal, Vector3.up);
                if (num8 > maxWallClimbSlope || num9 > maxWallClimbSlope)
                {
                    Vector3 vector5 = normal;
                    float   num10   = pos.y;
                    int     num11   = 1;
                    for (int j = 0; j < normalOffsets.Length; j++)
                    {
                        Vector3 vector6 = vector4 + normalOffsets[j].x * base.transform.right;
                        float   num12   = maxStepHeight * 2.5f;
                        Vector3 pos2;
                        Vector3 normal2;
                        if (TransformUtil.GetGroundInfo(vector6 + Vector3.up * num12 + normalOffsets[j].z * base.transform.forward, out pos2, out normal2, num7 + num12, 278986753))
                        {
                            num11++;
                            vector5 += normal2;
                            num10   += pos2.y;
                        }
                    }
                    num10 /= (float)num11;
                    vector5.Normalize();
                    float num13 = Vector3.Angle(up, vector5);
                    num9 = Vector3.Angle(vector5, Vector3.up);
                    if (num13 > maxWallClimbSlope || num9 > maxWallClimbSlope || Mathf.Abs(num10 - vector4.y) > maxStepHeight)
                    {
                        return(num4);
                    }
                }
            }
            num4   += num6;
            vector  = QuaternionEx.LookRotationForcedUp(base.transform.forward, normal) * Vector3.forward;
            vector2 = pos;
        }
        return(num4);
    }
Ejemplo n.º 11
0
    public override void Explode()
    {
        RaycastHit raycastHit;

        base.Explode();
        if (WaterLevel.Test(base.transform.position))
        {
            return;
        }
        ResourceDepositManager.ResourceDeposit orCreate = ResourceDepositManager.GetOrCreate(base.transform.position);
        if (orCreate == null)
        {
            return;
        }
        if (Time.realtimeSinceStartup - orCreate.lastSurveyTime < 10f)
        {
            return;
        }
        orCreate.lastSurveyTime = Time.realtimeSinceStartup;
        if (!TransformUtil.GetGroundInfo(base.transform.position, out raycastHit, 0.3f, 8388608, null))
        {
            return;
        }
        Vector3             vector3  = raycastHit.point;
        Vector3             vector31 = raycastHit.normal;
        List <SurveyCrater> list     = Pool.GetList <SurveyCrater>();

        Vis.Entities <SurveyCrater>(base.transform.position, 10f, list, 1, QueryTriggerInteraction.Collide);
        bool count = list.Count > 0;

        Pool.FreeList <SurveyCrater>(ref list);
        if (count)
        {
            return;
        }
        bool flag  = false;
        bool flag1 = false;

        foreach (ResourceDepositManager.ResourceDeposit.ResourceDepositEntry _resource in orCreate._resources)
        {
            if (_resource.spawnType != ResourceDepositManager.ResourceDeposit.surveySpawnType.ITEM || _resource.isLiquid || _resource.amount < 1000)
            {
                continue;
            }
            int num  = Mathf.Clamp(Mathf.CeilToInt(2.5f / _resource.workNeeded * 10f), 0, 5);
            int num1 = 1;
            flag = true;
            if (_resource.isLiquid)
            {
                flag1 = true;
            }
            for (int i = 0; i < num; i++)
            {
                Item    item = ItemManager.Create(_resource.type, num1, (ulong)0);
                Vector3 modifiedAimConeDirection = AimConeUtil.GetModifiedAimConeDirection(20f, Vector3.up, true);
                item.Drop(base.transform.position + (Vector3.up * 1f), this.GetInheritedDropVelocity() + (modifiedAimConeDirection * UnityEngine.Random.Range(5f, 10f)), UnityEngine.Random.rotation).SetAngularVelocity(UnityEngine.Random.rotation.eulerAngles * 5f);
            }
        }
        if (flag)
        {
            string     str        = (flag1 ? this.craterPrefab_Oil.resourcePath : this.craterPrefab.resourcePath);
            BaseEntity baseEntity = GameManager.server.CreateEntity(str, vector3, Quaternion.identity, true);
            if (baseEntity)
            {
                baseEntity.Spawn();
            }
        }
    }
Ejemplo n.º 12
0
 public bool Waterlogged()
 {
     return(WaterLevel.Test(waterSample.transform.position, true, this));
 }
Ejemplo n.º 13
0
    public override void Explode()
    {
        base.Explode();
        if (WaterLevel.Test(((Component)this).get_transform().get_position()))
        {
            return;
        }
        ResourceDepositManager.ResourceDeposit resourceDeposit = ResourceDepositManager.GetOrCreate(((Component)this).get_transform().get_position());
        if (resourceDeposit == null || (double)Time.get_realtimeSinceStartup() - (double)resourceDeposit.lastSurveyTime < 10.0)
        {
            return;
        }
        resourceDeposit.lastSurveyTime = Time.get_realtimeSinceStartup();
        RaycastHit hitOut;

        if (!TransformUtil.GetGroundInfo(((Component)this).get_transform().get_position(), out hitOut, 0.3f, LayerMask.op_Implicit(8388608), (Transform)null))
        {
            return;
        }
        Vector3 point = ((RaycastHit) ref hitOut).get_point();

        ((RaycastHit) ref hitOut).get_normal();
        List <SurveyCrater> list = (List <SurveyCrater>)Pool.GetList <SurveyCrater>();

        Vis.Entities <SurveyCrater>(((Component)this).get_transform().get_position(), 10f, list, 1, (QueryTriggerInteraction)2);
        int num1 = list.Count > 0 ? 1 : 0;

        // ISSUE: cast to a reference type
        Pool.FreeList <SurveyCrater>((List <M0>&) ref list);
        if (num1 != 0)
        {
            return;
        }
        bool flag1 = false;
        bool flag2 = false;

        foreach (ResourceDepositManager.ResourceDeposit.ResourceDepositEntry resource in resourceDeposit._resources)
        {
            if (resource.spawnType == ResourceDepositManager.ResourceDeposit.surveySpawnType.ITEM && !resource.isLiquid && resource.amount >= 1000)
            {
                int num2    = Mathf.Clamp(Mathf.CeilToInt((float)(2.5 / (double)resource.workNeeded * 10.0)), 0, 5);
                int iAmount = 1;
                flag1 = true;
                if (resource.isLiquid)
                {
                    flag2 = true;
                }
                for (int index = 0; index < num2; ++index)
                {
                    Item       obj = ItemManager.Create(resource.type, iAmount, 0UL);
                    Vector3    aimConeDirection = AimConeUtil.GetModifiedAimConeDirection(20f, Vector3.get_up(), true);
                    Vector3    vPos             = Vector3.op_Addition(((Component)this).get_transform().get_position(), Vector3.op_Multiply(Vector3.get_up(), 1f));
                    Vector3    vVelocity        = Vector3.op_Addition(this.GetInheritedDropVelocity(), Vector3.op_Multiply(aimConeDirection, Random.Range(5f, 10f)));
                    Quaternion rotation1        = Random.get_rotation();
                    BaseEntity baseEntity       = obj.Drop(vPos, vVelocity, rotation1);
                    Quaternion rotation2        = Random.get_rotation();
                    Vector3    velocity         = Vector3.op_Multiply(((Quaternion) ref rotation2).get_eulerAngles(), 5f);
                    baseEntity.SetAngularVelocity(velocity);
                }
            }
        }
        if (!flag1)
        {
            return;
        }
        string     strPrefab = flag2 ? this.craterPrefab_Oil.resourcePath : this.craterPrefab.resourcePath;
        BaseEntity entity    = GameManager.server.CreateEntity(strPrefab, point, Quaternion.get_identity(), true);

        if (!Object.op_Implicit((Object)entity))
        {
            return;
        }
        entity.Spawn();
    }
Ejemplo n.º 14
0
 public static bool TestFlying(BasePlayer ply, Vector3 oldPos, Vector3 newPos, bool verifyGrounded)
 {
     ply.isInAir    = false;
     ply.isOnPlayer = false;
     if (!verifyGrounded)
     {
         ply.isInAir = (ply.OnLadder() || ply.IsSwimming() ? false : !ply.IsOnGround());
     }
     else
     {
         float   flyhackExtrusion = ConVar.AntiHack.flyhack_extrusion;
         Vector3 vector3          = (oldPos + newPos) * 0.5f;
         if (!ply.OnLadder() && !WaterLevel.Test(vector3 - new Vector3(0f, flyhackExtrusion, 0f)) && (int)(EnvironmentManager.Get(vector3) & EnvironmentType.Elevator) == 0)
         {
             float   flyhackMargin = ConVar.AntiHack.flyhack_margin;
             float   radius        = ply.GetRadius();
             float   height        = ply.GetHeight(false);
             Vector3 vector31      = vector3 + new Vector3(0f, radius - flyhackExtrusion, 0f);
             Vector3 vector32      = vector3 + new Vector3(0f, height - radius, 0f);
             float   single        = radius - flyhackMargin;
             ply.isInAir = !UnityEngine.Physics.CheckCapsule(vector31, vector32, single, 1503731969, QueryTriggerInteraction.Ignore);
             if (ply.isInAir)
             {
                 int num  = UnityEngine.Physics.OverlapCapsuleNonAlloc(vector31, vector32, single, AntiHack.buffer, 131072, QueryTriggerInteraction.Ignore);
                 int num1 = 0;
                 while (num1 < num)
                 {
                     BasePlayer baseEntity = AntiHack.buffer[num1].gameObject.ToBaseEntity() as BasePlayer;
                     if (baseEntity == null || baseEntity == ply || baseEntity.isInAir || baseEntity.isOnPlayer || baseEntity.TriggeredAntiHack(1f, Single.PositiveInfinity) || baseEntity.IsSleeping())
                     {
                         num1++;
                     }
                     else
                     {
                         ply.isOnPlayer = true;
                         ply.isInAir    = false;
                         break;
                     }
                 }
                 for (int i = 0; i < (int)AntiHack.buffer.Length; i++)
                 {
                     AntiHack.buffer[i] = null;
                 }
             }
         }
     }
     if (!ply.isInAir)
     {
         ply.flyhackDistanceVertical   = 0f;
         ply.flyhackDistanceHorizontal = 0f;
     }
     else
     {
         bool    flag     = false;
         Vector3 vector33 = newPos - oldPos;
         float   single1  = Mathf.Abs(vector33.y);
         float   single2  = vector33.Magnitude2D();
         if (vector33.y >= 0f)
         {
             ply.flyhackDistanceVertical += vector33.y;
             flag = true;
         }
         if (single1 < single2)
         {
             ply.flyhackDistanceHorizontal += single2;
             flag = true;
         }
         if (flag)
         {
             float jumpHeight = ply.GetJumpHeight() + ConVar.AntiHack.flyhack_forgiveness_vertical;
             if (ply.flyhackDistanceVertical > jumpHeight)
             {
                 return(true);
             }
             float flyhackForgivenessHorizontal = 5f + ConVar.AntiHack.flyhack_forgiveness_horizontal;
             if (ply.flyhackDistanceHorizontal > flyhackForgivenessHorizontal)
             {
                 return(true);
             }
         }
     }
     return(false);
 }
Ejemplo n.º 15
0
 public bool WaterLogged()
 {
     return(WaterLevel.Test(engineHeight.position, true, this));
 }
Ejemplo n.º 16
0
 public static bool TestFlying(BasePlayer ply, Vector3 oldPos, Vector3 newPos, bool verifyGrounded)
 {
     ply.isInAir    = false;
     ply.isOnPlayer = false;
     if (verifyGrounded)
     {
         float   flyhack_extrusion = ConVar.AntiHack.flyhack_extrusion;
         Vector3 vector            = (oldPos + newPos) * 0.5f;
         if (!ply.OnLadder() && !WaterLevel.Test(vector - new Vector3(0f, flyhack_extrusion, 0f), true, ply) && (EnvironmentManager.Get(vector) & EnvironmentType.Elevator) == 0)
         {
             float   flyhack_margin = ConVar.AntiHack.flyhack_margin;
             float   radius         = ply.GetRadius();
             float   height         = ply.GetHeight(false);
             Vector3 vector2        = vector + new Vector3(0f, radius - flyhack_extrusion, 0f);
             Vector3 vector3        = vector + new Vector3(0f, height - radius, 0f);
             float   radius2        = radius - flyhack_margin;
             ply.isInAir = !UnityEngine.Physics.CheckCapsule(vector2, vector3, radius2, 1503731969, QueryTriggerInteraction.Ignore);
             if (ply.isInAir)
             {
                 int num = UnityEngine.Physics.OverlapCapsuleNonAlloc(vector2, vector3, radius2, buffer, 131072, QueryTriggerInteraction.Ignore);
                 for (int i = 0; i < num; i++)
                 {
                     BasePlayer basePlayer = GameObjectEx.ToBaseEntity(buffer[i].gameObject) as BasePlayer;
                     if (!(basePlayer == null) && !(basePlayer == ply) && !basePlayer.isInAir && !basePlayer.isOnPlayer && !basePlayer.TriggeredAntiHack() && !basePlayer.IsSleeping())
                     {
                         ply.isOnPlayer = true;
                         ply.isInAir    = false;
                         break;
                     }
                 }
                 for (int j = 0; j < buffer.Length; j++)
                 {
                     buffer[j] = null;
                 }
             }
         }
     }
     else
     {
         ply.isInAir = !ply.OnLadder() && !ply.IsSwimming() && !ply.IsOnGround();
     }
     if (ply.isInAir)
     {
         bool    flag = false;
         Vector3 v    = newPos - oldPos;
         float   num2 = Mathf.Abs(v.y);
         float   num3 = v.Magnitude2D();
         if (v.y >= 0f)
         {
             ply.flyhackDistanceVertical += v.y;
             flag = true;
         }
         if (num2 < num3)
         {
             ply.flyhackDistanceHorizontal += num3;
             flag = true;
         }
         if (flag)
         {
             float num4 = Mathf.Max((ply.flyhackPauseTime > 0f) ? ConVar.AntiHack.flyhack_forgiveness_vertical_inertia : ConVar.AntiHack.flyhack_forgiveness_vertical, 0f);
             float num5 = ply.GetJumpHeight() + num4;
             if (ply.flyhackDistanceVertical > num5)
             {
                 return(true);
             }
             float num6 = Mathf.Max((ply.flyhackPauseTime > 0f) ? ConVar.AntiHack.flyhack_forgiveness_horizontal_inertia : ConVar.AntiHack.flyhack_forgiveness_horizontal, 0f);
             float num7 = 5f + num6;
             if (ply.flyhackDistanceHorizontal > num7)
             {
                 return(true);
             }
         }
     }
     else
     {
         ply.flyhackDistanceVertical   = 0f;
         ply.flyhackDistanceHorizontal = 0f;
     }
     return(false);
 }
Ejemplo n.º 17
0
    public static float WorkoutGroundConditions(Vector3 pos)
    {
        if (WaterLevel.Test(pos))
        {
            return(-1f);
        }
        TerrainSplat.Enum splatMaxType = (TerrainSplat.Enum)TerrainMeta.SplatMap.GetSplatMaxType(pos, -1);
        if (splatMaxType > TerrainSplat.Enum.Grass)
        {
            if (splatMaxType == TerrainSplat.Enum.Forest)
            {
                return(0.4f);
            }
            if (splatMaxType == TerrainSplat.Enum.Stones)
            {
                return(-0.6f);
            }
            if (splatMaxType == TerrainSplat.Enum.Gravel)
            {
                return(-0.6f);
            }
        }
        else
        {
            switch (splatMaxType)
            {
            case TerrainSplat.Enum.Dirt:
            {
                return(0.5f);
            }

            case TerrainSplat.Enum.Snow:
            {
                return(-1f);
            }

            case TerrainSplat.Enum.Dirt | TerrainSplat.Enum.Snow:
            {
                break;
            }

            case TerrainSplat.Enum.Sand:
            {
                return(-0.3f);
            }

            default:
            {
                if (splatMaxType == TerrainSplat.Enum.Rock)
                {
                    return(-0.7f);
                }
                if (splatMaxType == TerrainSplat.Enum.Grass)
                {
                    return(0.5f);
                }
                break;
            }
            }
        }
        return(0.5f);
    }
Ejemplo n.º 18
0
 public bool WaterLogged()
 {
     return(WaterLevel.Test(this.engineHeight.position));
 }
Ejemplo n.º 19
0
 public static bool TestFlying(
     BasePlayer ply,
     Vector3 oldPos,
     Vector3 newPos,
     bool verifyGrounded)
 {
     ply.isInAir    = false;
     ply.isOnPlayer = false;
     if (verifyGrounded)
     {
         float   flyhackExtrusion = ConVar.AntiHack.flyhack_extrusion;
         Vector3 pos = Vector3.op_Multiply(Vector3.op_Addition(oldPos, newPos), 0.5f);
         if (!ply.OnLadder() && !WaterLevel.Test(Vector3.op_Subtraction(pos, new Vector3(0.0f, flyhackExtrusion, 0.0f))) && (EnvironmentManager.Get(pos) & EnvironmentType.Elevator) == (EnvironmentType)0)
         {
             float   flyhackMargin = ConVar.AntiHack.flyhack_margin;
             float   radius        = ply.GetRadius();
             float   height        = ply.GetHeight(false);
             Vector3 vector3_1     = Vector3.op_Addition(pos, new Vector3(0.0f, radius - flyhackExtrusion, 0.0f));
             Vector3 vector3_2     = Vector3.op_Addition(pos, new Vector3(0.0f, height - radius, 0.0f));
             float   num1          = radius - flyhackMargin;
             ply.isInAir = !Physics.CheckCapsule(vector3_1, vector3_2, num1, 1503731969, (QueryTriggerInteraction)1);
             if (ply.isInAir)
             {
                 int num2 = Physics.OverlapCapsuleNonAlloc(vector3_1, vector3_2, num1, AntiHack.buffer, 131072, (QueryTriggerInteraction)1);
                 for (int index = 0; index < num2; ++index)
                 {
                     BasePlayer baseEntity = ((Component)AntiHack.buffer[index]).get_gameObject().ToBaseEntity() as BasePlayer;
                     if (!Object.op_Equality((Object)baseEntity, (Object)null) && !Object.op_Equality((Object)baseEntity, (Object)ply) && (!baseEntity.isInAir && !baseEntity.isOnPlayer) && (!baseEntity.TriggeredAntiHack(1f, float.PositiveInfinity) && !baseEntity.IsSleeping()))
                     {
                         ply.isOnPlayer = true;
                         ply.isInAir    = false;
                         break;
                     }
                 }
                 for (int index = 0; index < AntiHack.buffer.Length; ++index)
                 {
                     AntiHack.buffer[index] = (Collider)null;
                 }
             }
         }
     }
     else
     {
         ply.isInAir = !ply.OnLadder() && !ply.IsSwimming() && !ply.IsOnGround();
     }
     if (ply.isInAir)
     {
         bool    flag    = false;
         Vector3 vector3 = Vector3.op_Subtraction(newPos, oldPos);
         double  num1    = (double)Mathf.Abs((float)vector3.y);
         float   num2    = Vector3Ex.Magnitude2D(vector3);
         if (vector3.y >= 0.0)
         {
             ply.flyhackDistanceVertical += (float)vector3.y;
             flag = true;
         }
         double num3 = (double)num2;
         if (num1 < num3)
         {
             ply.flyhackDistanceHorizontal += num2;
             flag = true;
         }
         if (flag)
         {
             float num4 = ply.GetJumpHeight() + ConVar.AntiHack.flyhack_forgiveness_vertical;
             if ((double)ply.flyhackDistanceVertical > (double)num4)
             {
                 return(true);
             }
             float num5 = 5f + ConVar.AntiHack.flyhack_forgiveness_horizontal;
             if ((double)ply.flyhackDistanceHorizontal > (double)num5)
             {
                 return(true);
             }
         }
     }
     else
     {
         ply.flyhackDistanceVertical   = 0.0f;
         ply.flyhackDistanceHorizontal = 0.0f;
     }
     return(false);
 }
Ejemplo n.º 20
0
        public static void ImpactEffect(HitInfo info)
        {
            if (!info.DoHitEffects)
            {
                return;
            }
            string materialName = StringPool.Get(info.HitMaterial);
            string strName      = EffectDictionary.GetParticle(info.damageTypes.GetMajorityDamageType(), materialName);
            string decal        = EffectDictionary.GetDecal(info.damageTypes.GetMajorityDamageType(), materialName);

            if (TerrainMeta.WaterMap != null && info.HitMaterial != Projectile.WaterMaterialID() && info.HitMaterial != Projectile.FleshMaterialID() && info.HitPositionWorld.y < TerrainMeta.WaterMap.GetHeight(info.HitPositionWorld) && WaterLevel.Test(info.HitPositionWorld, false))
            {
                return;
            }
            if (BaseEntityEx.IsValid(info.HitEntity))
            {
                GameObjectRef impactEffect = info.HitEntity.GetImpactEffect(info);
                if (impactEffect.isValid)
                {
                    strName = impactEffect.resourcePath;
                }
                Run(strName, info.HitEntity, info.HitBone, info.HitPositionLocal, info.HitNormalLocal);
                if (info.DoDecals)
                {
                    Run(decal, info.HitEntity, info.HitBone, info.HitPositionLocal, info.HitNormalLocal);
                }
            }
            else
            {
                Type overrideType = Type.Generic;
                Run(strName, info.HitPositionWorld, info.HitNormalWorld, default(Vector3), overrideType);
                Run(decal, info.HitPositionWorld, info.HitNormalWorld, default(Vector3), overrideType);
            }
            if ((bool)info.WeaponPrefab)
            {
                BaseMelee baseMelee = info.WeaponPrefab as BaseMelee;
                if (baseMelee != null)
                {
                    string strikeEffectPath = baseMelee.GetStrikeEffectPath(materialName);
                    if (BaseEntityEx.IsValid(info.HitEntity))
                    {
                        Run(strikeEffectPath, info.HitEntity, info.HitBone, info.HitPositionLocal, info.HitNormalLocal);
                    }
                    else
                    {
                        Run(strikeEffectPath, info.HitPositionWorld, info.HitNormalWorld);
                    }
                }
            }
            if (info.damageTypes.Has(DamageType.Explosion))
            {
                DoAdditiveImpactEffect(info, "assets/bundled/prefabs/fx/impacts/additive/explosion.prefab");
            }
            if (info.damageTypes.Has(DamageType.Heat))
            {
                DoAdditiveImpactEffect(info, "assets/bundled/prefabs/fx/impacts/additive/fire.prefab");
            }
        }