コード例 #1
0
        public void Explode()
        {
            if (dead == true)
            {
                return;
            }
            dead = true;

            if (exploderConfig.NoExplosionOnDeath)
            {
                return;
            }

            enemyAgent.Appearance.InterpolateGlow(glowColor, 0.1f);
            var fx = s_explodeFXPool.AquireEffect();

            fx.Play(null, enemyAgent.Position, Quaternion.LookRotation(enemyAgent.TargetLookDir));

            var noise = new NM_NoiseData()
            {
                noiseMaker = null,
                position   = enemyAgent.Position,
                radiusMin  = exploderConfig.NoiseMin,
                radiusMax  = exploderConfig.NoiseMax,
                yScale     = 1,
                node       = enemyAgent.CourseNode,
                type       = NM_NoiseType.InstaDetect,
                includeToNeightbourAreas = true,
                raycastFirstNode         = false
            };

            ExplosionUtil.TriggerExplodion(enemyAgent.EyePosition, exploderConfig.Damage, exploderConfig.Radius, noise);
        }
コード例 #2
0
 private void CheckBoxmen()
 {
     HitPart[] array = ExplosionUtil.CheckBoxmen(base.transform.position, radius, includeFriendly: false);
     for (int i = 0; i < array.Length; i++)
     {
         PlayerProperty[] allComponents = Recursively.GetAllComponents <PlayerProperty>(array[i].transform, includeInactive: false);
         if (allComponents.Length == 1)
         {
             int num = Mathf.FloorToInt(array[i].damageFactor * CalcPowFrom(array[i].transform.position));
             if (num > 0)
             {
                 num = GlobalVars.Instance.applyDurabilityDamage(durability, durabilityMax, num);
                 allComponents[0].Desc.accumDamaged += num;
             }
         }
     }
     GameObject[] array2 = BrickManManager.Instance.ToGameObjectArray();
     for (int j = 0; j < array2.Length; j++)
     {
         int          num2      = (int)weaponBy;
         TPController component = array2[j].GetComponent <TPController>();
         if (component != null && !MyInfoManager.Instance.IsBelow12() && component.IsChild)
         {
             num2 = (int)weaponByForChild;
         }
         PlayerProperty component2 = array2[j].GetComponent <PlayerProperty>();
         if (null != component2 && component2.Desc.accumDamaged > 0)
         {
             P2PManager.Instance.SendPEER_BOMBED(MyInfoManager.Instance.Seq, component2.Desc.Seq, component2.Desc.accumDamaged, rigidity, num2);
             component2.Desc.accumDamaged = 0;
         }
     }
 }
コード例 #3
0
 private void CheckBoxmen()
 {
     HitPart[] array = ExplosionUtil.CheckBoxmen(base.transform.position, Radius, includeFriendly: false);
     for (int i = 0; i < array.Length; i++)
     {
         PlayerProperty[] allComponents = Recursively.GetAllComponents <PlayerProperty>(array[i].transform, includeInactive: false);
         if (allComponents.Length == 1)
         {
             int num = Mathf.FloorToInt(array[i].damageFactor * CalcPowFrom(array[i].transform.position));
             if (num > 0)
             {
                 WeaponFunction component = GetComponent <WeaponFunction>();
                 if (null == component)
                 {
                     Debug.LogError("wpnFunc == null");
                 }
                 TWeapon tWeapon = (TWeapon)GetComponent <Weapon>().tItem;
                 if (tWeapon == null)
                 {
                     Debug.LogError("wpn == null");
                 }
                 Item item = MyInfoManager.Instance.GetItemBySequence(component.ItemSeq);
                 if (item == null)
                 {
                     item = MyInfoManager.Instance.GetUsingEquipByCode(tWeapon.code);
                 }
                 num = GlobalVars.Instance.applyDurabilityDamage(item?.Durability ?? (-1), tWeapon.durabilityMax, num);
                 P2PManager.Instance.SendPEER_BOMBED(MyInfoManager.Instance.Seq, allComponents[0].Desc.Seq, num, Rigidity, (int)weaponBy);
             }
         }
     }
 }
コード例 #4
0
        public override bool Trigger()
        {
            Activated = true;
            Agent.Locomotion.ChangeState((int)ES_StateEnum.Dead);

            Agent.Appearance.InterpolateGlow(GlowColor, 0.1f);
            var fx = s_explodeFXPool.AquireEffect();

            fx.Play(null, Agent.Position, Quaternion.LookRotation(Agent.TargetLookDir));

            var noise = new NM_NoiseData()
            {
                noiseMaker = null,
                position   = Agent.Position,
                radiusMin  = ExploderConfig.NoiseMin,
                radiusMax  = ExploderConfig.NoiseMax,
                yScale     = 1,
                node       = Agent.CourseNode,
                type       = NM_NoiseType.InstaDetect,
                includeToNeightbourAreas = true,
                raycastFirstNode         = false
            };

            ExplosionUtil.TriggerExplodion(Agent.EyePosition, ExploderConfig.Damage, ExploderConfig.Radius, noise);
            PlaySplatter();
            return(false);
        }
コード例 #5
0
 private void CheckMonster(Vector3 boomPos, float DamageRadius)
 {
     HitPart[] array = ExplosionUtil.CheckMon(boomPos, DamageRadius, includeFriendly: false);
     for (int i = 0; i < array.Length; i++)
     {
         MonProperty[] allComponents = Recursively.GetAllComponents <MonProperty>(array[i].transform, includeInactive: false);
         if (allComponents.Length == 1 && (MyInfoManager.Instance.Slot >= 4 || !allComponents[i].Desc.bRedTeam) && (MyInfoManager.Instance.Slot < 4 || allComponents[i].Desc.bRedTeam))
         {
             MonManager.Instance.Hit(allComponents[0].Desc.Seq, poisonDamage, 1f, -4, Vector3.zero, Vector3.zero, -1);
         }
     }
 }
コード例 #6
0
 private void CheckBoxmen(Vector3 boomPos, float DamageRadius)
 {
     HitPart[] array = ExplosionUtil.CheckBoxmen(boomPos, DamageRadius, includeFriendly: false);
     for (int i = 0; i < array.Length; i++)
     {
         PlayerProperty[] allComponents = Recursively.GetAllComponents <PlayerProperty>(array[i].transform, includeInactive: false);
         if (allComponents.Length == 1)
         {
             P2PManager.Instance.SendPEER_BOMBED(MyInfoManager.Instance.Seq, allComponents[0].Desc.Seq, poisonDamage, 1f, -4);
         }
     }
 }
コード例 #7
0
 private void CheckDestructibles()
 {
     BrickProperty[] array = ExplosionUtil.CheckDestructibles(base.transform.position, radius);
     for (int i = 0; i < array.Length; i++)
     {
         array[i].Hit((int)CalcPowFrom(array[i].transform.position));
         if (array[i].HitPoint <= 0)
         {
             CSNetManager.Instance.Sock.SendCS_DESTROY_BRICK_REQ(array[i].Seq);
         }
         else
         {
             P2PManager.Instance.SendPEER_BRICK_HITPOINT(array[i].Seq, array[i].HitPoint);
         }
     }
 }
コード例 #8
0
 private void CheckMonster()
 {
     HitPart[] array = ExplosionUtil.CheckMon(base.transform.position, radius, includeFriendly: false);
     for (int i = 0; i < array.Length; i++)
     {
         MonProperty[] allComponents = Recursively.GetAllComponents <MonProperty>(array[i].transform, includeInactive: false);
         if (allComponents.Length == 1 && (MyInfoManager.Instance.Slot >= 4 || !allComponents[i].Desc.bRedTeam) && (MyInfoManager.Instance.Slot < 4 || allComponents[i].Desc.bRedTeam))
         {
             int num = Mathf.FloorToInt(array[i].damageFactor * CalcPowFrom(array[i].transform.position));
             if (num > 0)
             {
                 MonManager.Instance.Hit(allComponents[0].Desc.Seq, num, 1f, (int)weaponBy, Vector3.zero, Vector3.zero, -1);
             }
         }
     }
 }
