Moduł:Kosmos

Z Nonsensopedii, polskiej encyklopedii humoru

Skocz do: nawigacji, szukaj
--<nowiki>
local hp = require("Moduł:HTMLParser")
local data = mw.loadData("Module:Kosmos/dane")
local p = {}
local gk = {err = "", ok = false}
local tags = {
    -- gk-przedmioty – Lista przedmiotów w ekwipunku
    ["przedmioty"] = function(a) a.tagName = "textNode"; a.value = gk:printItems() end,
    -- gk-kasa – Ilość zgromadzonych pieniędzy
    ["kasa"] = function(a) a.tagName = "textNode"; a.value = gk:printCash() end,
    -- gk-zadanie-potwierdzenie – Tekst z przyciskiem potwierdzenia zadania. Wyświetla się tylko wtedy, gdy wszystkie poprzednie zadania zostały ukończone.
    ["zadanie-potwierdzenie"] = function(a) return "" end,
    -- gk-zadanie-status – Tekst, który wyśtietla się tylko w określonym statusie danego zadania
    ["zadanie-przed"] = function(a) return "" end,
    -- gk-zadanie-po – Tekst, który wyświetla się po zakończeniu danego zadania i rozpoczęciu następnego
    ["zadanie-po"] = function(a) return "" end,
    -- gk-ma-przedmiot – Tekst, który wyświetla się, gdy gracz posiada x (przynajmniej 1) danych przedmiotów
    ["ma-przedmiot"] = function(a) return "" end,
}
Z = 25
ITC = Z * Z * Z * Z * Z
FMAX = "999999999999999" -- = 1e15 - 1
CASHM = 1e5
QUESTC = 32
VARC = 4
STATC = 2
CSS_ITEM = "width: 48px; height: 48px; padding: 2px; border: 1px solid #FFF; border-radius: 4px; margin: 0 4px;"
 
function gk:init(f)
    self.lng = mw.getContentLanguage()
    local x = f:preprocess("{{#forumlink:1|+0<=" .. FMAX .. "}}")
    local lx = tonumber(x)
    if x == "" then
        self.err = "Niepoprawny zakres"
        return
    end
    if lx == nil then
        self.err = "Wiadomość: [" .. x .. "]"
        return
    end
    lx = lx - 1
    self.code = lx
    if lx < 0 then
        self.err = "Liczba nie może być ujemna"
        return
    end
    self.items = it(lx % ITC)
    lx = math.floor(lx / ITC)
    self.cash = lx % CASHM
    lx = math.floor(lx / CASHM)
    self.quest = lx % QUESTC
    lx = math.floor(lx / QUESTC)
    self.qvar = lx % VARC
    lx = math.floor(lx / VARC)
    self.qstat = lx % STATC
    lx = math.floor(lx / STATC)
    self.r = lx
    self.ok = true
end
function gk:printCash()
    if not gk.ok then
        return "Nie zainicjowano"
    end
    if gk.cashCached == nil then
        gk.cashCached = gk.lng:formatNum(gk.cash/100)
    end
    return gk.cashCached
end
 
function gk:printItems()
    if not gk.ok then
        return "Nie zainicjowano"
    end
    if gk.itemsCached ~= nil then
        return gk.itemsCached
    end
    local s = ""
    local dt, n
    for i=1,5,1 do
        n = gk.items[i]
        if n ~= 0 then
            dt = data.items[n]
            local dn, di, dd
            if dt ~= nil then
                dn = dt[1]
                if dn == nil then
                    dn = "Przedmiot " .. gk.items[i] .. " (BŁĄD)"
                end
                di = dt[2]
                if di == nil then
                    di = ""
                end
                dd = dt[3]
                if dd == nil then
                    dd = "Musiał wystąpić błąd przy ładowaniu danych"
                end
            else
                dn = "Przedmiot " .. gk.items[i]
                di = ""
                dd = "Brak opisu"
            end
            s = s .. '<div title="' .. dn .. ' – ' .. dd .. '" style="' .. CSS_ITEM .. '">[[Plik:' .. di .. '|44x44px|link=]]</div>'
        else
            s = s .. '<div style="' .. CSS_ITEM .. '"></div>'
        end
    end
    gk.itemsCached = s
    return s
end
 
function Contains(t, v)
    for i, c in ipairs(t) do
        if c == v then return true end
    end
    return false
end
function ti(t)
    return (((t[5] * Z + t[4]) * Z + t[3]) * Z + t[2]) * Z + t[1]
end
function it(l)
    if l == 0 then return {0, 0, 0, 0, 0} end
    local t = {}
    local u = l
    local c
    for i = 0, 4, 1 do
        if u ~= 0 then
            c = (u % Z)
            if c == 0 then c = Z end
            table.insert(t, c)
            u = (u - c) / Z
        else
            table.insert(t, 0)
        end
    end
    return t
end
function query(h, q)
    local t = {}
    for i,v in ipairs(h) do
        if v.attr ~= nil and v.attr.gk ~= nil then
            if v.attr.gk == q then t[#t+1] = v end
        end
        if v.childNodes ~= nil then
            local ct = query(v.childNodes, q)
            if #ct > 0 then
                for i = 1, #ct do t[#t+1] = ct[i] end
            end
        end
    end
    return t
end
 
function p.print(f)
    gk:init(f)
    if gk.ok then
        local hc = hp.parse(f.args[1])
        for k,v in pairs(tags) do
            local kp = query(hc, k)
            for i,qe in ipairs(kp) do
                v(qe)
            end
        end
        return hp.dump(hc)
    else
        return "'''BŁĄD:''' " .. gk.err
    end
end
 
function p.gra(f)
    gk:init(f)
    if gk.err == "" then
        return "Ekwipunek: " .. table.concat(gk.items, ", ") .. "; Kasa: " .. gk.cash .. "; Quest (wariant, status): " .. gk.quest .. " (" .. gk.qvar .. ", " .. gk.qstat .. "); Reszta: " .. gk.r
    else
        return "[BŁĄD] " .. gk.err
    end
end
 
return p
--</nowiki>
Nasze strony
Przyjaciele