private void calculateDamage(GameObject go) { if (this.allowDamage && this.rigidBody.velocity.magnitude > Mathf.Max(this.speedThreshold * 2f, 15f)) { if (go.CompareTag("PlayerNet") && BoltNetwork.isRunning) { BoltEntity componentInParent = go.GetComponentInParent <BoltEntity>(); if (componentInParent) { HitPlayer hitPlayer = HitPlayer.Create(componentInParent, EntityTargets.OnlyOwner); if (this.flintLock) { hitPlayer.damage = 45; } else { hitPlayer.damage = 5; } hitPlayer.Send(); } } if (go.CompareTag("enemyCollide") || go.CompareTag("enemyRoot") || go.tag == "lb_bird" || go.CompareTag("animalCollide") || go.CompareTag("Fish")) { if (BoltNetwork.isClient) { PlayerHitEnemy playerHitEnemy = PlayerHitEnemy.Raise(GlobalTargets.OnlyServer); playerHitEnemy.Target = go.GetComponentInParent <BoltEntity>(); playerHitEnemy.getAttackDirection = 3; playerHitEnemy.getAttackerType = 4; if (this.flintLock) { playerHitEnemy.Hit = 100; } else { playerHitEnemy.Hit = 1; } playerHitEnemy.Send(); } else if (!go.CompareTag("MidTree") && !go.CompareTag("Tree") && go.layer != 11) { go.gameObject.SendMessageUpwards("getAttackDirection", 3, SendMessageOptions.DontRequireReceiver); go.gameObject.SendMessageUpwards("getAttackerType", 4, SendMessageOptions.DontRequireReceiver); int num = 1; if (this.flintLock) { num = 100; } go.gameObject.SendMessageUpwards("Hit", num, SendMessageOptions.DontRequireReceiver); go.SendMessage("Hit", num, SendMessageOptions.DontRequireReceiver); } } } }
private IEnumerator HitAi(Transform target, bool hitDelay = false, bool headDamage = false) { yield return(null); int sendDamage = this.damage; if (headDamage) { sendDamage *= 20; } if (this.PhysicBody) { this.PhysicBody.velocity = Vector3.zero; } if (this.spearType) { this.PhysicBody.isKinematic = false; this.PhysicBody.useGravity = true; this.disableLive(); if (this.MyPickUp) { this.MyPickUp.SetActive(true); } } if (target) { Vector3 vector = target.transform.root.GetChild(0).InverseTransformPoint(base.transform.position); float targetAngle = Mathf.Atan2(vector.x, vector.z) * 57.29578f; int animalHitDirection = animalHealth.GetAnimalHitDirection(targetAngle); BoltEntity componentInParent = target.GetComponentInParent <BoltEntity>(); if (!componentInParent) { target.GetComponent <BoltEntity>(); } if (BoltNetwork.isClient && componentInParent) { if (hitDelay) { target.transform.SendMessageUpwards("getClientHitDirection", 6, SendMessageOptions.DontRequireReceiver); target.transform.SendMessageUpwards("StartPrediction", SendMessageOptions.DontRequireReceiver); BoltEntity component = this.parent.GetComponent <BoltEntity>(); PlayerHitEnemy playerHitEnemy = PlayerHitEnemy.Raise(GlobalTargets.OnlyServer); playerHitEnemy.Target = componentInParent; playerHitEnemy.Weapon = component; playerHitEnemy.getAttacker = 10; if (target.gameObject.CompareTag("animalRoot")) { playerHitEnemy.getAttackDirection = animalHitDirection; } else { playerHitEnemy.getAttackDirection = 3; } playerHitEnemy.getAttackerType = 4; playerHitEnemy.Hit = sendDamage; playerHitEnemy.Send(); } else { target.transform.SendMessageUpwards("getClientHitDirection", 6, SendMessageOptions.DontRequireReceiver); target.transform.SendMessageUpwards("StartPrediction", SendMessageOptions.DontRequireReceiver); PlayerHitEnemy playerHitEnemy2 = PlayerHitEnemy.Raise(GlobalTargets.OnlyServer); playerHitEnemy2.Target = componentInParent; if (target.gameObject.CompareTag("animalRoot")) { playerHitEnemy2.getAttackDirection = animalHitDirection; } else { playerHitEnemy2.getAttackDirection = 3; } playerHitEnemy2.getAttackerType = 4; playerHitEnemy2.Hit = sendDamage; playerHitEnemy2.Send(); } } else { target.gameObject.SendMessageUpwards("getAttackDirection", 3, SendMessageOptions.DontRequireReceiver); target.gameObject.SendMessageUpwards("getAttackerType", 4, SendMessageOptions.DontRequireReceiver); GameObject closestPlayerFromPos = Scene.SceneTracker.GetClosestPlayerFromPos(base.transform.position); target.gameObject.SendMessageUpwards("getAttacker", closestPlayerFromPos, SendMessageOptions.DontRequireReceiver); if (target.gameObject.CompareTag("lb_bird") || target.gameObject.CompareTag("animalRoot") || target.gameObject.CompareTag("enemyRoot") || target.gameObject.CompareTag("PlayerNet")) { if (target.gameObject.CompareTag("enemyRoot")) { EnemyHealth componentInChildren = target.GetComponentInChildren <EnemyHealth>(); if (componentInChildren) { componentInChildren.getAttackDirection(3); componentInChildren.setSkinDamage(2); mutantTargetSwitching componentInChildren2 = target.GetComponentInChildren <mutantTargetSwitching>(); if (componentInChildren2) { componentInChildren2.getAttackerType(4); componentInChildren2.getAttacker(closestPlayerFromPos); } componentInChildren.Hit(sendDamage); } } else { if (target.gameObject.CompareTag("animalRoot")) { target.gameObject.SendMessage("ApplyAnimalSkinDamage", animalHitDirection, SendMessageOptions.DontRequireReceiver); } target.gameObject.SendMessage("Hit", sendDamage, SendMessageOptions.DontRequireReceiver); target.gameObject.SendMessage("getSkinHitPosition", base.transform, SendMessageOptions.DontRequireReceiver); } } else { if (target.gameObject.CompareTag("animalCollide")) { target.gameObject.SendMessageUpwards("ApplyAnimalSkinDamage", animalHitDirection, SendMessageOptions.DontRequireReceiver); } target.gameObject.SendMessageUpwards("Hit", sendDamage, SendMessageOptions.DontRequireReceiver); target.gameObject.SendMessageUpwards("getSkinHitPosition", base.transform, SendMessageOptions.DontRequireReceiver); } } } if (this.MyPickUp) { this.MyPickUp.SetActive(true); } FMODCommon.PlayOneshotNetworked(this.hitAiEvent, base.transform, FMODCommon.NetworkRole.Any); yield return(null); yield break; }
private void LateUpdate() { if (this.Live && this.PhysicBody) { float num = this.PhysicBody.velocity.magnitude * 1.25f * Time.deltaTime; Vector3 vector = base.transform.position + base.transform.forward * -num; if (num > 0f && Physics.Raycast(base.transform.position, base.transform.forward, out this.hit, num, this.layers)) { if (this.hit.transform.CompareTag("Tree") || this.hit.transform.CompareTag("Target") || this.hit.transform.gameObject.layer == 20) { if (this.spearType) { if (this.bodyCollider) { this.bodyCollider.isTrigger = true; } this.PhysicBody.transform.position = this.hit.point - base.transform.forward * 2.1f; } else { this.PhysicBody.transform.position = this.hit.point - base.transform.forward * 0.35f; } this.PhysicBody.velocity = Vector3.zero; this.PhysicBody.isKinematic = true; this.MyPickUp.SetActive(true); this.Live = false; FMODCommon.PlayOneshotNetworked(this.hitTreeEvent, base.transform, FMODCommon.NetworkRole.Any); } else if (this.hit.transform.CompareTag("enemyCollide") || this.hit.transform.tag == "lb_bird" || this.hit.transform.CompareTag("animalCollide") || this.hit.transform.CompareTag("Fish")) { int num2; if (this.spearType) { num2 = Mathf.FloorToInt(40f); } else { num2 = Mathf.FloorToInt(2f * (this.PhysicBody.velocity.magnitude / 7f)); if (num2 > 22) { num2 = 22; } } if (this.spearType) { this.PhysicBody.velocity = Vector3.zero; this.PhysicBody.isKinematic = false; this.PhysicBody.useGravity = true; this.Live = false; this.MyPickUp.SetActive(true); } if (BoltNetwork.isClient) { PlayerHitEnemy playerHitEnemy = PlayerHitEnemy.Raise(GlobalTargets.OnlyServer); playerHitEnemy.Target = this.hit.transform.GetComponentInParent <BoltEntity>(); playerHitEnemy.getAttackDirection = 3; playerHitEnemy.getAttackerType = 4; playerHitEnemy.Hit = num2; playerHitEnemy.Send(); } else if (this.hit.transform.CompareTag("enemyRoot")) { this.hit.transform.gameObject.SendMessage("getAttackDirection", 3, SendMessageOptions.DontRequireReceiver); this.hit.transform.gameObject.SendMessage("getAttackerType", 4, SendMessageOptions.DontRequireReceiver); GameObject closestPlayerFromPos = Scene.SceneTracker.GetClosestPlayerFromPos(base.transform.position); this.hit.transform.gameObject.SendMessage("getAttacker", closestPlayerFromPos, SendMessageOptions.DontRequireReceiver); this.hit.transform.gameObject.SendMessage("Hit", num2, SendMessageOptions.DontRequireReceiver); } else { this.hit.transform.gameObject.SendMessageUpwards("getAttackDirection", 3, SendMessageOptions.DontRequireReceiver); this.hit.transform.gameObject.SendMessageUpwards("getAttackerType", 4, SendMessageOptions.DontRequireReceiver); GameObject closestPlayerFromPos2 = Scene.SceneTracker.GetClosestPlayerFromPos(base.transform.position); this.hit.transform.gameObject.SendMessageUpwards("getAttacker", closestPlayerFromPos2, SendMessageOptions.DontRequireReceiver); this.hit.transform.gameObject.SendMessageUpwards("Hit", num2, SendMessageOptions.DontRequireReceiver); } this.MyPickUp.SetActive(true); this.Live = false; } else if (this.hit.transform.CompareTag("PlayerNet")) { if (BoltNetwork.isRunning) { BoltEntity componentInParent = this.hit.transform.GetComponentInParent <BoltEntity>(); if (componentInParent) { HitPlayer.Create(componentInParent, EntityTargets.OnlyOwner).Send(); } } } else if (this.hit.transform.CompareTag("TerrainMain") || this.hit.transform.CompareTag("structure") || this.hit.transform.CompareTag("SLTier1") || this.hit.transform.CompareTag("SLTier2") || this.hit.transform.CompareTag("SLTier3")) { if (this.ignoreTerrain && this.hit.transform.CompareTag("TerrainMain")) { this.ignoreTerrain = false; Physics.IgnoreCollision(base.GetComponent <Collider>(), Terrain.activeTerrain.GetComponent <Collider>(), false); } else { if (this.spearType) { if (this.bodyCollider) { this.bodyCollider.isTrigger = true; } this.PhysicBody.transform.position = this.hit.point - base.transform.forward * 2.1f; } else { this.PhysicBody.transform.position = this.hit.point - base.transform.forward * 0.35f; } this.PhysicBody.velocity = Vector3.zero; this.PhysicBody.isKinematic = true; this.MyPickUp.SetActive(true); if (this.at) { this.at.enabled = false; } this.Live = false; if (this.hit.transform.CompareTag("TerrainMain")) { FMODCommon.PlayOneshotNetworked(this.hitGroundEvent, base.transform, FMODCommon.NetworkRole.Any); } else { FMODCommon.PlayOneshotNetworked(this.hitStructureEvent, base.transform, FMODCommon.NetworkRole.Any); } } } else if (this.hit.transform.CompareTag("CaveDoor")) { this.ignoreTerrain = true; Physics.IgnoreCollision(base.GetComponent <Collider>(), Terrain.activeTerrain.GetComponent <Collider>(), true); } else if (!this.hit.collider.isTrigger && !this.hit.transform.Equals(base.transform.parent) && this.hit.transform.CompareTag("enemyRoot")) { this.PhysicBody.velocity /= 4f; this.MyPickUp.SetActive(true); this.Live = false; } else if (!this.hit.collider.isTrigger && !this.hit.transform.Equals(base.transform.parent)) { this.PhysicBody.velocity /= 2f; this.MyPickUp.SetActive(true); this.Live = false; if (this.at) { this.at.enabled = false; } } if (!this.Live) { this.parent.BroadcastMessage("OnArrowHit", SendMessageOptions.DontRequireReceiver); } } } }