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=4d97e80467460f7209a1df5fc137473eMé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

Je me mets un petit peu au Jass
Aller à la page Précédente  1, 2, 3, 4, 5, 6  Suivante
 
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
 Rhadamante
Petit flooder


Inscrit le: 28 Aoû 2007
Messages: 1457
Sujets: 24
Spécialité en worldedit: Bêêh hé hé hé !
Médailles: 3 (En savoir plus...)
Créateur de race (Quantité : 1) Grand décorateur (Quantité : 2)

MessagePosté le: 17/06/08 23:18    Sujet du message: Citer

[Master] a écrit:
Pour le reste ta solution est fiable comme elle est. Si tu veux pousser plus il faudrait ne pas détruire le déclencheur et surtout ne pas le créer s'il existe déjà. Tu peux utiliser un gamecache pour te rappeler de quel déclencheur a déjà été créé.


Est-ce que garder un déclencheur pour chaque unité ça risque pas de faire beaucoup si je place beaucoup d'unité, surtout si je dois stocker ça dans un game cache ? Est-ce que j'y gagnerais vraiment en vitesse d'exécution, en ressources utilisées, etc. ?
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger
 Magus
Membre a fort taux de post


Inscrit le: 13 Oct 2007
Messages: 994
Sujets: 25
Spécialité en worldedit: Codeur


MessagePosté le: 17/06/08 23:21    Sujet du message: Citer

Imagine une unité se fait frapper 100 fois par seconde, tu vas créer 100 fois le même déclencheur puis le détruire. Le mieux est donc de ne le créer qu'une seule fois. Un simple test, même via un gamecache est plus court qu'une création de déclencheur.
_________________
- La théorie c'est quand rien ne fonctionne mais tout le monde sait pourquoi.
- La pratique c'est quand tout fonctionne mais personne ne sait pourquoi.
- Chez moi la théorie et la pratique sont réunies, rien ne fonctionne et personne ne sait pourquoi.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger
 Rhadamante
Petit flooder


Inscrit le: 28 Aoû 2007
Messages: 1457
Sujets: 24
Spécialité en worldedit: Bêêh hé hé hé !
Médailles: 3 (En savoir plus...)
Créateur de race (Quantité : 1) Grand décorateur (Quantité : 2)

MessagePosté le: 17/06/08 23:31    Sujet du message: Citer

Bon, dans ce cas, si ça ne te dérange pas, j'aimerais bien que tu me montres comment faire, notamment comment reconnaitre un déclencheur déjà crée.
Merci pour tes réponse passées et, j'espère, à venir.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger
 Magus
Membre a fort taux de post


Inscrit le: 13 Oct 2007
Messages: 994
Sujets: 25
Spécialité en worldedit: Codeur


MessagePosté le: 17/06/08 23:36    Sujet du message: Citer

Je n'ai pas worldedit car je suis chez mes parents. Je rentre chez moi demain.
_________________
- La théorie c'est quand rien ne fonctionne mais tout le monde sait pourquoi.
- La pratique c'est quand tout fonctionne mais personne ne sait pourquoi.
- Chez moi la théorie et la pratique sont réunies, rien ne fonctionne et personne ne sait pourquoi.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger
 Rhadamante
Petit flooder


Inscrit le: 28 Aoû 2007
Messages: 1457
Sujets: 24
Spécialité en worldedit: Bêêh hé hé hé !
Médailles: 3 (En savoir plus...)
Grand décorateur (Quantité : 2) Créateur de race (Quantité : 1)

MessagePosté le: 17/06/08 23:41    Sujet du message: Citer

Pas de problème, en même temps vu l'heure, je ne m'attendais pas à une réponse immédiate. Ça me laissera le temps d'y réfléchir un peu de mon côté.
_________________
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: 18/06/08 01:33    Sujet du message: Citer

Secret:

Jass:
function H2I takes handle h returns integer
return h
return 0
endfunction

function MapInit takes nothing returns nothing
    set GC = InitGameCache("nom que tu veut sans espace")
endfunction

function UnitInCache takes unit u returns boolean
    if(HaveStoredBoolean(GC,"se que tu veut",I2S(H2I(u))))then
        return true
    else
        call StoreBoolean(GC,"se que tu veut",I2S(H2I(u)),true)
        return false
    endif
endfunction



Je pense qu'avec cela tu devrai t'en sortir.Tu peut (et même je te le conseil) d'implanté la fonction a l'intérieur de ta fonction d'une façon plus optimisé.

