コード例 #1
0
 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);
             }
         }
     }
 }
コード例 #2
0
ファイル: ArrowDamage.cs プロジェクト: K07H/The-Forest
    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;
    }
コード例 #3
0
 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);
             }
         }
     }
 }