<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://ss14-wiki.rp-s.tech/index.php?action=history&amp;feed=atom&amp;title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C%3ATableOfChemicals</id>
	<title>Модуль:TableOfChemicals - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://ss14-wiki.rp-s.tech/index.php?action=history&amp;feed=atom&amp;title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C%3ATableOfChemicals"/>
	<link rel="alternate" type="text/html" href="https://ss14-wiki.rp-s.tech/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:TableOfChemicals&amp;action=history"/>
	<updated>2026-04-27T23:12:30Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.43.0-rc.0</generator>
	<entry>
		<id>https://ss14-wiki.rp-s.tech/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:TableOfChemicals&amp;diff=3019&amp;oldid=prev</id>
		<title>Atima в 19:32, 10 мая 2024</title>
		<link rel="alternate" type="text/html" href="https://ss14-wiki.rp-s.tech/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:TableOfChemicals&amp;diff=3019&amp;oldid=prev"/>
		<updated>2024-05-10T19:32:30Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Предыдущая версия&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Версия от 19:32, 10 мая 2024&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l237&quot;&gt;Строка 237:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 237:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		[&amp;quot;DummyGrind&amp;quot;] = &amp;quot;Blender.png&amp;quot;, -- Измельчение&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		[&amp;quot;DummyGrind&amp;quot;] = &amp;quot;Blender.png&amp;quot;, -- Измельчение&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		[&amp;quot;DummyJuice&amp;quot;] = &amp;quot;Blender.png&amp;quot;, -- Выжимка&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		[&amp;quot;DummyJuice&amp;quot;] = &amp;quot;Blender.png&amp;quot;, -- Выжимка&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		[&quot;DummyCondense&quot;] = &quot;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Конденсатор газа&lt;/del&gt;.png&quot;,  &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		[&quot;DummyCondense&quot;] = &quot;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Condenser&lt;/ins&gt;.png&quot;,  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		[&quot;Centrifuge&quot;] = &quot;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Центрифуга&lt;/del&gt;.png&quot;,&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		[&quot;Centrifuge&quot;] = &quot;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Centrifuge&lt;/ins&gt;.png&quot;,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		[&quot;Electrolysis&quot;] = &quot;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Электролизер&lt;/del&gt;.png&quot;,&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		[&quot;Electrolysis&quot;] = &quot;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Electrolysis&lt;/ins&gt;.png&quot;,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		[&amp;quot;Holy&amp;quot;] = &amp;quot;Библия.png&amp;quot;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		[&amp;quot;Holy&amp;quot;] = &amp;quot;Библия.png&amp;quot;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Atima</name></author>
	</entry>
	<entry>
		<id>https://ss14-wiki.rp-s.tech/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:TableOfChemicals&amp;diff=3013&amp;oldid=prev</id>
		<title>Atima: Новая страница: «p = {} p.chem = mw.text.jsonDecode(mw.title.new(&quot;User:IanComradeBot/chem_prototypes.json&quot;):getContent()) p.react = mw.text.jsonDecode(mw.title.new(&quot;User:IanComradeBot/react_prototypes.json&quot;):getContent())  p.fillReactTable = function(frame) 	 	local out = &quot;&quot; 	 	for _, reactPrototype in pairs(p.react) do 		if tablelength(reactPrototype.effects) ~= 0 then 			local reactants = {} 			local reactantTemplate = &quot;%s %s&quot; 			 			for reactantId, reactantVa...»</title>
		<link rel="alternate" type="text/html" href="https://ss14-wiki.rp-s.tech/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:TableOfChemicals&amp;diff=3013&amp;oldid=prev"/>
		<updated>2024-05-10T19:18:04Z</updated>

		<summary type="html">&lt;p&gt;Новая страница: «p = {} p.chem = mw.text.jsonDecode(mw.title.new(&amp;quot;User:IanComradeBot/chem_prototypes.json&amp;quot;):getContent()) p.react = mw.text.jsonDecode(mw.title.new(&amp;quot;User:IanComradeBot/react_prototypes.json&amp;quot;):getContent())  p.fillReactTable = function(frame) 	 	local out = &amp;quot;&amp;quot; 	 	for _, reactPrototype in pairs(p.react) do 		if tablelength(reactPrototype.effects) ~= 0 then 			local reactants = {} 			local reactantTemplate = &amp;quot;%s &lt;a href=&quot;#chem_%s&quot;&gt;%s&lt;/a&gt;&amp;quot; 			 			for reactantId, reactantVa...»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;p = {}&lt;br /&gt;
