/// <summary> /// Use every time before sent result of skill. /// </summary> public List <EffectReceiver> SetEffectOwnerIdAndDamage(Poring poring) { List <EffectReceiver> resultList = new List <EffectReceiver>(); EffectsReceiver.ForEach(fx => { float d = 0; if (fx.Damage == -1) { d = ((DamageType == DamageType.PAtk) ? poring.Property.CurrentPAtk : poring.Property.CurrentMAtk); d *= poring.GetBlessingBuff(); EffectReceiver maximizePower = poring.GetStatus(SkillStatus.MaximizePower); d *= (maximizePower != null) ? maximizePower.Damage : 1; d *= DamageMultiple; } else { d = fx.Damage; } EffectReceiver result = new EffectReceiver() { OwnerId = PrototypeGameMode.Instance.GetPoringIndexByPoring(poring), Damage = d, EffectDuration = fx.EffectDuration, Status = fx.Status, Particle = fx.Particle }; resultList.Add(result); }); return(resultList); }
public override OnDefenseSkillResult OnDefense(Poring attacker, Poring poring, FaceDice faceDice) { if (faceDice == ActiveOnType && CurrentCD <= 0) { // Debug.LogError($"{poring.name} : {this.name}!!"); float damage = 0; switch (DefenseType) { case DefenseTypeResult.None: damage = 0; break; case DefenseTypeResult.Counter: damage = (DamageType == DamageType.PAtk) ? poring.Property.CurrentPAtk : poring.Property.CurrentMAtk; damage *= poring.GetBlessingBuff(); EffectReceiver maximizePower = poring.GetStatus(SkillStatus.MaximizePower); damage *= (maximizePower != null) ? maximizePower.Damage : 1; if (attacker.Node != poring.Node) { DefenseType = DefenseTypeResult.None; damage = 0; } if (poring.CheckHasStatus(SkillStatus.Blind)) { damage = 0; } break; case DefenseTypeResult.Dodge: damage = 0; break; } return(new OnDefenseSkillResult() { Type = DefenseType, DamageType = DamageType, EffectStatusResults = SetEffectOwnerIdAndDamage(poring), DamageResult = damage, EffectOnSelf = EffectOnSelf, EffectOnTarget = EffectOnHit, }); } else { return(new OnDefenseSkillResult() { Type = DefenseTypeResult.None, DamageType = DamageType, EffectStatusResults = new List <EffectReceiver>(), DamageResult = 0 }); } }
private void SkillEffectActivate(Poring poring, Poring targetPoring = null, Node targetNode = null) { float damageResult = (DamageType == DamageType.PAtk) ? poring.Property.CurrentPAtk : poring.Property.CurrentMAtk; damageResult *= poring.GetBlessingBuff(); EffectReceiver maximizePower = poring.GetStatus(SkillStatus.MaximizePower); damageResult *= (maximizePower != null) ? maximizePower.Damage : 1; damageResult *= DamageMultiple; if (poring.CheckHasStatus(SkillStatus.Blind) && targetNode == null) { damageResult = 0; } PrototypeGameMode.Instance.StartCoroutine(WaitForAnimation(poring, damageResult, targetPoring, targetNode)); }
public void SetDetail(BaseSkill baseSkill, Poring poring) { float d = (baseSkill.DamageType == DamageType.PAtk) ? poring.Property.CurrentPAtk : poring.Property.CurrentMAtk; d *= poring.GetBlessingBuff(); EffectReceiver maximizePower = poring.GetStatus(SkillStatus.MaximizePower); d *= (maximizePower != null) ? maximizePower.Damage : 1; Damage = (int)((baseSkill.SkillMode == SkillMode.Activate) ? (baseSkill.DamageType == DamageType.PAtk) ? baseSkill.DamageMultiple * poring.Property.CurrentPAtk : baseSkill.DamageMultiple * poring.Property.CurrentMAtk : (baseSkill.DamageType == DamageType.PAtk) ? poring.Property.CurrentPAtk : poring.Property.CurrentMAtk); DamageType = baseSkill.DamageType; TargetTypestr = (baseSkill.TargetType == TargetType.Another) ? "Poring" : baseSkill.TargetType.ToString(); MoveToTarget = baseSkill.MoveToTarget; AOE = baseSkill.AOEValue; Range = $"{baseSkill.MinRangeValue} - {baseSkill.MaxRangeValue}"; CD = baseSkill.TurnCD; Description = baseSkill.Description; }
public override OnAttackSkillResult OnAttack(Poring poring, FaceDice faceDice) { EffectReceiver maximizePowerDef; if (faceDice == ActiveOnType && CurrentCD <= 0) { CurrentCD = TurnCD; float damage = 0; switch (AttackType) { case AttackTypeResult.None: damage = 0; break; case AttackTypeResult.Double: damage = (DamageType == DamageType.PAtk) ? poring.Property.CurrentPAtk : poring.Property.CurrentMAtk; damage *= poring.GetBlessingBuff(); maximizePowerDef = poring.GetStatus(SkillStatus.MaximizePower); damage *= (maximizePowerDef != null) ? maximizePowerDef.Damage : 1; break; case AttackTypeResult.PowerUp: damage = (DamageType == DamageType.PAtk) ? poring.Property.CurrentPAtk : poring.Property.CurrentMAtk; damage *= poring.GetBlessingBuff(); damage *= 2; maximizePowerDef = poring.GetStatus(SkillStatus.MaximizePower); damage *= (maximizePowerDef != null) ? maximizePowerDef.Damage : 1; break; case AttackTypeResult.Enchant: damage = (DamageType == DamageType.PAtk) ? poring.Property.CurrentPAtk : poring.Property.CurrentMAtk; damage *= poring.GetBlessingBuff(); maximizePowerDef = poring.GetStatus(SkillStatus.MaximizePower); damage *= (maximizePowerDef != null) ? maximizePowerDef.Damage : 1; break; } if (poring.CheckHasStatus(SkillStatus.Blind)) { damage = 0; } return(new OnAttackSkillResult() { Type = AttackType, DamageType = DamageType, EffectStatusResults = SetEffectOwnerIdAndDamage(poring), DamageResult = damage, EffectOnSelf = EffectOnSelf, EffectOnTarget = EffectOnHit, }); } else { return(new OnAttackSkillResult() { Type = AttackTypeResult.None, DamageType = DamageType, EffectStatusResults = new List <EffectReceiver>(), DamageResult = 0 }); } }