Перейти к содержанию

Отсчет дней


TJ

Рекомендуемые сообщения

Когда мы делаем квест, порой бывает так, что некое событие должно произойти через какой-то промежуток времени, причем независимо от действий игрока... Для того чтобы отсчитать некое количество дней до события можно использовать любую из двух глобальных переменных. Первая, используемая Морровиндом называется 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

Изменено пользователем TJ
Ссылка на комментарий
Поделиться на другие сайты

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...