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); } }
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); }
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); } }
//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); }
//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); }