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=9d47eb309e5bcaee7931ac46deabab9fMé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

Problème du mur de ronces
Aller à la page 1, 2  Suivante
 
Poster un nouveau sujet   Répondre au sujet    Worldedit Index du Forum -> Les sorts
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
 jk2pach
Invité








MessagePosté le: 17/12/08 12:03    Sujet du message: Problème du mur de ronces Citer

Je sais, j'ai du mal Very Happy

Suite à une excellente idée de Caske Lebohaume, pour mon druide, j'ai fait un sort qui créé un mur de ronces.

Le petit souci, c'est que ça marche, à part un petit détail; les ronces se créent n'importe comment.

J'ai un problème soit de concept soit parce que je suis nul, au choix Very Happy

Exemple ici: les ronces (entourées par les ellipses rouges) sont crées en 2 rangées parallèles. Alors qu'elles devraient former un genre de ">" autour du héros, la pointe du ">" étant située à l'endroit du point ciblé par la capacité.

Secret:



Les deux déclencheurs sont:
Initialisation
Secret:

Gui:
Trigger:
S D0 Mur de Ronces start
Events
Unit - A unit Begins casting an ability
Collapse Conditions
(Ability being cast) Equal to D0 Mur de Ronces
Collapse Actions
Set Sort_D0_Caster = (Casting unit)
Set Sort_D0_Point_Caster = (Position of Sort_D0_Caster)
Set Sort_D0_Point_Target = (Target point of ability being cast)
Set Sort_D0_Point_1_A = (Sort_D0_Point_Target offset by 100.00 towards ((Angle from Sort_D0_Point_Caster to Sort_D0_Point_Target) + 45.00) degrees)
Set Sort_D0_Point_1_B = Sort_D0_Point_1_A
Set Sort_D0_Point_2_A = (Sort_D0_Point_Target offset by 100.00 towards ((Angle from Sort_D0_Point_Caster to Sort_D0_Point_Target) - 45.00) degrees)
Set Sort_D0_Point_2_B = Sort_D0_Point_2_A
Trigger - Turn on S D0 Sort <gen>
Wait 0.50 seconds
Trigger - Turn off S D0 Sort <gen>
Custom script: call RemoveLocation( udg_Sort_D0_Point_Caster )
Custom script: call RemoveLocation( udg_Sort_D0_Point_Target )
Custom script: call RemoveLocation( udg_Sort_D0_Point_1_A )
Custom script: call RemoveLocation( udg_Sort_D0_Point_1_B )
Custom script: call RemoveLocation( udg_Sort_D0_Point_2_A )
Custom script: call RemoveLocation( udg_Sort_D0_Point_2_B )


Action
Secret:

Gui:
Trigger:
Events
Time - Every 0.03 seconds of game time
Conditions
Collapse Actions
Unit - Create Un Dummy_type[7] for (Owner of Sort_D0_Caster) at Sort_D0_Point_1_B facing Default building facing (270.0) degrees
Unit - Add a 30.00 second Force Of Nature expiration timer to (Last created unit)
Unit - Create Un Dummy_type[7] for (Owner of Sort_D0_Caster) at Sort_D0_Point_2_B facing Default building facing (270.0) degrees
Unit - Add a 30.00 second Force Of Nature expiration timer to (Last created unit)
Set Sort_D0_Point_1_B = (Sort_D0_Point_1_B offset by 100.00 towards (Angle from Sort_D0_Point_1_A to Sort_D0_Point_1_B) degrees)
Set Sort_D0_Point_2_B = (Sort_D0_Point_2_B offset by 100.00 towards (Angle from Sort_D0_Point_2_A to Sort_D0_Point_2_B) degrees)


_________________
Revenir en haut
 Crowolf
Animateur


Inscrit le: 21 Avr 2008
Messages: 1607
Sujets: 81
Spécialité en worldedit: Utiliser le travail des autres
Médailles: 3 (En savoir plus...)
Grand décorateur (Quantité : 2) Rédacteur de tuto #3 (Quantité : 1)

MessagePosté le: 17/12/08 12:52    Sujet du message: Citer

Salut, déjà, je sais pas comment tu fais pour t'y retrouver avec tes variables...^^
J'avais fais un truc du genre mais avec le sort Choc de flamme.

Télécharger la map

Je pense que c'est la défénition de tes angles qui n'est pas bonne. (sans rire -->[ ] ) Et est-ce que tu pourrais mettre le point ciblé sur l'image stp?
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 jk2pach
Invité








MessagePosté le: 17/12/08 13:07    Sujet du message: Citer

Les variables: il parait que ça évite le leak, alors j'ai pris l'habitude Very Happy
En fait ca suit une logique de suffixe.
La Variable Concerne_Le type concerné_La variable_si plusieurs un numéro/une identité

Exemple

Sort_D1_Point_Caster
Sort=>il s'agit d'un sort
D=>druide
1=>le sort numéro 1 de l'unité
Point=>bon bah c'est un point
Caster=>Le point correspondant au lanceur de sort.


Dans le gestionnaire d'objet, je n'ai que 224 variables Very Happy (sans compter les déploiements donc=]

Revenons à nos moutons. Même déclencheurs que dans mon message précédent, j'ai juste mis le héros ailleurs pour que l'on voit mieux.
Ellipse rouges: le résultat obtenu.
Traits verts: le résultat escompté.
Cercle avec croix bleue: la cible du sort. (Correspond au Sort_D0_Point_Target)
Secret:



Ici tu remarque que j'ai 2 points de déplacement (Identifiés Sort D0_Point_1 et D0_Point_2) pour la création des ronces parce esthétiquement je trouve mieux que les ronces partent ensemble du point ciblé, chaque banche dans sa direction propre.
_________________
Revenir en haut
 jk2pach
Invité








MessagePosté le: 17/12/08 13:16    Sujet du message: Citer

Sympa ton sort. Sur mon PC, j'ai un écran qui est saccadé, mais bon^^

En revanche on ne s'y prend pas pareil pour le changement d'angle. Je ne sais pas trop comment l'adapter sur le miens.
_________________
Revenir en haut
 Darkfeyt
Floodeur prématuré


Inscrit le: 22 Nov 2007
Messages: 677
Sujets: 27
Spécialité en worldedit: Jamais sortir ses projets ?


MessagePosté le: 17/12/08 15:49    Sujet du message: Citer

J'ai fait un équivalent de se que tu voulait en jass , a la base c'était au cas où tu voulait , en t'expliquant à coté comment faire en gui , mais quand j'ai vu les leaks de ton script. Rolling Eyes

Jass:

function Periodic takes nothing returns nothing
call UnitApplyTimedLife(CreateUnit(Player(0),'type',( ( udg_AngleX1Spell * udg_DistSpell) + udg_OffSetSpellX ), ( ( udg_AngleY1Spell * udg_DistSpell) + udg_OffSetSpellY ),0),'BEfn',30) //Création de l'unité de la premiere droite
call UnitApplyTimedLife(CreateUnit(Player(0),'type',( ( udg_AngleX2Spell * udg_DistSpell) + udg_OffSetSpellX ), ( ( udg_AngleY2Spell * udg_DistSpell) + udg_OffSetSpellY ),0),'BEfn',30) //Création de l'unité de la seconde droite
set udg_DistSpell = udg_DistSpell + 100   // Deplacement sur les droite des création
if(udg_DistSpell == 1600)then        // + précis qu'un wait
    call PauseTimer(udg_TimeSpell)   // arret de la création
endif
endfunction

function TriggSpell takes nothing returns nothing
local real r = (bj_RADTODEG * Atan2(GetOrderPointY() - GetUnitY(GetTriggerUnit()), GetOrderPointX() - GetUnitX(GetTriggerUnit()))) + 180 //Calcul de l'angle entre l'unité et le point cible + 180°
set udg_OffSetSpellX = GetOrderPointX()
set udg_OffSetSpellY = GetOrderPointY()
set udg_AngleX1Spell = CosBJ(r + 30) //Calcul de la premiere droite
set udg_AngleY1Spell = SinBJ(r + 30) //Idem
set udg_AngleX2Spell = CosBJ(r - 30) //Calcul de la seconde droite
set udg_AngleY2Spell = SinBJ(r - 30) //Idem
set udg_DistSpell = 0    //Remise a zero de la distance
call TimerStart(udg_TimeSpell,0.03,true,function Periodic) //Lamcement du timer
endfunction


J'ai testé le résultat est similaire a celui que tu voulait , et n'a pas l'air d'être lourd du tout.

Pour précisé le type d'unité (sinon sa ne marchera pas) il faut que tu change les deux 'type' par le type id de l'unité (ctrl + d dans l'editeur d'objet) , par exemple 'hpea' pour le paysan.

Les variables utilisé sont:
Un timer :TimeSpell
Des réel:
- AngleX1Spell
- AngleY1Spell
- AngleX2Spell
- AngleY2Spell
- OffSetSpellX
- OffSetSpellY
- DistSpell

Pour s'en servir il suffit d'appelé la fonction. (call TriggSpell() en custom script)

J'ai laissé pas mal de commentaire sur mon script si tu veut comprendre comment il fonctionne.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé Envoyer l'e-mail MSN Messenger
 jk2pach
Invité








MessagePosté le: 17/12/08 17:05    Sujet du message: Citer

Ahem.

Les...Trucs colorés, là...Je les mets où?^^

Merci.

Edit: sur le miens, leak à part, tu aurais fait comment en GUI pour les angles?

Edit2: Merci, beaucoup Smile
_________________
Revenir en haut
 jk2pach
Invité








MessagePosté le: 17/12/08 17:34    Sujet du message: Citer

Ahem.

Les...Trucs colorés, là...Je les mets où?^^

Merci.

Edit: sur le miens, leak à part, tu aurais fait comment en GUI pour les angles?

Edit2: Merci, beaucoup Smile

Edit3: je sais je suis incompétent en jass Very Happy

Donc tes variables sont de type?
set udg_OffSetSpellX Réel
set udg_OffSetSpellY Réel
set udg_AngleX1Spell Réel
set udg_AngleY1Spell Réel
set udg_AngleX2Spell Réel
set udg_AngleY2Spell Réel
set udg_DistSpell = 0 Réel

C'est ça?

Edit 5: encore merci, ça fonctionne. Et en plus je commence à comprendre le jass. Mais comment trouve-t-on la bonne fonction -_-
_________________
Revenir en haut
 jk2pach
Invité








MessagePosté le: 17/12/08 18:34    Sujet du message: Citer

Ah zut. En fait "la question de ce topic" n'est pas résolue Sad

Télécharger la map

Y'a un bug: le sort ne se lance que dans ma ville d'origine. Pas ailleurs. En plus il a tendance à leaker passé le lancement, de plus en plus, jusqu'à planter W3.

-_-

PS: l'id unité, ca ne sert à rien de la remplacer par sa variable? (ici dummy_type|quelquechose] )
_________________
Revenir en haut
 jk2pach
Invité








MessagePosté le: 17/12/08 19:28    Sujet du message: Citer

@Darkfeyt

Après plusieurs test: ton script ne fonctionne pas non plus. L'intersection des deux droites n'apparait pas forcément à l'endroit ciblé, et les deux droites n'apparaissent pas toujours -_-.
_________________
Revenir en haut
 Darkfeyt
Floodeur prématuré


Inscrit le: 22 Nov 2007
Messages: 677
Sujets: 27
Spécialité en worldedit: Jamais sortir ses projets ?


MessagePosté le: 17/12/08 19:54    Sujet du message: Citer

