Полная Версия: Скрипты и обработчики предметов
Nordan
Пролема: после того как привязываешь скрипт к какому-нибудь предмету он перестает входить в стак в инвентаре, т.е. каждый экземпляр этого предмета начинает занимать отдельный слот. Можно ли как то этого избежать?

Нужно чтобы по использованию предмета в инвентаре, добавлялся другой предмет. (Бутылка пива --> пустая бутылка). В предыдущей похожей теме (оставшейся в архиве форума) в конце пришли к выводу, что легче добавлять предмет не по использованию, а по уничтожению исходного предмета. В принципе это работает, но появились вот такие вот обстоятельства...


П.С. Причем нада добавить, что такое бывает только при поднятии предметов, а у торговцев они все равно лежат в стаке, короче опять мистика.... ))
Wasteland Ghost
Обе проблемы хорошо известны и долго обсуждались на форумах TeamX (см. архивы). Штатными средствами они не решаются. С обновлением инвентаря вообще долго бились, ведь есть предметы, которые исчезают при поюзании. Выяснили только то, что ими управляет движок. Я не слежу за изменениями sfall, возможно, там эти вопросы решены.
Akkella
Лучше использовать скрипт OBJ_DUDE.
При привязывании скрипта к предмету может выплыть очень неприятный баг, когда при входе на локацию, где таких предметов около 15, игра будет вылетать. Из-за этого пришлось отказываться от привязывания скриптов к броне и оружию.

В твоем случае (выпил пиво, появляется пустая бутылка) я бы так поступил:
В скрипте OBJ_DUDE procedure use_obj_on_p_proc:
variable LVar0 := 0;
variable LVar1 := 0;
LVar0 := obj_being_used_with;
if (obj_pid(LVar0) == "Бутылка пива") then begin
script_overrides;
LVar1 := rm_mult_objs_from_inven(dude_obj, LVar0, 1);
destroy_object(LVar0);
LVar1 := create_object_sid("пустая бутылка", 0, 0, -1);
move_obj_inven_to_obj(self_obj, LVar1);
end
end

Код без сообщений (флоатеров) и дополнительных эффектов.
Хотя и тут есть минус, но он не столь существенен, как если заскриптованный предмет.
Wasteland Ghost
2Akkella, если мне не изменяет мой склероз, не все обработчики срабатывают (и не для всех типов предметов) при открытом инвентаре. Плюс, есть проблема с обновлением инвентаря: предмет добавится, но увидеть его можно будет только при повторном входе в инвентарь. Нэ?
Nordan
Мда, обработчик use_obj_on_p_proc из инвентаря все таки не вызывается, так что придется действовать извращенным методом....

CODE
procedure use_obj_on_p_proc begin

variable added_item := 0;

if (obj_pid(obj_being_used_with) == 40) then begin
added_item := create_object_sid(318, -1, -1, -1);
add_obj_to_inven(dude_obj,added_item);
end
end


При использовании стимпака в инвентаре будет появляться пустой шприц, НО (как наверно все уже догадались) придется применять не из инвентаря, а через "применить объект на ...". Конечно, не самое удобное решение, но лучше так, чем никак.

По крайней мере других способов решения этой задачи я не вижу.

П.С. Смотрел, кстати, последнюю версию сфалла, там тоже ничего по этому поводу нету.

Wasteland Ghost
QUOTE
При использовании стимпака в инвентаре будет появляться пустой шприц, НО (как наверно все уже догадались) придется применять не из инвентаря, а через "применить объект на ...". Конечно, не самое удобное решение, но лучше так, чем никак.

Всё верно. Срабатывает только так.
Ваш ответ: