import * as fs from 'fs' // Data for 35 gems const GEM_ENTRIES = [ // Amethyst { code: 'gcv', nameEn: 'Chipped Amethyst', nameZh: '碎裂的紫水晶', gemType: 'amethyst', tier: 1, reqLevel: 1, weaponsEn: '+40 to Attack Rating', weaponsZh: '+40 准确率', armorEn: '+3 to Strength', armorZh: '+3 力量', helmsEn: '+3 to Strength', helmsZh: '+3 力量', shieldsEn: '+8 Defense', shieldsZh: '+8 防御', }, { code: 'gfv', nameEn: 'Flawed Amethyst', nameZh: '裂开的紫水晶', gemType: 'amethyst', tier: 2, reqLevel: 5, weaponsEn: '+60 to Attack Rating', weaponsZh: '+60 准确率', armorEn: '+4 to Strength', armorZh: '+4 力量', helmsEn: '+4 to Strength', helmsZh: '+4 力量', shieldsEn: '+12 Defense', shieldsZh: '+12 防御', }, { code: 'gsv', nameEn: 'Amethyst', nameZh: '紫水晶', gemType: 'amethyst', tier: 3, reqLevel: 12, weaponsEn: '+80 to Attack Rating', weaponsZh: '+80 准确率', armorEn: '+6 to Strength', armorZh: '+6 力量', helmsEn: '+6 to Strength', helmsZh: '+6 力量', shieldsEn: '+18 Defense', shieldsZh: '+18 防御', }, { code: 'gzv', nameEn: 'Flawless Amethyst', nameZh: '无瑕疵的紫水晶', gemType: 'amethyst', tier: 4, reqLevel: 15, weaponsEn: '+100 to Attack Rating', weaponsZh: '+100 准确率', armorEn: '+8 to Strength', armorZh: '+8 力量', helmsEn: '+8 to Strength', helmsZh: '+8 力量', shieldsEn: '+24 Defense', shieldsZh: '+24 防御', }, { code: 'gpv', nameEn: 'Perfect Amethyst', nameZh: '完美的紫水晶', gemType: 'amethyst', tier: 5, reqLevel: 18, weaponsEn: '+150 to Attack Rating', weaponsZh: '+150 准确率', armorEn: '+10 to Strength', armorZh: '+10 力量', helmsEn: '+10 to Strength', helmsZh: '+10 力量', shieldsEn: '+30 Defense', shieldsZh: '+30 防御', }, // Topaz { code: 'gcy', nameEn: 'Chipped Topaz', nameZh: '碎裂的黄宝石', gemType: 'topaz', tier: 1, reqLevel: 1, weaponsEn: 'Adds 1-8 Lightning Damage', weaponsZh: '增加 1-8 闪电伤害', armorEn: '9% Better Chance of Getting Magic Items', armorZh: '9% 获得魔法装备几率', helmsEn: '9% Better Chance of Getting Magic Items', helmsZh: '9% 获得魔法装备几率', shieldsEn: 'Lightning Resist +12%', shieldsZh: '抗电 +12%', }, { code: 'gfy', nameEn: 'Flawed Topaz', nameZh: '裂开的黄宝石', gemType: 'topaz', tier: 2, reqLevel: 5, weaponsEn: 'Adds 1-14 Lightning Damage', weaponsZh: '增加 1-14 闪电伤害', armorEn: '13% Better Chance of Getting Magic Items', armorZh: '13% 获得魔法装备几率', helmsEn: '13% Better Chance of Getting Magic Items', helmsZh: '13% 获得魔法装备几率', shieldsEn: 'Lightning Resist +16%', shieldsZh: '抗电 +16%', }, { code: 'gsy', nameEn: 'Topaz', nameZh: '黄宝石', gemType: 'topaz', tier: 3, reqLevel: 12, weaponsEn: 'Adds 1-22 Lightning Damage', weaponsZh: '增加 1-22 闪电伤害', armorEn: '16% Better Chance of Getting Magic Items', armorZh: '16% 获得魔法装备几率', helmsEn: '16% Better Chance of Getting Magic Items', helmsZh: '16% 获得魔法装备几率', shieldsEn: 'Lightning Resist +22%', shieldsZh: '抗电 +22%', }, { code: 'gly', nameEn: 'Flawless Topaz', nameZh: '无瑕疵的黄宝石', gemType: 'topaz', tier: 4, reqLevel: 15, weaponsEn: 'Adds 1-30 Lightning Damage', weaponsZh: '增加 1-30 闪电伤害', armorEn: '20% Better Chance of Getting Magic Items', armorZh: '20% 获得魔法装备几率', helmsEn: '20% Better Chance of Getting Magic Items', helmsZh: '20% 获得魔法装备几率', shieldsEn: 'Lightning Resist +28%', shieldsZh: '抗电 +28%', }, { code: 'gpy', nameEn: 'Perfect Topaz', nameZh: '完美的黄宝石', gemType: 'topaz', tier: 5, reqLevel: 18, weaponsEn: 'Adds 1-40 Lightning Damage', weaponsZh: '增加 1-40 闪电伤害', armorEn: '24% Better Chance of Getting Magic Items', armorZh: '24% 获得魔法装备几率', helmsEn: '24% Better Chance of Getting Magic Items', helmsZh: '24% 获得魔法装备几率', shieldsEn: 'Lightning Resist +40%', shieldsZh: '抗电 +40%', }, // Sapphire { code: 'gcb', nameEn: 'Chipped Sapphire', nameZh: '碎裂的蓝宝石', gemType: 'sapphire', tier: 1, reqLevel: 1, weaponsEn: 'Adds 1-3 Cold Damage - 1 sec Duration', weaponsZh: '增加 1-3 冰冻伤害 (持续 1 秒)', armorEn: '+10 to Mana', armorZh: '+10 法力', helmsEn: '+10 to Mana', helmsZh: '+10 法力', shieldsEn: 'Cold Resist +12%', shieldsZh: '抗寒 +12%', }, { code: 'gfb', nameEn: 'Flawed Sapphire', nameZh: '裂开的蓝宝石', gemType: 'sapphire', tier: 2, reqLevel: 5, weaponsEn: 'Adds 3-5 Cold Damage - 1.4 sec Duration', weaponsZh: '增加 3-5 冰冻伤害 (持续 1.4 秒)', armorEn: '+17 to Mana', armorZh: '+17 法力', helmsEn: '+17 to Mana', helmsZh: '+17 法力', shieldsEn: 'Cold Resist +16%', shieldsZh: '抗寒 +16%', }, { code: 'gsb', nameEn: 'Sapphire', nameZh: '蓝宝石', gemType: 'sapphire', tier: 3, reqLevel: 12, weaponsEn: 'Adds 4-7 Cold Damage - 2 sec Duration', weaponsZh: '增加 4-7 冰冻伤害 (持续 2 秒)', armorEn: '+24 to Mana', armorZh: '+24 法力', helmsEn: '+24 to Mana', helmsZh: '+24 法力', shieldsEn: 'Cold Resist +22%', shieldsZh: '抗寒 +22%', }, { code: 'glb', nameEn: 'Flawless Sapphire', nameZh: '无瑕疵的蓝宝石', gemType: 'sapphire', tier: 4, reqLevel: 15, weaponsEn: 'Adds 6-10 Cold Damage - 2.4 sec Duration', weaponsZh: '增加 6-10 冰冻伤害 (持续 2.4 秒)', armorEn: '+31 to Mana', armorZh: '+31 法力', helmsEn: '+31 to Mana', helmsZh: '+31 法力', shieldsEn: 'Cold Resist +28%', shieldsZh: '抗寒 +28%', }, { code: 'gpb', nameEn: 'Perfect Sapphire', nameZh: '完美的蓝宝石', gemType: 'sapphire', tier: 5, reqLevel: 18, weaponsEn: 'Adds 10-14 Cold Damage - 3 sec Duration', weaponsZh: '增加 10-14 冰冻伤害 (持续 3 秒)', armorEn: '+38 to Mana', armorZh: '+38 法力', helmsEn: '+38 to Mana', helmsZh: '+38 法力', shieldsEn: 'Cold Resist +40%', shieldsZh: '抗寒 +40%', }, // Emerald { code: 'gcg', nameEn: 'Chipped Emerald', nameZh: '碎裂的绿宝石', gemType: 'emerald', tier: 1, reqLevel: 1, weaponsEn: '+10 Poison Damage Over 3 Seconds', weaponsZh: '在 3 秒内造成 10 点毒素伤害', armorEn: '+3 to Dexterity', armorZh: '+3 敏捷', helmsEn: '+3 to Dexterity', helmsZh: '+3 敏捷', shieldsEn: 'Poison Resist +12%', shieldsZh: '抗毒 +12%', }, { code: 'gfg', nameEn: 'Flawed Emerald', nameZh: '裂开的绿宝石', gemType: 'emerald', tier: 2, reqLevel: 5, weaponsEn: '+20 Poison Damage Over 4 Seconds', weaponsZh: '在 4 秒内造成 20 点毒素伤害', armorEn: '+4 to Dexterity', armorZh: '+4 敏捷', helmsEn: '+4 to Dexterity', helmsZh: '+4 敏捷', shieldsEn: 'Poison Resist +16%', shieldsZh: '抗毒 +16%', }, { code: 'gsg', nameEn: 'Emerald', nameZh: '绿宝石', gemType: 'emerald', tier: 3, reqLevel: 12, weaponsEn: '+40 Poison Damage Over 5 Seconds', weaponsZh: '在 5 秒内造成 40 点毒素伤害', armorEn: '+6 to Dexterity', armorZh: '+6 敏捷', helmsEn: '+6 to Dexterity', helmsZh: '+6 敏捷', shieldsEn: 'Poison Resist +22%', shieldsZh: '抗毒 +22%', }, { code: 'glg', nameEn: 'Flawless Emerald', nameZh: '无瑕疵的绿宝石', gemType: 'emerald', tier: 4, reqLevel: 15, weaponsEn: '+60 Poison Damage Over 6 Seconds', weaponsZh: '在 6 秒内造成 60 点毒素伤害', armorEn: '+8 to Dexterity', armorZh: '+8 敏捷', helmsEn: '+8 to Dexterity', helmsZh: '+8 敏捷', shieldsEn: 'Poison Resist +28%', shieldsZh: '抗毒 +28%', }, { code: 'gpg', nameEn: 'Perfect Emerald', nameZh: '完美的绿宝石', gemType: 'emerald', tier: 5, reqLevel: 18, weaponsEn: '+100 Poison Damage Over 7 Seconds', weaponsZh: '在 7 秒内造成 100 点毒素伤害', armorEn: '+10 to Dexterity', armorZh: '+10 敏捷', helmsEn: '+10 to Dexterity', helmsZh: '+10 敏捷', shieldsEn: 'Poison Resist +40%', shieldsZh: '抗毒 +40%', }, // Ruby { code: 'gcr', nameEn: 'Chipped Ruby', nameZh: '碎裂的红宝石', gemType: 'ruby', tier: 1, reqLevel: 1, weaponsEn: 'Adds 3-4 Fire Damage', weaponsZh: '增加 3-4 火焰伤害', armorEn: '+10 to Life', armorZh: '+10 生命', helmsEn: '+10 to Life', helmsZh: '+10 生命', shieldsEn: 'Fire Resist +12%', shieldsZh: '抗火 +12%', }, { code: 'gfr', nameEn: 'Flawed Ruby', nameZh: '裂开的红宝石', gemType: 'ruby', tier: 2, reqLevel: 5, weaponsEn: 'Adds 5-8 Fire Damage', weaponsZh: '增加 5-8 火焰伤害', armorEn: '+17 to Life', armorZh: '+17 生命', helmsEn: '+17 to Life', helmsZh: '+17 生命', shieldsEn: 'Fire Resist +16%', shieldsZh: '抗火 +16%', }, { code: 'gsr', nameEn: 'Ruby', nameZh: '红宝石', gemType: 'ruby', tier: 3, reqLevel: 12, weaponsEn: 'Adds 8-12 Fire Damage', weaponsZh: '增加 8-12 火焰伤害', armorEn: '+24 to Life', armorZh: '+24 生命', helmsEn: '+24 to Life', helmsZh: '+24 生命', shieldsEn: 'Fire Resist +22%', shieldsZh: '抗火 +22%', }, { code: 'glr', nameEn: 'Flawless Ruby', nameZh: '无瑕疵的红宝石', gemType: 'ruby', tier: 4, reqLevel: 15, weaponsEn: 'Adds 10-16 Fire Damage', weaponsZh: '增加 10-16 火焰伤害', armorEn: '+31 to Life', armorZh: '+31 生命', helmsEn: '+31 to Life', helmsZh: '+31 生命', shieldsEn: 'Fire Resist +28%', shieldsZh: '抗火 +28%', }, { code: 'gpr', nameEn: 'Perfect Ruby', nameZh: '完美的红宝石', gemType: 'ruby', tier: 5, reqLevel: 18, weaponsEn: 'Adds 15-20 Fire Damage', weaponsZh: '增加 15-20 火焰伤害', armorEn: '+38 to Life', armorZh: '+38 生命', helmsEn: '+38 to Life', helmsZh: '+38 生命', shieldsEn: 'Fire Resist +40%', shieldsZh: '抗火 +40%', }, // Diamond { code: 'gcw', nameEn: 'Chipped Diamond', nameZh: '碎裂的钻石', gemType: 'diamond', tier: 1, reqLevel: 1, weaponsEn: '+28% Damage to Undead', weaponsZh: '+28% 对不死生物的伤害', armorEn: '+20 to Attack Rating', armorZh: '+20 准确率', helmsEn: '+20 to Attack Rating', helmsZh: '+20 准确率', shieldsEn: 'All Resistances +6', shieldsZh: '所有抗性 +6', }, { code: 'gfw', nameEn: 'Flawed Diamond', nameZh: '裂开的钻石', gemType: 'diamond', tier: 2, reqLevel: 5, weaponsEn: '+34% Damage to Undead', weaponsZh: '+34% 对不死生物的伤害', armorEn: '+40 to Attack Rating', armorZh: '+40 准确率', helmsEn: '+40 to Attack Rating', helmsZh: '+40 准确率', shieldsEn: 'All Resistances +8', shieldsZh: '所有抗性 +8', }, { code: 'gsw', nameEn: 'Diamond', nameZh: '钻石', gemType: 'diamond', tier: 3, reqLevel: 12, weaponsEn: '+44% Damage to Undead', weaponsZh: '+44% 对不死生物的伤害', armorEn: '+60 to Attack Rating', armorZh: '+60 准确率', helmsEn: '+60 to Attack Rating', helmsZh: '+60 准确率', shieldsEn: 'All Resistances +11', shieldsZh: '所有抗性 +11', }, { code: 'glw', nameEn: 'Flawless Diamond', nameZh: '无瑕疵的钻石', gemType: 'diamond', tier: 4, reqLevel: 15, weaponsEn: '+54% Damage to Undead', weaponsZh: '+54% 对不死生物的伤害', armorEn: '+80 to Attack Rating', armorZh: '+80 准确率', helmsEn: '+80 to Attack Rating', helmsZh: '+80 准确率', shieldsEn: 'All Resistances +14', shieldsZh: '所有抗性 +14', }, { code: 'gpw', nameEn: 'Perfect Diamond', nameZh: '完美的钻石', gemType: 'diamond', tier: 5, reqLevel: 18, weaponsEn: '+68% Damage to Undead', weaponsZh: '+68% 对不死生物的伤害', armorEn: '+100 to Attack Rating', armorZh: '+100 准确率', helmsEn: '+100 to Attack Rating', helmsZh: '+100 准确率', shieldsEn: 'All Resistances +19', shieldsZh: '所有抗性 +19', }, // Skull { code: 'skc', nameEn: 'Chipped Skull', nameZh: '碎裂的骷髅', gemType: 'skull', tier: 1, reqLevel: 1, weaponsEn: '2% Life Stolen Per Hit, 1% Mana Stolen Per Hit', weaponsZh: '每次命中偷取 2% 生命, 每次命中偷取 1% 法力', armorEn: 'Regenerate Mana 8%, Replenish Life +2', armorZh: '法力恢复速度 8%, 生命恢复 +2', helmsEn: 'Regenerate Mana 8%, Replenish Life +2', helmsZh: '法力恢复速度 8%, 生命恢复 +2', shieldsEn: 'Attacker Takes Damage of 4', shieldsZh: '攻击者受到伤害 4', }, { code: 'skf', nameEn: 'Flawed Skull', nameZh: '裂开的骷髅', gemType: 'skull', tier: 2, reqLevel: 5, weaponsEn: '2% Life Stolen Per Hit, 2% Mana Stolen Per Hit', weaponsZh: '每次命中偷取 2% 生命, 每次命中偷取 2% 法力', armorEn: 'Regenerate Mana 8%, Replenish Life +3', armorZh: '法力恢复速度 8%, 生命恢复 +3', helmsEn: 'Regenerate Mana 8%, Replenish Life +3', helmsZh: '法力恢复速度 8%, 生命恢复 +3', shieldsEn: 'Attacker Takes Damage of 8', shieldsZh: '攻击者受到伤害 8', }, { code: 'sku', nameEn: 'Skull', nameZh: '骷髅', gemType: 'skull', tier: 3, reqLevel: 12, weaponsEn: '3% Life Stolen Per Hit, 2% Mana Stolen Per Hit', weaponsZh: '每次命中偷取 3% 生命, 每次命中偷取 2% 法力', armorEn: 'Regenerate Mana 12%, Replenish Life +3', armorZh: '法力恢复速度 12%, 生命恢复 +3', helmsEn: 'Regenerate Mana 12%, Replenish Life +3', helmsZh: '法力恢复速度 12%, 生命恢复 +3', shieldsEn: 'Attacker Takes Damage of 12', shieldsZh: '攻击者受到伤害 12', }, { code: 'skl', nameEn: 'Flawless Skull', nameZh: '无瑕疵的骷髅', gemType: 'skull', tier: 4, reqLevel: 15, weaponsEn: '3% Life Stolen Per Hit, 3% Mana Stolen Per Hit', weaponsZh: '每次命中偷取 3% 生命, 每次命中偷取 3% 法力', armorEn: 'Regenerate Mana 12%, Replenish Life +4', armorZh: '法力恢复速度 12%, 生命恢复 +4', helmsEn: 'Regenerate Mana 12%, Replenish Life +4', helmsZh: '法力恢复速度 12%, 生命恢复 +4', shieldsEn: 'Attacker Takes Damage of 16', shieldsZh: '攻击者受到伤害 16', }, { code: 'skz', nameEn: 'Perfect Skull', nameZh: '完美的骷髅', gemType: 'skull', tier: 5, reqLevel: 18, weaponsEn: '4% Life Stolen Per Hit, 3% Mana Stolen Per Hit', weaponsZh: '每次命中偷取 4% 生命, 每次命中偷取 3% 法力', armorEn: 'Regenerate Mana 19%, Replenish Life +5', armorZh: '法力恢复速度 19%, 生命恢复 +5', helmsEn: 'Regenerate Mana 19%, Replenish Life +5', helmsZh: '法力恢复速度 19%, 生命恢复 +5', shieldsEn: 'Attacker Takes Damage of 20', shieldsZh: '攻击者受到伤害 20', }, ] // Data for 33 Runes const RUNE_ENTRIES = [ { code: 'r01', num: 1, letter: 'El', nameEn: 'El Rune', nameZh: '艾尔', reqLevel: 11, weaponsEn: '+50 to Attack Rating, +1 to Light Radius', weaponsZh: '+50 准确率, +1 光照范围', armorEn: '+15 Defense, +1 to Light Radius', armorZh: '+15 防御, +1 光照范围', helmsEn: '+15 Defense, +1 to Light Radius', helmsZh: '+15 防御, +1 光照范围', shieldsEn: '+15 Defense, +1 to Light Radius', shieldsZh: '+15 防御, +1 光照范围', }, { code: 'r02', num: 2, letter: 'Eld', nameEn: 'Eld Rune', nameZh: '艾德', reqLevel: 11, weaponsEn: '+75% Damage to Undead, +50 to Attack Rating against Undead', weaponsZh: '+75% 对不死生物的伤害, +50 对不死生物的准确率', armorEn: '15% Slower Stamina Drain', armorZh: '减慢体力消耗 15%', helmsEn: '15% Slower Stamina Drain', helmsZh: '减慢体力消耗 15%', shieldsEn: '7% Increased Chance of Blocking', shieldsZh: '7% 增加格挡几率', }, { code: 'r03', num: 3, letter: 'Tir', nameEn: 'Tir Rune', nameZh: '特尔', reqLevel: 13, weaponsEn: '+2 to Mana after each Kill', weaponsZh: '+2 每击杀一个怪物获得法力', armorEn: '+2 to Mana after each Kill', armorZh: '+2 每击杀一个怪物获得法力', helmsEn: '+2 to Mana after each Kill', helmsZh: '+2 每击杀一个怪物获得法力', shieldsEn: '+2 to Mana after each Kill', shieldsZh: '+2 每击杀一个怪物获得法力', }, { code: 'r04', num: 4, letter: 'Nef', nameEn: 'Nef Rune', nameZh: '那夫', reqLevel: 13, weaponsEn: 'Knockback', weaponsZh: '击退', armorEn: '+30 Defense vs. Missile', armorZh: '+30 对远距离武器的防御', helmsEn: '+30 Defense vs. Missile', helmsZh: '+30 对远距离武器的防御', shieldsEn: '+30 Defense vs. Missile', shieldsZh: '+30 对远距离武器的防御', }, { code: 'r05', num: 5, letter: 'Eth', nameEn: 'Eth Rune', nameZh: '爱斯', reqLevel: 15, weaponsEn: '-25% Target Defense', weaponsZh: '-25% 目标防御', armorEn: 'Regenerate Mana 15%', armorZh: '法力恢复速度 15%', helmsEn: 'Regenerate Mana 15%', helmsZh: '法力恢复速度 15%', shieldsEn: 'Regenerate Mana 15%', shieldsZh: '法力恢复速度 15%', }, { code: 'r06', num: 6, letter: 'Ith', nameEn: 'Ith Rune', nameZh: '伊司', reqLevel: 15, weaponsEn: '+9 to Maximum Damage', weaponsZh: '+9 最大伤害', armorEn: '15% Damage Taken Goes To Mana', armorZh: '15% 伤害转化为法力', helmsEn: '15% Damage Taken Goes To Mana', helmsZh: '15% 伤害转化为法力', shieldsEn: '15% Damage Taken Goes To Mana', shieldsZh: '15% 伤害转化为法力', }, { code: 'r07', num: 7, letter: 'Tal', nameEn: 'Tal Rune', nameZh: '塔尔', reqLevel: 17, weaponsEn: '+75 Poison Damage Over 5 Seconds', weaponsZh: '在 5 秒内造成 75 点毒素伤害', armorEn: 'Poison Resist +30%', armorZh: '抗毒 +30%', helmsEn: 'Poison Resist +30%', helmsZh: '抗毒 +30%', shieldsEn: 'Poison Resist +35%', shieldsZh: '抗毒 +35%', }, { code: 'r08', num: 8, letter: 'Ral', nameEn: 'Ral Rune', nameZh: '拉尔', reqLevel: 19, weaponsEn: 'Adds 5-30 Fire Damage', weaponsZh: '增加 5-30 火焰伤害', armorEn: 'Fire Resist +30%', armorZh: '抗火 +30%', helmsEn: 'Fire Resist +30%', helmsZh: '抗火 +30%', shieldsEn: 'Fire Resist +35%', shieldsZh: '抗火 +35%', }, { code: 'r09', num: 9, letter: 'Ort', nameEn: 'Ort Rune', nameZh: '欧特', reqLevel: 21, weaponsEn: 'Adds 1-50 Lightning Damage', weaponsZh: '增加 1-50 闪电伤害', armorEn: 'Lightning Resist +30%', armorZh: '抗电 +30%', helmsEn: 'Lightning Resist +30%', helmsZh: '抗电 +30%', shieldsEn: 'Lightning Resist +35%', shieldsZh: '抗电 +35%', }, { code: 'r10', num: 10, letter: 'Thul', nameEn: 'Thul Rune', nameZh: '书尔', reqLevel: 23, weaponsEn: 'Adds 3-14 Cold Damage (3 sec)', weaponsZh: '增加 3-14 冰冻伤害 (持续 3 秒)', armorEn: 'Cold Resist +30%', armorZh: '抗寒 +30%', helmsEn: 'Cold Resist +30%', helmsZh: '抗寒 +30%', shieldsEn: 'Cold Resist +35%', shieldsZh: '抗寒 +35%', }, { code: 'r11', num: 11, letter: 'Amn', nameEn: 'Amn Rune', nameZh: '安姆', reqLevel: 25, weaponsEn: '7% Life Stolen Per Hit', weaponsZh: '每次命中偷取 7% 生命', armorEn: 'Attacker Takes Damage of 14', armorZh: '攻击者受到伤害 14', helmsEn: 'Attacker Takes Damage of 14', helmsZh: '攻击者受到伤害 14', shieldsEn: 'Attacker Takes Damage of 14', shieldsZh: '攻击者受到伤害 14', }, { code: 'r12', num: 12, letter: 'Sol', nameEn: 'Sol Rune', nameZh: '索尔', reqLevel: 27, weaponsEn: '+9 to Minimum Damage', weaponsZh: '+9 最小伤害', armorEn: 'Damage Reduced by 7', armorZh: '伤害减少 7', helmsEn: 'Damage Reduced by 7', helmsZh: '伤害减少 7', shieldsEn: 'Damage Reduced by 7', shieldsZh: '伤害减少 7', }, { code: 'r13', num: 13, letter: 'Shael', nameEn: 'Shael Rune', nameZh: '夏', reqLevel: 29, weaponsEn: '20% Increased Attack Speed', weaponsZh: '+20% 增加攻击速度', armorEn: '20% Faster Hit Recovery', armorZh: '+20% 快速打击恢复', helmsEn: '20% Faster Hit Recovery', helmsZh: '+20% 快速打击恢复', shieldsEn: '20% Faster Block Rate', shieldsZh: '+20% 快速格挡率', }, { code: 'r14', num: 14, letter: 'Dol', nameEn: 'Dol Rune', nameZh: '多尔', reqLevel: 31, weaponsEn: 'Hit Causes Monster to Flee 25%', weaponsZh: '击中时使怪物逃跑 25%', armorEn: 'Replenish Life +7', armorZh: '生命恢复 +7', helmsEn: 'Replenish Life +7', helmsZh: '生命恢复 +7', shieldsEn: 'Replenish Life +7', shieldsZh: '生命恢复 +7', }, { code: 'r15', num: 15, letter: 'Hel', nameEn: 'Hel Rune', nameZh: '海尔', reqLevel: 0, weaponsEn: 'Requirements -20%', weaponsZh: '装备需求 -20%', armorEn: 'Requirements -15%', armorZh: '装备需求 -15%', helmsEn: 'Requirements -15%', helmsZh: '装备需求 -15%', shieldsEn: 'Requirements -15%', shieldsZh: '装备需求 -15%', }, { code: 'r16', num: 16, letter: 'Io', nameEn: 'Io Rune', nameZh: '艾欧', reqLevel: 35, weaponsEn: '+10 to Vitality', weaponsZh: '+10 体力', armorEn: '+10 to Vitality', armorZh: '+10 体力', helmsEn: '+10 to Vitality', helmsZh: '+10 体力', shieldsEn: '+10 to Vitality', shieldsZh: '+10 体力', }, { code: 'r17', num: 17, letter: 'Lum', nameEn: 'Lum Rune', nameZh: '卢姆', reqLevel: 37, weaponsEn: '+10 to Energy', weaponsZh: '+10 精力', armorEn: '+10 to Energy', armorZh: '+10 精力', helmsEn: '+10 to Energy', helmsZh: '+10 精力', shieldsEn: '+10 to Energy', shieldsZh: '+10 精力', }, { code: 'r18', num: 18, letter: 'Ko', nameEn: 'Ko Rune', nameZh: '科', reqLevel: 39, weaponsEn: '+10 to Dexterity', weaponsZh: '+10 敏捷', armorEn: '+10 to Dexterity', armorZh: '+10 敏捷', helmsEn: '+10 to Dexterity', helmsZh: '+10 敏捷', shieldsEn: '+10 to Dexterity', shieldsZh: '+10 敏捷', }, { code: 'r19', num: 19, letter: 'Fal', nameEn: 'Fal Rune', nameZh: '法尔', reqLevel: 41, weaponsEn: '+10 to Strength', weaponsZh: '+10 力量', armorEn: '+10 to Strength', armorZh: '+10 力量', helmsEn: '+10 to Strength', helmsZh: '+10 力量', shieldsEn: '+10 to Strength', shieldsZh: '+10 力量', }, { code: 'r20', num: 20, letter: 'Lem', nameEn: 'Lem Rune', nameZh: '蓝姆', reqLevel: 43, weaponsEn: '75% Extra Gold from Monsters', weaponsZh: '+75% 从怪物获得额外金钱', armorEn: '50% Extra Gold from Monsters', armorZh: '+50% 从怪物获得额外金钱', helmsEn: '50% Extra Gold from Monsters', helmsZh: '+50% 从怪物获得额外金钱', shieldsEn: '50% Extra Gold from Monsters', shieldsZh: '+50% 从怪物获得额外金钱', }, { code: 'r21', num: 21, letter: 'Pul', nameEn: 'Pul Rune', nameZh: '普尔', reqLevel: 45, weaponsEn: '+75% Damage to Demons, +100 to Attack Rating against Demons', weaponsZh: '+75% 对恶魔的伤害, +100 对恶魔的准确率', armorEn: '+30% Enhanced Defense', armorZh: '+30% 强化防御', helmsEn: '+30% Enhanced Defense', helmsZh: '+30% 强化防御', shieldsEn: '+30% Enhanced Defense', shieldsZh: '+30% 强化防御', }, { code: 'r22', num: 22, letter: 'Um', nameEn: 'Um Rune', nameZh: '乌姆', reqLevel: 47, weaponsEn: '25% Chance of Open Wounds', weaponsZh: '25% 几率撕开伤口', armorEn: 'All Resistances +15', armorZh: '所有抗性 +15', helmsEn: 'All Resistances +15', helmsZh: '所有抗性 +15', shieldsEn: 'All Resistances +22', shieldsZh: '所有抗性 +22', }, { code: 'r23', num: 23, letter: 'Mal', nameEn: 'Mal Rune', nameZh: '马尔', reqLevel: 49, weaponsEn: 'Prevent Monster Heal', weaponsZh: '防止怪物自愈', armorEn: 'Magic Damage Reduced by 7', armorZh: '魔法伤害减少 7', helmsEn: 'Magic Damage Reduced by 7', helmsZh: '魔法伤害减少 7', shieldsEn: 'Magic Damage Reduced by 7', shieldsZh: '魔法伤害减少 7', }, { code: 'r24', num: 24, letter: 'Ist', nameEn: 'Ist Rune', nameZh: '伊斯特', reqLevel: 51, weaponsEn: '30% Better Chance of Getting Magic Items', weaponsZh: '+30% 获得魔法装备几率', armorEn: '25% Better Chance of Getting Magic Items', armorZh: '+25% 获得魔法装备几率', helmsEn: '25% Better Chance of Getting Magic Items', helmsZh: '+25% 获得魔法装备几率', shieldsEn: '25% Better Chance of Getting Magic Items', shieldsZh: '+25% 获得魔法装备几率', }, { code: 'r25', num: 25, letter: 'Gul', nameEn: 'Gul Rune', nameZh: '古尔', reqLevel: 53, weaponsEn: '20% Bonus to Attack Rating', weaponsZh: '+20% 准确率加成', armorEn: '+5% to Maximum Poison Resist', armorZh: '+5% 最大抗毒', helmsEn: '+5% to Maximum Poison Resist', helmsZh: '+5% 最大抗毒', shieldsEn: '+5% to Maximum Poison Resist', shieldsZh: '+5% 最大抗毒', }, { code: 'r26', num: 26, letter: 'Vex', nameEn: 'Vex Rune', nameZh: '伐克斯', reqLevel: 55, weaponsEn: '7% Mana Stolen Per Hit', weaponsZh: '每次命中偷取 7% 法力', armorEn: '+5% to Maximum Fire Resist', armorZh: '+5% 最大抗火', helmsEn: '+5% to Maximum Fire Resist', helmsZh: '+5% 最大抗火', shieldsEn: '+5% to Maximum Fire Resist', shieldsZh: '+5% 最大抗火', }, { code: 'r27', num: 27, letter: 'Ohm', nameEn: 'Ohm Rune', nameZh: '欧姆', reqLevel: 57, weaponsEn: '+50% Enhanced Damage', weaponsZh: '+50% 增强伤害', armorEn: '+5% to Maximum Cold Resist', armorZh: '+5% 最大抗寒', helmsEn: '+5% to Maximum Cold Resist', helmsZh: '+5% 最大抗寒', shieldsEn: '+5% to Maximum Cold Resist', shieldsZh: '+5% 最大抗寒', }, { code: 'r28', num: 28, letter: 'Lo', nameEn: 'Lo Rune', nameZh: '罗', reqLevel: 59, weaponsEn: '20% Deadly Strike', weaponsZh: '20% 致命打击', armorEn: '+5% to Maximum Lightning Resist', armorZh: '+5% 最大抗电', helmsEn: '+5% to Maximum Lightning Resist', helmsZh: '+5% 最大抗电', shieldsEn: '+5% to Maximum Lightning Resist', shieldsZh: '+5% 最大抗电', }, { code: 'r29', num: 29, letter: 'Sur', nameEn: 'Sur Rune', nameZh: '瑟', reqLevel: 61, weaponsEn: 'Hit Blinds Target', weaponsZh: '致盲目标', armorEn: 'Increase Maximum Mana 5%', armorZh: '提升法力上限 5%', helmsEn: 'Increase Maximum Mana 5%', helmsZh: '提升法力上限 5%', shieldsEn: '+50 to Mana', shieldsZh: '+50 法力', }, { code: 'r30', num: 30, letter: 'Ber', nameEn: 'Ber Rune', nameZh: '贝', reqLevel: 63, weaponsEn: '20% Chance of Crushing Blow', weaponsZh: '20% 几率造成压碎打击', armorEn: 'Damage Reduced by 8%', armorZh: '伤害减少 8%', helmsEn: 'Damage Reduced by 8%', helmsZh: '伤害减少 8%', shieldsEn: 'Damage Reduced by 8%', shieldsZh: '伤害减少 8%', }, { code: 'r31', num: 31, letter: 'Jah', nameEn: 'Jah Rune', nameZh: '乔', reqLevel: 65, weaponsEn: "Ignore Target's Defense", weaponsZh: '无视目标防御', armorEn: 'Increase Maximum Life 5%', armorZh: '提升生命上限 5%', helmsEn: 'Increase Maximum Life 5%', helmsZh: '提升生命上限 5%', shieldsEn: '+50 to Life', shieldsZh: '+50 生命', }, { code: 'r32', num: 32, letter: 'Cham', nameEn: 'Cham Rune', nameZh: '查姆', reqLevel: 67, weaponsEn: 'Freeze Target +3', weaponsZh: '冻结目标 +3', armorEn: 'Cannot be Frozen', armorZh: '无法冻结', helmsEn: 'Cannot be Frozen', helmsZh: '无法冻结', shieldsEn: 'Cannot be Frozen', shieldsZh: '无法冻结', }, { code: 'r33', num: 33, letter: 'Zod', nameEn: 'Zod Rune', nameZh: '萨德', reqLevel: 69, weaponsEn: 'Indestructible', weaponsZh: '无法破坏', armorEn: 'Indestructible', armorZh: '无法破坏', helmsEn: 'Indestructible', helmsZh: '无法破坏', shieldsEn: 'Indestructible', shieldsZh: '无法破坏', }, ] const content = `/** * Canonical 1.13c Gems & Runes Data Table and Sockets Specification. * * Gold standard reference: * - 1.13c MPQ data\\\\global\\\\excel\\\\Gems.txt * - 1.13c MPQ data\\\\global\\\\excel\\\\Misc.txt (levelreq) * - 1.13c MPQ data\\\\local\\\\lng\\\\eng\\\\patchstring.tbl * * Tooltip structure: * - Title: Item Name (White for Gems, Orange for Runes) * - Subtitle / Instruction: "Can be Inserted into Socketed Items" ("可镶嵌进有凹槽的装备") * - Slot Lines (White): * Weapons: * Armor: * Helms: * Shields: * - Bottom Line (Red): "Required Level: " ("需要等级: ") */ export interface SocketableSlotInfo { readonly weaponsEn: string readonly weaponsZh: string readonly armorEn: string readonly armorZh: string readonly helmsEn: string readonly helmsZh: string readonly shieldsEn: string readonly shieldsZh: string } export interface GemInfo extends SocketableSlotInfo { readonly code: string readonly nameEn: string readonly nameZh: string readonly gemType: 'amethyst' | 'topaz' | 'sapphire' | 'emerald' | 'ruby' | 'diamond' | 'skull' readonly tier: number readonly reqLevel: number } export interface RuneInfo extends SocketableSlotInfo { readonly code: string readonly num: number readonly letter: string readonly nameEn: string readonly nameZh: string readonly reqLevel: number /** Legacy compatibility alias for weaponsEn */ readonly weapon?: string /** Legacy compatibility alias for armorEn */ readonly armor?: string } export const GEM_INFO: Record = ${JSON.stringify( Object.fromEntries(GEM_ENTRIES.map(g => [g.code, g])), null, 2 )} export const RUNE_INFO: Record = ${JSON.stringify( Object.fromEntries(RUNE_ENTRIES.map(r => [r.code, { ...r, weapon: r.weaponsEn, armor: r.armorEn }])), null, 2 )} /** * Checks whether an item code is a valid 1.13c Gem. */ export function isGemCode(code: string | undefined): boolean { if (!code) return false return Boolean(GEM_INFO[code.trim().toLowerCase()]) } /** * Checks whether an item code is a valid 1.13c Rune (r01..r33). */ export function isRuneCode(code: string | undefined): boolean { if (!code) return false return Boolean(RUNE_INFO[code.trim().toLowerCase()]) } /** * Returns canonical socketable information for any gem or rune code. */ export function getSocketableInfo(code: string | undefined): (GemInfo | RuneInfo) | undefined { if (!code) return undefined const c = code.trim().toLowerCase() return GEM_INFO[c] || RUNE_INFO[c] } ` fs.writeFileSync('/usr/local/google/home/taodao/d2w-wg1-main/src/game/gems-data.ts', content, 'utf-8') console.log('Successfully generated src/game/gems-data.ts!')