Закусочная У семи дорог: (OFFLINE) Уголок скриптолога - Закусочная У семи дорог

Перейти к содержимому

  • 19 Страниц +
  • 1
  • 2
  • 3
  • 4
  • 5
  • Последняя »
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

Уголок скриптолога Скрипты для TES4 CS: что, где, почем

#41 User offline   LEVIATHAN Icon

  • Бывалый
  • PipPipPip
  • Группа: Пользователи
  • Сообщений: 79
  • Регистрация: 24 Январь 08

Отправлено 28 Март 2008 - 16:56

2 M@D

Это сработало :) ! Спасибо.

Правда есть небольшой ньюанс. Если сохранился в городе в какой нибудь ячейке, при входе скрипт не срабатывал (конечно можно повесить скрипт на все двери в городе, но это не очень удобно). Я сделал по другому:

begin onLoad

if act == 0
set act to 1
else
set act to 0
endif

end

и прицепил на одну вещичку в городе, и сработало. Только, блин, чуть погромче бы.
0

#42 User offline   M@D Icon

  • Великий МАД!
  • PipPipPipPipPipPipPipPipPipPip
  • Группа: Пользователи
  • Сообщений: 1 000
  • Регистрация: 26 Ноябрь 07

Отправлено 28 Март 2008 - 17:28

Ну погромче - это звук надо править уже.
А скрипт лучше не на вещичку, а на что-нибудь неподвижное, предмет архитектуры какой-нибудь. Если ты, конечно, сделал не так :)
0

#43 User offline   w31 Icon

  • Команда Shadow's war
  • PipPip
  • Группа: Пользователи
  • Сообщений: 54
  • Регистрация: 15 Февраль 08

Отправлено 28 Март 2008 - 19:07

хм.... если эту вешь не должен трогать ГГ, то лучше использвать не часть архитектуры, а какой-нибудь не отображающийся предмет. не тот, который disable, а что-то вроде маркера звука, перенесенного в активаторы. его модель не отображается в игровом мире.
0

#44 Гость_MaZoFaKo_*

  • Группа: Гости

Отправлено 18 Апрель 2008 - 02:38

Люди, ещё такой вопрос, но, наверное, это больше к скриптоведам... Вобщем, можно ли закрыть дверь не на обычный ключ, а запаролить, то есть чтоб она открылась только после набора определённой комбинации цифр (очевидно, путём выбора этих самых цифр из системы меню, я думаю). Кому не в лом - помогите такую штуку сделать, я в долгу не останусь :sorri: :laugh: :laugh:
0

#45 User offline   w31 Icon

  • Команда Shadow's war
  • PipPip
  • Группа: Пользователи
  • Сообщений: 54
  • Регистрация: 15 Февраль 08

Отправлено 18 Апрель 2008 - 17:01

у меня мод есть - кодовые замки. могу скрипты из него скинуть.

http://www.tesnexus.com/downloads/images/thumbs/14892-1-1201089721.jpg

вот тут (теснексус)
http://www.tesnexus....le.php?id=14892
или все же чисто скрипты выложить?

Сообщение отредактировал w31: 18 Апрель 2008 - 18:20

0

#46 Гость_MaZoFaKo_*

  • Группа: Гости

Отправлено 18 Апрель 2008 - 22:47

View Postw31 (18.4.2008, 17:01) писал:

или все же чисто скрипты выложить?

Дай плиз сразу скрипт, а то я в них ноль полный. Сразу вопрос - хочу рядом с дверью навесить табличку айлейдскую, и её закодировать. Дверь закрыть наглухо, чтоб открылась только после правильного набора кода... :oops:
0

#47 User offline   LEVIATHAN Icon

  • Бывалый
  • PipPipPip
  • Группа: Пользователи
  • Сообщений: 79
  • Регистрация: 24 Январь 08

Отправлено 19 Апрель 2008 - 02:11

