Archipel de Pertevue
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
-28%
Le deal à ne pas rater :
Précommande : Smartphone Google Pixel 8a 5G Double Sim 128Go ...
389 € 539 €
Voir le deal

Script pour faire la nuit dans les intérieurs

3 participants

Aller en bas

Script pour faire la nuit dans les intérieurs Empty Script pour faire la nuit dans les intérieurs

Message par OraNN Lun 23 Avr - 10:35

J'ai fait ce script pour que des lamps diffusant de la lumière dark le fasse uniquement la nuit dans les cellules intérieures. Le principe est que la nuit est entre 20h et 8h et que les lampes doivent à ce moment être dans le bâtiment. Le jour, elle descendent le plus bas possible.

Problème: le script fonctionne assez aléatoirement si le joueur passe le jour et la nuit dans la cell intérieur et surtout si il y a un chargement de sauvegarde: les rithmes ont tendance à s'inverser :scratch:

Code:
begin A_P_lamp_palais_gouv

short fait

if ( menumode == 1 )
    return
endif

if ( cellchanged == 1 )
    setatstart
    set fait to 0
    if ( gamehour < 20 )
        if ( gamehour >= 8 )
        set fait to 1
        moveworld z, -2000
        endif
    endif
endif

if ( gamehour >= 8 )
    if ( gamehour < 20 )
        if ( fait == 0 )
            moveworld z, -2000
            set fait to 1
        endif
    endif
endif

if ( gamehour >= 20 )
    if ( fait == 1 )
        moveworld z, 2000
        set fait to 0
    endif
endif

if ( gamehour < 8 )
    if ( fait == 1 )
        moveworld z, 2000
        set fait to 0
    endif
endif

end
OraNN
OraNN
Admin

Nombre de messages : 1808
Age : 38
Localisation : Un peu partout dans l'Archipel !
Date d'inscription : 16/04/2006

https://pertevue.forumgaming.fr

Revenir en haut Aller en bas

Script pour faire la nuit dans les intérieurs Empty Re: Script pour faire la nuit dans les intérieurs

Message par Nenfëa Jeu 26 Avr - 12:03

Hello Orann ! Wink

Petite question, à quoi te sert le test :
Code:
if ( cellchanged == 1 )
    setatstart
    set fait to 0
    if ( gamehour < 20 )
        if ( gamehour >= 8 )
        set fait to 1
        moveworld z, -2000
        endif
    endif
endif

Première critique sur ce morceau de code : il semble que SetAtStart soit partiellement bugguée d'après l'UESP :
Be warned that this function doesn't always seem to do exactly as it should. Objects are not nessecarily reset to its editor defined position.

Seconde critique : il est inutile de réinitialiser l'objet au changement de cellule. Si on supprime cette portion de code, quand le joueur entre dans la cellule, il y a deux possibilités :
1. L'objet est encore en bonne position et ne sera donc pas déplacé, car la variable fait empêche ce déplacement.
2. L'objet n'est plus en bonne position et il sera déplacé.
Dans les deux cas, c'est bien ce qu'on veut faire. Very Happy

Troisième micro-critique : dans son état actuel, ton script va tester les trois conditions d'heure à chaque frame et entrer dans l'une d'entre elles. Supposons qu'il soit 22 heures. Le script va entrer dans le bloc "if ( gamehour >= 20 )", mais va aussi tester les deux autres blocs (sans entrer dedans puisque leurs conditions ne sont pas remplies).
Il y a moyen de faire plus efficace en utilisant des elseif.
Si j'intègre les idées précedentes, ça donne quelque chose comme :
begin A_P_lamp_palais_gouv

short fait

if ( menumode == 1 )
return
endif


if ( gamehour < 8 )
; Avant 8 h
if ( fait == 1 )
moveworld z, 2000
set fait to 0
endif

elseif ( gamehour >= 20 )
; Après 20 h
if ( fait == 1 )
moveworld z, 2000
set fait to 0
endif

else
; Entre 8 et 20 h
if ( fait == 0 )
moveworld z, -2000
set fait to 1
endif

endif

end
Nenfëa
Nenfëa

Nombre de messages : 14
Localisation : Ben, ça dépend du référentiel...
Date d'inscription : 19/04/2006

Revenir en haut Aller en bas

