Модуль:CurrencyDiamondsConverter

Версия от 19:22, 14 марта 2025; Hloth (обсуждение | вклад)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)
{{#invoke:CurrencyDiamondsConverter|currencyToDiamonds|cog=2}} 8
{{#invoke:CurrencyDiamondsConverter|diamondsToCurrency|diamonds=2}} 2|Звездочка}}

local p = {}

local oneDiamondCost = 16

local spurNominal = 1
local bevelNominal = 8
local sprocketNominal = 16
local cogNominal = 64
local crownNominal = 512
local sunNominal = 4096

function p.currencyToDiamonds(frame)
  local spur = tonumber(frame.args['spur']) or 0
  local bevel = tonumber(frame.args['bevel']) or 0
  local sprocket = tonumber(frame.args['sprocket']) or 0
  local cog = tonumber(frame.args['cog']) or 0
  local crown = tonumber(frame.args['crown']) or 0
  local sun = tonumber(frame.args['sun']) or 0

  local sum = spur * spurNominal + bevel * bevelNominal + sprocket * sprocketNominal + cog * cogNominal + crown * crownNominal + sun * sunNominal

  local diamonds = math.floor(sum / oneDiamondCost + 0.5)

  return diamonds
end

function p.diamondsToCurrency(frame)
  local diamonds = tonumber(frame.args['diamonds']) or 0

  local sum = diamonds * oneDiamondCost

  local sun = math.floor(sum / sunNominal)
  sum = sum - sun * sunNominal

  local crown = math.floor(sum / crownNominal)
  sum = sum - crown * crownNominal

  local cog = math.floor(sum / cogNominal)
  sum = sum - cog * cogNominal

  local sprocket = math.floor(sum / sprocketNominal)
  sum = sum - sprocket * sprocketNominal

  local bevel = math.floor(sum / bevelNominal)
  sum = sum - bevel * bevelNominal

  local spur = math.floor(sum / spurNominal)

  local coinTemplate = '{{Currency/Coin|%i|%s}}'

  local result = ''

  if sun > 0 then
    result = result .. string.format(coinTemplate, sun, 'Солнышко')
  end

  if crown > 0 then
    result = result .. string.format(coinTemplate, crown, 'Коронка')
  end

  if cog > 0 then
    result = result .. string.format(coinTemplate, cog, 'Шестеренка')
  end

  if sprocket > 0 then
    result = result .. string.format(coinTemplate, sprocket, 'Звездочка')
  end

  if bevel > 0 then
    result = result .. string.format(coinTemplate, bevel, 'Фаска')
  end

  if spur > 0 then
    result = result .. string.format(coinTemplate, spur, 'Шпора')
  end

  return result
end

return p