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
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