Mar. 28th, 2024

 ну, он конечно молодец, создал объект трусы не знаю еще правильно или не правильно... но возникает вопрос, что с этими трусами делать то? как их в тексте отобразить и все такое. Еще упростим задачу, пока просто предметы без свойств.

Для создания множества объектов в инвентаре и отображения их в виде ссылок в пассаже "Инвентарь" можно использовать массив, в котором будут храниться добавленные предметы. Вот пример кода, который демонстрирует этот подход с яблоком, грибочком и кубиком:
Создание массива для хранения предметов в инвентаре:
javascript
:: StoryInit
<<set $inventory = []>>
 
 
Добавление предметов (яблоко, грибочек, кубик) в инвентарь:
javascript
<<set $inventory.push("яблоко")>>
<<set $inventory.push("грибочек")>>
<<set $inventory.push("кубик")>>
 
Отображение добавленных предметов в виде ссылок в пассаже "Инвентарь":
javascript
<<if $inventory.length > 0>>
    <h2>Предметы в вашем инвентаре:</h2>
    <<for _item range $inventory>>
        <<link "Посмотреть $_item">>
            $_item
        <</link>>
        <br>
    <</for>>
<<else>>
    <p>Ваш инвентарь пуст.</p>
<</if>>
 
Этот код создает массив $inventory, добавляет в него предметы (яблоко, грибочек, кубик) и отображает их в виде ссылок в пассаже "Инвентарь". При клике на ссылку можно просмотреть каждый добавленный предмет... Хотя....

 

 

логично добавлять предметы в инвентарь внутри ссылки, чтобы игрок мог добавить предмет по своему выбору. Вот пример ссылки для добавления яблока в инвентарь:

javascript

<<link "Положить яблоко в инвентарь">>

    <<set $inventory.push("яблоко")>>

    Яблоко добавлено в ваш инвентарь.

<</link>>

 

Этот код создает ссылку "Положить яблоко в инвентарь", при клике на которую в инвентарь будет добавлено яблоко, а игрок увидит сообщение "Яблоко добавлено в ваш инвентарь". Подобным образом можно создать ссылки для добавления других предметов в инвентарь.
=====================================================================
Не знаю почему эти ИИ называют ГПТ, перплексити, Бинг и другими красивыми словами. Натуральные же Хоттабычи. Неожиданно... этот код почти работает...

 

почти работает, только вот у меня в инвентарь с каждым кликом по ссылке добавляется не ссылка на объект яблоко, ссылка:  "Посмотреть $_item". При клике на которую ничего не происходит

Answer

Для того чтобы ссылки в инвентаре отображались корректно и позволяли просматривать соответствующие предметы, необходимо правильно использовать переменные внутри ссылок. Вот исправленный код, который позволит корректно отображать ссылки на предметы в инвентаре:

Добавление предметов в инвентарь с использованием объектов:

javascript

<<set $inventory = []>>

 

<<set $apple = {

    name: "яблоко"

}>>

<<set $mushroom = {

    name: "грибочек"

}>>

<<set $cube = {

    name: "кубик"

}>>

 

<<set $inventory.push($apple)>>

<<set $inventory.push($mushroom)>>

<<set $inventory.push($cube)>>

 

Отображение предметов в виде ссылок в пассаже "Инвентарь":

javascript

<<if $inventory.length > 0>>

    <h2>Предметы в вашем инвентаре:</h2>

    <<for _item range $inventory>>

        <<link "Посмотреть $_item.name">>

            $_item.name

        <</link>>

        <br>

    <</for>>

<<else>>

    <p>Ваш инвентарь пуст.</p>

<</if>>

 

Теперь при клике на ссылку "Посмотреть яблоко", "Посмотреть грибочек" или "Посмотреть кубик", игрок сможет просмотреть соответствующий предмет из инвентаря.

 Это я каждый раз должен новую переменную на каждый объект прописывать: грыбочек, яблочко... хм... над как-то это классифицировать и упорядочить...

Ок, еще не всё понятно мне поэтому зададим еще один провокационный вопрос:

а, если объект с именем яблоко будет еще и красным и сладким? Как будет выглядеть код?

Для добавления дополнительных свойств, таких как цвет и вкус, к объекту "яблоко" и отображения их в ссылках в инвентаре, вам нужно расширить структуру объекта и использовать эти свойства при отображении предметов. Вот как это может быть реализовано:

Обновление объекта "яблоко" с дополнительными свойствами (цвет, вкус):

javascript

<<set $apple = {

    name: "яблоко",

    color: "красное",

    taste: "сладкое"

}>>

 

Добавление объекта "яблоко" в инвентарь с обновленными свойствами:

javascript

<<set $inventory.push($apple)>>

 

Отображение предметов в виде ссылок с учетом новых свойств в пассаже "Инвентарь":

javascript

<<if $inventory.length > 0>>

    <h2>Предметы в вашем инвентаре:</h2>

    <<for _item range $inventory>>

        <<link "Посмотреть $_item.name - Цвет: $_item.color, Вкус: $_item.taste">>

            $_item.name

        <</link>>

        <br>

    <</for>>

