/// <summary> /// 技能作用效果 /// 【!子类重写AffectAgents方法时,必须调用base.AffectAgents,否则必须重写技能触发回调逻辑!】 /// </summary> public override void AffectAgents(BattleAgentController self, BattleAgentController enemy) { //BattleAgentController triggerSource = null; if (beforeFightTrigger) { TriggeredSkillExcutor beforeFightSkillExcutor = new TriggeredSkillExcutor(this, BeforeFightTriggerCallBack); self.beforeFightTriggerExcutors.Add(beforeFightSkillExcutor); } if (attackTrigger) { TriggeredSkillExcutor attackSkillExcutor = new TriggeredSkillExcutor(this, AttackTriggerCallBack); self.attackTriggerExcutors.Add(attackSkillExcutor); } if (hitTrigger) { TriggeredSkillExcutor hitSkillExcutor = new TriggeredSkillExcutor(this, HitTriggerCallBack); self.hitTriggerExcutors.Add(hitSkillExcutor); } if (beAttackTrigger) { TriggeredSkillExcutor beAttackSkillExcutor = new TriggeredSkillExcutor(this, BeAttackedTriggerCallBack); self.beAttackedTriggerExcutors.Add(beAttackSkillExcutor); } if (beHitTrigger) { TriggeredSkillExcutor beHitSkillExcutor = new TriggeredSkillExcutor(this, BeHitTriggerCallBack); self.beHitTriggerExcutors.Add(beHitSkillExcutor); } if (fightEndTrigger) { TriggeredSkillExcutor fightEndSkillExcutor = new TriggeredSkillExcutor(this, FightEndTriggerCallBack); self.fightEndTriggerExcutors.Add(fightEndSkillExcutor); } }
public int skillSourceValue; //魔法伤害值 protected override void ExcuteNoneTriggeredSkillLogic(BattleAgentController self, BattleAgentController enemy) { // 执行攻击触发事件回调 for (int i = 0; i < self.attackTriggerExcutors.Count; i++) { TriggeredSkillExcutor excutor = self.attackTriggerExcutors[i]; switch (excutor.triggerSource) { case SkillEffectTarget.Self: excutor.triggeredCallback(self, enemy); break; case SkillEffectTarget.Enemy: excutor.triggeredCallback(enemy, self); break; } } // 敌方执行被攻击触发事件回调 for (int i = 0; i < enemy.beAttackedTriggerExcutors.Count; i++) { TriggeredSkillExcutor excutor = enemy.beAttackedTriggerExcutors[i]; switch (excutor.triggerSource) { case SkillEffectTarget.Self: excutor.triggeredCallback(enemy, self); break; case SkillEffectTarget.Enemy: excutor.triggeredCallback(self, enemy); break; } } //计算对方闪避率(敌方的基础闪避率 - 己方的闪避修正) int enemyDodge = enemy.propertyCalculator.dodge; float dodgeProbability = dodgeSeed * enemyDodge / (1 + dodgeSeed * enemyDodge) - self.propertyCalculator.dodgeFixScaler; //判断对方是否闪避成功 if (isEffective(dodgeProbability)) { enemy.propertyCalculator.specialAttackResult = SpecialAttackResult.Miss; enemy.AddFightTextToQueue(string.Empty, SpecialAttackResult.Miss); return; } enemy.PlayShakeAnim(); //原始魔法伤害值 self.propertyCalculator.magicalHurtToEnemy += skillSourceValue; SetEffectAnims(self, enemy); // 执行己方攻击命中的回调 for (int i = 0; i < self.hitTriggerExcutors.Count; i++) { TriggeredSkillExcutor excutor = self.hitTriggerExcutors[i]; switch (excutor.triggerSource) { case SkillEffectTarget.Self: excutor.triggeredCallback(self, enemy); break; case SkillEffectTarget.Enemy: excutor.triggeredCallback(enemy, self); break; } } // 执行敌方被击中的回调 for (int i = 0; i < enemy.beHitTriggerExcutors.Count; i++) { TriggeredSkillExcutor excutor = enemy.beHitTriggerExcutors[i]; switch (excutor.triggerSource) { case SkillEffectTarget.Self: excutor.triggeredCallback(enemy, self); break; case SkillEffectTarget.Enemy: excutor.triggeredCallback(self, enemy); break; } } self.propertyCalculator.CalculateAgentHealth(); enemy.propertyCalculator.CalculateAgentHealth(); self.UpdateFightStatus(); enemy.UpdateFightStatus(); self.UpdateStatusPlane(); enemy.UpdateStatusPlane(); self.propertyCalculator.ResetAllHurt(); enemy.propertyCalculator.ResetAllHurt(); }
/// <summary> /// 技能作用效果 /// 【!子类重写AffectAgents方法时,必须调用base.AffectAgents,否则必须重写技能触发回调逻辑!】 /// </summary> public override void AffectAgents(BattleAgentController self, BattleAgentController enemy) { base.AffectAgents(self, enemy); BattleAgentController triggerSource = null; if (beforeFightTriggerInfo.triggered) { switch (beforeFightTriggerInfo.triggerSource) { case SkillEffectTarget.Self: triggerSource = self; break; case SkillEffectTarget.Enemy: triggerSource = enemy; break; } TriggeredSkillExcutor excutor = new TriggeredSkillExcutor(this, beforeFightTriggerInfo.triggerSource, BeforeFightTriggerCallBack); triggerSource.beforeFightTriggerExcutors.Add(excutor); } if (attackTriggerInfo.triggered) { switch (attackTriggerInfo.triggerSource) { case SkillEffectTarget.Self: triggerSource = self; break; case SkillEffectTarget.Enemy: triggerSource = enemy; break; } TriggeredSkillExcutor excutor = new TriggeredSkillExcutor(this, attackTriggerInfo.triggerSource, AttackTriggerCallBack); triggerSource.attackTriggerExcutors.Add(excutor); } if (hitTriggerInfo.triggered) { switch (attackTriggerInfo.triggerSource) { case SkillEffectTarget.Self: triggerSource = self; break; case SkillEffectTarget.Enemy: triggerSource = enemy; break; } TriggeredSkillExcutor excutor = new TriggeredSkillExcutor(this, hitTriggerInfo.triggerSource, HitTriggerCallBack); triggerSource.hitTriggerExcutors.Add(excutor); } // if (attackFinishTriggerInfo.triggered) { // switch (attackFinishTriggerInfo.excutor) { // case SkillEffectTarget.Self: // targetBa = self; // break; // case SkillEffectTarget.Enemy: // targetBa = enemy; // break; // } // targetBa.attackFinishTriggerCallBacks.Add (AttackFinishTriggerCallBack); // } if (beAttackedTriggerInfo.triggered) { switch (beAttackedTriggerInfo.triggerSource) { case SkillEffectTarget.Self: triggerSource = self; break; case SkillEffectTarget.Enemy: triggerSource = enemy; break; } TriggeredSkillExcutor excutor = new TriggeredSkillExcutor(this, beAttackedTriggerInfo.triggerSource, BeAttackedTriggerCallBack); triggerSource.beAttackedTriggerExcutors.Add(excutor); } if (beHitTriggerInfo.triggered) { switch (beHitTriggerInfo.triggerSource) { case SkillEffectTarget.Self: triggerSource = self; break; case SkillEffectTarget.Enemy: triggerSource = enemy; break; } TriggeredSkillExcutor excutor = new TriggeredSkillExcutor(this, beHitTriggerInfo.triggerSource, BeHitTriggerCallBack); triggerSource.beHitTriggerExcutors.Add(excutor); } TriggeredSkillExcutor FightEndExcutor = new TriggeredSkillExcutor(this, fightEndTriggerInfo.triggerSource, FightEndTriggerCallBack); self.fightEndTriggerExcutors.Add(FightEndExcutor); }
protected override void ExcuteActiveSkillLogic(BattleAgentController self, BattleAgentController enemy) { // 如果是玩家角色,则在每次攻击时重设攻速 if (self is BattlePlayerController) { int attackSpeedInt = 0; for (int i = 0; i < self.agent.allEquipedEquipments.Length; i++) { Equipment equipment = self.agent.allEquipedEquipments[i]; if (equipment.itemId == -1) { continue; } if (equipment.equipmentType == EquipmentType.Weapon) { attackSpeedInt = (int)equipment.attackSpeed; break; } } for (int i = 0; i < self.agent.attachedPermanentPassiveSkills.Count; i++) { PermanentPassiveSkill permanentPassiveSkill = self.agent.attachedPermanentPassiveSkills[i]; if (permanentPassiveSkill is JiSu) { attackSpeedInt++; break; } } if (attackSpeedInt > 3) { attackSpeedInt = 3; } (self.agent as Player).attackSpeed = (AttackSpeed)attackSpeedInt; } SetEffectAnims(self, enemy); // 执行攻击触发事件回调 for (int i = 0; i < self.attackTriggerExcutors.Count; i++) { TriggeredSkillExcutor excutor = self.attackTriggerExcutors[i]; excutor.triggeredCallback(self, enemy); } // 敌方执行被攻击触发事件回调 for (int i = 0; i < enemy.beAttackedTriggerExcutors.Count; i++) { TriggeredSkillExcutor excutor = enemy.beAttackedTriggerExcutors[i]; excutor.triggeredCallback(enemy, self); } //计算对方闪避率(敌方的基础闪避率 - 己方的闪避修正) float enemyDodge = enemy.agent.dodge; //判断对方是否闪避成功 if (isEffective(enemyDodge)) { enemy.AddTintTextToQueue("闪避"); return; } int actualPhysicalHurt = 0; int actualMagicalHurt = 0; if (self.agent.attack > 0) { //int oriPhysicalHurt = self.agent.attack + self.agent.armorDecrease / 4; int oriPhysicalHurt = self.agent.attack; float crit = self.agent.crit; if (isEffective(crit)) { enemy.AddTintTextToQueue("暴击"); oriPhysicalHurt = (int)(oriPhysicalHurt * self.agent.critHurtScaler); } int armorCal = enemy.agent.armor - self.agent.armorDecrease / 2; if (armorCal < -50) { armorCal = -50; } actualPhysicalHurt = (int)(oriPhysicalHurt / (armorCal / 100f + 1)); //actualPhysicalHurt = oriPhysicalHurt - enemy.agent.armor / 4; if (actualPhysicalHurt < 0) { actualPhysicalHurt = 0; } enemy.AddHurtAndShow(actualPhysicalHurt, HurtType.Physical, self.towards); } if (self.agent.magicAttack > 0) { int magicResistCal = enemy.agent.magicResist - self.agent.magicResistDecrease / 2; if (magicResistCal < -50) { magicResistCal = -50; } actualMagicalHurt = (int)(self.agent.magicAttack / (magicResistCal / 100f + 1)); if (actualMagicalHurt < 0) { actualMagicalHurt = 0; } enemy.AddHurtAndShow(actualMagicalHurt, HurtType.Magical, self.towards); } enemy.PlayShakeAnim(); self.agent.physicalHurtToEnemy = actualPhysicalHurt; self.agent.magicalHurtToEnemy = actualMagicalHurt; // 执行己方攻击命中的回调 for (int i = 0; i < self.hitTriggerExcutors.Count; i++) { TriggeredSkillExcutor excutor = self.hitTriggerExcutors[i]; excutor.triggeredCallback(self, enemy); } // 执行敌方被击中的回调 for (int i = 0; i < enemy.beHitTriggerExcutors.Count; i++) { TriggeredSkillExcutor excutor = enemy.beHitTriggerExcutors[i]; excutor.triggeredCallback(enemy, self); } }