Inscrit le: 24 Aoû 2009 Messages: 116 Sujets: 9 Spécialité en worldedit: Ne pas finir ce que j'ai commencé
Posté le: 20/06/10 11:28 Sujet du message: "Erreur : nombre d'arguments incorrect"
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 )
Inscrit le: 21 Fév 2010 Messages: 1785 Sujets: 22 Spécialité en worldedit: La modestie Médailles: 1 (En savoir plus...)
Posté le: 20/06/10 12:35 Sujet du message:
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). _________________
Inscrit le: 24 Aoû 2009 Messages: 116 Sujets: 9 Spécialité en worldedit: Ne pas finir ce que j'ai commencé
Posté le: 20/06/10 18:37 Sujet du message:
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 , mais l'essentiel. Je testerais ça demain, après le bac
É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
Page 1 sur 1 La question posée dans ce topic a été résolue !
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