Модуль:Entity Lookup: различия между версиями

Материал из Space Station 14 Вики
м bruh
Нет описания правки
 
(не показано 69 промежуточных версий 3 участников)
Строка 1: Строка 1:
local prototypes = mw.loadData("Module:Entity Lookup/data")
local p = {}
local JsonPaths = require('Module:JsonPaths')
 
local function safeLoad(page)
local moduleName = JsonPaths.get(page)
local ok, data = pcall(mw.loadData, moduleName)
return ok and (data or {}) or {}
end
 
p.entities = safeLoad("entity prototypes.json")
p.name_overrides = safeLoad("entity name overrides.json")
 
local function buildName(entity, useSuffix)
local name = entity.name or ""
local label = mw.ustring.lower(entity.label or "")
local suffix = ""
 
if useSuffix then
suffix = mw.ustring.lower(entity.suffix or "")
 
if suffix ~= "" then
local parts = {}
for part in tostring(suffix):gmatch("[^,;]+") do
part = mw.text.trim(part)
if part ~= "" then
parts[#parts + 1] = part
end
end
suffix = table.concat(parts, ", ")
end
end
 
if label ~= "" and suffix ~= "" and label == suffix then
suffix = ""
end
 
if label == "" and suffix == "" then
return name
elseif label == "" then
return name .. " (" .. suffix .. ")"
elseif suffix == "" then
return name .. " (" .. label .. ")"
else
return name .. " (" .. label .. ") (" .. suffix .. ")"
end
end
 
 
-- p.getname{args={"FreedomImplant"}}
function p.getname(frame, entid) -- {{#invoke:Entity Lookup|getname|ProtoID}}
local id = frame.args and frame.args[1] or entid
if not id then
return "Не найдено"
end
 
local override = p.name_overrides[id]
if override then
return lower(override)
end
 
local entity = p.entities[id]
if not entity then
return "Не найдено"
end
 
local useSuffix = frame.args and frame.args.suffix and frame.args.suffix ~= ""
return buildName(entity, useSuffix)
end
 
 
-- p.getidbyname{args={"Швабра"}}
function p.getidbyname(frame, entname) -- {{#invoke:Entity Lookup|getidbyname|Название}}
local name = frame.args and frame.args[1] or entname
if not name then return "Не найдено" end
 
for id, overrideName in pairs(p.name_overrides) do
if overrideName == name then
return id
end
end
 
for id, entity in pairs(p.entities) do
if entity.name == name or buildName(entity) == name then
return id
end
end
 
return "Не найдено"
end
 
-- p.getname{args={"FreedomImplant"}}
function p.getdesc(frame, entid) -- {{#invoke:Entity Lookup|getdesc|ProtoID}}
local out = ""
local id = ""
if frame.args[1] ~= nil then id = frame.args[1]
else id = entid end
local entity = p.entities[id]
if entity ~= nil then
out = entity.desc
else
out = "Не найдено"
end
return out
end
 
 
-- p.createtexttooltip{args={"Верхний текст", "FreedomImplant", "Файл:Horns.png"}}
function p.createtexttooltip(frame) -- {{#invoke:Entity Lookup|createtexttooltip|Текст|ProtoID|img=картиночка}}
local out = " "
local entity = p.entities[frame.args[2]]
local stats = frame:preprocess("{{Особое|".. frame.args[2] .."}}")
if entity ~= nil then do
if frame.args["img"] ~= nil then do
out = frame:preprocess("{{Tooltip|".. frame.args[1] .."|".. entity.name .."|".. string.gsub(entity.desc, "\n", "<br>") .."|".. stats .."|img=".. frame.args["img"] .."}}")
end else
out = frame:preprocess("{{Tooltip|".. frame.args[1] .."|".. entity.name .."|".. string.gsub(entity.desc, "\n", "<br>") .."|".. stats .."}}")
end
-- {{Tooltip|Текст|[[картиночка|64x64px|left|middle|link=]] Название|Описание}}
end else
  out = frame:preprocess("{{Tooltip|".. frame.args[1] .."|Не найден|Предмет не найден|img=MobMouse2.png}}")
end
return out
end


local p = {}
p.entities = prototypes.entities


-- p.createtooltip{args={"Верхний текст", "FreedomImplant", "Файл:Honks.gif"}}
-- p.createimagetooltip{args={"Файл:Horns.png", "FreedomImplant", Статы="Имеет 3 заряда"}}
function p.createtooltip(frame) -- {{#invoke:Entity Lookup|createtooltip|Текст|ProtoID|картиночка}}
function p.createimagetooltip(frame) -- {{#invoke:Entity Lookup|createimagetooltip|Картинка|ProtoID|Мета=мета|Статы=статы}}
    local out = " "
local out = " "
    local text = frame.args[1]
local entity = p.entities[frame.args[2]]
    local entity = p.entities[frame.args[2]]
local pic = frame.args[1]
    local pic = frame.args[3]
local meta = frame.args["Мета"]
    print(text)
local stats = frame:preprocess("{{Особое|".. frame.args[2] .."}}")
print(entity)
if meta == nil then
    print(pic)
meta = "64x64px|link="
    -- {{Tooltip|Текст|Название|Описание|[[картиночка|64x64px|left|middle|link=]]}}
end
    out = frame:expandTemplate{ title = "Tooltip", args = { frame.args[1],  entity.name, entity.desc, "[[" .. frame.args[3] .. "|64x64px|left|middle|link=]]"}}
meta = meta:gsub(',', '|')
    return out
pic = "[[" .. frame.args[1] .. "|" .. meta .. "]]"
if entity ~= nil then do
if frame.args[1] ~= nil then do
out = frame:preprocess("{{Tooltip|".. pic .. "|" .. entity.name .. "|" .. entity.desc .. "|" .. stats .."|no-text-decoration=1}}")
end else
out = frame:preprocess("{{Tooltip|[[Файл:MobMouse2.png|64x64px|left|middle|link=]]|" .. entity.name .. "|" .. entity.desc .. "|" .. stats .."|no-text-decoration=1}}")
end
-- {{Tooltip|Текст|[[картиночка|64x64px|left|middle|link=]] Название|Описание}}
end else
  out = frame:preprocess("{{Tooltip|" .. pic .. "|Не найден|Предмет не найден|img=MobMouse2.png|no-text-decoration=1}}")
end
return out
end
end


return p
return p

Текущая версия от 12:59, 2 апреля 2026

Документация

Викиделам привет, остальным рекомендую вернуться на главную.

К функциям

Про модули

Модули - небольшие скрипты, призванные облегчить жизнь всем, кто занимается вики. Модули - почти тоже самое, что и шаблоны, с одним небольшим отличием: модули не просто заменяют один кусочек текста на другой кусочек текста и подставляют в него параметры, но и могут производить некоторые манипуляции с данными, будь то: вычисление сложных математических функций, получение данных из json баз данных и много чего ещё.
Ещё модули отличаются от шаблонов механизмом вызова. Вместо простого {{Название шаблона|Аргументы шаблона}} вы используете следующую конструкцию:

{{#invoke:Название модуля|Функция модуля|Аргументы функции}}

Заметили кое-что? Всё верно, в этой конструкции добавляется ключевое слово #invoke, а после названия модуля необходимо указать название нужной нам функции. Это необходимо потому, что модули не выполняют одну единственную задачу. Этих задач модуль может выполнять хоть 100 штук (если конечно кому-то не лень создавать 100 функций), поэтому нам необходимо указать модулю то, что мы от него хотим в данный конкретно момент.
Аргументы работают так же, как и в шаблонах. Если в документации аргументы задаются через Аргумент1=ПримерноеЗначение, то и при вызове модуля вы должны писать Аргумент1=ВашеЗначение, где Аргумент1 это название аргумента, указанного в документации, а ВашеЗначение это ваше значение, которое вы хотите передать в модуль.
Если же аргумент написан без знака = после него, это значит что аргумент зависит от своей позиции. Всё так же, как и с шаблонами.

Про этот модуль

Этот модуль должен облегчить жизнь всем тем, кто решился поработать с энтити на вики. С его помощью можно "брать" названия и описания энтити (всех, даже животных и стен) прямо из игры и разворачивать их в удобные шаблоны. Сделано это было для того, чтобы не выискивать в локализации нужные названия и описания энтити. Очень полезно!!! Пример вызова функции createtexttooltip модуля Entity Lookup с аргументами "FreedomImplant|img=Файл:Horns.png" {{#invoke:Entity Lookup|createtexttooltip|Текст|FreedomImplant|img=Horns.png}}

ТекстИмплант "свобода"
Этот имплант позволяет пользователю вырваться из наручников до трёх раз, прежде чем он перестанет функционировать.


Very easy to use. Подробнее смотрите на сайте mediawiki.

Функции модуля

createtexttooltip

createtexttooltip позволяет нам создать шаблон Tooltip и наклеить его на указанный в аргументах текст.
{{#invoke:Entity Lookup|createtexttooltip|Текст|ID|img=Horns.png}}

  • Текст - Текст, к которому нужно добавить Tooltip
  • ID - ID энтити из игры (к примеру у коричневой мыши ID - MobMouse1)
  • img (именной, опциональный) - Ссылка на картинку БЕЗ ПРИПИСКИ "Файл:" или "File:". Картинка будет использована как иконка в шаблоне Tooltip.

createimagetooltip

createimagetooltip позволяет нам создать шаблон Tooltip и наклеить его на указанное в аргументах изображение.
{{#invoke:Entity Lookup|createimagetooltip|Картинка|ID|Мета=Мета1,Мета2}}

  • Картинка - Ссылка на картинку, начинающаяся с "Файл:" или "File:". Картинка с наложенным Tooltip будет отображаться там, где вы вызовете модуль.
  • ID - ID энтити из игры (к примеру у коричневой мыши ID - MobMouse1)
  • Мета (именной, опциональный) - "Метаданные" для обработки картинки. То же самое, что вы бы написали после названия картинки в квадратных скобочках на обычной странице. Небольшой нюанс: вместо | мы используем ,(например "64x64px,left,middle,link=")

getname

getname позволяет получить имя предмета в том же виде, в котором оно записано в игре. {{#invoke:Entity Lookup|getname|ID}}

  • ID - ID энтити из игры (к примеру у коричневой мыши ID - MobMouse1)

getdesc

getdesc позволяет получить описание предмета в том же виде, в котором оно записано в игре. {{#invoke:Entity Lookup|getdesc|ID}}

  • ID - ID энтити из игры (к примеру у коричневой мыши ID - MobMouse1)
local p = {}
local JsonPaths = require('Module:JsonPaths')

local function safeLoad(page)
	local moduleName = JsonPaths.get(page)
	local ok, data = pcall(mw.loadData, moduleName)
	return ok and (data or {}) or {}
end

p.entities = safeLoad("entity prototypes.json")
p.name_overrides = safeLoad("entity name overrides.json")

local function buildName(entity, useSuffix)
	local name = entity.name or ""
	local label = mw.ustring.lower(entity.label or "")
	local suffix = ""

	if useSuffix then
		suffix = mw.ustring.lower(entity.suffix or "")

		if suffix ~= "" then
			local parts = {}
			for part in tostring(suffix):gmatch("[^,;]+") do
				part = mw.text.trim(part)
				if part ~= "" then
					parts[#parts + 1] = part
				end
			end
			suffix = table.concat(parts, ", ")
		end
	end

	if label ~= "" and suffix ~= "" and label == suffix then
		suffix = ""
	end

	if label == "" and suffix == "" then
		return name
	elseif label == "" then
		return name .. " (" .. suffix .. ")"
	elseif suffix == "" then
		return name .. " (" .. label .. ")"
	else
		return name .. " (" .. label .. ") (" .. suffix .. ")"
	end
end


-- p.getname{args={"FreedomImplant"}}
function p.getname(frame, entid) -- {{#invoke:Entity Lookup|getname|ProtoID}}
	local id = frame.args and frame.args[1] or entid
	if not id then
		return "Не найдено"
	end

	local override = p.name_overrides[id]
	if override then
		return lower(override)
	end

	local entity = p.entities[id]
	if not entity then
		return "Не найдено"
	end

	local useSuffix = frame.args and frame.args.suffix and frame.args.suffix ~= ""
	return buildName(entity, useSuffix)
end


-- p.getidbyname{args={"Швабра"}}
function p.getidbyname(frame, entname) -- {{#invoke:Entity Lookup|getidbyname|Название}}
	local name = frame.args and frame.args[1] or entname
	if not name then return "Не найдено" end

	for id, overrideName in pairs(p.name_overrides) do
		if overrideName == name then
			return id
		end
	end

	for id, entity in pairs(p.entities) do
		if entity.name == name or buildName(entity) == name then
			return id
		end
	end

	return "Не найдено"
end

-- p.getname{args={"FreedomImplant"}}
function p.getdesc(frame, entid) -- {{#invoke:Entity Lookup|getdesc|ProtoID}}
	local out = ""
	local id = ""
	if frame.args[1] ~= nil then id = frame.args[1] 
	else id = entid end
	local entity = p.entities[id]
	if entity ~= nil then
		out = entity.desc
	else
		out = "Не найдено"
	end
return out
end


-- p.createtexttooltip{args={"Верхний текст", "FreedomImplant", "Файл:Horns.png"}}
function p.createtexttooltip(frame) -- {{#invoke:Entity Lookup|createtexttooltip|Текст|ProtoID|img=картиночка}}
	local out = " "
	local entity = p.entities[frame.args[2]]
	local stats = frame:preprocess("{{Особое|".. frame.args[2] .."}}")
	if entity ~= nil then do
		if frame.args["img"] ~= nil then do
			out = frame:preprocess("{{Tooltip|".. frame.args[1] .."|".. entity.name .."|".. string.gsub(entity.desc, "\n", "<br>") .."|".. stats .."|img=".. frame.args["img"] .."}}")
		end else
			out = frame:preprocess("{{Tooltip|".. frame.args[1] .."|".. entity.name .."|".. string.gsub(entity.desc, "\n", "<br>") .."|".. stats .."}}")
		end
	-- {{Tooltip|Текст|[[картиночка|64x64px|left|middle|link=]] Название|Описание}}
	end else
	   out = frame:preprocess("{{Tooltip|".. frame.args[1] .."|Не найден|Предмет не найден|img=MobMouse2.png}}")
	end
	return out
end


-- p.createimagetooltip{args={"Файл:Horns.png", "FreedomImplant", Статы="Имеет 3 заряда"}}
function p.createimagetooltip(frame) -- {{#invoke:Entity Lookup|createimagetooltip|Картинка|ProtoID|Мета=мета|Статы=статы}}
	local out = " "
	local entity = p.entities[frame.args[2]]
	local pic = frame.args[1]
	local meta = frame.args["Мета"]
	local stats = frame:preprocess("{{Особое|".. frame.args[2] .."}}")
	if meta == nil then
		meta = "64x64px|link="
	end
	meta = meta:gsub(',', '|')
	pic = "[[" .. frame.args[1] .. "|" .. meta .. "]]"
	if entity ~= nil then do
		if frame.args[1] ~= nil then do
			out = frame:preprocess("{{Tooltip|".. pic .. "|" .. entity.name .. "|" .. entity.desc .. "|" .. stats .."|no-text-decoration=1}}")
		end else
			out = frame:preprocess("{{Tooltip|[[Файл:MobMouse2.png|64x64px|left|middle|link=]]|" .. entity.name .. "|" .. entity.desc .. "|" .. stats .."|no-text-decoration=1}}")
		end
	-- {{Tooltip|Текст|[[картиночка|64x64px|left|middle|link=]] Название|Описание}}
	end else
	   out = frame:preprocess("{{Tooltip|" .. pic .. "|Не найден|Предмет не найден|img=MobMouse2.png|no-text-decoration=1}}")
	end
	return out
end


return p