|
Ray
Модератор
Откуда: Донецк,Украина Регистрация: Янв. 2004
Всего: 746 сообщений
|
Q: Что такое export и import variable's? Для чего они нужны? Для того, чтобы из скрипта одного объекта обратиться к другому? A: Никакого "обращения" не происходит. Переменная, прописанная в скрипте карты с ключевым словом export будет доступна ВСЕМ скриптам на карте - как на чтение, так и на запись. Хранить в этой переменной можно всё, что угодно - PID, указатель, число денег, причитающихся Чузу - в общем, всё. Пример: По результатам разговора с одним персонажем Чуз должен получить некоторое количество денег от другого. Число денег генерируется автоматически в скрипте первого НПС. Как второму узнать сколько денег выдавать? Используем импорт/экспорт. В скрипте карты пишем: export variable money_to_give; Теперь переменная money_to_give потенциально доступна всем объектам на этой карте. В скрипте первого НПС (генератора числа денег) пишем: --------------------------- <...> //Импортируем переменную, т.е. делаем её доступной для этого скрипта import variable money_to_give; <...> //Какая-то процедура генерации денег procedure generate_amount begin <...> //Присваиваем экспортной переменной сгенерированную сумму money_to_give:=generated_cash; end <...> --------------------------- Всё, теперь переменная money_to_give хранит подлежащую выдаче сумму денег. В скрипте НПС2 (выдающий) пишем: --------------------------- <...> import variable money_to_give; <...> procedure give_money begin <...> //Передаём Чузу сгенерированную сумму item_caps_adjust(dude_obj,money_to_give); <...> end <...>
|
Отправлено: 23:10 - 20 Июня, 2005 Исправлено: Ray - 22:26 - 20 Июня, 2005
|
|
Ray
Модератор
Откуда: Донецк,Украина Регистрация: Янв. 2004
Всего: 746 сообщений
|
Q: Когда использую стандартные исходники скриптов, которые поставляются в комплете с маппером, при работе вылезают глюки (чаще всего с машиной). В чём дело? A: Злые дяди из БИС подсунули фанатам старые исходники. В частности, абсолютно все скрипты карт, на коих должна рисоваться машина, неверны, т.к. алгоритм прорисовки машины был сильно изменён. Потому был написан новый макрос, который заменяет старые макросы в заголовках БИС. А вообще, если ты собрался юзать исходники, то сходи в файловый раздел и скачай исходники скриптов 1.02d от Haenlomal. Там всё чётко. А лучше всего используйте декомпиляторы.
|
Отправлено: 23:34 - 21 Июня, 2005 | ИСПРАВЛЕНО: Ray - 22:41 - 21 Июня, 2005
|
|
Ray
Модератор
Откуда: Донецк,Украина Регистрация: Янв. 2004
Всего: 746 сообщений
|
Q: Из доки по скриптам : int critter_state(ObjectPtr who) - вернуть состояние обьекта. Что это означает? A: Вернуть состояние - значит, что функция вернёт значение соответствующие задаче функции. Потом можно сверять эти значения. Например, может возвращятся текущий уровень облучения, отравления и т.д. Так critter_state вернёт значение одной из характеристик. Нигде в окошке тебе этого не отобразят. Пример: Допустим у тебя значение хар. = 120, тогда: if (get_critter_stat(self_obj, STAT_current_rad) > 100 ) begin ..... end выполнится. Если хар. = 90 - Нет.
|
Отправлено: 15:54 - 26 Июня, 2005 | ИСПРАВЛЕНО: Ray - 16:34 - 26 Июня, 2005
|
|
Ray
Модератор
Откуда: Донецк,Украина Регистрация: Янв. 2004
Всего: 746 сообщений
|
Q: Возможно отменить-повлиять скриптово на действие принятого наркотика ? A: Нет. За действие наркотиков отвечает двиг. Q: Процедура смерти (любыми способами) НПС прописана в его скрипте, я полагаю? A: Никакой "процедуры смерти" нет. Анимация смерти выбирается/отрисовывается движком, скрипты здесь не при чём. Но в момент смерти персонажа срабатывает обработчик destroy_p_proc, во время получения повреждений (любых, из любого источника) - damage_p_proc и в ряде случаев срабатывает combat_p_proc Q: Как заставить криттера подойти к чузену и только потом завести диалог? A: Для того, чтобы криттер подходил к чузену одной командой не обойдёшся. Простейший пример: ====================== procedure citter_p_proc begin if (tile_distance_objs( self_obj, dude_obj ) <= 25) and (tile_distance_objs( self_obj, dude_obj ) >5) and (local_var(0)==0) then animate_run_to_tile(tile_num(dude_obj)); if (tile_distance_objs( self_obj, dude_obj ) <= 5) and (local_var(0)==0) then call Node001; end ---------------------------- procedure Node001 begin set_local_var(0, 1); end ====================== В этом примере, как только чузен подойдет к криттеру, в скрипте которого данная процедура, на 25 тайлов - криттер начнёт бежать к чузену, пока не достигнет расстояния в 5 тайлов, а уже оттуда начнёт разговор. local_var используется, чтобы процесс "криттер гоняется за чузеном" выполнялся всего один раз.
|
Отправлено: 0:09 - 30 Июня, 2005 | ИСПРАВЛЕНО: Ray - 15:16 - 3 Июля, 2005
|
|
Ray
Модератор
Откуда: Донецк,Украина Регистрация: Янв. 2004
Всего: 746 сообщений
|
Q: Почему когда я в BIS'овском маппере ставлю перса, вешаю на него свой скрипт, то всё работает как надо, а в игре при наведении курсора пишется, что это деревенский житель? (смысл использования script_overrides) A: В прототипе прописан и номер скрипта и описание. Если мы прописываем криттеру новый скрипт, то это ещё не означает, что мы полностью "отрубаем" тем самым стандартные процедуры (description_p_proc и т.п.) Проще говоря, даже если в новом скрипте описана какая-то процедура, это ещё не означает, что стандартная процедура не будет выполняться. Для этого необходима команда scrpipt_overrides. Она отменяет стандартное выполнение функции, которое можно заменить своим. Пример для скрипта рад-скорпиона: --------------------------------------- procedure description_p_proc begin display_msg("Страшный зверь"); end такая процедура выведет две строки - "Вы видите рад-скорпиона"(берётся из прототипа) и "Страшный зверь" --------------------------------------- procedure description_p_proc begin script_overrides; display_msg("Страшный зверь"); end А такая только одну - "Страшный зверь" --------------------------------------- Писать script_overrides везде не советую. А вот обработчики description_p_proc и look_at_p_proc содержать её просто обязаны, если необходимо заменить стандартное описание своим. БИСовский маппер после нажатия F8 работает тоже в некотором отладочном режиме, не совсем соответствующем режиму работы "чистой" игры.
|
Отправлено: 22:40 - 5 Июля, 2005 | ИСПРАВЛЕНО: Ray - 21:08 - 6 Июля, 2005
|
|
Ray
Модератор
Откуда: Донецк,Украина Регистрация: Янв. 2004
Всего: 746 сообщений
|
Q: Почему BIS'овский компилятор выдаёт ошибки при использовании макросов? A: Он макросы понимать не обучен. Если вы просто использовали #define, то вам понадобится препроцессор. Если же вы использовали стандартные макросы (можно найти в доке от Wasteland Ghost), то для компиляции, перед использованием препроцессора, вам следует подключить <command.h> Будьте внимательны. После некоторых макросов не ставится точка с запятой. Пример (для unmark_on_map(int area)): ======================== #include "..\headers\command.h" #include "..\headers\define.h" procedure start; procedure map_enter_p_proc; procedure start begin end procedure map_enter_p_proc begin unmark_on_map(5) end ========================
|
Отправлено: 13:07 - 19 Авг., 2005 | ИСПРАВЛЕНО: Ray - 15:49 - 19 Авг., 2005
|
|
Ray
Модератор
Откуда: Донецк,Украина Регистрация: Янв. 2004
Всего: 746 сообщений
|
Q: Как узнать, присутствует ли в *.msg файле реплика с заданным номером? A: Для компиллера от BIS: ======================== if (message_str(file_num, str_num)== "Error") then begin ..... end else begin ..... end ======================== Для компиллера от Нойда: ======================== if (op_msg_string(file_num, str_num) == "Error") begin ..... end else begin ..... end ========================
|
Отправлено: 22:47 - 16 Янв., 2006 | ИСПРАВЛЕНО: Ray - 22:01 - 16 Янв., 2006
|
|
|
|