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

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

Опубликовано
01.01.2020 13:41:11, mantik903 сказал(-а):
Опять же, функция без ивента работать не хочет. Впихнуть строку проблемы нет, и проперти задать тоже, но нужен блин ивент.

Фрагменты срабатывают без ивента в самом скрипте - они запускаются через начало\окончание диалога, смотря куда скрипт впишешь.

 

01.01.2020 13:41:11, mantik903 сказал(-а):
Причем скрипт скомпилировался, все нормально. Но нпс все равно не портуется.

Аттач-Детач очень странно работают на самом деле.

Если тебе надо, чтоб НПС вместе с игроком телепортировался - ну так тем же скриптом его и телепортируй, в чем проблема?

 

01.01.2020 13:41:11, mantik903 сказал(-а):
Как заставить forcegreet адекватно работать?

АИ-пакеты используй.

Опубликовано
01.01.2020 23:19:35, Azazellz сказал(-а):
Если тебе надо, чтоб НПС вместе с игроком телепортировался - ну так тем же скриптом его и телепортируй, в чем проблема?

Попробовал по аналогии, но все равно не хочет. Для игрока у меня прописано 

ObjectReference Property aaaHTFT2Player Auto

Game.GetPlayer().MoveTo(aaaHTFT2Player)

 

Для нпс

ObjectReference Property aaaHTFT2Groom Auto
Actor aaaHappyTogetherGroom

aaaHappyTogetherGroom.MoveTo(aaaHTFT2Groom)

 

И нпс телепортироваться все равно упорно отказывается.

Опубликовано
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.

Не помню уже, как там правильно это делается в таких случаях. Давно скрипты не писал, забыл все =)

Опубликовано
02.01.2020 15:04:53, Azazellz сказал(-а):

НПСа тоже через проперти задать попробуй, либо как Actor, либо как ObjectReference.

Не помню уже, как там правильно это делается в таких случаях. Давно скрипты не писал, забыл все =)Через

Через актера не сработало, а вот через объект - вполне (умом папирус не понять). Спасибо большое)

  • 2 недели спустя...
Опубликовано (изменено)

Ребят, как называется предметы типа Парагон из dlc Dawnguard в creation kit? Хочу сделать мод на квест с маркерами на них. Ни в одном разделе не нашел, даже поиск в All ничего не выдает. Искал по слову Paragon и их типу.

Изменено пользователем Leadaire
Опубликовано
12.01.2020 21:59:16, Leadaire сказал(-а):

Ребят, как называется предметы типа Парагон из dlc Dawnguard в creation kit? Хочу сделать мод на квест с маркерами на них. Ни в одном разделе не нашел, даже поиск в All ничего не выдает. Искал по слову Paragon и их типу.

MiscItems, кейворды драгоценных камней.

Опубликовано
13.01.2020 06:58:08, Azazellz сказал(-а):

MiscItems, кейворды драгоценных камней.

Спасиб. Эм, а как сделать маркер на предмет? Я думал, что знал как, но что-то нифига не пошло)

Опубликовано
13.01.2020 09:50:50, Leadaire сказал(-а):

Спасиб. Эм, а как сделать маркер на предмет? Я думал, что знал как, но что-то нифига не пошло)

Через квест.

Ну и всегда можно посмотреть, как это сделано у других, или в самой игре.

Мод на маркеры к камням Барензии, например.

  • 3 недели спустя...
Опубликовано (изменено)

Всем Доброго дня! У меня вопрос - который мучает меня три дня! Вопрос по чёрным книгам в апокрифе. Я их изменил - добавил анимации и все в работает на привью. Но как мне заставить их открываться как в игре - что бы одна анимация сменяла другую - пробовал писать свой скрипт - где пошагово расписал анимации но анимация "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

  Где в этих скриптах строчки про открытие книги? и почему вложенный в книгу скрипт не компелируется даже в своём изначальном состояниии а вот к примеру скрипт на ативаторе компилируется на отлично даже после внесения правок в него. Изменено пользователем CISCO.:i:..:i:.
Опубликовано
31.01.2020 06:29:34, CISCO.:i:..:i:. сказал(-а):
есть два скрипта:

Которые отношения к анимациям не имеют ровно никакого.

Копай дальше - в маркеры или в квесты.

 

Судя по первому скрипту, там все устроено так: активируется не сама книга, а маркер поверх, он запускает анимацию, и активирует саму книжку (она открывается и читается).

Или наоборот. Ты активируешь книжку, а она уже скриптом линкуется с активатором, он активируется и запускает анимацию.

Опубликовано
31.01.2020 06:38:47, Azazellz сказал(-а):

Которые отношения к анимациям не имеют ровно никакого.

Копай дальше - в маркеры или в квесты.

 

Судя по первому скрипту, там все устроено так: активируется не сама книга, а маркер поверх, он запускает анимацию, и активирует саму книжку (она открывается и читается).

Или наоборот. Ты активируешь книжку, а она уже скриптом линкуется с активатором, он активируется и запускает анимацию.

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

Опубликовано
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

Опубликовано
31.01.2020 07:12:30, CISCO.:i:..:i:. сказал(-а):
нашел в квесте через другой квест - вот ведь запихали! 

Не то ты нашел.

Ты маркеры смотри. Они при использовании запускать анимации умеют.

Как, по твоему, НПСы к стеночкам прислоняются, или молятся?  Думаешь, скриптами?

А они на самом деле просто маркеры используют.

Опубликовано (изменено)
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

Изменено пользователем CISCO.:i:..:i:.
Опубликовано
02.02.2020 08:12:29, CISCO.:i:..:i:. сказал(-а):

