@@ -451,57 +451,47 @@ DECLARE
451
451
v_possui_feitico_atual BOOLEAN ;
452
452
v_conhecimento_arcano_suficiente BOOLEAN ;
453
453
BEGIN
454
- -- get character inventory
455
- SELECT id INTO v_inventario_id
454
+ SELECT id
455
+ INTO v_inventario_id
456
456
FROM inventario
457
457
WHERE personagem_id = p_personagem_id;
458
458
459
- -- if doesn't have a inventory, return error
460
- IF v_inventario_id IS NULL THEN
461
- RAISE EXCEPTION ' O personagem % não possui inventário.' , p_personagem_id;
462
- END IF;
463
-
464
- SELECT de_id INTO v_requisito_id
459
+ SELECT de_id
460
+ INTO v_requisito_id
465
461
FROM feitico_requerimento
466
462
WHERE para_id = p_feitico_id;
467
463
468
- SELECT COALESCE(
469
- (SELECT EXISTS (
470
- SELECT 1 FROM feitico_aprendido
471
- WHERE inventario_id = v_inventario_id AND feitico_id = v_requisito_id
472
- )), TRUE
464
+ -- Verifica se já possui o feitiço pré-requisito
465
+ SELECT EXISTS (
466
+ SELECT 1
467
+ FROM feitico_aprendido
468
+ WHERE inventario_id = v_inventario_id
469
+ AND feitico_id = v_requisito_id
473
470
) INTO v_pre_requisito_aprendido;
474
471
472
+ -- Verifica se já possui o feitiço atual
475
473
SELECT EXISTS (
476
- SELECT 1 FROM feitico_aprendido
477
- WHERE inventario_id = v_inventario_id AND feitico_id = p_feitico_id
474
+ SELECT 1
475
+ FROM feitico_aprendido
476
+ WHERE inventario_id = v_inventario_id
477
+ AND feitico_id = p_feitico_id
478
478
) INTO v_possui_feitico_atual;
479
479
480
- SELECT COALESCE(
481
- (p .conhecimento_arcano >= f .conhecimento_arcano_necessario ), FALSE
482
- ) INTO v_conhecimento_arcano_suficiente
480
+ -- Verifica se possui conhecimento arcano suficiente para o feitiço
481
+ SELECT (p .conhecimento_arcano >= f .conhecimento_arcano_necessario )
482
+ INTO v_conhecimento_arcano_suficiente
483
483
FROM personagem p
484
484
JOIN feitico f ON f .id = p_feitico_id
485
485
WHERE p .id = p_personagem_id;
486
486
487
- IF v_possui_feitico_atual THEN
488
- RAISE NOTICE ' O personagem % já aprendeu este feitiço.' , p_personagem_id;
489
- RETURN p_personagem_id;
487
+ -- Só aprende o feitiço se ainda não tiver, já possuir o pré-requisito e tiver conhecimento arcano
488
+ IF NOT v_possui_feitico_atual
489
+ AND v_pre_requisito_aprendido
490
+ AND v_conhecimento_arcano_suficiente THEN
491
+ INSERT INTO feitico_aprendido(inventario_id, feitico_id)
492
+ VALUES (v_inventario_id, p_feitico_id);
490
493
END IF;
491
494
492
- IF NOT v_pre_requisito_aprendido THEN
493
- RAISE NOTICE ' O personagem % não tem o pré-requisito necessário para este feitiço.' , p_personagem_id;
494
- RETURN p_personagem_id;
495
- END IF;
496
-
497
- IF NOT v_conhecimento_arcano_suficiente THEN
498
- RAISE NOTICE ' O personagem % não tem conhecimento arcano suficiente para aprender este feitiço.' , p_personagem_id;
499
- RETURN p_personagem_id;
500
- END IF;
501
-
502
- INSERT INTO feitico_aprendido(inventario_id, feitico_id)
503
- VALUES (v_inventario_id, p_feitico_id);
504
-
505
495
RETURN p_personagem_id;
506
496
END;
507
497
$$ LANGUAGE plpgsql;
0 commit comments