[Résolu] Script de l'établi (Workbench) : base de la programmation

Vous trouverez ici les tutoriels et l'entraide sur les outils et techniques de modding spécifiques à Fallout 3.
Exceteraviking
Traducteur aspirant
Traducteur aspirant
Messages : 64

Re: Aide de moddeur pour scripter

Message par Exceteraviking »

Salut

Oui, j'ai oublié des endif après les if. J'suis allé trop vite :roll: . Mais j'en ai mis ds le script où il fallait (enfin, je crois).

J'ai terminé de remplir le script (principalement du copier coller de bloc).
Je l'uploaderais après l'avoir rempli de commentaire et aéré un peu. A mon retour de belgique et de promenade ^^. Il fait super beau en ce moment, j'me dois d'en profiter :D.
Si tu veux tester plusieurs choses pour une seule instruction, utilise les AND et OR.
Le problème, c'est que j'ai lu que le AND & OR n'existait pas dans le geck (il me semble,). Ou alors, je n'en ai jamais vu. J'ai vu ça que dans la section opérateur, et ce sont les symbôle && et ||. Pas de NOT ni de XOR:
Although the NOT and XOR logical operators are not available, you can still achieve the same output by using "A == 0" in the place of "NOT A" and "(A||B)-(A&&B)" in the place of "A XOR B".
Même le script original, il utilise des if plutôt que des AND :

Code : Tout sélectionner

Begin OnActivate
	if IsActionRef player == 1
		; display message box of possible weapons
		set HasItems to 0

		if GetHasNote SchematicsBottlecapMineNote == 1  || GetHasNote SchematicsDartGunNote == 1  || GetHasNote SchematicsDeathclawGauntletNote == 1
			set HasItems to 1
		endif
		if GetHasNote SchematicsNukaCocktailNote == 1  || GetHasNote SchematicsRailwayRifleNote == 1  || GetHasNote SchematicsRockitLauncherNote == 1  || GetHasNote SchematicsShishkebabNote == 1
			set HasItems to 1
		endif
		if GetHasNote SchematicsBottlecapMineNote10 == 1  || GetHasNote SchematicsDartGunNote10 == 1  || GetHasNote SchematicsDeathclawGauntletNote10 == 1
			set HasItems to 1
		endif
		if GetHasNote SchematicsNukaCocktailNote10 == 1  || GetHasNote SchematicsRailwayRifleNote10 == 1  || GetHasNote SchematicsRockitLauncherNote10 == 1  || GetHasNote SchematicsShishkebabNote10 == 1
			set HasItems to 1
		endif
		if GetHasNote SchematicsBottlecapMineNote20 == 1  || GetHasNote SchematicsDartGunNote20 == 1  || GetHasNote SchematicsDeathclawGauntletNote20 == 1 || GetHasNote SchematicsRockitLauncherNote30 == 1
			set HasItems to 1
		endif
		if GetHasNote SchematicsNukaCocktailNote20 == 1  || GetHasNote SchematicsRailwayRifleNote20 == 1  || GetHasNote SchematicsRockitLauncherNote20 == 1  || GetHasNote SchematicsShishkebabNote20 == 1
			set HasItems to 1
		endif

		if HasItems == 1
			ShowMessage SchematicsWorkbenchMsg
		else
			ShowMessage SchematicsWorkbenchNoneMsg
		endif
	endif

End

Personellement, j'aurais mis tout les "if GetHasNote" sur une seule ligne. J'espère que c'est pas limité à 4 conditions (j'ai un objet ou deux qui ont besoin de 6 objets pour être fabriqués, dc 6 variables). Sûrement pour que ça soit plus agréable à lire.


Enfin, voilà, je crois avoir saisi comment il fallait procéder. Pour le moment, je n'en suis qu'à modifier un script existant. J'ose pas encore penser à taper un script de rien. J'ferais les tutoriels pour beginners plus tard.

Pour les appels de script, oui, j'avais pensé à ça, appeler un script par "bouton"/catégorie d'objet à construire. Parce que le script terminé avec le minimum de commentaire pèse déja 72Kb. En effet, ce sera plus facile pour rajouter des armes à fabriquer. J'vais aller voir sur F3N, ils doivent déja savoir comment faire.

Si j'ai besoin d'aide ou des questions, tu peux être sür que je reviendrais içi même pour demander. J'ai aucun scrupule de ce coté là! :lol:
morghoth a écrit :Recherche testeurs pour mods traduits.PM s.v.p. :)
Sherman
Confrère
Messages : 131

Re: Aide de moddeur pour scripter

Message par Sherman »

Il fait super beau en ce moment, j'me dois d'en profiter
C'est clair !! Ca faisait un moment qu'on n'avait pas eu un temps pareil.
Le problème, c'est que j'ai lu que le AND & OR n'existait pas dans le geck (il me semble,). Ou alors, je n'en ai jamais vu. J'ai vu ça que dans la section opérateur, et ce sont les symbôle && et ||.
C'est vrai, pardon, je dis toujours AND et OR parce que c'est bien plus rapide à taper, mais c'est vrai que la syntaxe correspondante est && et les deux barres verticales, que je ne retrouve plus d'ailleurs sur le clavier de mon  .... :oops: :lol:
J'espère que c'est pas limité à 4 conditions (j'ai un objet ou deux qui ont besoin de 6 objets pour être fabriqués, dc 6 variables).
Au pire si c'est le cas, tu imbriques les deux dernières conditions dans les premières :

Code : Tout sélectionner

if Item1 >=x1 && Item2>=x2 && Item3 >=x3 && Item4>=x4
.......... if Item6 >= x6 && Item7 >= x7
...................... //Là tu as tout
..........elseif Item6 >= x6 && Item7 < x7
...................... //Là il manque l'item 7
..........elseif Item6 < x6 && Item7 >= x7
...................... //Là il manque l'item 6
......... else //là il manque les items 6 et 7
......... endif
elseif... etc
Le problème, c'est que c'est super lourd comme syntaxe... c'est le problème des tests logiques, on a vite fait de faire beaucoup de lignes.
Ce serait sympa que tu postes ton script une fois "presque terminé" que l'on regarde si on peut faire sauter quelques lignes en étant plus malins.
J'ose pas encore penser à taper un script de rien. J'ferais les tutoriels pour beginners plus tard.
Tu pourrais pourtant, maintenant que tu as compris la base. Ce n'est pas plus compliqué.

Je réfléchis à la meilleure façon pour toi d'appeler tes scripts, mais pour avoir une idée plus juste, il faudrait que tu me dises combien de scripts tu prévois, ou d'objets réparables...
Parce que si tu découpes en 5 scripts, ce ne sera pas la même chose qu'en 25 (en même temps avoir besoin de 25 scripts... faut y aller déjà ! )
Si tu peux me dire ça, je te trouverais un moyen de gérer ça.
Exceteraviking
Traducteur aspirant
Traducteur aspirant
Messages : 64

Re: Aide de moddeur pour scripter

Message par Exceteraviking »

Et bien je viens de finir de commenter le script. Les premières fois que les synthaxe apparaissent en tout cas. Parce que ça n'aurait servis à rien pour les autre qu'à me dégouter des scripts. ^^

Y a 26 blocs sur le même schéma contenu dans le bloc GameMode. Et le bloc de départ BeginOnActivate.

Ca fait 1639 lignes environs pour le script non commenté et "un peu" aéré anarchiquement ( ya des erreurs dedans d'ailleurs). Et le script commenté que je vais posté là, il fait ...(je regarde ça)...1906 :o :shock: :P :lol:
Le script de base du type que j'ai "réparé", il faisait 784 lignes tout compressé (sans retour à la ligne/tabulations inutiles, et le minimum syndical de commentaires).
Le script de base du jeu, il fait son petit 388 lignes mais ne contient que 7 objets à fabriquer tandis que les autres en contiennent 26, ce qui était quand même le but de la manoeuvre (+ le stockage des pièçes dans un conteneur + un confort d'utilisation supplémentaire).

Je le poste dans le message suivant (s'il veux bien rentrer).
morghoth a écrit :Recherche testeurs pour mods traduits.PM s.v.p. :)
Exceteraviking
Traducteur aspirant
Traducteur aspirant
Messages : 64

Re: Aide de moddeur pour scripter

Message par Exceteraviking »

C'est très long. J'ai dü le scinder, il y avait une bande noir au milieu. :lol:
► Afficher le texte
La suite après.
Modifié en dernier par Exceteraviking le 24 mai 2009, 23:24, modifié 4 fois.
morghoth a écrit :Recherche testeurs pour mods traduits.PM s.v.p. :)
Exceteraviking
Traducteur aspirant
Traducteur aspirant
Messages : 64

Re: Aide de moddeur pour scripter

Message par Exceteraviking »

► Afficher le texte
Sinon, on le trouve à cette adresse :Workbench script TEST v2.1.txt
morghoth a écrit :Recherche testeurs pour mods traduits.PM s.v.p. :)
Exceteraviking
Traducteur aspirant
Traducteur aspirant
Messages : 64

Re: Aide de moddeur pour scripter

Message par Exceteraviking »

Sherman a écrit :
Je réfléchis à la meilleure façon pour toi d'appeler tes scripts, mais pour avoir une idée plus juste, il faudrait que tu me dises combien de scripts tu prévois, ou d'objets réparables...
Parce que si tu découpes en 5 scripts, ce ne sera pas la même chose qu'en 25 (en même temps avoir besoin de 25 scripts... faut y aller déjà ! )
Si tu peux me dire ça, je te trouverais un moyen de gérer ça.
Et bien avec les gars de F3N, l'idée la plus acceptable, pour contourner la limitation de taille de script, c'est en effet de le découper.

J'ai choisi de faire 10 script. Le script de départ. Et un script par bouton. Qui contiendrait les 9 objets max à fabriquer. Mais avoir un max de 82 scripts (le script de départ + les 9 catégories d'objets contenant 9 objets (c'est le max des boites de messages en fait) est une idée séduisante pour pouvoir ajouter / retirer facilement des recettes de fabrications par la suite. Encore que ce n'est plus bien trop compliqué d'éditer les 9 scripts de catégorie.

Pour appeler les scripts, j'essaie de comprendre cette page là
Ca parle de la commande ACTIVATE, mais je saisi pas trop comment appeler un autre script (celui du bouton préssé ->.

Code : Tout sélectionner

	if ( FirstPressedButton == -1 )
		set FirstPressedButton to GetButtonPressed
		if FirstPressedButton == 1	; ammo
			set Button2 to -1					
			Button2.Activate ?????Comment lui dire que le script 																											BOUTON2 doit se lancer?
			return

A part cette piste, il y a la starquest/stopquest
M3hdi a l'air de bien sentir cette voie là. J'serais bien de son avis si j'étais à l'aide aise avec les script de quête.
Sinon, je continu de fouiller pour voir. Le Wiki du GECK est vraiment mal foutu je trouve.
Le site des petits ratons laveurs est beaucoup plus mieux formé ^^ :p
Modifié en dernier par Exceteraviking le 25 mai 2009, 22:06, modifié 2 fois.
morghoth a écrit :Recherche testeurs pour mods traduits.PM s.v.p. :)
Sherman
Confrère
Messages : 131

Re: Aide de moddeur pour scripter

Message par Sherman »

Bonsoir Execteraviking !

J'ai dormi 3 heures la nuit dernière à cause d'un foutu rapport à terminer, je suis donc trop à côté de la plaque ce soir pour porter l'attention qu'il mérite à ton script.

Aussi, pour ne pas te dire de bêtises, je regarderais ça attentivement demain matin !

En attendant, je peux par contre te dire que si tu décides de couper ton script en 9 autres, alors oui, ce sera jouable avec des quêtes, car une petite dizaine de quêtes c'est très correct.

En revanche, si tu le coupes en 82, il me semble déraisonnable de créer 82 quêtes...

Pour les quêtes et les scripts de quête, ça, je pourrais t'aider, aucun soucis !

Edit : on passerait les arguments en globales, et le tour sera joué.
Exceteraviking
Traducteur aspirant
Traducteur aspirant
Messages : 64

Re: Aide de moddeur pour scripter

Message par Exceteraviking »

M'en parle pas. Je tape pas de rapports mais je potasse pareil :lol: .

J'aimerais vraiment savoir comment appeler un script dans un autre script. J'ai pas envie de faire la méthode du tutorial (qui propose d'ajouter un objet à l'inventaire.
*Puis lorsque l'objet se trouve dans l'inventaire, le script démarre).
En fait, ca m'as tellement pris la tête que je veux faire le tour et tout comprendre pour le laisser derrière moi avant de me pencher sur le système de quête.

Je peine depuis 5h passées sur mon post du dessus et ce qui suit. J'ai du mal à faire coller le tout. J'ai 3 ou 4 pages du wiki du GECK ouvertes en permanence, et je trouve que c'est très mal expliqué pour les newbies. J'ai jamais eu de cours de programmation, et je le sens passer :shock: .
You can nest activations within other activations. For instance, a quest script activates an activator

Code : Tout sélectionner

SomeActivator.Activate player, 1
which in turn activates another activator

Code : Tout sélectionner

scn SomeActivatorScript

begin onActivate
  SomeOtherActivator.Activate player, 1
end
J'ai créé un activator scripté. Mais impossible de le lancer par un script. Alors, je l'ai placé dans la Cell avec une réference persistante en lui fourgant le mesh d'un Marker. Mais là encore. Ca veux pas. Le Geck me renvoi tjrs les même erreurs: mauvaise syntaxe -> invalidreference, invalid object reference, Variable reference pas bonne etc etc...
Après, il faut savoir mettre ça dans un bloc, OnActivate ou GameMode en dessous du premier etc etc

J'ai l'impression de regarder Mulholland Drive après 3jrs d'insomnie. Je patauge, c'est l'horreur. Quand je pense que je sens que c'est con comme la lune, ça m'ennerve encore plus ! :D :lol:
Sherman
Confrère
Messages : 131

Re: Aide de moddeur pour scripter

Message par Sherman »

Effectivement, tu peux faire un activator avec n'importe quel objet (verre, flingue...) Donc également avec un xMarker.

Tu crées ton activateur, comme tu l'as fait (ID unique bien sûr, etc...). Tu lui attaches ton script en "Begin OnActivate" si tu veux que quelque chose se passe lors de l'activation.
Tu n'as plus qu'à placer cet activateur dans une Cell du monde, en l'occurrence la maison de Megaton.

A ce stade, tu n'oublieras pas de donner une REFERENCE à ton activateur. C'est cette référence qu'il faudra utiliser dans le script.

Voilà, j'ai donné des détails que tu n'ignores sûrement pas, mais au cas où quelqu'un dautre se pose un jour la même question...

Mais bon, si tu suis scrupuleusement ces étapes, en n'oubliant surtout pas la REFERENCE (editor référence) je ne vois vraiment pas pourquoi ça ne fonctionnerait pas ! Tiens moi au courant quoi qu'il en soit.

La méthode consistant à ajouter un objet à l'inventaire (ce à quoi je n'aurais pas pensé) est certainement la plus simple (il suffit ensuite d'enlever l'objet à la fin) avec celles des quêtes je pense.
A voir...
Dis moi déjà pour les activateurs, on verra ensuite.

Et je suis d'accord avec toi qu'il est vraiment difficile de trouver ce que l'on cherche sur le wiki... ;)

EDIT :

Je regarde ton script. Bon, ce qui est bien c'est que les commentaires aident à le comprendre quand on ne l'a pas écrit (c'est le but, tu me diras ! :lol: ); mais comme tu en as vraiment mis la masse, tu vas pouvoir en supprimer plein lors du passage dans le GECK

par exemple :

Code : Tout sélectionner

short Button2 					; Bouton des munitions
peut devenir

Code : Tout sélectionner

short Button2 					; for ammo
ou encore

Code : Tout sélectionner

short  PlayerItem1  			; Nombres de pièces détachées n°1 que le joueur possède dans son inventaire
devient

Code : Tout sélectionner

short  PlayerItem1  			; spare parts 1 player count
Et ainsi de suite. Il sera également inutile de commenter tous les blocs où tu changes seulement le 1 en 2 et ainsi de suite (y compris les variables).

Autre chose : je ne sais pas si le GECK accepte les commentaires sur plusieurs lignes vu qu'il n'existe pas de balises pour bloc de commentaire ( à ma connaissance en tout cas).
Il faudra donc que tu prennes garde à bien commencer tes lignes de commentaires par ;

Code : Tout sélectionner

Si la somme des pièces n° 1&2&3 en possession du joueur ET de la caisse de l'établis sont supérieurs à la quantité de pièces n°1&2&3 necessaire à la fabrication de l'objet
Tu pourras aussi enlever ce genre de commentaire dans ton script final.

Mais c'est du bon boulot.

Finalement, au vu de ton script, je dirais que tu peux le couper facilement, et mettre les bouts sur des activateurs que tu lanceras au bon moment.
Je présume que tu veux couper à ce genre de moment : (juste avant en fait)

Code : Tout sélectionner

if ( Button3 == -1 )	; armor
		set Button3 to GetButtonPressed
			
		if Button3 == 1	; infiltrator hat
?

Solution : activators ( 9) ou quête (1 seule, 10 stages) A toi de décider !
Exceteraviking
Traducteur aspirant
Traducteur aspirant
Messages : 64

Re: Aide de moddeur pour scripter

Message par Exceteraviking »

Sherman a écrit : Tu lui attaches ton script en "Begin OnActivate" si tu veux que quelque chose se passe lors de l'activation.
Et bien c'est ça le gros problème.

Comment attacher le script dans le Bloc OnActivate.

Parce que s'il s'active...., et bien rien ne se passe. Sur F3N, on me dit, à juste titre que la commande activate, ça "active l'objet". Un container s'ouvre et son contenu apparait. Un PNJ se met à parler, une porte s'ouvre et un objet est intégré à l'inventaire.
Je suis tout à fait d'accord. en étendant, on dirait : Un établi (qui est un activateur) active son script non? Donc, pourquoi cet activateur, ne s'active pas quand j'appuis sur le bouton 1 de la boite de message?

Dois je trouver la RefID de la boite de message? Ou alors, c'est impossible parce que la boite de message n'est pas un objet (et ses boutons aussi donc) ? C'est peut être ça le problème.

Je vais continuer à chercher avec ce qui suit là:
J'ai trouvé dans les propriétés des activator des onglets sur: Linked Ref/ Active Parent / Enable Parent. Mais je peine à les utiliser comme tout nouveau truc que je découvre. Et puis Active parent a pas l'air de fonctionner correctement. Rien ne s'affiche dans la liste.

J'ai mis de coté, le BIG script que tu m'as aidé à écrire. Et je me penche sur ça :

Etabli est activé par le joueur => Son script se lance (c'est dingue) => J' appuis sur le premier bouton de la boite de message qui s'est affichée => Ca DEVRAIT appeller l'Activateur du Bouton 01 à s'activer => L'activateur du bouton 01 est scripté et affiche un message une fois qu'il a été activé par l'établi.

L'avant dernière étape fonctionne pas ! :lol:


J'espère que les quête m'apporteront satisfaction (j'ai peur de me retrouver avec des boite de conversation plutôt que de message)


Pour les commentaire, oui, je sais, j'ai bourré à mort pour pas perdre de temps sur le forum à expliquer pourquoi tel ligne etc. C'était mon intention d'épurer le maximum une fois que j'aurais intégré le script. :D
morghoth a écrit :Recherche testeurs pour mods traduits.PM s.v.p. :)
Répondre

Retourner vers « Modder Fallout 3 »