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; }
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); } } }
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); } }
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; }
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; } }
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()); } }
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>(); } } }
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); }
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; }
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; } }
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 }; } }
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()); } }
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; }
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; } } }
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()); } }
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); }
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; } }