Появился один вопрос относительно URQL.
Сцены\комнаты\локации могут иметь свои локальные переменные, которые не будут сбрасываться с каждым новых входом?
Конкретный пример того, что хотел реализовать:
Есть комната, там есть монстр, а у него есть "очки здоровья" и именно эти ОЗ должны сохраняться т.е. зашёл - пострелял немного, а затем сбежал, потом вернулся и добил монстра.
Такое можно реализовать? Конечно можно глобальную переменную объявить что-то вроде loc_room_gateA_monter_hp, но это как-то ... вроде должно быть что-то такое встроенное?
Неактивен
uux написал:
Один из приемов, чтобы не запутаться в длинной череде похожих переменных - давать переменным, относящшимся к определенной локации, имя, начинающееся с имени этой локации.
Таки пришёл к этой мысли. Это будет немного запарно конечно. Жаль, что нет зачатков ООПа, хотя бы в виде локальных и глобальных переменных - придётся выходить из ситуации.
Функции в URQ - это по сути тоже комнаты? Можно как-то нацепить на кнопку (возможно, в сплывающем меню) посещение и возвращение обратно? Есть вроде такая штука как "proc", но есть ли подобие, но для кнопок?
В чём суть - хочу сделать что-то вроде "магазина", в который можно будет войти из различных локаций, при этом там можно (вот неожиданность!) купить что-нибудь, хотелось бы по кнопке сделать это (операция с инвентарём), а потом нажав на "назад" - вернуться в локацию из которой зашли в магазин.
Неактивен
Да, вроде смысле понятен. По сути это тогда получается собственные переменные рода "превлок" и "каррентлок". Но на самом деле понадобится только одна - превлок. Получается её каждый раз необходимо будет ставить для каждой локации или есть какой-то механизм для этого? Вроде имеется локация common - она вызывается при действии (переходе) или всегда (как обновление игры - каждый "кадр") ?
Неактивен
Да я просто невнимательно похоже читал, раз не заметил этого )
Про сохранение чего-то не совсем понял, которое про use_inv_Запись. Это такая "функция" для сохранения игры? Или это что-то совсем другое. Видел в плеере есть загрузка, а сохранение я так понял на плечах автора? Т.е. только он сам решает где должно быть сохранение или же можно всё таки сделать пункт меню "сохранить игру" ?
Неактивен
О, получается можно сделать кнопку, которая всегда будет активна и не будет привязана к самому квесту, а будет где-то там висеть ? Тогда наверно так и стоит сделать мне ибо там скорее всего будет большая смертность персонажа, а может и нет - посмотрим как будет.
Всё больше я сомневаюсь в выборе URQ. Думаю больше с уклоном в объекты, а URQL не такой язык. Как можно сделать на нём сущность монстра и при этом с параметрами различными?
Ладно, если речь идёт о какой-то конкретном монстре, но что если я захочу в локацию А поместить монстра с типом1 ? Т.е. это ведь как-то надо будет всё вычислять, надеюсь меня спасут функции.
Неактивен
Подумаю по поводу instead, спасибо.
Пока всё же ставлю себе цель описать всё независимо от платформы и уже от этого идти дальше, однако, уже лучше со старта знать некоторые моменты платформы. Сколько ещё времени уйдёт на конкретную реализацию - не знаю.
Instead выглядит сложнее с первого взгляда, буду иметь ввиду тогда эти две платформы, да.
Неактивен
Появилось пару вопросов-проблем относительно 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)
Неактивен
Евг, спасибо за ответ!
Поковырялся в коде и ... понял, что опять что-то намудрил сам.
Конструкция из многих if-then-else действительно нормально работает - записал сначала в строку, а потом попытался разбить - вроде нормально.
Про передачу параметра в кнопку - хорошее решение, надо будет сделать так.
А вот с инпутом это я серьёзно проиграл даже в двух местах. В строку перевёл и параметр и сам инпут - всё стало окей.
Важный момент для Урки, который на мой взгляд нелогичен - разный запрос на "=" и "==". Собственно второй годится для строк (поэтому инпут с ним и сравнивается), а первый - для чисел. От того и не правильно условия были у меня
Неактивен
Нужно будет запомнить эти хитрости : )
Наверно опять глупый вопрос, ответ на который где-то в документации, но опять не увидел его:
Имеется ли в Фурке\URQL символ перехода на следующую строку? Т.е. как обычно '\n' в Си.
Что-то вроде этого:
MyStringVar = "Это первая строка <символ перевода строки> А это вторая строка";
А выводилось бы это так:
Это первая строка А это вторая строка
Или такое не предусмотрено?
И ещё кое-что ... опять.
Можно делать подстановку в кнопку? Т.е. у меня есть "функция" с параметром, где этот параметр - локация, например, "Loc_Begin". Пишу что-то вроде вот такого:
btn #%Loc_Begin$, Назад
Но Фурка ругается. Какое значение в кнопке вообще должно быть? Можно так делать? Это мне необходимо для кнопки "назад". Есть конечно previous_loc, но это не то, что необходимо.
UPD:
Ох, стоило написать и чуть повозится - решения нашлись
Вдруг кому пригодится - для переноса строки есть такая штука - #/$. Вставляется в текст и строка переносится.
А по поводу подстановки - похоже в 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)
Неактивен
Привет всем!
Квест ещё разрабатывается, но очень уж медленно, что печалит меня. Всё боюсь, что на КРИЛ не успею, но буду стараться.
Тут появился такой вопрос: имеется ли в URQ команда для очистки инвентаря? Или может полный рестарт, но в виде команды, а не стандартного пункта меню?
Неактивен
Примерно так и делал - с меткой. Ссылаюсь на инициализацию всего и вся.
Да, спасибо за команды. И perkill наверно пригодится тоже.
Неактивен
Пытаюсь тут реализовать "бой", делаю через таймер из примера на вики.
Только вот какое дело - когда нажимаешь на текст\кнопку\ссылку, то тогда пауза как бы сбивается т.е. у меня сейчас "фазовый" бой, где игрок должен успеть за N секунд тыкать по ссылкам. Но получается так, что когда нажал на ссылку, то сразу бой переходит на следующую фазу, что вообще-то неправильно (в чём тогда смысл таймера будет?).
Знает кто как такое изменить? Т.е. смена фаз исключительно по таймеру, а не при любом действии игрока?
Неактивен
Ajenta написал:
что не так здесь?
Тут такая штука, что вот этого всего и не нужно мне.
Ситуация такая, прямо из игры:
Игрок встречает врага и ему на экране печатается сообщение1 т.е. какое-то описание врага\встречи и тут запускается таймер, например, на 2 секунды т.е.
после двух секунд должно вывестись сообщение2, потом через 2 секунды - сообщение3, а потом gameover так сказать.
Дак вот, мне необходимо, чтобы сообщения выводились ровно через 2 секунды, а не как сейчас. Сейчас получается так, что если прошло меньше двух секунд и игрок нажал по ссылке, то идёт другое сообщение - этого не то, что мне нужно.
Из чего получается ситуация, когда всё ломается, а именно по моей задумке должна быть возможность "затыкать врага" ещё на сообщении1, а он с каждым тыком идёт дальше по сообщениям
Евг, можно попробовать такой вариант, да. Не уверен, что смогу всё правильно реализовать т.к. время-то поджимает
Неактивен
Всё же не получается реализовать нормально этот бой
Можно как-то сделать так, чтобы нажатие на кнопки\ссылки не сбрасывали паузу? Вот только эта штука мешает. А если через цикл, то у меня просто всё зависает на определённое время (значит он работает?), но при этом ничего не выводит, а потом бац и уже "Ты труп".
Похоже придётся тогда придумать другой метод боя, раз этот такой проблемный.
Неактивен
Через таймер и делаю ... или pause - это другое ?
--
хотя почти удалось реализовать криво-косо, но постоянно какие-нибудь баги всплывают. Всё же неудобно с интерпретируемыми языками связываться - куда лучше, когда есть компилятор и он может сразу сказать, что где-то беда.
Отредактировано DarkDes (30.10.2015 13:57)
Неактивен