Forum.iFiction.Ru

iFiction.Ru · ifHub · FAQ · IFWiki · QSP · URQ · INSTEAD · AXMA

форум об interactive fiction, текстовых приключенческих играх и всём таком...

Вы не зашли.

0    0    #1
08.08.2015 15:39

DarkDes
Участник (+12)
Зарегистрирован: 27.07.2015
Сообщений: 56

Вопросы по URQ

Появился один вопрос относительно URQL.

Сцены\комнаты\локации могут иметь свои локальные переменные, которые не будут сбрасываться с каждым новых входом?

Конкретный пример того, что хотел реализовать:

Есть комната, там есть монстр, а у него есть "очки здоровья" и именно эти ОЗ должны сохраняться т.е. зашёл - пострелял немного, а затем сбежал, потом вернулся и добил монстра.

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

Неактивен

2    0    #2
09.08.2015 21:56

uux
Участник (+836, -80)
Откуда: Москва
Зарегистрирован: 02.12.2006
Сообщений: 1584

Re: Вопросы по URQ

В URQ нет локальных переменных, и это не объектно-ориентированный язык. Посещение/покидание локации в общем случае не влияет на значения переменных, если только не присваивать этим переменным значения в явном виде (из этого правила есть исключения, но пока ими можно пренебречь).

Посмотрите описание языка здесь: http://urq.plut.info/texts
(Там для старой версии под DOS, но сами принципы языка с тех пор не сильно поменялись).

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

Неактивен

0    0    #3
10.08.2015 12:03

DarkDes
Участник (+12)
Зарегистрирован: 27.07.2015
Сообщений: 56

Re: Вопросы по URQ

uux написал:

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

Таки пришёл к этой мысли. Это будет немного запарно конечно. Жаль, что нет зачатков ООПа, хотя бы в виде локальных и глобальных переменных - придётся выходить из ситуации.

Функции в URQ - это по сути тоже комнаты? Можно как-то нацепить на кнопку (возможно, в сплывающем меню) посещение и возвращение обратно? Есть вроде такая штука как "proc", но есть ли подобие, но для кнопок?
В чём суть - хочу сделать что-то вроде "магазина", в который можно будет войти из различных локаций, при этом там можно (вот неожиданность!) купить что-нибудь, хотелось бы по кнопке сделать это (операция с инвентарём), а потом нажав на "назад" - вернуться в локацию из которой зашли в магазин.

Неактивен

0    0    #4
10.08.2015 17:33

Ajenta
Модератор (+1168, -324)
Зарегистрирован: 03.05.2009
Сообщений: 902
Вебсайт

Re: Вопросы по URQ

DarkDes написал:

uux написал:

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

Таки пришёл к этой мысли. Это будет немного запарно конечно. Жаль, что нет зачатков ООПа, хотя бы в виде локальных и глобальных переменных - придётся выходить из ситуации.

Функции в URQ - это по сути тоже комнаты? Можно как-то нацепить на кнопку (возможно, в сплывающем меню) посещение и возвращение обратно? Есть вроде такая штука как "proc", но есть ли подобие, но для кнопок?
В чём суть - хочу сделать что-то вроде "магазина", в который можно будет войти из различных локаций, при этом там можно (вот неожиданность!) купить что-нибудь, хотелось бы по кнопке сделать это (операция с инвентарём), а потом нажав на "назад" - вернуться в локацию из которой зашли в магазин.

Если я правильно помню, то в урке есть переменная превлок, которая хранит имя предыдущей локации, как каррент лок хранит текущей, если вы перешли по кнопке или по ссылке. Надо смотреть. Но вообще можно поставить переменную на этих локациях, которой присваивать имя локации и использовать её для возвращения из магазина. Нужен код или смысл понятен?

Отредактировано Ajenta (10.08.2015 17:34)

Неактивен

0    0    #5
10.08.2015 21:35

DarkDes
Участник (+12)
Зарегистрирован: 27.07.2015
Сообщений: 56

Re: Вопросы по URQ

Да, вроде смысле понятен. По сути это тогда получается собственные переменные рода "превлок" и "каррентлок". Но на самом деле понадобится только одна - превлок. Получается её каждый раз необходимо будет ставить для каждой локации или есть какой-то механизм для этого? Вроде имеется локация common - она вызывается при действии (переходе) или всегда (как обновление игры - каждый "кадр") ?

Неактивен

1    0    #6
11.08.2015 06:01

uux
Участник (+836, -80)
Откуда: Москва
Зарегистрирован: 02.12.2006
Сообщений: 1584

Re: Вопросы по URQ

DarkDes написал:

Да, вроде смысле понятен. По сути это тогда получается собственные переменные рода "превлок" и "каррентлок". Но на самом деле понадобится только одна - превлок. Получается её каждый раз необходимо будет ставить для каждой локации или есть какой-то механизм для этого?

Из документации: current_loc и previous_loc  (строковые системные переменные) хранят имена соответственно текущей и предыдущей посещенной локаций. previous_loc удобно использовать для сохранения игры из любой локации при помощи действия типа use_inv_Запись. Для первой локации previous_loc равна ее имени (чтобы сохранение работало и для нее). current_loc и previous_loc  теперь меняются только при btn-переходах.

DarkDes написал:

Вроде имеется локация common - она вызывается при действии (переходе) или всегда (как обновление игры - каждый "кадр") ?

Локация common вызывается только при переходах по btn. Есть еще системная числовая переменная Common, позволяющая задать, к какой именно локации Common будет происходить обращение (например, при Common=5 вызываться будет локация Common_5).

Это, кстати, тоже из документации:).

Неактивен

0    0    #7
11.08.2015 15:22

DarkDes
Участник (+12)
Зарегистрирован: 27.07.2015
Сообщений: 56

Re: Вопросы по URQ

Да я просто невнимательно похоже читал, раз не заметил этого )

Про сохранение чего-то не совсем понял, которое про use_inv_Запись. Это такая "функция" для сохранения игры? Или это что-то совсем другое. Видел в плеере есть загрузка, а сохранение я так понял на плечах автора? Т.е. только он сам решает где должно быть сохранение или же можно всё таки сделать пункт меню "сохранить игру" ?

Неактивен

0    0    #8
11.08.2015 18:23

Ajenta
Модератор (+1168, -324)
Зарегистрирован: 03.05.2009
Сообщений: 902
Вебсайт

Re: Вопросы по URQ

DarkDes написал:

Да я просто невнимательно похоже читал, раз не заметил этого )

Про сохранение чего-то не совсем понял, которое про use_inv_Запись. Это такая "функция" для сохранения игры? Или это что-то совсем другое. Видел в плеере есть загрузка, а сохранение я так понял на плечах автора? Т.е. только он сам решает где должно быть сохранение или же можно всё таки сделать пункт меню "сохранить игру" ?

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

https://clck.ru/9ZQoE

Вот всё про сохранение в фурке.

Неактивен

0    0    #9
12.08.2015 15:10

DarkDes
Участник (+12)
Зарегистрирован: 27.07.2015
Сообщений: 56

Re: Вопросы по URQ

О, получается можно сделать кнопку, которая всегда будет активна и не будет привязана к самому квесту, а будет где-то там висеть ? Тогда наверно так и стоит сделать мне ибо там скорее всего будет большая смертность персонажа, а может и нет - посмотрим как будет.


Всё больше я сомневаюсь в выборе URQ. Думаю больше с уклоном в объекты, а URQL не такой язык. Как можно сделать на нём сущность монстра и при этом с параметрами различными?
Ладно, если речь идёт о какой-то конкретном монстре, но что если я захочу в локацию А поместить монстра с типом1 ? Т.е. это ведь как-то надо будет всё вычислять, надеюсь меня спасут функции.