(Dans cette État là , la fonction renverra true si l'unité a déjà était appelé avec cette unité en argument , dans le cas contraire elle renverra false)

Mais je pense que le plus simple serai qu'au lieu d'écrire une booléene inutile dans le gamecache il vaudrait mieux écrire l'handle du trigger.

Jass:

function I2T takes integer i returns trigger
return i
return null
endfunction

//Pour la recuperer
set Trigger = I2T(GetStoredInteger(...))

//Pour l'enregistrer
call StoreInteger(...,H2I(Trigger))

//Pour vérifier la présence
call HaveStoredInteger(...)


Ce n'est pas très claire comme explication , mais je pense que tu as comme même compris se qu'il faut faire.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé Envoyer l'e-mail MSN Messenger
 Magus
Membre a fort taux de post


Inscrit le: 13 Oct 2007
Messages: 994
Sujets: 25
Spécialité en worldedit: Codeur


MessagePosté le: 18/06/08 10:49    Sujet du message: Citer

Et petite remarque si tu comptes optimiser a fond. Tu peux détruire le déclencheur qui va avec lorsqu'une unité meurt.
_________________
- La théorie c'est quand rien ne fonctionne mais tout le monde sait pourquoi.
- La pratique c'est quand tout fonctionne mais personne ne sait pourquoi.
- Chez moi la théorie et la pratique sont réunies, rien ne fonctionne et personne ne sait pourquoi.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger
 Rhadamante
Petit flooder


Inscrit le: 28 Aoû 2007
Messages: 1457
Sujets: 24
Spécialité en worldedit: Bêêh hé hé hé !
Médailles: 3 (En savoir plus...)
Grand décorateur (Quantité : 2) Créateur de race (Quantité : 1)

MessagePosté le: 18/06/08 13:50    Sujet du message: Citer

Bon voilà j'ai essayé un truc, mais c'est probablement du grand n'importe quoi (d'où le nom "truc") :

Jass:
function Trig_degatbis_Actions takes nothing returns nothing
    call DisplayTextToPlayer(Player(0), 0, 0, "Text Tag - " + R2S(GetEventDamage())) // débug
    call TextTagDamage(GetEventDamage(), GetTriggerUnit(), 50.0, 96.0, GetRandomReal(75.0, 105.0), 10, 0, 0.75, "critique") // affiche les dégats
endfunction

//===========================================================================
function Trig_degat_Actions takes nothing returns nothing
    local unit target = GetTriggerUnit()
    local trigger trg_degatbis = null

    if HaveStoredInteger(udg_GC, "degat", I2S(H2I(target)) ) == true then
   
        set trg_degatbis = I2T(GetStoredInteger(udg_GC, "degat", I2S(H2I(target)) ))
        call DisplayTextToPlayer(Player(0), 0, 0, "trigger récupéré") // débug
       
    else
   
        set trg_degatbis = CreateTrigger()
        call TriggerRegisterUnitEvent( trg_degatbis, target, EVENT_UNIT_DAMAGED )
        call TriggerAddAction( trg_degatbis, function Trig_degatbis_Actions )
       
        call StoreInteger(udg_GC, "degat", I2S(H2I(target)), H2I(trg_degatbis))
       
        call DisplayTextToPlayer(Player(0), 0, 0, "trigger créé et stocké") // débug
       
    endif
   
    set trg_degatbis = null
    set target = null
endfunction

//===========================================================================
function InitTrig_degat takes nothing returns nothing
    set gg_trg_degat = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_degat, EVENT_PLAYER_UNIT_ATTACKED )
    call TriggerAddAction( gg_trg_degat, function Trig_degat_Actions )
endfunction


Dans la pratique, la première fois que je tape une unité, ça affiche "trigger créé et stocké", et les fois suivantes, "trigger récupéré". Dans tout les cas, les dégâts s'affichent comme prévu.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger
 Magus
Membre a fort taux de post


Inscrit le: 13 Oct 2007
Messages: 994
Sujets: 25
Spécialité en worldedit: Codeur


MessagePosté le: 18/06/08 14:37    Sujet du message: Citer

Globalement, c'est bon.
Juste quelques remarques pour t'améliorer :

Jass:
if HaveStoredInteger(udg_GC, "degat", I2S(H2I(target)) ) == true then

"== true" ne sert a rien. Tu peux directement remplacer par
Jass:
if HaveStoredInteger(udg_GC, "degat", I2S(H2I(target)) ) then

Pourquoi ? Parce que HaveStoredInteger renvoit de toutes façons un booléen, et c'est ce dont a besoin un if pour fonctionner. Il est donc inutile de le comparer a "true".

Ensuite, I2S(H2I(target)) est assez lent a s'exécuter, place le résultat dans une variable local plutot de le recalculer a chaque fois que tu en as besoin. Et cette remarque fonctionne pour tous les résultats calculés par des fonctions que tu devrais utiliser plusieurs fois. Il est toujours moins gourmand de les stocker quelque part.
_________________
- La théorie c'est quand rien ne fonctionne mais tout le monde sait pourquoi.
- La pratique c'est quand tout fonctionne mais personne ne sait pourquoi.
- Chez moi la théorie et la pratique sont réunies, rien ne fonctionne et personne ne sait pourquoi.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger
 Rhadamante
Petit flooder


Inscrit le: 28 Aoû 2007
Messages: 1457
Sujets: 24
Spécialité en worldedit: Bêêh hé hé hé !
Médailles: 3 (En savoir plus...)
Créateur de race (Quantité : 1) Grand décorateur (Quantité : 2)

MessagePosté le: 19/06/08 10:25    Sujet du message: Citer

Merci de tes réponses.

Une autre question, elles concernent les string :

