» TeamX (Архив Форума)«


Форум TeamX » Тех. поддержка » Скрипты (FAQ)

Переход по темам
<< Пред. След. >>
Страницы этой темы [ 1 2 ] Все собщения

 
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
 

Переход по темам
<< Пред. След. >>
Страницы этой темы [ 1 2 ] Все собщения


Powered by Ikonboard 2.1.9 RUS
Modified by RU.Board Team
© 2000 Ikonboard.com