Worldedit
  Worldedit
Le site sur l'éditeur de warcraft 3 !
 
  FAQFAQ   RechercherRechercher   Liste des MembresListe des Membres    Groupes d'utilisateursGroupes d'utilisateurs   medals.php?sid=3e1d7d38de0703429087c9b1f191cc91Médailles   S'enregistrerS'enregistrer 
 ProfilProfil   Se connecter pour vérifier ses messages privésSe connecter pour vérifier ses messages privés   ConnexionConnexion 
  FAQFAQ World Editor   UploadUploader une map ou une image    UploadAjouter sa map à l'annuaire   UploadConsulter l'annuaire

[IA] Faire parler un script IA + couleur + nom + son

 
Poster un nouveau sujet   Répondre au sujet    Worldedit Index du Forum -> Tutoriels -> En validation
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
 louisdespi
Floodeur prématuré


Inscrit le: 21 Oct 2007
Messages: 437
Sujets: 70



MessagePosté le: 07/12/12 00:30    Sujet du message: [IA] Faire parler un script IA + couleur + nom + son Citer

I/ Faire parler un script IA + couleur + nom + son

a) Intro

Ce rapide tutoriel a pour but de vous donner un exemple de fonction permettant de faire "parler" une IA comme un autre joueur dans le canal [tous] via son script.ai.

b) Modifier son fichier.ai

Les deux fonctions qui suivent et la définition de variable globale sont à rajouter dans le fichier.ai de l'IA que vous souhaitez faire parler.

Jass:

globals

sound    chatSound                   = CreateSound( "Sound\\Interface\\InGameChatWhat1.wav", false, false, false, 10, 10, "" )
endglobals

function ColorName takes playercolor color, string name returns string

if color == ConvertPlayerColor(0) then

    return "|c00ff0000"+name+"|r : "

elseif color == ConvertPlayerColor(1) then

    return "|c000000ff"+name+"|r : "

elseif color == ConvertPlayerColor(2) then

    return "|c0000ffff"+name+"|r : "

elseif color == ConvertPlayerColor(3) then

    return "|c00660099"+name+"|r : "

elseif color == ConvertPlayerColor(4) then

    return "|c00ffff00"+name+"|r : "

elseif color == ConvertPlayerColor(5) then

    return "|c00ff9933"+name+"|r : "

elseif color == ConvertPlayerColor(6) then

    return "|c0000ff00"+name+"|r : "

elseif color == ConvertPlayerColor(7) then

    return "|c00dd00ff"+name+"|r : "

elseif color == ConvertPlayerColor(8) then

    return "|c00dddddd"+name+"|r : "

elseif color == ConvertPlayerColor(9) then

    return "|c0033ccff"+name+"|r : "

elseif color == ConvertPlayerColor(10) then

    return "|c007fffd4"+name+"|r : "

else

    return "|c00660000"+name+"|r : "

endif


endfunction

//======================================================

function DisplayToAll takes string text returns nothing

    local integer i = 0


    local string add = ColorName(GetPlayerColor(Player(GetAiPlayer())),"")

    loop

        call DisplayTimedTextToPlayer(Player(i),0,0,15,add+text)

        set i = i + 1

        exitwhen i == 12

    endloop

 call StartSound(chatSound)

endfunction


N'oubliez pas de configurer un nom à l'IA en argument de la fonction ColorName.

Jass:
local string add = ColorName(GetPlayerColor(Player(GetAiPlayer())),"")


c) Utiliser le nouveau système

Rien de plus simple ! Il vous suffit d'appeler DisplayToAll et lui donner en argument ce que vous voulez que votre IA dise. Cela peut aussi servir dans le but de réaliser certains test sur votre IA

Jass:
call DisplayToAll("Ce joueur est un joueur controle par l'ordinateur")


Les accents et autres caractères spéciaux ne sont pas supportés.

Imaginons que le joueur soit orange, voici ce que cela donnerait si l'on lui donne comme nom :"Sylvanas (Hauts Elfes)"

Secret:

Jass:
local string add = ColorName(GetPlayerColor(Player(GetAiPlayer())),"Sylvanas (Hauts Elfes)")



