Вопросы и ответы

  1. ‹ Older
  2. 4 months ago

    FROST

    Oct 6 User since 2017

    Воспользовался "искусственной" переменной "back" для хранения ссылки на нужную мне локацию.

    Конечно возникает резонный вопрос: зачем это все нужно. Конечно поясню. Представьте следующую иерархию локаций. Квартира>Комната>зона в комнате (оформлена как room() ). Так вот при такой схеме полезнее хранить в from() комнату из которой мы перешли в комнату here(), но не предпоследнюю посещенную зону в самой комнате. Скажем я перемещаюсь от шкафа к столу, от стола к кровате, а потом я хочу вернуться просто "назад" - в комнату из которой попал в текущую. Вот для этого и пришлось вводить специальную переменную "back". Спасибо за советы.

  3. peter

    Oct 6 Administrator Земля(Москва) User since 2014

    можно написать свой game.afterwalk и там реализовать свой from

  4. peter

    Oct 6 Administrator Земля(Москва) User since 2014
    Edited 4 months ago by peter

    FROST
    Еще можно попробовать (я не тестировал!) такую реализацию walkback, которая, в теории, не меняет поле from в комнате, в которую возвращаемся.

    например:

    local walkback_from = false
    local walkback_room = false
    function game:afterwalk(f, t)
        if walkback_from then
            walkback_room.__from = walkback_from -- восстановить оригинальный from
            walkback_from = false
            walkback_room = false
        end
    end
     
    function walkback(t)
        walkback_room = _(t)
        walkback_from = t:from()
    end

    А я добавлю, скорее всего, такую возможность в будущие версии.

  5. peter

    Oct 7 Administrator Земля(Москва) User since 2014
    Edited 4 months ago by peter

    В git влил возможность делать walkout(куда, false) -- при этом from не будет изменен. Может пригодиться. И в walk тоже есть 3й параметр (в git), кроме doexit, doenter. Это dofrom.

    walk(куда, true, true, false) -- не заменит from но вызовет exit/enter

  6. MaJoR KolZ

    Oct 8 Постоялец Харьков User since 2014

    Привет народ!
    Давно не появлялся, книгу пишу, фэнтези — но тут Константин Таро попросил помочь с адаптацией книги-игры на КРИЛ. Я прогнал текст через свой скрипт и получил следующий код:

    paragraph{
    	nam = 'p160';
    	text=[[Какие вопросы вы хотите задать?]],
    	options = {
    		"{@walk p162|...}",
    		"{@walk p163|...}",
    		"{@walk p165|...}",
    		"{@walk p168|...}",
    		{
    			prerequisite = function()
    				return true  -- пример условия; включает/выключает этот переход
    			end,
    			"Если вы уже задали все эти вопросы",
    			to="p169",
    		},
    	},
    }

    Поле 'prerequisite' не сохраняется.
    Прикладываю пример — для воспроизведения достаточно запустить, выйти, открыть INSTEAD снова и нажать на объект в инвентаре.

  7. peter

    Oct 8 Administrator Земля(Москва) User since 2014
    Edited 4 months ago by peter

    Ага, по умолчанию все таблицы - это переменные, а function сохраниться не смогла, так как без declare и прочего. Самое простое, дать явно знать STEAD3, что эта таблица -- не требует сохранения (обрати внимание на доп скобки {} вокруг options):

    paragraph{
    	nam = 'p160';
    	text=[[Какие вопросы вы хотите задать?]],
           {
            	options = {
    	        	"{@walk p162|...}",
            		"{@walk p163|...}",
    	        	"{@walk p165|...}",
    		        "{@walk p168|...}",
            		{
    	        		prerequisite = function()
    		        		return true  -- пример условия; включает/выключает этот переход
    			        end,
            			"Если вы уже задали все эти вопросы",
    	        		to="p169",
    		        },
            	},
            },
    }

    Если же тебе нужно сохранять таблицы в которой есть и переменные и функции, то каждую функцию нужно declare.

    declare {
    a = function() end;
    b = function() end;
    ...
    }

    И в таблицах уже использовать имена этих функций:

    {
        prerequisite = a;
    }
  8. peter

    Oct 8 Administrator Земля(Москва) User since 2014

    https://github.com/instead-hub/instead/blob/master/doc/stead3.md#Переменные-объекта
    Тут описано это, насчет {}

  9. MaJoR KolZ

    Oct 8 Постоялец Харьков User since 2014

    Черт, и ведь прочел же этот раздел перед тем как вопрос постить :)
    Спасибо!

  10. peter

    Oct 8 Administrator Земля(Москва) User since 2014

    MaJoR KolZ расскажешь где-нибудь про литературное творчество? Можно в http://club.syscall.ru например. :)

  11. FROST

    Oct 11 User since 2017

    peter В git влил возможность делать walkout(куда, false) -- при этом from не будет изменен. Может пригодиться.

    Peter, благодарю за проявленное внимание к вопросу.

  12. Ruido

    Oct 16 User since 2016
    Edited 4 months ago by Ruido

    Опять проблема.

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

    dlg {
    	nam ="BlisnetsiVTualeteDialog";
    	noinv = true;
    	title = [[Разговор с близнецами]];
    	enter = function ()
    	if BiZnakomstvo == false then
    	p [[-- Подпольный клуб в действии?^^ Голоса устраивают между ссобой перебранку общая суть которой заключается в "говорил же я тебе, что надо потише! - а что я?! Это всё ты!"
    Но затем из кабинки раздаётся бодрое "Привет!"]];
    	else 
    	p [[-- Привет, ребята!^
    	-- И тебе привет! С чем пожаловал?]];
    	end
    	end;
     
    		phr = { 
     
     
    		    {[[Найк?]]; pfn(BiZnakomstvo = true) [[Бывший спортсмен лет сорока. Каждое утро вскакивает не свет не заря и на пробежку.]]};
    		    {[[Найк2?]];[[22222Бывший спортсмен лет сорока. Каждое утро вскакивает не свет не заря и на пробежку.]]};
     
    		  };
    };	

    Но никак не удаётся нормально написать pfn(BiZnakomstvo = true). При попытки запустить пишет об ошибке. Как с этим совладать?

  13. peter

    Oct 16 Administrator Земля(Москва) User since 2014

    Строку

    {[[Найк?]]; pfn(BiZnakomstvo = true) [[Бывший спортсмен лет сорока. Каждое утро вскакивает не свет не заря и на пробежку.]]};

    Заменить на:

    {
       [[Найк?]]; 
       [[Бывший спортсмен лет сорока. Каждое утро вскакивает не свет не заря и на пробежку.]];
       cond = function() -- условие появления фразы
        return BiZnakomstvo 
       end,
    };
  14. peter

    Oct 16 Administrator Земля(Москва) User since 2014

    pfn это вызов функции с аргументами, а не условие. Так что в твоем случае логичнее всего cond.

  15. peter

    Oct 16 Administrator Земля(Москва) User since 2014

    Хотя, может я не понял задачу? Что ты хочешь сделать pfn?

  16. peter

    Oct 16 Administrator Земля(Москва) User since 2014

    Если нужно изменить переменную:

    {
       [[Найк?]]; 
       function()
          p [[Бывший спортсмен лет сорока. Каждое утро вскакивает не свет не заря и на пробежку.]];
          BiZnakomstvo = true;
       end,
    };
  17. peter

    Oct 16 Administrator Земля(Москва) User since 2014

    Или, если pfn:

    pfn(function() 
    BiZnakomstvo = true
    end), [[Бывший спортсмен лет сорока. Каждое утро вскакивает не свет не заря и на пробежку.]]

    Но не вижу смысла в данном случае так писать -- упрощения не видно :)

  18. Deleted 4 months ago by Ruido
  19. Ruido

    Oct 16 User since 2016

    Ещё вопрос

    {
       [[Найк?]]; 
       [[Бывший спортсмен лет сорока. Каждое утро вскакивает не свет не заря и на пробежку.]];
       cond = function() -- условие появления фразы
        return BiZnakomstvo 
       end,
    };

    return BiZnakomstvo = "Если ответ true, то выводи текст".
    Как сделать так чтобы выводило не по True, а по False?

  20. LukiUK

    Oct 16 User since 2017

    Инвертировать. not false равно true.
    Ну и вдогонку "ни свет ни заря"

  21. Ruido

    Oct 16 User since 2016

    В смысле? В моем примере как правильно записать?

  22. Newer ›

or Sign Up to reply!