tormenta20 0.2.11 → 0.2.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/docs/escudos.md CHANGED
@@ -4,22 +4,22 @@ Acesso: `Tormenta20.escudos`
4
4
 
5
5
  ## Atributos
6
6
 
7
- | Atributo | Tipo | Descricao |
7
+ | Atributo | Tipo | Descrição |
8
8
  |----------|------|-----------|
9
- | `id` | String | Identificador unico |
9
+ | `id` | String | Identificador único |
10
10
  | `name` | String | Nome do escudo |
11
- | `price` | String | Preco |
12
- | `defense_bonus` | Integer | Bonus de defesa |
11
+ | `price` | String | Preço |
12
+ | `defense_bonus` | Integer | Bônus de defesa |
13
13
  | `armor_penalty` | Integer | Penalidade de armadura |
14
- | `weight` | String | Peso/espacos |
14
+ | `weight` | String | Peso/espaços |
15
15
  | `properties` | Array | Propriedades especiais |
16
- | `description` | String | Descricao |
16
+ | `description` | String | Descrição |
17
17
 
18
18
  ## Scopes (Filtros)
19
19
 
20
- Este modelo nao possui scopes especificos. Use queries ActiveRecord padrao.
20
+ Este modelo não possui scopes específicos. Use queries ActiveRecord padrão.
21
21
 
22
- ## Metodos de Instancia
22
+ ## Métodos de Instância
23
23
 
24
24
  ```ruby
25
25
  escudo = Tormenta20.escudos.first
@@ -35,15 +35,15 @@ Tormenta20.escudos.all.each do |e|
35
35
  puts "#{e.name}: +#{e.defense_bonus} Defesa, -#{e.armor_penalty} penalidade"
36
36
  end
37
37
 
38
- # Buscar escudo especifico
38
+ # Buscar escudo específico
39
39
  escudo = Tormenta20.escudos.find("escudo_leve")
40
40
  puts escudo.name # Nome
41
- puts escudo.defense_bonus # Bonus de defesa
41
+ puts escudo.defense_bonus # Bônus de defesa
42
42
  puts escudo.armor_penalty # Penalidade
43
43
 
44
- # Escudo com maior bonus
44
+ # Escudo com maior bônus
45
45
  Tormenta20.escudos.order(defense_bonus: :desc).first
46
46
 
47
- # Escudos ordenados por preco
47
+ # Escudos ordenados por preço
48
48
  Tormenta20.escudos.order(:price)
49
49
  ```