Неактивен

0    0    #10
12.08.2015 15:30

Ajenta
Модератор (+1168, -324)
Зарегистрирован: 03.05.2009
Сообщений: 902
Вебсайт

Re: Вопросы по URQ

DarkDes написал:

О, получается можно сделать кнопку, которая всегда будет активна и не будет привязана к самому квесту, а будет где-то там висеть ? Тогда наверно так и стоит сделать мне ибо там скорее всего будет большая смертность персонажа, а может и нет - посмотрим как будет.


Всё больше я сомневаюсь в выборе URQ. Думаю больше с уклоном в объекты, а URQL не такой язык. Как можно сделать на нём сущность монстра и при этом с параметрами различными?
Ладно, если речь идёт о какой-то конкретном монстре, но что если я захочу в локацию А поместить монстра с типом1 ? Т.е. это ведь как-то надо будет всё вычислять, надеюсь меня спасут функции.

Если вы пирвыкли к ООП, берите instead и не мучайтесь. URQ позволяет как раз на ооп не заморачиваться тем, кто с ним не знаком и делать всё то же самое своими простыми методами.
Но если вам удобнее ооп, то зачем себя насиловать?

Неактивен

0    0    #11
14.08.2015 14:23

DarkDes
Участник (+12)
Зарегистрирован: 27.07.2015
Сообщений: 56

Re: Вопросы по URQ

Подумаю по поводу instead, спасибо.

Пока всё же ставлю себе цель описать всё независимо от платформы и уже от этого идти дальше, однако, уже лучше со старта знать некоторые моменты платформы. Сколько ещё времени уйдёт на конкретную реализацию - не знаю.

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

Неактивен

0    0    #12
14.09.2015 11:55

DarkDes
Участник (+12)
Зарегистрирован: 27.07.2015
Сообщений: 56

Re: Вопросы по URQ

Появилось пару вопросов-проблем относительно URQ.

Можно ли составлять конструкции вот такого вида?

Код:

if <> then A1
else
if <> then A2
else
if <> then A3
else
A4

Пробую написать такое, но условия срабатывают как-то неверно.

И ещё по поводу меню. Нужно каждый раз делать метки вроде такого:

Код:

:mark1
btn mark1_1, Abc
btn mark1_2, Def 
end
:mark1_1
...
end
:mark1_2
...
end

Можно ли как-то сократить такую конструкцию? Т.е. чтобы логика нажатия кнопок оставалась в рамках одного mark1 ?

И похоже нет возможности вызвать proc в меню? Хотел вывод сообщений сделать при нажатии на кнопку, но мне дебаг говорит, что нельзя.

UPD:

И ещё такой вопрос. Все проверки в if then else происходят при помощи == ? Постоянно то там, то здесь условие не срабатывает - это меня огорчает.
И переменные. Они же все глобальные, так? т.е. они не только в области метки действуют? Это к предыдущему вопросу - условия не срабатывают.

Вот конкретный код:

Код:

:proc_EnterCode;( CODE, HACKLVL )
    proc_EnterCode_BOOL_OUT = 0;
    proc_EnterCode_BOOL_HACK = 0;
    proc Sys_Msg( "Введите код" );
    pln
    input InputCode;

    if (InputCode == #%proc_EnterCode_1$ ) then
           _proc Sys_Msg( "Ввод кода - Удачно!" ) & proc_EnterCode_BOOL_OUT = 1 else proc Sys_Msg( "Кодовый замок - Неуспех!" ) & proc_EnterCode_BOOL_OUT = 0
    
end;

:EnterSecretCode
proc proc_EnterCode( "11111", 0 );
if proc_EnterCode_BOOL_OUT = 1 then
    _ proc Sys_Msg("Код верный! Вы получили навыки: Хакерство+ и макс.здоровье до 40!") &
    _ Hero_Hacker = 3 &
    _ C_HealthPointsMax = 40
_ else
    _ proc Sys_Msg("Код неверный. Хотите попробовать ещё?") &
    _ btn EnterSecretCode, Да
goto NowOnShip5;
end;

Отредактировано DarkDes (14.09.2015 13:15)

Неактивен

1    0    #13
14.09.2015 14:00

Евг
Участник (+256, -37)
Зарегистрирован: 13.04.2007
Сообщений: 539
Вебсайт

Neyðin kennir naktri konu að spinna.

Re: Вопросы по URQ

DarkDes написал:

Появилось пару вопросов-проблем относительно URQ.

Можно ли составлять конструкции вот такого вида?

Код:

if <> then A1
else
if <> then A2
else
if <> then A3
else
A4

Пробую написать такое, но условия срабатывают как-то неверно.

Можно. Просто пиши все подряд if A then B else if C then D и т.д. Можно использовать переносы строк для наглядности, но ты это умеешь. Подводный камень был в том, чтобы понять какой else относится к какому ifу, но это легко понять  один раз  сильно протестив подобную конструкцию в фурке.

DarkDes написал:

И ещё по поводу меню. Нужно каждый раз делать метки вроде такого:

Код:

:mark1
btn mark1_1, Abc
btn mark1_2, Def 
end
:mark1_1
...
end
:mark1_2
...
end

Можно ли как-то сократить такую конструкцию? Т.е. чтобы логика нажатия кнопок оставалась в рамках одного mark1 ?

Для такого нужно использовать кнопку с параметром (работает только в фурке).
Могу путаться в синтаксисе, глянь на вики как правильно их использовать, но идея такая:

Код:

:0
btn mark(1), Abc ; по нажатию кнопки передаем в первую переменную локации mark единичку
btn mark(2), Abc ; по нажатию кнопки передаем туда же двойку
end

:mark
if mark_1=1 then pln Нажата первая кнопка
if mark_1=2 then pln Нажата вторая кнопка
end

DarkDes написал:

И похоже нет возможности вызвать proc в меню? Хотел вывод сообщений сделать при нажатии на кнопку, но мне дебаг говорит, что нельзя.

По-моему ты говоришь про т.н. "локальные действия", тоже есть в документации на вики. Но вообще, первый раз слышу, что кто-то использует меню в реальной игре smile Удачи!

DarkDes написал:

Вот конкретный код:

Код:

    if (InputCode == #%proc_EnterCode_1$ )

Ты здесь сравниваешь значение переменной InputCode со значением другой переменной, имя которой - значение переменной proc_EnterCode_1. Т.е., если proc_EnterCode_1="z" урка понимает твое выражение как if (InputCode == z), а чему там равно значение этого z никто не знает, скорее всего "".

Если нужно сравнить значение InputCode с текстовым значением proc_EnterCode_1, то лучше ставить кавычки.

Код:

if (InputCode == "#%proc_EnterCode_1$" )

Отредактировано Евг (14.09.2015 14:05)

Неактивен

0    0    #14
14.09.2015 16:18

DarkDes
Участник (+12)
Зарегистрирован: 27.07.2015
Сообщений: 56

Re: Вопросы по URQ

Евг,  спасибо за ответ!

Поковырялся в коде и ... понял, что опять что-то намудрил сам.
Конструкция из многих if-then-else действительно нормально работает - записал сначала в строку, а потом попытался разбить - вроде нормально.

Про передачу параметра в кнопку - хорошее решение, надо будет сделать так.

А вот с инпутом это я серьёзно проиграл даже в двух местах. В строку перевёл и параметр и сам инпут - всё стало окей.
Важный момент для Урки, который на мой взгляд нелогичен - разный запрос на "=" и "==". Собственно второй годится для строк (поэтому инпут с ним и сравнивается), а первый - для чисел. От того и не правильно условия были у меня smile

Неактивен

3    0    #15
15.09.2015 13:05

Евг
Участник (+256, -37)
Зарегистрирован: 13.04.2007
Сообщений: 539
Вебсайт

Neyðin kennir naktri konu að spinna.

Re: Вопросы по URQ

== появилось во времена досурки, когда Корянов решил сделать сравнение строк по маске smile
Если = просто сравнивало переменные по "совпадает одно с другим или нет", то == позволяло писать конструкции вида if str == "взять *" then ... или if date == "??.01.2015" then ... Таким образом не надо было бить строки на буквы и перебирать каждую в цикле. Но этим, кажется почти никто не пользуется smile

Отредактировано Евг (15.09.2015 13:06)

Неактивен

0    0    #16
15.09.2015 13:49

Ajenta
Модератор (+1168, -324)
Зарегистрирован: 03.05.2009
Сообщений: 902
Вебсайт

Re: Вопросы по URQ

Евг написал:

== появилось во времена досурки, когда Корянов решил сделать сравнение строк по маске smile
Если = просто сравнивало переменные по "совпадает одно с другим или нет", то == позволяло писать конструкции вида if str == "взять *" then ... или if date == "??.01.2015" then ... Таким образом не надо было бить строки на буквы и перебирать каждую в цикле. Но этим, кажется почти никто не пользуется smile

Если бы об этом кто-то знал, то может быть и пользовались бы. Мне вот ты сейчас буквально Америку открыл.
И в фурке это работает, кстати?

Неактивен

1    0    #17
15.09.2015 15:24

Евг
Участник (+256, -37)
Зарегистрирован: 13.04.2007
Сообщений: 539
Вебсайт

Neyðin kennir naktri konu að spinna.

Re: Вопросы по URQ

Ну да, проверь:

Код:

:0
z = "взять лук"

if z == "взять *" then p Я взяла & if z == "* лук" then p лук и заплакала. else p что-то непонятное и теперь не знаю, что с этим делать. else p Ничего я не взяла.
end

Неактивен

1    0    #18
17.09.2015 07:42

uux
Участник (+836, -80)
Откуда: Москва
Зарегистрирован: 02.12.2006
Сообщений: 1584

Re: Вопросы по URQ

Ajenta написал:

Если бы об этом кто-то знал, то может быть и пользовались бы.

Об этом вроде как в документации (описании URQL для URQ_DOS от Корвина) написано. Страница 21, "Строковые переменные и работа с ними".

Неактивен

0    0    #19
17.09.2015 16:49

Ajenta
Модератор (+1168, -324)
Зарегистрирован: 03.05.2009
Сообщений: 902
Вебсайт

Re: Вопросы по URQ

uux написал:

Ajenta написал:

Если бы об этом кто-то знал, то может быть и пользовались бы.

Об этом вроде как в документации (описании URQL для URQ_DOS от Корвина) написано. Страница 21, "Строковые переменные и работа с ними".

Всё может быть, но для этого доку надо было найти и прочитать, а это ещё почти никому не удавалось smile

Спасибо за ссылку, ага. Ну и кстати кто в курсе, что в фурке это рабоотает, опять же. smile

Неактивен

3    0    #20
18.09.2015 00:12

uux
Участник (+836, -80)
Откуда: Москва
Зарегистрирован: 02.12.2006
Сообщений: 1584

Re: Вопросы по URQ

Ajenta написал:

Ну и кстати кто в курсе, что в фурке это рабоотает, опять же. smile

Ну, вообще фурка изначально ориентирована была на то, чтобы по максимуму перенять стандарт досурки, поэтому по умолчанию можно считать, что если какой-то функционал есть в URQ_DOS, в FireURQ он тоже есть. (Тон, поправь меня, если что). Исключения, наверно, по пальцам одной руки пересчитать можно, причем бОльшая их часть описана в фурк-документации. Я навскидку из неподдерживаемых фич досурки могу вспомнить разве что чуть иную логику работы с инвентарем (вследствие чего иногда "размножаются" кнопки, а некоторые популярные авторы отказываются писАть на фурке). Да, еще DOS-кодировка не поддерживается, поэтому эпический квест про Евга, универ и спасательный круг на фурке без перекодировки не доступен.

Прости меня, Аджента, за длинный и занудный пост:).

Неактивен

0    0    #21
20.09.2015 13:27

DarkDes
Участник (+12)
Зарегистрирован: 27.07.2015
Сообщений: 56

Re: Вопросы по URQ

Нужно будет запомнить эти хитрости : )

Наверно опять глупый вопрос, ответ на который где-то в документации, но опять не увидел его:
Имеется ли в Фурке\URQL символ перехода на следующую строку? Т.е. как обычно '\n' в Си.
Что-то вроде этого:

Код:

MyStringVar = "Это первая строка <символ перевода строки> А это вторая строка";

А выводилось бы это так:

Код:

Это первая строка
А это вторая строка

Или такое не предусмотрено?

И ещё кое-что ... опять.
Можно делать подстановку в кнопку? Т.е. у меня есть "функция" с параметром, где этот параметр - локация, например, "Loc_Begin". Пишу что-то вроде вот такого:

Код:

btn #%Loc_Begin$, Назад

Но Фурка ругается. Какое значение в кнопке вообще должно быть? Можно так делать? Это мне необходимо для кнопки "назад". Есть конечно previous_loc, но это не то, что необходимо.

UPD:
Ох, стоило написать и чуть повозится - решения нашлись smile
Вдруг кому пригодится - для переноса строки есть такая штука - #/$. Вставляется в текст и строка переносится.
А по поводу подстановки - похоже в BTN она не работает, но нашёл "хак", делаю так:

Код:

:Loc_Shop
...
btn func_exit( "#%Loc_Shop_1$" ), Назад
...
end
:func_exit
goto #%func_exit_1$
end

