|     |  
    
    
    
        
            
            
                    
                    
                    Aman
                     Пользователь 
  Откуда: Киев  Регистрация: Апр. 2005 
  Всего: 208 сообщений
                 | 
                    
                    
                              
                    
                     По-моему все-таки 1 тик=0,1 сек, 10 тиков = секунда.
  ----- Ибо логично предположить, что если недостаточно чего-либо для запуска чего-либо, то второе чего-либо, а именно то, для которого не хватает - вообще не должно запускаться. (неизвестный)
                 | 
             
                    
                     Отправлено: 18:44 - 26 Фев., 2006  
                 | 
               | 
         
    
    
    
        
            
            
                    
                    
                    Wasteland Ghost
                     Маленькое Злое Привидение 
  Откуда: Россия, Самара  Регистрация: Дек. 2002 
  Всего: 2251 сообщение
                 | 
                    
                    
                              
                    
                    
 Цитата:
  2) Игровой тик = 10 мс. Т.е. 100 тиков = 1 с. 
 
    Неверно. В секунде 10 тиков.
                 | 
             
                    
                     Отправлено: 18:45 - 26 Фев., 2006  
                 | 
               | 
         
    
    
    
        
            
            
                    
                    
                    Keha
                     Пользователь    Регистрация: Янв. 2006 
  Всего: 31 сообщение
                 | 
                    
                    
                              
                    
                     Спасибо большое.  --------------------------------  Пытаюсь организовать в боевом режиме  аналог critter_p_proc - чтоб можно было постоянно выполнять определенный блок команд, но вот толи сам корявый то ли:    variable st;  variable q;    procedure combat_p_proc begin     if st == 0 then begin          st:=1;              add_timer_event(self_obj,5,44);  отсюда тайм ивент должен добавлятся только при старте боевки так как далее st будет равна 1 и сюда програма заходить не будет      end     end    procedure timed_event_p_proc begin      if (fixed_param == 44) then begin         q:=q+1;  эту и следующую строчку написал для проверки циклится тайм ивент в боевке или нет         display_msg("n="+q);          add_timer_event(self_obj,5,44); - зацикливание таймивента на себя через каждые 5 тиков         *блок команд*  как я пологал если сунуть сюда какие то команды то они во время боевки будут переодично выполнятся с установленым в add_timer_event(self_obj,периуд,44) периудом, но на практике выполняется только раз.      end  end    procedure critter_p_proc begin           rm_fixed_timer_event(self_obj,44);  к_п_п включается как только боевка отключается и потому эту процедуру удобно использовать на остановку зацыкливания тайм ивента после прекращения боевки, заодно тут же нулим переменную st            st:=0;  end    Почему у меня не циклится тайм ивент в боевке? Или тики это игровое а не машинное время, и во время турна они не тикают? А тикают только со сменой турна дискретно?    А то у меня q меняется как раз с преходами турнов почемуто.  
                 | 
             
                    
                     Отправлено: 19:11 - 26 Фев., 2006 | ИСПРАВЛЕНО: Keha - 21:45 - 26 Фев., 2006
 
                 | 
               | 
         
    
    
    
        
            
            
                    
                    
                    Wasteland Ghost
                     Маленькое Злое Привидение 
  Откуда: Россия, Самара  Регистрация: Дек. 2002 
  Всего: 2251 сообщение
                 | 
                    
                    
                              
                    
                     В бою работает только combat_p_proc, емнип.
                 | 
             
                    
                     Отправлено: 10:35 - 27 Фев., 2006  
                 | 
               | 
         
    
    
    
        
            
            
                    
                    
                    Keha
                     Пользователь    Регистрация: Янв. 2006 
  Всего: 31 сообщение
                 | 
                    
                    
                              
                    
                     void AddButtonProc(string btn_name, procedure button_on, procedure button_off, procedure button_press, procedure button_release) - связывает с кнопкой btn_name процедуры для обработки событий  Аргументы:  btn_name - имя кнопки, например, "test_btn"  button_on, button_off, button_press, button_release - имена процедур для обработки наведения, убирания, нажатия и отпускания мыши    Можно ли AddButtonProc прилепить к существующим фолаутовским кнопкам?    Если можно, то очень интересует названия(btn_name) двух кнопок:  1) левая красная кнопка - изменяет активную руку.  2) кнопка "далее" в открытом инвентаре - которая закрывает окно инвентаря.
                 | 
             
                    
                     Отправлено: 15:49 - 27 Фев., 2006 | ИСПРАВЛЕНО: Keha - 15:53 - 27 Фев., 2006
 
                 | 
               | 
         
    
    
    
        
            
            
                    
                    
                    Wasteland Ghost
                     Маленькое Злое Привидение 
  Откуда: Россия, Самара  Регистрация: Дек. 2002 
  Всего: 2251 сообщение
                 | 
                    
                    
                              
                    
                     Нет.
                 | 
             
                    
                     Отправлено: 16:19 - 27 Фев., 2006  
                 | 
               | 
         
    
    
    
        
            
            
                    
                    
                    Mynah
                     Модератор 
  Откуда: Пермь  Регистрация: Окт. 2004 
  Всего: 469 сообщений
                 | 
                    
                    
                              
                    
                     >>В бою работает только combat_p_proc, емнип.   Фига:) Таймед евенты работаю тоже. Только странно как-то.
  ----- Scio me nihil scire
                 | 
             
                    
                     Отправлено: 22:01 - 27 Фев., 2006  
                 | 
               | 
         
    
    
    
        
            
            
                    
                    
                    Dar
                     Пользователь 
  Откуда: Воронеж  Регистрация: Дек. 2004 
  Всего: 289 сообщений
                 | 
                    
                    
                              
                    
                     >>Только странно как-то    Дык, ход игрока неприкасаем, а остальное струкитурировано по fixed_param(которые для combat_p_proc ).  вот они(timer_event) "структурированно" и работают.
                 | 
             
                    
                     Отправлено: 0:06 - 28 Фев., 2006  
                 | 
               | 
         
    
    
    
        
            
            
                    
                    
                    Keha
                     Пользователь    Регистрация: Янв. 2006 
  Всего: 31 сообщение
                 | 
                    
                    
                              
                    
                     Тайм ивент в кобмбате работает, проверено на приведенном мной скрипте, правда работает совсем не так, как хотелось бы.  Как я понял игра начинает обрабатывать сколько тиков прошло только при нажатии перехода хода. Те тик - это именно игровое время, которое в мирной ситуации тикает непрерывно, а в бою тикает скачками(дискретно) только с нажатием перехода хода. Пока *некст турн* не нажат игровое время замирает и тики не тикают.    Было бы уже неплохо, если бы число прошедших тиков было привязано в боевке к числу истраченных экшен пойнтов. Но к сожалению трата экшен пойнтов, на тиканье тиков не влияет, а только *некст турн*.  Скорее всего каждый *некст турн* дискретно накидывает к игровому времени определенное число тиков. Чему равно это число в принципе можно попытаться выяснить экспериментально.    А из за того что время в тиках меняется дискретно, например если оно меняется с *некст турном* скачком на 10 тиков, то соответственно несколько тайм ивентовых событий из моего скрипта остаются в пролете, и срабатывает только одно из них на каждый турн.     Тайм ивент нормально сработает в боевке с часовым механизмом бомб, или каких то аналогичных бомбам ситуаций. Но вот для той задумки, которую я хотел реализовать он не пригоден.
                 | 
             
                    
                     Отправлено: 15:18 - 28 Фев., 2006  
                 | 
               | 
         
    
    
    
        
            
            
                    
                    
                    Keha
                     Пользователь    Регистрация: Янв. 2006 
  Всего: 31 сообщение
                 | 
                    
                    
                              
                    
                     Метод извлечения составных частей из полей прототипа объекта.   Возможно кому-то понадобится. Если же данный метод не кому не нужен то пост можно удалить.    Если мы хотим получить из прототипа объекта данные какого то определенного поля, то сталкиваемся с тем что proto_data возвращает эти данные в виде числа десятичного формата. А в описании формата файлов прототипов (Формат PRO-файлов Fallout2), поля представлены в виде чисел шестнадцатеричного формата. Причем одним полем - одним шестнадцатеричным числом зашифрованы сразу несколько данных(флагов).    Вот способ как из полученного с помощью proto_data десятичного числа  получить все эти шестнадцатеричные данные(флаги) по отдельности:    dec:= proto_data(int pid, int data_member)    flag1:=dec-(dec/16)*16; // последний знак шестнадцатеричного dec  flag2:=dec/16-((dec/16)/16)*16;  // предпоследний знак шестнадцатеричного dec  flag3:=(dec/16)/16-(((dec/16)/16)/16)*16; //третий с конца знак   flag4:=((dec/16)/16)/16-((((dec/16)/16)/16)/16)*16; //четвертый с конца знак  итд по мат индукции.    (Данные формулы работают корректно благодаря тому что в скриптах ssl операция / (деления) является целочисленной)    Например мы имеем pid копья, и хотим получить из 7го поля про-файла копья, два флага типов атаки(см Формат PRO-файлов Fallout2):    dec:= proto_data(pid копья, 7)     flag1:=dec-(dec/16)*16; // Primary Attack Type   flag2:=dec/16-((dec/16)/16)*16; // Secondary Attack Type     В итоге flag1 станет равным 4ке, что, если сверится с хелпом Формат PRO-файлов, соответствует атаке thrust (колоть); flag2 станет равным 5ке соответствующей атаке throw(метание).    Пример куска скрипта, на котором можно проверить работоспособность метода (вставлять в obj_dude_ssl):  -----------------------------------------------------------------------  procedure Check_wip;  procedure Check_wipon;  procedure dec_to_hex;     variable wip;    // процедура critter_p_proc в obj_dude_ssl уже существует, вам останется вставить в нее  //строку call Check_wipon;       procedure critter_p_proc begin      call Check_wipon;     end    procedure Check_wipon begin // проверка на изменение экипировки активной руки  variable wip1;  wip1:=wip;  call Check_wip;       if not(wip == wip1) then begin                       display_msg("you ekipirovalis "+proto_data(obj_pid(wip),1));          call dec_to_hex;      end    end    procedure Check_wip begin // запоминание указателя на предмет в активной руке    wip:=critter_inven_obj(self_obj,1);      if wip == 0 then begin         wip:=critter_inven_obj(self_obj,2);       end    end    procedure dec_to_hex begin         variable dec;      variable at1;      variable at2;        dec:=proto_data(obj_pid(wip),7);            at1:=dec-(dec/16)*16; // использование метода для флага первого типа атаки      at2:=dec/16-((dec/16)/16)*16; //для флага второго типа атаки         if at1 == 0 then begin      display_msg("attack type1  =  none");      end else if at1 == 1 then begin      display_msg("attack type1  =  punch");      end else if at1 == 2 then begin      display_msg("attack type1  =  kick leg");      end else if at1 == 3 then begin      display_msg("attack type1  =  swing");      end else if at1 == 4 then begin      display_msg("attack type1  =  thrust");      end else if at1 == 5 then begin      display_msg("attack type1  =  throw ");      end else if at1 == 6 then begin      display_msg("attack type1  = fire single");      end else if at1 == 7 then begin      display_msg("attack type1  =  fire burst");      end else if at1 == 8 then begin      display_msg("attack type1  =  fire continuous");      end        if at2 == 0 then begin      display_msg("attack type2  =  none");      end else if at2 == 1 then begin      display_msg("attack type2  =  punch");      end else if at2 == 2 then begin      display_msg("attack type2  =  kick leg");      end else if at2 == 3 then begin      display_msg("attack type2  =  swing");      end else if at2 == 4 then begin      display_msg("attack type2  =  thrust");      end else if at2 == 5 then begin      display_msg("attack type2  =  throw ");      end else if at2 == 6 then begin      display_msg("attack type2  = fire single");      end else if at2 == 7 then begin      display_msg("attack type2  =  fire burst");      end else if at2 == 8 then begin      display_msg("attack type2  =  fire continuous");      end    end  -----------------------------------------------------------------------  Приведенный кусок скрипта в мирном режиме через critter_p_proc и вызываемую из нее Check_wipon постоянно проверяют активную руку на предмет изменения экипировки.( те либо на смену предмета в активной руке, либо на смену самой активной руки). В случае изменения экипировки активной руки приведенный кусок скрипта выводит три сообщения:      *вы экипировались +(название предмета)  *attack type1  = (тип первой атаки экипированного предмета)    *attack type2  = (тип второй атаки экипированного предмета)      Могу разъяснить подробней как получаются формулы для flag1, flag2, flag3,... ,  и все что будет непонятно.
                 | 
             
                    
                     Отправлено: 11:23 - 2 Марта, 2006 | ИСПРАВЛЕНО: Keha - 11:48 - 2 Марта, 2006
 
                 | 
               | 
         
    
    
    
        |     |  
         
     |