Script pour faire la nuit dans les intérieurs Empty Re: Script pour faire la nuit dans les intérieurs

Message par OraNN Jeu 26 Avr - 13:37

Merci je vais tester. En fait, le cellchanged c'était au départ dans l'optique justement de n'effectuer le test qu'une fois quand le joueur entrait, mais ça ne fonctionnait pas correctement donc après certaines modifications infructueuses, je suis arrivé à ça... mais bon c'est pas encore parfait donc merci du coup de main ^^
OraNN
OraNN
Admin

Nombre de messages : 1808
Age : 38
Localisation : Un peu partout dans l'Archipel !
Date d'inscription : 16/04/2006

https://pertevue.forumgaming.fr

Revenir en haut Aller en bas

Script pour faire la nuit dans les intérieurs Empty Re: Script pour faire la nuit dans les intérieurs

Message par Nenfëa Jeu 26 Avr - 16:48

Dans ce cas, tu peux tenter de mettre à la place le code :
Code:
if ( CellChanged == 0 )
    Return
endif

Ca bloquera tout tant que le joueur ne change pas de cell ! Wink
Nenfëa
Nenfëa

Nombre de messages : 14
Localisation : Ben, ça dépend du référentiel...
Date d'inscription : 19/04/2006

Revenir en haut Aller en bas

Script pour faire la nuit dans les intérieurs Empty Re: Script pour faire la nuit dans les intérieurs

Message par OraNN Jeu 26 Avr - 17:13

Et est-ce que ça détecte aussi en cas de téléportation?
OraNN
OraNN
Admin

Nombre de messages : 1808
Age : 38
Localisation : Un peu partout dans l'Archipel !
Date d'inscription : 16/04/2006

https://pertevue.forumgaming.fr

Revenir en haut Aller en bas

Script pour faire la nuit dans les intérieurs Empty Re: Script pour faire la nuit dans les intérieurs

Message par Nenfëa Jeu 26 Avr - 17:23

Là, je dois t'avouer que je ne sais pas trop... Question je dirais oui à priori, mais je ne l'ai pas testé ! Wink

Un autre soucis, c'est que si le joueur attend toute la nuit dans la cell intérieure et ne sors qu'à 14 heures, il fera toujours noir dedans jusqu'à ce qu'il sorte.
Sans le CellChanged, c'est un autre soucis : là, la luminosité changera brutalement au changement d'heure !

Bref, pas de solutions miracle, mais la présence du CellChanged me semble préférable ! Smile
Nenfëa
Nenfëa

Nombre de messages : 14
Localisation : Ben, ça dépend du référentiel...
Date d'inscription : 19/04/2006

Revenir en haut Aller en bas

Script pour faire la nuit dans les intérieurs Empty Re: Script pour faire la nuit dans les intérieurs

Message par OraNN Sam 5 Mai - 8:29

Je viens enfin de tester (le concours passé ça aide!) et ça fonctionne! Je vais rajouter le " if ( cellchanged == 0 )" sur le script je pense, ainsi que sur le script des npcs qui, sans ça, se téléporte dans leur lit dès le changement d'heure. Wink
OraNN
OraNN
Admin

Nombre de messages : 1808
Age : 38
Localisation : Un peu partout dans l'Archipel !
Date d'inscription : 16/04/2006

https://pertevue.forumgaming.fr

Revenir en haut Aller en bas

Script pour faire la nuit dans les intérieurs Empty Re: Script pour faire la nuit dans les intérieurs

Message par OraNN Mar 22 Mai - 11:59

Je viens de constater un problème:
Je suis dans la cell de jour. Pas de problème. J'avance le temps (touche T), les lumières n'apparaissent pas la nuit. (normal avec le ( cellchanged == 0 ).
Mais, je sors et je rerentre (toujours la nuit): à l'intérieur il fait jour... Sad
OraNN
OraNN
Admin

Nombre de messages : 1808
Age : 38
Localisation : Un peu partout dans l'Archipel !
Date d'inscription : 16/04/2006

https://pertevue.forumgaming.fr

Revenir en haut Aller en bas

Script pour faire la nuit dans les intérieurs Empty Re: Script pour faire la nuit dans les intérieurs

Message par Nenfëa Jeu 31 Mai - 23:24

Hello Orann ! Smile

Pourrais tu poster le script en entier pour voir s'il n'y a pas une erreur d'enchaînement dessus ? Wink

Normalement, CellChanged ne renvoit 1 que quand le joueur entre dans la cell (sur une seule frame).
Nenfëa
Nenfëa

Nombre de messages : 14
Localisation : Ben, ça dépend du référentiel...
Date d'inscription : 19/04/2006

Revenir en haut Aller en bas

Script pour faire la nuit dans les intérieurs Empty Re: Script pour faire la nuit dans les intérieurs

Message par a3jv Ven 1 Juin - 21:25

J'ai un peu perdu la main mais je me demande si les variables locales ne se réinitialisent pas automatiquement, soit en entrant dans la cellule, soit au bout d'un certain temps. Ce qui expliquerait que suivant l'heure ou on pénètre la cellule les choses ne sont pas à leur place.

Si quand tu pénètres la cell ta lampe est déjà à -2000, que "fait" est à 0 et qu'il est 11h du mat, elle va s'enfoncer à -4000.
Tu risques de ne jamais la voir remonter.

Si tes éclairages de nuit sont posés de base en position normale (haute), tu peux peut-être essayer un truc dans ce genre :

Code:
begin A_P_lamp_palais_gouv

DontSaveObject  ; pour que la sauvegarde ne garde pas les éventuelles modifs de positions en mémoire.

short fait

if ( CellChanged == 1 )
  set fait to 0
endif

if ( fait == 1 )
  return
endif

if ( gamehour >= 8 )
  if ( gamehour < 20 )
      moveworld z, -2000
  else SetAtStart  ; bon si c'est buggé, je ne sais pas par quoi remplacer !
  endif
endif

set fait to 1

end
a3jv
a3jv

Nombre de messages : 912
Localisation : Sous le soleil de la Cerdagne
Date d'inscription : 10/05/2007

Revenir en haut Aller en bas

Script pour faire la nuit dans les intérieurs Empty Re: Script pour faire la nuit dans les intérieurs

Message par OraNN Sam 2 Juin - 10:17

Je ne connaissais pas "DontsaveObject". Je vais tester de ce pas. Merci Smile
OraNN
OraNN
Admin

Nombre de messages : 1808
Age : 38
Localisation : Un peu partout dans l'Archipel !
Date d'inscription : 16/04/2006

https://pertevue.forumgaming.fr

Revenir en haut Aller en bas

Script pour faire la nuit dans les intérieurs Empty Re: Script pour faire la nuit dans les intérieurs

Message par OraNN Sam 2 Juin - 11:01

Bon, je viens de tester: ça ne fonctionne pas...
Si j'arrive de nuit, la première fois, ça marche, il fait nuit. Mais après, il fait tout le temps jours, même la nuit... Neutral

Je ne comprends pas, c'est pourtant pas quelque chose de compliquer à la base comme script No
OraNN
OraNN
Admin

Nombre de messages : 1808
Age : 38
Localisation : Un peu partout dans l'Archipel !
Date d'inscription : 16/04/2006

https://pertevue.forumgaming.fr

Revenir en haut Aller en bas

Script pour faire la nuit dans les intérieurs Empty Re: Script pour faire la nuit dans les intérieurs

Message par Nenfëa Mer 6 Juin - 2:01

Les variables locales d'un script ne sont normalement jamais réinitialisées automatiquement - si ça se produit, c'est un vilain petit bug ! Sad

Peux-tu poster le contenu du script, Orann ? Wink

Ce devrait normalement être quelque chose comme :
Code:
Begin A_P_lamp_palais_gouv

short jour

; On ne change de luminosité qu'au moment où le joueur entre dans la cellule
if ( CellChanged == 0 )
   Return
endif


if ( GameHour < 8 )
   ; Avant 8 h
   if ( jour == 1 )
      Set jour to 0
      MoveWorld z, 2000
   endif

elseif ( GameHour >= 20 )
   ; Après 20 h
   if ( jour == 1 )
      Set jour to 0
      MoveWorld z, 2000
   endif

else
   ; Entre 8 et 20 h
   if ( jour == 0 )
      Set jour to 1
      MoveWorld z, -2000
   endif

endif

end
Nenfëa
Nenfëa

Nombre de messages : 14
Localisation : Ben, ça dépend du référentiel...
Date d'inscription : 19/04/2006

Revenir en haut Aller en bas

Script pour faire la nuit dans les intérieurs Empty Re: Script pour faire la nuit dans les intérieurs

Message par OraNN Mer 6 Juin - 6:13

Le voici dans la dernière version avant celle d'A3jv:

Code:
begin A_P_lamp_palais_gouv
; merci Nenfëa ^^

short fait

if ( CellChanged == 0 )
    Return
endif

if ( menumode == 1 )
return
endif


if ( gamehour < 8 )
; Avant 8 h
if ( fait == 1 )
moveworld z, 2000
set fait to 0
endif

elseif ( gamehour >= 20 )
; Après 20 h
if ( fait == 1 )
moveworld z, 2000
set fait to 0
endif

else
; Entre 8 et 20 h
if ( fait == 0 )
moveworld z, -2000
set fait to 1
endif

endif

end
OraNN
OraNN
Admin

Nombre de messages : 1808
Age : 38
Localisation : Un peu partout dans l'Archipel !
Date d'inscription : 16/04/2006

https://pertevue.forumgaming.fr

Revenir en haut Aller en bas

Script pour faire la nuit dans les intérieurs Empty Re: Script pour faire la nuit dans les intérieurs

Message par a3jv Mer 6 Juin - 9:01

Désolé que ça n'ait pas marché.
Si la solution de Nenfëa marchait bien avant de rajouter le CellChanged, je pense que tu devrais faire sans et utiliser celle là..
Sinon, j'avais rebuché les tutos et le script et j'étais arrivé à un truc épuré très proche de ton script de départ avec les deux possibilités jour ou nuit qui font monter ou descendre et se renvoient la variable.

J'avais voulu te le poster il y a deux jours mais la connexion foirait régulièrement (il faudra que je fasse quelque chose pour remédier à ça, c'est de pire en pire, alors j'écris sous "World" et je poste mon laïus dare-dare par un copier/coller) et puis le visuel de la réponse voulait à tout prix me réunir les deux if (< et >=) sur une seule et même ligne, impossible de dissocier !?…
Bref j'ai abandonné à la dernière rupture de connexion.

Ca me rappelle des souvenirs de galères, des longs moments de doutes, recherches et réflexions.
Le grand mystère des scripts du Tescs !
Des espaces en trop ou en manque et c'est foireux, des guillemets en résult de dialogue pour additem et pas pour removeitem ou l'inverse, un truc qui va bien pour un script mais foire avec un autre…

Bon, je te poste ma "trouvaille" ultime qui est très proche de ton script d'origine (sans CellChanged) pour voir.
Code:
begin A_P_lamp_palais_gouv

short jour

if ( MenuMode == 1 )
  return
endif

if ( jour == 0 )
  if ( GameHour >= 8 )
      if ( GameHour < 20 )
        MoveWorld z, -1000
        set jour to 1
      endif
  endif
endif

if ( jour == 1 )
  if ( GameHour < 8 )
      if ( GameHour >= 20 )
        MoveWorld z, 1000
        set jour to 0
      endif
  endif
endif

end
Et j'ai toujours le problème de réunion auto des deux if de la deuxième partie et le plus drôle c'est que si je met HeureDuJour dans le deuxième il me garde quand même la compil sans en tenir compte !... Evil or Very Mad 😢

Edit : Ah ben si (déconnecté !…) ça marche… J'ai remis GameHour...et hop déconnecté 3 fois et lutte avec la prise tel, les filtres, le modem, je pense que je vais massacrer ma livebox. Twisted Evil
a3jv
a3jv

Nombre de messages : 912
Localisation : Sous le soleil de la Cerdagne
Date d'inscription : 10/05/2007

Revenir en haut Aller en bas

Script pour faire la nuit dans les intérieurs Empty Re: Script pour faire la nuit dans les intérieurs

Message par OraNN Mer 6 Juin - 17:08

Merci de massacrer ta livebox pour poster et m'aider ^^
Juste vite fait, la seconde partie du script ne peux pas fonctionner...

Code:
if ( jour == 1 )
  if ( GameHour < 8 )
      if ( GameHour >= 20 )
        MoveWorld z, 1000
        set jour to 0
      endif
  endif
endif

Il ne peux pas être moins de 8 heures et plus de 20h en même temps... Mais bon, c'est vrai que ce côté épuré était ce que j'avais testé en premier. Je réessayerai dès que j'aurai un peu de temps (mes oraux sont proches).
Merci
OraNN
OraNN
Admin

Nombre de messages : 1808
Age : 38
Localisation : Un peu partout dans l'Archipel !
Date d'inscription : 16/04/2006

https://pertevue.forumgaming.fr

Revenir en haut Aller en bas

Script pour faire la nuit dans les intérieurs Empty Re: Script pour faire la nuit dans les intérieurs

Message par Nenfëa Mer 6 Juin - 22:39

a3jv a écrit:et puis le visuel de la réponse voulait à tout prix me réunir les deux if (< et >=) sur une seule et même ligne, impossible de dissocier !?…
Je pense que c'est uniquement un bug de la prévisualisation : j'avais le même problème, j'ai cliqué sur poster par mégarde, et mon post s'est affiché comme je le voulais ! Wink


OraNN a écrit:Le voici dans la dernière version avant celle d'A3jv[...]
J'ai beau regarder, je ne vois pas d'erreur de logique. Juste un détail, le "if ( menumode == 1 )" est inutile dans la mesure où le "if ( CellChanged == 0 )" bloque déjà le script - mais je doute que le problème vienne de là.

Si le problème persiste, je te conseille de recontacter ton fournisseur de scripts Very Happy de tester en plaçant des MessageBox dans chaque test pour voir ce qui est executé et quand ça l'est ! Wink
Nenfëa
Nenfëa

Nombre de messages : 14
Localisation : Ben, ça dépend du référentiel...
Date d'inscription : 19/04/2006

Revenir en haut Aller en bas

Script pour faire la nuit dans les intérieurs Empty Re: Script pour faire la nuit dans les intérieurs

Message par a3jv Jeu 7 Juin - 6:30

OraNN a écrit:Il ne peux pas être moins de 8 heures et plus de 20h en même temps...
C'est juste ! :oops:

Nenfëa a écrit:Les variables locales d'un script ne sont normalement jamais réinitialisées automatiquement - si ça se produit, c'est un vilain petit bug ! Sad
C'est juste aussi ! et re :oops:

Je viens de faire un test rapide et effectivement une variable locale placée en zone de tête ne repasse plus par la zone d'initialisation même après sortie > 72 heures et retour dans la cell.
Je ne sais pas pourquoi j'avais un doute à ce niveau là.
Passée à 1, elle reste définitivement à 1 pour la sauvegarde l'ayant enregistrée.

Message édité, j'avais écrit quelques aberrations, il faut que je change de tisane... et de livebox... Laughing
a3jv
a3jv

Nombre de messages : 912
Localisation : Sous le soleil de la Cerdagne
Date d'inscription : 10/05/2007

Revenir en haut Aller en bas

Script pour faire la nuit dans les intérieurs Empty Re: Script pour faire la nuit dans les intérieurs

Message par a3jv Jeu 7 Juin - 8:33

Pour essayer de me rattraper, j'ai testé le script suivant sur un activator coché "references persist" que j'ai placé en position visible sur le sol chez Arrile, dans le tescs.
J'ai testé et ça marche parfaitement chez moi dans tous les cas d'heure.
Il est toujours invisible le jour et toujours visible la nuit.

Voici le script :
Code:
begin A_P_lamp_palais_gouv

short jour

if ( CellChanged == 0 )
  return
endif

if ( jour == 0 )
  if ( GameHour >= 8 )
      if ( GameHour < 20 )
        MoveWorld z, -2000
        set jour to 1
      endif
  endif
endif

if ( jour == 1 )
  if ( GameHour < 8 )
      MoveWorld z, 2000
      set jour to 0
  elseif ( GameHour >= 20 )
      MoveWorld z, 2000
      set jour to 0
  endif
endif

end
a3jv
a3jv

Nombre de messages : 912
Localisation : Sous le soleil de la Cerdagne
Date d'inscription : 10/05/2007

Revenir en haut Aller en bas

Script pour faire la nuit dans les intérieurs Empty Re: Script pour faire la nuit dans les intérieurs

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum