211 lines
13 KiB
TypeScript
211 lines
13 KiB
TypeScript
import { RedisClient } from "bun";
|
|
const redis = new RedisClient("redis://localhost:40379");
|
|
|
|
console.log("Populating database with ~100 static Ringstats entries...");
|
|
|
|
const effects = [
|
|
{ id: 1, name: "Stärke", value: 5 },
|
|
{ id: 2, name: "Geschick", value: 5 },
|
|
{ id: 3, name: "Blutung", value: 50 },
|
|
{ id: 4, name: "Gift", value: 45 },
|
|
{ id: 5, name: "Scharlachfäule", value: 50 },
|
|
{ id: 6, name: "Frost", value: 55 },
|
|
{ id: 7, name: "Heilung", value: 100 },
|
|
{ id: 8, name: "Magieschaden", value: 20 },
|
|
{ id: 9, name: "Feuerschaden", value: 30 },
|
|
{ id: 10, name: "Blitzschaden", value: 25 },
|
|
];
|
|
|
|
const types = [
|
|
{ id: 1, item_id: 101, name: "Dolch" },
|
|
{ id: 2, item_id: 102, name: "Gerades Schwert" },
|
|
{ id: 3, item_id: 103, name: "Großschwert" },
|
|
{ id: 4, item_id: 104, name: "Katana" },
|
|
{ id: 5, item_id: 105, name: "Helm" },
|
|
{ id: 6, item_id: 106, name: "Brustpanzer" },
|
|
{ id: 7, item_id: 107, name: "Stulpen" },
|
|
{ id: 8, item_id: 108, name: "Beinschutz" },
|
|
{ id: 9, item_id: 109, name: "Mittlerer Schild" },
|
|
{ id: 10, item_id: 110, name: "Talisman-Amulett" },
|
|
];
|
|
|
|
const weapons = [
|
|
{ id: 1, item_effect_id: 3, item_type_id: 4, weight: 5.5, damage: 115 }, // Uchigatana
|
|
{ id: 2, item_effect_id: 3, item_type_id: 4, weight: 6.5, damage: 118 }, // Rivers of Blood
|
|
{ id: 3, item_effect_id: 8, item_type_id: 3, weight: 10.0, damage: 160 }, // Dark Moon Greatsword
|
|
{ id: 4, item_effect_id: 1, item_type_id: 3, weight: 23.0, damage: 210 }, // Guts Greatsword
|
|
{ id: 5, item_effect_id: 3, item_type_id: 1, weight: 1.5, damage: 74 }, // Reduvia
|
|
{ id: 6, item_effect_id: 9, item_type_id: 2, weight: 4.0, damage: 105 }, // Blasphemous Blade
|
|
{ id: 7, item_effect_id: 10, item_type_id: 4, weight: 6.0, damage: 110 }, // Dragonscale Blade
|
|
{ id: 8, item_effect_id: 1, item_type_id: 3, weight: 15.0, damage: 175 }, // Claymore
|
|
{ id: 9, item_effect_id: 2, item_type_id: 1, weight: 2.0, damage: 80 }, // Misericorde
|
|
{ id: 10, item_effect_id: 6, item_type_id: 2, weight: 4.5, damage: 100 }, // Icerind Hatchet (simulated as straight sword for simplicity)
|
|
];
|
|
|
|
const armors = [
|
|
{ id: 1, item_effect_id: 1, item_type_id: 5, weight: 4.6, defense: 14 },
|
|
{ id: 2, item_effect_id: 1, item_type_id: 6, weight: 10.6, defense: 35 },
|
|
{ id: 3, item_effect_id: 1, item_type_id: 7, weight: 3.5, defense: 11 },
|
|
{ id: 4, item_effect_id: 1, item_type_id: 8, weight: 6.6, defense: 20 },
|
|
{ id: 5, item_effect_id: 8, item_type_id: 5, weight: 2.2, defense: 8 },
|
|
{ id: 6, item_effect_id: 8, item_type_id: 6, weight: 5.1, defense: 15 },
|
|
{ id: 7, item_effect_id: 9, item_type_id: 5, weight: 5.5, defense: 18 },
|
|
{ id: 8, item_effect_id: 9, item_type_id: 6, weight: 11.8, defense: 42 },
|
|
{ id: 9, item_effect_id: 10, item_type_id: 5, weight: 3.0, defense: 10 },
|
|
{ id: 10, item_effect_id: 10, item_type_id: 6, weight: 7.0, defense: 22 },
|
|
];
|
|
|
|
const shields = [
|
|
{ id: 1, item_effect_id: 1, item_type_id: 9, weight: 3.5, damage: 45, defense: 100 },
|
|
{ id: 2, item_effect_id: 8, item_type_id: 9, weight: 4.5, damage: 55, defense: 100 },
|
|
{ id: 3, item_effect_id: 9, item_type_id: 9, weight: 5.5, damage: 65, defense: 100 },
|
|
{ id: 4, item_effect_id: 10, item_type_id: 9, weight: 4.0, damage: 50, defense: 100 },
|
|
{ id: 5, item_effect_id: 6, item_type_id: 9, weight: 3.0, damage: 40, defense: 95 },
|
|
];
|
|
|
|
const talismans = [
|
|
{ id: 1, item_effect_id: 1 },
|
|
{ id: 2, item_effect_id: 2 },
|
|
{ id: 3, item_effect_id: 7 },
|
|
{ id: 4, item_effect_id: 8 },
|
|
{ id: 5, item_effect_id: 9 },
|
|
];
|
|
|
|
const items = [
|
|
// Weapons (id 1-10)
|
|
{ id: 1, name: "Uchigatana", gear_type: "weapon", gear_id: 1 },
|
|
{ id: 2, name: "Rivers of Blood", gear_type: "weapon", gear_id: 2 },
|
|
{ id: 3, name: "Dark Moon Greatsword", gear_type: "weapon", gear_id: 3 },
|
|
{ id: 4, name: "Guts Greatsword", gear_type: "weapon", gear_id: 4 },
|
|
{ id: 5, name: "Reduvia", gear_type: "weapon", gear_id: 5 },
|
|
{ id: 6, name: "Blasphemous Blade", gear_type: "weapon", gear_id: 6 },
|
|
{ id: 7, name: "Dragonscale Blade", gear_type: "weapon", gear_id: 7 },
|
|
{ id: 8, name: "Claymore", gear_type: "weapon", gear_id: 8 },
|
|
{ id: 9, name: "Misericorde", gear_type: "weapon", gear_id: 9 },
|
|
{ id: 10, name: "Icerind Hatchet", gear_type: "weapon", gear_id: 10 },
|
|
// Armors (id 11-20)
|
|
{ id: 11, name: "Knight Helm", gear_type: "armor", gear_id: 1 },
|
|
{ id: 12, name: "Knight Armor", gear_type: "armor", gear_id: 2 },
|
|
{ id: 13, name: "Knight Gauntlets", gear_type: "armor", gear_id: 3 },
|
|
{ id: 14, name: "Knight Greaves", gear_type: "armor", gear_id: 4 },
|
|
{ id: 15, name: "Astrologer Hood", gear_type: "armor", gear_id: 5 },
|
|
{ id: 16, name: "Astrologer Robe", gear_type: "armor", gear_id: 6 },
|
|
{ id: 17, name: "Radahn Helm", gear_type: "armor", gear_id: 7 },
|
|
{ id: 18, name: "Radahn Lion Armor", gear_type: "armor", gear_id: 8 },
|
|
{ id: 19, name: "Carian Knight Helm", gear_type: "armor", gear_id: 9 },
|
|
{ id: 20, name: "Carian Knight Armor", gear_type: "armor", gear_id: 10 },
|
|
// Shields (id 21-25)
|
|
{ id: 21, name: "Brass Shield", gear_type: "shield", gear_id: 1 },
|
|
{ id: 22, name: "Carian Knight Shield", gear_type: "shield", gear_id: 2 },
|
|
{ id: 23, name: "Kite Shield", gear_type: "shield", gear_id: 3 },
|
|
{ id: 24, name: "Banished Knight Shield", gear_type: "shield", gear_id: 4 },
|
|
{ id: 25, name: "Heater Shield", gear_type: "shield", gear_id: 5 },
|
|
// Talismans (id 26-30)
|
|
{ id: 26, name: "Erdtree's Favor", gear_type: "talisman", gear_id: 1 },
|
|
{ id: 27, name: "Radagon's Soreseal", gear_type: "talisman", gear_id: 2 },
|
|
{ id: 28, name: "Crimson Amber Medallion", gear_type: "talisman", gear_id: 3 },
|
|
{ id: 29, name: "Graven-Mass Talisman", gear_type: "talisman", gear_id: 4 },
|
|
{ id: 30, name: "Fire Scorpion Charm", gear_type: "talisman", gear_id: 5 },
|
|
{ id: 31, name: "Crimson Flask", gear_type: "consumable" },
|
|
{ id: 32, name: "Cerulean Flask", gear_type: "consumable" },
|
|
{ id: 33, name: "Rune Arc", gear_type: "consumable" },
|
|
{ id: 34, name: "Golden Rune [1]", gear_type: "consumable" },
|
|
{ id: 35, name: "Golden Rune [5]", gear_type: "consumable" },
|
|
{ id: 36, name: "Golden Rune [10]", gear_type: "consumable" },
|
|
{ id: 37, name: "Hero's Rune [1]", gear_type: "consumable" },
|
|
{ id: 38, name: "Lord's Rune", gear_type: "consumable" },
|
|
{ id: 39, name: "Remembrance of the Grafted", gear_type: "consumable" },
|
|
{ id: 40, name: "Remembrance of the Full Moon Queen", gear_type: "consumable" },
|
|
{ id: 41, name: "Remembrance of the Starscourge", gear_type: "consumable" },
|
|
{ id: 42, name: "Remembrance of the Omen King", gear_type: "consumable" },
|
|
{ id: 43, name: "Remembrance of the Fire Giant", gear_type: "consumable" },
|
|
{ id: 44, name: "Remembrance of the Black Blade", gear_type: "consumable" },
|
|
{ id: 45, name: "Smithing Stone [1]", gear_type: "material" },
|
|
{ id: 46, name: "Smithing Stone [4]", gear_type: "material" },
|
|
{ id: 47, name: "Somber Smithing Stone [1]", gear_type: "material" },
|
|
{ id: 48, name: "Somber Smithing Stone [7]", gear_type: "material" },
|
|
{ id: 49, name: "Glovewort [1]", gear_type: "material" },
|
|
{ id: 50, name: "Ghost Glovewort [9]", gear_type: "material" },
|
|
];
|
|
|
|
const regions = [
|
|
{ id: 1, name: "Limgrave", items: ["1", "8", "21", "26"], enemies: ["1", "2", "3", "11", "12", "13", "14"] },
|
|
{ id: 2, name: "Liurnia of the Lakes", items: ["3", "15", "16", "19", "20", "22", "29"], enemies: ["4", "5", "15", "16", "17", "18"] },
|
|
{ id: 3, name: "Caelid", items: ["4", "17", "18"], enemies: ["6", "7", "19", "20", "21", "22"] },
|
|
{ id: 4, name: "Altus Plateau", items: ["2", "23", "24"], enemies: ["8", "23", "24", "25"] },
|
|
{ id: 5, name: "Mountaintops of the Giants", items: ["10"], enemies: ["9", "26", "27", "28"] },
|
|
{ id: 6, name: "Farum Azula", items: ["6", "25", "30"], enemies: ["10", "29", "30"] },
|
|
{ id: 7, name: "Weeping Peninsula", items: [], enemies: [] },
|
|
{ id: 8, name: "Siofra River", items: [], enemies: [] },
|
|
{ id: 9, name: "Ainsel River", items: [], enemies: [] },
|
|
{ id: 10, name: "Deeproot Depths", items: [], enemies: [] },
|
|
{ id: 11, name: "Lake of Rot", items: [], enemies: [] },
|
|
{ id: 12, name: "Consecrated Snowfield", items: [], enemies: [] },
|
|
{ id: 13, name: "Miquella's Haligtree", items: [], enemies: [] },
|
|
{ id: 14, name: "Mohgwyn Palace", items: [], enemies: [] },
|
|
{ id: 15, name: "Leyndell, Royal Capital", items: [], enemies: [] },
|
|
{ id: 16, name: "Leyndell, Ashen Capital", items: [], enemies: [] },
|
|
];
|
|
|
|
const enemies = [
|
|
{ id: 1, region_id: 1, name: "Tree Sentinel", health: 3000, level: 20, damage: 70, items: ["1", "47", "34"] },
|
|
{ id: 2, region_id: 1, name: "Margit, the Fell Omen", health: 4100, level: 25, damage: 100, items: ["26", "33", "34"] },
|
|
{ id: 3, region_id: 1, name: "Godrick the Grafted", health: 6000, level: 30, damage: 150, items: ["33", "39"] },
|
|
{ id: 4, region_id: 2, name: "Rennala, Queen of the Full Moon", health: 5000, level: 40, damage: 200, items: ["15", "16", "33", "40"] },
|
|
{ id: 5, region_id: 2, name: "Red Wolf of Radagon", health: 3000, level: 35, damage: 120, items: ["29", "35", "46"] },
|
|
{ id: 6, region_id: 3, name: "Starscourge Radahn", health: 10000, level: 60, damage: 400, items: ["17", "18", "33", "41"] },
|
|
{ id: 7, region_id: 3, name: "Commander O'Neil", health: 7000, level: 50, damage: 250, items: ["33", "35"] },
|
|
{ id: 8, region_id: 4, name: "Morgott, the Omen King", health: 12000, level: 70, damage: 500, items: ["33", "42"] },
|
|
{ id: 9, region_id: 5, name: "Fire Giant", health: 25000, level: 90, damage: 800, items: ["30", "33", "43"] },
|
|
{ id: 10, region_id: 6, name: "Maliketh, the Black Blade", health: 18000, level: 110, damage: 1000, items: ["33", "44"] },
|
|
{ id: 11, region_id: 1, name: "Godrick Soldier", health: 150, level: 5, damage: 20, items: ["21", "34", "45"] },
|
|
{ id: 12, region_id: 1, name: "Wandering Noble", health: 80, level: 2, damage: 10, items: ["31", "34"] },
|
|
{ id: 13, region_id: 1, name: "Limgrave Knight", health: 350, level: 12, damage: 40, items: ["11", "12", "13", "14", "23", "45"] },
|
|
{ id: 14, region_id: 1, name: "Demi-Human", health: 120, level: 4, damage: 15, items: ["34", "45"] },
|
|
{ id: 15, region_id: 2, name: "Raya Lucaria Soldier", health: 200, level: 15, damage: 30, items: ["22", "34", "46"] },
|
|
{ id: 16, region_id: 2, name: "Marionette Soldier", health: 180, level: 16, damage: 25, items: ["45", "49"] },
|
|
{ id: 17, region_id: 2, name: "Albinauric", health: 250, level: 18, damage: 35, items: ["34", "35"] },
|
|
{ id: 18, region_id: 2, name: "Carian Knight", health: 600, level: 28, damage: 80, items: ["19", "20", "22", "47"] },
|
|
{ id: 19, region_id: 3, name: "Radahn Soldier", health: 300, level: 25, damage: 45, items: ["35", "46"] },
|
|
{ id: 20, region_id: 3, name: "Monstrous Dog", health: 800, level: 32, damage: 110, items: ["35", "49"] },
|
|
{ id: 21, region_id: 3, name: "Monstrous Crow", health: 750, level: 33, damage: 120, items: ["35", "49"] },
|
|
{ id: 22, region_id: 3, name: "Cleanrot Knight", health: 900, level: 38, damage: 100, items: ["36", "48"] },
|
|
{ id: 23, region_id: 4, name: "Leyndell Soldier", health: 400, level: 40, damage: 60, items: ["36", "46"] },
|
|
{ id: 24, region_id: 4, name: "Leyndell Knight", health: 1200, level: 48, damage: 140, items: ["24", "36", "48"] },
|
|
{ id: 25, region_id: 4, name: "Omen", health: 1500, level: 50, damage: 180, items: ["36", "48", "33"] },
|
|
{ id: 26, region_id: 5, name: "Fire Monk", health: 800, level: 55, damage: 120, items: ["36", "48"] },
|
|
{ id: 27, region_id: 5, name: "Giant Dog", health: 1100, level: 60, damage: 160, items: ["36"] },
|
|
{ id: 28, region_id: 5, name: "Troll", health: 2200, level: 65, damage: 220, items: ["37", "48"] },
|
|
{ id: 29, region_id: 6, name: "Beastman of Farum Azula", health: 1000, level: 80, damage: 200, items: ["37", "48"] },
|
|
{ id: 30, region_id: 6, name: "Banished Knight", health: 2000, level: 85, damage: 280, items: ["24", "37", "48", "50"] },
|
|
];
|
|
|
|
// Helper for hset
|
|
const setHash = async (prefix: string, list: any[]) => {
|
|
for (const obj of list) {
|
|
// extract items/enemies sets if they exist
|
|
const { items, enemies, ...hashData } = obj;
|
|
await redis.hset(`${prefix}:${obj.id}`, hashData);
|
|
if (items && items.length > 0) {
|
|
await redis.sadd(`${prefix}:${obj.id}:items`, ...items);
|
|
}
|
|
if (enemies && enemies.length > 0) {
|
|
await redis.sadd(`${prefix}:${obj.id}:enemies`, ...enemies);
|
|
}
|
|
}
|
|
};
|
|
|
|
await setHash("item_effect", effects);
|
|
await setHash("item_type", types);
|
|
await setHash("weapon", weapons);
|
|
await setHash("armor", armors);
|
|
await setHash("shield", shields);
|
|
await setHash("talisman", talismans);
|
|
await setHash("item", items);
|
|
await setHash("region", regions);
|
|
await setHash("enemy", enemies);
|
|
|
|
console.log(`Inserted ${effects.length + types.length + weapons.length + armors.length + shields.length + talismans.length + items.length + regions.length + enemies.length} primary entities into Redis.`);
|
|
console.log("Database successfully seeded.");
|
|
process.exit(0);
|