Редактирование:StorageInterface

Внимание! Вы не авторизовались на сайте. Ваш IP-адрес будет публично видимым, если вы будете вносить любые правки. Если вы войдёте или создадите учётную запись, правки вместо этого будут связаны с вашим именем пользователя, а также у вас появятся другие преимущества.

Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.
Текущая версия Ваш текст
Строка 1: Строка 1:
<div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output">Данная библиотека для Inner Core позволяет описать взаимодействие блоков с трубами, воронками и прочими предметами для транспортировки предметов и жидкостей с помощью&nbsp;интерфейсов хранилищ, а так же добавляет методы для извлечения и загрузки предметов и жидкостей. <div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output">
+
<div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output">
 +
Данная библиотека для Inner Core позволяет описать взаимодействие блоков с трубами, воронками и прочими предметами для транспортировки предметов и жидкостей с помощью&nbsp;интерфейсов хранилищ, а так же добавляет методы для извлечения и загрузки предметов и жидкостей.
 +
<div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output">
 
== Загрузка ==
 
== Загрузка ==
  
Строка 5: Строка 7:
 
|-
 
|-
 
| Версия
 
| Версия
| style="width: 36px;" | Ссылка
+
| Ссылка
| style="width: 393px;" | Список изменений
+
| style="width: 280px;" | Список изменений
| style="width: 250px;" | Дата релиза
+
| style="width: 350px;" | Дата релиза
|-
 
| '''12'''
 
| style="width: 36px;" | [https://github.com/MineExplorer/IC_Libraries/releases/tag/storage-interface-v12 Скачать]
 
| style="width: 393px;" |
 
*getOutputSlots возвращает пустые слоты tile entity
 
 
 
| style="width: 250px;" | 07.08.2021
 
|-
 
| '''11'''
 
| style="width: 36px;" | [https://github.com/MineExplorer/IC_Libraries/releases/tag/storage-interface-v11 Скачать]
 
| style="width: 393px;" |
 
*Библиотека поддерживает&nbsp;предметы с отрицательными ид
 
*В интерфейс хранилища добавлены следующие поля:<br/> -&nbsp;liquidUnitRatio<br/> -&nbsp;getInputTank(side)<br/> -&nbsp;getOutputTank(side)<br/> -&nbsp;receiveLiquid(liquidStorage, liquid, amount)<br/> -&nbsp;extractLiquid(liquidStorage, liquid, amount)<br/> И удалены поля: addLiquid. getLiquid, getLiquidStored, getLiquidStorage
 
 
 
| style="width: 250px;" | 01.04.2021
 
|-
 
| '''10'''
 
| style="width: 36px;" | [https://github.com/MineExplorer/IC_Libraries/releases/tag/storage-interface-v10 Скачать]
 
| style="width: 393px;" |
 
*Метод newStorage переименован в getInterface
 
*Исправлен стак предметов при использовании функций валидации и макс. стака в ItemContainer из библиотеки
 
 
 
| style="width: 250px;" | 09.01.2021
 
|-
 
| '''9'''
 
| style="width: 36px;" | [https://github.com/MineExplorer/IC_Libraries/releases/tag/storage-interface-v9 Скачать]
 
| style="width: 393px;" |
 
*Новые методы для интерфейсов хранилищ:<br/> - getContainerSlots()<br/> -&nbsp;getInputSlots(side)<br/> -&nbsp;getReceivingItemCount(item, side)<br/> -&nbsp;addItemToSlot(name, item, maxCount)<br/> -&nbsp;clearContainer()
 
*Исправлен стандартный интерфейс TIleEntity
 
 
 
| style="width: 250px;" | 14.12.2020
 
 
|-
 
|-
 
| '''8'''
 
| '''8'''
| style="width: 36px;" | [https://github.com/MineExplorer/IC_Libraries/releases/tag/storage-interface-v8 Скачать]
+
| [https://github.com/MineExplorer/IC_Libraries/releases/tag/storage-interface-v8 Скачать]
| style="width: 393px;" |  
+
| style="width: 280px;" | - Поддержка мультиплеера<br/> - Введены общие интерфейсы для всех контейнеров<br/> - Добавлены методы установки валидации предметов и макс стака для слотов в ItemContainer
*Поддержка мультиплеера  
+
| style="width: 350px;" | 10.12.2020
*Добавлены стандартные интерфейсы для всех видов контейнеров  
 
*Добавлены методы для получение интерфейсов хранилищ
 
*Добавлены методы для установки валидации предметов и макс стака&nbsp;слотов в ItemContainer  
 
 
 
| style="width: 250px;" | 10.12.2020
 
 
|-
 
|-
 
| '''7'''
 
| '''7'''
| style="text-align: center; width: 36px;" | -
+
| style="text-align: center;" | -
| style="width: 393px;" |  
+
| style="width: 280px;" | - В описании слота в интерфейсе хранилища теперь можно указать стороны, через которые с ним можно взаимодействовать
- В описании слота в интерфейсе хранилища теперь можно указать стороны, через которые с ним можно взаимодействовать
+
| style="width: 350px;" | 10.06.2020
 
 
| style="width: 250px;" | 10.06.2020
 
 
|-
 
|-
 
| '''6'''
 
| '''6'''
| style="width: 36px;" | [https://yadi.sk/d/TITakdpdsjIGug Скачать]
+
| [https://yadi.sk/d/TITakdpdsjIGug Скачать]
| style="width: 393px;" | - Библиотека обновлена на InnerCore для Horizon: добавлена поддержка новых ванильных контейнеров.
+
| style="width: 280px;" | - Библиотека обновлена на InnerCore для Horizon: добавлена поддержка новых ванильных контейнеров.
| style="width: 250px;" | 18.04.2020
+
| style="width: 350px;" | 18.04.2020
 
|-
 
|-
 
| '''5'''
 
| '''5'''
| style="width: 36px;" | [https://yadi.sk/d/Om5TRGdlhylfQA Скачать]
+
| [https://yadi.sk/d/Om5TRGdlhylfQA Скачать]
| style="width: 393px;" | - Исправлена ошибка взаимодействия с tile entity без интерфейса хранилища в методе StorageInterface.transportLiquid
+
| style="width: 280px;" | - Исправлена ошибка взаимодействия с tile entity без интерфейса хранилища в методе StorageInterface.transportLiquid
| style="width: 250px;" | 09.03.2020
+
| style="width: 350px;" | 09.03.2020
 
|-
 
|-
 
| '''4'''
 
| '''4'''
| style="width: 36px;" | [https://yadi.sk/d/1gBu4a-fEme-jA Скачать]
+
| [https://yadi.sk/d/1gBu4a-fEme-jA Скачать]
| style="width: 393px;" |  
+
| style="width: 280px;" |  
*Улучшена работа с жидкостями  
+
- Улучшена работа с жидкостями<br/> - В интерфейс добавлено поле liquidStorage
*В интерфейс добавлено поле liquidStorage  
 
  
| style="width: 250px;" | 05.03.2020
+
| style="width: 350px;" | 05.03.2020
 
|-
 
|-
 
| '''3'''
 
| '''3'''
| style="width: 36px;" | [https://drive.google.com/file/d/1Hsp2nLIER0wF-ZzDvdsy1btxWFhnebv1/view?usp=sharing Скачать]
+
| [https://drive.google.com/file/d/1Hsp2nLIER0wF-ZzDvdsy1btxWFhnebv1/view?usp=sharing Скачать]
| style="width: 393px;" | - Релиз библиотеки
+
| style="width: 280px;" | релиз библиотеки
| style="width: 250px;" | 02.02.2020
+
| style="width: 350px;" | 02.02.2020
 
|}
 
|}
</div> <div class="mw-parser-output">&nbsp;</div> </div> </div> </div> </div>  
+
</div> </div> </div> </div> </div> </div> </div>  
 
== Импорт ==
 
== Импорт ==
  
Для добавления библиотеки в мод ее файл ''([https://github.com/MineExplorer/IC_Libraries/blob/master/library/StorageInterface.js StorageInterface.js])'' нужно добавить в директорию ''lib/'' в директории мода (если таковой нету, то ее нужно создать).
+
Для добавления библиотеки в мод ее файл ''([https://github.com/MineExplorer/IndustrialCraft_2/blob/master/IndustrialCraft²/lib/StorageInterface.js StorageInterface.js])'' нужно добавить в директорию ''lib/'' в директории мода (если таковой нету, то ее нужно создать).
 
 
Для импорта библиотеки в мод в заголовочном файле (или если он отсутствует в первом файле кода) следует добавить строку:
 
<pre>IMPORT("StorageInterface");
 
</pre>
 
  
 +
Для импорта библиотеки в мод в заголовочном файле (или если он остутвует в первом файле кода) следует добавить строку:
 +
<pre>IMPORT("StorageInterface");</pre>
 +
<div class="mw-parser-output"><div class="mw-parser-output">
 
== Интерфейсы хранилищ блоков ==
 
== Интерфейсы хранилищ блоков ==
  
 
Интерфейсы хранилищ объединяют в себе функции для работы с контейнерами и хранилищем жидкости и позволяют описать логику передачи предметов и жидкостей. В библиотеке есть стандартные интерфейсы для ванильных контейнеров и TileEntity, но вы можете зарегистрировать свой собственный для вашего TileEntity.
 
Интерфейсы хранилищ объединяют в себе функции для работы с контейнерами и хранилищем жидкости и позволяют описать логику передачи предметов и жидкостей. В библиотеке есть стандартные интерфейсы для ванильных контейнеров и TileEntity, но вы можете зарегистрировать свой собственный для вашего TileEntity.
<div class="mw-parser-output"><div class="mw-parser-output">
+
 
 
=== Регистрация интерфейса&nbsp;хранилища ===
 
=== Регистрация интерфейса&nbsp;хранилища ===
  
''StorageInterface.createInterface(id блока, прототип интерфейса).''
+
''StorageInterface.createInterface(id блока, прототип интерфейса).''<br/> <br/> Прототип интерфейса выглядит так:
 
 
Все параметры слотов и функции прототипа интерфейса опциональны.<br/> Прототип интерфейса выглядит так:
 
 
<syntaxhighlight lang="JavaScript">StorageInterface.createInterface(id блока, {
 
<syntaxhighlight lang="JavaScript">StorageInterface.createInterface(id блока, {
 
     slots: {
 
     slots: {
 
         "slot1": {
 
         "slot1": {
             input: boolean, // может ли слот принимать предметы
+
             input: true/false, // может ли слот принимать предметы
             output: boolean, // может ли слот отдавать предметы
+
             output: true/false, // может ли слот отдавать предметы
             // Сторона блока, через которую доступен слот.
+
             isValid: function(item, side, tileEntity){ // может ли слот принять предмет item со стороны side
            // Значение - число или одна из настроек: "horizontal", "verctical", "down", "up".
+
                 return true/false;
            side: int | string,
 
            // Максимальное количество предметов в слоте
 
           maxStack: int,
 
            // Может ли слот принять предмет item со стороны side
 
            isValid: function(item, side, tileEntity) {
 
                 return boolean;
 
 
             },
 
             },
             // Можно ли извлечь предмет из слота (item - предмет в слоте)
+
             canOutput: function(item, side, tileEntity){ // можно ли извлечь предмет из слота (item - предмет в слоте)
            canOutput: function(item, side, tileEntity) {
+
                 return true/false;
                 return boolean;
 
 
             }
 
             }
 
         },
 
         },
         // Все слоты с именем slot и индексами от 2 до 10 (slot2, ..., slot10).
+
         "slot2": {
        "slot^2-10": {
 
 
             ...
 
             ...
 
         },
 
         },
 
         ...
 
         ...
 
     },
 
     },
   liquidUnitRatio: 1, // количество вёдер жидкости в базовом юните жидкости
 
 
   // функции интерфейса
 
   // функции интерфейса
 
});</syntaxhighlight>
 
});</syntaxhighlight>
</div> </div>
+
 
 
=== <br/> Функции интерфейса хранилища ===
 
=== <br/> Функции интерфейса хранилища ===
  
Строка 144: Строка 95:
 
| name, id, count, data, extra
 
| name, id, count, data, extra
 
| Устанавливает предмет в слот контейнера.
 
| Устанавливает предмет в слот контейнера.
 +
|-
 +
| '''clearContainer'''
 +
| -
 +
| Очищает содержимое контейнера
 
|-
 
|-
 
| '''isValidInput'''
 
| '''isValidInput'''
Строка 152: Строка 107:
 
| item, side, maxCount
 
| item, side, maxCount
 
| Функция добавления предмета. Возвращает количество добавленных предметов.
 
| Функция добавления предмета. Возвращает количество добавленных предметов.
|-
 
| '''addItemToSlot'''
 
| name, item, maxCount
 
| Добавляет предмет в слот контейнера, maxCount - максимальное количество предмета, которое будет добавлено.
 
|-
 
|
 
'''getReceivingItemCount'''
 
 
| item, side
 
| Возвращает сколько предметов из стака контейнер может принять.
 
|-
 
|
 
'''getContainerSlots'''
 
 
| -
 
| Возвращает все слоты контейнера
 
|-
 
| '''getInputSlots'''
 
| side
 
| Возвращяет названия слотов входа,&nbsp;доступных со стороны ''side''.
 
 
|-
 
|-
 
| '''getOutputSlots'''
 
| '''getOutputSlots'''
 
| side
 
| side
| Возвращает названия слотов выхода,&nbsp;доступных со стороны ''side''.
+
| Возвращяет названия доступных слотов выхода со стороны ''side''.
|-
 
| '''clearContainer'''
 
| -
 
| Очищает содержимое контейнера
 
 
|-
 
|-
 
| '''canReceiveLiquid'''
 
| '''canReceiveLiquid'''
Строка 187: Строка 118:
 
| '''canTransportLiquid'''
 
| '''canTransportLiquid'''
 
| liquid, side
 
| liquid, side
| Может ли TileEntity отдать жидкость с именем ''liquid ''со стороны ''side''.&nbsp;По умолчанию возвращает true.
+
| Может ли TileEntity отдать жидкость с именем ''liquid ''со стороны ''side''.&nbsp;По умолчанию возвращает true если в liquidStorage установлен лимит для этой жидкости.
 
|-
 
|-
| '''receiveLiquid'''
+
| '''addLiquid'''
| liquidStorage, liquid, amount
+
| liquid, amount
|  
+
| Функция добавление жидкости. По умолчанию работает с liquidStorage.
Функция добавление жидкости в хранилище.<br/> '''liquidStorage'''&nbsp;- хранилище, принимающее жидкость<br/> '''liquid '''- название жидкости<br/> '''amount '''- количество жидкости
 
 
 
 
|-
 
|-
| '''extractLiquid'''
+
| '''getLiquid'''
| liquidStorage, liquid, amount
+
| liquid, amount
| Функция извлечения жидкости из хранилища.
+
| Функция извлечения жидкости.&nbsp;По умолчанию работает с liquidStorage.
 
|-
 
|-
| '''getInputTank'''
+
| '''getLiquidStored'''
| side
+
| storageName
 
|  
 
|  
Возвращает входное&nbsp;хранилище жидкости TileEntity. По умолчанию возвращает&nbsp;liquidStorage.<br/> '''side&nbsp;'''- сторона с которой будет производиться работа
+
Функция получения жидкости, хранящейся в tile entity. Позволяет возвращать разные жидкости для входа и выхода.<br/> '''storageName''' - "input" для получения жидкости на вход и "output" для жидкости на выход.
  
 
|-
 
|-
| '''getOutputTank'''
+
| '''getLiquidStorage'''
| side
+
| storageName
 
|  
 
|  
Возвращает выходное хранилище жидкости TileEntity.&nbsp;По умолчанию возвращает&nbsp;liquidStorage.<br/> '''side&nbsp;'''- сторона с которой будет производиться работа
+
Возвращает хранилище жидкости.&nbsp;По умолчанию возвращает liquidStorage из TileEntity. Позволяет использовать альтернативные&nbsp;хранилища жидкостей.<br/> '''storageName''' - "input" для хранилища, принимающего жидкость, и "output" для отдающего.
  
 
|}
 
|}
<div class="mw-parser-output"><br/> В экземпляре интерфейса также есть следующие поля:</div> <div class="mw-parser-output">''isNativeContainer ''- true если контейнер является ванильным, false если&nbsp;из TileEntity.</div> <div class="mw-parser-output">''container ''- контейнер;<br/> ''tileEntity ''- если создан для TileEntity.</div> <div class="mw-parser-output">&nbsp;</div> <div class="mw-parser-output">Регистрация интерфейса для TileEntity&nbsp;на примере железной печки из мода IndustrialCraft 2</div> <syntaxhighlight lang="JavaScript">StorageInterface.createInterface(BlockID.ironFurnace, {
+
<div class="mw-parser-output">&nbsp;</div> <div class="mw-parser-output">В экземпляре интерфейса также есть следующие поля:</div> <div class="mw-parser-output">''isNativeContainer ''- true если контейнер является ванильным, false если&nbsp;из TileEntity.</div> <div class="mw-parser-output">''container ''- контейнер;<br/> ''tileEntity ''- если создан для TileEntity.</div> <div class="mw-parser-output">&nbsp;</div> <div class="mw-parser-output">Регистрация интерфейса для TileEntity&nbsp;на примере железной печки из мода IndustrialCraft 2</div> <syntaxhighlight lang="JavaScript">StorageInterface.createInterface(BlockID.ironFurnace, {
 
     slots: {
 
     slots: {
 
         "slotSource": {
 
         "slotSource": {
 
             input: true,
 
             input: true,
            side: "up",
 
 
             isValid: function(item, side){
 
             isValid: function(item, side){
                 return Recipes.getFurnaceRecipeResult(item.id, "iron");
+
                 return side != 0 && Recipes.getFurnaceRecipeResult(item.id, "iron");
 
             }
 
             }
 
         },
 
         },
 
         "slotFuel": {
 
         "slotFuel": {
             input: true,
+
             input: true,  
            side: "horizontal",
 
 
             isValid: function(item, side){
 
             isValid: function(item, side){
                 return Recipes.getFuelBurnDuration(item.id, item.data) > 0;
+
                 return side != 1 && Recipes.getFuelBurnDuration(item.id, item.data) > 0;
 
             }
 
             }
 
         },
 
         },
 
         "slotResult": {output: true}
 
         "slotResult": {output: true}
 
     }
 
     }
});</syntaxhighlight>
+
});
<div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output">
+
</syntaxhighlight>
 +
</div> <div class="mw-parser-output"><div class="mw-parser-output">
 +
<div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output">
 
=== Методы для получения&nbsp;интерфесов хранилищ ===
 
=== Методы для получения&nbsp;интерфесов хранилищ ===
  
*'''StorageInterface.getInterface('''''container ''или ''tileEntity''''')''' - возвращает интерфейс хранилища для TileEntity или контейнера.  
+
*'''StorageInterface.newStorage('''''container ''или ''tileEntity''''')''' - возвращает новый интерфейс хранилища для TileEntity или контейнера.  
*'''StorageInterface.getStorage('''''blockSource, x, y, z''''')''' - возвращает интерфейс хранилища для контейнера на координатах
+
*'''StorageInterface.getStorage('''''blockSource, x, y, z''''')''' -&nbsp;Возвращает интерфейс хранилища для блока, являющегося контейнером.
*'''StorageInterface.getLiquidStorage('''''blockSource, x, y, z''''')''' - возвращает интерфейс для TileEntity,&nbsp;хранящего жидкости,&nbsp;по&nbsp;координатам.  
+
*'''StorageInterface.getLiquidStorage('''''blockSource, x, y, z''''')''' - возвращает интерфейс хранилища, если на указанных координатах находится TileEntity с хранилищем жидкости.  
 
*'''StorageInterface.getNeighbourStorage('''''blockSource, coords, side''''')''' - возвращает интерфейс хранилища для соседнего блока со стороны side.  
 
*'''StorageInterface.getNeighbourStorage('''''blockSource, coords, side''''')''' - возвращает интерфейс хранилища для соседнего блока со стороны side.  
*'''StorageInterface.getNeighbourLiquidStorage('''''blockSource, coords, side''''')''' - возвращает интерфейс для соседнего TileEntity, хранящего жидкости,&nbsp;со стороны side
+
*'''StorageInterface.getNeighbourLiquidStorage('''''blockSource, coords, side''''')''' - возвращает интерфейс хранилища для соседнего блока со стороны side,&nbsp;если там находится TileEntity с хранилищем жидкости.
</div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div>
+
</div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div>
 +
 
 
== Остальные методы StorageInterface ==
 
== Остальные методы StorageInterface ==
  
Строка 290: Строка 220:
 
| style="width: 114px;" | liquid, maxAmount, inputStorage, outputStorage, inputSide
 
| style="width: 114px;" | liquid, maxAmount, inputStorage, outputStorage, inputSide
 
| style="width: 458px;" |  
 
| style="width: 458px;" |  
Похож на предыдущий, но позволяет извлечь жидкость из TileEntity<br/> '''liquid '''- название жидкости. Если не указано, то извлечёт любую жидкость&nbsp;из&nbsp;''outputStorage'',&nbsp;если она может быть принята в&nbsp;''inputStorage.''<br/> '''inputStorage&nbsp;'''- интерфейс хранилища или TileEntity,&nbsp;принимающий жидкость<br/> '''outputStorage&nbsp;'''- интерфейс хранилища, из которого будет извлечена жидкость<br/> '''inputSide '''- сторона блока, которая будет принимать жидкость.
+
Похож на предыдущий, но позволяет извлечь жидкость из TileEntity<br/> '''liquid '''- название жидкости. Если не указно, то извлечёт любую жидкость&nbsp;из&nbsp;''outputStorage'',&nbsp;если она может быть принята в&nbsp;''inputStorage.''<br/> '''inputStorage&nbsp;'''- интерфейс хранилища или TileEntity,&nbsp;принимающий жидкость<br/> '''outputStorage&nbsp;'''- интерфейс хранилища, из которого будет извлечена жидкость<br/> '''inputSide '''- сторона блока, которая будет принимать жидкость.
  
 
Возвращает количество переданной жидкости.
 
Возвращает количество переданной жидкости.
Строка 307: Строка 237:
  
 
|}
 
|}
</div> </div> </div> </div>
+
</div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div>

Обратите внимание, что все добавления и изменения текста статьи рассматриваются как выпущенные на условиях лицензии GNU Free Documentation License 1.3 или более поздняя (см. Mineprogramming wiki:Авторские права). Если вы не хотите, чтобы ваши тексты свободно распространялись и редактировались любым желающим, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого.
НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ МАТЕРИАЛЫ, ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ!