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=5635aeb4477fb324900a792e969e216aMé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

"Erreur : nombre d'arguments incorrect"

 
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
 Shadows_Killers
Membre actif


Inscrit le: 24 Aoû 2009
Messages: 116
Sujets: 9
Spécialité en worldedit: Ne pas finir ce que j'ai commencé


MessagePosté le: 20/06/10 11:28    Sujet du message: "Erreur : nombre d'arguments incorrect" Citer

J'essaie de faire un lancer de sabre pour mon maître Yoda : on clique sur le sort, le sabre apparaît et décris une rosace comme expliqué dans le tuto "faire de jolies courbes".

Pour cela, j'ai fait une fonction Jass : une boucle qui, 25 fois par seconde pendant la durée du sort, téléporte l'unité "sabre" à un point donné. Le problème est que pour l'application des dégâts, WE refuse de compiler et me marque une erreur "nombre d'arguments incorrects".
Ca peut paraitre stupide mais je n'arrive pas à trouver l'erreur.

De plus, comme dans un sujet précédemment posté, lorsque l'unité sabre apparait, elle se déplace selon la trajectoire voulue, mais pas son modèle ! help !!

Voici le script :
Jass:
function LancerDeSabre takes unit lanceur , unit sabre , real X , real Y , real duree , real angle , real distance , real rayon , real zone returns nothing

 set bj_forLoopAIndex = 1
    set bj_forLoopAIndexEnd = R2I(( duree * 25 ))
    loop
        exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd
        set bj_forLoopAIndex = bj_forLoopAIndex + 1

        set angle = angle + 9
        set distance = R2I((SinBJ(angle) * rayon))


        set X = GetLocationX(PolarProjectionBJ(GetUnitLoc(lanceur), distance, angle))
        set Y = GetLocationY(PolarProjectionBJ(GetUnitLoc(lanceur), distance, angle))
      call SetUnitX( sabre,X )
      call SetUnitY( sabre,Y )

call ForGroupBJ( GetUnitsInRangeOfLocMatching(zone, Location(X,Y)), Condition(IsPlayerEnemy(GetOwningPlayer(GetEnumUnit()), GetOwningPlayer(lanceur)) == true)), call UnitDamageTargetBJ( lanceur, GetEnumUnit(), zone, ATTACK_TYPE_MELEE, DAMAGE_TYPE_NORMAL ) )

      call TriggerSleepAction( 0.04)
    endloop

endfunction


La ligne qui plante :
Jass:
call ForGroupBJ( GetUnitsInRangeOfLocMatching(zone, Location(X,Y)), Condition(IsPlayerEnemy(GetOwningPlayer(GetEnumUnit()), GetOwningPlayer(lanceur)) == true)), call UnitDamageTargetBJ( lanceur, GetEnumUnit(), zone, ATTACK_TYPE_MELEE, DAMAGE_TYPE_NORMAL ) )


Voici la map de test :Télécharger la map

Merci de votre aide !
_________________
Projet : Le Grand Démolisseur, La Récré Star Wars
En cours : prépa MP

AFK
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: 20/06/10 12:35    Sujet du message: Citer

Tu ne peux pas mettre d'argument de type code comme ça dans tes fonctions. En plus, tu as mis une parenthèse au mauvais endroit et ta location est leaké ce que tu pourrais éviter facilement.

Donc ce que tu devrais mettre pour éviter le leak et faire que ça marche :

Jass:
function LancerDeSabre_Filter takes nothing returns boolean
    return IsPlayerEnemy(GetOwningPlayer(GetFilterUnit()), GetOwningPlayer(lanceur))
endfunction

function LancerDeSabre takes unit lanceur , unit sabre , real duree , real angle , real distance , real rayon , real zone returns nothing
    local group g=CreateGroup()
    local real X
    local real Y
    local filterfunc Filtre=Filter(function LancerDeSabre_Filter)
    local unit targetTemp

    set bj_forLoopAIndex = 1
    set bj_forLoopAIndexEnd = R2I(( duree * 25 ))
    loop
        exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd
        set bj_forLoopAIndex = bj_forLoopAIndex + 1

        set angle = angle + 9
        set distance = R2I((SinBJ(angle) * rayon))

        set X = GetUnitX(lanceur)+distance*CosBJ(angle)
        set Y = GetUnitY(lanceur)+distance*SinBJ(angle)
        call SetUnitX( sabre,X )
        call SetUnitY( sabre,Y )

        call GroupEnumUnitsInRange(g,x,y,zone,Filtre)
        loop
            set targetTemp=FirstOfGroup(g)
            exitwhen targetTemp==null
            call UnitDamageTargetBJ( lanceur, targetTemp, zone, ATTACK_TYPE_MELEE, DAMAGE_TYPE_NORMAL )
            call GroupRemoveUnit(g,targetTemp)
        endloop
      call TriggerSleepAction( 0.04)
    endloop
    call DestroyGroup(g)
    call DestroyFilter(Filtre)
    set g=null
    set Filtre=null

endfunction


Bon, alors j'ai pas changé les dégâts infligés (zone) mais je crois qu'il y a une erreur. Y'a plusieurs méthodes pour faire un ForGroup : j'en ai utiliser une qui te permet de tout mettre dans la même fonction pour garder les variables locales (sinon, t'aurais pu les mettre dans des variables globales puis appeler ForGroup).
J'ai aussi réduit le nombre d'argument puisque X et Y étaient en fait des variables locales plutôt (idem pour distance mais ta méthode me paraît douteuse alors j'ai rien changé de peur de rien avoir compris).

Les GroupEnum..., tu en as qui prennes juste les arguments X et Y donc pas de leak et c'est plus simple. Enfin, les leaks de filter, je les ai jamais considéré comme importants et j'y fait généralement moins attention (mais c'est sans doute une erreur de ma part).
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Shadows_Killers
Membre actif


Inscrit le: 24 Aoû 2009
Messages: 116
Sujets: 9
Spécialité en worldedit: Ne pas finir ce que j'ai commencé


MessagePosté le: 20/06/10 18:37    Sujet du message: Citer

Merci beaucoup, je vais jeter un oeil attentif à tout ça (le Jass est loin d'être ma spécialité, mais en me cassant un peu les dents dessus ça devrait passer ^^).
Pour ce qui est du leak, je prévoyais un remove location, mais je ne l'ai pas encore mis.

Edit : J'ai tout lu, j'ai pas tout compris Embarassed , mais l'essentiel. Je testerais ça demain, après le bac Razz
Édit : j'ai laissé tomber le Dammage Unit quand j'ai vu les 144 erreurs de compilation ^^ et je m'en suis tiré avec une immolation permanente. J'ai aussi résolu le problème de modèle : il suffisait de mettre 1 de vitesse de déplacement ! Merci pour ton aide !
_________________
Projet : Le Grand Démolisseur, La Récré Star Wars
En cours : prépa MP

AFK
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
La question posée dans ce topic a été résolue !

 
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