@@ -0,0 +1,105 @@
1
+ # Índice Remissivo
2
+
3
+ Acesso: `Tormenta20.indice_remissivo`
4
+
5
+ Armazena as entradas do índice remissivo de cada livro. Quando uma entrada possui `tabela` e `registro_id` preenchidos, ela fica vinculada a um registro concreto de outro model — o que permite que qualquer model retorne sua referência de livro e página via `BookReferenceable`.
6
+
7
+ ## Atributos
8
+
9
+ | Atributo | Tipo | Descrição |
10
+ |----------|------|-----------|
11
+ | `id` | Integer | Chave primária (autoincremento) |
12
+ | `livro_id` | String | ID do livro (FK para `livros`) |
13
+ | `termo` | String | Termo como aparece no índice |
14
+ | `pagina` | Integer | Número da página |
15
+ | `tabela` | String / nil | Nome da tabela do registro vinculado |
16
+ | `registro_id` | String / nil | ID do registro vinculado |
17
+
18
+ ## Scopes (Filtros)
19
+
20
+ ```ruby
21
+ # Entradas de um livro específico
22
+ Tormenta20.indice_remissivo.do_livro("t20_eja")
23
+
24
+ # Entradas de uma tabela específica
25
+ Tormenta20.indice_remissivo.para_tabela("classes")
26
+ Tormenta20.indice_remissivo.para_tabela("poderes")
27
+
28
+ # Entradas vinculadas a registros concretos
29
+ Tormenta20.indice_remissivo.associados
30
+
31
+ # Entradas sem vínculo a registro (termos gerais)
32
+ Tormenta20.indice_remissivo.nao_associados
33
+
34
+ # Busca por termo (LIKE)
35
+ Tormenta20.indice_remissivo.buscar_termo("Fúria")
36
+ Tormenta20.indice_remissivo.buscar_termo("magia")
37
+ ```
38
+
39
+ ## Métodos de Instância
40
+
41
+ ```ruby
42
+ entrada = Tormenta20.indice_remissivo.first
43
+
44
+ entrada.termo # => "guerreiro (classe)"
45
+ entrada.pagina # => 64
46
+ entrada.tabela # => "classes"
47
+ entrada.registro_id # => "guerreiro"
48
+ entrada.associado? # => true
49
+
50
+ entrada.livro.nome # => "Tormenta 20 - Edição Jogo do Ano"
51
+ entrada.livro.nome_curto # => "T20 - EJA"
52
+
53
+ entrada.to_h # Hash completo (exclui nils com compact)
54
+ ```
55
+
56
+ ## Associações
57
+
58
+ ```ruby
59
+ # A partir de um livro
60
+ Tormenta20.livros.find("t20_eja").indice_remissivo_entries
61
+
62
+ # A partir de qualquer model via BookReferenceable
63
+ Tormenta20.classes.find("guerreiro").book_reference # => "T20 - EJA, p. 64"
64
+ ```
65
+
66
+ ## BookReferenceable
67
+
68
+ O concern `BookReferenceable` está incluído em todos os models e usa o índice remissivo para resolver as referências. A busca é feita por `(tabela, registro_id)` e o resultado é memoizado por instância.
69
+
70
+ ```ruby
71
+ # Todos os métodos disponíveis em qualquer model
72
+ record = Tormenta20.classes.find("arcanista")
73
+
74
+ record.book_reference # => "T20 - EJA, p. 36" (nil se não indexado)
75
+ record.page # => 36
76
+ record.book # => "T20 - EJA"
77
+ record.full_book # => "Tormenta 20 - Edição Jogo do Ano"
78
+ ```
79
+
80
+ ## Exemplos
81
+
82
+ ```ruby
83
+ # Páginas de todas as classes indexadas
84
+ Tormenta20.indice_remissivo
85
+ .do_livro("t20_eja")
86
+ .para_tabela("classes")
87
+ .order(:pagina)
88
+ .each { |e| puts "#{e.registro_id}: p. #{e.pagina}" }
89
+
90
+ # Termos que não estão vinculados a nenhum registro (regras gerais, locais, etc.)
91
+ Tormenta20.indice_remissivo.nao_associados.buscar_termo("combate").each do |e|
92
+ puts "#{e.termo}: p. #{e.pagina}"
93
+ end
94
+
95
+ # Quantas entradas por tabela
96
+ Tormenta20.indice_remissivo
97
+ .associados
98
+ .group(:tabela)
99
+ .count
100
+ # => { "classes" => 14, "condicoes" => 30, "origens" => 35, ... }
101
+
102
+ # Verificar se um registro está indexado
103
+ Tormenta20.classes.find("guerreiro").page # => 64
104
+ Tormenta20.itens.first.page # => nil (não indexado)
105
+ ```
data/docs/itens.md CHANGED
@@ -4,14 +4,14 @@ Acesso: `Tormenta20.itens`
4
4
 
5
5
  ## Atributos
6
6
 
7
- | Atributo | Tipo | Descricao |
7
+ | Atributo | Tipo | Descrição |
8
8
  |----------|------|-----------|
9
- | `id` | String | Identificador unico |
9
+ | `id` | String | Identificador único |
10
10
  | `name` | String | Nome do item |
11
11
  | `category` | String | Categoria do item |
