static void CalculoA(float multiplicador, PetAttackBase golpe, PetAttackDb golpePersonagem, int potenciaDoAtacante, PetManager doAtacado) { int dano = Mathf.Abs( Mathf.RoundToInt( multiplicador * (golpe.PotenciaCorrente + golpePersonagem.ModPersonagem + potenciaDoAtacante) )); potenciaDoAtacante = dano; PetAtributes aDoAtacado = doAtacado.MeuCriatureBase.PetFeat.meusAtributos; int defesa = Mathf.RoundToInt(aDoAtacado.Defesa.Corrente * Random.Range(0.85f, 1)); if (defesa < 0.75f * dano) { dano = (dano - defesa >= 1) ? dano - defesa : 1; } else { dano = (int)(0.25f * dano) >= 1 ? Mathf.Max((int)(0.25f * dano * Random.Range(0.9f, 1.15f)), 1) : 1; } AplicaCalculoComVIsaoDeDano(doAtacado, golpe, aDoAtacado, multiplicador, dano, defesa, potenciaDoAtacante); }
public static PetAttackDb RetornaGolpePersonagem(GameObject G, AttackNameId nomeDoGolpe) { PetBase criatureBase = G.GetComponent <PetManager>().MeuCriatureBase; PetAttackManager gg = criatureBase.GerenteDeGolpes; PetAttackDb gP = gg.ProcuraGolpeNaLista(criatureBase.NomeID, nomeDoGolpe); return(gP); }
public static colisor GetCollider(GameObject G, AttackNameId nomeColisor) { PetBase criatureBase = G.GetComponent <PetManager>().MeuCriatureBase; PetAttackManager gg = criatureBase.GerenteDeGolpes; PetAttackDb gP = gg.ProcuraGolpeNaLista(criatureBase.NomeID, nomeColisor); return(gP.Colisor); /*GolpePersonagem.RetornaGolpePersonagem(G, nomeColisor).Colisor;*/ }
static void CalculoB(float multiplicador, PetAttackBase golpe, PetAttackDb golpePersonagem, int potenciaDoAtacante, PetManager doAtacado) { PetAtributes aDoAtacado = doAtacado.MeuCriatureBase.PetFeat.meusAtributos; int defesa = Mathf.RoundToInt(aDoAtacado.Defesa.Corrente * Random.Range(0.85f, 1)); int dano = (int)(multiplicador * (golpe.PotenciaCorrente + golpePersonagem.ModPersonagem + potenciaDoAtacante / defesa)); AplicaCalculoComVIsaoDeDano(doAtacado, golpe, aDoAtacado, multiplicador, dano, defesa, potenciaDoAtacante); }
public PetAttackDb VerificaGolpeDoNivel(PetName nome, int nivel) { PetAttackDb retorno = new PetAttackDb(); listaDeGolpes = ListaDeGolpesAtualizada(nome); for (int i = 0; i < listaDeGolpes.Count; i++) { if (listaDeGolpes[i].NivelDoGolpe == nivel) { retorno = listaDeGolpes[i]; } } return(retorno); }
public PetAttackDb ProcuraGolpeNaLista(PetName nome, AttackNameId esseGolpe) { PetAttackDb retorno = new PetAttackDb(); listaDeGolpes = ListaDeGolpesAtualizada(nome); for (int i = 0; i < listaDeGolpes.Count; i++) { if (listaDeGolpes[i].Nome == esseGolpe) { retorno = listaDeGolpes[i]; } } return(retorno); }
public static void AplicaProjetil(GameObject G, PetAttackBase ativa, ProjetilFeatures carac) { PetAttackDb golpeP = PetAttackDb.RetornaGolpePersonagem(G, ativa.Nome); if (golpeP.TempoDeInstancia > 0) { carac.posInicial = EmissionPosition.Get(G, ativa.Nome); } GameObject KY = InstanceSupport.InstancieEDestrua(ativa.Nome, carac.posInicial, ativa.DirDeREpulsao, ativa.TempoDeDestroy); DamageColliderBase proj = DamageColliderFactory.Get(KY, carac.tipo); #region suprimido //switch (carac.tipo) //{ // case TipoDoProjetil.rigido: // proj = KY.AddComponent<ColisorDeDanoRigido>(); // break; // case TipoDoProjetil.basico: // proj = KY.AddComponent<ColisorDeDano>(); // break; // case TipoDoProjetil.statusExpansivel: // proj = KY.AddComponent<ColisorDeStatusExpansivel>(); // break; // case TipoDoProjetil.direcional: // ColisorDeDanoDirecional projD = KY.AddComponent<ColisorDeDanoDirecional>(); // projD.alvo = (G.name == "CriatureAtivo") // ? ((GameController.g.InimigoAtivo != null) ? GameController.g.InimigoAtivo.gameObject : null) // : GameController.g.Manager.CriatureAtivo.gameObject; // proj = projD; // break; //} #endregion proj.velocidadeProjetil = ativa.VelocidadeDeGolpe; proj.noImpacto = carac.noImpacto; proj.dono = G; proj.esseGolpe = ativa; }
static void CalculaDano(PetManager doAtacado, GameObject atacante, PetAttackBase golpe) { float multiplicador = 1; for (int i = 0; i < doAtacado.MeuCriatureBase.PetFeat.contraTipos.Length; i++) { if (golpe.Tipo.ToString() == doAtacado.MeuCriatureBase.PetFeat.contraTipos[i].Nome) { multiplicador *= doAtacado.MeuCriatureBase.PetFeat.contraTipos[i].Mod; } } PetBase cDoAtacante = atacante.GetComponent <PetManager>().MeuCriatureBase; PetAtributes A = cDoAtacante.PetFeat.meusAtributos; int potenciaDoAtacante = (golpe.Caracteristica == AttackDiferentialId.colisao) ? Mathf.RoundToInt(A.Ataque.Minimo + (A.Ataque.Corrente - A.Ataque.Minimo) * Random.Range(0.85f, 1)) : Mathf.RoundToInt(A.Poder.Minimo + (A.Poder.Corrente - A.Poder.Minimo) * Random.Range(0.85f, 1)); int numStatus = StatusTemporarioBase.ContemStatus(StatusType.fraco, cDoAtacante); if (numStatus > -1) { potenciaDoAtacante = (int)Mathf.Max(1 / cDoAtacante.StatusTemporarios[numStatus].Quantificador * potenciaDoAtacante, (A.Ataque.Minimo + A.Poder.Minimo) / 2); golpe.ModCorrente = -(int)cDoAtacante.StatusTemporarios[numStatus].Quantificador; } else { golpe.ModCorrente = 0; } PetAttackDb golpePersonagem = cDoAtacante.GerenteDeGolpes.ProcuraGolpeNaLista(cDoAtacante.NomeID, golpe.Nome); CalculoC(multiplicador, golpe, golpePersonagem, potenciaDoAtacante, doAtacado, cDoAtacante); golpe.VerificaAplicaStatus(cDoAtacante, doAtacado); }
static void CalculoC( float multiplicador, PetAttackBase golpe, PetAttackDb golpePersonagem, int potenciaDoAtacante, PetManager doAtacado, PetBase cDoAtacado) { PetAtributes aDoAtacado = doAtacado.MeuCriatureBase.PetFeat.meusAtributos; float rd = Random.Range(0.85f, 1); int level = cDoAtacado.PetFeat.mNivel.Nivel; float STAB = 1; if (cDoAtacado.PetFeat.TemOTipo(golpe.Tipo)) { STAB = 1.5f; } Debug.Log("modificador de potencia para esse golpe é " + golpePersonagem.ModPersonagem); //int dano = (int)((((((((2 * level / 5) + 2) * potenciaDoAtacante* 20*(golpe.PotenciaCorrente+golpePersonagem.ModPersonagem) )/ aDoAtacado.Defesa.Corrente)/ 50) +2) *STAB * multiplicador) *rd / 100); int dano = (int)(((2 * level) * potenciaDoAtacante * (golpe.PotenciaCorrente + golpePersonagem.ModPersonagem) / (45f * aDoAtacado.Defesa.Corrente + 250) + 2) * STAB * multiplicador * rd); AplicaCalculoComVIsaoDeDano(doAtacado, golpe, aDoAtacado, multiplicador, dano, aDoAtacado.Defesa.Corrente, potenciaDoAtacante); }