# Выложить объект из инвентаря в произвольную сцену room
Wol4ik(syscall,22) — All
2017-08-02 12:08:36


Добрый день. Вопрос в следующем, как работать с функциями place, put или иными, если я не готов конкретно назвать имя комнаты куда хочу положить объект (переместить из инвентаря)? Что я имею - служебный объект инвентаря, который выполняет роль одного из действий (починить, сломать, говорить и т.п.) конкретно "выложить".

obj {-- служебный объект выложить, действие
nam = '-выложить';
pri = -99;
inv = [[Хелен может выкладывать предметы, которые пока ей не нужны.
Следует один раз кликнуть на действии "выложить",
и второй раз кликнуть на нужный предмет в инвентаре.]];
}

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

obj {-- кувалда, физический объект
nam = 'кувалда';
used = function(s)
if s^'выложить' then
place (s, ???????????);
remove(s);
end;
}

То есть вопрос, как вписать в функцию отсылку к ТЕКУЩЕЙ комнате, название которое тоже есть функция?

# Re: Выложить объект из инвентаря в произвольную сцену room
Peter(syscall,1) — Wol4ik
2017-08-02 12:13:04


> То есть вопрос, как вписать в функцию отсылку к ТЕКУЩЕЙ комнате, название которое тоже есть функция?
Если в place() 2й параметр не указан, то это будет текущая комната.
Но если нужна отсылка к этой текущей комнате еще для чегото, есть функция here() -- это и есть указатель на текущую комнату.

Далее, тут не понятно:
used = function(s)
    if s^'выложить' then
    place (s, ???????????);
    remove(s);
end; 

Скорее всего ты хотел написать:
used = function(s, w) -- s -- это и будет кувалда, нас интересует w а не s
    if w^'выложить' then
        place (s); -- в текущую комнату
        remove(s);
    end
end; 

Еще настоятельно рекомендую использовать отступы! Понятней код и самому проще и другим. :)

# Re: Выложить объект из инвентаря в произвольную сцену room
Peter(syscall,1) — Peter
2017-08-02 12:17:54


Да еще. remove(s) тоже не нужен. place сам убирает объект из прошлого место-положения. Это put не удаляет, а place -- перемещает как бы объект в новое место.
Так что в твоем случае и remove не нужен (но я бы еще воткнул признак отсутствия реакции):

used = function(s, w) -- s -- это и будет кувалда, нас интересует w а не s
    if w^'выложить' then
        place (s); -- в текущую комнату
    else
        return false -- даем знать stead3, что ничего не сделали, тогда вызовется game.use
    end 
end

# Re: Выложить объект из инвентаря в произвольную сцену room
Andrew Lobanov(tavern,1) — Wol4ik
2017-08-02 12:18:43


Wol4ik> Добрый день. Вопрос в следующем, как работать с функциями place, put или иными, если я не готов конкретно назвать имя комнаты куда хочу положить объект (переместить из инвентаря)? Что я имею - служебный объект инвентаря, который выполняет роль одного из действий (починить, сломать, говорить и т.п.) конкретно "выложить".

Wol4ik> obj {-- служебный объект выложить, действие
Wol4ik> nam = '-выложить';
Wol4ik> pri = -99;
Wol4ik> inv = [[Хелен может выкладывать предметы, которые пока ей не нужны.
Wol4ik> Следует один раз кликнуть на действии "выложить",
Wol4ik> и второй раз кликнуть на нужный предмет в инвентаре.]];
Wol4ik> }

Wol4ik> В него я специально не вписываю use/used, так как это все впишу в объекты-цели. Однако, вот есть условно 'кувалда', и нужно, чтобы ее used при соединении и 'выложить', помещал эту кувалду в ту комнату, где находится ГГ, независимо из какой комнаты эта конструкция вызывается.

Wol4ik> obj {-- кувалда, физический объект
Wol4ik> nam = 'кувалда';
Wol4ik> used = function(s)
Wol4ik> if s^'выложить' then
Wol4ik> place (s, ???????????);
Wol4ik> remove(s);
Wol4ik> end;
Wol4ik> }

Wol4ik> То есть вопрос, как вписать в функцию отсылку к ТЕКУЩЕЙ комнате, название которое тоже есть функция?

А почему не используешь drop()?

# Re: Выложить объект из инвентаря в произвольную сцену room
Peter(syscall,1) — Andrew Lobanov
2017-08-02 12:22:11


> А почему не используешь drop()?
В принципе, drop() в stead3 практически совпадает с place ;) drop создан для наглядности кода главным образом. А так да -- самое место ему тут быть используемым. :)

# Re: Выложить объект из инвентаря в произвольную сцену room
Andrew Lobanov(tavern,1) — Peter
2017-08-02 12:39:43


>> А почему не используешь drop()?
> В принципе, drop() в stead3 практически совпадает с place ;) drop создан для наглядности кода главным образом. А так да -- самое место ему тут быть используемым. :)

Упустил этот момент. У себя place использую для движения объетов между локациями, например.

# Re: Выложить объект из инвентаря в произвольную сцену room
Wol4ik(syscall,22) — Andrew Lobanov
2017-08-02 15:17:52


Спасибо, друзья. С drop тоже проэкспериментирую. Спасибо Петру за наглядное пояснение, что есть s и w в функциях, а то я часто срисовывал как школьник с доски, без понимания.