У меня дошло дело до создания квестов. Соответственно пошли проблемки. :oops: Дело в следующем: При включении мода нужно добавить в инвентарь игроку объект (письмо).Я почитал про создание квестов в этой теме, все вроде прозрачно, кроме результирующих скриптов. Итак первая стадия, игроку добавляется предмет ( каким образом?), далее выходит сообщение квеста
вторая стадия читаем письмо, журнал обновляется и плюс указывается направление. Какие рез. скрипты использовать на этих этапах? ;)
0

#48 User offline   Usher Icon

  • Глава проекта "Двемерское искусство"
  • PipPipPipPipPipPipPipPipPipPip
  • Группа: Пользователи
  • Сообщений: 3 820
  • Регистрация: 09 Март 08

Отправлено 19 Апрель 2008 - 05:32

Письмо добовляется:
begin gamemode
player.additem [id письма] 1
end

При чтение появляется след. стадия:
begin onactivate
setstage [id квеста] [номер стадии]
activate
end
0

#49 User offline   w31 Icon

  • Команда Shadow's war
  • PipPip
  • Группа: Пользователи
  • Сообщений: 54
  • Регистрация: 15 Февраль 08

Отправлено 20 Апрель 2008 - 09:33

View PostMaZoFaKo (18.4.2008, 22:47) писал:

Дай плиз сразу скрипт, а то я в них ноль полный. Сразу вопрос - хочу рядом с дверью навесить табличку айлейдскую, и её закодировать. Дверь закрыть наглухо, чтоб открылась только после правильного набора кода... :oops:

вот, как и обещал. правда я подумал - у нас умельцев мало что-ли? и забил на эти заморские скрипты.
вот, выкладываю свою версию.
после код набирается как на секретном чемоданчике, выбором комбинации из 4-х цифр (сейчас это 2983). после правильного набора всей комбинации при нажатии на любую кнопку меню (в т.ч. и отмена) бочка откроется.
да, все кто знает как его можно улучшить или желают просто потестить - милости просим. я его еще в своем моде использовать давно собираюсь, поэтому дело полезное.

еще вопрос: возможно ли выстроить мои кнопки в 1 ряд?

есть прикрепленный esp плагин для тестирования
он добавляет в testinghall в одном из углов такую бочку:
Прикрепленное изображение: codelock.jpg (код 2983)

Прикрепленный файл  CodeLock.zip (1,39К)
Количество загрузок:: 232

MaZoFaKo, тебе для таблички прийдется только изменить предмет активации в блоке gamemode.
а вот текст скрипта:
ScriptName 1CodeLock

short button
short success; правильный ввод
short active; проверка на работу
short key1
short key2
short key3
short key4


Begin OnActivate

if (success == 1); если код подобран - всегда откроемся
	activate
elseif (success == 0); надо подобрать код
	set active to -1
endif

end


begin gamemode


if (active == 0)
	return
elseif (active ==-1)
	if (success == 1)
		set active to 0
		activate

	elseif 	(success == 0)
		messagebox "> [%.0f] [%.0f] [%.0f] [%.0f] <", key1, key2, key3, key4 "[ <> ]" "[ <> ]" "[ <> ]" "[ <> ]" "Отмена"
		set active to 1

		if (key1 == 2 && key2 == 9 && key3 == 8 && key4 == 3); код = 2 9 8 3
			set success to 1; все верно
			set active to -1
			endif
		endif

elseif (active == 1); служебная мутотня
	set button to GetButtonPressed	
	if (button ==-1)
; скип
	elseif (button == 0)
		set key1 to key1+1
		set active to -1
		if (key1 == 10)
			set key1 to 0
		endif			
	elseif (button == 1)
		set key2 to key2+1
		set active to -1
		if (key2 == 10)
			set key2 to 0
		endif		
	elseif (button == 2)
		set key3 to key3+1
		set active to -1
		if (key3 == 10)
			set key3 to 0
		endif		
	elseif (button == 3)
		set key4 to key4+1
		set active to -1
		if (key4 == 10)
			set key4 to 0
		endif		
	elseif (button == 4)
		set active to 0
	endif
