PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Idle-Animationen



Boïndil
16.05.2011, 22:04
Hallo, Leute,
war ja dabei ein Menu für mein Mannequin-Script zu entwerfen, mit dem ich Posen setzen kann.
Eine Zeit lang hat das hervorragend geklappt, aber jetzt plötzlich bleiben sie immer in der gleichen Pose stehen und zwar der letzen in der Gruppe, was kaum ein Zufall sein kann.
Das lässt sich script-technisch nicht erklären, denn der Button-Klick wird in eine Variable abgefüllt und anhand der erkenne ich, welche von 9 Posen ich mit PlayIdle abspiele(vereinfacht: PoseIndex = GetButtonPressed if PoseIndex == 7 PlayIdle Animation7 EndIf).
Ausserdem wird mein Posen-Menu mit dieser Variable aufgerufen und die gibt mir für jeden Klick das korrekte Resultat zurück. Wen ich auf 7 klicke, müsste also die Animation7 kommen.
Kann mir das nur so erklären, dass eigentlich sämtliche Animationen hintereinander bis zur letzten ablaufen, d.h. wenn ich 3 klicke, wird abgespielt, bis die Animation bei 9 stehen bleibt. Ich meine sogar, dass ich zwischendurch kurz eine der vorhergehenden Anims gesehen habe.
Habe dann in der esm testweise die Related Animation auf Null gesetzt, macht aber keinen Utnterschied.

Hat jemand eine Ahnung, wie ich das fixen kann?

Und eben seltsam, dass es eine Zeit lang lief und jetzt plötzlich nicht mehr.

Grüsse
Boïndil

Hier noch das komplette Script:


scn BeautyMannequinActionsScript

short Activated ; Has the mannequin been activated? Also counts operations To be executed in order.

short InUse ; Is the mannequin in-use or in 'inventory'
short Positioning ; Is the mannequin currently being positioned?

float Angle ; Positioning info...
float TrigAngle
float PosX
float PosY
float PosZ
float Timer ; Timer for various delays


short MenuLevel

short Action
short SubAction
short RePose

short PoseIndex
short RaceIndex


Begin OnLoad

If InUse == 0
SetActorsAI 0
SetPlayerTeammate 1
Set InUse To 1
Set PosX To GetPos X
Set PosY To GetPos Y
Set PosZ To GetPos Z
Set Angle To GetAngle Z
Set Activated To 0
Set Positioning To 0
Set RePose To 0
EndIf

End

Begin OnActivate

If IsActionRef Player && Activated == 0
Disable
Set Timer To 0.1
Set MenuLevel To 1
Set Activated To 1
EndIf

End

Begin GameMode

If Timer > 0 ; Globaler Timer

Set Timer To Timer - GetSecondsPassed

ElseIf Activated == 1 ; Mannequin reseten

SetPos X PosX
SetPos Y PosY
SetPos Z PosZ
Enable
Set Timer To 0.5
Set Activated To 2

ElseIf Activated == 2 ; Mannequin-Menu anzeigen

If GetItemCount BeautyMannequinOutfit == 0
ShowMessage BeautyMannequinActionsNakedMsg
Else
ShowMessage BeautyMannequinActionsClothedMsg
EndIf
Set Activated To 3

ElseIf Activated == 3 ; Mannequin-Menu-Actions

Set Action To GetButtonPressed

If Action == 0 ; Abbrechen

Set Activated To 0

ElseIf Action == 1 ; Mannequin entfernen

Set InUse To 0
Disable
If GetIsSex Female == 1
Set BeautyMannequinQuest.CountMannequinF To BeautyMannequinQuest.CountMannequinF - 1
Else
Set BeautyMannequinQuest.CountMannequinM To BeautyMannequinQuest.CountMannequinM - 1
EndIf
Set BeautyMannequinQuest.CountMannequin To BeautyMannequinQuest.CountMannequin - 1
MoveTo BeautyMannequinMarkerRef
Set Activated To 0

ElseIf Action == 2 ; Mannequin ausruesten

RemoveItem BeautyMannequinAmmoList 5 1
OpenTeammateContainer
Set Activated To 4

ElseIf Action == 3 ; Mannequin positionieren

Set Positioning To 1
Set BeautyMannequinQuest.Positioning To 1
Set Activated To 0

ElseIf Action == 4 ; Mannequin positionieren beenden

Set Positioning To 0
Set BeautyMannequinQuest.Positioning To 0
Set Activated To 7

ElseIf Action == 5 ; Mannequin Posen-Menu aufstarten

If PoseIndex < 1
Set PoseIndex To 1
EndIf
ShowMessage BeautyMannequinActionsPosesMsg PoseIndex
Set Activated To 5

ElseIf Action == 6 ; Mannequin Rassen-Menu

If RaceIndex < 1
Set RaceIndex To 1
EndIf
ShowMessage BeautyMannequinActionsRaceMsg RaceIndex
Set Activated To 6

ElseIf Action == 7 ; Mannequin bekleidet/unbekleidet

If GetItemCount BeautyMannequinOutfit == 0
AddItem BeautyMannequinOutfit 1 1
Else
RemoveItem BeautyMannequinOutfit 1 1
EndIf
Set Activated To 7

EndIf

ElseIf Activated == 4 ; Zurueck vom TeamMate-Container

Set Activated To 7

ElseIf Activated == 5 ; Posen-Menu

Set SubAction To GetButtonPressed
If SubAction >= 1
Set PoseIndex To SubAction
Set Activated To 7
Else
Set Activated To 0
EndIf


ElseIf Activated == 6 ; Rassen-Menu

Set SubAction To GetButtonPressed
If SubAction == 1
MatchRace BeautyMannequinBaseDefaultRef
ElseIf SubAction == 2
MatchRace BeautyMannequinBaseAliceRef
ElseIf SubAction == 3
MatchRace BeautyMannequinBaseBerryRef
ElseIf SubAction == 4
MatchRace BeautyMannequinBaseMorticiaRef
ElseIf SubAction == 5
MatchRace BeautyMannequinBaseKarenRef
ElseIf SubAction == 6
MatchRace BeautyMannequinBaseKateRef
ElseIf SubAction == 7
MatchRace BeautyMannequinBasePamelaRef
ElseIf SubAction == 8
MatchRace BeautyMannequinBaseSeleneRef
ElseIf SubAction == 9
MatchRace BeautyMannequinBaseChildRef
EndIf
If SubAction >= 1
Set RaceIndex To SubAction
Set Activated To 7
Else
Set Activated To 0
EndIf


ElseIf Activated == 7 ; Vorbereiten auf End-Pose

SetActorsAI 1
If PoseIndex == 1
RemoveScriptPackage BeautyMannequinWeaponIn
AddScriptPackage BeautyMannequinWeaponOut
AddItem BeautyMannequinAmmoList 1 1
Else
AddScriptPackage BeautyMannequinWeaponIn
RemoveScriptPackage BeautyMannequinWeaponOut
RemoveItem BeautyMannequinAmmoList 5 1
EndIf
EvaluatePackage
Set Timer To 1.7
Set Activated To 8

ElseIf Activated == 8 ; End-Pose setzen
If PoseIndex == 1
If IsWeaponOut == 0
AddScriptPackage BeautyMannequinWeaponIn
RemoveScriptPackage BeautyMannequinWeaponOut
RemoveItem BeautyMannequinAmmoList 5 1
EvaluatePackage
PlayIdle BeautyPose00
EndIf
ElseIf PoseIndex == 2
PlayIdle BeautyPose01
ElseIf PoseIndex == 3
PlayIdle BeautyPose02
ElseIf PoseIndex == 4
PlayIdle BeautyPose03
ElseIf PoseIndex == 5
PlayIdle BeautyPose04
ElseIf PoseIndex == 6
PlayIdle BeautyPose05
ElseIf PoseIndex == 7
PlayIdle BeautyPose06
ElseIf PoseIndex == 8
PlayIdle BeautyPose07
ElseIf PoseIndex == 9
PlayIdle BeautyPose08
EndIf
SetActorsAI 0
Set Activated To 0


ElseIf Positioning == 1

; Currently positioning, lock To player.
Set Angle To Player.GetAngle Z
If Angle <= 90
Set TrigAngle To 90 - Angle
Else
Set Trigangle To 450 - Angle
EndIf
Set PosX To Player.GetPos X + 100 * cos TrigAngle
Set PosY To Player.GetPos Y + 100 * sin TrigAngle
SetPos X PosX
SetPos Y PosY
Set PosZ To GetPos Z
Set Angle To Angle + 180
SetAngle Z Angle

ElseIf RePose == 1 && GetInSameCell Player

; Player has left cell and now returned, re-pose and/or re-position.
Disable
MoveTo Player
Enable
Set RePose To 2

ElseIf RePose == 2

SetPos X PosX
SetPos Y PosY
SetPos Z PosZ
SetAngle Z Angle
Set RePose To 0
Set Activated To 7

EndIf
End

Carnatics
17.05.2011, 16:41
sollten die posen nicht eigentlich einzeln aufgelistet sein sprich so ungefähr



Begin OnActivate

if IsActionRef player == 1
ShowMessage ;Wie auch immer du das menü nennst
set go to 1
endif

end

begin gamemode

set Button to GetButtonPressed

if ( Button == 0 ) && ( Go == 1 )
;pose1
elseif ( Button == 1 ) && ( Go == 1 )
;pose2 und so weiter bis alle posen drin sind dann
Set Go to 0
endif

end


so das das ding an ein belibigen punkt springen kann und nicht alles nacheinander apspielt

Boïndil
17.05.2011, 17:21
Es geht um das: jedes Mal, wenn man zum Menu raus kommt, muss genau eine Pose wieder gesetzt werden, egal, was man da gemacht hat.
Also hat jede Pose eine Nummer, die permanent in PoseIndex gespeichert ist. Diese Nummer wird nur verändert, wenn man im Pose-Menu etwas gewählt hat.

Jede andere Funktion kann dann den Status auf 7(=fertig) setzen, was dann das Setzen der aktuell gewählten Pose veranlasst.


ElseIf PoseIndex == 2
PlayIdle BeautyPose01
ElseIf PoseIndex == 3
PlayIdle BeautyPose02
ElseIf PoseIndex == 4
PlayIdle BeautyPose03

Ich habe das Script nur der Vollständigkeit halber gepostet, ich glaube nicht, dass das Problem da liegt. Ich denke eher, dass Fallout meint, es müsse jeweils vom Einstiegspunkt(z.B. Pose 3) bis zum Ende alle Anims der Gruppe abspielen, worauf dann die AI bei der letzten Animation(Pose 8 ) einfriert. Das Script wählt schon die richige Animation.