RU 📌 Pinned

Как сделать?

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

Благодарю. Я не особо вдавался в детали, поскольку внешний в конце листа “to DO”, но, похоже, что сам код переписывать будет не нужно, и это замечательно.

Добрый день. Пробую себя в создании собственной игры в qsp, с очень специфическими замыслами в отношении механик.
Пытаюсь реализовать систему инвентаря, но не через OBJECT, а через массивы, ячейки которых используются для хранения предметов, принимая значения восьмизначных id этих самых предметов. В каждой локации (в т. ч., в инвентаре) - свой массив, дабы можно было перекладывать предметы как угодно. Проблема возникла такая: в инвентаре игрока возле каждого предмета создаётся ссылка, вызывающая всплывающее меню для оперирования данным предметом. Как сделать так, чтобы каждая ссылка привязывалась к конкретной ячейке массива?

Spoiler

!Вывод ячеек инвентаря
n=1
:inv2
if n<1001:
if invslot[n]<>0:
g=invslot[n]
*nl $item[g]
“<a href=‘exec: menu””$itemdoing””’>Действия</a>”
postn=n+1
end
n=n+1
jump ‘inv2’
end

invslot[n] - как раз ячейка, принимающая значение id.

Spoiler

invslot[1]=10010001
$item[10010001]=‘Яблоко’

Aleks Versus Moderator 26.09.2019 15:10 (6 years ago)

ARTIX_4,
тебе нужно перед вызовом меню помещать айди в какую-нибудь временную переменную. Кусочек со ссылкой:

"<a href='exec:id_obj=<<invslot[n]>> & menu""$itemdoing""'>Действия</a>"

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

На мой личный взгляд удобнее хранить айдишники объектов и сами объекты в разных массивах (как ты это и делаешь), но просто под одним индексом. Это немного усложняет поиск нужного объекта, но упрощает ряд других моментов. Например:

! $item_id[]="айдишник объекта" & $item[]="сам объект"  & $item_pos[]="айдишник того объекта, в котором лежит текущий"
! создаём сумку, типа в "инвентаре"
$item_id[0]="123456" & $item[0]='Сумка' $item_pos[0]="INVENTORY"
! помещаем яблоко в сумку
$item_id[1]="10010001" & $item[1]='Яблоко' $item_pos[1]="123456"

Это ни в коем случае не претензия, и даже не совет. Просто информация к размышлению.Имя

забыл амперсанд в строке со ссылкой. Подправил.

Edited at 27.09.2019 14:16 (6 years ago)

Подскажите, что не так сделал?
есть имя персонажа в массиве Имя[1] = Петя Имя[2] = Федя Имя[3] = Коля
Я на локации пишу список персонажей в виде активных ссылок:
num = 1
:loop
‘<a href=“exec: GT ‘‘локация’’,<<num>>”><<Имя[num]>></a>’
num += 1
If num < Last_Num: jump ‘loop’

Но при нажатии на активную ссылку <<num>> не копируется в буфер и во всех случаях выводит только последнее имя
Спасибо!

Последний из Гаяр Moderator 10.10.2019 10:05 (6 years ago)

Bora, а как нужно чтоб она работала?
Попробуй засунуть ссылку в переменную:

num = 1
:loop
$link[num]=‘<a href=“exec: GT ‘‘локация’’,<<num>>”><<Имя[num]>></a>’
num += 1
If num < Last_Num: jump ‘loop’

Последний из Гаяр Moderator 10.10.2019 10:07 (6 years ago)

А так ты вроде бы меняешь одну и ту же ссылку, поэтому она и выдает последнее

Последний из Гаяр,
не, не помогает … при нажатии на ссылку меня должно перекинуть в “локацию” и написать имя персонажа, которого я нажал, но пишет упорно последнего персонажа, даже ума не приложу что не так … (((

Последний из Гаяр Moderator 10.10.2019 11:36 (6 years ago)

Bora,
Может проблема не в этом участке кода?)

Последний из Гаяр:

Bora,
Может проблема не в этом участке кода?)

может, у меня в этой локации больше ни чего нет, это вообще тестовая локация, решил посмотреть как работает, у меня в 1йлокации задано
KILLALL
debug = 1
SHOWSTAT 1
SHOWOBJS 1
USEHTML = 1
$counter = ‘Counter’
$ONGLOAD = ‘loadg’
$ONGSAVE = ‘saveg’
$ONNEWLOC = ‘Loca’
$USERCOM = ‘Input’
$onobjsel = ‘Menu’
act ‘Начать игру’: gt ‘Start’
В локации “Start” написаны $имя[1] = ‘Коля’ $имя[2] = ‘Вася’ $имя[3] = ‘Петя’
act ‘Тест’: gt ‘тестовая_локация’
и дальше код про который писал… уже тыкал, тыкал - может что забыл прописать?

Последний из Гаяр Moderator 10.10.2019 12:12 (6 years ago)

:| :rolleyes: , понятней не стало…
Ну да ладно

Последний из Гаяр Moderator 10.10.2019 12:13 (6 years ago)

Проблема может быть в названии локации или в том, что используется одна переменная num

С названием локации трудно напортачить. Строка же работает, единственное что не делается, это <<num>> не копируется
‘<a href=“exec: GT ‘‘бред’’,’’1’’,<<num>>”><<$имя[num]>></a>’

Aleks Versus Moderator 10.10.2019 15:50 (6 years ago)

Bora,
а можешь прикрепить файл игры к сообщению? Всё должно работать по-идее. Имена в ссылках ведь выводятся правильно?
Значит проблема на локации, где ты пытаешься получить имя персонажа. Используешь $имя[num] вместо $имя[args[0]], например.
У меня всё работает:

Spoiler
# к
KILLALL
debug = 1
SHOWSTAT 1
SHOWOBJS 1
USEHTML = 1

act 'Начать игру': gt 'Start'


--- к ---------------------------------

# start
$имя[1] = 'Коля'
$имя[2] = 'Вася'
$имя[3] = 'Петя'
last_num=4
act 'Тест': gt 'тестовая_локация'
num = 1
:loop
'<a href="exec: GT ''локация'',<<num>>"><<$имя[num]>></a>'
num += 1
If num < Last_Num: jump 'loop'
--- start ---------------------------------

# локация
$имя[args[0]]
--- локация ---------------------------------

Все разобрался !!! там “args[1]” надо было ставить, у меня же ссылка идет на args[0] в тексте, поэтому второй номер надо было args[1] ставить )))) Спасибо вы помогли, вначале я и правда забыл про args и вместо них num ставил, дурень)!

Привет всем! Заранее извиняюсь за вопрос, но уже пол дня не могу его решить. Суть вот в чем: главный герой приходит к торговцу и тот дает ему квест убить крысу и принести ему ее тушку. Если герой приносит, то появляется вариант “сдать квест”, а если не приносит, то, скажем, выводится “приходи как закончишь работу”. Не могу понять как это реализовать в коде, если кто покажет наглядно буду премного благодарен!

Log in or Register to post comments.