12
- | `price` | String | Preco |
13
- | `weight` | String | Peso/espacos |
14
- | `description` | String | Descricao |
12
+ | `price` | String | Preço |
13
+ | `weight` | String | Peso/espaços |
14
+ | `description` | String | Descrição |
15
15
  | `effects` | Array | Efeitos do item |
16
16
 
17
17
  ## Scopes (Filtros)
@@ -24,7 +24,7 @@ Tormenta20.itens.by_category("ferramenta")
24
24
  Tormenta20.itens.by_category("vestuario")
25
25
  ```
26
26
 
27
- ## Metodos de Instancia
27
+ ## Métodos de Instância
28
28
 
29
29
  ```ruby
30
30
  item = Tormenta20.itens.first
@@ -45,11 +45,11 @@ Tormenta20.itens.by_category("alquimico").each do |i|
45
45
  puts "#{i.name}: #{i.description}"
46
46
  end
47
47
 
48
- # Buscar item especifico
48
+ # Buscar item específico
49
49
  item = Tormenta20.itens.find("corda")
50
50
  puts item.name # Nome
51
- puts item.price # Preco
52
- puts item.description # Descricao
51
+ puts item.price # Preço
52
+ puts item.description # Descrição
53
53
 
54
54
  # Itens ordenados por nome
55
55
  Tormenta20.itens.order(:name)
data/docs/livros.md ADDED
@@ -0,0 +1,43 @@
1
+ # Livros
2
+
3
+ Acesso: `Tormenta20.livros`
4
+
5
+ Registra os livros cujos índices remissivos estão disponíveis na gem. Usado internamente pelo concern `BookReferenceable` para resolver referências de página em todos os modelos.
6
+
7
+ ## Atributos
8
+
9
+ | Atributo | Tipo | Descrição |
10
+ |----------|------|-----------|
11
+ | `id` | String | Slug do livro (ex: `"t20_eja"`) |
12
+ | `nome` | String | Nome completo (ex: `"Tormenta 20 - Edição Jogo do Ano"`) |
13
+ | `nome_curto` | String | Abreviação (ex: `"T20 - EJA"`) |
14
+
15
+ ## Associações
16
+
17
+ ```ruby
18
+ livro = Tormenta20.livros.find("t20_eja")
19
+
20
+ livro.indice_remissivo_entries # Todas as entradas do índice deste livro
21
+ livro.indice_remissivo_entries.count # => 1098
22
+ ```
23
+
24
+ ## Exemplos
25
+
26
+ ```ruby
27
+ # Listar livros disponíveis
28
+ Tormenta20.livros.all.each do |l|
29
+ puts "#{l.id}: #{l.nome} (#{l.nome_curto})"
30
+ end
31
+
32
+ # Acessar entradas do índice de um livro
33
+ t20 = Tormenta20.livros.find("t20_eja")
34
+ t20.indice_remissivo_entries.para_tabela("classes").each do |e|
35
+ puts "#{e.termo}: p. #{e.pagina}"
36
+ end
37
+ ```
38
+
39
+ ## Livros Disponíveis
40
+
41
+ | ID | Nome | Abreviação | Entradas |
42
+ |----|------|------------|----------|
43
+ | `t20_eja` | Tormenta 20 - Edição Jogo do Ano | T20 - EJA | 1098+ |
data/docs/magias.md CHANGED
@@ -4,58 +4,58 @@ Acesso: `Tormenta20.magias`
4
4
 
5
5
  ## Atributos
6
6
 
7
- | Atributo | Tipo | Descricao |
7
+ | Atributo | Tipo | Descrição |
8
8
  |----------|------|-----------|
9
- | `id` | String | Identificador unico |
9
+ | `id` | String | Identificador único |
10
10
  | `name` | String | Nome da magia |
11
11
  | `type` | String | Tipo: `arcana`, `divina`, `universal` |
12
- | `circle` | String | Circulo (1-5) |
12
+ | `circle` | String | Círculo (1-5) |
13
13
  | `school` | String | Escola de magia |