Edit(Reponse a ton post au dessus): Quand j'avais testé sa fonctionné , sa prenait en compte l'orientation entre l'unité et le point ciblé ainsi que comme centre le point ciblé.

" Mais comment trouve-t-on la bonne fonction -_- " = ?

Citation:
PS: l'id unité, ca ne sert à rien de la remplacer par sa variable? (ici dummy_type|quelquechose] )


Ben il vaut mieux une valeur direct , mais si sa a son utililité.

Si tu cherche a appliqué mon script Jass , tu as l'air de l'avoir correctement implanté , et si je me suis pas planté (ni toi) , il suffit de faire " call TriggSpell() " en custom script pour faire l'effet.

Veut tu que je t'explique comment se servir de mon script ou comment réalisé "l'équivalent" GUI ?

Ben pour comment s'en servir j'ai déjà expliqué plus haut , pour l'équivalent je vais tenté de t'expliqué.
(Concentre toi j'ai l'impression d'avoir vraiment mal expliqué Razz )

Si tu n'en est pas conscient , je t'invite à lire ce post.

Expliquant les projections polaires.

A priori en voyant ton trigger tu en a l'air assez conscient.

Ce que tu a l'air de faire (en regardant rapidement) est de deplacé le point par rapport a lui même , se qui n'est pas très optimisé.
Le plus optimisé est de gardé les résultats en mémoire de façon à évité les calcul inutile.

Premièrement ont a deux point , celui de l'ordre et celui de l'unité , ont fait donc l'angle entre les deux pour définir "l'orientation" de l'effet.
Une fois qu'ont a l'orientation , ont calcul les angle des deux droite , soit 210° et 150° si ont prend 30°. (180° +- 30°) (sa s'approche plus de ton dessin).
Après qu'ont a ses deux angle ont calcul les Cosinus et Sinus de ses angles qu'ont met dans des variable.

Ont lance le timer periodic.

Ont commence a la distance 0 (donc ont remet la distance a 0 avant) puis augmente la distance a chaque fois , calculant le nouveau point avec se qu'ont a enregistré dans les variable.
" ( ( udg_AngleX1Spell * udg_DistSpell) + udg_OffSetSpellX ) "

Ensuite je préfère personnellement la condition sur la distance qu'un wait , le wait donnera par moment des résultat différent que d'habitude.
Donc pour la distance il te suffit de mettre en pause (ou turn off trigger) si la distance est égal à 'x'.
Je te conseil le pause timer (puis relancé le timer) au turn off trigger , à mon avis c'est moins lourd mais j'en ai pas la preuve.

Puis théoriquement si ta compris sa devrait fonctionné.


Edit(2): http://communots.free.fr/upload/pbmurderonces12295405.w3x

Ma map de test , j'ai modifié un peu les valeur pour facilité les teste.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé Envoyer l'e-mail MSN Messenger
 jk2pach
Invité








MessagePosté le: 17/12/08 20:04    Sujet du message: Citer

J'ai bien compris.

Regarde la map que je t'ai mis en téléchargement, joue là, le pouvoir est dans les capacités de base du héros.

Tu verras que selon l'endroit où tu fais le sort, ça ne marche pas :s

Si tu veux vérifier le trigger (je n'ai fait que modifier les noms des variables Smile )...
Dans le déclencheur d'évènements, rubrique sort, paragraphe druide pour le call...
Jass: code de la carte, sous le paragraphe "affichage des dégâts" (ou en partant du bas, les deux premières fonctions).
Unité: unité classée en Personnalisé/Orc/Unités/Dummy Mur de Ronces o006:oeye
_________________
Revenir en haut
 Darkfeyt
Floodeur prématuré


Inscrit le: 22 Nov 2007
Messages: 677
Sujets: 27
Spécialité en worldedit: Jamais sortir ses projets ?


MessagePosté le: 17/12/08 20:11    Sujet du message: Citer

Effectivement les angle donné sont mauvais dans ta map , je vais chercher a quoi c'est du.

Edit: Le problème vient que j'utilise GetOrderPointX / Y , Utilisable pour les ordre mais pas pour ton événement.

Edit(2):
Jass:
function Periodic takes nothing returns nothing
call UnitApplyTimedLife(CreateUnit(Player(0),'o006',( ( udg_Sort_D0_AngleX1Spell * udg_Sort_D0_DistSpell) + udg_Sort_D0_OffSetSpellX ), ( ( udg_Sort_D0_AngleY1Spell * udg_Sort_D0_DistSpell) + udg_Sort_D0_OffSetSpellY ),0),'BEfn',30) //Création de l'unité de la premiere droite
call UnitApplyTimedLife(CreateUnit(Player(0),'o006',( ( udg_Sort_D0_AngleX2Spell * udg_Sort_D0_DistSpell) + udg_Sort_D0_OffSetSpellX ), ( ( udg_Sort_D0_AngleY2Spell * udg_Sort_D0_DistSpell) + udg_Sort_D0_OffSetSpellY ),0),'BEfn',30) //Création de l'unité de la seconde droite
set udg_Sort_D0_DistSpell = udg_Sort_D0_DistSpell + 100   // Deplacement sur les droite des création
if(udg_Sort_D0_DistSpell == 1600)then        // + précis qu'un wait
    call PauseTimer(udg_Sort_D0_TimeSpell)   // arret de la création
endif
endfunction

function TriggSpell takes nothing returns nothing
local location l = GetSpellTargetLoc()
local real r = (bj_RADTODEG * Atan2(GetLocationY(l) - GetUnitY(GetTriggerUnit()), GetLocationX(l) - GetUnitX(GetTriggerUnit()))) + 180 //Calcul de l'angle entre l'unité et le point cible + 180°
set udg_Sort_D0_OffSetSpellX = GetLocationX(l)
set udg_Sort_D0_OffSetSpellY = GetLocationY(l)
call RemoveLocation(l)
set l = null
set udg_Sort_D0_AngleX1Spell = CosBJ(r + 30) //Calcul de la premiere droite
set udg_Sort_D0_AngleY1Spell = SinBJ(r + 30) //Idem
set udg_Sort_D0_AngleX2Spell = CosBJ(r - 30) //Calcul de la seconde droite
set udg_Sort_D0_AngleY2Spell = SinBJ(r - 30) //Idem
set udg_Sort_D0_DistSpell = 0    //Remise a zero de la distance
call TimerStart(udg_Sort_D0_TimeSpell,0.03,true,function Periodic) //Lamcement du timer
endfunction


Sa fonctionne avec ce nouveau script.

Réponds pour que je sache si je doit up ou non. Rolling Eyes
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé Envoyer l'e-mail MSN Messenger
 jk2pach
Invité








MessagePosté le: 18/12/08 14:25    Sujet du message: Citer

L'inconvénient des Edit...Je n'avais pas vu ta modification.

Alors j'ai copié le code et j'ai ça à l'enregistrement
Syntax Error

function Trig_I_Start_Actions takes nothing returns nothing

Ca c'est mon premier déclencheur tout mignon.
Ca ne plante que quand j'ai mis ton script

Secret:


Gui:
Trigger:
Events
Time - Elapsed game time is 0.01 seconds
Conditions
Collapse Actions
Player - Turn Gives bounty On for Neutral Hostile
Collapse For each (Integer A) from 1 to 12, do (Actions)
Loop - Actions
Set Joueur_perso[(Integer A)] = (Player((Integer A)))
Collapse For each (Integer A) from 1 to 12, do (Actions)
Loop - Actions
Player - Make Joueur_perso[(Integer A)] treat Player 1 (Red) as an Ally with shared vision
Player - Make Joueur_perso[(Integer A)] treat Player 2 (Blue) as an Ally with shared vision
Player - Make Joueur_perso[(Integer A)] treat Player 3 (Teal) as an Ally with shared vision
Player - Make Joueur_perso[(Integer A)] treat Player 4 (Purple) as an Ally with shared vision
Player - Make Joueur_perso[(Integer A)] treat Player 5 (Yellow) as an Ally with shared vision
Player - Make Joueur_perso[(Integer A)] treat Player 6 (Orange) as an Ally with shared vision
Player - Make Joueur_perso[(Integer A)] treat Player 7 (Green) as an Ally with shared vision
Player - Make Joueur_perso[(Integer A)] treat Player 8 (Pink) as an Ally with shared vision
Player - Make Joueur_perso[(Integer A)] treat Player 9 (Gray) as an Ally with shared vision
Player - Make Joueur_perso[(Integer A)] treat Player 10 (Light Blue) as an Ally with shared vision
Player - Make Joueur_perso[(Integer A)] treat Player 11 (Dark Green) as an Ally with shared vision
Player - Make Joueur_perso[(Integer A)] treat Player 12 (Brown) as an Ally with shared vision
Hero - Make Joueur_perso[(Integer A)] Heroes gain 100.00% experience from future kills
Player - Set the current research level of Niveau du Héros  to 1 for Joueur_perso[(Integer A)]
Visibility - Create an initially Enabled visibility modifier for Joueur_perso[(Integer A)] emitting Visibility across NG1 <gen>
Visibility - Create an initially Enabled visibility modifier for Joueur_perso[(Integer A)] emitting Visibility across NG2 <gen>
Visibility - Create an initially Enabled visibility modifier for Joueur_perso[(Integer A)] emitting Visibility across NG3 <gen>
Animation - Play Forge 0051 <gen>'s stand work animation
Animation - Play Atelier 0034 <gen>'s stand work animation
Animation - Play Scierie 0052 <gen>'s stand work animation
Unit - Order Paysan 0114 <gen> to Harvest Ravitaillement 0113 <gen>
Unit - Order Paysan 0116 <gen> to Harvest Ravitaillement 0113 <gen>
Unit - Order Paysan 0115 <gen> to Harvest Ravitaillement 0113 <gen>
Unit - Order Paysan 0117 <gen> to Harvest Ravitaillement 0113 <gen>
Unit - Order Paysan 0127 <gen> to Harvest Ravitaillement 0113 <gen>
Unit - Order Paysan 0128 <gen> to Harvest Ravitaillement 0113 <gen>
Unit - Order Paysan 0129 <gen> to Harvest Ravitaillement 0113 <gen>
Unit - Order Paysan 0130 <gen> to Harvest Ravitaillement 0113 <gen>
Game - Set the time of day to 8.00
Environment - Set sky to Lordaeron Winter Sky (Pink)


_________________
Revenir en haut
 Darkfeyt
Floodeur prématuré


Inscrit le: 22 Nov 2007
Messages: 677
Sujets: 27
Spécialité en worldedit: Jamais sortir ses projets ?


MessagePosté le: 18/12/08 15:11    Sujet du message: Citer

Tu est sur d'avoir pas touché a quelque chose qui faudrait pas ?

Moi sur ta map que tu m'a passé sa marche.
http://communots.free.fr/upload/north-guild.1.00-unprotected1229535112296093.w3x

Sinon passe une version où sa marche pas je verrai ce qui va pas.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé Envoyer l'e-mail MSN Messenger
 jk2pach
Invité








MessagePosté le: 18/12/08 16:14    Sujet du message: Citer

Merci, tout fonctionne (en copiant collant le texte de la map, parce que en copiant celui d'ici j'ai du faire une erreur). Vraiment sympa de ta part Very Happy
_________________
Revenir en haut
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    Worldedit Index du Forum -> Les sorts Toutes les heures sont au format GMT + 1 Heure
Aller à la page 1, 2  Suivante
Page 1 sur 2
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