Logo name

Welcome Guest ( Log In | Register )

Discussion
> Afficher un message texte
Afficher un message texte lors d'un evenement

Contexte

Soit un convoi de blindes, qui doit capturer une base ennemie: plusieurs messages doivent etre affiches a l'ensemble des joueurs lorsque le convoi est sur la base

Script

Pour afficher du texte dans le jeu, on utilisera la fonction suivante:

trigger.action.outText('texte a afficher', X)

avec X le nombre de secondes de l'affichage.

Ou bien la fonction:

trigger.action.outTextForCoalition(coalition, 'texte a afficher', X)

qui permet d'afficher le texte aux joueurs d'une seule coalition.


Dans notre exemple, on voudra afficher les textes suivants pendant 10s:

Coalition ROUGE: 'A toutes les patrouilles, le 5eme regiment vient de s'emparer de la base de Sochi !'
Coalition BLEUE: 'Mission echouee !!! L'ennemi a capture la base'

Puis un message a tout le monde pendant 5s: Tout le monde: 'Merci a tous !'

On devra alors executer les 3 lignes de script suivant:
trigger.action.outTextForCoalition(coalition.side.RED, 'A toutes les patrouilles, le 5eme regiment vient de s'emparer de la base de Sochi !', 10)
trigger.action.outTextForCoalition(coalition.side.BLUE, 'Mission echouee !!! L'ennemi a capture la base', 10)
trigger.action.outText('Merci a tous !', 5)

On a ici deux problemes:

1. Les guillemets
Le texte a afficher est delimite par deux apostrophes simples: '
On a du texte qui contient des apostrophes simples, il faut les modifier pour que ces apostrophes ne soient pas consideres comme la fin du texte, sinon le script ne va plus s'executer correctement ! Il faut donc echapper le caractere simple guillemet que l'on souhaite afficher. Exemple:

'A toutes les patrouilles, le 5eme regiment vient de s'emparer de la base de Sochi !'

devra etre modifie en placant un \ devant chaque guillemet simple qui n'est pas le guillemet final:

'A toutes les patrouilles, le 5eme regiment vient de s\'emparer de la base de Sochi !'

Note: dans le jeu, le caractere \ n'apparaitra pas, et le mot s\'emparer sera bien affiche s'emparer !

2. Seul le dernier message sera affiche

En effet, si on execute a la suite les 3 lignes de scripts, la derniere ligne va venir ecraser les messages precedents, car si du texte est affiche pendant 10 secondes, l'execution du script elle n'attend pas 10 secondes et execute les lignes de script immediatement. Resultat tout le monde verra le dernier message 'Merci a tous !'

Alors comment faire pour laisser les 10 secondes d'affichage des messages precedents ? Et bien en differant l'affichage du troisieme message dans 10 secondes.

Pour cela, on va utiliser une fonction de Mist:

mist.scheduleFunction(function f ,table vars ,number t ,number rep ,number st)

et notre script final devient:

trigger.action.outTextForCoalition(coalition.side.RED, 'A toutes les patrouilles, le 5eme regiment vient de s\'emparer de la base de Sochi !', 10)
trigger.action.outTextForCoalition(coalition.side.BLUE, 'Mission echouee !!! L\'ennemi a capture la base', 10)
mist.scheduleFunction(trigger.action.outText, {'Merci a tous !', 5}, timer.getTime() + 10)

Editeur de Mission

On a le choix de 3 methodes differentes dans notre cas:

1. Utiliser les waypoints du convoi, quand le convoi arrive au waypoint de notre choix, le script sera execute.

Il suffit pour cela de recopier les 3 lignes de notre script a executer dans la case Action du waypoint desire. (screen a venir)

2. Utiliser une zone avec notre script

Il suffit de definir une zone qui englobe la base aerienne de Sochi, appelez-la 'capture Sochi' par exemple, puis definissez le trigger suivant pour que le script soit execute des qu'une partie du convoi penetre dans la zone:

Type: ONCE
Condition: PART OF GROUP IN ZONE (selectionnez la zone 'Sochi Capture' et le groupe du convoi)
Action: DO SCRIPT (copiez/coller nos 3 lignes de script dans la zone de texte dessous)

3. Utilisez une zone avec un trigger pret-a-l'emploi (mais moins puissant)

Il suffit de definir une zone qui englobe la base aerienne de Sochi, appelez-la 'capture Sochi' par exemple,puis definissez 3 triggers suivant pour que le script soit execute des qu'une partie du convoi penetre dans la zone:

Type: ONCE
Condition: PART OF GROUP IN ZONE (selectionnez la zone 'Sochi Capture' et le groupe du convoi)
Action: MESSAGE TO ALL ou bien MESSAGE TO COALITION ou bien MESSAGE TO COUNTRY

Vous renseignez ensuite votre ligne de texte, le temps d'affichage, mais que se passe-t-il si definissez 3 triggers, 1 pour la coalition ROUGE, un pour la coalition BLEUE, et un autre pour tous ? Si cela ne se deroule pas comme prevu, vous savez pourquoi: notre deuxieme probleme, le dernier trigger ecrase les 2 precedents... donc cette solution est utile pour realiser un affichage unique !

Discussion
Dernière modification de cette page le 4 février 2014 à 16:14.
  Cette page a été consultée 153 665 fois.  Contenu disponible sous Creative Commons attribution non commercial partage à l'identiqueAvertissements