protected override void CreateStructure(bool isRepair = false)
        {
            if (isRepair)
            {
                base.Clear();
                base.StartCoroutine(base.DelayedAwake(true));
            }
            Vector3 size = this._logRenderer.bounds.size;

            this._logLength = size.y;
            this._logWidth  = size.z;
            int layer = LayerMask.NameToLayer("Prop");

            this._wallRoot        = this.SpawnEdge();
            this._wallRoot.parent = base.transform;
            if (this._wasBuilt)
            {
                GameObject gameObject = this._wallRoot.gameObject;
                gameObject.tag   = "structure";
                gameObject.layer = layer;
                BoxCollider boxCollider = this._wallRoot.gameObject.AddComponent <BoxCollider>();
                Vector3     vector      = base.transform.InverseTransformVector(this._p2 - this._p1);
                boxCollider.size = new Vector3(this._logWidth, this._logLength, Mathf.Abs(vector.z));
                Vector3 center = boxCollider.size / 2f;
                center.x           = 0f;
                center.y          -= 1f;
                center.z          -= this._logWidth / 2f;
                boxCollider.center = center;
                this._wallRoot.gameObject.AddComponent <BuildingHealthHitRelay>();
                getStructureStrength getStructureStrength = this._wallRoot.gameObject.AddComponent <getStructureStrength>();
                getStructureStrength._type     = getStructureStrength.structureType.wall;
                getStructureStrength._strength = getStructureStrength.strength.veryStrong;
                this._wallRoot.gameObject.AddComponent <gridObjectBlocker>();
            }
        }
    private IEnumerator doDelayedNavCut(int delay)
    {
        if (BoltNetwork.isClient)
        {
            yield break;
        }
        if (this.blockNav)
        {
            yield break;
        }
        if (AstarPath.active && !this.delayedCoolDown)
        {
            this.go = base.gameObject;
            if (this.oneTimeOnly)
            {
                this.blockNav = true;
            }
            Collider col = this.go.GetComponent <Collider>();
            if (!col)
            {
                yield break;
            }
            Bounds b = col.bounds;
            this.diff = b.center.y - b.extents.y;
            float height = Terrain.activeTerrain.SampleHeight(b.center) + Terrain.activeTerrain.transform.position.y;
            this.diff -= height;
            if (this.diff > 7f)
            {
                yield break;
            }
            getStructureStrength structure = this.go.GetComponent <getStructureStrength>();
            bool dolayerHack = false;
            if (this.go.layer == 21 && structure)
            {
                if (structure._type == getStructureStrength.structureType.floor)
                {
                    this.go.layer = 26;
                    dolayerHack   = true;
                }
                else if (structure._type == getStructureStrength.structureType.wall)
                {
                    this.go.layer = 20;
                    dolayerHack   = true;
                }
            }
            yield return(new WaitForSeconds((float)delay));

            GraphUpdateObject guo = new GraphUpdateObject(b);
            AstarPath.active.UpdateGraphs(guo);
            this.delayedCoolDown = true;
            base.Invoke("resetDelayedCoolDown", 1f);
            if (dolayerHack)
            {
                base.Invoke("resetLayer", 0.2f);
            }
        }
        yield return(null);

        yield break;
    }
Exemple #3
0
    private void Start()
    {
        BoxCollider    component  = base.transform.GetComponent <BoxCollider>();
        SphereCollider component2 = base.transform.GetComponent <SphereCollider>();

        if (!component && !component2)
        {
            return;
        }
        if (!base.transform.GetComponent <NavmeshCut>())
        {
            base.gameObject.AddComponent <NavmeshCut>();
        }
        NavmeshCut component3 = base.transform.GetComponent <NavmeshCut>();

        if (!Scene.SceneTracker.worldNavCuts.Contains(component3))
        {
            Scene.SceneTracker.worldNavCuts.Add(component3);
        }
        if (component)
        {
            if (base.transform.GetComponent <WaterClean>())
            {
                component3.useRotation   = true;
                component3.rectangleSize = new Vector2(component.size.x, component.size.z);
                component3.height        = component.size.y;
                component3.center        = new Vector3(component3.center.x, -component3.height / 2f, component3.center.z);
            }
            else
            {
                component3.useRotation   = true;
                component3.rectangleSize = new Vector2(component.size.x * 1.5f, component.size.z * 1.5f);
                component3.height        = component.size.y;
                component3.center        = component.center;
                getStructureStrength component4 = base.transform.GetComponent <getStructureStrength>();
                if (component4 && component4._type == getStructureStrength.structureType.wall)
                {
                    component3.height += 2f;
                    component3.center  = new Vector3(component3.center.x, component3.center.y - 2f, component3.center.z);
                }
            }
        }
        else if (component2)
        {
            component3.useRotation  = false;
            component3.type         = NavmeshCut.MeshType.Circle;
            component3.circleRadius = component2.radius * 1.75f;
            component3.height       = 3f;
            component3.center       = component2.center;
        }
    }
 private void doNavCut()
 {
     if (this.blockNav)
     {
         return;
     }
     if (AstarPath.active && !this.coolDown)
     {
         this.go = base.gameObject;
         if (this.oneTimeOnly)
         {
             this.blockNav = true;
         }
         Collider component = this.go.GetComponent <Collider>();
         if (!component)
         {
             return;
         }
         Bounds bounds = component.bounds;
         this.diff = bounds.center.y - bounds.extents.y;
         float num = Terrain.activeTerrain.SampleHeight(bounds.center) + Terrain.activeTerrain.transform.position.y;
         this.diff -= num;
         if (this.diff > 7f)
         {
             return;
         }
         getStructureStrength component2 = this.go.GetComponent <getStructureStrength>();
         bool flag = false;
         if (this.go.layer == 21 && component2)
         {
             if (component2._type == getStructureStrength.structureType.floor)
             {
                 this.go.layer = 26;
                 flag          = true;
             }
             else if (component2._type == getStructureStrength.structureType.wall)
             {
                 this.go.layer = 20;
                 flag          = true;
             }
         }
         GraphUpdateObject ob = new GraphUpdateObject(bounds);
         AstarPath.active.UpdateGraphs(ob);
         this.coolDown = true;
         base.Invoke("resetCoolDown", 1f);
         if (flag)
         {
             base.Invoke("resetLayer", 0.2f);
         }
     }
 }
    private void attackStructureBetweenPlayer()
    {
        Vector3 direction = Vector3.zero;

        if (this.ai.allPlayers.Count > 0)
        {
            if (this.ai.allPlayers[0] != null)
            {
                direction = (this.ai.allPlayers[0].transform.position - this.controller.bounds.center).normalized;
            }
            RaycastHit raycastHit;
            if (Physics.Raycast(this.controller.bounds.center, direction, out raycastHit, 40f, this.checkWallMask))
            {
                GameObject gameObject = raycastHit.collider.gameObject;
                if (gameObject.CompareTag("structure") || gameObject.CompareTag("SLTier1") || gameObject.CompareTag("SLTier2") || gameObject.CompareTag("SLTier3"))
                {
                    getStructureStrength component = gameObject.GetComponent <getStructureStrength>();
                    if (component == null)
                    {
                        return;
                    }
                    Vector3 normalized = (this.thisTr.position - raycastHit.collider.bounds.center).normalized;
                    Vector3 vector     = raycastHit.collider.bounds.center + normalized * 7.5f;
                    vector.y = Terrain.activeTerrain.SampleHeight(vector) + Terrain.activeTerrain.transform.position.y;
                    GraphNode node = AstarPath.active.GetNearest(vector).node;
                    if (node.Walkable)
                    {
                        vector = new Vector3((float)(node.position[0] / 1000), (float)(node.position[1] / 1000), (float)(node.position[2] / 1000));
                        this.setup.search.updateCurrentWaypoint(vector);
                        this.setup.pmCombat.FsmVariables.GetFsmGameObject("structureGo").Value = gameObject;
                        if (this.setup.pmSearch)
                        {
                            this.setup.pmSearch.FsmVariables.GetFsmGameObject("structureGo").Value = gameObject;
                        }
                        this.setup.pmCombat.SendEvent("goToAttackStructure");
                        if (this.setup.pmSearch)
                        {
                            this.setup.pmSearch.SendEvent("goToAttackStructure");
                        }
                        return;
                    }
                }
            }
            return;
        }
    }
    private void doRemove()
    {
        if (BoltNetwork.isClient)
        {
            return;
        }
        if (this.blockNav)
        {
            return;
        }
        getStructureStrength component = base.transform.GetComponent <getStructureStrength>();

        if (component && (component._type == getStructureStrength.structureType.floor || this.isStructure))
        {
            return;
        }
        if (AstarPath.active && !this.coolDown)
        {
            Terrain activeTerrain = Terrain.activeTerrain;
            if (activeTerrain)
            {
                if (!this.go)
                {
                    return;
                }
                GameObject gameObject = UnityEngine.Object.Instantiate <GameObject>(this.go, this.go.transform.position, this.go.transform.rotation);
                Collider   component2 = gameObject.GetComponent <Collider>();
                if (!component2)
                {
                    UnityEngine.Object.Destroy(gameObject);
                    return;
                }
                Bounds bounds = component2.bounds;
                UnityEngine.Object.Destroy(gameObject);
                GraphUpdateObject ob = new GraphUpdateObject(bounds);
                AstarPath.active.UpdateGraphs(ob, 0f);
                this.coolDown = true;
                base.Invoke("resetCoolDown", 1f);
            }
        }
    }
Exemple #7
0
 private void OnTriggerEnter(Collider other)
 {
     if (other.gameObject.CompareTag("trapTrigger"))
     {
         other.gameObject.SendMessage("CutRope", SendMessageOptions.DontRequireReceiver);
     }
     if (!this.netPrefab && LocalPlayer.Transform && LocalPlayer.Animator.GetBool("deathBool"))
     {
         return;
     }
     if (other.gameObject.CompareTag("playerHitDetect") && this.mainTrigger)
     {
         if (!Scene.SceneTracker.hasAttackedPlayer)
         {
             Scene.SceneTracker.hasAttackedPlayer = true;
             Scene.SceneTracker.Invoke("resetHasAttackedPlayer", (float)UnityEngine.Random.Range(60, 180));
         }
         Animator componentInParent = other.gameObject.GetComponentInParent <Animator>();
         Vector3  position          = this.rootTr.position;
         position.y += 3.3f;
         Vector3      direction = other.transform.position - position;
         RaycastHit[] array     = Physics.RaycastAll(position, direction, direction.magnitude, this.enemyHitMask);
         for (int i = 0; i < array.Length; i++)
         {
             if (array[i].transform.gameObject.layer == 11 || array[i].transform.gameObject.layer == 13 || array[i].transform.gameObject.layer == 17 || array[i].transform.gameObject.layer == 20 || array[i].transform.gameObject.layer == 21 || array[i].transform.gameObject.layer == 25)
             {
                 return;
             }
         }
         if (!this.creepy_male && !this.creepy && !this.creepy_baby && !this.creepy_fat && this.events && componentInParent && this.events.parryBool && componentInParent.GetNextAnimatorStateInfo(1).tagHash == this.blockHash)
         {
             int parryDir = this.events.parryDir;
             this.animator.SetIntegerReflected("parryDirInt", parryDir);
             this.animator.SetTriggerReflected("parryTrigger");
             this.events.StartCoroutine("disableAllWeapons");
             playerHitReactions componentInParent2 = other.gameObject.GetComponentInParent <playerHitReactions>();
             if (componentInParent2 != null)
             {
                 componentInParent2.enableParryState();
             }
             FMODCommon.PlayOneshotNetworked(this.parryEvent, base.transform, FMODCommon.NetworkRole.Server);
             return;
         }
         other.transform.root.SendMessage("getHitDirection", this.rootTr.position, SendMessageOptions.DontRequireReceiver);
         int num = 0;
         if (this.maleSkinny || this.femaleSkinny)
         {
             if (this.pale)
             {
                 num = 10;
             }
             else
             {
                 num = 13;
             }
         }
         else if (this.male && this.pale)
         {
             num = 22;
         }
         else if (this.male && !this.firemanMain)
         {
             num = 20;
         }
         else if (this.female)
         {
             num = 17;
         }
         else if (this.creepy)
         {
             if (this.pale)
             {
                 num = 35;
             }
             else
             {
                 num = 28;
             }
         }
         else if (this.creepy_male)
         {
             if (this.pale)
             {
                 num = 40;
             }
             else
             {
                 num = 30;
             }
         }
         else if (this.creepy_baby)
         {
             num = 26;
         }
         else if (this.firemanMain)
         {
             num = 8;
             if (!this.events.noFireAttack)
             {
                 if (BoltNetwork.isRunning && this.netPrefab)
                 {
                     other.gameObject.SendMessageUpwards("Burn", SendMessageOptions.DontRequireReceiver);
                 }
                 else
                 {
                     other.gameObject.SendMessageUpwards("Burn", SendMessageOptions.DontRequireReceiver);
                 }
             }
         }
         PlayerStats component = other.transform.root.GetComponent <PlayerStats>();
         if (this.male || this.female || this.creepy_male || this.creepy_fat || this.creepy || this.creepy_baby)
         {
             netId component2 = other.transform.GetComponent <netId>();
             if (BoltNetwork.isServer && component2)
             {
                 other.transform.root.SendMessage("StartPrediction", SendMessageOptions.DontRequireReceiver);
                 return;
             }
             if (BoltNetwork.isClient && this.netPrefab && !component2)
             {
                 other.transform.root.SendMessage("setCurrentAttacker", this, SendMessageOptions.DontRequireReceiver);
                 other.transform.root.SendMessage("hitFromEnemy", num, SendMessageOptions.DontRequireReceiver);
                 other.transform.root.SendMessage("StartPrediction", SendMessageOptions.DontRequireReceiver);
             }
             else if (BoltNetwork.isServer)
             {
                 if (!component2)
                 {
                     other.transform.root.SendMessage("setCurrentAttacker", this, SendMessageOptions.DontRequireReceiver);
                     other.transform.root.SendMessage("hitFromEnemy", num, SendMessageOptions.DontRequireReceiver);
                 }
             }
             else if (!BoltNetwork.isRunning && component)
             {
                 component.setCurrentAttacker(this);
                 component.hitFromEnemy(num);
             }
         }
         else if (!this.netPrefab && component)
         {
             component.setCurrentAttacker(this);
             component.hitFromEnemy(num);
         }
     }
     if (other.gameObject.CompareTag("enemyCollide") && this.mainTrigger && this.bodyCollider)
     {
         this.setupAttackerType();
         if (other.gameObject != this.bodyCollider)
         {
             other.transform.SendMessageUpwards("getAttackDirection", UnityEngine.Random.Range(0, 2), SendMessageOptions.DontRequireReceiver);
             other.transform.SendMessageUpwards("getCombo", UnityEngine.Random.Range(1, 4), SendMessageOptions.DontRequireReceiver);
             other.transform.SendMessage("getAttackerType", this.attackerType, SendMessageOptions.DontRequireReceiver);
             other.transform.SendMessage("getAttacker", this.rootTr.gameObject, SendMessageOptions.DontRequireReceiver);
             other.transform.SendMessageUpwards("Hit", 6, SendMessageOptions.DontRequireReceiver);
             FMODCommon.PlayOneshotNetworked(this.weaponHitEvent, base.transform, FMODCommon.NetworkRole.Server);
         }
     }
     if (other.gameObject.CompareTag("BreakableWood") || (other.gameObject.CompareTag("BreakableRock") && this.mainTrigger))
     {
         other.transform.SendMessage("Hit", 50, SendMessageOptions.DontRequireReceiver);
         other.SendMessage("LocalizedHit", new LocalizedHitData(base.transform.position, 50f), SendMessageOptions.DontRequireReceiver);
         FMODCommon.PlayOneshotNetworked(this.weaponHitEvent, base.transform, FMODCommon.NetworkRole.Server);
     }
     if (other.gameObject.CompareTag("SmallTree") && !this.mainTrigger)
     {
         other.SendMessage("Hit", 2, SendMessageOptions.DontRequireReceiver);
     }
     if (other.gameObject.CompareTag("Fire") && this.mainTrigger && this.firemanMain && !this.events.noFireAttack)
     {
         other.SendMessage("Burn", SendMessageOptions.DontRequireReceiver);
     }
     if (other.gameObject.CompareTag("Tree") && this.mainTrigger && this.creepy_male)
     {
         other.SendMessage("Explosion", 5f, SendMessageOptions.DontRequireReceiver);
         FMODCommon.PlayOneshotNetworked(this.weaponHitEvent, base.transform, FMODCommon.NetworkRole.Server);
     }
     if ((other.gameObject.CompareTag("structure") || other.gameObject.CompareTag("SLTier1") || other.gameObject.CompareTag("SLTier2") || other.gameObject.CompareTag("SLTier3") || other.gameObject.CompareTag("jumpObject")) && this.mainTrigger)
     {
         getStructureStrength component3 = other.gameObject.GetComponent <getStructureStrength>();
         if (component3 == null)
         {
             return;
         }
         int num2;
         if (this.creepy_male || this.creepy)
         {
             if (this.creepy)
             {
                 if (component3._strength == getStructureStrength.strength.veryStrong)
                 {
                     num2 = 15;
                 }
                 else
                 {
                     num2 = 30;
                 }
             }
             else
             {
                 num2 = 40;
             }
         }
         else if (this.maleSkinny || this.femaleSkinny)
         {
             if (component3._strength == getStructureStrength.strength.weak)
             {
                 num2 = 7;
             }
             else
             {
                 num2 = 0;
             }
         }
         else if (this.pale)
         {
             if (component3._strength == getStructureStrength.strength.veryStrong)
             {
                 num2 = 0;
             }
             else
             {
                 num2 = 6;
             }
         }
         else if (component3._strength == getStructureStrength.strength.strong || component3._strength == getStructureStrength.strength.veryStrong)
         {
             num2 = 0;
         }
         else
         {
             num2 = 7;
         }
         other.SendMessage("Hit", num2, SendMessageOptions.DontRequireReceiver);
         other.SendMessage("LocalizedHit", new LocalizedHitData(base.transform.position, (float)num2), SendMessageOptions.DontRequireReceiver);
         FMODCommon.PlayOneshotNetworked(this.weaponHitEvent, base.transform, FMODCommon.NetworkRole.Server);
     }
 }
