@@ -1,16 +1,121 @@
// Create RP — туторіал у стилі Create (Ponder): наведи на предмет і затисни W.
// Потрібні PonderJS (мод «Ponder for KubeJS») і startup_scripts/createrp_items.js (предмет kubejs:citizen_guide).
// Сцени будуються на стандартній плиті 5x5: y=0 — плита, блоки з y=1. Текст: _слово_ — підсвітка, як у Create .
// Більшість сцен — на стандартній плиті 5x5 ( y=0 — плита, блоки з y=1); продаж і покупки — на схематиці Create з ланцюгами .
// Підписи — як у Create: одне коротке речення на крок.
const PACKAGE = 'create:cardboard_package_10x12'
// посилка «летить» від однієї пакужаби до іншої: лінія маршруту + предмет-посилка
function sendPackage ( scene , from , to , ticks ) {
scene . overlay . showBigLine ( PonderPalette . OUTPUT , from , to , ticks )
const dx = ( to [ 0 ] - from [ 0 ] ) / ticks , dy = 0.22 , dz = ( to [ 2 ] - from [ 2 ] ) / ticks
const box = scene . world . createItemEntity ( from , [ dx , dy , dz ] , PACKAGE )
scene . idle ( ticks )
scene . world . removeEntity ( box )
// Справжні посилки на ланцюгах — тими ж викликами, що й у сценах самого Create (FrogAndConveyorScenes).
// Якщо KubeJS не дасть доступу до класів — сцени все одно покажуть мережу й текст, лише без руху посилок.
let CreateScene = null , Frogport = null , ChainConveyor = null , PackageItem = null , PackageStyles = null
try {
CreateScene = Java . loadClass ( 'com.simibubi.create.foundation.ponder.CreateSceneBuilder' )
Frogport = Java . loadClass ( 'com.simibubi.create.content.logistics.packagePort.frogport.FrogportBlockEntity' )
ChainConveyor = Java . loadClass ( 'com.simibubi.create.content.kinetics.chainConveyor.ChainConveyorBlockEntity' )
PackageItem = Java . loadClass ( 'com.simibubi.create.content.logistics.box.PackageItem' )
PackageStyles = Java . loadClass ( 'com.simibubi.create.content.logistics.box.PackageStyles' )
} catch ( e ) {
console . warn ( '[createrp] Create classes unavailable for Ponder animations: ' + e )
}
// один крок: підпис біля точки й пауза, поки його читають
function say ( scene , ticks , text , pos , colour , keyframe ) {
const t = scene . text ( ticks , text , pos ) . placeNearTarget ( )
if ( colour ) t . colored ( colour )
if ( keyframe ) t . attachKeyFrame ( )
scene . idle ( ticks + 10 )
}
// Create's own kinetic helper; in KubeJS `world` is a property, not a method
function setSpeed ( scene , sel , speed ) {
if ( ! CreateScene ) return
try {
const cs = new CreateScene ( scene )
const w = typeof cs . world === 'function' ? cs . world ( ) : cs . world
w . setKineticSpeed ( sel , speed )
} catch ( e ) {
console . warn ( '[createrp] setKineticSpeed: ' + e )
}
}
// ---- мережа ланцюгів (схематика Create «Transporting packages between Frogports», 9x9) --------
const FROG _STRUCTURE = 'create:high_logistics/package_frogport'
const CONV1 = [ 1 , 4 , 7 ] , CONV2 = [ 7 , 4 , 7 ]
const FROM _FROG = [ 5 , 2 , 2 ] , TO _FROG = [ 2 , 2 , 5 ]
function addressedBox ( address ) {
const box = PackageStyles . getDefaultBox ( ) . copy ( )
PackageItem . addAddress ( box , address )
return box
}
// посилки, що крутяться на одному вузлі ланцюга, їдуть до іншого (Create: boxTransfer)
function chainTransfer ( scene , util , to , from ) {
scene . world . modifyBlockEntity ( util . grid . at ( from [ 0 ] , from [ 1 ] , from [ 2 ] ) , ChainConveyor , be => {
const it = be . getLoopingPackages ( ) . iterator ( )
while ( it . hasNext ( ) ) {
const p = it . next ( )
p . chainPosition = 0
be . addTravellingPackage ( p , util . grid . at ( to [ 0 ] - from [ 0 ] , to [ 1 ] - from [ 1 ] , to [ 2 ] - from [ 2 ] ) )
it . remove ( )
}
} )
}
// посилка з адресою їде ланцюгами від пакужаби (5,2,2) до пакужаби (2,2,5)
function shipOnChains ( scene , util , address ) {
if ( ! Frogport ) {
scene . overlay . showBigLine ( PonderPalette . OUTPUT , [ 5.5 , 3 , 2.5 ] , [ 2.5 , 3 , 5.5 ] , 140 )
scene . idle ( 150 )
return
}
const box = addressedBox ( address )
scene . world . modifyBlockEntity ( util . grid . at ( FROM _FROG [ 0 ] , FROM _FROG [ 1 ] , FROM _FROG [ 2 ] ) , Frogport , be => be . startAnimation ( box , true ) )
scene . idle ( 95 )
chainTransfer ( scene , util , CONV1 , CONV2 )
scene . idle ( 45 )
scene . world . modifyBlockEntity ( util . grid . at ( CONV1 [ 0 ] , CONV1 [ 1 ] , CONV1 [ 2 ] ) , ChainConveyor , be => be . getLoopingPackages ( ) . clear ( ) )
scene . world . modifyBlockEntity ( util . grid . at ( TO _FROG [ 0 ] , TO _FROG [ 1 ] , TO _FROG [ 2 ] ) , Frogport , be => be . startAnimation ( box , false ) )
scene . idle ( 15 )
}
// мережа з'являється так само, як у Create
function showChainNetwork ( scene , util ) {
scene . configureBasePlate ( 0 , 0 , 9 )
scene . scaleSceneView ( 0.75 )
scene . setSceneOffsetY ( - 1 )
scene . world . showSection ( util . select . layer ( 0 ) . substract ( util . select . position ( 9 , 0 , 1 ) ) , Direction . UP )
scene . idle ( 10 )
scene . world . showSection ( util . select . position ( 2 , 1 , 8 ) , Direction . SOUTH )
scene . idle ( 2 )
scene . world . showSection ( util . select . fromTo ( 1 , 1 , 7 , 1 , 3 , 7 ) , Direction . DOWN )
scene . idle ( 2 )
scene . world . showSection ( util . select . fromTo ( 7 , 1 , 7 , 7 , 3 , 7 ) , Direction . DOWN )
scene . idle ( 2 )
scene . world . showSection ( util . select . fromTo ( 7 , 1 , 1 , 7 , 3 , 1 ) , Direction . DOWN )
scene . idle ( 5 )
scene . world . showSection ( util . select . position ( 1 , 4 , 7 ) , Direction . DOWN )
scene . world . showSection ( util . select . position ( 7 , 4 , 7 ) , Direction . DOWN )
scene . world . showSection ( util . select . position ( 7 , 4 , 1 ) , Direction . DOWN )
scene . idle ( 20 )
}
function showRightSide ( scene , util ) { // пакувальник, сховище й пакужаба праворуч (5..7, z=2)
scene . world . showSection ( util . select . fromTo ( 7 , 1 , 2 , 5 , 1 , 2 ) , Direction . DOWN )
scene . world . showSection ( util . select . position ( 5 , 1 , 3 ) , Direction . DOWN )
scene . idle ( 5 )
scene . world . showSection ( util . select . position ( 5 , 2 , 2 ) , Direction . DOWN )
scene . idle ( 15 )
}
function showLeftSide ( scene , util ) { // пакужаба з пакувальником ліворуч (2, z=5)
scene . world . showSection ( util . select . position ( 2 , 1 , 5 ) , Direction . SOUTH )
scene . world . showSection ( util . select . fromTo ( 2 , 1 , 4 , 0 , 1 , 4 ) , Direction . DOWN )
scene . world . showSection ( util . select . position ( 3 , 1 , 5 ) , Direction . DOWN )
scene . idle ( 5 )
scene . world . showSection ( util . select . position ( 2 , 2 , 5 ) , Direction . DOWN )
scene . idle ( 15 )
}
// ---------------------------------------------------------------------------------------------
@@ -24,109 +129,64 @@ function terminalScene(scene, util) {
scene . world . showSection ( [ 2 , 1 , 2 ] , Direction . DOWN )
scene . idle ( 15 )
scene . text ( 80 , 'Будь-який _комп\'ютер_ — це термінал держави. Відкрий його й набери _rp_.' , [ 2.5 , 1.5 , 2.5 ] )
. placeNearTarget ( ) . attachKeyFrame ( )
scene . showControls ( 60 , [ 2.5 , 2 , 2.5 ] , 'down' ) . rightClick ( )
scene . idle ( 90 )
scene . text ( 90 , 'Вхід — т вій _ нік_ і _ пароль_. Першого разу термінал попросить створити пароль. Стій поруч із комп\'ютером — здалеку не пустить. ', [ 2.5 , 1.5 , 2.5 ] )
. placeNearTarget ( ) . attachKeyFrame ( )
scene . idle ( 100 )
scene . text ( 90 , 'У меню: _рахунок_, _бізнес_, _ціни_, _магазин_, _земля_, _робота_, _тендери_, _банк_. Стрілки й Enter, Backspace — назад.' , [ 2.5 , 1.5 , 2.5 ] )
. placeNearTarget ( )
scene . idle ( 100 )
say ( scene , 70 , 'Будь-який комп\'ютер — термінал держави' , [ 2.5 , 1.5 , 2.5 ] , null , true )
say ( scene , 60 , 'Набери rp і натисни Enter' , [ 2.5 , 1.5 , 2.5 ] )
say ( scene , 70 , 'Увійди: с вій нік і пароль', [ 2.5 , 1.5 , 2.5 ] , PonderPalette . BLUE , true )
say ( scene , 70 , 'Першого разу термінал попросить створити пароль' , [ 2.5 , 1.5 , 2.5 ] )
say ( scene , 60 , 'Стій поруч — здалеку не пустить' , [ 2.5 , 1.5 , 2.5 ] , PonderPalette . RED )
say ( scene , 80 , 'Тут усе: рахунок, бізнес, ціни, магазин, земля, робота, банк' , [ 2.5 , 1.5 , 2.5 ] , null , true )
scene . world . showSection ( [ 1 , 1 , 3 , 3 , 2 , 3 ] , Direction . DOWN )
scene . idle ( 15 )
scene . text ( 90 , 'Комп\'ютер з _монітором_ — табло цін держави: програма _prices metal_ (або stone, wood, farm, food, create…). ', [ 2 , 2.5 , 3 ] )
. colored ( PonderPalette . BLUE ) . placeNearTarget ( ) . attachKeyFrame ( )
scene . idle ( 100 )
say ( scene , 70 , 'Додай монітор — і набери prices metal ', [ 2 , 2.5 , 3 ] , PonderPalette . BLUE , true )
say ( scene , 60 , 'Вийде табло цін держави' , [ 2 , 2.5 , 3 ] )
}
// ---------------------------------------------------------------------------------------------
// 2. Продаж державі
function sellScene ( scene , util ) {
scene . showBasePlate ( )
// бізнес ліворуч: сховище → пакувальник → пакужаба; держава праворуч
scene . world . setBlocks ( [ 0 , 1 , 2 ] , 'minecraft:barrel' )
scene . world . setBlocks ( [ 1 , 1 , 2 ] , 'create:packager' )
scene . world . setBlocks ( [ 1 , 2 , 2 ] , 'create:package_frogport' )
scene . world . setBlocks ( [ 3 , 1 , 2 ] , 'create:packager' )
scene . world . setBlocks ( [ 3 , 2 , 2 ] , 'create:package_frogport' )
showChainNetwork ( scene , util )
say ( scene , 70 , 'Держава купує все, що ти добуваєш і виробляєш' , [ 4 , 4.5 , 4 ] , null , true )
say ( scene , 70 , 'Товар їде до неї посилками по ланцюгах' , [ 4 , 4.5 , 7 ] )
showRightSide ( scene , util )
scene . world . showSection ( util . select . position ( 4 , 1 , 2 ) , Direction . EAST )
scene . idle ( 10 )
say ( scene , 70 , 'Твій бізнес: сховище, пакувальник і пакужаба' , [ 5.5 , 2.5 , 2.5 ] , null , true )
say ( scene , 80 , 'На пакувальник — табличка з адресою gov-…' , [ 4.5 , 1.5 , 2.5 ] , PonderPalette . BLUE )
say ( scene , 70 , 'Адресу дає термінал: Бізнес → Адреса продажу' , [ 4.5 , 1.5 , 2.5 ] )
scene . world . showSection ( [ 0 , 1 , 2 ] , Direction . DOWN )
scene . idle ( 5 )
scene . world . showSection ( [ 1 , 1 , 2 ] , Direction . DOWN )
scene . idle ( 5 )
scene . world . showSection ( [ 1 , 2 , 2 ] , Direction . DOWN )
scene . idle ( 15 )
showLeftSide ( scene , util )
say ( scene , 80 , 'Це державна пакужаба — вона приймає всі адреси gov-…' , [ 2.5 , 2.5 , 5.5 ] , PonderPalette . BLUE , true )
scene . text ( 90 , 'Держава _купує_ все, що добувають і виробляють: руду, метали, будматеріали, їжу, деталі Create. ' , [ 1.5 , 2.5 , 2.5 ] )
. placeNearTarget ( ) . attachKeyFrame ( )
scene . idle ( 100 )
scene . text ( 100 , 'Адреса продажу твого бізнесу — _gov-…_ (термінал → Бізнес → Адреса продажу). Познач нею пакувальник табличкою або в замовленні. ', [ 1.5 , 1.5 , 2.5 ] )
. placeNearTarget ( ) . attachKeyFrame ( )
scene . showControls ( 70 , [ 1.5 , 1.8 , 2 ] , 'down' ) . rightClick ( ) . withItem ( 'minecraft:oak_sign' )
scene . idle ( 110 )
scene . world . showSection ( [ 3 , 1 , 2 , 3 , 2 , 2 ] , Direction . DOWN )
scene . idle ( 15 )
scene . text ( 90 , '_Державна пакужаба_ приймає посилки на всі адреси gov-… Під нею — державний приймач.' , [ 3.5 , 2.5 , 2.5 ] )
. colored ( PonderPalette . BLUE ) . placeNearTarget ( ) . attachKeyFrame ( )
scene . idle ( 100 )
sendPackage ( scene , [ 1.5 , 3 , 2.5 ] , [ 3.5 , 3 , 2.5 ] , 30 )
scene . idle ( 5 )
scene . text ( 100 , 'Гроші приходять на _рахунок бізнесу_. Товару забагато — ціна падає, дефіцит — росте. Ціни — на табло й у терміналі.' , [ 3.5 , 1.5 , 2.5 ] )
. colored ( PonderPalette . GREEN ) . placeNearTarget ( ) . attachKeyFrame ( )
scene . idle ( 110 )
scene . text ( 80 , 'Усе автоматизується: ланцюги, поїзди, ферми — продаж іде, поки ти робиш інше.' , [ 2.5 , 3.5 , 2.5 ] )
scene . idle ( 90 )
scene . text ( 60 , 'Посилка їде ланцюгами… ' , [ 6.78 , 4.37 , 3.5 ] ) . placeNearTarget ( )
shipOnChains ( scene , util , 'gov-a1b2c3' )
say ( scene , 70 , '…і гроші приходять на рахунок бізнесу' , [ 2.5 , 2.5 , 5.5 ] , PonderPalette . GREEN , true )
say ( scene , 70 , 'Багато однакового товару — ціна падає' , [ 4 , 4.5 , 4 ] , PonderPalette . RED )
say ( scene , 60 , 'Дефіцит — ціна росте ', [ 4 , 4.5 , 4 ] , PonderPalette . GREEN )
say ( scene , 60 , 'Ціни дивись на табло або в терміналі' , [ 4 , 4.5 , 4 ] )
}
// ---------------------------------------------------------------------------------------------
// 3. Покупка в держави
// 3. Покупки в держави
function buyScene ( scene , util ) {
scene . showBasePlate ( )
scene . world . setBlocks ( [ 3 , 1 , 2 ] , 'create:packager' )
scene . world . setBlocks ( [ 3 , 2 , 2 ] , 'create:package_frogport' )
scene . world . setBlocks ( [ 0 , 1 , 2 ] , 'minecraft:chest' )
scene . world . setBlocks ( [ 1 , 1 , 2 ] , 'create:packager' )
scene . world . setBlocks ( [ 1 , 2 , 2 ] , 'create:package_frogport' )
scene . idle ( 10 )
showChainNetwork ( scene , util )
showRightSide ( scene , util )
say ( scene , 70 , 'Це державний склад' , [ 5.5 , 2.5 , 2.5 ] , PonderPalette . BLUE , true )
say ( scene , 80 , 'Держава продає імпорт: алмази, незерит, елітри, ліцензії' , [ 5.5 , 2.5 , 2.5 ] )
say ( scene , 60 , 'Купуй у терміналі: Магазин держави' , [ 4 , 4.5 , 4 ] )
scene . world . showSection ( [ 3 , 1 , 2 , 3 , 2 , 2 ] , Direction . DOWN )
scene . idle ( 15 )
scene . text ( 90 , 'Держава продає _імпорт_ (алмази, незерит, елітри…) і _ліцензії_. Купівля — термінал → Магазин держави. ', [ 3.5 , 2.5 , 2.5 ] )
. placeNearTarget ( ) . attachKeyFrame ( )
scene . idle ( 100 )
showLeftSide ( scene , util )
say ( scene , 70 , 'Це твоя пакужаба, напр. «Склад Олі»' , [ 2.5 , 2.5 , 5.5 ] , null , true )
say ( scene , 70 , 'Цю назву впиши як адресу доставки ', [ 2.5 , 2.5 , 5.5 ] , PonderPalette . BLUE )
scene . world . showSection ( [ 0 , 1 , 2 ] , Direction . DOWN )
scene . idle ( 5 )
scene . world . showSection ( [ 1 , 1 , 2 , 1 , 2 , 2 ] , Direction . DOWN )
scene . idle ( 15 )
scene . text ( 100 , 'Під час покупки вкажи _адресу своєї пакужаби_ — так, як вона названа. Термінал запам\'ятає її.' , [ 1.5 , 2.5 , 2.5 ] )
. placeNearTarget ( ) . attachKeyFrame ( )
scene . idle ( 110 )
scene . text ( 60 , 'Товар виїжджає з _державного складу_…' , [ 3.5 , 3 , 2.5 ] ) . colored ( PonderPalette . BLUE )
scene . idle ( 20 )
sendPackage ( scene , [ 3.5 , 3 , 2.5 ] , [ 1.5 , 3 , 2.5 ] , 30 )
scene . idle ( 20 )
scene . text ( 100 , '…і приходить посилкою. _Пакувальник_ під твоєю пакужабою розпакує її у скриню.' , [ 0.5 , 1.5 , 2.5 ] )
. colored ( PonderPalette . GREEN ) . placeNearTarget ( ) . attachKeyFrame ( )
scene . idle ( 110 )
scene . text ( 80 , 'Не дійшла? Гроші _повертаються_ автоматично, а в чаті буде причина.' , [ 2.5 , 3.5 , 2.5 ] )
scene . idle ( 90 )
shipOnChains ( scene , util , 'Склад Олі' )
say ( scene , 70 , 'Посилка приїжджає сама' , [ 2.5 , 2.5 , 5.5 ] , PonderPalette . GREEN , true )
say ( scene , 70 , 'Пакувальник розпакує її у скриню' , [ 3.5 , 1.5 , 5.5 ] )
say ( scene , 70 , 'Не доїхала — гроші повернуться самі' , [ 4 , 4.5 , 4 ] , PonderPalette . RED )
}
// ---------------------------------------------------------------------------------------------
@@ -138,9 +198,8 @@ function moneyScene(scene, util) {
scene . world . showSection ( [ 2 , 1 , 2 ] , Direction . DOWN )
scene . idle ( 15 )
scene . text ( 90 , 'Твої гроші — на _ рахунку_ в державному банку. Баланс і перекази — термінал → Рахунок. ' , [ 2.5 , 1.5 , 2.5 ] )
. placeNearTarget ( ) . attachKeyFrame ( )
scene . idle ( 100 )
say ( scene , 70 , 'Твої гроші лежать на рахунку в банку ' , [ 2.5 , 1.5 , 2.5 ] , null , true )
say ( scene , 60 , 'Баланс і перекази — у терміналі' , [ 2.5 , 1.5 , 2.5 ] )
const coins = [ 'numismatics:spur' , 'numismatics:bevel' , 'numismatics:sprocket' , 'numismatics:cog' ]
for ( let i = 0 ; i < coins . length ; i ++ ) {
@@ -148,17 +207,13 @@ function moneyScene(scene, util) {
scene . idle ( 5 )
}
scene . idle ( 10 )
scene . text ( 110 , '_Готівка_ — монети: зняти /cash withdraw <сума>, покласти — /cash deposit з монетами в руці. Готівкою платять одне одному з рук. ', [ 2.5 , 2 , 1.5 ] )
. colored ( PonderPalette . GREEN ) . placeNearTarget ( ) . attachKeyFrame ( )
scene . idle ( 120 )
say ( scene , 70 , 'Монети — це готівка ', [ 2.5 , 2 , 1.5 ] , PonderPalette . GREEN , true )
say ( scene , 70 , 'Зняти: /cash withdraw <сума>' , [ 2.5 , 2 , 1.5 ] )
say ( scene , 70 , 'Покласти: монети в руку і /cash deposit' , [ 2.5 , 2 , 1.5 ] )
scene . text ( 100 , '_ Банк_ (термінал → Банк): стартовий та інвестиційний кредити для бізнесу, вклади під відсоток щодня. ' , [ 2.5 , 1.5 , 2.5 ] )
. placeNearTarget ( ) . attachKeyFrame ( )
scene . idle ( 110 )
scene . text ( 90 , 'Кредит платиться щоденними внесками. Пропустиш тричі — _дефолт_: рахунок бізнесу заморожено, тендери заборонені.' , [ 2.5 , 1.5 , 2.5 ] )
. colored ( PonderPalette . RED ) . placeNearTarget ( )
scene . idle ( 100 )
say ( scene , 70 , 'Банк дає кредити бізнесу' , [ 2.5 , 1.5 , 2.5 ] , PonderPalette . BLUE , true )
say ( scene , 60 , 'А вклад щодня приносить відсоток' , [ 2.5 , 1.5 , 2.5 ] )
say ( scene , 80 , 'Пропустив 3 платежі по кредиту — рахунок заморожено' , [ 2.5 , 1.5 , 2.5 ] , PonderPalette . RED )
}
// ---------------------------------------------------------------------------------------------
@@ -173,88 +228,292 @@ function landScene(scene, util) {
scene . world . setBlocks ( [ 2 , 1 , 2 ] , 'minecraft:iron_ore' )
scene . idle ( 10 )
scene . text ( 90 , 'Уся незареєстрована земля _ належить державі_. Будувати можна на своїх ділянках. ', [ 2.5 , 1 , 2.5 ] )
. placeNearTarget ( ) . attachKeyFrame ( )
scene . idle ( 100 )
say ( scene , 70 , 'Нічия земля належить державі', [ 2.5 , 1 , 2.5 ] , null , true )
scene . overlay . showOutline ( PonderPalette . GREEN , 'plot' , util . select . fromTo ( 0 , 0 , 0 , 4 , 0 , 4 ) , 120 )
scene . overlay . showOutline ( PonderPalette . GREEN , 'plot' , util . select . fromTo ( 0 , 0 , 0 , 4 , 0 , 4 ) , 150 )
scene . world . showSection ( [ 1 , 1 , 1 , 3 , 1 , 3 ] , Direction . DOWN )
scene . text ( 110 , '_Ділянки_ орендують на ігрові дні або викуповують: термінал → Земля. Заходячи на ділянку, бачиш її назву над хотбаром. ', [ 2.5 , 1.5 , 2.5 ] )
. colored ( PonderPalette . GREEN ) . placeNearTarget ( ) . attachKeyFrame ( )
scene . idle ( 120 )
say ( scene , 70 , 'Будуй на своїй ділянці ', [ 2.5 , 1.5 , 2.5 ] , PonderPalette . GREEN , true )
say ( scene , 70 , 'Орендуй або купи її в терміналі: Земля' , [ 2.5 , 1.5 , 2.5 ] )
say ( scene , 70 , 'На ділянці над хотбаром видно її назву' , [ 2.5 , 1.5 , 2.5 ] )
say ( scene , 70 , 'Чужі тут не ламають, а твої працівники — можуть' , [ 2.5 , 1.5 , 2.5 ] )
scene . text ( 100 , 'Орендована ділянка — _приват_ бізнесу: чужі не ламають, а твої працівники мають доступ.' , [ 2.5 , 1.5 , 2.5 ] )
. placeNearTarget ( )
scene . idle ( 110 )
scene . overlay . showOutline ( PonderPalette . RED , 'ore' , util . select . position ( 2 , 1 , 2 ) , 100 )
scene . text ( 100 , '_Руда_ видобувається за _концесією_: купи дозвіл на руду й квоту на ділянці ( термінал → Земля → Купити концесію). ', [ 2.5 , 1.5 , 2.5 ] )
. colored ( PonderPalette . RED ) . placeNearTarget ( ) . attachKeyFrame ( )
scene . idle ( 110 )
scene . text ( 80 , 'За землю щодня — орендна плата або податок. Не заплатив 3 дні — ділянка повертається державі.' , [ 2.5 , 2.5 , 2.5 ] )
scene . idle ( 90 )
scene . overlay . showOutline ( PonderPalette . RED , 'ore' , util . select . position ( 2 , 1 , 2 ) , 150 )
say ( scene , 70 , 'Руду копають лише з концесією' , [ 2.5 , 1.5 , 2.5 ] , PonderPalette . RED , true )
say ( scene , 70 , 'Купи її в терміналі: Земля → Купити концесію' , [ 2.5 , 1.5 , 2.5 ] )
say ( scene , 70 , 'Бури Create теж копають лише за концесією' , [ 2.5 , 1.5 , 2.5 ] )
say ( scene , 70 , 'Найкращі ділянки держава продає на аукціоні' , [ 2.5 , 2.5 , 2.5 ] , PonderPalette . BLUE , true )
say ( scene , 70 , 'Ставки — в терміналі : Земля → Аукціони ', [ 2.5 , 2.5 , 2.5 ] )
say ( scene , 80 , 'За землю платиш щодня. Не платив 3 дні — ділянку забирають' , [ 2.5 , 2.5 , 2.5 ] )
}
// ---------------------------------------------------------------------------------------------
// 6. Робота: ринок праці і пошта
// 6. Робота: ринок праці й пошта
function jobsScene ( scene , util ) {
scene . showBasePlate ( )
scene . idle ( 10 )
const post = scene . world . createEntity ( 'minecraft:villager' , [ 1 , 1 , 2.5 ] )
scene . world . createEntity ( 'minecraft:villager' , [ 1 , 1 , 2.5 ] )
scene . idle ( 10 )
scene . text ( 90 , 'Немає роботи? Термінал → Робота → _ринок праці_: допомога по безробіттю щодня, якщо ти був активний у грі. ' , [ 2.5 , 2.5 , 2.5 ] )
. placeNearTarget ( ) . attachKeyFrame ( )
scene . idle ( 100 )
say ( scene , 70 , 'Немає роботи? Стань на ринок праці ' , [ 2.5 , 2.5 , 2.5 ] , null , true )
say ( scene , 70 , 'Держава щодня платить допомогу, якщо ти грав' , [ 2.5 , 2.5 , 2.5 ] )
scene . text ( 90 , 'Хочеш заробляти більше — стань _поштарем_. Клікни по NPC пошти.' , [ 1 , 2.5 , 2.5 ] )
. colored ( PonderPalette . BLUE ) . placeNearTarget ( ) . attachKeyFrame ( )
scene . showControls ( 60 , [ 1 , 2.3 , 2.5 ] , 'down' ) . rightClick ( )
scene . idle ( 70 )
say ( scene , 70 , 'Хочеш більше — працюй поштарем' , [ 1 , 2.5 , 2.5 ] , PonderPalette . BLUE , true )
scene . world . createItemEntity ( [ 1.5 , 2 , 2.5 ] , [ 0.05 , 0.25 , 0 ] , PACKAGE )
scene . world . createItemEntity ( [ 1.5 , 2 , 2.5 ] , [ 0.03 , 0.3 , 0.03 ] , 'minecraft:compass' )
scene . idle ( 20 )
scene . text ( 100 , 'Отримаєш _посилку_ з іменем адресата й _компас_, що вказує на нього. ПКМ компасом — мітка на місці (видно лише тобі). ', [ 2 , 1.5 , 2.5 ] )
. placeNearTarget ( ) . attachKeyFrame ( )
scene . idle ( 110 )
say ( scene , 70 , 'NPC пошти дасть посилку й компас ', [ 2 , 1.5 , 2.5 ] , null , true )
say ( scene , 70 , 'Компас веде до адресата' , [ 2 , 1.5 , 2.5 ] )
say ( scene , 70 , 'ПКМ компасом — мітка на місці' , [ 2 , 1.5 , 2.5 ] , PonderPalette . BLUE )
scene . world . createEntity ( 'minecraft:villager' , [ 4 , 1 , 2.5 ] )
scene . overlay . showBigLine ( PonderPalette . OUTPUT , [ 1.5 , 1.2 , 2.5 ] , [ 4 , 1.2 , 2.5 ] , 80 )
scene . text ( 100 , 'Адресат чекає в іншій частині світу. Принеси посилку й клікни по ньому — гроші на рахунок. Що далі, то дорожче. ', [ 4 , 2.5 , 2.5 ] )
. colored ( PonderPalette . GREEN ) . placeNearTarget ( ) . attachKeyFrame ( )
scene . idle ( 110 )
scene . overlay . showBigLine ( PonderPalette . OUTPUT , [ 1.5 , 1.2 , 2.5 ] , [ 4 , 1.2 , 2.5 ] , 100 )
say ( scene , 70 , 'Віддай посилку адресату — і отримаєш гроші ', [ 4 , 2.5 , 2.5 ] , PonderPalette . GREEN , true )
say ( scene , 60 , 'Що далі везти — то більше платять' , [ 4 , 2.5 , 2.5 ] )
say ( scene , 60 , 'На доставку — 2 ігрові дні' , [ 2.5 , 2.5 , 2.5 ] , PonderPalette . RED )
say ( scene , 80 , 'Або наймися в бізнес: термінал → Бізнес' , [ 2.5 , 2.5 , 2.5 ] , null , true )
}
scene . text ( 80 , 'На доставку — _2 ігрові дні_. Не встиг — адресат поїде, і посилка згорить.' , [ 2.5 , 2.5 , 2.5 ] )
. colored ( PonderPalette . RED )
scene . idle ( 90 )
// ---------------------------------------------------------------------------------------------
// 8. Вантажник
scene . text ( 90 , 'Або наймися до бізнесу: власник пропонує зарплату, ти приймаєш у терміналі → Бізнес → Прийняти запрошення.' , [ 2.5 , 2.5 , 2.5 ] )
scene . idle ( 100 )
function cargoScene ( scene , util ) {
scene . showBasePlate ( )
scene . world . setBlocks ( [ 0 , 1 , 3 , 4 , 1 , 3 ] , 'minecraft:rail[shape=east_west]' )
scene . idle ( 10 )
scene . world . createEntity ( 'minecraft:villager' , [ 1 , 1 , 1 ] )
scene . idle ( 10 )
say ( scene , 70 , 'Вантажник возить будматеріали на будови' , [ 1 , 2.5 , 1 ] , null , true )
scene . showControls ( 50 , [ 1 , 2.3 , 1 ] , 'down' ) . rightClick ( )
scene . idle ( 20 )
for ( let i = 0 ; i < 5 ; i ++ ) {
scene . world . createItemEntity ( [ 1.5 , 2 , 1.5 ] , [ 0.04 * ( i - 2 ) , 0.25 , 0.06 ] , PACKAGE )
scene . idle ( 4 )
}
scene . idle ( 10 )
say ( scene , 70 , 'Диспетчер вантажів дасть від 4 до 8 ящиків' , [ 1.5 , 1.5 , 1.5 ] , PonderPalette . BLUE , true )
say ( scene , 70 , 'Ящики важкі: з ними ти ледве йдеш' , [ 1.5 , 1.5 , 1.5 ] , PonderPalette . RED )
scene . world . showSection ( [ 0 , 1 , 3 , 4 , 1 , 3 ] , Direction . DOWN )
scene . world . createEntity ( 'minecraft:minecart' , [ 1.5 , 1 , 3.5 ] )
scene . idle ( 15 )
say ( scene , 70 , 'Візьми візок, поїзд чи інший транспорт' , [ 1.5 , 1.5 , 3.5 ] , null , true )
scene . world . createEntity ( 'minecraft:villager' , [ 4 , 1 , 1 ] )
scene . overlay . showBigLine ( PonderPalette . OUTPUT , [ 1.5 , 1.2 , 3.5 ] , [ 4 , 1.2 , 1.5 ] , 100 )
say ( scene , 70 , 'Компас веде до прораба на будові' , [ 4 , 2.5 , 1 ] , null , true )
say ( scene , 70 , 'Віддай йому всі ящики — і отримаєш гроші' , [ 4 , 2.5 , 1 ] , PonderPalette . GREEN )
say ( scene , 70 , 'Платять більше, ніж на пошті: за відстань і кожен ящик' , [ 2.5 , 2.5 , 2.5 ] , PonderPalette . GREEN )
say ( scene , 60 , 'На доставку — 3 ігрові дні' , [ 2.5 , 2.5 , 2.5 ] , PonderPalette . RED )
}
// ---------------------------------------------------------------------------------------------
// 9. Дорожник
function roadsScene ( scene , util ) {
const CORRIDOR = util . select . fromTo ( 0 , 0 , 1 , 4 , 0 , 3 )
scene . showBasePlate ( )
scene . idle ( 10 )
scene . overlay . showOutline ( PonderPalette . BLUE , 'corridor' , CORRIDOR , 200 )
say ( scene , 70 , 'Це транспортний коридор держави' , [ 2.5 , 1 , 2 ] , PonderPalette . BLUE , true )
say ( scene , 70 , 'Будувати й ламати тут може лише дорожник' , [ 2.5 , 1 , 2 ] , PonderPalette . RED )
scene . world . createEntity ( 'minecraft:villager' , [ 0.5 , 1 , 0.5 ] )
scene . idle ( 10 )
scene . showControls ( 50 , [ 0.5 , 2.3 , 0.5 ] , 'down' ) . rightClick ( )
say ( scene , 70 , 'Стань дорожником: дорожній майстер або термінал → Робота' , [ 0.5 , 2.5 , 0.5 ] , null , true )
for ( let x = 0 ; x < 5 ; x ++ ) {
scene . world . setBlocks ( [ x , 1 , 2 ] , 'minecraft:stone_bricks' )
scene . world . showSection ( [ x , 1 , 2 ] , Direction . DOWN )
if ( x === 0 ) scene . showControls ( 40 , [ 0.5 , 1.5 , 2.5 ] , 'down' ) . rightClick ( ) . withItem ( 'minecraft:stone_bricks' )
scene . idle ( 8 )
}
scene . idle ( 10 )
say ( scene , 70 , 'Кожен новий блок дороги — 0,3 ¤' , [ 2.5 , 1.5 , 2.5 ] , PonderPalette . GREEN , true )
say ( scene , 70 , 'Гроші — в кінці ігрового дня, до 300 блоків на день' , [ 2.5 , 1.5 , 2.5 ] )
say ( scene , 70 , 'Перекласти той самий блок вдруге — не оплачується' , [ 2.5 , 1.5 , 2.5 ] , PonderPalette . RED )
say ( scene , 80 , 'Покриття: кам\'яна цегла, гладкий камінь, андезит, плитка Create' , [ 2.5 , 1.5 , 2.5 ] )
}
// ---------------------------------------------------------------------------------------------
// 10. Шахтар
function minerScene ( scene , util ) {
scene . showBasePlate ( )
scene . world . setBlocks ( [ 1 , 1 , 1 , 3 , 2 , 3 ] , 'minecraft:stone' )
scene . world . setBlocks ( [ 2 , 1 , 1 ] , 'minecraft:iron_ore' )
scene . world . setBlocks ( [ 1 , 2 , 1 ] , 'minecraft:coal_ore' )
scene . world . setBlocks ( [ 3 , 1 , 1 ] , 'minecraft:copper_ore' )
scene . world . setBlocks ( [ 2 , 2 , 1 ] , 'minecraft:stone' )
scene . idle ( 10 )
scene . world . showSection ( [ 1 , 1 , 1 , 3 , 2 , 3 ] , Direction . DOWN )
scene . idle ( 15 )
say ( scene , 70 , 'Це державна шахта' , [ 2.5 , 2.5 , 1 ] , PonderPalette . BLUE , true )
say ( scene , 70 , 'Копати тут можуть лише шахтарі' , [ 2.5 , 2.5 , 1 ] , PonderPalette . RED )
say ( scene , 70 , 'Найнятися: бригадир шахти або термінал → Робота' , [ 2.5 , 2.5 , 1 ] )
scene . showControls ( 40 , [ 2.5 , 1.5 , 1 ] , 'right' ) . leftClick ( ) . withItem ( 'minecraft:iron_pickaxe' )
scene . idle ( 30 )
scene . world . destroyBlock ( [ 2 , 1 , 1 ] )
scene . idle ( 15 )
say ( scene , 70 , 'Руда одразу йде державі — без дропу' , [ 2.5 , 1.5 , 1 ] , null , true )
scene . world . createItemEntity ( [ 2.5 , 2 , 0.8 ] , [ 0 , 0.2 , 0 ] , 'numismatics:spur' )
say ( scene , 70 , 'Тобі — оплата за кожен блок' , [ 2.5 , 1.5 , 1 ] , PonderPalette . GREEN )
say ( scene , 70 , 'Алмази й золото дорожчі за вугілля' , [ 2.5 , 1.5 , 1 ] )
say ( scene , 70 , 'Гроші — в кінці ігрового дня, до 200 блоків на день' , [ 2.5 , 2.5 , 2 ] )
scene . world . setBlocks ( [ 2 , 1 , 1 ] , 'minecraft:iron_ore' )
scene . idle ( 10 )
say ( scene , 70 , 'Викопана руда згодом виростає знову' , [ 2.5 , 1.5 , 1 ] , PonderPalette . BLUE , true )
}
// ---------------------------------------------------------------------------------------------
// 11. Оператор заводу
function operatorScene ( scene , util ) {
scene . showBasePlate ( )
scene . world . setBlocks ( [ 1 , 1 , 2 ] , 'minecraft:blast_furnace' )
scene . world . setBlocks ( [ 2 , 1 , 2 ] , 'create:andesite_casing' )
scene . world . setBlocks ( [ 3 , 1 , 2 ] , 'create:mechanical_press' )
scene . idle ( 10 )
scene . world . showSection ( [ 1 , 1 , 2 , 3 , 1 , 2 ] , Direction . DOWN )
scene . idle ( 15 )
say ( scene , 70 , 'Це державний завод' , [ 2.5 , 2.5 , 2.5 ] , PonderPalette . BLUE , true )
say ( scene , 70 , 'Оператор стежить, щоб він не зупинявся' , [ 2.5 , 2.5 , 2.5 ] )
say ( scene , 70 , 'Найнятися: майстер заводу або термінал → Робота' , [ 2.5 , 2.5 , 2.5 ] )
scene . overlay . showOutline ( PonderPalette . RED , 'broken' , util . select . position ( 1 , 1 , 2 ) , 220 )
say ( scene , 70 , 'Точка задиміла — щось зламалось' , [ 1.5 , 2 , 2.5 ] , PonderPalette . RED , true )
scene . showControls ( 50 , [ 1.5 , 2 , 2.5 ] , 'down' ) . rightClick ( ) . withItem ( 'minecraft:coal' )
say ( scene , 70 , 'Немає палива — клацни з вугіллям у руці' , [ 1.5 , 2 , 2.5 ] )
scene . showControls ( 50 , [ 1.5 , 2 , 2.5 ] , 'down' ) . rightClick ( )
say ( scene , 70 , 'Затор — прочисть порожньою рукою' , [ 1.5 , 2 , 2.5 ] )
scene . showControls ( 50 , [ 1.5 , 2 , 2.5 ] , 'down' ) . rightClick ( ) . withItem ( 'create:wrench' )
say ( scene , 70 , 'Розхиталась деталь — підтягни ключем' , [ 1.5 , 2 , 2.5 ] )
scene . world . createItemEntity ( [ 1.5 , 2.2 , 2.5 ] , [ 0 , 0.2 , 0 ] , 'numismatics:spur' )
say ( scene , 70 , 'Кожен ремонт — 2 ¤ у кінці ігрового дня' , [ 2.5 , 2.5 , 2.5 ] , PonderPalette . GREEN , true )
say ( scene , 70 , 'Поломки стаються, лише поки ти на зміні поруч' , [ 2.5 , 2.5 , 2.5 ] )
}
// ---------------------------------------------------------------------------------------------
// 12. Державні службовці
function officialsScene ( scene , util ) {
scene . showBasePlate ( )
scene . idle ( 10 )
scene . world . createEntity ( 'minecraft:villager' , [ 2.5 , 1 , 2.5 ] )
scene . idle ( 10 )
scene . showControls ( 50 , [ 2.5 , 2.3 , 2.5 ] , 'down' ) . rightClick ( )
say ( scene , 70 , 'Державні службовці відповідають на запитання' , [ 2.5 , 2.5 , 2.5 ] , null , true )
say ( scene , 70 , 'Клацни по службовцю й обери репліку' , [ 2.5 , 2.5 , 2.5 ] )
say ( scene , 70 , 'Провідник на спавні пояснить, з чого почати' , [ 2.5 , 2.5 , 2.5 ] , PonderPalette . BLUE , true )
say ( scene , 70 , 'Він же дасть перше завдання з підйомними' , [ 2.5 , 2.5 , 2.5 ] , PonderPalette . GREEN )
scene . world . createEntity ( 'minecraft:villager' , [ 0.5 , 1 , 0.5 ] )
scene . world . createEntity ( 'minecraft:villager' , [ 4.5 , 1 , 0.5 ] )
scene . world . createEntity ( 'minecraft:villager' , [ 0.5 , 1 , 4.5 ] )
scene . world . createEntity ( 'minecraft:villager' , [ 4.5 , 1 , 4.5 ] )
scene . idle ( 15 )
say ( scene , 70 , 'Ратуша: бізнес, ділянки, аукціони' , [ 0.5 , 2.5 , 0.5 ] , null , true )
say ( scene , 70 , 'Міністерство: тендери й частки ринку' , [ 4.5 , 2.5 , 0.5 ] )
say ( scene , 70 , 'Банк: рахунок, кредити, вклад' , [ 0.5 , 2.5 , 4.5 ] )
say ( scene , 70 , 'Центр зайнятості: робота й допомога' , [ 4.5 , 2.5 , 4.5 ] )
say ( scene , 80 , 'Відповідь службовця приходить у чат' , [ 2.5 , 2.5 , 2.5 ] , PonderPalette . BLUE , true )
say ( scene , 80 , 'Щоб щось оформити — іди до термінала' , [ 2.5 , 2.5 , 2.5 ] )
}
// ---------------------------------------------------------------------------------------------
// 7. Продаж енергії державі: державна підстанція
function energyScene ( scene , util ) {
const STATE = util . select . fromTo ( 3 , 1 , 0 , 4 , 1 , 4 )
const BUSINESS = util . select . fromTo ( 0 , 1 , 2 , 1 , 1 , 2 )
const ALL = util . select . fromTo ( 0 , 1 , 0 , 4 , 1 , 4 )
scene . showBasePlate ( )
// генератор бізнесу → вал → лічильник → коробка передач підстанції → три вентилятори держави
scene . world . setBlocks ( [ 0 , 1 , 2 ] , 'create:water_wheel[facing=east]' )
scene . world . setBlocks ( [ 1 , 1 , 2 ] , 'create:shaft[axis=x]' )
scene . world . setBlocks ( [ 2 , 1 , 2 ] , 'create:stressometer[facing=south,axis_along_first=true]' )
scene . world . setBlocks ( [ 3 , 1 , 2 ] , 'create:gearbox' )
scene . world . setBlocks ( [ 4 , 1 , 2 ] , 'create:encased_fan[facing=east]' )
scene . world . setBlocks ( [ 3 , 1 , 1 ] , 'create:shaft[axis=z]' )
scene . world . setBlocks ( [ 3 , 1 , 3 ] , 'create:shaft[axis=z]' )
scene . world . setBlocks ( [ 3 , 1 , 0 ] , 'create:encased_fan[facing=north]' )
scene . world . setBlocks ( [ 3 , 1 , 4 ] , 'create:encased_fan[facing=south]' )
scene . idle ( 10 )
scene . world . showSection ( STATE , Direction . DOWN )
scene . idle ( 15 )
scene . overlay . showOutline ( PonderPalette . BLUE , 'state' , STATE , 90 )
say ( scene , 80 , 'Це державна підстанція: її машинам потрібна сила' , [ 3.5 , 2.5 , 2.5 ] , PonderPalette . BLUE , true )
scene . world . showSection ( [ 2 , 1 , 2 ] , Direction . DOWN )
scene . idle ( 10 )
say ( scene , 70 , 'На вході стоїть лічильник — стресометр' , [ 2.5 , 1.8 , 2.5 ] , null , true )
say ( scene , 70 , 'Держава закріплює його за твоїм бізнесом' , [ 2.5 , 1.8 , 2.5 ] )
scene . world . showSection ( BUSINESS , Direction . EAST )
scene . idle ( 15 )
scene . overlay . showOutline ( PonderPalette . GREEN , 'biz' , BUSINESS , 90 )
say ( scene , 70 , 'Підведи вал від свого генератора' , [ 0.5 , 1.5 , 2.5 ] , PonderPalette . GREEN , true )
setSpeed ( scene , ALL , 32 )
scene . idle ( 10 )
say ( scene , 70 , 'Машини держави закрутились' , [ 3.5 , 2.5 , 2.5 ] )
for ( let i = 0 ; i < 3 ; i ++ ) {
scene . world . createItemEntity ( [ 2.5 , 2.2 , 2.5 ] , [ 0 , 0.2 , 0 ] , 'numismatics:spur' )
scene . idle ( 12 )
}
say ( scene , 70 , 'Щохвилини держава платить твоєму бізнесу' , [ 2.5 , 2.5 , 2.5 ] , PonderPalette . GREEN , true )
say ( scene , 70 , 'Платить лише за силу, яку забирають її машини' , [ 2.5 , 2.5 , 2.5 ] )
say ( scene , 70 , 'Приклад: 2048 SU — приблизно 1 ¤ за хвилину' , [ 2.5 , 2.5 , 2.5 ] , PonderPalette . BLUE )
setSpeed ( scene , ALL , 0 )
scene . idle ( 10 )
say ( scene , 70 , 'Сили не вистачає — машини стоять, грошей немає' , [ 1.5 , 1.5 , 2.5 ] , PonderPalette . RED , true )
setSpeed ( scene , ALL , 32 )
say ( scene , 80 , 'Хочеш продавати енергію — знайди підстанцію й підключись' , [ 2.5 , 2.5 , 2.5 ] , null , true )
}
// ---------------------------------------------------------------------------------------------
Ponder . tags ( event => {
event . createTag ( 'kubejs:createrp' , 'kubejs:citizen_guide' , 'Держава Create RP' ,
'Як жити й заробляти в державній економіці: термінал, продаж і покупки посилками, гроші, земля, робота. ' ,
[ 'kubejs:citizen_guide' , 'create:package_frogport' , 'computercraft:computer_advanced' , 'computercraft:computer_normal' , 'computercraft:monitor_advanced' ] )
'Як жити й заробляти в державній економіці' ,
[ 'kubejs:citizen_guide' , 'create:package_frogport' , 'computercraft:computer_advanced' , 'computercraft:computer_normal' , 'computercraft:monitor_advanced' , 'create:stressometer' ] )
} )
Ponder . registry ( event => {
event . create ( 'kubejs:citizen_guide' )
. scene ( 'guide_officials' , 'Державні службовці' , officialsScene )
. scene ( 'guide_terminal' , 'Термінал держави' , terminalScene )
. scene ( 'guide_sell' , 'Продаж державі' , sellScene )
. scene ( 'guide_buy' , 'Покупки в держави' , buyScene )
. scene ( 'guide_sell' , 'Продаж державі' , FROG _STRUCTURE , sellScene )
. scene ( 'guide_buy' , 'Покупки в держави' , FROG _STRUCTURE , buyScene )
. scene ( 'guide_energy' , 'Продаж енергії державі' , energyScene )
. scene ( 'guide_money' , 'Гроші й банк' , moneyScene )
. scene ( 'guide_land' , 'Земля й надра' , landScene )
. scene ( 'guide_jobs' , 'Робота: ринок праці й пошта' , jobsScene )
. scene ( 'guide_cargo' , 'Робота: вантажник' , cargoScene )
. scene ( 'guide_roads' , 'Робота: дорожник' , roadsScene )
. scene ( 'guide_miner' , 'Робота: шахтар' , minerScene )
. scene ( 'guide_operator' , 'Робота: оператор заводу' , operatorScene )
event . create ( 'create:package_frogport' )
. scene ( 'frogport_sell' , 'Create RP: продаж державі' , sellScene )
. scene ( 'frogport_buy' , 'Create RP: покупки в держави' , buyScene )
. scene ( 'frogport_sell' , 'Create RP: продаж державі' , FROG _STRUCTURE , sellScene )
. scene ( 'frogport_buy' , 'Create RP: покупки в держави' , FROG _STRUCTURE , buyScene )
event . create ( 'create:stressometer' )
. scene ( 'stressometer_energy' , 'Create RP: продаж енергії державі' , energyScene )
event . create ( [ 'computercraft:computer_advanced' , 'computercraft:computer_normal' ] )
. scene ( 'computer_terminal' , 'Create RP: термінал держави' , terminalScene )