Azazellz Опубликовано 1 января, 2020 Опубликовано 1 января, 2020 01.01.2020 13:41:11, mantik903 сказал(-а):Опять же, функция без ивента работать не хочет. Впихнуть строку проблемы нет, и проперти задать тоже, но нужен блин ивент. Фрагменты срабатывают без ивента в самом скрипте - они запускаются через начало\окончание диалога, смотря куда скрипт впишешь. 01.01.2020 13:41:11, mantik903 сказал(-а):Причем скрипт скомпилировался, все нормально. Но нпс все равно не портуется. Аттач-Детач очень странно работают на самом деле. Если тебе надо, чтоб НПС вместе с игроком телепортировался - ну так тем же скриптом его и телепортируй, в чем проблема? 01.01.2020 13:41:11, mantik903 сказал(-а):Как заставить forcegreet адекватно работать? АИ-пакеты используй.
mantik903 Опубликовано 2 января, 2020 Опубликовано 2 января, 2020 01.01.2020 23:19:35, Azazellz сказал(-а):Если тебе надо, чтоб НПС вместе с игроком телепортировался - ну так тем же скриптом его и телепортируй, в чем проблема? Попробовал по аналогии, но все равно не хочет. Для игрока у меня прописано ObjectReference Property aaaHTFT2Player Auto Game.GetPlayer().MoveTo(aaaHTFT2Player) Для нпс ObjectReference Property aaaHTFT2Groom Auto Actor aaaHappyTogetherGroom aaaHappyTogetherGroom.MoveTo(aaaHTFT2Groom) И нпс телепортироваться все равно упорно отказывается.
Azazellz Опубликовано 2 января, 2020 Опубликовано 2 января, 2020 02.01.2020 12:45:48, mantik903 сказал(-а): Попробовал по аналогии, но все равно не хочет. Для игрока у меня прописано ObjectReference Property aaaHTFT2Player Auto Game.GetPlayer().MoveTo(aaaHTFT2Player) Для нпс ObjectReference Property aaaHTFT2Groom Auto Actor aaaHappyTogetherGroom aaaHappyTogetherGroom.MoveTo(aaaHTFT2Groom) И нпс телепортироваться все равно упорно отказывается. НПСа тоже через проперти задать попробуй, либо как Actor, либо как ObjectReference. Не помню уже, как там правильно это делается в таких случаях. Давно скрипты не писал, забыл все =)
mantik903 Опубликовано 3 января, 2020 Опубликовано 3 января, 2020 02.01.2020 15:04:53, Azazellz сказал(-а): НПСа тоже через проперти задать попробуй, либо как Actor, либо как ObjectReference. Не помню уже, как там правильно это делается в таких случаях. Давно скрипты не писал, забыл все =)Через Через актера не сработало, а вот через объект - вполне (умом папирус не понять). Спасибо большое)
Leadaire Опубликовано 12 января, 2020 Опубликовано 12 января, 2020 (изменено) Ребят, как называется предметы типа Парагон из dlc Dawnguard в creation kit? Хочу сделать мод на квест с маркерами на них. Ни в одном разделе не нашел, даже поиск в All ничего не выдает. Искал по слову Paragon и их типу. Изменено 12 января, 2020 пользователем Leadaire
Azazellz Опубликовано 13 января, 2020 Опубликовано 13 января, 2020 12.01.2020 21:59:16, Leadaire сказал(-а): Ребят, как называется предметы типа Парагон из dlc Dawnguard в creation kit? Хочу сделать мод на квест с маркерами на них. Ни в одном разделе не нашел, даже поиск в All ничего не выдает. Искал по слову Paragon и их типу. MiscItems, кейворды драгоценных камней.
Leadaire Опубликовано 13 января, 2020 Опубликовано 13 января, 2020 13.01.2020 06:58:08, Azazellz сказал(-а): MiscItems, кейворды драгоценных камней. Спасиб. Эм, а как сделать маркер на предмет? Я думал, что знал как, но что-то нифига не пошло)
Azazellz Опубликовано 13 января, 2020 Опубликовано 13 января, 2020 13.01.2020 09:50:50, Leadaire сказал(-а): Спасиб. Эм, а как сделать маркер на предмет? Я думал, что знал как, но что-то нифига не пошло) Через квест. Ну и всегда можно посмотреть, как это сделано у других, или в самой игре. Мод на маркеры к камням Барензии, например.
CISCO.:i:..:i:. Опубликовано 31 января, 2020 Опубликовано 31 января, 2020 (изменено) Всем Доброго дня! У меня вопрос - который мучает меня три дня! Вопрос по чёрным книгам в апокрифе. Я их изменил - добавил анимации и все в работает на привью. Но как мне заставить их открываться как в игре - что бы одна анимация сменяла другую - пробовал писать свой скрипт - где пошагово расписал анимации но анимация "TextureLoops" не проигрывается постоянно как в оригинале а останавливается - так как ей на смену приходит анимация "Stage2" - как мне прописать постоянный проигрыш анимации TextureLoops с момента её активации? Мой Скриптbool property isInPullPosition = True Auto ObjectReference Property Object_BlackBook Auto EVENT onActivate (objectReference triggerRef) If (isInPullPosition) Object_BlackBook.PlayGamebryoAnimation("Stage1") utility.wait (3.5) Object_BlackBook.PlayGamebryoAnimation("TextureLoops") Object_BlackBook.PlayGamebryoAnimation("Stage2") utility.wait (7.17) Object_BlackBook.PlayGamebryoAnimation("Stage3") isInPullPosition = False else Object_BlackBook.PlayGamebryoAnimation("Stage4") utility.wait (3.5) isInPullPosition = True endIf endEVENT И ваще как работает родной скрипт заставляющий проигрывать анимацию открытия книги я не понял - есть два скрипта: Активатор активации книгиscriptName DLC2ApocryphaBookActivator extends ObjectReference {Script for the activators associated with Black Books. Just forwards the activation to the book for handling.} ;-- Properties -------------------------------------- ;-- Variables --------------------------------------- ;-- Functions --------------------------------------- ; Skipped compiler generated GotoState ; Skipped compiler generated GetState function OnActivate(ObjectReference akActivator) self.GetLinkedRef(none).Activate(akActivator, false) endFunction function OnInit() self.SetNoFavorAllowed(true) endFunction и скрипт вложенный в саму книгуscriptName DLC2ApocryphaBookRewardCScript extends DLC2ApocryphaBookRewardScript {Script for Black Book Reward Set C: Dragonborn Legends.} ;-- Properties -------------------------------------- message property DLC2ApocryphaBookReward_C3_Prompt auto message property DLC2ApocryphaBookReward_C1_Removed auto spell property DLC2BlackBookDragonbornFlameSpell auto message property DLC2ApocryphaBookReward_C3_Removed auto spell property DLC2BlackBookDragonbornFrostSpell auto globalvariable property DLC2BlackBookReward3 auto message property DLC2ApocryphaBookReward_C2_Prompt auto message property DLC2ApocryphaBookReward_C1_Prompt auto message property DLC2ApocryphaBookReward_C2_Removed auto spell property DLC2BlackBookDragonbornForceSpell auto ;-- Variables --------------------------------------- ;-- Functions --------------------------------------- ; Skipped compiler generated GetState ; Skipped compiler generated GotoState function OnInit() AbilityGlobal = DLC2BlackBookReward3 AbilityPrompt01 = DLC2ApocryphaBookReward_C1_Prompt AbilityRemoved01 = DLC2ApocryphaBookReward_C1_Removed Spell01A = DLC2BlackBookDragonbornForceSpell AbilityPrompt02 = DLC2ApocryphaBookReward_C2_Prompt AbilityRemoved02 = DLC2ApocryphaBookReward_C2_Removed Spell02A = DLC2BlackBookDragonbornFlameSpell AbilityPrompt03 = DLC2ApocryphaBookReward_C3_Prompt AbilityRemoved03 = DLC2ApocryphaBookReward_C3_Removed Spell03A = DLC2BlackBookDragonbornFrostSpell endFunction Где в этих скриптах строчки про открытие книги? и почему вложенный в книгу скрипт не компелируется даже в своём изначальном состояниии а вот к примеру скрипт на ативаторе компилируется на отлично даже после внесения правок в него. Изменено 31 января, 2020 пользователем CISCO.:i:..:i:.
Azazellz Опубликовано 31 января, 2020 Опубликовано 31 января, 2020 31.01.2020 06:29:34, CISCO.:i:..:i:. сказал(-а):есть два скрипта: Которые отношения к анимациям не имеют ровно никакого. Копай дальше - в маркеры или в квесты. Судя по первому скрипту, там все устроено так: активируется не сама книга, а маркер поверх, он запускает анимацию, и активирует саму книжку (она открывается и читается). Или наоборот. Ты активируешь книжку, а она уже скриптом линкуется с активатором, он активируется и запускает анимацию.
CISCO.:i:..:i:. Опубликовано 31 января, 2020 Опубликовано 31 января, 2020 31.01.2020 06:38:47, Azazellz сказал(-а): Которые отношения к анимациям не имеют ровно никакого. Копай дальше - в маркеры или в квесты. Судя по первому скрипту, там все устроено так: активируется не сама книга, а маркер поверх, он запускает анимацию, и активирует саму книжку (она открывается и читается). Или наоборот. Ты активируешь книжку, а она уже скриптом линкуется с активатором, он активируется и запускает анимацию. В общем нужно квесты ковырять и искать там скрипт запуска анимации? я смотрел в шести местах где расположены эти книги и везде только книга и активатор этой книги - больше ничего. или я опять туплю?
CISCO.:i:..:i:. Опубликовано 31 января, 2020 Опубликовано 31 января, 2020 31.01.2020 06:38:47, Azazellz сказал(-а):Копай дальше - в маркеры или в квесты. Спасибо за наводку нашел в квесте через другой квест - вот ведь запихали!
CISCO.:i:..:i:. Опубликовано 31 января, 2020 Опубликовано 31 января, 2020 31.01.2020 07:12:30, CISCO.:i:..:i:. сказал(-а): Спасибо за наводку нашел в квесте через другой квест - вот ведь запихали! Блин что я нашел - это ваще по моему другое - посмотрите кому не влом - я тут ничего про механику открытия чёртовой книжки не нашел скриптscriptName DLC2BookDungeonControllerScript extends Quest conditional ;-- Properties -------------------------------------- Bool property bHMIntroScenePlayed = false auto conditional keyword property DLC2ApocryphaBookLink auto imagespacemodifier property FadeToBlackImod auto imagespacemodifier property FadeToBlackBackImod auto imagespacemodifier property DLC2ApocryphaBookExitMQ02 auto imagespacemodifier property DLC2ApocryphaRewardBookExit auto sound property OBJApocryphaBookTentaclesTamriel auto location property DLC2SolstheimLocation auto spell property DLC2abApoWaterDamage auto referencealias[] property BlackBookFinalAliases auto {matching array of "final" aliases (without name replacement)} imagespacemodifier property DLC2ApocryphaBookExit auto imagespacemodifier property DLC2ApocryphaRewardBookEnter auto sound property AMBBlackBookShakeMarker auto message property DLC2BookFailureSolstheimMSG auto Int property iBlackBookFinishedForAchievement = 5 auto objectreference property HermaeusMoraFX auto keyword property DLC2LinkBlackBookSound auto objectreference property HermaeusMoraTA auto Bool property bPlayerBleedingOut auto conditional {set to true while the player is in the process of being moved home} referencealias property PlayerAlias auto book[] property BlackBooks auto {array of book base objects (matching index to alias arrays)} location property DLC2ApocryphaLocation auto scene property DLC2BookReadScene auto objectreference property DungeonMarker auto {marker in dungeon to move player to - passed by book script} referencealias property BookFollowerAlias auto referencealias property Follower auto scene property DLC2BookDungeonHMIntroScene auto dlc2hermaeusmorafacefxscript[] property HermaeusMoraIntroFX auto {array of the HM effect refs, matching the book dungeon location array} worldspace property DLC2ApocryphaWorld auto location property DLC2Book01DungeonLocation auto {Miraak's temple - don't play HM intro here} objectreference property TamrielMarker auto {moveto marker in Tamriel} message property DLC2BookFailureGenericMSG auto location[] property BookDungeonLocations auto {array of book dungeon locations, used to index the HermaeusMoraIntroFX array} message property DLC2BookFailureCombatMSG auto armor property DLC2ApocryphaBookWarpArmor auto {black book reading item} location property DungeonLocation auto {passed in from book} referencealias[] property BlackBookAliases auto {list of starting black book aliases (name replacement)} imagespacemodifier property FadeToBlackHoldImod auto idle property IdleDLC2TentacleWarpBook auto {player animation for reading inventory book} imagespacemodifier property DLC2ApocryphaBookEnter auto {imagespace to play during book to Apocrypha transition} ;-- Variables --------------------------------------- Bool bMQ02SceneStarted = false Int iBlackBookFinishedCount ;-- Functions --------------------------------------- function Book01DungeonHMIntro() if bHMIntroScenePlayed return endIf bHMIntroScenePlayed = true HermaeusMoraTA.MoveTo(game.GetPlayer() as objectreference, 0.000000, 0.000000, 0.000000, true) HermaeusMoraIntroFX[0].ChangeState(true) utility.wait(1.00000) HermaeusMoraTA.Enable(false) DLC2BookDungeonHMIntroScene.Start() while DLC2BookDungeonHMIntroScene.IsPlaying() utility.wait(1.00000) if game.GetPlayer().IsInLocation(DLC2ApocryphaLocation) == false DLC2BookDungeonHMIntroScene.Stop() endIf endWhile HermaeusMoraIntroFX[0].ChangeState(false) HermaeusMoraTA.Disable(false) endFunction Bool function ReadBook(dlc2blackbookscript pDataBook, dlc2blackbookscript pRealBook) debug.trace(self as String + " ReadBook: " + pDataBook as String, 0) actor player = game.GetPlayer() Bool bWaitForUnequip = (player.GetEquippedItemType(0) > 0 || player.GetEquippedItemType(1) > 0) && player.IsWeaponDrawn() utility.waitMenuMode(1.50000) if pDataBook.bPlayerHasRead if !self.IsReadingAllowed(true) debug.trace(self as String + "ReadBook - not allowed to read - just play effects", 0) game.DisablePlayerControls(false, false, false, false, false, true, false, false, 0) utility.wait(0.500000) game.ShakeCamera(none, 0.500000, 1.50000) AMBBlackBookShakeMarker.Play(player as objectreference) game.EnablePlayerControls(false, false, false, false, false, true, false, false, 0) return false endIf endIf debug.trace(self as String + "ReadBook - reading allowed", 0) pDataBook.bPlayerHasRead = true if pDataBook.GetBaseObject() as book debug.trace(pDataBook as String + " is a Book", 0) if player.GetItemCount(pDataBook.GetBaseObject()) == 0 if pRealBook debug.trace("ReadBook - adding " + pRealBook as String + " to inventory", 0) self.TakeBook(pDataBook) pDataBook.GetLinkedRef(DLC2LinkBlackBookSound).Disable(false) player.AddItem(pRealBook as form, 1, false) endIf endIf endIf game.DisablePlayerControls(true, true, true, pDataBook.DisableLooking, true, true, true, true, 0) if bWaitForUnequip utility.wait(2.00000) endIf Bool bMoveToApocrypha = false if PlayerAlias.GetActorRef() as Bool && (player.IsInLocation(DLC2ApocryphaLocation) || player.GetWorldspace() == DLC2ApocryphaWorld) debug.trace(self as String + "ReadBook - in Apocrypha, move player home", 0) self.MovePlayerHome(false) elseIf player.IsInLocation(DLC2SolstheimLocation) debug.trace(self as String + "ReadBook - in Tamriel, move player to Apocrypha", 0) bMoveToApocrypha = true self.MovePlayerToDungeon(pDataBook.DungeonMarker, pDataBook.DungeonLocation) else debug.trace(self as String + "ReadBook - ERROR - we don't know where you are - do nothing", 0) endIf if pDataBook.ReenableControls debug.trace("ReadBook - reenabling controls", 0) game.EnablePlayerControls(true, true, true, pDataBook.DisableLooking, true, true, true, true, 0) else debug.trace("ReadBook - NOT reenabling controls - reenable flag on " + pDataBook as String + " is false", 0) endIf if pDataBook.ReenableControls game.RequestAutoSave() endIf if bMoveToApocrypha self.CheckForHMIntro() endIf if pDataBook.myQuest pDataBook.myQuest.setStage(pDataBook.myQuestStage) endIf return true endFunction ; Skipped compiler generated GotoState function MovePlayerToDungeon(objectreference newDungeonMarker, location newDungeonLocation) debug.trace(self as String + "MovePlayerToDungeon: to " + newDungeonMarker as String, 0) actor player = game.GetPlayer() if player.IsDead() return endIf TamrielMarker.MoveTo(player as objectreference, 0.000000, 0.000000, 0.000000, true) DungeonMarker = newDungeonMarker DungeonLocation = newDungeonLocation PlayerAlias.ForceRefTo(player as objectreference) if Follower.GetRef() BookFollowerAlias.ForceRefTo(Follower.GetRef()) DLC2BookReadScene.Start() endIf game.ForceThirdPerson() player.equipItem(DLC2ApocryphaBookWarpArmor as form, false, true) player.PlayIdle(IdleDLC2TentacleWarpBook) DLC2ApocryphaBookEnter.Apply(1.00000) OBJApocryphaBookTentaclesTamriel.Play(player as objectreference) utility.wait(5.00000) DLC2ApocryphaBookEnter.PopTo(FadeToBlackHoldImod, 1.00000) player.removeItem(DLC2ApocryphaBookWarpArmor as form, 1, true, none) player.MoveTo(DungeonMarker, 0.000000, 0.000000, 0.000000, true) if newDungeonLocation == DLC2Book01DungeonLocation && !bMQ02SceneStarted debug.trace(self as String + " special case for MQ02 scene - start MQ02 fadeup", 0) bMQ02SceneStarted = true FadeToBlackHoldImod.PopTo(DLC2ApocryphaBookExitMQ02, 1.00000) else FadeToBlackHoldImod.PopTo(DLC2ApocryphaBookExit, 1.00000) endIf FadeToBlackHoldImod.Remove() utility.wait(2 as Float) game.GetPlayer().AddSpell(DLC2abApoWaterDamage, false) endFunction function TakeBook(dlc2blackbookscript pDataBook) book myBase = pDataBook.GetBaseObject() as book debug.trace(self as String + "TakeBook: base book=" + myBase as String, 0) Int myIndex = BlackBooks.find(myBase, 0) debug.trace(self as String + "TakeBook: index=" + myIndex as String, 0) if BlackBookAliases[myIndex].GetRef() BlackBookFinalAliases[myIndex].ForceRefTo(BlackBookAliases[myIndex].GetRef()) BlackBookAliases[myIndex].Clear() endIf endFunction Bool function IsControlsEnabled() debug.trace(self as String + "IsFastTravelControlsEnabled: fast travel = " + game.IsFastTravelControlsEnabled() as String, 0) return game.IsFightingControlsEnabled() && game.IsActivateControlsEnabled() && game.IsLookingControlsEnabled() && game.IsMenuControlsEnabled() && game.IsMovementControlsEnabled() && game.IsSneakingControlsEnabled() && (game.IsFastTravelControlsEnabled() || game.GetPlayer().IsInLocation(DLC2SolstheimLocation)) endFunction function IncrementBookFinished() iBlackBookFinishedCount += 1 if iBlackBookFinishedCount >= iBlackBookFinishedForAchievement game.AddAchievement(71) endIf endFunction ; Skipped compiler generated GetState function CheckForHMIntro() if bHMIntroScenePlayed as Bool || DungeonLocation == DLC2Book01DungeonLocation return endIf bHMIntroScenePlayed = true Int iLocationIndex = BookDungeonLocations.find(DungeonLocation, 0) if iLocationIndex < 1 endIf HermaeusMoraTA.MoveTo(game.GetPlayer() as objectreference, 0.000000, 0.000000, 0.000000, true) HermaeusMoraIntroFX[iLocationIndex].ChangeState(true) utility.wait(1.00000) HermaeusMoraTA.Enable(false) DLC2BookDungeonHMIntroScene.Start() while DLC2BookDungeonHMIntroScene.IsPlaying() utility.wait(1.00000) if game.GetPlayer().IsInLocation(DLC2ApocryphaLocation) == false DLC2BookDungeonHMIntroScene.Stop() endIf endWhile HermaeusMoraIntroFX[iLocationIndex].ChangeState(false) HermaeusMoraTA.Disable(false) endFunction function ReadApocryphaBook(DLC2ApocryphaBookScript pApocryphaBook, Bool bRequireQuestStageToMove, Bool bRequireRewardsShownToMove, Bool bRewardsShown, Bool bShowRewardsOnActivation) debug.trace(self as String + " DLC2BlackBookRewardScript=" + pApocryphaBook as String + ", bRequireQuestStageToMove=" + bRequireQuestStageToMove as String + ", bRequireRewardsShownToMove=" + bRequireRewardsShownToMove as String + ", bRewardsShown=" + bRewardsShown as String + ", bShowRewardsOnActivation=" + bShowRewardsOnActivation as String, 0) Bool isMovingAllowed = (!bRequireQuestStageToMove || bRequireQuestStageToMove && pApocryphaBook.myQuest.GetStageDone(pApocryphaBook.myQuestStage)) && (!bRequireRewardsShownToMove || bRewardsShown) if pApocryphaBook.myQuest pApocryphaBook.myQuest.setStage(pApocryphaBook.myQuestStage) endIf debug.trace(self as String + " pApocryphaBook.GetLinkedRef(DLC2ApocryphaBookLink)=" + pApocryphaBook.GetLinkedRef(DLC2ApocryphaBookLink) as String, 0) debug.trace(self as String + " pApocryphaBook.GetLinkedRef(DLC2ApocryphaBookLink) as DLC2BlackBookScript=" + (pApocryphaBook.GetLinkedRef(DLC2ApocryphaBookLink) as dlc2blackbookscript) as String, 0) dlc2blackbookscript myBook = pApocryphaBook.GetLinkedRef(DLC2ApocryphaBookLink) as dlc2blackbookscript debug.trace(self as String + " myBook=" + myBook as String, 0) if myBook if isMovingAllowed self.ReadBook(myBook, none) endIf else debug.TraceAndBox(self as String + " WARNING - BAD DATA - missing link to matching Tamriel book", 0) endIf if bShowRewardsOnActivation && !bRewardsShown if pApocryphaBook as dlc2apocryphabookrewardscript (pApocryphaBook as dlc2apocryphabookrewardscript).ShowRewards() else (pApocryphaBook as dlc2miraakaltarscript).ShowRewards() endIf endIf endFunction function PlayerInBleedout() bPlayerBleedingOut = true debug.trace(self as String + " PlayerInBleedout: CurrentLocation=" + game.GetPlayer().GetCurrentLocation() as String + " DungeonLocation=" + DungeonLocation as String, 0) debug.trace(self as String + " PlayerInBleedout: is current location child of DungeonLocation? " + DungeonLocation.IsChild(game.GetPlayer().GetCurrentLocation()) as String, 0) debug.trace(self as String + " PlayerAlias=" + PlayerAlias.GetRef() as String, 0) actor player = game.GetPlayer() if player.IsInLocation(DungeonLocation) || player.GetWorldspace() == DLC2ApocryphaWorld game.DisablePlayerControls(true, true, true, false, true, true, true, true, 0) debug.trace(self as String + " PlayerAlias=" + PlayerAlias.GetRef() as String, 0) utility.wait(2.00000) DLC2ApocryphaRewardBookEnter.Apply(1.00000) utility.wait(1.50000) DLC2ApocryphaRewardBookEnter.PopTo(FadeToBlackHoldImod, 1.00000) self.MovePlayerHome(true) else PlayerAlias.Clear() endIf game.EnablePlayerControls(true, true, true, false, true, true, true, true, 0) bPlayerBleedingOut = false endFunction function SetReenableControls(dlc2blackbookscript pBook, Bool bReenableControlsFlag) (pBook.myReference as dlc2blackbookscript).ReenableControls = bReenableControlsFlag endFunction function MovePlayerHome(Bool bHealPlayer) debug.trace(self as String + "MovePlayerHome START: bHealPlayer=" + bHealPlayer as String, 0) actor player = game.GetPlayer() player.GetActorBase().SetInvulnerable(true) player.RemoveSpell(DLC2abApoWaterDamage) if !bHealPlayer DLC2ApocryphaRewardBookEnter.Apply(1.00000) utility.wait(1.50000) DLC2ApocryphaRewardBookEnter.PopTo(FadeToBlackHoldImod, 1.00000) endIf if bHealPlayer player.RestoreActorValue("Health", 9999 as Float) debug.trace(self as String + "MovePlayerHome: healed player - current health= " + player.getActorValue("Health") as String, 0) endIf spell leftSpell = player.GetEquippedSpell(0) spell rightSpell = player.GetEquippedSpell(1) debug.trace(self as String + " spells equipped: left hand=" + leftSpell as String + ", right hand=" + rightSpell as String, 0) player.MoveTo(TamrielMarker, 0.000000, 0.000000, 0.000000, true) FadeToBlackHoldImod.PopTo(DLC2ApocryphaRewardBookExit, 1.00000) FadeToBlackHoldImod.Remove() if player.getActorValue("Health") < 0 as Float player.RestoreActorValue("Health", 9999 as Float) debug.trace(self as String + "MovePlayerHome: healed player - current health= " + player.getActorValue("Health") as String, 0) endIf PlayerAlias.Clear() player.GetActorBase().SetInvulnerable(false) utility.wait(3.00000) Int ileftHand = player.GetEquippedItemType(0) Int iRightHand = player.GetEquippedItemType(1) debug.trace(self as String + " item type equipped: left hand=" + ileftHand as String + ", right hand=" + iRightHand as String, 0) if ileftHand == 8 player.UnequipItem(player.GetEquippedWeapon(true) as form, false, true) elseIf ileftHand == 0 player.SetAnimationVariableInt("iLeftHandType", 0) endIf if iRightHand == 8 player.UnequipItem(player.GetEquippedWeapon(false) as form, false, true) elseIf iRightHand == 0 player.SetAnimationVariableInt("iRightHandType", 0) endIf endFunction Bool function IsReadingAllowed(Bool bDisplayMessages) actor player = game.GetPlayer() Bool bAllowReading = false if player.GetSitState() != 0 debug.trace(self as String + " sitting", 0) if bDisplayMessages DLC2BookFailureGenericMSG.Show(0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000) endIf elseIf !player.IsInLocation(DLC2SolstheimLocation) && !player.IsInLocation(DLC2ApocryphaLocation) debug.trace(self as String + " Not in Solstheim or Apocrypha", 0) if bDisplayMessages DLC2BookFailureSolstheimMSG.Show(0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000) endIf elseIf !self.IsControlsEnabled() debug.trace(self as String + " controls are disabled", 0) if bDisplayMessages DLC2BookFailureGenericMSG.Show(0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000) endIf elseIf player.IsInCombat() debug.trace(self as String + " player is in combat", 0) if bDisplayMessages DLC2BookFailureCombatMSG.Show(0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000) endIf else bAllowReading = true endIf return bAllowReading endFunction
Azazellz Опубликовано 31 января, 2020 Опубликовано 31 января, 2020 31.01.2020 07:12:30, CISCO.:i:..:i:. сказал(-а):нашел в квесте через другой квест - вот ведь запихали! Не то ты нашел. Ты маркеры смотри. Они при использовании запускать анимации умеют. Как, по твоему, НПСы к стеночкам прислоняются, или молятся? Думаешь, скриптами? А они на самом деле просто маркеры используют.
CISCO.:i:..:i:. Опубликовано 2 февраля, 2020 Опубликовано 2 февраля, 2020 (изменено) 31.01.2020 13:05:49, Azazellz сказал(-а): Не то ты нашел. Ты маркеры смотри. Они при использовании запускать анимации умеют. Как, по твоему, НПСы к стеночкам прислоняются, или молятся? Думаешь, скриптами? А они на самом деле просто маркеры используют. Мы говорим с тобой о разных вещах - ты скорее всего описываешь процесс открытия черной книги при котором - из книги появляются щупальца и затягивают тебя в Апокриф. А я же имею ввиду механизм открытия книги - которая находится в Апокрифе - большая такая на пьедестале - так вот когда ты нажимаешь открыть книгу и появляется сам механизм открытия - а конкретно открытие книги - струи зелёного пламени и три поднимающихся шара - которые в последствии оказываются перками на выбор. Я нигде не нашел скрипт который это делает - тоесть запускает анимацию данного процесса и пытаюсь писать свой - но там столько тонкостей - шелест книги при открытии - шум зелёного пламени и взмывающих вверх шаров. Должен же быть ска скрипт который прописывает это от а до я. Почему когда я прописываю всё это как Object_BlackBook.PlayGamebryoAnimation("Stage1") и так далее - то получается похоже но далеко от оригинала! Object_BlackBook.PlayGamebryoAnimation("Stage1") просто открывает книгу без звука и визуальных эффектов плавающих рун Object_BlackBook.PlayAnimationAndWait("Stage1", "Open") открывает книгу со звуком и все руны на книге вертятся - а дальше ступор так и зависает в этом положении если после команды Object_BlackBook.PlayAnimationAndWait("Stage1", "Open") следующей строкой прописать Object_BlackBook.PlayAnimationAndWait("Stage2", "Done") то уже появляются зелёное плямя и шарики но потом ваще ничего не пашет что бы я не писал в скрипте. Какие ещё есть команды помимо PlayGamebryoAnimation и PlayAnimationAndWait - они мне не совсем подходят. И если не трудно посмотрите - относится ли этот скрипт к моим поискам СкриптscriptName DLC2ApocryphaBookRewardScript extends DLC2ApocryphaBookScript {Base script for the 'Reward Books' at the end of most Apocrypha dungeons. Extended by the scripts for the specific books (see RewardAScript, RewardBScript, etc.).} ;-- Properties -------------------------------------- spell property Spell01A auto hidden Bool property showRewardsOnActivation = true auto {Default: TRUE. If TRUE, the next activation of the book will show the book's rewards (if they aren't visible already).} spell property Spell01B auto hidden perk property Perk03C auto hidden perk property Perk01A auto hidden spell property Spell02C auto hidden actor property Player auto hidden objectreference property RewardActivator01 auto hidden spell property Spell02A auto hidden spell property Spell01C auto hidden objectreference property RewardActivator03 auto hidden keyword property LinkCustom01 auto spell property Spell03C auto hidden perk property Perk01B auto hidden spell property Spell02B auto hidden message property AbilityPrompt02 auto hidden message property AbilityRemoved02 auto hidden perk property Perk01C auto hidden Bool property rewardsShown = false auto hidden {Default: FALSER. If TRUE, the book's rewards are already visible.} message property AbilityRemoved03 auto hidden message property AbilityPrompt01 auto hidden message property AbilityRemoved01 auto hidden objectreference property RewardActivator02 auto hidden globalvariable property AbilityGlobal auto hidden perk property Perk03B auto hidden spell property Spell03B auto hidden spell property DLC2ApocryphaRewardSpell auto perk property Perk02A auto hidden perk property Perk02C auto hidden keyword property LinkCustom02 auto spell property Spell03A auto hidden keyword property LinkCustom03 auto message property AbilityPrompt03 auto hidden perk property Perk02B auto hidden perk property Perk03A auto hidden Bool property requireRewardsShownToMove = true auto {Default: TRUE. If TRUE, the book won't move you back to Tamriel until it's presented the Apocrypha rewards.} ;-- Variables --------------------------------------- Bool hasOpenedBook = false Int lastActiveAbility = 0 ;-- Functions --------------------------------------- function SetPower(objectreference rewardActivator) if lastActiveAbility == 1 if Spell01A != none Player.RemoveSpell(Spell01A) endIf if Spell01B != none Player.RemoveSpell(Spell01B) endIf if Spell01C != none Player.RemoveSpell(Spell01C) endIf if Perk01A != none Player.RemovePerk(Perk01A) endIf if Perk01B != none Player.RemovePerk(Perk01B) endIf if Perk01C != none Player.RemovePerk(Perk01C) endIf if AbilityRemoved01 != none AbilityRemoved01.Show(0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000) endIf elseIf lastActiveAbility == 2 if Spell02A != none Player.RemoveSpell(Spell02A) endIf if Spell02B != none Player.RemoveSpell(Spell02B) endIf if Spell02C != none Player.RemoveSpell(Spell02C) endIf if Perk02A != none Player.RemovePerk(Perk02A) endIf if Perk02B != none Player.RemovePerk(Perk02B) endIf if Perk02C != none Player.RemovePerk(Perk02C) endIf if AbilityRemoved02 != none AbilityRemoved02.Show(0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000) endIf elseIf lastActiveAbility == 3 if Spell03A != none Player.RemoveSpell(Spell03A) endIf if Spell03B != none Player.RemoveSpell(Spell03B) endIf if Spell03C != none Player.RemoveSpell(Spell03C) endIf if Perk03A != none Player.RemovePerk(Perk03A) endIf if Perk03B != none Player.RemovePerk(Perk03B) endIf if Perk03C != none Player.RemovePerk(Perk03C) endIf if AbilityRemoved03 != none AbilityRemoved03.Show(0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000) endIf endIf lastActiveAbility = 0 if rewardActivator == RewardActivator01 if Spell01A != none Player.AddSpell(Spell01A, true) endIf if Spell01B != none Player.AddSpell(Spell01B, true) endIf if Spell01C != none Player.AddSpell(Spell01C, true) endIf if Perk01A != none Player.AddPerk(Perk01A) endIf if Perk01B != none Player.AddPerk(Perk01B) endIf if Perk01C != none Player.AddPerk(Perk01C) endIf lastActiveAbility = 1 AbilityGlobal.SetValue(1 as Float) DLC2ApocryphaRewardSpell.Cast(Player as objectreference, none) elseIf rewardActivator == RewardActivator02 if Spell02A != none Player.AddSpell(Spell02A, true) endIf if Spell02B != none Player.AddSpell(Spell02B, true) endIf if Spell02C != none Player.AddSpell(Spell02C, true) endIf if Perk02A != none Player.AddPerk(Perk02A) endIf if Perk02B != none Player.AddPerk(Perk02B) endIf if Perk02C != none Player.AddPerk(Perk02C) endIf lastActiveAbility = 2 AbilityGlobal.SetValue(2 as Float) DLC2ApocryphaRewardSpell.Cast(Player as objectreference, none) elseIf rewardActivator == RewardActivator03 if Spell03A != none Player.AddSpell(Spell03A, true) endIf if Spell03B != none Player.AddSpell(Spell03B, true) endIf if Spell03C != none Player.AddSpell(Spell03C, true) endIf if Perk03A != none Player.AddPerk(Perk03A) endIf if Perk03B != none Player.AddPerk(Perk03B) endIf if Perk03C != none Player.AddPerk(Perk03C) endIf lastActiveAbility = 3 AbilityGlobal.SetValue(3 as Float) DLC2ApocryphaRewardSpell.Cast(Player as objectreference, none) endIf endFunction ; Skipped compiler generated GotoState ; Skipped compiler generated GetState function ShowPowerPrompt(objectreference rewardActivator) Int selection = -1 if rewardActivator == RewardActivator01 selection = AbilityPrompt01.Show(0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000) elseIf rewardActivator == RewardActivator02 selection = AbilityPrompt02.Show(0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000) elseIf rewardActivator == RewardActivator03 selection = AbilityPrompt03.Show(0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000) endIf if selection == -1 elseIf selection == 0 self.SetPower(rewardActivator) self.EnableToSolstheimActivator() endIf endFunction function OnCellAttach() parent.OnCellLoad() RewardActivator01 = self.GetLinkedRef(LinkCustom01) RewardActivator02 = self.GetLinkedRef(LinkCustom02) RewardActivator03 = self.GetLinkedRef(LinkCustom03) (RewardActivator01 as dlc2apocryphabookrewardactivator).SetController(self as objectreference) (RewardActivator02 as dlc2apocryphabookrewardactivator).SetController(self as objectreference) (RewardActivator03 as dlc2apocryphabookrewardactivator).SetController(self as objectreference) Player = game.GetPlayer() endFunction function ShowRewards() self.OpenBook() self.DisableBothActivators() self.PlayAnimationAndWait("Stage2", "Done") RewardActivator01.Enable(false) RewardActivator02.Enable(false) RewardActivator03.Enable(false) rewardsShown = true endFunction function OpenBook() if !hasOpenedBook hasOpenedBook = true self.DisableBothActivators() self.PlayAnimationAndWait("Stage1", "Open") endIf endFunction ;-- State ------------------------------------------- state Busy function OnActivate(objectreference akActivator) ; Empty function endFunction endState ;-- State ------------------------------------------- auto state Waiting function OnActivate(objectreference akActivator) if akActivator == game.GetPlayer() as objectreference self.GotoState("Busy") (DLC2BookDungeonController as dlc2bookdungeoncontrollerscript).ReadApocryphaBook(self as DLC2ApocryphaBookScript, requireQuestStageToMove, requireRewardsShownToMove, rewardsShown, showRewardsOnActivation) self.GotoState("Waiting") endIf endFunction endState Изменено 2 февраля, 2020 пользователем CISCO.:i:..:i:.
Azazellz Опубликовано 2 февраля, 2020 Опубликовано 2 февраля, 2020 02.02.2020 08:12:29, CISCO.:i:..:i:. сказал(-а): А я же имею ввиду механизм открытия книги - которая находится в Апокрифе - большая такая на пьедестале - так вот когда ты нажимаешь открыть книгу и появляется сам механизм открытия - а конкретно открытие книги - струи зелёного пламени и три поднимающихся шара - которые в последствии оказываются перками на выбор. А. Так вот ты про какую книгу говоришь. Тут - да, все сложнее. Я даже и хз, как это в скриптах может быть закодировано.
CISCO.:i:..:i:. Опубликовано 2 февраля, 2020 Опубликовано 2 февраля, 2020 подскажите правильную команду отменяющею PlayAnimationAndWait("Stage2", "Done") - почему после PlayAnimationAndWait - перестают работать идущие следом строки скрипта - но без неё (PlayAnimationAndWait) анимация проигрывается не полностью - мне просто нужна команда отменяющая действие PlayAnimationAndWait
Azazellz Опубликовано 2 февраля, 2020 Опубликовано 2 февраля, 2020 02.02.2020 11:52:08, CISCO.:i:..:i:. сказал(-а): подскажите правильную команду отменяющею PlayAnimationAndWait("Stage2", "Done") - почему после PlayAnimationAndWait - перестают работать идущие следом строки скрипта - но без неё (PlayAnimationAndWait) анимация проигрывается не полностью - мне просто нужна команда отменяющая действие PlayAnimationAndWait https://www.creationkit.com/index.php?title=PlayAnimationAndWait_(Papyrus) Там ж все написано. Игра ждет ивента, который у тебя прописан вторым параметром ("Done"), и только после этого скрипт продолжит работу. Если ивента нет - скрипт "повиснет". Откуда он получается - уже дело другое. В самой анимации закодирован, скорее всего. Альтернатива - использовать просто PlayAnimation и следом задать время ожидания, соответствующее длительности анимации, через команду wait. Но это может работать нестабильно.
CISCO.:i:..:i:. Опубликовано 2 февраля, 2020 Опубликовано 2 февраля, 2020 (изменено) 02.02.2020 12:32:32, Azazellz сказал(-а): https://www.creationkit.com/index.php?title=PlayAnimationAndWait_(Papyrus) Там ж все написано. Игра ждет ивента, который у тебя прописан вторым параметром ("Done"), и только после этого скрипт продолжит работу. Если ивента нет - скрипт "повиснет". Откуда он получается - уже дело другое. В самой анимации закодирован, скорее всего. Альтернатива - использовать просто PlayAnimation и следом задать время ожидания, соответствующее длительности анимации, через команду wait. Но это может работать нестабильно. Спасибо Многое проясняет - В самой анимации действительно есть подобные строки. Может выпилить в самой анимации Done? Есть несколько значений Stage1, Stage2, Stage3, Stage10,000000 start 0.666666 SoundPlay.QSTBlackBookOpen 3.500000 Open 3.500011 end Stage20.000000 start 0.000011 SoundPlay.QSTBlackBookMagicA 2.633335 SoundPlay.QSTBlackBookMagicBLPM 6.333336 Done 7.166668 Stage3 7.166679 end Stage30.000000 start 4.000000 end и внимание вопрос чего же ждёт Done в Stage2? - может запуска Stage3 - ведь это у него в планах согласно графику - но хрен там! даже после Stage3 - у которого кстати из условий start и end - в чём тут тогда мышка порылась? чего ждёт этот Done если вся анимация уже выполнена - книга раскрыта - все анимации светятся. Мне нужно что бы книга раскрывалась бесчисленное количество раз а не один - как в оригинале. На что заменить этот Done в самой анимации - я же туда чё хошь могу написать но не знаю чего. Изменено 2 февраля, 2020 пользователем CISCO.:i:..:i:.
CISCO.:i:..:i:. Опубликовано 2 февраля, 2020 Опубликовано 2 февраля, 2020 И ещё такой момент - получается что с помощью команды flip я могу разворачивать анимацию - а не прописывать её часами в NifSkope.
Azazellz Опубликовано 2 февраля, 2020 Опубликовано 2 февраля, 2020 02.02.2020 13:05:13, CISCO.:i:..:i:. сказал(-а):чего ждёт этот Done если вся анимация уже выполнена - книга раскрыта - все анимации светятся. Это не Done ждет, это его ждут. Скрипт ждет, пока ему анимация ивент не отправит, чтоб продолжить работать. Можешь в скрипт другую стадию прописать, или свою стадию в анимашку добавить и уже ее ждать - как тебе угодно. 02.02.2020 13:31:11, CISCO.:i:..:i:. сказал(-а): И ещё такой момент - получается что с помощью команды flip я могу разворачивать анимацию - а не прописывать её часами в NifSkope. Чего не знаю - того не знаю. Не силен в анимациях.
CISCO.:i:..:i:. Опубликовано 2 февраля, 2020 Опубликовано 2 февраля, 2020 02.02.2020 13:55:21, Azazellz сказал(-а): Это не Done ждет, это его ждут. Скрипт ждет, пока ему анимация ивент не отправит, чтоб продолжить работать. Можешь в скрипт другую стадию прописать, или свою стадию в анимашку добавить и уже ее ждать - как тебе угодно. Чего не знаю - того не знаю. Не силен в анимациях. Я запутался(( Как я понял PlayAnimationAndWait - заставляет проигрывать всю анимацию указанную в скобках и только потом переходит к следующей анимации - но вот к примеру когда все анимации проиграны - запустить из заново с самого начала не возможно. Я так понимаю нужно в самой модельке ковыряться - или же есть какая команда - заставляющая обнулить счетчик анимации.
Azazellz Опубликовано 2 февраля, 2020 Опубликовано 2 февраля, 2020 02.02.2020 16:54:01, CISCO.:i:..:i:. сказал(-а):Я запутался(( Как я понял PlayAnimationAndWait - заставляет проигрывать всю анимацию указанную в скобках и только потом переходит к следующей анимации - но вот к примеру когда все анимации проиграны - запустить из заново с самого начала не возможно. Я так понимаю нужно в самой модельке ковыряться - или же есть какая команда - заставляющая обнулить счетчик анимации. Нет. Неправильно ты понял. PlayAnimationAndWait проигрывает анимацию (первый аргумент в функции) и ждет, пока от анимации поступит команда-ивент (второй аргумент - то, чего ждут). И только после этого скрипт может продолжить свою работу. Если команды-ивента не поступает - скрипт зависает и дальше не работает. Т.е. все, что ты в него дальше напишешь - не исполняется.
CISCO.:i:..:i:. Опубликовано 2 февраля, 2020 Опубликовано 2 февраля, 2020 02.02.2020 17:09:53, Azazellz сказал(-а): Нет. Неправильно ты понял. PlayAnimationAndWait проигрывает анимацию (первый аргумент в функции) и ждет, пока от анимации поступит команда-ивент (второй аргумент - то, чего ждут). И только после этого скрипт может продолжить свою работу. Если команды-ивента не поступает - скрипт зависает и дальше не работает. Т.е. все, что ты в него дальше напишешь - не исполняется. PlayAnimationAndWait (первый аргумент в функции) (второй аргумент - то, чего ждут). получается что в PlayAnimationAndWait("Stage1", "Open") первый аргумент - Stage1, второй аргумент это Open. а в PlayAnimationAndWait("Stage2", "Done") первый аргумент - Stage2, второй аргумент - получается Done? и я пошел прострелю себе мозги - так как более ли менее годный скрипт выглядит вот так тыкbool property isInPullPosition = True Auto ObjectReference Property Object_ApocryphaBook01 Auto EVENT onActivate (objectReference triggerRef) If (isInPullPosition) Object_ApocryphaBook01.PlayAnimationAndWait("Stage1", "Open") Object_ApocryphaBook01.PlayAnimationAndWait("Stage2", "Done") Object_ApocryphaBook01.PlayAnimationAndWait("Stage3", "End") isInPullPosition = False else Object_ApocryphaBook01.PlayGamebryoAnimation("Stage4", "Close") isInPullPosition = True endIf endEVENT И он работает от начала и до конца - книжка открывается - выходят пламя и шары - если нажать ещё раз на активатор книжка закроется - всё как я и хотел но это одноразовая фигня - при последующих нажатиях работает только закрытие книги - потому что оно прописано через PlayGamebryoAnimation
CISCO.:i:..:i:. Опубликовано 2 февраля, 2020 Опубликовано 2 февраля, 2020 Извините что заколебал - просто три дня убил на это - и это ещё не считая создания анимации закрывания книги в NifSkope - а это то ещё геморрой. Я понимаю что черная книга была рассчитана на одну активацию открытия - и после этого на протяжении всей игры так и лежала открытой в Апокрифе - потому что у нее в природе не было анимации закрытия - которую я и написал - и она работает отлично - я даже звуковой файл сделал для закрытия и прописал его в сомом Nif файле - но работать это всё вместе отказывается.
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать аккаунт
Зарегистрируйте новый аккаунт в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти