Помощь в создании "Асатамы III"

Re: Помощь в создании "Асатамы III"

Aleks Versus,
Список предметов в окне предметов отображается по индексу, соответственно, чтоб провести сортировку этого окна нужно переписывать индексы. Или нет?

dmvikar
useravatar
Offline
61 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: Помощь в создании "Асатамы III"

mkir,
Если у тебя в меню пункт Напарники будет следовать сразу после пункта Предметы, то для добавления предмета нужна будет строка

Код:

addobj'Предмет','',индекс

Вместо индекса ставишь число, которое соответствует позиции строчки меню Напарники(меню должно быть пустое, без предметов). Все предметы будут появляться выше).
Это костыль, т.к. индексы предметов будут меняться и невозможно будет что-то к индексу привязать.

dmvikar
useravatar
Offline
61 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: Помощь в создании "Асатамы III"

О! Вот это помогло! Костыль удобный, правда уж тогда я решил добавлять индекс напарникам, а обычные предметы добавляются обычным образом. http://qsp.su/components/com_agora/img/members/1296/mini_inventar.PNG

Дописывать индекс всем уже проставленным addobj - было бы мучительно)

mkir
useravatar
Offline
161 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: Помощь в создании "Асатамы III"

mkir,
Сделай проверку. Добавь предмет, потом добавь спутника, потом продай предмет. Если все будет работать как надо, то ок.

dmvikar
useravatar
Offline
61 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: Помощь в создании "Асатамы III"

dmvikar,
всё верно. Но можно написать и обратную функцию, чтобы ПОЛУЧИТЬ индекс уже добавленного предмета. Тогда сортировка будет гораздо точнее. И само меню, написанное в окне предметов, можно будет разбить на сколь угодно большое число разделов (в пределах разумного). Для этого я и привёл функцию countobj. Если мы знаем число предметов в окне предметов, мы можем перебрать их с помощью цикла, получая названия через $getobj(i), и выяснить, под каким индексом записан предмет "Спутники", под каким "Инвентарь", и т.д. Далее — дело техники добавить предмет в позицию после найденного индекса.

Aleks Versus
воздвигатель башни
useravatar
Offline
1545 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: Помощь в создании "Асатамы III"

Aleks Versus,
Понял, спс.
Я не ожидал, что добавление строки с существующим индексом раздвигает массив, а не заменяет строку, пока не определил методом тыка), так и родился вариант выше.
Для меня все-равно не очень понятна сортировка объектов через отдельный массив свойств. Я всегда делаю это через индексы, т.е. предмет[i] и свойство[i], как в таком случае сопоставлять массивы, если i предмета будет меняться. Делать свойство{'предмет']? Тогда предметы с одинаковым именем будут всегда иметь одинаковые свойства...
Короче, использую я обычные переменные для инвентаря и отдельную локацию. Можно выводить таблицу любой подробности и осуществлять сортировку в самой игре по любому из свойств.

mkir,
Если пунктов меню, под которые нужно будет добавлять предметы будет больше двух или сами пункты будут меняться местами, то понадобится такой код:

Код:


a=1
:mark
if $getobj(a)='Нужный пункт меню':
индекс=a &!позиция перед пунктом
индекс=a+1 &!позиция после пункта
addobj'Предмет','',индекс
else
a+=1
jump'mark'
end

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

dmvikar
useravatar
Offline
61 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: Помощь в создании "Асатамы III"

dmvikar,
есть вариант сортировать массив свойств и сразу параллельно этому переставлять значения во втором массиве. Либо ввести третий массив — опорный, в который прописываем индексы в процессе сортировки. Например был у нас массив из трёх элементов 0, 1, 2, а после сортировки элемент с индексом 2 оказался в нулевой ячейке, элемент с индексом 0 оказался в первой, а с индексом 1 — в последней. В опорном массиве будут храниться эти индексы 2, 0, 1. И будь у тебя ещё хоть десять других массивов, по опорному можно перетасовать их все.

Короткий пример datasort.qsp. На самом деле он и правда короткий, просто для наглядности я оставил повторяющийся код.

Aleks Versus
воздвигатель башни
useravatar
Offline
1545 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Информация

Статистика форума:
 
Всего тем:
987
Всего опросов:
14
Всего сообщений:
16790754
Сообщений на этой неделе:
19
Пользователи форума:
 
Всего пользователей:
2450
Последним зарегистрировался:
yovavo7804