Aller au contenu


Sommeil Interrompu & Message Quand On Sort D'une Cell


  • Veuillez vous connecter pour répondre
19 réponses à ce sujet

#1 SiNdA

SiNdA

Posté 27 décembre 2005 - 16:59

SaLut !

mon mod est en progression je sens que celui-ci je vais le réussir je m'y investi à foooond !! ( même si personne ne peut/veut s'associer à moi  :cry:  lol )

voilà alors j'ai encore besoin de scripts ( et c'est pas fini ! ) :

Je voudrais avoir un script qui fait que lorsque je rentre dans la cellule 9:9 et 10:9, je peux ressortir à la seule contrainte qu'un garde m'interpelle et me fasse passer un message, ensuite libre à moi de rester ou partir ! mais voilà, enfait c'est pas un garde c'est un messagebox quoi, c'est plus simple et c'est ce que je souhaite :cry:

donc voilà si vous avez une idée merci à vous ^^


2ème script, enfait là c'est plus compliqué, il faut que j'explique la scène:

lorsque ce garde me dit que je devrais rester car une tempête risque de se lever, je vais me reposer cans une auberge, et je m'endors, et à ( exemple ) 2:00 du mat, mon sommeil est interrompu et je retrouve un gars ( id: HOMME ) dans ma chambre, il me entame le dialogue

j'attends vos réponses avec impatience j'étudie en ce moment la structure des scripts, les fonctions, etc ... les scripts que je demande là pourront m'aider à mieux comprendre ! ^^

Merci
°°Merci
°°°°Merci !
~~~

#2 MysticalShadow

MysticalShadow

Posté 27 décembre 2005 - 17:59

Pour le 1er script, je ne comprends pas tout. A quelle occasion la messagebox et le message sont donnés?
Si c'est lors d'un dialogue avec un PNJ, il serait plus simple d'utiliser le champ "Result" d'une entrée de dialogue.

Pour ton 2e script, place l'HOMME dans l'endroit de la chambre souhaité, et adjoins lui ce script. N'hésite pas à poser tes questions.

BEGIN Script_2___sur_HOMME

short doOnce


if ( doOnce == 1 )
	Return
endif

if ( gamehour == 2 ); gamehour est une varibale globale gérée toute seule qui donne l'heure en cours.
	if ( GetPCSleep == 1 )
		PositionCell x, y, z, 0, "ID_CELL_AUBERGE"
		WakeUpPc
		ForceGreeting
		Set doOnce to 1
	endif
endif	


END

Il faut que écrives toi-même les coordonnées x, y, z, en mettant celles uù tu veux que le PNJ soit téléporté dans ta chambre.

Modifié par MysticalShadow, 28 décembre 2005 - 12:24.


#3 Angora

Angora

    Danse avec les bugs


Posté 27 décembre 2005 - 18:07

Commence d'abord par regarder comment fonctionnent les scripts préexistants du jeu, ça te permettras d'avoir tes réponses...

Pour le premier, utilise CellChanged et GetPCCell.

short dedans
short doOnce

if ( CellChanged )
  if ( dedans == 1 )
	if ( doOnce == 0 )
	  MessageBox "Coucou, blablablabla..."; mets ta messagebox ici
	  set doOnce to 1
	endif
  endif
endif

If ( GetPCCell 9, 9 )
  set dedans to 1
ElseIf ( GetPCCell 10, 9 )
  set dedans to 1
Else
  set dedans to 0
Endif

Voilà, tu crée un nouvel activateur et tu colle ce script dessus, puis tu place cet activateur dans les deux cellules concernées.

Bon, pour le deuxième script, quelqu'un d'autre te l'a déjà fait, mais sinon je t'aurais dit juste de regarder le script des assassins de Tribunal...
Le saviez-vous ?

En français, il n'y a jamais, jamais, JAMAIS, J-A-M-A-I-S, de cédille à un 'c' devant un 'e', un 'i' ou un 'y'. Jamais. Sans aucune exception. Pas la moindre. Zéro. Cédille devant e, i ou y = faute. Un point, c'est tout, c'est comme ça, ça a toujours été comme ça, et ça le sera toujours.

#4 SiNdA

SiNdA

Posté 28 décembre 2005 - 11:32

