diff --git a/docs/modelagem/diagrama-entidade-relacionamento.md b/docs/modelagem/diagrama-entidade-relacionamento.md
index a32cba2..c50f8c2 100644
--- a/docs/modelagem/diagrama-entidade-relacionamento.md
+++ b/docs/modelagem/diagrama-entidade-relacionamento.md
@@ -5,7 +5,7 @@ O Diagrama de Entidade-Relacionamento (DER) destaca as principais entidades e se
Abaixo temos a imagem do diagrama de entidade relacionamento:
diff --git a/docs/modelagem/dicionario_dados.md b/docs/modelagem/dicionario_dados.md
index 82b6dc0..470f21a 100644
--- a/docs/modelagem/dicionario_dados.md
+++ b/docs/modelagem/dicionario_dados.md
@@ -8,126 +8,115 @@ O dicionário de dados são informações sobre os dados armazenados que são pe
**Observação**: Essa tabela possuí chaves estrangeiras da entidade Tipo.
-| Nome Variável | Tipo | Descrição | Valores permitidos | Permite valores nulos? | É chave? |
-| :-------------: | :-----: | :-------------------------------------------------------: | :----------------: | :--------------------: | :------: |
-| id | INT | Característica fundamental do Pokemón | 1-5000 | não | PK |
-| tipo_pokemon | VARCHAR | Pode ser NPC ou playes | a-z, A-Z | não | FK |
+| Nome Variável | Tipo | Descrição | Valores permitidos | Permite valores nulos? | É chave? |
+| :-----------: | :-----: | :----------------------: | :----------------: | :--------------------: | :------: |
+| id_pokemon | INT | Identificador do Pokemón | 1-5000 | não | PK |
+| tipo_pokemon | VARCHAR | Pode ser NPC ou playes | 1-5000 | não | - |
-## Entidade: Player
+## Entidade: Jogador
-**Descrição**: A entidade player descreve as informações ligadas ao personagem jogável.
+**Descrição**: A entidade Jogador descreve as informações ligadas ao personagem jogável.
-| Nome Variável | Tipo | Descrição | Valores permitidos | Permite valores nulos? | É chave? |
-| :----------------: | :--: | :---------------------: | :----------------: | :--------------------: | :------: |
-| id | INT | Identificador do player | 1-5000 | não | PK |
-| id_inventario | INT | Tamanho do inventário | 1-5000 | não | FK |
-| id_pokemon | INT | Característica fundamental do Pokemón | 1-5000 | não | FK |
-| tipo_elemental | VARCHAR | Condições que podem afetar um Pokémon durante as batalhas | a-z, A-Z | não | FK |
+| Nome Variável | Tipo | Descrição | Valores permitidos | Permite valores nulos? | É chave? |
+| :-------------: | :-----: | :-------------------------------------------------------: | :----------------: | :--------------------: | :------: |
+| id_jogador | INT | Identificador do player | 1-5000 | não | PK |
+| id_correio | INT | Tamanho do inventário | 1-5000 | não | FK |
+| tipo_elemental | VARCHAR | Condições que podem afetar um Pokémon durante as batalhas | a-z, A-Z | não | FK |
+| posicao | INT | Poisição do jogador no terreno | 1-5000 | não | FK |
| nivel | INT | Nível do Pokemón | 1-5000 | não | - |
-| nome | VARCHAR | Nome do Pokemón | a-z, A-Z | não | - |
+| nome | VARCHAR | Nome do Pokemón | a-z, A-Z | não | - |
| vida | INT | Vida do Pokemón | 1-5000 | não | - |
| ataque_fisico | INT | Valor do ataque físico do Pokemón | 1-5000 | sim | - |
| defesa_fisica | INT | Valor da defesa físico do Pokemón | 1-5000 | sim | - |
| ataque_especial | INT | Valor do ataque especial do Pokemón | 1-5000 | sim | - |
-| defesa_especial | INT | Valor da defesa especial do Pokemón | 1-5000 | sim | - |
| velocidade | INT | Valor da velocidade do Pokemón | 1-5000 | sim | - |
| acuracia | INT | Valor da precisão do ataque do Pokemón | 1-5000 | sim | - |
| evasao | INT | Capacidade de esquivar do ataque | 1-5000 | sim | - |
-| status | VARCHAR | Condições que podem afetar um Pokémon durante as batalhas | a-z, A-Z | sim | - |
-| saldo | INT | Dinheiro que o jogador possui para gastar nas lojas | 1-5000 | sim | - |
-
+| status | VARCHAR | Condições que podem afetar um Pokémon durante as batalhas | a-z, A-Z | sim | - |
+| saldo | INT | Dinheiro que o jogador possui para gastar nas lojas | 1-5000 | sim | - |
+| tam_inventario | INT | Representa o tamanho do inventário do jogador | 20 | não | - |
## Entidade: Dialogo
**Descrição**: A entidade dialogo armazena as falas desencadeadas com a interação com um vendedor.
-| Nome Variável | Tipo | Descrição | Valores permitidos | Permite valores nulos? | É chave? |
-| :----------------: | :--: | :---------------------: | :----------------: | :--------------------: | :------: |
-| id | INT | Identificador do dialogo | 1-5000 | não | PK |
-| personagem | VARCHAR | Nome do personagem que fala | A-Z,a-z | não | - |
-| fala | VARCHAR | Texto da conversa | A-Z,a-z | não | FK |
-| ordem | INT | Ordem que esta fala vai aparecer para o jogador | 1-5000 | não | - |
-| id_vendedor | INT | Codigo de identificação do vendedor | 1-5000 | não | FK |
+| Nome Variável | Tipo | Descrição | Valores permitidos | Permite valores nulos? | É chave? |
+| :-----------: | :-----: | :---------------------------------------------: | :----------------: | :--------------------: | :------: |
+| id | INT | Identificador do dialogo | 1-5000 | não | PK |
+| personagem | VARCHAR | Nome do personagem que fala | a-z, A-Z | não | - |
+| fala | VARCHAR | Texto da conversa | a-z, A-Z | não | - |
+| ordem | INT | Ordem que esta fala vai aparecer para o jogador | 1-5000 | não | - |
## Entidade: Missão
-**Descrição**: A entidade Missão relaciona o número de identificação da missão, mapa, loot e npc.
+**Descrição**: A entidade Missão relaciona o número de identificação da missão, mapa e loot.
**Observação**: Essa tabela possuí chaves estrangeiras das entidades Mapa, Npc e Loot.
-| Nome Variável | Tipo | Descrição | Valores permitidos | Permite valores nulos? | É chave? |
-| :-----------: | :---------: | :-------------------------------: | :----------------: | :--------------------: | :------: |
-| id | INT | Código de identificação da missão | 1-5000 | não | PK |
-| id_mapa | INT | Código de identificação do mapa | 1-5000 | não | FK |
-| id_npc | INT | Código de identificação do mapa | 1-5000 | não | FK |
-| id_loot | INT | Código de identificação do loot | 1-5000 | não | FK |
-| dificuldade | INT | Nível de dificuldade da missão | 1-5000 | não | - |
-| objetivo | VARCHAR | Objetivo da missão | a-z, A-Z | não | - |
-| tipo_missao | INT | Tipo da missão(principal ou não) | 1-5000 | não | - |
-| id_correio | INT | Código do correio | 1-5000 | não | FK |
+| Nome Variável | Tipo | Descrição | Valores permitidos | Permite valores nulos? | É chave? |
+| :-----------: | :-----: | :-----------------------------------: | :----------------: | :--------------------: | :------: |
+| id_missao | INT | Código de identificação da missão | 1-5000 | não | PK |
+| nome_mapa | VARCHAR | Nome do mapa | a-z, A-Z | não | FK |
+| id_loot | INT | Código de identificação do loot | 1-5000 | não | FK |
+| id_correio | INT | Código do correio | 1-5000 | não | FK |
+| dificuldade | INT | Nível de dificuldade da missão | 1-5000 | não | - |
+| objetivo | VARCHAR | Objetivo da missão | a-z, A-Z | não | - |
+| principal | BOOLEAN | Indica se a missão é principal ou não | true ou false | não | - |
## Entidade: Correio
**Descrição**: A entidade Correio armazena as missões aceitas pelo jogador.
-| Nome Variável | Tipo | Descrição | Valores permitidos | Permite valores nulos? | É chave? |
-| :-----------: | :--: | :---------------------: | :----------------: | :--------------------: | :------: |
-| id_correio | INT | Identificador do correio | 1-5000 | não | PK |
-
+| Nome Variável | Tipo | Descrição | Valores permitidos | Permite valores nulos? | É chave? |
+| :-----------: | :--: | :-----------------------------------------------------: | :----------------: | :--------------------: | :------: |
+| id | INT | Identificador do correio | 1-5000 | não | PK |
+| jogador_id | INT | Identificador do jogador | 1-5000 | não | FK |
+| terreno_id | INT | Identificador do terreno onde o correio está localizado | 1-5000 | não | FK |
## Entidade: Inventário
**Descrição**: A entidade Inventário relaciona o loot com o player.
-**Observação**: Essa tabela possui chave estrangeira da entidade `Item`.
+**Observação**: Essa tabela possui chave estrangeira da entidade `instancia_item`.
-| Nome Variável | Tipo | Descrição | Valores permitidos | Permite valores nulos? | É chave? |
-| :-----------: | :--: | :---------------------: | :----------------: | :--------------------: | :------: |
-| id | INT | Identificador do inventário | 1-5000 | não | PK |
-| id_item | INT | Identificador dos itens | 1-5000 | não | FK |
-| quantidade | INT | Quantidade de itens | 1-5000 | sim | |
+| Nome Variável | Tipo | Descrição | Valores permitidos | Permite valores nulos? | É chave? |
+| :---------------: | :--: | :-------------------------: | :----------------: | :--------------------: | :------: |
+| id_inventario | INT | Identificador do inventário | 1-5000 | não | PK |
+| id_instancia_item | INT | Identificador dos itens | 1-5000 | não | FK |
## Entidade: NPC
**Descrição**: A entidade NPC guarda as informações relacionada ao nome do personagem não jogável.
-| Nome Variável | Tipo | Descrição | Valores permitidos | Permite valores nulos? | É chave? |
-| :-----------: | :---------: | :------------------: | :----------------: | :--------------------: | :------: |
-| id | INT | Identificador do player | 1-5000 | não | PK |
-| id_pokemon | INT | Característica fundamental do Pokemón | 1-5000 | não | FK |
-| tipo_elemental | VARCHAR | Condições que podem afetar um Pokémon durante as batalhas | a-z, A-Z | não | FK |
-| nivel | INT | Nível do Pokemón | 1-5000 | não | - |
-| nome | VARCHAR | Nome do Pokemón | a-z, A-Z | não | - |
-| vida | INT | Vida do Pokemón | 1-5000 | não | - |
-| ataque_fisico | INT | Valor do ataque físico do Pokemón | 1-5000 | sim | - |
-| defesa_fisica | INT | Valor da defesa físico do Pokemón | 1-5000 | sim | - |
-| ataque_especial | INT | Valor do ataque especial do Pokemón | 1-5000 | sim | - |
-| velocidade | INT | Valor da velocidade do Pokemón | 1-5000 | sim | - |
-| acuracia | INT | Valor da precisão do ataque do Pokemón | 1-5000 | sim | - |
-| evasao | INT | Capacidade de esquivar do ataque | 1-5000 | sim | - |
-| status | VARCHAR | Condições que podem afetar um Pokémon durante as batalhas | a-z, A-Z | sim | - |
+| Nome Variável | Tipo | Descrição | Valores permitidos | Permite valores nulos? | É chave? |
+| :-----------: | :--: | :--------------------------: | :----------------: | :--------------------: | :------: |
+| id_npc | INT | Identificador do NPC | 1-5000 | não | PK |
+| id_tipo_npc | INT | Identificador do tipo do NPC | 1-5000 | não | - |
## Entidade: Item
**Descrição**: A entidade Item armazena as informações relacionadas aos itens que podem ter no iventário do player.
-| Nome Variável | Tipo | Descrição | Valores permitidos | Permite valores nulos? | É chave? |
-| :-----------: | :---------: | :-----------------------------: | :----------------: | :--------------------: | :------: |
-| id | INT | Código de Identificação do item | 1-5000 | não | PK |
-| descricao | VARCHAR | Nome do item | a-z, A-Z | não | - |
-
+| Nome Variável | Tipo | Descrição | Valores permitidos | Permite valores nulos? | É chave? |
+| :-----------: | :-----: | :-----------------------------: | :----------------: | :--------------------: | :------: |
+| id_item | INT | Código de Identificação do item | 1-5000 | não | PK |
+| nome | VARCHAR | Nome do item | a-z, A-Z | não | - |
+| descricao | VARCHAR | Descrição do item | a-z, A-Z | não | - |
+| efeito | VARCHAR | Efeito que o item pode causar | a-z, A-Z | não | - |
+| valor | INT | Valor de compra do item | 1-5000 | não | - |
## Entidade: Habilidade
**Descrição**: Descreve as habilidades disponíveis no jogo, o identificador da habilidade, seu nome, dano, tipo, efeito e a acurácia.
-| Nome Variável | Tipo | Descrição | Valores permitidos | Permite valores nulos? | É chave? |
-| :-----------: | :---------: | :-------------------------: | :----------------: | :--------------------: | :------: |
-| id | INT | Identificador da habilidade | 1-5000 | não | PK |
-| tipo_elemental | INT | Condições que podem afetar um Pokémon durante as batalhas | 1-5000 | não | FK |
-| nome | VARCHAR | Nome da habilidade | a-z, A-Z | não | - |
-| acuracia | INT | Precisão do dano | 1-5000 | sim | - |
-| dano | INT | Dano causado pelo pokemón | 1-5000 | sim | - |
+| Nome Variável | Tipo | Descrição | Valores permitidos | Permite valores nulos? | É chave? |
+| :------------: | :-----: | :-------------------------------------------------------: | :----------------: | :--------------------: | :------: |
+| id_habilidade | INT | Identificador da habilidade | 1-5000 | não | PK |
+| tipo_elemental | INT | Condições que podem afetar um Pokémon durante as batalhas | 1-5000 | não | FK |
+| nome_efeito | VARCHAR | Identificação do efeito que a habilidade causa | a-z, A-Z | não | FK |
+| nome | VARCHAR | Nome da habilidade | a-z, A-Z | não | - |
+| acuracia | INT | Precisão do dano | 1-5000 | sim | - |
+| dano | INT | Dano causado pelo pokemón | 1-5000 | sim | - |
## Entidade: Pokemon-Habilidade
@@ -135,11 +124,11 @@ O dicionário de dados são informações sobre os dados armazenados que são pe
**Observação**: Essa tabela possui chaves estrangeiras das entidades `Habilidade` e `Pokemon`.
-| Nome Variável | Tipo | Descrição | Valores permitidos | Permite valores nulos? | É chave? |
-| :-----------: | :--: | :-------------------------: | :----------------: | :--------------------: | :------: |
-| id | INT | Identificador da Entidade | 1-5000 | não | PK |
-| id_habilidade | INT | Identificador da habilidade | 1-5000 | não | FK |
-| id_pokemon | INT | Identificador de pokemon | 1-5000 | não | FK |
+| Nome Variável | Tipo | Descrição | Valores permitidos | Permite valores nulos? | É chave? |
+| :-------------------: | :--: | :-------------------------: | :----------------: | :--------------------: | :------: |
+| id_pokemon_habilidade | INT | Identificador da Entidade | 1-5000 | não | PK |
+| id_habilidade | INT | Identificador da habilidade | 1-5000 | não | FK |
+| id_pokemon | INT | Identificador de pokemon | 1-5000 | não | FK |
## Entidade: Andar
@@ -147,20 +136,21 @@ O dicionário de dados são informações sobre os dados armazenados que são pe
**Observação**: Essa tabela possui chave estrangeira da entidade `Mapa`.
-| Nome Variável | Tipo | Descrição | Valores permitidos | Permite valores nulos? | É chave? |
-| :-----------: | :--: | :--------------------: | :----------------: | :--------------------: | :------: |
-| id | INT | Identificador do andar | 1-5000 | não | PK |
-| id_mapa | INT | Identificador do mapa | 1-5000 | não | FK |
+| Nome Variável | Tipo | Descrição | Valores permitidos | Permite valores nulos? | É chave? |
+| :-----------: | :-----: | :----------------------: | :----------------: | :--------------------: | :------: |
+| id_andar | INT | Identificador de terreno | 1-5000 | não | PK |
+| nome_mapa | VARCHAR | Nome do mapa | a-z, A-Z | não | - |
+| numero_andar | INT | Número do andar | 1 - | não | - |
## Entidade: Tipo_Terreno
**Descrição**: Descreve o tipo de terreno.
-| Nome Variável | Tipo | Descrição | Valores permitidos | Permite valores nulos? | É chave? |
-| :-----------: | :---------: | :----------------------: | :----------------: | :--------------------: | :------: |
-| id | INT | Identificador de terreno | 1-5000 | não | PK |
-| descricao | VARCHAR[50] | Descrição de terreno | 1-5000 | não | - |
-| movimento | INT | Identificador da possibilidade de se mover em um terreno | 0-1 | não | - |
+| Nome Variável | Tipo | Descrição | Valores permitidos | Permite valores nulos? | É chave? |
+| :-------------: | :-----: | :------------------------------------------------: | :----------------: | :--------------------: | :------: |
+| id_tipo_terreno | INT | Identificador do tipo de terreno | 1-5000 | não | PK |
+| descricao | VARCHAR | Descrição do terreno | a-z, A-Z | não | - |
+| movimento | INT | Indica se pode se movimentar nesse tipo de terreno | true ou false | não | - |
## Entidade: Terreno
@@ -168,13 +158,13 @@ O dicionário de dados são informações sobre os dados armazenados que são pe
**Observação**: Essa tabela possui chave estrangeira da entidade `Tipo_Terreno`.
-| Nome Variável | Tipo | Descrição | Valores permitidos | Permite valores nulos? | É chave? |
-| :-------------: | :--: | :------------------------------: | :----------------: | :--------------------: | :------: |
-| id | INT | Identificador do terreno | 1-5000 | não | PK |
-| id_tipo_terreno | INT | Identificador do tipo de terreno | 1-5000 | não | FK |
-| id_andar | INT | Identificador do andar onde o terreno está inserido | 1-5000 | não | FK |
-| x | INT | Coordenada do terreno | 1-5000 | não | - |
-| y | INT | Coordenada do terreno | 1-5000 | não | - |
+| Nome Variável | Tipo | Descrição | Valores permitidos | Permite valores nulos? | É chave? |
+| :-------------: | :--: | :-------------------------------------------------: | :----------------: | :--------------------: | :------: |
+| id_terreno | INT | Identificador do terreno | 1-5000 | não | PK |
+| id_tipo_terreno | INT | Identificador do tipo de terreno | 1-5000 | não | FK |
+| id_andar | INT | Identificador do andar onde o terreno está inserido | 1-5000 | não | FK |
+| x | INT | Coordenada do terreno | 1-5000 | não | - |
+| y | INT | Coordenada do terreno | 1-5000 | não | - |
## Entidade: Tipo_Elemental
@@ -182,75 +172,146 @@ O dicionário de dados são informações sobre os dados armazenados que são pe
**Observação**: Essa tabela possui chave estrangeira da entidade `Interação`.
-| Nome Variável | Tipo | Descrição | Valores permitidos | Permite valores nulos? | É chave? |
-| :-----------: | :---------: | :--------------------------------: | :----------------: | :--------------------: | :------: |
-| nome | INT | Indetificador da interação do tipo | 1-5000 | não | PK |
+| Nome Variável | Tipo | Descrição | Valores permitidos | Permite valores nulos? | É chave? |
+| :-----------: | :-----: | :--------------------------------: | :----------------: | :--------------------: | :------: |
+| nome | VARCHAR | Indetificador da interação do tipo | a-z, A-Z | não | PK |
## Entidade: Interacao
**Descrição**: A entidade Interação armazena as relações de eficácia entre diferentes tipos de ataques e defesas do Pokémon.
-| Nome Variável | Tipo | Descrição | Valores permitidos | Permite valores nulos? | É chave? |
-| :--------------: | :--: | :------------------------: | :----------------: | :--------------------: | :------: |
-| id | INT | Identificador da interação | 1-5000 | não | PK |
+| Nome Variável | Tipo | Descrição | Valores permitidos | Permite valores nulos? | É chave? |
+| :--------------: | :--: | :--------------------------------------: | :----------------: | :--------------------: | :------: |
+| id | INT | Identificador da interação | 1-5000 | não | PK |
| id_tipo_atacante | INT | Tipo elemental da habilidade do atacante | 1-5000 | não | FK |
-| id_tipo_defensor | INT | Tipo elemental do pokemon defensor | 1-5000 | não | FK |
-| valor | INT | Fator multiplicativo do dano | 1-5000 | não | - |
+| id_tipo_defensor | INT | Tipo elemental do pokemon defensor | 1-5000 | não | FK |
+| valor | INT | Fator multiplicativo do dano | 1-5000 | não | - |
## Entidade: Efeito
**Descrição**: Representa o efeito que uma habilidade pode causar
-| Nome Variável | Tipo | Descrição | Valores permitidos | Permite valores nulos? | É chave? |
-| :-----------: | :---------: | :-------: | :----------------: | :--------------------: | :------: |
-| nome | VARCHAR | Nome do efeito | a-z, A-Z | não | PK |
-| dano | INT | Dano causado pelo efeito | 1-5000 | não | - |
+| Nome Variável | Tipo | Descrição | Valores permitidos | Permite valores nulos? | É chave? |
+| :-----------: | :-----: | :----------------------: | :----------------: | :--------------------: | :------: |
+| nome | VARCHAR | Nome do efeito | a-z, A-Z | não | PK |
+| dano | INT | Dano causado pelo efeito | 1-5000 | não | - |
-## Entidade: Terreno_NPC
+## Entidade: Terreno_Loot
-**Descrição**: Tabela auxiliar para indicar onde o npc está no terreno.
+**Descrição**: Tabela auxiliar para indicar qual loot está no terreno.
-**Observação**: Essa tabela possui chaves estrangeiras das entidades `Terreno` e `NPC`.
+**Observação**: Essa tabela possui chaves estrangeiras das entidades `Terreno` e `Loot`.
-| Nome Variável | Tipo | Descrição | Valores permitidos | Permite valores nulos? | É chave? |
-| :-----------: | :--: | :-------: | :----------------: | :--------------------: | :------: |
-| id | INT | Identificador do local do NPC | 1-5000 | não | PK |
-| id_terreno | INT | Identificador do terreno onde o NPC está | 1-5000 | não | FK |
-| id_npc | INT | Identificador do NPC que está no terreno | 1-5000 | não | FK |
+| Nome Variável | Tipo | Descrição | Valores permitidos | Permite valores nulos? | É chave? |
+| :-------------: | :--: | :---------------------------------------: | :----------------: | :--------------------: | :------: |
+| id_terreno_loot | INT | Identificador do local onde está o loot | 1-5000 | não | PK |
+| id_terreno | INT | Identificador do terreno onde o loot está | 1-5000 | não | FK |
+| id_loot | INT | Identificador do loot que está no terreno | 1-5000 | não | FK |
-## Entidade: Terreno_Loot
+## Entidade: Loot
-**Descrição**: Tabela auxiliar para indicar qual loot está no terreno.
+**Descrição**: Tabela que representa a recompensa da missão ou do terreno.
-**Observação**: Essa tabela possui chaves estrangeiras das entidades `Terreno` e `Loot`.
+**Observação**: Essa tabela possui chaves estrangeiras das entidades `Terreno`.
-| Nome Variável | Tipo | Descrição | Valores permitidos | Permite valores nulos? | É chave? |
-| :-----------: | :--: | :-------: | :----------------: | :--------------------: | :------: |
-| id | INT | Identificador do local onde está o loot | 1-5000 | não | PK |
-| id_terreno | INT | Identificador do terreno onde o loot está | 1-5000 | não | FK |
-| id_loot | INT | Identificador do loot que está no terreno | 1-5000 | não | FK |
+| Nome Variável | Tipo | Descrição | Valores permitidos | Permite valores nulos? | É chave? |
+| :-----------: | :--: | :---------------------------------------: | :----------------: | :--------------------: | :------: |
+| id_loot | INT | Identificador do loot | 1-5000 | não | PK |
+| id_terreno | INT | Identificador do terreno onde o loot está | 1-5000 | não | FK |
+## Entidade: Inimigo
+**Descrição**: A entidade Inimigo descreve as informações ligadas aos inimigos do jogo.
+| Nome Variável | Tipo | Descrição | Valores permitidos | Permite valores nulos? | É chave? |
+| :-------------: | :-----: | :-------------------------------------------------------: | :----------------: | :--------------------: | :------: |
+| id_inimigo | INT | Identificador do inimigo | 1-5000 | não | PK |
+| tipo_elemental | VARCHAR | Condições que podem afetar um Pokémon durante as batalhas | a-z, A-Z | não | FK |
+| posicao | INT | Poisição do inimigo no terreno | 1-5000 | não | FK |
+| nivel | INT | Nível do inimigo | 1-5000 | não | - |
+| nome | VARCHAR | Nome do inimigo | a-z, A-Z | não | - |
+| vida | INT | Vida do inimigo | 1-5000 | não | - |
+| ataque_fisico | INT | Valor do ataque físico do inimigo | 1-5000 | sim | - |
+| defesa_fisica | INT | Valor da defesa físico do inimigo | 1-5000 | sim | - |
+| ataque_especial | INT | Valor do ataque especial do inimigo | 1-5000 | sim | - |
+| velocidade | INT | Valor da velocidade do inimigo | 1-5000 | sim | - |
+| acuracia | INT | Valor da precisão do ataque do inimigo | 1-5000 | sim | - |
+| evasao | INT | Capacidade de esquivar do ataque | 1-5000 | sim | - |
+| status | VARCHAR | Condições que podem afetar um Pokémon durante as batalhas | a-z, A-Z | sim | - |
-## Entidade: Loot
+## Entidade: instancia_item
-**Descrição**: Tabela que representa a recompensa da missão ou do terreno.
+**Descrição**: A entidade instancia_item relaciona o item com ao inventário do jogador.
-**Observação**: Essa tabela possui chaves estrangeiras das entidades `Terreno`.
+**Observação**: Essa tabela possui chave estrangeira da entidade `item`.
+
+| Nome Variável | Tipo | Descrição | Valores permitidos | Permite valores nulos? | É chave? |
+| :---------------: | :--: | :--------------------------------: | :----------------: | :--------------------: | :------: |
+| id_instancia_item | INT | Identificador da instância do item | 1-5000 | não | PK |
+| id_item | INT | Identificador dos itens | 1-5000 | não | FK |
+
+## Entidade: loot_item
+
+**Descrição**: A entidade instancialoot_item_item relaciona os itens com loot.
+
+**Observação**: Essa tabela possui chave estrangeira das entidades `item` e `loot`.
+
+| Nome Variável | Tipo | Descrição | Valores permitidos | Permite valores nulos? | É chave? |
+| :-----------: | :--: | :--------------------------------------------: | :----------------: | :--------------------: | :------: |
+| id_loot_item | INT | Identificador da instância do item | 1-5000 | não | PK |
+| id_item | INT | Identificador dos itens | 1-5000 | não | FK |
+| id_loot | INT | Identificador do loot ao qual o item faz parte | 1-5000 | não | FK |
+| quantidade | INT | Quantidade de itens que o loot armazena | 1-5000 | não | - |
+
+## Entidade: vendedor
+
+**Descrição**: A entidade vendedor descreve as informações ligadas aos vendedores do jogo.
+
+| Nome Variável | Tipo | Descrição | Valores permitidos | Permite valores nulos? | É chave? |
+| :-------------: | :-----: | :-------------------------------------------------------: | :----------------: | :--------------------: | :------: |
+| id_vendedor | INT | Identificador do vendedor | 1-5000 | não | PK |
+| tipo_elemental | VARCHAR | Condições que podem afetar um Pokémon durante as batalhas | a-z, A-Z | não | FK |
+| posicao | INT | Poisição do vendedor no terreno | 1-5000 | não | FK |
+| nivel | INT | Nível do vendedor | 1-5000 | não | - |
+| nome | VARCHAR | Nome do vendedor | a-z, A-Z | não | - |
+| vida | INT | Vida do vendedor | 1-5000 | não | - |
+| ataque_fisico | INT | Valor do ataque físico do vendedor | 1-5000 | sim | - |
+| defesa_fisica | INT | Valor da defesa físico do vendedor | 1-5000 | sim | - |
+| ataque_especial | INT | Valor do ataque especial do vendedor | 1-5000 | sim | - |
+| velocidade | INT | Valor da velocidade do vendedor | 1-5000 | sim | - |
+| acuracia | INT | Valor da precisão do ataque do vendedor | 1-5000 | sim | - |
+| evasao | INT | Capacidade de esquivar do ataque | 1-5000 | sim | - |
+| status | VARCHAR | Condições que podem afetar um Pokémon durante as batalhas | a-z, A-Z | sim | - |
+
+## Entidade: instancia_missao
+
+**Descrição**: A entidade instancia_missao relaciona o a missão ao jogador.
+
+**Observação**: Essa tabela possui chaves estrangeiras das entidades `missao` e `jogador`.
+
+| Nome Variável | Tipo | Descrição | Valores permitidos | Permite valores nulos? | É chave? |
+| :-----------: | :-----: | :------------------------------: | :----------------: | :--------------------: | :------: |
+| id_missao | INT | Identificador da missão | 1-5000 | não | FK |
+| id_jogador | INT | Identificador do jogador | 1-5000 | não | FK |
+| concluida | BOOLEAN | Indica se a missão foi concluída | true ou false | não | - |
+
+## Entidade: mapa
+
+**Descrição**: A entidade mapa possui as informações dos mapas do jogo.
-| Nome Variável | Tipo | Descrição | Valores permitidos | Permite valores nulos? | É chave? |
-| :-----------: | :--: | :-------: | :----------------: | :--------------------: | :------: |
-| id | INT | Identificador do loot | 1-5000 | não | PK |
-| id_terreno | INT | Identificador do terreno onde o loot está | 1-5000 | não | FK |
+| Nome Variável | Tipo | Descrição | Valores permitidos | Permite valores nulos? | É chave? |
+| :----------------: | :-----: | :-------------------------------------: | :----------------: | :--------------------: | :------: |
+| nome | VARCHAR | Nome do mapa | a-z, A-Z | não | PK |
+| quantidade_andares | INT | Quantidade de andares que o mapa possui | 1-5000 | não | - |
## Histórico de Versão
-| Versão | Data | Descrição | Autor(es) |
-| :----: | :--------: | :------------------------------------------: | :--------------------------------------------------------------------------------------------------------: |
-| `1.0` | 22/04/2024 | Primeira versão do dicionário de dados | [Gabriel Marcolino](https://github.com/GabrielMR360) e [Shaíne Oliveira](ttps://github.com/ShaineOliveira) |
-| `1.1` | 27/06/2024 | Ajustando e corrigindo o dinionário de dados | [Gabriel Marcolino](https://github.com/GabrielMR360) e [Shaíne Oliveira](ttps://github.com/ShaineOliveira) |
-| `1.2` | 12/07/2024 | Adicionando atributos e tabelas | [Gabriel Marcolino](https://github.com/GabrielMR360) e [Shaíne Oliveira](ttps://github.com/ShaineOliveira) |
-| `1.3` | 20/07/2024 | Correção de valores permitidos e descrição | [Gabriel Marcolino](https://github.com/GabrielMR360) e [Shaíne Oliveira](ttps://github.com/ShaineOliveira) |
-| `1.4` | 20/07/2024 | Adição de tabelas e correção de chaves estrangeiras | [Leonardo Bonetti](https://github.com/LeoFacB)|
-| `1.5` | 05/08/2024 | Correção das entidades | [Gabriel Marcolino](https://github.com/GabrielMR360) e [Shaíne Oliveira](ttps://github.com/ShaineOliveira) |
+| Versão | Data | Descrição | Autor(es) |
+| :----: | :--------: | :-------------------------------------------------: | :--------------------------------------------------------------------------------------------------------: |
+| `1.0` | 22/04/2024 | Primeira versão do dicionário de dados | [Gabriel Marcolino](https://github.com/GabrielMR360) e [Shaíne Oliveira](ttps://github.com/ShaineOliveira) |
+| `1.1` | 27/06/2024 | Ajustando e corrigindo o dinionário de dados | [Gabriel Marcolino](https://github.com/GabrielMR360) e [Shaíne Oliveira](ttps://github.com/ShaineOliveira) |
+| `1.2` | 12/07/2024 | Adicionando atributos e tabelas | [Gabriel Marcolino](https://github.com/GabrielMR360) e [Shaíne Oliveira](ttps://github.com/ShaineOliveira) |
+| `1.3` | 20/07/2024 | Correção de valores permitidos e descrição | [Gabriel Marcolino](https://github.com/GabrielMR360) e [Shaíne Oliveira](ttps://github.com/ShaineOliveira) |
+| `1.4` | 20/07/2024 | Adição de tabelas e correção de chaves estrangeiras | [Leonardo Bonetti](https://github.com/LeoFacB) |
+| `1.5` | 05/08/2024 | Correção das entidades | [Gabriel Marcolino](https://github.com/GabrielMR360) e [Shaíne Oliveira](ttps://github.com/ShaineOliveira) |
+| `1.5` | 07/09/2024 | Atualização do dicionário de dados | [Gabriel Marcolino](https://github.com/GabrielMR360) e [Shaíne Oliveira](ttps://github.com/ShaineOliveira) |
\ No newline at end of file
diff --git a/docs/modelagem/modelo-entidade-relacionamento.md b/docs/modelagem/modelo-entidade-relacionamento.md
index 954f360..3f8f384 100644
--- a/docs/modelagem/modelo-entidade-relacionamento.md
+++ b/docs/modelagem/modelo-entidade-relacionamento.md
@@ -12,11 +12,11 @@ Abaixo temos a imagem do modelo de entidade relacionamento:
-[Link para o Modelo Entidade-Relacionamento](https://drive.google.com/file/d/1nllkrmmWlrq3KmpdA-dB0EknChRtXsTk/view?usp=sharing)
+[Link para o Modelo Entidade-Relacionamento](https://miro.com/app/board/uXjVKwg_uxM=/)
## Histórico de Versão
| Versão | Data | Descrição | Autor(es) |
| :----: | :--------: | :-----------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
| `1.0` | 27/06/2024 | Primeira versão do modelo entidade relacionanemto | [Gabriel Marcolino](https://github.com/GabrielMR360), [Shaíne Oliveira](ttps://github.com/ShaineOliveira), [José Filipi](https://github.com/JoseFilipi) e [Leonardo Bonetti](https://github.com/LeoFacB) |
-| `1.1` | 27/06/2024 | Atualizando MER | [Gabriel Marcolino](https://github.com/GabrielMR360) e [Shaíne Oliveira](ttps://github.com/ShaineOliveira) |
+| `1.1` | 27/06/2024 | Atualizando MER | [Gabriel Marcolino](https://github.com/GabrielMR360) e [Shaíne Oliveira](ttps://github.com/ShaineOliveira) |
\ No newline at end of file
diff --git a/docs/sql/trigger_procedure/trigger.md b/docs/sql/trigger_procedure/trigger.md
new file mode 100644
index 0000000..838fa8d
--- /dev/null
+++ b/docs/sql/trigger_procedure/trigger.md
@@ -0,0 +1,82 @@
+# Triggers e Stored Procedures
+
+#### Validar a alteração do tamanho do inventário
+~~~sql
+CREATE FUNCTION valida_update_tam_inventario() RETURNS TRIGGER AS
+$$
+BEGIN
+ IF NEW.tam_inventario != OLD.tam_inventario THEN
+ RAISE EXCEPTION 'A coluna tam_inventario não pode ser alterada diretamente.';
+ END IF;
+END;
+$$ LANGUAGE plpgsql;
+
+DROP TRIGGER IF EXISTS valida_update_tam_inventario ON jogador;
+CREATE TRIGGER valida_update_tam_inventario
+ BEFORE UPDATE
+ ON jogador
+ FOR EACH ROW
+EXECUTE FUNCTION valida_update_tam_inventario();
+~~~
+
+#### Verificar se o inventário do jogador está cheio antes de adicionar um novo item
+~~~~sql
+CREATE OR REPLACE FUNCTION verificar_tam_inventario() RETURNS TRIGGER AS
+$$
+DECLARE
+ qtd_itens INT;
+ tamanho_inventario INT;
+BEGIN
+ SELECT count(*)
+ INTO qtd_itens
+ FROM inventario i
+ JOIN jogador j on i.id_inventario = j.id_jogador
+ JOIN instancia_item ii on i.id_instancia_item = ii.id_instancia_item
+ WHERE j.id_jogador = NEW.id_inventario;
+
+ SELECT tam_inventario INTO tamanho_inventario FROM jogador WHERE id_jogador = NEW.id_inventario;
+
+ IF qtd_itens < tamanho_inventario THEN
+ RETURN NEW;
+ ELSE
+ RAISE EXCEPTION 'Inventário cheio! Não é possível adicionar mais itens.';
+ END IF;
+END;
+$$ LANGUAGE plpgsql;
+
+DROP TRIGGER IF EXISTS before_insert_instancia_item ON inventario;
+CREATE TRIGGER before_insert_instancia_item
+ BEFORE INSERT
+ ON inventario
+ FOR EACH ROW
+EXECUTE FUNCTION verificar_tam_inventario();
+~~~~
+
+#### Move o jogador para a cidade quando a vida dele for igual a zero
+~~~~sql
+CREATE OR REPLACE FUNCTION verifica_vida_jogador()
+RETURNS TRIGGER AS $$
+BEGIN
+ IF NEW.vida <= 0 THEN
+ NEW.posicao := (SELECT id_terreno FROM terreno WHERE x = 0 AND y = 0);
+ RAISE NOTICE 'Jogador % retornou para a cidade.', NEW.id_jogador;
+ END IF;
+ RETURN NEW;
+END;
+$$ LANGUAGE plpgsql;
+
+
+CREATE OR REPLACE TRIGGER trigger_verifica_vida_jogador
+BEFORE UPDATE OF vida ON jogador
+FOR EACH ROW
+WHEN (NEW.vida <= 0)
+EXECUTE FUNCTION verifica_vida_jogador();
+~~~~
+
+## Histórico de Versão
+
+| Versão | Data | Descrição | Autor(es) |
+| :----: | :--------: | :-----------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
+| `1.0` | 07/09/2024 | Adicionando triggers | [Gabriel Marcolino](https://github.com/GabrielMR360) e [Shaíne Oliveira](ttps://github.com/ShaineOliveira)|
+| `1.1` | 07/09/2024 | Adiciona trigger de vida | [Gabriel Marcolino](https://github.com/GabrielMR360) e [Shaíne Oliveira](ttps://github.com/ShaineOliveira) |
+
diff --git a/docs/sql/trigger_procedure/trigger.sql b/docs/sql/trigger_procedure/trigger.sql
new file mode 100644
index 0000000..7f04308
--- /dev/null
+++ b/docs/sql/trigger_procedure/trigger.sql
@@ -0,0 +1,66 @@
+-- Validar a alteração do tamanho do inventário
+CREATE FUNCTION before_update_tam_inventario() RETURNS TRIGGER AS
+$$
+BEGIN
+ IF NEW.tam_inventario != OLD.tam_inventario THEN
+ RAISE EXCEPTION 'A coluna tam_inventario não pode ser alterada diretamente.';
+ END IF;
+END;
+$$ LANGUAGE plpgsql;
+
+DROP TRIGGER IF EXISTS before_update_tam_inventario ON jogador;
+CREATE TRIGGER before_update_tam_inventario
+ BEFORE UPDATE
+ ON jogador
+ FOR EACH ROW
+EXECUTE FUNCTION before_update_tam_inventario();
+
+-- Trigger para verificar se o inventário do jogador está cheio antes de adicionar um novo item
+CREATE OR REPLACE FUNCTION verificar_tam_inventario() RETURNS TRIGGER AS
+$$
+DECLARE
+ qtd_itens INT;
+ tamanho_inventario INT;
+BEGIN
+ SELECT count(*)
+ INTO qtd_itens
+ FROM inventario i
+ JOIN jogador j on i.id_inventario = j.id_jogador
+ JOIN instancia_item ii on i.id_instancia_item = ii.id_instancia_item
+ WHERE j.id_jogador = NEW.id_inventario;
+
+ SELECT tam_inventario INTO tamanho_inventario FROM jogador WHERE id_jogador = NEW.id_inventario;
+
+ IF qtd_itens < tamanho_inventario THEN
+ RETURN NEW;
+ ELSE
+ RAISE EXCEPTION 'Inventário cheio! Não é possível adicionar mais itens.';
+ END IF;
+END;
+$$ LANGUAGE plpgsql;
+
+DROP TRIGGER IF EXISTS before_insert_instancia_item ON inventario;
+CREATE TRIGGER before_insert_instancia_item
+ BEFORE INSERT
+ ON inventario
+ FOR EACH ROW
+EXECUTE FUNCTION verificar_tam_inventario();
+
+--Move o jogador para a cidade quando a vida dele for igual a zero
+CREATE OR REPLACE FUNCTION verifica_vida_jogador()
+RETURNS TRIGGER AS $$
+BEGIN
+ IF NEW.vida <= 0 THEN
+ NEW.posicao := (SELECT id_terreno FROM terreno WHERE x = 0 AND y = 0);
+ RAISE NOTICE 'Jogador % retornou para a cidade.', NEW.id_jogador;
+ END IF;
+ RETURN NEW;
+END;
+$$ LANGUAGE plpgsql;
+
+
+CREATE OR REPLACE TRIGGER trigger_verifica_vida_jogador
+BEFORE UPDATE OF vida ON jogador
+FOR EACH ROW
+WHEN (NEW.vida <= 0)
+EXECUTE FUNCTION verifica_vida_jogador();
\ No newline at end of file
diff --git a/mkdocs.yml b/mkdocs.yml
index aa1b775..4abdd61 100644
--- a/mkdocs.yml
+++ b/mkdocs.yml
@@ -51,6 +51,7 @@ nav:
- DDL: sql/ddl/ddl.md
- DML: sql/dml/dml.md
- DQL: sql/dql/dql.md
+ - Trigger: sql/trigger_procedure/trigger_procedure.md
- Apresentações:
- Apresentação 1: entregas/modulo1/apresentacao_1.md
- Apresentação 2: entregas/modulo2/apresentacao_2.md