А я же имею ввиду механизм открытия книги - которая находится в Апокрифе - большая такая на пьедестале - так вот когда ты нажимаешь открыть книгу и появляется сам механизм открытия - а конкретно открытие книги - струи зелёного пламени и три поднимающихся шара - которые в последствии оказываются перками на выбор.

А. Так вот ты про какую книгу говоришь.
Тут - да, все сложнее. Я даже и хз, как это в скриптах может быть закодировано.

Опубликовано

подскажите правильную команду отменяющею PlayAnimationAndWait("Stage2", "Done") - почему после PlayAnimationAndWait - перестают работать идущие следом строки скрипта - но без неё (PlayAnimationAndWait) анимация проигрывается не полностью - мне просто нужна команда отменяющая действие PlayAnimationAndWait

Опубликовано
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. Но это может работать нестабильно.

Опубликовано (изменено)
02.02.2020 12:32:32, Azazellz сказал(-а):

https://www.creationkit.com/index.php?title=PlayAnimationAndWait_(Papyrus)

 

Там ж все написано. Игра ждет ивента, который у тебя прописан вторым параметром ("Done"), и только после этого скрипт продолжит работу. Если ивента нет - скрипт "повиснет".

Откуда он получается - уже дело другое. В самой анимации закодирован, скорее всего.

Альтернатива - использовать просто PlayAnimation и следом задать время ожидания, соответствующее длительности анимации, через команду wait. Но это может работать нестабильно.

Спасибо Многое проясняет - В самой анимации действительно есть подобные строки. Может выпилить в самой анимации Done? 

 

Есть несколько значений Stage1, Stage2, Stage3, 

Stage1
0,000000
start

0.666666
SoundPlay.QSTBlackBookOpen

3.500000
Open

3.500011
end

 

Stage2
0.000000
start

0.000011
SoundPlay.QSTBlackBookMagicA

2.633335
SoundPlay.QSTBlackBookMagicBLPM

6.333336
Done

7.166668
Stage3

7.166679
end

 

Stage3
0.000000
start

4.000000
end
и внимание вопрос чего же ждёт Done в Stage2? - может запуска Stage3 - ведь это у него в планах согласно графику - но хрен там! даже после Stage3 - у которого кстати из условий start и end - в чём тут тогда мышка порылась? чего ждёт этот Done если вся анимация уже выполнена - книга раскрыта - все анимации светятся. Мне нужно что бы книга раскрывалась бесчисленное количество раз а не один - как в оригинале. На что заменить этот Done в самой анимации - я же туда чё хошь могу написать но не знаю чего. Изменено пользователем CISCO.:i:..:i:.
Опубликовано
02.02.2020 13:05:13, CISCO.:i:..:i:. сказал(-а):
чего ждёт этот Done если вся анимация уже выполнена - книга раскрыта - все анимации светятся.

Это не Done ждет, это его ждут.

Скрипт ждет, пока ему анимация ивент не отправит, чтоб продолжить работать.

Можешь в скрипт другую стадию прописать, или свою стадию в анимашку добавить и уже ее ждать - как тебе угодно.

 

02.02.2020 13:31:11, CISCO.:i:..:i:. сказал(-а):

И ещё такой момент - получается что с помощью команды flip я могу разворачивать анимацию - а не прописывать её часами в NifSkope.

Чего не знаю - того не знаю. Не силен в анимациях.

Опубликовано
02.02.2020 13:55:21, Azazellz сказал(-а):

Это не Done ждет, это его ждут.

Скрипт ждет, пока ему анимация ивент не отправит, чтоб продолжить работать.

Можешь в скрипт другую стадию прописать, или свою стадию в анимашку добавить и уже ее ждать - как тебе угодно.

 

Чего не знаю - того не знаю. Не силен в анимациях.

Я запутался((  Как я понял PlayAnimationAndWait - заставляет проигрывать всю анимацию указанную в скобках и только потом переходит к следующей анимации - но вот к примеру когда все анимации проиграны - запустить из заново с самого начала не возможно. Я так понимаю нужно в самой модельке ковыряться - или же есть какая команда - заставляющая обнулить счетчик анимации.

Опубликовано
02.02.2020 16:54:01, CISCO.:i:..:i:. сказал(-а):
Я запутался((  Как я понял PlayAnimationAndWait - заставляет проигрывать всю анимацию указанную в скобках и только потом переходит к следующей анимации - но вот к примеру когда все анимации проиграны - запустить из заново с самого начала не возможно. Я так понимаю нужно в самой модельке ковыряться - или же есть какая команда - заставляющая обнулить счетчик анимации.

Нет. Неправильно ты понял.

PlayAnimationAndWait проигрывает анимацию (первый аргумент в функции) и ждет, пока от анимации поступит команда-ивент (второй аргумент - то, чего ждут).

И только после этого скрипт может продолжить свою работу. Если команды-ивента не поступает - скрипт зависает и дальше не работает. Т.е. все, что ты в него дальше напишешь - не исполняется.

Опубликовано
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 

Опубликовано

Извините что заколебал - просто три дня убил на это - и это ещё не считая создания анимации закрывания книги в NifSkope - а это то ещё геморрой. Я понимаю что черная книга была рассчитана на одну активацию открытия - и после этого на протяжении всей игры так и лежала открытой в Апокрифе - потому что у нее в природе не было анимации закрытия - которую я и написал - и она работает отлично - я даже звуковой файл сделал для закрытия и прописал его в сомом Nif файле - но работать это всё вместе отказывается.

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйте новый аккаунт в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

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

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