RU

Инвентарь с подпунктами

Zeantar #495 06.05.2012 12:54 10 comments 11235 views

Я тут экспериментировал, чтобы сделать в окне инвентаря разворачивающееся меню. Например, в инвентаре есть сумка, и в неё складываются предметы. Нажимаешь на неё в инвентаре - она разворачивает список предметов внутри.
http://narod.ru/disk/48312133001.ebca41c3b1fa78cf860c003f2eae26f0/bag.zip.html

Тестовый файл. Есть предмет “Сумка”, и внутрь его можно добавлять другие предметы.
Может есть где-то уже устоявшаяся реализация? Буду рад примерам.
(А вообще не люблю возню с псевдоязыками)

Aleks Versus Moderator 06.05.2012 16:24 (13 years ago)

Если я правильно понял, ты хочешь, чтобы все предметы выводились в окне инвентаря. Вот пример. Грубовато, но при фантазии можно сделать что-нить поизящнее.

Spoiler
# начало
$onobjsel = 'onobjsel'
usehtml = 1 & ! скрываем теги
!  делаем сумку и предметы в ней
$bug_1[0]='закрыть сумку<bug.close:1>'
$bug_1[1]='отвёртка'
$bug_1[2]='молоток'
$bug_1[3]='ножовка'
$bug_1[4]='гвозди'
! добавляем предметы
addobj 'сумка<bug.open:1>'
addobj 'бутылка с вином'
addobj 'увеличительное стекло'
addobj 'билет на трамвай'
addobj 'спички'
--- начало ---------------------------------

# onobjsel
gosub 'bug.sel' & ! операции с сумкой
unselect
--- onobjsel ---------------------------------

# bug.sel
if $strfind($selobj,'<bug.close:[\d]+>')!'': gosub 'bug.close',val($replace($replace($strfind($selobj,'<bug.close:[\d]+>'),'<bug.close:'),'>'))
if $strfind($selobj,'<bug.open:[\d]+>')!'': gosub 'bug.open',val($replace($replace($strfind($selobj,'<bug.open:[\d]+>'),'<bug.open:'),'>'))
--- bug.sel ---------------------------------

# bug.open
! args[0] - номер обрабатываемой сумки
i = countobj
killvar '$obj_member'
:из инвентаря в память
if i>0:
	$obj_member[i] = getobj(i)
	i-=1
	if i>0: jump 'из инвентаря в память'
end
killobj
i=1
:из сумки в инвентарь
if no i > arrsize('bug_<<args[0]>>'):
	dynamic "addobj $bug_<<args[0]>>[i-1]"
	i+=1
	if no i > arrsize('bug_<<args[0]>>'): jump 'из сумки в инвентарь'
end
killvar 'i'
--- bug.open ---------------------------------

# bug.close
! args[0] - номер обрабатываемой сумки
killobj
i = 1
arrsize('$obj_member')
:из памяти в инвентарь
if no i > arrsize('$obj_member'):
	addobj $obj_member[i]
	i+=1
	if no i > arrsize('$obj_member'): jump 'из памяти в инвентарь'
end
killvar '$obj_member'
killvar 'i'
--- bug.close ---------------------------------

qsp-файл: http://aleksversus.narod.ru/res/easy.poket.qsp

не работает

Aleks Versus Moderator 06.05.2012 18:18 (13 years ago)

Странно. Сейчас выложу qsp-файл.

Aleks Versus Moderator 06.05.2012 18:23 (13 years ago)

Держи. Попробуй. Если не заработает, скажи в каком месте.
http://aleksversus.narod.ru/res/easy.poket.qsp

Работает, но моя реализация мне больше нравится

Aleks Versus Moderator 06.05.2012 19:00 (13 years ago)

Ну. Хозяин барин. :)

В примерах кода “28 в 1” на странице “Разработчикам” есть.

Кот Шрёдингера #561 10.05.2012 10:14 (13 years ago)

Благодарю, помогло, тоже в такой сумке нуждался

Aleks Versus Moderator 11.05.2012 16:49 (13 years ago)

Что-то я в “28 в 1” не нашел. =(

Aleks Versus,
я ошибся, думал вы говорите про всплывающее меню для предметов в инвентаре, а вы говорили про контейнеры. Контейнеров действительно нет в примерах кода.

Log in or Register to post comments.