Полная Версия: Атака из диалога
Kirsan
Здравствуйте. Меня одолел вопрос: как сделать, чтобы криттер атаковал из диалога. Изучив скрипты фаллаута, я сделал это:

CODE

procedure talk_p_proc begin

  start_dialogue(self_obj, neutral_fidget);
  gSay_Start;
      call Node000;
  gSay_End;
  end_dialogue;

end

procedure Node000 begin
gsay_reply(2, 1);
gsay_option(2, 2, Node999,50);
gsay_option(2, 3, Node998, 51);
end


procedure Node998 begin

  set_local_var(LVAR_Hostile, 2);
   
end


procedure critter_p_proc begin

  if (obj_can_see_obj(self_obj,dude_obj)) then begin
     if (local_var(LVAR_Hostile) == 2) then begin
     attack(dude_obj);
    set_local_var(LVAR_Hostile,1);
     end
     end
end



В итоге не сработало. Все нужные headers включены в скрипт, так что проблема не в макроссах (+ я пробовал использовать и обычные команды).

Так что, причина мне не ясна, т.к. я сделал, вроде, так же, как и в скриптах самого фаллаута. Надеюсь мне помогут, заранее спасибо.
Fakeman
с точки зрения скрипта сделано все верно.
но нужно больше информации
какой номер определен у LVAR_Hostile, стандартно 5?
зарезервировано ли для скрипта в scripts.lst место под эту переменную?
Kirsan
Спасибо за ответ.

QUOTE

с точки зрения скрипта сделано все верно.


Ну, скрипт хотя бы правильно написал, хоть и нерабочий.

QUOTE

какой номер определен у LVAR_Hostile, стандартно 5?
зарезервировано ли для скрипта в scripts.lst место под эту переменную?


Определен стандартный пятый номер. Я использовал скрипт Test0, а там прописано место для восьми LVAR'ов.

Вообще, мне кажется, что какие-то проблемы с командой attack(dude_obj), т.к. если ввести её,
например, в map_enter, то ничего не произойдёт (хотя я не уверен, что одной этой команды достаточно). Может быть такое, что сам Маппер попросту не реагирует на эту команду?
Fakeman
QUOTE
Вообще, мне кажется, что какие-то проблемы с командой attack(dude_obj), т.к. если ввести её,

Никаких проблем с attack никогда не было.
кидани скрипт полностью.
А может что-то с критером типа его AI установки не хотят атаковать?

Проверь так атакует?
CODE
procedure critter_p_proc begin
 if (obj_can_see_obj(self_obj,dude_obj)) then
    attack(dude_obj);
end

макрос у тебя там не поломан, так же определен?
#define attack(WHO) attack_complex(WHO,1,1,0,0,30000,0,0)
Kirsan
Вот весь скрипт:
QUOTE
#include "..\headers\define.h"


#define NAME                    SCRIPT_TEST0
#define TOWN_REP_VAR            (GVAR_TOWN_REP_)

#include "..\headers\command.h"
#include "..\headers\ModReact.h"

procedure start;
procedure critter_p_proc;
procedure pickup_p_proc;
procedure talk_p_proc;
procedure destroy_p_proc;
procedure look_at_p_proc;
procedure description_p_proc;
procedure use_skill_on_p_proc;
procedure damage_p_proc;
procedure map_enter_p_proc;


procedure Node998;                                   
procedure Node999;                                   
procedure Node000;
procedure Node001;

#define LVAR_Herebefore                (4)
#define LVAR_Hostile                    (5)
#define LVAR_Personal_Enemy            (6)
#define LVAR_Caught_Thief              (7)




procedure start begin

end

procedure map_enter_p_proc begin
end

procedure critter_p_proc begin
  if (obj_can_see_obj(self_obj,dude_obj)) then begin
      if (local_var(LVAR_Hostile) == 2) then begin
      Call Node001;
      attack(dude_obj);
    set_local_var(LVAR_Hostile,1);
      end
      end
end

procedure damage_p_proc begin

  if (obj_in_party(source_obj)) then begin
      set_local_var(LVAR_Personal_Enemy, 1);
  end

end

procedure pickup_p_proc begin

  if (source_obj == dude_obj) then begin
      set_local_var(LVAR_Hostile, 2);
  end
 
end


procedure talk_p_proc begin

  start_dialogue(self_obj, neutral_fidget);
  gSay_Start;
      call Node000;
  gSay_End;
  end_dialogue;

end


procedure destroy_p_proc begin

end

procedure look_at_p_proc begin


end


procedure description_p_proc begin



end


procedure use_skill_on_p_proc begin
     
end

procedure Node998 begin

  set_local_var(LVAR_Hostile, 2);
   
end

procedure Node999 begin

end

procedure Node000 begin
gsay_reply(2, 1);
gsay_option(2, 2, Node999,50);
gsay_option(2, 3, Node998, 51);
end

procedure Node001 begin
floater(random(4,6));
end


QUOTE

Проверь так атакует?
CODE
procedure critter_p_proc begin
if (obj_can_see_obj(self_obj,dude_obj)) then
    attack(dude_obj);
end


Так тоже не работает.

QUOTE

А может что-то с критером типа его AI установки не хотят атаковать?


Та вроде как нет. Подставлял скрипт Крису, который в Наварро не пускает. У него есть такая функция, что должен атаковать при одной из опций в диалоге, так что с АИ это, вроде, не связанно.

QUOTE
макрос у тебя там не поломан, так же определен?
#define attack(WHO) attack_complex(WHO,1,1,0,0,30000,0,0)


Он же уже должен быть в define.h + attack_complex я тоже пробовал.
Fakeman
Если утебя и просто не атакует то что ты хочешь от диалога, для начало разберись почему криттер не атакует из kриттер_р_proc
Вот тестовый код
CODE
procedure critter_p_proc begin
Display_msg("criiter_p");
if (obj_can_see_obj(self_obj,dude_obj)) then begin
   Display_msg("see attack”);
   attack(dude_obj);
   End
end

Должно спамить двумя строками значит скрипт работает, если нет спама ищи проблему в другом :-)
В игре протестируй может у тебя проблема с маппером.
Kirsan
Спасибо, проблема реально была в маппере. Там не только мой скрипт не работал, но и все остальные скрипты с опцией атаки через диалог. В игре всё работает.

Но появляется новый вопрос. Есть ли вариант исправить это дело? Может другой маппер где-то взять? (сам скачивал маппер с teamx.ru)
Fakeman
QUOTE
Там не только мой скрипт не работал, но и все остальные скрипты с опцией атаки через диалог.

Скорее всего не установлена опция run_mapper_as_game
от сюда скачать настроенный https://disk.yandex.ru/client/disk/Fallout/Tools
jordan
QUOTE
Скорее всего не установлена опция run_mapper_as_game


Спасибо за инфу. С этой опцией можно в мапере при нажатии вроде f6, не просто бегать по локации, а играть? Насколько помню, ограниченный режим, скрипты не работают и т.д
Foxx
jordan
F8
Fakeman
QUOTE
Насколько помню, ограниченный режим, скрипты не работают и т.д

Все работает.
Сохраняет может что-то и в ограниченном режиме, я это не проверял — но оно и не надо.
Fakeman
Какая-то проблема с атакой имеется в attack_complex(WHO,1,1,0,0,30000,0,0)
Если задавать другие параметры для настройки атаки криттеры не атакуют(
Ваш ответ: