Traduções desta página:

Ferramentas do usuário

Ferramentas do site


05_curso_antigo:r2018:alunos:trabalho_final:arthur.cambler:funcao_finalizada

Versão final da função fichaDnD

fichaDnD <- function(abil, ord, align, race, clas, back, half.elf) #Criando a função e seus argumentos
{
  #############################################
  #Testes lógicos para verificar os argumentos#
  #############################################

  ####Para verificar o argumento "abil"####

  if(missing(abil)) #Testando se "abil" não foi preenchido. Solução retirada de: https://stackoverflow.com/questions/9368900/how-to-check-if-object-variable-is-defined-in-r
  { 
    stop("O argumento \"abil\" não foi preenchido, preencha-o para executar a função") #Se de fato ele não foi preenchido, a função parará e retornará um aviso 
  }
  
  if(class(abil)!= "character") #Testando se "abil" não é composto apenas por caracteres
  {
    stop("O argumento \"abil\" precisa ser um vetor composto apenas por caracteres") #Caso de fato ele não seja composto apenas por caracteres a função parará e retornará um aviso 
  } 
  
  if(length(abil)>1) #Testando se "abil" tem apenas um elemento
  {
    stop("O argumento \"abil\" pode ter apenas um elemento") #Caso de fato ele não tenha apenas um elemento a função parará e retornará um aviso 
  } 
  
  #Testando se os elementos previstos para uso nesse argumento estão presentes  
  if(!is.element("random",abil) && !is.element("fixed",abil)) #Checando se nenhum dos elementos previstos está presente
  {
    stop("O argumento \"abil\" não foi preenchido com um elemento válido. Escolha entre:\"random\" e \"fixed\"")
  }
  
  ####Para verificar o argumento "ord"####  

  if(missing(ord)) #Testando se "ord" não foi preenchido
  { 
    stop("O argumento \"ord\" não foi preenchido, preencha-o para executar a função") #Se de fato ele não foi preenchido, a função parará e retornará um aviso 
  }
  
  if(class(ord)!= "character") #Testando se "ord" não é composto apenas por caracteres
  {
    stop("O argumento \"ord\" precisa ser um vetor composto apenas por caracteres") #Caso de fato ele não seja composto apenas por caracteres a função parará e retornará um aviso 
  } 

  if(length(ord)!=6) #Testando se "ord" tem 6 elementos
  {
    stop("O argumento \"ord\" deve ter seis elementos, \"Str\", \"Dex\", \"Con\", \"Int\",\"Wis\" e \"Cha\", ordenados do maior para o menor de acordo com sua preferência") #Caso de fato ele não tenha apenas 6 elementos a função parará e retornará um aviso 
  }   
  
  #Testando se os 6 elementos previstos para uso nesse argumento estão presentes.  
  if(!is.element("Str",ord) | !is.element("Dex",ord) | !is.element("Con",ord) | !is.element("Int",ord) | !is.element("Wis",ord) | !is.element("Cha",ord)) #Checando se ao menos um dos seis elementos previstos não está presente. Solução retirada de: https://stackoverflow.com/questions/1169248/test-if-a-vector-contains-a-given-element
  {
	#Caso algum dos elementos não estiver presentes, fazer dois tipos de checagens: 1- checar se o que gerou a ausência de um dos elementos foi a repetição de algum outro elemento; 2- determinar qual o elemento faltante (no caso de um erro de digitação, por exemplo)
	
	###Verificando se há algum elemento repetido###
	#Primeiro vou contar quantos elementos de cada tipo foram encontrados (fazendo esse teste para cada um dos possíveis elementos previstos)
	#Para o elemento "Str"
	Str <- which("Str" == ord) #Buscando todas as ocorrências desse elemento
	num.Str <- length(Str) #Contando o número de ocorrências desse elemento
	
	#Para o elemento "Dex"
	Dex <- which("Dex" == ord) #Buscando todas as ocorrências desse elemento
	num.Dex <- length(Dex) #Contando o número de ocorrências desse elemento
	
	#Para o elemento "Con"
	Con <- which("Con" == ord) #Buscando todas as ocorrências desse elemento
	num.Con <- length(Con) #Contando o número de ocorrências desse elemento
	
	#Para o elemento "Int"
	Int <- which("Int" == ord) #Buscando todas as ocorrências desse elemento
	num.Int <- length(Int) #Contando o número de ocorrências desse elemento
	
	#Para o elemento "Wis"
	Wis <- which("Wis" == ord) #Buscando todas as ocorrências desse elemento
	num.Wis <- length(Wis) #Contando o número de ocorrências desse elemento
	
	#Para o elemento "Cha"
	Cha <- which("Cha" == ord) #Buscando todas as ocorrências desse elemento
	num.Cha <- length(Cha) #Contando o número de ocorrências desse elemento
	
	#Fazendo os testes lógicos para determinar se houve ou não repetição do elemento	
	if(num.Str>1) #Testando se há mais de um elemento denominado "Str"
	{
	  stop("O elemento \"Str\" apareceu mais de uma vez no argumento \"ord\". Cada elemento (Str, Dex, Con, Int, Wis e Cha) só deve aparecer uma vez") #Caso haja repetição deste elemento o processamento da função parará e o usuário receberá uma mensagem explicando o problema
	}
	
	if(num.Dex>1) #Testando se há mais de um elemento denominado "Dex"
	{
	  stop("O elemento \"Dex\" apareceu mais de uma vez no argumento \"ord\". Cada elemento (Str, Dex, Con, Int, Wis e Cha) só deve aparecer uma vez") #Caso haja repetição deste elemento o processamento da função parará e o usuário receberá uma mensagem explicando o problema
	}
	
	if(num.Con>1) #Testando se há mais de um elemento denominado "Con"
	{
	  stop("O elemento \"Con\" apareceu mais de uma vez no argumento \"ord\". Cada elemento (Str, Dex, Con, Int, Wis e Cha) só deve aparecer uma vez") #Caso haja repetição deste elemento o processamento da função parará e o usuário receberá uma mensagem explicando o problema
	}
	
	if(num.Int>1) #Testando se há mais de um elemento denominado "Int"
	{
	  stop("O elemento \"Int\" apareceu mais de uma vez no argumento \"ord\". Cada elemento (Str, Dex, Con, Int, Wis e Cha) só deve aparecer uma vez") #Caso haja repetição deste elemento o processamento da função parará e o usuário receberá uma mensagem explicando o problema
	}
	
	if(num.Wis>1) #Testando se há mais de um elemento denominado "Wis"
	{
	  stop("O elemento \"Wis\" apareceu mais de uma vez no argumento \"ord\". Cada elemento (Str, Dex, Con, Int, Wis e Cha) só deve aparecer uma vez") #Caso haja repetição deste elemento o processamento da função parará e o usuário receberá uma mensagem explicando o problema
	}
	
	if(num.Cha>1) #Testando se há mais de um elemento denominado "Cha"
	{
	  stop("O elemento \"Cha\" apareceu mais de uma vez no argumento \"ord\". Cada elemento (Str, Dex, Con, Int, Wis e Cha) só deve aparecer uma vez") #Caso haja repetição deste elemento o processamento da função parará e o usuário receberá uma mensagem explicando o problema
	}
	
	
	###Checando qual dos elementos de "ord" está faltando###
	if(is.element("Str",ord)=="FALSE") #Checando se o elemento "Str" está ausente
	{
      stop("O argumento \"ord\" não contém o elemento \"Str\", todos os elementos (Str, Dex, Con, Int, Wis e Cha) precisam estar presentes em \"ord\"") #Caso este elemento não esteja presente no argumento a função é parada e retorna-se uma mensagem para o usuário da função
	}
	
	if(is.element("Dex",ord)=="FALSE") #Checando se o elemento "Dex" está ausente
	{
      stop("O argumento \"ord\" não contém o elemento \"Dex\", todos os elementos (Str, Dex, Con, Int, Wis e Cha) precisam estar presentes em \"ord\"") #Caso este elemento não esteja presente no argumento a função é parada e retorna-se uma mensagem para o usuário da função
	}	
	
	if(is.element("Con",ord)=="FALSE") #Checando se o elemento "Con" está ausente
	{
      stop("O argumento \"ord\" não contém o elemento \"Con\", todos os elementos (Str, Dex, Con, Int, Wis e Cha) precisam estar presentes em \"ord\"") #Caso este elemento não esteja presente no argumento a função é parada e retorna-se uma mensagem para o usuário da função
	}	
	
	if(is.element("Int",ord)=="FALSE") #Checando se o elemento "Int" está ausente
	{
      stop("O argumento \"ord\" não contém o elemento \"Int\", todos os elementos (Str, Dex, Con, Int, Wis e Cha) precisam estar presentes em \"ord\"") #Caso este elemento não esteja presente no argumento a função é parada e retorna-se uma mensagem para o usuário da função
	}	
	
	if(is.element("Wis",ord)=="FALSE") #Checando se o elemento "Wis" está ausente
	{
      stop("O argumento \"ord\" não contém o elemento \"Wis\", todos os elementos (Str, Dex, Con, Int, Wis e Cha) precisam estar presentes em \"ord\"") #Caso este elemento não esteja presente no argumento a função é parada e retorna-se uma mensagem para o usuário da função
	}	
	
	if(is.element("Cha",ord)=="FALSE") #Checando se o elemento "Cha" está ausente
	{
      stop("O argumento \"ord\" não contém o elemento \"Cha\", todos os elementos (Str, Dex, Con, Int, Wis e Cha) precisam estar presentes em \"ord\"") #Caso este elemento não esteja presente no argumento a função é parada e retorna-se uma mensagem para o usuário da função
	}	
  }  
  
  ####Para verificar o argumento "align"#### 

  if(missing(align)) #Testando se "align" não foi preenchido
  { 
    stop("O argumento \"align\" não foi preenchido, preencha-o para executar a função") #Se de fato ele não foi preenchido, a função parará e retornará um aviso 
  }
  
  if(class(align)!= "character") #Testando se "align" não é composto apenas por caracteres
  {
    stop("O argumento \"align\" precisa ser um vetor composto apenas por caracteres") #Caso de fato ele não seja composto apenas por caracteres a função parará e retornará um aviso 
  } 
  
  if(length(align)>1) #Testando se "align" tem apenas um elemento
  {
    stop("O argumento \"align\" pode ter apenas um elemento") #Caso de fato ele não tenha apenas um elemento a função parará e retornará um aviso 
  } 
  
  #Testando se o argumento "align" foi preenchido com um dos 9 elementos previstos para uso nesse argumento  
  if(!is.element("LG",align) && !is.element("LN",align) && !is.element("LE",align) && !is.element("CG",align) && !is.element("CN",align) && !is.element("CE",align) && !is.element("NG",align) && !is.element("N",align) && !is.element("NE",align)) #Testando se o elemento inserido pelo usuário é diferente de todos os elementos previstos para o argumento.
  {
    stop("O argumento \"align\" não foi preenchido com um elemento válido. Escolha um destes elementos:\"LG\", \"LN\", \"LE\", \"CG\", \"CN\", \"CE\", \"NG\", \"N\" ou \"NE\"") #Caso o argumento align não tenha sido preenchido corretamente a função é parada e retorna-se uma mensagem para o usuário da função
  }
  
  ####Para verificar o argumento "race"#### 

  if(missing(race)) #Testando se "race" não foi preenchido
  { 
    stop("O argumento \"race\" não foi preenchido, preencha-o para executar a função") #Se de fato ele não foi preenchido, a função parará e retornará um aviso 
  }
  
  if(class(race)!= "character") #Testando se "race" não é composto apenas por caracteres
  {
    stop("O argumento \"race\" precisa ser um vetor composto apenas por caracteres") #Caso de fato ele não seja composto apenas por caracteres a função parará e retornará um aviso 
  } 
  
  if(length(race)>1) #Testando se "race" tem apenas um elemento
  {
    stop("O argumento \"race\" pode ter apenas um elemento") #Caso de fato ele não tenha apenas um elemento a função parará e retornará um aviso 
  } 
  
  #Testando se o argumento "race" foi preenchido com um dos 9 elementos previstos para uso nesse argumento  
  if(!is.element("dwarf",race) && !is.element("elf",race) && !is.element("halfling",race) && !is.element("human",race) && !is.element("dragonborn",race) && !is.element("gnome",race) && !is.element("half-elf",race) && !is.element("half-orc",race) && !is.element("tiefling",race)) #Testando se o elemento inserido pelo usuário é diferente de todos os elementos previstos para o argumento.
  {
    stop("O argumento \"race\" não foi preenchido com um elemento válido. Escolha um destes elementos: \"dwarf\", \"elf\", \"halfling\", \"human\", \"dragonborn\", \"gnome\", \"half-elf\", \"half-orc\" ou \"tiefling\"") #Caso o argumento race não tenha sido preenchido corretamente a função é parada e retorna-se uma mensagem para o usuário da função
  }
    
  ####Para verificar o argumento "clas"#### 

  if(missing(clas)) #Testando se "clas" não foi preenchido
  { 
    stop("O argumento \"clas\" não foi preenchido, preencha-o para executar a função") #Se de fato ele não foi preenchido, a função parará e retornará um aviso 
  }
  
  if(class(clas)!= "character") #Testando se "clas" não é composto apenas por caracteres
  {
    stop("O argumento \"clas\" precisa ser um vetor composto apenas por caracteres") #Caso de fato ele não seja composto apenas por caracteres a função parará e retornará um aviso 
  } 
  
  if(length(clas)>1) #Testando se "clas" tem apenas um elemento
  {
    stop("O argumento \"clas\" pode ter apenas um elemento") #Caso de fato ele não tenha apenas um elemento a função parará e retornará um aviso 
  } 
  
  #Testando se o argumento "clas" foi preenchido com um dos 12 elementos previstos para uso nesse argumento  
  if(!is.element("barbarian",clas) && !is.element("bard",clas) && !is.element("cleric",clas) && !is.element("druid",clas) && !is.element("fighter",clas) && !is.element("monk",clas) && !is.element("paladin",clas) && !is.element("ranger",clas) && !is.element("rogue",clas) && !is.element("sorcerer",clas) && !is.element("warlock",clas) && !is.element("wizard",clas)) #Testando se o elemento inserido pelo usuário é diferente de todos os elementos previstos para o argumento.
  {
    stop("O argumento \"clas\" não foi preenchido com um elemento válido. Escolha um destes elementos: \"barbarian\", \"bard\", \"cleric\", \"druid\", \"fighter\", \"monk\", \"paladin\", \"ranger\", \"rogue\", \"sorcerer\", \"warlock\" ou \"wizard\"") #Caso o argumento clas não tenha sido preenchido corretamente a função é parada e retorna-se uma mensagem para o usuário da função
  }
    
  ####Para verificar o argumento "back"####
  
  if(missing(back)) #Testando se "back" não foi preenchido
  { 
    stop("O argumento \"back\" não foi preenchido, preencha-o para executar a função") #Se de fato ele não foi preenchido, a função parará e retornará um aviso 
  }

  if(class(back)!= "character") #Testando se "back" não é composto apenas por caracteres
  {
    stop("O argumento \"back\" precisa ser um vetor composto apenas por caracteres") #Caso de fato ele não seja composto apenas por caracteres a função parará e retornará um aviso 
  } 
  
  if(length(back)>1) #Testando se "back" tem apenas um elemento
  {
    stop("O argumento \"back\" pode ter apenas um elemento") #Caso de fato ele não tenha apenas um elemento a função parará e retornará um aviso 
  } 
  
  #Testando se o argumento "back" foi preenchido com um dos 13 elementos previstos para uso nesse argumento  
  if(!is.element("acolyte",back) && !is.element("guild artisan",back) && !is.element("entertainer",back) && !is.element("charlatan",back) && !is.element("criminal",back) && !is.element("hermit",back) && !is.element("outlander",back) && !is.element("folk hero",back) && !is.element("sailor",back) && !is.element("noble",back) && !is.element("urchin",back) && !is.element("sage",back) && !is.element("soldier",back)) #Testando se o elemento inserido pelo usuário é diferente de todos os elementos previstos para o argumento.
  {
    stop("O argumento \"back\" não foi preenchido com um elemento válido. Escolha um destes elementos: \"acolyte\", \"guild artisan\", \"entertainer\", \"charlatan\", \"criminal\", \"hermit\", \"outlander\", \"folk hero\", \"sailor\", \"noble\", \"urchin\", \"sage\" ou \"soldier\"") #Caso o argumento back não tenha sido preenchido corretamente a função é parada e retorna-se uma mensagem para o usuário da função
  }
  
  ###########################################################
  #abil = Escolha do modo como os atributos serão escolhidos#
  ###########################################################

  ###Aleatório - random###
  if(abil=="random") #Se o elemento dentro do atributo abil for "random"
  {
  
    #Sorteio de valores de acordo com o que é sugerido no livro do jogador (rolar 4 dados de 6 lados e somar os 3 maiores valores):
    atr.sort <- rep(NA, times=6) #Objeto que vai receber os atributos sorteados

    for(i in 1:6) #Para preencher os 6 atributos
    {
      #sortear 4 valores de 1 a 6 e somar apenas os três maiores valores
      d6 <- rep(NA, times=4) #Criando o objeto que conterá os 4 valores sorteados
      for(j in 1:4)#Para fazer o sorteio de valores 4 vezes
      {
        d6[j] <- sample(seq(from= 1, to= 6, length.out= 6), size= 1) #Sorteando um valor de 1 a 6 e colocando-o dentro do objeto, adicionando um novo número sorteado a cada loop
      }
      valor.atr <- sum(d6) - min(d6) #Somando todos os valores e subtraindo o menor para obter a soma dos três maiores valores e assim o valor final para um atributo
      atr.sort[i] <- valor.atr #colocar cada valor de atributo sorteado e somado dentro de um objeto nas posições de 1 a 6
    }

    #Ordenando os valores sorteados para ficar do maior para o menor
    atr.ord <- rev(sort(atr.sort)) #Usando do sort para organizar (o que é feito em ordem crescente) e do rev para deixar em ordem decrescente (ao inverter a ordem do valores), adequando a ordem dos valores para os atributos que serão recebidos pelo argumento "ord", que estarão dispostos do maior para o menor

  }

  ###Fixo - fixed###
  if(abil=="fixed") #Se o elemento dentro do atributo abil for "fixed"
  {
    #Valores fixos:
    atr.ord <- c(15, 14, 13, 12, 10, 8) #Criando um vetor com os valores de atributos fixos, predefinidos no livro do jogador, ordenados do maior para o menor
  
  }

  ######################################
  #race = Escolha da raça do personagem#
  ######################################
  
  if(race=="dwarf") #Se o elemento dentro do atributo race for "dwarf"
  {
    ###Acréscimos nos atributos (ability scores)
    #Vou utilizar a relação de posicionamento entre os elementos dos vetores dos argumentos ord e abil para fazer os acréscimos determinados no livro do jogador
    num.posic <- match("Con", ord) #Vendo qual a posição dentro do vetor que compõe o argumento ord que corresponde ao atributo "Con"
  
    acres <- atr.ord[num.posic] + 2 #Pega-se dentro do vetor atr.ord o elemento que será correspondente ao atributo "Con" pela posição (num.posic) e soma-se o modificador designado pelo livro do jogador
  
    atr.race <- replace(atr.ord, num.posic, acres) #Substituindo o valor original do atributo pelo novo, em que já foi feito o acréscimo previsto. Para entender como funcionava a função replace eu olhei este exemplo: https://stackoverflow.com/questions/11811027/replace-function-examples 
  
    ###Dados que futuramente vão compor o data frame general.data
    size <- "Medium" #Vetor com dados referentes ao tamanho
	speed <-"25 feet" #Vetor com dados referentes à velocidade 
  
    ###Dados que futuramente vão compor o data frame info
    info.race <- "Darkvision, Dwarven Resilience, Stonecunning" #Vetor com as características típicas da raça
    info.race.ling <- "Common and Dwarvish" #Vetor com as línguas faladas de acordo com a raça
  
    ###Dados que futuramente vão compor o data frame proficiencies
    prof.weap.dwarf <- "battleaxe, handaxe, throwing hammer, warhammer" #Vetor com as armas com as quais é proficiente
    prof.tools.dw.choice <- "Choose one, smith's tool or brewer's tool or masons's tool" #Vetor com 3 possibilidades de proeficiência com ferramentas (apenas uma pode ser escolhida)
  }

  if(race=="elf") #Se o elemento dentro do atributo race for "elf"
  {
    ###Acréscimos nos atributos (ability scores)
    #Vou utilizar a relação de posicionamento entre os elementos dos vetores dos argumentos ord e abil para fazer os acréscimos determinados no livro do jogador
    num.posic <- match("Dex", ord) #Vendo qual a posição dentro do vetor que compõe o argumento ord que corresponde ao atributo "Dex"
  
    acres <- atr.ord[num.posic] + 2 #Pega-se dentro do vetor atr.ord o elemento que será correspondente ao atributo "Dex" pela posição (num.posic) e soma-se o modificador designado pelo livro do jogador
  
    atr.race <- replace(atr.ord, num.posic, acres) #Substituindo o valor original do atributo pelo novo, em que já foi feito o acréscimo previsto 
  
    ###Dados que futuramente vão compor o data frame general.data
    size <- "Medium" #Vetor com dados referentes ao tamanho
	speed <-"30 feet" #Vetor com dados referentes à velocidade 
	  
    ###Dados que futuramente vão compor o data frame info
    info.race <- "Darkvision, Fey Ancestry, Trance" #Vetor com as características típicas da raça
    info.race.ling <- "Common and Elvish" #Vetor com as línguas faladas de acordo com a raça
  
    ###Dados que futuramente vão compor o data frame skills
    prof.sk.race <- 12 #Vetor com o número correspondente à perícia em que é proficiente
  }
    
  if(race=="halfling") #Se o elemento dentro do atributo race for "halfling"
  {
    ###Acréscimos nos atributos (ability scores)
    #Vou utilizar a relação de posicionamento entre os elementos dos vetores dos argumentos ord e abil para fazer os acréscimos determinados no livro do jogador
    num.posic <- match("Dex", ord) #Vendo qual a posição dentro do vetor que compõe o argumento ord que corresponde ao atributo "Dex"
  
    acres <- atr.ord[num.posic] + 2 #Pega-se dentro do vetor atr.ord o elemento que será correspondente ao atributo "Dex" pela posição (num.posic) e soma-se o modificador designado pelo livro do jogador
  
    atr.race <- replace(atr.ord, num.posic, acres) #Substituindo o valor original do atributo pelo novo, em que já foi feito o acréscimo previsto 
  
    ###Dados que futuramente vão compor o data frame general.data
    size <- "Small" #Vetor com dados referentes ao tamanho
	speed <-"25 feet" #Vetor com dados referentes à velocidade 
	  
    ###Dados que futuramente vão compor o data frame info
    info.race <- "Lucky, Brave, Halfling Nimbleness" #Vetor com as características típicas da raça
    info.race.ling <- "Common and Halfling" #Vetor com as línguas faladas de acordo com a raça
  }
   
  if(race=="human") #Se o elemento dentro do atributo race for "human"
  {
    ###Acréscimos nos atributos (ability scores)
    #Para humanos há um acréscimo para todos os atributos igualmente
    atr.race <- atr.ord + 1 #Somando o modificador designado pelo livro do jogador a todos os atributos 
  
    ###Dados que futuramente vão compor o data frame general.data
    size <- "Medium" #Vetor com dados referentes ao tamanho
	speed <-"30 feet" #Vetor com dados referentes à velocidade 
	
    ###Dados que futuramente vão compor o data frame info
    info.race <- "None" #Vetor com as características típicas da raça	
  
    ###Dados que futuramente vão compor o data frame info
    info.race.ling <- "Common" #Vetor com as línguas faladas de acordo com a raça  
    info.race.ling.choice <- "Choose another language" #Vetor indicando a possibilidade de escolher outras linguas
  }
    
  if(race=="dragonborn") #Se o elemento dentro do atributo race for "dragonborn"
  {
    ###Acréscimos nos atributos (ability scores)
    #Vou utilizar a relação de posicionamento entre os elementos dos vetores dos argumentos ord e abil para fazer os acréscimos determinados no livro do jogador. Como são dois atributos a serem modificados esse processo ocorrerá em duas etapas
    num.posic0 <- match("Str", ord) #Vendo qual a posição dentro do vetor que compõe o argumento ord que corresponde ao primeiro atributo, "Str"
  
    acres0 <- atr.ord[num.posic0] + 2 #Pega-se dentro do vetor atr.ord o elemento que será correspondente ao atributo "Str" pela posição (num.posic) e soma-se o modificador designado pelo livro do jogador
  
    atr.race0 <- replace(atr.ord, num.posic0, acres0) #Substituindo o valor original do atributo pelo novo, em que já foi feito o acréscimo previsto. Apenas para o primeiro atributo a ser modificado, "Str" 
	
	num.posic <- match("Cha", ord) #Vendo qual a posição dentro do vetor que compõe o argumento ord que corresponde ao segundo atributo, "Cha"
  
    acres <- atr.ord[num.posic] + 1 #Pega-se dentro do vetor atr.ord o elemento que será correspondente ao atributo "Cha" pela posição (num.posic) e soma-se o modificador designado pelo livro do jogador
  
    atr.race <- replace(atr.race0, num.posic, acres) #Substituindo o valor original do atributo pelo novo, em que já foi feito o acréscimo previsto. Agora para o segundo atributo a ser modificado, "Cha". Para manter a alteração anterior (no atributo "Str") a modificação foi feita em atr.race0  
  
    ###Dados que futuramente vão compor o data frame general.data
    size <- "Medium" #Vetor com dados referentes ao tamanho
	speed <-"30 feet" #Vetor com dados referentes à velocidade 
  
    ###Dados que futuramente vão compor o data frame info
    info.race <- "Draconic Ancestry, Breath Weapon, Damage Resistance" #Vetor com as características típicas da raça
    info.race.ling <- "Common and Draconic" #Vetor com as línguas faladas de acordo com a raça
  }
    
  if(race=="gnome") #Se o elemento dentro do atributo race for "gnome"
  {
    ###Acréscimos nos atributos (ability scores)
    #Vou utilizar a relação de posicionamento entre os elementos dos vetores dos argumentos ord e abil para fazer os acréscimos determinados no livro do jogador
    num.posic <- match("Int", ord) #Vendo qual a posição dentro do vetor que compõe o argumento ord que corresponde ao atributo "Int"
  
    acres <- atr.ord[num.posic] + 2 #Pega-se dentro do vetor atr.ord o elemento que será correspondente ao atributo "Int" pela posição (num.posic) e soma-se o modificador designado pelo livro do jogador
  
    atr.race <- replace(atr.ord, num.posic, acres) #Substituindo o valor original do atributo pelo novo, em que já foi feito o acréscimo previsto 
  
    ###Dados que futuramente vão compor o data frame general.data
    size <- "Small" #Vetor com dados referentes ao tamanho
	speed <-"25 feet" #Vetor com dados referentes à velocidade 
  
    ###Dados que futuramente vão compor o data frame info
    info.race <- "Darkvision, Gnome Cunning" #Vetor com as características típicas da raça
    info.race.ling <- "Common and Gnomish" #Vetor com as línguas faladas de acordo com a raça
  }
    
  if(race=="half-elf") #Se o elemento dentro do atributo race for "half-elf"
  {
    ###Acréscimos nos atributos (ability scores)
    #Vou utilizar a relação de posicionamento entre os elementos dos vetores dos argumentos ord e abil para fazer os acréscimos determinados no livro do jogador
    num.posic0 <- match("Cha", ord) #Vendo qual a posição dentro do vetor que compõe o argumento ord que corresponde ao atributo "Cha"
  
    acres0 <- atr.ord[num.posic0] + 2 #Pega-se dentro do vetor atr.ord o elemento que será correspondente ao atributo "Cha" pela posição (num.posic) e soma-se o modificador designado pelo livro do jogador
  
    atr.race0 <- replace(atr.ord, num.posic0, acres0) #Substituindo o valor original do atributo pelo novo, em que já foi feito o acréscimo previsto. Apenas para o primeiro atributo a ser modificado, "Cha"
  
    #Haverá também acréscimo de valores em outros dois atributos, entretanto, o usuário que fará a escolha desses atributos no argumento half.elf. Por esse motivo, farei a checagem desse argumento apenas aqui, dentro da raça "half-elf", uma vez que ele só será utilizado para essa raça  
	
	#Verificando o argumento "half.elf"

    if(missing(half.elf)) #Testando se "half.elf" não foi preenchido
    { 
      stop("O argumento \"half.elf\" não foi preenchido, preencha-o para fazer seu meio-elfo")#Se de fato ele não foi preenchido, não será dada nenhuma resposta
    }
  
    if(class(half.elf)!= "character") #Testando se "half.elf" não é composto apenas por caracteres
    {
      stop("O argumento \"half.elf\" precisa ser um vetor composto apenas por caracteres") #Caso de fato ele não seja composto apenas por caracteres a função parará e retornará um aviso 
    } 

    if(length(half.elf)!=2) #Testando se "half.elf" tem 2 elementos
    {
      stop("O argumento \"half.elf\" precisa ter 2 elementos dentre estes: \"Str\", \"Dex\", \"Con\", \"Int\" e \"Wis\"") #Caso de fato ele não tenha 2 elementos a função parará e retornará um aviso 
    }   
  
    #Testando se os 2 elementos previstos para uso nesse argumento estão presentes
    #Criando os objetos para serem testados
    he1 <- c("Str", "Dex") #Para verificar se "Str" e "Dex" foram escolhidos
    he2 <- c("Str", "Con") #Para verificar se "Str" e "Con" foram escolhidos
    he3 <- c("Str", "Int") #Para verificar se "Str" e "Int" foram escolhidos 
    he4 <- c("Str", "Wis") #Para verificar se "Str" e "Wis" foram escolhidos
    he5 <- c("Dex", "Con") #Para verificar se "Dex" e "Con" foram escolhidos
    he6 <- c("Dex", "Int") #Para verificar se "Dex" e "Int" foram escolhidos
    he7 <- c("Dex", "Wis") #Para verificar se "Dex" e "Wis" foram escolhidos
    he8 <- c("Con", "Int") #Para verificar se "Con" e "Int" foram escolhidos
    he9 <- c("Con", "Wis") #Para verificar se "Con" e "Wis" foram escolhidos
    he10 <- c("Int", "Wis") #Para verificar se "Int" e "Wis" foram escolhidos
  
    if(!identical(half.elf,sort(he1)) && !identical(half.elf,sort(he2)) && !identical(half.elf,sort(he3)) && !identical(half.elf,sort(he4)) && !identical(half.elf,sort(he5)) && !identical(half.elf,sort(he6)) && !identical(half.elf,sort(he7)) && !identical(half.elf,sort(he8)) && !identical(half.elf,sort(he9)) && !identical(half.elf,sort(he10))) #Checando se nenhuma das combinações possíveis está presente. Solução retirada de: https://stackoverflow.com/questions/27912800/check-whether-two-vectors-contain-the-same-unordered-elements-in-r 
    {
	  #Caso nenhuma das combinações possíeis estiver presente, checar se o problema é a presença de algum elemento repetido:
	  #Criando os elementos que correspondem às repetições
	  rep.Str <- c("Str", "Str") #Repetição de "Str"
	  rep.Dex <- c("Dex", "Dex") #Repetição de "Dex"
	  rep.Con <- c("Con", "Con") #Repetição de "Con"
	  rep.Int <- c("Int", "Int") #Repetição de "Int"
	  rep.Wis <- c("Wis", "Wis") #Repetição de "Wis"
	
	  #Fazendo os testes lógicos para determinar se houve repetição no preenchimento do argumento	
	  if(identical(half.elf, rep.Str)) #Testando se há repetição de "Str"
	  {
	    stop("O elemento \"Str\" foi repetido no argumento \"half.elf\". Devem ser escolhidos dois elementos diferentes dentre Str, Dex, Con, Int, Wis e Cha") #Caso haja repetição deste elemento o processamento da função parará e o usuário receberá uma mensagem explicando o problema
	  }
	
	  if(identical(half.elf, rep.Dex)) #Testando se há repetição de "Dex"
	  {
	    stop("O elemento \"Dex\" foi repetido no argumento \"half.elf\". Devem ser escolhidos dois elementos diferentes dentre Str, Dex, Con, Int, Wis e Cha") #Caso haja repetição deste elemento o processamento da função parará e o usuário receberá uma mensagem explicando o problema
	  }
	
	  if(identical(half.elf, rep.Con)) #Testando se há repetição de "Con"
	  {
	    stop("O elemento \"Con\" foi repetido no argumento \"half.elf\". Devem ser escolhidos dois elementos diferentes dentre Str, Dex, Con, Int, Wis e Cha") #Caso haja repetição deste elemento o processamento da função parará e o usuário receberá uma mensagem explicando o problema
	  }
	
	  if(identical(half.elf, rep.Int)) #Testando se há repetição de "Int"
	  {
	    stop("O elemento \"Int\" foi repetido no argumento \"half.elf\". Devem ser escolhidos dois elementos diferentes dentre Str, Dex, Con, Int, Wis e Cha") #Caso haja repetição deste elemento o processamento da função parará e o usuário receberá uma mensagem explicando o problema
	  }
	
	  if(identical(half.elf, rep.Wis)) #Testando se há repetição de "Wis"
	  {
	    stop("O elemento \"Wis\" foi repetido no argumento \"half.elf\". Devem ser escolhidos dois elementos diferentes dentre Str, Dex, Con, Int, Wis e Cha") #Caso haja repetição deste elemento o processamento da função parará e o usuário receberá uma mensagem explicando o problema
	  }	
    }
  
    #Passando pelos testes, os elementos do argumento half.elf podem ser processados para gerar os outros acréscimos nos atributos
	
	#Separando os dois elementos provenientes do argumento half.elf
	atr.arg1 <- half.elf[1] #Designa um dos atributos a um objeto
	atr.arg2 <- half.elf[2] #Designa o outro atributo a um objeto
	
	#Adicionando o valor do primeiro atributo
	#Novamente vou utilizar a relação de posicionamento entre os elementos dos vetores dos argumentos ord e abil para fazer os acréscimos escolhidos pelo usuário
    num.posic1 <- match(atr.arg1, ord) #Vendo qual a posição dentro do vetor que compõe o argumento ord que corresponde ao atributo escolhido
  
    acres1 <- atr.ord[num.posic1] + 1 #Pega-se dentro do vetor atr.ord o elemento que será correspondente ao atributo escolhido de acordo om sua posição (num.posic) e soma-se o modificador designado pelo livro do jogador
  
    atr.race1 <- replace(atr.race0, num.posic1, acres1) #Substituindo o valor original do atributo pelo novo, em que já foi feito o acréscimo previsto. Isso foi feito no objeto já modificado atr.race0 para incluir o acréscimo de atributo que já fora feito
  
    #Adicionando o valor do segundo atributo
    #Novamente vou utilizar a relação de posicionamento entre os elementos dos vetores dos argumentos ord e abil para fazer os acréscimos escolhidos pelo usuário
    num.posic <- match(atr.arg2, ord) #Vendo qual a posição dentro do vetor que compõe o argumento ord que corresponde ao atributo escolhido
  
    acres <- atr.ord[num.posic] + 1 #Pega-se dentro do vetor atr.ord o elemento que será correspondente ao atributo escolhido de acordo om sua posição (num.posic) e soma-se o modificador designado pelo livro do jogador
  
    atr.race <- replace(atr.race1, num.posic, acres) #Substituindo o valor original do atributo pelo novo, em que já foi feito o acréscimo previsto. Isso foi feito no objeto já modificado atr.race1 para incluir os acréscimos de atributo que já foram feitos
    
    ###Dados que futuramente vão compor o data frame general.data
    size <- "Medium" #Vetor com dados referentes ao tamanho
	speed <-"30 feet" #Vetor com dados referentes à velocidade 
  
    ###Dados que futuramente vão compor o data frame info
    info.race <- "Darkvision, Fey Ancestry" #Vetor com as características típicas da raça
    info.race.ling <- "Common and Elvish" #Vetor com as línguas faladas de acordo com a raça
	info.race.ling.choice <- "Choose another language" #Vetor indicando a possibilidade de escolher outras linguas
  
    ###Dados que futuramente vão compor o data frame proficiencies
    prof.sk.choice.race <- "Choose 2 skills to gain proficiency" #Vetor indicando as possíveis escolhas relativas às proficiências
  }
  
  if(race=="half-orc") #Se o elemento dentro do atributo race for "half-orc"
  {
    ###Acréscimos nos atributos (ability scores)
	#Alterando o primeiro atributo
    #Vou utilizar a relação de posicionamento entre os elementos dos vetores dos argumentos ord e abil para fazer os acréscimos determinados no livro do jogador
    num.posic0 <- match("Str", ord) #Vendo qual a posição dentro do vetor que compõe o argumento ord que corresponde ao atributo "Str"
  
    acres0 <- atr.ord[num.posic0] + 2 #Pega-se dentro do vetor atr.ord o elemento que será correspondente ao atributo "Str" pela posição (num.posic) e soma-se o modificador designado pelo livro do jogador
  
    atr.race0 <- replace(atr.ord, num.posic0, acres0) #Substituindo o valor original do atributo pelo novo, em que já foi feito o acréscimo previsto
  
    #Alterando agora o segundo atributo
    num.posic <- match("Con", ord) #Vendo qual a posição dentro do vetor que compõe o argumento ord que corresponde ao atributo "Con"
  
    acres <- atr.ord[num.posic] + 1 #Pega-se dentro do vetor atr.ord o elemento que será correspondente ao atributo "" pela posição (num.posic) e soma-se o modificador designado pelo livro do jogador
  
    atr.race <- replace(atr.race0, num.posic, acres) #Substituindo o valor original do atributo pelo novo, em que já foi feito o acréscimo previsto 
  
    ###Dados que futuramente vão compor o data frame general.data
    size <- "Medium" #Vetor com dados referentes ao tamanho
	speed <-"30 feet" #Vetor com dados referentes à velocidade 
	  
    ###Dados que futuramente vão compor o data frame info
    info.race <- "Darkvision, Relentless Endurance, Savage Attacks" #Vetor com as características típicas da raça
    info.race.ling <- "Common and Orc" #Vetor com as línguas faladas de acordo com a raça
  
    ###Dados que futuramente vão compor o data frame proficiencies
    prof.sk.race <- 8 #Vetor com o número correspondente à perícia em que é proficiente
  }
    
  if(race=="tiefling") #Se o elemento dentro do atributo race for "tiefling"
  {
    ###Acréscimos nos atributos (ability scores)
	#Alterando o primeiro atributo
    #Vou utilizar a relação de posicionamento entre os elementos dos vetores dos argumentos ord e abil para fazer os acréscimos determinados no livro do jogador
    num.posic0 <- match("Int", ord) #Vendo qual a posição dentro do vetor que compõe o argumento ord que corresponde ao atributo "Int"
  
    acres0 <- atr.ord[num.posic0] + 1 #Pega-se dentro do vetor atr.ord o elemento que será correspondente ao atributo "Int" pela posição (num.posic) e soma-se o modificador designado pelo livro do jogador
  
    atr.race0 <- replace(atr.ord, num.posic0, acres0) #Substituindo o valor original do atributo pelo novo, em que já foi feito o acréscimo previsto 
   
    #Alterando o segundo atributo
    num.posic <- match("Cha", ord) #Vendo qual a posição dentro do vetor que compõe o argumento ord que corresponde ao atributo "Cha"
  
    acres <- atr.ord[num.posic] + 2 #Pega-se dentro do vetor atr.ord o elemento que será correspondente ao atributo "Cha" pela posição (num.posic) e soma-se o modificador designado pelo livro do jogador
  
    atr.race <- replace(atr.race0, num.posic, acres) #Substituindo o valor original do atributo pelo novo, em que já foi feito o acréscimo previsto  
  
    ###Dados que futuramente vão compor o data frame general.data
    size <- "Medium" #Vetor com dados referentes ao tamanho
	speed <-"30 feet" #Vetor com dados referentes à velocidade 
	  
    ###Dados que futuramente vão compor o data frame info
    info.race <- "Darkvision, Hellish Resistance, Infernal Legacy" #Vetor com as características típicas da raça
    info.race.ling <- "Common and Infernal" #Vetor com as línguas faladas de acordo com a raça
  
    ###Dados que futuramente vão compor o data frame spells
    spell.cantrip.tf <- "thaumaturgy" #Vetor contendo a cantrip concedida pela raça
  }
  
  ###Com a raça já definida não há mais alterações a fazer nos atributos. Por esse motivo, os modificadores dos atributos já podem ser adicionados, seguindo o determinado pelo livro do jogador###
  mod <- rep(NA, times=6) #Criando o objeto que vai conter os valores dos modificadores
  
  for(k in 1:6) #Para adicionar o valor de modificador correspondente a cada atributo
    {
	  #Vou começar do 3 e ir até o 18 pois tanto os atributos fixos como os sorteados não vão passar desses valores
	  if(atr.race[k] == 3) #Se o atributo tiver valor igual a 3 nessa posição
	  {
	    mod[k] <- "-4" #Adicionar o modificador correspondente nessa posição
	  }
      if(atr.race[k] == 4||atr.race[k] == 5) #Se o atributo tiver valor igual a 4 ou 5 nessa posição. Solução retirada de: https://stackoverflow.com/questions/28346065/if-or-multiple-conditions 
	  {
	    mod[k] <- "-3" #Adicionar o modificador correspondente nessa posição
	  }
	  if(atr.race[k] == 6||atr.race[k] == 7) #Se o atributo tiver valor igual a 6 ou 7 nessa posição
	  {
	    mod[k] <- "-2" #Adicionar o modificador correspondente nessa posição
	  }
	  if(atr.race[k] == 8||atr.race[k] == 9) #Se o atributo tiver valor igual a 8 ou 9 nessa posição
	  {
	    mod[k] <- "-1" #Adicionar o modificador correspondente nessa posição
	  }
	  if(atr.race[k] == 10||atr.race[k] == 11) #Se o atributo tiver valor igual a 10 ou 11 nessa posição
	  {
	    mod[k] <- "+0" #Adicionar o modificador correspondente nessa posição
	  }
	  if(atr.race[k] == 12||atr.race[k] == 13) #Se o atributo tiver valor igual a 12 ou 13 nessa posição
	  {
	    mod[k] <- "+1" #Adicionar o modificador correspondente nessa posição
	  }
	  if(atr.race[k] == 14||atr.race[k] == 15) #Se o atributo tiver valor igual a 14 ou 15 nessa posição
	  {
	    mod[k] <- "+2" #Adicionar o modificador correspondente nessa posição
	  }
	  if(atr.race[k] == 16||atr.race[k] == 17) #Se o atributo tiver valor igual a 16 ou 17 nessa posição
	  {
	    mod[k] <- "+3" #Adicionar o modificador correspondente nessa posição
	  }
	  if(atr.race[k] == 18) #Se o atributo tiver valor igual a 18 nessa posição
	  {
	    mod[k] <- "+4" #Adicionar o modificador correspondente nessa posição
	  }
	}
  
  ########################################
  #clas = Escolha da classe do personagem#
  ########################################
  
  #O bônus de proficiência para todas as classes é 2, por isso farei um objeto que será utilizado independenetemente da escolha de classe
  prof.bonus <- "2" #Criando um objeto que contém o valor do bônus de proficiência
  
  #Para as demais características determinadas pela classe, serão preenchidos os campos necessários de acordo com o livro do jogador
  if(clas=="barbarian") #Se o elemento dentro do argumento clas for "barbarian"
  {
    ###Dados que futuramente vão compor o data frame traits
	features <- "Rage, Unarmored Defense" #Vetor com as features
    rages <- "2" #Vetor com o número de rages que podem ocorrer
    rage.dmg <- "+2" #Vetor com o bônus de dano conferido pelo rage
	
	###Dados que futuramente vão compor o data frame general.data	
	hit.dice <- "1d12" #Vetor com o dado que determina seus pontos de vida
	
	#Para calcular os pontos de vida é necessário obter o valor do modificador de constituição
	posic.mod <- match("Con", ord) #Obtendo o número da posição do atributo constituição (Con) para poder encontrar o modificador correspondente
	hit.points <- 12 + as.numeric(mod[posic.mod]) #Fazendo a soma do valor base (12) mais o valor do modificador de atributo para constituição
	
	###Dados que futuramente vão compor o data frame proficiencies	
	armor.prof <- "light armor, medium armor, shields" #Vetor com as armaduras com as quais é proficiente
	weap.prof <- "simple weapons, martial weapons" #Vetor com as armas com as quais é proficiente
	tool.prof <- "none" #Vetor com as ferramentas com as quais é proficiente
	
	###Dados que futuramente vão compor o data frame saving.throws	
	sav.thr <- c(1, 3) #Determinando os testes de resistência em que é proficiente a partir dos números que as representam
	
	###Dados que futuramente vão compor o data frame prof.skills	
    prof.sk.choice <- "Choose two from Animal Handling, Athletics, Intimidation, Nature, Perception, Survival" #Vetor com as possibilidades de perícias para escolher
  
    ###Dados que futuramente vão compor o data frame equipments
	equip1.choice <- "greataxe or any martial melee weapon" #Vetor com equipamentos para escolher
	equip2.choice <- "two handaxes or any simple weapon" #Outro vetor com equipamentos para escolher
	equip.all <- "explore's pack, 4 javelins" #Vetor com equipamentos que são dados ao personagem
  }
    
  if(clas=="bard") #Se o elemento dentro do argumento clas for "bard"
  {
    ###Dados que futuramente vão compor o data frame traits
	features <- "Spellcasting, Bardic Inspiration (d6)" #Vetor com as features
    	
	###Dados que futuramente vão compor o data frame general.data	
	hit.dice <- "1d8" #Vetor com o dado que determina seus pontos de vida
	
	#Para calcular os pontos de vida é necessário obter o valor do modificador de constituição
	posic.mod <- match("Con", ord) #Obtendo o número da posição do atributo constituição (Con) para poder encontrar o modificador correspondente
	hit.points <- 8 + as.numeric(mod[posic.mod]) #Fazendo a soma do valor base (8) mais o valor do modificador de atributo para constituição
	
	###Dados que futuramente vão compor o data frame proficiencies	
	armor.prof <- "light armor" #Vetor com as armaduras com as quais é proficiente
	weap.prof <- "simple weapons, hand crossbows, longswords, rapiers, shortswords" #Vetor com as armas com as quais é proficiente
	tool.prof <- "Three musical instruments of your choice" #Vetor com as ferramentas com as quais é proficiente
	
	###Dados que futuramente vão compor o data frame saving.throws	
	sav.thr <- c(2, 6) #Determinando os testes de resistência em que é proficiente a partir dos números que as representam
	
	###Dados que futuramente vão compor o data frame prof.skills	
    prof.sk.choice <- "Choose any 3" #Vetor com as possibilidades de perícias para escolher
  
    ###Dados que futuramente vão compor o data frame equipments
	equip1.choice <- "rapier or longsword or any simple weapon" #Vetor com equipamentos para escolher
	equip2.choice <- "diplomat's pack or entertainer's pack" #Outro vetor com equipamentos para escolher
	equip.all <- "leather armor, dagger" #Vetor com equipamentos que são dados ao personagem
	
	###Dados que futuramente vão compor o data frame traits
	cantrip.know <- "2" #Vetor com o número de truques conhecidos
	spell.know <- "4" #Vetor com o número de magias conhecidas
	spell.slot <- "2 slots for level 1 spells" #Vetor com o número de usos de magia permitidos
	spell.cast.abil <- "Charisma" #Vetor com o atributo do qual depende o poder mágico
	
	#Para calcular a dificuldade para defender-se de uma magia utilizada pelo seu personagem é necessário utilizar o bônus de proficiência e o modificador do atributo que origina a magia do personagem
	posic.mod.mag <- match("Cha", ord) #Obtendo o número da posição do atributo Carisma (Cha) para poder encontrar o modificador correspondente
	spell.save.DC <- 8 + as.numeric(prof.bonus) + as.numeric(mod[posic.mod.mag]) #Fazendo a soma do valor base (8) mais o valor da proficiência, mais o modificador de atributo para carisma
	
	#Para calcular o bônus para acerto dos ataques mágicos é necessário utilizar o bônus de proficiência e o modificador do atributo que origina a magia do personagem
	spell.atk <- as.numeric(prof.bonus) + as.numeric(mod[posic.mod.mag]) #Somando o valor da proficiência mais o modificador de atributo para carisma
	
	rit.cast <- "Only to bard spells with the ritual tag" #Vetor definindo quais magias pode conjurar como ritual
	spell.cast.focus <- "A musical instrument"	#Vetor definindo se há um canalizador de magias
	
	###Dados que futuramente vão compor o data frame spells
	cantrips <- "Blade Ward, Dancing Lights, Friends, Light, Mage Hand, Mending, Message, Minor Illusion, Prestidigitation, True Strike, Vicious Mockery" #Lista com todas os truques que podem ser escolhidos por esta classe
	lvl1.spells	<- "Animal Friendship, Bane, Charm Person, Comprehend Languages, Cure Wounds, Detect Magic, Disguise Self, Dissonant Whispers, Faerie Fire, Feather Fall, Healing Word, Heroism, Identify, Illusory Script, Longstrider, Silent Image, Sleep, Speak with Animals, Tasha's Hideous Laughter, Thunderwave, Unseen Servant" #Lista com todas as magias de nível 1 que podem ser escolhidas por esta classe
  }

  if(clas=="cleric") #Se o elemento dentro do argumento clas for "cleric"
  {
	###Dados que futuramente vão compor o data frame traits
	features <- "Spellcasting, Divine Domain" #Vetor com as features
    	
	###Dados que futuramente vão compor o data frame general.data	
	hit.dice <- "1d8" #Vetor com o dado que determina seus pontos de vida
	
	#Para calcular os pontos de vida é necessário obter o valor do modificador de constituição
	posic.mod <- match("Con", ord) #Obtendo o número da posição do atributo constituição (Con) para poder encontrar o modificador correspondente
	hit.points <- 8 + as.numeric(mod[posic.mod]) #Fazendo a soma do valor base (8) mais o valor do modificador de atributo para constituição
	
	###Dados que futuramente vão compor o data frame proficiencies	
	armor.prof <- "light armor, medium armor, shields" #Vetor com as armaduras com as quais é proficiente
	weap.prof <- "all simple weapons" #Vetor com as armas com as quais é proficiente
	tool.prof <- "none" #Vetor com as ferramentas com as quais é proficiente
	
	###Dados que futuramente vão compor o data frame saving.throws	
	sav.thr <- c(5, 6) #Determinando os testes de resistência em que é proficiente a partir dos números que as representam
	
	###Dados que futuramente vão compor o data frame prof.skills	
    prof.sk.choice <- "Choose two from History, Insight, Medicine, Persuasion, Religion" #Vetor com as possibilidades de perícias para escolher
  
    ###Dados que futuramente vão compor o data frame equipments
	equip1.choice <- "mace or warhammer (if proficient)" #Vetor com equipamentos para escolher
	equip2.choice <- "scale mail or leather armor or chain mail (if proficient)" #Outro vetor com equipamentos para escolher
	equip3.choice <- "light crossbow and 20 bolts or any simple weapon" #Outro vetor com equipamentos para escolher
	equip4.choice <- "priest's pack or explorer's pack" #Outro vetor com equipamentos para escolher
	equip.all <- "shield, holy symbol" #Vetor com equipamentos que são dados ao personagem
	
	###Dados que futuramente vão compor o data frame traits
	cantrip.know <- "3" #Vetor com o número de truques conhecidos
	
	#Para calcular o número de magias conhecidas é necessário utilizar o modificador do atributo que origina a magia do personagem
	posic.mod.mag <- match("Wis", ord) #Obtendo o número da posição do atributo Sabedoria (Wis) para poder encontrar o modificador correspondente
	spell.know <- as.numeric(mod[posic.mod.mag]) + 1 #Fazendo a soma do modificador de atributo para sabedoria mais o nível de clérigo do personagem (no caso 1)
	
	spell.slot <- "2 slots for level 1 spells" #Vetor com o número de usos de magia permitidos
	spell.cast.abil <- "Wisdom" #Vetor com o atributo do qual depende o poder mágico
	
	#Para calcular a dificuldade para defender-se de uma magia utilizada pelo seu personagem é necessário utilizar o bônus de proficiência e o modificador do atributo que origina a magia do personagem
	spell.save.DC <- 8 + as.numeric(prof.bonus) + as.numeric(mod[posic.mod.mag]) #Fazendo a soma do valor base (8) mais o valor da proficiência, mais o modificador de atributo para sabedoria
	
	#Para calcular o bônus para acerto dos ataques mágicos é necessário utilizar o bônus de proficiência e o modificador do atributo que origina a magia do personagem
	spell.atk <- as.numeric(prof.bonus) + as.numeric(mod[posic.mod.mag]) #Somando o valor da proficiência mais o modificador de atributo para sabedoria
	
	rit.cast <- "Only to prepared cleric spells with the ritual tag" #Vetor definindo quais magias pode conjurar como ritual
	spell.cast.focus <- "A holy symbol"	#Vetor definindo se há um canalizador de magias
	
	###Dados que futuramente vão compor o data frame spells
	cantrips <- "Guidance, Light, Mending, Resistance, Sacred Flame, Spare the Dying, Thaumaturgy" #Lista com todas os truques que podem ser escolhidos por esta classe
	lvl1.spells	<- "Bane, Bless, Command, Create or Destroy Water, Cure Wounds, Detect Evil and Good, Detect Magic, Detect Poison and Disease, Guiding Bolt, Healing Word, Inflict Wounds, Protection from Evil and Good, Purify Food and Drink, Sanctuary, Shield of Faith" #Lista com todas as magias de nível 1 que podem ser escolhidas por esta classe
  }  
  
  if(clas=="druid") #Se o elemento dentro do argumento clas for "druid"
  {
    ###Dados que futuramente vão compor o data frame traits
	features <- "Druidic, Spellcasting" #Vetor com as features
    	
	###Dados que futuramente vão compor o data frame general.data	
	hit.dice <- "1d8" #Vetor com o dado que determina seus pontos de vida
	
	#Para calcular os pontos de vida é necessário obter o valor do modificador de constituição
	posic.mod <- match("Con", ord) #Obtendo o número da posição do atributo constituição (Con) para poder encontrar o modificador correspondente
	hit.points <- 8 + as.numeric(mod[posic.mod]) #Fazendo a soma do valor base (8) mais o valor do modificador de atributo para constituição
	
	###Dados que futuramente vão compor o data frame proficiencies	
	armor.prof <- "light armor, medium armor, shields, none of them may be made of metal!" #Vetor com as armaduras com as quais é proficiente
	weap.prof <- "clubs, daggers, darts, javelins, maces, quarterstaffs, scimitars, sickles, slings, spears" #Vetor com as armas com as quais é proficiente
	tool.prof <- "herbalism kit" #Vetor com as ferramentas com as quais é proficiente
	
	###Dados que futuramente vão compor o data frame saving.throws	
	sav.thr <- c(4, 5) #Determinando os testes de resistência em que é proficiente a partir dos números que as representam
	
	###Dados que futuramente vão compor o data frame prof.skills	
    prof.sk.choice <- "Choose two from Arcana, Animal Handling, Insight, Medicine, Nature, Perception, Religion, Survival" #Vetor com as possibilidades de perícias para escolher
  
    ###Dados que futuramente vão compor o data frame equipments
	equip1.choice <- "wooden shield or any simple weapon" #Vetor com equipamentos para escolher
	equip2.choice <- "scimitar or any simple melee weapon" #Outro vetor com equipamentos para escolher
	equip.all <- "leather armor, explorer's pack, druidic focus" #Vetor com equipamentos que são dados ao personagem
	
	###Dados que futuramente vão compor o data frame traits
	cantrip.know <- "2" #Vetor com o número de truques conhecidos
	
	#Para calcular o número de magias conhecidas é necessário utilizar o modificador do atributo que origina a magia do personagem
	posic.mod.mag <- match("Wis", ord) #Obtendo o número da posição do atributo Sabedoria (Wis) para poder encontrar o modificador correspondente
	spell.know <- as.numeric(mod[posic.mod.mag]) + 1 #Fazendo a soma do modificador de atributo para sabedoria mais o nível de clérigo do personagem (no caso 1)
	
	spell.slot <- "2 slots for level 1 spells" #Vetor com o número de usos de magia permitidos
	spell.cast.abil <- "Wisdom" #Vetor com o atributo do qual depende o poder mágico
	
	#Para calcular a dificuldade para defender-se de uma magia utilizada pelo seu personagem é necessário utilizar o bônus de proficiência e o modificador do atributo que origina a magia do personagem
	spell.save.DC <- 8 + as.numeric(prof.bonus) + as.numeric(mod[posic.mod.mag]) #Fazendo a soma do valor base (8) mais o valor da proficiência, mais o modificador de atributo para sabedoria
	
	#Para calcular o bônus para acerto dos ataques mágicos é necessário utilizar o bônus de proficiência e o modificador do atributo que origina a magia do personagem
	spell.atk <- as.numeric(prof.bonus) + as.numeric(mod[posic.mod.mag]) #Somando o valor da proficiência mais o modificador de atributo para sabedoria
	
	rit.cast <- "Only to prepared druid spells with the ritual tag" #Vetor definindo quais magias pode conjurar como ritual
	spell.cast.focus <- "A druidic focus"	#Vetor definindo se há um canalizador de magias
	
	###Dados que futuramente vão compor o data frame spells
	cantrips <- "Druidcraft, Guidance, Mending, Poison Spray, Produce Flame, Resistance, Shillelagh, Thorn Whip" #Lista com todas os truques que podem ser escolhidos por esta classe
	lvl1.spells	<- "Animal Friendship, Charm Person, Create or Destroy Water, Cure Wounds, Detect Magic, Detect Poison and Disease, Entangle, Faerie Fire, Fog Cloud, Goodberry, Healing Word, Jump, Longstrider, Purify Food and Drink, Speak with Animals, Thunderwave" #Lista com todas as magias de nível 1 que podem ser escolhidas por esta classe
  }

  if(clas=="fighter") #Se o elemento dentro do argumento clas for "fighter"
  {
    ###Dados que futuramente vão compor o data frame traits
	features <- "Fighting Style, Second Wind" #Vetor com as features
   
	###Dados que futuramente vão compor o data frame general.data	
	hit.dice <- "1d10" #Vetor com o dado que determina seus pontos de vida
	
	#Para calcular os pontos de vida é necessário obter o valor do modificador de constituição
	posic.mod <- match("Con", ord) #Obtendo o número da posição do atributo constituição (Con) para poder encontrar o modificador correspondente
	hit.points <- 10 + as.numeric(mod[posic.mod]) #Fazendo a soma do valor base (10) mais o valor do modificador de atributo para constituição
	
	###Dados que futuramente vão compor o data frame proficiencies	
	armor.prof <- "all armor, shields" #Vetor com as armaduras com as quais é proficiente
	weap.prof <- "simple weapons, martial weapons" #Vetor com as armas com as quais é proficiente
	tool.prof <- "none" #Vetor com as ferramentas com as quais é proficiente
	
	###Dados que futuramente vão compor o data frame saving.throws	
	sav.thr <- c(1, 3) #Determinando os testes de resistência em que é proficiente a partir dos números que as representam
	
	###Dados que futuramente vão compor o data frame prof.skills	
    prof.sk.choice <- "Choose two from Acrobatics, Animal Handling, Athletics, History, Insight, Intimidation, Perception, Survival" #Vetor com as possibilidades de perícias para escolher
  
    ###Dados que futuramente vão compor o data frame equipments
	equip1.choice <- "chain mail or leather, longbow and 20 arrows" #Vetor com equipamentos para escolher
	equip2.choice <- "a martial weapon and a shield or two martial weapons" #Outro vetor com equipamentos para escolher
	equip3.choice <- "a light crossbow and 20 bolts or two handaxes" #Outro vetor com equipamentos para escolher
	equip4.choice <- "dungeoneer's pack or explorer's pack" #Outro vetor com equipamentos para escolher
	equip.all <- "none" #Vetor com equipamentos que são dados ao personagem
  }

  if(clas=="monk") #Se o elemento dentro do argumento clas for "monk"
  {
    ###Dados que futuramente vão compor o data frame traits
	features <- "Unarmored Defense, Martial Arts" #Vetor com as features
	martial.arts <- "1d4" #Vetor com o dado a ser rolado para calcular o dano de ataques de artes marciais
   
	###Dados que futuramente vão compor o data frame general.data	
	hit.dice <- "1d8" #Vetor com o dado que determina seus pontos de vida
	
	#Para calcular os pontos de vida é necessário obter o valor do modificador de constituição
	posic.mod <- match("Con", ord) #Obtendo o número da posição do atributo constituição (Con) para poder encontrar o modificador correspondente
	hit.points <- 8 + as.numeric(mod[posic.mod]) #Fazendo a soma do valor base (8) mais o valor do modificador de atributo para constituição
	
	###Dados que futuramente vão compor o data frame proficiencies	
	armor.prof <- "none" #Vetor com as armaduras com as quais é proficiente
	weap.prof <- "simple weapons, shortsword" #Vetor com as armas com as quais é proficiente
	tool.prof <- "Choose 1 type of artisan's tools or 1 musical instrument" #Vetor com as ferramentas com as quais é proficiente
	
	###Dados que futuramente vão compor o data frame saving.throws	
	sav.thr <- c(1, 2) #Determinando os testes de resistência em que é proficiente a partir dos números que as representam
	
	###Dados que futuramente vão compor o data frame prof.skills	
    prof.sk.choice <- "Choose two from Acrobatics, Athletics, History, Insight, Religion, Stealth" #Vetor com as possibilidades de perícias para escolher
  
    ###Dados que futuramente vão compor o data frame equipments
	equip1.choice <- "shortsword or any simple weapon" #Vetor com equipamentos para escolher
	equip2.choice <- "dungeoneer's pack or explorer's pack" #Outro vetor com equipamentos para escolher
	equip.all <- "10 darts" #Vetor com equipamentos que são dados ao personagem
  }  
  
  if(clas=="paladin") #Se o elemento dentro do argumento clas for "paladin"
  {
    ###Dados que futuramente vão compor o data frame traits
	features <- "Divine Sense, Lay on Hands" #Vetor com as features
   
	###Dados que futuramente vão compor o data frame general.data	
	hit.dice <- "1d10" #Vetor com o dado que determina seus pontos de vida
	
	#Para calcular os pontos de vida é necessário obter o valor do modificador de constituição
	posic.mod <- match("Con", ord) #Obtendo o número da posição do atributo constituição (Con) para poder encontrar o modificador correspondente
	hit.points <- 10 + as.numeric(mod[posic.mod]) #Fazendo a soma do valor base (10) mais o valor do modificador de atributo para constituição
	
	###Dados que futuramente vão compor o data frame proficiencies	
	armor.prof <- "all armor, shield" #Vetor com as armaduras com as quais é proficiente
	weap.prof <- "simple weapons, martial weapons" #Vetor com as armas com as quais é proficiente
	tool.prof <- "none" #Vetor com as ferramentas com as quais é proficiente
	
	###Dados que futuramente vão compor o data frame saving.throws	
	sav.thr <- c(5, 6) #Determinando os testes de resistência em que é proficiente a partir dos números que as representam
	
	###Dados que futuramente vão compor o data frame prof.skills	
    prof.sk.choice <- "Choose two from Athletics, Insight, Intimidation, Medicine, Persuasion, Religion" #Vetor com as possibilidades de perícias para escolher
  
    ###Dados que futuramente vão compor o data frame equipments
	equip1.choice <- "a martial weapon and a shield or two martial weapons" #Vetor com equipamentos para escolher
	equip2.choice <- "five javelins or any simple melee weapon" #Outro vetor com equipamentos para escolher
	equip3.choice <- "priest's pack or explorer's pack" #Outro vetor com equipamentos para escolher
	equip.all <- "chain mail, holy symbol" #Vetor com equipamentos que são dados ao personagem
  }  
  
  if(clas=="ranger") #Se o elemento dentro do argumento clas for "ranger"
  {
    ###Dados que futuramente vão compor o data frame traits
	features <- "Favored Enemy, Natural Explorer" #Vetor com as features
   
	###Dados que futuramente vão compor o data frame general.data	
	hit.dice <- "1d10" #Vetor com o dado que determina seus pontos de vida
	
	#Para calcular os pontos de vida é necessário obter o valor do modificador de constituição
	posic.mod <- match("Con", ord) #Obtendo o número da posição do atributo constituição (Con) para poder encontrar o modificador correspondente
	hit.points <- 10 + as.numeric(mod[posic.mod]) #Fazendo a soma do valor base (10) mais o valor do modificador de atributo para constituição
	
	###Dados que futuramente vão compor o data frame proficiencies	
	armor.prof <- "light armor, medium armor, shields" #Vetor com as armaduras com as quais é proficiente
	weap.prof <- "simple weapons, martial weapons" #Vetor com as armas com as quais é proficiente
	tool.prof <- "none" #Vetor com as ferramentas com as quais é proficiente
	
	###Dados que futuramente vão compor o data frame saving.throws	
	sav.thr <- c(1, 2) #Determinando os testes de resistência em que é proficiente a partir dos números que as representam
	
	###Dados que futuramente vão compor o data frame prof.skills	
    prof.sk.choice <- "Choose three from Animal Handling, Athletics, Insight, Investigation, Nature, Perception, Stealth, Survival" #Vetor com as possibilidades de perícias para escolher
  
    ###Dados que futuramente vão compor o data frame equipments
	equip1.choice <- "scale mail or leather armor" #Vetor com equipamentos para escolher
	equip2.choice <- "two shortswords or two simple melee weapons" #Outro vetor com equipamentos para escolher
	equip3.choice <- "ddungeoneer's pack or explorer's pack" #Outro vetor com equipamentos para escolher
	equip.all <- "a lonbow, a quiver of 20 arrows" #Vetor com equipamentos que são dados ao personagem
  }
  
  if(clas=="rogue") #Se o elemento dentro do argumento clas for "rogue"
  {
    ###Dados que futuramente vão compor o data frame traits
	features <- "Expertise, Sneak Attack, Thieves' Cant" #Vetor com as features
    sneak.atk <- "1d6" #Vetor com o dado que deve ser usado para determinar o dano extra conferido em ataques surpresa
   
	###Dados que futuramente vão compor o data frame general.data	
	hit.dice <- "1d8" #Vetor com o dado que determina seus pontos de vida
	
	#Para calcular os pontos de vida é necessário obter o valor do modificador de constituição
	posic.mod <- match("Con", ord) #Obtendo o número da posição do atributo constituição (Con) para poder encontrar o modificador correspondente
	hit.points <- 8 + as.numeric(mod[posic.mod]) #Fazendo a soma do valor base (8) mais o valor do modificador de atributo para constituição
	
	###Dados que futuramente vão compor o data frame proficiencies	
	armor.prof <- "light armor" #Vetor com as armaduras com as quais é proficiente
	weap.prof <- "simple weapons, hand crossbows, longsword, rapiers, shortswords" #Vetor com as armas com as quais é proficiente
	tool.prof <- "thieves' tools" #Vetor com as ferramentas com as quais é proficiente
	
	###Dados que futuramente vão compor o data frame saving.throws	
	sav.thr <- c(2, 4) #Determinando os testes de resistência em que é proficiente a partir dos números que as representam
	
	###Dados que futuramente vão compor o data frame prof.skills	
    prof.sk.choice <- "Choose four from Acrobatics, Athletics, Deception, Insight, Intimidation, Investigation, Perception, Performance, Persuasion, Sleight of Hand, Stealth" #Vetor com as possibilidades de perícias para escolher
  
    ###Dados que futuramente vão compor o data frame equipments
	equip1.choice <- "rapier or sword" #Vetor com equipamentos para escolher
	equip2.choice <- "shortbow and quiver of 20 arrows or shortsword" #Outro vetor com equipamentos para escolher
	equip3.choice <- "burglar's pack or dungeoneer's pack or explorer's pack" #Outro vetor com equipamentos para escolher
	equip.all <- "leather armor, two daggers, thieves' tools" #Vetor com equipamentos que são dados ao personagem
  }
 
  if(clas=="sorcerer") #Se o elemento dentro do argumento clas for "sorcerer"
  {
    ###Dados que futuramente vão compor o data frame traits
	features <- "Spellcasting, Sorcerous Origin" #Vetor com as features
    	
	###Dados que futuramente vão compor o data frame general.data	
	hit.dice <- "1d6" #Vetor com o dado que determina seus pontos de vida
	
	#Para calcular os pontos de vida é necessário obter o valor do modificador de constituição
	posic.mod <- match("Con", ord) #Obtendo o número da posição do atributo constituição (Con) para poder encontrar o modificador correspondente
	hit.points <- 6 + as.numeric(mod[posic.mod]) #Fazendo a soma do valor base (6) mais o valor do modificador de atributo para constituição
	
	###Dados que futuramente vão compor o data frame proficiencies	
	armor.prof <- "none" #Vetor com as armaduras com as quais é proficiente
	weap.prof <- "daggers, darts, slings, quarterstaffs, light crossbows" #Vetor com as armas com as quais é proficiente
	tool.prof <- "none" #Vetor com as ferramentas com as quais é proficiente
	
	###Dados que futuramente vão compor o data frame saving.throws	
	sav.thr <- c(3, 6) #Determinando os testes de resistência em que é proficiente a partir dos números que as representam
	
	###Dados que futuramente vão compor o data frame prof.skills	
    prof.sk.choice <- "Choose two from Arcana, Deception, Insight, Intimidation, Persuasion, Religion" #Vetor com as possibilidades de perícias para escolher
  
    ###Dados que futuramente vão compor o data frame equipments
	equip1.choice <- "a light crossbow and 20 bolts or any simple weapon" #Vetor com equipamentos para escolher
	equip2.choice <- "component pouch or arcane focus" #Outro vetor com equipamentos para escolher
	equip3.choice <- "dungeoneer's pack or explorer's pack" #Outro vetor com equipamentos para escolher
	equip.all <- "two daggers" #Vetor com equipamentos que são dados ao personagem
	
	###Dados que futuramente vão compor o data frame traits
	cantrip.know <- "4" #Vetor com o número de truques conhecidos
	spell.know <- "2" #Vetor com o número de magias conhecidas
	spell.slot <- "2 slots for level 1 spells" #Vetor com o número de usos de magia permitidos
	spell.cast.abil <- "Charisma" #Vetor com o atributo do qual depende o poder mágico
	
	#Para calcular a dificuldade para defender-se de uma magia utilizada pelo seu personagem é necessário utilizar o bônus de proficiência e o modificador do atributo que origina a magia do personagem
	posic.mod.mag <- match("Cha", ord) #Obtendo o número da posição do atributo carisma (Cha) para poder encontrar o modificador correspondente
	
	spell.save.DC <- 8 + as.numeric(prof.bonus) + as.numeric(mod[posic.mod.mag]) #Fazendo a soma do valor base (8) mais o valor da proficiência, mais o modificador de atributo para carisma
	
	#Para calcular o bônus para acerto dos ataques mágicos é necessário utilizar o bônus de proficiência e o modificador do atributo que origina a magia do personagem
	spell.atk <- as.numeric(prof.bonus) + as.numeric(mod[posic.mod.mag]) #Somando o valor da proficiência mais o modificador de atributo para carisma
	
	rit.cast <- "No" #Vetor definindo quais magias pode conjurar como ritual
	spell.cast.focus <- "An arcane focus"	#Vetor definindo se há um canalizador de magias
	
	###Dados que futuramente vão compor o data frame spells
	cantrips <- "Acid Splash, Blade Ward, Chill Touch, Dancing Lights, Fire Bolt, Friends, Light, Mage Hand, Mending, Message, Minor Illusion, Poison Spray, Prestidigitation, Ray of Frost, Shocking Grasp, True Strike" #Lista com todas os truques que podem ser escolhidos por esta classe
	lvl1.spells	<- "Burning Hands, Charm Person, Chromatic Orb, Color Spray, Comprehend Languages, Detect Magic, Disguise Self, Expeditious Retreat, False Life, Feather Fall, Fog Cloud, Jump, Mage Armor, Magic Missile, Ray of Sickness, Shield, Silent Image, Sleep, Thunderwave, Witch Bolt" #Lista com todas as magias de nível 1 que podem ser escolhidas por esta classe
  }
  
  if(clas=="warlock") #Se o elemento dentro do argumento clas for "warlock"
  {
    ###Dados que futuramente vão compor o data frame traits
	features <- "Otherworldly Patron, Pact Magic" #Vetor com as features
    	
	###Dados que futuramente vão compor o data frame general.data	
	hit.dice <- "1d8" #Vetor com o dado que determina seus pontos de vida
	
	#Para calcular os pontos de vida é necessário obter o valor do modificador de constituição
	posic.mod <- match("Con", ord) #Obtendo o número da posição do atributo constituição (Con) para poder encontrar o modificador correspondente
	hit.points <- 8 + as.numeric(mod[posic.mod]) #Fazendo a soma do valor base (8) mais o valor do modificador de atributo para constituição
	
	###Dados que futuramente vão compor o data frame proficiencies	
	armor.prof <- "light armor" #Vetor com as armaduras com as quais é proficiente
	weap.prof <- "simple weapons" #Vetor com as armas com as quais é proficiente
	tool.prof <- "none" #Vetor com as ferramentas com as quais é proficiente
	
	###Dados que futuramente vão compor o data frame saving.throws	
	sav.thr <- c(5, 6) #Determinando os testes de resistência em que é proficiente a partir dos números que as representam
	
	###Dados que futuramente vão compor o data frame prof.skills	
    prof.sk.choice <- "Choose two from Arcana, Deception, History, Intimidation, Investigation, Nature, Religion" #Vetor com as possibilidades de perícias para escolher
  
    ###Dados que futuramente vão compor o data frame equipments
	equip1.choice <- "a light crosspow and 20 bolts or any simple weapon" #Vetor com equipamentos para escolher
	equip2.choice <- "component pouch or arcane focus" #Outro vetor com equipamentos para escolher
	equip3.choice <- "scholar's pack or dungeoneer's pack" #Outro vetor com equipamentos para escolher
	equip.all <- "leather armor, any simple weapon, two daggers" #Vetor com equipamentos que são dados ao personagem
	
	###Dados que futuramente vão compor o data frame traits
	cantrip.know <- "2" #Vetor com o número de truques conhecidos
	spell.know <- "2" #Vetor com o número de magias conhecidas
	spell.slot <- "1 slots for level 1 spells" #Vetor com o número de usos de magia permitidos
	spell.cast.abil <- "Charisma" #Vetor com o atributo do qual depende o poder mágico
	
	#Para calcular a dificuldade para defender-se de uma magia utilizada pelo seu personagem é necessário utilizar o bônus de proficiência e o modificador do atributo que origina a magia do personagem
	posic.mod.mag <- match("Cha", ord) #Obtendo o número da posição do atributo carisma (Cha) para poder encontrar o modificador correspondente
	
	spell.save.DC <- 8 + as.numeric(prof.bonus) + as.numeric(mod[posic.mod.mag]) #Fazendo a soma do valor base (8) mais o valor da proficiência, mais o modificador de atributo para carisma
	
	#Para calcular o bônus para acerto dos ataques mágicos é necessário utilizar o bônus de proficiência e o modificador do atributo que origina a magia do personagem
	spell.atk <- as.numeric(prof.bonus) + as.numeric(mod[posic.mod.mag]) #Somando o valor da proficiência mais o modificador de atributo para carisma
	
	rit.cast <- "No" #Vetor definindo quais magias pode conjurar como ritual
	spell.cast.focus <- "An arcane focus"	#Vetor definindo se há um canalizador de magias
	
	###Dados que futuramente vão compor o data frame spells
	cantrips <- "Blade Ward, Chill Touch, Eldritch Blast, Friends, Mage Hand, Minor Illusion, Poison Spray, Prestidigitation, True Strike" #Lista com todas os truques que podem ser escolhidos por esta classe
	lvl1.spells	<- "Armor of Agathys, Arms of Hadar, Charm Person, Comprehend Languages, Expeditious Retreat, Hellish Rebuke, Hex, Illusory Script, Protection from Evil and Good, Unseen Servant, Witch Bolt" #Lista com todas as magias de nível 1 que podem ser escolhidas por esta classe
  }
 
  if(clas=="wizard") #Se o elemento dentro do argumento clas for "wizard"
  {
    ###Dados que futuramente vão compor o data frame traits
	features <- "Spellcasting, Arcane Recovery" #Vetor com as features
    	
	###Dados que futuramente vão compor o data frame general.data	
	hit.dice <- "1d6" #Vetor com o dado que determina seus pontos de vida
	
	#Para calcular os pontos de vida é necessário obter o valor do modificador de constituição
	posic.mod <- match("Con", ord) #Obtendo o número da posição do atributo constituição (Con) para poder encontrar o modificador correspondente
	hit.points <- 6 + as.numeric(mod[posic.mod]) #Fazendo a soma do valor base (8) mais o valor do modificador de atributo para constituição
	
	###Dados que futuramente vão compor o data frame proficiencies	
	armor.prof <- "none" #Vetor com as armaduras com as quais é proficiente
	weap.prof <- "daggers, darts, slings, quarterstaffs, light crossbows" #Vetor com as armas com as quais é proficiente
	tool.prof <- "none" #Vetor com as ferramentas com as quais é proficiente
	
	###Dados que futuramente vão compor o data frame saving.throws	
	sav.thr <- c(4, 5) #Determinando os testes de resistência em que é proficiente a partir dos números que as representam
	
	###Dados que futuramente vão compor o data frame prof.skills	
    prof.sk.choice <- "Choose two from Arcana, History, Insight, Investigation, Medicine, Religion" #Vetor com as possibilidades de perícias para escolher
  
    ###Dados que futuramente vão compor o data frame equipments
	equip1.choice <- "quarterstaff or dagger" #Vetor com equipamentos para escolher
	equip2.choice <- "component pouch or arcane focus" #Outro vetor com equipamentos para escolher
	equip3.choice <- "scholar's pack or explorer's pack" #Outro vetor com equipamentos para escolher
	equip.all <- "spellbook" #Vetor com equipamentos que são dados ao personagem
	
	###Dados que futuramente vão compor o data frame traits
	cantrip.know <- "3" #Vetor com o número de truques conhecidos
	spell.know <- "6" #Vetor com o número de magias conhecidas
	spell.slot <- "2 slots for level 1 spells" #Vetor com o número de usos de magia permitidos
	spell.cast.abil <- "Intelligence" #Vetor com o atributo do qual depende o poder mágico
	
	#Para calcular a dificuldade para defender-se de uma magia utilizada pelo seu personagem é necessário utilizar o bônus de proficiência e o modificador do atributo que origina a magia do personagem
	posic.mod.mag <- match("Int", ord) #Obtendo o número da posição do atributo inteligência (Int) para poder encontrar o modificador correspondente
	
	spell.save.DC <- 8 + as.numeric(prof.bonus) + as.numeric(mod[posic.mod.mag]) #Fazendo a soma do valor base (8) mais o valor da proficiência, mais o modificador de atributo para inteligência
	
	#Para calcular o bônus para acerto dos ataques mágicos é necessário utilizar o bônus de proficiência e o modificador do atributo que origina a magia do personagem
	spell.atk <- as.numeric(prof.bonus) + as.numeric(mod[posic.mod.mag]) #Somando o valor da proficiência mais o modificador de atributo para inteligência
	
	rit.cast <- "Only to wizard spells with the ritual tag that are in your spellbook" #Vetor definindo quais magias pode conjurar como ritual
	spell.cast.focus <- "An arcane focus"	#Vetor definindo se há um canalizador de magias
	
	###Dados que futuramente vão compor o data frame spells
	cantrips <- "Acid Splash, Blade Ward, Chill Touch, Dancing Lights, Fire Bolt, Friends, Light, Mage Hand, Mending, Message, Minor Illusion, Poison Spray, Prestidigitation, Ray of Frost, Shocking Grasp, True Strike" #Lista com todas os truques que podem ser escolhidos por esta classe
	lvl1.spells	<- "Alarm, Burning Hands, Charm Person, Chromatic Orb, Color Spray, Comprehend Languages, Detect Magic, Disguise Self, Expeditious Retreat, False Life, Feather Fall, Find Familiar, Fog Cloud, Grease, Identify, Illusory Script, Jump, Longstrider, Mage Armor, Magic Missile, Protection form Good and Evil, Ray of Sickness, Shield, Silent Image, Sleep, Tasha's Hideous Laughter, Tenser's Floating Disk, Thunderwave, Unseen Servant, Witch Bolt" #Lista com todas as magias de nível 1 que podem ser escolhidas por esta classe
  }  
 
  ###################################
  #align = Escolha o seu alinhamento#
  ###################################

  if(align=="LG") #Se o argumento align estiver preenchido por "LG"
  {
    ###Dados que futuramente vão compor o data frame personality.traits
	alinha <- "Lawful good" #Vetor com o alinhamento escolhido
  }

  if(align=="LN") #Se o argumento align estiver preenchido por "LN"
  {
    ###Dados que futuramente vão compor o data frame personality.traits
	alinha <- "Lawful neutral" #Vetor com o alinhamento escolhido
  }
  
  if(align=="LE") #Se o argumento align estiver preenchido por "LE"
  {
    ###Dados que futuramente vão compor o data frame personality.traits
	alinha <- "Lawful evil" #Vetor com o alinhamento escolhido
  }
  
  if(align=="CG") #Se o argumento align estiver preenchido por "CG"
  {
    ###Dados que futuramente vão compor o data frame personality.traits
	alinha <- "Chaotic good" #Vetor com o alinhamento escolhido
  }
  
  if(align=="CN") #Se o argumento align estiver preenchido por "CN"
  {
    ###Dados que futuramente vão compor o data frame personality.traits
	alinha <- "Chaotic neutral" #Vetor com o alinhamento escolhido
  }
  
  if(align=="CE") #Se o argumento align estiver preenchido por "CE"
  {
    ###Dados que futuramente vão compor o data frame personality.traits
	alinha <- "Chaotic evil" #Vetor com o alinhamento escolhido
  }
  
  if(align=="NG") #Se o argumento align estiver preenchido por "NG"
  {
    ###Dados que futuramente vão compor o data frame personality.traits
	alinha <- "Neutral good" #Vetor com o alinhamento escolhido
  }
  
  if(align=="N") #Se o argumento align estiver preenchido por ""
  {
    ###Dados que futuramente vão compor o data frame personality.traits
	alinha <- "Neutral" #Vetor com o alinhamento escolhido
  }
  
  if(align=="NE") #Se o argumento align estiver preenchido por "NE"
  {
    ###Dados que futuramente vão compor o data frame personality.traits
	alinha <- "Neutral Evil" #Vetor com o alinhamento escolhido
  }

  ###############################################
  #back = Escolha dos antecedentes do personagem#
  ###############################################
  
  if(back=="acolyte") #Se o argumento back estiver preenchido pelo elemento "acolyte"
  {
    ###Dados que futuramente vão compor o data frame proficiencies
	prof.sk <- c(7, 15) #Determinando as perícias em que é proficiente a partir dos números que as representam
	  
	###Dados que futuramente vão compor o data frame info
	info.back.ling.choice <- "Choose another two languages" #Determinando quantas línguas poderão ser escolhidas
	
	###Dados que futuramente vão compor o data frame equipments
	equip.back <- "Holy symbol, a prayer book or prayer wheel, 5 sticks of incense, vestments, set of common clothes, pouch containing 15 gp" #Determinando os equipamentos concedidos pelo antecedente
	
	###Dados que futuramente vão compor o data frame personality.traits
	#Sorteando as características da personalidade para o personagem com esse antecedente 
	caract <- c("I idolize a particular hero of my faith, and constantly refer to that person’s deeds and example", "I can find common ground between the fiercest enemies, empathizing with them and always working towards peace", "I see omens in every event and action. The gods try to speak to us, we just need to listen", "Nothing can shake my optimistic attitude", "I quote (or misquote) sacred texts and proverbs in almost every situation", "I am tolerant (or intolerant) of other faiths and respect (or condemn) the worship of other gods", "I've enjoyed fine food, drink, and high society among my temple’s elite. Rough living grates on me", "I’ve spent so long in the temple that I have little practical experience dealing with people in the outside world") #Criando o objeto com todas as 8 possíveis características de personalidade
	
	trait <- sample(caract, size= 1) #Sorteando uma das 8 características possíveis

	#Sorteando os ideais para o personagem com esse antecedente. Os ideais tem de ser congruentes com o alinhamento do personagem, por isso eles serão escolhidos dentre os possíveis para os diferentes alinhamentos			
	if(align=="LG") #Se o alinhamento for LG
    {
      ideal <- sample(c("Tradition: The ancient traditions of worship and sacrifice must be preserved and upheld", "Charity: I always try to help those in need, no matter what the personal cost", "Power: I hope to one day rise to the top of my faith’s religious hierarchy", "Faith: I trust that my deity will guide my actions, I have faith that if I work hard, things will go well", "Aspiration: I seek to prove myself worthy of my god’s favor by matching my actions against his or her teachings"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem
    }

    if(align=="LN"||align=="LE") #Se o alinhamento for LN ou LE
    {
      ideal <- sample(c("Tradition: The ancient traditions of worship and sacrifice must be preserved and upheld", "Power: I hope to one day rise to the top of my faith’s religious hierarchy", "Faith: I trust that my deity will guide my actions, I have faith that if I work hard, things will go well", "Aspiration: I seek to prove myself worthy of my god’s favor by matching my actions against his or her teachings"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem 
    }  	
	
    if(align=="NG") #Se o alinhamento for NG
    {
      ideal <- sample(c("Charity: I always try to help those in need, no matter what the personal cost", "Aspiration: I seek to prove myself worthy of my god’s favor by matching my actions against his or her teachings"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem
    }	
		
	if(align=="N"||align=="NE") #Se o alinhamento for N ou NE
    {
      ideal <- "Aspiration: I seek to prove myself worthy of my god’s favor by matching my actions against his or her teachings" #Determinando o elemento condizente com o alinhamento escolhido para determinar os ideais do personagem
    }	
		
	if(align=="CG") #Se o alinhamento for CG
    {
      ideal <- sample(c("Charity: I always try to help those in need, no matter what the personal cost", "Change: We must help bring about the changes the gods are constantly working in the world", "Aspiration: I seek to prove myself worthy of my god’s favor by matching my actions against his or her teachings"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem
    }

    if(align=="CN"||align=="CE") #Se o alinhamento for CN ou CE
    {
      ideal <- sample(c("Change: We must help bring about the changes the gods are constantly working in the world", "Aspiration: I seek to prove myself worthy of my god’s favor by matching my actions against his or her teachings"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem 
    }	

	#Sorteando os laços para o personagem com esse antecedente 
	lac <- c("I would die to recover an ancient relic of my faith that was lost long ago", "I will someday get revenge on the corrupt temple hierarchy who branded me a heretic", "I owe my life to the priest who took me in when my parents died", "Everything I do is for the common people", "I will do anything to protect the temple where I served", "I seek to preserve a sacred text that my enemies consider heretical and seek to destroy") #Criando o objeto com todos os 6 possíveis laços
	bond <- sample(lac, size= 1) #Sorteando um dos 6 laços possíveis	
	
	#Sorteando as falhas de personalidade para o personagem com esse antecedente 
	falhas <- c("I judge others harshly, and myself even more severely", "I put too much trust in those who wield power within my temple’s hierarchy", "My piety sometimes leads me to blindly trust those that profess faith in my god", "I am inflexible in my thinking", "I am suspicious of strangers and expect the worst of them", "Once I pick a goal, I become obsessed with it to the detriment of everything else in my life") #Criando o objeto com todas as 6 possíveis falhas de personalidade
	flaw <- sample(falhas, size= 1) #Sorteando uma das 6 possíveis	falhas de personalidade
  }  

  if(back=="charlatan") #Se o argumento back estiver preenchido pelo elemento "charlatan"
  {
    ###Dados que futuramente vão compor o data frame proficiencies
	prof.sk <- c(5, 16) #Determinando as perícias em que é proficiente a partir dos números que as representam
	  
	###Dados que futuramente vão compor o data frame proficiencies
	tool.prof.back <- "disguise kit, forgery kit" #Determinando as proficiências com ferramentas
	
	###Dados que futuramente vão compor o data frame equipments
	equip.back <- "set of fine clothes, disguise kit, tools of the con of your choice (ten stoppered bottles filled with colored liquid, a set of weighted dice, a deck of marked cards, or signet ring of an imaginary duke), pouch containing 15 GP" #Determinando os equipamentos concedidos pelo antecedente
	
	###Dados que futuramente vão compor o data frame personality.traits
	#Sorteando as características da personalidade para o personagem com esse antecedente 
	caract <- c("I fall in and out of love easily, and am always pursuing someone", "I have a joke for every occasion, especially occasions where humor is inappropriate", "Flattery is my preferred trick for getting what I want", "I’m a born gambler who can't resist taking a risk for a potential payoff", "I lie about almost everything, even when there’s no good reason to", "Sarcasm and insults are my weapons of choice", "I keep multiple holy symbols on me and invoke whatever deity might come in useful at any given moment", "I pocket anything I see that might have some value") #Criando o objeto com todas as 8 possíveis características de personalidade
	
	trait <- sample(caract, size= 1) #Sorteando uma das 8 características possíveis

	#Sorteando os ideais para o personagem com esse antecedente. Os ideais tem de ser congruentes com o alinhamento do personagem, por isso eles serão escolhidos dentre os possíveis para os diferentes alinhamentos		
	if(align=="LG") #Se o alinhamento for LG
    {
      ideal <- sample(c("Fairness: I never target people who can’t afford to lose a few coins", "Charity: I distribute the money I acquire to the people who really need it", "Friendship: Material goods come and go. Bonds of friendship last forever", "Aspiration: I’m determined to make something of myself"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem
    }

    if(align=="LN"||align=="LE") #Se o alinhamento for LN ou LE
    {
      ideal <- sample(c("Fairness: I never target people who can’t afford to lose a few coins", "Aspiration: I’m determined to make something of myself"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem 
    }  	
	
    if(align=="NG") #Se o alinhamento for NG
    {
      ideal <- sample(c("Charity: I distribute the money I acquire to the people who really need it", "Friendship: Material goods come and go. Bonds of friendship last forever", "Aspiration: I’m determined to make something of myself"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem
    }	
		
	if(align=="N"||align=="NE") #Se o alinhamento for N ou NE
    {
      ideal <- "Aspiration: I’m determined to make something of myself" ##Determinando o elemento condizente com o alinhamento escolhido para determinar os ideais do personagem
    }	
		
	if(align=="CG") #Se o alinhamento for CG
    {
      ideal <- sample(c("Independence: I am a free spirit - no one tells me what to do", "Charity: I distribute the money I acquire to the people who really need it", "Creativity: I never run the same con twice", "Friendship: Material goods come and go. Bonds of friendship last forever", "Aspiration: I’m determined to make something of myself"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem
    }

    if(align=="CN"||align=="CE") #Se o alinhamento for CN ou CE
    {
      ideal <- sample(c("Independence: I am a free spirit - no one tells me what to do", "Creativity: I never run the same con twice", "Aspiration: I’m determined to make something of myself"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem 
    }	

	#Sorteando os laços para o personagem com esse antecedente 
	lac <- c("I fleeced the wrong person and must work to ensure that this individual never crosses paths with me or those I care about", "I owe everything to my mentor - a horrible person who’s probably rotting in jail somewhere", "Somewhere out there, I have a child who doesn’t know me. I’m making the world better for him or her", "I come from a noble family, and one day I’ll reclaim my lands and title from those who stole them from me", "A powerful person killed someone I love. Some day soon, I’ll have my revenge", "I swindled and ruined a person who didn’t deserve it. I seek to atone for my misdeeds but might never be able to forgive myself") #Criando o objeto com todos os 6 possíveis laços
	bond <- sample(lac, size= 1) #Sorteando um dos 6 laços possíveis	
	
	#Sorteando as falhas de personalidade para o personagem com esse antecedente 
	falhas <- c("I can’t resist a pretty face", "I'm always in debt. I spend my ill-gotten gains on decadent luxuries faster than I bring them in..", "I’m convinced that no one could ever fool me the way I fool others", "I’m too greedy for my own good. I can’t resist taking a risk if there’s money involved", "I can’t resist swindling people who are more powerful than me", "I hate to admit it and will hate myself for it, but I'll run and preserve my own hide if the going gets tough") #Criando o objeto com todas as 6 possíveis falhas de personalidade
	flaw <- sample(falhas, size= 1) #Sorteando uma das 6 possíveis	falhas de personalidade
  } 
 
  if(back=="criminal") #Se o argumento back estiver preenchido pelo elemento "criminal"
  {
    ###Dados que futuramente vão compor o data frame proficiencies
	prof.sk <- c(5, 17) #Determinando as perícias em que é proficiente a partir dos números que as representam
	  
	###Dados que futuramente vão compor o data frame proficiencies
	tool.prof.back <- "one type of gaming set, thieves' tool" #Determinando as proficiências com ferramentas
	
	###Dados que futuramente vão compor o data frame equipments
	equip.back <- "crowbar, set of dark common clothes including a hood, pouch containing 15 GP" #Determinando os equipamentos concedidos pelo antecedente
	
	###Dados que futuramente vão compor o data frame personality.traits
	#Sorteando as características da personalidade para o personagem com esse antecedente 
	caract <- c("I always have a plan for what to do when things go wrong", "I am always calm, no matter what the situation. I never raise my voice or let my emotions control me", "The first thing I do in a new place is note the locations of everything valuable-or where such things could be hidden", "I would rather make a new friend than a new enemy", "I am incredibly slow to trust. Those who seem the fairest often have the most to hide", "I don't pay attention to the risks in a situation. Never tell me the odds", "The best way to get me to do something is to tell me I can't do it", "I blow up at the slightest insult") #Criando o objeto com todas as 8 possíveis características de personalidade
	
	trait <- sample(caract, size= 1) #Sorteando uma das 8 características possíveis

	#Sorteando os ideais para o personagem com esse antecedente. Os ideais tem de ser congruentes com o alinhamento do personagem, por isso eles serão escolhidos dentre os possíveis para os diferentes alinhamentos		
	if(align=="LG") #Se o alinhamento for LG
    {
      ideal <- sample(c("Honor: I don’t steal from others in the trade", "Charity: I steal from the wealthy so that I can help people in need", "Redemption: There’s a spark of good in everyone"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem
    }

    if(align=="LN") #Se o alinhamento for LN
    {
      ideal <- sample(c("Honor: I don’t steal from others in the trade", "People: I’m loyal to my friends, not to any ideals, and everyone else can take a trip down the Styx for all I care"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem 
    }  

	if(align=="LE") #Se o alinhamento for LE
    {
      ideal <- sample(c("Honor: I don’t steal from others in the trade", "Greed: I will do whatever it takes to become wealthy"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem 
    }
	
    if(align=="NG") #Se o alinhamento for NG
    {
      ideal <- sample(c("Charity: I steal from the wealthy so that I can help people in need", "People: I’m loyal to my friends, not to any ideals, and everyone else can take a trip down the Styx for all I care"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem
    }	
		
	if(align=="N") #Se o alinhamento for N
    {
      ideal <- "People: I’m loyal to my friends, not to any ideals, and everyone else can take a trip down the Styx for all I care" #Determinando o elemento condizente com o alinhamento escolhido para determinar os ideais do personagem
    }

	if(align=="NE") #Se o alinhamento for NE
    {
      ideal <- sample(c("Greed: I will do whatever it takes to become wealthy", "People: I’m loyal to my friends, not to any ideals, and everyone else can take a trip down the Styx for all I care"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem
    }
		
	if(align=="CG") #Se o alinhamento for CG
    {
      ideal <- sample(c("Freedom: Chains are meant to be broken, as are those who would forge them", "Charity: I steal from the wealthy so that I can help people in need", "Redemption: There’s a spark of good in everyone"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem
    }

    if(align=="CN") #Se o alinhamento for CN
    {
      ideal <- sample(c("Freedom: Chains are meant to be broken, as are those who would forge them" , "People: I’m loyal to my friends, not to any ideals, and everyone else can take a trip down the Styx for all I care"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem 
    }

	if(align=="CE") #Se o alinhamento for CE
    {
      ideal <- sample(c("Freedom: Chains are meant to be broken, as are those who would forge them", "Greed: I will do whatever it takes to become wealthy"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem 
    }

	#Sorteando os laços para o personagem com esse antecedente 
	lac <- c("I’m trying to pay off an old debt I owe to a generous benefactor", "My ill-gotten gains go to support my family", "Something important was taken from me, and I aim to steal it back", "I will become the greatest thief that ever lived", "I’m guilty of a terrible crime. I hope I can redeem myself for it", "Someone I loved died because of a mistake I made. That will never happen again") #Criando o objeto com todos os 6 possíveis laços
	bond <- sample(lac, size= 1) #Sorteando um dos 6 laços possíveis	
	
	#Sorteando as falhas de personalidade para o personagem com esse antecedente 
	falhas <- c("When I see something valuable, I can’t think about anything but how to steal it", "When faced with a choice between money and my friends, I usually choose the money", "If there’s a plan, I’ll forget it. If I don’t forget it, I’ll ignore it", "I have a “tell” that reveals when I'm lying", "I turn tail and run when things look bad", "An innocent person is in prison for a crime that I committed. I’m okay with that") #Criando o objeto com todas as 6 possíveis falhas de personalidade
	flaw <- sample(falhas, size= 1) #Sorteando uma das 6 possíveis	falhas de personalidade
  }

  if(back=="entertainer") #Se o argumento back estiver preenchido pelo elemento "entertainer"
  {
    ###Dados que futuramente vão compor o data frame proficiencies
	prof.sk <- c(1, 13) #Determinando as perícias em que é proficiente a partir dos números que as representam
	  
	###Dados que futuramente vão compor o data frame proficiencies
	tool.prof.back <- "disguise kit, one type of musical instrument" #Determinando as proficiências com ferramentas
	
	###Dados que futuramente vão compor o data frame equipments
	equip.back <- "a musical instrumento of your choice, the favor of an admirer (love letter, lock of hair or trinket), a costume, pouch containing 15 GP" #Determinando os equipamentos concedidos pelo antecedente
	
	###Dados que futuramente vão compor o data frame personality.traits
	#Sorteando as características da personalidade para o personagem com esse antecedente 
	caract <- c("I know a story relevant to almost every situation", "Whenever I come to a new place, I collect local rumors and spread gossip", "I’m a hopeless romantic, always searching for that “special someone", "Nobody stays angry at me or around me for long, since I can defuse any amount of tension", "I love a good insult, even one directed at me", "I get bitter if I’m not the center of attention", "I’ll settle for nothing less than perfection", "I change my mood or my mind as quickly as I change key in a song") #Criando o objeto com todas as 8 possíveis características de personalidade
	
	trait <- sample(caract, size= 1) #Sorteando uma das 8 características possíveis

	#Sorteando os ideais para o personagem com esse antecedente. Os ideais tem de ser congruentes com o alinhamento do personagem, por isso eles serão escolhidos dentre os possíveis para os diferentes alinhamentos		
	if(align=="LG") #Se o alinhamento for LG
    {
      ideal <- sample(c("Honor: I don’t steal from others in the trade", "Charity: I steal from the wealthy so that I can help people in need", "Redemption: There’s a spark of good in everyone"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem
    }

    if(align=="LN") #Se o alinhamento for LN
    {
      ideal <- sample(c("Honor: I don’t steal from others in the trade", "People: I’m loyal to my friends, not to any ideals, and everyone else can take a trip down the Styx for all I care"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem 
    }  

	if(align=="LE") #Se o alinhamento for LE
    {
      ideal <- sample(c("Honor: I don’t steal from others in the trade", "Greed: I will do whatever it takes to become wealthy"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem 
    }
	
    if(align=="NG") #Se o alinhamento for NG
    {
      ideal <- sample(c("Charity: I steal from the wealthy so that I can help people in need", "People: I’m loyal to my friends, not to any ideals, and everyone else can take a trip down the Styx for all I care"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem
    }	
		
	if(align=="N") #Se o alinhamento for N
    {
      ideal <- "People: I’m loyal to my friends, not to any ideals, and everyone else can take a trip down the Styx for all I care" #Determinando o elemento condizente com o alinhamento escolhido para determinar os ideais do personagem
    }

	if(align=="NE") #Se o alinhamento for NE
    {
      ideal <- sample(c("Greed: I will do whatever it takes to become wealthy", "People: I’m loyal to my friends, not to any ideals, and everyone else can take a trip down the Styx for all I care"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem
    }
		
	if(align=="CG") #Se o alinhamento for CG
    {
      ideal <- sample(c("Freedom: Chains are meant to be broken, as are those who would forge them", "Charity: I steal from the wealthy so that I can help people in need", "Redemption: There’s a spark of good in everyone"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem
    }

    if(align=="CN") #Se o alinhamento for CN
    {
      ideal <- sample(c("Freedom: Chains are meant to be broken, as are those who would forge them" , "People: I’m loyal to my friends, not to any ideals, and everyone else can take a trip down the Styx for all I care"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem 
    }

	if(align=="CE") #Se o alinhamento for CE
    {
      ideal <- sample(c("Freedom: Chains are meant to be broken, as are those who would forge them", "Greed: I will do whatever it takes to become wealthy"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem 
    }	

	#Sorteando os laços para o personagem com esse antecedente 
	lac <- c("My instrument is my most treasured possession, and it reminds me of someone I love", "Someone stole my precious instrument, and someday I’ll get it back", "I want to be famous, whatever it takes", "I idolize a hero of the old tales and measure my deeds against that person’s", "I will do anything to prove myself superior to my hated rival", "I would do anything for the other members of my old troupe") #Criando o objeto com todos os 6 possíveis laços
	bond <- sample(lac, size= 1) #Sorteando um dos 6 laços possíveis	
	
	#Sorteando as falhas de personalidade para o personagem com esse antecedente 
	falhas <- c("I’ll do anything to win fame and renown", "I’m a sucker for a pretty face", "A scandal prevents me from ever going home again. That kind of trouble seems to follow me around", "I once satirized a noble who still wants my head. It was a mistake that I will likely repeat", "I have trouble keeping my true feelings hidden. My sharp tongue lands me in trouble", "Despite my best efforts, I am unreliable to my friends") #Criando o objeto com todas as 6 possíveis falhas de personalidade
	flaw <- sample(falhas, size= 1) #Sorteando uma das 6 possíveis	falhas de personalidade
  }
   
  if(back=="folk hero") #Se o argumento back estiver preenchido pelo elemento "folk hero"
  {
    ###Dados que futuramente vão compor o data frame proficiencies
	prof.sk <- c(2, 18) #Determinando as perícias em que é proficiente a partir dos números que as representam
	  
	###Dados que futuramente vão compor o data frame proficiencies
	tool.prof.back <- "one type of artisan's tools, land vehicles" #Determinando as proficiências com ferramentas
	
	###Dados que futuramente vão compor o data frame equipments
	equip.back <- "a set of artisan's tools of your choice, shovel, iron pot, set of common clothes, pouch containing 10 GP" #Determinando os equipamentos concedidos pelo antecedente
	
	###Dados que futuramente vão compor o data frame personality.traits
	#Sorteando as características da personalidade para o personagem com esse antecedente 
	caract <- c("I judge people by their actions, not their words", "If someone is in trouble, I’m always ready to lend help", "When I set my mind to something, I follow through no matter what gets in my way", "I have a strong sense of fair play and always try to find the most equitable solution to arguments", "I’m confident in my own abilities and do what I can to instill confidence in others", "Thinking is for other people. I prefer action", "I misuse long words in an attempt to sound smarter", "I get bored easily. When am I going to get on with my destiny?") #Criando o objeto com todas as 8 possíveis características de personalidade
	
	trait <- sample(caract, size= 1) #Sorteando uma das 8 características possíveis

	#Sorteando os ideais para o personagem com esse antecedente. Os ideais tem de ser congruentes com o alinhamento do personagem, por isso eles serão escolhidos dentre os possíveis para os diferentes alinhamentos
	if(align=="LG") #Se o alinhamento for LG
    {
      ideal <- sample(c("Respect: People deserve to be treated with dignity and respect", "Fairness: No one should get preferential treatment before the law, and no one is above the law", "Destiny: Nothing and no one can steer me away from my higher calling"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem
    }

    if(align=="LN") #Se o alinhamento for LN
    {
      ideal <- sample(c("Fairness: No one should get preferential treatment before the law, and no one is above the law", "Sincerity: There’s no good in pretending to be something I’m not", "Destiny: Nothing and no one can steer me away from my higher calling"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem 
    }  

	if(align=="LE") #Se o alinhamento for LE
    {
      ideal <- sample(c("Fairness: No one should get preferential treatment before the law, and no one is above the law", "Might: If I become strong, I can take what I want—what I deserve", "Destiny: Nothing and no one can steer me away from my higher calling"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem 
    }
	
    if(align=="NG") #Se o alinhamento for NG
    {
      ideal <- sample(c("Respect: People deserve to be treated with dignity and respect", "Sincerity: There’s no good in pretending to be something I’m not", "Destiny: Nothing and no one can steer me away from my higher calling"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem
    }	
		
	if(align=="N") #Se o alinhamento for N
    {
      ideal <- sample(c("Sincerity: There’s no good in pretending to be something I’m not", "Destiny: Nothing and no one can steer me away from my higher calling"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem
    }

	if(align=="NE") #Se o alinhamento for NE
    {
      ideal <- sample(c("Might: If I become strong, I can take what I want—what I deserve", "Sincerity: There’s no good in pretending to be something I’m not", "Destiny: Nothing and no one can steer me away from my higher calling"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem
    }
		
	if(align=="CG") #Se o alinhamento for CG
    {
      ideal <- sample(c("Respect: People deserve to be treated with dignity and respect", "Freedom: Tyrants must not be allowed to oppress the people", "Destiny: Nothing and no one can steer me away from my higher calling"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem
    }

    if(align=="CN") #Se o alinhamento for CN
    {
      ideal <- sample(c("Freedom: Tyrants must not be allowed to oppress the people", "Sincerity: There’s no good in pretending to be something I’m not", "Destiny: Nothing and no one can steer me away from my higher calling"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem 
    }

	if(align=="CE") #Se o alinhamento for CE
    {
      ideal <- sample(c("Freedom: Tyrants must not be allowed to oppress the people", "Might: If I become strong, I can take what I want—what I deserve", "Destiny: Nothing and no one can steer me away from my higher calling"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem 
    }	

	#Sorteando os laços para o personagem com esse antecedente 
	lac <- c("I have a family, but I have no idea where they are. One day, I hope to see them again", "I worked the land, I love the land, and I will protect the land", "A proud noble once gave me a horrible beating, and I will take my revenge on any bully I encounter", "My tools are symbols of my past life, and I carry them so that I will never forget my roots", "I protect those who cannot protect themselves", "I wish my childhood sweetheart had come with me to pursue my destiny") #Criando o objeto com todos os 6 possíveis laços
	bond <- sample(lac, size= 1) #Sorteando um dos 6 laços possíveis	
	
	#Sorteando as falhas de personalidade para o personagem com esse antecedente 
	falhas <- c("The tyrant who rules my land will stop at nothing to see me killed", "I’m convinced of the significance of my destiny, and blind to my shortcomings and the risk of failure", "The people who knew me when I was young know my shameful secret, so I can never go home again", "I have a weakness for the vices of the city, especially hard drink", "Secretly, I believe that things would be better if I were a tyrant lording over the land", "I have trouble trusting in my allies") #Criando o objeto com todas as 6 possíveis falhas de personalidade
	flaw <- sample(falhas, size= 1) #Sorteando uma das 6 possíveis	falhas de personalidade
  } 
  
  if(back=="guild artisan") #Se o argumento back estiver preenchido pelo elemento "guild artisan"
  {
    ###Dados que futuramente vão compor o data frame proficiencies
	prof.sk <- c(7, 14) #Determinando as perícias em que é proficiente a partir dos números que as representam
	  
	###Dados que futuramente vão compor o data frame proficiencies
	tool.prof.back <- "one type of artisan's tools" #Determinando as proficiências com ferramentas
	info.back.ling.choice <- "Choose another language" #Determinando quantas línguas poderão ser escolhidas
	
	###Dados que futuramente vão compor o data frame equipments
	equip.back <- "set of artisan's tools of your choice, letter of introduction from your guild, set of traveler's clothes, pouch containing 15 GP" #Determinando os equipamentos concedidos pelo antecedente
	
	###Dados que futuramente vão compor o data frame personality.traits
	#Sorteando as características da personalidade para o personagem com esse antecedente 
	caract <- c("I believe that anything worth doing is worth doing right. I can’t help it - I’m a perfectionist", "I’m a snob who looks down on those who can’t appreciate fine art", "I always want to know how things work and what makes people tick", "I’m full of witty aphorisms and have a proverb for every occasion", "I’m rude to people who lack my commitment to hard work and fair play", "I like to talk at length about my profession", "I don’t part with my money easily and will haggle tirelessly to get the best deal possible", "I’m well known for my work, and I want to make sure everyone appreciates it. I'm always taken aback when people haven’t heard of me") #Criando o objeto com todas as 8 possíveis características de personalidade
	
	trait <- sample(caract, size= 1) #Sorteando uma das 8 características possíveis

	#Sorteando os ideais para o personagem com esse antecedente. Os ideais tem de ser congruentes com o alinhamento do personagem, por isso eles serão escolhidos dentre os possíveis para os diferentes alinhamentos	
	if(align=="LG") #Se o alinhamento for LG
    {
      ideal <- sample(c("Community: It is the duty of all civilized people to strengthen the bonds of community and the security of civilization", "Generosity: My talents were given to me so that I could use them to benefit the world", "Aspiration: I work hard to be the best there is at my craft"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem
    }

    if(align=="LN") #Se o alinhamento for LN
    {
      ideal <- sample(c("Community: It is the duty of all civilized people to strengthen the bonds of community and the security of civilization", "People: I’m committed to the people I care about, not to ideals", "Aspiration: I work hard to be the best there is at my craft"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem 
    }  

	if(align=="LE") #Se o alinhamento for LE
    {
      ideal <- sample(c("Community: It is the duty of all civilized people to strengthen the bonds of community and the security of civilization", "Greed: I’m only in it for the money", "Aspiration: I work hard to be the best there is at my craft"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem 
    }
	
    if(align=="NG") #Se o alinhamento for NG
    {
      ideal <- sample(c("Generosity: My talents were given to me so that I could use them to benefit the world", "People: I’m committed to the people I care about, not to ideals", "Aspiration: I work hard to be the best there is at my craft"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem
    }	
		
	if(align=="N") #Se o alinhamento for N
    {
      ideal <- sample(c("People: I’m committed to the people I care about, not to ideals", "Aspiration: I work hard to be the best there is at my craft"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem
    }

	if(align=="NE") #Se o alinhamento for NE
    {
      ideal <- sample(c("Greed: I’m only in it for the money", "People: I’m committed to the people I care about, not to ideals", "Aspiration: I work hard to be the best there is at my craft"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem
    }
		
	if(align=="CG") #Se o alinhamento for CG
    {
      ideal <- sample(c("Generosity: My talents were given to me so that I could use them to benefit the world", "Freedom: Everyone should be free to pursue his or her own livelihood", "Aspiration: I work hard to be the best there is at my craft"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem
    }

    if(align=="CN") #Se o alinhamento for CN
    {
      ideal <- sample(c("Freedom: Everyone should be free to pursue his or her own livelihood", "People: I’m committed to the people I care about, not to ideals", "Aspiration: I work hard to be the best there is at my craft"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem 
    }

	if(align=="CE") #Se o alinhamento for CE
    {
      ideal <- sample(c("Freedom: Everyone should be free to pursue his or her own livelihood", "Greed: I’m only in it for the money", "Aspiration: I work hard to be the best there is at my craft"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem 
    }	

	#Sorteando os laços para o personagem com esse antecedente 
	lac <- c("The workshop where I learned my trade is the most important place in the world to me", "I created a great work for someone, and then found them unworthy to receive it. I’m still looking for someone worthy", "I owe my guild a great debt for forging me into the person I am today", "I pursue wealth to secure someone’s love", "One day I will return to my guild and prove that I am the greatest artisan of them all", "I will get revenge on the evil forces that destroyed my place of business and ruined my livelihood") #Criando o objeto com todos os 6 possíveis laços
	bond <- sample(lac, size= 1) #Sorteando um dos 6 laços possíveis	
	
	#Sorteando as falhas de personalidade para o personagem com esse antecedente 
	falhas <- c("I’ll do anything to get my hands on something rare or priceless", "I’m quick to assume that someone is trying to cheat me", "No one must ever learn that I once stole money from guild coffers", "I’m never satisfied with what I have— I always want more", "I would kill to acquire a noble title", "I’m horribly jealous of anyone who can outshine my handiwork. Everywhere I go, I’m surrounded by rivals") #Criando o objeto com todas as 6 possíveis falhas de personalidade
	flaw <- sample(falhas, size= 1) #Sorteando uma das 6 possíveis	falhas de personalidade
  }
  
  if(back=="hermit") #Se o argumento back estiver preenchido pelo elemento "hermit"
  {
    ###Dados que futuramente vão compor o data frame proficiencies
	prof.sk <- c(10, 15) #Determinando as perícias em que é proficiente a partir dos números que as representam
	  
	###Dados que futuramente vão compor o data frame proficiencies
	tool.prof.back <- "herbalism kit" #Determinando as proficiências com ferramentas
	info.back.ling.choice <- "Choose another language" #Determinando quantas línguas poderão ser escolhidas
	
	###Dados que futuramente vão compor o data frame equipments
	equip.back <- "a scroll case stuffed full of notes from your studies or prayers, winter blanket, set of common clothes, herbalism kit, 5 GP" #Determinando os equipamentos concedidos pelo antecedente
	
	###Dados que futuramente vão compor o data frame personality.traits
	#Sorteando as características da personalidade para o personagem com esse antecedente 
	caract <- c("I’ve been isolated for so long that I rarely speak, preferring gestures and the occasional grunt", "I am utterly serene, even in the face of disaster", "The leader of my community had something wise to say on every topic, and I am eager to share that wisdom", "I feel tremendous empathy for all who suffer", "I’m oblivious to etiquette and social expectations", "I connect everything that happens to me to a grand, cosmic plan", "I often get lost in my own thoughts and contemplation, becoming oblivious to my surroundings", "I am working on a grand philosophical theory and love sharing my ideas") #Criando o objeto com todas as 8 possíveis características de personalidade
	
	trait <- sample(caract, size= 1) #Sorteando uma das 8 características possíveis

	#Sorteando os ideais para o personagem com esse antecedente. Os ideais tem de ser congruentes com o alinhamento do personagem, por isso eles serão escolhidos dentre os possíveis para os diferentes alinhamentos	
	if(align=="LG") #Se o alinhamento for LG
    {
      ideal <- sample(c("Greater Good: My gifts are meant to be shared with all, not used for my own benefit", "Logic: Emotions must not cloud our sense of what is right and true, or our logical thinking", "Self-Knowledge: If you know yourself, there’s nothing left to know"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem
    }

    if(align=="LN") #Se o alinhamento for LN
    {
      ideal <- sample(c("Logic: Emotions must not cloud our sense of what is right and true, or our logical thinking", "Live and Let Live: Meddling in the affairs of others only causes trouble", "Self-Knowledge: If you know yourself, there’s nothing left to know"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem 
    }  

	if(align=="LE") #Se o alinhamento for LE
    {
      ideal <- sample(c("Logic: Emotions must not cloud our sense of what is right and true, or our logical thinking", "Power: Solitude and contemplation are paths toward mystical or magical power", "Self-Knowledge: If you know yourself, there’s nothing left to know"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem 
    }
	
    if(align=="NG") #Se o alinhamento for NG
    {
      ideal <- sample(c("Live and Let Live: Meddling in the affairs of others only causes trouble", "Greater Good: My gifts are meant to be shared with all, not used for my own benefit", "Self-Knowledge: If you know yourself, there’s nothing left to know"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem
    }	
		
	if(align=="N") #Se o alinhamento for N
    {
      ideal <- sample(c("Live and Let Live: Meddling in the affairs of others only causes trouble", "Self-Knowledge: If you know yourself, there’s nothing left to know"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem
    }

	if(align=="NE") #Se o alinhamento for NE
    {
      ideal <- sample(c("Live and Let Live: Meddling in the affairs of others only causes trouble", "Power: Solitude and contemplation are paths toward mystical or magical power", "Self-Knowledge: If you know yourself, there’s nothing left to know"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem
    }
		
	if(align=="CG") #Se o alinhamento for CG
    {
      ideal <- sample(c("Greater Good: My gifts are meant to be shared with all, not used for my own benefit", "Free Thinking: Inquiry and curiosity are the pillars of progress", "Self-Knowledge: If you know yourself, there’s nothing left to know"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem
    }

    if(align=="CN") #Se o alinhamento for CN
    {
      ideal <- sample(c("Live and Let Live: Meddling in the affairs of others only causes trouble", "Free Thinking: Inquiry and curiosity are the pillars of progress", "Self-Knowledge: If you know yourself, there’s nothing left to know"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem 
    }

	if(align=="CE") #Se o alinhamento for CE
    {
      ideal <- sample(c("Power: Solitude and contemplation are paths toward mystical or magical power", "Free Thinking: Inquiry and curiosity are the pillars of progress", "Self-Knowledge: If you know yourself, there’s nothing left to know"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem 
    }	

	#Sorteando os laços para o personagem com esse antecedente 
	lac <- c("Nothing is more important than the other members of my hermitage, order, or association", "I entered seclusion to hide from the ones who might still be hunting me. I must someday confront them", "I’m still seeking the enlightenment I pursued in my seclusion, and it still eludes me", "I entered seclusion because I loved someone I could not have", "Should my discovery come to light, it could bring ruin to the world", "My isolation gave me great insight into a great evil that only I can destroy") #Criando o objeto com todos os 6 possíveis laços
	bond <- sample(lac, size= 1) #Sorteando um dos 6 laços possíveis	
	
	#Sorteando as falhas de personalidade para o personagem com esse antecedente 
	falhas <- c("Now that I've returned to the world, I enjoy its delights a little too much", "I harbor dark, bloodthirsty thoughts that my isolation and meditation failed to quell", "I am dogmatic in my thoughts and philosophy", "I let my need to win arguments overshadow friendships and harmony", "I’d risk too much to uncover a lost bit of knowledge", "I like keeping secrets and won’t share them with anyone") #Criando o objeto com todas as 6 possíveis falhas de personalidade
	flaw <- sample(falhas, size= 1) #Sorteando uma das 6 possíveis	falhas de personalidade
  }
  
  if(back=="noble") #Se o argumento back estiver preenchido pelo elemento "noble"
  {
    ###Dados que futuramente vão compor o data frame proficiencies
	prof.sk <- c(6, 14) #Determinando as perícias em que é proficiente a partir dos números que as representam
	  
	###Dados que futuramente vão compor o data frame proficiencies
	tool.prof.back <- "one type of gaming set" #Determinando as proficiências com ferramentas
	info.back.ling.choice <- "Choose another language" #Determinando quantas línguas poderão ser escolhidas
	
	###Dados que futuramente vão compor o data frame equipments
	equip.back <- "set of fine clothes, signet ring, scroll of pedigree, purse containing 25 GP" #Determinando os equipamentos concedidos pelo antecedente
	
	###Dados que futuramente vão compor o data frame personality.traits
	#Sorteando as características da personalidade para o personagem com esse antecedente 
	caract <- c("My eloquent flattery makes everyone I talk to feel like the most wonderful and important person in the world", "The common folk love me for my kindness and generosity", "No one could doubt by looking at my regal bearing that I am a cut above the unwashed masses", "I take great pains to always look my best and follow the latest fashions", "I don’t like to get my hands dirty, and I won’t be caught dead in unsuitable accommodations", "Despite my noble birth, I do not place myself above other folk. We all have the same blood", "My favor, once lost, is lost forever", "If you do me an injury, I will crush you, ruin your name, and salt your fields") #Criando o objeto com todas as 8 possíveis características de personalidade
	
	trait <- sample(caract, size= 1) #Sorteando uma das 8 características possíveis

	#Sorteando os ideais para o personagem com esse antecedente. Os ideais tem de ser congruentes com o alinhamento do personagem, por isso eles serão escolhidos dentre os possíveis para os diferentes alinhamentos	
	if(align=="LG") #Se o alinhamento for LG
    {
      ideal <- sample(c("Noble Obligation: It is my duty to protect and care for the people beneath me", "Respect: Respect is due to me because of my position, but all people regardless of station deserve to be treated with dignity", "Responsibility: It is my duty to respect the authority of those above me, just as those below me must respect mine", "Family: Blood runs thicker than water"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem
    }

    if(align=="LN") #Se o alinhamento for LN
    {
      ideal <- sample(c("Responsibility: It is my duty to respect the authority of those above me, just as those below me must respect mine", "Family: Blood runs thicker than water"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem 
    }  

	if(align=="LE") #Se o alinhamento for LE
    {
      ideal <- sample(c("Responsibility: It is my duty to respect the authority of those above me, just as those below me must respect mine", "Power: If I can attain more power, no one will tell me what to do", "Family: Blood runs thicker than water"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem 
    }
	
    if(align=="NG") #Se o alinhamento for NG
    {
      ideal <- sample(c("Noble Obligation: It is my duty to protect and care for the people beneath me", "Respect: Respect is due to me because of my position, but all people regardless of station deserve to be treated with dignity", "Family: Blood runs thicker than water"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem
    }	
		
	if(align=="N") #Se o alinhamento for N
    {
      ideal <- "Family: Blood runs thicker than water" #Determinando o elemento condizente com o alinhamento escolhido para determinar os ideais do personagem
    }

	if(align=="NE") #Se o alinhamento for NE
    {
      ideal <- sample(c("Power: If I can attain more power, no one will tell me what to do", "Family: Blood runs thicker than water"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem
    }
		
	if(align=="CG") #Se o alinhamento for CG
    {
      ideal <- sample(c("Independence: I must prove that I can handle myself without the coddling of my family", "Noble Obligation: It is my duty to protect and care for the people beneath me", "Respect: Respect is due to me because of my position, but all people regardless of station deserve to be treated with dignity", "Family: Blood runs thicker than water"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem
    }

    if(align=="CN") #Se o alinhamento for CN
    {
      ideal <- sample(c("Independence: I must prove that I can handle myself without the coddling of my family", "Family: Blood runs thicker than water"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem 
    }

	if(align=="CE") #Se o alinhamento for CE
    {
      ideal <- sample(c("Power: If I can attain more power, no one will tell me what to do", "Independence: I must prove that I can handle myself without the coddling of my family", "Family: Blood runs thicker than water"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem 
    }	

	#Sorteando os laços para o personagem com esse antecedente 
	lac <- c("I will face any challenge to win the approval of my family", "My house’s alliance with another noble family must be sustained at all costs", "Nothing is more important than the other members of my family", "I am in love with the heir of a family that my family despises", "My loyalty to my sovereign is unwavering", "The common folk must see me as a hero of the people") #Criando o objeto com todos os 6 possíveis laços
	bond <- sample(lac, size= 1) #Sorteando um dos 6 laços possíveis	
	
	#Sorteando as falhas de personalidade para o personagem com esse antecedente 
	falhas <- c("I secretly believe that everyone is beneath me", "I hide a truly scandalous secret that could ruin my family forever", "I too often hear veiled insults and threats in every word addressed to me, and I’m quick to anger", "I have an insatiable desire for carnal pleasures", "In fact, the world does revolve around me", "By my words and actions, I often bring shame to my family") #Criando o objeto com todas as 6 possíveis falhas de personalidade
	flaw <- sample(falhas, size= 1) #Sorteando uma das 6 possíveis	falhas de personalidade
  }  
  
  if(back=="outlander") #Se o argumento back estiver preenchido pelo elemento "outlander"
  {
    ###Dados que futuramente vão compor o data frame proficiencies
	prof.sk <- c(4, 18) #Determinando as perícias em que é proficiente a partir dos números que as representam
	  
	###Dados que futuramente vão compor o data frame proficiencies
	tool.prof.back <- "one type of musical instrument" #Determinando as proficiências com ferramentas
	info.back.ling.choice <- "Choose another language" #Determinando quantas línguas poderão ser escolhidas
	
	###Dados que futuramente vão compor o data frame equipments
	equip.back <- "staff, hunting trap, trophy from an animal you killed, set of traveler's clothes, pouch containing 10 GP" #Determinando os equipamentos concedidos pelo antecedente
	
	###Dados que futuramente vão compor o data frame personality.traits
	#Sorteando as características da personalidade para o personagem com esse antecedente 
	caract <- c("I’m driven by a wanderlust that led me away from home", "I watch over my friends as if they were a litter of newborn pups", "I once ran twenty-five miles without stopping to warn to my clan of an approaching orc horde. I’d do it again if I had to", "I have a lesson for every situation, drawn from observing nature", "I place no stock in wealthy or well-mannered folk. Money and manners won’t save you from a hungry owlbear", "I’m always picking things up, absently fiddling with them, and sometimes accidentally breaking them", "I feel far more comfortable around animals than people", "I was, in fact, raised by wolves") #Criando o objeto com todas as 8 possíveis características de personalidade
	
	trait <- sample(caract, size= 1) #Sorteando uma das 8 características possíveis

	#Sorteando os ideais para o personagem com esse antecedente. Os ideais tem de ser congruentes com o alinhamento do personagem, por isso eles serão escolhidos dentre os possíveis para os diferentes alinhamentos	
	if(align=="LG") #Se o alinhamento for LG
    {
      ideal <- sample(c("Greater Good: It is each person’s responsibility to make the most happiness for the whole tribe", "Honor: If I dishonor myself, I dishonor my whole clan", "Glory: I must earn glory in battle, for myself and my clan"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem
    }

    if(align=="LN") #Se o alinhamento for LN
    {
      ideal <- sample(c("Nature: The natural world is more important than all the constructs of civilization", "Honor: If I dishonor myself, I dishonor my whole clan", "Glory: I must earn glory in battle, for myself and my clan"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem 
    }  

	if(align=="LE") #Se o alinhamento for LE
    {
      ideal <- sample(c("Might: The strongest are meant to rule", "Honor: If I dishonor myself, I dishonor my whole clan", "Glory: I must earn glory in battle, for myself and my clan"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem 
    }
	
    if(align=="NG") #Se o alinhamento for NG
    {
      ideal <- sample(c("Greater Good: It is each person’s responsibility to make the most happiness for the whole tribe", "Nature: The natural world is more important than all the constructs of civilization", "Glory: I must earn glory in battle, for myself and my clan"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem
    }	
		
	if(align=="N") #Se o alinhamento for N
    {
      ideal <- sample(c("Nature: The natural world is more important than all the constructs of civilization", "Glory: I must earn glory in battle, for myself and my clan"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem
    }

	if(align=="NE") #Se o alinhamento for NE
    {
      ideal <- sample(c("Might: The strongest are meant to rule", "Nature: The natural world is more important than all the constructs of civilization", "Glory: I must earn glory in battle, for myself and my clan"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem
    }
		
	if(align=="CG") #Se o alinhamento for CG
    {
      ideal <- sample(c("Greater Good: It is each person’s responsibility to make the most happiness for the whole tribe", "Change: Life is like the seasons, in constant change, and we must change with it", "Glory: I must earn glory in battle, for myself and my clan"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem
    }

    if(align=="CN") #Se o alinhamento for CN
    {
      ideal <- sample(c("Nature: The natural world is more important than all the constructs of civilization", "Change: Life is like the seasons, in constant change, and we must change with it", "Glory: I must earn glory in battle, for myself and my clan"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem 
    }

	if(align=="CE") #Se o alinhamento for CE
    {
      ideal <- sample(c("Might: The strongest are meant to rule", "Change: Life is like the seasons, in constant change, and we must change with it", "Glory: I must earn glory in battle, for myself and my clan"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem 
    }	

	#Sorteando os laços para o personagem com esse antecedente 
	lac <- c("My family, clan, or tribe is the most important thing in my life, even when they are far from me", "An injury to the unspoiled wilderness of my home is an injury to me", "I will bring terrible wrath down on the evildoers who destroyed my homeland", "I am the last of my tribe, and it is up to me to ensure their names enter legend", "I suffer awful visions of a coming disaster and will do anything to prevent it", "It is my duty to provide children to sustain my tribe") #Criando o objeto com todos os 6 possíveis laços
	bond <- sample(lac, size= 1) #Sorteando um dos 6 laços possíveis	
	
	#Sorteando as falhas de personalidade para o personagem com esse antecedente 
	falhas <- c("I am too enamored of ale, wine, and other intoxicants", "There’s no room for caution in a life lived to the fullest", "I remember every insult I’ve received and nurse a silent resentment toward anyone who’s ever wronged me", "I am slow to trust members of other races, tribes, and societies", "Violence is my answer to almost any challenge", "Don’t expect me to save those who can’t save themselves. It is nature’s way that the strong thrive and the weak perish") #Criando o objeto com todas as 6 possíveis falhas de personalidade
	flaw <- sample(falhas, size= 1) #Sorteando uma das 6 possíveis	falhas de personalidade
  }
  
  if(back=="sage") #Se o argumento back estiver preenchido pelo elemento "sage"
  {
    ###Dados que futuramente vão compor o data frame proficiencies
	prof.sk <- c(3, 6) #Determinando as perícias em que é proficiente a partir dos números que as representam
	  
	###Dados que futuramente vão compor o data frame proficiencies
	info.back.ling.choice <- "Choose another two languages" #Determinando quantas línguas poderão ser escolhidas
	
	###Dados que futuramente vão compor o data frame equipments
	equip.back <- "bottle of black ink, quill, small knife, letter from a dead colleague posing a question you have not yet been able to answer, set of common clothes, pouch containing 10 GP" #Determinando os equipamentos concedidos pelo antecedente
	
	###Dados que futuramente vão compor o data frame personality.traits
	#Sorteando as características da personalidade para o personagem com esse antecedente 
	caract <- c("I use polysyllabic words that convey the impression of great erudition", "I've read every book in the world’s greatest libraries—or I like to boast that I have", "I'm used to helping out those who aren’t as smart as I am, and I patiently explain anything and everything to others", "There’s nothing I like more than a good mystery", "I’m willing to listen to every side of an argument before I make my own judgment", "I . . . speak . . . slowly . . . when talking . . . to idiots, . . . which . . . almost . . . everyone . . . is . . . compared . . . to me", "I am horribly, horribly awkward in social situations", "I’m convinced that people are always trying to steal my secrets") #Criando o objeto com todas as 8 possíveis características de personalidade
	
	trait <- sample(caract, size= 1) #Sorteando uma das 8 características possíveis

	#Sorteando os ideais para o personagem com esse antecedente. Os ideais tem de ser congruentes com o alinhamento do personagem, por isso eles serão escolhidos dentre os possíveis para os diferentes alinhamentos	
	if(align=="LG") #Se o alinhamento for LG
    {
      ideal <- sample(c("Beauty: What is beautiful points us beyond itself toward what is true", "Logic: Emotions must not cloud our logical thinking", "Self-Improvement: The goal of a life of study is the betterment of oneself"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem
    }

    if(align=="LN") #Se o alinhamento for LN
    {
      ideal <- sample(c("Knowledge: The path to power and self-improvement is through knowledge", "Logic: Emotions must not cloud our logical thinking", "Self-Improvement: The goal of a life of study is the betterment of oneself"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem 
    }  

	if(align=="LE") #Se o alinhamento for LE
    {
      ideal <- sample(c("Power: Knowledge is the path to power and domination","Logic: Emotions must not cloud our logical thinking", "Self-Improvement: The goal of a life of study is the betterment of oneself"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem 
    }
	
    if(align=="NG") #Se o alinhamento for NG
    {
      ideal <- sample(c("Beauty: What is beautiful points us beyond itself toward what is true", "Knowledge: The path to power and self-improvement is through knowledge", "Self-Improvement: The goal of a life of study is the betterment of oneself"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem
    }	
		
	if(align=="N") #Se o alinhamento for N
    {
      ideal <- sample(c("Knowledge: The path to power and self-improvement is through knowledge", "Self-Improvement: The goal of a life of study is the betterment of oneself"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem
    }

	if(align=="NE") #Se o alinhamento for NE
    {
      ideal <- sample(c("Power: Knowledge is the path to power and domination", "Knowledge: The path to power and self-improvement is through knowledge", "Self-Improvement: The goal of a life of study is the betterment of oneself"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem
    }
		
	if(align=="CG") #Se o alinhamento for CG
    {
      ideal <- sample(c("Beauty: What is beautiful points us beyond itself toward what is true", "No Limits: Nothing should fetter the infinite possibility inherent in all existence", "Self-Improvement: The goal of a life of study is the betterment of oneself"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem
    }

    if(align=="CN") #Se o alinhamento for CN
    {
      ideal <- sample(c("Knowledge: The path to power and self-improvement is through knowledge", "No Limits: Nothing should fetter the infinite possibility inherent in all existence", "Self-Improvement: The goal of a life of study is the betterment of oneself"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem 
    }

	if(align=="CE") #Se o alinhamento for CE
    {
      ideal <- sample(c("Power: Knowledge is the path to power and domination", "No Limits: Nothing should fetter the infinite possibility inherent in all existence", "Self-Improvement: The goal of a life of study is the betterment of oneself"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem 
    }	

	#Sorteando os laços para o personagem com esse antecedente 
	lac <- c("It is my duty to protect my students", "I have an ancient text that holds terrible secrets that must not fall into the wrong hands", "I work to preserve a library, university, scriptorium, or monastery", "My life’s work is a series of tomes related to a specific field of lore", "I've been searching my whole life for the answer to a certain question", "I sold my soul for knowledge. I hope to do great deeds and win it back") #Criando o objeto com todos os 6 possíveis laços
	bond <- sample(lac, size= 1) #Sorteando um dos 6 laços possíveis	
	
	#Sorteando as falhas de personalidade para o personagem com esse antecedente 
	falhas <- c("I am easily distracted by the promise of information", "Most people scream and run when they see a demon. I stop and take notes on its anatomy", "Unlocking an ancient mystery is worth the price of a civilization", "I overlook obvious solutions in favor of complicated ones", "I speak without really thinking through my words, invariably insulting others", "I can’t keep a secret to save my life, or anyone else’s") #Criando o objeto com todas as 6 possíveis falhas de personalidade
	flaw <- sample(falhas, size= 1) #Sorteando uma das 6 possíveis	falhas de personalidade
  }
  
  if(back=="sailor") #Se o argumento back estiver preenchido pelo elemento "sailor"
  {
    ###Dados que futuramente vão compor o data frame proficiencies
	prof.sk <- c(4, 12) #Determinando as perícias em que é proficiente a partir dos números que as representam
	  
	###Dados que futuramente vão compor o data frame proficiencies
	tool.prof.back <- "navigator's tools, water vehicles" #Determinando as proficiências com ferramentas
	
	###Dados que futuramente vão compor o data frame equipments
	equip.back <- "belaying pin (club), 50 feet of silk rope, lucky charm such as a rabbit foot or a small stone with a hole in the center (or roll for a random trinket), set of common clothes, pouch containing 10 GP" #Determinando os equipamentos concedidos pelo antecedente
	
	###Dados que futuramente vão compor o data frame personality.traits
	#Sorteando as características da personalidade para o personagem com esse antecedente 
	caract <- c("My friends know they can rely on me, no matter what", "I work hard so that I can play hard when the work is done", "I enjoy sailing into new ports and making new friends over a flagon of ale", "I stretch the truth for the sake of a good story", "To me, a tavern brawl is a nice way to get to know a new city", "I never pass up a friendly wager", "My language is as foul as an otyugh nest", "I like a job well done, especially if I can convince someone else to do it") #Criando o objeto com todas as 8 possíveis características de personalidade
	
	trait <- sample(caract, size= 1) #Sorteando uma das 8 características possíveis

	#Sorteando os ideais para o personagem com esse antecedente. Os ideais tem de ser congruentes com o alinhamento do personagem, por isso eles serão escolhidos dentre os possíveis para os diferentes alinhamentos	
	if(align=="LG") #Se o alinhamento for LG
    {
      ideal <- sample(c("Respect: The thing that keeps a ship together is mutual respect between captain and crew", "Fairness: We all do the work, so we all share in the rewards", "Aspiration: Someday I’ll own my own ship and chart my own destiny"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem
    }

    if(align=="LN") #Se o alinhamento for LN
    {
      ideal <- sample(c("People: I’m committed to my crewmates, not to ideals", "Fairness: We all do the work, so we all share in the rewards", "Aspiration: Someday I’ll own my own ship and chart my own destiny"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem 
    }  

	if(align=="LE") #Se o alinhamento for LE
    {
      ideal <- sample(c("Mastery: I’m a predator, and the other ships on the sea are my prey", "Fairness: We all do the work, so we all share in the rewards", "Aspiration: Someday I’ll own my own ship and chart my own destiny"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem 
    }
	
    if(align=="NG") #Se o alinhamento for NG
    {
      ideal <- sample(c("Respect: The thing that keeps a ship together is mutual respect between captain and crew", "People: I’m committed to my crewmates, not to ideals", "Aspiration: Someday I’ll own my own ship and chart my own destiny"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem
    }	
		
	if(align=="N") #Se o alinhamento for N
    {
      ideal <- sample(c("People: I’m committed to my crewmates, not to ideals", "Aspiration: Someday I’ll own my own ship and chart my own destiny"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem
    }

	if(align=="NE") #Se o alinhamento for NE
    {
      ideal <- sample(c("Mastery: I’m a predator, and the other ships on the sea are my prey", "People: I’m committed to my crewmates, not to ideals", "Aspiration: Someday I’ll own my own ship and chart my own destiny"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem
    }
		
	if(align=="CG") #Se o alinhamento for CG
    {
      ideal <- sample(c("Respect: The thing that keeps a ship together is mutual respect between captain and crew", "Freedom: The sea is freedom—the freedom to go anywhere and do anything", "Aspiration: Someday I’ll own my own ship and chart my own destiny"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem
    }

    if(align=="CN") #Se o alinhamento for CN
    {
      ideal <- sample(c("People: I’m committed to my crewmates, not to ideals", "Freedom: The sea is freedom—the freedom to go anywhere and do anything", "Aspiration: Someday I’ll own my own ship and chart my own destiny"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem 
    }

	if(align=="CE") #Se o alinhamento for CE
    {
      ideal <- sample(c("Mastery: I’m a predator, and the other ships on the sea are my prey", "Freedom: The sea is freedom—the freedom to go anywhere and do anything", "Aspiration: Someday I’ll own my own ship and chart my own destiny"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem 
    }	

	#Sorteando os laços para o personagem com esse antecedente 
	lac <- c("I’m loyal to my captain first, everything else second", "The ship is most important—crewmates and captains come and go", "I’ll always remember my first ship", "In a harbor town, I have a paramour whose eyes nearly stole me from the sea", "I was cheated out of my fair share of the profits, and I want to get my due", "Ruthless pirates murdered my captain and crewmates, plundered our ship, and left me to die. Vengeance will be mine") #Criando o objeto com todos os 6 possíveis laços
	bond <- sample(lac, size= 1) #Sorteando um dos 6 laços possíveis	
	
	#Sorteando as falhas de personalidade para o personagem com esse antecedente 
	falhas <- c("I follow orders, even if I think they’re wrong", "I’ll say anything to avoid having to do extra work", "Once someone questions my courage, I never back down no matter how dangerous the situation", "Once I start drinking, it’s hard for me to stop", "I can’t help but pocket loose coins and other trinkets I come across", "My pride will probably lead to my destruction") #Criando o objeto com todas as 6 possíveis falhas de personalidade
	flaw <- sample(falhas, size= 1) #Sorteando uma das 6 possíveis	falhas de personalidade
  }
  
  if(back=="soldier") #Se o argumento back estiver preenchido pelo elemento "soldier"
  {
    ###Dados que futuramente vão compor o data frame proficiencies
	prof.sk <- c(4, 8) #Determinando as perícias em que é proficiente a partir dos números que as representam
	  
	###Dados que futuramente vão compor o data frame proficiencies
	tool.prof.back <- "one type of gaming set, land vehicles" #Determinando as proficiências com ferramentas
	
	###Dados que futuramente vão compor o data frame equipments
	equip.back <- "insignia of rank, trophy taken from a fallen enemy (a dagger, broken blade or a piece of banner), set of bone dice or deck of cards, set of common clothes, pouch containing 10 GP" #Determinando os equipamentos concedidos pelo antecedente
	
	###Dados que futuramente vão compor o data frame personality.traits
	#Sorteando as características da personalidade para o personagem com esse antecedente 
	caract <- c("I'm always polite and respectful", "I’m haunted by memories of war. I can’t get the images of violence out of my mind", "I’ve lost too many friends, and I’m slow to make new ones", "I'm full of inspiring and cautionary tales from my military experience relevant to almost every combat situation", "I can stare down a hell hound without flinching", "I enjoy being strong and like breaking things", "I have a crude sense of humor", "I face problems head-on. A simple, direct solution is the best path to success") #Criando o objeto com todas as 8 possíveis características de personalidade
	
	trait <- sample(caract, size= 1) #Sorteando uma das 8 características possíveis

	#Sorteando os ideais para o personagem com esse antecedente. Os ideais tem de ser congruentes com o alinhamento do personagem, por isso eles serão escolhidos dentre os possíveis para os diferentes alinhamentos	
	if(align=="LG") #Se o alinhamento for LG
    {
      ideal <- sample(c("Greater Good: Our lot is to lay down our lives in defense of others", "Responsibility: I do what I must and obey just authority", "Nation: My city, nation, or people are all that matter"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem
    }

    if(align=="LN") #Se o alinhamento for LN
    {
      ideal <- sample(c("Live and Let Live: Ideals aren’t worth killing over or going to war for", "Responsibility: I do what I must and obey just authority", "Nation: My city, nation, or people are all that matter"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem 
    }  

	if(align=="LE") #Se o alinhamento for LE
    {
      ideal <- sample(c("Might: In life as in war, the stronger force wins", "Responsibility: I do what I must and obey just authority", "Nation: My city, nation, or people are all that matter"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem 
    }
	
    if(align=="NG") #Se o alinhamento for NG
    {
      ideal <- sample(c("Greater Good: Our lot is to lay down our lives in defense of others", "Live and Let Live: Ideals aren’t worth killing over or going to war for", "Nation: My city, nation, or people are all that matter"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem
    }	
		
	if(align=="N") #Se o alinhamento for N
    {
      ideal <- sample(c("Live and Let Live: Ideals aren’t worth killing over or going to war for", "Nation: My city, nation, or people are all that matter"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem
    }

	if(align=="NE") #Se o alinhamento for NE
    {
      ideal <- sample(c("Might: In life as in war, the stronger force wins", "Live and Let Live: Ideals aren’t worth killing over or going to war for", "Nation: My city, nation, or people are all that matter"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem
    }
		
	if(align=="CG") #Se o alinhamento for CG
    {
      ideal <- sample(c("Greater Good: Our lot is to lay down our lives in defense of others", "Independence: When people follow orders blindly, they embrace a kind of tyranny", "Nation: My city, nation, or people are all that matter"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem
    }

    if(align=="CN") #Se o alinhamento for CN
    {
      ideal <- sample(c("Live and Let Live: Ideals aren’t worth killing over or going to war for", "Independence: When people follow orders blindly, they embrace a kind of tyranny", "Nation: My city, nation, or people are all that matter"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem 
    }

	if(align=="CE") #Se o alinhamento for CE
    {
      ideal <- sample(c("Might: In life as in war, the stronger force wins", "Independence: When people follow orders blindly, they embrace a kind of tyranny", "Nation: My city, nation, or people are all that matter"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem 
    }	

	#Sorteando os laços para o personagem com esse antecedente 
	lac <- c("I would still lay down my life for the people I served with", "Someone saved my life on the battlefield. To this day, I will never leave a friend behind", "My honor is my life", "I’ll never forget the crushing defeat my company suffered or the enemies who dealt it", "Those who fight beside me are those worth dying for", "I fight for those who cannot fight for themselves") #Criando o objeto com todos os 6 possíveis laços
	bond <- sample(lac, size= 1) #Sorteando um dos 6 laços possíveis	
	
	#Sorteando as falhas de personalidade para o personagem com esse antecedente 
	falhas <- c("The monstrous enemy we faced in battle still leaves me quivering with fear", "I have little respect for anyone who is not a proven warrior", "I made a terrible mistake in battle that cost many lives—and I would do anything to keep that mistake secret", "My hatred of my enemies is blind and unreasoning", "I obey the law, even if the law causes misery", "I’d rather eat my armor than admit when I’m wrong") #Criando o objeto com todas as 6 possíveis falhas de personalidade
	flaw <- sample(falhas, size= 1) #Sorteando uma das 6 possíveis	falhas de personalidade
  }
  
  if(back=="urchin") #Se o argumento back estiver preenchido pelo elemento "urchin"
  {
    ###Dados que futuramente vão compor o data frame proficiencies
	prof.sk <- c(16, 17) #Determinando as perícias em que é proficiente a partir dos números que as representam
	  
	###Dados que futuramente vão compor o data frame proficiencies
	tool.prof.back <- "disguise kit, thieve's tools" #Determinando as proficiências com ferramentas
	
	###Dados que futuramente vão compor o data frame equipments
	equip.back <- "small knife, map of the city you grew up in, pet mouse, token to remember your parents by, set of common clothes, pouch containing 10 GP" #Determinando os equipamentos concedidos pelo antecedente
	
	###Dados que futuramente vão compor o data frame personality.traits
	#Sorteando as características da personalidade para o personagem com esse antecedente 
	caract <- c("I hide scraps of food and trinkets away in my pockets", "I ask a lot of questions", "I like to squeeze into small places where no one else can get to me", "I sleep with my back to a wall or tree, with everything I own wrapped in a bundle in my arms", "I eat like a pig and have bad manners", "I think anyone who’s nice to me is hiding evil intent", "I don’t like to bathe", "I bluntly say what other people are hinting at or hiding") #Criando o objeto com todas as 8 possíveis características de personalidade
	
	trait <- sample(caract, size= 1) #Sorteando uma das 8 características possíveis

	#Sorteando os ideais para o personagem com esse antecedente. Os ideais tem de ser congruentes com o alinhamento do personagem, por isso eles serão escolhidos dentre os possíveis para os diferentes alinhamentos	
	if(align=="LG") #Se o alinhamento for LG
    {
      ideal <- sample(c("Respect: All people, rich or poor, deserve respect", "Community: We have to take care of each other, because no one else is going to do it", "Aspiration: I'm going to prove that I'm worthy of a better life"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem
    }

    if(align=="LN") #Se o alinhamento for LN
    {
      ideal <- sample(c("People: I help the people who help me—that’s what keeps us alive", "Community: We have to take care of each other, because no one else is going to do it", "Aspiration: I'm going to prove that I'm worthy of a better life"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem 
    }  

	if(align=="LE") #Se o alinhamento for LE
    {
      ideal <- sample(c("Retribution: The rich need to be shown what life and death are like in the gutters", "Community: We have to take care of each other, because no one else is going to do it", "Aspiration: I'm going to prove that I'm worthy of a better life"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem 
    }
	
    if(align=="NG") #Se o alinhamento for NG
    {
      ideal <- sample(c("Respect: All people, rich or poor, deserve respect", "People: I help the people who help me—that’s what keeps us alive", "Aspiration: I'm going to prove that I'm worthy of a better life"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem
    }	
		
	if(align=="N") #Se o alinhamento for N
    {
      ideal <- sample(c("People: I help the people who help me—that’s what keeps us alive", "Aspiration: I'm going to prove that I'm worthy of a better life"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem
    }

	if(align=="NE") #Se o alinhamento for NE
    {
      ideal <- sample(c("Retribution: The rich need to be shown what life and death are like in the gutters", "People: I help the people who help me—that’s what keeps us alive", "Aspiration: I'm going to prove that I'm worthy of a better life"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem
    }
		
	if(align=="CG") #Se o alinhamento for CG
    {
      ideal <- sample(c("Respect: All people, rich or poor, deserve respect", "Change: The low are lifted up, and the high and mighty are brought down. Change is the nature of things", "Aspiration: I'm going to prove that I'm worthy of a better life"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem
    }

    if(align=="CN") #Se o alinhamento for CN
    {
      ideal <- sample(c("People: I help the people who help me—that’s what keeps us alive", "Change: The low are lifted up, and the high and mighty are brought down. Change is the nature of things", "Aspiration: I'm going to prove that I'm worthy of a better life"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem 
    }

	if(align=="CE") #Se o alinhamento for CE
    {
      ideal <- sample(c("Retribution: The rich need to be shown what life and death are like in the gutters", "Change: The low are lifted up, and the high and mighty are brought down. Change is the nature of things", "Aspiration: I'm going to prove that I'm worthy of a better life"), size= 1) #Fazendo o sorteio dentre os elementos condizentes com o alinhamento escolhido para determinar os ideais do personagem 
    }	

	#Sorteando os laços para o personagem com esse antecedente 
	lac <- c("My town or city is my home, and I’ll fight to defend it", "I sponsor an orphanage to keep others from enduring what I was forced to endure", "I owe my survival to another urchin who taught me to live on the streets", "I owe a debt I can never repay to the person who took pity on me", "I escaped my life of poverty by robbing an important person, and I’m wanted for it", "No one else should have to endure the hardships I’ve been through") #Criando o objeto com todos os 6 possíveis laços
	bond <- sample(lac, size= 1) #Sorteando um dos 6 laços possíveis	
	
	#Sorteando as falhas de personalidade para o personagem com esse antecedente 
	falhas <- c("If I'm outnumbered, I will run away from a fight", "Gold seems like a lot of money to me, and I’ll do just about anything for more of it", "I will never fully trust anyone other than myself", "I’d rather kill someone in their sleep than fight fair", "It’s not stealing if I need it more than someone else", "People who can't take care of themselves get what they deserve") #Criando o objeto com todas as 6 possíveis falhas de personalidade
	flaw <- sample(falhas, size= 1) #Sorteando uma das 6 possíveis	falhas de personalidade
  }
 
  ################################################################################
  #ord = Ordem dos atributos, do que terá o maior valor para o menor em sequência#
  ################################################################################
  
  ###Criando o data frame ability.score, que fará parte do output da função, para começar a preenchê-lo, adicionando os valores dos atributos
  ability.score <- as.data.frame(atr.race) #Criando o data frame e adicionando os atributos
  
  ability.score <- cbind(ability.score, mod) #Acrescentando os modificadores
  
  #Nomeando linhas e colunas
  rownames(ability.score) <- ord #Pegando o vetor com os atributos vindo do argumento "ord" (no formato ord <- c("Str", "Con", "Dex", "Cha", "Int", "Wis")) e usando-o para nomear as linhas do data frame atributos
  colnames(ability.score) <- c("Abilities", "Modifiers") #Adicionando os nomes das colunas ao data frame ability.score
  
  ###########################################################################
  #Criando e preenchendo os demais objetos que vão compor o output da função#
  ###########################################################################
  
  ###Para criar o data frame info
  info <- as.data.frame(info.race, stringsAsFactors = FALSE) #Criando o data frame a partir de seu primeiro elemento, o objeto info.race e evitando que ele considere os elementos dos objetos como fatores para que não haja problemas ao usar o rbind(). Solução retirada de: https://stackoverflow.com/questions/16819956/warning-message-in-invalid-factor-level-na-generated
  
  #Acrescentando as outras linhas que vão compor o data frame:
  info <- rbind(info, info.race.ling) #Primeiramente o objeto info.race.ling
  if(exists("info.race.ling.choice")) #Se o objeto info.race.ling.choice tiver sido criado
  {
    info <- rbind(info, info.race.ling.choice)#Acrescentar o objeto info.race.ling.choice ao data frame
  }
  
  if(exists("info.back.ling.choice")) #Se o objeto info.back.ling.choice tiver sido criado
  {
    info <- rbind(info, info.back.ling.choice)#Acrescentar o objeto info.back.ling.choice ao data frame
  }
  
  #Removendo o nome da coluna
  colnames(info) <- "" #Igualando o nome da coluna a "" para ficar em branco
  #Dando nome para as linhas
  if(!exists("info.race.ling.choice") && !exists("info.back.ling.choice")) #Se os objetos vindos da raça e dos antecedentes estiverem ausentes
  {
    rownames(info) <- c("Traits:", "Languages:") #Nomeando apenas as duas primeiras linhas
  } 
  
  if(exists("info.race.ling.choice") && !exists("info.back.ling.choice")) #Se o objeto vindo da raça estiver presente, mas o objeto vindo dos antecedentes estiver ausente
  {
    rownames(info) <- c("Traits:", "Languages:", "Languages-race:") #Nomeando as três linhas correspondentes
  }
  
  if(!exists("info.race.ling.choice") && exists("info.back.ling.choice")) #Se o objeto vindo da raça estiver ausente, mas o objeto vindo dos antecedentes estiver presente
  {
    rownames(info) <- c("Traits:", "Languages:", "Languages-background:") #Nomeando as três linhas correspondentes
  }
  
  if(exists("info.race.ling.choice") && exists("info.back.ling.choice")) #Se os objetos vindos da raça e dos antecedentes estiverem presentes
  {
    rownames(info) <- c("Traits:", "Languages:", "Languages-race:", "Languages-background:") #Nomeando todas as linhas
  }
  
  ###Para criar o data frame proficiencies
  proficiencies <- as.data.frame(armor.prof, stringsAsFactors = FALSE) #Criando o data frame a partir de seu primeiro elemento, o objeto armor.prof, e evitando que ele considere os elementos dos objetos como fatores para que não haja problemas ao usar o rbind()
  
  #Acrescentando as outras linhas que vão compor o data frame:
  proficiencies <- rbind(proficiencies, weap.prof) #Primeiramente o objeto weap.prof
  if(exists("prof.weap.dwarf")) #Se o objeto prof.weap.dwarf tiver sido criado
  {
    proficiencies <- rbind(proficiencies, prof.weap.dwarf)#Acrescentar o objeto prof.weap.dwarf ao data frame
  }
  
  proficiencies <- rbind(proficiencies, tool.prof) #Agora o objeto tool.prof
  if(exists("tool.prof.back")) #Se o objeto tool.prof.back tiver sido criado
  {
    proficiencies <- rbind(proficiencies, tool.prof.back)#Acrescentar o objeto tool.prof.back ao data frame
  }
  
  if(exists("prof.tools.dw.choice")) #Se o objeto prof.tools.dw.choice tiver sido criado
  {
    proficiencies <- rbind(proficiencies, prof.tools.dw.choice)#Acrescentar o objeto prof.tools.dw.choice ao data frame
  }
  
  #Removendo o nome da coluna
  colnames(proficiencies) <- "" #Igualando o nome da coluna a "" para ficar em branco
  
  #Dando nome para as linhas
  #Como os objetos prof.weap.dwarf e prof.tools.dw.choice vão sempre aparecer juntos, uma vez que só são criados se a raça "dwarf" for escolhida, eu farei os testes considerando esse fato
  if(!exists("prof.weap.dwarf") && !exists("tool.prof.back") && !exists("prof.tools.dw.choice")) #Se os objetos adicionais estiverem ausentes
  {
    rownames(proficiencies) <- c("Armor:", "Weapons:", "Tools:") #Nomeando as três primeiras linhas
  }
  
  if(!exists("prof.weap.dwarf") && exists("tool.prof.back") && !exists("prof.tools.dw.choice")) #Se apenas o objeto tool.prof.back estiver presente
  {
    rownames(proficiencies) <- c("Armor:", "Weapons:", "Tools:", "Tools-background:") #Nomeando as quatro linhas correspondentes
  } 
  
  if(exists("prof.weap.dwarf") && !exists("tool.prof.back") && exists("prof.tools.dw.choice")) #Se os objetos prof.weap.dwarf e tool.prof.back estiverem presentes
  {
    rownames(proficiencies) <- c("Armor:", "Weapons:", "Weapons-dwarf:", "Tools:", "Tools-dwarf:") #Nomeando as cinco linhas correspondentes
  }
  
  if(exists("prof.weap.dwarf") && exists("tool.prof.back") && exists("prof.tools.dw.choice")) #Se todos os objetos adicionais estiverem presentes
  {
    rownames(proficiencies) <- c("Armor:", "Weapons:", "Weapons-dwarf:", "Tools:", "Tools-background:", "Tools-dwarf:") #Nomeando as seis linhas correspondentes
  }  
  
  ###Para criar o data frame skills
  #Primeiro é necessário determinar os valores base das 18 perícias a partir dos modificadores dos atributos
  skill.valores <- rep(NA, times=18) #Fazendo um vetor para receber os valores das perícias
  
  #Definindo o valor do modificador para cada atributo
  #Identificando a posição de cada atributo
  str.num <- match("Str", ord) #Vendo qual a posição dentro do vetor que compõe o argumento ord que corresponde ao atributo "Str"
  dex.num <- match("Dex", ord) #Vendo qual a posição dentro do vetor que compõe o argumento ord que corresponde ao atributo "Dex"
  con.num <- match("Con", ord) #Vendo qual a posição dentro do vetor que compõe o argumento ord que corresponde ao atributo "Con"
  int.num <- match("Int", ord) #Vendo qual a posição dentro do vetor que compõe o argumento ord que corresponde ao atributo "Int"
  wis.num <- match("Wis", ord) #Vendo qual a posição dentro do vetor que compõe o argumento ord que corresponde ao atributo "Wis"
  cha.num <- match("Cha", ord) #Vendo qual a posição dentro do vetor que compõe o argumento ord que corresponde ao atributo "Cha"
  
  #De acordo com sua posição, acrescentando o valor do modificador para cada perícia (de 1 a 18)
  skill.valores[1] <- as.numeric(mod[dex.num]) #Adicionando o modificador de destreza ao objeto
  skill.valores[2] <- as.numeric(mod[wis.num]) #Adicionando o modificador de sabedoria ao objeto
  skill.valores[3] <- as.numeric(mod[int.num]) #Adicionando o modificador de inteligência ao objeto
  skill.valores[4] <- as.numeric(mod[str.num]) #Adicionando o modificador de força ao objeto
  skill.valores[5] <- as.numeric(mod[cha.num]) #Adicionando o modificador de carisma ao objeto
  skill.valores[6] <- as.numeric(mod[int.num]) #Adicionando o modificador de inteligência ao objeto
  skill.valores[7] <- as.numeric(mod[wis.num]) #Adicionando o modificador de sabedoria ao objeto
  skill.valores[8] <- as.numeric(mod[cha.num]) #Adicionando o modificador de carisma ao objeto
  skill.valores[9] <- as.numeric(mod[int.num]) #Adicionando o modificador de inteligência ao objeto
  skill.valores[10] <- as.numeric(mod[wis.num]) #Adicionando o modificador de sabedoria ao objeto
  skill.valores[11] <- as.numeric(mod[int.num]) #Adicionando o modificador de inteligência ao objeto
  skill.valores[12] <- as.numeric(mod[wis.num]) #Adicionando o modificador de sabedoria ao objeto
  skill.valores[13] <- as.numeric(mod[cha.num]) #Adicionando o modificador de carisma ao objeto
  skill.valores[14] <- as.numeric(mod[cha.num]) #Adicionando o modificador de carisma ao objeto
  skill.valores[15] <- as.numeric(mod[int.num]) #Adicionando o modificador de inteligência ao objeto
  skill.valores[16] <- as.numeric(mod[dex.num]) #Adicionando o modificador de destreza ao objeto
  skill.valores[17] <- as.numeric(mod[dex.num])#Adicionando o modificador de destreza ao objeto
  skill.valores[18] <- as.numeric(mod[wis.num]) #Adicionando o modificador de sabedoria ao objeto
  
  #Caso seja proficiente, usar os valores que mostram as posições das perícias em que há proficiência e adicionar o bônus de proficiência
  somando.profic1 <- skill.valores[prof.sk[1]] + as.numeric(prof.bonus) #Adicionando o valor de proficiência ao valor base da perícia especificada (especificada pelo primeiro argumento do objeto prof.sk)
  somando.profic2 <- skill.valores[prof.sk[2]] + as.numeric(prof.bonus) #Adicionando o valor de proficiência ao valor base da perícia especificada (especificada pelo segundo argumento do objeto prof.sk)
  
  #Colocando esses dois valores com a proficiência somada no vetor skill.valores
  skill.valores <- replace(skill.valores, prof.sk[1], somando.profic1) #Substituindo o valor baseado apenas no modificador pelo valor que acrescenta a proficiência
  skill.valores <- replace(skill.valores, prof.sk[2], somando.profic2) #Substituindo o valor baseado apenas no modificador pelo valor que acrescenta a proficiência
    
  #Tendo todos os valores calculados, será feita agora a indicação para o usuário de quais são as perícias em que seu personagem tem proficiência
  indic.prof <- rep("-", times=18) #Criando um vetor com 18 objetos para receber a sinalização de proficiência  
  for(l in prof.sk) #Para cada valor em prof.sk (são sempre 2) será registrado que o personagem é proficiente naquela perícia
  {
    indic.prof[l] <- "proficient" #Escrevendo "proficient" em cada perícia em que tem proficiência
  }
  
  #Como pode haver também proficiências em perícia vindas da raça, será feito um teste condicional para realizar então os cálculos necessários e as indicações de proficiência
  #Em alguns casos pode haver repetição de proficiências entre a concedida pelo antecedente e a concedida pela raça, mas como está sendo feita a substituição do valor e não apenas um acréscimo não haverá problema no caso de haver proficiência na mesma perícia duas vezes. O único porém é que nesses casos o jogador pode escolher uma outra perícia que quiser, mas isso será resolvido no próximo objeto de saída, choose.skills
  if(exists("prof.sk.race")) #Se o objeto prof.sk.race foi criado
  {
    #Fazendo os cálculos
	somando.profic3 <- skill.valores[prof.sk.race] + as.numeric(prof.bonus) #Adicionando o valor de proficiência ao valor base da perícia especificada (especificada pelo objeto numérico prof.sk.race)
	skill.valores <- replace(skill.valores, prof.sk.race, somando.profic3) #Substituindo o valor baseado apenas no modificador pelo valor que acrescenta a proficiência
	
	#Fazendo as indicações de proficiência
	indic.prof[prof.sk.race] <- "proficient" #Escrevendo "proficient" para a perícia em que se tem proficiência
  }
  
  #Com todos os dados preenchidos, será montado o data frame skills
  skills <- as.data.frame(skill.valores) #Criando o data frame e adicionando os valores das proficiências
  skills <- cbind(skills, indic.prof) #Acrescentando os indicadores de proficiência na perícia
  
  #Nomeando linhas e colunas
  rownames(skills) <- c("Acrobatics", "Animal Handling", "Arcana", "Athletics", "Deception", "History", "Insight", "Intimidation", "Investigation", "Medicine", "Nature", "Perception", "Performance", "Persuasion", "Religion", "Sleight of Hand", "Stealth", "Survival") #Adicionando os nomes das 18 proficiências nas linhas do data frame
  colnames(skills) <- c("Skills", "Proficiency") #Adicionando os nomes das colunas ao data frame
  
  ###Para criar o data frame choose.skills
  choose.skills <- as.data.frame(prof.sk.choice, stringsAsFactors = FALSE) #Criando o data frame a partir de seu primeiro elemento, o objeto prof.sk.choice, e evitando que ele considere os elementos dos objetos como fatores para que não haja problemas ao usar o rbind()
  
  #Acrescentando as outras linhas que vão compor o data frame:
  if(exists("prof.sk.choice.race")) #Se o objeto prof.sk.choice.race tiver sido criado
  {
    choose.skills <- rbind(choose.skills, prof.sk.choice.race)#Acrescentar o objeto prof.sk.choice.race ao data frame
  }
  
  #Caso tenha ocorrido de o personagem ter recebido proficiência em uma mesma perícia por fontes diferentes, será necessário permitir a escolha de uma outra perícia para receber proficiência
  if(back=="sailor" && race=="elf") #Testando se o personagem escolhido tem marinehiro como antecedente e é da raça elfo, situação em que ele receberia duas vezes proficiência em "Perception"
  {
    new.choice <- "Choose another skill proficiency"
	choose.skills <- rbind(choose.skills, new.choice)#Acrescentar o objeto new.choice. ao data frame
  }
  
  if(back=="soldier" && race=="half-orc") #Testando se o personagem escolhido tem soldado como antecedente e é da raça meio-orc, situação em que ele receberia duas vezes proficiência em "Intimidation"
  {
    new.choice <- "Choose another skill proficiency"
	choose.skills <- rbind(choose.skills, new.choice)#Acrescentar o objeto new.choice. ao data frame
  }
  
  #Removendo o nome da coluna
  colnames(choose.skills) <- "" #Igualando o nome da coluna a "" para ficar em branco
  #Dando nome para as linhas
  if(nrow(choose.skills)==1) #Se o número de linhas do data frame for igual a 1
  {
    rownames(choose.skills) <- c("Choose skills:") #Adicionando os nomes das linhas no data frame de acordo com o que o compõe
  }
  
  if(exists("prof.sk.choice.race")) #Se o objeto prof.sk.choice.race tiver sido criado
  {
    rownames(choose.skills) <- c("Choose skills:", "Choose other skills:") #Adicionando os nomes das linhas no data frame de acordo com o que o compõe
  }
  
  if(back=="sailor" && race=="elf") #Testando se o personagem escolhido tem marinehiro como antecedente e é da raça elfo, situação em que ele receberia duas vezes proficiência em "Perception" e portanto pode escolher ter proficiência em outra perícia
  {
    rownames(choose.skills) <- c("Choose skills:", "Choose another skill:") #Adicionando os nomes das linhas no data frame de acordo com o que o compõe
  }
  
  if(back=="soldier" && race=="half-orc") #Testando se o personagem escolhido tem soldado como antecedente e é da raça meio-orc, situação em que ele receberia duas vezes proficiência em "Intimidation" e portanto pode escolher ter proficiência em outra perícia
  {
    rownames(choose.skills) <- c("Choose skills:", "Choose another skill:") #Adicionando os nomes das linhas no data frame de acordo com o que o compõe
  }
 
  ###Para criar o data frame general.data
  #Fazendo os cálculos faltantes:
  #Calculando a percepção passiva
  posic.mod.perc.pas <- match("Wis", ord) #Obtendo o número da posição do atributo Wisdom (Wis) para poder encontrar o modificador correspondente
  if(skills[12,2]=="proficient") #Verificando se tem proficiência em percepção (que corresponde à linha 12, coluna 2 do data frame skills)
  {
    passive.perception <- 10 + as.numeric(mod[posic.mod.perc.pas]) + as.numeric(prof.bonus) #Somando os valor fixo 10 mais o modificador para sabedoria, mais o bônus de proficiência em percepção
  }else #Caso não tenha proficiência em precepção
   {
     passive.perception <- 10 + as.numeric(mod[posic.mod.perc.pas]) #Somando os valor fixo 10 mais o modificador para sabedoria
   }
  
  #Calculando a iniciativa
  posic.mod.inic <- match("Dex", ord) #Obtendo o número da posição do atributo Dexterity (Dex) para poder encontrar o modificador correspondente
  initiative <-  mod[posic.mod.inic] #Criando o vetor que contém o modificador correspondente à iniciativa do personagem
  
  #Criando o data frame general.data
  general.data <- as.data.frame(size, stringsAsFactors = FALSE) #Criando o data frame a partir de seu primeiro elemento, o objeto size, e evitando que ele considere os elementos dos objetos como fatores para que não haja problemas ao usar o rbind()
  
  #Acrescentando as outras linhas que vão compor o data frame:
  general.data <- rbind(general.data, speed) #Primeiramente o objeto speed
  general.data <- rbind(general.data, prof.bonus) #Agora o objeto prof.bonus
  general.data <- rbind(general.data, passive.perception)#Agora o objeto passive.perception
  general.data <- rbind(general.data, initiative) #Agora o objeto initiavite
  general.data <- rbind(general.data, hit.dice) #Agora o objeto hit.dice
  general.data <- rbind(general.data, hit.points) #Agora o objeto hit.points
  
  #Removendo o nome da coluna
  colnames(general.data) <- "" #Igualando o nome da coluna a "" para ficar em branco
  
  #Dando nome para as linhas
  rownames(general.data) <- c("Size:", "Speed:", "Proficiency bonus:", "Passive perception:", "Initiative:", "Hit Dice:", "Hit points:") #Adicionando os nomes das linhas no data frame de acordo com o que o compõe
  
  ###Para criar o data frame spells
  #Esse data frame só será criado para as classes que contém magia, por isso será feita uma checagem para as classes que contém magia
  if(clas=="bard" || clas=="cleric" || clas=="druid" || clas=="sorcerer" || clas=="warlock" || clas=="wizard") #Se a classe for "bard", "cleric", "druid", "sorcerer", "warlock" ou "wizard" o data frame será criado, caso contrário não
  {
    spells <- as.data.frame(cantrips, stringsAsFactors = FALSE) #Criando o data frame a partir de seu primeiro elemento, o objeto cantrips, e evitando que ele considere os elementos dos objetos como fatores para que não haja problemas ao usar o rbind()
    #Acrescentando as outras linhas que vão compor o data frame:
    spells <- rbind(spells, lvl1.spells) #Adicionando o objeto lvl1.spells
    if(exists("spell.cantrip.tf")) #Se o objeto spell.cantrip.tf tiver sido criado
    {
      spells <- rbind(spells, spell.cantrip.tf) #Adicionar o objeto spell.cantrip.tf
    }  
	
    #Removendo o nome da coluna
    colnames(spells) <- "" #Igualando o nome da coluna a "" para ficar em branco
	
    #Dando nome para as linhas
    if(nrow(spells)==2) #Se o número de linhas do data frame for igual a 2
    {
      rownames(spells) <- c("Possible cantrips:", "Possible spells:") #Adicionando os nomes das linhas no data frame de acordo com o que o compõe
    }
	
    if(nrow(spells)==3) #Se o número de linhas do data frame for igual a 3
    {
      rownames(spells) <- c("Possible cantrips:", "Possible spells:", "Cantrip known - tiefling:") #Adicionando os nomes das linhas no data frame de acordo com o que o compõe
    }
  }  
	
  ###Para criar o data frame traits
  traits <- as.data.frame(features, stringsAsFactors = FALSE) #Criando o data frame a partir de seu primeiro elemento, o objeto features, e evitando que ele considere os elementos dos objetos como fatores para que não haja problemas ao usar o rbind()
  if(clas=="barbarian") #Se for da classe bárbaro
  {
    traits <- rbind(traits, rages) #Adicionar essa o objeto rages ao data frame
	traits <- rbind(traits, rage.dmg) #Adicionar o objeto rage.dmg ao data frame
	rownames(traits) <- c("Features:", "Rages:", "Rage damage:") #Adicionando os nomes das linhas no data frame de acordo com o que o compõe
  }
  
  if(clas=="monk") #Se for da classe monge
  {
    traits <- rbind(traits, martial.arts) #Adicionar o objeto martial.arts ao data frame
	rownames(traits) <- c("Features:", "Martial arts:") #Adicionando os nomes das linhas no data frame de acordo com o que o compõe
  }
  
  if(clas=="rogue") #Se for da classe rogue
  {
    traits <- rbind(traits, sneak.atk) #Adicionar o objeto sneak.atk ao data frame
	rownames(traits) <- c("Features:", "Sneak attack:") #Adicionando os nomes das linhas no data frame de acordo com o que o compõe
  }
  
  if(clas=="bard"||clas=="cleric"||clas=="druid"||clas=="sorcerer"||clas=="warlock"||clas=="wizard") #Se alguma destas classes for escolhida (classes com magia)
  {
    traits <- rbind(traits, cantrip.know) #Adicionar o objeto cantrip.know ao data frame
	traits <- rbind(traits, spell.know) #Adicionar o objeto spell.know ao data frame
	traits <- rbind(traits, spell.slot) #Adicionar o objeto spell.slot ao data frame
	traits <- rbind(traits, spell.cast.abil) #Adicionar o objeto spell.cast.abil ao data frame
	traits <- rbind(traits, spell.save.DC) #Adicionar o objeto spell.save.DC ao data frame
	traits <- rbind(traits, spell.atk) #Adicionar o objeto spell.atk ao data frame
	traits <- rbind(traits, rit.cast) #Adicionar o objeto rit.cast ao data frame
	traits <- rbind(traits, spell.cast.focus) #Adicionar o objeto spell.cast.focus ao data frame
	rownames(traits) <- c("Features:", "Cantrips known:", "Spells known:", "Spell slots:", "Spellcasting ability:", "Spell save DC:", "Spell attack bonus:", "Ritual casting:", "Spellcasting focus:") #Adicionando os nomes das linhas no data frame de acordo com o que o compõe
  }
  
  #Nomeando a linha para as demais classes
  if(clas=="fighter"||clas=="paladin"||clas=="ranger")
  rownames(traits) <- "Features:" #Adicionando o nome da linha no data frame de acordo com o que o compõe
  
  #Removendo o nome da coluna
  colnames(traits) <- "" #Igualando o nome da coluna a "" para ficar em branco
    
  ###Para criar o data frame saving.throws
  #Primeiro é necessário determinar os valores base dos 6 testes de resistência a partir dos modificadores dos atributos
  save.valores <- rep(NA, times=6) #Fazendo um vetor para receber os valores dos testes de resistência
  
  #Definindo o valor do modificador para cada atributo
  #Vou usar a identificação de posição de cada atributo feita para o data frame skills. Com isso vou partir diretamente para o acréscimo do valor do modificador para cada teste de resistência
  save.valores[1] <- as.numeric(mod[str.num]) #Adicionando o modificador de força ao objeto
  save.valores[2] <- as.numeric(mod[dex.num]) #Adicionando o modificador de destreza ao objeto
  save.valores[3] <- as.numeric(mod[con.num]) #Adicionando o modificador de constituição ao objeto
  save.valores[4] <- as.numeric(mod[int.num]) #Adicionando o modificador de inteligência ao objeto
  save.valores[5] <- as.numeric(mod[wis.num]) #Adicionando o modificador de sabedoria ao objeto
  save.valores[6] <- as.numeric(mod[cha.num]) #Adicionando o modificador de carisma ao objeto
  
  #Caso seja proficiente, usar os valores que mostram as posições dos testes de resistência em que há proficiência e adicionar o bônus de proficiência
  somando.resist1 <- save.valores[sav.thr[1]] + as.numeric(prof.bonus) #Adicionando o valor de proficiência ao valor base da resistência especificada (especificada pelo primeiro argumento do objeto sav.thr)
  somando.resist2 <- save.valores[sav.thr[2]] + as.numeric(prof.bonus) #Adicionando o valor de proficiência ao valor base da resistência especificada (especificada pelo segundo argumento do objeto sav.thr)
  
  #Colocando esses dois valores com a proficiência somada no vetor save.valores
  save.valores <- replace(save.valores, sav.thr[1], somando.resist1) #Substituindo o valor baseado apenas no modificador pelo valor que acrescenta a proficiência
  save.valores <- replace(save.valores, sav.thr[2], somando.resist2) #Substituindo o valor baseado apenas no modificador pelo valor que acrescenta a proficiência
  
  #Tendo todos os valores calculados, será feita agora a indicação para o usuário de quais são os testes de resistência em que seu personagem tem proficiência
  indic.prof.save <- rep("-", times=6) #Criando um vetor com 6 objetos para receber a sinalização de proficiência  
  for(m in sav.thr) #Para cada valor em sav.thr (são sempre 2) será registrado que o personagem é proficiente naquele teste de resistência 
  {
    indic.prof.save[m] <- "proficient" #Escrevendo "proficient" em cada perícia em que tem proficiência
  }
  
  #Com todos os dados preenchidos, será montado o data frame saving.throws
  saving.throws <- as.data.frame(save.valores) #Criando o data frame e adicionando os valores dos testes
  saving.throws <- cbind(saving.throws, indic.prof.save) #Acrescentando os indicadores de proficiência no teste de resistência
  
  #Nomeando linhas e colunas
  rownames(saving.throws) <- c("Strength", "Dexterity", "Constitution", "Intelligence", "Wisdom", "Charisma") #Adicionando os nomes dos 6 possíveis testes de resistência nas linhas do data frame
  colnames(saving.throws) <- c("Saving Throws", "Proficiency") #Adicionando os nomes das colunas ao data frame
  
  ###Para criar o data frame equipments
  equipments <- as.data.frame(equip.back, stringsAsFactors = FALSE) #Criando o data frame a partir de seu primeiro elemento, o objeto equip.back, e evitando que ele considere os elementos dos objetos como fatores para que não haja problemas ao usar o rbind()
  
  #Acrescentando as outras linhas que vão compor o data frame:
  equipments <- rbind(equipments, equip.all) #Primeiramente o objeto equip.all
  equipments <- rbind(equipments, equip1.choice) #Depois o objeto equip1.choice
  equipments <- rbind(equipments, equip2.choice) #Depois o objeto equip2.choice
  if(clas=="cleric"||clas=="fighter"||clas=="paladin"||clas=="ranger"||clas=="rogue"||clas=="sorcerer"||clas=="warlock"||clas=="wizard") #Se pertencer a alguma destas classes
  {
    equipments <- rbind(equipments, equip3.choice)#Acrescentar o objeto equip3.choice ao data frame
  }
  
  if(clas=="cleric"||clas=="fighter") #Se pertencer a alguma destas classes
  {
    equipments <- rbind(equipments, equip4.choice)#Acrescentar o objeto equip4.choice ao data frame
  }
  
  #Deixando o nome da coluna em branco
  colnames(equipments) <- "" #Igualando o nome da coluna a "" para ficar em branco
  
  #Dando nome para as linhas
  if(nrow(equipments)==4) #Se o número de linhas do data frame for igual a 4
  {
    rownames(equipments) <- c("Background equipment:", "Class equipment:", "Choose one (1/2):", "Choose one (2/2):") #Adicionando os nomes das linhas no data frame de acordo com o que o compõe
  }
  
  if(nrow(equipments)==5) #Se o número de linhas do data frame for igual a 5
  {
    rownames(equipments) <- c("Background equipment:", "Class equipment:", "Choose one (1/3):", "Choose one (2/3):", "Choose one (3/3):") #Adicionando os nomes das linhas no data frame de acordo com o que o compõe
  }
  
  if(nrow(equipments)==6) #Se o número de linhas do data frame for igual a 6
  {
    rownames(equipments) <- c("Background equipment:", "Class equipment:", "Choose one (1/4):", "Choose one (2/4):", "Choose one (3/4):", "Choose one (4/4):") #Adicionando os nomes das linhas no data frame de acordo com o que o compõe
  }
  
  ###Para criar o data frame personality.traits
  personality.traits <- as.data.frame(alinha, stringsAsFactors = FALSE) #Criando o data frame a partir de seu primeiro elemento, o objeto alinha, e evitando que ele considere os elementos dos objetos como fatores para que não haja problemas ao usar o rbind()
  
  #Acrescentando as outras linhas que vão compor o data frame:
  personality.traits <- rbind(personality.traits, trait) #Primeiramente o objeto trait
  personality.traits <- rbind(personality.traits, ideal) #Depois o objeto ideal
  personality.traits <- rbind(personality.traits, bond) #Depois o objeto bond
  personality.traits <- rbind(personality.traits, flaw) #Depois o objeto flaw
  
  #Adicionando os nomes para coluna e linhas do data frame
  colnames(personality.traits) <- "" #Igualando o nome da coluna a "" para ficar em branco
  rownames(personality.traits) <- c("Alignment:", "Trait:", "Ideal:", "Bond:", "Flaw:") #Adicionando os nomes das linhas no data frame de acordo com o que o compõe
  
  ###Para criar o data frame extra.info
  #Criando objetos com as informações a serem passadas
  armor.class.no.armor <- "Para calcular a Armor Class (AC) sem armadura é necessário somar 10 + o modificador de Destreza do personagem" #Explicando como calcular a classe de armadura caso o jogador decida que seu personagem não usará armadura
  armor.class.with.armor <- "Para calcular a Armor Class (AC) com armadura para a qual se tem proficiência é necessário seguir as intruções do livro do jogador de acordo com a armadura escolhida" #Explicando como calcular a classe de armadura caso o jogador decida usar alguma armadura
  shield <- "Se proficiente com seu uso, o escudo concede mais 2 pontos em sua Armor Class (AC)" #Explicando como o uso de escudo influencia na classe de armadura
  choosen.prof <- "Para as proficiências em perícias que você escolher (proficient skills) é necessário somar aos valores mostrados em 'skills' o seu valor de proficiência (no caso 2) antes de passar as informações para sua ficha" #Explicando como calcular o bônus de proficiência para suas perícias após escolhê-las (para aquelas que não são predeterminadas)
  
  #Criando um data frame com esses objetos
  extra.info <- as.data.frame(armor.class.no.armor, stringsAsFactors = FALSE) #Criando o data frame a partir de seu primeiro elemento, o objeto armor.class.no.armor, e evitando que ele considere os elementos dos objetos como fatores para que não haja problemas ao usar o rbind()
  #Acrescentando as outras linhas
  extra.info <- rbind(extra.info, armor.class.with.armor) #Primeiramente o objeto armor.class.with.armor
  extra.info <- rbind(extra.info, shield) #Depois o objeto shield
  extra.info <- rbind(extra.info, choosen.prof) #Depois o objeto choosen.prof
  
  #Adicionando os nomes para coluna e linhas do data frame
  colnames(extra.info) <- "" #Igualando o nome da coluna a "" para ficar em branco
  rownames(extra.info) <- c("Without armor:", "With armor:", "With shield:", "Choosen proficiencies:") #Adicionando os nomes das linhas no data frame de acordo com o que o compõe
  
  #####################################################################
  #Criando a lista que vai retornrar os objetos criados para o usuário#
  #####################################################################
  
  #Serão criadas duas versões da lista, uma contendo as magias (spells) e outra não. Isso será decidido de acordo com as classes do personagem
  if(clas=="bard"||clas=="cleric"||clas=="druid"||clas=="sorcerer"||clas=="warlock"||clas=="wizard") #Se a classe escolhida for alguma das classes contendo magias (bard, cleric, druid, sorcerer, warlock ou wizard)
  {
    preenchendo.ficha <- list("Ability Score"=ability.score, "General Data"=general.data, "Informations"=info, "Proficiencies"=proficiencies, "Skills"=skills, "Choose the other skills"=choose.skills, "Spells"=spells, "Traits"=traits, "Saving Throws"=saving.throws, "Equipments"=equipments, "Personality Traits"=personality.traits, "Complementary information"=extra.info) #Fazendo uma lista nomeando cada um de seus objetos. Esta lista inclui todos os objetos do output mais o objeto spells
  }else #Caso nenhuma das classes com magia tenha sido escolhida
   {
    preenchendo.ficha <- list("Ability Score"=ability.score, "General Data"=general.data, "Informations"=info, "Proficiencies"=proficiencies, "Skills"=skills, "Choose the other skills"=choose.skills, "Traits"=traits, "Saving Throws"=saving.throws, "Equipments"=equipments, "Personality Traits"=personality.traits, "Complementary information"=extra.info) #Fazendo uma lista nomeando cada um de seus objetos. Esta lista inclui todos os objetos do output, menos o objeto spells 
   }
  
  ###############################
  #Retornando o output da função#
  ###############################
  
  return(preenchendo.ficha) #Retornando a lista para o usuário da função    
}
05_curso_antigo/r2018/alunos/trabalho_final/arthur.cambler/funcao_finalizada.txt · Última modificação: 2020/08/12 06:04 (edição externa)