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