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=3387eff476485ed1f80abfcca604f788Mé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

Compétences sur commande
Aller à la page 1, 2  Suivante
 
Poster un nouveau sujet   Répondre au sujet    Worldedit Index du Forum -> Aide sur les déclencheurs
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
 rgf
Membre reconnu


Inscrit le: 09 Mar 2009
Messages: 1154
Sujets: 54
Spécialité en worldedit: Croâ ?


MessagePosté le: 22/05/10 14:41    Sujet du message: Compétences sur commande Citer

Salut tout l'monde !
Je cherche à créer un déclencheur qui, lorsqu'un joueur écrit le nom d'une compétence, ajoute cette compétence à l'unité sélectionnée par le joueur.
Mais j'aimerais que ça marche pour toutes les compétences, sans avoir à toutes les définir et toussa. Et j'aimerais savoir comment faire la même démarche avec les objets. J'ai réussi avec les unités mais je trouve pas quelque chose qui correspondrait à une conversion de "String" à compétence, ou "String" à objet.
_________________
Croâh ?
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Tirlititi



Inscrit le: 21 Fév 2010
Messages: 1785
Sujets: 22
Spécialité en worldedit: La modestie
Médailles: 1 (En savoir plus...)
Grand mage créateur de sort (Quantité : 1)

MessagePosté le: 22/05/10 15:23    Sujet du message: Citer

A ma connaissance, c'est pas possible d'identifier (facilement) une compétence à partir de son nom : Blizzard a fait une fonction "AbilityId" qui ferait exactement ça mais qui ne marche pas du tout Laughing .

Par contre, c'est possible d'avoir le nom de la compétence à partir de son ID (l'inverse, quoi) avec la fonction "GetObjectName". Donc tu peux mettre tes compétences dans une variable déployée (variable de type "Capacité") et vérifier 1 par 1 si le nom correspond à celui entré dans le chat :

Jass:
function Trig_CompChat_Actions takes nothing returns nothing
    local integer i = 0
    loop
        exitwhen i > NOMBRE DE CAPACITES
        if (GetEnteredChatString() == GetObjectName( udg_VariableCapacite[i] )) then
//       TES ACTIONS : le nom entré dans le chat est celui de la compétence "udg_VariableCapacite[i]".
        endif
        set i = i + 1
    endloop
endfunction


Idem pour les objets, tu remplaces la variable de capacité par une variable d'objet (la fonction "GetObjectName" peut prendre les deux, c'est d'ailleurs une raison pour laquelle elle n'est pas en GUI à mon avis).

Évidemment, il faut définir les variables et ça empêche de pouvoir le faire avec toutes les compétences comme tu aurais voulu.

EDIT : j'ai fait un petit test avec une fonction
Jass:
function Trig_CompChat_Actions takes nothing returns nothing
    local integer i = 1000000000
    loop
        exitwhen i > 1100000000
        if (GetEventPlayerChatString() == GetObjectName(i)) then
            call UnitAddAbility(FirstOfGroup(GetUnitsSelectedAll(GetTriggerPlayer())),i)
        endif
        set i = i + 1
    endloop
endfunction

et, malheureusement, la boucle est abandonnée après +/- 785 tentatives, ce qui est largement insuffisant puisque les ID des compétences varient avec des écarts de plusieurs millions.
Donc à moins de mettre dans une variable déployée toutes les compétences, c'est pas possible Crying or Very sad .
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 rgf
Membre reconnu


Inscrit le: 09 Mar 2009
Messages: 1154
Sujets: 54
Spécialité en worldedit: Croâ ?


MessagePosté le: 22/05/10 16:19    Sujet du message: Citer

Pas moyen de le faire en GUI ?
Et avec cette méthode on est obligé de définir chaque compétence 1 par 1 , il n'y a donc aucun moyen de faire sans ?
Et sinon, tu peux finir le déclencheur stp, car jconnais pas les fonctions qui font ajouter à une unité telle compétence.
_________________
Croâh ?
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Tirlititi



Inscrit le: 21 Fév 2010
Messages: 1785
Sujets: 22
Spécialité en worldedit: La modestie
Médailles: 1 (En savoir plus...)
Grand mage créateur de sort (Quantité : 1)

MessagePosté le: 22/05/10 17:16    Sujet du message: Citer

Nop, la fonction GetObjectName n'est pas accessible en GUI.

Le déclencheur complet, ça donne :
Jass:
function Trig_CompChat_Actions takes nothing returns nothing
    local integer i = 0
    loop
        exitwhen i > *Nombre de compétences dans la variable*
        if (GetEventPlayerChatString() == GetObjectName(udg_*VariableCapacité*[i])) then
            call UnitAddAbility(FirstOfGroup(GetUnitsSelectedAll(GetTriggerPlayer())),udg_*VariableCapacité*[i])
        endif
        set i = i + 1
    endloop
endfunction

//============================
function InitTrig_CompChat takes nothing returns nothing
    set gg_trg_CompChat = CreateTrigger()
    call TriggerRegisterPlayerChatEvent( gg_trg_CompChat, ConvertedPlayer(1), "", false )
    call TriggerRegisterPlayerChatEvent( gg_trg_CompChat, ConvertedPlayer(2), "", false )
    call TriggerRegisterPlayerChatEvent( gg_trg_CompChat, ConvertedPlayer(3), "", false )
    *...*
    call TriggerAddAction( gg_trg_CompChat, function Trig_CompChat_Actions )
endfunction

Le déclencheur s'appelle CompChat et ce qui est entre * est laissé à ton soin.
Je ne crois pas qu'il y ait un moyen de faire sans stocker chaque compétence 1 par 1 (peut-être qu'il y a un logiciel qui permet de faire ça sur le net mais j'en doute).
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 rgf
Membre reconnu


Inscrit le: 09 Mar 2009
Messages: 1154
Sujets: 54
Spécialité en worldedit: Croâ ?


MessagePosté le: 22/05/10 21:33    Sujet du message: Citer

ok merci alors !
_________________
Croâh ?
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 rgf
Membre reconnu


Inscrit le: 09 Mar 2009
Messages: 1154
Sujets: 54
Spécialité en worldedit: Croâ ?


MessagePosté le: 22/05/10 23:36    Sujet du message: Citer

Je n'arrive pas à le faire marcher...
Jass:
function Trig_CompChat_Actions takes nothing returns nothing
    local integer i = 0
    loop
        exitwhen i > 2
        if (GetEventPlayerChatString() == GetObjectName(udg_VariableCapacite[i])) then
            call UnitAddAbility(FirstOfGroup(GetUnitsSelectedAll(GetTriggerPlayer())),udg_VariableCapacite[i])
        endif
        set i = i + 1
    endloop
endfunction

//============================
function InitTrig_CompChat takes nothing returns nothing
    set gg_trg_CompChat = CreateTrigger()
    call TriggerRegisterPlayerChatEvent( gg_trg_CompChat, ConvertedPlayer(1), "", false )
    call TriggerRegisterPlayerChatEvent( gg_trg_CompChat, ConvertedPlayer(2), "", false )
    call TriggerRegisterPlayerChatEvent( gg_trg_CompChat, ConvertedPlayer(3), "", false )
    call TriggerAddAction( gg_trg_CompChat, function Trig_CompChat_Actions )
endfunction
voila ce que j'ai,j'ai bien défini ma VariableCapacite comme variable à 2 index déploiement, le premier index étant Lenteur et le second étant Sarments.
_________________
Croâh ?
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Tirlititi



Inscrit le: 21 Fév 2010
Messages: 1785
Sujets: 22
Spécialité en worldedit: La modestie
Médailles: 1 (En savoir plus...)
Grand mage créateur de sort (Quantité : 1)

MessagePosté le: 22/05/10 23:47    Sujet du message: Citer

Qu'est-ce qui ne marche pas? Ça plante lors de l'enregistrement où ça ne semble rien faire?
A priori, c'est bon, il faut juste mettre ça dans un déclencheur "CompChat" (et pas dans la partie Custom Script Code).
Peut-être aussi que c'est un problème de majuscules, vérifies que tu les mets en jeu.

Si tu veux pouvoir tout mettre en minuscule, faut remplacer la ligne "if / then" par :

Jass:
if (StringCase(GetEventPlayerChatString(),false) == StringCase(GetObjectName(udg_VariableCapacite[i]),false)) then

_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 rgf
Membre reconnu


Inscrit le: 09 Mar 2009
Messages: 1154
Sujets: 54
Spécialité en worldedit: Croâ ?


MessagePosté le: 23/05/10 14:13    Sujet du message: Citer

Ca marche très bien merci Very Happy
Et comment je peux faire dans un deuxième déclencheur pour que lorsque je dise "-Sarments" tout en sélectionnant une unité qui a déjà Sarments, l'unité sélectionnée perde Sarments ?
_________________
Croâh ?
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Tirlititi



Inscrit le: 21 Fév 2010
Messages: 1785
Sujets: 22
Spécialité en worldedit: La modestie
Médailles: 1 (En savoir plus...)
Grand mage créateur de sort (Quantité : 1)

MessagePosté le: 23/05/10 14:53    Sujet du message: Citer

Tu remplaces "" (dans le TriggerRegister) par "-", UnitAddAbility par UnitRemoveAbility et
StringCase(GetObjectName...
par
StringCase("-"+GetObjectName...
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 rgf
Membre reconnu


Inscrit le: 09 Mar 2009
Messages: 1154
Sujets: 54
Spécialité en worldedit: Croâ ?


MessagePosté le: 23/05/10 19:19    Sujet du message: Citer

Génial merci beaucoup, tout fonctionne !

Et pour les items, comment je fais ? J'aimerais que sous le même principe, quand j'écris "!masque sobi" , un masque sobi apparaît au centre de la région 000, et que quand j'écris "!give masque sobi", un masque sobi se créé directement dans l'inventaire de l'unité sélectionnée.
_________________
Croâh ?
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Tirlititi



Inscrit le: 21 Fév 2010
Messages: 1785
Sujets: 22
Spécialité en worldedit: La modestie
Médailles: 1 (En savoir plus...)
Grand mage créateur de sort (Quantité : 1)

MessagePosté le: 23/05/10 19:45    Sujet du message: Citer

Tu remplaces la variable de capacité par une variable d'objet et la fonction UnitAddAbility par UnitAddItemById :
Jass:
if (StringCase(GetEventPlayerChatString(),false) == StringCase(GetObjectName(udg_VariableObjet[i]),false)) then
    call UnitAddItemById(FirstOfGroup(GetUnitsSelectedAll(GetTriggerPlayer())),udg_VariableObjet[i])


Tu peux connaitre les noms des fonctions en mettant les actions correspondantes en GUI et en faisant "Convertir en texte personnalisé" ensuite. Tu peux aussi chercher les fichiers Common.j et Blizzard.j Idea
_________________
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: 23/05/10 20:15    Sujet du message: Citer

Attention GetObjectName renvoie le string local au langage du joueur, gare aux désynchronisations !!!
Mais si tu changes manuellement toi même le nom, alors tous les joueurs auront la même chaîne, quel que soit leur langage.

Sinon plutôt que faire une loop tu pourrais utiliser une table de hachage, après tout c'est fait pour ce genre de cas.
Il te faudrait certes rajouter manuellement chaque compétence, mais c'est plus propre.
_________________
Le violet, c'est moche.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 rgf
Membre reconnu


Inscrit le: 09 Mar 2009
Messages: 1154
Sujets: 54
Spécialité en worldedit: Croâ ?


MessagePosté le: 13/06/10 11:59    Sujet du message: Citer

Citation:
Tu peux connaitre les noms des fonctions en mettant les actions correspondantes en GUI et en faisant "Convertir en texte personnalisé" ensuite. Tu peux aussi chercher les fichiers Common.j et Blizzard.j Idea


Je n'arrive pas à mettre la main sur ces fichiers !
_________________
Croâh ?
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Tirlititi



Inscrit le: 21 Fév 2010
Messages: 1785
Sujets: 22
Spécialité en worldedit: La modestie
Médailles: 1 (En savoir plus...)
Grand mage créateur de sort (Quantité : 1)

MessagePosté le: 13/06/10 12:23    Sujet du message: Citer

Oula, j'avais jamais pensé à la desync. Faut dire que tous mes spells/unités ont un nom personnalisé mais il faudra que j'y fasse attention quand je vanterai les vertus de cette fonction (sans doute une autre raison pour laquelle elle n'est pas en GUI).

Pour rgf, si tu trouves pas ces fichiers, c'est parce que t'as pas cherché, patate ! Razz (je sais je suis méchant)
Ils sont facilement trouvables sur le net (exemple) et ils sont dans ton war3Patch.mpq (qui est lui-même dans ton dossier W3 et ouvrable avec l'un des nombreux éditeurs MPQ disponibles sur le net).
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 rgf
Membre reconnu


Inscrit le: 09 Mar 2009
Messages: 1154
Sujets: 54
Spécialité en worldedit: Croâ ?


MessagePosté le: 13/06/10 21:49    Sujet du message: Citer

Ah mais jcroyais que c'était des fichiers qui étaient directement dans le répertoire Warcraft moi x)
Mais je les ouvre comment ces fichiers common.j et blizzard.j ?
_________________
Croâh ?
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 -> Aide sur les déclencheurs Toutes les heures sont au format GMT + 1 Heure
Aller à la page 1, 2  Suivante
Page 1 sur 2

 
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