Example #1
0
        public Ser RemoveModificador(ModSubtraiValorMag 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.SomaValorMag((ValorMag)propriedade.GetValue(ser, null), mod.Valor);

                propriedade.SetValue(ser, resultado);

                return(ser);
            }
            else
            {
                throw new System.ArgumentException("Propriedade não é ValorMag.", mod.Alvo);
            }
        }
Example #2
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);
        }