CREATE OR REPLACE FUNCTION gerar_inimigos_missao() RETURNS TRIGGER AS
$$
DECLARE
nome_mapa_missao TEXT;
id_pokemon_gerado INT;
id_npc_gerado INT;
posicoes INT[] := ARRAY[3307, 3523, 3852, 4027]; -- Posições específicas
BEGIN
-- Obtendo o nome do mapa associado à missão
SELECT nome_mapa
INTO nome_mapa_missao
FROM instancia_missao im
JOIN missao m ON im.id_missao = m.id_missao
WHERE im.id_missao = NEW.id_missao
GROUP BY nome_mapa;
-- Lógica para o mapa 'Floresta Sombra'
IF nome_mapa_missao = 'Floresta Sombra' THEN
FOR i IN 1..4
LOOP
INSERT INTO pokemon (id_tipo_pokemon) VALUES (2) RETURNING id_pokemon INTO id_pokemon_gerado;
-- Inserindo um novo NPC com tipo 2 (inimigo)
INSERT INTO npc (id_npc, id_tipo_npc) VALUES (id_pokemon_gerado, 2) RETURNING id_npc INTO id_npc_gerado;
-- Inserindo o inimigo associado ao NPC recém-criado
INSERT INTO inimigo (id_inimigo, nivel, vida, ataque_fisico, defesa_fisica, ataque_especial, velocidade,
acuracia, evasao, status, nome, posicao, tipo_elemental)
VALUES (id_npc_gerado, 10, 100, 20, 15, 30, 10, 80, 50, 'Normal', 'Inimigo ' || i, posicoes[i],
CASE WHEN i % 3 = 0 THEN 'dark' WHEN i % 3 = 1 THEN 'ghost' ELSE 'psychic' END);
INSERT INTO pokemon_habilidade (id_pokemon, id_habilidade) VALUES (id_pokemon_gerado, 4);
INSERT INTO pokemon_habilidade (id_pokemon, id_habilidade) VALUES (id_pokemon_gerado, 101);
END LOOP;
-- Inserindo o BOSS para o mapa 'Floresta Sombra'
INSERT INTO pokemon (id_tipo_pokemon) VALUES (2) RETURNING id_pokemon INTO id_pokemon_gerado;
INSERT INTO npc (id_npc, id_tipo_npc) VALUES (id_pokemon_gerado, 2) RETURNING id_npc INTO id_npc_gerado;
INSERT INTO inimigo (id_inimigo, nivel, vida, ataque_fisico, defesa_fisica, ataque_especial, velocidade,
acuracia, evasao, status, nome, posicao, tipo_elemental)
VALUES (id_npc_gerado, 10, 1000, 50, 50, 80, 30, 80, 50, 'Normal', 'BOSS', 4353, 'dark');
INSERT INTO pokemon_habilidade (id_pokemon, id_habilidade) VALUES (id_pokemon_gerado, 4);
INSERT INTO pokemon_habilidade (id_pokemon, id_habilidade) VALUES (id_pokemon_gerado, 101);
INSERT INTO pokemon_habilidade (id_pokemon, id_habilidade) VALUES (id_pokemon_gerado, 63);
INSERT INTO pokemon_habilidade (id_pokemon, id_habilidade) VALUES (id_pokemon_gerado, 47);
END IF;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
DROP TRIGGER IF EXISTS trigger_gerar_inimigos_missao ON instancia_missao;
CREATE TRIGGER trigger_gerar_inimigos_missao
AFTER INSERT
ON instancia_missao
FOR EACH ROW
WHEN (NEW.concluida = false)
EXECUTE FUNCTION gerar_inimigos_missao();