示例#1
0
        public Ser RemoveModificador(ModSomaNumero mod, Ser ser)
        {
            PropertyInfo propriedade = ser.GetType().GetProperty(mod.Alvo);

            if (propriedade.PropertyType == typeof(int) || propriedade.PropertyType == typeof(decimal) || propriedade.PropertyType == typeof(double))
            {
                CalculadorNumero calculador = new CalculadorNumero();


                if (propriedade.PropertyType == typeof(int))
                {
                    int resultado = 0;
                    resultado = (int)propriedade.GetValue(ser, null) - (int)mod.Valor;
                    propriedade.SetValue(ser, resultado);
                }
                else if (propriedade.PropertyType == typeof(decimal))
                {
                    decimal resultado = 0;
                    resultado = (decimal)propriedade.GetValue(ser, null) - mod.Valor;
                    propriedade.SetValue(ser, resultado);
                }

                else
                {
                    double resultado = 0;
                    resultado = (double)propriedade.GetValue(ser, null) - decimal.ToDouble(mod.Valor);
                    propriedade.SetValue(ser, resultado);
                }
                return(ser);
            }
            else
            {
                throw new System.ArgumentException("Propriedade não é um int, decimal ou double.", mod.Alvo);
            }
        }
示例#2
0
        public Resposta CalculaResposta(Ser ser)
        {
            CalculadorNumero calculador = new CalculadorNumero();

            Resposta reacao = new Resposta()
            {
                Bravura     = (int)(from e in ser.Especies select e.RespostaMin.Bravura).Max(),
                Coragem     = (int)(from e in ser.Especies select e.RespostaMin.Coragem).Max(),
                Desespero   = (int)(from e in ser.Especies select e.RespostaMin.Desespero).Max(),
                Heroismo    = (int)(from e in ser.Especies select e.RespostaMin.Heroismo).Max(),
                Indiferenca = (int)(from e in ser.Especies select e.RespostaMin.Indiferenca).Max(),
                Medo        = (int)(from e in ser.Especies select e.RespostaMin.Medo).Max(),
                Panico      = (int)(from e in ser.Especies select e.RespostaMin.Panico).Max()
            };

            return(reacao);
        }
示例#3
0
        public Ser RemoveModificador(ModDivideValorMag mod, Ser ser)
        {
            PropertyInfo propriedade = ser.GetType().GetProperty(mod.Alvo);

            if (propriedade.PropertyType == typeof(ValorMag))
            {
                CalculadorNumero calculador = new CalculadorNumero();
                ValorMag         resultado  = new ValorMag();

                resultado = calculador.MultiplicaValorMag((ValorMag)propriedade.GetValue(ser, null), mod.Valor);

                propriedade.SetValue(ser, resultado);

                return(ser);
            }
            else
            {
                throw new System.ArgumentException("Propriedade não é ValorMag.", mod.Alvo);
            }
        }
示例#4
0
        //Minimo da Espécie * (FatorDex + FatorFor)
        //FatorDex e FatorFor = quantos % acima ou abaixo do minimo da especie o ser está
        private Deslocamento CalculaDesolocamentoSolo(Ser ser)
        {
            Deslocamento resultado      = new Deslocamento("Solo");
            Deslocamento desSoloEspecie = ser.Especies[0].DeslocamentosMedios.FirstOrDefault(d => d.Tipo == "Solo");

            if (desSoloEspecie != null)
            {
                CalculadorNumero calc = new CalculadorNumero();
                int especieDexMin     = ser.Especies[0].DestrezaMin.Pontos;
                int especieForMin     = ser.Especies[0].ForcaMin.Pontos;
                int serDex            = ser.Destreza.Pontos;
                int serFor            = ser.Forca.Pontos;
                //Retorna as porcentagens a mais (ou a menos) que os atributos atuais têm sobre a espécie
                double fatorDex = 10 * serDex / especieDexMin;
                double fatorFor = 10 * serFor / especieForMin;
                //Média dos dois valores para multiplicar com o minimo da espécie
                double fatorTotal = (fatorDex + fatorFor) / 2;
                resultado.Valor = calc.MultiplicaValorMag(desSoloEspecie.Valor, fatorTotal);
            }

            return(resultado);
        }