14
- | `execution` | String | Tempo de execucao |
15
- | `execution_details` | String | Detalhes da execucao |
14
+ | `execution` | String | Tempo de execução |
15
+ | `execution_details` | String | Detalhes da execução |
16
16
  | `range` | String | Alcance |
17
- | `duration` | String | Duracao |
18
- | `duration_details` | String | Detalhes da duracao |
19
- | `description` | String | Descricao completa |
17
+ | `duration` | String | Duração |
18
+ | `duration_details` | String | Detalhes da duração |
19
+ | `description` | String | Descrição completa |
20
20
  | `counterspell` | String | Contramagia |
21
- | `enhancements` | Array | Aprimoramentos disponiveis |
21
+ | `enhancements` | Array | Aprimoramentos disponíveis |
22
22
  | `effects` | Array | Efeitos da magia |
23
23
 
24
24
  ### Atributos de Alvo
25
25
 
26
- | Atributo | Tipo | Descricao |
26
+ | Atributo | Tipo | Descrição |
27
27
  |----------|------|-----------|
28
28
  | `target_amount` | Integer | Quantidade de alvos |
29
- | `target_up_to` | Boolean | Ate X alvos |
29
+ | `target_up_to` | Boolean | Até X alvos |
30
30
  | `target_type` | String | Tipo de alvo |
31
31
 
32
32
  ### Atributos de Efeito
33
33
 
34
- | Atributo | Tipo | Descricao |
34
+ | Atributo | Tipo | Descrição |
35
35
  |----------|------|-----------|
36
36
  | `effect` | String | Efeito principal |
37
37
  | `effect_shape` | String | Forma do efeito |
38
- | `effect_dimention` | String | Dimensao |
38
+ | `effect_dimention` | String | Dimensão |
39
39
  | `effect_size` | String | Tamanho |
40
40
  | `effect_other_details` | String | Outros detalhes |
41
- | `area_effect` | String | Efeito de area |
42
- | `area_effect_details` | String | Detalhes da area |
41
+ | `area_effect` | String | Efeito de área |
42
+ | `area_effect_details` | String | Detalhes da área |
43
43
 
44
- ### Atributos de Resistencia
44
+ ### Atributos de Resistência
45
45
 
46
- | Atributo | Tipo | Descricao |
46
+ | Atributo | Tipo | Descrição |
47
47
  |----------|------|-----------|
48
- | `resistence_effect` | String | Efeito da resistencia |
49
- | `resistence_skill` | String | Pericia para resistencia |
48
+ | `resistence_effect` | String | Efeito da resistência |
49
+ | `resistence_skill` | String | Perícia para resistência |
50
50
 
51
51
  ### Atributos de Custo Extra
52
52
 
53
- | Atributo | Tipo | Descricao |
53
+ | Atributo | Tipo | Descrição |
54
54
  |----------|------|-----------|
55
55
  | `extra_costs_material_component` | String | Componente material |
56
56
  | `extra_costs_material_cost` | String | Custo do componente |
57
57
  | `extra_costs_pm_debuff` | Integer | Debuff de PM |
58
- | `extra_costs_pm_sacrifice` | Integer | Sacrificio de PM |
58
+ | `extra_costs_pm_sacrifice` | Integer | Sacrifício de PM |
59
59
 
60
60
  ## Scopes (Filtros)
61
61
 
@@ -68,42 +68,42 @@ Tormenta20.magias.universais # Magias universais
68
68
  Tormenta20.magias.by_type("arcana")
69
69
  ```
70
70
 
71
- ### Por Circulo
71
+ ### Por Círculo
72
72
 
73
73
  ```ruby
74
- Tormenta20.magias.by_circle("1") # Magias do 1o circulo
75
- Tormenta20.magias.by_circle("5") # Magias do 5o circulo
76
- Tormenta20.magias.do_circulo("3") # Alias em portugues
74
+ Tormenta20.magias.by_circle("1") # Magias do círculo
75
+ Tormenta20.magias.by_circle("5") # Magias do círculo
76
+ Tormenta20.magias.do_circulo("3") # Alias em português
77
77
  ```
78
78
 
79
79
  ### Por Escola
80
80
 
81
81
  ```ruby
