Как сделать?
…
Svartberg,
А, понял вроде. Это и есть двумерные массивы? А черточка там зачем вообще понизу? Для удобства?
St-john,
Я бы не назвал его двумерным массивом, это просто массив, как значение [1] или [a]. Эта черточка для объединения, иначе пришлось бы создавать массив вида. material[’<<$loc>>,<<$punkt>>’]
Тогда бы значение material было бы иное, поскольку появляется уже 2 идентификатора.
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
Пустая ячейка
Пустая ячейка
— Инвентарь —
Можно брать людей в группу, если все три ячейки пустые, то персонаж попадает в первую, если первая занята, во вторую. Это все работает, но имя у предметов не меняется.
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
— Инвентарь —
И наоборот.
Если будет нужен пример моего кода, то я его смогу только завтра выложить.
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’
…
Воспроизведение зациклено, можно переключаться между плейлистами. Как мне вернуть индекс той композиции, что играет в данный момент? Как вернуть название композиции, что сейчас играет?
St-john,
перебором через isplay, насколько я представляю.
BiK,
напишу. На той неделе напишу. Пока у меня нет времени.
BiK,
выдался свободный час, написал. Не знаю, будет ли понятно, но вроде бы написал проще некуда.
––obyektyi.qsp––