示例#5
0
        //Calcula subatributos BASE de um ser sem modificadores
        public Ser CalculaSubatributos(Ser ser)
        {
            GeradorValorMag  genValorMag = new GeradorValorMag();
            CalculadorNumero calculador  = new CalculadorNumero();
            Random           rnd         = new Random();

            //Iniciativa = Destreza.Iniciativa
            ser.Iniciativa = ser.Destreza.Iniciativa;

            //Destria = Pontos Destreza / 10 (até o maximo da espécie)
            if (ser.Destreza.Pontos / 10 > ser.Especies[0].DestriaMax)
            {
                ser.Destria = ser.Especies[0].DestriaMax;
            }
            else if (ser.Destreza.Pontos / 10 < ser.Especies[0].DestriaMin)
            {
                ser.Destria = ser.Especies[0].DestriaMin;
            }
            else
            {
                ser.Destria = ser.Destreza.Pontos / 10;
            }

            //Acao = vigor + vitalidade * dinamica
            ser.Acao = calculador.SomaValorMag(ser.Forca.Vigor, ser.Materia.Vitalidade);
            ser.Acao = calculador.MultiplicaValorMag(ser.Acao, Convert.ToDouble(ser.Destreza.Dinamica));
            //Reacao = Vitalidade * Dinamica
            ser.Reacao = calculador.MultiplicaValorMag(ser.Materia.Vitalidade, Convert.ToDouble(ser.Destreza.Dinamica));
            //Turno = valor minimo da especie dominante + 20% da maior especie
            ser.Turno = ser.Especies[0].TurnoMin + (int)calculador.CalculaPorcentagem(20, (long)(from e in ser.Especies select e.TurnoMin).Max());

            //Altura = aleatorio a partir da especie dominante
            if (ser.Altura.Valor == 0)
            {
                ser.Altura = genValorMag.GerarEntre(ser.Especies[0].AlturaMin, ser.Especies[0].AlturaMax, rnd);
            }

            ser.Comprimento = new ValorMag(Convert.ToString(ser.Materia.Pontos));

            //Largura = Aleatorio entre largura min e largura max da especie dominante
            if (ser.Largura.Valor == 0)
            {
                ser.Largura = genValorMag.GerarEntre(ser.Especies[0].LarguraMin, ser.Especies[0].LarguraMax, rnd);
            }

            //Massa = Volume * Densidade da Especie
            ValorMag volume = calculador.MultiplicaValorMag(ser.Altura, ser.Comprimento);

            volume    = calculador.MultiplicaValorMag(volume, ser.Largura);
            ser.Massa = calculador.MultiplicaValorMag(volume, ser.Especies[0].Densidade);

            //Instinto = (Ideia + Destreza) / 2
            ser.Instinto = calculador.SomaValorMag(ser.Ideia.Porcentagem, ser.Destreza.Porcentagem);
            ser.Instinto = calculador.DivideValorMag(ser.Instinto, 2);

            //Raciocinio = (Intelecto + Criatividade) / 2
            ser.Raciocinio = calculador.SomaValorMag(ser.Intelecto.Porcentagem, ser.Criatividade.Porcentagem);
            ser.Raciocinio = calculador.DivideValorMag(ser.Raciocinio, 2);

            //Subconsciencia = (Existencia + Ideia) / 2
            ser.Subconsciencia = calculador.SomaValorMag(ser.Existencia.Porcentagem, ser.Ideia.Porcentagem);
            ser.Subconsciencia = calculador.DivideValorMag(ser.Subconsciencia, 2);

            //Autocontrole = (Intelecto + Existencia) / 2
            ser.Autocontrole = calculador.SomaValorMag(ser.Intelecto.Porcentagem, ser.Existencia.Porcentagem);
            ser.Autocontrole = calculador.DivideValorMag(ser.Subconsciencia, 2);

            //Anatomia = (Materia + Força + Destreza) /3
            ser.Anatomia = calculador.SomaValorMag(ser.Materia.Porcentagem, ser.Forca.Porcentagem);
            ser.Anatomia = calculador.SomaValorMag(ser.Anatomia, ser.Destreza.Porcentagem);
            ser.Anatomia = calculador.DivideValorMag(ser.Anatomia, 3);

            //Animo = (Criatividade + Existencia)/2
            ser.Animo = calculador.SomaValorMag(ser.Criatividade.Porcentagem, ser.Existencia.Porcentagem);
            ser.Animo = calculador.DivideValorMag(ser.Animo, 2);

            //Movimento = (Destreza + Forca*2) /3
            ser.Movimento = calculador.MultiplicaValorMag(ser.Forca.Porcentagem, 2);
            ser.Movimento = calculador.SomaValorMag(ser.Movimento, ser.Destreza.Porcentagem);
            ser.Movimento = calculador.DivideValorMag(ser.Movimento, 3);

            //Precisao = (Forca*2 + Destreza) / 3
            ser.Precisao = calculador.MultiplicaValorMag(ser.Forca.Porcentagem, 2);
            ser.Precisao = calculador.SomaValorMag(ser.Movimento, ser.Destreza.Porcentagem);
            ser.Precisao = calculador.DivideValorMag(ser.Movimento, 3);

            //Composição = Dureza + Resistencia
            Conversor conver = new Conversor();

            ser.Composicao = conver.StringParaValorMag(Convert.ToString(ser.Forca.Dureza));
            ser.Composicao = calculador.SomaValorMag(ser.Composicao, ser.Materia.Resistencia);

            //HP MP AP SP
            //HP = Materia
            //AP = Força Materia Destreza Intelecto Existência
            //MP = Criatividade + Ideia
            //SP = ((15*(pontos de todos atributos-7))*7) (somar tracinhos)
            ser.BonusHP = ser.Materia.BonusHP;
            ser.BonusCP = ser.Forca.BonusCP + ser.Materia.BonusCP;
            ser.BonusCP = ser.BonusCP + ser.Destreza.BonusCP;
            ser.BonusCP = ser.BonusCP + ser.Intelecto.BonusCP;
            ser.BonusCP = Math.Floor(ser.BonusCP + ser.Existencia.BonusCP);
            ser.BonusMP = calculador.SomaValorMag(ser.Criatividade.BonusMP, ser.Ideia.BonusMP);
            ser.BonusSP = CalculaBonusSP(ser);

            return(ser);
        }