Пример #1
0
        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);
        }
Пример #2
0
        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);
        }
Пример #3
0
        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;*/
        }
Пример #4
0
        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);
        }
Пример #5
0
        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);
        }
Пример #6
0
        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);
        }
Пример #7
0
        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;
        }
Пример #8
0
        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);
        }
Пример #9
0
        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);
        }