Nordan
8 March 2012 | 23:01
Пролема: после того как привязываешь скрипт к какому-нибудь предмету он перестает входить в стак в инвентаре, т.е. каждый экземпляр этого предмета начинает занимать отдельный слот. Можно ли как то этого избежать?
Нужно чтобы по использованию предмета в инвентаре, добавлялся другой предмет. (Бутылка пива --> пустая бутылка). В предыдущей похожей теме (оставшейся в архиве форума) в конце пришли к выводу, что легче добавлять предмет не по использованию, а по уничтожению исходного предмета. В принципе это работает, но появились вот такие вот обстоятельства...
П.С. Причем нада добавить, что такое бывает только при поднятии предметов, а у торговцев они все равно лежат в стаке, короче опять мистика.... ))
Wasteland Ghost
9 March 2012 | 09:55
Обе проблемы хорошо известны и долго обсуждались на форумах TeamX (см. архивы). Штатными средствами они не решаются. С обновлением инвентаря вообще долго бились, ведь есть предметы, которые исчезают при поюзании. Выяснили только то, что ими управляет движок. Я не слежу за изменениями sfall, возможно, там эти вопросы решены.
Akkella
17 March 2012 | 22:36
Лучше использовать скрипт 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
17 March 2012 | 22:51
2Akkella, если мне не изменяет мой склероз, не все обработчики срабатывают (и не для всех типов предметов) при открытом инвентаре. Плюс, есть проблема с обновлением инвентаря: предмет добавится, но увидеть его можно будет только при повторном входе в инвентарь. Нэ?
Nordan
23 March 2012 | 00:59
Мда, обработчик 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
23 March 2012 | 09:16
QUOTE |
При использовании стимпака в инвентаре будет появляться пустой шприц, НО (как наверно все уже догадались) придется применять не из инвентаря, а через "применить объект на ...". Конечно, не самое удобное решение, но лучше так, чем никак. |
Всё верно. Срабатывает только так.