kGeen bewerkingssamenvatting |
k (fx #1?) |
||
Regel 228: | Regel 228: | ||
local image, spriteCat = sprite.sprite{ |
local image, spriteCat = sprite.sprite{ |
||
data = 'ItemSprite', |
data = 'ItemSprite', |
||
− | ( materiaal == 'Elk' or '' ) .. gereedschapnaam, |
+ | ( materiaal == 'Elk' and 'Houten ' or '' ) .. gereedschapnaam, |
title = gereedschapnaam, |
title = gereedschapnaam, |
||
link = gereedschap |
link = gereedschap |
Versie van 12 aug 2019 14:55
Deze module implementeert {{Breektabel}}
.
Afhankelijkheden
- Module:ProcessArgs
- Module:Sprite
- Module:Waarden, functie
hardheidModule
[bekijken | bewerken | geschiedenis | cache legen]Bovenstaande documentatie is getranscludeerd uit Module:Breektabel/doc.
local p = {}
local breektijdhoofd;
local function getBreektijdhoofd( f )
if breektijdhoofd == nil then
breektijdhoofd = '[[Vernietigen|Breektijd]]' .. f:preprocess( '<ref group="opmerking" name="breektijdopm">Tijd is voor onbetoverd gereedschap in seconden.</ref>' )
end
return breektijdhoofd
end
p.rij = function( f )
local args = require( 'Module:ProcessArgs' ).norm()
local getDplVar = function( var )
local waarde = f:callParserFunction( '#dplvar', 'breaking ' .. var )
if waarde == '' then
waarde = false
end
return waarde
end
local dplVars = {}
local setDplVar = function( var, waarde )
table.insert( dplVars, 'breaking ' .. var )
table.insert( dplVars, waarde or '1' )
end
local rijen = {}
local tabelonderdelen = {}
local categorieen = {}
local horizontaal
if args.horizontaal or args[1]:match( ';' ) then
horizontaal = true
end
local toonGereedschap = true
local toonSchaar = true
local toonZwaard = true
local header, sortable, simple
if horizontaal or not getDplVar( 'header' ) then
if args.verberggereedschap or horizontaal and ( not args[2] or args[2]:lower() == 'elk' or args[2]:lower() == 'geen' ) then
toonGereedschap = false
setDplVar( 'verberggereedschap' )
end
if args.verbergschaar or horizontaal and not args.schaar then
toonSchaar = false
setDplVar( 'verbergschaar' )
end
if args.verbergzwaard or horizontaal and not args.zwaard then
toonZwaard = false
setDplVar( 'verbergzwaard' )
end
sortable = not horizontaal and args.sort
if sortable then
setDplVar( 'sortable' )
end
simple = args.simple
if simple and not horizontaal then
setDplVar( 'simple' )
end
local tabelklassen = { 'wikitable' }
if sortable then
table.insert( tabelklassen, 'sortable' )
end
table.insert( rijen, ' {| class="' .. table.concat( tabelklassen, ' ' ) .. '" style="text-align:center"' )
local sorteertype = ''
if sortable then
sorteertype = 'data-sort-type="number"'
end
local rowspan = ''
if not horizontaal then
rowspan = 'rowspan=2'
end
header = {
'!' .. rowspan .. ' | Blok'
}
if not simple then
table.insert( header, '! ' .. rowspan .. sorteertype .. ' | Hardheid' )
if toonGereedschap then
table.insert( header, '! ' .. rowspan .. ' | Gereedschap' )
end
end
local gereedschapkolommen = {}
if toonGereedschap then
gereedschapkolommen = { 'Hout', 'Steen', 'IJzer', 'Diamant', 'Goud' }
end
table.insert(
gereedschapkolommen, 1,
'<abbr title="Inclusief voorwerpen die geen gereedschap zijn en het verkeerde type gereedschap">Hand</abbr>'
)
if not simple then
if toonSchaar then
table.insert( gereedschapkolommen, 'Schaar' )
end
if toonZwaard then
table.insert( gereedschapkolommen, 'Zwaard' )
end
end
if not horizontaal then
table.insert( header, '! colspan="' .. #gereedschapkolommen .. '" |' .. getBreektijdhoofd( f ) )
table.insert( header, '|-' )
end
for _, gereedschap in ipairs( gereedschapkolommen ) do
table.insert( header, '! ' .. sorteertype .. ' | ' .. gereedschap )
end
if not horizontaal then
header = table.concat( header, '\n' )
setDplVar( 'header', header )
end
table.insert( tabelonderdelen, header )
else
toonGereedschap = not getDplVar( 'verberggereedschap' )
toonSchaar = not getDplVar( 'verbergschaar' )
toonZwaard = not getDplVar( 'verbergzwaard' )
sortable = getDplVar( 'sortable' )
simple = getDplVar( 'simple' )
end
local sprite = require( 'Module:Sprite' )
local hardheid = require( 'Module:Waarden' ).hardheidModule
local vulCellen = function( cellentabel, tekst, num )
for i = 1, num do
table.insert( cellentabel, tekst )
end
end
local materiaalgraad = {
Elk = 0,
Hout = 1,
Goud = 1,
Steen = 2,
IJzer = 3,
Diamant = 4,
Geen = 5
}
local materiaalsnelheid = {
Geen = 1,
Elk = 1,
Hout = 2,
Steen = 4,
IJzer = 6,
Diamant = 8,
Goud = 12
}
local voegBlokToe = function( blokArgs )
local cellen = {}
local blokken = mw.text.split( blokArgs[1], '%s*,%s*' )
local hardheidwaarde = tonumber( hardheid{ blokken[1], type = 'hardheid' } )
if not hardheidwaarde then
hardheidwaarde = '?'
end
local onbreekbaar
if hardheidwaarde == -1 or blokArgs.vloeistof then
onbreekbaar = true
end
local blockSprites = {}
local links = mw.text.split( blokArgs.link or '', '%s*,%s*' )
local ids = mw.text.split( blokArgs.sprite or '', '%s*,%s*' )
local voorwerpen = mw.text.split( blokArgs.voorwerp or '', '%s*,%s*' )
for i, blok in ipairs( blokken ) do
local link
if not links[i] and links[1] ~= '' then
link = links[1]
elseif links[i] ~= '' then
link = links[i]
end
local id
if not ids[i] and ids[1] ~= '' then
id = ids[1]
elseif ids[i] ~= '' then
id = ids[i]
end
local bloktekst
if args.textTrim then
bloktekst = blok:gsub( args.textTrim .. '$', '' )
else
bloktekst = blok
end
local blockSpriteArgs = {
data = 'BlockSprite',
blok,
tekst = bloktekst,
link = link,
id = id
}
if voorwerpen[i] == '1' or not voorwerpen[i] and voorwerpen[1] == '1' then
blockSpriteArgs.data = 'ItemSprite'
end
local image, spriteCat = sprite.link( blockSpriteArgs )
table.insert( blockSprites, image )
table.insert( categorieen, spriteCat )
end
table.insert( cellen,
'! style="text-align:left" | ' .. table.concat( blockSprites, '<br>' ) .. ( blokArgs.opmerking or '' )
)
local gereedschap = mw.text.trim( simple and 'Gereedschap' or blokArgs[2] or 'Elk' ):gsub( '^%l', string.upper )
local materiaal = mw.text.trim( simple and blokArgs[2] or blokArgs[3] or 'Elk' ):gsub( '^%l', string.upper )
if gereedschap == 'Geen' then
materiaal = gereedschap
end
if materiaal == 'Ijzer' then
materiaal = 'IJzer'
end
if not simple then
local hardheidtekst = tostring( hardheidwaarde ):gsub( '%.', ',' ) -- Vervang decimale punt door komma
if hardheidwaarde == -1 then
hardheidtekst = ( sortable and 'data-sort-value="999" | ' or '' ) .. '∞'
end
table.insert( cellen, '|' .. hardheidtekst )
if toonGereedschap then
local gereedschapcel = '—'
if gereedschap ~= 'Elk' and gereedschap ~= 'Geen' then
local gereedschapnaam = ( materiaal ~= 'Elk' and materiaal .. 'en ' or '' ) .. gereedschap:lower()
local image, spriteCat = sprite.sprite{
data = 'ItemSprite',
( materiaal == 'Elk' and 'Houten ' or '' ) .. gereedschapnaam,
title = gereedschapnaam,
link = gereedschap
}
gereedschapcel = ( sortable and 'data-sort-value="' .. gereedschapnaam .. '" |' or '' ) .. image
table.insert( categorieen, spriteCat )
end
table.insert( cellen, '|' .. gereedschapcel )
end
end
local keuzes = {}
local getKeuze = function( keuze, tekst )
if not keuzes[keuze] then
keuzes[keuze] = f:expandTemplate{ title = 'Table Choice', args = { keuze, '' } }
end
return keuzes[keuze] .. tekst
end
if hardheidwaarde == '?' then
vulCellen( cellen, '|?', 6 )
else
local tijdsduur = function( num )
if num < 0.05 then -- Minimale breektijd van 1 speltick (0,05 seconden)
num = 0.05
else -- Anders moeten ze gebroken worden in een x aantal spelticks van 0,05 seconden
num = math.ceil( num * 20 ) / 20
end
return num
end
if onbreekbaar then
table.insert( cellen, '| ' .. ( sortable and 'data-sort-value="999" ' or '' ) .. getKeuze( 'no_temp', '∞' ) )
if toonGereedschap then
vulCellen( cellen, '|—', 5 )
end
else
local drop = 'yes_temp'
if blokArgs.drop == '0' then
drop = 'partial_temp'
end
local vereistNiveau = onbreekbaar and 999 or materiaalgraad[materiaal]
local voegMateriaalcelToe = function ( materiaal )
local zalVallen = drop
if materiaalgraad[materiaal] < vereistNiveau then
zalVallen = 'no_temp'
end
local breektijd = tijdsduur( hardheidwaarde / materiaalsnelheid[materiaal] * ( zalVallen == 'no_temp' and 5 or 1.5 ) )
local breektijdAP = tostring( breektijd ):gsub( '%.', ',' ) -- Vervang decimale punt door komma
table.insert( cellen, '|' .. getKeuze( zalVallen, breektijdAP ) )
end
if not toonGereedschap or gereedschap == 'Elk' or gereedschap == 'Geen' then
voegMateriaalcelToe( 'Elk' )
if toonGereedschap then
vulCellen( cellen, '|—', 5 )
end
else
for _, materiaal in ipairs{ 'Elk', 'Hout', 'Steen', 'IJzer', 'Diamant', 'Goud' } do
voegMateriaalcelToe( materiaal )
end
end
end
if not simple and ( toonSchaar or toonZwaard ) then
local gereedschappen = {}
if toonSchaar then
table.insert( gereedschappen, 'Schaar' )
end
if toonZwaard then
table.insert( gereedschappen, 'Zwaard' )
end
if hardheidwaarde == '?' then
vulCellen( cellen, '|?', #gereedschappen )
else
local gereedschapsnelheid = {
Schaar = 1,
Zwaard = 1.5
}
if blokken[1] == 'Wol' then
gereedschapsnelheid.Schaar = 5
elseif blokken[1] == 'Bladeren' then
gereedschapsnelheid.Schaar = 15
elseif blokken[1] == 'Spinnenweb' then
gereedschapsnelheid.Zwaard = 15
gereedschapsnelheid.Schaar = 15
end
for _, gereedschap in ipairs( gereedschappen ) do
local gereedschapLaatVallen = blokArgs[mw.ustring.lower( gereedschap )]
if not gereedschapLaatVallen then
table.insert( cellen, '|—' )
else
local zalVallen = 'yes_temp'
if gereedschapLaatVallen == '0' then
zalVallen = 'partial_temp'
end
local breektijd = tijdsduur( hardheidwaarde / gereedschapsnelheid[gereedschap] * 1.5 )
local breektijdAP = tostring( breektijd ):gsub( '%.', ',' ) -- Vervang decimale punt door komma
table.insert( cellen, '|' .. getKeuze( zalVallen, breektijdAP ) )
end
end
end
end
end
if not horizontaal then
cellen = table.concat( cellen, '\n' )
end
table.insert( tabelonderdelen, cellen )
end
if horizontaal then
local blokkenArgs = {}
for _, arg in ipairs{ 1, 'opmerking', 'sprite', 'link', 'voorwerp', 'drop', 2, 3, 'schaar', 'zwaard' } do
if args[arg] then
local kol = 0
for kolwaarde in mw.text.gsplit( args[arg], '%s*;%s*' ) do
kol = kol + 1
if kolwaarde ~= '' then
if not blokkenArgs[kol] then
blokkenArgs[kol] = {}
end
blokkenArgs[kol][arg] = kolwaarde
end
end
end
end
for _, blok in ipairs( blokkenArgs ) do
voegBlokToe( blok )
end
local kolommen = #tabelonderdelen
for rij = 1, #tabelonderdelen[1] do
local cellen = {}
for kol = 1, kolommen do
table.insert( cellen, tabelonderdelen[kol][rij] )
end
table.insert( rijen, table.concat( cellen, '\n' ) )
end
-- Voeg de breektijduitleg toe na de rij voor het blok wanneer de tabel simple is of na de gereedschap- of hardheidrij wanneer de tabel dat niet is
table.insert( rijen, simple and 3 or toonGereedschap and 5 or 4, '! colspan="' .. kolommen + 1 .. '" |' .. getBreektijdhoofd( f ) )
else
voegBlokToe( args )
for _, rij in ipairs( tabelonderdelen ) do
table.insert( rijen, rij )
end
end
table.insert( rijen, '' )
local opmerking = ''
if args.einde or horizontaal then
opmerking = f:preprocess( '<references group="opmerking"/>' )
if args.einde == '2' then
table.insert( rijen, header or getDplVar( 'header' ) )
end
table.insert( rijen, '|}' )
if not horizontaal then
f:callParserFunction( '#dplvar:set',
'breaking header', '',
'breaking verberggereedschap', '',
'breaking verbergschaar', '',
'breaking verbergzwaard', '',
'breaking simple', '',
'breaking sortable', ''
)
end
elseif #dplVars > 0 then
f:callParserFunction( '#dplvar:set', dplVars )
end
return table.concat( rijen, '\n|-\n' ) .. opmerking .. table.concat( categorieen )
end
return p