Здравствуйте. Меня одолел вопрос: как сделать, чтобы криттер атаковал из диалога. Изучив скрипты фаллаута, я сделал это:
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 |
QUOTE |
с точки зрения скрипта сделано все верно. |
QUOTE |
какой номер определен у LVAR_Hostile, стандартно 5? зарезервировано ли для скрипта в scripts.lst место под эту переменную? |
QUOTE |
Вообще, мне кажется, что какие-то проблемы с командой attack(dude_obj), т.к. если ввести её, |
CODE |
procedure critter_p_proc begin if (obj_can_see_obj(self_obj,dude_obj)) then attack(dude_obj); end |
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) |
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 |
QUOTE |
Там не только мой скрипт не работал, но и все остальные скрипты с опцией атаки через диалог. |
QUOTE |
Скорее всего не установлена опция run_mapper_as_game |
QUOTE |
Насколько помню, ограниченный режим, скрипты не работают и т.д |