Dr.CRACKer
Пользователь
Posts: 78
|
|
Проблема с обработчиком use_p_proc для предметов типа "drugs"
« on: 19 January 2011, 23:40:01 » |
|
Идея такая: при использовании какого либо предмета типа "наркоты", например пиво, в интаентаре долже появиться новый объект "пустая бутылка" (в последствии будет компонентом чего - нибудь в Mr. Fixit), но вот ,как известно, обработчик use_p_proc в данных объектах не обрабатывается, из этого возникает вопрос: можно ли получить желаемый результат не используя этот обработчик?
|
|
|
|
rws5
Пользователь
Posts: 53
|
|
Re: Проблема с обработчиком use_p_proc для предметов типа "drugs"
« Reply #1 on: 19 January 2011, 23:55:40 » |
|
obj_dude.ssl?
|
|
|
|
Jordan
Пользователь
Posts: 416
|
|
Re: Проблема с обработчиком use_p_proc для предметов типа "drugs"
« Reply #2 on: 20 January 2011, 08:25:36 » |
|
procedure use_obj_on_p_proc begin variable skill_doctor; variable heal; skill_doctor := has_skill(dude_obj, SKILL_DOCTOR);
if (obj_being_used_with == PID_STIMPAK) then begin
destroy_object(obj_being_used_with); add_obj_to_inven(dude_obj, create_object_sid(PID_HYPODERMIC_NEEDLE, -1, -1, -1));
critter_heal(dude_obj, heal); script_overrides; end end
При использовании стимпака появляется пустой шприц. Это всё должно быть в скрипте героя odj_dude.ssl. Для криттеров тоже подходит.
|
Воспрянет Россия, из праха отцов Расправятся крылья, миллионов сердец Поднимут все головы и грудью вздохнут И громка скажут, что пришли Мы пришли, со столетней войны
|
|
|
Wasteland Ghost
Администратор
Posts: 869
Маленькое Злое Привидение
|
|
Re: Проблема с обработчиком use_p_proc для предметов типа "drugs"
« Reply #3 on: 20 January 2011, 09:42:24 » |
|
Jordan, из инвентаря проверял? Помнится, не срабатывают никакие обработчики при открытом инвентаре...
|
|
|
|
Jordan
Пользователь
Posts: 416
|
|
Re: Проблема с обработчиком use_p_proc для предметов типа "drugs"
« Reply #4 on: 20 January 2011, 09:45:20 » |
|
Обработчик работает из рук. На инвентаре не проверял. Даже если из инвентаря не работает. Хоть какое то решение. Можно использовать предметы не только на герое, но и на криттерах, с соответствующей проверкой в скрипте.
|
Воспрянет Россия, из праха отцов Расправятся крылья, миллионов сердец Поднимут все головы и грудью вздохнут И громка скажут, что пришли Мы пришли, со столетней войны
|
|
|
Wasteland Ghost
Администратор
Posts: 869
Маленькое Злое Привидение
|
|
Re: Проблема с обработчиком use_p_proc для предметов типа "drugs"
« Reply #5 on: 20 January 2011, 12:36:45 » |
|
Так проверь. Кривое решение, на самом деле. Потому что ничто не мешает игроку юзать предмет из инвентаря.
|
|
|
|
Rainman
Пользователь
Posts: 69
|
|
Re: Проблема с обработчиком use_p_proc для предметов
« Reply #6 on: 20 January 2011, 13:28:48 » |
|
Более надежный способ (внимание, использование sfall) Перед использованием предмета можно ввести проверку на режим игры (фнкция sfall get_game_mode), т.е.
procedure use_obj_on_p_proc begin variable skill_doctor; //variable heal; skill_doctor := has_skill(dude_obj, SKILL_DOCTOR); if (obj_pid(obj_being_used_with) == PID_STIMPAK) then begin if Game_Mode_Inventory then begin script_overrides; display_msg("You must close the inventory window and use this object from one of your hands"); end else begin if skill_doctor >= REQUESTED_DOCTOR_LEVEL then //destroy_object(obj_being_used_with); add_obj_to_inven(dude_obj, create_object_sid(PID_HYPODERMIC_NEEDLE, -1, -1, -1)); else begin script_overrides; display_msg("Your "Doctor" level is not enough for this operation"); end end //critter_heal(dude_obj, heal); //script_overrides; end end
Это немного измененный код от Jordan: если игрок использует стим-пак, то проверяется, не активно ли окно инвентаря. Если "Активно", то выводится надпись о невозможности использования стим-пака из инвентаря, и что для использования нужно закрыть окно. Если "Неактивно" - проверяется, достаточен ли требуемый навык умения "Доктор" (это просто для примера). Если навык недостаточен, то выдается фраза о недостаточном уровне навыка. Если же навык выше или равен требуемому REQUESTED_DOCTOR_LEVEL - позволяем движку выполнить действие по-умолчанию (не используем script_overrides;) и добавляем игроку в инвентарь пустой шприц.
Внимание, Game_Mode_Inventory - это мой, только что придуманный, макрос. К сожалению, у меня под рукой нет точной функции, скину вечером.
To Jordan: а зачем было предопределять стандартное поведение стим-пака и использовать переменную heal и функцию destroy_object ?
--- ДОБАВЛЕНО ---
Собственно, вот обещанный дефайн для макроса:
#define Game_Mode_Inventory (get_game_mode bwand 4096) != 0
|
|
« Last Edit: 20 January 2011, 19:23:37 by Rainman »
|
|
|
|
|
Jordan
Пользователь
Posts: 416
|
|
Re: Проблема с обработчиком use_p_proc для предметов типа "drugs"
« Reply #7 on: 20 January 2011, 20:36:20 » |
|
RainmanTo Jordan: а зачем было предопределять стандартное поведение стим-пака и использовать переменную heal и функцию destroy_object ?
Это укороченный код с НМА. Был вопрос о изменении влияние наркоты. Это просто пример.
|
Воспрянет Россия, из праха отцов Расправятся крылья, миллионов сердец Поднимут все головы и грудью вздохнут И громка скажут, что пришли Мы пришли, со столетней войны
|
|
|
KLIMaka
Пользователь
Posts: 72
|
|
Re: Проблема с обработчиком use_p_proc для предметов типа "drugs"
« Reply #8 on: 20 January 2011, 22:08:30 » |
|
Ну по-моему все же в случае мгновенных эффектов, типа стимпака, проще заменить объект типа drugs на miscItem, и тогда для него замечательно работают все обработчики и из инвентаря в том числе.
Ну а при наличии продолжительных эффектов уже изворачиваться нужно. Либо как Rainman предлагал, но тогда придется использовать объект только из рук. Либо опять заменять тип объекта и реализовывать пролонгированные эффекты через глобальные скрипты, ну и как следствие геморрой с эффектами привыкания.
|
|
« Last Edit: 20 January 2011, 22:11:16 by KLIMaka »
|
|
|
|
|
KLIMaka
Пользователь
Posts: 72
|
|
Re: Проблема с обработчиком use_p_proc для предметов типа "drugs"
« Reply #9 on: 15 June 2011, 00:30:24 » |
|
Пардон за некропостинг, но я вот как раз наткнулся на простое решение. Дело в том, что для наркоты use_p_proc не вызывается, а вот destroy_p_proc замечательно вызывается, и все постеффекты, типа добавления в инвентарь пустых бутылок и т.д., можно реализовать как раз в этом обработчике.
|
|
|
|
Dr.CRACKer
Пользователь
Posts: 78
|
|
Re: Проблема с обработчиком use_p_proc для предметов типа "drugs"
« Reply #10 on: 15 June 2011, 17:15:30 » |
|
Блин, точняк!!! Спасибо! Выружил мою задницу, а то я хотел вообще отказаться от этой затеи!
|
|
|
|
|