p.chem = mw.text.jsonDecode(mw.title.new(&amp;quot;User:IanComradeBot/chem_prototypes.json&amp;quot;):getContent())&lt;br /&gt;
p.react = mw.text.jsonDecode(mw.title.new(&amp;quot;User:IanComradeBot/react_prototypes.json&amp;quot;):getContent())&lt;br /&gt;
&lt;br /&gt;
p.fillReactTable = function(frame)&lt;br /&gt;
	&lt;br /&gt;
	local out = &amp;quot;&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
	for _, reactPrototype in pairs(p.react) do&lt;br /&gt;
		if tablelength(reactPrototype.effects) ~= 0 then&lt;br /&gt;
			local reactants = {}&lt;br /&gt;
			local reactantTemplate = &amp;quot;%s [[#chem_%s|%s]]&amp;quot;&lt;br /&gt;
			&lt;br /&gt;
			for reactantId, reactantValue in pairs(reactPrototype.reactants) do&lt;br /&gt;
				&lt;br /&gt;
				local reactantChemData = p.chem[reactantId]&lt;br /&gt;
				local reactantText = string.format(reactantTemplate, reactantValue.amount, reactantChemData.id,  reactantChemData.name)&lt;br /&gt;
				if reactantValue.catalyst then&lt;br /&gt;
					reactantText = reactantText .. &amp;quot; (катализатор)&amp;quot;&lt;br /&gt;
				end&lt;br /&gt;
				table.insert(reactants, reactantText)&lt;br /&gt;
			end&lt;br /&gt;
			local templateArgs = {}&lt;br /&gt;
			templateArgs.reactants = table.concat(reactants, &amp;quot;&amp;lt;br&amp;gt;&amp;quot;)&lt;br /&gt;
			&lt;br /&gt;
			local products = {}&lt;br /&gt;
			local productTemplate = &amp;quot;%s [[#chem_%s|%s]]&amp;quot;&lt;br /&gt;
			&lt;br /&gt;
			for productId, productAmount in pairs(reactPrototype.products) do&lt;br /&gt;
				&lt;br /&gt;
				local productChemData = p.chem[productId]&lt;br /&gt;
				local productText = string.format(productTemplate, productAmount, productChemData.id,  productChemData.name)&lt;br /&gt;
				table.insert(products, productText)&lt;br /&gt;
			end&lt;br /&gt;
			-- Эффекты реакции&lt;br /&gt;
			if tablelength(reactPrototype.effects) then&lt;br /&gt;
				for _, effect in pairs(reactPrototype.effects) do&lt;br /&gt;
					if effect.description ~= &amp;quot;&amp;quot; then&lt;br /&gt;
						table.insert(products, effect.description)&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			templateArgs.products = table.concat(products, &amp;quot;&amp;lt;br&amp;gt;&amp;quot;)&lt;br /&gt;
			&lt;br /&gt;
			templateArgs.actions = getActions(reactPrototype)&lt;br /&gt;
			&lt;br /&gt;
			local template = &amp;quot;Строка_реакции&amp;quot;&lt;br /&gt;
			&lt;br /&gt;
			out = out .. frame:expandTemplate{ title = template, args = templateArgs}&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.fillChemTable = function(frame)&lt;br /&gt;
	&lt;br /&gt;
	local out = &amp;quot;&amp;quot;&lt;br /&gt;
	local group = frame.args.group&lt;br /&gt;
	local groups&lt;br /&gt;
	if group ~= nil and group ~= &amp;quot;&amp;quot; then&lt;br /&gt;
		groups = mw.text.split(group, &amp;quot;,&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local additional = frame.args.additional&lt;br /&gt;
	if additional ~= nil and additional ~= &amp;quot;&amp;quot; then&lt;br /&gt;
		&lt;br /&gt;
		local additionalChemPrototypeIds = mw.text.split(additional, &amp;quot;,&amp;quot;)&lt;br /&gt;
		for _, chemPrototypeId in pairs(additionalChemPrototypeIds) do&lt;br /&gt;
			out = out .. fillChemistryRow(chemPrototypeId, frame) &lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	for _, chemPrototype in pairs(p.chem) do&lt;br /&gt;
		&lt;br /&gt;
		if group == nil or group == &amp;quot;&amp;quot; or contains(groups, chemPrototype.group) then&lt;br /&gt;
			out = out .. fillChemistryRow(chemPrototype.id, frame) &lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.fillContentOfDispencer = function(frame)&lt;br /&gt;
	local dispencer = frame.args.dispencer&lt;br /&gt;
	local out = &amp;quot;&amp;quot;&lt;br /&gt;
	for _, chemId in pairs(dispencersContent()[dispencer]) do&lt;br /&gt;
		out = out .. frame:expandTemplate{ title = &amp;quot;Кнопка_реагента&amp;quot;, args = {chemId, &amp;quot;y&amp;quot;}}&lt;br /&gt;
	end&lt;br /&gt;
	return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function dispencersContent()&lt;br /&gt;
	local content = {&lt;br /&gt;
		[&amp;quot;Химикатов&amp;quot;]={&lt;br /&gt;
			&amp;quot;Aluminium&amp;quot;,&amp;quot;Carbon&amp;quot;,&amp;quot;Chlorine&amp;quot;,&amp;quot;Copper&amp;quot;,&amp;quot;Ethanol&amp;quot;,&amp;quot;Fluorine&amp;quot;,&amp;quot;Hydrogen&amp;quot;,&amp;quot;Iodine&amp;quot;,&lt;br /&gt;
			&amp;quot;Iron&amp;quot;,&amp;quot;Lithium&amp;quot;,&amp;quot;Mercury&amp;quot;,&amp;quot;Nitrogen&amp;quot;,&amp;quot;Oxygen&amp;quot;,&amp;quot;Phosphorus&amp;quot;,&amp;quot;Potassium&amp;quot;,&amp;quot;Radium&amp;quot;,&lt;br /&gt;
			&amp;quot;Silicon&amp;quot;,&amp;quot;Sodium&amp;quot;,&amp;quot;Sugar&amp;quot;,&amp;quot;Sulfur&amp;quot;,&amp;quot;SulfuricAcid&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		[&amp;quot;Соды&amp;quot;]={&lt;br /&gt;
			&amp;quot;Water&amp;quot;,&amp;quot;Ice&amp;quot;,&amp;quot;Coffee&amp;quot;,&amp;quot;Cream&amp;quot;,&amp;quot;Tea&amp;quot;,&amp;quot;GreenTea&amp;quot;,&amp;quot;IcedTea&amp;quot;,&amp;quot;IcedGreenTea&amp;quot;,&lt;br /&gt;
			&amp;quot;Cola&amp;quot;,&amp;quot;SpaceMountainWind&amp;quot;,&amp;quot;DrGibb&amp;quot;,&amp;quot;SpaceUp&amp;quot;,&amp;quot;TonicWater&amp;quot;,&amp;quot;SodaWater&amp;quot;,&amp;quot;LemonLime&amp;quot;,&amp;quot;Sugar&amp;quot;,&lt;br /&gt;
			&amp;quot;JuiceOrange&amp;quot;,&amp;quot;JuiceLime&amp;quot;,&amp;quot;JuiceWatermelon&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		[&amp;quot;Алкоголя&amp;quot;]={&lt;br /&gt;
			&amp;quot;LemonLime&amp;quot;,&amp;quot;Sugar&amp;quot;,&amp;quot;JuiceOrange&amp;quot;,&amp;quot;JuiceLime&amp;quot;,&amp;quot;SodaWater&amp;quot;,&amp;quot;TonicWater&amp;quot;,&amp;quot;Beer&amp;quot;,&amp;quot;CoffeeLiqueur&amp;quot;,&lt;br /&gt;
			&amp;quot;Whiskey&amp;quot;,&amp;quot;Wine&amp;quot;,&amp;quot;Vodka&amp;quot;,&amp;quot;Gin&amp;quot;,&amp;quot;Rum&amp;quot;,&amp;quot;Tequila&amp;quot;,&amp;quot;Vermouth&amp;quot;,&amp;quot;Cognac&amp;quot;,&lt;br /&gt;
			&amp;quot;Ale&amp;quot;,&amp;quot;Mead&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	return content&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p.readArg = function(frame)&lt;br /&gt;
	return mw.text.nowiki(p.chem[frame.args[1]][frame.args[2]])&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function contains(list, x)&lt;br /&gt;
	for _, v in ipairs(list) do&lt;br /&gt;
		if v == x then return true end&lt;br /&gt;
	end&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
fillChemistryRow = function(chemPrototypeId, frame)&lt;br /&gt;
	&lt;br /&gt;
	local out = &amp;quot;&amp;quot;&lt;br /&gt;
	local chemPrototype = p.chem[chemPrototypeId]&lt;br /&gt;
	local templateArgs = {}&lt;br /&gt;
	templateArgs.id = chemPrototype.id&lt;br /&gt;
	templateArgs.name = chemPrototype.name&lt;br /&gt;
	templateArgs.description = chemPrototype.desc .. &amp;quot; На вид &amp;quot; .. chemPrototype.physicalDesc .. &amp;quot;.&amp;quot;&lt;br /&gt;
	templateArgs.color = chemPrototype.color&lt;br /&gt;
	templateArgs.textColor = chemPrototype.textColor&lt;br /&gt;
	templateArgs.effects = getEffects(chemPrototype.id)&lt;br /&gt;
	templateArgs.recipes_count = tablelength(chemPrototype.recipes)&lt;br /&gt;
	&lt;br /&gt;
	templateArgs.reactants = &amp;quot;&amp;quot;&lt;br /&gt;
	templateArgs.products = &amp;quot;&amp;quot;&lt;br /&gt;
	templateArgs.action = &amp;quot;&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
	if templateArgs.recipes_count == 0 then&lt;br /&gt;
		templateArgs.recipes_count = 1 -- Для заполнения параметра rowspan строки&lt;br /&gt;
		out = out .. frame:expandTemplate{ title = &amp;quot;Первая_строка_химического_вещества&amp;quot;, args = templateArgs}&lt;br /&gt;
	else&lt;br /&gt;
		local firstReact = true&lt;br /&gt;
		for _, reactId in pairs(chemPrototype.recipes) do&lt;br /&gt;
			&lt;br /&gt;
			local reactPrototype = p.react[reactId]&lt;br /&gt;
			local reactants = {}&lt;br /&gt;
			local reactantTemplate = &amp;quot;%s [[#chem_%s|%s]]&amp;quot;&lt;br /&gt;
			&lt;br /&gt;
			for reactantId, reactantValue in pairs(reactPrototype.reactants) do&lt;br /&gt;
				&lt;br /&gt;
				local reactantChemData = p.chem[reactantId]&lt;br /&gt;
				local reactantText = string.format(reactantTemplate, reactantValue.amount, reactantChemData.id,  reactantChemData.name)&lt;br /&gt;
				if reactantValue.catalyst then&lt;br /&gt;
					reactantText = reactantText .. &amp;quot; (катализатор)&amp;quot;&lt;br /&gt;
				end&lt;br /&gt;
				table.insert(reactants, reactantText)&lt;br /&gt;
			end&lt;br /&gt;
			templateArgs.reactants = table.concat(reactants, &amp;quot;&amp;lt;br&amp;gt;&amp;quot;)&lt;br /&gt;
			&lt;br /&gt;
			local products = {}&lt;br /&gt;
			local productTemplate = &amp;quot;%s [[#chem_%s|%s]]&amp;quot;&lt;br /&gt;
			&lt;br /&gt;
			for productId, productAmount in pairs(reactPrototype.products) do&lt;br /&gt;
				&lt;br /&gt;
				local productChemData = p.chem[productId]&lt;br /&gt;
				local productText = string.format(productTemplate, productAmount, productChemData.id,  productChemData.name)&lt;br /&gt;
				table.insert(products, productText)&lt;br /&gt;
			end&lt;br /&gt;
			-- Эффекты реакции&lt;br /&gt;
			if tablelength(reactPrototype.effects) then&lt;br /&gt;
				for _, effect in pairs(reactPrototype.effects) do&lt;br /&gt;
					if effect.description ~= &amp;quot;&amp;quot; then&lt;br /&gt;
						table.insert(products, effect.description)&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			templateArgs.products = table.concat(products, &amp;quot;&amp;lt;br&amp;gt;&amp;quot;)&lt;br /&gt;
			&lt;br /&gt;
			templateArgs.actions = getActions(reactPrototype)&lt;br /&gt;
			&lt;br /&gt;
			local template = &amp;quot;Строка_химического_вещества&amp;quot;&lt;br /&gt;
			if firstReact then&lt;br /&gt;
				template = &amp;quot;Первая_строка_химического_вещества&amp;quot;&lt;br /&gt;
				firstReact = false&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			out = out .. frame:expandTemplate{ title = template, args = templateArgs}&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
getActions = function(reactPrototype)&lt;br /&gt;
	&lt;br /&gt;
	local actions = {}&lt;br /&gt;
	&lt;br /&gt;
	-- Температура&lt;br /&gt;
	local minMaxTemplate = &amp;quot;выше %sК и ниже %sК&amp;quot;&lt;br /&gt;
	local minTemplate = &amp;quot;выше %sК&amp;quot;&lt;br /&gt;
	local maxTemplate = &amp;quot;ниже %sК&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
	local hasMin = reactPrototype.minTemp ~= 0&lt;br /&gt;
	local hasMax = reactPrototype.hasMax&lt;br /&gt;
	&lt;br /&gt;
	local tempString = &amp;quot;&amp;quot;&lt;br /&gt;
	if hasMax and hasMin then&lt;br /&gt;
		tempString = string.format(minMaxTemplate, reactPrototype.minTemp, reactPrototype.maxTemp)&lt;br /&gt;
	elseif hasMin then&lt;br /&gt;
		tempString = string.format(minTemplate, reactPrototype.minTemp)&lt;br /&gt;
	elseif hasMax then&lt;br /&gt;
		tempString = string.format(maxTemplate, reactPrototype.maxTemp)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	for _, mixingCategory in pairs(reactPrototype.mixingCategories) do&lt;br /&gt;
		local image = getMixingImage(mixingCategory.id)&lt;br /&gt;
		if image ~= nil then&lt;br /&gt;
			table.insert(actions, string.format(&amp;quot;[[File:%s|32px|link=]]&amp;quot;, image)) -- Картинка&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		table.insert(actions, mixingCategory.name .. &amp;quot; &amp;quot; .. tempString) -- Название&lt;br /&gt;
		&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return table.concat(actions, &amp;quot;&amp;lt;br&amp;gt;&amp;quot;)&lt;br /&gt;
	&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
getMixingImage = function(mixingId)&lt;br /&gt;
	&lt;br /&gt;
	local images = {&lt;br /&gt;
		[&amp;quot;DummyMix&amp;quot;] = &amp;quot;Beaker.png&amp;quot;, -- Смешивание&lt;br /&gt;
		[&amp;quot;DummyGrind&amp;quot;] = &amp;quot;Blender.png&amp;quot;, -- Измельчение&lt;br /&gt;
		[&amp;quot;DummyJuice&amp;quot;] = &amp;quot;Blender.png&amp;quot;, -- Выжимка&lt;br /&gt;
		[&amp;quot;DummyCondense&amp;quot;] = &amp;quot;Конденсатор газа.png&amp;quot;, &lt;br /&gt;
		[&amp;quot;Centrifuge&amp;quot;] = &amp;quot;Центрифуга.png&amp;quot;,&lt;br /&gt;
		[&amp;quot;Electrolysis&amp;quot;] = &amp;quot;Электролизер.png&amp;quot;,&lt;br /&gt;
		[&amp;quot;Holy&amp;quot;] = &amp;quot;Библия.png&amp;quot;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	return images[mixingId]&lt;br /&gt;
	&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function getEffects(chemPrototypeId)&lt;br /&gt;
	&lt;br /&gt;
	local effects = &amp;quot;&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
	local chemPrototype = p.chem[chemPrototypeId]&lt;br /&gt;
	if chemPrototype.metabolisms == nil then&lt;br /&gt;
		return effects&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	for metabolismGroupKey, metabolismGroup in pairs(chemPrototype.metabolisms) do&lt;br /&gt;
		effects = attachAsNewLine(effects, string.format(&amp;quot;* %s (%s единиц в секунду)&amp;quot;, metabolismGroupKey, metabolismGroup.rate))&lt;br /&gt;
		for _, effect in pairs(metabolismGroup.effects) do&lt;br /&gt;
			if effect.description ~= &amp;quot;&amp;quot; then&lt;br /&gt;
				effects = attachAsNewLine(effects, &amp;quot;** &amp;quot;..effect.description)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	return effects&lt;br /&gt;
  &lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function tablelength(T)&lt;br /&gt;
  local count = 0&lt;br /&gt;
  for _ in pairs(T) do count = count + 1 end&lt;br /&gt;
  return count&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function attachAsNewLine(originalStr, joinStr)&lt;br /&gt;
	return originalStr .. &amp;quot;\n&amp;quot; .. joinStr &lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Atima</name></author>
	</entry>
</feed>