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)) });
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); } } }
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); } }