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

[Projet] Magic the Gathering RPG
Aller à la page Précédente  1, 2, 3, 4, 5  Suivante
 
Poster un nouveau sujet   Répondre au sujet    Worldedit Index du Forum -> Présentation de vos cartes
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
 Zed
Membre récent


Inscrit le: 11 Nov 2007
Messages: 78
Sujets: 6



MessagePosté le: 12/02/08 18:01    Sujet du message: Citer

Non, toujours pareil.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Zed
Membre récent


Inscrit le: 11 Nov 2007
Messages: 78
Sujets: 6



MessagePosté le: 12/02/08 19:47    Sujet du message: Citer

Ca y est le problème est localisé: Il se cache dans les déclencheurs relatifs aux héros. Maintenant, reste à trouver le(s)quel(s)...

Ca y est, trouvé: c'est Mishra.
C'est lui qui a le sort en jass. Plus que quelques déclencheurs à tester !

Edit: c'est bien le sort utilisant le jass qui leak.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 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...)
Rédacteur de tuto #3 (Quantité : 1) Grand mage créateur de sort (Quantité : 1)

MessagePosté le: 12/02/08 20:26    Sujet du message: Citer

juste que ce n'est pas le jass qui est fautif mais simplement le code mal fait.
Le gui lui leak parfois (certaines fonctions mais souvent minime) et on peut rien y faire sauf ne pas l'utiliser Razz

Tout cela pour dire qu'il faut que l'on voie le code
_________________
Le violet, c'est moche.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Zed
Membre récent


Inscrit le: 11 Nov 2007
Messages: 78
Sujets: 6



MessagePosté le: 12/02/08 20:42    Sujet du message: Citer

Le sort comprend plusieurs déclencheurs et n'est pas de moi.


Number1(en gui)

Citation:
Jump
Evénements
Unité - A unit Initie l'effet d'une compétence
Conditions
Or - Any (Conditions) are true
Conditions
(Ability being cast) Egal à Rage Phyrexiane
(Ability being cast) Egal à Saut
(Ability being cast) Egal à Saut puissant
Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Si - Conditions
(Level of (Ability being cast) for (Triggering unit)) Egal à 1
Alors - Actions
Set JumpInjurDmg = 50.00
Sinon - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Si - Conditions
(Level of (Ability being cast) for (Triggering unit)) Egal à 2
Alors - Actions
Set JumpInjurDmg = 70.00
Sinon - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Si - Conditions
(Level of (Ability being cast) for (Triggering unit)) Egal à 3
Alors - Actions
Set JumpInjurDmg = 85.00
Sinon - Actions
Set JumperLoc = (Position of (Triggering unit))
Set Jumper[(Player number of (Owner of (Triggering unit)))] = (Triggering unit)
Set JumperLandingLoc = (Target point of ability being cast)
Set JumpDirection = (Angle from JumperLoc to JumperLandingLoc)
Set JumpX = 0.00
Set JumpY = 0.00
Set JumpRotate = (Facing of Jumper[(Player number of (Owner of (Triggering unit)))])
Set JumpK = 900.00
Set JumpTheta = (90.00 - ((Asin(((Distance between JumperLoc and JumperLandingLoc) / JumpK))) / 2.00))
Animation - Change Jumper[(Player number of (Owner of (Triggering unit)))] turn speed to 1.00
Unité - Turn collision for Jumper[(Player number of (Owner of (Triggering unit)))] Off
Unité - Add Fly Height Trick to Jumper[(Player number of (Owner of (Triggering unit)))]
Unité - Remove Fly Height Trick from Jumper[(Player number of (Owner of (Triggering unit)))]
Unité - Pause Jumper[(Player number of (Owner of (Triggering unit)))]
Animation - Change Jumper[(Player number of (Owner of (Triggering unit)))]'s animation speed to 180.00% of its original speed
Déclencheur - Turn on JumpFX <gen>
Déclencheur - Turn on JumpMove1 Copier <gen>
Wait 0.25 game-time seconds
Déclencheur - Turn off JumpMove1 Copier <gen>
Déclencheur - Turn on JumpMove2 Copier <gen>
Wait 0.25 game-time seconds
Déclencheur - Turn off JumpMove2 Copier <gen>
If ((Jumper[(Player number of (Owner of (Triggering unit)))] is dead) Egal à TRUE) then do (Skip remaining actions) else do (Do nothing)
Déclencheur - Turn on JumpMove3 Copier <gen>
Animation - Change Jumper[(Player number of (Owner of (Triggering unit)))]'s animation speed to 250.00% of its original speed
Animation - Play Jumper[(Player number of (Owner of (Triggering unit)))]'s spell slam animation
Wait 0.20 game-time seconds
Animation - Change Jumper[(Player number of (Owner of (Triggering unit)))]'s animation speed to 35.00% of its original speed
Déclencheur - Turn off JumpMove3 Copier <gen>
Unité - Create 1 Piege Smile MISHRAAAAA for (Owner of Jumper[(Player number of (Owner of (Triggering unit)))]) at JumperLandingLoc facing Orientation bâtiment par défaut degrees
Unité - Set level of Choc martial for (Last created unit) to (Level of Rage Phyrexiane for (Triggering unit))
Unité - Order (Last created unit) to Chef Tauren Orc - Choc martial
Effet spécial - Create a special effect at JumperLandingLoc using Abilities\Spells\Orc\WarStomp\WarStompCaster.mdl
Déclencheur - Turn off JumpFX <gen>
Unité - Reprendre Jumper[(Player number of (Owner of (Triggering unit)))]
Unité - Turn collision for Jumper[(Player number of (Owner of (Triggering unit)))] On
Unité - Cause (Triggering unit) to damage (Triggering unit), dealing JumpInjurDmg damage of attack type Normal and damage type Normal
Unité - Add a 3.00 second Générique expiration timer to (Last created unit)
Animation - Change Jumper[(Player number of (Owner of (Triggering unit)))] turn speed to 0.40
Wait 2.00 game-time seconds
Animation - Change Jumper[(Player number of (Owner of (Triggering unit)))]'s animation speed to 100.00% of its original speed
Animation - Reset Jumper[(Player number of (Owner of (Triggering unit)))]'s animation


Number2(gui)
Citation:
JumpMove1 Copier
Evénements
Temps - Every 0.01 seconds of game time
Conditions
Actions
Set JumpX = (JumpX + ((Distance between JumperLoc and JumperLandingLoc) / 75.00))
Set JumpY = ((JumpX x (Tan(JumpTheta))) - ((Power(JumpX, 2.00)) / ((2.00 x JumpK) x (Power((Cos(JumpTheta)), 2.00)))))
Unité - Move Jumper[(Player number of (Owner of (Triggering unit)))] instantly to (JumperLoc offset by JumpX towards JumpDirection degrees)
Animation - Change Jumper[(Player number of (Owner of (Triggering unit)))] flying height to JumpY at 10000.00



Number3(gui)
Citation:
JumpMove1 Copier
Evénements
Temps - Every 0.01 seconds of game time
Conditions
Actions
Set JumpX = (JumpX + ((Distance between JumperLoc and JumperLandingLoc) / 75.00))
Set JumpY = ((JumpX x (Tan(JumpTheta))) - ((Power(JumpX, 2.00)) / ((2.00 x JumpK) x (Power((Cos(JumpTheta)), 2.00)))))
Unité - Move Jumper[(Player number of (Owner of (Triggering unit)))] instantly to (JumperLoc offset by JumpX towards JumpDirection degrees)
Animation - Change Jumper[(Player number of (Owner of (Triggering unit)))] flying height to JumpY at 10000.00


Number4(gui)
Citation:
JumpMove1 Copier
Evénements
Temps - Every 0.01 seconds of game time
Conditions
Actions
Set JumpX = (JumpX + ((Distance between JumperLoc and JumperLandingLoc) / 75.00))
Set JumpY = ((JumpX x (Tan(JumpTheta))) - ((Power(JumpX, 2.00)) / ((2.00 x JumpK) x (Power((Cos(JumpTheta)), 2.00)))))
Unité - Move Jumper[(Player number of (Owner of (Triggering unit)))] instantly to (JumperLoc offset by JumpX towards JumpDirection degrees)
Animation - Change Jumper[(Player number of (Owner of (Triggering unit)))] flying height to JumpY at 10000.00


Number5

Citation:
function Trig_JumpFX_Actions takes nothing returns nothing
local effect JumpFX
call AddSpecialEffectTargetUnitBJ( "origin", udg_Jumper[GetConvertedPlayerId(GetOwningPlayer(GetTriggerUnit()))], "Objects\\Spawnmodels\\Undead\\ImpaleTargetDust\\ImpaleTargetDust.mdl" )
call DestroyEffectBJ(JumpFX)
endfunction

//===========================================================================
function InitTrig_JumpFX takes nothing returns nothing
set gg_trg_JumpFX = CreateTrigger( )
call TriggerRegisterTimerEventPeriodic( gg_trg_JumpFX, 0.10 )
call TriggerAddAction( gg_trg_JumpFX, function Trig_JumpFX_Actions )
endfunction



