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

Для создания множества объектов в инвентаре и отображения их в виде ссылок в пассаже "Инвентарь" можно использовать массив, в котором будут храниться добавленные предметы. Вот пример кода, который демонстрирует этот подход с яблоком, грибочком и кубиком:
Создание массива для хранения предметов в инвентаре:
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 будет выведено прямо в тексте без использования дополнительных макросов или тегов, что делает код более читаемым и компактным.

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

 

В принципе я имею три работающих кода для отображение ссылки в инвентаре, с которыми можно дальше работать. <<=>> интересный макрос в СугарКубе, но какой-то неявный поэтому использую я первый вариант кода.
(will be screened)
(will be screened)
(will be screened)
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

Profile

blocknote

January 2025

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

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Powered by Dreamwidth Studios