endif
	
end

Сообщение отредактировал w31: 20 Апрель 2008 - 09:45

0

#50 User offline   LEVIATHAN Icon

  • Бывалый
  • PipPipPip
  • Группа: Пользователи
  • Сообщений: 79
  • Регистрация: 24 Январь 08

Отправлено 20 Апрель 2008 - 14:11

Цитата

При чтение появляется след. стадия:
begin onactivate
setstage [id квеста] [номер стадии]
activate
end


Остается проблема. Скрипт редактор ругается. Если скрипт привязывается к объекту то выдает ошибку типс, отсутствует параметр Quest, если тип квест, то ошибку что установлен некорректный блок. Как быть?
0

#51 User offline   Usher Icon

  • Глава проекта "Двемерское искусство"
  • PipPipPipPipPipPipPipPipPipPip
  • Группа: Пользователи
  • Сообщений: 3 820
  • Регистрация: 09 Март 08

Отправлено 20 Апрель 2008 - 14:15

А ты до этого все стадии квестов прописал? Надо сначала прописать.
0

#52 User offline   w31 Icon

  • Команда Shadow's war
  • PipPip
  • Группа: Пользователи
  • Сообщений: 54
  • Регистрация: 15 Февраль 08

Отправлено 23 Апрель 2008 - 23:19

Новый скрипт с кодом для дверей. теперь в testinghall стоит дверь, которая откроется только после набора кода на специальной табличке. чтобы закрыть дверь - нажмите табличку еще раз.
да, выход по той же кнопке, что и ввод.

Прикрепленные файлы

  • Прикрепленный файл  CodeLock.zip (2,92К)
    Количество загрузок:: 236

Сообщение отредактировал w31: 23 Апрель 2008 - 23:20

0

#53 User offline   LEVIATHAN Icon

  • Бывалый
  • PipPipPip
  • Группа: Пользователи
  • Сообщений: 79
  • Регистрация: 24 Январь 08

Отправлено 26 Апрель 2008 - 09:21

Не могу понять в чем дело :shock: , похоже упущено какое то условие…
Ситуация в следующем:
Квест имеет 5 стадий.
Запуск квеста идет скриптом
scn aaMDGrivus
Begin gamemode
player.additem 0PlayerLetter 1
setstage aaaGrivus 1
end
При условии (Coditions), что игрок не в мире SE.
1 стадия – Текст сообщения « Типа откуда это письмо, надо его прочитать»
Условие стадии (Coditions) – GetStage aaaGrivus == 1

2 стадия – Игрок должен прочитать письмо в своем инвентаре, письмо под скриптом:
scn aaaLeter
Begin onActivate
setstage aaaGrivus 2
Activate
end
На этой стадии условий я не поставил, после прочтения должно добавиться сообщение и направление на НПС в таверне. Есть еще 3 стадии прописаны и последняя закончена командой стоп квест.

Проблема у меня в самом начале, при запуске игры добавляется это самое письмо, с сообщением. После нажимаем продолжить или сделать активным это задание. Окно сообщения пропадает, но письмо все равно добавляется в инвентарь бесконечное число раз, прочтение письма не дает никаких результатов. Подскажите, в чем же тут ошибка :help: ?
0

#54 User offline   Usher Icon

  • Глава проекта "Двемерское искусство"
  • PipPipPipPipPipPipPipPipPipPip
  • Группа: Пользователи
  • Сообщений: 3 820
  • Регистрация: 09 Март 08

Отправлено 26 Апрель 2008 - 10:26

Ой-ой, совсем я забыл... Попробуй такой скрипт:

scn aaMDGrivus
begin gamemode
if GetStageDone aaaGrivus == 0
setstage aaaGrivus 1
player.additem 0PlayerLetter 1
endif
end

Причём привяжи скрипт к квесту.
0

#55 User offline   M@D Icon

  • Великий МАД!
  • PipPipPipPipPipPipPipPipPipPip
  • Группа: Пользователи
  • Сообщений: 1 000
  • Регистрация: 26 Ноябрь 07

Отправлено 26 Апрель 2008 - 12:16

не, не так.
или
if GetStageDone aaaGrivus 1 == 0
или
if GetStage aaaGrivus << 1

Стадии, кстати, лучше нумеровать 5-10-15..., чтобы потом если что можно было ещё парочку вставить без проблем.

На само письмо, кстати, тоже неплохо бы поставить аналогичную проверку на стадию.
0

#56 User offline   LEVIATHAN Icon

  • Бывалый
  • PipPipPip
  • Группа: Пользователи
  • Сообщений: 79
  • Регистрация: 24 Январь 08

Отправлено 26 Апрель 2008 - 19:22

1 стадия работает, спасибо.

На 2 стадии на письмо повесил скрипт:
scn aaaLeter
Begin onActivate
if GetStageDone aaaGrivus 2 == 1
setstage aaaGrivus 2
Activate
endif
end
Но после прочтения нет сообщения и направления нет.
0

#57 Гость_MaZoFaKo_*

  • Группа: Гости

Отправлено 26 Апрель 2008 - 20:23

Люди, всем привет, я опять с расспросами: на этот раз про активаторы. Никак не могу сообразить, за счёт чего происходит привязка одного конкретного активатора (например растяжки) к одному конкретному объекту (например бревну). Можно ли сделать так, чтоб от одной растяжки срабатывали десять брёвен, чтоб от растяжки открывались двери или опускались мосты? Как они вообще срабатывают, не считая тех, которые активируются от триггеров? И ещё вопрос - в одном из фортов (Рейлес вродь) стояли две статуи, нужно было камень стрелой сбить чтоб дверь открылась - там в качестве активатора служит сам камень или вся статуя?

И последнее: можно ли на, допустим, бревно, поставить два активатора, чтоб срабатывало при одновременном воздействии на оба?
0

#58 User offline   M@D Icon

  • Великий МАД!
  • PipPipPipPipPipPipPipPipPipPip
  • Группа: Пользователи
  • Сообщений: 1 000
  • Регистрация: 26 Ноябрь 07

Отправлено 26 Апрель 2008 - 20:30

Блок onActivate зпускает скрипт при активации предмета, т.е. когда юзаешь его "на земле", грубо говоря, руками трогаешь.
Если нужно обновление при прочтении, то скрипт такой:

scn aaaLeter

Begin onEquip
if isActionRef player == 1
if GetStageDone aaaGrivus 2 != 1
setstage aaaGrivus 2
Activate
endif
endif

end

блок onEquip - действие с предметом в инвентаре.(вообще, может в этом я и не прав, серьезная ошибка была следующая)
В строке if GetStageDone aaaGrivus 2 нужно ставить НЕравно (!=) 1, или равно 0. Потому что название функции - "Пройдена ли стадия такая-то"
Cтрока if isActionRef player == 1 нужна, чтобы избежать ситуации, когда книгу взял НПС и решил её почитать, а у ГГ при этом квест обновился. Здесь, как я понял, это не нужно, но просто на будущее..
0

#59 User offline   Usher Icon

  • Глава проекта "Двемерское искусство"
  • PipPipPipPipPipPipPipPipPipPip
  • Группа: Пользователи
  • Сообщений: 3 820
  • Регистрация: 09 Март 08

Отправлено 26 Апрель 2008 - 21:00

Не, onactivate. В инвентаре тоже работает.
0

#60 User offline   M@D Icon

  • Великий МАД!
  • PipPipPipPipPipPipPipPipPipPip
  • Группа: Пользователи
  • Сообщений: 1 000
  • Регистрация: 26 Ноябрь 07