Note: les triggers 2 à 4 sont désactivés en temps normal.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Keitaro_Ura
Floodozaurus


Inscrit le: 21 Aoû 2007
Messages: 2073
Sujets: 38
Spécialité en worldedit: Oui
Médailles: 1 (En savoir plus...)
Rédacteur de tuto #2 (Quantité : 1)

MessagePosté le: 12/02/08 21:24    Sujet du message: Citer

Tu pourrais utiliser les balises gui cela serait plus lisible stp.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Ayane
Bot administrateur


Inscrit le: 17 Sep 2007
Messages: 2009
Sujets: 49

Médailles: 2 (En savoir plus...)
Ayane (Quantité : 1) Rédacteur de tuto #1 (Quantité : 1)

MessagePosté le: 12/02/08 22:44    Sujet du message: Citer

Number1: Créer des points, les utilise dans d'autrs déclencheurs mais ne les supprime jamais.

Number 2,3,4: Identiques, vérifie ton copier/coller. Néanmoins le code est très mal fait dans le sens où il est très lourd en utilisant des fonctions mathématiques lourdes. Exemple:
Power(a, 2) se simplifi en a * a.
Tan, Cos ou Sin de Alpha sont encore plus lourdes et sont constantes, elles peuvent donc être calculés dans Number1.
Si je ne me trompe pas c'est Change Unit Flying Height to hauteur at temps, hors ici temps vaut 10000 ... normalement il devrait y avoir 0.
Pour l'événement 0.03 suffit amplement.

Number5:
Cela:
- déclare un effet spécial,
- créer un effet spécial
- Détruit l'effet déclaré
Mais n'affecte pas l'effet spécial à la variable. Cela peut te créer une erreur critique car la variable pointe sur une valeur aléatoire (donc peut pointer en dehors de la mémoire allouée).

Il faut le remplacer par
Jass:

call DestroyEffect(AddSpecialEffectTargetUnitBJ( "origin", udg_Jumper[GetConvertedPlayerId(GetOwningPlayer(GetTriggerUnit()))], "Objects\\Spawnmodels\\Undead\\ImpaleTargetDust\\ImpaleTargetDust.mdl" ))

_________________


Dernière édition par Ayane le 12/02/08 23:55; édité 1 fois
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger
 Darkfeyt
Floodeur prématuré


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


MessagePosté le: 12/02/08 22:57    Sujet du message: Citer

[Shocked]

Jass:
call DestroyEffect(AddSpecialEffectTargetUnit( "origin", udg_Jumper[GetConvertedPlayerId(GetOwningPlayer(GetTriggerUnit()))], "Objects\\Spawnmodels\\Undead\\ImpaleTargetDust\\ImpaleTargetDust.mdl" ))


Encore plus barbare que le add spécial effect / destroy spécial effect. xD
Mais fallait y pensé.mdr

[/ Shocked ]
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé Envoyer l'e-mail MSN Messenger
 Zed
Membre récent


Inscrit le: 11 Nov 2007
Messages: 78
Sujets: 6



MessagePosté le: 13/02/08 17:54    Sujet du message: Citer

Merci, je vais essayer.

Par contre, je ne comprend pas:
En exportant dans une autre map les déclencheurs qui posent problème, il n'y a aucun leak...
Ce se peut que des déclencheurs entrent en conflit ?
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Zed
Membre récent


Inscrit le: 11 Nov 2007
Messages: 78
Sujets: 6



MessagePosté le: 13/02/08 18:09    Sujet du message: Citer

MERCI AYANE !!

Ca ne leak plus !!
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 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...)
Grand mage créateur de sort (Quantité : 1) Rédacteur de tuto #3 (Quantité : 1)

MessagePosté le: 13/02/08 21:09    Sujet du message: Citer

j'ai essayé de remplacer les fonction Cos et Sin par leur équivalent.

angle alpha entre un point A et B

Code:
X = Delta Y / Delta X = (Ya-Yb)/(Xa-Xb)
cos (alpha) = 1/SquareRoot(1+X*X)
sin (alpha) = X/SquareRoot(1+X*X)


Mais cette solution est plus lente que d'utiliser la fonction Cos, au lieu de SquareRoot j'au essayé Pow avec une puissance 0.5, le résultat était similaire
_________________
Le violet, c'est moche.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Ayane
Bot administrateur


Inscrit le: 17 Sep 2007
Messages: 2009
Sujets: 49

Médailles: 2 (En savoir plus...)
Ayane (Quantité : 1) Rédacteur de tuto #1 (Quantité : 1)