Résultat en jeu : Sylvanas (Hauts Elfes) : Ce joueur est un joueur controle par l'ordinateur (avec le petit son du chat)
_________________


Dernière édition par louisdespi le 08/12/12 12:07; édité 2 fois
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Troll-Brain
Ri1kamoua


Inscrit le: 23 Aoû 2007
Messages: 7143
Sujets: 147
Spécialité en worldedit: le troll, le flood, la vulgarité, mon coeur balance
Médailles: 2 (En savoir plus...)
Grand mage créateur de sort (Quantité : 1) Rédacteur de tuto #3 (Quantité : 1)

MessagePosté le: 07/12/12 11:48    Sujet du message: Citer

Au lieu de la loop, si GetLocalPlayer() est utilisable dans un .ai tu peux faire :

call DisplayTimedTextFromPlayer(GetLocalPlayer(),0,0,15,add+s)

From et non ToPlayer, car GetLocalPlayer() bug dans un replay, et DisplayTimedTextFromPlayer affiche le message pour tous les joueurs, du moment que l'argument joueur est valide.
Pour cette fonction l'argument joueur a une autre utilité, l'utilisation des strings spéciaux te que %s (et d'autres ?)

Et pour ColorName j'aurais utilisé une loop plutôt que ce long if.
_________________
Le violet, c'est moche.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 louisdespi
Floodeur prématuré


Inscrit le: 21 Oct 2007
Messages: 437
Sujets: 70



MessagePosté le: 07/12/12 13:00    Sujet du message: Citer

Troll-Brain a écrit:

From et non ToPlayer, car GetLocalPlayer() bug dans un replay


Je ne comprend pas très bien.

Troll-Brain a écrit:

DisplayTimedTextFromPlayer affiche le message pour tous les joueurs, du moment que l'argument joueur est valide.


C'est une autre manière de le faire oui Smile

Troll-Brain a écrit:

Et pour ColorName j'aurais utilisé une loop plutôt que ce long if.


Comment ?


Tu es certain que je peux utiliser GetLocalPlayer dans un .ai?

Au finale mon système marche très bien, je comprend pas trop le problème.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Zeatlan
Floodeur prématuré


Inscrit le: 12 Mai 2012
Messages: 424
Sujets: 60



MessagePosté le: 07/12/12 21:53    Sujet du message: Citer

Question bête : Il est où le fichier AI ? Very Happy
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 louisdespi
Floodeur prématuré


Inscrit le: 21 Oct 2007
Messages: 437
Sujets: 70



MessagePosté le: 07/12/12 22:13    Sujet du message: Citer

La ça dépend, tu peux trouver des fichier .ai de différente manière.

Lesquelles sont :

-Créer une IA via l'éditeur d'IA du World Editor. Et ensuite l'exporter en faisant Ctrl+E ou fichier --> Exporter script...
A l'emplacement que tu auras choisi se trouvera un fichier.ai

-Il y a aussi moyen de récupérer les IA du jeu de base (human.ai, elf.ai, undead.ai ,orc.ai) en utilisant un programme tel que MPQEditor.

-Editer et créer soi-même son propre fichier.ai avec des programmes comme le bloc note ou JassCraft
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Troll-Brain
Ri1kamoua


Inscrit le: 23 Aoû 2007
Messages: 7143
Sujets: 147
Spécialité en worldedit: le troll, le flood, la vulgarité, mon coeur balance
Médailles: 2 (En savoir plus...)
Grand mage créateur de sort (Quantité : 1) Rédacteur de tuto #3 (Quantité : 1)

MessagePosté le: 08/12/12 11:46    Sujet du message: Citer

louisdespi a écrit:
Je ne comprend pas très bien.


http://worldedit.free.fr/forum/viewtopic.php?p=82987#82987

Mais ca ne semble affecter que les choses visuelles, comme les messages textes, ou du moins sans aucun effet sur le déroulement du jeu.
Par exemple si tu sélectionne une unité avec GetLocalPlayer, tous les joueurs auront bien cette unité de sélectionnée, y compris dans le replay.

Citation:
C'est une autre manière de le faire oui Smile


C'est une meilleure façon de faire et qui plus est moins verbeuse.

Citation:
Comment ?


C'est vrai qu'il faudrait aussi stocker les code color dans une variable global string array.

Citation:
Tu es certain que je peux utiliser GetLocalPlayer dans un .ai?


Non, sinon je n'aurais pas employé le mot "si"

Citation:
Au finale mon système marche très bien, je comprend pas trop le problème.


Y'a pas de problème en soi, c'est juste des conseils d'amélioration.
_________________
Le violet, c'est moche.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 louisdespi
Floodeur prématuré


Inscrit le: 21 Oct 2007
Messages: 437
Sujets: 70



MessagePosté le: 08/12/12 11:52    Sujet du message: Citer

J'ignorais le bug du replay, merci du lien. Cependant je ne l'utilise pas (GetLocalPlayer). J'utilise GetAiPlayer même en replay je ne devrais pas être sujet au bug.

Troll-Brain a écrit:
Citation:
Louisdespi a écrit:
Tu es certain que je peux utiliser GetLocalPlayer dans un .ai?


Non, sinon je n'aurais pas employé le mot "si"


Autant pour moi je n'avais pas vu Rolling Eyes

Qu'entends-tu par verbeuse?
_________________


Dernière édition par louisdespi le 08/12/12 11:57; édité 1 fois
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Troll-Brain
Ri1kamoua


Inscrit le: 23 Aoû 2007
Messages: 7143
Sujets: 147
Spécialité en worldedit: le troll, le flood, la vulgarité, mon coeur balance
Médailles: 2 (En savoir plus...)
Rédacteur de tuto #3 (Quantité : 1) Grand mage créateur de sort (Quantité : 1)

MessagePosté le: 08/12/12 11:56    Sujet du message: Citer

Plus de code à écrire -> verbeux.

Par contre il ne faut pas tomber dans l'excès.
Evite ces noms courts pour les arguments de fonction, ils ne sont pas explicites.

J'aurais plutôt choisi "color" et "text" par exemple.
_________________
Le violet, c'est moche.


Dernière édition par Troll-Brain le 08/12/12 11:59; édité 1 fois
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 louisdespi
Floodeur prématuré


Inscrit le: 21 Oct 2007
Messages: 437
Sujets: 70



MessagePosté le: 08/12/12 11:59    Sujet du message: Citer

C'est certes moins verbeux mais cela amènerait le bug du replay avec GetLocalPlayer Wink
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Troll-Brain
Ri1kamoua


Inscrit le: 23 Aoû 2007
Messages: 7143
Sujets: 147
Spécialité en worldedit: le troll, le flood, la vulgarité, mon coeur balance
Médailles: 2 (En savoir plus...)
Rédacteur de tuto #3 (Quantité : 1) Grand mage créateur de sort (Quantité : 1)

MessagePosté le: 08/12/12 12:01    Sujet du message: Citer

louisdespi a écrit:
C'est certes moins verbeux mais cela amènerait le bug du replay avec GetLocalPlayer Wink


Bah non, DisplayTextFromPlayer affiche le message pour tous les joueurs du moment que le joueur en argument est valide, et même en replay il sera valide.
En fait tu peux utiliser n'importe quel joueur valide en argument, GetLocalPlayer c'est juste une solution de facilité.

Et lis mon edit sur le message précédent.
_________________
Le violet, c'est moche.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 louisdespi
Floodeur prématuré


Inscrit le: 21 Oct 2007
Messages: 437
Sujets: 70



MessagePosté le: 08/12/12 12:08    Sujet du message: Citer

Troll-Brain a écrit:
Par contre il ne faut pas tomber dans l'excès.
Evite ces noms courts pour les arguments de fonction, ils ne sont pas explicites.

J'aurais plutôt choisi "color" et "text" par exemple.


Voilà qui est fait !
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    Worldedit Index du Forum -> Tutoriels -> En validation Toutes les heures sont au format GMT + 1 Heure
Page 1 sur 1

 
Sauter vers:  
Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum


Powered by phpBB © 2001, 2005 phpBB Group
Traduction par : phpBB-fr.com