| | |
| | | /// 处理代理收到的伤害,这里需要判断代理的类型分别去处理 |
| | | /// </summary> |
| | | /// <param name="enemy"></param> |
| | | public void DealDamage(Targetable enemy) |
| | | /// <param name="attributeId">子弹的属性id</param> |
| | | public void DealDamage(Targetable enemy, int attributeId = -1) |
| | | { |
| | | switch ((enemy as Agent).AgentType) |
| | | { |
| | | case SpawnAgentType.Normal: |
| | | HandleNormal(enemy); |
| | | (enemy as Agent).PlayGetHitParticle(attributeId); |
| | | break; |
| | | case SpawnAgentType.BubbleBomb: |
| | | HandleBubbleBomb(enemy); |
| | | break; |
| | | case SpawnAgentType.WoodPile: |
| | | HandleWoodPile(enemy, attributeId); |
| | | break; |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 处理木桩墙壁收到的伤害 |
| | | /// </summary> |
| | | /// <param name="enemy"></param> |
| | | private void HandleWoodPile(Targetable enemy, int id) |
| | | { |
| | | float finalDamage = damager.finalDamage; |
| | | |
| | | if (id == 10101) |
| | | finalDamage *= (enemy as WoodPileAgent).FireHurtRate; |
| | | |
| | | int tid = enemy.liveID; |
| | | Vector3 backPos = enemy.position; |
| | | |
| | | // 这里也可以把碰撞点传进来 |
| | | enemy.TakeDamage(finalDamage, enemy.position, damager.alignmentProvider); |
| | | EndlessGameUI.instance.generateBloodText(backPos, finalDamage); |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | private void HandleNormal(Targetable enemy) |
| | | { |
| | | float finalDamage = damager.finalDamage; |
| | | bool crit = damager.isCrit; |
| | | if (crit) |
| | | finalDamage += finalDamage; |
| | | // bool crit = damager.isCrit; |
| | | bool crit = false; |
| | | // if (crit) |
| | | // finalDamage += finalDamage; |
| | | |
| | | // 精英怪和Boss双倍攻击. |
| | | bool doubleHit = damager.doubleHit && enemy.bElit; |
| | | if (doubleHit) |
| | | finalDamage *= 2; |
| | | bool doubleHit = false; |
| | | // bool doubleHit = damager.doubleHit && enemy.bElit; |
| | | // if (doubleHit) |
| | | // finalDamage *= 2; |
| | | |
| | | // 处理光塔对应的攻击增加: |
| | | if (attackRise > 0) |
| | |
| | | // 处理PVE无尽模式,buff增加的伤害 |
| | | finalDamage += ProcessEndlessBuffAttack(finalDamage); |
| | | |
| | | int deathCount = 0; |
| | | |
| | | // 提前处理非当前Enemy的爆炸攻击: |
| | | if (chainAttackRate > 0) |
| | | AgentInsManager.instance.StartExplodeAttack((Agent)enemy, finalDamage); |
| | | deathCount = AgentInsManager.instance.StartExplodeAttack((Agent)enemy, finalDamage); |
| | | |
| | | int tid = enemy.liveID; |
| | | Vector3 backPos = enemy.position; |
| | | |
| | | // 这里也可以把碰撞点传进来 |
| | | enemy.TakeDamage(finalDamage, enemy.position, damager.alignmentProvider); |
| | | enemy.TakeDamage(finalDamage, enemy.position, damager.alignmentProvider, 0); |
| | | |
| | | if (chainAttackRate > 0) |
| | | { |
| | | if (enemy.isDead) |
| | | ++deathCount; |
| | | if (deathCount > 1) |
| | | EventCenter.Ins.BroadCast((int)KTGMGemClient.EventType.EndlessOneTimeKillCount, deathCount); |
| | | } |
| | | |
| | | // 处理塔位的技能攻击: |
| | | ProcessTowerAttributeAttack(enemy, finalDamage, attributeId); |
| | |
| | | add += list[i].Config.buff_effect[2]; |
| | | } |
| | | |
| | | return finalDamage * (1 + ratio / 100f) + add; |
| | | return finalDamage * (ratio / 100f) + add; |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | enemy.SetTargetableMatColor(Color.blue); |
| | | break; |
| | | case 3: // 中毒 |
| | | enemy.poisonAgent(damage, attid); |
| | | enemy.SetTargetableMatColor(Color.green); |
| | | // enemy.poisonAgent(damage, attid); |
| | | // enemy.SetTargetableMatColor(Color.green); |
| | | break; |
| | | case 5: // 破甲 |
| | | enemy.bShieldBreak = true; |