MessagePosté le: 13/02/08 22:35    Sujet du message: Citer

Oui car racine carré ou la puissance sont des fonctions tout aussi lourdes si ce n'est plus que cos et sin.
Dans les jeux-vidéos lorsque l'on veut optimiser cos et sin on les recréer à l'initialisation en faisant un tableau de valeurs avec une précision donné, la fonction n'as plus qu'à trouvé la valeur la plus proche de l'angle et à retourner la valeur. Les résultats sont moins précis mais le cos et sin ne sont plus qu'une lecture mémoire.

Je proposais de calculer avant son périodique, car son alpha est une constante, donc le résultat est constant.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger
 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...)
Rédacteur de tuto #3 (Quantité : 1) Grand mage créateur de sort (Quantité : 1)

MessagePosté le: 13/02/08 22:45    Sujet du message: Citer

Ayane a écrit:
Oui car racine carré ou la puissance sont des fonctions tout aussi lourdes si ce n'est plus que cos et sin.
Dans les jeux-vidéos lorsque l'on veut optimiser cos et sin on les recréer à l'initialisation en faisant un tableau de valeurs avec une précision donné, la fonction n'as plus qu'à trouvé la valeur la plus proche de l'angle et à retourner la valeur. Les résultats sont moins précis mais le cos et sin ne sont plus qu'une lecture mémoire.

Je proposais de calculer avant son périodique, car son alpha est une constante, donc le résultat est constant.


Oui oui j'avais compris, je faisais juste part de mon test que j'avais déjà effectué pour mon système, c'est plus lent que d'utiliser simplement Cos
Par contre ton histoire de tableau, tu crois que ca vaut le coup pour warcraft ?
Je vois l'idée mais pas trop sa mise en place, un petit exemple peut être ?
_________________
Le violet, c'est moche.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 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...)
Grand mage créateur de sort (Quantité : 1) Rédacteur de tuto #3 (Quantité : 1)

MessagePosté le: 14/02/08 18:22    Sujet du message: Citer

corrige moi si je me trompe, mais c'est comme cela que je vois la chose :

Jass:
library Cos initializer Init

globals
    real array COS
    constant real ERR_TRIGO = 0.5
endglobals

function GetCos takes real r returns real
    local integer i=0
   
    loop // si l'angle est négatif on le rend exploitable
    exitwhen r>=0.0
        set r=r+360.0
    endloop
   
    loop // si l'angle est supérieur ou égal à 360° on le rend exploitable
    exitwhen r<360.0
        set r=r+360.0
    endloop
   
   
    loop
    exitwhen false
        if r-ERR_TRIGO*i < ERR_TRIGO then
            return COS[i]
        endif
    set i=i+1
    endloop
   
    return 0.0 // ne sera jamais exécuté, simplement pour ne pas avoir une erreur de compilation
   
endfunction

private function Init takes nothing returns nothing
    local integer inc=R2I(360/ERR_TRIGO)
    local integer i=0
   
    loop
    exitwhen i==inc
        set COS[i]=Cos(i)
    set i=i+1
    endloop
   
endfunction


endlibrary


Remarques :
- C'est juste un code théorique, je n'ai donc pas vérifié si le limit op était atteint
- Je sais que la plupart des fonctions demandes des radians et non des degrés mais c'est pour un exemple plus clair.
Les degrés ca me parle plus que les radians Razz
- Il vaudrait mieux utiliser la méthode plutot que la fonction non native GetCos pour un gain de peformance, avec une macro ou define
_________________
Le violet, c'est moche.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Ayane
Bot administrateur


Inscrit le: 17 Sep 2007
Messages: 2009
Sujets: 49

Médailles: 2 (En savoir plus...)
Ayane (Quantité : 1) Rédacteur de tuto #1 (Quantité : 1)

MessagePosté le: 14/02/08 19:24    Sujet du message: Citer

C'est bien cela le principe, tu as bien une boucle dans l'init, par contre on en a pas dans le GetCos.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger
 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...)
Grand mage créateur de sort (Quantité : 1) Rédacteur de tuto #3 (Quantité : 1)

MessagePosté le: 14/02/08 19:26    Sujet du message: Citer

Ayane a écrit:
C'est bien cela le principe, tu as bien une boucle dans l'init, par contre on en a pas dans le GetCos.


Explique moi comment alors Surprised
A moins que tu utilises la fonction R2I
_________________
Le violet, c'est moche.
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 -> Présentation de vos cartes Toutes les heures sont au format GMT + 1 Heure
Aller à la page Précédente  1, 2, 3, 4, 5  Suivante
Page 4 sur 5

 
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