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=ba061be4085840e82ee264c430a40318Mé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

Projectile automatisé

 
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
 Sapeur-Goblin
Floodeur prématuré


Inscrit le: 14 Oct 2009
Messages: 719
Sujets: 40
Spécialité en worldedit: Les bugs
Médailles: 1 (En savoir plus...)
Créateur d'unité (Quantité : 1)

MessagePosté le: 05/03/12 16:06    Sujet du message: Projectile automatisé Citer

Plop,
J'essaie de faire une fonction pour qu'en faisant juste un truc du style "call CreateProjectile(unit u, unit c, effect fx...)", l'unité u envoie un projectile sur l'unité c.
J'ai fais un code, il marche, mais j'aimerais que lorsque le projectile atteigne sa cible, la fonction faisant déplacer le projectile appelle une autre fonction, de sorte que l'on puisse choisir les effets qui surviennent à ce moment là.
Voilà comment j'ai procédé :
- Ma fonction "CreateProjectile" a besoin d'un argument de type string, faisant référence à la fonction à appeler (appelé ty).
- Lorsque le projectile meurt, j'utilise "call ExecuteFunc(ty)". Sauf que cette fonction ne permet de passer aucun argument à la fonction à exécuter...
- J'ai donc "déprivatisé" la structure enregistrant toutes les informations sur le projectile, et crée une variable globale de type integer (appelée InstanceId). Lorsque le projectile meurt, la variable InstanceId adopte la valeur de l'instance de structure enregistrant les infos sur le proejctile.
- Ce qui me permet de faire "call ExecuteFunc(ty)", puis de récupérer les infos de cette manière (la struct s'appelle "Projectile" et la globale y faisant référence "Ar") :
Jass:
function Impact takes nothing returns nothing
    local Projectile pr = Ar[InstanceId]
    local unit u = pr.u
    local unit c = pr.c
    //Et ensuite les actions habituelles
endfunction


Mon problème c'est que j'aimerais trouver un autre moyen parce que, même si celui-là marche, il y a quelques défauts que j'aimerais corriger :
- La fonction à appeler en fin de vie du projectile ne doit pas être privée
- La structure Projectile ne doit pas être privée
- La globale Ar ne doit pas être privée
- C'est chiant de devoir procéder comme ça

Voilà

Secret:

C'est quand même fou que la fonction "ExecuteFunc" ne permette pas de passer des arguments... Ca aurait été trop beau


_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Hell-Gate
Membre récent


Inscrit le: 27 Fév 2012
Messages: 55
Sujets: 1
Spécialité en worldedit: Modelling et éditeur d'objet :p. Le Gui/Jass me font chier!


MessagePosté le: 05/03/12 16:26    Sujet du message: Citer

J'ai absolument rien compris...
T'essaie de faire comme les missiles dans Custom Hero Footies? (Tu sais, ceux dans le hiboux)
_________________
Yo les enfants! C'est le Big Troll Jo_XDmoi qui est de retour avec un nouveau compte, question d'avoir une meilleure réputation Razz
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: 05/03/12 16:43    Sujet du message: Citer

Huhu.

Tu peux utiliser un mot-clé vJass (function interface) qui permet de passer une fonction en argument pour pouvoir l'exécuter ensuite.
Un exemple :

Secret:

Jass:
library SYSTEM

    // "private" ou pas.
    private function interface CollisionFunction takes unit caster, unit target returns nothing

    function RunFunction takes CollisionFunction func, unit caster, unit target returns nothing
        call func.execute(caster, target)
//    Tu peux aussi utiliser ".evaluate", c'est plus rapide
//    mais ça n'ouvre pas de nouveau thread ;
//    on ne peut pas utiliser "TriggerSleepAction" dans la fonction, par exemple.
//      call func.evaluate(caster, target)
    endfunction

endlibrary

scope TEST

    // private ou pas.
    // les arguments et le return doivent être les mêmes que
    // la fonction interface "CollisionFunction".
    private function CollisionFunctionExample takes unit caster,unit target returns nothing
        call UnitDamageTarget(caster, target, 100, false, false, null, null, null)
    endfunction

    function Example takes nothing returns nothing
        // Inflige 100 dommages à "GetSpellTargetUnit()"
        call RunFunction( CollisionFunctionExample, GetTriggerUnit(), GetSpellTargetUnit() )
    endfunction

endscope



Dans ton cas, il te suffit de mettre un champs de type "CollisionFunction" dans ta structure de projectile.
J'espère que c'est clair ^^.
_________________
Warcraft III, c'était mieux avant. Y'avait des purs chefs-d'oeuvres du mapping !
Road Of Glory (par moi)
Casse-briques (par moi)
Temple de Glace (par moi)
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Sapeur-Goblin
Floodeur prématuré


Inscrit le: 14 Oct 2009
Messages: 719
Sujets: 40
Spécialité en worldedit: Les bugs
Médailles: 1 (En savoir plus...)
Créateur d'unité (Quantité : 1)

MessagePosté le: 05/03/12 16:56    Sujet du message: Citer

Wahhhh! C'est fou ce qu'on fait de nos jours avec le vJass Wink.
Ca marche parfaitement, merci Smile.
_________________
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
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