RU 📌 Pinned

Как сделать?

Dark[Ol(U23)leneri] #34 18.04.2010 22:57 6408 comments 2424481 views

Svartberg,
А, понял вроде. Это и есть двумерные массивы? А черточка там зачем вообще понизу? Для удобства?

St-john,
Я бы не назвал его двумерным массивом, это просто массив, как значение [1] или [a]. Эта черточка для объединения, иначе пришлось бы создавать массив вида. material[’<<$loc>>,<<$punkt>>’]
Тогда бы значение material было бы иное, поскольку появляется уже 2 идентификатора.

Aleks Versus Moderator 08.11.2015 14:57 (10 years ago)

St-john,
пожалуйста

Spoiler
$args[0] = $args[0]	&	!	в $args[0] записано имя массива. Я потом поясню, почему переменные дублируются
$args[1] = $args[1]	&	!	в $args[1] записано значение, по которому следует удалять элементы
args['size']=arrsize($args[0])	&	!	запоминаем размер массива с именем $args[0]. Счётчик
! метка for нужна для организации цикла
:for
if instr($args[0],'$')=1:
! если первым символом в названии массива стоит знак $, значит массив текстовый
	! и мы ищем первый попавшийся элемент, который соответствует текстовому значению $args[1]
	args['pos']=arrpos($args[0],$args[1])	&	!	получаем позицию элемента
else
! если первым символом в названии массива стоит любой другой знак, значит массив числовой
	! и мы ищем первый попавшийся элемент, который соответствует числовому значению args[1]
	args['pos']=arrpos($args[0],args[1])	&	!	получаем позицию элемента
end
! если мы нашли элемент, соответствующий указанному значению
! и размер массива ещё не равен нулю, а так же счётчик не откатился к нулю (защита от дурака)
if args['pos']!-1 and arrsize($args[0])>0 and args['size']>0:
	killvar $args[0],args['pos']	&	!	удаляем найденный элемент
	args['size']-=1	&	!	уменьшаем счётчик на 1
	jump 'for'	&	!	возвращаемся к метке for
end

Этот код записывается отдельной локацией. Например, создаёшь локацию array.clr и кидаешь туда этот код. Допустим тебе нужно из массива ‘$mass’ удалить все элементы с таким текстом: ‘жесть’. Обращаешься к этой локации по gosub:

gosub 'array.clr','$mass','жесть'

Если бы ты писал этот код отдельно для того же случая (не универсальный так сказать) он бы выглядел так:

Spoiler
size=arrsize('$mass')	&	!	запоминаем размер массива с именем '$mass'. Счётчик
! метка for нужна для организации цикла
:for
! ищем первый попавшийся элемент, который соответствует текстовому значению 'жесть'
pos=arrpos('$mass','жесть')	&	!	получаем позицию элемента
! если мы нашли элемент, соответствующий указанному значению
! и размер массива ещё не равен нулю, а так же счётчик не откатился к нулю (защита от дурака)
if pos!-1 and arrsize('$mass')>0 and size>0:
	killvar '$mass',pos	&	!	удаляем найденный элемент
	size-=1	&	!	уменьшаем счётчик на 1
	jump 'for'	&	!	возвращаемся к метке for
end

Дублирование $args связано с этой темой, с этой темой, и с этой темой.

Всем спасибо, буду разбираться :)

У меня есть предмет с именем <<$item>> , изначально ему присваивается имя «пустая ячейка» и он не имеет каких либо свойств. Так же есть действие в котором предмету дается другое имя («Персонаж1») с новыми свойствами (меню). Так вот, меню у предмета появляется, а вот имя предмета меняться не хочет. Что делать?

К сожалению код сейчас показать не получится. По задумке в инвентаре должно получится так:

— Группа —
Персонаж1
Пустая ячейка
Пустая ячейка
— Инвентарь —

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

Aleks Versus Moderator 09.11.2015 07:38 (10 years ago)

BiK,
ты не можешь заменить имя в инвентаре?