Отправлено 26 Апрель 2008 - 21:02

За счет Parent'ов, т.е. "родителей".
При двойном клике на объект во второй закладке можно выставить родителя для объекта. Для этого оба они должны быть Persistent Reference (галка внизу). Нажав кнопку Select Ref in Render Window, можно выбрать родителя сразу в окне, тут как везде.
Далее, нужно посмотреть скрипт активатора ловушки и, может быть, самой ловушки.
Например, возьмем CTrapCaveIn01Script - скрипт падающих камней в пещерах - и разберем его по косточкам

Цитата

begin onActivate

if triggered == 0
set fTrapDamage to 5
set fTrapPushBack to 300
set fLevelledDamage to 1
set fTrapMinVelocity to 150
set bTrapContinuous to 0;все выше - установка значений для ловушки - урон и т.п.
playgroup unequip 1; собственно, падение камней. такая функция применяется для всяких обвалов, короче, для врубания физики там, где это предусмотрено.
enableLinkedPathPoints; включить присоединенные (кнопкой R) Path Grid'ы - точки движения
set triggered to 1; чтобы сработало 1 раз
set timer to 6; таймер дэмэджа
setDestroyed 1; больше активировать не получится
triggerHitShader 4; "рябь" в глазах, с силой 4
endif

end
(комменты мои,ессно)
Вместо playgroup unequip часто используется ещё playgroup forward или playgroup backward - это проигрывание анимации, зависит от ситуации.
Дальше,

Цитата

;after 1 sec delay, activate parent (for daisy-chaining)
if triggered == 1 && next == 0 && timer < 5;через 1 секунду активируется Parent камней.
set next to 1; чтобы parent'а больше не тревожить
set myParent to getParentRef; получение ref'а родителя
set mySelf to getSelf; познавание себя
myParent.activate mySelf 1; активировать родителя собой.
endif
Суть в том, что камни после активации активируют своего родителя. А тот - своего. И т.д. Это называется daisy-chaining, так можно одной активацией игрока активировать хоть сотню ловушек.

Цитата

if triggered == 1 && timer <= 0
set fTrapDamage to 0
set fTrapPushBack to 0
set triggered to 2
endif
Здесь по истечению таймера прекращается дэмэдж и отталкивание игрока от объектов ловушки при касании.

Цитата

if timer > 0
set timer to timer - getSecondsPassed
endif
Таймер уменьшается, пока он больше нуля.

Цитата

begin onReset

reset3DState;возвращает модель в начальное положение
set triggered to 0;чтобы снова можно было активировать
setDestroyed 0;то же, что и выше
enableLinkedPathPoints; включить соединенную с ловушкой сетку путей. странный скрипт, сетка дважды включается, но ни разу не выключается. а скрипт-то встречается часто.. разрабы, ай-яй-яй.

end
Когда-нибудь потом, на резете, ловушка возвращается в первоначальное состояние, и в неё можно снова попасться. Так-то, на одни грабли вполне можно наступить и дважды.

Другой объект - TrigZonePlayer01:

Цитата

begin onTrigger player; начинается при вхождении игрока в триггер

if triggered == 0
set triggered to 1
set target to getParentRef
set mySelf to getSelf
target.activate mySelf 1; активируется parent
endif

end

begin onReset

set triggered to 0

end


Таким образом, второй объект активирует прописанного в свойствах Parent'а, например, первый объект.

По двум активаторам - можно, конечно. Только надо скрипт писать новый. Чтобы один активатор прибавлял единицу к переменной, и другой - тоже. И проверка на >=2.

Фух... Вопросы?
0

Поделиться темой:


  • 19 Страниц +
  • 1
  • 2
  • 3
  • 4
  • 5
  • Последняя »
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

1 человек читают эту тему
пользователей:0 гостей:1 скрытых пользователей:0