private void OnTriggerEnter(Collider other) { if (other.gameObject.CompareTag("enemyCollide") || other.gameObject.CompareTag("animalRoot") || other.gameObject.CompareTag("animalCollide")) { if (this.doneStick) { return; } arrowStickToTarget arrowStickToTarget = other.GetComponent <arrowStickToTarget>(); if (arrowStickToTarget == null) { arrowStickToTarget = other.GetComponentInChildren <arrowStickToTarget>(); } if (arrowStickToTarget) { Transform transform = arrowStickToTarget.returnNearestJoint(base.transform); if (transform) { FollowTarget followTarget = base.gameObject.AddComponent <FollowTarget>(); followTarget.target = transform; followTarget.offset = (base.transform.position - transform.position) / 3.5f; followTarget.followRotation = true; CapsuleCollider component = base.transform.GetComponent <CapsuleCollider>(); if (component) { component.isTrigger = true; } base.GetComponent <Rigidbody>().isKinematic = true; this.doneStick = true; UnityEngine.Object.Destroy(this); } } } }
public override void OnEvent(stuckArrowsSync evnt) { if (!this.ValidateSender(evnt, SenderTypes.Any)) { return; } if (evnt.target) { arrowStickToTarget arrowStickToTarget = evnt.target.GetComponent <arrowStickToTarget>(); if (!arrowStickToTarget) { arrowStickToTarget = evnt.target.GetComponentInChildren <arrowStickToTarget>(); } if (arrowStickToTarget) { if (evnt.removeArrow) { int num = 0; foreach (KeyValuePair <Transform, int> keyValuePair in arrowStickToTarget.stuckArrows) { if (num == evnt.index && keyValuePair.Key) { UnityEngine.Object.Destroy(keyValuePair.Key.gameObject); } num++; } return; } return; } } }
public override void OnEvent(stuckArrowsSync evnt) { if (!this.ValidateSender(evnt, SenderTypes.Any)) { return; } if (evnt.target) { arrowStickToTarget arrowStickToTarget = evnt.target.GetComponent <arrowStickToTarget>(); if (!arrowStickToTarget) { arrowStickToTarget = evnt.target.GetComponentInChildren <arrowStickToTarget>(); } if (arrowStickToTarget) { if (evnt.removeArrow) { int num = 0; foreach (KeyValuePair <Transform, int> keyValuePair in arrowStickToTarget.stuckArrows) { if (num == evnt.index && keyValuePair.Key) { UnityEngine.Object.Destroy(keyValuePair.Key.gameObject); } num++; } return; } int type = evnt.type; GameObject gameObject; if (type != 1) { gameObject = UnityEngine.Object.Instantiate <GameObject>(arrowStickToTarget.fakeArrowPickup, evnt.target.transform.position, evnt.target.transform.rotation); } else { gameObject = UnityEngine.Object.Instantiate <GameObject>(arrowStickToTarget.fakeArrowBonePickup, evnt.target.transform.position, evnt.target.transform.rotation); } gameObject.transform.parent = arrowStickToTarget.stickToJoints[evnt.index]; gameObject.transform.localPosition = evnt.pos; gameObject.transform.localRotation = evnt.rot; arrowStickToTarget.stuckArrows.Add(gameObject.transform, evnt.index); fakeArrowSetup component = gameObject.GetComponent <fakeArrowSetup>(); if (component && BoltNetwork.isRunning) { component.storedIndex = arrowStickToTarget.stuckArrows.Count - 1; component.entityTarget = evnt.target; } } } }
public Transform metgoragdoll(Vector3 varpvelocity = default(Vector3)) { Transform transform = UnityEngine.Object.Instantiate <Transform>(this.vargamragdoll, base.transform.position, base.transform.rotation); if (!this.ignoreScale) { transform.localScale = base.transform.localScale; } this.metcopytransforms(base.transform, transform, varpvelocity * 1f); if (this.doCreepySkin && this.enemyHealth) { transform.gameObject.SendMessage("setSkin", this.enemyHealth.MySkin.sharedMaterial, SendMessageOptions.DontRequireReceiver); this.enemyHealth.MySkin.GetPropertyBlock(this.bloodPropertyBlock); transform.gameObject.SendMessage("setSkinDamageProperty", this.bloodPropertyBlock, SendMessageOptions.DontRequireReceiver); if (this.enemyHealth.Fire.Length > 0) { mutantTransferFire component = base.transform.parent.GetComponent <mutantTransferFire>(); foreach (GameObject gameObject in this.enemyHealth.Fire) { if (gameObject.activeSelf && component) { component.transferFireToTarget(gameObject, transform.gameObject); } } } if (BoltNetwork.isServer) { BoltEntity component2 = base.transform.parent.GetComponent <BoltEntity>(); if (component2) { IMutantState state = component2.GetState <IMutantState>(); CoopMutantDummyToken coopMutantDummyToken = new CoopMutantDummyToken(); coopMutantDummyToken.Scale = base.transform.localScale; coopMutantDummyToken.skinDamage1 = this.bloodPropertyBlock.GetFloat("_Damage1"); coopMutantDummyToken.skinDamage2 = this.bloodPropertyBlock.GetFloat("_Damage2"); coopMutantDummyToken.skinDamage3 = this.bloodPropertyBlock.GetFloat("_Damage3"); coopMutantDummyToken.skinDamage4 = this.bloodPropertyBlock.GetFloat("_Damage4"); coopMutantDummyToken.skinColor = this.enemyHealth.MySkin.sharedMaterial.GetColor("_Color"); mutantTypeSetup component3 = base.transform.parent.GetComponent <mutantTypeSetup>(); if (component3) { } BoltNetwork.Attach(transform.gameObject, coopMutantDummyToken); } } } if (this.animalHealth && this.animalHealth.mySkin) { this.animalHealth.mySkin.GetPropertyBlock(this.bloodPropertyBlock); float @float = this.bloodPropertyBlock.GetFloat("_Damage1"); transform.gameObject.SendMessage("setSkinDamageProperty", this.bloodPropertyBlock, SendMessageOptions.DontRequireReceiver); } if (this.animalHealth && this.animalHealth.Fire) { mutantTransferFire component4; if (base.transform.parent) { component4 = base.transform.parent.GetComponent <mutantTransferFire>(); } else { component4 = base.transform.GetComponent <mutantTransferFire>(); } if (this.animalHealth.Fire.activeSelf && component4) { component4.transferFireToTarget(this.animalHealth.Fire, transform.gameObject); } } if (this.bat && this.burning) { transform.gameObject.SendMessage("enableFire", SendMessageOptions.DontRequireReceiver); } if (this.animal) { animalSpawnFunctions component5 = base.transform.root.GetComponent <animalSpawnFunctions>(); if (component5) { transform.gameObject.SendMessage("setSkin", component5.meshRenderer.sharedMaterial, SendMessageOptions.DontRequireReceiver); } if (this.ca && this.ca.isSnow) { transform.gameObject.SendMessage("setupSnowRabbitTypeTrigger", SendMessageOptions.DontRequireReceiver); } } if (this.bird) { if (this.burning) { transform.gameObject.SendMessage("enableFire", SendMessageOptions.DontRequireReceiver); } lb_Bird component6 = base.transform.GetComponent <lb_Bird>(); transform.gameObject.SendMessage("setSkin", component6.skin.sharedMaterial, SendMessageOptions.DontRequireReceiver); } if (this.fish) { transform.gameObject.SendMessage("doSkinSetup", this.fishScript.fishTypeInt, SendMessageOptions.DontRequireReceiver); transform.gameObject.SendMessage("setupFishType", this.fishScript.fishNatureGuideValue, SendMessageOptions.DontRequireReceiver); } if (this.alreadyBurnt) { transform.gameObject.SendMessage("enableBurntSkin", SendMessageOptions.DontRequireReceiver); } if (this.ast) { arrowStickToTarget component7 = transform.GetComponent <arrowStickToTarget>(); if (component7) { int num = 0; foreach (KeyValuePair <Transform, int> keyValuePair in this.ast.stuckArrows) { if (keyValuePair.Key) { component7.CreatureType(this.ast.IsAnimal, this.ast.IsBird, this.ast.IsFish); int arrowType = 0; if (num < this.ast.stuckArrowsTypeList.Count) { arrowType = this.ast.stuckArrowsTypeList[num]; } component7.applyStuckArrowToDummy(keyValuePair.Key, keyValuePair.Key.localPosition, keyValuePair.Key.localRotation, keyValuePair.Value, arrowType); num++; } } } } this.burning = false; this.alreadyBurnt = false; return(transform); }
public void CheckHit(Vector3 position, Transform target, bool isTrigger, Collider targetCollider) { if (this.ignoreCollisionEvents(targetCollider) && !target.CompareTag("enemyRoot")) { return; } if (!isTrigger) { Molotov componentInParent = base.transform.GetComponentInParent <Molotov>(); if (componentInParent) { componentInParent.IncendiaryBreak(); } } bool headDamage = false; if (target.gameObject.layer == LayerMask.NameToLayer("Water")) { FMODCommon.PlayOneshotNetworked(this.hitWaterEvent, base.transform, FMODCommon.NetworkRole.Any); } else if (target.CompareTag("SmallTree")) { FMODCommon.PlayOneshotNetworked(this.hitBushEvent, base.transform, FMODCommon.NetworkRole.Any); } if (target.CompareTag("PlaneHull")) { FMODCommon.PlayOneshotNetworked(this.hitMetalEvent, base.transform, FMODCommon.NetworkRole.Any); } if (target.CompareTag("Tree") || target.root.CompareTag("Tree") || target.CompareTag("Target")) { if (this.spearType) { base.StartCoroutine(this.HitTree(this.hit.point - base.transform.forward * 2.1f)); } else if (this.hitPointUpdated) { base.StartCoroutine(this.HitTree(this.hit.point - base.transform.forward * 0.35f)); } else { base.StartCoroutine(this.HitTree(base.transform.position - base.transform.forward * 0.35f)); } this.disableLive(); if (target.CompareTag("Tree") || target.root.CompareTag("Tree")) { TreeHealth component = target.GetComponent <TreeHealth>(); if (!component) { component = target.root.GetComponent <TreeHealth>(); } if (component) { component.LodTree.AddTreeCutDownTarget(base.gameObject); } } } else if (target.CompareTag("enemyCollide") || target.tag == "lb_bird" || target.CompareTag("animalCollide") || target.CompareTag("Fish") || target.CompareTag("enemyRoot") || target.CompareTag("animalRoot")) { bool flag = target.tag == "lb_bird" || target.CompareTag("lb_bird"); bool flag2 = target.CompareTag("Fish"); bool flag3 = target.CompareTag("animalCollide") || target.CompareTag("animalRoot"); arrowStickToTarget arrowStickToTarget = target.GetComponent <arrowStickToTarget>(); if (!arrowStickToTarget) { arrowStickToTarget = target.root.GetComponentInChildren <arrowStickToTarget>(); } if (!this.spearType && !this.flintLockAmmoType && !flag2) { if (arrowStickToTarget && arrowStickToTarget.enabled) { if (flag) { EventRegistry.Achievements.Publish(TfEvent.Achievements.BirdArrowKill, null); } arrowStickToTarget.CreatureType(flag3, flag, flag2); if (BoltNetwork.isRunning) { if (this.at && this.at._boltEntity && this.at._boltEntity.isAttached && this.at._boltEntity.isOwner) { headDamage = arrowStickToTarget.stickArrowToNearestBone(base.transform); } } else { headDamage = arrowStickToTarget.stickArrowToNearestBone(base.transform); } } if (arrowStickToTarget) { base.Invoke("destroyMe", 0.1f); } } base.StartCoroutine(this.HitAi(target, flag || flag3, headDamage)); if (flag2) { base.StartCoroutine(this.HitFish(target, this.hit.point - base.transform.forward * 0.35f)); } this.disableLive(); } else if (target.CompareTag("PlayerNet")) { if (BoltNetwork.isRunning) { BoltEntity boltEntity = target.GetComponentInParent <BoltEntity>(); if (!boltEntity) { boltEntity = target.GetComponent <BoltEntity>(); } if (boltEntity) { HitPlayer.Create(boltEntity, EntityTargets.OnlyOwner).Send(); this.disableLive(); } } } else if (target.CompareTag("TerrainMain") && !LocalPlayer.IsInCaves) { if (this.ignoreTerrain) { this.ignoreTerrain = false; base.StartCoroutine(this.RevokeIgnoreTerrain()); } else { if (this.spearType) { if (this.bodyCollider) { this.bodyCollider.isTrigger = true; } base.StartCoroutine(this.HitStructure(base.transform.position - base.transform.forward * 2.1f, false)); } else { Vector3 position2 = base.transform.position - base.transform.forward * -0.8f; float num = Terrain.activeTerrain.SampleHeight(base.transform.position) + Terrain.activeTerrain.transform.position.y; if (base.transform.position.y < num) { position2.y = num + 0.5f; } base.StartCoroutine(this.HitStructure(position2, false)); } this.disableLive(); FMODCommon.PlayOneshotNetworked(this.hitGroundEvent, base.transform, FMODCommon.NetworkRole.Any); } } else if (target.CompareTag("structure") || target.CompareTag("jumpObject") || target.CompareTag("SLTier1") || target.CompareTag("SLTier2") || target.CompareTag("SLTier3") || target.CompareTag("UnderfootWood")) { if (target.transform.parent && (target.transform.parent.GetComponent <StickFenceChunkArchitect>() || target.transform.parent.GetComponent <BoneFenceChunkArchitect>())) { return; } if (!isTrigger) { if (this.spearType) { base.StartCoroutine(this.HitStructure(this.hit.point - base.transform.forward * 2.1f, true)); } else { base.StartCoroutine(this.HitStructure(this.hit.point - base.transform.forward * 0.35f, true)); } this.disableLive(); } } else if (target.CompareTag("CaveDoor")) { this.ignoreTerrain = true; Physics.IgnoreCollision(base.GetComponent <Collider>(), Terrain.activeTerrain.GetComponent <Collider>(), true); } else if (this.flintLockAmmoType && (target.CompareTag("BreakableWood") || target.CompareTag("BreakableRock"))) { target.SendMessage("Hit", 40, SendMessageOptions.DontRequireReceiver); } if (!this.Live) { this.destroyThisAmmo(); this.parent.BroadcastMessage("OnArrowHit", SendMessageOptions.DontRequireReceiver); } }
public override void CheckHit(Vector3 position, Transform target, bool isTrigger, Collider targetCollider) { if (ignoreCollisionEvents(targetCollider) && !target.CompareTag("enemyRoot")) { return; } if (!isTrigger) { Molotov componentInParent = transform.GetComponentInParent <Molotov>(); if ((bool)componentInParent) { componentInParent.IncendiaryBreak(); } } bool headDamage = false; if (target.gameObject.layer == LayerMask.NameToLayer("Water")) { FMODCommon.PlayOneshotNetworked(hitWaterEvent, base.transform, FMODCommon.NetworkRole.Any); } else if (target.CompareTag("SmallTree")) { FMODCommon.PlayOneshotNetworked(hitBushEvent, base.transform, FMODCommon.NetworkRole.Any); } if (target.CompareTag("PlaneHull")) { FMODCommon.PlayOneshotNetworked(hitMetalEvent, base.transform, FMODCommon.NetworkRole.Any); } if (target.CompareTag("Tree") || target.root.CompareTag("Tree") || target.CompareTag("Target")) { if (spearType) { base.StartCoroutine(HitTree(hit.point - base.transform.forward * 2.1f)); } else if (hitPointUpdated) { base.StartCoroutine(HitTree(hit.point - base.transform.forward * 0.35f)); } else { base.StartCoroutine(HitTree(base.transform.position - base.transform.forward * 0.35f)); } disableLive(); if (target.CompareTag("Tree") || target.root.CompareTag("Tree")) { TreeHealth component = target.GetComponent <TreeHealth>(); if (!(bool)component) { component = target.root.GetComponent <TreeHealth>(); } if ((bool)component) { component.LodTree.AddTreeCutDownTarget(base.gameObject); } } } else if (target.CompareTag("enemyCollide") || target.tag == "lb_bird" || target.CompareTag("animalCollide") || target.CompareTag("Fish") || target.CompareTag("enemyRoot") || target.CompareTag("animalRoot")) { bool flag = target.tag == "lb_bird" || target.CompareTag("lb_bird"); bool flag2 = target.CompareTag("Fish"); bool flag3 = target.CompareTag("animalCollide") || target.CompareTag("animalRoot"); arrowStickToTarget arrowStickToTarget = target.GetComponent <arrowStickToTarget>(); if (!(bool)arrowStickToTarget) { arrowStickToTarget = target.root.GetComponentInChildren <arrowStickToTarget>(); } if (!spearType && !flintLockAmmoType && !flag2) { if (arrowStickToTarget && arrowStickToTarget.enabled) { if (flag) { EventRegistry.Achievements.Publish(TfEvent.Achievements.BirdArrowKill, null); } arrowStickToTarget.CreatureType(flag3, flag, flag2); if (BoltNetwork.isRunning) { if (at && at._boltEntity && at._boltEntity.isAttached && at._boltEntity.isOwner) { headDamage = arrowStickToTarget.stickArrowToNearestBone(base.transform); } } else { headDamage = arrowStickToTarget.stickArrowToNearestBone(base.transform); } } if ((bool)arrowStickToTarget) { base.Invoke("destroyMe", 0.1f); } } base.StartCoroutine(HitAi(target, flag || flag3, headDamage)); ModdedPlayer.instance.DoAreaDamage(target.root, damage); ModdedPlayer.instance.DoOnHit(); if (ModdedPlayer.instance.RangedArmorReduction > 0 && target.gameObject.CompareTag("enemyCollide")) { if (BoltNetwork.isClient) { BoltEntity be = target.GetComponentInParent <BoltEntity>(); if (be == null) { be = target.GetComponent <BoltEntity>(); } if (be != null) { EnemyProgression.ReduceArmor(be, ModdedPlayer.instance.MeleeArmorReduction); } } else { target.transform.SendMessageUpwards("ReduceArmor", ModdedPlayer.instance.MeleeArmorReduction, SendMessageOptions.DontRequireReceiver); } } if (flag2) { base.StartCoroutine(HitFish(target, hit.point - base.transform.forward * 0.35f)); } disableLive(); } else if (target.CompareTag("PlayerNet")) { if (BoltNetwork.isRunning) { BoltEntity boltEntity = target.GetComponentInParent <BoltEntity>(); if (!(bool)boltEntity) { boltEntity = target.GetComponent <BoltEntity>(); } if (boltEntity && ModSettings.FriendlyFire) { HitPlayer HP = HitPlayer.Create(boltEntity, EntityTargets.Everyone); HP.damage = damage; HP.Send(); disableLive(); } } } else if (target.CompareTag("TerrainMain") && !LocalPlayer.IsInCaves) { if (ignoreTerrain) { ignoreTerrain = false; base.StartCoroutine(RevokeIgnoreTerrain()); } else { if (spearType) { if ((bool)bodyCollider) { bodyCollider.isTrigger = true; } base.StartCoroutine(HitStructure(base.transform.position - base.transform.forward * 2.1f, false)); } else { Vector3 position2 = base.transform.position - base.transform.forward * -0.8f; float num = Terrain.activeTerrain.SampleHeight(base.transform.position); Vector3 position3 = Terrain.activeTerrain.transform.position; float num2 = num + position3.y; Vector3 position4 = base.transform.position; if (position4.y < num2) { position2.y = num2 + 0.5f; } base.StartCoroutine(HitStructure(position2, false)); } disableLive(); FMODCommon.PlayOneshotNetworked(hitGroundEvent, base.transform, FMODCommon.NetworkRole.Any); } } else if (target.CompareTag("structure") || target.CompareTag("jumpObject") || target.CompareTag("SLTier1") || target.CompareTag("SLTier2") || target.CompareTag("SLTier3") || target.CompareTag("UnderfootWood")) { if ((bool)target.transform.parent) { if ((bool)target.transform.parent.GetComponent <StickFenceChunkArchitect>()) { return; } if ((bool)target.transform.parent.GetComponent <BoneFenceChunkArchitect>()) { return; } } if (!isTrigger) { if (spearType) { base.StartCoroutine(HitStructure(hit.point - base.transform.forward * 2.1f, true)); } else { base.StartCoroutine(HitStructure(hit.point - base.transform.forward * 0.35f, true)); } disableLive(); } } else if (target.CompareTag("CaveDoor")) { ignoreTerrain = true; Physics.IgnoreCollision(base.GetComponent <Collider>(), Terrain.activeTerrain.GetComponent <Collider>(), true); } else if (flintLockAmmoType && (target.CompareTag("BreakableWood") || target.CompareTag("BreakableRock"))) { target.SendMessage("Hit", 40, SendMessageOptions.DontRequireReceiver); } if (!Live) { destroyThisAmmo(); parent.BroadcastMessage("OnArrowHit", SendMessageOptions.DontRequireReceiver); } }
public IEnumerator spawnDummy(getAnimatorParams.DummyParams p) { Quaternion angle = p.Angle; if (BoltNetwork.isClient) { yield break; } Vector3 bodyPosition = base.transform.position; bool useBodyPosition = false; if (this.setup && this.setup.ai && this.setup.ai.pale && !p.IsDummyLoad && this.health.trapGo) { trapTrigger componentInChildren = this.health.trapGo.GetComponentInChildren <trapTrigger>(); if (componentInChildren) { componentInChildren.FixPalePosition(this.setup, false); bodyPosition += -0.15f * Vector3.up; useBodyPosition = true; } } GameObject dummy = UnityEngine.Object.Instantiate <GameObject>(this.dummyMutant, bodyPosition, base.transform.rotation); dummy.transform.rotation = angle; if (p.IsDummyLoad || (this.animator.GetBool("trapBool") && this.animator.GetInteger("trapTypeInt1") == 2)) { dummy.transform.localEulerAngles = new Vector3(0f, dummy.transform.localEulerAngles.y, 0f); } dummy.transform.localScale = this.mutantBase.localScale; dummy.SendMessage("setCalledFromDeath", SendMessageOptions.DontRequireReceiver); SkinnedMeshRenderer[] sk = dummy.GetComponentsInChildren <SkinnedMeshRenderer>(); foreach (SkinnedMeshRenderer skinnedMeshRenderer in sk) { skinnedMeshRenderer.enabled = false; } Animator dummyAnim = dummy.GetComponent <Animator>(); AnimatorStateInfo state = this.animator.GetCurrentAnimatorStateInfo(0); dummyAnim.CrossFade(state.nameHash, 0f, 0, state.normalizedTime); dummyAnim.CopyParamsFrom(this.animator); if (p.IsDummyLoad) { if (this.animator.GetInteger("trapTypeInt1") != 3) { dummyAnim.SetBoolReflected("trapBool", true); if (this.animator.GetInteger("trapTypeInt1") == 2) { dummyAnim.SetBoolReflected("enterTrapBool", true); dummyAnim.SetBoolReflected("deathBOOL", true); } else { dummyAnim.SetTriggerReflected("deathTrigger"); } } } this.dummyHips.rotation = this.hips.rotation; this.dummyHips.position = bodyPosition; dummy.transform.position = bodyPosition; dummy.transform.localScale = this.mutantBase.localScale; if (this.setup.health.Fire.Length > 0) { mutantTransferFire component = base.transform.GetComponent <mutantTransferFire>(); foreach (GameObject gameObject in this.setup.health.Fire) { if (gameObject.activeSelf) { component.transferFireToTarget(gameObject, dummy); } } } if (p.IsDummyLoad || this.animator.GetBool("trapBool")) { if (this.animator.GetInteger("trapTypeInt1") == 2 && this.health.trapParent) { dummy.transform.parent = this.health.trapParent.transform; dummy.SendMessageUpwards("setTrapDummy", dummy); CoopMutantDummy componentInChildren2 = dummy.GetComponentInChildren <CoopMutantDummy>(); if (componentInChildren2 && this.health.trapGo) { this.health.trapGo.SendMessage("SetNooseRope", componentInChildren2, SendMessageOptions.DontRequireReceiver); } } if ((p.IsDummyLoad || this.animator.GetInteger("trapTypeInt1") == 0) && this.health.trapGo) { this.health.trapGo.SendMessage("addTrappedMutant", new object[] { dummy, this.setup }, SendMessageOptions.DontRequireReceiver); dummy.SendMessage("setTrapGo", this.health.trapGo, SendMessageOptions.DontRequireReceiver); } } string TYPE = string.Empty; bool skinny = false; dummy.SendMessage("invokePickupSpawn", SendMessageOptions.DontRequireReceiver); if (this.setup.ai.femaleSkinny) { skinny = true; dummy.SendMessage(TYPE = "setFemaleSkinny", base.transform); } if (this.setup.ai.maleSkinny) { skinny = true; if (this.setup.ai.pale) { dummy.SendMessage(TYPE = "enableMaleSkinnyPaleProps"); dummy.SendMessage(TYPE = "setMaleSkinnyPale", base.transform); if (this.setup.ai.skinned) { dummy.SendMessage(TYPE = "setSkinnedMutant", this.setup.ai.skinned); } } else { dummy.SendMessage(TYPE = "enableMaleSkinnyProps"); dummy.SendMessage(TYPE = "setMaleSkinny", base.transform); } } if (this.setup.ai.pale && !this.setup.ai.maleSkinny) { dummy.SendMessage(TYPE = "enablePaleProps"); dummy.SendMessage(TYPE = "setPaleMale"); if (this.setup.ai.skinned) { dummy.SendMessage(TYPE = "setSkinnedMutant", this.setup.ai.skinned); } } if (this.setup.ai.leader && !this.setup.ai.maleSkinny && !this.setup.ai.pale && !this.setup.ai.female) { dummy.SendMessage(TYPE = "setRegularMale", this.setup.propManager ? this.setup.propManager.regularMaleDice : 0); dummy.SendMessage(TYPE = "enableLeaderProps", this.setup.propManager ? this.setup.propManager.LeaderDice : 0); if (this.setup.ai.painted) { dummy.SendMessage(TYPE = "setPaintedLeader"); } dummy.SendMessage(TYPE = "setRegularMaleLeader"); } if (this.setup.ai.fireman) { if (this.setup.ai.fireman_dynamite) { dummy.SendMessage(TYPE = "setDynamiteMan"); } dummy.SendMessage(TYPE = "enableFiremanProps"); dummy.SendMessage(TYPE = "setRegularMaleFireman"); } if (this.setup.ai.female && !this.setup.ai.femaleSkinny) { if (this.setup.ai.painted) { dummy.SendMessage(TYPE = "setFemalePainted", this.setup.bodyVariation ? this.setup.bodyVariation.femaleDice : 0); } else { dummy.SendMessage(TYPE = "setFemaleRegular", this.setup.bodyVariation ? this.setup.bodyVariation.femaleDice : 0); } if (this.bodyVar && this.bodyVar.Hair && this.bodyVar.Hair.activeSelf) { dummy.SendMessage(TYPE = "setFemaleHair"); } if (this.bodyVar && this.bodyVar.Clothing && this.bodyVar.Clothing.activeSelf) { dummy.SendMessage(TYPE = "setFemaleClothes"); } if (this.bodyVar && this.bodyVar.FireDice == 2) { dummy.SendMessage(TYPE = "setFemaleFire"); } } if (this.setup.ai.male && !this.setup.ai.maleSkinny && !this.setup.ai.pale && !this.setup.ai.fireman && !this.setup.ai.leader) { if (this.setup.ai.painted) { dummy.SendMessage(TYPE = "setPaintedMale", this.setup.propManager ? this.setup.propManager.regularMaleDice : 0); } else { dummy.SendMessage(TYPE = "setRegularMale", this.setup.propManager ? this.setup.propManager.regularMaleDice : 0); } } if (this.setup.health.alreadyBurnt) { dummy.SendMessage("setBurntSkin", SendMessageOptions.DontRequireReceiver); } dummy.SendMessage("setPoisoned", this.health.poisoned, SendMessageOptions.DontRequireReceiver); if (this.setup.arrowSticker) { arrowStickToTarget componentInChildren3 = dummy.GetComponentInChildren <arrowStickToTarget>(); foreach (KeyValuePair <Transform, int> keyValuePair in this.setup.arrowSticker.stuckArrows) { if (keyValuePair.Key) { componentInChildren3.applyStuckArrowToDummy(keyValuePair.Key, keyValuePair.Key.localPosition, keyValuePair.Key.localRotation, keyValuePair.Value); } } } this.setup.health.MySkin.GetPropertyBlock(this.bloodPropertyBlock); dummy.SendMessage("setSkinDamageProperty", this.bloodPropertyBlock, SendMessageOptions.DontRequireReceiver); dummy.SendMessage("setSkinMaterialProperties", this.health.MySkin.material, SendMessageOptions.DontRequireReceiver); if (BoltNetwork.isServer) { CoopMutantDummyToken coopMutantDummyToken = new CoopMutantDummyToken(); coopMutantDummyToken.Skinny = skinny; coopMutantDummyToken.HipPosition = bodyPosition; coopMutantDummyToken.HipRotation = this.hips.rotation; coopMutantDummyToken.OriginalMutant = base.GetComponent <BoltEntity>(); coopMutantDummyToken.Scale = this.mutantBase.localScale; coopMutantDummyToken.skinDamage1 = this.bloodPropertyBlock.GetFloat("_Damage1"); coopMutantDummyToken.skinDamage2 = this.bloodPropertyBlock.GetFloat("_Damage2"); coopMutantDummyToken.skinDamage3 = this.bloodPropertyBlock.GetFloat("_Damage3"); coopMutantDummyToken.skinDamage4 = this.bloodPropertyBlock.GetFloat("_Damage4"); if (p.IsDummyLoad) { foreach (SkinnedMeshRenderer skinnedMeshRenderer2 in sk) { skinnedMeshRenderer2.enabled = true; } CoopMutantMaterialSync component2 = dummy.GetComponent <CoopMutantMaterialSync>(); component2.ForceStart(); coopMutantDummyToken.MaterialIndex = component2.GetMaterialIndex(); CoopMutantPropSync component3 = dummy.GetComponent <CoopMutantPropSync>(); coopMutantDummyToken.Props = component3.GetPropMask(); } else { IMutantState state2 = base.GetComponent <BoltEntity>().GetState <IMutantState>(); coopMutantDummyToken.MaterialIndex = state2.MainMaterialIndex; coopMutantDummyToken.Props = state2.prop_mask; } if (this.health.poisoned) { coopMutantDummyToken.skinColor = new Color(0.670588255f, 0.796078444f, 0.5529412f, 1f); } else if (this.setup.ai.pale && !this.setup.ai.skinned) { coopMutantDummyToken.skinColor = new Color(0.8039216f, 0.870588243f, 0.9137255f, 1f); } else { coopMutantDummyToken.skinColor = new Color(0.698039234f, 0.698039234f, 0.698039234f, 1f); } BoltNetwork.Attach(dummy, coopMutantDummyToken); } if (BoltNetwork.isServer) { IMutantFemaleDummyState mutantFemaleDummyState; if (dummy.GetComponent <BoltEntity>().TryFindState <IMutantFemaleDummyState>(out mutantFemaleDummyState)) { mutantFemaleDummyState.Type = TYPE; mutantFemaleDummyState.CrossFadeHash = state.nameHash; mutantFemaleDummyState.CrossFadeTime = state.normalizedTime; } IMutantMaleDummyState mutantMaleDummyState; if (dummy.GetComponent <BoltEntity>().TryFindState <IMutantMaleDummyState>(out mutantMaleDummyState)) { mutantMaleDummyState.Type = TYPE; mutantMaleDummyState.CrossFadeHash = state.nameHash; mutantMaleDummyState.CrossFadeTime = state.normalizedTime; } } List <Quaternion> jointRotations = new List <Quaternion>(); for (int l = 0; l < this.mrs.jointsToSync.Length; l++) { jointRotations.Add(this.mrs.jointsToSync[l].localRotation); } if (!p.IsDummyLoad && !this.animator.GetBool("trapBool")) { dummy.SendMessage("syncRagDollJoints", jointRotations, SendMessageOptions.DontRequireReceiver); } yield return(new WaitForFixedUpdate()); yield return(new WaitForFixedUpdate()); yield return(new WaitForFixedUpdate()); yield return(new WaitForFixedUpdate()); yield return(new WaitForFixedUpdate()); dummy.transform.localScale = this.mutantBase.localScale; dummy.transform.position = ((!useBodyPosition) ? this.DeadPosition : bodyPosition); if (this.animator.GetBool("trapBool") && this.animator.GetInteger("trapTypeInt1") == 2) { this.setup.rootTr.parent = null; } foreach (SkinnedMeshRenderer skinnedMeshRenderer3 in sk) { skinnedMeshRenderer3.enabled = true; } if (PoolManager.Pools["enemies"].IsSpawned(base.transform)) { PoolManager.Pools["enemies"].Despawn(base.transform); } else if (BoltNetwork.isServer) { dummy.GetComponent <BoltEntity>().DestroyDelayed(0.1f); } else { UnityEngine.Object.Destroy(base.transform.gameObject); } yield return(null); yield break; }
public override void CheckHit(Vector3 position, Transform target, bool isTrigger, Collider targetCollider) { if (alreadyHit.Contains(target)) { return; } else { alreadyHit.Add(target); } if (UpgradePointsMod.instance != null) { float a = BaseDamage + velocitybonus; a *= UpgradePointsMod.instance.ArrowDmg; if (UpgradePointsMod.instance.specialUpgrades[28].bought) { if (UpgradePointsMod.instance.specialUpgrades[49].bought) { if (UpgradePointsMod.instance.specialUpgrades[50].bought) { if (UpgradePointsMod.instance.specialUpgrades[36].bought) { if (UpgradePointsMod.instance.specialUpgrades[90].bought) { if (UpgradePointsMod.instance.specialUpgrades[91].bought) { if (UpgradePointsMod.instance.specialUpgrades[92].bought) { if (UpgradePointsMod.instance.specialUpgrades[93].bought) { if (UpgradePointsMod.instance.specialUpgrades[94].bought) { if (UpgradePointsMod.instance.specialUpgrades[95].bought) { a *= 35; } else { a *= 32.5f; } } else { a *= 30f; } } else { a *= 27f; } } else { a *= 24f; } } else { a *= 20f; } } else { a *= 16f; } } else { a *= 8f; } } else { a *= 3f; } } else { a *= 2f; } if (spearType) { if (UpgradePointsMod.instance.specialUpgrades[30].bought) { a *= 3.5f; } } if (UpgradePointsMod.instance.specialUpgrades[29].bought) { if (UpgradePointsMod.instance.specialUpgrades[89].bought) { a *= 1 + UpgradePointsMod.instance.FocusFireStacks * 0.4f; } else { a *= 1 + UpgradePointsMod.instance.FocusFireStacks * 0.25f; } } if (UpgradePointsMod.instance.specialUpgrades[7].bought) { if (StealthCheck.IsHidden) { if (UpgradePointsMod.instance.specialUpgrades[8].bought) { if (UpgradePointsMod.instance.specialUpgrades[10].bought) { a *= 15; } else { a *= 5; } } else { a *= 2; } } } a *= BrawlerUpgrade.DamageBonus + 1; if (UpgradePointsMod.instance.specialUpgrades[33].bought) { float dist = Vector3.Distance(startingpos, target.position); dist /= 20; // every 20 meters a = a * (1 + dist); } if (UpgradePointsMod.instance.specialUpgrades[48].bought) { if (target.CompareTag("enemyCollide")) { if (UpgradePointsMod.instance.ComboStrikeBonusDamage(UpgradePointsMod.StrikeType.Ranged, target.root)) { a *= 4; } UpgradePointsMod.instance.AddToComboStrike(UpgradePointsMod.StrikeType.Melee, target.root); } } if (UpgradePointsMod.instance.specialUpgrades[44].bought) { if (CharacterControllerMod.FloatVelocity < 0.1f) { a *= 3; } } } a *= UpgradePointsMod.CritBonus(); damage = Mathf.RoundToInt(a); } if (UpgradePointsMod.instance.specialUpgrades[29].bought) { if (UpgradePointsMod.instance.FocusFireTarget == target.gameObject) { if (UpgradePointsMod.instance.specialUpgrades[88].bought) { UpgradePointsMod.instance.FocusFireStacks = Mathf.Clamp(UpgradePointsMod.instance.FocusFireStacks + 1, 0, 100); } else { UpgradePointsMod.instance.FocusFireStacks = Mathf.Clamp(UpgradePointsMod.instance.FocusFireStacks + 1, 0, 20); } } else { UpgradePointsMod.instance.FocusFireStacks = 0; UpgradePointsMod.instance.FocusFireTarget = target.gameObject; } } if (!ignoreCollisionEvents(targetCollider)) { if (!isTrigger) { Molotov componentInParent = ((Component)base.transform).GetComponentInParent <Molotov>(); if ((bool)componentInParent) { componentInParent.IncendiaryBreak(); } } bool headDamage = false; if (target.gameObject.layer == LayerMask.NameToLayer("Water")) { FMODCommon.PlayOneshotNetworked(hitWaterEvent, base.transform, FMODCommon.NetworkRole.Any); } else if (target.CompareTag("SmallTree")) { FMODCommon.PlayOneshotNetworked(hitBushEvent, base.transform, FMODCommon.NetworkRole.Any); } if (target.CompareTag("PlaneHull")) { FMODCommon.PlayOneshotNetworked(hitMetalEvent, base.transform, FMODCommon.NetworkRole.Any); } if (target.CompareTag("Tree") || target.root.CompareTag("Tree") || target.CompareTag("Target")) { if (spearType) { base.StartCoroutine(HitTree(hit.point - base.transform.forward * 2.1f)); } else if (hitPointUpdated) { base.StartCoroutine(HitTree(hit.point - base.transform.forward * 0.35f)); } else { base.StartCoroutine(HitTree(base.transform.position - base.transform.forward * 0.35f)); } disableLive(); if (target.CompareTag("Tree") || target.root.CompareTag("Tree")) { TreeHealth component = ((Component)target).GetComponent <TreeHealth>(); if (!(bool)component) { component = ((Component)target.root).GetComponent <TreeHealth>(); } if ((bool)component) { component.LodTree.AddTreeCutDownTarget(base.gameObject); } } } else if (target.CompareTag("enemyCollide") || target.tag == "lb_bird" || target.CompareTag("animalCollide") || target.CompareTag("Fish") || target.CompareTag("enemyRoot") || target.CompareTag("animalRoot")) { UpgradePointsMod.instance.DoAreaDamage(target.transform.root, damage); bool flag = target.tag == "lb_bird" || target.CompareTag("lb_bird"); bool flag2 = target.CompareTag("Fish"); bool flag3 = target.CompareTag("animalCollide") || target.CompareTag("animalRoot"); arrowStickToTarget arrowStickToTarget = ((Component)target).GetComponent <arrowStickToTarget>(); if (!(bool)arrowStickToTarget) { arrowStickToTarget = ((Component)target.root).GetComponentInChildren <arrowStickToTarget>(); } if (!spearType && !flintLockAmmoType && !flag2) { if ((bool)arrowStickToTarget && arrowStickToTarget.enabled) { if (flag) { EventRegistry.Achievements.Publish(TfEvent.Achievements.BirdArrowKill, null); } arrowStickToTarget.CreatureType(flag3, flag, flag2); if (BoltNetwork.isRunning) { if ((bool)at && (bool)at._boltEntity && at._boltEntity.isAttached && at._boltEntity.isOwner) { headDamage = arrowStickToTarget.stickArrowToNearestBone(base.transform); } } else { headDamage = arrowStickToTarget.stickArrowToNearestBone(base.transform); } } base.Invoke("destroyMe", 0.1f); } base.StartCoroutine(HitAi(target, flag || flag3, headDamage)); if (flag2) { base.StartCoroutine(HitFish(target, hit.point - base.transform.forward * 0.35f)); } disableLive(); } else if (target.CompareTag("PlayerNet")) { if (BoltNetwork.isRunning) { BoltEntity boltEntity = ((Component)target).GetComponentInParent <BoltEntity>(); if (!(bool)boltEntity) { boltEntity = ((Component)target).GetComponent <BoltEntity>(); } if ((bool)boltEntity) { HitPlayer.Create(boltEntity, EntityTargets.OnlyOwner).Send(); disableLive(); } } } else if (target.CompareTag("TerrainMain") && !LocalPlayer.IsInCaves) { if (ignoreTerrain) { ignoreTerrain = false; base.StartCoroutine(RevokeIgnoreTerrain()); } else { if (spearType) { if ((bool)bodyCollider) { bodyCollider.isTrigger = true; } base.StartCoroutine(HitStructure(base.transform.position - base.transform.forward * 2.1f, false)); } else { Vector3 position2 = base.transform.position - base.transform.forward * -0.8f; float num = Terrain.activeTerrain.SampleHeight(base.transform.position); Vector3 position3 = Terrain.activeTerrain.transform.position; float num2 = num + position3.y; Vector3 position4 = base.transform.position; if (position4.y < num2) { position2.y = num2 + 0.5f; } base.StartCoroutine(HitStructure(position2, false)); } disableLive(); FMODCommon.PlayOneshotNetworked(hitGroundEvent, base.transform, FMODCommon.NetworkRole.Any); } } else if (target.CompareTag("structure") || target.CompareTag("jumpObject") || target.CompareTag("SLTier1") || target.CompareTag("SLTier2") || target.CompareTag("SLTier3") || target.CompareTag("UnderfootWood")) { if ((bool)target.transform.parent) { if ((bool)((Component)target.transform.parent).GetComponent <StickFenceChunkArchitect>()) { return; } if ((bool)((Component)target.transform.parent).GetComponent <BoneFenceChunkArchitect>()) { return; } } if (!isTrigger) { if (spearType) { base.StartCoroutine(HitStructure(hit.point - base.transform.forward * 2.1f, true)); } else { base.StartCoroutine(HitStructure(hit.point - base.transform.forward * 0.35f, true)); } disableLive(); } } else if (target.CompareTag("CaveDoor")) { ignoreTerrain = true; Physics.IgnoreCollision(base.GetComponent <Collider>(), ((Component)Terrain.activeTerrain).GetComponent <Collider>(), true); } else if (flintLockAmmoType && (target.CompareTag("BreakableWood") || target.CompareTag("BreakableRock"))) { target.SendMessage("Hit", 40, SendMessageOptions.DontRequireReceiver); } if (!Live) { destroyThisAmmo(); parent.BroadcastMessage("OnArrowHit", SendMessageOptions.DontRequireReceiver); } } }
public override void OnEvent(PlayerHitEnemy ev) { //this needed to be changed. //the command would send damage using hitReal - pure damage. //this made clients attack ignore armor and deal too much dmg if (!this.ValidateSender(ev, SenderTypes.Any)) { return; } if (!ev.Target) { return; } if (ev.Hit == 0) { return; } try { if (EnemyHealth.CurrentAttacker == null) { EnemyHealth.CurrentAttacker = ev.Target; } var packed = ev.Target.networkId.PackedValue; if (EnemyManager.hostDictionary.ContainsKey(packed)) { var enemy = EnemyManager.hostDictionary[packed]; if (ev.explosion) { enemy.HealthScript.Explosion(-1); } if (ev.Burn) { enemy.HealthScript.Burn(); } if (ev.getAttackerType == DamageMath.SILENTattackerType) { //ghost hit float damage = BitConverter.ToSingle(BitConverter.GetBytes(ev.Hit), 0); enemy.HitPhysicalSilent(damage); } else if (ev.getAttackerType == DamageMath.SILENTattackerTypeMagic) { //ghost hit float damage = BitConverter.ToSingle(BitConverter.GetBytes(ev.Hit), 0); enemy.HitMagic(damage); } else if (ev.getAttackerType == DamageMath.PURE) { float damage = BitConverter.ToSingle(BitConverter.GetBytes(ev.Hit), 0); enemy.HitPure(damage); } else { if (ev.Hit > 0) { float damage = ev.getAttackerType >= DamageMath.CONVERTEDFLOATattackerType ? BitConverter.ToSingle(BitConverter.GetBytes(ev.Hit), 0) : ev.Hit; if (ev.getAttackerType >= DamageMath.CONVERTEDFLOATattackerType) { ev.getAttackerType -= DamageMath.CONVERTEDFLOATattackerType; } //just in case i ever need this //this is how to get the player object which raised the event (ev.RaisedBy.UserData as BoltEntity) enemy.HealthScript.getAttackDirection(ev.getAttackerType); var attackerGO = (ev.RaisedBy.UserData as BoltEntity).gameObject; enemy.setup.search.switchToNewTarget(attackerGO); enemy.setup.hitReceiver.getAttackDirection(ev.getAttackDirection); enemy.setup.hitReceiver.getCombo(ev.getCombo); enemy.HealthScript.takeDamage(ev.takeDamage); enemy.HealthScript.setSkinDamage(1); enemy.HitPhysical(damage); } else { ModAPI.Console.Write("The good armor reduction"); enemy.ReduceArmor(-ev.Hit); } } return; } //F**k all of this spaghetti below lb_Bird component = ev.Target.GetComponent <lb_Bird>(); Fish componentInChildren = ev.Target.GetComponentInChildren <Fish>(); Transform transform; if (componentInChildren) { transform = componentInChildren.transform; } else if (ev.Target.GetComponent <animalHealth>()) { transform = ev.Target.transform; } else if (component) { transform = component.transform; } else { EnemyHealth componentInChildren2 = ev.Target.GetComponentInChildren <EnemyHealth>(); transform = componentInChildren2 ? componentInChildren2.transform : ev.Target.transform.GetChild(0); } if (ev.getAttacker == 10 && ev.Weapon) { ArrowDamage componentInChildren3 = ev.Weapon.GetComponentInChildren <ArrowDamage>(); if (componentInChildren3.Live) { arrowStickToTarget componentInChildren4 = transform.GetComponentInChildren <arrowStickToTarget>(); Transform target = transform; if (componentInChildren4) { target = componentInChildren4.transform; } componentInChildren3.CheckHit(Vector3.zero, target, false, transform.GetComponent <Collider>()); } } if (ev.explosion) { transform.SendMessage("Explosion", -1, SendMessageOptions.DontRequireReceiver); } if (ev.HitHead) { transform.SendMessage("HitHead", SendMessageOptions.DontRequireReceiver); } if (ev.getStealthAttack) { transform.SendMessage("getStealthAttack", SendMessageOptions.DontRequireReceiver); } float dmg = ev.getAttackerType >= DamageMath.CONVERTEDFLOATattackerType ? BitConverter.ToSingle(BitConverter.GetBytes(ev.Hit), 0) : ev.Hit; if (ev.hitFallDown) { mutantHitReceiver componentInChildren5 = transform.GetComponentInChildren <mutantHitReceiver>(); if (componentInChildren5) { componentInChildren5.sendHitFallDown(dmg); } } else { if (ev.Hit > 0) { transform.SendMessage("getAttacker", (ev.RaisedBy.UserData as BoltEntity).gameObject, SendMessageOptions.DontRequireReceiver); transform.SendMessage("getAttackerType", ev.getAttackerType, SendMessageOptions.DontRequireReceiver); transform.SendMessage("getAttackDirection", ev.getAttackDirection, SendMessageOptions.DontRequireReceiver); transform.SendMessage("getCombo", ev.getCombo, SendMessageOptions.DontRequireReceiver); transform.SendMessage("takeDamage", ev.takeDamage, SendMessageOptions.DontRequireReceiver); transform.SendMessage("setSkinDamage", UnityEngine.Random.Range(0, 3), SendMessageOptions.DontRequireReceiver); transform.SendMessage("ApplyAnimalSkinDamage", ev.getAttackDirection, SendMessageOptions.DontRequireReceiver); transform.SendMessage("Hit", dmg, SendMessageOptions.DontRequireReceiver); if (ev.HitAxe) { transform.SendMessage("HitAxe", SendMessageOptions.DontRequireReceiver); } if (ev.Burn) { transform.SendMessage("Burn", SendMessageOptions.DontRequireReceiver); } } else { ModAPI.Console.Write("The bad armor reduction"); transform.SendMessage("ReduceArmor", -dmg, SendMessageOptions.DontRequireReceiver); } } } finally { EnemyHealth.CurrentAttacker = null; } }
public override void CheckHit(Vector3 position, Transform target, bool isTrigger, Collider targetCollider) { if (ignoreCollisionEvents(targetCollider) && !target.CompareTag("enemyRoot")) { return; } if (!isTrigger) { Molotov componentInParent = transform.GetComponentInParent <Molotov>(); if ((bool)componentInParent) { componentInParent.IncendiaryBreak(); return; } } bool headDamage = false; if (target.gameObject.layer == LayerMask.NameToLayer("Water")) { FMODCommon.PlayOneshotNetworked(hitWaterEvent, base.transform, FMODCommon.NetworkRole.Any); return; } else if (target.CompareTag("SmallTree")) { FMODCommon.PlayOneshotNetworked(hitBushEvent, base.transform, FMODCommon.NetworkRole.Any); return; } else if (target.CompareTag("PlaneHull")) { FMODCommon.PlayOneshotNetworked(hitMetalEvent, base.transform, FMODCommon.NetworkRole.Any); return; } else if (target.CompareTag("Tree") || target.root.CompareTag("Tree") || target.CompareTag("Target")) { if (spearType) { base.StartCoroutine(HitTree(hit.point - base.transform.forward * 2.1f)); } else if (hitPointUpdated) { base.StartCoroutine(HitTree(hit.point - base.transform.forward * 0.35f)); } else { base.StartCoroutine(HitTree(base.transform.position - base.transform.forward * 0.35f)); } disableLive(); if (target.CompareTag("Tree") || target.root.CompareTag("Tree")) { TreeHealth component = target.GetComponent <TreeHealth>(); if (!(bool)component) { component = target.root.GetComponent <TreeHealth>(); } if ((bool)component) { component.LodTree.AddTreeCutDownTarget(base.gameObject); } } return; } else if (target.CompareTag("enemyCollide") || target.tag == "lb_bird" || target.CompareTag("animalCollide") || target.CompareTag("Fish") || target.CompareTag("enemyRoot") || target.CompareTag("animalRoot")) { if (lastPierced != null) { if (target.root == lastPierced) { Physics.IgnoreCollision(base.GetComponent <Collider>(), targetCollider); return; } } bool pierce = false; float pierceChance = ModdedPlayer.Stats.projectilePierceChance - pierceCount; if (pierceChance > 0) { if (pierceChance >= 1 || pierceChance < Random.value) { Physics.IgnoreCollision(base.GetComponent <Collider>(), targetCollider); pierceCount++; lastPierced = target.root; Invoke("ForgetLastPierced", 0.125f); pierce = true; } } if (crossbowBoltType) { } else if (flintLockAmmoType) { } else if (spearType) { } else { if (ModdedPlayer.Stats.i_CrossfireQuiver.value) { if (Time.time - ModdedPlayer.instance._lastCrossfireTime > 10 * ModdedPlayer.Stats.cooldown) { ModdedPlayer.instance._lastCrossfireTime = Time.time; Vector3 pos = Camera.main.transform.position + Camera.main.transform.right * 5; Vector3 dir = transform.position - pos; dir.Normalize(); SpellActions.CastMagicArrow(pos, dir); } } } arrowStickToTarget arrowStickToTarget = target.GetComponent <arrowStickToTarget>(); if (!(bool)arrowStickToTarget) { arrowStickToTarget = target.root.GetComponentInChildren <arrowStickToTarget>(); } bool isbird = target.tag == "lb_bird" || target.CompareTag("lb_bird"); bool isfish = target.CompareTag("Fish"); bool isanimal = target.CompareTag("animalCollide") || target.CompareTag("animalRoot"); if (!spearType && !flintLockAmmoType && !isfish) { if (arrowStickToTarget && arrowStickToTarget.enabled) { if (isbird) { EventRegistry.Achievements.Publish(TfEvent.Achievements.BirdArrowKill, null); } arrowStickToTarget.CreatureType(isanimal, isbird, isfish); if (SpellActions.SeekingArrow_ChangeTargetOnHit) { startposition = transform.position; } if (BoltNetwork.isRunning) { if (at && at._boltEntity && at._boltEntity.isAttached && at._boltEntity.isOwner) { if (pierce) { headDamage = ((XArrowStickToTargetMod)arrowStickToTarget).checkHeadDamage(transform); } else { headDamage = arrowStickToTarget.stickArrowToNearestBone(base.transform); } } } else { if (pierce) { headDamage = ((XArrowStickToTargetMod)arrowStickToTarget).checkHeadDamage(transform); } headDamage = arrowStickToTarget.stickArrowToNearestBone(base.transform); } } if ((bool)arrowStickToTarget && !pierce) { Destroy(parent.gameObject); } } else { if (SpellActions.SeekingArrow_ChangeTargetOnHit) { ModdedPlayer.Stats.spell_seekingArrow.value = true; SpellActions.SeekingArrow_Target.gameObject.SetActive(true); SpellActions.SeekingArrow_Target.parent = target.transform; SpellActions.SeekingArrow_Target.position = new Vector3(target.transform.position.x, transform.position.y - 0.075f, target.transform.position.z); SpellActions.SeekingArrow_TimeStamp = Time.time; startposition = transform.position; SpellActions.SeekingArrow_ChangeTargetOnHit = false; } } if (headDamage && !flintLockAmmoType && ModdedPlayer.Stats.perk_trueAim && ModdedPlayer.Stats.spell_seekingArrow) { //True aim ability float dist = (startposition - transform.position).sqrMagnitude; if (dist >= 3600f) { OutputDmg *= 4; NewHitAi(target, isbird || isanimal, headDamage); ModdedPlayer.instance.DoAreaDamage(target.root, OutputDmg); ModdedPlayer.instance.OnHit(); ModdedPlayer.instance.OnHit_Ranged(target); BuffDB.AddBuff(28, 104, 1.20f, 5); //crit chance if (ModdedPlayer.Stats.perk_trueAimUpgrade && dist >= 14400f) { OutputDmg *= 10; NewHitAi(target, isbird || isanimal, headDamage); NewHitAi(target, isbird || isanimal, headDamage); ModdedPlayer.instance.DoAreaDamage(target.root, OutputDmg); ModdedPlayer.instance.OnHit(); ModdedPlayer.instance.OnHit_Ranged(target); ModdedPlayer.instance.DoAreaDamage(target.root, OutputDmg); ModdedPlayer.instance.OnHit(); ModdedPlayer.instance.OnHit_Ranged(target); } } } NewHitAi(target, isbird || isanimal, headDamage); ModdedPlayer.instance.DoAreaDamage(target.root, OutputDmg); ModdedPlayer.instance.OnHit(); ModdedPlayer.instance.OnHit_Ranged(target); BoltEntity be = target.GetComponentInParent <BoltEntity>(); if (be == null) { be = target.GetComponent <BoltEntity>(); } if (ModdedPlayer.Stats.perk_fireDmgIncreaseOnHit) { int myID = 1000 + ModReferences.Players.IndexOf(LocalPlayer.GameObject); float dmg = 1 + ModdedPlayer.Stats.spellFlatDmg / 3; dmg *= ModdedPlayer.Stats.TotalMagicDamageMultiplier; dmg *= ModdedPlayer.Stats.fireDamage + 1; dmg *= 0.3f; if (GameSetup.IsSinglePlayer || GameSetup.IsMpServer) { target.GetComponentInParent <EnemyProgression>()?.FireDebuff(myID, dmg, 14); } else { if (be != null) { using (System.IO.MemoryStream answerStream = new System.IO.MemoryStream()) { using (System.IO.BinaryWriter w = new System.IO.BinaryWriter(answerStream)) { w.Write(27); w.Write(be.networkId.PackedValue); w.Write(dmg); w.Write(14.5f); w.Write(1); w.Close(); } ChampionsOfForest.Network.NetworkManager.SendLine(answerStream.ToArray(), ChampionsOfForest.Network.NetworkManager.Target.OnlyServer); answerStream.Close(); } } } } if (ModdedPlayer.Stats.TotalRangedArmorPiercing > 0 && target.gameObject.CompareTag("enemyCollide")) { if (ModdedPlayer.Stats.perk_thrownSpearExtraArmorReduction && spearType) { if (BoltNetwork.isClient) { if (be != null) { EnemyProgression.ReduceArmor(be, ModdedPlayer.Stats.TotalRangedArmorPiercing * 2 + ModdedPlayer.Stats.TotalMeleeArmorPiercing); } } else if (EnemyManager.enemyByTransform.ContainsKey(target.root)) { var prog = EnemyManager.enemyByTransform[target.root]; prog.ReduceArmor(ModdedPlayer.Stats.TotalRangedArmorPiercing * 2 + ModdedPlayer.Stats.TotalMeleeArmorPiercing); } } else { if (BoltNetwork.isClient) { if (be != null) { EnemyProgression.ReduceArmor(be, ModdedPlayer.Stats.TotalRangedArmorPiercing); } } else if (EnemyManager.enemyByTransform.ContainsKey(target.root)) { var prog = EnemyManager.enemyByTransform[target.root]; prog.ReduceArmor(ModdedPlayer.Stats.TotalRangedArmorPiercing); } } } if (isfish) { base.StartCoroutine(HitFish(target, hit.point - base.transform.forward * 0.35f)); } //check piercing if (pierce) { return; } Live = false; disableLive(); DisableFlight(); } else if (target.CompareTag("PlayerNet")) { if (BoltNetwork.isRunning) { BoltEntity be = target.GetComponentInParent <BoltEntity>(); if (!(bool)be) { be = target.GetComponent <BoltEntity>(); } if (be) { if (ModdedPlayer.Stats.i_ArchangelBow && GreatBow.isEnabled) { float lifePerSecond = (ModdedPlayer.Stats.healthRecoveryPerSecond) * ModdedPlayer.Stats.allRecoveryMult * (ModdedPlayer.Stats.healthPerSecRate) * 2; using (System.IO.MemoryStream answerStream = new System.IO.MemoryStream()) { using (System.IO.BinaryWriter w = new System.IO.BinaryWriter(answerStream)) { w.Write(39); w.Write(be.GetState <IPlayerState>().name); w.Write(lifePerSecond); w.Write(ModdedPlayer.Stats.TotalMaxHealth * 0.2f); w.Close(); } AsyncHit.SendCommandDelayed(1, answerStream.ToArray(), Network.NetworkManager.Target.OnlyServer); answerStream.Close(); } BuffDB.AddBuff(25, 91, lifePerSecond, 10); } else if (ModSettings.FriendlyFire) { float dmgUnclamped = this.OutputDmg; if (ModdedPlayer.Stats.spell_seekingArrow) { float dist = Vector3.Distance(target.position, startposition); dmgUnclamped *= 1 + dist * ModdedPlayer.Stats.spell_seekingArrow_DamagePerDistance; } if (spearType) { if (ModdedPlayer.Stats.perk_thrownSpearhellChance > 0 && Random.value <= ModdedPlayer.Stats.perk_thrownSpearhellChance && OutputDmg > 1) { var obj = Instantiate(PhysicBody, Camera.main.transform.position + Vector3.up * 2f, Quaternion.LookRotation(PhysicBody.position - Camera.main.transform.position)); obj.velocity = PhysicBody.velocity.normalized * 90f * ModdedPlayer.Stats.projectileSpeed; Destroy(obj.gameObject, 18); } } if (headDamage || (flintLockAmmoType && Random.value <= ModdedPlayer.Stats.perk_bulletCritChance) || (spearType && Random.value <= ModdedPlayer.Stats.perk_thrownSpearhellChance)) { headDamage = true; dmgUnclamped *= ModdedPlayer.Stats.headShotDamage; dmgUnclamped *= SpellActions.FocusOnHeadShot(); if (ModdedPlayer.Stats.spell_seekingArrow) { dmgUnclamped *= ModdedPlayer.Stats.spell_seekingArrow_HeadDamage; } } else { dmgUnclamped *= SpellActions.FocusOnBodyShot(); } DamageMath.ReduceDamageToSendOverNet(dmgUnclamped, out int sendDamage, out int reps); HitPlayer HP = HitPlayer.Create(be, EntityTargets.Everyone); HP.damage = sendDamage; for (int i = 0; i < reps; i++) { HP.Send(); } //check piercing float pierceChance = ModdedPlayer.Stats.projectilePierceChance - pierceCount; if (pierceChance > 0) { if (pierceChance >= 1 || pierceChance < Random.value) { Physics.IgnoreCollision(base.GetComponent <Collider>(), targetCollider); pierceCount++; return; } } disableLive(); DisableFlight(); } } } } else if (target.CompareTag("TerrainMain") && !LocalPlayer.IsInCaves) { if (ignoreTerrain) { ignoreTerrain = false; base.StartCoroutine(RevokeIgnoreTerrain()); } else { if (spearType) { if ((bool)bodyCollider) { bodyCollider.isTrigger = true; } base.StartCoroutine(HitStructure(base.transform.position - base.transform.forward * 2.1f, false)); } else { Vector3 position2 = base.transform.position - base.transform.forward * -0.8f; float num = Terrain.activeTerrain.SampleHeight(base.transform.position); Vector3 position3 = Terrain.activeTerrain.transform.position; float num2 = num + position3.y; Vector3 position4 = base.transform.position; if (position4.y < num2) { position2.y = num2 + 0.5f; } base.StartCoroutine(HitStructure(position2, false)); } disableLive(); FMODCommon.PlayOneshotNetworked(hitGroundEvent, base.transform, FMODCommon.NetworkRole.Any); } } else if (target.CompareTag("structure") || target.CompareTag("jumpObject") || target.CompareTag("SLTier1") || target.CompareTag("SLTier2") || target.CompareTag("SLTier3") || target.CompareTag("UnderfootWood")) { if ((bool)target.transform.parent) { if ((bool)target.transform.parent.GetComponent <StickFenceChunkArchitect>()) { return; } if ((bool)target.transform.parent.GetComponent <BoneFenceChunkArchitect>()) { return; } } if (!isTrigger) { if (spearType) { base.StartCoroutine(HitStructure(hit.point - base.transform.forward * 2.1f, true)); } else { base.StartCoroutine(HitStructure(hit.point - base.transform.forward * 0.35f, true)); } disableLive(); } } else if (target.CompareTag("CaveDoor")) { ignoreTerrain = true; Physics.IgnoreCollision(base.GetComponent <Collider>(), Terrain.activeTerrain.GetComponent <Collider>(), true); } else if (flintLockAmmoType && (target.CompareTag("BreakableWood") || target.CompareTag("BreakableRock"))) { target.SendMessage("Hit", 40, SendMessageOptions.DontRequireReceiver); } if (!Live) { destroyThisAmmo(); parent.BroadcastMessage("OnArrowHit", SendMessageOptions.DontRequireReceiver); } }
public override void CheckHit(Vector3 position, Transform target, bool isTrigger, Collider targetCollider) { if (ignoreCollisionEvents(targetCollider) && !target.CompareTag("enemyRoot")) { return; } if (!isTrigger) { Molotov componentInParent = transform.GetComponentInParent <Molotov>(); if ((bool)componentInParent) { componentInParent.IncendiaryBreak(); } } bool headDamage = false; if (target.gameObject.layer == LayerMask.NameToLayer("Water")) { FMODCommon.PlayOneshotNetworked(hitWaterEvent, base.transform, FMODCommon.NetworkRole.Any); } else if (target.CompareTag("SmallTree")) { FMODCommon.PlayOneshotNetworked(hitBushEvent, base.transform, FMODCommon.NetworkRole.Any); } if (target.CompareTag("PlaneHull")) { FMODCommon.PlayOneshotNetworked(hitMetalEvent, base.transform, FMODCommon.NetworkRole.Any); } if (target.CompareTag("Tree") || target.root.CompareTag("Tree") || target.CompareTag("Target")) { if (spearType) { base.StartCoroutine(HitTree(hit.point - base.transform.forward * 2.1f)); } else if (hitPointUpdated) { base.StartCoroutine(HitTree(hit.point - base.transform.forward * 0.35f)); } else { base.StartCoroutine(HitTree(base.transform.position - base.transform.forward * 0.35f)); } disableLive(); if (target.CompareTag("Tree") || target.root.CompareTag("Tree")) { TreeHealth component = target.GetComponent <TreeHealth>(); if (!(bool)component) { component = target.root.GetComponent <TreeHealth>(); } if ((bool)component) { component.LodTree.AddTreeCutDownTarget(base.gameObject); } } } else if (target.CompareTag("enemyCollide") || target.tag == "lb_bird" || target.CompareTag("animalCollide") || target.CompareTag("Fish") || target.CompareTag("enemyRoot") || target.CompareTag("animalRoot")) { if (crossbowBoltType) { } else if (flintLockAmmoType) { } else if (spearType) { } else { if (ModdedPlayer.instance.IsCrossfire) { if (Time.time - ModdedPlayer.instance.LastCrossfireTime > 10) { ModdedPlayer.instance.LastCrossfireTime = Time.time; float damage1 = 55 + ModdedPlayer.instance.SpellDamageBonus * 1.25f; damage1 = damage1 * ModdedPlayer.instance.SpellAMP; Vector3 pos = Camera.main.transform.position + Camera.main.transform.right * 5; Vector3 dir = transform.position - pos; dir.Normalize(); if (GameSetup.IsSinglePlayer || GameSetup.IsMpServer) { MagicArrow.Create(pos, dir, damage1, ModReferences.ThisPlayerID, SpellActions.MagicArrowDuration, SpellActions.MagicArrowDoubleSlow, SpellActions.MagicArrowDmgDebuff); if (BoltNetwork.isRunning) { using (System.IO.MemoryStream answerStream = new System.IO.MemoryStream()) { using (System.IO.BinaryWriter w = new System.IO.BinaryWriter(answerStream)) { w.Write(3); w.Write(7); w.Write(pos.x); w.Write(pos.y); w.Write(pos.z); w.Write(dir.x); w.Write(dir.y); w.Write(dir.z); w.Write(damage1); w.Write(ModReferences.ThisPlayerID); w.Write(SpellActions.MagicArrowDuration); w.Write(SpellActions.MagicArrowDoubleSlow); w.Write(SpellActions.MagicArrowDmgDebuff); w.Close(); } ChampionsOfForest.Network.NetworkManager.SendLine(answerStream.ToArray(), ChampionsOfForest.Network.NetworkManager.Target.Others); answerStream.Close(); } } } else if (GameSetup.IsMpClient) { MagicArrow.CreateEffect(pos, dir, SpellActions.MagicArrowDmgDebuff, SpellActions.MagicArrowDuration); using (System.IO.MemoryStream answerStream = new System.IO.MemoryStream()) { using (System.IO.BinaryWriter w = new System.IO.BinaryWriter(answerStream)) { w.Write(3); w.Write(7); w.Write(pos.x); w.Write(pos.y); w.Write(pos.z); w.Write(dir.x); w.Write(dir.y); w.Write(dir.z); w.Write(damage1); w.Write(ModReferences.ThisPlayerID); w.Write(SpellActions.MagicArrowDuration); w.Write(SpellActions.MagicArrowDoubleSlow); w.Write(SpellActions.MagicArrowDmgDebuff); w.Close(); } ChampionsOfForest.Network.NetworkManager.SendLine(answerStream.ToArray(), ChampionsOfForest.Network.NetworkManager.Target.Others); answerStream.Close(); } } } } } bool flag = target.tag == "lb_bird" || target.CompareTag("lb_bird"); bool flag2 = target.CompareTag("Fish"); bool flag3 = target.CompareTag("animalCollide") || target.CompareTag("animalRoot"); arrowStickToTarget arrowStickToTarget = target.GetComponent <arrowStickToTarget>(); if (!(bool)arrowStickToTarget) { arrowStickToTarget = target.root.GetComponentInChildren <arrowStickToTarget>(); } if (!spearType && !flintLockAmmoType && !flag2) { if (arrowStickToTarget && arrowStickToTarget.enabled) { if (flag) { EventRegistry.Achievements.Publish(TfEvent.Achievements.BirdArrowKill, null); } arrowStickToTarget.CreatureType(flag3, flag, flag2); if (BoltNetwork.isRunning) { if (at && at._boltEntity && at._boltEntity.isAttached && at._boltEntity.isOwner) { headDamage = arrowStickToTarget.stickArrowToNearestBone(base.transform); } } else { headDamage = arrowStickToTarget.stickArrowToNearestBone(base.transform); } } if ((bool)arrowStickToTarget) { base.Invoke("destroyMe", 0.1f); } } if (SpellActions.SeekingArrow_ChangeTargetOnHit) { SpellActions.SeekingArrow = true; SpellActions.SeekingArrow_Target.gameObject.SetActive(true); SpellActions.SeekingArrow_Target.transform.parent = target.transform; SpellActions.SeekingArrow_Target.transform.position = new Vector3(target.transform.position.x, transform.position.y - 0.075f, target.transform.position.z); SpellActions.SeekingArrow_TimeStamp = Time.time; startposition = transform.position; SpellActions.SeekingArrow_ChangeTargetOnHit = false; } if (headDamage && !flintLockAmmoType && ModdedPlayer.instance.TrueAim && SpellActions.SeekingArrow) { float dist = (startposition - transform.position).sqrMagnitude; if (dist >= 3600f) { OutputDmg *= 4; NewHitAi(target, flag || flag3, headDamage); ModdedPlayer.instance.DoAreaDamage(target.root, OutputDmg); ModdedPlayer.instance.OnHit(); ModdedPlayer.instance.OnHit_Ranged(target); if (ModdedPlayer.instance.TrueAimUpgrade && dist >= 14400f) { OutputDmg *= 10; NewHitAi(target, flag || flag3, headDamage); NewHitAi(target, flag || flag3, headDamage); ModdedPlayer.instance.DoAreaDamage(target.root, OutputDmg); ModdedPlayer.instance.OnHit(); ModdedPlayer.instance.OnHit_Ranged(target); ModdedPlayer.instance.DoAreaDamage(target.root, OutputDmg); ModdedPlayer.instance.OnHit(); ModdedPlayer.instance.OnHit_Ranged(target); } } } NewHitAi(target, flag || flag3, headDamage); ModdedPlayer.instance.DoAreaDamage(target.root, OutputDmg); ModdedPlayer.instance.OnHit(); ModdedPlayer.instance.OnHit_Ranged(target); BoltEntity be = target.GetComponentInParent <BoltEntity>(); if (be == null) { be = target.GetComponent <BoltEntity>(); } if (ModdedPlayer.instance.SpellAmpFireDmg) { int myID = 1000 + ModReferences.Players.IndexOf(LocalPlayer.GameObject); float dmg = 1 + ModdedPlayer.instance.SpellDamageBonus / 3; dmg *= ModdedPlayer.instance.SpellAMP; dmg *= ModdedPlayer.instance.FireAmp + 1; dmg *= 0.3f; if (GameSetup.IsSinglePlayer || GameSetup.IsMpServer) { target.GetComponentInParent <EnemyProgression>()?.FireDebuff(myID, dmg, 14); } else { if (be != null) { using (System.IO.MemoryStream answerStream = new System.IO.MemoryStream()) { using (System.IO.BinaryWriter w = new System.IO.BinaryWriter(answerStream)) { w.Write(27); w.Write(be.networkId.PackedValue); w.Write(dmg); w.Write(14.5f); w.Write(1); w.Close(); } ChampionsOfForest.Network.NetworkManager.SendLine(answerStream.ToArray(), ChampionsOfForest.Network.NetworkManager.Target.OnlyServer); answerStream.Close(); } } } } if (ModdedPlayer.instance.RangedArmorReduction > 0 && target.gameObject.CompareTag("enemyCollide")) { if (BoltNetwork.isClient) { if (be != null) { EnemyProgression.ReduceArmor(be, ModdedPlayer.instance.RangedArmorReduction); } } else { target.transform.SendMessageUpwards("ReduceArmor", ModdedPlayer.instance.RangedArmorReduction, SendMessageOptions.DontRequireReceiver); } } if (flag2) { base.StartCoroutine(HitFish(target, hit.point - base.transform.forward * 0.35f)); } disableLive(); } else if (target.CompareTag("PlayerNet")) { if (BoltNetwork.isRunning) { BoltEntity be = target.GetComponentInParent <BoltEntity>(); if (!(bool)be) { be = target.GetComponent <BoltEntity>(); } if (be) { if (ModdedPlayer.instance.ArchangelBow && GreatBow.isEnabled) { using (System.IO.MemoryStream answerStream = new System.IO.MemoryStream()) { using (System.IO.BinaryWriter w = new System.IO.BinaryWriter(answerStream)) { w.Write(39); w.Write(be.GetState <IPlayerState>().name); w.Write((ModdedPlayer.instance.LifeRegen) * ModdedPlayer.instance.HealingMultipier * (1 + ModdedPlayer.instance.HealthRegenPercent)); w.Write(ModdedPlayer.instance.MaxHealth * 0.25f); w.Close(); } AsyncHit.SendCommandDelayed(1, answerStream.ToArray(), Network.NetworkManager.Target.OnlyServer); answerStream.Close(); } } else if (ModSettings.FriendlyFire) { float dmgUnclamped = this.OutputDmg; if (SpellActions.SeekingArrow) { float dist = Vector3.Distance(target.position, startposition); dmgUnclamped *= 1 + dist * SpellActions.SeekingArrow_DamagePerDistance; } if (spearType) { if (ModdedPlayer.instance.SpearhellChance > 0 && Random.value <= ModdedPlayer.instance.SpearhellChance && OutputDmg > 1) { var obj = Instantiate(PhysicBody, Camera.main.transform.position + Vector3.up * 2f, Quaternion.LookRotation(Camera.main.transform.forward)); obj.velocity = PhysicBody.velocity * 1.05f; Destroy(obj.gameObject, 30); } } else { if (headDamage) { if (ModdedPlayer.instance.EruptionBow && GreatBow.isEnabled) { //if (GameSetup.IsMultiplayer) //{ BoltNetwork.Instantiate(BoltPrefabs.instantDynamite, transform.position, Quaternion.identity); //} } } } if (headDamage || (flintLockAmmoType && Random.value <= ModdedPlayer.instance.BulletCritChance) || (spearType && Random.value <= ModdedPlayer.instance.SpearCritChance)) { headDamage = true; dmgUnclamped *= ModdedPlayer.instance.HeadShotDamage; dmgUnclamped *= SpellActions.FocusOnHeadShot(); if (SpellActions.SeekingArrow) { dmgUnclamped *= SpellActions.SeekingArrow_HeadDamage; } } else { dmgUnclamped *= SpellActions.FocusOnBodyShot(); } if (GreatBow.isEnabled) { dmgUnclamped *= 2.1f; } dmgUnclamped *= ModdedPlayer.instance.RangedAMP * ModdedPlayer.instance.CritDamageBuff; if (ModdedPlayer.instance.ProjectileDamageIncreasedBySize) { dmgUnclamped *= ModdedPlayer.instance.ProjectileSizeRatio; } DamageMath.DamageClamp(dmgUnclamped, out int sendDamage, out Repetitions); HitPlayer HP = HitPlayer.Create(be, EntityTargets.Everyone); HP.damage = sendDamage; for (int i = 0; i < Repetitions; i++) { HP.Send(); } disableLive(); } } } } else if (target.CompareTag("TerrainMain") && !LocalPlayer.IsInCaves) { if (ignoreTerrain) { ignoreTerrain = false; base.StartCoroutine(RevokeIgnoreTerrain()); } else { if (spearType) { if ((bool)bodyCollider) { bodyCollider.isTrigger = true; } base.StartCoroutine(HitStructure(base.transform.position - base.transform.forward * 2.1f, false)); } else { Vector3 position2 = base.transform.position - base.transform.forward * -0.8f; float num = Terrain.activeTerrain.SampleHeight(base.transform.position); Vector3 position3 = Terrain.activeTerrain.transform.position; float num2 = num + position3.y; Vector3 position4 = base.transform.position; if (position4.y < num2) { position2.y = num2 + 0.5f; } base.StartCoroutine(HitStructure(position2, false)); } disableLive(); FMODCommon.PlayOneshotNetworked(hitGroundEvent, base.transform, FMODCommon.NetworkRole.Any); } } else if (target.CompareTag("structure") || target.CompareTag("jumpObject") || target.CompareTag("SLTier1") || target.CompareTag("SLTier2") || target.CompareTag("SLTier3") || target.CompareTag("UnderfootWood")) { if ((bool)target.transform.parent) { if ((bool)target.transform.parent.GetComponent <StickFenceChunkArchitect>()) { return; } if ((bool)target.transform.parent.GetComponent <BoneFenceChunkArchitect>()) { return; } } if (!isTrigger) { if (spearType) { base.StartCoroutine(HitStructure(hit.point - base.transform.forward * 2.1f, true)); } else { base.StartCoroutine(HitStructure(hit.point - base.transform.forward * 0.35f, true)); } disableLive(); } } else if (target.CompareTag("CaveDoor")) { ignoreTerrain = true; Physics.IgnoreCollision(base.GetComponent <Collider>(), Terrain.activeTerrain.GetComponent <Collider>(), true); } else if (flintLockAmmoType && (target.CompareTag("BreakableWood") || target.CompareTag("BreakableRock"))) { target.SendMessage("Hit", 40, SendMessageOptions.DontRequireReceiver); } if (!Live) { destroyThisAmmo(); parent.BroadcastMessage("OnArrowHit", SendMessageOptions.DontRequireReceiver); } }
public override void CheckHit(Vector3 position, Transform target, bool isTrigger, Collider targetCollider) { if (ignoreCollisionEvents(targetCollider) && !target.CompareTag("enemyRoot")) { return; } if (!isTrigger) { Molotov componentInParent = transform.GetComponentInParent <Molotov>(); if ((bool)componentInParent) { componentInParent.IncendiaryBreak(); } } bool headDamage = false; if (target.gameObject.layer == LayerMask.NameToLayer("Water")) { FMODCommon.PlayOneshotNetworked(hitWaterEvent, base.transform, FMODCommon.NetworkRole.Any); } else if (target.CompareTag("SmallTree")) { FMODCommon.PlayOneshotNetworked(hitBushEvent, base.transform, FMODCommon.NetworkRole.Any); } if (target.CompareTag("PlaneHull")) { FMODCommon.PlayOneshotNetworked(hitMetalEvent, base.transform, FMODCommon.NetworkRole.Any); } if (target.CompareTag("Tree") || target.root.CompareTag("Tree") || target.CompareTag("Target")) { if (spearType) { base.StartCoroutine(HitTree(hit.point - base.transform.forward * 2.1f)); } else if (hitPointUpdated) { base.StartCoroutine(HitTree(hit.point - base.transform.forward * 0.35f)); } else { base.StartCoroutine(HitTree(base.transform.position - base.transform.forward * 0.35f)); } disableLive(); if (target.CompareTag("Tree") || target.root.CompareTag("Tree")) { TreeHealth component = target.GetComponent <TreeHealth>(); if (!(bool)component) { component = target.root.GetComponent <TreeHealth>(); } if ((bool)component) { component.LodTree.AddTreeCutDownTarget(base.gameObject); } } } else if (target.CompareTag("enemyCollide") || target.tag == "lb_bird" || target.CompareTag("animalCollide") || target.CompareTag("Fish") || target.CompareTag("enemyRoot") || target.CompareTag("animalRoot")) { if (crossbowBoltType) { } else if (flintLockAmmoType) { } else if (spearType) { } else { if (ModdedPlayer.instance.IsCrossfire) { if (Time.time - ModdedPlayer.instance.LastCrossfireTime > 20) { ModdedPlayer.instance.LastCrossfireTime = Time.time; float damage = 55 + ModdedPlayer.instance.SpellDamageBonus * 1.25f; damage = damage * ModdedPlayer.instance.SpellAMP; Vector3 pos = Camera.main.transform.position + Camera.main.transform.right * 5; Vector3 dir = transform.position - pos; dir.Normalize(); if (GameSetup.IsSinglePlayer || GameSetup.IsMpServer) { MagicArrow.Create(pos, dir, damage, ModReferences.ThisPlayerPacked, SpellActions.MagicArrowDuration, SpellActions.MagicArrowDoubleSlow, SpellActions.MagicArrowDmgDebuff); if (BoltNetwork.isRunning) { string s = "SC7;" + System.Math.Round(pos.x, 5) + ";" + System.Math.Round(pos.y, 5) + ";" + System.Math.Round(pos.z, 5) + ";" + System.Math.Round(dir.x, 5) + ";" + System.Math.Round(dir.y, 5) + ";" + System.Math.Round(dir.z, 5) + ";"; s += damage + ";" + ModReferences.ThisPlayerPacked + ";" + SpellActions.MagicArrowDuration + ";"; if (SpellActions.MagicArrowDoubleSlow) { s += "t;"; } else { s += "f;"; } if (SpellActions.MagicArrowDmgDebuff) { s += "t;"; } else { s += "f;"; } Network.NetworkManager.SendLine(s, Network.NetworkManager.Target.Others); } } else if (GameSetup.IsMpClient) { MagicArrow.CreateEffect(pos, dir, SpellActions.MagicArrowDmgDebuff, SpellActions.MagicArrowDuration); string s = "SC7;" + System.Math.Round(pos.x, 5) + ";" + System.Math.Round(pos.y, 5) + ";" + System.Math.Round(pos.z, 5) + ";" + System.Math.Round(dir.x, 5) + ";" + System.Math.Round(dir.y, 5) + ";" + System.Math.Round(dir.z, 5) + ";"; s += damage + ";" + ModReferences.ThisPlayerPacked + ";" + SpellActions.MagicArrowDuration + ";"; if (SpellActions.MagicArrowDoubleSlow) { s += "t;"; } else { s += "f;"; } if (SpellActions.MagicArrowDmgDebuff) { s += "t;"; } else { s += "f;"; } Network.NetworkManager.SendLine(s, Network.NetworkManager.Target.Others); } } } } bool flag = target.tag == "lb_bird" || target.CompareTag("lb_bird"); bool flag2 = target.CompareTag("Fish"); bool flag3 = target.CompareTag("animalCollide") || target.CompareTag("animalRoot"); arrowStickToTarget arrowStickToTarget = target.GetComponent <arrowStickToTarget>(); if (!(bool)arrowStickToTarget) { arrowStickToTarget = target.root.GetComponentInChildren <arrowStickToTarget>(); } if (!spearType && !flintLockAmmoType && !flag2) { if (arrowStickToTarget && arrowStickToTarget.enabled) { if (flag) { EventRegistry.Achievements.Publish(TfEvent.Achievements.BirdArrowKill, null); } arrowStickToTarget.CreatureType(flag3, flag, flag2); if (BoltNetwork.isRunning) { if (at && at._boltEntity && at._boltEntity.isAttached && at._boltEntity.isOwner) { headDamage = arrowStickToTarget.stickArrowToNearestBone(base.transform); } } else { headDamage = arrowStickToTarget.stickArrowToNearestBone(base.transform); } } if ((bool)arrowStickToTarget) { base.Invoke("destroyMe", 0.1f); } } for (int i = 0; i < Repetitions; i++) { base.StartCoroutine(HitAi(target, flag || flag3, headDamage)); } ModdedPlayer.instance.DoAreaDamage(target.root, damage); ModdedPlayer.instance.DoOnHit(); ModdedPlayer.instance.DoRangedOnHit(); if (ModdedPlayer.instance.RangedArmorReduction > 0 && target.gameObject.CompareTag("enemyCollide")) { if (BoltNetwork.isClient) { BoltEntity be = target.GetComponentInParent <BoltEntity>(); if (be == null) { be = target.GetComponent <BoltEntity>(); } if (be != null) { EnemyProgression.ReduceArmor(be, ModdedPlayer.instance.MeleeArmorReduction); } } else { target.transform.SendMessageUpwards("ReduceArmor", ModdedPlayer.instance.MeleeArmorReduction, SendMessageOptions.DontRequireReceiver); } } if (flag2) { base.StartCoroutine(HitFish(target, hit.point - base.transform.forward * 0.35f)); } disableLive(); } else if (target.CompareTag("PlayerNet")) { if (BoltNetwork.isRunning) { BoltEntity boltEntity = target.GetComponentInParent <BoltEntity>(); if (!(bool)boltEntity) { boltEntity = target.GetComponent <BoltEntity>(); } if (boltEntity && ModSettings.FriendlyFire) { HitPlayer HP = HitPlayer.Create(boltEntity, EntityTargets.Everyone); HP.damage = damage; HP.Send(); disableLive(); } } } else if (target.CompareTag("TerrainMain") && !LocalPlayer.IsInCaves) { if (ignoreTerrain) { ignoreTerrain = false; base.StartCoroutine(RevokeIgnoreTerrain()); } else { if (spearType) { if ((bool)bodyCollider) { bodyCollider.isTrigger = true; } base.StartCoroutine(HitStructure(base.transform.position - base.transform.forward * 2.1f, false)); } else { Vector3 position2 = base.transform.position - base.transform.forward * -0.8f; float num = Terrain.activeTerrain.SampleHeight(base.transform.position); Vector3 position3 = Terrain.activeTerrain.transform.position; float num2 = num + position3.y; Vector3 position4 = base.transform.position; if (position4.y < num2) { position2.y = num2 + 0.5f; } base.StartCoroutine(HitStructure(position2, false)); } disableLive(); FMODCommon.PlayOneshotNetworked(hitGroundEvent, base.transform, FMODCommon.NetworkRole.Any); } } else if (target.CompareTag("structure") || target.CompareTag("jumpObject") || target.CompareTag("SLTier1") || target.CompareTag("SLTier2") || target.CompareTag("SLTier3") || target.CompareTag("UnderfootWood")) { if ((bool)target.transform.parent) { if ((bool)target.transform.parent.GetComponent <StickFenceChunkArchitect>()) { return; } if ((bool)target.transform.parent.GetComponent <BoneFenceChunkArchitect>()) { return; } } if (!isTrigger) { if (spearType) { base.StartCoroutine(HitStructure(hit.point - base.transform.forward * 2.1f, true)); } else { base.StartCoroutine(HitStructure(hit.point - base.transform.forward * 0.35f, true)); } disableLive(); } } else if (target.CompareTag("CaveDoor")) { ignoreTerrain = true; Physics.IgnoreCollision(base.GetComponent <Collider>(), Terrain.activeTerrain.GetComponent <Collider>(), true); } else if (flintLockAmmoType && (target.CompareTag("BreakableWood") || target.CompareTag("BreakableRock"))) { target.SendMessage("Hit", 40, SendMessageOptions.DontRequireReceiver); } if (!Live) { destroyThisAmmo(); parent.BroadcastMessage("OnArrowHit", SendMessageOptions.DontRequireReceiver); } }