!ищем предмет по имени
i = 1
:loop
if no i > countobj:
	if instr($getobj(i),'Пустая ячейка')!0:
		objnumber = i
	else
		i=i+1
		jump 'loop'
	end
end
!удаляем предмет по имени
delobj $getobj(objnumber)
!вставляем на его место новый предмет
addobj $item,'',objnumber

Плохо помню, указана ли в справке возможность добавлять предмет в указанную позицию, но работает это так:

addobj [$название],[$путь к файлу картинки],[#номер по порядку в инвентаре]

Этих двух команд оказалось достаточно, спасибо.

delobj $getobj(objnumber) 
addobj $item,'',objnumber

Приветы!
Возник вопрос такого свойства: как сделать, чтобы не расписывать каждую строчку ‘<i><b><font color = yellow>Ждать</font></b></i>’, а задать наклон, толщину и цвет всего текста один раз для локации, а в нужных местах только менять цвет и размер?

Это тебе CSS в помощь, а CSS только в AeroQSP

Aleks Versus, помоги еще с одним вопросом, если не сложно.

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

— Группа —
Персонаж1
Персонаж2
— Инвентарь —
Предмет

Переключившись на второго, этот предмет отображаться в списке не должен.

— Группа —
Персонаж1
Персонаж2
— Инвентарь —

И наоборот.

Если будет нужен пример моего кода, то я его смогу только завтра выложить.

Aleks Versus Moderator 13.11.2015 06:57 (10 years ago)

Aaaspavel,
приблизительно так. В самой первой локации задаём

$onnewloc = 'onNewLoc'

Создаём локацию onNewLoc, где пишем следующее:

$print_text = '<font><i><b>'+$maintext+'</b></i></font>'
*clr
*p $print_text

Так будет задано форматирование для всего текста, выводимого на локацию. Естественно, чтоб в такой текст вставить неформатированный текст, придётся поизгаляться, или придумать способ посложнее.
Есть ещё в классическом плеере такие штуки, как fcolor lcolor bcolor fsize $fname. Может быть тебе их достаточно?
BiK,
вообще всё довольно просто делается через массивы. Т.е. ты не хранишь предметы/персонажей в окне инвентаря, а хранишь всё в наборе массивов. Потом уже по мере необходимости из этих массивов восстанавливаешь нужные тебе персонажи/предметы в виде “типа предметов” в окне инвентаря. Если непонятно, пример напишу.

Aleks Versus, если тебя не затруднит напиши на примере двух персонажей.
Я пытался придумать как осуществить данную возможность в игре, но сообразил только такую систему:
Инвентарь для всех персонажей общий, но в нем подсвечиваются только те предметы которые были приписаны определенному персонажу, у остальных предметов просто не появляется меню действий. А хотелось что бы инвентарь очищался от этих предметов и при смене персонажа они возвращались.

Прошу прощения за быть может глупый вопрос - не до конца разобрался с массивами еще. На конкретном примере:
Есть массив аудиокомпозиций:
$tracklist_1[0] = ’1.ogg’
$tracklist_1[1] = ’2.ogg’
$tracklist_1[2] = ’3.ogg’
$tracklist_1[3] = ’4.ogg’
$tracklist_1[4] = ’5.ogg’
$tracklist_1[5] = ’6.ogg’

Реализовано переключение на
$tracklist_2[0] = ’2.ogg’
$tracklist_2[1] = ’3.ogg’
$tracklist_2[2] = ’4.ogg’

Воспроизведение зациклено, можно переключаться между плейлистами. Как мне вернуть индекс той композиции, что играет в данный момент? Как вернуть название композиции, что сейчас играет?

Aleks Versus Moderator 14.11.2015 16:56 (10 years ago)

St-john,
перебором через isplay, насколько я представляю.
BiK,
напишу. На той неделе напишу. Пока у меня нет времени.

Aleks Versus Moderator 15.11.2015 08:19 (10 years ago)

BiK,
выдался свободный час, написал. Не знаю, будет ли понятно, но вроде бы написал проще некуда.
––obyektyi.qsp––

Log in or Register to post comments.