Модуль:Команда
Материал из Hilarious Wiki
Этот шаблон использует Модуль:Команда, написанный на языке программирования Lua. Пожалуйста, просмотрите wikipedia:Wikipedia:Lua и mw:Extension:Scribunto (обе англ.) для понимания работы модуля. |
Этот шаблон используется для автоматического форматирования команд. Можно копировать команды непосредственно в шаблон (с косой чертой или без неё) или указывать каждый параметр команды как отдельный параметр шаблона.
Любой неуказанный или пустой параметр команды будет заменён соответствующим значением по умолчанию, если эта команда известна, а указанный параметр является допустимым для этой команды. Указанные необязательные параметры будут выведены подобно обязательным вместе с любыми другими параметрами в дополнительной группе. Неуказанные необязательные параметры выведены не будут.
Параметры форматируются следующим образом:
- Параметры, которые для использования команды вводить необязательно, указаны в круглых скобках.
- Если параметр может принять одно из нескольких различающихся значений, то эти значения будут перечислены в квадратных скобках ([]) и разделены символами вертикальной черты, например,
[значение1|значение2]
. - Названия параметров даны курсивом в угловых скобках, например,
<игрок>
. - Значения параметров даны обычным шрифтом и в квадратных скобках, например,
[true]
. - Возможны различные комбинации вышеуказанных способов форматирования по мере необходимости, например,
<действие:[start|stop]>
или<действие:[add <игрок>|remove <игрок>|list|on|off|reload]>
Параметры шаблона
- Чтобы шаблон вывел оставшуюся часть команды, включая необязательные параметры, добавьте к шаблону параметр
|...
. - Чтобы удалить предшествующую команде косую черту, добавьте к шаблону параметр
|/=0
или|черта=0
. - Чтобы изменить страницу, на которую ссылается название команды, добавьте к шаблону параметр
|ссылка=<ссылка>
. - Чтобы название команды не было ссылкой, добавьте к шаблону параметр
|ссылка=нет
. - Чтобы вставить код HTML в команду, добавьте к шаблону параметр
|escape=0
, затем выделите тегами<nowiki>
всё, что похоже на теги HTML, но не является ими. - Если команда длинная и может выйти за пределы экрана, добавьте к шаблону параметр
|длин=1
. Это отобразит команду на новой строке и разрешит переносы строк.
Примеры
- {{Команда|kill}}
-
/kill
- {{Команда|clear|?|diamond}}
-
/clear <игрок> diamond
- {{Команда|give ? diamond 64}}
-
/give <игрок> diamond 64
- {{Команда|give ? diamond 64|...}}
-
/give <игрок> diamond 64 <данные> <NBT теги>
- {{Команда|say I'm saying stuff!}}
-
/say I'm saying stuff!
- {{Команда|op|...}}
-
/op <игрок>
- {{Команда|give|...}}
-
/give <игрок> <предмет> (<количество> <данные> <NBT теги>)
- {{Команда|time|...}}
-
/time <действие:[set|add]> <значение>
- {{Команда|whitelist|...}}
-
/whitelist <действие:[add <игрок>|remove <игрок>|list|on|off|reload]>
- {{Команда|tp|...}}
-
/tp <игрок> [<игрок-цель>|<x> <y> <z>] (<y-поворот> <x-поворот>)
- {{Команда|?|...}}
-
/? ([<страница>|<команда>])
- {{Команда|give ? command_block 1 0 {BlockEntityTag:{Command:"{{Команда|setblock ~ ~ ~ diamond_block}}"<nowiki>}}</nowiki>}}
-
/give <игрок> command_block 1 0 {BlockEntityTag:{Command:"<code class="nowrap">/setblock ~ ~ ~ diamond_block
"}}</code> - {{Команда|длин=1|setblock ~1 ~-1 ~0 mob_spawner 0 replace {EntityId:Chicken, MaxNearbyEntities:10, SpawnCount:6, SpawnRange:2, RequiredPlayerRange:16, MinSpawnDelay:50, MaxSpawnDelay:200, SpawnData:{Riding:{id:"Pig"<nowiki>}}}</nowiki>}}
-
/setblock ~1 ~-1 ~0 mob_spawner 0 replace {EntityId:Chicken, MaxNearbyEntities:10, SpawnCount:6, SpawnRange:2, RequiredPlayerRange:16, MinSpawnDelay:50, MaxSpawnDelay:200, SpawnData:{Riding:{id:"Pig"}}}
Проблемы
- Команды, содержащие знаки равенства и символы вертикальной черты, без обхода этих символов отображаются некорректно. Если команда содержит символы вертикальной черты, замените каждый из них на
{{!}}
. Если команда содержит знаки равенства, при использовании одного параметра шаблона добавьте в начало команды1=
, а при использовании нескольких параметров замените каждый знак равенства на {{=}}. - При использовании команд, содержащих фигурные скобки, необходимо, чтобы параметр-команда не оканчивался на фигурную скобку и чтобы две фигурных скобки подряд нигде не стояли. В таком случае, как
{{Команда|data {some:"data"}}}
, в конец команды следует поставить пробел:{{Команда|data {some:"data"} }}
. В таком случае, как{{Команда|data {some:{more:"data"}}}}
, проблемный участок следует заключить в теги<nowiki>
:{{Команда|data {some:{more:"data"<nowiki>}}</nowiki>}}
или{{Команда|data <nowiki>{some:{more:"data"}}</nowiki>}}
. - Пробелы внутри тегов данных и подкоманд игнорируются, чтобы они считались одним параметром. Это не сработает, если команда содержит несколько отдельных тегов данных или несколько отдельных подкоманд. В таком случае каждому параметру команды должен соответствовать отдельный параметр шаблона.
Расположенная выше документация включена из Модуль:Команда/док.
local p = {}
function p.cmd( f )
local args = f
if f == mw.getCurrentFrame() then
args = f:getParent().args
end
local syntax = mw.loadData( 'Модуль:Команда/Синтаксис' )
local fullCommand
local commandName = args[1]:match( '^%s*/?([^%s]+)' ):lower()
local params = {}
local command = {}
for i, v in ipairs( args ) do
if not fullCommand and v == '...' then
fullCommand = true
elseif i > 1 or v:match( '^%s*/?(.+)' ):lower() ~= commandName then
-- Don't encode if told not to or if there is a sub-command
if args.encode ~= '0' and not v:find( '<!%-%- Команда %-%->' ) then
v = v:gsub( '<', '<' )
end
table.insert( params, mw.text.trim( v ) )
end
end
if #params == 1 and ( not args[2] or args[2] == '...' ) and params[1]:find( '%s' ) then
local startPos, endPos = params[1]:find( '{.+}' )
if not startPos then
startPos, endPos = params[1]:find( '<!%-%- Команда %-%->.+<!%-%- /Команда %-%->' )
end
if startPos then
params[1] = params[1]:sub( 1, startPos ) ..
params[1]:sub( startPos + 1, endPos - 1 ):gsub( '%s', ' ' ) ..
params[1]:sub( endPos )
end
params = mw.text.split( params[1]:match( '^[^%s]+%s(.+)' ), '%s+' )
end
if ( fullCommand or params[1] ) and syntax[commandName] then
local param = 0
function parseParams( defaultParams, sub )
local section = {}
local hasValue
for i, v in ipairs( defaultParams ) do
if type( v ) == 'table' then
local subSection, subHasValue = parseParams( v, true )
if subHasValue then
hasValue = true
end
table.insert( section, subSection )
else
param = param + 1
if params[param] then
hasValue = true
if params[param] ~= '' and params[param] ~= '?' then
table.insert( section, params[param] )
end
end
if not section[i] and ( fullCommand or params[param] == '?' ) then
table.insert( section, v )
end
end
end
section = table.concat( section, ' ' )
if sub then
if not hasValue then
if fullCommand then
section = '(' .. section .. ')'
else
section = nil
end
end
return section, hasValue
else
return section
end
end
command = { parseParams( syntax[syntax[commandName]] or syntax[commandName] ) }
-- Add any extra parameters not defined in the syntax
if #params > param then
for i, v in ipairs( params ) do
if i > param then
table.insert( command, v )
end
end
end
else
command = params
end
if args['ссылка'] then
if args['ссылка']:lower() ~= 'нет' then
commandName = '[[' .. args['ссылка'] .. '|' .. commandName .. ']]'
end
end
table.insert( command, 1, commandName )
local slash = '/'
if args['/'] == '0' or args['черта'] == '0' then
slash = ''
end
local attr
if args['длин'] == '1' then
attr = 'style="display: block; padding: 0.8em 1em; margin-bottom: 0.4em; word-wrap: break-word"'
else
attr = 'class="nowrap"'
end
return '<!-- Команда --><code ' .. attr .. '>' .. slash .. table.concat( command, ' ' ):gsub( ' ', ' ' ) .. '</code><!-- /Команда -->'
end
return p