<<else>>

    <p>Ваш инвентарь пуст.</p>

<</if>>

 

Теперь при клике на ссылку "Посмотреть яблоко - Цвет: красное, Вкус: сладкое", игрок сможет просмотреть яблоко с указанными свойствами из инвентаря.


 

Вон оно чо Петрович.... тут такие горизонты открываются...


================================================================

 Это тебе так кажется, Хоттабыч, что может на самом деле он выдает ссылку такого вида: 

$_item.name - Цвет: $_item.color, Вкус: $_item.taste

 

Ну, не первый день замужем, поэтому тактично напоминаем, а ты не забыл ли где-то print прописать?

***

О! Волька! Да, для вывода значений свойств объекта в ссылках в инвентаре необходимо использовать <<print>> для корректного отображения. Вот исправленный код с добавлением <<print>>:

javascript

<<if $inventory.length > 0>>

    <h2>Предметы в вашем инвентаре:</h2>

    <<for _item range $inventory>>

        <<link "Посмотреть <<print _item.name>> - Цвет: <<print _item.color>>, Вкус: <<print _item.taste>>">>

            <<print _item.name>>

        <</link>>

        <br>

    <</for>>

<<else>>

    <p>Ваш инвентарь пуст.</p>

<</if>>

 

Теперь при клике на ссылку в инвентаре, будут корректно отображаться значения свойств объекта (цвет, вкус) вместо их кодовых названий.

========

Теперь работает как заказано, ссылка отображается виде: Посмотреть яблоко - Цвет: красное, Вкус: сладкое

 

 

но... принтов-то принтов навертел, что твой Д. Гордон мерчей...

Трем лампу и прашиваем: Одним принтом никак нельзя было обойтись?

Конечно, О. Волька!:

<<if $inventory.length > 0>>

    <h2>Предметы в вашем инвентаре:</h2>

    <<for _item range $inventory>>

        <<link "Посмотреть $_item.name - Цвет: $_item.color, Вкус: $_item.taste">>

            $_item.name

        <</link>>

        <br>

    <</for>>

<<else>>

    <p>Ваш инвентарь пуст.</p>

<</if>>

 

на выходе получаем: Посмотреть яблоко - Цвет: <<красное>>, Вкус: <<сладкое>>

При нажатии на ссылку ничего не происходит, но... оно потом будет добавлено. В принципе достигнутый вариант меня уже устраивает. Хотя, мне кажется, что принто можно еще иначе как-то прописать. Трем лампу...

============================================

И тут Хоттабыч психанул и выдал прекрасное и лаконичное и ваще и в борще без принта. И ссылочку выдающее прекрасную вида:

 

"Посмотреть яблоко - Цвет: красное, Вкус: сладкое".

 

И главное без поллитры не понять, что он сделал почему оно раньше не работало, а теперь работает...

 

 

<<if $inventory.length > 0>>

    <h2>Предметы в вашем инвентаре:</h2>

    <<for _item range $inventory>>

        <<link "Посмотреть <<= _item.name >> - Цвет: <<= _item.color >>, Вкус: <<= _item.taste >>">>

            <<= _item.name >>

        <</link>>

        <br>

    <</for>>

<<else>>

    <p>Ваш инвентарь пуст.</p>

<</if>>

 

Да, можно использовать другой способ для вывода значений свойств объекта внутри ссылки без повторения <<print>>. Один из вариантов - использовать <<=>> для вывода переменных внутри текста. Вот как это может выглядеть:

Этот вариант позволяет выводить значения переменных внутри текста без использования дополнительных <<print>>, сохраняя при этом хорошую читаемость и выделение изменяемых переменных.

 

<<=>> - это макрос в формате SugarCube, который используется для вывода значений переменных внутри текста без необходимости использования дополнительных <<print>>. Он позволяет вставлять переменные прямо в тексте, обрамляя их двумя <<=>>.

Пример использования <<=>>:

javascript

<<set $name = "Alice">>

Привет, <<= $name >>! Как дела?

Макрос <<=>> является специфичным для формата SugarCube, который используется в инструменте Twine для создания интерактивных текстовых игр и историй. Он не является стандартным макросом в других языках программирования, таких как Rust, C++, или ассемблер.

Таким образом, макрос <<=>> применяется исключительно в контексте использования Twine и SugarCube для удобного вывода переменных внутри текста без необходимости использования дополнительных макросов или тегов.

В данном примере, значение переменной $name будет выведено прямо в тексте без использования дополнительных макросов или тегов, что делает код более читаемым и компактным.

Просто, красиво, лаконично... Просто прекрасно для ИИ и чайника, кому не нравиЦЦо, просьба не оскорбляться созерцанием сего. На этом этапе сделаем паузу и попробуем её осмыслить.

 

В принципе я имею три работающих кода для отображение ссылки в инвентаре, с которыми можно дальше работать. <<=>> интересный макрос в СугарКубе, но какой-то неявный поэтому использую я первый вариант кода.

Profile

blocknote

January 2025

S M T W T F S
    1234
567891011
12131415 161718
19202122232425
2627 28293031 

Style Credit

Expand Cut Tags

No cut tags
Powered by Dreamwidth Studios