Exemple #8
0
        private IEnumerator OnPlaced()
        {
            if (!this._wasPlaced && !this._wasBuilt && !BoltNetwork.isClient)
            {
                base.transform.position = this._multiPointsPositions.First <Vector3>();
                base.transform.LookAt(this._multiPointsPositions.Last <Vector3>());
                this._multiPointsPositions = (from p in this._multiPointsPositions
                                              select this.$this.transform.InverseTransformPoint(p)).ToList <Vector3>();
            }
            this.WasPlaced = true;
            base.enabled   = false;
            this._craftStructure.GetComponent <Collider>().enabled = false;
            Scene.HudGui.RoofConstructionIcons.Shutdown();
            Scene.HudGui.RotateIcon.SetActive(false);
            yield return(null);

            if (this._craftStructure)
            {
                UnityEngine.Object.Destroy(base.GetComponent <Rigidbody>());
                UnityEngine.Object.Destroy(base.GetComponent <Collider>());
                Transform newStairs = this.SpawnStructure();
                if (this._stairsRoot)
                {
                    UnityEngine.Object.Destroy(this._stairsRoot.gameObject);
                }
                this._stairsRoot = newStairs;
                Transform ghostRoot = this._stairsRoot;
                Transform transform = ghostRoot;
                transform.name += "Ghost";
                this._logPool   = null;
                this._newPool   = null;
                Craft_Structure.BuildIngredients ri = this._craftStructure._requiredIngredients.FirstOrDefault((Craft_Structure.BuildIngredients i) => i._itemID == this.$this._logItemId);
                int amount = 0;
                List <GameObject> stairsLogs = new List <GameObject>();
                List <GameObject> stiltsLogs = new List <GameObject>();
                Material          stiltMat   = Prefabs.Instance.LogStiltStairsGhostBuiltPrefab.GetComponentInChildren <Renderer>().sharedMaterial;
                IEnumerator       enumerator = this._stairsRoot.GetEnumerator();
                try
                {
                    while (enumerator.MoveNext())
                    {
                        object      obj         = enumerator.Current;
                        Transform   transform2  = (Transform)obj;
                        IEnumerator enumerator2 = transform2.GetEnumerator();
                        try
                        {
                            while (enumerator2.MoveNext())
                            {
                                object    obj2       = enumerator2.Current;
                                Transform transform3 = (Transform)obj2;
                                amount++;
                                IEnumerator enumerator3 = transform3.GetEnumerator();
                                try
                                {
                                    while (enumerator3.MoveNext())
                                    {
                                        object    obj3                = enumerator3.Current;
                                        Transform transform4          = (Transform)obj3;
                                        Renderer  componentInChildren = transform4.GetComponentInChildren <Renderer>();
                                        if (componentInChildren.sharedMaterial == stiltMat)
                                        {
                                            stiltsLogs.Add(componentInChildren.gameObject);
                                        }
                                        else
                                        {
                                            stairsLogs.Add(componentInChildren.gameObject);
                                        }
                                    }
                                }
                                finally
                                {
                                    IDisposable disposable;
                                    if ((disposable = (enumerator3 as IDisposable)) != null)
                                    {
                                        disposable.Dispose();
                                    }
                                }
                            }
                        }
                        finally
                        {
                            IDisposable disposable2;
                            if ((disposable2 = (enumerator2 as IDisposable)) != null)
                            {
                                disposable2.Dispose();
                            }
                        }
                    }
                }
                finally
                {
                    IDisposable disposable3;
                    if ((disposable3 = (enumerator as IDisposable)) != null)
                    {
                        disposable3.Dispose();
                    }
                }
                ri.AddRuntimeObjects(stiltsLogs.AsEnumerable <GameObject>().Reverse <GameObject>(), Prefabs.Instance.LogStiltStairsGhostBuiltPrefab.GetComponentInChildren <Renderer>().sharedMaterial);
                ri.AddRuntimeObjects(stairsLogs.AsEnumerable <GameObject>().Reverse <GameObject>(), Prefabs.Instance.LogStairsBuiltPrefab.GetComponentInChildren <Renderer>().sharedMaterial);
                ri._amount += amount;
                ghostRoot.transform.parent        = null;
                this._stairsRoot.transform.parent = base.transform;
                ghostRoot.transform.parent        = base.transform;
                BoxCollider bc;
                if (this._craftStructure.GetComponent <Collider>() is BoxCollider)
                {
                    bc = (BoxCollider)this._craftStructure.GetComponent <Collider>();
                }
                else
                {
                    bc           = this._craftStructure.gameObject.AddComponent <BoxCollider>();
                    bc.isTrigger = true;
                }
                Bounds b = default(Bounds);
                foreach (Vector3 position in this._multiPointsPositions)
                {
                    b.Encapsulate(this._craftStructure.transform.InverseTransformPoint(base.transform.TransformPoint(position)));
                }
                b.Encapsulate(this._craftStructure.transform.InverseTransformPoint(this.GetPointFloorPosition(this._craftStructure.transform.position)));
                Vector3 localSize = b.size;
                localSize.x = Mathf.Max(localSize.x, 6f);
                localSize.y = Mathf.Max(localSize.y, 3f);
                localSize.z = Mathf.Max(localSize.z, 3f);
                bc.size     = localSize;
                bc.center   = b.center;
                bc.enabled  = true;
                yield return(null);

                this._craftStructure.manualLoading = true;
                while (LevelSerializer.IsDeserializing && !this._craftStructure.WasLoaded)
                {
                    yield return(null);
                }
                this._craftStructure.Initialize();
                this._craftStructure.gameObject.SetActive(true);
                yield return(null);

                bc.enabled = false;
                bc.enabled = true;
                if (!this._craftStructure.gameObject.GetComponent <getStructureStrength>())
                {
                    getStructureStrength getStructureStrength = this._craftStructure.gameObject.AddComponent <getStructureStrength>();
                    getStructureStrength._strength = getStructureStrength.strength.normal;
                    getStructureStrength._type     = getStructureStrength.structureType.floor;
                }
            }
            yield break;
        }
Exemple #9
0
        private Transform SpawnStairs()
        {
            Transform transform = new GameObject("StairsRoot").transform;

            transform.position = this._multiPointsPositions.First <Vector3>();
            Stack <Transform> stack = new Stack <Transform>();
            int  num;
            int  num2;
            bool flag;

            if (this._multiPointsPositions[0].y < this._multiPointsPositions[1].y)
            {
                num  = this._multiPointsPositions.Count - 2;
                num2 = -1;
                flag = false;
            }
            else
            {
                num  = 1;
                num2 = 1;
                flag = true;
            }
            while (num >= 0 && num < this._multiPointsPositions.Count)
            {
                Vector3    vector   = this._multiPointsPositions[num - num2];
                Vector3    a        = this._multiPointsPositions[num];
                Vector3    vector2  = vector;
                Vector3    forward  = a - vector;
                Vector3    rhs      = new Vector3(forward.x, 0f, forward.z);
                Vector3    vector3  = Vector3.Cross(Vector3.up, rhs);
                int        num3     = Mathf.CeilToInt(rhs.magnitude / this._logWidth);
                Vector3    vector4  = rhs.normalized * this._logWidth;
                Quaternion rotation = Quaternion.LookRotation(vector3);
                bool       flag2    = flag && rhs.magnitude < this._logLength;
                flag = false;
                Transform transform2 = new GameObject("StairEdge" + num).transform;
                transform2.parent = transform;
                float d = (!flag2) ? 2.5f : 0.5f;
                forward             = a - (vector2 + vector4 * d);
                transform2.rotation = Quaternion.LookRotation(forward);
                transform2.position = vector2 + vector4 * d;
                Vector3   pointFloorPosition = this.GetPointFloorPosition(vector2 + Vector3.down);
                Transform transform3         = UnityEngine.Object.Instantiate <Transform>(this._stiltPrefab, vector2, Quaternion.identity);
                transform3.parent     = transform2;
                transform3.localScale = new Vector3(1f, Mathf.Abs(vector2.y - pointFloorPosition.y) / 4.5f, 1f);
                if (!this._wasBuilt && !this._wasPlaced)
                {
                    transform3.GetComponentInChildren <Renderer>().sharedMaterial = this._logMat;
                }
                if (!flag2)
                {
                    vector2 -= vector4 * 2.5f;
                    for (int i = 0; i < 5; i++)
                    {
                        Debug.DrawLine(vector2 - vector3, vector2 + vector3, Color.cyan);
                        Transform transform4 = this.NewLog(vector2, rotation);
                        transform4.parent = transform2;
                        stack.Push(transform4);
                        vector2 += vector4;
                        if (this._wasBuilt && i == 2)
                        {
                            transform4.rotation = rotation;
                            transform4.tag      = "UnderfootWood";
                            BoxCollider boxCollider = transform4.gameObject.AddComponent <BoxCollider>();
                            boxCollider.size   = new Vector3(this._logWidth * 5.5f, this._logHeight, this._logLength);
                            boxCollider.center = new Vector3(-0.42f, -0.34f, 0f);
                            transform4.gameObject.AddComponent <gridObjectBlocker>();
                        }
                    }
                    num3 -= 3;
                }
                Transform transform5 = UnityEngine.Object.Instantiate <Transform>(this._stiltPrefab);
                transform5.parent           = transform2;
                transform5.localPosition    = new Vector3(0f, -0.75f, 0f);
                transform5.localEulerAngles = new Vector3(-90f, 0f, 0f);
                transform5.localScale       = new Vector3(1f, Mathf.Abs(forward.magnitude) / 4.68f, 1f);
                if (!this._wasBuilt && !this._wasPlaced)
                {
                    transform5.GetComponentInChildren <Renderer>().sharedMaterial = this._logMat;
                }
                Vector3 b = new Vector3(0f, forward.y / (float)num3, 0f);
                for (int j = 0; j < num3; j++)
                {
                    Debug.DrawLine(vector2 - vector3, vector2 + vector3, Color.cyan);
                    Transform transform6 = this.NewLog(vector2, rotation);
                    transform6.parent = transform2;
                    stack.Push(transform6);
                    vector2 += vector4;
                    vector2 += b;
                }
                if (this._wasBuilt)
                {
                    BoxCollider boxCollider2 = transform2.gameObject.AddComponent <BoxCollider>();
                    boxCollider2.size   = new Vector3(this._logLength, this._logHeight, forward.magnitude);
                    boxCollider2.center = new Vector3(0f, -0.34f, boxCollider2.size.z / 2f);
                    transform2.tag      = "UnderfootWood";
                    transform2.gameObject.AddComponent <BuildingHealthHitRelay>();
                    transform2.gameObject.layer = 21;
                    getStructureStrength getStructureStrength = transform2.gameObject.AddComponent <getStructureStrength>();
                    getStructureStrength._strength = getStructureStrength.strength.normal;
                    getStructureStrength._type     = getStructureStrength.structureType.floor;
                    transform2.gameObject.AddComponent <gridObjectBlocker>();
                    FoundationArchitect.CreateWindSFX(transform5);
                }
                num += num2;
            }
            if (!this._wasPlaced && !this._wasBuilt)
            {
                this._logPool = stack;
            }
            return(transform);
        }
    public void doNavCut()
    {
        if (BoltNetwork.isClient)
        {
            return;
        }
        if (this.blockNav)
        {
            return;
        }
        if (!AstarPath.active || this.coolDown)
        {
            return;
        }
        this.go = base.gameObject;
        if (this.oneTimeOnly)
        {
            this.blockNav = true;
        }
        if (!this.col)
        {
            this.col = this.go.GetComponent <Collider>();
        }
        if (!this.col)
        {
            return;
        }
        if (base.transform.root.GetComponent <raftOnLand>())
        {
            return;
        }
        Bounds bounds = this.col.bounds;

        this.diff       = bounds.center.y + bounds.extents.y;
        bounds.center.y = this.diff;
        float num = Terrain.activeTerrain.SampleHeight(bounds.center) + Terrain.activeTerrain.transform.position.y;

        this.diff -= num;
        bool flag = false;

        if (this.diff < 0f)
        {
            flag = true;
        }
        this.storeBounds = bounds;
        if (this.disableColliderForUpdate)
        {
            this.col.enabled = false;
        }
        FoundationChunkTier component = base.gameObject.GetComponent <FoundationChunkTier>();

        if (component)
        {
            this.isStructure = true;
        }
        if (this.diff < 25f && this.diff > 2f && !this.planeCollision && component)
        {
            if (!Scene.SceneTracker.climbableStructures.Contains(base.gameObject))
            {
                Scene.SceneTracker.climbableStructures.Add(base.gameObject);
            }
            if (Scene.SceneTracker.isActiveAndEnabled)
            {
                Scene.SceneTracker.StartCoroutine(Scene.SceneTracker.validateClimbingWalls(false));
            }
        }
        if (flag)
        {
            base.enabled = false;
            return;
        }
        if (component)
        {
        }
        if (base.gameObject.name.Contains("StairsBuilt"))
        {
            this.isStructure = true;
        }
        if (!base.transform.GetComponent <setupNavRemoveRoot>() && !this.planeCollision)
        {
            base.transform.gameObject.AddComponent <setupNavRemoveRoot>();
        }
        getStructureStrength component2 = this.go.GetComponent <getStructureStrength>();

        if (component2)
        {
            if (component2._type == getStructureStrength.structureType.floor)
            {
                this.isFloor     = true;
                this.isStructure = true;
            }
            if (component2._type == getStructureStrength.structureType.wall)
            {
                this.isWall = true;
            }
            if (component2._type == getStructureStrength.structureType.foundation)
            {
                this.isFoundation = true;
            }
            if (component2._type == getStructureStrength.structureType.wall || component2._type == getStructureStrength.structureType.foundation || component2._type == getStructureStrength.structureType.floor || this.isStructure)
            {
                if (this.isFloor)
                {
                    this.recastObjSetup(true);
                }
                else
                {
                    this.recastObjSetup(false);
                }
                if (base.transform.root)
                {
                    if (this.doingOnGameStartCheck)
                    {
                        Scene.SceneTracker.StartCoroutine(Scene.SceneTracker.doGlobalStructureBoundsNavRemove(base.transform.root, this.storeBounds));
                        return;
                    }
                    if (Scene.SceneTracker.gameObject.activeSelf)
                    {
                        Scene.SceneTracker.StartCoroutine(Scene.SceneTracker.doStructureBoundsNavRemove(base.transform.root, this.storeBounds, this.updateGraphDelay));
                        return;
                    }
                }
                return;
            }
        }
        if (this.isStructure && base.transform.root)
        {
            if (this.doingOnGameStartCheck)
            {
                Scene.SceneTracker.StartCoroutine(Scene.SceneTracker.doGlobalStructureBoundsNavRemove(base.transform.root, this.storeBounds));
                return;
            }
            if (Scene.SceneTracker.gameObject.activeSelf)
            {
                Scene.SceneTracker.StartCoroutine(Scene.SceneTracker.doStructureBoundsNavRemove(base.transform.root, this.storeBounds, this.updateGraphDelay));
                return;
            }
        }
        if (!this.planeCollision && !this.cutGo && !this.disableColliderForUpdate)
        {
            this.cutGo = UnityEngine.Object.Instantiate <GameObject>((GameObject)Resources.Load("navCubeCutter"), base.transform.position, base.transform.rotation);
            if (this.col.GetType() == typeof(BoxCollider))
            {
                BoxCollider component3 = this.col.transform.GetComponent <BoxCollider>();
                Vector3     size       = component3.size;
                this.cutGo.transform.parent        = this.col.transform;
                this.cutGo.transform.localScale    = size;
                this.cutGo.transform.localPosition = component3.center;
                this.cutGo.transform.localRotation = Quaternion.identity;
            }
            else if (this.col.GetType() == typeof(SphereCollider))
            {
                SphereCollider component4 = this.col.transform.GetComponent <SphereCollider>();
                Vector3        localScale = this.cutGo.transform.localScale;
                this.cutGo.transform.parent = this.col.transform;
                localScale.x = component4.radius * 1.3f;
                localScale.y = component4.radius * 1.3f;
                localScale.z = component4.radius * 1.3f;
                this.cutGo.transform.localScale = localScale;
            }
            else if (this.col.GetType() == typeof(CapsuleCollider))
            {
                CapsuleCollider component5 = this.col.transform.GetComponent <CapsuleCollider>();
                this.cutGo.transform.parent = this.col.transform;
                Vector3 localScale2 = this.cutGo.transform.localScale;
                localScale2.x = component5.radius * 1.3f;
                localScale2.y = component5.height;
                localScale2.z = component5.radius * 1.3f;
                this.cutGo.transform.localScale = localScale2;
            }
            this.cutGo.GetComponent <RecastMeshObj>().enabled = true;
        }
        if (!base.transform.GetComponent <navCutterSetup>())
        {
            if (this.doingOnGameStartCheck && !this.planeCollision)
            {
                Scene.SceneTracker.StartCoroutine(Scene.SceneTracker.doGlobalStructureBoundsNavRemove(base.transform.root, this.storeBounds));
                return;
            }
            if (Scene.SceneTracker.gameObject.activeSelf)
            {
                Scene.SceneTracker.StartCoroutine(Scene.SceneTracker.doStructureBoundsNavRemove(base.transform, this.storeBounds, this.updateGraphDelay));
            }
        }
        if (!this.updateOnEnable)
        {
            base.enabled = false;
        }
    }