Jass:
    call DialogSetMessage( udg_ChoixType, "TRIGSTR_764" )
    call DialogAddButton( udg_ChoixType, "TRIGSTR_765", 0 )


Est-ce qu'il vaut mieux garder "TRIGSTR_764" ou mettre directement le message, ou est-ce que ça change rien du tout ?
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger
 Magus
Membre a fort taux de post


Inscrit le: 13 Oct 2007
Messages: 994
Sujets: 25
Spécialité en worldedit: Codeur


MessagePosté le: 19/06/08 11:07    Sujet du message: Citer

En théorie ça change rien.
En pratique, c'est ce qu'on appel extériorisé les strings. Pourquoi ?
Je t'explique, imagine tu fais ton programme (ou ta carte) et un jour il te prend l'idée "Bon le français ça suxx, je vais traduire en anglais". Mais celui qui traduit n'est pas forcement programmeur et c'est d'ailleur dans le monde professionnel jamais le cas. Donc si le monsieur traducteur il doit se taper ton code pour traduire les strings qui s'affichent, il va se tirer une balle direct.
Donc on préfère mettre toutes les strings destinés a être lus par les utilisateurs au même endroit plutôt que de les écrires directement dans le code.

Maintenant, le GUI lui place ces strings dans un fichier a part. Tu peux très bien faire autrement, comme en faire des constants que tu déclareras au même endroit.
_________________
- La théorie c'est quand rien ne fonctionne mais tout le monde sait pourquoi.
- La pratique c'est quand tout fonctionne mais personne ne sait pourquoi.
- Chez moi la théorie et la pratique sont réunies, rien ne fonctionne et personne ne sait pourquoi.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger
 Rhadamante
Petit flooder


Inscrit le: 28 Aoû 2007
Messages: 1457
Sujets: 24
Spécialité en worldedit: Bêêh hé hé hé !
Médailles: 3 (En savoir plus...)
Créateur de race (Quantité : 1) Grand décorateur (Quantité : 2)

MessagePosté le: 19/06/08 11:20    Sujet du message: Citer

Je te remercie, j'avais compris le pourquoi mais je me demandais juste si ça avait une quelconque influence sur les performances ou autre.

Pour en revenir à :
Jass:
    call DialogAddButton( udg_ChoixType, "TRIGSTR_765", 0 )


Le troisième argument c'est le "hotkey", ça correspond à quoi ? Si c'est pour indiquer la touche qui active ce bouton, et que vu que je suis censé mettre un entier, comment puis-je connaître les correspondances ?
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger
 Magus
Membre a fort taux de post


Inscrit le: 13 Oct 2007
Messages: 994
Sujets: 25
Spécialité en worldedit: Codeur


MessagePosté le: 19/06/08 11:31    Sujet du message: Citer

Bah alors la j'avoue que je me suis jamais posé la question :/
_________________
- La théorie c'est quand rien ne fonctionne mais tout le monde sait pourquoi.
- La pratique c'est quand tout fonctionne mais personne ne sait pourquoi.
- Chez moi la théorie et la pratique sont réunies, rien ne fonctionne et personne ne sait pourquoi.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger
 Rhadamante
Petit flooder


Inscrit le: 28 Aoû 2007
Messages: 1457
Sujets: 24
Spécialité en worldedit: Bêêh hé hé hé !
Médailles: 3 (En savoir plus...)
Grand décorateur (Quantité : 2) Créateur de race (Quantité : 1)

MessagePosté le: 19/06/08 12:44    Sujet du message: Citer

J'ai fait quelques petites recherches, et j'ai trouvé ça (je parle pas de la native mais de la liste aprés, hein ? Laughing ) :

Jass:
native DialogAddButton takes dialog whichDialog, string buttonText, integer hotkey returns button


touche ---> valeur de hotkey

0 ---> 48
1 ---> 49
2 ---> 50
3 ---> 51
4 ---> 52
5 ---> 53
6 ---> 54
7 ---> 55
8 ---> 56
9 ---> 57

Pour les chiffres ça ne fonctionne pas avec ceux du clavier numérique.

A ---> 65
B ---> 66
C ---> 67
D ---> 68
E ---> 69
F ---> 70
G ---> 71
H ---> 72
I ---> 73
J ---> 74
K ---> 75
L ---> 76
M ---> 77
N ---> 78
O ---> 79
P ---> 80
Q ---> 81
R ---> 82
S ---> 83
T ---> 84
U ---> 85
V ---> 86
W ---> 87
X ---> 88
Y ---> 89
Z ---> 90

Pour les lettres, il n'y a pas de différence entre majuscules et minuscules.

Et le plus important :

ESC ---> 512
_________________
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: 21/06/08 14:08    Sujet du message: Citer

Avoir des strings extérieurs rallonge le temps de chargement de la map.
Au niveau performance je n'en sais trop rien, mais je suppose qu'utiliser un string extérieur est plus lent.
A choisir entre un string extérieur et un string constant je choisirais un string constant

@Rhadamante : le code ASCII koa, sauf pour la touche echap
_________________
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
Aller à la page Précédente  1, 2, 3, 4, 5, 6  Suivante
Page 5 sur 6

 
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