Использование: Loc_Shop( "Loc_to_go" );
И при нажатии на кнопку "назад" будет переход на указанную локацию. Знаю, что костыль, но через кнопку как-то не получилось.

Отредактировано DarkDes (20.09.2015 16:12)

Неактивен

0    0    #22
21.10.2015 16:34

DarkDes
Участник (+12)
Зарегистрирован: 27.07.2015
Сообщений: 56

Re: Вопросы по URQ

Привет всем!
Квест ещё разрабатывается, но очень уж медленно, что печалит меня. Всё боюсь, что на КРИЛ не успею, но буду стараться.

Тут появился такой вопрос: имеется ли в URQ команда для очистки инвентаря? Или может полный рестарт, но в виде команды, а не стандартного пункта меню?

Неактивен

1    0    #23
21.10.2015 16:46

Александр Морт
Участник (+122, -70)
Зарегистрирован: 14.10.2015
Сообщений: 35

Re: Вопросы по URQ

invkill

Неактивен

1    0    #24
21.10.2015 21:33

uux
Участник (+836, -80)
Откуда: Москва
Зарегистрирован: 02.12.2006
Сообщений: 1584

Re: Вопросы по URQ

Александр Морт написал:

invkill

Да, invkill удаляет весь инвентарь. Есть еще perkill - сбрасывает все переменные.

Полный рестарт делается так: вначале квеста ставится метка, сразу после которой прописываются invkill и perkill. Когда нужен рестарт, просто каким-то образом осуществляется переход на эту метку (через btn, goto...)

Неактивен

0    0    #25
22.10.2015 12:05

DarkDes
Участник (+12)
Зарегистрирован: 27.07.2015
Сообщений: 56

Re: Вопросы по URQ

Примерно так и делал - с меткой. Ссылаюсь на инициализацию всего и вся.
Да, спасибо за команды.  И perkill наверно пригодится тоже.

Неактивен

Powered by PunBB
© copyright 2001–2021 iFiction.Ru