Exemple #11
0
        protected override void OnTriggerEnter(Collider other)
        {
            try
            {
                if (GameSetup.IsMpClient)
                {
                    if (entity == null && !EnemyManager.clientEnemies.ContainsKey(entity.networkId.PackedValue))
                    {
                        return;
                    }
                    else if (EnemyManager.clientEnemies[entity.networkId.PackedValue].Outdated)
                    {
                        LastReqTime = Time.time;
                        using (System.IO.MemoryStream answerStream = new System.IO.MemoryStream())
                        {
                            using (System.IO.BinaryWriter w = new System.IO.BinaryWriter(answerStream))
                            {
                                w.Write(29);
                                w.Write(entity.networkId.PackedValue);
                                w.Close();
                            }
                            ChampionsOfForest.Network.NetworkManager.SendLine(answerStream.ToArray(), ChampionsOfForest.Network.NetworkManager.Target.OnlyServer);
                            answerStream.Close();
                        }
                    }
                }

                currState = animator.GetCurrentAnimatorStateInfo(0);
                nextState = animator.GetNextAnimatorStateInfo(0);
                if (currState.tagHash != damagedHash && currState.tagHash != staggerHash && currState.tagHash != hitStaggerHash && currState.tagHash != deathHash && nextState.tagHash != damagedHash && nextState.tagHash != staggerHash && nextState.tagHash != hitStaggerHash && nextState.tagHash != deathHash)
                {
                    if (other.gameObject.CompareTag("trapTrigger"))
                    {
                        other.gameObject.SendMessage("CutRope", SendMessageOptions.DontRequireReceiver);
                    }
                    if (!netPrefab && LocalPlayer.Animator && LocalPlayer.Animator.GetBool("deathBool"))
                    {
                        return;
                    }
                    if (other.gameObject.CompareTag("playerHitDetect") && mainTrigger)
                    {
                        if (!Scene.SceneTracker.hasAttackedPlayer)
                        {
                            Scene.SceneTracker.hasAttackedPlayer = true;
                            Scene.SceneTracker.Invoke("resetHasAttackedPlayer", Random.Range(120, 240));
                        }
                        targetStats component = other.transform.root.GetComponent <targetStats>();
                        if (component && component.targetDown)
                        {
                            return;
                        }
                        Animator componentInParent = other.gameObject.GetComponentInParent <Animator>();
                        Vector3  position          = rootTr.position;
                        position.y += 3.3f;
                        Vector3 direction = other.transform.position - position;
                        if (!Physics.Raycast(position, direction, out hit, direction.magnitude, enemyHitMask, QueryTriggerInteraction.Ignore))
                        {
                            ModAPI.Console.Write("Starting to get hit");
                            if (((!creepy_male && !creepy && !creepy_baby && !creepy_fat) || ModdedPlayer.instance.ParryAnything) && events)
                            {
                                ModAPI.Console.Write("events exists");

                                if (componentInParent)
                                {
                                    ModAPI.Console.Write("componentInParent exists");

                                    bool flag = InFront(other.gameObject);
                                    ModAPI.Console.Write("in front: " + flag +
                                                         "\nevents.parryBool: " + events.parryBool +
                                                         "\nnext tagHash: " + (componentInParent.GetNextAnimatorStateInfo(1).tagHash == blockHash) +
                                                         "\ncurrent tagHash" + (componentInParent.GetCurrentAnimatorStateInfo(1).tagHash == blockHash) +
                                                         "\nfirst condition" + (!BoltNetwork.isServer || !netPrefab));
                                    if ((!BoltNetwork.isServer || !netPrefab) && flag && events.parryBool && ((componentInParent.GetNextAnimatorStateInfo(1).tagHash == blockHash || componentInParent.GetCurrentAnimatorStateInfo(1).tagHash == blockHash) || ModdedPlayer.instance.ParryAnything))
                                    {
                                        ModAPI.Console.Write("Parrying successful");
                                        int parryDir = events.parryDir;
                                        BoltSetReflectedShim.SetIntegerReflected(animator, "parryDirInt", parryDir);
                                        if (BoltNetwork.isClient && netPrefab)
                                        {
                                            BoltSetReflectedShim.SetTriggerReflected(animator, "ClientParryTrigger");
                                            hitPrediction.StartParryPrediction();
                                            parryEnemy parryEnemy = parryEnemy.Create(GlobalTargets.OnlyServer);
                                            parryEnemy.Target = transform.root.GetComponent <BoltEntity>();
                                            parryEnemy.Send();
                                            FMODCommon.PlayOneshot(parryEvent, base.transform);
                                        }
                                        else
                                        {
                                            BoltSetReflectedShim.SetTriggerReflected(animator, "parryTrigger");
                                        }
                                        SpellActions.DoParry(transform.position);
                                        events.StartCoroutine("disableAllWeapons");
                                        playerHitReactions componentInParent2 = other.gameObject.GetComponentInParent <playerHitReactions>();
                                        if (componentInParent2 != null)
                                        {
                                            componentInParent2.enableParryState();
                                        }
                                        FMODCommon.PlayOneshotNetworked(parryEvent, base.transform, FMODCommon.NetworkRole.Server);
                                        events.parryBool = false;
                                        return;
                                    }
                                }
                            }
                            if ((bool)events)
                            {
                                events.parryBool = false;
                            }
                            other.transform.root.SendMessage("getHitDirection", rootTr.position, SendMessageOptions.DontRequireReceiver);
                            int num = 0;
                            if (maleSkinny || femaleSkinny)
                            {
                                if (pale)
                                {
                                    num = ((!skinned) ? Mathf.FloorToInt(10f * GameSettings.Ai.skinnyDamageRatio) : Mathf.FloorToInt(10f * GameSettings.Ai.skinnyDamageRatio * GameSettings.Ai.skinMaskDamageRatio));
                                }
                                else
                                {
                                    num = Mathf.FloorToInt(13f * GameSettings.Ai.skinnyDamageRatio);
                                    if (maleSkinny && props.regularStick.activeSelf && events.leftHandWeapon)
                                    {
                                        num = Mathf.FloorToInt(num * 1.35f);
                                    }
                                }
                            }
                            else if (male && pale)
                            {
                                num = ((!skinned) ? Mathf.FloorToInt(22f * GameSettings.Ai.largePaleDamageRatio) : Mathf.FloorToInt(22f * GameSettings.Ai.largePaleDamageRatio * GameSettings.Ai.skinMaskDamageRatio));
                            }
                            else if (male && !firemanMain)
                            {
                                num = ((!painted) ? Mathf.FloorToInt(20f * GameSettings.Ai.regularMaleDamageRatio) : Mathf.FloorToInt(20f * GameSettings.Ai.regularMaleDamageRatio * GameSettings.Ai.paintedDamageRatio));
                            }
                            else if (female)
                            {
                                num = Mathf.FloorToInt(17f * GameSettings.Ai.regularFemaleDamageRatio);
                            }
                            else if (creepy)
                            {
                                num = ((!pale) ? Mathf.FloorToInt(28f * GameSettings.Ai.creepyDamageRatio) : Mathf.FloorToInt(35f * GameSettings.Ai.creepyDamageRatio));
                            }
                            else if (creepy_male)
                            {
                                num = ((!pale) ? Mathf.FloorToInt(60f * GameSettings.Ai.creepyDamageRatio) : Mathf.FloorToInt(120f * GameSettings.Ai.creepyDamageRatio));
                            }
                            else if (creepy_baby)
                            {
                                num = Mathf.FloorToInt(26f * GameSettings.Ai.creepyBabyDamageRatio);
                            }
                            else if (firemanMain)
                            {
                                num = Mathf.FloorToInt(12f * GameSettings.Ai.regularMaleDamageRatio);
                                if (events && !enemyAtStructure && !events.noFireAttack)
                                {
                                    if (BoltNetwork.isRunning && netPrefab)
                                    {
                                        other.gameObject.SendMessageUpwards("Burn", SendMessageOptions.DontRequireReceiver);
                                    }
                                    else
                                    {
                                        other.gameObject.SendMessageUpwards("Burn", SendMessageOptions.DontRequireReceiver);
                                    }
                                }
                            }
                            if (!female && male)
                            {
                                if (holdingRegularWeapon() && events.leftHandWeapon)
                                {
                                    num += 7;
                                }
                                else if (holdingAdvancedWeapon() && events.leftHandWeapon)
                                {
                                    num += 15;
                                }
                            }
                            if (setup && setup.health.poisoned)
                            {
                                num = Mathf.FloorToInt(num / 1.6f);
                            }

                            //My additional code
                            try
                            {
                                if (GameSetup.IsMpClient)
                                {
                                    if (other.transform.root == LocalPlayer.Transform.root)
                                    {
                                        var x = EnemyManager.clientEnemies[entity.networkId.PackedValue];
                                        num = Mathf.RoundToInt(num * x.damagemult);
                                        if (x.abilities.Contains(EnemyProgression.Abilities.RainEmpowerement))
                                        {
                                            if (TheForest.Utils.Scene.WeatherSystem.Raining)
                                            {
                                                num *= 5;
                                            }
                                        }
                                        if (x.abilities.Contains(EnemyProgression.Abilities.Poisonous))
                                        {
                                            BuffDB.AddBuff(3, 32, Mathf.Sqrt(num / 10) / 7, poisonDuration);
                                        }
                                        if (x.abilities.Contains(EnemyProgression.Abilities.Basher))
                                        {
                                            ModdedPlayer.instance.Stun(stunDuration);
                                        }
                                        if (ModdedPlayer.instance.thornsDamage > 0)
                                        {
                                            DamageMath.DamageClamp(ModdedPlayer.instance.thornsDamage, out int dmg, out int reps);
                                            PlayerHitEnemy playerHitEnemy = PlayerHitEnemy.Create(GlobalTargets.OnlyServer);
                                            playerHitEnemy.Target = entity;
                                            playerHitEnemy.Hit    = dmg;
                                            AsyncHit.SendPlayerHitEnemy(playerHitEnemy, reps, 0.1f);
                                        }
                                    }
                                }
                                else
                                {
                                    if (other.transform.root == LocalPlayer.Transform.root)
                                    {
                                        if (EnemyProg == null)
                                        {
                                            EnemyProg = setup.health.gameObject.GetComponent <EnemyProgression>();
                                        }
                                        num = Mathf.RoundToInt(num * EnemyProg.DamageAmp * EnemyProg.DebuffDmgMult);
                                        BoltEntity bo = other.transform.root.GetComponent <BoltEntity>();
                                        if (bo == null)
                                        {
                                            bo = other.transform.root.GetComponentInChildren <BoltEntity>();
                                        }


                                        //POISON ATTACKS
                                        if (EnemyProg.abilities.Contains(EnemyProgression.Abilities.Poisonous))
                                        {
                                            BuffDB.AddBuff(3, 32, Mathf.Sqrt(num / 10) / 10, poisonDuration);
                                        }

                                        //STUN ON HIT
                                        if (EnemyProg.abilities.Contains(EnemyProgression.Abilities.Basher))
                                        {
                                            ModdedPlayer.instance.Stun(stunDuration);
                                        }

                                        if (ModdedPlayer.instance.thornsDamage > 0)
                                        {
                                            Invoke("HitEnemeyDelayed", 0.1f);
                                        }
                                    }
                                }
                            }
                            catch (System.Exception ex)
                            {
                                ModAPI.Log.Write(ex.ToString());
                            }


                            PlayerStats component2 = other.transform.root.GetComponent <PlayerStats>();
                            if (male || female || creepy_male || creepy_fat || creepy || creepy_baby)
                            {
                                netId component3 = other.transform.GetComponent <netId>();
                                if (BoltNetwork.isServer && component3)
                                {
                                    other.transform.root.SendMessage("StartPrediction", SendMessageOptions.DontRequireReceiver);
                                    return;
                                }
                                if (BoltNetwork.isClient && netPrefab && !(bool)component3)
                                {
                                    other.transform.root.SendMessage("setCurrentAttacker", this, SendMessageOptions.DontRequireReceiver);
                                    other.transform.root.SendMessage("hitFromEnemy", num, SendMessageOptions.DontRequireReceiver);
                                    other.transform.root.SendMessage("StartPrediction", SendMessageOptions.DontRequireReceiver);
                                }
                                else if (BoltNetwork.isServer)
                                {
                                    if (!(bool)component3)
                                    {
                                        other.transform.root.SendMessage("setCurrentAttacker", this, SendMessageOptions.DontRequireReceiver);
                                        other.transform.root.SendMessage("hitFromEnemy", num, SendMessageOptions.DontRequireReceiver);
                                    }
                                }
                                else if (!BoltNetwork.isRunning && component2)
                                {
                                    component2.setCurrentAttacker(this);
                                    component2.hitFromEnemy(num);
                                }
                            }
                            else if (!netPrefab && component2)
                            {
                                component2.setCurrentAttacker(this);
                                component2.hitFromEnemy(num);
                            }



                            goto IL_092f;
                        }
                        return;
                    }
                    goto IL_092f;
                }
                return;

IL_092f:
                if (other.gameObject.CompareTag("enemyCollide") && mainTrigger && bodyCollider && !enemyAtStructure)
                {
                    setupAttackerType();
                    if (other.gameObject != bodyCollider)
                    {
                        other.transform.SendMessageUpwards("getAttackDirection", Random.Range(0, 2), SendMessageOptions.DontRequireReceiver);
                        other.transform.SendMessageUpwards("getCombo", Random.Range(1, 4), SendMessageOptions.DontRequireReceiver);
                        other.transform.SendMessage("getAttackerType", attackerType, SendMessageOptions.DontRequireReceiver);
                        other.transform.SendMessage("getAttacker", rootTr.gameObject, SendMessageOptions.DontRequireReceiver);
                        other.transform.SendMessageUpwards("Hit", 6, SendMessageOptions.DontRequireReceiver);
                        FMODCommon.PlayOneshotNetworked(weaponHitEvent, base.transform, FMODCommon.NetworkRole.Server);
                    }
                }
                if (other.gameObject.CompareTag("BreakableWood") || (other.gameObject.CompareTag("BreakableRock") && mainTrigger))
                {
                    other.transform.SendMessage("Hit", 50, SendMessageOptions.DontRequireReceiver);
                    other.SendMessage("LocalizedHit", new LocalizedHitData(base.transform.position, 50f), SendMessageOptions.DontRequireReceiver);
                    FMODCommon.PlayOneshotNetworked(weaponHitEvent, base.transform, FMODCommon.NetworkRole.Server);
                }
                if (other.gameObject.CompareTag("SmallTree") && !mainTrigger)
                {
                    other.SendMessage("Hit", 2, SendMessageOptions.DontRequireReceiver);
                }
                if (other.gameObject.CompareTag("Fire") && mainTrigger && firemanMain && !events.noFireAttack)
                {
                    other.SendMessage("Burn", SendMessageOptions.DontRequireReceiver);
                }
                if (other.gameObject.CompareTag("Tree") && mainTrigger && creepy_male)
                {
                    other.SendMessage("Explosion", 5f, SendMessageOptions.DontRequireReceiver);
                    FMODCommon.PlayOneshotNetworked(weaponHitEvent, base.transform, FMODCommon.NetworkRole.Server);
                }
                if (!other.gameObject.CompareTag("structure") && !other.gameObject.CompareTag("SLTier1") && !other.gameObject.CompareTag("SLTier2") && !other.gameObject.CompareTag("SLTier3") && !other.gameObject.CompareTag("jumpObject") && !other.gameObject.CompareTag("UnderfootWood"))
                {
                    return;
                }
                if (!mainTrigger)
                {
                    return;
                }
                getStructureStrength component4 = other.gameObject.GetComponent <getStructureStrength>();
                bool flag2 = false;
                if (component4 == null)
                {
                    flag2 = true;
                }
                enemyAtStructure = true;
                int num2 = 0;
                if (!creepy_male && !creepy && !creepy_fat && !creepy_baby)
                {
                    if (!flag2)
                    {
                        num2 = ((maleSkinny || femaleSkinny) ? ((component4._strength == getStructureStrength.strength.weak) ? Mathf.FloorToInt(8f * GameSettings.Ai.regularStructureDamageRatio) : 0) : ((pale || painted || skinned) ? ((component4._strength != getStructureStrength.strength.veryStrong) ? Mathf.FloorToInt(16f * GameSettings.Ai.regularStructureDamageRatio) : 0) : ((component4._strength != getStructureStrength.strength.veryStrong) ? Mathf.FloorToInt(12f * GameSettings.Ai.regularStructureDamageRatio) : 0)));
                        goto IL_0d63;
                    }
                    return;
                }
                num2 = ((!creepy_baby) ? Mathf.FloorToInt(30f * GameSettings.Ai.creepyStructureDamageRatio) : Mathf.FloorToInt(10f * GameSettings.Ai.creepyStructureDamageRatio));
                goto IL_0d63;
IL_0d63:
                if (setup && setup.health.poisoned)
                {
                    num2 /= 2;
                }
                other.SendMessage("Hit", num2, SendMessageOptions.DontRequireReceiver);
                other.SendMessage("LocalizedHit", new LocalizedHitData(base.transform.position, num2), SendMessageOptions.DontRequireReceiver);
                FMODCommon.PlayOneshotNetworked(weaponHitEvent, base.transform, FMODCommon.NetworkRole.Server);
            }
            catch (System.Exception ee)
            {
                ModAPI.Log.Write(ee.ToString());
            }
        }
Exemple #12
0
 private void OnTriggerEnter(Collider other)
 {
     this.currState = this.animator.GetCurrentAnimatorStateInfo(0);
     this.nextState = this.animator.GetNextAnimatorStateInfo(0);
     if (this.currState.tagHash == this.damagedHash || this.currState.tagHash == this.staggerHash || this.currState.tagHash == this.hitStaggerHash || this.currState.tagHash == this.deathHash || this.nextState.tagHash == this.damagedHash || this.nextState.tagHash == this.staggerHash || this.nextState.tagHash == this.hitStaggerHash || this.nextState.tagHash == this.deathHash)
     {
         return;
     }
     if (other.gameObject.CompareTag("trapTrigger"))
     {
         other.gameObject.SendMessage("CutRope", SendMessageOptions.DontRequireReceiver);
     }
     if (!this.netPrefab && LocalPlayer.Animator && LocalPlayer.Animator.GetBool("deathBool"))
     {
         return;
     }
     if (other.gameObject.CompareTag("SmallTree"))
     {
         other.SendMessage("Hit", 10, SendMessageOptions.DontRequireReceiver);
         other.SendMessage("Hit", 10, SendMessageOptions.DontRequireReceiver);
     }
     if (other.gameObject.CompareTag("playerHitDetect") && this.mainTrigger)
     {
         if (!Scene.SceneTracker.hasAttackedPlayer)
         {
             Scene.SceneTracker.hasAttackedPlayer = true;
             Scene.SceneTracker.Invoke("resetHasAttackedPlayer", (float)UnityEngine.Random.Range(120, 240));
         }
         targetStats component = other.transform.root.GetComponent <targetStats>();
         if (component && component.targetDown)
         {
             return;
         }
         Animator componentInParent = other.gameObject.GetComponentInParent <Animator>();
         Vector3  position          = this.rootTr.position;
         position.y += 3.3f;
         Vector3 direction = other.transform.position - position;
         if (Physics.Raycast(position, direction, out this.hit, direction.magnitude, this.enemyHitMask, QueryTriggerInteraction.Ignore))
         {
             return;
         }
         if (!this.creepy_male && !this.creepy && !this.creepy_baby && !this.creepy_fat && this.events && componentInParent)
         {
             bool flag = this.InFront(other.gameObject);
             if (!BoltNetwork.isServer || !this.netPrefab)
             {
                 if (flag && this.events.parryBool && (componentInParent.GetNextAnimatorStateInfo(1).tagHash == this.blockHash || componentInParent.GetCurrentAnimatorStateInfo(1).tagHash == this.blockHash))
                 {
                     int parryDir = this.events.parryDir;
                     this.animator.SetIntegerReflected("parryDirInt", parryDir);
                     if (BoltNetwork.isClient && this.netPrefab)
                     {
                         this.animator.SetTriggerReflected("ClientParryTrigger");
                         this.hitPrediction.StartParryPrediction();
                         parryEnemy parryEnemy = parryEnemy.Create(GlobalTargets.OnlyServer);
                         parryEnemy.Target = base.transform.root.GetComponent <BoltEntity>();
                         parryEnemy.Send();
                         FMODCommon.PlayOneshot(this.parryEvent, base.transform);
                     }
                     else
                     {
                         this.animator.SetTriggerReflected("parryTrigger");
                     }
                     this.events.StartCoroutine("disableAllWeapons");
                     playerHitReactions componentInParent2 = other.gameObject.GetComponentInParent <playerHitReactions>();
                     if (componentInParent2 != null)
                     {
                         componentInParent2.enableParryState();
                     }
                     FMODCommon.PlayOneshotNetworked(this.parryEvent, base.transform, FMODCommon.NetworkRole.Server);
                     this.events.parryBool = false;
                     return;
                 }
             }
         }
         if (this.events)
         {
             this.events.parryBool = false;
         }
         other.transform.root.SendMessage("getHitDirection", this.rootTr.position, SendMessageOptions.DontRequireReceiver);
         int num = 0;
         if (this.maleSkinny || this.femaleSkinny)
         {
             if (this.pale)
             {
                 if (this.skinned)
                 {
                     num = Mathf.FloorToInt(10f * GameSettings.Ai.skinnyDamageRatio * GameSettings.Ai.skinMaskDamageRatio);
                 }
                 else
                 {
                     num = Mathf.FloorToInt(10f * GameSettings.Ai.skinnyDamageRatio);
                 }
             }
             else
             {
                 num = Mathf.FloorToInt(13f * GameSettings.Ai.skinnyDamageRatio);
                 if (this.maleSkinny && this.props.regularStick.activeSelf && this.events.leftHandWeapon)
                 {
                     num = Mathf.FloorToInt((float)num * 1.35f);
                 }
             }
         }
         else if (this.male && this.pale)
         {
             if (this.skinned)
             {
                 num = Mathf.FloorToInt(22f * GameSettings.Ai.largePaleDamageRatio * GameSettings.Ai.skinMaskDamageRatio);
             }
             else
             {
                 num = Mathf.FloorToInt(22f * GameSettings.Ai.largePaleDamageRatio);
             }
         }
         else if (this.male && !this.firemanMain)
         {
             if (this.painted)
             {
                 num = Mathf.FloorToInt(20f * GameSettings.Ai.regularMaleDamageRatio * GameSettings.Ai.paintedDamageRatio);
             }
             else
             {
                 num = Mathf.FloorToInt(20f * GameSettings.Ai.regularMaleDamageRatio);
             }
         }
         else if (this.female)
         {
             num = Mathf.FloorToInt(17f * GameSettings.Ai.regularFemaleDamageRatio);
         }
         else if (this.creepy)
         {
             if (this.pale)
             {
                 num = Mathf.FloorToInt(35f * GameSettings.Ai.creepyDamageRatio);
             }
             else
             {
                 num = Mathf.FloorToInt(28f * GameSettings.Ai.creepyDamageRatio);
             }
         }
         else if (this.creepy_male)
         {
             if (this.pale)
             {
                 num = Mathf.FloorToInt(40f * GameSettings.Ai.creepyDamageRatio);
             }
             else
             {
                 num = Mathf.FloorToInt(30f * GameSettings.Ai.creepyDamageRatio);
             }
         }
         else if (this.creepy_baby)
         {
             num = Mathf.FloorToInt(26f * GameSettings.Ai.creepyBabyDamageRatio);
         }
         else if (this.firemanMain)
         {
             num = Mathf.FloorToInt(12f * GameSettings.Ai.regularMaleDamageRatio);
             if (this.events && !this.enemyAtStructure && !this.events.noFireAttack)
             {
                 if (BoltNetwork.isRunning && this.netPrefab)
                 {
                     other.gameObject.SendMessageUpwards("Burn", SendMessageOptions.DontRequireReceiver);
                 }
                 else
                 {
                     other.gameObject.SendMessageUpwards("Burn", SendMessageOptions.DontRequireReceiver);
                 }
             }
         }
         if (!this.female && this.male)
         {
             if (this.holdingRegularWeapon() && this.events.leftHandWeapon)
             {
                 num += 7;
             }
             else if (this.holdingAdvancedWeapon() && this.events.leftHandWeapon)
             {
                 num += 15;
             }
         }
         if (this.setup && this.setup.health.poisoned)
         {
             num = Mathf.FloorToInt((float)num / 1.6f);
         }
         PlayerStats component2 = other.transform.root.GetComponent <PlayerStats>();
         if (this.male || this.female || this.creepy_male || this.creepy_fat || this.creepy || this.creepy_baby)
         {
             netId component3 = other.transform.GetComponent <netId>();
             if (BoltNetwork.isServer && component3)
             {
                 other.transform.root.SendMessage("StartPrediction", SendMessageOptions.DontRequireReceiver);
                 return;
             }
             if (BoltNetwork.isClient && this.netPrefab && !component3)
             {
                 other.transform.root.SendMessage("setCurrentAttacker", this, SendMessageOptions.DontRequireReceiver);
                 other.transform.root.SendMessage("hitFromEnemy", num, SendMessageOptions.DontRequireReceiver);
                 other.transform.root.SendMessage("StartPrediction", SendMessageOptions.DontRequireReceiver);
             }
             else if (BoltNetwork.isServer)
             {
                 if (!component3)
                 {
                     other.transform.root.SendMessage("setCurrentAttacker", this, SendMessageOptions.DontRequireReceiver);
                     other.transform.root.SendMessage("hitFromEnemy", num, SendMessageOptions.DontRequireReceiver);
                 }
             }
             else if (!BoltNetwork.isRunning && component2)
             {
                 component2.setCurrentAttacker(this);
                 component2.hitFromEnemy(num);
             }
         }
         else if (!this.netPrefab && component2)
         {
             component2.setCurrentAttacker(this);
             component2.hitFromEnemy(num);
         }
     }
     if (other.gameObject.CompareTag("enemyCollide") && this.mainTrigger && this.bodyCollider && !this.enemyAtStructure)
     {
         this.setupAttackerType();
         if (other.gameObject != this.bodyCollider)
         {
             other.transform.SendMessageUpwards("getAttackDirection", UnityEngine.Random.Range(0, 2), SendMessageOptions.DontRequireReceiver);
             other.transform.SendMessageUpwards("getCombo", UnityEngine.Random.Range(1, 4), SendMessageOptions.DontRequireReceiver);
             other.transform.SendMessage("getAttackerType", this.attackerType, SendMessageOptions.DontRequireReceiver);
             other.transform.SendMessage("getAttacker", this.rootTr.gameObject, SendMessageOptions.DontRequireReceiver);
             other.transform.SendMessageUpwards("Hit", 6, SendMessageOptions.DontRequireReceiver);
             FMODCommon.PlayOneshotNetworked(this.weaponHitEvent, base.transform, FMODCommon.NetworkRole.Server);
         }
     }
     if (other.gameObject.CompareTag("BreakableWood") || (other.gameObject.CompareTag("BreakableRock") && this.mainTrigger))
     {
         other.transform.SendMessage("Hit", 50, SendMessageOptions.DontRequireReceiver);
         other.SendMessage("LocalizedHit", new LocalizedHitData(base.transform.position, 50f), SendMessageOptions.DontRequireReceiver);
         FMODCommon.PlayOneshotNetworked(this.weaponHitEvent, base.transform, FMODCommon.NetworkRole.Server);
     }
     if (other.gameObject.CompareTag("SmallTree"))
     {
         other.SendMessage("Hit", 5, SendMessageOptions.DontRequireReceiver);
         other.SendMessage("Hit", 5, SendMessageOptions.DontRequireReceiver);
     }
     if (other.gameObject.CompareTag("Fire") && this.mainTrigger && this.firemanMain && !this.events.noFireAttack)
     {
         other.SendMessage("Burn", SendMessageOptions.DontRequireReceiver);
     }
     if (other.gameObject.CompareTag("Tree") && this.mainTrigger && (this.creepy_male || this.boss))
     {
         other.SendMessage("Explosion", 5f, SendMessageOptions.DontRequireReceiver);
         FMODCommon.PlayOneshotNetworked(this.weaponHitEvent, base.transform, FMODCommon.NetworkRole.Server);
     }
     if ((other.gameObject.CompareTag("structure") || other.gameObject.CompareTag("SLTier1") || other.gameObject.CompareTag("SLTier2") || other.gameObject.CompareTag("SLTier3") || other.gameObject.CompareTag("jumpObject") || other.gameObject.CompareTag("UnderfootWood")) && this.mainTrigger)
     {
         getStructureStrength component4 = other.gameObject.GetComponent <getStructureStrength>();
         bool flag2 = false;
         if (component4 == null)
         {
             flag2 = true;
         }
         this.enemyAtStructure = true;
         int num2;
         if (this.creepy_male || this.creepy || this.creepy_fat || this.creepy_baby)
         {
             if (this.creepy_baby)
             {
                 num2 = Mathf.FloorToInt(10f * GameSettings.Ai.creepyStructureDamageRatio);
             }
             else
             {
                 num2 = Mathf.FloorToInt(30f * GameSettings.Ai.creepyStructureDamageRatio);
             }
         }
         else
         {
             if (flag2)
             {
                 return;
             }
             if (this.maleSkinny || this.femaleSkinny)
             {
                 if (component4._strength == getStructureStrength.strength.weak)
                 {
                     num2 = Mathf.FloorToInt(8f * GameSettings.Ai.regularStructureDamageRatio);
                 }
                 else
                 {
                     num2 = 0;
                 }
             }
             else if (this.pale || this.painted || this.skinned)
             {
                 if (component4._strength == getStructureStrength.strength.veryStrong)
                 {
                     num2 = 0;
                 }
                 else
                 {
                     num2 = Mathf.FloorToInt(16f * GameSettings.Ai.regularStructureDamageRatio);
                 }
             }
             else if (component4._strength == getStructureStrength.strength.veryStrong)
             {
                 num2 = 0;
             }
             else
             {
                 num2 = Mathf.FloorToInt(12f * GameSettings.Ai.regularStructureDamageRatio);
             }
         }
         if (this.setup && this.setup.health.poisoned)
         {
             num2 /= 2;
         }
         other.SendMessage("Hit", num2, SendMessageOptions.DontRequireReceiver);
         other.SendMessage("LocalizedHit", new LocalizedHitData(base.transform.position, (float)num2), SendMessageOptions.DontRequireReceiver);
         FMODCommon.PlayOneshotNetworked(this.weaponHitEvent, base.transform, FMODCommon.NetworkRole.Server);
     }
 }
        protected override void CreateStructure(bool isRepair = false)
        {
            if (isRepair)
            {
                base.Clear();
                base.StartCoroutine(base.DelayedAwake(true));
            }
            int num = LayerMask.NameToLayer("Prop");

            this._wallRoot        = this.SpawnStructure();
            this._wallRoot.parent = base.transform;
            if (this._wasBuilt)
            {
                this._gridToken = InsideCheck.AddWallChunk(this._p1, this._p2, 4.75f * this._logWidth + 1f);
                BuildingHealth component = base.GetComponent <BuildingHealth>();
                if (component)
                {
                    component._renderersRoot = this._wallRoot.gameObject;
                }
                if (!this._wallCollision)
                {
                    GameObject gameObject = new GameObject("collision");
                    gameObject.transform.parent   = this._wallRoot.parent;
                    gameObject.transform.position = this._wallRoot.position;
                    gameObject.transform.rotation = this._wallRoot.rotation;
                    gameObject.tag      = "structure";
                    this._wallCollision = gameObject.transform;
                    GameObject gameObject2 = this._wallRoot.gameObject;
                    int        layer       = num;
                    gameObject.layer  = layer;
                    gameObject2.layer = layer;
                    Vector3 vector;
                    Vector3 size;
                    if (this.UseHorizontalLogs)
                    {
                        float num2 = Vector3.Distance(this._p1, this._p2) / this._logLength;
                        float num3 = 7.4f * num2;
                        float num4 = 6.75f * (0.31f + (num2 - 1f) / 2f);
                        vector    = Vector3.Lerp(this._p1, this._p2, 0.5f);
                        vector.y += this._logWidth * 0.9f;
                        vector    = this._wallRoot.InverseTransformPoint(vector);
                        size      = new Vector3(1.75f, 1.8f * this._logWidth, num3 * 1f);
                    }
                    else
                    {
                        float num3 = this._logWidth * (float)(this._wallRoot.childCount - 1) + 1.5f;
                        vector = Vector3.zero;
                        IEnumerator enumerator = this._wallRoot.GetEnumerator();
                        try
                        {
                            while (enumerator.MoveNext())
                            {
                                object    obj       = enumerator.Current;
                                Transform transform = (Transform)obj;
                                vector += transform.position;
                            }
                        }
                        finally
                        {
                            IDisposable disposable;
                            if ((disposable = (enumerator as IDisposable)) != null)
                            {
                                disposable.Dispose();
                            }
                        }
                        vector   /= (float)this._wallRoot.childCount;
                        vector.y += this.GetHeight() / 2f;
                        vector    = this._wallRoot.InverseTransformPoint(vector);
                        size      = new Vector3(1.75f, this.GetHeight(), num3);
                    }
                    getStructureStrength getStructureStrength = gameObject.AddComponent <getStructureStrength>();
                    getStructureStrength._strength = getStructureStrength.strength.strong;
                    BoxCollider boxCollider = gameObject.AddComponent <BoxCollider>();
                    boxCollider.center    = vector;
                    boxCollider.size      = size;
                    boxCollider.isTrigger = true;
                    BoxCollider boxCollider2 = gameObject.AddComponent <BoxCollider>();
                    boxCollider2.center = vector;
                    boxCollider2.size   = size;
                    gridObjectBlocker gridObjectBlocker = gameObject.AddComponent <gridObjectBlocker>();
                    gridObjectBlocker.ignoreOnDisable = true;
                    addToBuilt addToBuilt = gameObject.AddComponent <addToBuilt>();
                    addToBuilt.addToStructures = true;
                    BuildingHealthHitRelay buildingHealthHitRelay = gameObject.AddComponent <BuildingHealthHitRelay>();
                }
            }
        }
Exemple #14
0
        public Transform SpawnStructure()
        {
            Transform transform = new GameObject("CoasterRoot").transform;

            transform.position = this.GetWorldPoint(0);
            Stack <Transform> stack = new Stack <Transform>();

            if (this._logPool == null)
            {
                this._logPool = new Stack <Transform>();
            }
            int i   = 1;
            int num = 1;

            while (i < this._multiPointsPositions.Count)
            {
                Vector3   worldPoint  = this.GetWorldPoint(i);
                Vector3   worldPoint2 = this.GetWorldPoint(i - num);
                Vector3   vector      = worldPoint2;
                Vector3   a           = worldPoint;
                Vector3   forward     = a - vector;
                int       num2        = Mathf.CeilToInt(forward.magnitude / this._logWidth);
                Vector3   b           = forward.normalized * this._logWidth;
                Transform transform2  = new GameObject("CoasterEdge" + i).transform;
                transform2.parent = transform;
                Vector3 vector2 = vector;
                forward             = a - vector2;
                transform2.rotation = Quaternion.LookRotation(forward);
                transform2.position = vector2;
                this.SpawnVerticalStilt(vector, transform2);
                Transform transform3 = UnityEngine.Object.Instantiate <Transform>(this._stiltPrefab);
                transform3.parent           = transform2;
                transform3.localPosition    = new Vector3(0f, -0.75f, 0f);
                transform3.localEulerAngles = new Vector3(-90f, 0f, 0f);
                transform3.localScale       = new Vector3(1f, Mathf.Abs(forward.magnitude) / 4.68f, 1f);
                if (!this._wasBuilt && !this._wasPlaced)
                {
                    Create.ApplyGhostMaterial(transform3, false);
                }
                else
                {
                    transform3.gameObject.SetActive(true);
                }
                for (int j = 0; j < num2; j++)
                {
                    Transform transform4 = this.NewLog(vector2, transform2.rotation * Quaternion.Euler(0f, 90f, 0f));
                    transform4.parent = transform2;
                    stack.Push(transform4);
                    vector2 += b;
                }
                if (this._wasBuilt)
                {
                    for (int k = 0; k < this._colliderSource.Length; k++)
                    {
                        GameObject gameObject = new GameObject(string.Format("Collider_{0:000}", k));
                        gameObject.transform.parent        = transform2;
                        gameObject.transform.localPosition = this._colliderSource[k].transform.localPosition;
                        gameObject.transform.localScale    = this._colliderSource[k].transform.localScale;
                        gameObject.transform.localRotation = this._colliderSource[k].transform.localRotation;
                        BoxCollider boxCollider = gameObject.AddComponent <BoxCollider>();
                        boxCollider.sharedMaterial = this._colliderSource[k].sharedMaterial;
                        gameObject.tag             = this._colliderSource[k].gameObject.tag;
                        gameObject.layer           = this._colliderSource[k].gameObject.layer;
                        float num3 = forward.magnitude + 0.5f;
                        boxCollider.size = new Vector3(this._colliderSource[k].size.x, this._colliderSource[k].size.y, num3);
                        gameObject.transform.localPosition += new Vector3(0f, 0f, num3 / 2f);
                    }
                    transform2.tag = "UnderfootWood";
                    transform2.gameObject.AddComponent <BuildingHealthHitRelay>();
                    transform2.gameObject.layer = 21;
                    getStructureStrength getStructureStrength = transform2.gameObject.AddComponent <getStructureStrength>();
                    getStructureStrength._strength = getStructureStrength.strength.normal;
                    getStructureStrength._type     = getStructureStrength.structureType.wall;
                    gridObjectBlocker gridObjectBlocker = transform2.gameObject.AddComponent <gridObjectBlocker>();
                    gridObjectBlocker.GatherChildColliders = true;
                    FoundationArchitect.CreateWindSFX(transform3);
                }
                i += num;
            }
            if (!this._wasPlaced && !this._wasBuilt)
            {
                this._logPool = stack;
            }
            return(transform);
        }
Exemple #15
0
        private IEnumerator OnPlaced()
        {
            if (!this._wasPlaced && !this._wasBuilt && !BoltNetwork.isClient)
            {
                base.transform.position = this._multiPointsPositions.First <Vector3>();
                base.transform.LookAt(this._multiPointsPositions.Last <Vector3>());
                this._multiPointsPositions = (from p in this._multiPointsPositions
                                              select this.$this.transform.InverseTransformPoint(p)).ToList <Vector3>();
            }
            this.WasPlaced = true;
            base.enabled   = false;
            this._craftStructure.GetComponent <Collider>().enabled = false;
            Scene.HudGui.RoofConstructionIcons.Shutdown();
            Scene.HudGui.RotateIcon.SetActive(false);
            yield return(null);

            if (this._craftStructure)
            {
                UnityEngine.Object.Destroy(base.GetComponent <Rigidbody>());
                UnityEngine.Object.Destroy(base.GetComponent <Collider>());
                Transform newCoaster = this.SpawnStructure();
                if (this._coasterRoot)
                {
                    UnityEngine.Object.Destroy(this._coasterRoot.gameObject);
                }
                this._coasterRoot = newCoaster;
                Transform ghostRoot = this._coasterRoot;
                Transform transform = ghostRoot;
                transform.name += "Ghost";
                this._logPool   = null;
                this._newPool   = null;
                this.UpdateBuildingIngredients();
                ghostRoot.transform.parent         = null;
                this._coasterRoot.transform.parent = base.transform;
                ghostRoot.transform.parent         = base.transform;
                BoxCollider bc;
                if (this._craftStructure.GetComponent <Collider>() is BoxCollider)
                {
                    bc = (BoxCollider)this._craftStructure.GetComponent <Collider>();
                }
                else
                {
                    bc           = this._craftStructure.gameObject.AddComponent <BoxCollider>();
                    bc.isTrigger = true;
                }
                Bounds b = default(Bounds);
                foreach (Vector3 position in this._multiPointsPositions)
                {
                    b.Encapsulate(this._craftStructure.transform.InverseTransformPoint(base.transform.TransformPoint(position)));
                }
                b.Encapsulate(this._craftStructure.transform.InverseTransformPoint(this.GetPointFloorPosition(this._craftStructure.transform.position)));
                Vector3 localSize = b.size;
                localSize.x = Mathf.Max(localSize.x, 6f);
                localSize.y = Mathf.Max(localSize.y, 3f);
                localSize.z = Mathf.Max(localSize.z, 3f);
                bc.size     = localSize;
                bc.center   = b.center;
                bc.enabled  = true;
                yield return(null);

                this._craftStructure.manualLoading = true;
                while (LevelSerializer.IsDeserializing && !this._craftStructure.WasLoaded)
                {
                    yield return(null);
                }
                this._craftStructure.Initialize();
                this._craftStructure.gameObject.SetActive(true);
                yield return(null);

                bc.enabled = false;
                bc.enabled = true;
                if (!this._craftStructure.gameObject.GetComponent <getStructureStrength>())
                {
                    getStructureStrength getStructureStrength = this._craftStructure.gameObject.AddComponent <getStructureStrength>();
                    getStructureStrength._strength = getStructureStrength.strength.normal;
                    getStructureStrength._type     = getStructureStrength.structureType.wall;
                }
            }
            yield break;
        }
Exemple #16
0
        public void CreateStructure(bool isRepair = false)
        {
            if (this._wasBuilt && isRepair)
            {
                if (this._bridgeRoot)
                {
                    UnityEngine.Object.Destroy(this._bridgeRoot.gameObject);
                }
                this._bridgeRoot = null;
                base.StartCoroutine(this.DelayedAwake(true));
            }
            GameObject gameObject = (!this._bridgeRoot) ? null : this._bridgeRoot.gameObject;

            this._bridgeRoot        = this.CreateBridge(this._anchor1.transform.position, this._anchor2.transform.position);
            this._bridgeRoot.name   = "BridgeRoot" + ((!this._wasBuilt) ? "Ghost" : "Built");
            this._bridgeRoot.parent = base.transform;
            if (gameObject)
            {
                UnityEngine.Object.Destroy(gameObject);
            }
            if (this._wasBuilt)
            {
                base.transform.position = this._anchor1.transform.position;
                this._bridgeRoot.parent = base.transform;
                LOD_GroupToggle lod_GroupToggle = this._bridgeRoot.gameObject.AddComponent <LOD_GroupToggle>();
                lod_GroupToggle.enabled    = false;
                lod_GroupToggle._levels    = new LOD_GroupToggle.LodLevel[2];
                lod_GroupToggle._levels[0] = new LOD_GroupToggle.LodLevel
                {
                    Renderers       = this._bridgeRoot.GetComponentsInChildren <Renderer>(),
                    VisibleDistance = Vector3.Distance(this._anchor1.transform.position, this._anchor2.transform.position) + 20f
                };
                lod_GroupToggle._levels[1] = new LOD_GroupToggle.LodLevel
                {
                    VisibleDistance = 10000f
                };
                List <Renderer> list   = new List <Renderer>();
                Vector3         vector = this._bridgeRoot.GetChild(0).position;
                int             num    = Mathf.CeilToInt(Vector3.Distance(this._anchor1.transform.position, this._anchor2.transform.position) / this._maxColliderLength);
                int             num2   = Mathf.CeilToInt((float)this._bridgeRoot.childCount / (float)num);
                for (int i = 1; i <= num; i++)
                {
                    int num3 = num2 * i;
                    if (num3 >= this._bridgeRoot.childCount)
                    {
                        num3 = this._bridgeRoot.childCount - 1;
                    }
                    Transform child     = this._bridgeRoot.GetChild(num3);
                    Vector3   position  = child.position;
                    Transform transform = new GameObject("Floor" + i).transform;
                    transform.gameObject.layer = 21;
                    transform.parent           = base.transform;
                    transform.position         = vector;
                    transform.LookAt(position);
                    BoxCollider boxCollider = transform.gameObject.AddComponent <BoxCollider>();
                    boxCollider.center = transform.InverseTransformPoint(Vector3.Lerp(vector, position, 0.5f));
                    boxCollider.size   = new Vector3(4.5f, this._logWidth * 0.65f, Vector3.Distance(vector, position) + ((i != num) ? 0f : (this._logWidth / 2f)));
                    transform.tag      = "UnderfootWood";
                    MeshRenderer meshRenderer = transform.gameObject.AddComponent <MeshRenderer>();
                    meshRenderer.sharedMaterial = Prefabs.Instance.LogBridgeBuiltPrefabLOD1.sharedMaterial;
                    MeshFilter meshFilter = transform.gameObject.AddComponent <MeshFilter>();
                    meshFilter.sharedMesh = Prefabs.Instance.LogBridgeBuiltPrefabLOD1.GetComponent <MeshFilter>().sharedMesh;
                    list.Add(meshRenderer);
                    getStructureStrength getStructureStrength = null;
                    if (!getStructureStrength)
                    {
                        getStructureStrength           = transform.gameObject.AddComponent <getStructureStrength>();
                        getStructureStrength._type     = getStructureStrength.structureType.floor;
                        getStructureStrength._strength = getStructureStrength.strength.weak;
                    }
                    transform.gameObject.AddComponent <BuildingHealthHitRelay>();
                    gridObjectBlocker exists = null;
                    if (!exists)
                    {
                        transform.gameObject.AddComponent <gridObjectBlocker>();
                    }
                    vector = position;
                }
                lod_GroupToggle._levels[1].Renderers = list.ToArray();
                lod_GroupToggle.enabled = true;
            }
            if (this._wasBuilt && isRepair)
            {
                this._bridgeRoot.parent = base.transform;
            }
        }
Exemple #17
0
        protected override void CreateStructure(bool isRepair = false)
        {
            Renderer renderer = null;

            if (isRepair)
            {
                LOD_GroupToggle component = this._wallRoot.GetComponent <LOD_GroupToggle>();
                if (component)
                {
                    renderer = component._levels[1].Renderers[0];
                }
                base.Clear();
                base.StartCoroutine(base.DelayedAwake(true));
            }
            Vector3 size = this._logRenderer.bounds.size;

            this._logLength = size.y;
            this._logWidth  = size.z;
            int layer = LayerMask.NameToLayer("Prop");

            this._wallRoot        = this.SpawnStructure();
            this._wallRoot.parent = base.transform;
            if (this._wasBuilt)
            {
                this._gridToken = InsideCheck.AddWallChunk(this._p1, this._p2, this._logLength);
                GameObject gameObject = this._wallRoot.gameObject;
                gameObject.tag   = "structure";
                gameObject.layer = layer;
                BoxCollider boxCollider = this._wallRoot.gameObject.AddComponent <BoxCollider>();
                Vector3     vector      = base.transform.InverseTransformVector(this._p2 - this._p1);
                boxCollider.size = new Vector3(this._logWidth, this._logLength, Mathf.Abs(vector.z));
                Vector3 center = boxCollider.size / 2f;
                center.x           = 0f;
                center.y          -= 1f;
                center.z          -= this._logWidth / 2f;
                boxCollider.center = center;
                BuildingHealth component2 = base.GetComponent <BuildingHealth>();
                if (component2)
                {
                    component2._renderersRoot = this._wallRoot.gameObject;
                    if (BoltNetwork.isRunning)
                    {
                        component2.SetMpRandomDistortColliders(new Collider[]
                        {
                            boxCollider
                        });
                    }
                }
                this._wallRoot.gameObject.AddComponent <BuildingHealthHitRelay>();
                getStructureStrength getStructureStrength = this._wallRoot.gameObject.AddComponent <getStructureStrength>();
                getStructureStrength._type     = getStructureStrength.structureType.wall;
                getStructureStrength._strength = getStructureStrength.strength.veryStrong;
                this._wallRoot.gameObject.AddComponent <gridObjectBlocker>();
                if (!renderer)
                {
                    int       logCost   = this.GetLogCost();
                    bool      flag      = logCost % 2 == 0;
                    bool      flag2     = this._p1.y > this._p2.y;
                    Transform transform = new GameObject("DW LOD Skewer").transform;
                    transform.parent           = base.transform;
                    transform.localEulerAngles = ((!flag2) ? new Vector3(0f, 180f, 0f) : Vector3.zero);
                    transform.position         = this._p1 + transform.forward * (((float)logCost * 0.5f - 0.5f) * (float)((!flag2) ? -1 : 1) * base.LogWidth);
                    Transform transform2 = new GameObject("DW LOD").transform;
                    transform2.gameObject.layer = 21;
                    transform2.parent           = transform;
                    transform2.localPosition    = Vector3.zero;
                    Prefabs.Instance.Constructions._defensiveWallSkewLOD.SetSkew(transform, transform2, transform.eulerAngles.x);
                    renderer = transform2.gameObject.AddComponent <MeshRenderer>();
                    renderer.sharedMaterial = Prefabs.Instance.LogWallDefensiveExBuiltPrefabLOD1[0].sharedMaterial;
                    MeshFilter meshFilter = transform2.gameObject.AddComponent <MeshFilter>();
                    meshFilter.sharedMesh = Prefabs.Instance.LogWallDefensiveExBuiltPrefabLOD1[Mathf.Clamp(logCost, 0, Prefabs.Instance.LogWallDefensiveExBuiltPrefabLOD1.Length - 1)].GetComponent <MeshFilter>().sharedMesh;
                }
                LOD_GroupToggle lod_GroupToggle = this._wallRoot.gameObject.AddComponent <LOD_GroupToggle>();
                lod_GroupToggle.enabled    = false;
                lod_GroupToggle._levels    = new LOD_GroupToggle.LodLevel[2];
                lod_GroupToggle._levels[0] = new LOD_GroupToggle.LodLevel
                {
                    Renderers       = this._wallRoot.GetComponentsInChildren <Renderer>(),
                    VisibleDistance = 100f
                };
                lod_GroupToggle._levels[1] = new LOD_GroupToggle.LodLevel
                {
                    Renderers = new Renderer[]
                    {
                        renderer
                    },
                    VisibleDistance = 10000f
                };
            }
        }
