Ejemplo n.º 1
0
    public void InitWeaponByEquip(Item equip)
    {
        if (bombPrefab != null)
        {
            Destroy(bombPrefab);
            bombPrefab = null;
        }
        ItemTableData itemTableData = DataManager.GetInstance().GetItemTableDataByItem(equip);

        this.equipItem     = equip;
        this.attackSpeed   = itemTableData.attackSpeed;
        this.attackRadius  = itemTableData.attackRadius;
        this.damaged       = itemTableData.damaged;
        this.bombCount     = itemTableData.bombCount;
        this.bombMoveSpeed = itemTableData.bombMoveSpeed;
        this.isHaveBomb    = itemTableData.isBomb == 1;
        if (this.isHaveBomb)//一般远程攻击才有子弹
        {
        }
        else//如果不是表示近战
        {
            Detonate detonate = this.gameObject.AddComponent <Detonate>();
            detonate.DetonateDamage = this.damaged;
            detonate.DamageCount    = int.MaxValue;//近战武器无限攻击次数
        }
    }
 public static ApiShipCommand ToApiShipCommand(this Command command)
 {
     return(command switch
     {
         BurnFuel burnFuel => new ApiBurnFuel {
             ShipId = command.ShipUid, BurnVelocity = burnFuel.BurnVelocity
         },
         Detonate _ => new ApiDetonate {
             ShipId = command.ShipUid
         },
         Shoot shoot => new ApiShoot {
             ShipId = command.ShipUid, Target = shoot.Target, Power = shoot.Power
         },
         SplitShip splitShip => new ApiSplitShip {
             ShipId = command.ShipUid, NewShipMatter = splitShip.NewShipMatter.ToApiShipMatter()
         },
         _ => throw new ArgumentOutOfRangeException(nameof(command))
     });
Ejemplo n.º 3
0
 public void OnHited(GameObject hit)
 {
     if (hit.tag == EnityType.Bomb.ToString())//如果是子弹的话
     {
         if (selfType == EnityType.Enemy)
         {
             Detonate scriptDetonate = hit.GetComponent <Detonate>();
             if (scriptDetonate != null && scriptDetonate.IsCanDemage(gameObject.name))
             {
                 scriptDetonate.AddDamagedGameObject(gameObject.name);
                 TakeDamage(scriptDetonate.DetonateDamage);
             }
         }
     }
     else
     {
         Detonate scriptDetonate = hit.GetComponent <Detonate>();
         if (scriptDetonate != null && scriptDetonate.IsCanDemage(gameObject.name))
         {
             scriptDetonate.AddDamagedGameObject(gameObject.name);
             TakeDamage(scriptDetonate.DetonateDamage);
         }
     }
 }
Ejemplo n.º 4
0
        private void On_ESDetonate(On.EntityStates.Engi.Mine.Detonate.orig_Explode orig, Detonate self)
        {
            if (self.outer.name != "FootMine(Clone)")
            {
                orig(self);
            }
            else if (NetworkServer.active)
            {
                List <TeamComponent> teamMembers = new List <TeamComponent>();
                TeamFilter           teamFilter  = self.GetComponent <TeamFilter>();
                float      blastRadius           = Detonate.blastRadius * 1.2f;
                float      sqrad = blastRadius * blastRadius;
                bool       isFF  = FriendlyFireManager.friendlyFireMode != FriendlyFireManager.FriendlyFireMode.Off;
                GameObject owner = self.projectileController.owner;
                int        icnt  = (int)self.GetComponent <ProjectileDamage>().damage; // this is actually the stack number

                if (isFF || teamFilter.teamIndex != TeamIndex.Monster)
                {
                    teamMembers.AddRange(TeamComponent.GetTeamMembers(TeamIndex.Monster));
                }
                if (isFF || teamFilter.teamIndex != TeamIndex.Neutral)
                {
                    teamMembers.AddRange(TeamComponent.GetTeamMembers(TeamIndex.Neutral));
                }
                if (isFF || teamFilter.teamIndex != TeamIndex.Player)
                {
                    teamMembers.AddRange(TeamComponent.GetTeamMembers(TeamIndex.Player));
                }
                if (owner)
                {
                    teamMembers.Remove(owner.GetComponent <TeamComponent>());
                }

                foreach (TeamComponent tcpt in teamMembers)
                {
                    if ((tcpt.transform.position - self.transform.position).sqrMagnitude <= sqrad)
                    {
                        if (tcpt.body && tcpt.body.mainHurtBox && tcpt.body.isActiveAndEnabled)
                        {
                            DotController.InflictDot(tcpt.gameObject, owner, poisonDot, baseTicks + stackTicks * (icnt - 1), baseDmg + stackDmg * (icnt - 1));
                        }
                    }
                }

                if (Detonate.explosionEffectPrefab)
                {
                    EffectManager.SpawnEffect(Detonate.explosionEffectPrefab, new EffectData
                    {
                        origin   = self.transform.position,
                        rotation = self.transform.rotation,
                        scale    = blastRadius
                    }, true);
                }
                EntityState.Destroy(self.gameObject);
            }
        }