tormenta20 0.2.6 → 0.2.7

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.
Files changed (43) hide show
  1. checksums.yaml +4 -4
  2. data/db/schema.sql +23 -0
  3. data/db/tormenta20.sqlite3 +0 -0
  4. data/src/json/condicoes/abalado.json +8 -0
  5. data/src/json/condicoes/agarrado.json +13 -0
  6. data/src/json/condicoes/alquebrado.json +8 -0
  7. data/src/json/condicoes/apavorado.json +11 -0
  8. data/src/json/condicoes/atordoado.json +11 -0
  9. data/src/json/condicoes/caido.json +13 -0
  10. data/src/json/condicoes/cego.json +13 -0
  11. data/src/json/condicoes/confuso.json +10 -0
  12. data/src/json/condicoes/debilitado.json +11 -0
  13. data/src/json/condicoes/desprevenido.json +11 -0
  14. data/src/json/condicoes/doente.json +8 -0
  15. data/src/json/condicoes/em_chamas.json +11 -0
  16. data/src/json/condicoes/enfeiticado.json +11 -0
  17. data/src/json/condicoes/enjoado.json +8 -0
  18. data/src/json/condicoes/enredado.json +12 -0
  19. data/src/json/condicoes/envenenado.json +8 -0
  20. data/src/json/condicoes/esmorecido.json +8 -0
  21. data/src/json/condicoes/exausto.json +13 -0
  22. data/src/json/condicoes/fascinado.json +12 -0
  23. data/src/json/condicoes/fatigado.json +12 -0
  24. data/src/json/condicoes/fraco.json +11 -0
  25. data/src/json/condicoes/frustrado.json +11 -0
  26. data/src/json/condicoes/imovel.json +8 -0
  27. data/src/json/condicoes/inconsciente.json +11 -0
  28. data/src/json/condicoes/indefeso.json +13 -0
  29. data/src/json/condicoes/lento.json +12 -0
  30. data/src/json/condicoes/ofuscado.json +11 -0
  31. data/src/json/condicoes/paralisado.json +12 -0
  32. data/src/json/condicoes/pasmo.json +8 -0
  33. data/src/json/condicoes/petrificado.json +11 -0
  34. data/src/json/condicoes/sangrando.json +10 -0
  35. data/src/json/condicoes/sobrecarregado.json +11 -0
  36. data/src/json/condicoes/surdo.json +12 -0
  37. data/src/json/condicoes/surpreendido.json +11 -0
  38. data/src/json/condicoes/vulneravel.json +8 -0
  39. data/src/ruby/tormenta20/models/condicao.rb +66 -0
  40. data/src/ruby/tormenta20/seeder.rb +9 -0
  41. data/src/ruby/tormenta20/version.rb +1 -1
  42. data/src/ruby/tormenta20.rb +10 -0
  43. metadata +37 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 853de121e4caf1ae828b76f6f1bd012a093272d22027548623bf2f0ed71e71f8
4
- data.tar.gz: 4ee2eb6e6a900231a09fdae20ac6fe6604a65ccdbcc313f379109829bc0f07ea
3
+ metadata.gz: 6b2140b8b04d8ee15caca2700f3adb40d350209b10477f852cb86336e9c5d60e
4
+ data.tar.gz: 150b76780f6b14e17e6c1883d5c7d3467e9ba73fd1e60a7562be6d284d3c890b
5
5
  SHA512:
6
- metadata.gz: 6877009876a6cf32291bd8e0c7c50e123580418ff83ec01a1fe3c92aac1068667ddba5812e1c6e101ce0be4b68cd93a21ac4b76f6fbb0297552182167c72f71a
7
- data.tar.gz: 5ca05d5d4123293a3db942defaa0d80fa6d2046df02a7b000cfb446d737fecf5be871aec013dda9725b19713a4a1fe77829920f70a1d85ec53f49501c80af46a
6
+ metadata.gz: 22d9ecdf602bcd12b0821119914208451aab3a4eb8ae9848f79b0cca281ab070b3eec35ebb19fbef11fb880f2b61e51a3646cfb86b45cee7ca9a3b6fff7b7690
7
+ data.tar.gz: a94f9b5d9aa7eac2145409ff8e60f051aee15dd8bf43f5338bb7651bd5448ac0a766761c51b60e07489de9d5e50aff1b8305a65b82fcf6f36da2285b7af53871
data/db/schema.sql CHANGED
@@ -375,6 +375,29 @@ BEGIN
375
375
  UPDATE racas SET updated_at = CURRENT_TIMESTAMP WHERE id = NEW.id;
