Суббота, 04 Мая 2024, 1:56:50 PM | приветствую! Гость |
|
Решил выкладывать сюда свои скрипты которые смастерил , в результате тестов и проб , а также глюки способы реализаций прихотливых функций Морровинда.
1) "Прихоти" функций и команд один из самых первых глюков , которые мне попались , был глюк с функцией StreamMusic , когда она вызывалась на актерах , то при создании условия if ( MenuMode == 1 ) Return endif т.е. в режима меню (инвентарь и т.п. ) она должна выключатся , но здесь она действовала наоборот .Когда я разочарованный в скрипте полез в меню выключать игру , то услышал музыку. второе - проверка на сэйдан ( SayDone ) , это функция возвращает ( устанавливает ) истину ( единицу ) если актер ничего не говорит. Мне приходилось изголятся и добавлять дополнительные переменные в скрипте для контроля потому что он не хотел работать .Например когда я делал несколько песен подряд , то она застревала на одной ,или на тестовой , меньше 5 секунд таймера ожидания. Пример : begin _Test_sound float timer ; локальные переменные (только для данного объекта ) .Если указать глобальную переменную здесь , то появится одноименная локальная , и она будет исполнятся short var short var2 if ( MenuMode==1 ) return endif if ( OnActivate == 1 ) ; проверка на активацию , т.е. когда наведешь и нажмешь "Е" или пробел. Ну или какая кнопка назначена на использование. return endif ;блок 1 if ( var2 == 0 ) ; условие проверяет вар 2 , если равно нулю , то продолжает выполнять данный блок if ( GetDistance player < 5200 ) ;Здесь он проверяет на расстояние до игрока if ( saydone == 1 ) ; Сэйдан , для проверки if ( timer == 0 ); ну понятно , таймер set var to 1; устанавливает контрольные переменные , вар контролирует последовательность хода выполнения, вар2 контролирует начало и конец скрипта set var2 to 1 say "Vo\q\bagney3.mp3" "vvv" endif endif endif endif ;конец 1 блока ;комментарии , оставленные после знака ";" (точка с запятой) считываться и проверятся ни игрой , ни компилятором , не будут if ( var == 1 ) set timer to timer + getsecondspassed ; функция GetSecondsPassed означает что в переменную типа float значение секунд за каждый фрейм , а фреймов может быть 240 по умолчанию , но значение не ;складывается , а переписывается . endif if ( timer >= 5 ) ; здесь я поставил таймер для паузы между песнями , ну здесь , ясен пень , он длится 5 секунд if ( var == 1 ) set var to 2 endif endif if ( var == 2 ) if ( saydone == 1 ) ; проверка на сэйдан и контрольную пременную , если успешна , то произносит речь. set timer to 0 set var to 3 say "Vo\q\bagney1.mp3" "v3vv" ; команда сэй означает произнести актером, точнее сказать , в буквальном смысле. endif endif if ( var == 3 ) set timer to timer + getsecondspassed endif if ( timer >= 5 ) if ( var == 3 ) set var to 4 endif endif if ( var == 4 ) if ( saydone == 1 ) set timer to 0 set var to 5 say "Vo\q\bagney2.mp3" "fdf" ;в первых кавычках указан путь , папка Vo\ означает что здесь хранятся голоса , файлы должны быть в формате mp3 , моно ,44 кГц частота дискредитации . endif endif if ( var == 5 ) set timer to timer + getsecondspassed endif if ( timer >= 5 ) if ( var == 5 ) set var to 6 endif endif if ( var == 6 ) if ( saydone == 1 ) set timer to 0 set var2 to 0 say "Vo\q\DrunkGuyRambling.mp3" "fdgyhgf" во вторых кавычках указан текст речи , типа "Мы следим за тобой , ничтожество" endif endif end |
|
Copyright DAn#1 © 2024 | Бесплатный хостинг uCoz |