Chcesz pomóc, ale nie wiesz, od czego zacząć? Sprawdź listę artykułów do rozszerzenia lub zilustrowania czy potrzebnych zmian.

Gamepedia was upgraded to MediaWiki version 1.31 on Wednesday November 14th. To learn more about the upgrade and its effects click here.

Moduł:Inventory slot

Z Minecraft Wiki Polska
Skocz do: nawigacja, szukaj
Template-noinfo.png
Dokumentacja

W tym module nie ma dokumentacji. Jeśli wiesz jak używać tego modułu, dodaj odpowiednie informacje.

Powyższy opis jest dołączany ze strony Moduł:Inventory slot/opis.

-------------------------------------------------------------------
--- Модуль для отображения инвентарных слотов в Minecraft Wiki.
-------------------------------------------------------------------

local p = {}

-- Список приставок к названиям, обрабатываемых другими модулями.
-- Так будет легче, например, убирать их из целей ссылок.
-- ВНИМАНИЕ: указывайте все варианты склонения по родам и числам.
p.prefixes = {
	'Jakiekolwiek', 'Jakikolwiek', 'Jakakolwiek',
	'Uszkodzone', 'Uszkodzony', 'Uszkodzona'
}

p.modAliases = {
	["thaum"] = "ThaumCraft",
	["bc"] = "BuildCraft"
}

--- Создание слота
function p.slot(f)
	--- Получение аргументов
	local args = f.args or f
	if f == mw.getCurrentFrame() and args[1] == nil then
		args = f:getParent().args
	end
	
	-- Первый аргумент
	args[1] = mw.text.trim(args[1] or '')
	
	--- Псевдонимы
	-- Вы можете закомментировать следующую строку, если не используете псевдонимы
--	local aliases = mw.loadData('Модуль:Инвентарный слот/Псевдонимы')
	
	local modAliases = args["aliasyModow"] or ''
	if modAliases ~= '' then
		modAliases = mw.loadData('Moduł:' .. modAliases)
	else
		modAliases = nil
	end
	
	if aliases or modAliases then
		local frames = {}
		for frame in mw.text.gsplit( args[1], '%s*;%s*' ) do
			local frameParts = p.getParts( frame, args["mod"] )
			
			local id = frameParts.name
			if frameParts.mod then
				id = frameParts.mod .. ':' .. id
			end
			
			local alias
			if modAliases and modAliases[id] then
				alias = modAliases[id]
			elseif aliases and aliases[id] then
				alias = aliases[id]
			end
			
			if alias then
				table.insert( frames, p.expandAlias( frameParts, alias ) )
			else
				table.insert( frames, frame )
			end
		end
		
		args[1] = table.concat( frames, ';' )
	end
	
	--- Построение спрайта
	
	-- Параметры
	local sprite
	local ids = mw.loadData([[Moduł:InvSprite/IDs]])["ids"]
	local modIds = {}
	local back_modIds = {}
	local animated = mw.ustring.find(args[1], ';')
	local pageName = mw.title.getCurrentTitle().text
	local imgClass = args["klasa obrazu"]
	local numStyle = args["styl numerów"]
	
	local body = mw.html.create('span'):css{['vertical-align'] = args["wyrówn"]}
	
	if animated then
		body:addClass('animated')
	end
	if args["класс"] then
		body:addClass(args["klasa"])
	end
		body:addClass('invslot')
	if args["стиль"] then
		body:cssText(args["styl"])
	end
	
	if (args["domyślne"] or '') ~= '' then
		body:css('background-image', '{{FileUrl|' .. args["domyślne"] .. '.png}}')
	end

    ---спрайты для фона
	if (args["domyślneCSS"] or '') ~= '' then
        local mod=args["mod"]
		if mod then
			local back_modData = back_modIds[mod]
			if not back_modData and mw.title.new('Moduł:TłoSprit/' .. mod .. '/ID').exists then
				back_modData = mw.loadData('Moduł:TłoSprit/' .. mod .. '/ID')
				back_modIds[mod] = back_modData
			end
			if back_modData then
				param = mw.loadData('Moduł:TłoSprit/' .. mod)
				local n = args["domyślneCSS"]
				local pos = back_modData[n] - 1
				local size = param["wielkość"]
				local tiles = param["format"] / size
				local left = pos % tiles * size
				local top = math.floor( pos / tiles ) * size
		
				body:css('background-image', '{{FileUrl|' .. mod .. 'CSS.png}}')
				body:css('background-size', 'auto')
				body:css('background-position', '-' .. left .. 'px -' .. top ..'px')
			end
		end		
	end
	
	--- Обработка фреймов
	local first = true
	for frame in mw.text.gsplit(args[1], '%s*;%s*') do
		local item
		if frame ~= '' or frame == '' and animated then
			item = body:tag('span'):addClass('invslot-item')
			if imgClass then
				item:addClass(imgClass)
			end
		end
		
		if frame == '' then
			(item or body):tag('br')
		else
			local category
			local parts = p.getParts(frame, args["mod"])
			local title = parts.title or mw.text.trim(args["tytuł"] or '')
			local mod = parts.mod
			local name = parts.name
			local num = parts.num
			local description = parts.text
			
			local img, idData
			if mod then
				local modData = modIds[mod]
				if not modData and mw.title.new('Moduł:InvSprite/' .. mod .. '/ID').exists then
					modData = mw.loadData('Moduł:InvSprite/' .. mod .. '/ID')["IDы"]
					modIds[mod] = modData
				end
				if modData and modData[name] then
					idData = modData[name]
				else
					img = name .. ' (' .. mod .. ')'
				end
			elseif ids[name] then
				idData = ids[name]
			else
				img = name
			end
			
			local link = args["link"] or ''
			if link == '' then
				if mod then
					link = mod .. '/' .. name
				else
					link = mw.ustring.gsub(name, '^Uszkodzon[yea] ', '')
				end
			elseif mw.ustring.lower(link) == 'nie' then
				link = nil
			end
			if link == pageName then
				link = nil
			end
			
			local formattedTitle
			local plainTitle
			if title == '' then
				plainTitle = name
			elseif mw.ustring.lower(title) ~= 'nie' then
				plainTitle = mw.ustring.gsub(mw.ustring.gsub(title, '\\\\', '\'), '\\&', '&')
				
				local formatPattern = '&[0-9a-fk-or]'
				if mw.ustring.match(plainTitle, formatPattern) then
					formattedTitle = title
					plainTitle = mw.ustring.gsub(plainTitle, formatPattern, '')
				end
				
				if plainTitle == '' then
					plainTitle = name
				else
					plainTitle =  mw.ustring.gsub(mw.ustring.gsub(plainTitle, '\', '\\'), '&', '&')
				end
			elseif link then
				if img then
					formattedTitle = ''
				else
					plainTitle = ''
				end
			end
			
			item:attr{
				['data-minetip-title'] = formattedTitle,
				['data-minetip-text'] = description
			}
			
			if img then
				-- & is re-escaped because mw.html treats attributes
				-- as plain text, but MediaWiki doesn't
				local escapedTitle = ( plainTitle or '' ):gsub( '&', '&' )
				item:addClass('invslot-item-image')
					:wikitext('[[File:Grid ', img, '.png|32x32px|link=', link or '', '|', escapedTitle, ']]')
			else
				if not sprite then
					sprite = require([[Moduł:Sprite]]).sprite
				end
				local image
				if mod then
					image = (args["tablica Ikonek"] or mod or "Inv") .. 'CSS.png'
				end
				if link then
					item:wikitext('[[', link, '|')
				end

				local image, spriteCat;
				if not mod then
				    image, spriteCat = sprite{
					    ["danychID"] = idData, ["tytuł"] = plainTitle,
					    ["obraz"] = image, ["ustawienia"] = 'InvSprite'
					    }
				else 
				    image, spriteCat = sprite{
					    ["danychID"] = idData, ["tytuł"] = plainTitle,
					    ["obraz"] = image, ["ustawienia"] = 'InvSprite/' .. mod
					    }
				end
				item:node(image)
				category = spriteCat
			end
			
			if num and num > 1 and num < 1000 then
				if img and link then
					item:wikitext('[[', link, '|')
				end
				local number = item
					:tag('span')
						:addClass('invslot-stacksize')
						:attr{title = plainTitle}
						:wikitext(num)
				if numStyle then
					number:cssText(numStyle)
				end
				if img and link then
					item:wikitext(']]')
				end
			end
			
			if idData and link then
				item:wikitext(']]')
			end
			
			item:wikitext(category)
		end
		
		if first then
			if animated and item then
				item:addClass('active')
			end
			first = false
		end
	end
	
	return tostring( body )
end

function p.expandAlias( frameParts, alias )
	-- If the frame has no parts, we can just return the alias as-is
	--[[if not frameParts.title and not frameParts.mod and not frameParts.num and not frameParts.text then
		return alias
	end--]]
	
	local expandedFrames = {}
	for aliasFrame in mw.text.gsplit(alias, '%s*;%s*') do
		local aliasParts = p.getParts(aliasFrame)
		aliasParts.title = frameParts.title or aliasParts.title or ''
		aliasParts.mod = frameParts.mod or aliasParts.mod or 'Minecraft'
		aliasParts.num = frameParts.num or aliasParts.num or ''
		aliasParts.text = frameParts.text or aliasParts.text or ''
		
		table.insert(expandedFrames, mw.ustring.format(
			'[%s]%s:%s,%s[%s]',
			aliasParts.title, aliasParts.mod, aliasParts.name, aliasParts.num, aliasParts.text
		))
	end
	
	return table.concat(expandedFrames, ';')
end


function p.getParts(frame, mod)
----Функция получает название предмета в формате "[титл]мод:имя[текст],число"
----parts.title = титл, название предмета при наведении
----parts.mod = мод
----parts.name = имя
----parts.text = текст, дополнительный текст при наведении на предмет
----parts.num = число

	local parts = {}
	parts.title = mw.ustring.match(frame, '^%[%s*([^%]]+)%s*%]')
	
    local modPattern
    if mw.ustring.match(frame, '^%[.*%]([a-zA-ZąćęłńóśźżĄĆĘŁŃÓŚŻŹа-яА-Я0-9 _-]+):') then
    modPattern = '^%[.*%]([a-zA-ZąćęłńóśźżĄĆĘŁŃÓŚŻŹа-яА-Я0-9 _-]+):'
    else
    modPattern = '^([a-zA-ZąćęłńóśźżĄĆĘŁŃÓŚŻŹа-яА-Я0-9 _-]+):'
    end

	parts.mod = mw.text.trim(mw.ustring.match(frame, modPattern) or mod or '') ---- Получаем название мода
	
	local vanilla = {v = 1, vanilla = 1, mc = 1, minecraft = 1}
	if parts.mod == '' or vanilla[mw.ustring.lower(parts.mod)] then
		parts.mod = nil
	end
	if p.modAliases[parts.mod] then
		parts.mod = p.modAliases[parts.mod]
	end

	local _, nameStartV = mw.ustring.find( frame, '^%[[^%]]*%]' )
	local nameStart = ( ({mw.ustring.find( frame, modPattern )})[2] or nameStartV or 0 ) + 1
	if nameStart - 1 == #frame then
		nameStart = 1
	end
	parts.name = mw.text.trim( mw.ustring.sub( frame, nameStart, ( mw.ustring.find( frame, '[,%[]', nameStart ) or 0 ) - 1 ) )
	
	parts.num = math.floor(mw.ustring.match(frame, ',%s*(%d+)') or 0)
	if parts.num == 0 then
		parts.num = nil
	end
	
	parts.text = mw.ustring.match(frame, '%[%s*([^%]]+)%s*%]$')
	
	return parts
end
 
return p