Форум TeamX
   Home   Members  
Pages: [1] |   Go Down
 
Author Topic: Проблема с обработчиком use_p_proc для предметов типа "drugs"  (Read 720 times)
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

476228895
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

476228895
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

301104000
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 »

Наш большой пост апокалиптический проект "Олимп 2207"
http://olympus2207.com
Jordan
Пользователь
Posts: 416

476228895
Re: Проблема с обработчиком use_p_proc для предметов типа "drugs"
« Reply #7 on: 20 January 2011, 20:36:20 »

Rainman

Quote
To 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 »

Блин, точняк!!! Спасибо! Выружил мою задницу, а то я хотел вообще отказаться от этой затеи!
Pages: [1] |   Go Up