Скрипты - неотъемлемая часть GECK. При написании возникает очень много казусов. Данная тема должна помочь не наступать на "грабли" новичкам и делиться опытом с другими более продвинутых мододелов.
Изменение репутации для пользователя ITU
ITUOffline
Сообщение №751
написано: 9 июля 2012, 05:20
| Отредактировано: ITU - 9 июля 2012, 05:21
Spalny_Vagon, ITU, Привет! Спасибо за скрипты. Получается, что лечится будет любое оружие взятое игроком и выделить одно не получится стандартными (без расширителя) средствами. А нельзя сделать, из двух блоков OnEquip и OnEquip - с какой нибудь переменной, "взят" Если в блоке OnEquip "взят" то в блоке OnUnequip - лечится. (Наверное полный бред!)
Цитата ITU
Попробуй у ремотника смотреть состояние...
Точно надо посмотреть, вдруг там значение будет большим! Попробую. Пока.
Мы вышли из дома, когда во всех... Поздно вышли!
Изменение репутации для пользователя Artem13
Artem13Offline
Сообщение №753
написано: 9 июля 2012, 10:46
| Отредактировано: Artem13 - 9 июля 2012, 10:50
Получается, что лечится будет любое оружие взятое игроком и выделить одно не получится стандартными (без расширителя) средствами.
Немного не так. Если код авторемонта находится не в секции (блоке) GameMode или MenuMode, а в тех блоках, что работают, что называется, на активацию (например OnFire, как советовали выше), то если скрипт "авторемонта" повешен на конкретный ствол, то лечиться будет только этот ствол.
Если скрипт будет глобальным (квестовым), то возможны варианты - если авторемонт нужен для пары-тройки стволов, можно использовать функцию GetEquipped
Code
if (player.GetEquipped Weapon1) || (player.GetEquipped Weapon2) //код авторемонта endif
Если стволов много тоже можно проверять, но код будет громоздким.
<a class="link" href="http://nick-name.ru/sertificates/278209/" rel="nofollow" target="_blank"> border="0" alt=""/</a> Да, мы бандиты и бродяги, как злословит молва, Мы попадаем в передряги, помня эти слова. Смотри вперед и не сдавайся ты на милость судьбе! Предай их всех, останься верен себе. (Канцлер Ги - Кантри Бреган Д'Эрт)
Мне интересно, что будет с игрой, если таких квестов будет крутится сотня- другая?
Мне тоже. Думаю, это в разы больше того количества квестовых гейммодов, какое есть в игре изначально. Но мне кажется, что такого издевательства можно избежать, по крайней мере, облегчить ношу. В скрипте в обоих блоках if проверяются те же условия, кроме одного, причём в порядке уменьшения вероятности того, что условие будет истинным. Не знаю, правда, в каком там порядке игра будет их проверять, но лучше сделать так:
Code
scn ZZModQuestReppairScript
Short WeapHealth
Begin GameMode if iskeypressed 36; если это, конечно, не клавиша движения, которая нажата почти всегда if player.isweaponout == 1; if (player.getitemcount ZZModAssaultrifle > 0) set WeapHealth to player.GetWeaponHealthPerc player.AddItemHealthPercent ZZModAsaultRifleReppair 1 WeapHealth player.EquipItem ZZModAsaultRifleReppair 0 1 player.removeitem ZZModAssaultrifle 1 endif if (player.getitemcount ZZModAsaultRifleReppair > 0) set WeapHealth to player.GetWeaponHealthPerc player.AddItemHealthPercent ZZModAssaultrifle 1 WeapHealth player.EquipItem ZZModAssaultrifle 0 1 player.removeitem ZZModAsaultRifleReppair 1 endif endif endif End
Далее. Если во многих из этих сотен скриптов проверяются одни и те же условия (что неизбежно, так как клавиш можно задействовать гораздо меньше двухсот), то можно скомпоновать их по этому признаку, опять же, в каждом проверяя условия по очереди, то есть отбрасывая уже на ранних этапах большие куски, не подходящие под наиболее общие условия. Думаю, таким образом можно избежать полной остановки игры и превратить её в интересное слайд-шоу. Ещё. Я так понял, что один квест приходится на одну пару оружий, так? Тогда почему бы не запускать только один единственный из этих квестов в блоке OnEquip на оружии?
Code
Begin OnEquip if GetQuestRunning [пушкин квест]==0 StartQuest [пушкин квест] endif End Begin OnUnequip StopQuest [пушкин квест] End
А в квестовый скрипт вставить проверку на экипированность соответствующего оружия и остановку квеста если блок UnEquip не сработал по каким-то причинам или ошибочно сработал OnEquip. Типа такого:
Code
scn ZZModQuestReppairScript
Short WeapHealth
Begin GameMode if player.GetEquipped [пушка]==0 StopQuest [пушкин квест] elseif iskeypressed 36; если это, конечно, не клавиша движения, которая нажата почти всегда if player.isweaponout == 1; if (player.getitemcount ZZModAssaultrifle > 0) set WeapHealth to player.GetWeaponHealthPerc player.AddItemHealthPercent ZZModAsaultRifleReppair 1 WeapHealth player.EquipItem ZZModAsaultRifleReppair 0 1 player.removeitem ZZModAssaultrifle 1 endif if (player.getitemcount ZZModAsaultRifleReppair > 0) set WeapHealth to player.GetWeaponHealthPerc player.AddItemHealthPercent ZZModAssaultrifle 1 WeapHealth player.EquipItem ZZModAssaultrifle 0 1 player.removeitem ZZModAsaultRifleReppair 1 endif endif endif End
Народ,подскажите скрипт на доктора (лечение ран и избавление от радиации) я то прописал,что было в оригинале у Митчела,но мой НПС только деньги забирает,а эффекта 0 =)
Народ,подскажите скрипт на доктора (лечение ран и избавление от радиации) я то прописал,что было в оригинале у Митчела,но мой НПС только деньги забирает,а эффекта 0 =)
В Вегасе доктора "работают точно также, как и в Фоле. DoctorTemplateSCRIPT - стандартный докторский скрипт.
====================== Мод "Нью-Йорк" на русском: 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
Изменение репутации для пользователя tundruck73
tundruck73Offline
Сообщение №760
написано: 28 июля 2012, 11:12
| Отредактировано: tundruck73 - 28 июля 2012, 11:15
ReaperYura, для докторов есть квест Vdoctors, лично я бы на твоем месте добавил этого твоего непися туда (написав ему, соответственно, свои реплики - можно скопировать, к примеру, реплики Ады Штраус, там условия подходящие). Ну, и повесить на непися скрипт - scn DoctorTemplateSCRIPT.
ReaperYura, для докторов есть квест Vdoctors, лично я бы на твоем месте добавил этого твоего непися туда (написав ему, соответственно, свои реплики - можно скопировать, к примеру, реплики Ады Штраус, там условия подходящие). Ну, и повесить на непися скрипт - scn DoctorTemplateSCRIPT.
Да-да,спасибо.Тоже вот только нашел =)
Добавлено (28.07.2012, 16:45) --------------------------------------------- Кстать,не подскажите,что нужно делать,чтобы при излечении у доктора, затухал экран как в оригинале игры?
Изменение репутации для пользователя tundruck73
tundruck73Offline
Сообщение №762
написано: 28 июля 2012, 12:51
| Отредактировано: tundruck73 - 28 июля 2012, 12:52
Как активировать анимацию из фурнитуры (стульев, дивана, кровати) при активации активатора? При этом желательно выбрать место где будет проигрываться анимация (координаты места бы поставить там, где мне нужно). То есть гг должен проиграть анимацию без запрета на управление, и в том месте где мне нужно (на объекте), но это место (объект) может каждый раз менятся, так как объект тоже будет перемещаться\двигаться. Я пробовал через PlayIdle, почему то не сработало. Поставил анимацию на Actor Effect, и добавлял игроку как спелл эффект, но тоже не сработало. На еффекте скрипт вида:
Code
Begin ScriptEffectUpdate player.PlayIdle SitAnim ;моя анимация SitAnim называется по другому, но этоже для примера End
Какие предложение вы можете мне предложить о том, как проделать нужные мне действия?
Команда "Rizys-mod" - разработка плагинов на Fallout.
Изменение репутации для пользователя Vi[RUS]
Vi[RUS]Offline
Сообщение №765
написано: 10 августа 2012, 00:13
| Отредактировано: Vi[RUS] - 10 августа 2012, 11:48
Я пробовал через PlayIdle, почему то не сработало. Поставил анимацию на Actor Effect, и добавлял игроку как спелл эффект, но тоже не сработало. На еффекте скрипт вида: Begin ScriptEffectUpdate player.PlayIdle SitAnim ;моя анимация SitAnim называется по другому, но этоже для примера End
Ну, это вряд ли будет работать, в этом блоке Вы постоянно даете команду проигрывать анимацию, а ее достаточно дать только один раз.
====================== Мод "Нью-Йорк" на русском: 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, а почему же тогда не работает этот "раз"? Раньше я так делал в другом своем моде и работало, но плагин был на Fallout3. В чем здесь разница я понять не могу.
Команда "Rizys-mod" - разработка плагинов на Fallout.
Spalny_Vagon, я создавал новую анимационную группу, я даже пробовал стандартную использовать... Брал ту анимацию которую использовал в Fallout3. И что самое интересное, все тоже самое делал в Фоле3 и работало, но здесь нет...
Добавлено (10.08.2012, 12:45) --------------------------------------------- Spalny_Vagon, почитал на форуме бетезды, почему то функция PlayIdle не у кого не работает. Что же делать...
Команда "Rizys-mod" - разработка плагинов на Fallout.
То есть гг должен проиграть анимацию без запрета на управление
А при использовании аи пакета, управление уходит в запрет, я уже пробовал сделать так "FurnitureRef.Activate player 1" но по неизвестным причинам в моем варианте скрипта не сработало.
Команда "Rizys-mod" - разработка плагинов на Fallout.
Spalny_Vagon, да нет некакого секрета, нужно просто задейчтвовать анимацию "сесть", "сидеть (dynamicchair)", и "встать". Единственные условие. осталось уже одно - это использовать эти анимации на гг без блокировки управления. Итак я нашел способ, вот скрипт:
Code
ref actor ref BeRiddenActorRef
short dunce short ModAnimationType short ShouldDismount
Begin OnActivate set dunce to 1 End
Begin GameMode if dunce == 1 set actor to player set BeRiddenActorRef to player if (iscontrolpressed 5) || (isKeyPressed 14) || player.getdead || ShouldDismount if BeRiddenActorRef.isActor BeRiddenActorRef.dispel aaaMoveModBrahminWastelandActorEffect BeRiddenActorRef.playidle reset endif actor.dispel aaaMoveModBrahminWastelandActorEffect actor.playidle reset
if shoulddismount else actor.CIOS aaaMoveModBrahminWastelandActorEffectFixAnim endif endif
if actor==player && IsPC1stPerson elseif ( ModAnimationType != aaaMoveCrModQuest.SitAnimationType || (actor.IsAnimPlaying SpecialIdle) ==0 || (actor.isspelltarget aaaMoveModBrahminWastelandActorEffect) ==0 ) set ModAnimationType to aaaMoveCrModQuest.SitAnimationType actor.CastImmediateOnSelf aaaMoveModBrahminWastelandActorEffect
if actor == Player && BeRiddenActorRef.isActor BeRiddenActorRef.CastImmediateOnSelf aaaMoveModBrahminWastelandActorEffect endif endif endif End
Но естественно вопрос о анимации с фурнитуры остался. Но хоть какой то выход уже есть.
И такой вопрос, как сделать что бы гг мог поворачиваться только на 90 градусов вправо и влево? Естественно дисабле контроль присутствует. Не имеет значения функции ли НВСЕ или стандартные, мне важен ответ.
И такой вопрос, как сделать что бы гг мог поворачиваться только на 90 градусов вправо и влево? Естественно дисабле контроль присутствует. Не имеет значения функции ли НВСЕ или стандартные, мне важен ответ.
Вроде бы нашёл ответ, нужно сделать блок NiStringPalette, и в нем указать кости только до туповища.
Команда "Rizys-mod" - разработка плагинов на Fallout.
Изменение репутации для пользователя ITU
ITUOffline
Сообщение №774
написано: 18 августа 2012, 11:28
| Отредактировано: ITU - 18 августа 2012, 11:59
уже неделю мучаюсь Есть непись с отключенным АИ, манекен У него есть activate ref на маркере, с теме же кординатами что и у непися на неписе вот такой скрип (часть)
Code
ref MoveToPos
float iPosZ; float iPosX; float iPosY;
short bDoOnce; short bResetOk;
Begin GameMode
if MoveToPos == 0 Set MoveToPos to GetLinkedRef endif
if (bDoOnce != 1) Set iPosZ to MoveToPos.GetPos Z Set iPosX to MoveToPos.GetPos X Set iPosY to MoveToPos.GetPos Y Set bDoOnce to 1 endIf
if (bResetOk == 1)
if GetPos Z != iPosZ || GetPos X != iPosX || GetPos Y != iPosY Moveto MoveToPos endif Set bResetOk to 0 endif end
begin OnActivate Set bResetOk to 1 end
вопрос почему при активации меняется визуальное положение напися, точнее меняется по кординате Z, при этом физическое остается на месте? и самое интересное это не совсеми, некоторые норм работают. одинаковые неписи, одинаковы расположены, везде навмеши. Ничего не меняешь, сохраняешь, одни неписи стоят, другие скачут, открываешь заного, ничего не меняешь, сохраняешь, уже другие стоят, а другие двигаются. что я делаю не так?
Изменение репутации для пользователя rizys-mod
rizys-modOffline
Сообщение №775
написано: 18 августа 2012, 11:48
| Отредактировано: rizys-mod - 18 августа 2012, 11:50
if Activated == 0 SetActorsAI 1 AddScriptPackage 0ITUHMannequinWeaponReadyStatic EvaluatePackage 0ITUHMannequinWeaponReadyStatic set Activated to 1 else SetActorsAI 0 endif
Set Timer to .1 ;SetGhost 1
END
Begin GameMode
if MoveToPos == 0 Set MoveToPos to GetLinkedRef endif
if (bDoOnce != 1) AddItem 0ITUMannequinAmmoList 1 Set iPosZ to MoveToPos.GetPos Z Set iPosX to MoveToPos.GetPos X Set iPosY to MoveToPos.GetPos Y Set bDoOnce to 1 endIf
if (bResetOk == 1)
if GetPos X != iPosX || GetPos Y != iPosY Moveto MoveToPos SetActorsAI 1 Set Timer to .5 endif
Set bResetOk to 0 endif
if GetInSameCell player set PlayerHasEnteredCell to 1 else if PlayerHasEnteredCell == 1
Set bResetOk to 1 set PlayerHasEnteredCell to 0 endif endif
if Timer > 0 set Timer to Timer - GetSecondsPassed Moveto MoveToPos SetActorsAI 0 endif
END
begin OnActivate
ShowMessage 0ITUHMannequinStaticMessage set Activated to 0 Set bResetOk to 1
end
Изменение репутации для пользователя rizys-mod
rizys-modOffline
Сообщение №777
написано: 18 августа 2012, 12:08
| Отредактировано: rizys-mod - 18 августа 2012, 12:09
Я решил создать разговор 2 NPC в ходе которого должны появится предметы, которые изначально выключены и после произношение очередной фразы они появились