private Habilidade getHabilidade(string abilityName) { if (abilityName == null || abilityName.Length == 0) { return(null); } Habilidade habilidade = Habilidades.getHabilidadeByMethodName(abilityName); try { if (habilidade.tipoClasse == Main.classe) { if (habilidade.minLevel <= Main.atributos.Level) { return(habilidade); } ConsoleReport.Log("Seu nível é muito baixo para utilizar esta Habilidade", ConsoleType.BATTLE); } else { ConsoleReport.Log("A classe " + Main.classe.ToString() + " não pode utilizar esta Habilidade!", ConsoleType.BATTLE); } } catch (NullReferenceException) { ConsoleReport.Log("Habilidade não encontrada!", ConsoleType.BATTLE); } return(null); }
private bool verificaDistancia(int maxDistancia, int minDistancia) { if (Distancia > maxDistancia) { ConsoleReport.Log("VOCÊ ESTÁ MUITO LONGE PARA ACERTAR! DISTANCIA: " + Distancia, ConsoleType.BATTLE); actionOrder.ActualOrder++; return(true); } if (Distancia < minDistancia) { ConsoleReport.Log("VOCÊ ESTÁ MUITO PERTO PARA ACERTAR! DISTANCIA: " + Distancia, ConsoleType.BATTLE); actionOrder.ActualOrder++; return(true); } if (Distancia < minDistancia) { ConsoleReport.Log("VOCÊ ESTÁ MUITO PERTO PARA ACERTAR! DISTANCIA: " + Distancia, ConsoleType.BATTLE); actionOrder.ActualOrder++; return(true); } return(false); }
private IEnumerator attack(string abilityName, GameObject target, int order) { yield return(new WaitUntil(() => order == actionOrder.ActualOrder)); if (Main.status.acao > 0 && Main.status.pontosAcao >= 5) { if (MainIsDead) { ConsoleReport.Log("PERSONAGEM ATACANTE ESTÁ MORTO!", ConsoleType.BATTLE); actionOrder.ActualOrder++; yield break; } this.Target = target.GetComponent <Player>(); this.ModificadorEsquiva = Target.atributos.CA; if (TargetIsDead) { ConsoleReport.Log("O ALVO SELECIONADO ESTÁ MORTO!", ConsoleType.BATTLE); actionOrder.ActualOrder++; yield break; } int maxDistancia = Main.atributos.DistAtqMax; int minDistancia = Main.atributos.DistAtqMin; int bonusAcerto = 0; int custoPontosAcao = Main.atributos.CustoAtaqueBasico; Habilidade habilidade = getHabilidade(abilityName); if (habilidade != null) { ConsoleReport.LogBattle(habilidade.nome); maxDistancia = habilidade.maxDistancia; minDistancia = habilidade.minDistancia; bonusAcerto = habilidade.bonusAcerto; custoPontosAcao = habilidade.custoPontoAcao; } else if (abilityName != null && abilityName.Length > 0) { yield break; } if (verificaDistancia(maxDistancia, minDistancia)) { yield break; } if (habilidade != null && !Main.status.UseSp(habilidade.custoSp)) { ConsoleReport.Log("VOCÊ NÃO TEM SP SUFICIENTE PARA UTILIZAR ESTÁ HABILIDADE! SEU SP: " + Main.status.mana + " | SP NECESSÁRIA: " + habilidade.custoSp, ConsoleType.BATTLE); actionOrder.ActualOrder++; yield break; } this.Main.status.acao--; this.Main.status.pontosAcao -= custoPontosAcao; int damage = 0; bool isOfensiva = true; if (habilidade != null) { isOfensiva = habilidade.IsOfensiva; if (habilidade.tipoHabilidade.Equals(TipoHabilidades.HP)) { this.Target.status.Heal(habilidade.Cura); } else if (habilidade.tipoHabilidade.Equals(TipoHabilidades.SP)) { this.Target.status.Rejuvenate(habilidade.Rejuvenescer); } else if (habilidade.tipoHabilidade.Equals(TipoHabilidades.HPSP)) { this.Target.status.Heal(habilidade.Cura); this.Target.status.Rejuvenate(habilidade.Rejuvenescer); } else if (habilidade.tipoHabilidade.Equals(TipoHabilidades.OFENSIVA)) { damage = habilidade.Dano; } } if (isOfensiva) { this.ModificadorAcerto = Main.atributos.AcertoBase + bonusAcerto; if (hit) { if (damage.Equals(0)) { damage = Main.atributos.Dano; } if (damage < 0) { damage = 0; } ConsoleReport.Log("ModificadorAcerto: " + ModificadorAcerto + "| ModificadorEsquiva: " + ModificadorEsquiva + "| DANO: " + damage, ConsoleType.BATTLE); Main.status.attBarras(); this.Target.status.Damage(damage); } else { SoundManager.instance.Sfx("Miss"); ConsoleReport.Log("Errou", ConsoleType.BATTLE); ConsoleReport.Log("ModificadorAcerto: " + ModificadorAcerto + "| ModificadorEsquiva: " + ModificadorEsquiva, ConsoleType.BATTLE); Target.GetComponent <EffectsPlayer>().show(tipoEffect.DANO, "Errou", Target.GetComponent <Transform>().position); } Main.status.attBarras(); } } actionOrder.ActualOrder++; yield break; }