Compare commits
6
Commits
v0.6.0
...
4a0e2884b6
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4a0e2884b6 | ||
|
|
71406c6df6 | ||
|
|
f5f8fcc367 | ||
|
|
d1a9b9d1f6 | ||
|
|
42ee586e63 | ||
|
|
3baf5e8493 |
+2
-7
@@ -805,7 +805,7 @@ file = "config/yacl.json5"
|
|||||||
hash = "121b93764159be6fb7dab523b29a844e2bb78400ce8c48f52135a097e9b0006e"
|
hash = "121b93764159be6fb7dab523b29a844e2bb78400ce8c48f52135a097e9b0006e"
|
||||||
|
|
||||||
[[files]]
|
[[files]]
|
||||||
file = "kubejs/assets/computercraft/textures/gui/CREDITS.txt"
|
file = "kubejs/assets/computercraft/textures/gui/credits.txt"
|
||||||
hash = "19b844245d03fcdd488a7a791e287447191a74acd0f14995209339d768c5e6ce"
|
hash = "19b844245d03fcdd488a7a791e287447191a74acd0f14995209339d768c5e6ce"
|
||||||
|
|
||||||
[[files]]
|
[[files]]
|
||||||
@@ -814,7 +814,7 @@ hash = "db4c4a8ab49265f6e8e456f495800ea148b133b18a3242aabca30b98ab7f784f"
|
|||||||
|
|
||||||
[[files]]
|
[[files]]
|
||||||
file = "kubejs/client_scripts/createrp_ponder.js"
|
file = "kubejs/client_scripts/createrp_ponder.js"
|
||||||
hash = "193c9f8b283e32f85504f8b198869d80f6ba1647924884a7f0db7de5eb8c6b47"
|
hash = "0e7e06daedb3a934448119f0d8688e96f1690af484bbf5e7745735bee7c3cd13"
|
||||||
|
|
||||||
[[files]]
|
[[files]]
|
||||||
file = "kubejs/startup_scripts/createrp_items.js"
|
file = "kubejs/startup_scripts/createrp_items.js"
|
||||||
@@ -1370,11 +1370,6 @@ file = "mods/what-are-they-up-to.pw.toml"
|
|||||||
hash = "9ce52d07c0c3d146a2a44f8bc187138ce7a5558a4e3ab540c86234702b6de274"
|
hash = "9ce52d07c0c3d146a2a44f8bc187138ce7a5558a4e3ab540c86234702b6de274"
|
||||||
metafile = true
|
metafile = true
|
||||||
|
|
||||||
[[files]]
|
|
||||||
file = "mods/x+-autofish.pw.toml"
|
|
||||||
hash = "29d142218e15fbd26a4e17e1a65dab7a5a0dd81e6806130a474c1d27fa1be53d"
|
|
||||||
metafile = true
|
|
||||||
|
|
||||||
[[files]]
|
[[files]]
|
||||||
file = "mods/yacl.pw.toml"
|
file = "mods/yacl.pw.toml"
|
||||||
hash = "539f362e9e192cf3b2813e0dfdfc51a5e6814129c6e82a9733842529beea6242"
|
hash = "539f362e9e192cf3b2813e0dfdfc51a5e6814129c6e82a9733842529beea6242"
|
||||||
|
|||||||
@@ -1,16 +1,121 @@
|
|||||||
// Create RP — туторіал у стилі Create (Ponder): наведи на предмет і затисни W.
|
// Create RP — туторіал у стилі Create (Ponder): наведи на предмет і затисни W.
|
||||||
// Потрібні PonderJS (мод «Ponder for KubeJS») і startup_scripts/createrp_items.js (предмет kubejs:citizen_guide).
|
// Потрібні 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'
|
const PACKAGE = 'create:cardboard_package_10x12'
|
||||||
|
|
||||||
// посилка «летить» від однієї пакужаби до іншої: лінія маршруту + предмет-посилка
|
// Справжні посилки на ланцюгах — тими ж викликами, що й у сценах самого Create (FrogAndConveyorScenes).
|
||||||
function sendPackage(scene, from, to, ticks) {
|
// Якщо KubeJS не дасть доступу до класів — сцени все одно покажуть мережу й текст, лише без руху посилок.
|
||||||
scene.overlay.showBigLine(PonderPalette.OUTPUT, from, to, ticks)
|
let CreateScene = null, Frogport = null, ChainConveyor = null, PackageItem = null, PackageStyles = null
|
||||||
const dx = (to[0] - from[0]) / ticks, dy = 0.22, dz = (to[2] - from[2]) / ticks
|
try {
|
||||||
const box = scene.world.createItemEntity(from, [dx, dy, dz], PACKAGE)
|
CreateScene = Java.loadClass('com.simibubi.create.foundation.ponder.CreateSceneBuilder')
|
||||||
scene.idle(ticks)
|
Frogport = Java.loadClass('com.simibubi.create.content.logistics.packagePort.frogport.FrogportBlockEntity')
|
||||||
scene.world.removeEntity(box)
|
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.world.showSection([2, 1, 2], Direction.DOWN)
|
||||||
scene.idle(15)
|
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.showControls(60, [2.5, 2, 2.5], 'down').rightClick()
|
||||||
scene.idle(90)
|
say(scene, 70, 'Будь-який комп\'ютер — термінал держави', [2.5, 1.5, 2.5], null, true)
|
||||||
|
say(scene, 60, 'Набери rp і натисни Enter', [2.5, 1.5, 2.5])
|
||||||
scene.text(90, 'Вхід — твій _нік_ і _пароль_. Першого разу термінал попросить створити пароль. Стій поруч із комп\'ютером — здалеку не пустить.', [2.5, 1.5, 2.5])
|
say(scene, 70, 'Увійди: свій нік і пароль', [2.5, 1.5, 2.5], PonderPalette.BLUE, true)
|
||||||
.placeNearTarget().attachKeyFrame()
|
say(scene, 70, 'Першого разу термінал попросить створити пароль', [2.5, 1.5, 2.5])
|
||||||
scene.idle(100)
|
say(scene, 60, 'Стій поруч — здалеку не пустить', [2.5, 1.5, 2.5], PonderPalette.RED)
|
||||||
|
say(scene, 80, 'Тут усе: рахунок, бізнес, ціни, магазин, земля, робота, банк', [2.5, 1.5, 2.5], null, true)
|
||||||
scene.text(90, 'У меню: _рахунок_, _бізнес_, _ціни_, _магазин_, _земля_, _робота_, _тендери_, _банк_. Стрілки й Enter, Backspace — назад.', [2.5, 1.5, 2.5])
|
|
||||||
.placeNearTarget()
|
|
||||||
scene.idle(100)
|
|
||||||
|
|
||||||
scene.world.showSection([1, 1, 3, 3, 2, 3], Direction.DOWN)
|
scene.world.showSection([1, 1, 3, 3, 2, 3], Direction.DOWN)
|
||||||
scene.idle(15)
|
scene.idle(15)
|
||||||
scene.text(90, 'Комп\'ютер з _монітором_ — табло цін держави: програма _prices metal_ (або stone, wood, farm, food, create…).', [2, 2.5, 3])
|
say(scene, 70, 'Додай монітор — і набери prices metal', [2, 2.5, 3], PonderPalette.BLUE, true)
|
||||||
.colored(PonderPalette.BLUE).placeNearTarget().attachKeyFrame()
|
say(scene, 60, 'Вийде табло цін держави', [2, 2.5, 3])
|
||||||
scene.idle(100)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------------------------
|
||||||
// 2. Продаж державі
|
// 2. Продаж державі
|
||||||
|
|
||||||
function sellScene(scene, util) {
|
function sellScene(scene, util) {
|
||||||
scene.showBasePlate()
|
showChainNetwork(scene, util)
|
||||||
// бізнес ліворуч: сховище → пакувальник → пакужаба; держава праворуч
|
say(scene, 70, 'Держава купує все, що ти добуваєш і виробляєш', [4, 4.5, 4], null, true)
|
||||||
scene.world.setBlocks([0, 1, 2], 'minecraft:barrel')
|
say(scene, 70, 'Товар їде до неї посилками по ланцюгах', [4, 4.5, 7])
|
||||||
scene.world.setBlocks([1, 1, 2], 'create:packager')
|
|
||||||
scene.world.setBlocks([1, 2, 2], 'create:package_frogport')
|
showRightSide(scene, util)
|
||||||
scene.world.setBlocks([3, 1, 2], 'create:packager')
|
scene.world.showSection(util.select.position(4, 1, 2), Direction.EAST)
|
||||||
scene.world.setBlocks([3, 2, 2], 'create:package_frogport')
|
|
||||||
scene.idle(10)
|
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)
|
showLeftSide(scene, util)
|
||||||
scene.idle(5)
|
say(scene, 80, 'Це державна пакужаба — вона приймає всі адреси gov-…', [2.5, 2.5, 5.5], PonderPalette.BLUE, true)
|
||||||
scene.world.showSection([1, 1, 2], Direction.DOWN)
|
|
||||||
scene.idle(5)
|
|
||||||
scene.world.showSection([1, 2, 2], Direction.DOWN)
|
|
||||||
scene.idle(15)
|
|
||||||
|
|
||||||
scene.text(90, 'Держава _купує_ все, що добувають і виробляють: руду, метали, будматеріали, їжу, деталі Create.', [1.5, 2.5, 2.5])
|
scene.text(60, 'Посилка їде ланцюгами…', [6.78, 4.37, 3.5]).placeNearTarget()
|
||||||
.placeNearTarget().attachKeyFrame()
|
shipOnChains(scene, util, 'gov-a1b2c3')
|
||||||
scene.idle(100)
|
say(scene, 70, '…і гроші приходять на рахунок бізнесу', [2.5, 2.5, 5.5], PonderPalette.GREEN, true)
|
||||||
|
say(scene, 70, 'Багато однакового товару — ціна падає', [4, 4.5, 4], PonderPalette.RED)
|
||||||
scene.text(100, 'Адреса продажу твого бізнесу — _gov-…_ (термінал → Бізнес → Адреса продажу). Познач нею пакувальник табличкою або в замовленні.', [1.5, 1.5, 2.5])
|
say(scene, 60, 'Дефіцит — ціна росте', [4, 4.5, 4], PonderPalette.GREEN)
|
||||||
.placeNearTarget().attachKeyFrame()
|
say(scene, 60, 'Ціни дивись на табло або в терміналі', [4, 4.5, 4])
|
||||||
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)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------------------------
|
||||||
// 3. Покупка в держави
|
// 3. Покупки в держави
|
||||||
|
|
||||||
function buyScene(scene, util) {
|
function buyScene(scene, util) {
|
||||||
scene.showBasePlate()
|
showChainNetwork(scene, util)
|
||||||
scene.world.setBlocks([3, 1, 2], 'create:packager')
|
showRightSide(scene, util)
|
||||||
scene.world.setBlocks([3, 2, 2], 'create:package_frogport')
|
say(scene, 70, 'Це державний склад', [5.5, 2.5, 2.5], PonderPalette.BLUE, true)
|
||||||
scene.world.setBlocks([0, 1, 2], 'minecraft:chest')
|
say(scene, 80, 'Держава продає імпорт: алмази, незерит, елітри, ліцензії', [5.5, 2.5, 2.5])
|
||||||
scene.world.setBlocks([1, 1, 2], 'create:packager')
|
say(scene, 60, 'Купуй у терміналі: Магазин держави', [4, 4.5, 4])
|
||||||
scene.world.setBlocks([1, 2, 2], 'create:package_frogport')
|
|
||||||
scene.idle(10)
|
|
||||||
|
|
||||||
scene.world.showSection([3, 1, 2, 3, 2, 2], Direction.DOWN)
|
showLeftSide(scene, util)
|
||||||
scene.idle(15)
|
say(scene, 70, 'Це твоя пакужаба, напр. «Склад Олі»', [2.5, 2.5, 5.5], null, true)
|
||||||
scene.text(90, 'Держава продає _імпорт_ (алмази, незерит, елітри…) і _ліцензії_. Купівля — термінал → Магазин держави.', [3.5, 2.5, 2.5])
|
say(scene, 70, 'Цю назву впиши як адресу доставки', [2.5, 2.5, 5.5], PonderPalette.BLUE)
|
||||||
.placeNearTarget().attachKeyFrame()
|
|
||||||
scene.idle(100)
|
|
||||||
|
|
||||||
scene.world.showSection([0, 1, 2], Direction.DOWN)
|
shipOnChains(scene, util, 'Склад Олі')
|
||||||
scene.idle(5)
|
say(scene, 70, 'Посилка приїжджає сама', [2.5, 2.5, 5.5], PonderPalette.GREEN, true)
|
||||||
scene.world.showSection([1, 1, 2, 1, 2, 2], Direction.DOWN)
|
say(scene, 70, 'Пакувальник розпакує її у скриню', [3.5, 1.5, 5.5])
|
||||||
scene.idle(15)
|
say(scene, 70, 'Не доїхала — гроші повернуться самі', [4, 4.5, 4], PonderPalette.RED)
|
||||||
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)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------------------------
|
||||||
@@ -138,9 +198,8 @@ function moneyScene(scene, util) {
|
|||||||
scene.world.showSection([2, 1, 2], Direction.DOWN)
|
scene.world.showSection([2, 1, 2], Direction.DOWN)
|
||||||
scene.idle(15)
|
scene.idle(15)
|
||||||
|
|
||||||
scene.text(90, 'Твої гроші — на _рахунку_ в державному банку. Баланс і перекази — термінал → Рахунок.', [2.5, 1.5, 2.5])
|
say(scene, 70, 'Твої гроші лежать на рахунку в банку', [2.5, 1.5, 2.5], null, true)
|
||||||
.placeNearTarget().attachKeyFrame()
|
say(scene, 60, 'Баланс і перекази — у терміналі', [2.5, 1.5, 2.5])
|
||||||
scene.idle(100)
|
|
||||||
|
|
||||||
const coins = ['numismatics:spur', 'numismatics:bevel', 'numismatics:sprocket', 'numismatics:cog']
|
const coins = ['numismatics:spur', 'numismatics:bevel', 'numismatics:sprocket', 'numismatics:cog']
|
||||||
for (let i = 0; i < coins.length; i++) {
|
for (let i = 0; i < coins.length; i++) {
|
||||||
@@ -148,17 +207,13 @@ function moneyScene(scene, util) {
|
|||||||
scene.idle(5)
|
scene.idle(5)
|
||||||
}
|
}
|
||||||
scene.idle(10)
|
scene.idle(10)
|
||||||
scene.text(110, '_Готівка_ — монети: зняти /cash withdraw <сума>, покласти — /cash deposit з монетами в руці. Готівкою платять одне одному з рук.', [2.5, 2, 1.5])
|
say(scene, 70, 'Монети — це готівка', [2.5, 2, 1.5], PonderPalette.GREEN, true)
|
||||||
.colored(PonderPalette.GREEN).placeNearTarget().attachKeyFrame()
|
say(scene, 70, 'Зняти: /cash withdraw <сума>', [2.5, 2, 1.5])
|
||||||
scene.idle(120)
|
say(scene, 70, 'Покласти: монети в руку і /cash deposit', [2.5, 2, 1.5])
|
||||||
|
|
||||||
scene.text(100, '_Банк_ (термінал → Банк): стартовий та інвестиційний кредити для бізнесу, вклади під відсоток щодня.', [2.5, 1.5, 2.5])
|
say(scene, 70, 'Банк дає кредити бізнесу', [2.5, 1.5, 2.5], PonderPalette.BLUE, true)
|
||||||
.placeNearTarget().attachKeyFrame()
|
say(scene, 60, 'А вклад щодня приносить відсоток', [2.5, 1.5, 2.5])
|
||||||
scene.idle(110)
|
say(scene, 80, 'Пропустив 3 платежі по кредиту — рахунок заморожено', [2.5, 1.5, 2.5], PonderPalette.RED)
|
||||||
|
|
||||||
scene.text(90, 'Кредит платиться щоденними внесками. Пропустиш тричі — _дефолт_: рахунок бізнесу заморожено, тендери заборонені.', [2.5, 1.5, 2.5])
|
|
||||||
.colored(PonderPalette.RED).placeNearTarget()
|
|
||||||
scene.idle(100)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------------------------
|
||||||
@@ -173,88 +228,264 @@ function landScene(scene, util) {
|
|||||||
scene.world.setBlocks([2, 1, 2], 'minecraft:iron_ore')
|
scene.world.setBlocks([2, 1, 2], 'minecraft:iron_ore')
|
||||||
scene.idle(10)
|
scene.idle(10)
|
||||||
|
|
||||||
scene.text(90, 'Уся незареєстрована земля _належить державі_. Будувати можна на своїх ділянках.', [2.5, 1, 2.5])
|
say(scene, 70, 'Нічия земля належить державі', [2.5, 1, 2.5], null, true)
|
||||||
.placeNearTarget().attachKeyFrame()
|
|
||||||
scene.idle(100)
|
|
||||||
|
|
||||||
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.world.showSection([1, 1, 1, 3, 1, 3], Direction.DOWN)
|
||||||
scene.text(110, '_Ділянки_ орендують на ігрові дні або викуповують: термінал → Земля. Заходячи на ділянку, бачиш її назву над хотбаром.', [2.5, 1.5, 2.5])
|
say(scene, 70, 'Будуй на своїй ділянці', [2.5, 1.5, 2.5], PonderPalette.GREEN, true)
|
||||||
.colored(PonderPalette.GREEN).placeNearTarget().attachKeyFrame()
|
say(scene, 70, 'Орендуй або купи її в терміналі: Земля', [2.5, 1.5, 2.5])
|
||||||
scene.idle(120)
|
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])
|
scene.overlay.showOutline(PonderPalette.RED, 'ore', util.select.position(2, 1, 2), 150)
|
||||||
.placeNearTarget()
|
say(scene, 70, 'Руду копають лише з концесією', [2.5, 1.5, 2.5], PonderPalette.RED, true)
|
||||||
scene.idle(110)
|
say(scene, 70, 'Купи її в терміналі: Земля → Купити концесію', [2.5, 1.5, 2.5])
|
||||||
|
say(scene, 70, 'Бури Create теж копають лише за концесією', [2.5, 1.5, 2.5])
|
||||||
scene.overlay.showOutline(PonderPalette.RED, 'ore', util.select.position(2, 1, 2), 100)
|
say(scene, 70, 'Найкращі ділянки держава продає на аукціоні', [2.5, 2.5, 2.5], PonderPalette.BLUE, true)
|
||||||
scene.text(100, '_Руда_ видобувається за _концесією_: купи дозвіл на руду й квоту на ділянці (термінал → Земля → Купити концесію).', [2.5, 1.5, 2.5])
|
say(scene, 70, 'Ставки — в терміналі: Земля → Аукціони', [2.5, 2.5, 2.5])
|
||||||
.colored(PonderPalette.RED).placeNearTarget().attachKeyFrame()
|
say(scene, 80, 'За землю платиш щодня. Не платив 3 дні — ділянку забирають', [2.5, 2.5, 2.5])
|
||||||
scene.idle(110)
|
|
||||||
|
|
||||||
scene.text(80, 'За землю щодня — орендна плата або податок. Не заплатив 3 дні — ділянка повертається державі.', [2.5, 2.5, 2.5])
|
|
||||||
scene.idle(90)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------------------------
|
||||||
// 6. Робота: ринок праці і пошта
|
// 6. Робота: ринок праці й пошта
|
||||||
|
|
||||||
function jobsScene(scene, util) {
|
function jobsScene(scene, util) {
|
||||||
scene.showBasePlate()
|
scene.showBasePlate()
|
||||||
scene.idle(10)
|
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.idle(10)
|
||||||
|
|
||||||
scene.text(90, 'Немає роботи? Термінал → Робота → _ринок праці_: допомога по безробіттю щодня, якщо ти був активний у грі.', [2.5, 2.5, 2.5])
|
say(scene, 70, 'Немає роботи? Стань на ринок праці', [2.5, 2.5, 2.5], null, true)
|
||||||
.placeNearTarget().attachKeyFrame()
|
say(scene, 70, 'Держава щодня платить допомогу, якщо ти грав', [2.5, 2.5, 2.5])
|
||||||
scene.idle(100)
|
|
||||||
|
|
||||||
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.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.05, 0.25, 0], PACKAGE)
|
||||||
scene.world.createItemEntity([1.5, 2, 2.5], [0.03, 0.3, 0.03], 'minecraft:compass')
|
scene.world.createItemEntity([1.5, 2, 2.5], [0.03, 0.3, 0.03], 'minecraft:compass')
|
||||||
scene.idle(20)
|
scene.idle(20)
|
||||||
scene.text(100, 'Отримаєш _посилку_ з іменем адресата й _компас_, що вказує на нього. ПКМ компасом — мітка на місці (видно лише тобі).', [2, 1.5, 2.5])
|
say(scene, 70, 'NPC пошти дасть посилку й компас', [2, 1.5, 2.5], null, true)
|
||||||
.placeNearTarget().attachKeyFrame()
|
say(scene, 70, 'Компас веде до адресата', [2, 1.5, 2.5])
|
||||||
scene.idle(110)
|
say(scene, 70, 'ПКМ компасом — мітка на місці', [2, 1.5, 2.5], PonderPalette.BLUE)
|
||||||
|
|
||||||
scene.world.createEntity('minecraft:villager', [4, 1, 2.5])
|
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.overlay.showBigLine(PonderPalette.OUTPUT, [1.5, 1.2, 2.5], [4, 1.2, 2.5], 100)
|
||||||
scene.text(100, 'Адресат чекає в іншій частині світу. Принеси посилку й клікни по ньому — гроші на рахунок. Що далі, то дорожче.', [4, 2.5, 2.5])
|
say(scene, 70, 'Віддай посилку адресату — і отримаєш гроші', [4, 2.5, 2.5], PonderPalette.GREEN, true)
|
||||||
.colored(PonderPalette.GREEN).placeNearTarget().attachKeyFrame()
|
say(scene, 60, 'Що далі везти — то більше платять', [4, 2.5, 2.5])
|
||||||
scene.idle(110)
|
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)
|
// 8. Вантажник
|
||||||
scene.idle(90)
|
|
||||||
|
|
||||||
scene.text(90, 'Або наймися до бізнесу: власник пропонує зарплату, ти приймаєш у терміналі → Бізнес → Прийняти запрошення.', [2.5, 2.5, 2.5])
|
function cargoScene(scene, util) {
|
||||||
scene.idle(100)
|
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])
|
||||||
|
}
|
||||||
|
|
||||||
|
// ---------------------------------------------------------------------------------------------
|
||||||
|
// 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 => {
|
Ponder.tags(event => {
|
||||||
event.createTag('kubejs:createrp', 'kubejs:citizen_guide', 'Держава Create RP',
|
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 => {
|
Ponder.registry(event => {
|
||||||
event.create('kubejs:citizen_guide')
|
event.create('kubejs:citizen_guide')
|
||||||
.scene('guide_terminal', 'Термінал держави', terminalScene)
|
.scene('guide_terminal', 'Термінал держави', terminalScene)
|
||||||
.scene('guide_sell', 'Продаж державі', sellScene)
|
.scene('guide_sell', 'Продаж державі', FROG_STRUCTURE, sellScene)
|
||||||
.scene('guide_buy', 'Покупки в держави', buyScene)
|
.scene('guide_buy', 'Покупки в держави', FROG_STRUCTURE, buyScene)
|
||||||
|
.scene('guide_energy', 'Продаж енергії державі', energyScene)
|
||||||
.scene('guide_money', 'Гроші й банк', moneyScene)
|
.scene('guide_money', 'Гроші й банк', moneyScene)
|
||||||
.scene('guide_land', 'Земля й надра', landScene)
|
.scene('guide_land', 'Земля й надра', landScene)
|
||||||
.scene('guide_jobs', 'Робота: ринок праці й пошта', jobsScene)
|
.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')
|
event.create('create:package_frogport')
|
||||||
.scene('frogport_sell', 'Create RP: продаж державі', sellScene)
|
.scene('frogport_sell', 'Create RP: продаж державі', FROG_STRUCTURE, sellScene)
|
||||||
.scene('frogport_buy', 'Create RP: покупки в держави', buyScene)
|
.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'])
|
event.create(['computercraft:computer_advanced', 'computercraft:computer_normal'])
|
||||||
.scene('computer_terminal', 'Create RP: термінал держави', terminalScene)
|
.scene('computer_terminal', 'Create RP: термінал держави', terminalScene)
|
||||||
|
|||||||
@@ -1,13 +0,0 @@
|
|||||||
name = "XPlus Autofish (Fabric / Forge / NeoForge)"
|
|
||||||
filename = "xplus-autofish-1.3.3-neoforged-mc1.21.1.jar"
|
|
||||||
side = "client"
|
|
||||||
|
|
||||||
[download]
|
|
||||||
url = "https://cdn.modrinth.com/data/2H1rLgy4/versions/nC2iqgow/xplus-autofish-1.3.3-neoforged-mc1.21.1.jar"
|
|
||||||
hash-format = "sha512"
|
|
||||||
hash = "e1680e37749e0229972be0feede3d88141c59e04f6bdc66a61238aad950134e132b366f70361a0cf703e132a8bb2b15dc5befa5989caded852e67a2b829ae6f0"
|
|
||||||
|
|
||||||
[update]
|
|
||||||
[update.modrinth]
|
|
||||||
mod-id = "2H1rLgy4"
|
|
||||||
version = "nC2iqgow"
|
|
||||||
@@ -1,12 +1,12 @@
|
|||||||
name = "Create RP"
|
name = "Create RP"
|
||||||
author = "Pinecraft-CreateRP"
|
author = "Pinecraft-CreateRP"
|
||||||
version = "0.6.0"
|
version = "0.8.0"
|
||||||
pack-format = "packwiz:1.1.0"
|
pack-format = "packwiz:1.1.0"
|
||||||
|
|
||||||
[index]
|
[index]
|
||||||
file = "index.toml"
|
file = "index.toml"
|
||||||
hash-format = "sha256"
|
hash-format = "sha256"
|
||||||
hash = "6502e1eebae1d8993f10f350f6d1ffe6554b04211de7f0646bbcc2212a6c2852"
|
hash = "622f045ba7c17b23c6f5f9f94c7ce85412e5c52d75db00aeedca1633e3ef30df"
|
||||||
|
|
||||||
[versions]
|
[versions]
|
||||||
minecraft = "1.21.1"
|
minecraft = "1.21.1"
|
||||||
|
|||||||
Reference in New Issue
Block a user