Bon, je sais qu'il en éxiste déjà d'autres, mais comme aucun dne me convenait complètement, j'ai voulu créer un mod pour gérer le sommeil. Et là je coince : mon script enregistre les heures qui passent, et au bout de x heures, on recoit des malus. Ensuite je voulais faire en sorte que chaque heure passée à dormir se retir du nombre d'heures comptés...et là ca coince. J'ai essayé je ne sais combien de solutions, mais rien à faire : dans le meilleurs des cas, le décompte du temps "ralenti" (et le pire c'est que je comprend absolument pas pourquoi -_- ). Voilà le script :
Spoiler
ScriptName SMActivation
short JourBase
short HeuresNoSleep
short HeureBase
short Fatigue
short HeuresDormies
short DoneSleeping
Begin OnAdd player
Messagebox "Vous venez d'activer le module gérant le sommeil ! Désormais, vous devrez dormir régulièrement pour ne pas subir les effets de la fatigue (sous forme de malus). Ce module n'est actif que tant que la Pierre de Sommeil se trouve dans votre inventaire. Le Module prendre efectivement effet à partir de 12h00. Bon jeu !"
Set JourBase to GetDayOfWeek
Set Heurebase to GetCurrentTime
Set HeuresNoSleep to 0
Set Fatigue to 0
Set HeuresDormies to 0
End
Begin MenuMode
If (IsPCSleeping == 1)
Set DoneSleeping to 1
Set HeuresDormies to (GetPCSleepHours * 2)
Endif
End
Begin GameMode
If (player.GetItemCount SMPierreSommeil >=1)
If (HeuresDormies == 0)
If (JourBase != GetDayOfWeek)
Set HeuresNoSleep to (HeuresNoSleep + GetCurrentTime + (24 - HeureBase))
Set JourBase to GetDayOfWeek
Set HeureBase to GetCurrentTime
Return
ElseIf (JourBase == GetDayOfWeek)
If (GetCurrentTime >= HeureBase + 1)
If (GetCurrentTime < HeureBase + 2)
Set HeuresNoSleep to HeuresNoSleep + 1
Set HeureBase to GetCurrentTime
MessageBox "1 heure passée !"
ElseIf (GetCurrentTime < HeureBase + 3)
Set HeuresNoSleep to HeuresNoSleep + 2
Set HeureBase to GetCurrentTime
MessageBox "2 heures passées !"
ElseIf (GetCurrentTime < HeureBase + 4)
Set HeuresNoSleep to HeuresNoSleep + 3
Set HeureBase to GetCurrentTime
MessageBox "3 heures passées !"
ElseIf (GetCurrentTime < HeureBase + 5)
Set HeuresNoSleep to HeuresNoSleep + 4
Set HeureBase to GetCurrentTime
MessageBox "4 heures passées !"
ElseIf (GetCurrentTime < HeureBase + 6)
Set HeuresNoSleep to HeuresNoSleep + 5
Set HeureBase to GetCurrentTime
MessageBox "5 heures passées !"
ElseIf (GetCurrentTime < HeureBase + 7)
Set HeuresNoSleep to HeuresNoSleep + 6
Set HeureBase to GetCurrentTime
MessageBox "6 heures passées !"
ElseIf (GetCurrentTime < HeureBase +
Set HeuresNoSleep to HeuresNoSleep + 7
Set HeureBase to GetCurrentTime
MessageBox "7 heures passées !"
ElseIf (GetCurrentTime < HeureBase + 9)
Set HeuresNoSleep to HeuresNoSleep + 8
Set HeureBase to GetCurrentTime
MessageBox "8 heures passées !"
ElseIf (GetCurrentTime < HeureBase + 10)
Set HeuresNoSleep to HeuresNoSleep + 9
Set HeureBase to GetCurrentTime
MessageBox "9 heures passées !"
ElseIf (GetCurrentTime < HeureBase + 11)
Set HeuresNoSleep to HeuresNoSleep + 10
Set HeureBase to GetCurrentTime
MessageBox "10 heures passées !"
ElseIf (GetCurrentTime < HeureBase + 12)
Set HeuresNoSleep to HeuresNoSleep + 11
Set HeureBase to GetCurrentTime
MessageBox "11 heures passées !"
ElseIf (GetCurrentTime < HeureBase + 13)
Set HeuresNoSleep to HeuresNoSleep + 12
Set HeureBase to GetCurrentTime
MessageBox "12 heures passées !"
ElseIf (GetCurrentTime < HeureBase + 14)
Set HeuresNoSleep to HeuresNoSleep + 13
Set HeureBase to GetCurrentTime
MessageBox "13 heures passées !"
ElseIf (GetCurrentTime < HeureBase + 15)
Set HeuresNoSleep to HeuresNoSleep + 14
Set HeureBase to GetCurrentTime
MessageBox "14 heures passées !"
ElseIf (GetCurrentTime < HeureBase + 16)
Set HeuresNoSleep to HeuresNoSleep + 15
Set HeureBase to GetCurrentTime
MessageBox "15 heures passées !"
ElseIf (GetCurrentTime < HeureBase + 17)
Set HeuresNoSleep to HeuresNoSleep + 16
Set HeureBase to GetCurrentTime
MessageBox "16 heures passées !"
ElseIf (GetCurrentTime < HeureBase + 18)
Set HeuresNoSleep to HeuresNoSleep + 17
Set HeureBase to GetCurrentTime
MessageBox "17 heures passées !"
ElseIf (GetCurrentTime < HeureBase + 19)
Set HeuresNoSleep to HeuresNoSleep + 18
Set HeureBase to GetCurrentTime
MessageBox "18 heures passées !"
ElseIf (GetCurrentTime < HeureBase + 20)
Set HeuresNoSleep to HeuresNoSleep + 19
Set HeureBase to GetCurrentTime
MessageBox "19 heures passées !"
ElseIf (GetCurrentTime < HeureBase + 21)
Set HeuresNoSleep to HeuresNoSleep + 20
Set HeureBase to GetCurrentTime
MessageBox "20 heures passées !"
ElseIf (GetCurrentTime < HeureBase + 22)
Set HeuresNoSleep to HeuresNoSleep + 21
Set HeureBase to GetCurrentTime
MessageBox "21 heures passées !"
ElseIf (GetCurrentTime < HeureBase + 23)
Set HeuresNoSleep to HeuresNoSleep + 22
Set HeureBase to GetCurrentTime
MessageBox "22 heures passées !"
ElseIf (GetCurrentTime < HeureBase + 24)
Set HeuresNoSleep to HeuresNoSleep + 23
Set HeureBase to GetCurrentTime
MessageBox "23 heures passées !"
ElseIf (GetCurrentTime < HeureBase + 25)
Set HeuresNoSleep to HeuresNoSleep + 24
Set HeureBase to GetCurrentTime
MessageBox "24 heures passées !"
Endif
Endif
If (HeuresNoSleep >= 72)
If (Fatigue != 10)
Set Fatigue to 10
player.RemoveSpell SMFatigue1
player.RemoveSpell SMFatigue2
player.RemoveSpell SMFatigue3
player.RemoveSpell SMFatigue4
player.RemoveSpell SMFatigue5
player.RemoveSpell SMFatigue6
player.RemoveSpell SMFatigue7
player.RemoveSpell SMFatigue8
player.AddSpell SMFatigue9
MessageBox "Vous devriez songer à vous reposer 10"
Endif
ElseIf (HeuresNoSleep >= 66)
If (Fatigue != 9)
Set Fatigue to 9
player.RemoveSpell SMFatigue1
player.RemoveSpell SMFatigue2
player.RemoveSpell SMFatigue3
player.RemoveSpell SMFatigue4
player.RemoveSpell SMFatigue5
player.RemoveSpell SMFatigue6
player.RemoveSpell SMFatigue7
player.AddSpell SMFatigue8
player.RemoveSpell SMFatigue9
MessageBox "Vous devriez songer à vous reposer 9"
Endif
ElseIf (HeuresNoSleep >= 60)
If (Fatigue !=
Set Fatigue to 8
player.RemoveSpell SMFatigue1
player.RemoveSpell SMFatigue2
player.RemoveSpell SMFatigue3
player.RemoveSpell SMFatigue4
player.RemoveSpell SMFatigue5
player.RemoveSpell SMFatigue6
player.AddSpell SMFatigue7
player.RemoveSpell SMFatigue8
player.RemoveSpell SMFatigue9
MessageBox "Vous devriez songer à vous reposer 8"
Endif
ElseIf (HeuresNoSleep >= 54)
If (Fatigue != 7)
Set Fatigue to 7
player.RemoveSpell SMFatigue1
player.RemoveSpell SMFatigue2
player.RemoveSpell SMFatigue3
player.RemoveSpell SMFatigue4
player.RemoveSpell SMFatigue5
player.AddSpell SMFatigue6
player.RemoveSpell SMFatigue7
player.RemoveSpell SMFatigue8
player.RemoveSpell SMFatigue9
MessageBox "Vous devriez songer à vous reposer 7"
Endif
ElseIf (HeuresNoSleep >= 48)
If (Fatigue != 6)
Set Fatigue to 6
player.RemoveSpell SMFatigue1
player.RemoveSpell SMFatigue2
player.RemoveSpell SMFatigue3
player.RemoveSpell SMFatigue4
player.AddSpell SMFatigue5
player.RemoveSpell SMFatigue6
player.RemoveSpell SMFatigue7
player.RemoveSpell SMFatigue8
player.RemoveSpell SMFatigue9
MessageBox "Vous devriez songer à vous reposer 6"
Endif
ElseIf (HeuresNoSleep >= 42)
If (Fatigue != 5)
Set Fatigue to 5
player.RemoveSpell SMFatigue1
player.RemoveSpell SMFatigue2
player.RemoveSpell SMFatigue3
player.AddSpell SMFatigue4
player.RemoveSpell SMFatigue5
player.RemoveSpell SMFatigue6
player.RemoveSpell SMFatigue7
player.RemoveSpell SMFatigue8
player.RemoveSpell SMFatigue9
MessageBox "Vous devriez songer à vous reposer 5"
Endif
ElseIf (HeuresNoSleep >= 36)
If (Fatigue != 4)
Set Fatigue to 4
player.RemoveSpell SMFatigue1
player.RemoveSpell SMFatigue2
player.AddSpell SMFatigue3
player.RemoveSpell SMFatigue4
player.RemoveSpell SMFatigue5
player.RemoveSpell SMFatigue6
player.RemoveSpell SMFatigue7
player.RemoveSpell SMFatigue8
player.RemoveSpell SMFatigue9
MessageBox "Vous devriez songer à vous reposer 4"
Endif
ElseIf (HeuresNoSleep >= 30)
If (Fatigue != 3)
Set Fatigue to 3
player.RemoveSpell SMFatigue1
player.AddSpell SMFatigue2
player.RemoveSpell SMFatigue3
player.RemoveSpell SMFatigue4
player.RemoveSpell SMFatigue5
player.RemoveSpell SMFatigue6
player.RemoveSpell SMFatigue7
player.RemoveSpell SMFatigue8
player.RemoveSpell SMFatigue9
MessageBox "Vous devriez songer à vous reposer 3"
Endif
ElseIf (HeuresNoSleep >= 24)
If (Fatigue != 2)
Set Fatigue to 2
player.AddSpell SMFatigue1
player.RemoveSpell SMFatigue2
player.RemoveSpell SMFatigue3
player.RemoveSpell SMFatigue4
player.RemoveSpell SMFatigue5
player.RemoveSpell SMFatigue6
player.RemoveSpell SMFatigue7
player.RemoveSpell SMFatigue8
player.RemoveSpell SMFatigue9
MessageBox "Vous devriez songer à vous reposer 2"
Endif
ElseIf (HeuresNoSleep >= 18)
If (Fatigue != 1)
Set Fatigue to 1
player.RemoveSpell SMFatigue1
player.RemoveSpell SMFatigue2
player.RemoveSpell SMFatigue3
player.RemoveSpell SMFatigue4
player.RemoveSpell SMFatigue5
player.RemoveSpell SMFatigue6
player.RemoveSpell SMFatigue7
player.RemoveSpell SMFatigue8
player.RemoveSpell SMFatigue9
MessageBox "Vous devriez songer à vous reposer"
Endif
Endif
Endif
ElseIf (HeuresDormies >=1)
If (DoneSleeping == 1)
Set HeuresNoSleep to (HeuresNoSleep - (HeuresDormies * 2))
MessageBox "Vous avez dormi !"
Set Donesleeping to 0
Set HeuresDormies to 0
Return
Endif
Endif
Endif
End
short JourBase
short HeuresNoSleep
short HeureBase
short Fatigue
short HeuresDormies
short DoneSleeping
Begin OnAdd player
Messagebox "Vous venez d'activer le module gérant le sommeil ! Désormais, vous devrez dormir régulièrement pour ne pas subir les effets de la fatigue (sous forme de malus). Ce module n'est actif que tant que la Pierre de Sommeil se trouve dans votre inventaire. Le Module prendre efectivement effet à partir de 12h00. Bon jeu !"
Set JourBase to GetDayOfWeek
Set Heurebase to GetCurrentTime
Set HeuresNoSleep to 0
Set Fatigue to 0
Set HeuresDormies to 0
End
Begin MenuMode
If (IsPCSleeping == 1)
Set DoneSleeping to 1
Set HeuresDormies to (GetPCSleepHours * 2)
Endif
End
Begin GameMode
If (player.GetItemCount SMPierreSommeil >=1)
If (HeuresDormies == 0)
If (JourBase != GetDayOfWeek)
Set HeuresNoSleep to (HeuresNoSleep + GetCurrentTime + (24 - HeureBase))
Set JourBase to GetDayOfWeek
Set HeureBase to GetCurrentTime
Return
ElseIf (JourBase == GetDayOfWeek)
If (GetCurrentTime >= HeureBase + 1)
If (GetCurrentTime < HeureBase + 2)
Set HeuresNoSleep to HeuresNoSleep + 1
Set HeureBase to GetCurrentTime
MessageBox "1 heure passée !"
ElseIf (GetCurrentTime < HeureBase + 3)
Set HeuresNoSleep to HeuresNoSleep + 2
Set HeureBase to GetCurrentTime
MessageBox "2 heures passées !"
ElseIf (GetCurrentTime < HeureBase + 4)
Set HeuresNoSleep to HeuresNoSleep + 3
Set HeureBase to GetCurrentTime
MessageBox "3 heures passées !"
ElseIf (GetCurrentTime < HeureBase + 5)
Set HeuresNoSleep to HeuresNoSleep + 4
Set HeureBase to GetCurrentTime
MessageBox "4 heures passées !"
ElseIf (GetCurrentTime < HeureBase + 6)
Set HeuresNoSleep to HeuresNoSleep + 5
Set HeureBase to GetCurrentTime
MessageBox "5 heures passées !"
ElseIf (GetCurrentTime < HeureBase + 7)
Set HeuresNoSleep to HeuresNoSleep + 6
Set HeureBase to GetCurrentTime
MessageBox "6 heures passées !"
ElseIf (GetCurrentTime < HeureBase +
Set HeuresNoSleep to HeuresNoSleep + 7
Set HeureBase to GetCurrentTime
MessageBox "7 heures passées !"
ElseIf (GetCurrentTime < HeureBase + 9)
Set HeuresNoSleep to HeuresNoSleep + 8
Set HeureBase to GetCurrentTime
MessageBox "8 heures passées !"
ElseIf (GetCurrentTime < HeureBase + 10)
Set HeuresNoSleep to HeuresNoSleep + 9
Set HeureBase to GetCurrentTime
MessageBox "9 heures passées !"
ElseIf (GetCurrentTime < HeureBase + 11)
Set HeuresNoSleep to HeuresNoSleep + 10
Set HeureBase to GetCurrentTime
MessageBox "10 heures passées !"
ElseIf (GetCurrentTime < HeureBase + 12)
Set HeuresNoSleep to HeuresNoSleep + 11
Set HeureBase to GetCurrentTime
MessageBox "11 heures passées !"
ElseIf (GetCurrentTime < HeureBase + 13)
Set HeuresNoSleep to HeuresNoSleep + 12
Set HeureBase to GetCurrentTime
MessageBox "12 heures passées !"
ElseIf (GetCurrentTime < HeureBase + 14)
Set HeuresNoSleep to HeuresNoSleep + 13
Set HeureBase to GetCurrentTime
MessageBox "13 heures passées !"
ElseIf (GetCurrentTime < HeureBase + 15)
Set HeuresNoSleep to HeuresNoSleep + 14
Set HeureBase to GetCurrentTime
MessageBox "14 heures passées !"
ElseIf (GetCurrentTime < HeureBase + 16)
Set HeuresNoSleep to HeuresNoSleep + 15
Set HeureBase to GetCurrentTime
MessageBox "15 heures passées !"
ElseIf (GetCurrentTime < HeureBase + 17)
Set HeuresNoSleep to HeuresNoSleep + 16
Set HeureBase to GetCurrentTime
MessageBox "16 heures passées !"
ElseIf (GetCurrentTime < HeureBase + 18)
Set HeuresNoSleep to HeuresNoSleep + 17
Set HeureBase to GetCurrentTime
MessageBox "17 heures passées !"
ElseIf (GetCurrentTime < HeureBase + 19)
Set HeuresNoSleep to HeuresNoSleep + 18
Set HeureBase to GetCurrentTime
MessageBox "18 heures passées !"
ElseIf (GetCurrentTime < HeureBase + 20)
Set HeuresNoSleep to HeuresNoSleep + 19
Set HeureBase to GetCurrentTime
MessageBox "19 heures passées !"
ElseIf (GetCurrentTime < HeureBase + 21)
Set HeuresNoSleep to HeuresNoSleep + 20
Set HeureBase to GetCurrentTime
MessageBox "20 heures passées !"
ElseIf (GetCurrentTime < HeureBase + 22)
Set HeuresNoSleep to HeuresNoSleep + 21
Set HeureBase to GetCurrentTime
MessageBox "21 heures passées !"
ElseIf (GetCurrentTime < HeureBase + 23)
Set HeuresNoSleep to HeuresNoSleep + 22
Set HeureBase to GetCurrentTime
MessageBox "22 heures passées !"
ElseIf (GetCurrentTime < HeureBase + 24)
Set HeuresNoSleep to HeuresNoSleep + 23
Set HeureBase to GetCurrentTime
MessageBox "23 heures passées !"
ElseIf (GetCurrentTime < HeureBase + 25)
Set HeuresNoSleep to HeuresNoSleep + 24
Set HeureBase to GetCurrentTime
MessageBox "24 heures passées !"
Endif
Endif
If (HeuresNoSleep >= 72)
If (Fatigue != 10)
Set Fatigue to 10
player.RemoveSpell SMFatigue1
player.RemoveSpell SMFatigue2
player.RemoveSpell SMFatigue3
player.RemoveSpell SMFatigue4
player.RemoveSpell SMFatigue5
player.RemoveSpell SMFatigue6
player.RemoveSpell SMFatigue7
player.RemoveSpell SMFatigue8
player.AddSpell SMFatigue9
MessageBox "Vous devriez songer à vous reposer 10"
Endif
ElseIf (HeuresNoSleep >= 66)
If (Fatigue != 9)
Set Fatigue to 9
player.RemoveSpell SMFatigue1
player.RemoveSpell SMFatigue2
player.RemoveSpell SMFatigue3
player.RemoveSpell SMFatigue4
player.RemoveSpell SMFatigue5
player.RemoveSpell SMFatigue6
player.RemoveSpell SMFatigue7
player.AddSpell SMFatigue8
player.RemoveSpell SMFatigue9
MessageBox "Vous devriez songer à vous reposer 9"
Endif
ElseIf (HeuresNoSleep >= 60)
If (Fatigue !=
Set Fatigue to 8
player.RemoveSpell SMFatigue1
player.RemoveSpell SMFatigue2
player.RemoveSpell SMFatigue3
player.RemoveSpell SMFatigue4
player.RemoveSpell SMFatigue5
player.RemoveSpell SMFatigue6
player.AddSpell SMFatigue7
player.RemoveSpell SMFatigue8
player.RemoveSpell SMFatigue9
MessageBox "Vous devriez songer à vous reposer 8"
Endif
ElseIf (HeuresNoSleep >= 54)
If (Fatigue != 7)
Set Fatigue to 7
player.RemoveSpell SMFatigue1
player.RemoveSpell SMFatigue2
player.RemoveSpell SMFatigue3
player.RemoveSpell SMFatigue4
player.RemoveSpell SMFatigue5
player.AddSpell SMFatigue6
player.RemoveSpell SMFatigue7
player.RemoveSpell SMFatigue8
player.RemoveSpell SMFatigue9
MessageBox "Vous devriez songer à vous reposer 7"
Endif
ElseIf (HeuresNoSleep >= 48)
If (Fatigue != 6)
Set Fatigue to 6
player.RemoveSpell SMFatigue1
player.RemoveSpell SMFatigue2
player.RemoveSpell SMFatigue3
player.RemoveSpell SMFatigue4
player.AddSpell SMFatigue5
player.RemoveSpell SMFatigue6
player.RemoveSpell SMFatigue7
player.RemoveSpell SMFatigue8
player.RemoveSpell SMFatigue9
MessageBox "Vous devriez songer à vous reposer 6"
Endif
ElseIf (HeuresNoSleep >= 42)
If (Fatigue != 5)
Set Fatigue to 5
player.RemoveSpell SMFatigue1
player.RemoveSpell SMFatigue2
player.RemoveSpell SMFatigue3
player.AddSpell SMFatigue4
player.RemoveSpell SMFatigue5
player.RemoveSpell SMFatigue6
player.RemoveSpell SMFatigue7
player.RemoveSpell SMFatigue8
player.RemoveSpell SMFatigue9
MessageBox "Vous devriez songer à vous reposer 5"
Endif
ElseIf (HeuresNoSleep >= 36)
If (Fatigue != 4)
Set Fatigue to 4
player.RemoveSpell SMFatigue1
player.RemoveSpell SMFatigue2
player.AddSpell SMFatigue3
player.RemoveSpell SMFatigue4
player.RemoveSpell SMFatigue5
player.RemoveSpell SMFatigue6
player.RemoveSpell SMFatigue7
player.RemoveSpell SMFatigue8
player.RemoveSpell SMFatigue9
MessageBox "Vous devriez songer à vous reposer 4"
Endif
ElseIf (HeuresNoSleep >= 30)
If (Fatigue != 3)
Set Fatigue to 3
player.RemoveSpell SMFatigue1
player.AddSpell SMFatigue2
player.RemoveSpell SMFatigue3
player.RemoveSpell SMFatigue4
player.RemoveSpell SMFatigue5
player.RemoveSpell SMFatigue6
player.RemoveSpell SMFatigue7
player.RemoveSpell SMFatigue8
player.RemoveSpell SMFatigue9
MessageBox "Vous devriez songer à vous reposer 3"
Endif
ElseIf (HeuresNoSleep >= 24)
If (Fatigue != 2)
Set Fatigue to 2
player.AddSpell SMFatigue1
player.RemoveSpell SMFatigue2
player.RemoveSpell SMFatigue3
player.RemoveSpell SMFatigue4
player.RemoveSpell SMFatigue5
player.RemoveSpell SMFatigue6
player.RemoveSpell SMFatigue7
player.RemoveSpell SMFatigue8
player.RemoveSpell SMFatigue9
MessageBox "Vous devriez songer à vous reposer 2"
Endif
ElseIf (HeuresNoSleep >= 18)
If (Fatigue != 1)
Set Fatigue to 1
player.RemoveSpell SMFatigue1
player.RemoveSpell SMFatigue2
player.RemoveSpell SMFatigue3
player.RemoveSpell SMFatigue4
player.RemoveSpell SMFatigue5
player.RemoveSpell SMFatigue6
player.RemoveSpell SMFatigue7
player.RemoveSpell SMFatigue8
player.RemoveSpell SMFatigue9
MessageBox "Vous devriez songer à vous reposer"
Endif
Endif
Endif
ElseIf (HeuresDormies >=1)
If (DoneSleeping == 1)
Set HeuresNoSleep to (HeuresNoSleep - (HeuresDormies * 2))
MessageBox "Vous avez dormi !"
Set Donesleeping to 0
Set HeuresDormies to 0
Return
Endif
Endif
Endif
End
Si quelqu'un a une solution, je prend
Merci d'avence ^^
PS : les messagesbox sont là pour des raisons de test
Modifié par Helghast, 12 avril 2006 - 21:30.