|
|
|
|
@ -73,7 +73,7 @@ CREATE INDEX IF NOT EXISTS idx_hero_quests_hero ON hero_quests(hero_id);
|
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_hero_quests_status ON hero_quests(hero_id, status);
|
|
|
|
|
|
|
|
|
|
-- ============================================================
|
|
|
|
|
-- Seed data: towns
|
|
|
|
|
-- Seed data: towns (idempotent — DB may already have these names)
|
|
|
|
|
-- ============================================================
|
|
|
|
|
INSERT INTO towns (name, biome, world_x, world_y, radius, level_min, level_max) VALUES
|
|
|
|
|
('Willowdale', 'meadow', 50, 15, 8.0, 1, 5),
|
|
|
|
|
@ -82,116 +82,166 @@ INSERT INTO towns (name, biome, world_x, world_y, radius, level_min, level_max)
|
|
|
|
|
('Redcliff', 'canyon', 650, 195, 8.0, 16, 22),
|
|
|
|
|
('Boghollow', 'swamp', 900, 270, 8.0, 22, 28),
|
|
|
|
|
('Cinderkeep', 'volcanic', 1200, 360, 8.0, 28, 34),
|
|
|
|
|
('Starfall', 'astral', 1550, 465, 8.0, 34, 40);
|
|
|
|
|
('Starfall', 'astral', 1550, 465, 8.0, 34, 40)
|
|
|
|
|
ON CONFLICT (name) DO NOTHING;
|
|
|
|
|
|
|
|
|
|
-- ============================================================
|
|
|
|
|
-- Seed data: NPCs (2-3 per town)
|
|
|
|
|
-- Seed data: NPCs (2-3 per town; resolve town_id by name)
|
|
|
|
|
-- ============================================================
|
|
|
|
|
INSERT INTO npcs (town_id, name, type, offset_x, offset_y) VALUES
|
|
|
|
|
-- Willowdale (meadow)
|
|
|
|
|
(1, 'Elder Maren', 'quest_giver', -2.0, 1.0),
|
|
|
|
|
(1, 'Peddler Finn', 'merchant', 3.0, 0.0),
|
|
|
|
|
(1, 'Sister Asha', 'healer', 0.0, -2.5),
|
|
|
|
|
-- Thornwatch (forest)
|
|
|
|
|
(2, 'Guard Halric', 'quest_giver', -3.0, 0.5),
|
|
|
|
|
(2, 'Trader Wynn', 'merchant', 2.0, 2.0),
|
|
|
|
|
-- Ashengard (ruins)
|
|
|
|
|
(3, 'Scholar Orin', 'quest_giver', 1.0, -2.0),
|
|
|
|
|
(3, 'Bone Merchant', 'merchant', -2.0, 3.0),
|
|
|
|
|
(3, 'Priestess Liora', 'healer', 3.0, 1.0),
|
|
|
|
|
-- Redcliff (canyon)
|
|
|
|
|
(4, 'Foreman Brak', 'quest_giver', -1.0, 2.0),
|
|
|
|
|
(4, 'Miner Supplies', 'merchant', 2.5, -1.0),
|
|
|
|
|
-- Boghollow (swamp)
|
|
|
|
|
(5, 'Witch Nessa', 'quest_giver', 0.0, 3.0),
|
|
|
|
|
(5, 'Swamp Trader', 'merchant', -3.0, -1.0),
|
|
|
|
|
(5, 'Marsh Healer Ren', 'healer', 2.0, 0.0),
|
|
|
|
|
-- Cinderkeep (volcanic)
|
|
|
|
|
(6, 'Forge-master Kael','quest_giver', -2.5, 0.0),
|
|
|
|
|
(6, 'Ember Merchant', 'merchant', 1.0, 2.5),
|
|
|
|
|
-- Starfall (astral)
|
|
|
|
|
(7, 'Seer Aelith', 'quest_giver', 0.0, -3.0),
|
|
|
|
|
(7, 'Void Trader', 'merchant', 3.0, 1.0),
|
|
|
|
|
(7, 'Astral Mender', 'healer', -2.0, 2.0);
|
|
|
|
|
INSERT INTO npcs (town_id, name, type, offset_x, offset_y)
|
|
|
|
|
SELECT t.id, v.npc_name, v.npc_type, v.ox, v.oy
|
|
|
|
|
FROM (VALUES
|
|
|
|
|
('Willowdale', 'Elder Maren', 'quest_giver', -2.0::double precision, 1.0::double precision),
|
|
|
|
|
('Willowdale', 'Peddler Finn', 'merchant', 3.0, 0.0),
|
|
|
|
|
('Willowdale', 'Sister Asha', 'healer', 0.0, -2.5),
|
|
|
|
|
('Thornwatch', 'Guard Halric', 'quest_giver', -3.0, 0.5),
|
|
|
|
|
('Thornwatch', 'Trader Wynn', 'merchant', 2.0, 2.0),
|
|
|
|
|
('Ashengard', 'Scholar Orin', 'quest_giver', 1.0, -2.0),
|
|
|
|
|
('Ashengard', 'Bone Merchant', 'merchant', -2.0, 3.0),
|
|
|
|
|
('Ashengard', 'Priestess Liora', 'healer', 3.0, 1.0),
|
|
|
|
|
('Redcliff', 'Foreman Brak', 'quest_giver', -1.0, 2.0),
|
|
|
|
|
('Redcliff', 'Miner Supplies', 'merchant', 2.5, -1.0),
|
|
|
|
|
('Boghollow', 'Witch Nessa', 'quest_giver', 0.0, 3.0),
|
|
|
|
|
('Boghollow', 'Swamp Trader', 'merchant', -3.0, -1.0),
|
|
|
|
|
('Boghollow', 'Marsh Healer Ren', 'healer', 2.0, 0.0),
|
|
|
|
|
('Cinderkeep', 'Forge-master Kael', 'quest_giver', -2.5, 0.0),
|
|
|
|
|
('Cinderkeep', 'Ember Merchant', 'merchant', 1.0, 2.5),
|
|
|
|
|
('Starfall', 'Seer Aelith', 'quest_giver', 0.0, -3.0),
|
|
|
|
|
('Starfall', 'Void Trader', 'merchant', 3.0, 1.0),
|
|
|
|
|
('Starfall', 'Astral Mender', 'healer', -2.0, 2.0)
|
|
|
|
|
) AS v(town_name, npc_name, npc_type, ox, oy)
|
|
|
|
|
JOIN towns t ON t.name = v.town_name
|
|
|
|
|
WHERE NOT EXISTS (
|
|
|
|
|
SELECT 1 FROM npcs n WHERE n.town_id = t.id AND n.name = v.npc_name
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
-- ============================================================
|
|
|
|
|
-- Seed data: quests
|
|
|
|
|
-- Seed data: quests (resolve npc_id / target_town_id by name; skip duplicates)
|
|
|
|
|
-- ============================================================
|
|
|
|
|
|
|
|
|
|
-- Willowdale quests (Elder Maren, npc_id = 1)
|
|
|
|
|
INSERT INTO quests (npc_id, title, description, type, target_count, target_enemy_type, target_town_id, drop_chance, min_level, max_level, reward_xp, reward_gold, reward_potions) VALUES
|
|
|
|
|
(1, 'Wolf Cull',
|
|
|
|
|
-- Willowdale — Elder Maren
|
|
|
|
|
INSERT INTO quests (npc_id, title, description, type, target_count, target_enemy_type, target_town_id, drop_chance, min_level, max_level, reward_xp, reward_gold, reward_potions)
|
|
|
|
|
SELECT n.id, s.title, s.description, s.qtype, s.target_count, s.target_enemy_type, s.target_town_id, s.drop_chance, s.min_level, s.max_level, s.reward_xp, s.reward_gold, s.reward_potions
|
|
|
|
|
FROM npcs n
|
|
|
|
|
JOIN towns t ON t.id = n.town_id
|
|
|
|
|
CROSS JOIN (VALUES
|
|
|
|
|
('Wolf Cull',
|
|
|
|
|
'The wolves near Willowdale are getting bolder. Thin their numbers.',
|
|
|
|
|
'kill_count', 5, 'wolf', NULL, 0.0, 1, 5, 30, 15, 0),
|
|
|
|
|
(1, 'Boar Hunt',
|
|
|
|
|
'kill_count', 5, 'wolf'::text, NULL::bigint, 0.0::double precision, 1, 5, 30::bigint, 15::bigint, 0),
|
|
|
|
|
('Boar Hunt',
|
|
|
|
|
'Wild boars are trampling the crops. Take care of them.',
|
|
|
|
|
'kill_count', 8, 'boar', NULL, 0.0, 2, 6, 50, 25, 1),
|
|
|
|
|
(1, 'Deliver to Thornwatch',
|
|
|
|
|
'kill_count', 8, 'boar', NULL, 0.0, 2, 6, 50::bigint, 25::bigint, 1),
|
|
|
|
|
('Deliver to Thornwatch',
|
|
|
|
|
'Carry this supply manifest to Guard Halric in Thornwatch.',
|
|
|
|
|
'visit_town', 1, NULL, 2, 0.0, 1, 10, 40, 20, 0);
|
|
|
|
|
|
|
|
|
|
-- Thornwatch quests (Guard Halric, npc_id = 4)
|
|
|
|
|
INSERT INTO quests (npc_id, title, description, type, target_count, target_enemy_type, target_town_id, drop_chance, min_level, max_level, reward_xp, reward_gold, reward_potions) VALUES
|
|
|
|
|
(4, 'Spider Infestation',
|
|
|
|
|
'visit_town', 1, NULL, (SELECT id FROM towns WHERE name = 'Thornwatch' LIMIT 1), 0.0, 1, 10, 40::bigint, 20::bigint, 0)
|
|
|
|
|
) AS s(title, description, qtype, target_count, target_enemy_type, target_town_id, drop_chance, min_level, max_level, reward_xp, reward_gold, reward_potions)
|
|
|
|
|
WHERE t.name = 'Willowdale' AND n.name = 'Elder Maren'
|
|
|
|
|
AND NOT EXISTS (SELECT 1 FROM quests q WHERE q.npc_id = n.id AND q.title = s.title);
|
|
|
|
|
|
|
|
|
|
-- Thornwatch — Guard Halric
|
|
|
|
|
INSERT INTO quests (npc_id, title, description, type, target_count, target_enemy_type, target_town_id, drop_chance, min_level, max_level, reward_xp, reward_gold, reward_potions)
|
|
|
|
|
SELECT n.id, s.title, s.description, s.qtype, s.target_count, s.target_enemy_type, s.target_town_id, s.drop_chance, s.min_level, s.max_level, s.reward_xp, s.reward_gold, s.reward_potions
|
|
|
|
|
FROM npcs n
|
|
|
|
|
JOIN towns t ON t.id = n.town_id
|
|
|
|
|
CROSS JOIN (VALUES
|
|
|
|
|
('Spider Infestation',
|
|
|
|
|
'Cave spiders have overrun the logging trails. Clear them out.',
|
|
|
|
|
'kill_count', 12, 'spider', NULL, 0.0, 5, 10, 80, 40, 1),
|
|
|
|
|
(4, 'Spider Fang Collection',
|
|
|
|
|
'kill_count', 12, 'spider'::text, NULL::bigint, 0.0::double precision, 5, 10, 80::bigint, 40::bigint, 1),
|
|
|
|
|
('Spider Fang Collection',
|
|
|
|
|
'We need spider fangs for antivenom. Collect them from slain spiders.',
|
|
|
|
|
'collect_item', 5, 'spider', NULL, 0.3, 5, 10, 100, 60, 1),
|
|
|
|
|
(4, 'Forest Patrol',
|
|
|
|
|
'collect_item', 5, 'spider', NULL, 0.3, 5, 10, 100::bigint, 60::bigint, 1),
|
|
|
|
|
('Forest Patrol',
|
|
|
|
|
'Slay any 15 creatures along the forest road to keep it safe.',
|
|
|
|
|
'kill_count', 15, NULL, NULL, 0.0, 5, 12, 120, 70, 1);
|
|
|
|
|
|
|
|
|
|
-- Ashengard quests (Scholar Orin, npc_id = 6)
|
|
|
|
|
INSERT INTO quests (npc_id, title, description, type, target_count, target_enemy_type, target_town_id, drop_chance, min_level, max_level, reward_xp, reward_gold, reward_potions) VALUES
|
|
|
|
|
(6, 'Undead Purge',
|
|
|
|
|
'kill_count', 15, NULL::text, NULL::bigint, 0.0, 5, 12, 120::bigint, 70::bigint, 1)
|
|
|
|
|
) AS s(title, description, qtype, target_count, target_enemy_type, target_town_id, drop_chance, min_level, max_level, reward_xp, reward_gold, reward_potions)
|
|
|
|
|
WHERE t.name = 'Thornwatch' AND n.name = 'Guard Halric'
|
|
|
|
|
AND NOT EXISTS (SELECT 1 FROM quests q WHERE q.npc_id = n.id AND q.title = s.title);
|
|
|
|
|
|
|
|
|
|
-- Ashengard — Scholar Orin
|
|
|
|
|
INSERT INTO quests (npc_id, title, description, type, target_count, target_enemy_type, target_town_id, drop_chance, min_level, max_level, reward_xp, reward_gold, reward_potions)
|
|
|
|
|
SELECT n.id, s.title, s.description, s.qtype, s.target_count, s.target_enemy_type, s.target_town_id, s.drop_chance, s.min_level, s.max_level, s.reward_xp, s.reward_gold, s.reward_potions
|
|
|
|
|
FROM npcs n
|
|
|
|
|
JOIN towns t ON t.id = n.town_id
|
|
|
|
|
CROSS JOIN (VALUES
|
|
|
|
|
('Undead Purge',
|
|
|
|
|
'The ruins are crawling with undead. Destroy the zombies.',
|
|
|
|
|
'kill_count', 15, 'zombie', NULL, 0.0, 10, 16, 150, 80, 1),
|
|
|
|
|
(6, 'Ancient Relics',
|
|
|
|
|
'kill_count', 15, 'zombie'::text, NULL::bigint, 0.0::double precision, 10, 16, 150::bigint, 80::bigint, 1),
|
|
|
|
|
('Ancient Relics',
|
|
|
|
|
'Search fallen enemies for fragments of the old kingdom.',
|
|
|
|
|
'collect_item', 8, NULL, NULL, 0.25, 10, 16, 200, 120, 2),
|
|
|
|
|
(6, 'Report to Redcliff',
|
|
|
|
|
'collect_item', 8, NULL::text, NULL::bigint, 0.25, 10, 16, 200::bigint, 120::bigint, 2),
|
|
|
|
|
('Report to Redcliff',
|
|
|
|
|
'Warn Foreman Brak about the growing undead threat.',
|
|
|
|
|
'visit_town', 1, NULL, 4, 0.0, 10, 20, 120, 60, 0);
|
|
|
|
|
|
|
|
|
|
-- Redcliff quests (Foreman Brak, npc_id = 9)
|
|
|
|
|
INSERT INTO quests (npc_id, title, description, type, target_count, target_enemy_type, target_town_id, drop_chance, min_level, max_level, reward_xp, reward_gold, reward_potions) VALUES
|
|
|
|
|
(9, 'Orc Raider Cleanup',
|
|
|
|
|
'visit_town', 1, NULL::text, (SELECT id FROM towns WHERE name = 'Redcliff' LIMIT 1), 0.0, 10, 20, 120::bigint, 60::bigint, 0)
|
|
|
|
|
) AS s(title, description, qtype, target_count, target_enemy_type, target_town_id, drop_chance, min_level, max_level, reward_xp, reward_gold, reward_potions)
|
|
|
|
|
WHERE t.name = 'Ashengard' AND n.name = 'Scholar Orin'
|
|
|
|
|
AND NOT EXISTS (SELECT 1 FROM quests q WHERE q.npc_id = n.id AND q.title = s.title);
|
|
|
|
|
|
|
|
|
|
-- Redcliff — Foreman Brak
|
|
|
|
|
INSERT INTO quests (npc_id, title, description, type, target_count, target_enemy_type, target_town_id, drop_chance, min_level, max_level, reward_xp, reward_gold, reward_potions)
|
|
|
|
|
SELECT n.id, s.title, s.description, s.qtype, s.target_count, s.target_enemy_type, s.target_town_id, s.drop_chance, s.min_level, s.max_level, s.reward_xp, s.reward_gold, s.reward_potions
|
|
|
|
|
FROM npcs n
|
|
|
|
|
JOIN towns t ON t.id = n.town_id
|
|
|
|
|
CROSS JOIN (VALUES
|
|
|
|
|
('Orc Raider Cleanup',
|
|
|
|
|
'Orc warriors are raiding the mine carts. Stop them.',
|
|
|
|
|
'kill_count', 20, 'orc', NULL, 0.0, 16, 22, 250, 150, 2),
|
|
|
|
|
(9, 'Ore Samples',
|
|
|
|
|
'kill_count', 20, 'orc'::text, NULL::bigint, 0.0::double precision, 16, 22, 250::bigint, 150::bigint, 2),
|
|
|
|
|
('Ore Samples',
|
|
|
|
|
'Collect glowing ore fragments from defeated enemies near the canyon.',
|
|
|
|
|
'collect_item', 6, NULL, NULL, 0.3, 16, 22, 200, 120, 1);
|
|
|
|
|
|
|
|
|
|
-- Boghollow quests (Witch Nessa, npc_id = 11)
|
|
|
|
|
INSERT INTO quests (npc_id, title, description, type, target_count, target_enemy_type, target_town_id, drop_chance, min_level, max_level, reward_xp, reward_gold, reward_potions) VALUES
|
|
|
|
|
(11, 'Swamp Creatures',
|
|
|
|
|
'collect_item', 6, NULL::text, NULL::bigint, 0.3, 16, 22, 200::bigint, 120::bigint, 1)
|
|
|
|
|
) AS s(title, description, qtype, target_count, target_enemy_type, target_town_id, drop_chance, min_level, max_level, reward_xp, reward_gold, reward_potions)
|
|
|
|
|
WHERE t.name = 'Redcliff' AND n.name = 'Foreman Brak'
|
|
|
|
|
AND NOT EXISTS (SELECT 1 FROM quests q WHERE q.npc_id = n.id AND q.title = s.title);
|
|
|
|
|
|
|
|
|
|
-- Boghollow — Witch Nessa
|
|
|
|
|
INSERT INTO quests (npc_id, title, description, type, target_count, target_enemy_type, target_town_id, drop_chance, min_level, max_level, reward_xp, reward_gold, reward_potions)
|
|
|
|
|
SELECT n.id, s.title, s.description, s.qtype, s.target_count, s.target_enemy_type, s.target_town_id, s.drop_chance, s.min_level, s.max_level, s.reward_xp, s.reward_gold, s.reward_potions
|
|
|
|
|
FROM npcs n
|
|
|
|
|
JOIN towns t ON t.id = n.town_id
|
|
|
|
|
CROSS JOIN (VALUES
|
|
|
|
|
('Swamp Creatures',
|
|
|
|
|
'The swamp beasts grow more aggressive by the day. Cull 25.',
|
|
|
|
|
'kill_count', 25, NULL, NULL, 0.0, 22, 28, 350, 200, 2),
|
|
|
|
|
(11, 'Venomous Harvest',
|
|
|
|
|
'kill_count', 25, NULL::text, NULL::bigint, 0.0::double precision, 22, 28, 350::bigint, 200::bigint, 2),
|
|
|
|
|
('Venomous Harvest',
|
|
|
|
|
'Collect venom sacs from swamp creatures for my brews.',
|
|
|
|
|
'collect_item', 10, NULL, NULL, 0.25, 22, 28, 400, 250, 2),
|
|
|
|
|
(11, 'Message to Cinderkeep',
|
|
|
|
|
'collect_item', 10, NULL::text, NULL::bigint, 0.25, 22, 28, 400::bigint, 250::bigint, 2),
|
|
|
|
|
('Message to Cinderkeep',
|
|
|
|
|
'The forgemaster needs to know about the corruption spreading here.',
|
|
|
|
|
'visit_town', 1, NULL, 6, 0.0, 22, 34, 200, 100, 1);
|
|
|
|
|
|
|
|
|
|
-- Cinderkeep quests (Forge-master Kael, npc_id = 14)
|
|
|
|
|
INSERT INTO quests (npc_id, title, description, type, target_count, target_enemy_type, target_town_id, drop_chance, min_level, max_level, reward_xp, reward_gold, reward_potions) VALUES
|
|
|
|
|
(14, 'Demon Slayer',
|
|
|
|
|
'visit_town', 1, NULL::text, (SELECT id FROM towns WHERE name = 'Cinderkeep' LIMIT 1), 0.0, 22, 34, 200::bigint, 100::bigint, 1)
|
|
|
|
|
) AS s(title, description, qtype, target_count, target_enemy_type, target_town_id, drop_chance, min_level, max_level, reward_xp, reward_gold, reward_potions)
|
|
|
|
|
WHERE t.name = 'Boghollow' AND n.name = 'Witch Nessa'
|
|
|
|
|
AND NOT EXISTS (SELECT 1 FROM quests q WHERE q.npc_id = n.id AND q.title = s.title);
|
|
|
|
|
|
|
|
|
|
-- Cinderkeep — Forge-master Kael
|
|
|
|
|
INSERT INTO quests (npc_id, title, description, type, target_count, target_enemy_type, target_town_id, drop_chance, min_level, max_level, reward_xp, reward_gold, reward_potions)
|
|
|
|
|
SELECT n.id, s.title, s.description, s.qtype, s.target_count, s.target_enemy_type, s.target_town_id, s.drop_chance, s.min_level, s.max_level, s.reward_xp, s.reward_gold, s.reward_potions
|
|
|
|
|
FROM npcs n
|
|
|
|
|
JOIN towns t ON t.id = n.town_id
|
|
|
|
|
CROSS JOIN (VALUES
|
|
|
|
|
('Demon Slayer',
|
|
|
|
|
'Fire demons are emerging from the vents. Destroy them.',
|
|
|
|
|
'kill_count', 10, 'fire_demon', NULL, 0.0, 28, 34, 500, 300, 2),
|
|
|
|
|
(14, 'Infernal Cores',
|
|
|
|
|
'kill_count', 10, 'fire_demon'::text, NULL::bigint, 0.0::double precision, 28, 34, 500::bigint, 300::bigint, 2),
|
|
|
|
|
('Infernal Cores',
|
|
|
|
|
'Retrieve smoldering cores from defeated fire demons.',
|
|
|
|
|
'collect_item', 5, 'fire_demon', NULL, 0.3, 28, 34, 600, 350, 3);
|
|
|
|
|
|
|
|
|
|
-- Starfall quests (Seer Aelith, npc_id = 16)
|
|
|
|
|
INSERT INTO quests (npc_id, title, description, type, target_count, target_enemy_type, target_town_id, drop_chance, min_level, max_level, reward_xp, reward_gold, reward_potions) VALUES
|
|
|
|
|
(16, 'Titan''s Challenge',
|
|
|
|
|
'collect_item', 5, 'fire_demon'::text, NULL::bigint, 0.3::double precision, 28, 34, 600::bigint, 350::bigint, 3)
|
|
|
|
|
) AS s(title, description, qtype, target_count, target_enemy_type, target_town_id, drop_chance, min_level, max_level, reward_xp, reward_gold, reward_potions)
|
|
|
|
|
WHERE t.name = 'Cinderkeep' AND n.name = 'Forge-master Kael'
|
|
|
|
|
AND NOT EXISTS (SELECT 1 FROM quests q WHERE q.npc_id = n.id AND q.title = s.title);
|
|
|
|
|
|
|
|
|
|
-- Starfall — Seer Aelith
|
|
|
|
|
INSERT INTO quests (npc_id, title, description, type, target_count, target_enemy_type, target_town_id, drop_chance, min_level, max_level, reward_xp, reward_gold, reward_potions)
|
|
|
|
|
SELECT n.id, s.title, s.description, s.qtype, s.target_count, s.target_enemy_type, s.target_town_id, s.drop_chance, s.min_level, s.max_level, s.reward_xp, s.reward_gold, s.reward_potions
|
|
|
|
|
FROM npcs n
|
|
|
|
|
JOIN towns t ON t.id = n.town_id
|
|
|
|
|
CROSS JOIN (VALUES
|
|
|
|
|
('Titan''s Challenge',
|
|
|
|
|
'The Lightning Titans must be stopped before they breach the gate.',
|
|
|
|
|
'kill_count', 8, 'lightning_titan', NULL, 0.0, 34, 40, 800, 500, 3),
|
|
|
|
|
(16, 'Void Fragments',
|
|
|
|
|
'kill_count', 8, 'lightning_titan'::text, NULL::bigint, 0.0::double precision, 34, 40, 800::bigint, 500::bigint, 3),
|
|
|
|
|
('Void Fragments',
|
|
|
|
|
'Gather crystallized void energy from the astral enemies.',
|
|
|
|
|
'collect_item', 8, NULL, NULL, 0.2, 34, 40, 1000, 600, 3),
|
|
|
|
|
(16, 'Full Circle',
|
|
|
|
|
'collect_item', 8, NULL::text, NULL::bigint, 0.2, 34, 40, 1000::bigint, 600::bigint, 3),
|
|
|
|
|
('Full Circle',
|
|
|
|
|
'Return to Willowdale and tell Elder Maren of your journey.',
|
|
|
|
|
'visit_town', 1, NULL, 1, 0.0, 34, 40, 500, 300, 2);
|
|
|
|
|
'visit_town', 1, NULL::text, (SELECT id FROM towns WHERE name = 'Willowdale' LIMIT 1), 0.0, 34, 40, 500::bigint, 300::bigint, 2)
|
|
|
|
|
) AS s(title, description, qtype, target_count, target_enemy_type, target_town_id, drop_chance, min_level, max_level, reward_xp, reward_gold, reward_potions)
|
|
|
|
|
WHERE t.name = 'Starfall' AND n.name = 'Seer Aelith'
|
|
|
|
|
AND NOT EXISTS (SELECT 1 FROM quests q WHERE q.npc_id = n.id AND q.title = s.title);
|
|
|
|
|
|