merci à vous pour vos réponses ! bien que je n'y arrive toujours pas  :P  !

Mystical shadow:

en fait, le personnage ( normalement ) à l'étage en bas devant le bar, la nuit il est censé aller vers sa chambre ( normal ) et donc dans MA chambre, il n'y a personne, je m'endore, et hop sommeil interrompu et cet homme se trouve devant moi !

en fait:

LUI: bar ---------------------------> ma chambre
MOI: chambre avant sommeil  ---> chambre après sommeil interompu

sinon angora je suis désolé mais je comprends pas bien ce script, est-ce que je dois modifier quelques chose là-dedans ( oui le message lol ) mais à part ça ?  :D


Merci merci
~~~~~~~

#5 MysticalShadow

MysticalShadow

Posté 28 décembre 2005 - 12:24

J'ai édité mon précédent message.

#6 Angora

Angora

    Danse avec les bugs


Posté 28 décembre 2005 - 14:07

 SiNdA, le 28.12.2005 à 11:32, dit :

sinon angora je suis désolé mais je comprends pas bien ce script, est-ce que je dois modifier quelques chose là-dedans ( oui le message lol ) mais à part ça ?  :D

Bah, bien sûr. Pour commencer, il faut lui donner un nom (j'ai pas mis les begin et end). J'ai pas non plus mis le classique if ( menumode == 1 ) return endif destiné à éviter que le script ne tourne quand il n'en a pas besoin.

Et bien sûr, si ta messagebox est du genre "cliquez dans l'un des choix proposés" il faut mettre toute la gestion des choix... Là c'est juste la logique du code : tu commence par regarder si le joueur a changé de cellule [if  cellchanged == 1 )]. Si oui, est-ce qu'il était dans la zone avant [if (dedans == 1 )] ? Alors, comme il a changé de cellule, il n'est sans doute plus dans la zone maintenant. Bien. L'a-t-on déjà averti [(if (doOnce == 0)]? Si non, on le fait maintenant, et on note qu'il est averti [(set doOnce to 1)].

Bon, tout ça c'est bien gentil, mais encore faut-il avoir du code pour savoir si le joueur est dedans ou non. Donc on regarde ça. Si le joueur est dans une des deux cellules concernées, alors on met dedans à 1, sinon on met dedans à 0.

La raison pour laquelle cette partie-là du code vient après la première (au lieu d'avant, ce qui pourrait sembler plus logique), c'est que sinon dedans passerait à 0 avant de regarder si le joueur à changé de cellule, et donc le code avec la boite de message ne s'exécuterait jamais...
Le saviez-vous ?

En français, il n'y a jamais, jamais, JAMAIS, J-A-M-A-I-S, de cédille à un 'c' devant un 'e', un 'i' ou un 'y'. Jamais. Sans aucune exception. Pas la moindre. Zéro. Cédille devant e, i ou y = faute. Un point, c'est tout, c'est comme ça, ça a toujours été comme ça, et ça le sera toujours.

#7 SiNdA

SiNdA

Posté 30 décembre 2005 - 00:41

salut !! merci pour vos script, j'ai essayer celui du sommeil interrompu, et je crois que si j'tombe en depression dans quelques jours c'est à cause de ce script lo !!
j'mexplique, Nitro a regardé aussi le script, il a changé deux trois trucs, m'as expliqué vite fait pourqauoi et tout, on essaye, ca marche pas ! le gars change pas de place !! c'est abuzé lol j'ai l'impression qu'avec moi aucun script fonctionne !

je mes le script

( le gars doit interrompre mon sommeil à 2h du matin, et rien ne se passe )



Begin 5Aa_poivrotauberge

short DoOnce

if ( DoOnce == 1 )
     Return
endif

if ( DoOnce == 0 )
     if ( gamehour == 2 )
          if ( GetPCSleep == 1 )
               5Aa_Poivrot -> PositionCell, 459,289,268,0, "Auberge de Gloire"
               WakeUpPc
               ForceGreeting
               Set DoOnce to 1
          endif
     endif
endif

End


voilà !

ps: merci pour ton aide nitro c'est super sympa  :grin:

#8 Nerwal

Nerwal

    SAMU Kalendaarien


Posté 30 décembre 2005 - 01:18

Citation

if ( gamehour == 2 )

GameHour étant une variable de type float ce genre de test ne peut pas marcher.

#9 SiNdA

SiNdA

Posté 30 décembre 2005 - 12:28

tu pourrais m'en dire plus stp ??

en fait c'est le script du début du mod il me bloque trop lol si j'ai pas ce script le mod ne commencera jamais !


merci  ;)

#10 Nerwal

Nerwal

    SAMU Kalendaarien


Posté 30 décembre 2005 - 12:40

GameHour est un nombre décimal, c'est à dire un truc genre 6.7873267, 22.30976 ou 14.1839458. GameHour est mis à jour à chaque frame, c'est à dire seulement 25 fois par seconde si l'on a un FPS de 25. C'est à dire que selon toute probabilité, on ne tombera jamais sur 2.000000 heures pile, mais plutôt, on passera de 1.9984 à 2.0012 entre deux frames, et par conséquent le test if ( gamehour == 2 ) échoue tout le temps.
Il faut donc mieux se servir d'inégalités.

#11 Nitro386

Nitro386

Posté 30 décembre 2005 - 12:48

ok,donc faut mettre au début du script float gamehour ,c'est sa?
donc comment il doit faire pour qu'il soit intérrpmpu dans sont sommeil?
peut il mettre au bout de 6 heures qu'il dort, il est réveiller?

#12 Nerwal

Nerwal

    SAMU Kalendaarien


Posté 30 décembre 2005 - 14:00

Citation

ok,donc faut mettre au début du script float gamehour ,c'est sa?
Non, GameHour est déjà une variable globale définie par le jeu de base, elle est déjà déclarée comme il faut.
Pour corriger cela il suffit de changer == en >= ; par contre, si à 2h on ne dort pas, ça se déclenchera ensuite dès qu'on commence à dormir, et il faut corriger le script pour éviter d'être réveillé de suite si on s'endort avant minuit le premier jour.

#13 Angora

Angora

    Danse avec les bugs


Posté 30 décembre 2005 - 14:26

Tu peux aussi ruser et ajouter une nouvelle variable.

Begin 5Aa_poivrotauberge

short DoOnce
short heuredujeu

if ( DoOnce == 1 )
   Return
endif

set heuredujeu to gamehour

if ( DoOnce == 0 )
   if ( heuredujeu == 2 )
	  if ( GetPCSleep == 1 )
		 5Aa_Poivrot -> PositionCell, 459,289,268,0, "Auberge de Gloire"
		 WakeUpPc
		 ForceGreeting
		 Set DoOnce to 1
	  endif
   endif
endif

End

De cette façon, GameHour est "convertie" en variable entière et ton égalité peut fonctionner.
Le saviez-vous ?

En français, il n'y a jamais, jamais, JAMAIS, J-A-M-A-I-S, de cédille à un 'c' devant un 'e', un 'i' ou un 'y'. Jamais. Sans aucune exception. Pas la moindre. Zéro. Cédille devant e, i ou y = faute. Un point, c'est tout, c'est comme ça, ça a toujours été comme ça, et ça le sera toujours.

#14 SiNdA

SiNdA

Posté 30 décembre 2005 - 14:27

oooooh me dites pas que c'est pas vrai !! lol

ca marche génial j'suis content ! :grin:

mais bon ... vous allez m'etrangler ... parceque c'est pas fini lol

en fait il faudrait que cet homme qui apparaît devant moi me dises quelques chose de PRECIS qu'il ne dis pas à chaque fois qu'on va le saluer, vous voyez ?

voilà pis sinon ben la nuit fodrait qu'il y est plus personne dans l'auberge mais je crois que je vais prendre le script des personnages qui rentrent chez eux la nuit !

~~~~
merci

#15 a3jv

a3jv

    ... à 4 je reviens.


Posté 30 décembre 2005 - 15:10

 SiNdA, le 30.12.2005 à 14:27, dit :

en fait il faudrait que cet homme qui apparaît devant moi me dises quelques chose de PRECIS qu'il ne dis pas à chaque fois qu'on va le saluer, vous voyez ?
Dans les dialogues tu as des conditions, le plus simple aurait été qu'il soit dans une autre cellule avant, ce qui aurait permis de mettre la cell auberge de la gloire comme condition mais tu peux en trouver d'autres. Sinon tu rajoute une variable short dans le script proposé par Angora et avant la ligne "ForceGreeting" tu la passe à 1. Ex. short dial en tête de sript avec les autres shorts et set dial to 1 dans le sript.
Tu cale ton dialogue spécial avant les autres de ce perso et tu met comme condition en "local" dial = 1 et en result tu met set dial to 0 pour éviter qu'il redise la même chose ensuite.
C'est une solution, il doit y en avoir pas mal d'autres...
Les choses n'ont que l'importance ou la valeur qu'on leur donne.

#16 SiNdA

SiNdA

Posté 30 décembre 2005 - 19:21

merci à vous tous voilà ce premier script est fini, pour celui avec le garde je le fais pas en fait ça sera au joueur lui-même de vouloir se reposer à l'auberge, à la base Ravën est un village secret alors si on commence à tout faire pour le pousser à .... oh rien lol j'arrête de parler  :grin:

voilà donc merci j'espee quand j'aurais besoin d'autres scripts vous serez là

au final, voici le script que j'ai utilisé :

Citation

Begin 5Aa_poivrotauberge

short DoOnce
short heuredujeu

if ( DoOnce == 1 )
     Return
endif

Set heuredujeu to gamehour

if ( DoOnce == 0 )
     if ( heuredujeu == 2 )
          if ( GetPCSleep == 1 )
               5Aa_Poivrot -> PositionCell, 459,289,268,0, "Ravën, Auberge de Gloire"
               WakeUpPc
               ForceGreeting
               Set DoOnce to 1
          endif
     endif
endif

End

ensuite j'ai caché le perso qui doit apparaîtr derriere un mur, comme ça on le voit pas, et à 2h precise il apparait et parle !!

c'est classe merci  :)

#17 SiNdA

SiNdA

Posté 30 décembre 2005 - 20:01

AAAAAH NAAAAAAAAAAAAAAAAN !!

ben là j'deviens fou, en fait quand le script s'effectue ils me disent qu'il y a une erreur à mon script, qu'il faut entrer une value line 1 !!!

:grin:

et ben ...

#18 MysticalShadow

MysticalShadow

Posté 31 décembre 2005 - 00:01

;) Là c'est pas normal.  ;) Je me demande bien pourquoi ca fait ca! A mon avis c'est un bug, face auquel il faut fiare de trucs bidons:  change le nom du script peut être, saute des lignes, reécris-le en plusieurs fois...si ca se trouve il partira!

D'autre part, est-ce que le fait d'aller dormir dans la chambre de l'auberge se déclenche par un dialogue précis, qui a lieu dans la même cellule que celle où est originellement le PNJ qui apparaît à 2h du matin ? Et est-ce que ce PNJ est unique?

EDIT: je ne sais pas pourquoi tu as rajouté ce test "if ( DoOnce == 0 )", mais il est complètement inutile.

Modifié par MysticalShadow, 31 décembre 2005 - 00:05.


#19 a3jv

a3jv

    ... à 4 je reviens.


Posté 31 décembre 2005 - 15:02

 SiNdA, le 30.12.2005 à 20:01, dit :

AAAAAH NAAAAAAAAAAAAAAAAN !!

ben là j'deviens fou, en fait quand le script s'effectue ils me disent qu'il y a une erreur à mon script, qu'il faut entrer une value line 1 !!!

;)

et ben ...
La ligne 1, c'est la première ; normal !
Et normalement en ligne 1 on a le Begin avec le nom du script, donc il doit y avoir en effet quelque chose.
Hors d'après ton "coller" la ligne 1 est vide, supprime donc cette ligne fantôme...
Je suppose que le prob vient de là.
Les choses n'ont que l'importance ou la valeur qu'on leur donne.

#20 SiNdA

SiNdA

Posté 02 janvier 2006 - 03:24

Mer i en fait nn j'ai fais simplement une tite connerie juste en rapport avec le journal lol excusez-moi merci à vous


bonne nuit
:pilote:




0 utilisateur(s) li(sen)t ce sujet

0 membre(s), 0 invité(s), 0 utilisateur(s) anonyme(s)