{"id":52,"date":"2025-11-06T14:57:21","date_gmt":"2025-11-06T14:57:21","guid":{"rendered":"https:\/\/gamingwithdaopa.ellatha.com\/legendofymir\/?p=52"},"modified":"2025-11-25T19:08:20","modified_gmt":"2025-11-25T19:08:20","slug":"crafting-calculator","status":"publish","type":"post","link":"https:\/\/gamingwithdaopa.ellatha.com\/legendofymir\/crafting-calculator\/","title":{"rendered":"Legend of Ymir Crafting Calculator"},"content":{"rendered":"\r\n<div class=\"craft-calculator\">\r\n  <style>\r\n    :root {\r\n      --primary-bg: #121212;\r\n      --secondary-bg: #1e1e1e;\r\n      --accent: #3a82f7;\r\n      --accent-hover: #5699ff;\r\n      --border: rgba(255,255,255,0.1);\r\n      --text: #eaeaea;\r\n      --text-dim: #b5b5b5;\r\n      --transition: all 0.3s ease;\r\n      --radius: 12px;\r\n      --shadow: 0 4px 20px rgba(0,0,0,0.4);\r\n    }\r\n    body {\r\n      background: var(--primary-bg);\r\n      color: var(--text);\r\n      font-family: \"Segoe UI\", Roboto, sans-serif;\r\n    }\r\n    .craft-calculator {\r\n      max-width: 1200px;\r\n      margin: 2rem auto;\r\n      padding: 2rem;\r\n      background: var(--secondary-bg);\r\n      border-radius: var(--radius);\r\n      box-shadow: var(--shadow);\r\n    }\r\n    .intro-panel {\r\n      background: #1b1b1b;\r\n      border-radius: var(--radius);\r\n      padding: 2rem;\r\n      border: 1px solid var(--border);\r\n      margin-bottom: 2rem;\r\n      box-shadow: var(--shadow);\r\n      text-align: center;\r\n    }\r\n    .intro-panel h2 {\r\n      color: var(--text);\r\n      font-size: 2.2rem;\r\n      margin-bottom: 1rem;\r\n    }\r\n    .intro-panel p {\r\n      font-size: 1.1rem;\r\n      margin-bottom: 1rem;\r\n      opacity: 0.95;\r\n    }\r\n    .support-callout {\r\n      margin-top: 1.5rem;\r\n      padding: 1.5rem;\r\n      background: rgba(0,255,0,0.1);\r\n      border-radius: var(--radius);\r\n      border-left: 4px solid #00ff00;\r\n    }\r\n    .support-callout p {\r\n      margin-bottom: 0.5rem;\r\n    }\r\n    .support-callout a {\r\n      color: var(--accent);\r\n      text-decoration: none;\r\n    }\r\n    .support-callout a:hover {\r\n      color: var(--accent-hover);\r\n    }\r\n    .header {\r\n      display: flex;\r\n      flex-wrap: wrap;\r\n      gap: 1rem;\r\n      align-items: center;\r\n      justify-content: space-between;\r\n      margin-bottom: 2rem;\r\n    }\r\n    .search-wrap {\r\n      position: relative;\r\n      flex: 1;\r\n      min-width: 250px;\r\n    }\r\n    .search-wrap input {\r\n      width: 100%;\r\n      padding: 0.8rem 2.5rem;\r\n      background: #2a2a2a;\r\n      border: 1px solid var(--border);\r\n      border-radius: var(--radius);\r\n      color: var(--text);\r\n      font-size: 1rem;\r\n    }\r\n    .search-wrap .fa-search {\r\n      position: absolute;\r\n      left: 10px;\r\n      top: 50%;\r\n      transform: translateY(-50%);\r\n      color: var(--text-dim);\r\n    }\r\n    #suggestions {\r\n      position: absolute;\r\n      top: 100%;\r\n      left: 0;\r\n      right: 0;\r\n      background: #222;\r\n      border-radius: 0 0 var(--radius) var(--radius);\r\n      border: 1px solid var(--border);\r\n      border-top: none;\r\n      z-index: 10;\r\n      max-height: 250px;\r\n      overflow-y: auto;\r\n      display: none;\r\n    }\r\n    .search-wrap.active #suggestions {\r\n      display: block;\r\n    }\r\n    .suggestion {\r\n      padding: 0.8rem 1rem;\r\n      cursor: pointer;\r\n      border-bottom: 1px solid rgba(255,255,255,0.05);\r\n      transition: var(--transition);\r\n      display: flex;\r\n      align-items: center;\r\n      gap: 0.5rem;\r\n      color: var(--text);\r\n    }\r\n    .suggestion:hover,\r\n    .suggestion.focused {\r\n      background: #333;\r\n    }\r\n    .multi-wrap {\r\n      display: flex;\r\n      align-items: center;\r\n      gap: 0.5rem;\r\n      background: #2a2a2a;\r\n      padding: 0.8rem 1rem;\r\n      border-radius: var(--radius);\r\n      border: 1px solid var(--border);\r\n    }\r\n    #multiplier {\r\n      width: 70px;\r\n      background: transparent;\r\n      border: 1px solid var(--border);\r\n      border-radius: 6px;\r\n      color: var(--text);\r\n      text-align: center;\r\n    }\r\n    #multiplier-slider {\r\n      flex: 1;\r\n    }\r\n    .categories-panel {\r\n      background: #1b1b1b;\r\n      border-radius: var(--radius);\r\n      padding: 1.5rem;\r\n      border: 1px solid var(--border);\r\n      margin-bottom: 2rem;\r\n      box-shadow: var(--shadow);\r\n    }\r\n    .category {\r\n      margin-bottom: 1rem;\r\n    }\r\n    .category-header {\r\n      background: #222;\r\n      padding: 0.8rem 1rem;\r\n      border-radius: var(--radius);\r\n      cursor: pointer;\r\n      display: grid;\r\n      grid-template-columns: auto 1fr auto;\r\n      align-items: center;\r\n      transition: var(--transition);\r\n      gap: 0.5rem;\r\n    }\r\n    .category-header:hover {\r\n      background: #2d2d2d;\r\n    }\r\n    .category-header .header-left {\r\n      display: flex;\r\n      align-items: center;\r\n      gap: 0.3rem;\r\n    }\r\n    .category-types {\r\n      max-height: 0;\r\n      overflow: hidden;\r\n      transition: var(--transition);\r\n      margin-left: 0.5rem;\r\n    }\r\n    .category.open .category-types {\r\n      max-height: none;\r\n      margin-top: 0.5rem;\r\n    }\r\n    .type {\r\n      background: #252525;\r\n      padding: 0.6rem 1rem;\r\n      margin-bottom: 0.5rem;\r\n      border-radius: var(--radius);\r\n      display: grid;\r\n      grid-template-columns: auto 1fr auto;\r\n      align-items: center;\r\n      cursor: pointer;\r\n      transition: var(--transition);\r\n      gap: 0.5rem;\r\n    }\r\n    .type:hover {\r\n      background: #2f2f2f;\r\n    }\r\n    .type .header-left {\r\n      display: flex;\r\n      align-items: center;\r\n      gap: 0.3rem;\r\n    }\r\n    .type-items {\r\n      max-height: 0;\r\n      overflow: hidden;\r\n      transition: var(--transition);\r\n      margin-left: 0.5rem;\r\n    }\r\n    .type.open .type-items {\r\n      max-height: none;\r\n      margin-top: 0.5rem;\r\n    }\r\n    .item {\r\n      padding: 0.5rem 0.8rem;\r\n      margin-bottom: 0.3rem;\r\n      border-radius: 8px;\r\n      cursor: pointer;\r\n      transition: var(--transition);\r\n      color: var(--text);\r\n      background: rgba(255,255,255,0.05);\r\n      white-space: nowrap;\r\n    }\r\n    .item:hover {\r\n      background: rgba(255,255,255,0.1);\r\n    }\r\n    .grade-common {\r\n      background: rgba(200,200,200,0.1);\r\n    }\r\n    .grade-uncommon {\r\n      background: rgba(0,255,0,0.1);\r\n    }\r\n    .grade-rare {\r\n      background: rgba(0,0,255,0.1);\r\n    }\r\n    .grade-epic {\r\n      background: rgba(255,0,0,0.1);\r\n    }\r\n    .panel {\r\n      background: #1b1b1b;\r\n      padding: 1.5rem;\r\n      border-radius: var(--radius);\r\n      border: 1px solid var(--border);\r\n      margin-bottom: 2rem;\r\n      box-shadow: var(--shadow);\r\n    }\r\n    .panel h2 {\r\n      margin-bottom: 1rem;\r\n    }\r\n    .tree ul {\r\n      list-style: none;\r\n      padding-left: 1rem;\r\n    }\r\n    .tree li {\r\n      margin: 0.4rem 0;\r\n      padding: 0.6rem 1rem;\r\n      border-radius: var(--radius);\r\n      background: #222;\r\n      cursor: pointer;\r\n      transition: var(--transition);\r\n      position: relative;\r\n    }\r\n    .tree li:hover {\r\n      background: #2d2d2d;\r\n    }\r\n    .tree li ul {\r\n      margin-top: 0.5rem;\r\n      padding-left: 1.2rem;\r\n      border-left: 2px solid rgba(255,255,255,0.05);\r\n    }\r\n    .tree .item-header {\r\n      display: flex;\r\n      align-items: center;\r\n      gap: 0.5rem;\r\n    }\r\n    .tree .item-header .name-qty {\r\n      flex: 1;\r\n    }\r\n    .tree .item-header .costs {\r\n      font-size: 0.8rem;\r\n      color: var(--text-dim);\r\n      white-space: nowrap;\r\n    }\r\n    .totals-list {\r\n      list-style: none;\r\n      padding: 0;\r\n      margin-top: 1rem;\r\n    }\r\n    .totals-list li {\r\n      display: flex;\r\n      justify-content: space-between;\r\n      padding: 0.4rem 0;\r\n      border-bottom: 1px solid rgba(255,255,255,0.05);\r\n    }\r\n    .totals-list .cost-header {\r\n      display: flex;\r\n      align-items: center;\r\n      gap: 0.5rem;\r\n    }\r\n    .totals-list .chart-toggle-icon {\r\n      cursor: pointer;\r\n      font-size: 1rem;\r\n      color: var(--text-dim);\r\n      transition: var(--transition);\r\n    }\r\n    .totals-list .chart-toggle-icon:hover {\r\n      color: var(--accent-hover);\r\n    }\r\n    .totals-list .chart-toggle-icon.active {\r\n      color: var(--accent);\r\n    }\r\n    .chart-container {\r\n      width: 400px;\r\n      height: 300px;\r\n      margin: 0 auto 1rem;\r\n    }\r\n    canvas {\r\n      max-width: 100%;\r\n      height: auto;\r\n    }\r\n    ::-webkit-scrollbar {\r\n      width: 8px;\r\n    }\r\n    ::-webkit-scrollbar-thumb {\r\n      background: #444;\r\n      border-radius: 4px;\r\n    }\r\n    @media (max-width: 768px) {\r\n      .craft-calculator {\r\n        padding: 1rem;\r\n      }\r\n      .intro-panel {\r\n        padding: 1.5rem;\r\n      }\r\n      .chart-container {\r\n        width: 100%;\r\n        height: 250px;\r\n      }\r\n    }\r\n  <\/style>\r\n  <div class=\"intro-panel\">\r\n    <h2><i class=\"fa fa-anvil\"><\/i> Legend of Ymir Crafting\/Recipes Calculator<\/h2>\r\n    <p>Welcome to the Legend of Ymir Crafting Calculator! This interactive tool is designed to help players of the MMORPG Legend of Ymir efficiently plan their crafting endeavors. Select any item from the game&#8217;s recipes to view a detailed crafting tree, breaking down all required ingredients recursively down to base materials. Adjust quantities with the multiplier slider to scale calculations, see per-step costs in the tree, and get totals for currencies like gWEMIX, Amber, and Silver. Whether you&#8217;re crafting weapons, armor, or materials, this calculator provides clear visualizations, including a cost breakdown chart, to optimize your in-game resources and time.<\/p>\r\n    <div class=\"support-callout\">\r\n      <p>\ud83c\udf31 <strong>Seeds = Support!<\/strong> Buy in-game items in <em>Legend of Ymir<\/em> \u2192 earn <strong>Seeds<\/strong> \u2192 support me at: <a href=\"https:\/\/gamingwithdaopa.ellatha.com\/ext\/legend-of-ymir-support\">https:\/\/sss.wemixplay.com\/en\/lygl\/supporter<\/a><\/p>\r\n      <p>Use Creator Code: daopa#ly3166 to send Seeds! Every purchase helps! \ud83d\udc9a<\/p>\r\n    <\/div>\r\n  <\/div>\r\n  <div class=\"header\">\r\n    <div class=\"search-wrap\" id=\"searchWrap\">\r\n      <i class=\"fa fa-search search-icon\"><\/i>\r\n      <input type=\"text\" id=\"search\" placeholder=\"Search for Hammer, Helmet, or any item...\" \/>\r\n      <ul id=\"suggestions\"><\/ul>\r\n    <\/div>\r\n    <div class=\"multi-wrap\">\r\n      <label style=\"font-size:0.9rem; opacity:0.9;\">Quantity:<\/label>\r\n      <input type=\"range\" id=\"multiplier-slider\" min=\"1\" max=\"99\" value=\"1\">\r\n      <input type=\"number\" id=\"multiplier\" min=\"1\" max=\"999\" value=\"1\">\r\n    <\/div>\r\n  <\/div>\r\n  <div class=\"categories-panel\">\r\n    <h2><i class=\"fa fa-list\"><\/i> Recipes by Category<\/h2>\r\n    <div id=\"categories-list\"><\/div>\r\n  <\/div>\r\n  <div class=\"main-content\">\r\n    <div class=\"panel\" id=\"crafting-tree-panel\">\r\n      <h2><i class=\"fa fa-sitemap\"><\/i> Crafting Tree<\/h2>\r\n      <div class=\"tree\" id=\"recipe-tree\">\r\n        <div class=\"no-selection\">\r\n          <i class=\"fa fa-magic\"><\/i>\r\n          <p>Select an item from the categories or search to view its crafting tree<\/p>\r\n        <\/div>\r\n      <\/div>\r\n    <\/div>\r\n    <div class=\"panel\">\r\n      <h2><i class=\"fa fa-calculator\"><\/i> Total Requirements<\/h2>\r\n      <div class=\"chart-container\">\r\n        <canvas id=\"cost-chart\"><\/canvas>\r\n      <\/div>\r\n      <ul class=\"totals-list\" id=\"totals-list\">\r\n        <li class=\"no-selection\"><i class=\"fa fa-chart-pie\"><\/i> Select an item to calculate totals<\/li>\r\n      <\/ul>\r\n    <\/div>\r\n  <\/div>\r\n  <script src=\"https:\/\/gamingwithdaopa.ellatha.com\/media\/evefrontier\/chart.js\"><\/script>\r\n  <script>\r\n    let items = {};\r\n    let itemNames = [];\r\n    let categories = {};\r\n    let currentItem = null;\r\n    let multiplier = 1;\r\n    let suggestionIndex = -1;\r\n    let chart = null;\r\n    let currentChartView = 'cumulative'; \/\/ Default to full build\r\n    const catIcons = {\r\n      'Weapon': 'fa-crosshairs',\r\n      'Secondary Weapon': 'fa-crosshairs',\r\n      'Utility Equipment': 'fa-tools',\r\n      'Armor': 'fa-shield-alt',\r\n      'Accessory': 'fa-gem',\r\n      'Horn': 'fa-music',\r\n      'Material': 'fa-cubes'\r\n    };\r\n    const grades = {\r\n      common: ['Battered', 'Apprentice\\'s', 'Adept\\'s','C Soul'],\r\n      uncommon: ['Intricate', 'High Quality', 'Artisan\\'s','Middle','UC Soul','Gemstone'],\r\n      rare: ['Galar\\'s Jormun','Jormun', 'Regin', 'Ivaldi','Higher','R Soul','Crystal'],\r\n      epic: ['Wielant', 'Agelmund', 'Fenrir','Superior','E Soul','Twilight']\r\n    };\r\n    const gradeColors = {\r\n      common: 'grade-common',\r\n      uncommon: 'grade-uncommon',\r\n      rare: 'grade-rare',\r\n      epic: 'grade-epic'\r\n    };\r\n    const gradeOrder = {\r\n      common: 0,\r\n      uncommon: 1,\r\n      rare: 2,\r\n      epic: 3\r\n    };\r\n    function getGradeAndSuborder(name) {\r\n      for (let [grade, prefixes] of Object.entries(grades)) {\r\n        for (let i = 0; i < prefixes.length; i++) {\r\n          const prefix = prefixes[i];\r\n          if (name.startsWith(prefix + ' ') || name.startsWith(prefix + \"'s \") || name.endsWith(prefix) || name === prefix) {\r\n            return [gradeOrder[grade], i];\r\n          }\r\n        }\r\n      }\r\n      return [4, 0]; \/\/ Default for others\r\n    }\r\n    \/\/ Fetch data\r\n    fetch('https:\/\/gamingwithdaopa.ellatha.com\/media\/legendofymir\/daopa-crafting-recipes-ymir.json')\r\n      .then(response => response.json())\r\n      .then(data => {\r\n        items = data.items;\r\n        itemNames = Object.keys(items).sort();\r\n        organizeByCategory();\r\n        init();\r\n      });\r\n    function organizeByCategory() {\r\n      Object.entries(items).forEach(([name, item]) => {\r\n        if (!categories[item.category]) {\r\n          categories[item.category] = {};\r\n        }\r\n        if (!categories[item.category][item.type || 'Base']) {\r\n          categories[item.category][item.type || 'Base'] = [];\r\n        }\r\n        categories[item.category][item.type || 'Base'].push(name);\r\n      });\r\n      buildCategoriesList();\r\n    }\r\n    function buildCategoriesList() {\r\n      const list = document.getElementById('categories-list');\r\n      Object.entries(categories).forEach(([cat, types]) => {\r\n        const catDiv = document.createElement('div');\r\n        catDiv.className = 'category';\r\n        catDiv.innerHTML = `\r\n          <div class=\"category-header\">\r\n            <div class=\"header-left\">\r\n              <i class=\"fa ${catIcons[cat] || 'fa-folder'}\"><\/i>\r\n              <span>${cat}<\/span>\r\n            <\/div>\r\n            <i class=\"fa fa-chevron-right expand-icon\"><\/i>\r\n          <\/div>\r\n          <div class=\"category-types\"><\/div>\r\n        `;\r\n        list.appendChild(catDiv);\r\n        const typesDiv = catDiv.querySelector('.category-types');\r\n        Object.entries(types).forEach(([type, itemList]) => {\r\n          itemList.sort((a, b) => {\r\n            const [gradeA, subA] = getGradeAndSuborder(a);\r\n            const [gradeB, subB] = getGradeAndSuborder(b);\r\n            if (gradeA !== gradeB) return gradeA - gradeB;\r\n            if (subA !== subB) return subA - subB;\r\n            return a.localeCompare(b);\r\n          });\r\n          const typeDiv = document.createElement('div');\r\n          typeDiv.className = 'type';\r\n          typeDiv.innerHTML = `\r\n            <div class=\"header-left\">\r\n              <i class=\"fa fa-tag\"><\/i>\r\n              <span>${type}<\/span>\r\n            <\/div>\r\n            <i class=\"fa fa-chevron-right expand-icon\"><\/i>\r\n          `;\r\n          const itemsUl = document.createElement('ul');\r\n          itemsUl.className = 'type-items';\r\n          itemList.forEach(name => {\r\n            const li = document.createElement('li');\r\n            li.className = 'item';\r\n            const [grade] = getGradeAndSuborder(name);\r\n            if (grade < 4) {\r\n              li.classList.add(gradeColors[Object.keys(gradeOrder)[grade]]);\r\n            }\r\n            li.textContent = name;\r\n            li.addEventListener('click', () => selectItem(name));\r\n            itemsUl.appendChild(li);\r\n          });\r\n          typeDiv.appendChild(itemsUl);\r\n          typesDiv.appendChild(typeDiv);\r\n          typeDiv.addEventListener('click', (e) => {\r\n            if (e.target.closest('.item')) return;\r\n            typeDiv.classList.toggle('open');\r\n          });\r\n        });\r\n        catDiv.querySelector('.category-header').addEventListener('click', () => {\r\n          catDiv.classList.toggle('open');\r\n        });\r\n      });\r\n    }\r\n    function init() {\r\n      setupEventListeners();\r\n      updateSuggestions();\r\n    }\r\n    function setupEventListeners() {\r\n      const search = document.getElementById('search');\r\n      const searchWrap = document.getElementById('searchWrap');\r\n      const multiplierNum = document.getElementById('multiplier');\r\n      const multiplierSlider = document.getElementById('multiplier-slider');\r\n      search.addEventListener('input', debounce(updateSuggestions, 250));\r\n      search.addEventListener('keydown', handleSearchKeydown);\r\n      const debouncedUpdate = debounce(updateDisplay, 300);\r\n      multiplierNum.addEventListener('input', (e) => {\r\n        multiplier = parseInt(e.target.value) || 1;\r\n        multiplierSlider.value = multiplier;\r\n        if (currentItem) debouncedUpdate();\r\n      });\r\n      multiplierSlider.addEventListener('input', (e) => {\r\n        multiplier = parseInt(e.target.value) || 1;\r\n        multiplierNum.value = multiplier;\r\n        if (currentItem) debouncedUpdate();\r\n      });\r\n      searchWrap.addEventListener('focusout', (e) => {\r\n        if (!searchWrap.contains(e.relatedTarget)) {\r\n          setTimeout(() => {\r\n            searchWrap.classList.remove('active');\r\n          }, 150);\r\n        }\r\n      });\r\n    }\r\n    function debounce(func, wait) {\r\n      let timeout;\r\n      return function(...args) {\r\n        clearTimeout(timeout);\r\n        timeout = setTimeout(() => func(...args), wait);\r\n      };\r\n    }\r\n    function updateSuggestions() {\r\n      const term = document.getElementById('search').value.toLowerCase();\r\n      const suggestions = document.getElementById('suggestions');\r\n      suggestions.innerHTML = '';\r\n      if (!term) {\r\n        document.getElementById('searchWrap').classList.remove('active');\r\n        return;\r\n      }\r\n      const matches = itemNames.filter(name => name.toLowerCase().includes(term)).slice(0, 15);\r\n      matches.forEach((name, index) => {\r\n        const li = document.createElement('li');\r\n        li.className = 'suggestion';\r\n        li.dataset.index = index;\r\n        li.innerHTML = `\r\n          <i class=\"fa ${catIcons[items[name].category] || 'fa-cube'}\"><\/i>\r\n          <span>${name}<\/span>\r\n        `;\r\n        li.addEventListener('click', () => selectItem(name));\r\n        li.addEventListener('mouseenter', () => setSuggestionFocus(index));\r\n        suggestions.appendChild(li);\r\n      });\r\n      suggestionIndex = -1;\r\n      document.getElementById('searchWrap').classList.toggle('active', matches.length > 0);\r\n    }\r\n    function handleSearchKeydown(e) {\r\n      const suggestions = Array.from(document.querySelectorAll('#suggestions .suggestion'));\r\n      if (!suggestions.length) return;\r\n      switch (e.key) {\r\n        case 'ArrowDown':\r\n          e.preventDefault();\r\n          suggestionIndex = Math.min(suggestionIndex + 1, suggestions.length - 1);\r\n          setSuggestionFocus(suggestionIndex);\r\n          break;\r\n        case 'ArrowUp':\r\n          e.preventDefault();\r\n          suggestionIndex = Math.max(suggestionIndex - 1, -1);\r\n          setSuggestionFocus(suggestionIndex);\r\n          break;\r\n        case 'Enter':\r\n          e.preventDefault();\r\n          if (suggestionIndex >= 0) {\r\n            const name = suggestions[suggestionIndex].querySelector('span').textContent;\r\n            selectItem(name);\r\n          }\r\n          break;\r\n        case 'Escape':\r\n          document.getElementById('search').blur();\r\n          break;\r\n      }\r\n    }\r\n    function setSuggestionFocus(index) {\r\n      document.querySelectorAll('#suggestions .suggestion').forEach((sug, i) => {\r\n        sug.classList.toggle('focused', i === index);\r\n      });\r\n      if (index >= 0) {\r\n        document.querySelectorAll('#suggestions .suggestion')[index].scrollIntoView({ block: 'nearest' });\r\n      }\r\n    }\r\n    function selectItem(name) {\r\n      currentItem = name;\r\n      document.getElementById('search').value = name;\r\n      document.getElementById('searchWrap').classList.remove('active');\r\n      updateDisplay();\r\n      \/\/ Scroll to crafting tree panel after update\r\n      setTimeout(() => {\r\n        const treePanel = document.getElementById('crafting-tree-panel');\r\n        if (treePanel) {\r\n          treePanel.scrollIntoView({ behavior: 'smooth', block: 'start' });\r\n        }\r\n      }, 300); \/\/ Delay to allow rendering\r\n    }\r\n    function updateDisplay() {\r\n      if (!currentItem) return;\r\n      const tree = document.getElementById('recipe-tree');\r\n      tree.innerHTML = buildTree(currentItem, multiplier);\r\n      tree.querySelectorAll('.item-header').forEach(header => {\r\n        header.addEventListener('click', (e) => {\r\n          e.stopPropagation();\r\n          header.closest('li').classList.toggle('open');\r\n        });\r\n      });\r\n      const totals = computeTotals(currentItem, multiplier);\r\n      const directCosts = getDirectCosts(currentItem, multiplier);\r\n      updateTotalsList(totals, directCosts);\r\n      updateChart(currentChartView === 'direct' ? directCosts : totals.costs);\r\n    }\r\n    function buildTree(itemName, qty) {\r\n      const item = items[itemName];\r\n      let costsHtml = '';\r\n      if (item && item.costs) {\r\n        const gWEMIX = (item.costs.gWEMIX || 0) * qty;\r\n        const Amber = (item.costs.Amber || 0) * qty;\r\n        const Silver = (item.costs.Silver || 0) * qty;\r\n        costsHtml = `<span class=\"costs\">(gWEMIX: ${gWEMIX}, Amber: ${Amber}, Silver: ${Silver})<\/span>`;\r\n      } else {\r\n        costsHtml = `<span class=\"costs\">(Base Material)<\/span>`;\r\n      }\r\n      let html = `<li>\r\n        <div class=\"item-header\">\r\n          <i class=\"fa ${item ? catIcons[item.category] || 'fa-cube' : 'fa-cube'}\"><\/i>\r\n          <span class=\"name-qty\">${itemName} x${qty}<\/span>\r\n          ${costsHtml}\r\n          ${item && item.ingredients.length ? '<i class=\"fa fa-chevron-right expand-icon\"><\/i>' : ''}\r\n        <\/div>`;\r\n      if (item && item.ingredients.length) {\r\n        html += '<ul>';\r\n        item.ingredients.forEach(ing => {\r\n          html += buildTree(ing.name, ing.amount * qty);\r\n        });\r\n        html += '<\/ul>';\r\n      }\r\n      html += '<\/li>';\r\n      return html;\r\n    }\r\n    function getDirectCosts(itemName, qty) {\r\n      const item = items[itemName];\r\n      if (!item) {\r\n        return { gWEMIX: 0, Amber: 0, Silver: 0 };\r\n      }\r\n      return {\r\n        gWEMIX: (item.costs.gWEMIX || 0) * qty,\r\n        Amber: (item.costs.Amber || 0) * qty,\r\n        Silver: (item.costs.Silver || 0) * qty\r\n      };\r\n    }\r\n    function computeTotals(itemName, qty, memo = {}) {\r\n      if (memo[itemName]) {\r\n        const cloned = { ingredients: { ...memo[itemName].ingredients }, costs: { ...memo[itemName].costs } };\r\n        for (let key in cloned.ingredients) cloned.ingredients[key] *= qty;\r\n        for (let key in cloned.costs) cloned.costs[key] *= qty;\r\n        return cloned;\r\n      }\r\n      const item = items[itemName];\r\n      if (!item) {\r\n        return { ingredients: { [itemName]: qty }, costs: { gWEMIX: 0, Amber: 0, Silver: 0 } };\r\n      }\r\n      let totals = { ingredients: {}, costs: { gWEMIX: (item.costs.gWEMIX || 0) * qty, Amber: (item.costs.Amber || 0) * qty, Silver: (item.costs.Silver || 0) * qty } };\r\n      item.ingredients.forEach(ing => {\r\n        const sub = computeTotals(ing.name, ing.amount * qty, memo);\r\n        for (let mat in sub.ingredients) {\r\n          totals.ingredients[mat] = (totals.ingredients[mat] || 0) + sub.ingredients[mat];\r\n        }\r\n        for (let cur in sub.costs) {\r\n          totals.costs[cur] += sub.costs[cur];\r\n        }\r\n      });\r\n      memo[itemName] = { ingredients: { ...totals.ingredients }, costs: { ...totals.costs } };\r\n      for (let key in memo[itemName].ingredients) memo[itemName].ingredients[key] \/= qty;\r\n      for (let key in memo[itemName].costs) memo[itemName].costs[key] \/= qty;\r\n      return totals;\r\n    }\r\n    function updateTotalsList(totals, directCosts) {\r\n      const list = document.getElementById('totals-list');\r\n      list.innerHTML = '';\r\n      \/\/ Direct Costs\r\n      const directLi = document.createElement('li');\r\n      directLi.innerHTML = `\r\n        <div class=\"cost-header\">\r\n          <span><strong>Direct Recipe Costs<\/strong><\/span>\r\n          <i class=\"fa ${currentChartView === 'direct' ? 'fa-toggle-on active' : 'fa-toggle-off'} chart-toggle-icon\" id=\"toggle-direct\"><\/i>\r\n        <\/div>\r\n        <div style=\"text-align:right;\">\r\n          <div>gWEMIX: <span class=\"count-anim\" data-target=\"${directCosts.gWEMIX}\">${directCosts.gWEMIX}<\/span><\/div>\r\n          <div>Amber: <span class=\"count-anim\" data-target=\"${directCosts.Amber}\">${directCosts.Amber}<\/span><\/div>\r\n          <div>Silver: <span class=\"count-anim\" data-target=\"${directCosts.Silver}\">${directCosts.Silver}<\/span><\/div>\r\n        <\/div>\r\n      `;\r\n      list.appendChild(directLi);\r\n      document.getElementById('toggle-direct').addEventListener('click', () => toggleChart('direct', totals, directCosts));\r\n      \/\/ Cumulative Costs\r\n      const cumulativeLi = document.createElement('li');\r\n      cumulativeLi.innerHTML = `\r\n        <div class=\"cost-header\">\r\n          <span><strong>Full Build Costs (Cumulative)<\/strong><\/span>\r\n          <i class=\"fa ${currentChartView === 'cumulative' ? 'fa-toggle-on active' : 'fa-toggle-off'} chart-toggle-icon\" id=\"toggle-cumulative\"><\/i>\r\n        <\/div>\r\n        <div style=\"text-align:right;\">\r\n          <div>gWEMIX: <span class=\"count-anim\" data-target=\"${totals.costs.gWEMIX}\">${totals.costs.gWEMIX}<\/span><\/div>\r\n          <div>Amber: <span class=\"count-anim\" data-target=\"${totals.costs.Amber}\">${totals.costs.Amber}<\/span><\/div>\r\n          <div>Silver: <span class=\"count-anim\" data-target=\"${totals.costs.Silver}\">${totals.costs.Silver}<\/span><\/div>\r\n        <\/div>\r\n      `;\r\n      list.appendChild(cumulativeLi);\r\n      document.getElementById('toggle-cumulative').addEventListener('click', () => toggleChart('cumulative', totals, directCosts));\r\n      list.querySelectorAll('.count-anim').forEach(el => animateCount(el));\r\n    }\r\n    function toggleChart(view, totals, directCosts) {\r\n      currentChartView = view;\r\n      updateChart(view === 'direct' ? directCosts : totals.costs);\r\n      \/\/ Update icons\r\n      document.getElementById('toggle-direct').className = `fa ${view === 'direct' ? 'fa-toggle-on active' : 'fa-toggle-off'} chart-toggle-icon`;\r\n      document.getElementById('toggle-cumulative').className = `fa ${view === 'cumulative' ? 'fa-toggle-on active' : 'fa-toggle-off'} chart-toggle-icon`;\r\n    }\r\n    function animateCount(el) {\r\n      const target = parseInt(el.dataset.target);\r\n      if (isNaN(target)) return;\r\n      let current = 0;\r\n      const step = target \/ 50;\r\n      const interval = setInterval(() => {\r\n        current += step;\r\n        if (current >= target) {\r\n          el.textContent = Math.floor(target).toLocaleString();\r\n          clearInterval(interval);\r\n        } else {\r\n          el.textContent = Math.floor(current).toLocaleString();\r\n        }\r\n      }, 20);\r\n    }\r\n    function updateChart(costs) {\r\n      const ctx = document.getElementById('cost-chart').getContext('2d');\r\n      if (chart) chart.destroy();\r\n      const total = costs.gWEMIX + costs.Amber + costs.Silver;\r\n      if (total === 0) {\r\n        ctx.font = '20px Arial';\r\n        ctx.fillStyle = '#b5b5b5';\r\n        ctx.fillText('No costs', 150, 150);\r\n        return;\r\n      }\r\n      chart = new Chart(ctx, {\r\n        type: 'doughnut',\r\n        data: {\r\n          labels: ['gWEMIX', 'Amber', 'Silver'],\r\n          datasets: [{\r\n            data: [costs.gWEMIX, costs.Amber, costs.Silver],\r\n            backgroundColor: ['rgba(255, 215, 0, 0.8)', 'rgba(255, 140, 0, 0.8)', 'rgba(192, 192, 192, 0.8)'],\r\n            borderColor: ['#FFD700', '#FF8C00', '#C0C0C0'],\r\n            borderWidth: 3,\r\n            hoverOffset: 10\r\n          }]\r\n        },\r\n        options: {\r\n          responsive: true,\r\n          maintainAspectRatio: false,\r\n          plugins: {\r\n            legend: { position: 'bottom', labels: { color: 'white', font: { size: 14 } } },\r\n            tooltip: { backgroundColor: 'rgba(0,0,0,0.8)', titleColor: 'white', bodyColor: 'white' }\r\n          },\r\n          animation: { animateRotate: true, duration: 1500 }\r\n        }\r\n      });\r\n    }\r\n  <\/script>\r\n<\/div>\r\n","protected":false},"excerpt":{"rendered":"<p>Legend of Ymir Crafting\/Recipes Calculator Welcome to the Legend of Ymir Crafting Calculator! This interactive tool is designed to help players of the MMORPG Legend of Ymir efficiently plan their crafting endeavors. Select any item from the game&#8217;s recipes to view a detailed crafting tree, breaking down all required ingredients recursively down to base materials. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":84,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2,6],"tags":[],"class_list":["post-52","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-guides","category-tools"],"yoast_head":"<!-- Meta Tags -->\r\n<title>Legend of Ymir Crafting Calculator<\/title>\r\n<meta name=\"description\" content=\"Legend of Ymir Crafting\/Recipes Calculator Welcome to the Legend of Ymir Crafting Calculator! This interactive tool is designed to help players of the\" \/>\r\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\r\n<link rel=\"canonical\" href=\"https:\/\/gamingwithdaopa.ellatha.com\/legendofymir\/crafting-calculator\/\" \/>\r\n<meta property=\"og:locale\" content=\"en_US\" \/>\r\n<meta property=\"og:type\" content=\"article\" \/>\r\n<meta property=\"og:title\" content=\"Legend of Ymir Crafting Calculator\" \/>\r\n<meta property=\"og:description\" content=\"Legend of Ymir Crafting\/Recipes Calculator Welcome to the Legend of Ymir Crafting Calculator! This interactive tool is designed to help players of the\" \/>\r\n<meta property=\"og:url\" content=\"https:\/\/gamingwithdaopa.ellatha.com\/legendofymir\/crafting-calculator\/\" \/>\r\n<meta property=\"og:site_name\" content=\"Legend of Ymir\" \/>\r\n<meta property=\"article:publisher\" content=\"facebook.com\/gamingwithdaopa\/\" \/>\r\n<meta property=\"article:author\" content=\"facebook.com\/gamingwithdaopa\/\" \/>\r\n<meta property=\"article:published_time\" content=\"2025-11-06T14:57:21+00:00\" \/>\r\n<meta property=\"article:modified_time\" content=\"2025-11-25T19:08:20+00:00\" \/>\r\n<meta property=\"og:image\" content=\"https:\/\/gamingwithdaopa.ellatha.com\/legendofymir\/wp-content\/uploads\/sites\/41\/2025\/11\/legend-of-ymir-crafting-calculator.jpg\" \/>\r\n\t<meta property=\"og:image:width\" content=\"400\" \/>\r\n\t<meta property=\"og:image:height\" content=\"263\" \/>\r\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\r\n<meta name=\"author\" content=\"daopa\" \/>\r\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\r\n<meta name=\"twitter:creator\" content=\"@gamingwithdaopa\" \/>\r\n<meta name=\"twitter:site\" content=\"@gamingwithdaopa\" \/>\r\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"daopa\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"1 minute\" \/>\r\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/gamingwithdaopa.ellatha.com\/legendofymir\/crafting-calculator\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/gamingwithdaopa.ellatha.com\/legendofymir\/crafting-calculator\/\"},\"author\":{\"name\":\"daopa\",\"@id\":\"https:\/\/gamingwithdaopa.ellatha.com\/legendofymir\/#\/schema\/person\/fb03a927907d90f409fac550ba375638\"},\"headline\":\"Legend of Ymir Crafting Calculator\",\"datePublished\":\"2025-11-06T14:57:21+00:00\",\"dateModified\":\"2025-11-25T19:08:20+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/gamingwithdaopa.ellatha.com\/legendofymir\/crafting-calculator\/\"},\"wordCount\":171,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/gamingwithdaopa.ellatha.com\/legendofymir\/#\/schema\/person\/fb03a927907d90f409fac550ba375638\"},\"image\":{\"@id\":\"https:\/\/gamingwithdaopa.ellatha.com\/legendofymir\/crafting-calculator\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/gamingwithdaopa.ellatha.com\/legendofymir\/wp-content\/uploads\/sites\/41\/2025\/11\/legend-of-ymir-crafting-calculator.jpg\",\"articleSection\":[\"Guides\",\"Tools\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/gamingwithdaopa.ellatha.com\/legendofymir\/crafting-calculator\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/gamingwithdaopa.ellatha.com\/legendofymir\/crafting-calculator\/\",\"url\":\"https:\/\/gamingwithdaopa.ellatha.com\/legendofymir\/crafting-calculator\/\",\"name\":\"Legend of Ymir Crafting Calculator\",\"isPartOf\":{\"@id\":\"https:\/\/gamingwithdaopa.ellatha.com\/legendofymir\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/gamingwithdaopa.ellatha.com\/legendofymir\/crafting-calculator\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/gamingwithdaopa.ellatha.com\/legendofymir\/crafting-calculator\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/gamingwithdaopa.ellatha.com\/legendofymir\/wp-content\/uploads\/sites\/41\/2025\/11\/legend-of-ymir-crafting-calculator.jpg\",\"datePublished\":\"2025-11-06T14:57:21+00:00\",\"dateModified\":\"2025-11-25T19:08:20+00:00\",\"description\":\"Legend of Ymir Crafting\/Recipes Calculator Welcome to the Legend of Ymir Crafting Calculator! This interactive tool is designed to help players of the\",\"breadcrumb\":{\"@id\":\"https:\/\/gamingwithdaopa.ellatha.com\/legendofymir\/crafting-calculator\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/gamingwithdaopa.ellatha.com\/legendofymir\/crafting-calculator\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/gamingwithdaopa.ellatha.com\/legendofymir\/crafting-calculator\/#primaryimage\",\"url\":\"https:\/\/gamingwithdaopa.ellatha.com\/legendofymir\/wp-content\/uploads\/sites\/41\/2025\/11\/legend-of-ymir-crafting-calculator.jpg\",\"contentUrl\":\"https:\/\/gamingwithdaopa.ellatha.com\/legendofymir\/wp-content\/uploads\/sites\/41\/2025\/11\/legend-of-ymir-crafting-calculator.jpg\",\"width\":400,\"height\":263,\"caption\":\"legend of ymir crafting calculator\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/gamingwithdaopa.ellatha.com\/legendofymir\/crafting-calculator\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/gamingwithdaopa.ellatha.com\/legendofymir\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Legend of Ymir Crafting Calculator\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/gamingwithdaopa.ellatha.com\/legendofymir\/#website\",\"url\":\"https:\/\/gamingwithdaopa.ellatha.com\/legendofymir\/\",\"name\":\"Legend of Ymir\",\"description\":\"DaOpa&#039;s Legend of Ymir fansite for a rich collection of videos, detailed guides, interactive maps, and insightful articles dedicated to enhancing your gaming experience.\",\"publisher\":{\"@id\":\"https:\/\/gamingwithdaopa.ellatha.com\/legendofymir\/#\/schema\/person\/fb03a927907d90f409fac550ba375638\"},\"alternateName\":\"LOY\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/gamingwithdaopa.ellatha.com\/legendofymir\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/gamingwithdaopa.ellatha.com\/legendofymir\/#\/schema\/person\/fb03a927907d90f409fac550ba375638\",\"name\":\"daopa\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/gamingwithdaopa.ellatha.com\/legendofymir\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/gamingwithdaopa.ellatha.com\/legendofymir\/wp-content\/uploads\/sites\/41\/2025\/10\/DaOpa.png\",\"contentUrl\":\"https:\/\/gamingwithdaopa.ellatha.com\/legendofymir\/wp-content\/uploads\/sites\/41\/2025\/10\/DaOpa.png\",\"width\":1087,\"height\":1604,\"caption\":\"daopa\"},\"logo\":{\"@id\":\"https:\/\/gamingwithdaopa.ellatha.com\/legendofymir\/#\/schema\/person\/image\/\"},\"description\":\"DaOpa has been variety streamer since 2009 with game focuses on primarily MMOs, Sandbox, RPG and FPS genres. For inquires comment in the comments sections. This channel is syndicated across various micro niche gaming related blogs operated by DaOpa. He creates fansites, guides, tools for gamers\",\"sameAs\":[\"https:\/\/gamingwithdaopa.ellatha.com\",\"facebook.com\/gamingwithdaopa\/\",\"https:\/\/x.com\/gamingwithdaopa\",\"youtube.com\/@daopa\"],\"url\":\"https:\/\/gamingwithdaopa.ellatha.com\/legendofymir\/author\/daopa\/\"}]}<\/script>","yoast_head_json":{"title":"Legend of Ymir Crafting Calculator","description":"Legend of Ymir Crafting\/Recipes Calculator Welcome to the Legend of Ymir Crafting Calculator! This interactive tool is designed to help players of the","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/gamingwithdaopa.ellatha.com\/legendofymir\/crafting-calculator\/","og_locale":"en_US","og_type":"article","og_title":"Legend of Ymir Crafting Calculator","og_description":"Legend of Ymir Crafting\/Recipes Calculator Welcome to the Legend of Ymir Crafting Calculator! This interactive tool is designed to help players of the","og_url":"https:\/\/gamingwithdaopa.ellatha.com\/legendofymir\/crafting-calculator\/","og_site_name":"Legend of Ymir","article_publisher":"facebook.com\/gamingwithdaopa\/","article_author":"facebook.com\/gamingwithdaopa\/","article_published_time":"2025-11-06T14:57:21+00:00","article_modified_time":"2025-11-25T19:08:20+00:00","og_image":[{"width":400,"height":263,"url":"https:\/\/gamingwithdaopa.ellatha.com\/legendofymir\/wp-content\/uploads\/sites\/41\/2025\/11\/legend-of-ymir-crafting-calculator.jpg","type":"image\/jpeg"}],"author":"daopa","twitter_card":"summary_large_image","twitter_creator":"@gamingwithdaopa","twitter_site":"@gamingwithdaopa","twitter_misc":{"Written by":"daopa","Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/gamingwithdaopa.ellatha.com\/legendofymir\/crafting-calculator\/#article","isPartOf":{"@id":"https:\/\/gamingwithdaopa.ellatha.com\/legendofymir\/crafting-calculator\/"},"author":{"name":"daopa","@id":"https:\/\/gamingwithdaopa.ellatha.com\/legendofymir\/#\/schema\/person\/fb03a927907d90f409fac550ba375638"},"headline":"Legend of Ymir Crafting Calculator","datePublished":"2025-11-06T14:57:21+00:00","dateModified":"2025-11-25T19:08:20+00:00","mainEntityOfPage":{"@id":"https:\/\/gamingwithdaopa.ellatha.com\/legendofymir\/crafting-calculator\/"},"wordCount":171,"commentCount":0,"publisher":{"@id":"https:\/\/gamingwithdaopa.ellatha.com\/legendofymir\/#\/schema\/person\/fb03a927907d90f409fac550ba375638"},"image":{"@id":"https:\/\/gamingwithdaopa.ellatha.com\/legendofymir\/crafting-calculator\/#primaryimage"},"thumbnailUrl":"https:\/\/gamingwithdaopa.ellatha.com\/legendofymir\/wp-content\/uploads\/sites\/41\/2025\/11\/legend-of-ymir-crafting-calculator.jpg","articleSection":["Guides","Tools"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/gamingwithdaopa.ellatha.com\/legendofymir\/crafting-calculator\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/gamingwithdaopa.ellatha.com\/legendofymir\/crafting-calculator\/","url":"https:\/\/gamingwithdaopa.ellatha.com\/legendofymir\/crafting-calculator\/","name":"Legend of Ymir Crafting Calculator","isPartOf":{"@id":"https:\/\/gamingwithdaopa.ellatha.com\/legendofymir\/#website"},"primaryImageOfPage":{"@id":"https:\/\/gamingwithdaopa.ellatha.com\/legendofymir\/crafting-calculator\/#primaryimage"},"image":{"@id":"https:\/\/gamingwithdaopa.ellatha.com\/legendofymir\/crafting-calculator\/#primaryimage"},"thumbnailUrl":"https:\/\/gamingwithdaopa.ellatha.com\/legendofymir\/wp-content\/uploads\/sites\/41\/2025\/11\/legend-of-ymir-crafting-calculator.jpg","datePublished":"2025-11-06T14:57:21+00:00","dateModified":"2025-11-25T19:08:20+00:00","description":"Legend of Ymir Crafting\/Recipes Calculator Welcome to the Legend of Ymir Crafting Calculator! This interactive tool is designed to help players of the","breadcrumb":{"@id":"https:\/\/gamingwithdaopa.ellatha.com\/legendofymir\/crafting-calculator\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/gamingwithdaopa.ellatha.com\/legendofymir\/crafting-calculator\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/gamingwithdaopa.ellatha.com\/legendofymir\/crafting-calculator\/#primaryimage","url":"https:\/\/gamingwithdaopa.ellatha.com\/legendofymir\/wp-content\/uploads\/sites\/41\/2025\/11\/legend-of-ymir-crafting-calculator.jpg","contentUrl":"https:\/\/gamingwithdaopa.ellatha.com\/legendofymir\/wp-content\/uploads\/sites\/41\/2025\/11\/legend-of-ymir-crafting-calculator.jpg","width":400,"height":263,"caption":"legend of ymir crafting calculator"},{"@type":"BreadcrumbList","@id":"https:\/\/gamingwithdaopa.ellatha.com\/legendofymir\/crafting-calculator\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/gamingwithdaopa.ellatha.com\/legendofymir\/"},{"@type":"ListItem","position":2,"name":"Legend of Ymir Crafting Calculator"}]},{"@type":"WebSite","@id":"https:\/\/gamingwithdaopa.ellatha.com\/legendofymir\/#website","url":"https:\/\/gamingwithdaopa.ellatha.com\/legendofymir\/","name":"Legend of Ymir","description":"DaOpa&#039;s Legend of Ymir fansite for a rich collection of videos, detailed guides, interactive maps, and insightful articles dedicated to enhancing your gaming experience.","publisher":{"@id":"https:\/\/gamingwithdaopa.ellatha.com\/legendofymir\/#\/schema\/person\/fb03a927907d90f409fac550ba375638"},"alternateName":"LOY","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/gamingwithdaopa.ellatha.com\/legendofymir\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/gamingwithdaopa.ellatha.com\/legendofymir\/#\/schema\/person\/fb03a927907d90f409fac550ba375638","name":"daopa","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/gamingwithdaopa.ellatha.com\/legendofymir\/#\/schema\/person\/image\/","url":"https:\/\/gamingwithdaopa.ellatha.com\/legendofymir\/wp-content\/uploads\/sites\/41\/2025\/10\/DaOpa.png","contentUrl":"https:\/\/gamingwithdaopa.ellatha.com\/legendofymir\/wp-content\/uploads\/sites\/41\/2025\/10\/DaOpa.png","width":1087,"height":1604,"caption":"daopa"},"logo":{"@id":"https:\/\/gamingwithdaopa.ellatha.com\/legendofymir\/#\/schema\/person\/image\/"},"description":"DaOpa has been variety streamer since 2009 with game focuses on primarily MMOs, Sandbox, RPG and FPS genres. For inquires comment in the comments sections. This channel is syndicated across various micro niche gaming related blogs operated by DaOpa. He creates fansites, guides, tools for gamers","sameAs":["https:\/\/gamingwithdaopa.ellatha.com","facebook.com\/gamingwithdaopa\/","https:\/\/x.com\/gamingwithdaopa","youtube.com\/@daopa"],"url":"https:\/\/gamingwithdaopa.ellatha.com\/legendofymir\/author\/daopa\/"}]}},"_links":{"self":[{"href":"https:\/\/gamingwithdaopa.ellatha.com\/legendofymir\/wp-json\/wp\/v2\/posts\/52","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gamingwithdaopa.ellatha.com\/legendofymir\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/gamingwithdaopa.ellatha.com\/legendofymir\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/gamingwithdaopa.ellatha.com\/legendofymir\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/gamingwithdaopa.ellatha.com\/legendofymir\/wp-json\/wp\/v2\/comments?post=52"}],"version-history":[{"count":3,"href":"https:\/\/gamingwithdaopa.ellatha.com\/legendofymir\/wp-json\/wp\/v2\/posts\/52\/revisions"}],"predecessor-version":[{"id":112,"href":"https:\/\/gamingwithdaopa.ellatha.com\/legendofymir\/wp-json\/wp\/v2\/posts\/52\/revisions\/112"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/gamingwithdaopa.ellatha.com\/legendofymir\/wp-json\/wp\/v2\/media\/84"}],"wp:attachment":[{"href":"https:\/\/gamingwithdaopa.ellatha.com\/legendofymir\/wp-json\/wp\/v2\/media?parent=52"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/gamingwithdaopa.ellatha.com\/legendofymir\/wp-json\/wp\/v2\/categories?post=52"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/gamingwithdaopa.ellatha.com\/legendofymir\/wp-json\/wp\/v2\/tags?post=52"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}