Перейти к содержимому


Фотография

Скрипты и обработчики предметов


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 5

#1 Nordan

Nordan

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 209 сообщений

Отправлено 08 Март 2012 - 22:01

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

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


П.С. Причем нада добавить, что такое бывает только при поднятии предметов, а у торговцев они все равно лежат в стаке, короче опять мистика.... ))


#2 Wasteland Ghost

Wasteland Ghost

    Маленькое Злое Привидение

  • Пользователи
  • PipPipPip
  • 3 451 сообщений

Отправлено 09 Март 2012 - 08:55

Обе проблемы хорошо известны и долго обсуждались на форумах TeamX (см. архивы). Штатными средствами они не решаются. С обновлением инвентаря вообще долго бились, ведь есть предметы, которые исчезают при поюзании. Выяснили только то, что ими управляет движок. Я не слежу за изменениями sfall, возможно, там эти вопросы решены.


#3 Akkella

Akkella

    Глобальный моДДер

  • Пользователи
  • PipPipPip
  • 1 057 сообщений

Отправлено 17 Март 2012 - 21: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

Код без сообщений (флоатеров) и дополнительных эффектов.
Хотя и тут есть минус, но он не столь существенен, как если заскриптованный предмет.


#4 Wasteland Ghost

Wasteland Ghost

    Маленькое Злое Привидение

  • Пользователи
  • PipPipPip
  • 3 451 сообщений

Отправлено 17 Март 2012 - 21:51

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


#5 Nordan

Nordan

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 209 сообщений

Отправлено 22 Март 2012 - 23: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


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

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

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



#6 Wasteland Ghost

Wasteland Ghost

    Маленькое Злое Привидение

  • Пользователи
  • PipPipPip
  • 3 451 сообщений

Отправлено 23 Март 2012 - 08:16

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

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




Похожие темы Свернуть

  Название темы Форум Автор Статистика Последнее сообщение


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных

Рейтинг@Mail.ru