82
- Tormenta20.magias.by_school("evoc") # Evocacao
83
- Tormenta20.magias.by_school("abjur") # Abjuracao
84
- Tormenta20.magias.by_school("adiv") # Adivinhacao
85
- Tormenta20.magias.by_school("conv") # Convocacao
82
+ Tormenta20.magias.by_school("evoc") # Evocação
83
+ Tormenta20.magias.by_school("abjur") # Abjuração
84
+ Tormenta20.magias.by_school("adiv") # Adivinhação
85
+ Tormenta20.magias.by_school("conv") # Convocação
86
86
  Tormenta20.magias.by_school("encan") # Encantamento
87
- Tormenta20.magias.by_school("ilus") # Ilusao
87
+ Tormenta20.magias.by_school("ilus") # Ilusão
88
88
  Tormenta20.magias.by_school("necro") # Necromancia
89
- Tormenta20.magias.by_school("trans") # Transmutacao
90
- Tormenta20.magias.da_escola("evoc") # Alias em portugues
89
+ Tormenta20.magias.by_school("trans") # Transmutação
90
+ Tormenta20.magias.da_escola("evoc") # Alias em português
91
91
  ```
92
92
 
93
93
  ### Combinando Filtros
94
94
 
95
95
  ```ruby
96
- # Magias arcanas do 3o circulo
96
+ # Magias arcanas do círculo
97
97
  Tormenta20.magias.arcanas.by_circle("3")
98
98
 
99
99
  # Magias divinas de necromancia
100
100
  Tormenta20.magias.divinas.by_school("necro")
101
101
 
102
- # Magias universais do 1o circulo de abjuracao
102
+ # Magias universais do círculo de abjuração
103
103
  Tormenta20.magias.universais.by_circle("1").by_school("abjur")
104
104
  ```
105
105
 
106
- ## Metodos de Classe
106
+ ## Métodos de Classe
107
107
 
108
108
  ```ruby
109
109
  Tormenta20.magias.todas # Todas as magias (alias para .all)
@@ -112,7 +112,7 @@ Tormenta20.magias.divinas_list # Lista de divinas
112
112
  Tormenta20.magias.universais_list # Lista de universais
113
113
  ```
114
114
 
115
- ## Metodos de Instancia
115
+ ## Métodos de Instância
116
116
 
117
117
  ```ruby
118
118
  magia = Tormenta20.magias.find("bola_de_fogo")
@@ -123,7 +123,7 @@ magia.target_info # Hash com info do alvo
123
123
  magia.effect_details_info # Hash com detalhes do efeito
124
124
  # => { shape: "esfera", size: "6m" }
125
125
 
126
- magia.resistence_info # Hash com info de resistencia
126
+ magia.resistence_info # Hash com info de resistência
127
127
  # => { effect: "reduz", skill: "Reflexos" }
128
128
 
129
129
  magia.extra_costs_info # Hash com custos extras
@@ -135,7 +135,7 @@ magia.to_h # Converte para Hash completo
135
135
  ## Exemplos
136
136
 
137
137
  ```ruby
138
- # Buscar magia especifica
138
+ # Buscar magia específica
139
139
  bola_de_fogo = Tormenta20.magias.find("bola_de_fogo")
140
140
  puts bola_de_fogo.name # => "Bola de Fogo"
141
141
  puts bola_de_fogo.circle # => "3"
@@ -143,12 +143,12 @@ puts bola_de_fogo.school # => "evoc"
143
143
 
144
144
  # Listar todas as magias de cura
145
145
  Tormenta20.magias.where("name LIKE ?", "%Cura%").each do |m|
146
- puts "#{m.name} (#{m.type}, #{m.circle}o circulo)"
146
+ puts "#{m.name} (#{m.type}, #{m.circle}º círculo)"
147
147
  end
148
148
 
149
- # Magias arcanas ordenadas por circulo
149
+ # Magias arcanas ordenadas por círculo
150
150
  Tormenta20.magias.arcanas.order(:circle, :name).each do |m|
151
- puts "#{m.circle}o - #{m.name}"
151
+ puts "#{m.circle}º - #{m.name}"
152
152
  end
153
153
 
154
154
  # Contar magias por escola
@@ -4,20 +4,20 @@ Acesso: `Tormenta20.materiais_especiais`
4
4
 
5
5
  ## Atributos
6
6
 
7
- | Atributo | Tipo | Descricao |
7
+ | Atributo | Tipo | Descrição |
8
8
  |----------|------|-----------|
9
- | `id` | String | Identificador unico |
9
+ | `id` | String | Identificador único |
10
10
  | `name` | String | Nome do material |
11
- | `description` | String | Descricao |
12
- | `applicable_to` | Array | Tipos de item aplicaveis |
13
- | `price_modifier` | String | Modificador de preco |
11
+ | `description` | String | Descrição |
12
+ | `applicable_to` | Array | Tipos de item aplicáveis |
13
+ | `price_modifier` | String | Modificador de preço |
14
14
  | `effects` | Array | Efeitos do material |
15
15
 
16
16
  ## Scopes (Filtros)
17
17
 
18
- Este modelo nao possui scopes especificos. Use queries ActiveRecord padrao.
18
+ Este modelo não possui scopes específicos. Use queries ActiveRecord padrão.
19
19
 
20
- ## Metodos de Instancia
20
+ ## Métodos de Instância
21
21
 
22
22
  ```ruby
23
23
  material = Tormenta20.materiais_especiais.first
@@ -33,14 +33,14 @@ Tormenta20.materiais_especiais.all.each do |m|
33
33
  puts "#{m.name}: #{m.description}"
34
34
  end
35
35
 
36
- # Buscar material especifico
36
+ # Buscar material específico
37
37
  adamante = Tormenta20.materiais_especiais.find("adamante")
38
38
  puts adamante.name # => "Adamante"
39
- puts adamante.price_modifier # Modificador de preco
40
- puts adamante.applicable_to # Tipos de item aplicaveis
39
+ puts adamante.price_modifier # Modificador de preço
40
+ puts adamante.applicable_to # Tipos de item aplicáveis
41
41
  puts adamante.effects # Efeitos
42
42
 
43
- # Materiais aplicaveis a armas
43
+ # Materiais aplicáveis a armas
44
44
  Tormenta20.materiais_especiais.select do |m|
45
45
  m.applicable_to&.include?("arma")
46
46
  end
data/docs/melhorias.md CHANGED
@@ -4,20 +4,20 @@ Acesso: `Tormenta20.melhorias`
4
4
 
5
5
  ## Atributos
6
6
 
7
- | Atributo | Tipo | Descricao |
7
+ | Atributo | Tipo | Descrição |
8
8
  |----------|------|-----------|
9
- | `id` | String | Identificador unico |
9
+ | `id` | String | Identificador único |
10
10
  | `name` | String | Nome da melhoria |
11
- | `description` | String | Descricao |
12
- | `applicable_to` | Array | Tipos de item aplicaveis |
13
- | `price` | String | Preco/custo |
11
+ | `description` | String | Descrição |
12
+ | `applicable_to` | Array | Tipos de item aplicáveis |
13
+ | `price` | String | Preço/custo |
14
14
  | `effects` | Array | Efeitos da melhoria |
15
15
 
16
16
  ## Scopes (Filtros)
17
17
 
18
- Este modelo nao possui scopes especificos. Use queries ActiveRecord padrao.
18
+ Este modelo não possui scopes específicos. Use queries ActiveRecord padrão.
19
19
 
20
- ## Metodos de Instancia
20
+ ## Métodos de Instância
21
21
 
