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â ?
|
|
Revenir en haut |
|
|
Tirlititi
Inscrit le: 21 Fév 2010 Messages: 1785 Sujets: 22 Spécialité en worldedit: La modestie Médailles: 1 (En savoir plus...)
|
Posté le: 22/05/10 15:23 Sujet du message: |
|
|
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 .
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 . _________________
|
|
Revenir en haut |
|
|
rgf Membre reconnu
Inscrit le: 09 Mar 2009 Messages: 1154 Sujets: 54 Spécialité en worldedit: Croâ ?
|
|
Revenir en haut |
|
|
Tirlititi
Inscrit le: 21 Fév 2010 Messages: 1785 Sujets: 22 Spécialité en worldedit: La modestie Médailles: 1 (En savoir plus...)
|
Posté le: 22/05/10 17:16 Sujet du message: |
|
|
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 |
|
|
rgf Membre reconnu
Inscrit le: 09 Mar 2009 Messages: 1154 Sujets: 54 Spécialité en worldedit: Croâ ?
|
|
Revenir en haut |
|
|
rgf Membre reconnu
Inscrit le: 09 Mar 2009 Messages: 1154 Sujets: 54 Spécialité en worldedit: Croâ ?
|
Posté le: 22/05/10 23:36 Sujet du message: |
|
|
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 |
|
|
Tirlititi
Inscrit le: 21 Fév 2010 Messages: 1785 Sujets: 22 Spécialité en worldedit: La modestie Médailles: 1 (En savoir plus...)
|
Posté le: 22/05/10 23:47 Sujet du message: |
|
|
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 |
|
|
rgf Membre reconnu
Inscrit le: 09 Mar 2009 Messages: 1154 Sujets: 54 Spécialité en worldedit: Croâ ?
|
|
Revenir en haut |
|
|
Tirlititi
Inscrit le: 21 Fév 2010 Messages: 1785 Sujets: 22 Spécialité en worldedit: La modestie Médailles: 1 (En savoir plus...)
|
Posté le: 23/05/10 14:53 Sujet du message: |
|
|
Tu remplaces "" (dans le TriggerRegister) par "-", UnitAddAbility par UnitRemoveAbility et
StringCase(GetObjectName...
par
StringCase("-"+GetObjectName... _________________
|
|
Revenir en haut |
|
|
rgf Membre reconnu
Inscrit le: 09 Mar 2009 Messages: 1154 Sujets: 54 Spécialité en worldedit: Croâ ?
|
|
Revenir en haut |
|
|
Tirlititi
Inscrit le: 21 Fév 2010 Messages: 1785 Sujets: 22 Spécialité en worldedit: La modestie Médailles: 1 (En savoir plus...)
|
|
Revenir en haut |
|
|
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...)
|
Posté le: 23/05/10 20:15 Sujet du message: |
|
|
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 |
|
|
rgf Membre reconnu
Inscrit le: 09 Mar 2009 Messages: 1154 Sujets: 54 Spécialité en worldedit: Croâ ?
|
|
Revenir en haut |
|
|
Tirlititi
Inscrit le: 21 Fév 2010 Messages: 1785 Sujets: 22 Spécialité en worldedit: La modestie Médailles: 1 (En savoir plus...)
|
|
Revenir en haut |
|
|
rgf Membre reconnu
Inscrit le: 09 Mar 2009 Messages: 1154 Sujets: 54 Spécialité en worldedit: Croâ ?
|
|
Revenir en haut |
|
|
|