diff --git a/index.toml b/index.toml index d8d0c9e..99ccced 100644 --- a/index.toml +++ b/index.toml @@ -814,7 +814,7 @@ hash = "db4c4a8ab49265f6e8e456f495800ea148b133b18a3242aabca30b98ab7f784f" [[files]] file = "kubejs/client_scripts/createrp_ponder.js" -hash = "4a6ebdddb0249b1f59fd0d3b67649df682b81c10ff60a65a9739c0fb8c4de6ac" +hash = "4b02cc37446fd640ce308a6d3724c747fb6e26bd219d9bd202dede84440c4875" [[files]] file = "kubejs/startup_scripts/createrp_items.js" diff --git a/kubejs/client_scripts/createrp_ponder.js b/kubejs/client_scripts/createrp_ponder.js index 12f2107..79f3696 100644 --- a/kubejs/client_scripts/createrp_ponder.js +++ b/kubejs/client_scripts/createrp_ponder.js @@ -1,6 +1,7 @@ // Create RP — туторіал у стилі Create (Ponder): наведи на предмет і затисни W. // Потрібні PonderJS (мод «Ponder for KubeJS») і startup_scripts/createrp_items.js (предмет kubejs:citizen_guide). -// Більшість сцен — на стандартній плиті 5x5 (y=0 — плита, блоки з y=1); продаж і покупки — на схематиці Create з ланцюгами. Текст: _слово_ — підсвітка, як у Create. +// Більшість сцен — на стандартній плиті 5x5 (y=0 — плита, блоки з y=1); продаж і покупки — на схематиці Create з ланцюгами. +// Підписи — як у Create: одне коротке речення на крок. const PACKAGE = 'create:cardboard_package_10x12' @@ -17,27 +18,20 @@ try { console.warn('[createrp] Create classes unavailable for Ponder animations: ' + e) } -// посилка з адресою їде ланцюгами від пакужаби from до пакужаби to (по вузлах CONV2 → CONV1) -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) - frogTakes(scene, util, CONV1, TO_FROG, box) - scene.idle(10) +// один крок: підпис біля точки й пауза, поки його читають +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) } -function setSpeed(scene, util, sel, speed) { +function setSpeed(scene, sel, speed) { if (CreateScene) new CreateScene(scene).world().setKineticSpeed(sel, speed) } -// схематика Create «Transporting packages between Frogports» (9x9): ланцюги на висоті 4, дві пакужаби +// ---- мережа ланцюгів (схематика 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] @@ -48,7 +42,7 @@ function addressedBox(address) { return box } -// посилки, що крутяться на одному ланцюговому вузлі, їдуть до іншого (Create: boxTransfer) +// посилки, що крутяться на одному вузлі ланцюга, їдуть до іншого (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() @@ -61,13 +55,24 @@ function chainTransfer(scene, util, to, from) { }) } -// пакужаба на прийомі: знімає посилки з вузла й «ковтає» їх -function frogTakes(scene, util, conv, frog, box) { - scene.world.modifyBlockEntity(util.grid.at(conv[0], conv[1], conv[2]), ChainConveyor, be => be.getLoopingPackages().clear()) - scene.world.modifyBlockEntity(util.grid.at(frog[0], frog[1], frog[2]), Frogport, be => be.startAnimation(box, false)) +// посилка з адресою їде ланцюгами від пакужаби (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 +// мережа з'являється так само, як у Create function showChainNetwork(scene, util) { scene.configureBasePlate(0, 0, 9) scene.scaleSceneView(0.75) @@ -88,6 +93,23 @@ function showChainNetwork(scene, util) { 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) +} + // --------------------------------------------------------------------------------------------- // 1. Термінал держави @@ -99,145 +121,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. Продаж державі (схематика Create з ланцюгами) +// 2. Продаж державі function sellScene(scene, util) { showChainNetwork(scene, util) - scene.text(90, 'Бізнеси й держава з\'єднані _мережею ланцюгів_. Посилка сама знаходить пакужабу з потрібною адресою.', [4, 4.5, 7]) - .placeNearTarget().attachKeyFrame() - scene.idle(100) + say(scene, 70, 'Держава купує все, що ти добуваєш і виробляєш', [4, 4.5, 4], null, true) + say(scene, 70, 'Товар їде до неї посилками по ланцюгах', [4, 4.5, 7]) - // бізнес: сховище, пакувальник з табличкою, пакужаба на ланцюгу - 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) + showRightSide(scene, util) scene.world.showSection(util.select.position(4, 1, 2), Direction.EAST) - scene.world.showSection(util.select.position(5, 2, 2), Direction.DOWN) - scene.idle(15) - scene.text(110, 'Твій бізнес: сховище → _пакувальник_ → _пакужаба_ на ланцюгу. Табличка на пакувальнику — адреса продажу _gov-…_ (термінал → Бізнес → Адреса продажу).', [4.5, 1.5, 2.5]) - .placeNearTarget().attachKeyFrame() - scene.idle(120) + 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]) - // держава: пакужаба з фільтром gov-* і приймач під нею - 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.idle(5) - scene.world.showSection(util.select.position(2, 2, 5), Direction.DOWN) - scene.idle(15) - scene.text(100, '_Державна пакужаба_ приймає посилки на всі адреси gov-… Під нею — державний приймач.', [2.5, 2.5, 5.5]) - .colored(PonderPalette.BLUE).placeNearTarget().attachKeyFrame() - scene.idle(110) + showLeftSide(scene, util) + say(scene, 80, 'Це державна пакужаба — вона приймає всі адреси gov-…', [2.5, 2.5, 5.5], PonderPalette.BLUE, true) - scene.text(70, 'Посилка з адресою gov-… їде ланцюгами…', [6.78, 4.37, 3.5]).placeNearTarget() + scene.text(60, 'Посилка їде ланцюгами…', [6.78, 4.37, 3.5]).placeNearTarget() shipOnChains(scene, util, 'gov-a1b2c3') - scene.text(110, '…до держави. Гроші — на _рахунок бізнесу_. Товару забагато — ціна падає, дефіцит — росте. Ціни — на табло й у терміналі.', [2.5, 2.5, 5.5]) - .colored(PonderPalette.GREEN).placeNearTarget().attachKeyFrame() - scene.idle(120) - - scene.text(80, 'Поїзди, ферми, ланцюги — продаж іде сам, поки ти робиш інше.', [4, 4.5, 4]) - scene.idle(90) + 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) { showChainNetwork(scene, util) - 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) - scene.text(100, '_Державний склад_: пакувальник і пакужаба держави на тій самій мережі ланцюгів.', [5.5, 2.5, 2.5]) - .colored(PonderPalette.BLUE).placeNearTarget().attachKeyFrame() - scene.idle(110) + 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.text(100, 'Держава продає _імпорт_ (алмази, незерит, елітри…) і _ліцензії_. Купівля — термінал → Магазин держави.', [4, 4.5, 4]) - .placeNearTarget().attachKeyFrame() - scene.idle(110) - - 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) - scene.text(100, 'Твоя пакужаба з адресою, напр. _Склад Олі_. Цю назву вкажи під час покупки — термінал запам\'ятає.', [2.5, 2.5, 5.5]) - .placeNearTarget().attachKeyFrame() - scene.idle(110) + 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) shipOnChains(scene, util, 'Склад Олі') - scene.text(100, 'Посилка приходить сама. _Пакувальник_ під твоєю пакужабою розпакує її у скриню.', [3.5, 1.5, 5.5]) - .colored(PonderPalette.GREEN).placeNearTarget().attachKeyFrame() - scene.idle(110) - - scene.text(80, 'Не дійшла? Гроші _повертаються_ автоматично, а в чаті буде причина.', [4, 4.5, 4]) - scene.idle(90) -} - -// --------------------------------------------------------------------------------------------- -// 7. Продаж енергії державі - -function energyScene(scene, util) { - 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:shaft[axis=x]') - scene.world.setBlocks([4, 1, 2], 'create:encased_fan[facing=east]') - scene.idle(10) - - scene.world.showSection([0, 1, 2], Direction.DOWN) - scene.world.showSection([1, 1, 2], Direction.DOWN) - scene.idle(10) - setSpeed(scene, util, util.select.fromTo(0, 1, 2, 1, 1, 2), 16) - scene.text(90, 'Енергію теж можна _продавати державі_. Твій генератор — колесо, вітряк, двигун — крутить вал до державної мережі.', [0.5, 1.5, 2.5]) - .placeNearTarget().attachKeyFrame() - scene.idle(100) - - scene.world.showSection([3, 1, 2, 4, 1, 2], Direction.DOWN) - scene.idle(10) - scene.world.showSection([2, 1, 2], Direction.DOWN) - scene.idle(10) - setSpeed(scene, util, util.select.fromTo(0, 1, 2, 4, 1, 2), 16) - scene.overlay.showOutline(PonderPalette.GREEN, 'biz', util.select.fromTo(0, 1, 2, 1, 1, 2), 100) - scene.overlay.showOutline(PonderPalette.BLUE, 'state', util.select.fromTo(3, 1, 2, 4, 1, 2), 100) - scene.text(100, 'На стику — _державний лічильник_ (стресометр). Його ставить держава і прив\'язує до твого бізнесу.', [2.5, 1.8, 2.5]) - .colored(PonderPalette.BLUE).placeNearTarget().attachKeyFrame() - scene.idle(110) - - scene.text(110, 'Щохвилини держава платить бізнесу за _силу_ (SU), яку забирають її машини, — до ліміту лічильника.', [3.5, 1.5, 2.5]) - .colored(PonderPalette.GREEN).placeNearTarget().attachKeyFrame() - scene.idle(120) - - setSpeed(scene, util, util.select.fromTo(0, 1, 2, 4, 1, 2), 0) - scene.text(90, 'Генератор зупинився — оплата зупинилась. Перевантажив мережу — теж нічого не заробиш.', [1.5, 1.5, 2.5]) - .colored(PonderPalette.RED).placeNearTarget() - scene.idle(100) - setSpeed(scene, util, util.select.fromTo(0, 1, 2, 4, 1, 2), 16) - scene.text(80, 'Хочеш лічильник? Звернися до держави — вона підключить твою електростанцію.', [2.5, 2.5, 2.5]) - scene.idle(90) + 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) } // --------------------------------------------------------------------------------------------- @@ -249,9 +190,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++) { @@ -259,17 +199,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) } // --------------------------------------------------------------------------------------------- @@ -284,73 +220,112 @@ 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, 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) +// --------------------------------------------------------------------------------------------- +// 7. Продаж енергії державі: державна підстанція - scene.text(90, 'Або наймися до бізнесу: власник пропонує зарплату, ти приймаєш у терміналі → Бізнес → Прийняти запрошення.', [2.5, 2.5, 2.5]) - scene.idle(100) +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', 'create:stressometer']) }) diff --git a/pack.toml b/pack.toml index e6fcde2..b19b4e9 100644 --- a/pack.toml +++ b/pack.toml @@ -1,12 +1,12 @@ name = "Create RP" author = "Pinecraft-CreateRP" -version = "0.6.1" +version = "0.6.2" pack-format = "packwiz:1.1.0" [index] file = "index.toml" hash-format = "sha256" -hash = "2a8313cb0a107c64dc9c434c0f331fdc545223c9d9293fb7fc57b85ca54256fa" +hash = "d6b7760ec72d74f166da2736ca9d0c70677727812d6e6dd7af80a685ee271b6c" [versions] minecraft = "1.21.1"