Exemple #18
0
        protected override void CreateStructure(bool isRepair = false)
        {
            if (isRepair)
            {
                base.Clear();
                base.StartCoroutine(base.DelayedAwake(true));
            }
            Vector3 size = this._logRenderer.bounds.size;

            this._logLength       = size.y;
            this._logWidth        = size.z;
            this._wallRoot        = this.SpawnEdge();
            this._wallRoot.parent = base.transform;
            if (this._wasBuilt)
            {
                Vector3 vector  = this._wallRoot.InverseTransformVector(this._p2 - this._p1);
                Vector3 vector2 = new Vector3(this._logWidth, this._logLength, (!this.Is2Sided) ? Mathf.Abs(vector.z) : Mathf.Abs(vector.z / 2f));
                Vector3 center  = vector2 / 2f;
                center.x  = 0f;
                center.y -= 1f;
                center.z -= this._logWidth / 2f;
                GameObject gameObject = this._wallRoot.GetChild(0).gameObject;
                gameObject.tag   = "structure";
                gameObject.layer = LayerMask.NameToLayer("Prop");
                Rigidbody rigidbody = gameObject.AddComponent <Rigidbody>();
                rigidbody.useGravity  = false;
                rigidbody.isKinematic = true;
                BoxCollider boxCollider = gameObject.AddComponent <BoxCollider>();
                boxCollider.size   = vector2;
                boxCollider.center = center;
                gameObject.AddComponent <gridObjectBlocker>();
                gameObject.AddComponent <BuildingHealthHitRelay>();
                getStructureStrength getStructureStrength = gameObject.AddComponent <getStructureStrength>();
                getStructureStrength._type     = getStructureStrength.structureType.wall;
                getStructureStrength._strength = getStructureStrength.strength.veryStrong;
                GameObject gameObject2;
                if (this._wallRoot.childCount > 1)
                {
                    gameObject2       = this._wallRoot.GetChild(1).gameObject;
                    gameObject2.tag   = "structure";
                    gameObject2.layer = LayerMask.NameToLayer("Prop");
                    Rigidbody rigidbody2 = gameObject2.AddComponent <Rigidbody>();
                    rigidbody2.useGravity  = false;
                    rigidbody2.isKinematic = true;
                    boxCollider            = gameObject2.AddComponent <BoxCollider>();
                    boxCollider.size       = vector2;
                    boxCollider.center     = center;
                    gameObject2.AddComponent <gridObjectBlocker>();
                    gameObject2.AddComponent <BuildingHealthHitRelay>();
                    getStructureStrength getStructureStrength2 = gameObject2.AddComponent <getStructureStrength>();
                    getStructureStrength2._type     = getStructureStrength.structureType.wall;
                    getStructureStrength2._strength = getStructureStrength.strength.veryStrong;
                }
                else
                {
                    gameObject2 = null;
                }
                WallDefensiveGate wallDefensiveGate = UnityEngine.Object.Instantiate <WallDefensiveGate>(Prefabs.Instance.WallDefensiveGateTriggerPrefab);
                wallDefensiveGate.transform.parent        = this._wallRoot;
                wallDefensiveGate.transform.position      = new Vector3(this._wallRoot.position.x, this._wallRoot.position.y + 4f, this._wallRoot.position.z);
                wallDefensiveGate.transform.localRotation = Quaternion.identity;
                wallDefensiveGate._target1 = gameObject.transform;
                wallDefensiveGate._target2 = ((!gameObject2) ? null : gameObject2.transform);
            }
        }
        protected override void OnTriggerEnter(Collider other)
        {
            try
            {
                currState = animator.GetCurrentAnimatorStateInfo(0);
                nextState = animator.GetNextAnimatorStateInfo(0);
                if (currState.tagHash != damagedHash && currState.tagHash != staggerHash && currState.tagHash != hitStaggerHash && currState.tagHash != deathHash && nextState.tagHash != damagedHash && nextState.tagHash != staggerHash && nextState.tagHash != hitStaggerHash && nextState.tagHash != deathHash)
                {
                    if (other.gameObject.CompareTag("trapTrigger"))
                    {
                        other.gameObject.SendMessage("CutRope", SendMessageOptions.DontRequireReceiver);
                    }
                    if (!netPrefab && LocalPlayer.Animator && LocalPlayer.Animator.GetBool("deathBool"))
                    {
                        return;
                    }
                    if (other.gameObject.CompareTag("playerHitDetect") && mainTrigger)
                    {
                        if (!Scene.SceneTracker.hasAttackedPlayer)
                        {
                            Scene.SceneTracker.hasAttackedPlayer = true;
                            Scene.SceneTracker.Invoke("resetHasAttackedPlayer", Random.Range(120, 240));
                        }
                        targetStats component = other.transform.root.GetComponent <targetStats>();
                        if (component && component.targetDown)
                        {
                            return;
                        }
                        Animator componentInParent = other.gameObject.GetComponentInParent <Animator>();
                        Vector3  position          = rootTr.position;
                        position.y += 3.3f;
                        Vector3 direction = other.transform.position - position;
                        if (!Physics.Raycast(position, direction, out hit, direction.magnitude, enemyHitMask, QueryTriggerInteraction.Ignore))
                        {
                            if (!creepy_male && !creepy && !creepy_baby && !creepy_fat && events && componentInParent)
                            {
                                bool flag = InFront(other.gameObject);
                                if ((!BoltNetwork.isServer || !netPrefab) && flag && events.parryBool && (componentInParent.GetNextAnimatorStateInfo(1).tagHash == blockHash || componentInParent.GetCurrentAnimatorStateInfo(1).tagHash == blockHash))
                                {
                                    int parryDir = events.parryDir;
                                    BoltSetReflectedShim.SetIntegerReflected(animator, "parryDirInt", parryDir);
                                    if (BoltNetwork.isClient && netPrefab)
                                    {
                                        BoltSetReflectedShim.SetTriggerReflected(animator, "ClientParryTrigger");
                                        hitPrediction.StartParryPrediction();
                                        parryEnemy parryEnemy = parryEnemy.Create(GlobalTargets.OnlyServer);
                                        parryEnemy.Target = transform.root.GetComponent <BoltEntity>();
                                        parryEnemy.Send();
                                        FMODCommon.PlayOneshot(parryEvent, base.transform);
                                    }
                                    else
                                    {
                                        BoltSetReflectedShim.SetTriggerReflected(animator, "parryTrigger");
                                    }
                                    events.StartCoroutine("disableAllWeapons");
                                    playerHitReactions componentInParent2 = other.gameObject.GetComponentInParent <playerHitReactions>();
                                    if (componentInParent2 != null)
                                    {
                                        componentInParent2.enableParryState();
                                    }
                                    FMODCommon.PlayOneshotNetworked(parryEvent, base.transform, FMODCommon.NetworkRole.Server);
                                    events.parryBool = false;
                                    return;
                                }
                            }
                            if ((bool)events)
                            {
                                events.parryBool = false;
                            }
                            other.transform.root.SendMessage("getHitDirection", rootTr.position, SendMessageOptions.DontRequireReceiver);
                            int num = 0;
                            if (maleSkinny || femaleSkinny)
                            {
                                if (pale)
                                {
                                    num = ((!skinned) ? Mathf.FloorToInt(10f * GameSettings.Ai.skinnyDamageRatio) : Mathf.FloorToInt(10f * GameSettings.Ai.skinnyDamageRatio * GameSettings.Ai.skinMaskDamageRatio));
                                }
                                else
                                {
                                    num = Mathf.FloorToInt(13f * GameSettings.Ai.skinnyDamageRatio);
                                    if (maleSkinny && props.regularStick.activeSelf && events.leftHandWeapon)
                                    {
                                        num = Mathf.FloorToInt(num * 1.35f);
                                    }
                                }
                            }
                            else if (male && pale)
                            {
                                num = ((!skinned) ? Mathf.FloorToInt(22f * GameSettings.Ai.largePaleDamageRatio) : Mathf.FloorToInt(22f * GameSettings.Ai.largePaleDamageRatio * GameSettings.Ai.skinMaskDamageRatio));
                            }
                            else if (male && !firemanMain)
                            {
                                num = ((!painted) ? Mathf.FloorToInt(20f * GameSettings.Ai.regularMaleDamageRatio) : Mathf.FloorToInt(20f * GameSettings.Ai.regularMaleDamageRatio * GameSettings.Ai.paintedDamageRatio));
                            }
                            else if (female)
                            {
                                num = Mathf.FloorToInt(17f * GameSettings.Ai.regularFemaleDamageRatio);
                            }
                            else if (creepy)
                            {
                                num = ((!pale) ? Mathf.FloorToInt(28f * GameSettings.Ai.creepyDamageRatio) : Mathf.FloorToInt(35f * GameSettings.Ai.creepyDamageRatio));
                            }
                            else if (creepy_male)
                            {
                                num = ((!pale) ? Mathf.FloorToInt(30f * GameSettings.Ai.creepyDamageRatio) : Mathf.FloorToInt(40f * GameSettings.Ai.creepyDamageRatio));
                            }
                            else if (creepy_baby)
                            {
                                num = Mathf.FloorToInt(26f * GameSettings.Ai.creepyBabyDamageRatio);
                            }
                            else if (firemanMain)
                            {
                                num = Mathf.FloorToInt(12f * GameSettings.Ai.regularMaleDamageRatio);
                                if (events && !enemyAtStructure && !events.noFireAttack)
                                {
                                    if (BoltNetwork.isRunning && netPrefab)
                                    {
                                        other.gameObject.SendMessageUpwards("Burn", SendMessageOptions.DontRequireReceiver);
                                    }
                                    else
                                    {
                                        other.gameObject.SendMessageUpwards("Burn", SendMessageOptions.DontRequireReceiver);
                                    }
                                }
                            }
                            if (!female && male)
                            {
                                if (holdingRegularWeapon() && events.leftHandWeapon)
                                {
                                    num += 7;
                                }
                                else if (holdingAdvancedWeapon() && events.leftHandWeapon)
                                {
                                    num += 15;
                                }
                            }
                            if (setup && setup.health.poisoned)
                            {
                                num = Mathf.FloorToInt(num / 1.6f);
                            }

                            //My additional code
                            try
                            {
                                if (EnemyProg == null)
                                {
                                    EnemyProg = setup.health.gameObject.GetComponent <EnemyProgression>();
                                }
                                num = Mathf.RoundToInt(num * EnemyProg.DamageAmp);
                                BoltEntity bo = other.transform.root.GetComponent <BoltEntity>();
                                if (bo == null)
                                {
                                    bo = other.transform.root.GetComponentInChildren <BoltEntity>();
                                }


                                //POISON ATTACKS
                                if (EnemyProg.abilities.Contains(EnemyProgression.Abilities.Poisonous))
                                {
                                    if (BoltNetwork.isRunning)
                                    {
                                        if (BoltNetwork.isServer)
                                        {
                                            if (other.transform.root == LocalPlayer.Transform.root)
                                            {
                                                BuffDB.AddBuff(3, 32, num / 20, poisonDuration);
                                            }
                                            else
                                            {
                                                if (bo != null)
                                                {
                                                    Network.NetworkManager.SendLine("PO" + bo.networkId.PackedValue + ";32;" + num / 20 + ";" + poisonDuration, bo.controller);
                                                }
                                            }
                                        }
                                    }
                                    else
                                    {
                                        BuffDB.AddBuff(3, 32, num / 20, poisonDuration);
                                    }
                                }

                                //STUN ON HIT
                                if (EnemyProg.abilities.Contains(EnemyProgression.Abilities.Basher))
                                {
                                    if (BoltNetwork.isRunning)
                                    {
                                        if (BoltNetwork.isServer)
                                        {
                                            if (other.transform.root == LocalPlayer.Transform.root)
                                            {
                                                ModdedPlayer.instance.Stun(stunDuration);
                                            }
                                            else
                                            {
                                                if (bo != null)
                                                {
                                                    Network.NetworkManager.SendLine("ST" + bo.networkId.PackedValue + ";" + stunDuration + ";", bo.controller);
                                                }
                                            }
                                        }
                                    }
                                    else
                                    {
                                        ModdedPlayer.instance.Stun(stunDuration);
                                    }
                                }
                            }
                            catch (System.Exception ex)
                            {
                                ModAPI.Log.Write(ex.ToString());
                            }


                            PlayerStats component2 = other.transform.root.GetComponent <PlayerStats>();
                            if (male || female || creepy_male || creepy_fat || creepy || creepy_baby)
                            {
                                netId component3 = other.transform.GetComponent <netId>();
                                if (BoltNetwork.isServer && component3)
                                {
                                    other.transform.root.SendMessage("StartPrediction", SendMessageOptions.DontRequireReceiver);
                                    return;
                                }
                                if (BoltNetwork.isClient && netPrefab && !(bool)component3)
                                {
                                    other.transform.root.SendMessage("setCurrentAttacker", this, SendMessageOptions.DontRequireReceiver);
                                    other.transform.root.SendMessage("hitFromEnemy", num, SendMessageOptions.DontRequireReceiver);
                                    other.transform.root.SendMessage("StartPrediction", SendMessageOptions.DontRequireReceiver);
                                }
                                else if (BoltNetwork.isServer)
                                {
                                    if (!(bool)component3)
                                    {
                                        other.transform.root.SendMessage("setCurrentAttacker", this, SendMessageOptions.DontRequireReceiver);
                                        other.transform.root.SendMessage("hitFromEnemy", num, SendMessageOptions.DontRequireReceiver);
                                    }
                                }
                                else if (!BoltNetwork.isRunning && component2)
                                {
                                    component2.setCurrentAttacker(this);
                                    component2.hitFromEnemy(num);
                                }
                            }
                            else if (!netPrefab && component2)
                            {
                                component2.setCurrentAttacker(this);
                                component2.hitFromEnemy(num);
                            }



                            goto IL_092f;
                        }
                        return;
                    }
                    goto IL_092f;
                }
                return;

IL_092f:
                if (other.gameObject.CompareTag("enemyCollide") && mainTrigger && bodyCollider && !enemyAtStructure)
                {
                    setupAttackerType();
                    if (other.gameObject != bodyCollider)
                    {
                        other.transform.SendMessageUpwards("getAttackDirection", Random.Range(0, 2), SendMessageOptions.DontRequireReceiver);
                        other.transform.SendMessageUpwards("getCombo", Random.Range(1, 4), SendMessageOptions.DontRequireReceiver);
                        other.transform.SendMessage("getAttackerType", attackerType, SendMessageOptions.DontRequireReceiver);
                        other.transform.SendMessage("getAttacker", rootTr.gameObject, SendMessageOptions.DontRequireReceiver);
                        other.transform.SendMessageUpwards("Hit", 6, SendMessageOptions.DontRequireReceiver);
                        FMODCommon.PlayOneshotNetworked(weaponHitEvent, base.transform, FMODCommon.NetworkRole.Server);
                    }
                }
                if (other.gameObject.CompareTag("BreakableWood") || (other.gameObject.CompareTag("BreakableRock") && mainTrigger))
                {
                    other.transform.SendMessage("Hit", 50, SendMessageOptions.DontRequireReceiver);
                    other.SendMessage("LocalizedHit", new LocalizedHitData(base.transform.position, 50f), SendMessageOptions.DontRequireReceiver);
                    FMODCommon.PlayOneshotNetworked(weaponHitEvent, base.transform, FMODCommon.NetworkRole.Server);
                }
                if (other.gameObject.CompareTag("SmallTree") && !mainTrigger)
                {
                    other.SendMessage("Hit", 2, SendMessageOptions.DontRequireReceiver);
                }
                if (other.gameObject.CompareTag("Fire") && mainTrigger && firemanMain && !events.noFireAttack)
                {
                    other.SendMessage("Burn", SendMessageOptions.DontRequireReceiver);
                }
                if (other.gameObject.CompareTag("Tree") && mainTrigger && creepy_male)
                {
                    other.SendMessage("Explosion", 5f, SendMessageOptions.DontRequireReceiver);
                    FMODCommon.PlayOneshotNetworked(weaponHitEvent, base.transform, FMODCommon.NetworkRole.Server);
                }
                if (!other.gameObject.CompareTag("structure") && !other.gameObject.CompareTag("SLTier1") && !other.gameObject.CompareTag("SLTier2") && !other.gameObject.CompareTag("SLTier3") && !other.gameObject.CompareTag("jumpObject") && !other.gameObject.CompareTag("UnderfootWood"))
                {
                    return;
                }
                if (!mainTrigger)
                {
                    return;
                }
                getStructureStrength component4 = other.gameObject.GetComponent <getStructureStrength>();
                bool flag2 = false;
                if (component4 == null)
                {
                    flag2 = true;
                }
                enemyAtStructure = true;
                int num2 = 0;
                if (!creepy_male && !creepy && !creepy_fat && !creepy_baby)
                {
                    if (!flag2)
                    {
                        num2 = ((maleSkinny || femaleSkinny) ? ((component4._strength == getStructureStrength.strength.weak) ? Mathf.FloorToInt(8f * GameSettings.Ai.regularStructureDamageRatio) : 0) : ((pale || painted || skinned) ? ((component4._strength != getStructureStrength.strength.veryStrong) ? Mathf.FloorToInt(16f * GameSettings.Ai.regularStructureDamageRatio) : 0) : ((component4._strength != getStructureStrength.strength.veryStrong) ? Mathf.FloorToInt(12f * GameSettings.Ai.regularStructureDamageRatio) : 0)));
                        goto IL_0d63;
                    }
                    return;
                }
                num2 = ((!creepy_baby) ? Mathf.FloorToInt(30f * GameSettings.Ai.creepyStructureDamageRatio) : Mathf.FloorToInt(10f * GameSettings.Ai.creepyStructureDamageRatio));
                goto IL_0d63;
IL_0d63:
                if (setup && setup.health.poisoned)
                {
                    num2 /= 2;
                }
                other.SendMessage("Hit", num2, SendMessageOptions.DontRequireReceiver);
                other.SendMessage("LocalizedHit", new LocalizedHitData(base.transform.position, num2), SendMessageOptions.DontRequireReceiver);
                FMODCommon.PlayOneshotNetworked(weaponHitEvent, base.transform, FMODCommon.NetworkRole.Server);
            }
            catch (System.Exception ee)
            {
                ModAPI.Log.Write(ee.ToString());
            }
        }
Exemple #20
0
        private IEnumerator OnPlaced()
        {
            this._wasPlaced = true;
            base.enabled    = false;
            this._craftStructure.GetComponent <Collider>().enabled = false;
            Scene.HudGui.RoofConstructionIcons.Shutdown();
            yield return(null);

            if (this._craftStructure)
            {
                UnityEngine.Object.Destroy(base.GetComponent <Rigidbody>());
                UnityEngine.Object.Destroy(base.GetComponent <Collider>());
                UnityEngine.Object.Destroy(base.GetComponent <Renderer>());
                Transform newStairs = this.SpawnStairs();
                if (this._stairsRoot)
                {
                    UnityEngine.Object.Destroy(this._stairsRoot.gameObject);
                }
                this._stairsRoot = newStairs;
                Transform ghostRoot = this._stairsRoot;
                Transform transform = ghostRoot;
                transform.name += "Ghost";
                this._logPool.Clear();
                Transform logGhostPrefab   = this._logPrefabs[0];
                Transform StiltGhostPrefab = this._stiltPrefab;
                this._logPrefabs[0]   = Prefabs.Instance.LogStairsBuiltPrefab;
                this._stiltPrefab     = Prefabs.Instance.LogStiltStairsGhostBuiltPrefab;
                this._stairsRoot      = this.SpawnStairs();
                this._stairsRoot.name = "StairsRootBuilt";
                this._logPool         = null;
                this._newPool         = null;
                Craft_Structure.BuildIngredients ri = this._craftStructure._requiredIngredients.FirstOrDefault((Craft_Structure.BuildIngredients i) => i._itemID == this.$this._logItemId);
                List <GameObject> logStacks         = new List <GameObject>();
                IEnumerator       enumerator        = this._stairsRoot.GetEnumerator();
                try
                {
                    while (enumerator.MoveNext())
                    {
                        object      obj         = enumerator.Current;
                        Transform   transform2  = (Transform)obj;
                        IEnumerator enumerator2 = transform2.GetEnumerator();
                        try
                        {
                            while (enumerator2.MoveNext())
                            {
                                object    obj2       = enumerator2.Current;
                                Transform transform3 = (Transform)obj2;
                                transform3.gameObject.SetActive(false);
                                logStacks.Add(transform3.gameObject);
                            }
                        }
                        finally
                        {
                            IDisposable disposable;
                            if ((disposable = (enumerator2 as IDisposable)) != null)
                            {
                                disposable.Dispose();
                            }
                        }
                    }
                }
                finally
                {
                    IDisposable disposable2;
                    if ((disposable2 = (enumerator as IDisposable)) != null)
                    {
                        disposable2.Dispose();
                    }
                }
                ri._renderers              = logStacks.ToArray();
                ri._amount                += logStacks.Count;
                this._logPrefabs[0]        = logGhostPrefab;
                this._stiltPrefab          = StiltGhostPrefab;
                ghostRoot.transform.parent = null;
                base.transform.position    = this._multiPointsPositions.First <Vector3>();
                base.transform.LookAt(this._multiPointsPositions.Last <Vector3>());
                this._stairsRoot.transform.parent = base.transform;
                ghostRoot.transform.parent        = base.transform;
                BoxCollider bc;
                if (this._craftStructure.GetComponent <Collider>() is BoxCollider)
                {
                    bc = (BoxCollider)this._craftStructure.GetComponent <Collider>();
                }
                else
                {
                    bc           = this._craftStructure.gameObject.AddComponent <BoxCollider>();
                    bc.isTrigger = true;
                }
                Bounds b = default(Bounds);
                foreach (Vector3 position in this._multiPointsPositions)
                {
                    b.Encapsulate(this._craftStructure.transform.InverseTransformPoint(position));
                }
                b.Encapsulate(this._craftStructure.transform.InverseTransformPoint(this.GetPointFloorPosition(this._craftStructure.transform.position)));
                Vector3 localSize = b.size;
                localSize.x = Mathf.Max(localSize.x, 6f);
                localSize.y = Mathf.Max(localSize.y, 3f);
                localSize.z = Mathf.Max(localSize.z, 3f);
                bc.size     = localSize;
                bc.center   = b.center;
                bc.enabled  = true;
                yield return(null);

                this._craftStructure.manualLoading = true;
                while (LevelSerializer.IsDeserializing && !this._craftStructure.WasLoaded)
                {
                    yield return(null);
                }
                this._craftStructure.Initialize();
                this._craftStructure.gameObject.SetActive(true);
                yield return(null);

                bc.enabled = false;
                bc.enabled = true;
                if (!this._craftStructure.gameObject.GetComponent <getStructureStrength>())
                {
                    getStructureStrength getStructureStrength = this._craftStructure.gameObject.AddComponent <getStructureStrength>();
                    getStructureStrength._strength = getStructureStrength.strength.normal;
                    getStructureStrength._type     = getStructureStrength.structureType.floor;
                }
            }
            yield break;
        }
Exemple #21
0
        protected virtual void CreateStructure(bool isRepair = false)
        {
            if (isRepair)
            {
                this.Clear();
                base.StartCoroutine(this.DelayedAwake(true));
            }
            int num = LayerMask.NameToLayer("Prop");

            this._wallRoot        = this.SpawnStructure();
            this._wallRoot.parent = base.transform;
            if (this._wasBuilt)
            {
                this._gridToken = InsideCheck.AddWallChunk(this._p1, this._p2, 4.75f * this._logWidth + 1f);
                if (this._lods)
                {
                    UnityEngine.Object.Destroy(this._lods.gameObject);
                }
                this._lods = new GameObject("lods").AddComponent <WallChunkLods>();
                this._lods.transform.parent = base.transform;
                this._lods.DefineChunk(this._p1, this._p2, 4.44f * this._logWidth, this._wallRoot, this.Addition);
                if (!this._wallCollision)
                {
                    GameObject gameObject = new GameObject("collision");
                    gameObject.transform.parent   = this._wallRoot.parent;
                    gameObject.transform.position = this._wallRoot.position;
                    gameObject.transform.rotation = this._wallRoot.rotation;
                    gameObject.tag      = "structure";
                    this._wallCollision = gameObject.transform;
                    GameObject gameObject2 = this._wallRoot.gameObject;
                    int        layer       = num;
                    gameObject.layer  = layer;
                    gameObject2.layer = layer;
                    float   num3;
                    float   num4;
                    Vector3 size;
                    Vector3 vector;
                    if (this.UseHorizontalLogs)
                    {
                        float num2 = Vector3.Distance(this._p1, this._p2) / this._logLength;
                        num3     = 7.4f * num2;
                        num4     = 6.75f * (0.31f + (num2 - 1f) / 2f);
                        size     = new Vector3(1.75f, 0.9f * this._height * this._logWidth, num3 * 1f);
                        vector   = Vector3.Lerp(this._p1, this._p2, 0.5f);
                        vector   = this._wallRoot.InverseTransformPoint(vector);
                        vector.y = size.y / 2f - this._logWidth / 2f;
                    }
                    else
                    {
                        num3   = this._logWidth * (float)(this._wallRoot.childCount - 1) + 1.5f;
                        num4   = 0f;
                        vector = Vector3.zero;
                        IEnumerator enumerator = this._wallRoot.GetEnumerator();
                        try
                        {
                            while (enumerator.MoveNext())
                            {
                                object    obj       = enumerator.Current;
                                Transform transform = (Transform)obj;
                                vector += transform.position;
                            }
                        }
                        finally
                        {
                            IDisposable disposable;
                            if ((disposable = (enumerator as IDisposable)) != null)
                            {
                                disposable.Dispose();
                            }
                        }
                        size     = new Vector3(1.75f, 0.92f * this._height * this._logWidth, num3);
                        vector  /= (float)this._wallRoot.childCount;
                        vector   = this._wallRoot.InverseTransformPoint(vector);
                        vector.y = size.y / 2f - this._logWidth / 2f;
                    }
                    getStructureStrength getStructureStrength = gameObject.AddComponent <getStructureStrength>();
                    getStructureStrength._strength = getStructureStrength.strength.strong;
                    BoxCollider boxCollider = gameObject.AddComponent <BoxCollider>();
                    boxCollider.center    = vector;
                    boxCollider.size      = size;
                    boxCollider.isTrigger = true;
                    BuildingHealth component = base.GetComponent <BuildingHealth>();
                    if (component)
                    {
                        component._renderersRoot = this._wallRoot.gameObject;
                    }
                    WallChunkArchitect.Additions addition = this._addition;
                    if (addition != WallChunkArchitect.Additions.Wall)
                    {
                        BoxCollider boxCollider2 = null;
                        if (this._height > 4f)
                        {
                            vector.y           += this._logWidth * 2f;
                            size.y              = 1f * this._logWidth;
                            boxCollider2        = gameObject.AddComponent <BoxCollider>();
                            boxCollider2.center = vector;
                            boxCollider2.size   = size;
                        }
                        FMOD_StudioEventEmitter.CreateAmbientEmitter(gameObject.transform, gameObject.transform.TransformPoint(vector), "event:/ambient/wind/wind_moan_structures");
                        size.y   = Mathf.Clamp(this._height, 0f, 4f) * this._logWidth;
                        size.z   = num4;
                        vector.y = size.y / 2f - this._logWidth / 2f;
                        vector.z = num3 - num4 / 2f;
                        BoxCollider boxCollider3 = gameObject.AddComponent <BoxCollider>();
                        boxCollider3.center = vector;
                        boxCollider3.size   = size;
                        vector.z            = num4 / 2f;
                        BoxCollider boxCollider4 = gameObject.AddComponent <BoxCollider>();
                        boxCollider4.center = vector;
                        boxCollider4.size   = size;
                        if (this._addition == WallChunkArchitect.Additions.Window)
                        {
                            size.y    = this._logWidth * 1.9f;
                            size.z    = num3 - num4 * 2f;
                            vector.z += num4 / 2f + size.z / 2f;
                            vector.y  = size.y / 2f - this._logWidth / 2f;
                            BoxCollider boxCollider5 = gameObject.AddComponent <BoxCollider>();
                            boxCollider5.center = vector;
                            boxCollider5.size   = size;
                            GameObject     gameObject3    = new GameObject("PerchTarget");
                            SphereCollider sphereCollider = gameObject3.AddComponent <SphereCollider>();
                            sphereCollider.isTrigger     = true;
                            sphereCollider.radius        = 0.145f;
                            gameObject3.transform.parent = this._wallRoot;
                            vector.y += size.y / 2f;
                            gameObject3.transform.localPosition = vector;
                            if (BoltNetwork.isRunning)
                            {
                                if (boxCollider2)
                                {
                                    component.SetMpRandomDistortColliders(new Collider[]
                                    {
                                        boxCollider2,
                                        boxCollider4,
                                        boxCollider3,
                                        boxCollider5
                                    });
                                }
                                else
                                {
                                    component.SetMpRandomDistortColliders(new Collider[]
                                    {
                                        boxCollider4,
                                        boxCollider3,
                                        boxCollider5
                                    });
                                }
                            }
                        }
                        else if (BoltNetwork.isRunning)
                        {
                            component.SetMpRandomDistortColliders(new Collider[]
                            {
                                boxCollider2,
                                boxCollider4,
                                boxCollider3
                            });
                        }
                    }
                    else
                    {
                        BoxCollider boxCollider6 = gameObject.AddComponent <BoxCollider>();
                        boxCollider6.center = vector;
                        boxCollider6.size   = size;
                        if (BoltNetwork.isRunning)
                        {
                            component.SetMpRandomDistortColliders(new Collider[]
                            {
                                boxCollider6
                            });
                        }
                    }
                    gridObjectBlocker gridObjectBlocker = gameObject.AddComponent <gridObjectBlocker>();
                    gridObjectBlocker.ignoreOnDisable = true;
                    addToBuilt addToBuilt = gameObject.AddComponent <addToBuilt>();
                    addToBuilt.addToStructures = true;
                    BuildingHealthHitRelay buildingHealthHitRelay = gameObject.AddComponent <BuildingHealthHitRelay>();
                }
                if (this.Addition >= WallChunkArchitect.Additions.Door1 && this._addition <= WallChunkArchitect.Additions.LockedDoor2 && !isRepair)
                {
                    Vector3 position = Vector3.Lerp(this._p1, this._p2, 0.5f);
                    position.y -= this._logWidth / 2f;
                    Vector3 worldPosition = (this._addition != WallChunkArchitect.Additions.Door1 && this._addition != WallChunkArchitect.Additions.LockedDoor1) ? this._p1 : this._p2;
                    worldPosition.y = position.y;
                    Transform transform2 = UnityEngine.Object.Instantiate <Transform>(Prefabs.Instance.DoorPrefab, position, this._wallRoot.rotation);
                    transform2.LookAt(worldPosition);
                    transform2.parent = base.transform;
                }
            }
        }
Exemple #22
0
        private GameObject SpawnEdge(FoundationArchitect.Edge edge, int edgeNum)
        {
            GameObject gameObject = new GameObject("Edge" + edgeNum);
            Transform  transform  = gameObject.transform;

            gameObject.transform.position = edge._p1;
            float      num                = edge._hlength / (float)edge._segments.Length;
            Vector3    localScale         = new Vector3(1f, 1f, num / this._logLength);
            Vector3    localScale2        = new Vector3(1f, 1f, this.CalcDiagonalLength(1f, localScale.z));
            Vector3    vector             = edge._axis / 2f;
            Vector3    b                  = new Vector3(0f, this._logLength / 2f, 0f);
            Vector3    b2                 = new Vector3(0f, this._logLength, 0f);
            Quaternion rotation           = Quaternion.Euler(90f, 0f, 0f);
            Quaternion rotation2          = Quaternion.LookRotation(edge._axis);
            Vector3    forward            = vector - b;
            Quaternion rotation3          = Quaternion.LookRotation(forward);
            float      logStackScaleRatio = (this._maxScaleLogCost <= 0f) ? 0f : (this._maxLogScale / this._maxScaleLogCost);
            float      num2               = 0f;
            Transform  transform2         = transform;

            edge._totalLogs = 0;
            int num3 = this._edges.Take(edgeNum).Sum((FoundationArchitect.Edge e) => e._segments.Length);

            string[] array = new string[]
            {
                "SLTier1",
                "SLTier2",
                "SLTier3"
            };
            float num4 = b2.y * (float)Mathf.CeilToInt(this.MaxHeight / b2.y / 3f) - 0.4f;

            for (int i = 0; i < edge._segments.Length; i++)
            {
                FoundationArchitect.HorizontalSegment horizontalSegment = edge._segments[i];
                Vector3 vector2 = Vector3.zero;
                num2 = 0f;
                Transform transform3 = new GameObject(i.ToString()).transform;
                transform3.parent = transform;
                int  j    = 0;
                bool flag = this._wasBuilt;
                for (int k = 0; k < horizontalSegment._segments.Length; k++)
                {
                    if (this.SegmentTierValidation(num3 + i, j))
                    {
                        FoundationArchitect.VerticalSegment verticalSegment = horizontalSegment._segments[k];
                        if (flag)
                        {
                            flag                = false;
                            transform2          = new GameObject("t").transform;
                            transform2.parent   = transform3;
                            transform2.position = horizontalSegment._p1 - vector2 + vector - new Vector3(0f, num4 / 2f, 0f);
                            transform2.rotation = rotation2;
                            transform2.tag      = array[j];
                            BoxCollider boxCollider = transform2.gameObject.AddComponent <BoxCollider>();
                            boxCollider.size = new Vector3(1.1f, num4 + 0.4f, 4.8f * localScale.z);
                            FoundationChunkTier foundationChunkTier = transform2.gameObject.AddComponent <FoundationChunkTier>();
                            foundationChunkTier._edgeNum    = edgeNum;
                            foundationChunkTier._segmentNum = i;
                            foundationChunkTier._tierNum    = j;
                            this._chunks.Add(foundationChunkTier);
                            transform2.gameObject.AddComponent <gridObjectBlocker>();
                            getStructureStrength getStructureStrength = transform2.gameObject.AddComponent <getStructureStrength>();
                            getStructureStrength._strength = getStructureStrength.strength.strong;
                        }
                        if (edge._isFirst && i == 0)
                        {
                            edge._totalLogs++;
                            Transform transform4 = this.NewLog(edge._p1 - vector2 - b, rotation);
                            if (!this._wasBuilt)
                            {
                                this.StackLogsByScale(ref num2, logStackScaleRatio, 1f, ref transform2, transform4, transform3);
                            }
                            else
                            {
                                transform4.parent = transform2;
                            }
                            transform4.localScale = Vector3.one;
                            this._newPool.Push(transform4);
                        }
                        if (!edge._isClosing || i + 1 < edge._segments.Length)
                        {
                            edge._totalLogs++;
                            Transform transform5 = this.NewLog(horizontalSegment._p2 - vector2 - b, rotation);
                            if (!this._wasBuilt)
                            {
                                this.StackLogsByScale(ref num2, logStackScaleRatio, 1f, ref transform2, transform5, transform3);
                            }
                            else
                            {
                                transform5.parent = transform2;
                            }
                            transform5.localScale = Vector3.one;
                            this._newPool.Push(transform5);
                        }
                        edge._totalLogs++;
                        Transform transform6 = this.NewLog(horizontalSegment._p1 - vector2 + vector, rotation2);
                        if (!this._wasBuilt)
                        {
                            this.StackLogsByScale(ref num2, logStackScaleRatio, localScale.z, ref transform2, transform6, transform3);
                        }
                        else
                        {
                            transform6.parent = transform2;
                        }
                        transform6.localScale = localScale;
                        this._newPool.Push(transform6);
                        if (verticalSegment._diag)
                        {
                            edge._totalLogs++;
                            transform6 = this.NewLog(transform6.position - b, rotation3);
                            if (!this._wasBuilt)
                            {
                                this.StackLogsByScale(ref num2, logStackScaleRatio, localScale.z, ref transform2, transform6, transform3);
                            }
                            else
                            {
                                transform6.parent = transform2;
                            }
                            transform6.localScale = localScale2;
                            this._newPool.Push(transform6);
                        }
                    }
                    vector2 += b2;
                    if (this._wasBuilt && j < 2 && vector2.y > num4 * (float)(1 + j))
                    {
                        j++;
                        flag = true;
                    }
                }
                if (!flag)
                {
                    j++;
                }
                while (j <= 2)
                {
                    this._chunks.Add(null);
                    j++;
                }
            }
            if (edge._isFirst)
            {
                this._foundationRoot.transform.position = edge._p1;
            }
            gameObject.transform.parent = this._foundationRoot.transform;
            return(gameObject);
        }
        protected override void OnTriggerEnter(Collider other)
        {
            try
            {
                currState = animator.GetCurrentAnimatorStateInfo(0);
                nextState = animator.GetNextAnimatorStateInfo(0);
                if (currState.tagHash != damagedHash && currState.tagHash != staggerHash && currState.tagHash != hitStaggerHash && currState.tagHash != deathHash && nextState.tagHash != damagedHash && nextState.tagHash != staggerHash && nextState.tagHash != hitStaggerHash && nextState.tagHash != deathHash)
                {
                    if (other.gameObject.CompareTag("trapTrigger"))
                    {
                        other.gameObject.SendMessage("CutRope", SendMessageOptions.DontRequireReceiver);
                    }
                    if (!netPrefab && LocalPlayer.Animator && LocalPlayer.Animator.GetBool("deathBool"))
                    {
                        return;
                    }
                    if (other.gameObject.CompareTag("playerHitDetect") && mainTrigger)
                    {
                        if (!Scene.SceneTracker.hasAttackedPlayer)
                        {
                            Scene.SceneTracker.hasAttackedPlayer = true;
                            Scene.SceneTracker.Invoke("resetHasAttackedPlayer", Random.Range(120, 240));
                        }
                        targetStats component = other.transform.root.GetComponent <targetStats>();
                        if (component && component.targetDown)
                        {
                            return;
                        }
                        Animator componentInParent = other.gameObject.GetComponentInParent <Animator>();
                        Vector3  position          = rootTr.position;
                        position.y += 3.3f;
                        Vector3 direction = other.transform.position - position;
                        if (!Physics.Raycast(position, direction, out hit, direction.magnitude, enemyHitMask, QueryTriggerInteraction.Ignore))
                        {
                            bool doParry = SpellActions.ParryAnythingIsTimed;
                            if (doParry || (!creepy_male && !creepy && !creepy_baby && !creepy_fat && events))
                            {
                                if (componentInParent)
                                {
                                    bool flag = InFront(other.gameObject);
                                    if (doParry || ((!BoltNetwork.isServer || !netPrefab) && flag && events.parryBool && ((componentInParent.GetNextAnimatorStateInfo(1).tagHash == blockHash || componentInParent.GetCurrentAnimatorStateInfo(1).tagHash == blockHash))))
                                    {
                                        SpellActions.DoParry(transform.position);
                                        ModAPI.Console.Write("Parrying successful");

                                        if ((!creepy_male && !creepy && !creepy_baby && !creepy_fat && events))
                                        {
                                            int parryDir = events != null ? events.parryDir : 1;
                                            BoltSetReflectedShim.SetIntegerReflected(animator, "parryDirInt", parryDir);
                                            if (BoltNetwork.isClient && netPrefab)
                                            {
                                                BoltSetReflectedShim.SetTriggerReflected(animator, "ClientParryTrigger");
                                                hitPrediction.StartParryPrediction();
                                                FMODCommon.PlayOneshot(parryEvent, base.transform);
                                                parryEnemy parryEnemy = parryEnemy.Create(GlobalTargets.OnlyServer);
                                                parryEnemy.Target = transform.root.GetComponent <BoltEntity>();
                                                parryEnemy.Send();
                                            }
                                            else
                                            {
                                                BoltSetReflectedShim.SetTriggerReflected(animator, "parryTrigger");
                                            }
                                            events.StartCoroutine("disableAllWeapons");
                                            playerHitReactions componentInParent2 = other.gameObject.GetComponentInParent <playerHitReactions>();
                                            if (componentInParent2 != null)
                                            {
                                                componentInParent2.enableParryState();
                                            }
                                            FMODCommon.PlayOneshotNetworked(parryEvent, base.transform, FMODCommon.NetworkRole.Server);
                                            events.parryBool = false;
                                        }
                                        return;
                                    }
                                }
                            }
                            if ((bool)events)
                            {
                                events.parryBool = false;
                            }
                            other.transform.root.SendMessage("getHitDirection", rootTr.position, SendMessageOptions.DontRequireReceiver);
                            float num = 0;
                            if (maleSkinny || femaleSkinny)
                            {
                                if (pale)
                                {
                                    num = ((!skinned) ? Mathf.Floor(10f * GameSettings.Ai.skinnyDamageRatio) : Mathf.Floor(10f * GameSettings.Ai.skinnyDamageRatio * GameSettings.Ai.skinMaskDamageRatio));
                                }
                                else
                                {
                                    num = Mathf.Floor(13f * GameSettings.Ai.skinnyDamageRatio);
                                    if (maleSkinny && props.regularStick.activeSelf && events.leftHandWeapon)
                                    {
                                        num = Mathf.Floor(num * 1.35f);
                                    }
                                }
                            }
                            else if (male && pale)
                            {
                                num = ((!skinned) ? Mathf.Floor(22f * GameSettings.Ai.largePaleDamageRatio) : Mathf.Floor(22f * GameSettings.Ai.largePaleDamageRatio * GameSettings.Ai.skinMaskDamageRatio));
                            }
                            else if (male && !firemanMain)
                            {
                                num = ((!painted) ? Mathf.Floor(20f * GameSettings.Ai.regularMaleDamageRatio) : Mathf.Floor(20f * GameSettings.Ai.regularMaleDamageRatio * GameSettings.Ai.paintedDamageRatio));
                            }
                            else if (female)
                            {
                                num = Mathf.Floor(17f * GameSettings.Ai.regularFemaleDamageRatio);
                            }
                            else if (creepy)
                            {
                                num = ((!pale) ? Mathf.Floor(28f * GameSettings.Ai.creepyDamageRatio) : Mathf.Floor(35f * GameSettings.Ai.creepyDamageRatio));
                            }
                            else if (creepy_male)
                            {
                                num = ((!pale) ? Mathf.Floor(60f * GameSettings.Ai.creepyDamageRatio) : Mathf.Floor(120f * GameSettings.Ai.creepyDamageRatio));
                            }
                            else if (creepy_baby)
                            {
                                num = Mathf.Floor(26f * GameSettings.Ai.creepyBabyDamageRatio);
                            }
                            else if (firemanMain)
                            {
                                num = Mathf.Floor(12f * GameSettings.Ai.regularMaleDamageRatio);
                                if (events && !enemyAtStructure && !events.noFireAttack)
                                {
                                    if (BoltNetwork.isRunning && netPrefab)
                                    {
                                        other.gameObject.SendMessageUpwards("Burn", SendMessageOptions.DontRequireReceiver);
                                    }
                                    else
                                    {
                                        other.gameObject.SendMessageUpwards("Burn", SendMessageOptions.DontRequireReceiver);
                                    }
                                }
                            }
                            if (!female && male)
                            {
                                if (holdingRegularWeapon() && events.leftHandWeapon)
                                {
                                    num += 7;
                                }
                                else if (holdingAdvancedWeapon() && events.leftHandWeapon)
                                {
                                    num += 15;
                                }
                            }
                            if (setup && setup.health.poisoned)
                            {
                                num = Mathf.Floor(num / 2);
                            }

                            //COTF additional code
                            try
                            {
                                if (GameSetup.IsMpClient)
                                {
                                    if (other.transform.root == LocalPlayer.Transform.root)
                                    {
                                        var x = EnemyManager.clientEnemies[entity.networkId.PackedValue];
                                        num = x.damagemult + num - 20f;
                                        if (x.abilities.Contains(EnemyProgression.Abilities.RainEmpowerment))
                                        {
                                            if (Scene.WeatherSystem.Raining)
                                            {
                                                num *= 5;
                                            }
                                        }
                                        hitDamage = num;
                                        if (x.abilities.Contains(EnemyProgression.Abilities.Poisonous))
                                        {
                                            BuffDB.AddBuff(3, 32, Mathf.Sqrt(num / 10) / 7, poisonDuration);
                                        }
                                        if (x.abilities.Contains(EnemyProgression.Abilities.Basher))
                                        {
                                            ModdedPlayer.instance.Stun(stunDuration);
                                        }
                                        if (ModdedPlayer.Stats.TotalThornsDamage > 0)
                                        {
                                            if (ModdedPlayer.Stats.TotalThornsArmorPiercing > 0)
                                            {
                                                EnemyProgression.ReduceArmor(entity, ModdedPlayer.Stats.TotalThornsArmorPiercing);
                                            }

                                            PlayerHitEnemy playerHitEnemy = PlayerHitEnemy.Create(GlobalTargets.OnlyServer);
                                            playerHitEnemy.Target = entity;
                                            //this integer make the attack not stagger the enemy
                                            playerHitEnemy.getAttackerType = 2000000;
                                            playerHitEnemy.Hit             = DamageMath.GetSendableDamage(ModdedPlayer.Stats.TotalThornsDamage);
                                            playerHitEnemy.Send();
                                        }
                                    }
                                }
                                else
                                {
                                    if (other.transform.root == LocalPlayer.Transform.root && EnemyManager.enemyByTransform.ContainsKey(this.rootTr))
                                    {
                                        if (EnemyProg == null)
                                        {
                                            EnemyProg = EnemyManager.enemyByTransform[this.rootTr];
                                        }
                                        num = EnemyProg.DamageAmp * EnemyProg.DebuffDmgMult + num - 20f;

                                        hitDamage = num;
                                        CotfUtils.Log($"Damage dealt to player: d{hitDamage}  amp{EnemyProg.DamageAmp}  lv{EnemyProg.level}  php{hitDamage*100 / ModdedPlayer.Stats.TotalMaxHealth}%", true);

                                        //POISON ATTACKS
                                        if (EnemyProg.abilities.Contains(EnemyProgression.Abilities.Poisonous))
                                        {
                                            BuffDB.AddBuff(3, 32, Mathf.Sqrt(num / 10) / 10, poisonDuration);
                                        }

                                        //STUN ON HIT
                                        if (EnemyProg.abilities.Contains(EnemyProgression.Abilities.Basher))
                                        {
                                            ModdedPlayer.instance.Stun(stunDuration);
                                        }

                                        if (ModdedPlayer.Stats.TotalThornsDamage > 0)
                                        {
                                            EnemyProg.HitPhysicalSilent(ModdedPlayer.Stats.TotalThornsDamage);
                                            if (ModdedPlayer.Stats.TotalThornsArmorPiercing > 0)
                                            {
                                                EnemyProg.ReduceArmor(ModdedPlayer.Stats.TotalThornsArmorPiercing);
                                            }
                                        }
                                    }
                                }
                            }
                            catch (System.Exception ex)
                            {
                                ModAPI.Log.Write(ex.ToString());
                            }
                            PlayerStats component2 = other.transform.root.GetComponent <PlayerStats>();
                            if (male || female || creepy_male || creepy_fat || creepy || creepy_baby)
                            {
                                netId component3 = other.transform.GetComponent <netId>();
                                if (BoltNetwork.isServer && component3)
                                {
                                    other.transform.root.SendMessage("StartPrediction", SendMessageOptions.DontRequireReceiver);
                                    return;
                                }
                                if (BoltNetwork.isClient && netPrefab && !(bool)component3)
                                {
                                    other.transform.root.SendMessage("setCurrentAttacker", this, SendMessageOptions.DontRequireReceiver);
                                    other.transform.root.SendMessage("hitFromEnemy", Mathf.RoundToInt(num), SendMessageOptions.DontRequireReceiver);
                                    other.transform.root.SendMessage("StartPrediction", SendMessageOptions.DontRequireReceiver);
                                }
                                else if (BoltNetwork.isServer)
                                {
                                    if (!(bool)component3)
                                    {
                                        other.transform.root.SendMessage("setCurrentAttacker", this, SendMessageOptions.DontRequireReceiver);
                                        other.transform.root.SendMessage("hitFromEnemy", Mathf.RoundToInt(num), SendMessageOptions.DontRequireReceiver);
                                    }
                                }
                                else if (!BoltNetwork.isRunning && component2)
                                {
                                    component2.setCurrentAttacker(this);
                                    component2.hitFromEnemy(Mathf.RoundToInt(num));
                                }
                            }
                            else if (!netPrefab && component2)
                            {
                                component2.setCurrentAttacker(this);
                                component2.hitFromEnemy(Mathf.RoundToInt(num));
                            }

                            goto IL_092f;
                        }
                        return;
                    }
                    goto IL_092f;
                }

                return;

IL_092f:
                if (other.gameObject.CompareTag("enemyCollide") && mainTrigger && bodyCollider && !enemyAtStructure)
                {
                    setupAttackerType();
                    if (other.gameObject != bodyCollider)
                    {
                        other.transform.SendMessageUpwards("getAttackDirection", Random.Range(0, 2), SendMessageOptions.DontRequireReceiver);
                        other.transform.SendMessageUpwards("getCombo", Random.Range(1, 4), SendMessageOptions.DontRequireReceiver);
                        other.transform.SendMessage("getAttackerType", attackerType, SendMessageOptions.DontRequireReceiver);
                        other.transform.SendMessage("getAttacker", rootTr.gameObject, SendMessageOptions.DontRequireReceiver);
                        other.transform.SendMessageUpwards("HitPhysical", Random.Range(30f, 50f) * Mathf.Pow(ModdedPlayer.Stats.explosionDamage, 1.25f), SendMessageOptions.DontRequireReceiver);
                        FMODCommon.PlayOneshotNetworked(weaponHitEvent, base.transform, FMODCommon.NetworkRole.Server);
                    }
                }
                if (other.gameObject.CompareTag("BreakableWood") || (other.gameObject.CompareTag("BreakableRock") && mainTrigger))
                {
                    other.transform.SendMessage("Hit", 50, SendMessageOptions.DontRequireReceiver);
                    other.SendMessage("LocalizedHit", new LocalizedHitData(base.transform.position, 50f), SendMessageOptions.DontRequireReceiver);
                    FMODCommon.PlayOneshotNetworked(weaponHitEvent, base.transform, FMODCommon.NetworkRole.Server);
                }
                if (other.gameObject.CompareTag("SmallTree") && !mainTrigger)
                {
                    other.SendMessage("Hit", 2, SendMessageOptions.DontRequireReceiver);
                }
                if (other.gameObject.CompareTag("Fire") && mainTrigger && firemanMain && !events.noFireAttack)
                {
                    other.SendMessage("Burn", SendMessageOptions.DontRequireReceiver);
                }
                if (other.gameObject.CompareTag("Tree") && mainTrigger && creepy_male)
                {
                    other.SendMessage("Explosion", 5f, SendMessageOptions.DontRequireReceiver);
                    FMODCommon.PlayOneshotNetworked(weaponHitEvent, base.transform, FMODCommon.NetworkRole.Server);
                }
                if (!other.gameObject.CompareTag("structure") && !other.gameObject.CompareTag("SLTier1") && !other.gameObject.CompareTag("SLTier2") && !other.gameObject.CompareTag("SLTier3") && !other.gameObject.CompareTag("jumpObject") && !other.gameObject.CompareTag("UnderfootWood"))
                {
                    return;
                }
                if (!mainTrigger)
                {
                    return;
                }
                getStructureStrength component4 = other.gameObject.GetComponent <getStructureStrength>();
                bool flag2 = component4 == null;
                enemyAtStructure = true;
                int num2;
                if (!creepy_male && !creepy && !creepy_fat && !creepy_baby)
                {
                    if (!flag2)
                    {
                        num2 = ((maleSkinny || femaleSkinny) ? ((component4._strength == getStructureStrength.strength.weak) ? Mathf.FloorToInt(8f * GameSettings.Ai.regularStructureDamageRatio) : 0) : ((pale || painted || skinned) ? ((component4._strength != getStructureStrength.strength.veryStrong) ? Mathf.FloorToInt(16f * GameSettings.Ai.regularStructureDamageRatio) : 0) : ((component4._strength != getStructureStrength.strength.veryStrong) ? Mathf.FloorToInt(12f * GameSettings.Ai.regularStructureDamageRatio) : 0)));
                        goto IL_0d63;
                    }
                    return;
                }
                num2 = ((!creepy_baby) ? Mathf.FloorToInt(30f * GameSettings.Ai.creepyStructureDamageRatio) : Mathf.FloorToInt(10f * GameSettings.Ai.creepyStructureDamageRatio));
                goto IL_0d63;
IL_0d63:
                if (setup && setup.health.poisoned)
                {
                    num2 /= 2;
                }
                other.SendMessage("Hit", num2, SendMessageOptions.DontRequireReceiver);
                other.SendMessage("LocalizedHit", new LocalizedHitData(base.transform.position, num2), SendMessageOptions.DontRequireReceiver);
                FMODCommon.PlayOneshotNetworked(weaponHitEvent, base.transform, FMODCommon.NetworkRole.Server);
            }
            catch (System.Exception ee)
            {
                ModAPI.Log.Write(ee.ToString());
            }
        }
Exemple #24
0
        public Transform SpawnStructure()
        {
            Transform transform = new GameObject("StairsRoot").transform;

            transform.position = this.GetWorldPoint(0);
            Stack <Transform> stack = new Stack <Transform>();

            if (this._logPool == null)
            {
                this._logPool = new Stack <Transform>();
            }
            bool flag = true;
            int  i    = 1;
            int  num  = 1;
            int  num2 = -1;

            while (i < this._multiPointsPositions.Count)
            {
                Vector3 worldPoint  = this.GetWorldPoint(i);
                Vector3 worldPoint2 = this.GetWorldPoint(i - num);
                bool    flag2       = worldPoint.y > worldPoint2.y;
                int     num3        = -1;
                Vector3 vector;
                Vector3 a;
                if (flag2 || num2 - (i - num) == 0)
                {
                    vector = worldPoint;
                    a      = worldPoint2;
                    num2   = i;
                }
                else
                {
                    vector = worldPoint2;
                    a      = worldPoint;
                    num2   = i - num;
                    num3   = ((i + num >= this._multiPointsPositions.Count) ? -1 : ((worldPoint.y <= this.GetWorldPoint(i + num).y) ? (i + num) : i));
                }
                Vector3    forward  = a - vector;
                Vector3    rhs      = new Vector3(forward.x, 0f, forward.z);
                Vector3    vector2  = Vector3.Cross(Vector3.up, rhs);
                int        num4     = Mathf.CeilToInt(rhs.magnitude / this._logWidth);
                Vector3    vector3  = rhs.normalized * this._logWidth;
                Quaternion rotation = Quaternion.LookRotation(vector2);
                bool       flag3    = i + num == this._multiPointsPositions.Count;
                bool       flag4    = flag;
                flag = (flag3 && rhs.magnitude < this._logLength);
                Transform transform2 = new GameObject("StairEdge" + i).transform;
                transform2.parent = transform;
                float   d       = (!flag4) ? 2.5f : 0f;
                float   d2      = (!flag) ? 2.5f : 0.5f;
                Vector3 vector4 = vector;
                forward             = a - vector3 * d - (vector4 + vector3 * d2);
                transform2.rotation = Quaternion.LookRotation(forward);
                transform2.position = vector4 + vector3 * d2;
                this.SpawnVerticalStilt(vector, transform2);
                if (!flag)
                {
                    vector4 -= vector3 * 2.5f;
                    for (int j = 0; j < 5; j++)
                    {
                        Debug.DrawLine(vector4 - vector2, vector4 + vector2, Color.cyan);
                        Transform transform3 = this.NewLog(vector4, rotation);
                        transform3.parent = transform2;
                        stack.Push(transform3);
                        vector4 += vector3;
                        if (this._wasBuilt && j == 2)
                        {
                            transform3.rotation = rotation;
                            transform3.tag      = "UnderfootWood";
                            BoxCollider boxCollider = transform3.gameObject.AddComponent <BoxCollider>();
                            boxCollider.size   = new Vector3(this._logWidth * 5.5f, this._logHeight, this._logLength);
                            boxCollider.center = new Vector3(-0.42f, -0.34f, 0f);
                            transform3.gameObject.AddComponent <gridObjectBlocker>();
                            transform3.gameObject.AddComponent <BuildingHealthHitRelay>();
                        }
                    }
                    num4 -= 3;
                }
                if (!flag4)
                {
                    num4 -= 3;
                }
                Transform transform4 = UnityEngine.Object.Instantiate <Transform>(this._stiltPrefab);
                transform4.parent           = transform2;
                transform4.localPosition    = new Vector3(0f, -0.75f, 0f);
                transform4.localEulerAngles = new Vector3(-90f, 0f, 0f);
                transform4.localScale       = new Vector3(1f, Mathf.Abs(forward.magnitude) / 4.68f, 1f);
                if (!this._wasBuilt && !this._wasPlaced)
                {
                    transform4.GetComponentInChildren <Renderer>().sharedMaterial = Create.CurrentGhostMat;
                }
                else
                {
                    transform4.gameObject.SetActive(true);
                }
                Vector3 b = new Vector3(0f, forward.y / (float)num4, 0f);
                for (int k = 0; k < num4; k++)
                {
                    Debug.DrawLine(vector4 - vector2, vector4 + vector2, Color.cyan);
                    Transform transform5 = this.NewLog(vector4, rotation);
                    transform5.parent = transform2;
                    stack.Push(transform5);
                    vector4 += vector3;
                    vector4 += b;
                }
                if (num3 > i)
                {
                    vector4 += vector3 * -0.65f;
                    for (int l = 0; l < 5; l++)
                    {
                        Debug.DrawLine(vector4 - vector2, vector4 + vector2, Color.cyan);
                        Transform transform6 = this.NewLog(vector4, rotation);
                        transform6.parent = transform2;
                        stack.Push(transform6);
                        if (l == 2)
                        {
                            this.SpawnVerticalStilt(vector4, transform2);
                            if (this._wasBuilt)
                            {
                                transform6.rotation = rotation;
                                transform6.tag      = "UnderfootWood";
                                BoxCollider boxCollider2 = transform6.gameObject.AddComponent <BoxCollider>();
                                boxCollider2.size   = new Vector3(this._logWidth * 5.5f, this._logHeight, this._logLength);
                                boxCollider2.center = new Vector3(-0.42f, -0.34f, 0f);
                                transform6.gameObject.AddComponent <gridObjectBlocker>();
                            }
                        }
                        vector4 += vector3;
                    }
                }
                if (this._wasBuilt)
                {
                    BoxCollider boxCollider3 = transform2.gameObject.AddComponent <BoxCollider>();
                    boxCollider3.size   = new Vector3(this._logLength, this._logHeight, forward.magnitude);
                    boxCollider3.center = new Vector3(0f, -0.34f, boxCollider3.size.z / 2f);
                    transform2.tag      = "UnderfootWood";
                    transform2.gameObject.AddComponent <BuildingHealthHitRelay>();
                    transform2.gameObject.layer = 21;
                    getStructureStrength getStructureStrength = transform2.gameObject.AddComponent <getStructureStrength>();
                    getStructureStrength._strength = getStructureStrength.strength.normal;
                    getStructureStrength._type     = getStructureStrength.structureType.floor;
                    transform2.gameObject.AddComponent <gridObjectBlocker>();
                    FoundationArchitect.CreateWindSFX(transform4);
                }
                i += num;
            }
            if (!this._wasPlaced && !this._wasBuilt)
            {
                this._logPool = stack;
            }
            return(transform);
        }
Exemple #25
0
    private void recastObjSetup(bool isFloor, Collider getCol = null)
    {
        Collider collider = this.col.transform.GetComponent <Collider>();

        if (getCol)
        {
            collider = getCol;
        }
        if (collider == null)
        {
            return;
        }
        GameObject gameObject = UnityEngine.Object.Instantiate <GameObject>((GameObject)Resources.Load("navCubeCutter"), base.transform.position, base.transform.rotation);

        if (collider.GetType() == typeof(BoxCollider))
        {
            BoxCollider boxCollider = collider as BoxCollider;
            Vector3     size        = boxCollider.size;
            if (isFloor)
            {
                size.x *= 1.5f;
            }
            gameObject.transform.parent        = boxCollider.transform;
            gameObject.transform.localScale    = size;
            gameObject.transform.localPosition = boxCollider.center;
            gameObject.transform.localRotation = Quaternion.identity;
            RecastMeshObj component = gameObject.GetComponent <RecastMeshObj>();
            if (isFloor)
            {
                component.area = 0;
            }
            component.enabled = true;
        }
        if (collider.GetType() == typeof(CapsuleCollider))
        {
            CapsuleCollider      capsuleCollider = collider as CapsuleCollider;
            getStructureStrength component2      = collider.GetComponent <getStructureStrength>();
            if (component2 && component2.CoasterStilt)
            {
                Transform child = collider.transform.GetChild(0);
                gameObject.transform.parent           = child;
                gameObject.transform.localPosition    = new Vector3(0f, 0.329f, 0f);
                gameObject.transform.localEulerAngles = Vector3.zero;
                Vector3 localScale = gameObject.transform.localScale;
                localScale.x = capsuleCollider.height;
                localScale.y = capsuleCollider.radius * 2f;
                localScale.z = capsuleCollider.radius * 2f;
                gameObject.transform.localScale = localScale;
            }
            else
            {
                gameObject.transform.parent = collider.transform;
                Vector3 localScale2 = gameObject.transform.localScale;
                localScale2.x = capsuleCollider.radius * 1.3f;
                localScale2.y = capsuleCollider.height;
                localScale2.z = capsuleCollider.radius * 1.3f;
                gameObject.transform.localScale = localScale2;
            }
            RecastMeshObj component3 = gameObject.GetComponent <RecastMeshObj>();
            if (isFloor)
            {
                component3.area = 0;
            }
            component3.enabled = true;
        }
    }