# Чтобы избежать ошибок
Wol4ik(syscall,22) — All
2017-07-19 12:00:21


В процессе понял, что уверенных знаний в инстэд пока не хватает. Читаю сообщения об ошибках в сюжетах уже опубликованных инстэд-игр и просьбы к авторам поправить нестыковки. Хочу изначально, большую часть ключевых dsc и вообще текстовок связанных с room и obj вводить в виде переменных. А не в виде устойчивых (константных) dsc и decor. Просто, чтобы они были управляемы. Ну, к примеру, decor - "Вы пришли на заснеженную поляну и видите {домик}", потом он сгорает, чтобы не делать перетасовок, я лишь в определенный момент заменю значение строковой переменной и будет уже "....и видите {сгоревший домик}". А все движимые об'екты, да, придется тоже задавать заранее и вводить их при помощи кода (place и остальных конструкций). Пока я мыслю себе так.

# Re: Чтобы избежать ошибок
Peter(syscall,1) — Wol4ik
2017-07-19 12:57:43


Проще, все таки в инстед стиле:

obj {
    nam = 'домик';
    burned = false;
    dsc = function(s)
         if s.burned then
             p [[Вы видите, как дымится {дом}.]]
             return
         end
         p [[Вы видите уютный {домик}.]]
    end
}

Ну и все. Теперь в комнате:

room {
    nam = 'Поляна';
    obj = { 'домик' };
}

По-моему, так проще.

# Re: Чтобы избежать ошибок
Wol4ik(syscall,22) — Peter
2017-07-19 15:45:44


Спасибо. Пойду перечитывать про переменные, так как догадываюсь, что s.borned это хоть и переменная, но и одновременно некое "служебное слово" по отношению к borned. То есть понятно, что дело не в названии, а в том, как добавляется и интерпритируется инстэдом это s.****

# Re: Чтобы избежать ошибок
Wol4ik(syscall,22) — Peter
2017-07-19 15:50:21


То есть, да, я понял, что в dsc конкретного об'екта мы заносим все возможные формы существования этого об'екта, и уютный и сгоревший, и еще можем добавить другие состояния. Не понял пока куда и зачем вернет нас return.

# Re: Чтобы избежать ошибок
Wol4ik(syscall,22) — Wol4ik
2017-07-19 16:17:41


Аааа. Прошу прощеня, забыл очевидную вещь)))) если убрать return, но отобразятся сразу оба состояния. А return вернет нас просто в room, где об'ект фигурирует. К сожалению не знал, что Инстэд может реализовывать return без парного отсылающего оператора (типа gosub и подобных). Теперь я еще продвинулся с твоей помощью, спасибо.

# Re: Чтобы избежать ошибок
Peter(syscall,1) — Wol4ik
2017-07-19 17:17:49


> Аааа. Прошу прощеня, забыл очевидную вещь)))) если убрать return, но отобразятся сразу оба состояния. А return вернет нас просто в room, где об'ект фигурирует.
Дело в том, что есть такое понятие как метод,
Вот dsc - это метод. Когда движку нужно описание, он вызывает метод dsc у всех объектов комнаты. return тут это не возврат в комнату, а выход из функции. Например (это не инстед, просто lua):

function test()
   return 10
end
print(test()) -- выведет 10

function test2()
   return
end
print() -- выведет пустоту


А в инстеде p -- это просто накопление текста, например:

p "hello"

это то же самое, что return "hello"

Или так:

p "hello"
p "world"

то же самое, что и return "hello world"

Теперь про пример:

if s.burned then
   p "сгорел"
end
p "не сгорел"

будет "сгорел не сгорел"

а так:

if s.burned then
   p "сгорел"
   return  -- мы вышли из функции
end
p "не сгорел"

только одно состояние

Еще вариант:

if s.burned then
   p "сгорел"
else
   p "не сгорел"
end

Надеюсь, помог.