Скрипты - неотъемлемая часть GECK. При написании возникает очень много казусов. Данная тема должна помочь не наступать на "грабли" новичкам и делиться опытом с другими более продвинутых мододелов.
Изменение репутации для пользователя nortgen
nortgenOffline
Сообщение №1021
написано: 8 октября 2013, 17:15
| Отредактировано: nortgen - 8 октября 2013, 17:16
short Activated short type short button Short Pose short RePose Short EndPose short WasPossed
Float Timer REF ActorName REF MoveToPos
begin OnLoad Set Timer to .1 Set Repose to 1 SetActorsAI 0 SetGhost 1 SetPlayerTeammate 1 end
begin OnActivate
if IsActionRef Player == 1 && Activated == 0
If GetIsID EHMannequin01 == 1 showmessage EHMannequinMessageCF set type to 0 else showmessage EHMannequinMessageCM set type to 1 endif endif
end
Begin GameMode
IF GetInSameCell player
set button to getbuttonpressed
if button == 0
OpenTeammateContainer Set Pose to 2
elseif button ==1
;Change Mannequin Sex
if type == 0
Set WasPossed to 0 Disable
elseif type == 1
Set WasPossed to 0 Disable
endif
elseif button == 2 ;equip weapon Set pose to 1 AddItem EHMannequinAmmoList, 1, 1
elseif button == 3 ;unequip weapon Set pose to 2
endif
if Timer > 0 set Timer to Timer - GetSecondsPassed
elseif EndPose == 1 && GetAnimAction != 0 && GetAnimAction != 1 ; Pose, stage 2. Turn off AI to freeze it in place. RemoveScriptPackage EHMannequinWeaponReady RemoveScriptPackage EHMannequinWeaponHolster SetActorsAI 0 Set EndPose to 0 RemoveItem EHMannequinAmmoList, 1, 1 Set Activated to 0 SetActorAlpha 1
elseIf Pose == 1 SetActorAlpha 0 Set Activated to 1 SetActorsAI 1 set Timer to 4 set EndPose to 1 Set WasPossed to 1 Set Pose to 0 AddScriptPackage EHMannequinWeaponReady EvaluatePackage EHMannequinWeaponReady
elseIf Pose == 2 SetActorAlpha 0 Set Activated to 1 SetActorsAI 1 set Timer to 2 set EndPose to 1 Set WasPossed to 0 Set Pose to 0 AddScriptPackage EHMannequinWeaponHolster EvaluatePackage EHMannequinWeaponHolster
elseIf RePose == 1 && GetInSameCell Player == 1
Set MoveToPos to GetLinkedRef Moveto MoveToPos
If WasPossed == 1 Set Pose to 1 Set RePose to 0 AddItem EHMannequinAmmoList, 1, 1 else Set Pose to 2 Set RePose to 0 endif
Galko, да нет. Здесь как раз всё нормально - поскольку объектов-наследников одного базового может быть много, а скрипт единый, нужно же как то их различать. Для этого при обращении и указывается имя того самого экземпляра, на с которым ведётся работа.
Добавлено (08.10.2013, 21:26) --------------------------------------------- nortgen, манекены в мир помещены и у них прописаны имена типа EHMannequinFemale01Ref ?
<a class="link" href="http://nick-name.ru/sertificates/278209/" rel="nofollow" target="_blank"> border="0" alt=""/</a> Да, мы бандиты и бродяги, как злословит молва, Мы попадаем в передряги, помня эти слова. Смотри вперед и не сдавайся ты на милость судьбе! Предай их всех, останься верен себе. (Канцлер Ги - Кантри Бреган Д'Эрт)
Изменение репутации для пользователя nortgen
nortgenOffline
Сообщение №1024
написано: 8 октября 2013, 17:28
| Отредактировано: nortgen - 8 октября 2013, 17:30
nortgen, по представленному скрину у тебя у женского манекена нет окончания Ref Т.е. я в окне инвентаря ячейки вижу EHMannequin01REF и EHMannequinFemale01 (а не EHMannequinFemale01REF)
<a class="link" href="http://nick-name.ru/sertificates/278209/" rel="nofollow" target="_blank"> border="0" alt=""/</a> Да, мы бандиты и бродяги, как злословит молва, Мы попадаем в передряги, помня эти слова. Смотри вперед и не сдавайся ты на милость судьбе! Предай их всех, останься верен себе. (Канцлер Ги - Кантри Бреган Д'Эрт)
Galko, нет, не в этом смысле. А в смысле переменных. В скрипте идёт обращение к переменной из идентичного скрипта, но прикреплённого к другому экземпляру.
<a class="link" href="http://nick-name.ru/sertificates/278209/" rel="nofollow" target="_blank"> border="0" alt=""/</a> Да, мы бандиты и бродяги, как злословит молва, Мы попадаем в передряги, помня эти слова. Смотри вперед и не сдавайся ты на милость судьбе! Предай их всех, останься верен себе. (Канцлер Ги - Кантри Бреган Д'Эрт)
Изменение репутации для пользователя nortgen
nortgenOffline
Сообщение №1028
написано: 8 октября 2013, 17:39
| Отредактировано: nortgen - 8 октября 2013, 17:40
nortgen, всё, вижу, торможу что-то. Да, ругань идёт не на референс, а на неизвестную переменную. Странно. Ща подумаем.
<a class="link" href="http://nick-name.ru/sertificates/278209/" rel="nofollow" target="_blank"> border="0" alt=""/</a> Да, мы бандиты и бродяги, как злословит молва, Мы попадаем в передряги, помня эти слова. Смотри вперед и не сдавайся ты на милость судьбе! Предай их всех, останься верен себе. (Канцлер Ги - Кантри Бреган Д'Эрт)
nortgen, а попробуй чисто для эксперимента написать не Pose, а button. Как отреагирует редактор?
Добавлено (08.10.2013, 21:50) --------------------------------------------- Ну и еще раз уточню - скрипт на манекены повешен?
<a class="link" href="http://nick-name.ru/sertificates/278209/" rel="nofollow" target="_blank"> border="0" alt=""/</a> Да, мы бандиты и бродяги, как злословит молва, Мы попадаем в передряги, помня эти слова. Смотри вперед и не сдавайся ты на милость судьбе! Предай их всех, останься верен себе. (Канцлер Ги - Кантри Бреган Д'Эрт)
Изменение репутации для пользователя nortgen
nortgenOffline
Сообщение №1032
написано: 8 октября 2013, 17:53
| Отредактировано: KAIN48 - 8 октября 2013, 19:55
nortgen привет! Наверное лучше использовать файлообменники без рекламы, например Savepic.ru При первом переходе по ссылке на Радикал открывается реклама +18. Вряд ли кто то будет пробовать второй раз кликать то твоему скрину с вопросом, для того что бы открыть изображение. Так лучше! (KAIN48)
nortgen, блин. И не сохранится. Ну нет у объекта переменных. Нужно именно в два приёма, как писал раньше - сначала создать скрипт с объявленными переменными. Затем прикрепить его к манекенам, а потом отредактировать скрипт, добавив строки с обращением к этим переменным.
Хм. А если убрать окончание Ref и "половую" привязку? Оставить просто: Set EHMannequin01.Pose to 2
Без разницы, см. выше К тому же это, вероятно, и невозможно - базовый объект виртуален.
<a class="link" href="http://nick-name.ru/sertificates/278209/" rel="nofollow" target="_blank"> border="0" alt=""/</a> Да, мы бандиты и бродяги, как злословит молва, Мы попадаем в передряги, помня эти слова. Смотри вперед и не сдавайся ты на милость судьбе! Предай их всех, останься верен себе. (Канцлер Ги - Кантри Бреган Д'Эрт)
Изменение репутации для пользователя nortgen
nortgenOffline
Сообщение №1034
написано: 8 октября 2013, 18:02
| Отредактировано: nortgen - 8 октября 2013, 18:04
попробовал пустой скрипт вставить в манекен а потом добавить блоки прям в манекен и вроде он сохранился) осталось еще так 2 скрипта прописать спасибо вам огромное пойду мучится завтра отпишусь)
напишите кто-нить пожалуйста все по функциям, что касается износа оружия (включая функции расширителя) - определение текущего состояния, установка тек.состояния и пр.. что то не могу зайти на bethsoft.com, постоянно выкидывает ошибку: оч странно, раньше никогда такого не было. видно пора комп чистить
Что-то не кажет мне радикал картинку, но полагаю, там ровно то же самое, что бетсофтком показывает и мне - "Error 403, ваш IP замечен в рассылке спама". Хм, может тогда это не у меня, а у них что-то не так? В любом случае через анонимайзер туда нормально пускают. А ещё я как-то в предчувствии скорого конца интернета скопировал себе описания функций и блоков. Вот, а то через анонимайзер может быть не особо удобно каждый раз заходить.
short Activated short type short button Short Pose short RePose Short EndPose short WasPossed
Float Timer REF ActorName REF MoveToPos
begin OnLoad Set Timer to .1 Set Repose to 1 SetActorsAI 0 SetGhost 1 SetPlayerTeammate 1 end
begin OnActivate
if IsActionRef Player == 1 && Activated == 0
If GetIsID EHMannequin01 == 1 showmessage EHMannequinMessageCF set type to 0 else showmessage EHMannequinMessageCM set type to 1 endif endif
end
Begin GameMode
IF GetInSameCell player
set button to getbuttonpressed
if button == 0
OpenTeammateContainer Set Pose to 2
elseif button ==1
;Change Mannequin Sex
if type == 0
Set WasPossed to 0 Disable
elseif type == 1
Set WasPossed to 0 Disable
endif
elseif button == 2 ;equip weapon Set pose to 1 AddItem EHMannequinAmmoList, 1, 1
elseif button == 3 ;unequip weapon Set pose to 2
endif
if Timer > 0 set Timer to Timer - GetSecondsPassed
elseif EndPose == 1 && GetAnimAction != 0 && GetAnimAction != 1 ; Pose, stage 2. Turn off AI to freeze it in place. RemoveScriptPackage EHMannequinWeaponReady RemoveScriptPackage EHMannequinWeaponHolster SetActorsAI 0 Set EndPose to 0 RemoveItem EHMannequinAmmoList, 1, 1 Set Activated to 0 SetActorAlpha 1
elseIf Pose == 1 SetActorAlpha 0 Set Activated to 1 SetActorsAI 1 set Timer to 4 set EndPose to 1 Set WasPossed to 1 Set Pose to 0 AddScriptPackage EHMannequinWeaponReady EvaluatePackage EHMannequinWeaponReady
elseIf Pose == 2 SetActorAlpha 0 Set Activated to 1 SetActorsAI 1 set Timer to 2 set EndPose to 1 Set WasPossed to 0 Set Pose to 0 AddScriptPackage EHMannequinWeaponHolster EvaluatePackage EHMannequinWeaponHolster
elseIf RePose == 1 && GetInSameCell Player == 1
Set MoveToPos to GetLinkedRef Moveto MoveToPos
If WasPossed == 1 Set Pose to 1 Set RePose to 0 AddItem EHMannequinAmmoList, 1, 1 else Set Pose to 2 Set RePose to 0 endif
endif endif
END
сначала такой скрипт в манекена
If GetIsReference EHMannequin01REF == 1 EHMannequinFemale01REF.Enable removeallitems EHMannequinFemale01REF Set EHMannequinFemale01REF.Pose to 2
If GetIsReference EHMannequinFemale01REF == 1 EHMannequin01REF.Enable removeallitems EHMannequin01REF Set EHMannequin01REF.Pose to 2
потом такие блоки подставляем в скрипт стоящего манекена)
вот только почему то они взлетают к верху когда пере заходишь
Изменение репутации для пользователя ITU
ITUOffline
Сообщение №1038
написано: 13 октября 2013, 17:37
| Отредактировано: ITU - 13 октября 2013, 17:39
вот только почему то они взлетают к верху когда пере заходишь
знакомо) поиграйся с переменной Timer. на разных компьютерах по разному происходит, часто надо больше таймату между включением АИ (SetActorsAI, интелекта поведения непися) и выключением . Я тоже долго не мог понять почему, так как на станционарном компе все норм, а игроки жаловались, попробовал на ноуте, что послабее, словил такой же баг. Причем ловил не у всех маникенов, а у некоторых.
да фиг его знает они все равно почему то падают или летают((((((
Добавлено (15.10.2013, 22:04) --------------------------------------------- кто знает скрипт если прошел через дверь то следующий раз открыть ее можно будет только через 10-15 сек
Бред. Если ЭТО в блоке activate, то эта дверь не откроется никогда, а если в gamemode то будет хлопать сама собой без перерыва.
что за поспешные выводы!? нечего ЭТО не бред - ЭТО была лишь идея о Getsecondspassed, которой в случае чего можно воспользоваться. я специально ничего не уточнял, даже тип скрипта, потому что не знаю стоят ли на нужной двери еще какие скрипты, и вообще что это за дверь.
Изменение репутации для пользователя Spalny_Vagon
Spalny_VagonOffline
Сообщение №1045
написано: 16 октября 2013, 08:08
| Отредактировано: Spalny_Vagon - 16 октября 2013, 08:09
что за поспешные выводы!? нечего ЭТО не бред - ЭТО была лишь идея о Getsecondspassed, которой в случае чего можно воспользоваться. я специально ничего не уточнял, даже тип скрипта, потому что не знаю стоят ли на нужной двери еще какие скрипты, и вообще что это за дверь.
Господин QuazarX, если бы Вы написали: "Есть идея использовать функцию getsecondspassed", и этим ограничились, это была бы идея. Не очень оригинальная, но все же. Но то, что Вы рекомендовали человеку, который не сделал вам ничего плохого, это уже не идея, а сознательное введение в заблуждение. Ваш блок не будет работать нигде и никогда, куда его не вставь. Поэтому я сделал свой вывод, причем, вовсе не поспешный.
====================== Мод "Нью-Йорк" на русском: https://modgames.net/load/fallout3/addon/new-york-bolshoe-yabloko/34-1-0-1294 Мод "Нью-Йорк" на английском: https://modgames.net/load/fallout3/kvesty/the-big-apple/23-1-0-19771
Изменение репутации для пользователя Spalny_Vagon
Spalny_VagonOffline
Сообщение №1046
написано: 16 октября 2013, 10:48
| Отредактировано: Spalny_Vagon - 16 октября 2013, 10:49
Или что, сами с пеленок начали писать образцовые скрипты, нигде не набивали шишек, не учились на пробах и ошибках??
Конечно, мне приходилось учился и на своих ошибках тоже. Но вот чего я никогда не делал, так это не заставлял учиться на моих ошибках других людей. Я категорически не терплю некомпетентные советы и авось-рекомендации. Мой девиз - не знаешь, не пиши. А попробуй так... А попробуй этак..., а возьми и сам попробуй, убедись, что работает и после этого смело к Каину в Картотеку. Если я размещаю свой код на форуме, значит он работает стопудовожелезобетонно. Кстати, на Ваши ошибки я Вам сразу указал, могу повторить еще раз. В блоке onActivate таймеры не работают, а в блоке gamemode Ваша конструкция после 15-й секунды будет срабатывать в каждом фрейме.
====================== Мод "Нью-Йорк" на русском: https://modgames.net/load/fallout3/addon/new-york-bolshoe-yabloko/34-1-0-1294 Мод "Нью-Йорк" на английском: https://modgames.net/load/fallout3/kvesty/the-big-apple/23-1-0-19771
если в gamemode то будет хлопать сама собой без перерыва.
Тут и обсуждать нечего!
Мне вот интересно, а зачем nortgen такая дверь?! Так и так "крутил" - ничего интересного не выдумалось, кроме того, что бы не дать игроку сбежать из локации в течении 15 секунд. Что бы его там убили, за это время! Или сильно напугали, или соблазнили и женили, или напоили ......!
Мы вышли из дома, когда во всех... Поздно вышли!
Изменение репутации для пользователя Quazar
QuazarOffline
Сообщение №1048
написано: 16 октября 2013, 22:20
| Отредактировано: QuazarX - 17 октября 2013, 03:33
Да, OSFM говорит верно, но я и не предлагал готовую версию скрипта...Вообще-то я уже написал скрипт, для двери-телепорта, и ничего там не хлопает через 15 сек. и не заклинивает - лично проверял в игре на двух дверях. Причем использовал идею, что я и предлагал страницу назад.
Готовый скрипт отправил в ЛС автору вопроса, к сожалению, разместить его здесь я не могу...
огромное спасибо за скрипт. а идея очень простая я поставил манекены и если быстро перезаходишь, то манекены взлетают отсюда и идея, чтобы они не взлетали поставить таймер на дверь, чтобы сразу ее открыть было не возможно. тем самым дать скрипту манекенов отрабатывать сценарий