TJ Опубликовано 12 апреля, 2009 Жалоба Поделиться Опубликовано 12 апреля, 2009 (изменено) Когда мы делаем квест, порой бывает так, что некое событие должно произойти через какой-то промежуток времени, причем независимо от действий игрока... Для того чтобы отсчитать некое количество дней до события можно использовать любую из двух глобальных переменных. Первая, используемая Морровиндом называется Day - она обозначает номер дня в текущем месяце. (Пример ее использовани можно посмотреть в этой теме) Вторая была введена Трибуналом и называется DaysPassed. Она обозначает количество дней, прошедших с начала игры. Однако, преимущество глобальной переменной DaysPassed перед Day состоит в следующем. Поскольку после 1го числа месяца идет 2е, а после 30го идет 1е, Day сегодня не всегда будет точно больше или точно меньше, чем Day завтра. из-за этого проверки if ( FirstDay > Day ) или if ( FirstDay этой теме).DaysPassed упрощает задачу, потомучто завтра количество дней, прошедших с начала игры будет точно больше, чем сегодня. И вам не нужно ломать гоову над тем как точно определить количество дней между двумя событиями. 1) Скрипт из Лайтвинд. У Алесии есть бабушка-эшлендерка. По умолчанию она сидит в своей юрте в Молаг Амуре. Однако, сразу после того, как Игрок начнет квест, бабушка уйдет на охоту и вернется только спустя два с половиной есяца, а если быть точным, то через 80 дней, при дополнительном условии, что Игрок завершит квест: begin aa_LW_GrandmaScript short once Short FirstDay Short currentDay if ( once == 0 ) if ( getjournalindex "1a_LW" >= 21 ) set FirstDay to DaysPassed set once to 1 disable endif elseif ( once == 1 ) if ( getjournalindex "1a_LW" >= 90 ) set currentDay to ( DaysPassed - FirstDay ) if ( currentDay > 80 ) set once to 2 enable endif endif endif end 2) В разговоре с Игроком НПС назначил первому встречу, причем сказал, что придти нужно "завтра, после полудня" в это же место. Когда Игрок придет и осмотрится, в журнал добавится запись либо о том, что НПС не пришел, либо о том, что НПС пришел на встречу (в зависимости от вашей ситуации). Begin aa_LW_LeavingScript Short currentDay Short FirstDay float timer short once if ( once == 0 ) if ( getjournalindex "1a_LW" == 105 ) set FirstDay to DaysPassed;запоминаем тот день, когда НПС назначил Игроку встречу set once to 1 endif elseif ( once == 1 ) set currentDay to ( DaysPassed - FirstDay ) if ( currentDay == 1 ) if ( GameHour >= 12 ) set once to 2; Игрок пришел в нужный день endif elseif ( currentDay > 1 ) set once to 3; Игрок опоздал endif elseif ( once == 2 ) set timer to ( timer + GetSecondsPassed ) if ( timer > 5 ) journal "1a_LW" 107; после этой записи Игрока можно похвалить за пунктуальность set once to 4 endif elseif ( once == 3 ) set timer to ( timer + GetSecondsPassed ) if ( timer > 5 ) journal "1a_LW" 108; после этой записи Игрока можно поругать за медлительноть (или же НПС мог не дождатся и уйти) set once to 4 endif endif end если же НПС по-любому не придет на встречу ,скрипт будет проще:Begin aa_LW_LeavingScript Short currentDay Short FirstDay float timer short once if ( once == 0 ) if ( getjournalindex "1a_LW" == 105 ) set FirstDay to DaysPassed set once to 1 endif elseif ( once == 1 ) set currentDay to ( DaysPassed - FirstDay ) if ( currentDay == 1 ) if ( GameHour >= 12 ) set once to 2 endif elseif ( currentDay > 1 ) set once to 2 endif elseif ( once == 2 ) set timer to ( timer + GetSecondsPassed ) if ( timer > 5 ) journal "1a_LW" 107; запись типа: Я на месте, а НПС нигде нет set once to 3 endif endif end Изменено 5 августа, 2009 пользователем TJ Ссылка на комментарий Поделиться на другие сайты Поделиться
Airwind Опубликовано 12 апреля, 2009 Жалоба Поделиться Опубликовано 12 апреля, 2009 и за это спасибо)) Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения