|
|
| (не показано 160 промежуточных версий 4 участников) |
| Строка 1: |
Строка 1: |
| __NOTOC__{{Cargo Guides}}
| | {{docpage}}{{TOC hidden}} |
| '''Грузы''' — это товары и материалы, доступные для покупки через консоль заказа грузов за соответствующую каждому товару стоимость. Они могут включать оборудование, инструменты, ресурсы и другие предметы, необходимые для работы и развития станции.
| | {{OnLua|Сущность|module1=Сущность|module2=Сущность/поля|module3=GetField}} |
|
| |
|
| {{ModernTitle|Механика|h3}} | | Модульный набор {{tl|Модуль:Сущность}} + {{tl|Модуль:Сущность/поля}} + {{tl|Модуль:GetField}} предназначен для: |
| * Заказ товаров осуществляется через консоль заказа грузов [[Файл:Консоль заказа грузов.png|32px|link=]], после чего они доставляются на торговом шаттле отдела снабжения. | | * автоматической сборки карточек сущностей (компонентов и прототипов) по их ID; |
| * Купленные товары размещаются на специальных поддонах жёлтого цвета [[Файл:Cargo pallet buy.png|32px|link=]], которые находятся на Автоматическом Торговом Посту (Automated Trade Station). | | * описания полей в шаблонах компонентов (какие поля идут в карточку, как подписаны); |
| * Для продажи снаряжения используются поддоны зелёного цвета [[Файл:Cargo pallet sell.png|32px|link=]], также расположенные на Автоматическом Торговом Посту. | | * удобного доступа к данным из JSON (как простыми значениями, так и готовыми вызовами шаблонов). |
|
| |
|
| {{ModernTitle|Список грузов снабжения|h1}}
| | Ниже описан общий принцип работы и отдельные режимы. |
| <tabs class="tabs-no-background">
| |
|
| |
|
| <tab name="Арсенал" id="Armory" style="width:100%">
| | == Общий принцип работы == |
| | * В шаблонах компонентов/прототипов (<code>Template:Component/...</code>, <code>Template:prototype/...</code>) через {{tl|Модуль:Сущность/поля}} описываются поля: |
| | ** '''лейблы''' (<code>cardLabel_*</code>) и '''содержимое''' (<code>cardContent_*</code>), заголовки (<code>title_*</code>) и т. п.; |
| | ** '''мета‑информация''' о том, какие ключи доступны для <code>card</code> / <code>title</code> и в каком порядке. |
| | * {{tl|Модуль:Сущность}} по ID сущности: |
| | ** находит связанные с ней компоненты и прототипы по JSON‑данным; |
| | ** для каждого компонента/прототипа читает шаблоны и метаданные; |
| | ** собирает все поля в единую структуру; |
| | ** формирует один вызов карточки <code><nowiki>{{карточка/сущность|...}}</nowiki></code> (и блоки заголовков). |
| | * Внутри полей можно писать вики‑параметры <code>{{{...}}}</code> и вызывать дополнительные модули. |
| | * {{tl|Модуль:GetField}} даёт доступ к JSON‑данным на низком уровне: |
| | ** как «расплющенный» набор параметров (<code>flattenField</code>); |
| | ** как отдельные значения (<code>get</code>); |
| | ** как готовые вызовы шаблонов с нужными параметрами (<code>getTpl</code>, <code>getTplProto</code>). |
|
| |
|
| <div class="cargo-group">
| | == Модуль: Сущность/поля == |
| {{Шаблон:Prototypes/Механика/Груз|ArmorySmg|CrateArmorySMG.png}}
| | Шаблоны компонентов используют модуль <code>Сущность/поля</code> для объявления полей, которые будут собираться в карточку. |
| {{Шаблон:Prototypes/Механика/Груз|ArmoryShotgun|WeaponShotgunEnforcer.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|SecurityRiot|ClothingOuterArmorRiot.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|TrackingImplant|Implanter.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|TrainingBombs|TrainingBomb.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|ArmoryLaser|WeaponLaserCarbine.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|ArmoryPistol|WeaponPistolMk58.png}}
| |
| </div> | |
|
| |
|
| </tab>
| | Пример шаблона компонента: |
|
| |
|
| <tab name="Атмосфера" id="Atmospherics" style="width:100%"> | | <pre> |
| | {{#invoke:Сущность/поля|main |
| | |cardLabel_Стоимость = [[Стоимость]] |
| | |cardContent_Стоимость = '''{{{price}}}''' |
| | }} |
| | </pre> |
|
| |
|
| <div class="cargo-group">
| | Другой компонент может добавлять тот же ключ: |
| {{Шаблон:Prototypes/Механика/Груз|AtmosphericsAir|AirCanister.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|AtmosphericsOxygen|OxygenCanister.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|AtmosphericsLiquidOxygen|OxygenCanister.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|AtmosphericsNitrogen|NitrogenCanister.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|AtmosphericsLiquidNitrogen|NitrogenCanister.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|AtmosphericsCarbonDioxide|LiquidCarbonDioxideCanister.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|AtmosphericsLiquidCarbonDioxide|LiquidCarbonDioxideCanister.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|AtmosphericsStorage|StorageCanister.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|AtmosphericsPlasma|PlasmaCanister.png}}
| |
| </div>
| |
|
| |
|
| </tab> | | <pre> |
| | {{#invoke:Сущность/поля|main |
| | |cardContent_Стоимость = '''{{{superPrice}}}''' |
| | }} |
| | </pre> |
|
| |
|
| <tab name="Снабжение" id="Cargo" style="width:100%"> | | Особенности: |
| | * Пара <code>cardLabel_<Ключ></code> / <code>cardContent_<Ключ></code> описывает одну строку карточки (лейбл и содержимое). |
| | * Если несколько шаблонов дают один и тот же <code>cardContent_Ключ</code>, содержимое '''объединяется''', а лейбл берётся первый непустой. |
| | * То же относится к другим режимам, перечисленным в мета‑JSON шаблона (разделы <code>card</code>, <code>title</code> и т. п.), которые читает {{tl|Модуль:Сущность}}. |
|
| |
|
| <div class="cargo-group">
| | == Модуль: Сущность == |
| {{Шаблон:Prototypes/Механика/Груз|CargoOreBox|OreBox.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|CargoLuxuryHardsuit|CrateCargoLuxuryHardsuit.png}}
| |
| </div>
| |
|
| |
|
| </tab>
| | === p.get: основная сборка карточки === |
| | Вызов: |
|
| |
|
| <tab name="Экстренные" id="Emergency" style="width:100%"> | | <pre> |
| | {{#invoke:Сущность|get |
| | | <ID или список ID> |
| | | blacklist=... |
| | | whitelist=... |
| | | ignoreComponents=... |
| | | ignorePrototypes=... |
| | }} |
| | </pre> |
|
| |
|
| <div class="cargo-group"> | | * '''1‑й параметр''' — <code>id</code> или список <code>id</code> через запятую. |
| {{Шаблон:Prototypes/Механика/Груз|EmergencyExplosive|ClothingHeadHelmetBombSuit.png}}
| | * По этому ID модуль находит: |
| {{Шаблон:Prototypes/Механика/Груз|EmergencyFire|FireExtinguisher.png}}
| | ** '''компоненты''' из <code>component.json</code>; |
| {{Шаблон:Prototypes/Механика/Груз|EmergencyInternals|ClothingMaskBreath.png}}
| | ** '''прототипы''' из <code>prototype.json</code>; |
| {{Шаблон:Prototypes/Механика/Груз|EmergencyInternalsLarge|ClothingMaskBreath.png}}
| | и для каждого — соответствующие шаблоны <code>Template:component/...</code> / <code>Template:prototype/...</code>. |
| {{Шаблон:Prototypes/Механика/Груз|EmergencyRadiation|CrateEmergencyRadiation.png}}
| | * Шаблоны описывают свои поля через <code>Сущность/поля</code>. |
| {{Шаблон:Prototypes/Механика/Груз|EmergencyInflatablewall|InflatableWallStack.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|EmergencyNitrogenTanks|NitrogenTank.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|EmergencyBiosuit|ClothingHeadHatHoodBioGeneral.png}}
| |
| </div> | |
|
| |
|
| </tab> | | После сборки модуль: |
| | * формирует один вызов <code><nowiki>{{карточка/сущность|...}}</nowiki></code> со всеми разделами и полями; |
| | * дополняет выход при необходимости (блоки title и т. п.); |
| | * прогоняет результат через <code>frame:preprocess</code>, чтобы отрендерить разметку. |
|
| |
|
| <tab name="Инженерия" id="Engineering" style="width:100%"> | | Параметры фильтрации: |
| | * {{пм|blacklist}} — список <code>режим_Ключ</code> через запятую, чтобы исключить поле: |
| | ** пример: <code>blacklist=card_Наносит повреждения,title_Что‑то</code>; |
| | * {{пм|whitelist}} — наоборот, список разрешённых <code>режим_Ключ</code>, остальные игнорируются; |
| | * {{пм|ignoreComponents}} / {{пм|ignoreComponent}} — список имён компонентов через запятую, которые полностью игнорируются для этого вызова; |
| | * {{пм|ignorePrototypes}} / {{пм|ignorePrototype}} — аналогично для прототипов. |
|
| |
|
| <div class="cargo-group">
| | Пример простой сборки (через шаблон‑обёртку): |
| {{Шаблон:Prototypes/Механика/Груз|EngineeringCableLv|CableApcStack.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|EngineeringCableMv|CableMVStack.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|EngineeringCableHv|CableHVStack.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|EngineeringFoamGrenade|MetalFoamGrenade.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|EngineeringCableBulk|Coilall-30.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|EngineeringElectricalSupplies|ToolboxElectrical.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|StationBeaconBundle|DefaultStationBeaconUnanchored.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|EngineeringJetpack|JetpackBlue.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|EngineeringMiniJetpack|JetpackMini.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|AirlockKit|ToolboxElectrical.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|EvaKit|ClothingHeadHelmetEVA.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|EngineeringRCDAmmo|RCD.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|EngineeringRCD|RCD.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|EngineeringParticleDecelerators|WeaponParticleDecelerator.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|EngineeringSpaceHeater|SpaceHeater.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|EngineAmeJar|AmeJar.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|EngineSingularityGenerator|SingularityGenerator.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|EngineSingularityContainment|ContainmentFieldGenerator.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|EngineSingularityEmitter|Emitter.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|EngineSingularityCollector|RadiationCollector.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|EngineParticleAccelerator|ParticleAcceleratorControlBox.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|EngineSolar|SolarAssemblyFlatpack.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|EngineTeslaGenerator|TeslaGenerator.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|EngineTeslaCoil|TeslaCoil.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|EngineTeslaGroundingRod|TeslaGroundingRod.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|CrateVendingMachineRestockEngineering|BaseVendingMachineRestock.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|CrateVendingMachineRestockGames|VendingMachineRestockGames.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|CrateVendingMachineRestockSalvageEquipment|BaseVendingMachineRestock.png}}
| |
| </div>
| |
|
| |
|
| </tab> | | <pre> |
| | {{Сущность/карточка|MyEntityId}} |
| | </pre> |
|
| |
|
| <tab name="Еда" id="Food" style="width:100%"> | | где в шаблоне <code>Сущность/карточка</code> внутри: |
|
| |
|
| <div class="cargo-group"> | | <pre> |
| {{Шаблон:Prototypes/Механика/Груз|FoodPizza|FoodPizzaMargheritaSlice.png}} | | {{#invoke:Сущность|get|{{{1}}}}} |
| {{Шаблон:Prototypes/Механика/Груз|FoodPizzaLarge|FoodPizzaMargherita.png}}
| | </pre> |
| {{Шаблон:Prototypes/Механика/Груз|FoodMRE|FoodSnackNutribrick.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|FoodCook|ReagentContainerFlour.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|FoodDinnerware|FoodPlateTin.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|FoodBarSupply|RandomDrinkGlass.png}} | |
| {{Шаблон:Prototypes/Механика/Груз|FoodSoftdrinks|DrinkColaCan.png}} | |
| {{Шаблон:Prototypes/Механика/Груз|FoodSoftdrinksLarge|DrinkColaBottleFull.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|FoodCrateKvassTank|KvassTank.png}}
| |
| </div> | |
|
| |
|
| </tab>
| | === p.preview: предпросмотр полей конкретного шаблона === |
| | Используется для проверки, что компонент/прототип правильно описал свои поля. |
|
| |
|
| <tab name="Развлечения" id="Fun" style="width:100%"> | | <pre> |
| | {{#invoke:Сущность|preview |
| | | Component/meleeWeapon |
| | }} |
| | </pre> |
|
| |
|
| <div class="cargo-group"> | | * Показывает, какие <code>card</code> / <code>title</code>‑поля объявлены в <code>Template:Component/meleeWeapon</code>. |
| {{Шаблон:Prototypes/Механика/Груз|FunInstrumentsVariety|AccordionInstrument.png}}
| | * Удобно при разработке шаблонов компонентов. |
| {{Шаблон:Prototypes/Механика/Груз|FunInstrumentsBrass|TubaInstrument.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|FunInstrumentsString|BassGuitarInstrument.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|FunInstrumentsWoodwind|HarmonicaInstrument.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|FunInstrumentsKeyedPercussion|SynthesizerInstrument.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|FunInstrumentsSpecial|GunpetInstrument.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|FunArtSupplies|CrayonBox.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|FunParty|FoodCakeBirthday.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|CrateFunWaterGuns|WeaponWaterPistol.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|FunPlushies|PlushieBee.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|FunLizardPlushies|PlushieLizard.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|FunBoardGames|d6Dice.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|FunSadTromboneImplants|Implanter.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|FunLightImplants|Implanter.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|FunBoxing|ClothingHandsGlovesBoxingRed.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|FunPirate|CratePirateChestCaptain.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|FunToyBox|CrateFunToyBox.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|FunBikeHornImplants|Implanter.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|FunMysteryFigurines|MysteryFigureBox.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|FunDartsSet|Dart.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|FunCrateGambling|SpaceCash1000000.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|ChurchOrganInstrument|ChurchOrganInstrument.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|PianoInstrument|PianoInstrument.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|UprightPianoInstrument|UprightPianoInstrument.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|VibraphoneInstrument|VibraphoneInstrument.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|MarimbaInstrument|MarimbaInstrument.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|TubaInstrument|TubaInstrument.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|HarpInstrument|HarpInstrument.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|TimpaniInstrument|TimpaniInstrument.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|TaikoInstrument|TaikoInstrument.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|ContrabassInstrument|ContrabassInstrument.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|MinimoogInstrument|MinimoogInstrument.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|TomDrumsInstrument|TomDrumsInstrument.png}}
| |
| </div>
| |
|
| |
|
| </tab> | | === p.jsonList: вывод JSON в виде списка === |
| | Режим похож на стандартный <code>arraymap</code>, но работает с JSON. |
|
| |
|
| <tab name="Гидропоника" id="Hydroponics" style="width:100%"> | | <pre> |
| | {{#invoke:Сущность|jsonList |
| | | <json или {{{...}}}> |
| | | type = list / enum |
| | | prefix = * |
| | | sep = : |
| | | key_pattern = (.*) |
| | | key_replace = \1 |
| | | value_pattern = (.*) |
| | | value_replace = \1 |
| | }} |
| | </pre> |
|
| |
|
| <div class="cargo-group">
| | Примеры JSON: |
| {{Шаблон:Prototypes/Механика/Груз|HydroponicsSeedsExotic|BananaSeeds.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|HydroponicsSeedsMedicinal|GalaxythistleSeeds.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|HydroponicsTools|HydroponicsToolMiniHoe.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|HydroponicsSeeds|AppleSeeds.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|BulkPlantBGone|Jug.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|CrateVendingMachineRestockNutriMax|BaseVendingMachineRestock.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|CrateVendingMachineRestockSeeds|BaseVendingMachineRestock.png}}
| |
| </div>
| |
|
| |
|
| </tab> | | <pre> <!-- <syntaxhighlight lang=json> --> |
| | { |
| | "Blunt": 10, |
| | "Slash": 5 |
| | } |
| | </pre> <!-- </syntaxhighlight> --> |
|
| |
|
| <tab name="Животные" id="Livestock" style="width:100%">
| | или |
|
| |
|
| <div class="cargo-group"> | | <pre> <!-- <syntaxhighlight lang=json> --> |
| {{Шаблон:Prototypes/Механика/Груз|LivestockBee|MobBee.png}}
| | ["Knife", "Sword", "Bat"] |
| {{Шаблон:Prototypes/Механика/Груз|LivestockButterfly|MobButterfly.png}}
| | </pre> <!-- </syntaxhighlight> --> |
| {{Шаблон:Prototypes/Механика/Груз|LivestockCat|MobCat.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|LivestockChicken|MobChicken.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|LivestockCrab|MobCrab.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|LivestockDuck|MobDuckMallard.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|LivestockCorgi|MobCorgi.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|LivestockPupCorgi|MobCorgiPuppy.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|LivestockCow|MobCow.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|LivestockGoat|MobGoat.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|LivestockGoose|MobGoose.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|LivestockGorilla|MobGorilla.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|LivestockMonkeyCube|MonkeyCubeBox.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|LivestockKoboldCube|KoboldCubeBox.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|LivestockMouse|MobMouse.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|LivestockParrot|MobParrot.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|LivestockPenguin|MobPenguin.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|LivestockPig|MobPig.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|LivestockSnake|MobSnake.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|LivestockHamster|MobHamster.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|LivestockLizard|MobLizard.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|LivestockKangaroo|MobKangaroo.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|LivestockMothroach|MobMothroach.png}}
| |
| </div> | |
|
| |
|
| </tab> | | Основные опции: |
| | * {{пм|type}}: |
| | ** <code>list</code> — список строк (с префиксом, например <code>* </code>); |
| | ** <code>enum</code> — перечисление через запятую (<code>A, B, C</code> без префикса). |
| | * {{пм|prefix}} — префикс строки списка (по умолчанию <code>* </code>). |
| | * {{пм|sep}} — разделитель для <code>ключ: значение</code> (по умолчанию <code>: </code>). |
| | * {{пм|key_pattern}} / {{пм|key_replace}} — regex и замена для ключей. |
| | * {{пм|value_pattern}} / {{пм|value_replace}} — regex и замена для значений. |
|
| |
|
| <tab name="Материалы" id="Materials" style="width:100%"> | | Дополнительно: |
| | * в шаблоне замены поддерживаются: |
| | ** <code>\1</code> — собственное значение (ключ или значение); |
| | ** <code>\2</code> в <code>value_replace</code> — '''сырой ключ''' (после <code>key_pattern</code>, но до <code>key_replace</code>); |
| | ** <code>\2</code> в <code>key_replace</code> — итоговое отформатированное значение (после <code>value_replace</code>). |
|
| |
|
| <div class="cargo-group">
| | Пример, где сначала форматируем тип урона, а затем подставляем его в описание: |
| {{Шаблон:Prototypes/Механика/Груз|MaterialGlass|SheetGlass.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|MaterialSteel|SheetSteel.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|MaterialPlastic|SheetPlastic.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|MaterialBrass|SheetBrass.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|MaterialPlasteel|SheetPlasteel.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|MaterialTextiles|MaterialCloth.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|MaterialPlasma|SheetPlasma.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|CardboardMaterial|MaterialCardboard.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|PaperMaterial|SheetPaper.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|MaterialFuelTank|WeldingFuelTank.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|MaterialWaterTank|WaterTank.png}}
| |
| </div>
| |
|
| |
|
| </tab> | | <pre> |
| | {{#invoke:Сущность|jsonList |
| | | {{{damage.types}}} |
| | | type = enum |
| | | key_replace = <nowiki>\1</nowiki> <!-- "Blunt" --> |
| | | value_replace = <nowiki>'''\1''' \2</nowiki> <!-- "'''10''' Blunt" --> |
| | }} |
| | </pre> |
|
| |
|
| <tab name="Медицина" id="Medical" style="width:100%">
| | === p.json: превращение JSON в вызовы шаблонов === |
| | Режим для случаев, когда в JSON лежит список эффектов/объектов, и нужно по каждому вызвать отдельный шаблон. |
|
| |
|
| <div class="cargo-group"> | | <pre> |
| {{Шаблон:Prototypes/Механика/Груз|MedicalSupplies|Medkit.png}} | | {{#invoke:Сущность|json |
| {{Шаблон:Prototypes/Механика/Груз|MedicalChemistrySupplies|Beaker.png}}
| | | <json или {{{...}}}> |
| {{Шаблон:Prototypes/Механика/Груз|MedicalChemistryVials|BaseChemistryEmptyVial.png}} | | | <путь_к_шаблону> |
| {{Шаблон:Prototypes/Механика/Груз|EmergencyBurnKit|MedkitBurn.png}} | | }} |
| {{Шаблон:Prototypes/Механика/Груз|EmergencyToxinKit|MedkitToxin.png}}
| | </pre> |
| {{Шаблон:Prototypes/Механика/Груз|EmergencyO2Kit|MedkitO2.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|EmergencyBruteKit|MedkitBrute.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|EmergencyAdvancedKit|MedkitAdvanced.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|EmergencyRadiationKit|MedkitRadiation.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|MedicalBodybags|BodyBag.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|MedicalBiosuit|ClothingHeadHatHoodBioGeneral.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|MedicalMindShieldImplants|Implanter.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|ChemistryP|CrateChemistrySecure.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|ChemistryS|CrateChemistrySecure.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|CrateChemistryD|CrateChemistrySecure.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|CrateVendingMachineRestockMedical|BaseVendingMachineRestock.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|CrateVendingMachineRestockChemVend|BaseVendingMachineRestock.png}}
| |
| </div> | |
|
| |
|
| </tab> | | * '''1‑й параметр / <code>json=</code>''' — строка JSON. |
| | * '''2‑й параметр / <code>template=</code>''' — путь к шаблону, например <code>Component/adjustPlant</code>. |
|
| |
|
| <tab name="Наука" id="Science" style="width:100%">
| | Ожидаемый формат JSON‑массива: |
|
| |
|
| <div class="cargo-group"> | | <pre> <!-- <syntaxhighlight lang=json> --> |
| {{Шаблон:Prototypes/Механика/Груз|ArtifactContainer|CrateArtifactContainer.png}} | | [ |
| {{Шаблон:Prototypes/Механика/Груз|RandomArtifact|RandomArtifactSpawner.png}} | | { |
| {{Шаблон:Prototypes/Механика/Груз|ScienceBiosuit|ClothingHeadHatHoodBioScientist.png}} | | "!type:PlantAdjustNutrition": { |
| {{Шаблон:Prototypes/Механика/Груз|CrewMonitoring|CrewMonitoringServer.png}}
| | "amount": 0.1 |
| {{Шаблон:Prototypes/Механика/Груз|CrateVendingMachineRestockRobotics|BaseVendingMachineRestock.png}}
| | } |
| </div> | | }, |
| | { |
| | "!type:PlantAdjustWeeds": { |
| | "amount": 2 |
| | } |
| | }, |
| | { |
| | "!type:PlantAdjustPests": { |
| | "amount": 2 |
| | } |
| | } |
| | ] |
| | </pre> <!-- </syntaxhighlight> --> |
|
| |
|
| </tab>
| | Для каждого элемента создаётся вызов: |
|
| |
|
| <tab name="Служба безопасности" id="Security" style="width:100%"> | | <pre> |
| | {{Component/adjustPlant |
| | |id=!type:PlantAdjustNutrition |
| | |amount=0.1 |
| | }} |
| | {{Component/adjustPlant |
| | |id=!type:PlantAdjustWeeds |
| | |amount=2 |
| | }} |
| | {{Component/adjustPlant |
| | |id=!type:PlantAdjustPests |
| | |amount=2 |
| | }} |
| | </pre> |
|
| |
|
| <div class="cargo-group"> | | Особенности: |
| {{Шаблон:Prototypes/Механика/Груз|SecurityArmor|ClothingOuterArmorBulletproof.png}} | | * Если JSON — объект вида <code>{ "id1": {...}, "id2": {...} }</code>, происходит аналогичный проход по парам <code>ключ → объект</code>. |
| {{Шаблон:Prototypes/Механика/Груз|SecurityHelmet|ClothingHeadHelmetBasic.png}}
| | * Все вызовы склеиваются через перевод строки и прогоняются через <code>frame:preprocess</code>, поэтому внутри шаблона можно использовать любую вики‑разметку. |
| {{Шаблон:Prototypes/Механика/Груз|SecurityNonLethal|WeaponDisabler.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|SecuritySupplies|BoxMagazine.png}} | |
| {{Шаблон:Prototypes/Механика/Груз|SecurityRestraints|Handcuffs.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|SecurityBiosuit|ClothingHeadHatHoodBioSecurity.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|SecurityBarrier|DeployableBarrier.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|CrateVendingMachineRestockSecTech|BaseVendingMachineRestock.png}}
| |
| </div> | |
|
| |
|
| </tab> | | == Модуль: GetField == |
| | Модуль <code>GetField</code> используется для доступа к тем же JSON‑данным <code>.../data</code>, но на более низком уровне. |
|
| |
|
| <tab name="Сервис" id="Service" style="width:100%">
| | === p.flattenField: расплющивание записи в параметры === |
| | <pre> |
| | {{#invoke:GetField|flattenField |
| | | <id> |
| | | <путь_к_json_странице> |
| | }} |
| | </pre> |
|
| |
|
| <div class="cargo-group">
| | Например: |
| {{Шаблон:Prototypes/Механика/Груз|ServiceJanitorial|SprayBottle.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|ServiceLightsReplacement|LightBulb.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|ServiceLightsHoliday|LightBulb.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|MousetrapBoxes|Mousetrap.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|ServiceTheatre|ClothingMaskMime.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|ServiceSmokeables|CigCartonGreen.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|ServiceCustomSmokable|CigCartonGreen.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|ServiceBureaucracy|Pen.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|ServiceFaxMachine|FaxMachineBase.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|ServicePersonnel|PilotIDCard.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|ServiceBooks|CrateServiceBooks.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|ServiceGuidebooks|CrateServiceBooks.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|ServiceSodaDispenser|DrinkSugarJug.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|ServiceBoozeDispenser|DrinkSugarJug.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|ServiceBoxes|CrateServiceBox.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|ServiceJanitorBiosuit|ClothingHeadHatHoodBioJanitor.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|ServiceFoodCartHot|FoodCartHot.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|ServiceFoodCartCold|FoodCartCold.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|ServiceAnimalCarrier|PetCarrier.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|JanitorExplosive|ClothingHeadHelmetJanitorBombSuit.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|ServiceJanitorTrolley|JanitorialTrolley.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|ServiceCandles|Candle.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|CrateVendingMachineRestockBooze|BaseVendingMachineRestock.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|CrateVendingMachineRestockChefvend|BaseVendingMachineRestock.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|CrateVendingMachineRestockClothes|BaseVendingMachineRestock.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|CrateVendingMachineRestockAutoDrobe|BaseVendingMachineRestock.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|CrateVendingMachineRestockDinnerware|BaseVendingMachineRestock.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|CrateVendingMachineRestockCondimentStation|BaseVendingMachineRestock.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|CrateVendingMachineRestockGames|BaseVendingMachineRestock.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|CrateVendingMachineRestockHotDrinks|BaseVendingMachineRestock.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|CrateVendingMachineRestockPTech|BaseVendingMachineRestock.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|CrateVendingMachineRestockRobustSoftdrinks|BaseVendingMachineRestock.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|CrateVendingMachineRestockSmokes|BaseVendingMachineRestock.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|CrateVendingMachineRestockVendomat|BaseVendingMachineRestock.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|CrateVendingMachineRestockHappyHonk|BaseVendingMachineRestock.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|CrateVendingMachineRestockGetmoreChocolateCorp|BaseVendingMachineRestock.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|CrateVendingMachineRestockChang|BaseVendingMachineRestock.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|CrateVendingMachineRestockDiscountDans|BaseVendingMachineRestock.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|CrateVendingMachineRestockDonut|BaseVendingMachineRestock.png}}
| |
| {{Шаблон:Prototypes/Механика/Груз|ServiceLoreBooks|BookGrav.png}}
| |
| </div>
| |
|
| |
|
| </tab> | | <pre> |
| | {{#invoke:GetField|flattenField |
| | | MyEntityId |
| | | component/item.json |
| | }} |
| | </pre> |
| | |
| | Возвращает строку вида: |
| | |
| | <pre> |
| | damage.types={"Blunt":10}|wieldSound=someSound|... |
| | </pre> |
| | |
| | Особенности: |
| | * Вложенные объекты кодируются в JSON и заворачиваются в <code><nowiki><nowiki></nowiki></code>, чтобы их можно было безопасно передавать как параметр. |
| | * Массивы кодируются в JSON без <code><nowiki><nowiki></nowiki></code>, чтобы удобно обрабатывать их модулями вроде <code>Сущность.jsonList</code>. |
| | |
| | Этот режим используется внутри <code>GetField.getTpl</code> и других обёрток. |
| | |
| | === p.get: получение значения по пути === |
| | <pre> |
| | {{#invoke:GetField|get |
| | | <id или пусто для "default"> |
| | | <путь_к_json_странице> |
| | | <ключ.с.точками> |
| | }} |
| | </pre> |
|
| |
|
| <tab name="Шаттл" id="Shuttle" style="width:100%">
| | Примеры: |
|
| |
|
| <div class="cargo-group"> | | <pre> |
| {{Шаблон:Prototypes/Механика/Груз|ShuttleThruster|Thruster.png}} | | {{#invoke:GetField|get |
| {{Шаблон:Prototypes/Механика/Груз|ShuttleGyroscope|Gyroscope.png}}
| | | MyEntityId |
| </div> | | | component/item.json |
| | | damage.types |
| | }} |
| | </pre> |
|
| |
|
| </tab>
| | Если в JSON: |
|
| |
|
| </tabs><!-- | | <pre> <!-- <syntaxhighlight lang=json> --> |
| -->{{#css: | | "damage": { |
| #Armory .груз__header, #Security .груз__header {
| | "types": { |
| --color: #ab2121;
| | "Blunt": 10 |
| | } |
| } | | } |
| | </pre> <!-- </syntaxhighlight> --> |
| | |
| | то результатом будет: |
| | |
| | <pre> |
| | {"Blunt":10} |
| | </pre> |
| | |
| | то есть: |
| | * для таблиц модуль пытается сделать <code>mw.text.jsonEncode(v)</code> и вернуть JSON‑строку; |
| | * для простых значений возвращается строка <code>tostring(v)</code>. |
| | |
| | Если <code>keyPath</code> пуст, возвращается весь объект (как JSON). |
| | |
| | === p.getTpl: вызов шаблона по данным JSON === |
| | <pre> |
| | {{#invoke:GetField|getTpl |
| | | <id> |
| | | <путь_к_json_странице> |
| | | <путь_к_шаблону> |
| | }} |
| | </pre> |
|
| |
|
| #Engineering .груз__header, #Atmospherics .груз__header, #Shuttle .груз__header { | | Пример: |
| --color: #b4a327;
| | |
| } | | <pre> |
| | {{#invoke:GetField|getTpl |
| | | MyEntityId |
| | | component/item.json |
| | | Component/meleeWeapon |
| | }} |
| | </pre> |
|
| |
|
| #Cargo .груз__header, #Materials .груз__header {
| | Работа: |
| --color: #c56c20;
| | * внутри вызывает <code>flattenField</code>, получая строку <code>key=value|...</code>; |
| }
| | * формирует строку вида: |
|
| |
|
| #Emergency .груз__header, #Livestock .груз__header {
| | <pre> |
| --color: #8a999c;
| | {{Component/meleeWeapon |
| } | | |id=MyEntityId |
| | |damage.types=... |
| | |... |
| | }} |
| | </pre> |
|
| |
|
| #Service .груз__header, #Hydroponics .груз__header, #Fun .груз__header, #Food .груз__header {
| | * и прогоняет её через <code>frame:preprocess</code>, возвращая итоговый рендер. |
| --color: #418934;
| |
| }
| |
|
| |
|
| #Medical .груз__header {
| | Это удобный способ «подключить» шаблон компонента к данным из JSON без ручного перечисления параметров. |
| --color: #4c75b7;
| |
| }
| |
|
| |
|
| #Science .груз__header {
| | === p.getTplProto: вызов шаблона по прототипам === |
| --color: #7535a5;
| | <pre> |
| }
| | {{#invoke:GetField|getTplProto |
| | | <searchId> |
| | | <protoId> |
| | | <путь_к_шаблону> |
| }} | | }} |
| | </pre> |
| | |
| | * Ищет в <code>prototype.json</code> все записи, где <code>protoId</code> встречается у <code>searchId</code>. |
| | * Для каждого найденного ID вызывает <code>getTpl</code> и возвращает все вызовы, склеенные через перевод строки и отрендеренные. |
| | |
| | Используется для случаев, когда сущность использует '''несколько''' прототипов одного типа, и нужно вывести по одному шаблону на каждый прототип. |
| | |
| | == Типичный рабочий поток == |
| | # В JSON‑файлах (<code>component.json</code>, <code>prototype.json</code> и др.) описываются сущности и связи компонент/прототипов. |
| | # Для каждого компонента/прототипа создаются шаблоны <code>Template:Component/...</code>, <code>Template:prototype/...</code>, которые: |
| | #* вызывают <code><nowiki>{{#invoke:Сущность/поля|main ...}}</nowiki></code> для описания полей карточки; |
| | #* при необходимости используют <code>GetField</code> / <code>Сущность.jsonList</code> / <code>Сущность.json</code> для форматирования сложных JSON‑полей. |
| | # Для вывода карточки на странице сущности используется: |
| | #* либо прямой <code><nowiki>{{#invoke:Сущность|get|MyEntityId}}</nowiki></code>, |
| | #* либо шаблон‑обёртка <code><nowiki>{{Сущность/карточка|MyEntityId}}</nowiki></code>. |
| | # Для специализированных списков/таблиц: |
| | #* <code>Сущность.jsonList</code> — если нужно красиво показать массив/словарь из JSON; |
| | #* <code>Сущность.json</code> — если нужно превратить список эффектов в набор вызовов шаблона; |
| | #* <code>GetField.get</code> — если нужно точечно вытащить одно поле; |
| | #* <code>GetField.getTpl</code> / <code>getTplProto</code> — если нужно строить шаблоны по данным JSON автоматически. |