コード例 #9
0
 private void CheckBoxmen(Vector3 boomPos, float DamageRadius)
 {
     HitPart[] array = ExplosionUtil.CheckBoxmen(boomPos, DamageRadius, includeFriendly: false);
     for (int i = 0; i < array.Length; i++)
     {
         PlayerProperty[] allComponents = Recursively.GetAllComponents <PlayerProperty>(array[i].transform, includeInactive: false);
         if (allComponents.Length == 1)
         {
             int num = Mathf.FloorToInt(array[i].damageFactor * CalcPowFrom(boomPos, array[i].transform.position));
             if (num > 0)
             {
                 P2PManager.Instance.SendPEER_BOMBED(MyInfoManager.Instance.Seq, allComponents[0].Desc.Seq, num, Rigidity, -3);
             }
         }
     }
 }
コード例 #10
0
 private void CheckBoxmen(Vector3 boomPos)
 {
     HitPart[] array = ExplosionUtil.CheckBoxmen(boomPos, Radius, includeFriendly: false);
     for (int i = 0; i < array.Length; i++)
     {
         PlayerProperty[] allComponents = Recursively.GetAllComponents <PlayerProperty>(array[i].transform, includeInactive: false);
         if (allComponents.Length == 1)
         {
             int num = Mathf.FloorToInt(array[i].damageFactor * CalcPowFrom(boomPos, array[i].transform.position));
             if (num > 0)
             {
                 WeaponFunction component = GetComponent <WeaponFunction>();
                 if (null == component)
                 {
                     Debug.LogError("wpnFunc == null");
                 }
                 TWeapon tWeapon = (TWeapon)GetComponent <Weapon>().tItem;
                 if (tWeapon == null)
                 {
                     Debug.LogError("wpn == null");
                 }
                 Item usingEquipByCode = MyInfoManager.Instance.GetUsingEquipByCode(tWeapon.code);
                 num = GlobalVars.Instance.applyDurabilityDamage(usingEquipByCode?.Durability ?? (-1), tWeapon.durabilityMax, num);
                 allComponents[0].Desc.accumDamaged += num;
             }
         }
     }
     GameObject[] array2 = BrickManManager.Instance.ToGameObjectArray();
     for (int j = 0; j < array2.Length; j++)
     {
         PlayerProperty component2 = array2[j].GetComponent <PlayerProperty>();
         if (null != component2 && component2.Desc.accumDamaged > 0)
         {
             P2PManager.Instance.SendPEER_BOMBED(MyInfoManager.Instance.Seq, component2.Desc.Seq, component2.Desc.accumDamaged, Rigidity, (int)weaponBy);
             component2.Desc.accumDamaged = 0;
             realExplosion = true;
         }
     }
 }
コード例 #11
0
    private void Shoot()
    {
        Vector2 vector    = accuracy.CalcDeflection();
        int     layerMask = (1 << LayerMask.NameToLayer("Chunk")) | (1 << LayerMask.NameToLayer("Brick")) | (1 << LayerMask.NameToLayer("BoxMan")) | (1 << LayerMask.NameToLayer("Mon")) | (1 << LayerMask.NameToLayer("InvincibleArmor")) | (1 << LayerMask.NameToLayer("Bomb")) | (1 << LayerMask.NameToLayer("InstalledBomb"));
        Ray     ray       = cam.ScreenPointToRay(new Vector3(vector.x, vector.y, 0f));

        if (!Application.loadedLevelName.Contains("Tutor"))
        {
            P2PManager.Instance.SendPEER_CANNON_FIRE(BrickSeq, shooter, ray.origin, ray.direction);
        }
        if (Physics.Raycast(ray, out RaycastHit hitInfo, Range, layerMask))
        {
            GameObject gameObject = hitInfo.transform.gameObject;
            if (gameObject.layer == LayerMask.NameToLayer("Brick") || gameObject.layer == LayerMask.NameToLayer("Chunk"))
            {
                GameObject    gameObject2   = null;
                BrickProperty brickProperty = null;
                GameObject    original      = null;
                Texture2D     mark          = null;
                if (gameObject.layer == LayerMask.NameToLayer("Brick"))
                {
                    BrickProperty[] allComponents = Recursively.GetAllComponents <BrickProperty>(gameObject.transform, includeInactive: false);
                    if (allComponents.Length > 0)
                    {
                        brickProperty = allComponents[0];
                    }
                }
                else
                {
                    gameObject2 = BrickManager.Instance.GetBrickObjectByPos(Brick.ToBrickCoord(hitInfo.normal, hitInfo.point));
                    if (null != gameObject2)
                    {
                        brickProperty = gameObject2.GetComponent <BrickProperty>();
                    }
                }
                if (null != brickProperty)
                {
                    P2PManager.Instance.SendPEER_HIT_BRICK(brickProperty.Seq, brickProperty.Index, hitInfo.point, hitInfo.normal, isBullet: true);
                    mark     = BrickManager.Instance.GetBulletMark(brickProperty.Index);
                    original = BrickManager.Instance.GetBulletImpact(brickProperty.Index);
                    Brick brick = BrickManager.Instance.GetBrick(brickProperty.Index);
                    if (brick != null && brick.destructible)
                    {
                        brickProperty.Hit((int)AtkPow);
                        if (brickProperty.HitPoint <= 0)
                        {
                            CSNetManager.Instance.Sock.SendCS_DESTROY_BRICK_REQ(brickProperty.Seq);
                            mark     = null;
                            original = null;
                            if (brickProperty.Index == 115 || brickProperty.Index == 193)
                            {
                                ExplosionUtil.CheckMyself(gameObject2.transform.position, GlobalVars.Instance.BoomDamage, GlobalVars.Instance.BoomRadius, -3);
                                ExplosionUtil.CheckBoxmen(gameObject2.transform.position, GlobalVars.Instance.BoomDamage, GlobalVars.Instance.BoomRadius, -3, Rigidity);
                                ExplosionUtil.CheckMonster(gameObject2.transform.position, GlobalVars.Instance.BoomDamage, GlobalVars.Instance.BoomRadius);
                                ExplosionUtil.CheckDestructibles(gameObject2.transform.position, GlobalVars.Instance.BoomDamage, GlobalVars.Instance.BoomRadius);
                            }
                        }
                        else
                        {
                            P2PManager.Instance.SendPEER_BRICK_HITPOINT(brickProperty.Seq, brickProperty.HitPoint);
                        }
                    }
                }
                if (null != gameObject2 && null != mark)
                {
                    GameObject gameObject3 = Object.Instantiate((Object)BrickManager.Instance.bulletMark, hitInfo.point, Quaternion.FromToRotation(Vector3.forward, -hitInfo.normal)) as GameObject;
                    BulletMark component   = gameObject3.GetComponent <BulletMark>();
                    component.GenerateDecal(mark, gameObject, gameObject2);
                }
                if (null != original)
                {
                    Object.Instantiate((Object)original, hitInfo.point, Quaternion.FromToRotation(Vector3.up, hitInfo.normal));
                }
            }
            else if (gameObject.layer == LayerMask.NameToLayer("BoxMan"))
            {
                PlayerProperty[] allComponents2 = Recursively.GetAllComponents <PlayerProperty>(gameObject.transform, includeInactive: false);
                TPController[]   allComponents3 = Recursively.GetAllComponents <TPController>(gameObject.transform, includeInactive: false);
                if (allComponents2.Length != 1)
                {
                    Debug.LogError("PlayerProperty should be unique for a box man, but it has multiple PlayerProperty components or non ");
                }
                if (allComponents3.Length != 1)
                {
                    Debug.LogError("TPController should be unique for a box man, but it has multiple TPController components or non ");
                }
                PlayerProperty playerProperty = null;
                TPController   tPController   = null;
                if (allComponents2.Length > 0)
                {
                    playerProperty = allComponents2[0];
                }
                if (allComponents3.Length > 0)
                {
                    tPController = allComponents3[0];
                }
                if (playerProperty != null && tPController != null)
                {
                    int     num        = 0;
                    HitPart component2 = gameObject.GetComponent <HitPart>();
                    if (component2 != null)
                    {
                        bool flag = false;
                        if (component2.part == HitPart.TYPE.HEAD)
                        {
                            int layerMask2 = 1 << LayerMask.NameToLayer("Brain");
                            if (Physics.Raycast(ray, out RaycastHit hitInfo2, Range, layerMask2))
                            {
                                if (playerProperty.Desc.IsLucky())
                                {
                                    flag = true;
                                }
                                else
                                {
                                    component2 = hitInfo2.transform.gameObject.GetComponent <HitPart>();
                                }
                            }
                        }
                        if (component2.GetHitImpact() != null)
                        {
                            GameObject original2 = component2.GetHitImpact();
                            if (flag && null != component2.luckyImpact)
                            {
                                original2 = component2.luckyImpact;
                            }
                            Object.Instantiate((Object)original2, hitInfo.point, Quaternion.Euler(0f, 0f, 0f));
                        }
                        num = (int)(AtkPow * component2.damageFactor);
                        if (!playerProperty.IsHostile())
                        {
                            num = 0;
                        }
                        P2PManager.Instance.SendPEER_HIT_BRICKMAN(MyInfoManager.Instance.Seq, playerProperty.Desc.Seq, (int)component2.part, hitInfo.point, hitInfo.normal, flag, 0, ray.direction);
                        P2PManager.Instance.SendPEER_SHOOT(MyInfoManager.Instance.Seq, playerProperty.Desc.Seq, num, Rigidity, (int)weaponBy, (int)component2.part, flag, rateOfFire);
                    }
                    tPController.GetHit(num, playerProperty.Desc.Seq);
                }
            }
            else if (gameObject.layer == LayerMask.NameToLayer("Mon"))
            {
                MonProperty[] allComponents4 = Recursively.GetAllComponents <MonProperty>(gameObject.transform, includeInactive: false);
                MonProperty   monProperty    = null;
                if (allComponents4.Length > 0)
                {
                    monProperty = allComponents4[0];
                }
                if (monProperty != null)
                {
                    HitPart component3 = gameObject.GetComponent <HitPart>();
                    if (component3 != null && (MyInfoManager.Instance.Slot >= 4 || !monProperty.Desc.bRedTeam) && (MyInfoManager.Instance.Slot < 4 || monProperty.Desc.bRedTeam))
                    {
                        if (component3.GetHitImpact() != null)
                        {
                            Object.Instantiate((Object)component3.GetHitImpact(), hitInfo.point, Quaternion.Euler(0f, 0f, 0f));
                        }
                        if (monProperty.Desc.Xp > 0)
                        {
                            int num2 = (int)(AtkPow * component3.damageFactor);
                            num2 += DefenseManager.Instance.AddAtkPower;
                            if (monProperty.Desc.bHalfDamage)
                            {
                                num2 /= 2;
                            }
                            MonManager.Instance.Hit(monProperty.Desc.Seq, num2, 0f, (int)weaponBy, hitInfo.point, hitInfo.normal, -1);
                        }
                    }
                }
            }
            else if (gameObject.layer == LayerMask.NameToLayer("InvincibleArmor") || gameObject.layer == LayerMask.NameToLayer("Bomb") || gameObject.layer == LayerMask.NameToLayer("InstalledBomb"))
            {
                GameObject impact = VfxOptimizer.Instance.GetImpact(gameObject.layer);
                if (null != impact)
                {
                    Object.Instantiate((Object)impact, hitInfo.point, Quaternion.FromToRotation(Vector3.up, hitInfo.normal));
                    P2PManager.Instance.SendPEER_HIT_IMPACT(gameObject.layer, hitInfo.point, hitInfo.normal);
                }
            }
        }
    }