| | |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 根据赛道获得该赛道的所有敌人 |
| | | /// </summary> |
| | | /// <param name="tunel">赛道id (1~5)</param> |
| | | /// <param name="isOppo">是否是对手的赛道</param> |
| | | /// <returns></returns> |
| | | public List<Agent> GetAgentsByTunel(int tunel, bool isOppo = false) |
| | | { |
| | | WaveLineAgentInsMgr[] waveLineAgents = isOppo ? getOppoWaveLineList() : GetWaveLineList(); |
| | | List<Agent> ret = new List<Agent>(); |
| | | |
| | | for (int i = 0; i < waveLineAgents.Length; ++i) |
| | | { |
| | | if (i == tunel - 1) |
| | | { |
| | | for (int j = 0; j < waveLineAgents[i].listAgent.Count; ++j) |
| | | { |
| | | if (waveLineAgents[i].listAgent[j].AgentType == SpawnAgentType.Normal) |
| | | ret.Add(waveLineAgents[i].listAgent[j]); |
| | | } |
| | | |
| | | return ret; |
| | | } |
| | | } |
| | | |
| | | return null; |
| | | } |
| | | |
| | | public List<Agent> agentList |
| | | { |
| | | get { return this.agentInsList; } |
| | |
| | | if (slinfo.atcmod.Count < 2) return; |
| | | |
| | | float radius = slinfo.atcmod[1]; |
| | | int deathCount = 0; |
| | | |
| | | for (int ti = 0; ti < mgrList.Length; ti++) |
| | | { |
| | |
| | | for (int idx = 0; idx < mgr.listAgent.Count; idx++) |
| | | { |
| | | Agent eag = mgr.listAgent[idx]; |
| | | Vector3 fpos = eag.transform.position; |
| | | fpos.y = 0; |
| | | float dist = Vector3.Distance(fpos, pos); |
| | | |
| | | if (radius < dist) |
| | | continue; |
| | | |
| | | bool isDeath = eag.isDead; |
| | | |
| | | if (eag.AgentType == SpawnAgentType.BubbleBomb) |
| | | { |
| | |
| | | } |
| | | else |
| | | { |
| | | Vector3 fpos = eag.transform.position; |
| | | fpos.y = 0; |
| | | float dist = Vector3.Distance(fpos, pos); |
| | | if (radius < dist) |
| | | continue; |
| | | |
| | | float damage = slinfo.skilleffect[2]; |
| | | damage += (slinfo.skilleffect[1] / 100.0f * eag.configuration.maxHealth); |
| | | damage = (float)Math.Floor(damage); |
| | |
| | | EndlessGameUI.instance.generateBloodText(fpos, damage, false, false); |
| | | } |
| | | |
| | | if (!isDeath && eag.isDead) |
| | | ++deathCount; |
| | | |
| | | if (eag.isDead) |
| | | continue; |
| | | else |
| | |
| | | } |
| | | } |
| | | |
| | | if (deathCount > 1) |
| | | EventCenter.Ins.BroadCast((int)KTGMGemClient.EventType.EndlessOneTimeKillCount, deathCount); |
| | | |
| | | return; |
| | | } |
| | |
| | | if (wavelineIns == null) return; |
| | | |
| | | List<Agent> listAg = wavelineIns.listAgent; |
| | | // 统计被火技能直接烧死的数量 |
| | | int deathCount = 0; |
| | | |
| | | for (int ti = listAg.Count - 1; ti >= 0; ti--) |
| | | { |
| | | Agent eag = listAg[ti]; |
| | | |
| | | if (eag.isDead) continue; |
| | | |
| | | if (eag.AgentType == SpawnAgentType.BubbleBomb) |
| | | { |
| | | EventCenter.Ins.BroadCast((int)KTGMGemClient.EventType.EndlessFireSkillKillBubbleBomb, (eag as BubbleBombAgent).Id); |
| | | // 泡泡炸弹是直接就被火技能秒杀的 |
| | | ++deathCount; |
| | | } |
| | | else |
| | | { |
| | | Vector3 fpos = eag.transform.position; |
| | |
| | | else if (EndlessGameUI.instanceExists) |
| | | EndlessGameUI.instance.generateBloodText(fpos, damage, false, false); |
| | | } |
| | | |
| | | eag.PlayFireSkillHit(); |
| | | |
| | | if (eag.isDead) |
| | | ++deathCount; |
| | | } |
| | | |
| | | } |
| | | if (deathCount > 1) |
| | | EventCenter.Ins.BroadCast((int)KTGMGemClient.EventType.EndlessOneTimeKillCount, deathCount); |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | /// 对当前Agent同一列内一定区域内的怪物进行攻击: |
| | | /// </summary> |
| | | /// <param name="ag"></param> |
| | | public void StartExplodeAttack(Agent ag, float damage) |
| | | public int StartExplodeAttack(Agent ag, float damage) |
| | | { |
| | | WaveLineAgentInsMgr tmgr; |
| | | if (!ag.opponentAgent) |
| | |
| | | else |
| | | tmgr = this.oppoAgentWaveLineArray[ag.waveLineID]; |
| | | |
| | | if (tmgr.getAgentInsNum() <= 1) return; |
| | | if (tmgr.getAgentInsNum() <= 1) return 0; |
| | | |
| | | List<Agent> listAg = tmgr.listAgent; |
| | | |
| | | Vector3 tpos = ag.transform.position; |
| | | int deathCount = 0; |
| | | |
| | | for (int ti = listAg.Count - 1; ti >= 0; ti--) |
| | | { |
| | | Agent eag = listAg[ti]; |
| | | if (eag == ag) continue; |
| | | Vector3 fpos = eag.transform.position; |
| | | tpos.y = 0; |
| | | fpos.y = 0; |
| | | if (Vector3.Distance(tpos, fpos) < 8) |
| | | |
| | | if (eag.AgentType == SpawnAgentType.BubbleBomb) |
| | | { |
| | | eag.TakeDamage(damage, fpos, null); |
| | | if (!eag.opponentAgent) |
| | | EventCenter.Ins.BroadCast((int)KTGMGemClient.EventType.EndlessBossSkillBubbleBombGetHit, (eag as BubbleBombAgent).Id); |
| | | } |
| | | else |
| | | { |
| | | Vector3 fpos = eag.transform.position; |
| | | tpos.y = 0; |
| | | fpos.y = 0; |
| | | if (Vector3.Distance(tpos, fpos) < 8) |
| | | { |
| | | if (GameUI.instanceExists) |
| | | GameUI.instance.generateBloodText(fpos, damage, false, false); |
| | | else if (EndlessGameUI.instanceExists) |
| | | EndlessGameUI.instance.generateBloodText(fpos, damage, false, false); |
| | | eag.TakeDamage(damage, fpos, null); |
| | | if (!eag.opponentAgent) |
| | | { |
| | | if (GameUI.instanceExists) |
| | | GameUI.instance.generateBloodText(fpos, damage, false, false); |
| | | else if (EndlessGameUI.instanceExists) |
| | | EndlessGameUI.instance.generateBloodText(fpos, damage, false, false); |
| | | } |
| | | if (eag.isDead) |
| | | ++deathCount; |
| | | } |
| | | } |
| | | } |
| | | |
| | | return deathCount; |
| | | |
| | | /* foreach (Agent eag in listAg) |
| | | { |
| | | if (eag == ag) continue; |
| | |
| | | // 每一个被链式攻击的怪物,飘血. |
| | | foreach (Agent ag in listBlood) |
| | | { |
| | | if (ag.AgentType != SpawnAgentType.Normal) continue; |
| | | int tid = ag.liveID; |
| | | Damager damager = ag.GetComponent<Damager>(); |
| | | ag.TakeDamage(chainAttackHurt, ag.position, alignment); |