Aller au contenu


Un Script Méchant


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

#1 Topsell

Topsell

Posté 02 juillet 2009 - 10:23

Je souhaitait créer un script qui, lorsque j'active l'objet sur lequel je l'ai placé, et suivant certaines conditions, me propose un choix de plats à disposer sur une table ( très sommaire ). Cependant j'ai un problème avec l'exécution au moment des MessageBox. J'explique :

Quelque soit la valeur de DRs_playerfood (qui est une variable global) il m'affiche bien le message box correspondant avec les choix possibles. Cependant quelque soit le bouton sur lequel j'appuie et à partir de n'importe quel menu, il m'arrête le script sans rien avoir posé et surtout sans le messagebox de fin ( ce qui m'amène à penser que je ne me suis pas gourée sur les coordonnées ). Je suis dans une cellule intérieure. Ce script n'a pas toujours été sous cette forme (j'ai essayé des variantes).

Voilà mon script.

Begin Drs_food_script

Short button
Short button2

set button to ( -1 )
set button2 to ( -1 )

if ( onactivate == 1 )
	if ( DRs_playerfood == 0 )
		messagebox "Il n'y a pas de nourriture disponible pour vous, cependant vous pouvez avoir de l'eau.", "Non, merci", "S'il-vous-plait"
			set button to Getbuttonpressed
		if ( button == 1)
			placeitem Drs_waterbottle_02, 6180, 5337, 12183, 0
		endif
	else
		messagebox "Que voulez-vous ?", "Eau", "Alcool", "Cote de chien en sauce au miel", "Rat avec légumes braisés", "Scrib séché, sauce céréales", "Oeuf à la coque version coupe-faim", "Oeuf à la coque avec lit de racine", "Plat spécial entrainement"
		set Drs_playerfood to 0
		set button2 to getbuttonpressed
		if ( button2 == 0 )
			messagebox "Voici."
			placeitem Drs_waterbottle_02, 6180, 5337, 12183, 0
		elseif ( button2 == 1 )
			messagebox "Allez le chercher au bar prévu à cet effet, aux cavernes inférieures."
		elseif ( button2 == 2 )
			messagebox "Voici."
			placeitem ingred_hound_meat_01, 6244, 5325, 12169, 0
			placeitem ingred_comberry_01, 6242, 5330, 12168, 5400
			placeitem ingred_comberry_01, 6247, 5333, 12169, 10800
			placeitem ingred_bread_01, 6214, 5278, 12172, 0
			placeitem Drs_waterbottle_02, 6180, 5337, 12183, 0
		elseif ( button2 == 3 )
			messagebox "Voici."
			placeitem ingred_rat_meat_01, 6249, 5327, 12169, 0
			placeitem ingred_scuttle_01, 6238, 5326, 12170, 0
			placeitem ingred_scuttle_01, 6243, 5335, 12169, 5400
			placeitem ingred_bread_01, 6214, 5278, 12172, 0
			placeitem Drs_waterbottle_02, 6180, 5337, 12183, 0
		elseif ( button2 == 4 )
			messagebox "Voici."
			placeitem ingred_scrib_jerky_01, 6237, 5329, 12170, 0
			placeitem ingred_scrib_jerky_01, 6243, 5331, 12170, 0
			placeitem ingred_saltrice_01, 6249, 5331, 12172, 0
			placeitem ingred_saltrice_01, 6244, 5325, 12172, 5400
			placeitem ingred_bread_01, 6214, 5278, 12172, 0
			placeitem Drs_waterbottle_02, 6180, 5337, 12183, 0
		elseif ( button2 == 5 )
			messagebox "Voici."
			placeitem food_kwama_egg_02, 6244, 5329, 12178, 0
			placeitem misc_com_plate_01, 6258, 5301, 12169, 0
			placeitem ingred_trama_root_01, 6260, 5304, 12170, 0
			placeitem ingred_trama_root_01, 6256, 5300, 12170, 10800
			placeitem ingred_bread_01, 6214, 5278, 12172, 0
			placeitem Drs_waterbottle_02, 6180, 5337, 12183, 0
		elseif ( button2 == 6 )
			messagebox "Voici."
			placeitem food_kwama_egg_01, 6244, 5329, 12178, 0
			placeitem misc_com_plate_01, 6258, 5301, 12169, 0
			placeitem ingred_trama_root_01, 6260, 5304, 12170, 0
			placeitem ingred_trama_root_01, 6256, 5300, 12170, 10800
			placeitem ingred_bread_01, 6214, 5278, 12172, 0
			placeitem Drs_waterbottle_02, 6180, 5337, 12183, 0
		elseif ( button2 == 7 )
			messagebox "Voici."
			placeitem ingred_crab_meat_01, 6244, 5329, 12171, 0
			placeitem ingred_saltrice_01, 6240, 5329, 12170, 0
			placeitem ingred_saltrice_01, 6244, 5329, 12170, 0
			placeitem ingred_saltrice_01, 6248, 5329, 12170, 0
			placeitem ingred_bread_01, 6214, 5278, 12172, 0
			placeitem Drs_waterbottle_02, 6180, 5337, 12183, 0
		endif
	endif
endif

end Drs_food_script

Les variantes ont été du style (j'avais à chaque fois déclaré les variables en rab) :

if ( Drs_playerfood == 0 )
	  Messagebox "blabla", "choix1", "choix2"
	  set controlvar to 1
...
endif

if ( controlvat == 1 )
	  if ( Getbuttonpressed == 0 )
			return
	  elseif ( Getbuttonpressed == 1 )
			placeitem
	  endif
endif

...

ou

if ( Drs_playerfood == 0 )
	  Messagebox "blabla", "choix1", "choix2"
	  set controlvar to 1
	  set button to Getbuttonpressed
...
endif

if ( controlvar == 1 )
	  if ( button == 0 )
			return
	  elseif ( button == 1 )
			placeitem
	  endif
endif 

ou encore

if ( Drs_playerfood == 0 )
	  Messagebox "blabla", "choix1", "choix2"
	  set button to getbuttonpressed
	  if ( button == 0 )
			return
	  elseif ( button == 1 )
			placeitem
	  endif
endif

Je ne comprends pas ce qui peut ne pas marcher.

#2 Kafou

Kafou

    Le canari a bouffé le rominet !


Posté 02 juillet 2009 - 10:57

Messagebox ne fonctionne pas comme ça.

Quand tu l'affiches, le script continue de tourner même si tu ne cliques sur rien, et getbuttonpressed reste à -1 tant que tu ne cliques pas.

Mais à chaque frame le script continue... donc à partir du moment où tu affiches la messagebox, il faut détecter, hors du bloc onactivate (contrairement à ta première variante, qui est la plus proche de la bonne solution), le changement de getbuttonpressed (j'ai toujours utilisé la variable button, jamais essayé avec getbuttonpressed appelé à chaque test donc je sais pas si ça marche comme tu as fait dans ta première variante) et faire tes tests sur le résultat à ce moment là.

Typiquement ça donne ça :

short controlvar
short button

if( onactivate == 1 )
  messagebox "toto ?" "oui" "non"
  set controlvar to 1
endif

if( controlvar == 1 )

  set button to getbuttonpressed

  if( button == -1 )
	return
  elseif( button == 0 )
; oui
  elseif( button == 1 )
; non
  endif

  set controlvar to 0

endif

Je t'invite à lire des références ou tutoriaux de scripting pour en apprendre plus sur cette commande.
You look like you need a monkey!

Attention : perfectionniste paresseux.

#3 Korfandar

Korfandar

    Ch'ti dragon normand...dans son trou


Posté 02 juillet 2009 - 11:10

C'est parce que getbuttonpressed n'est pas bloquant et donc doit être testé hors les if qui ont affichés le message de question donc en dehors du if du onactivate.
En effet getbuttonpressed doit être testé à chaque frame

D'où le code (non testé) :
Begin Drs_food_script

Short button
Short button2
short messageon

if ( onactivate == 1 )
	if ( DRs_playerfood == 0 )
		messagebox "Il n'y a pas de nourriture disponible pour vous, cependant vous pouvez avoir de l'eau.", "Non, merci", "S'il-vous-plait"
		set messageon to 1
	else
		messagebox "Que voulez-vous ?", "Eau", "Alcool", "Cote de chien en sauce au miel", "Rat avec légumes braisés", "Scrib séché, sauce céréales", "Oeuf à la coque version coupe-faim", "Oeuf à la coque avec lit de racine", "Plat spécial entrainement"
		set Drs_playerfood to 0
		set messageon to 2
	endfi
endif

if ( messageon == 1 )
	set button to Getbuttonpressed
	if ( button == 1)
		placeitem Drs_waterbottle_02, 6180, 5337, 12183, 0
		set messageon to 0
	endif
endif

if ( messageon == 2 )
	set button2 to getbuttonpressed
	if ( button2 == -1 )
		return
	endif
	set messageon to 0
if ( button2 == 0 )
messagebox "Voici."
placeitem Drs_waterbottle_02, 6180, 5337, 12183, 0
elseif ( button2 == 1 )
messagebox "Allez le chercher au bar prévu à cet effet, aux cavernes inférieures."
elseif ( button2 == 2 )
messagebox "Voici."
placeitem ingred_hound_meat_01, 6244, 5325, 12169, 0
placeitem ingred_comberry_01, 6242, 5330, 12168, 5400
placeitem ingred_comberry_01, 6247, 5333, 12169, 10800
placeitem ingred_bread_01, 6214, 5278, 12172, 0
placeitem Drs_waterbottle_02, 6180, 5337, 12183, 0
elseif ( button2 == 3 )
messagebox "Voici."
placeitem ingred_rat_meat_01, 6249, 5327, 12169, 0
placeitem ingred_scuttle_01, 6238, 5326, 12170, 0
placeitem ingred_scuttle_01, 6243, 5335, 12169, 5400
placeitem ingred_bread_01, 6214, 5278, 12172, 0
placeitem Drs_waterbottle_02, 6180, 5337, 12183, 0
elseif ( button2 == 4 )
messagebox "Voici."
placeitem ingred_scrib_jerky_01, 6237, 5329, 12170, 0
placeitem ingred_scrib_jerky_01, 6243, 5331, 12170, 0
placeitem ingred_saltrice_01, 6249, 5331, 12172, 0
placeitem ingred_saltrice_01, 6244, 5325, 12172, 5400
placeitem ingred_bread_01, 6214, 5278, 12172, 0
placeitem Drs_waterbottle_02, 6180, 5337, 12183, 0
elseif ( button2 == 5 )
messagebox "Voici."
placeitem food_kwama_egg_02, 6244, 5329, 12178, 0
placeitem misc_com_plate_01, 6258, 5301, 12169, 0
placeitem ingred_trama_root_01, 6260, 5304, 12170, 0
placeitem ingred_trama_root_01, 6256, 5300, 12170, 10800
placeitem ingred_bread_01, 6214, 5278, 12172, 0
placeitem Drs_waterbottle_02, 6180, 5337, 12183, 0
elseif ( button2 == 6 )
messagebox "Voici."
placeitem food_kwama_egg_01, 6244, 5329, 12178, 0
placeitem misc_com_plate_01, 6258, 5301, 12169, 0
placeitem ingred_trama_root_01, 6260, 5304, 12170, 0
placeitem ingred_trama_root_01, 6256, 5300, 12170, 10800
placeitem ingred_bread_01, 6214, 5278, 12172, 0
placeitem Drs_waterbottle_02, 6180, 5337, 12183, 0
elseif ( button2 == 7 )
messagebox "Voici."
placeitem ingred_crab_meat_01, 6244, 5329, 12171, 0
placeitem ingred_saltrice_01, 6240, 5329, 12170, 0
placeitem ingred_saltrice_01, 6244, 5329, 12170, 0
placeitem ingred_saltrice_01, 6248, 5329, 12170, 0
placeitem ingred_bread_01, 6214, 5278, 12172, 0
placeitem Drs_waterbottle_02, 6180, 5337, 12183, 0
endif
endif

end Drs_food_script

L'abus de SMS est dangereux pour l'élocution mentale

Le mod qui révèle (presque) tout sur les dwemers : Dwarmor

Fervent Partisan de l'Instabilité Avatarienne
Quart du quarteron des VGM...


#4 Topsell

Topsell

Posté 02 juillet 2009 - 12:32

Merci beaucoup tous les deux. Cette précision sur la fonction MessageBox m'a permis de tout comprendre. Y a t'il d'autres fonctions particulières comme celle-là tant qu'à faire ?




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

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