22
22
  ```ruby
23
23
  melhoria = Tormenta20.melhorias.first
@@ -33,12 +33,12 @@ Tormenta20.melhorias.all.each do |m|
33
33
  puts "#{m.name}: #{m.price}"
34
34
  end
35
35
 
36
- # Buscar melhoria especifica
36
+ # Buscar melhoria específica
37
37
  melhoria = Tormenta20.melhorias.find("afiada")
38
38
  puts melhoria.name # Nome
39
- puts melhoria.description # Descricao
40
- puts melhoria.price # Preco
41
- puts melhoria.applicable_to # Tipos de item aplicaveis
39
+ puts melhoria.description # Descrição
40
+ puts melhoria.price # Preço
41
+ puts melhoria.applicable_to # Tipos de item aplicáveis
42
42
 
43
43
  # Melhorias para armas
44
44
  Tormenta20.melhorias.select do |m|
@@ -50,6 +50,6 @@ Tormenta20.melhorias.select do |m|
50
50
  m.applicable_to&.include?("armadura")
51
51
  end
52
52
 
53
- # Melhorias ordenadas por preco
53
+ # Melhorias ordenadas por preço
54
54
  Tormenta20.melhorias.order(:price)
55
55
  ```
data/docs/poderes.md CHANGED
@@ -4,22 +4,22 @@ Acesso: `Tormenta20.poderes`
4
4
 
5
5
  ## Atributos
6
6
 
7
- | Atributo | Tipo | Descricao |
7
+ | Atributo | Tipo | Descrição |
8
8
  |----------|------|-----------|
9
- | `id` | String | Identificador unico |
9
+ | `id` | String | Identificador único |
10
10
  | `name` | String | Nome do poder |
11
11
  | `type` | String | Tipo do poder |
12
- | `description` | String | Descricao |
12
+ | `description` | String | Descrição |
13
13
  | `effects` | Array | Efeitos do poder |
14
- | `prerequisites` | Array | Pre-requisitos |
15
- | `origin_id` | String | ID da origem associada (se aplicavel) |
16
- | `deities` | Array | Divindades que concedem (se aplicavel) |
14
+ | `prerequisites` | Array | Pré-requisitos |
15
+ | `origin_id` | String | ID da origem associada (se aplicável) |
16
+ | `deities` | Array | Divindades que concedem (se aplicável) |
17
17
 
18
18
  ## Tipos de Poder
19
19
 
20
- | Tipo | Descricao |
20
+ | Tipo | Descrição |
21
21
  |------|-----------|
22
- | `habilidade_unica_origem` | Habilidades unicas de origem |
22
+ | `habilidade_unica_origem` | Habilidades únicas de origem |
23
23
  | `poder_concedido` | Poderes concedidos por divindades |
24
24
  | `poder_tormenta` | Poderes da Tormenta |
25
25
  | `poder_classe` | Poderes de classe |
@@ -33,7 +33,7 @@ Acesso: `Tormenta20.poderes`
33
33
  ### Por Tipo
34
34
 
35
35
  ```ruby
36
- Tormenta20.poderes.habilidades_unicas # Habilidades unicas de origem
36
+ Tormenta20.poderes.habilidades_unicas # Habilidades únicas de origem
37
37
  Tormenta20.poderes.poderes_concedidos # Poderes concedidos por divindades
38
38
  Tormenta20.poderes.poderes_tormenta # Poderes da Tormenta
39
39
  Tormenta20.poderes.poderes_classe # Poderes de classe
@@ -53,7 +53,7 @@ Tormenta20.poderes.by_origin("soldado") # Poderes da origem Soldado
53
53
  Tormenta20.poderes.by_deity("khalmyr") # Poderes concedidos por Khalmyr
54
54
  ```
55
55
 
56
- ## Metodos de Instancia
56
+ ## Métodos de Instância
57
57
 