376
376
  END;
377
377
 
378
+ -- -----------------------------------------------------------------------------
379
+ -- CONDIÇÕES (Status Conditions)
380
+ -- -----------------------------------------------------------------------------
381
+ CREATE TABLE IF NOT EXISTS condicoes (
382
+ id TEXT PRIMARY KEY,
383
+ name TEXT NOT NULL,
384
+ description TEXT,
385
+ effects JSON DEFAULT '[]',
386
+ condition_type TEXT,
387
+ escalates_to TEXT,
388
+ created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
389
+ updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
390
+ );
391
+
392
+ CREATE INDEX IF NOT EXISTS idx_condicoes_name ON condicoes(name);
393
+ CREATE INDEX IF NOT EXISTS idx_condicoes_type ON condicoes(condition_type);
394
+
395
+ CREATE TRIGGER IF NOT EXISTS update_condicoes_timestamp
396
+ AFTER UPDATE ON condicoes
397
+ BEGIN
398
+ UPDATE condicoes SET updated_at = CURRENT_TIMESTAMP WHERE id = NEW.id;
399
+ END;
400
+
378
401
  -- =============================================================================
379
402
  -- VIEWS ÚTEIS
380
403
  -- =============================================================================
Binary file
@@ -0,0 +1,8 @@
1
+ {
2
+ "id": "abalado",
3
+ "name": "Abalado",
4
+ "description": "Você fica com medo. Sofre –2 em testes de perícia.",
5
+ "effects": ["-2 em testes de perícia"],
6
+ "condition_type": "medo",
7
+ "escalates_to": null
8
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "id": "agarrado",
3
+ "name": "Agarrado",
4
+ "description": "Você está sendo segurado por uma criatura ou efeito. Fica desprevenido e imóvel, sofre –2 em jogadas de ataque e só pode usar armas leves ou armas naturais.",
5
+ "effects": [
6
+ "Fica desprevenido",
7
+ "Fica imóvel",
8
+ "-2 em jogadas de ataque",
9
+ "Só pode usar armas leves ou naturais"
10
+ ],
11
+ "condition_type": null,
12
+ "escalates_to": null
13
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "id": "alquebrado",
3
+ "name": "Alquebrado",
4
+ "description": "Sua mente está enfraquecida. O custo em PM de todas as suas habilidades aumenta em +1.",
5
+ "effects": ["Custo em PM de todas as habilidades +1"],
6
+ "condition_type": "mental",
7
+ "escalates_to": null
8
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "id": "apavorado",
3
+ "name": "Apavorado",
4
+ "description": "Você está dominado pelo medo. Sofre –5 em testes de perícia e não pode se aproximar voluntariamente da fonte do seu medo.",
5
+ "effects": [
6
+ "-5 em testes de perícia",
7
+ "Não pode se aproximar voluntariamente da fonte do medo"
8
+ ],
9
+ "condition_type": "medo",
10
+ "escalates_to": null
11
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "id": "atordoado",
3
+ "name": "Atordoado",
4
+ "description": "Você está confuso e incapaz de agir. Fica desprevenido e perde sua ação no turno.",
5
+ "effects": [
6
+ "Fica desprevenido",
7
+ "Perde a ação no turno"
8
+ ],
9
+ "condition_type": "mental",
10
+ "escalates_to": null
11
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "id": "caido",
3
+ "name": "Caído",
4
+ "description": "Você está prostrado no chão. Sofre –5 na Defesa contra ataques corpo a corpo, mas +5 na Defesa contra ataques à distância. Sofre –5 em jogadas de ataque corpo a corpo. Seu deslocamento é reduzido a 1,5m (apenas rastejando).",
5
+ "effects": [
6
+ "-5 na Defesa contra ataques corpo a corpo",
7
+ "+5 na Defesa contra ataques à distância",
8
+ "-5 em jogadas de ataque corpo a corpo",
9
+ "Deslocamento reduzido a 1,5m (rastejar)"
10
+ ],
11
+ "condition_type": null,
12
+ "escalates_to": null
13
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "id": "cego",
3
+ "name": "Cego",
4
+ "description": "Você não consegue ver. Fica desprevenido e lento. Sofre –5 em testes de perícias baseadas em Força ou Destreza. Todos os alvos têm cobertura total contra seus ataques.",
5
+ "effects": [
6
+ "Fica desprevenido",
7
+ "Fica lento",
8
+ "-5 em testes de perícias baseadas em Força ou Destreza",
9
+ "Todos os alvos têm cobertura total contra seus ataques"
10
+ ],
11
+ "condition_type": "sentidos",
12
+ "escalates_to": null
13
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "id": "confuso",
3
+ "name": "Confuso",
4
+ "description": "Você age de forma aleatória e imprevisível. No início de cada turno, role 1d6: 1–2 age normalmente, 3–4 não faz nada, 5–6 ataca o alvo mais próximo (aliado ou inimigo).",
5
+ "effects": [
6
+ "No início do turno role 1d6: 1-2 age normalmente, 3-4 fica pasmo, 5-6 ataca o alvo mais próximo"
7
+ ],
8
+ "condition_type": "mental",
9
+ "escalates_to": null
10
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "id": "debilitado",
3
+ "name": "Debilitado",
4
+ "description": "Seu corpo está seriamente comprometido. Sofre –5 em testes de Força, Destreza e Constituição. Se ficar debilitado novamente, fica inconsciente.",
5
+ "effects": [
6
+ "-5 em testes de Força, Destreza e Constituição",
7
+ "Se ficar debilitado novamente → fica inconsciente"
8
+ ],
9
+ "condition_type": null,
10
+ "escalates_to": "inconsciente"
11
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "id": "desprevenido",
3
+ "name": "Desprevenido",
4
+ "description": "Você está sem se defender adequadamente. Sofre –5 na Defesa e em Reflexos.",
5
+ "effects": [
6
+ "-5 na Defesa",
7
+ "-5 em Reflexos"
8
+ ],
9
+ "condition_type": null,
10
+ "escalates_to": null
11
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "id": "doente",
3
+ "name": "Doente",
4
+ "description": "Você está acometido por uma doença. Os efeitos variam conforme a doença específica.",
5
+ "effects": ["Efeitos variam conforme a doença (veja a descrição da doença)"],
6
+ "condition_type": "metabolismo",
7
+ "escalates_to": null
8
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "id": "em_chamas",
3
+ "name": "Em Chamas",
4
+ "description": "Você está pegando fogo. Sofre 1d6 pontos de dano de fogo no início de cada turno. Você pode apagar as chamas usando uma ação padrão para se jogar no chão e rolar.",
5
+ "effects": [
6
+ "1d6 pontos de dano de fogo no início de cada turno",
7
+ "Ação padrão para apagar (jogar no chão e rolar)"
8
+ ],
9
+ "condition_type": null,
10
+ "escalates_to": null
11
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "id": "enfeiticado",
3
+ "name": "Enfeitiçado",
4
+ "description": "Você está sob encantamento e considera a fonte do efeito como amiga. A fonte recebe +10 em testes de Diplomacia contra você.",
5
+ "effects": [
6
+ "Considera a fonte do efeito como aliada",
7
+ "A fonte recebe +10 em testes de Diplomacia contra você"
8
+ ],
9
+ "condition_type": "mental",
10
+ "escalates_to": null
11
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "id": "enjoado",
3
+ "name": "Enjoado",
4
+ "description": "Você está com náusea. Em cada rodada, pode usar apenas uma ação padrão ou uma ação de movimento (não ambas).",
5
+ "effects": ["Pode usar apenas uma ação padrão OU uma ação de movimento por rodada (não ambas)"],
6
+ "condition_type": "metabolismo",
7
+ "escalates_to": null
8
+ }
@@ -0,0 +1,12 @@
1
+ {
2
+ "id": "enredado",
3
+ "name": "Enredado",
4
+ "description": "Você está preso por teias, cipós ou efeito similar. Fica lento e vulnerável, e sofre –2 em jogadas de ataque.",
5
+ "effects": [
6
+ "Fica lento",
7
+ "Fica vulnerável",
8
+ "-2 em jogadas de ataque"
9
+ ],
10
+ "condition_type": "movimento",
11
+ "escalates_to": null
12
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "id": "envenenado",
3
+ "name": "Envenenado",
4
+ "description": "Você está sob efeito de veneno. Os efeitos variam conforme o veneno específico.",
5
+ "effects": ["Efeitos variam conforme o veneno (veja a descrição do veneno)"],
6
+ "condition_type": "veneno",
7
+ "escalates_to": null
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "id": "esmorecido",
3
+ "name": "Esmorecido",
4
+ "description": "Sua mente está seriamente abalada. Sofre –5 em testes de Inteligência, Sabedoria e Carisma.",
5
+ "effects": ["-5 em testes de Inteligência, Sabedoria e Carisma"],
6
+ "condition_type": "mental",
7
+ "escalates_to": null
8
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "id": "exausto",
3
+ "name": "Exausto",
4
+ "description": "Você está exausto de fadiga. Fica debilitado, lento e vulnerável. Se ficar exausto novamente, fica inconsciente.",
5
+ "effects": [
6
+ "Fica debilitado",
7
+ "Fica lento",
8
+ "Fica vulnerável",
9
+ "Se ficar exausto novamente → fica inconsciente"
10
+ ],
11
+ "condition_type": "cansaco",
12
+ "escalates_to": "inconsciente"
13
+ }
@@ -0,0 +1,12 @@
1
+ {
2
+ "id": "fascinado",
3
+ "name": "Fascinado",
4
+ "description": "Você está hipnotizado por um estímulo. Sofre –5 em testes de Percepção e só pode fazer ações de observar o que o fascina (não pode atacar, se mover ou fazer outras ações).",
5
+ "effects": [
6
+ "-5 em testes de Percepção",
7
+ "Só pode observar a fonte da fascinação",
8
+ "Não pode atacar, se mover ou realizar outras ações"
9
+ ],
10
+ "condition_type": "mental",
11
+ "escalates_to": null
12
+ }
@@ -0,0 +1,12 @@
1
+ {
2
+ "id": "fatigado",
3
+ "name": "Fatigado",
4
+ "description": "Você está cansado. Fica fraco e vulnerável. Se ficar fatigado novamente, fica exausto.",
5
+ "effects": [
6
+ "Fica fraco",
7
+ "Fica vulnerável",
8
+ "Se ficar fatigado novamente → fica exausto"
9
+ ],
10
+ "condition_type": "cansaco",
11
+ "escalates_to": "exausto"
12
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "id": "fraco",
3
+ "name": "Fraco",
4
+ "description": "Seu corpo está enfraquecido. Sofre –2 em testes de Força, Destreza e Constituição. Se ficar fraco novamente, fica debilitado.",
5
+ "effects": [
6
+ "-2 em testes de Força, Destreza e Constituição",
7
+ "Se ficar fraco novamente → fica debilitado"
8
+ ],
9
+ "condition_type": null,
10
+ "escalates_to": "debilitado"
11
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "id": "frustrado",
3
+ "name": "Frustrado",
4
+ "description": "Você está mentalmente abalado. Sofre –2 em testes de Inteligência, Sabedoria e Carisma. Se ficar frustrado novamente, fica esmorecido.",
5
+ "effects": [
6
+ "-2 em testes de Inteligência, Sabedoria e Carisma",
7
+ "Se ficar frustrado novamente → fica esmorecido"
8
+ ],
9
+ "condition_type": "mental",
10
+ "escalates_to": "esmorecido"
11
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "id": "imovel",
3
+ "name": "Imóvel",
4
+ "description": "Você não consegue se mover. Todos os seus deslocamentos são reduzidos a 0m.",
5
+ "effects": ["Todos os deslocamentos reduzidos a 0m"],
6
+ "condition_type": "movimento",
7
+ "escalates_to": null
8
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "id": "inconsciente",
3
+ "name": "Inconsciente",
4
+ "description": "Você está desmaiado ou dormindo. Fica indefeso e não pode realizar nenhuma ação.",
5
+ "effects": [
6
+ "Fica indefeso",
7
+ "Não pode realizar nenhuma ação"
8
+ ],
9
+ "condition_type": null,
10
+ "escalates_to": null
11
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "id": "indefeso",
3
+ "name": "Indefeso",
4
+ "description": "Você está completamente vulnerável. Fica desprevenido, sofre –10 na Defesa, falha automaticamente em Reflexos e pode sofrer um golpe de misericórdia.",
5
+ "effects": [
6
+ "Fica desprevenido",
7
+ "-10 na Defesa",
8
+ "Falha automaticamente em testes de Reflexos",
9
+ "Pode sofrer golpe de misericórdia"
10
+ ],
11
+ "condition_type": null,
12
+ "escalates_to": null
13
+ }
@@ -0,0 +1,12 @@
1
+ {
2
+ "id": "lento",
3
+ "name": "Lento",
4
+ "description": "Você está se movendo devagar. Seu deslocamento é reduzido à metade e você não pode correr nem fazer investidas.",
5
+ "effects": [
6
+ "Deslocamento reduzido à metade",
7
+ "Não pode correr",
8
+ "Não pode fazer investidas"
9
+ ],
10
+ "condition_type": "movimento",
11
+ "escalates_to": null
12
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "id": "ofuscado",
3
+ "name": "Ofuscado",
4
+ "description": "Sua visão está prejudicada por luz intensa ou escuridão parcial. Sofre –2 em jogadas de ataque e em testes de Percepção.",
5
+ "effects": [
6
+ "-2 em jogadas de ataque",
7
+ "-2 em testes de Percepção"
8
+ ],
9
+ "condition_type": "sentidos",
10
+ "escalates_to": null
11
+ }
@@ -0,0 +1,12 @@
1
+ {
2
+ "id": "paralisado",
3
+ "name": "Paralisado",
4
+ "description": "Seu corpo está completamente imóvel. Fica imóvel e indefeso. Só pode realizar ações mentais (como ativar habilidades que não exijam movimento).",
5
+ "effects": [
6
+ "Fica imóvel",
7
+ "Fica indefeso",
8
+ "Só pode realizar ações mentais"
9
+ ],
10
+ "condition_type": null,
11
+ "escalates_to": null
12
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "id": "pasmo",
3
+ "name": "Pasmo",
4
+ "description": "Você está atordoado mentalmente e não consegue agir. Perde todas as suas ações neste turno.",
5
+ "effects": ["Perde todas as ações no turno"],
6
+ "condition_type": "mental",
7
+ "escalates_to": null
8
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "id": "petrificado",
3
+ "name": "Petrificado",
4
+ "description": "Você foi transformado em pedra ou material inerte. Fica inconsciente e ganha RD 8 (contra todos os tipos de dano). Efeito do tipo metamorfose.",
5
+ "effects": [
6
+ "Fica inconsciente",
7
+ "Ganha RD 8 (todos os tipos de dano)"
8
+ ],
9
+ "condition_type": "metamorfose",
10
+ "escalates_to": null
11
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "id": "sangrando",
3
+ "name": "Sangrando",
4
+ "description": "Você está com uma ferida aberta e sangrando. No início de cada turno, deve fazer um teste de Constituição (CD 15) ou sofrer 1d6 pontos de dano.",
5
+ "effects": [
6
+ "No início de cada turno: teste de Constituição CD 15 ou sofre 1d6 de dano"
7
+ ],
8
+ "condition_type": "metabolismo",
9
+ "escalates_to": null
10
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "id": "sobrecarregado",
3
+ "name": "Sobrecarregado",
4
+ "description": "Você está carregando peso excessivo. Sofre –5 na penalidade de armadura e seu deslocamento é reduzido em –3m.",
5
+ "effects": [
6
+ "-5 na penalidade de armadura",
7
+ "Deslocamento reduzido em –3m"
8
+ ],
9
+ "condition_type": null,
10
+ "escalates_to": null
11
+ }
@@ -0,0 +1,12 @@
1
+ {
2
+ "id": "surdo",
3
+ "name": "Surdo",
4
+ "description": "Você não consegue ouvir. Falha automaticamente em testes de Percepção baseados em audição e sofre –5 em testes de Iniciativa. Há chance de falha ao lançar magias com componente verbal.",
5
+ "effects": [
6
+ "Falha automática em testes de Percepção auditiva",
7
+ "-5 em testes de Iniciativa",
8
+ "Chance de falha em magias com componente verbal"
9
+ ],
10
+ "condition_type": "sentidos",
11
+ "escalates_to": null
12
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "id": "surpreendido",
3
+ "name": "Surpreendido",
4
+ "description": "Você foi pego de surpresa no início do combate. Fica desprevenido e não pode realizar ações no turno de surpresa.",
5
+ "effects": [
6
+ "Fica desprevenido",
7
+ "Não pode realizar ações no turno de surpresa"
8
+ ],
9
+ "condition_type": null,
10
+ "escalates_to": null
11
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "id": "vulneravel",
3
+ "name": "Vulnerável",
4
+ "description": "Você está com a guarda baixa. Sofre –2 na Defesa.",
5
+ "effects": ["-2 na Defesa"],
6
+ "condition_type": null,
7
+ "escalates_to": null
8
+ }
@@ -0,0 +1,66 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "active_record"
4
+ require "json"
5
+
6
+ module Tormenta20
7
+ module Models
8
+ # Model representing a Condição (Status Condition) in Tormenta20.
9
+ #
10
+ # Conditions represent temporary states that affect a character's
11
+ # capabilities during play (e.g., Abalado, Cego, Paralisado).
12
+ #
13
+ # @example Find all conditions
14
+ # Tormenta20.condicoes.all
15
+ #
16
+ # @example Find conditions of a specific type
17
+ # Tormenta20.condicoes.by_type("medo")
18
+ #
19
+ # @!attribute [rw] id
20
+ # @return [String] Unique identifier (e.g., "abalado")
21
+ # @!attribute [rw] name
22
+ # @return [String] Condition name in Portuguese (e.g., "Abalado")
23
+ # @!attribute [rw] description
24
+ # @return [String, nil] Full description of the condition
25
+ # @!attribute [rw] effects
26
+ # @return [Array<String>] List of mechanical effects
27
+ # @!attribute [rw] condition_type
28
+ # @return [String, nil] Category (medo, mental, metabolismo, movimento, veneno, sentidos, cansaco, metamorfose)
29
+ # @!attribute [rw] escalates_to
30
+ # @return [String, nil] ID of the condition this escalates into when reapplied
31
+ class Condicao < Base
32
+ self.table_name = "condicoes"
33
+
34
+ TYPES = %w[
35
+ medo
36
+ mental
37
+ metabolismo
38
+ movimento
39
+ veneno
40
+ sentidos
41
+ cansaco
42
+ metamorfose
43
+ ].freeze
44
+
45
+ validates :id, presence: true, uniqueness: true
46
+ validates :name, presence: true
47
+
48
+ scope :by_type, ->(t) { where(condition_type: t) }
49
+ scope :medo, -> { where(condition_type: "medo") }
50
+ scope :mental, -> { where(condition_type: "mental") }
51
+ scope :metabolismo, -> { where(condition_type: "metabolismo") }
52
+ scope :movimento, -> { where(condition_type: "movimento") }
53
+
54
+ def to_h
55
+ {
56
+ id: id,
57
+ name: name,
58
+ description: description,
59
+ effects: effects,
60
+ condition_type: condition_type,
61
+ escalates_to: escalates_to
62
+ }.compact
63
+ end
64
+ end
65
+ end
66
+ end
@@ -25,6 +25,7 @@ module Tormenta20
25
25
  seed_equipamentos
26
26
  seed_itens_superiores
27
27
  seed_regras
28
+ seed_condicoes
28
29
 
29
30
  log "Database seeded successfully!"
30
31
  end
@@ -309,6 +310,14 @@ module Tormenta20
309
310
  )
310
311
  end
311
312
 
313
+ def seed_condicoes
314
+ import_json_files(
315
+ "condicoes",
316
+ Models::Condicao,
317
+ %i[id name description effects condition_type escalates_to]
318
+ )
319
+ end
320
+
312
321
  def import_json_files(subdir, model, attrs, extra_attrs: {}, transform: nil)
313
322
  json_dir = File.join(JSON_BASE_PATH, subdir)
314
323
  return unless Dir.exist?(json_dir)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Tormenta20
4
- VERSION = "0.2.6"
4
+ VERSION = "0.2.7"
5
5
  end
@@ -172,6 +172,16 @@ module Tormenta20
172
172
  Models::Raca
173
173
  end
174
174
 
175
+ # Access the Condicao (Status Condition) model for querying conditions.
176
+ #
177
+ # @return [Class<Models::Condicao>] The Condicao model class
178
+ # @example
179
+ # Tormenta20.condicoes.all
180
+ # Tormenta20.condicoes.by_type("medo")
181
+ def condicoes
182
+ Models::Condicao
183
+ end
184
+
175
185
  # @!endgroup
176
186
  end
177
187
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tormenta20
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.6
4
+ version: 0.2.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - LuanGB
@@ -103,6 +103,41 @@ files:
103
103
  - src/json/classes/lutador.json
104
104
  - src/json/classes/nobre.json
105
105
  - src/json/classes/paladino.json
106
+ - src/json/condicoes/abalado.json
107
+ - src/json/condicoes/agarrado.json
108
+ - src/json/condicoes/alquebrado.json
109
+ - src/json/condicoes/apavorado.json
110
+ - src/json/condicoes/atordoado.json
111
+ - src/json/condicoes/caido.json
112
+ - src/json/condicoes/cego.json
113
+ - src/json/condicoes/confuso.json
114
+ - src/json/condicoes/debilitado.json
115
+ - src/json/condicoes/desprevenido.json
116
+ - src/json/condicoes/doente.json
117
+ - src/json/condicoes/em_chamas.json
118
+ - src/json/condicoes/enfeiticado.json
119
+ - src/json/condicoes/enjoado.json
120
+ - src/json/condicoes/enredado.json
121
+ - src/json/condicoes/envenenado.json
122
+ - src/json/condicoes/esmorecido.json
123
+ - src/json/condicoes/exausto.json
124
+ - src/json/condicoes/fascinado.json
125
+ - src/json/condicoes/fatigado.json
126
+ - src/json/condicoes/fraco.json
127
+ - src/json/condicoes/frustrado.json
128
+ - src/json/condicoes/imovel.json
129
+ - src/json/condicoes/inconsciente.json
130
+ - src/json/condicoes/indefeso.json
131
+ - src/json/condicoes/lento.json
132
+ - src/json/condicoes/ofuscado.json
133
+ - src/json/condicoes/paralisado.json
134
+ - src/json/condicoes/pasmo.json
135
+ - src/json/condicoes/petrificado.json
136
+ - src/json/condicoes/sangrando.json
137
+ - src/json/condicoes/sobrecarregado.json
138
+ - src/json/condicoes/surdo.json
139
+ - src/json/condicoes/surpreendido.json
140
+ - src/json/condicoes/vulneravel.json
106
141
  - src/json/deuses/aharadak.json
107
142
  - src/json/deuses/allihanna.json
108
143
  - src/json/deuses/arsenal.json
@@ -1214,6 +1249,7 @@ files:
1214
1249
  - src/ruby/tormenta20/models/armadura.rb
1215
1250
  - src/ruby/tormenta20/models/base.rb
1216
1251
  - src/ruby/tormenta20/models/classe.rb
1252
+ - src/ruby/tormenta20/models/condicao.rb
1217
1253
  - src/ruby/tormenta20/models/divindade.rb
1218
1254
  - src/ruby/tormenta20/models/escudo.rb
1219
1255
  - src/ruby/tormenta20/models/item.rb