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

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

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

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

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

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

Код:

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

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

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

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

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

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

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

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

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

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

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

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

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

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
87 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

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

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

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

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

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

Смотрите. У меня есть предмет "Лисья шерсть", к нему прикреплен вот такой код:

Код:

if selobj = 'Лисья шерсть':

unsel
pl 'Осталось <<шерсть>> шерсти. Нажми <a href="EXEC:шерсть-=1&hp=hpboard&stboard=45+(6*sk_st)&st=stboard&mn=mnboard&clr&gt $curloc">сюда</a>, чтобы потратить единицу для полного восстановления'
end

Чисто любопытства ради поменял pl на msg — думая, а возможно ли сделать ссылки в msg (не надеясь, что да, мне это нужно для другого — чтобы вместо простого "ок" были принудительные варианты). Но получилось что-то совсем неожиданное — при нажатии на "сюда", вместо выполнения кода программа хочет что-то открыть, скриншот прилагаю.

http://qsp.su/components/com_agora/img/members/1296/mini_04102020-1753_sherst.PNG

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

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

На win7 msg выводит ссылку, только клик по ней ничего не дает. Наверно потому, что код во время открытого окна msg не выполняется.

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

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

EXEC для ссылок в MSG и INPUT не поддерживается.

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

Информация

Статистика форума:
 
Всего тем:
994
Всего опросов:
14
Всего сообщений:
16790818
Сообщений на этой неделе:
3
Пользователи форума:
 
Всего пользователей:
2501
Последним зарегистрировался:
Endyr