58
58
  ```ruby
59
59
  poder = Tormenta20.poderes.find("ataque_poderoso")
@@ -79,12 +79,12 @@ Tormenta20.poderes.poderes_tormenta.each do |p|
79
79
  puts "#{p.name}: #{p.description}"
80
80
  end
81
81
 
82
- # Habilidades unicas de uma origem especifica
82
+ # Habilidades únicas de uma origem específica
83
83
  Tormenta20.poderes.habilidades_unicas.by_origin("soldado").each do |p|
84
84
  puts p.name
85
85
  end
86
86
 
87
- # Poderes com pre-requisitos
87
+ # Poderes com pré-requisitos
88
88
  Tormenta20.poderes.where.not(prerequisites: nil).each do |p|
89
89
  puts "#{p.name}: requer #{p.prerequisites}"
90
90
  end
data/docs/racas.md ADDED
@@ -0,0 +1,68 @@
1
+ # Raças
2
+
3
+ Acesso: `Tormenta20.racas`
4
+
5
+ ## Atributos
6
+
7
+ | Atributo | Tipo | Descrição |
8
+ |----------|------|-----------|
9
+ | `id` | String | Identificador único (ex: `"anao"`) |
10
+ | `name` | String | Nome da raça |
11
+ | `description` | String | Descrição da raça |
12
+ | `size` | String | Tamanho (`"minúsculo"`, `"pequeno"`, `"médio"`, `"grande"`) |
13
+ | `movement` | Integer | Deslocamento em metros |
14
+ | `vision` | String | Tipo de visão (`"normal"`, `"baixa_luminosidade"`, `"visao_no_escuro"`) |
15
+ | `vision_range` | Integer / nil | Alcance da visão especial em metros |
16
+ | `attribute_bonuses` | Hash | Bônus de atributo por nome (`{ "constituicao" => 2 }`) |
17
+ | `skill_bonuses` | Array | Bônus em perícias |
18
+ | `racial_abilities` | Array | Habilidades raciais fixas |
19
+ | `chosen_abilities_amount` | Integer | Quantidade de habilidades a escolher |
20
+ | `available_chosen_abilities` | Array | Habilidades disponíveis para escolha |
21
+
22
+ ## Métodos de Instância
23
+
24
+ ```ruby
25
+ raca = Tormenta20.racas.find("anao")
26
+
27
+ # Bônus de atributo
28
+ raca.attribute_bonus_for("constituicao") # => 2
29
+ raca.attribute_bonus_for("forca") # => 0
30
+
31
+ # Tamanho
32
+ raca.minusculo? # => false
33
+ raca.pequeno? # => false
34
+ raca.grande? # => false
35
+
36
+ # Visão
37
+ raca.visao_no_escuro? # => true
38
+
39
+ # Conversão
40
+ raca.to_h # Hash completo com todos os atributos
41
+ ```
42
+
43
+ ## Exemplos
44
+
45
+ ```ruby
46
+ # Listar todas as raças
47
+ Tormenta20.racas.all.each do |r|
48
+ puts "#{r.name} (#{r.size}) - Deslocamento: #{r.movement}m"
49
+ end
50
+
51
+ # Raças com visão no escuro
52
+ Tormenta20.racas.select(&:visao_no_escuro?).each do |r|
53
+ puts "#{r.name}: #{r.vision_range}m de visão no escuro"
54
+ end
55
+
56
+ # Raças com bônus em Força
57
+ Tormenta20.racas.select { |r| r.attribute_bonus_for("forca") > 0 }
58
+
59
+ # Bônus de atributos de uma raça específica
60
+ elfo = Tormenta20.racas.find("elfo")
61
+ elfo.attribute_bonuses # => { "destreza" => 2, ... }
62
+
63
+ # Raças pequenas
64
+ Tormenta20.racas.select(&:pequeno?)
65
+
66
+ # Referência de livro
67
+ Tormenta20.racas.find("minotauro").book_reference # => "T20 - EJA, p. 25"
68
+ ```