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=6f158898d05e220422d745db1cbbfdc7Mé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

Tout sur les objets
Aller à la page 1, 2  Suivante
 
Poster un nouveau sujet   Répondre au sujet    Worldedit Index du Forum -> Tutoriels
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
 Gevans
Back


Inscrit le: 21 Aoû 2007
Messages: 1930
Sujets: 85

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

MessagePosté le: 26/03/08 18:43    Sujet du message: Tout sur les objets Citer

Etant donné que les questions sur les objets se multiplient sur le forum, j'ai pensé qu'il faudrait faire un tuto là dessus, malheureusement je ne vois pas trop comment faire une liste exhaustive de toutes les possibilités que les déclencheurs offrent concernant la gestion des objets donc je vais juste montrer quelques systèmes simples que je complèterai au fur et à mesure.

Au passage j'invite tout le monde à compléter cette liste (vous pouvez m'envoyer un MP et oui vous serez cités en rouge même !)

I/ Préambule

Avant de commencer mettons les choses au clair.

Les objets sont utilisés par des héros dans l'inventaire (inventory en anglais).
Chaque emplacement de l'inventaire (6 en tout) est un slot numéroté de 1 à 6.

Dans tout le tuto j'utiliserai une variable heros qui stockera tout simplement mon héros (nan !?!?!).

Dernière remarque (mais très importante), je n'ai pas mis les évènement dans les déclos. Pourquoi ? Parce qu'il est impossible de faire directement l'événement "heros obtient un objet", il faut donc passer par un déclencheur d'initialisation qui ajoutera les évènements en mettant ainsi ce qu'il faut.

Gui:
Trigger:
Actions
Déclencheur - Add to DECLO the event (Unité - heros Acquiert un objet)


II/ Comment faire pour forcer un héros à ne posséder qu'un seul objet ?

Bon théoriquement si dans toute la partie on ne peut porter qu'un seul objet, il ne peut y en avoir au plus qu'un au slot 1. Néanmoins comme on peut toujours changer l'objet de place dans son inventaire il faut vérifier que tous les slots sauf le 1 sont vides.

Si le 1 est plein, on dégage l'objet qui s'y trouve et on ajoute le nouveau.

a) On vérifie que tout est vide sauf le slot 1

Il suffit de vérifier que tous les slots sont vides sauf le premier donc de boucler de 2 à 6.

objet au slot 1

Gui:
Trigger:
Actions
Collapse For each (Integer A) from 2 to 6, do (Actions)
Collapse Boucle - Actions
Collapse If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Collapse Si - Conditions
(Item carried by heros in slot (Integer A)) Différent de Pas d'objet
Collapse Alors - Actions
Unité - Order heros to move (Item carried by heros in slot (Integer A)) to inventory slot 1
Collapse Sinon - Actions


Voilà cette petite boucle vérifie que tout est vide dans l'inventaire sauf le premier slot, ainsi si un petit malin décide de changer l'objet de place dans l'inventaire, cet objet va être posé au slot 1 (c'est qui le patron ?!).

b) On remplace l'objet qui se trouve au slot 1

A présent il en reste plus qu'à couper attendre que le joueur ramasse un objet, à supprimer le précédent et à déplacer cet objet en slot 1.

Si vous avez utilisé le déclencheur précédent comme une boucle périodique, il faudra penser à l'interrompre le temps de faire cette opération sinon l'objet ne va pas rester longtemps en slot 2.

Il y a plusieurs subtilités ici donc lisez bien l'explication qui suit.

Un seul objet

Gui:
Trigger:
Actions
Déclencheur - Turn off objet au slot 1 <gen>
Unité - Order heros to move (Item being manipulated) to inventory slot 2
Objet - Remove (Item carried by heros in slot 1)
Unité - Order heros to move (Item being manipulated) to inventory slot 1
Wait 1.00 seconds
Déclencheur - Turn on objet au slot 1 <gen>


Pour commencer objet au slot 1 n'est autre que le nom du premier déclencheur, il faut bien l'arrêter comme je l'ai dit plus haut.
Ensuite pourquoi ordonner au héros de mettre l'objet au slot 2 pour ensuite le mettre au slot 1 et pas directement virer celui qui est au slot 1 puis mettre l'objet obtenu à sa place ?
En fait c'est parce que sinon il sera tout simplement impossible d'avoir un objet (bah oui le premier objet on le prend comment ?) avec cette méthode ça marche impec.

J'ai décidé de supprimer l'objet, mais si vous voulez juste le déposer par terre, faites attention de ne pas le poser à la position du héros, sinon automatiquement il va se retrouver dans l'inventaire.


III/ Faire des piles d'objets

Ce qu'on va voir ici, c'est comment faire des piles d'objets, concrètement cela signifie que lorsque vous trouverez un pack de 3 potions et que vous en possédez déjà 5, vous aurez un seul pack de 8 potions.

Le principe est simple : au moment où une unité ramasse un objet, on vérifie si elle possédait déjà un certain nombre d'objets du même type. Si c'est le cas, on supprime tout et on lui ajoute le même objet avec le nombre de charge total (celui possédait avant + celui ramassé).

Pour cela il faut une variable charge qui contiendra le nombre de charge de l'objet que l'on possède vous allez vite comprendre pourquoi.

Remplacer objet

Gui:
Trigger:
Actions
Collapse For each (Integer A) from 1 to 6, do (Actions)
Collapse Boucle - Actions
Collapse If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Collapse Si - Conditions
(Item-type of (Item carried by heros in slot (Integer A))) Egal à  (Item-type of (Item being manipulated))
(Item carried by heros in slot (Integer A)) Différent de (Item being manipulated)
(Item-class of (Item being manipulated)) Egal à  Chargé
Collapse Alors - Actions
Set charge = (Charges remaining in (Item carried by heros in slot (Integer A)))
Objet - Remove (Item carried by heros in slot (Integer A))
Unité - Order heros to move (Item being manipulated) to inventory slot (Integer A)
Objet - Set charges remaining in (Item being manipulated) to (charge + (Charges remaining in (Item being manipulated)))
Collapse Sinon - Actions


Grosso modo ce qu'on fait ici c'est.
1/ On fait une boucle qui regarde chaque objet dans l'inventaire

2/ On s'arrête lorsque l'on a les conditions suivantes :
L'objet est bien du même type
L'objet est différent de celui que l'on ramasse, car sinon nécessairement la boucle s'arrêterait sur l'objet qu'on vient de ramasser.
L'objet est bien du type chargé, car sinon lorsque vous ramassez un objet quelconque, vous ne pourrez pas en porter 2

3/ Si tout est en règle, on procède ainsi :
D'abord on note le nombre de charge puis on supprime l'objet contenu dans l'inventaire.
Ensuite on prend l'objet ramassé et on le déplace au slot où se trouvait son prédécesseur.
Enfin on ajoute le nombre de charge stockée dans la variable.

Cette méthode marche mais elle a une limite assez gênante : en effet si votre inventaire est plein vous ne pourrez pas le prendre (effectivement il faut une place de libre).


Ce tuto est terminé mais je n'exclus pas de rajouter des systèmes au fur et à mesure.

Voilà la map présentant les systèmes :
Map tuto sur les objets
_________________
Si vous recherchez quelque chose, il y a de très grandes chances que vous trouviez la réponse ici alors jetez y un oeil.
Topic indispensable


Dernière édition par Gevans le 12/04/08 18:34; édité 5 fois
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé Envoyer l'e-mail Visiter le site web du posteur MSN Messenger
 Gevans
Back


Inscrit le: 21 Aoû 2007
Messages: 1930
Sujets: 85

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

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

voilà pour commencer
_________________
Si vous recherchez quelque chose, il y a de très grandes chances que vous trouviez la réponse ici alors jetez y un oeil.
Topic indispensable
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé Envoyer l'e-mail Visiter le site web du posteur MSN Messenger
 Rommstein60
MODÉRATEUR À LA RETRAITE


Inscrit le: 23 Aoû 2007
Messages: 4766
Sujets: 136
Spécialité en worldedit: Keskesapeutfout'
Médailles: 1 (En savoir plus...)
Rédacteur de tuto #1 (Quantité : 1)

MessagePosté le: 06/04/08 18:09    Sujet du message: Citer

Très bon tuto Wink
Faut demander aux admins si ils peuvent le mettre en officiel mais tout me semble bon !

XD

_________________
Leçon n°1 du WorldEdit : « Le violet > Troll-Brain »
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: 06/04/08 18:22    Sujet du message: Citer

J'aimerais insister sur le fait que même si vous utilisez une variable unité pour rajouter l'event spécifique, l'unité prise en compte ne changera pas si vous changez la valeur de votre variable unité.

J'ai pas compris l'utilité de Comment faire pour forcer un héros à ne posséder qu'un seul objet ?

On peut personnaliser les compétences inventaires pour limiter le nombre de slots.

Si le héros possède un objet dans le slot1 , et qu'il acquiert un nouveau objet dans le slot 2 que se passe t'il ?

Pourquoi le wait 1s ?

Tu peux rajouter un skip remaining actions pour la pile d'objet
_________________
Le violet, c'est moche.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Gevans
Back


Inscrit le: 21 Aoû 2007
Messages: 1930
Sujets: 85

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

MessagePosté le: 11/04/08 15:41    Sujet du message: Citer

Le fait de faire comme moi et non de mettre un seul slot permet d'activer cette fonction quand on veut dans le jeu.
_________________
Si vous recherchez quelque chose, il y a de très grandes chances que vous trouviez la réponse ici alors jetez y un oeil.
Topic indispensable
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé Envoyer l'e-mail Visiter le site web du posteur MSN Messenger
 SnowWolf
Anomalie floodiforme


Inscrit le: 06 Nov 2007
Messages: 1617
Sujets: 62
Spécialité en worldedit: Pourquoi pas ?
Médailles: 1 (En savoir plus...)
Auteur de la bannière (Quantité : 1)

MessagePosté le: 11/04/08 18:16    Sujet du message: Citer

Super le Tuto Smile
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur
 Boulefou
Membre honoraire


Inscrit le: 16 Nov 2007
Messages: 325
Sujets: 13
Spécialité en worldedit: euh... pas le jass!


MessagePosté le: 11/04/08 18:24    Sujet du message: Citer

ouais, ça peux servir Smile
_________________
This comment is a lie!
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: 11/04/08 19:04    Sujet du message: Citer

General Vans a écrit:
Le fait de faire comme moi et non de mettre un seul slot permet d'activer cette fonction quand on veut dans le jeu.

on peut retirer/ajouter la compétence objet ^^
sinon je renouvelle mes questions :

- Si le héros possède un objet dans le slot1 , et qu'il acquiert un nouveau objet dans le slot 2 que se passe t'il ?

- Pourquoi le wait 1s ?
_________________
Le violet, c'est moche.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Gevans
Back


Inscrit le: 21 Aoû 2007
Messages: 1930
Sujets: 85

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

MessagePosté le: 11/04/08 19:12    Sujet du message: Citer

- Ca supprime l'objet qui est dans le slot 1 et ça met l'objet du slot 2 dans le slot 1.
(la suppression c'est arbitraire, ça pourrait être n'importe quoi genre le déposer sous le héros).

- Parce que sinon ça marchait pas, l'autre déclo se remettait tout de suite en marche et ça buggait, donc j'ai mis un wait avant de le réactiver mais le 1s n'a aucune raison d'être, enfin j'ai testé et c'est assez rapide quand même.
_________________
Si vous recherchez quelque chose, il y a de très grandes chances que vous trouviez la réponse ici alors jetez y un oeil.
Topic indispensable
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé Envoyer l'e-mail Visiter le site web du posteur 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: 11/04/08 19:16    Sujet du message: Citer

Citation:
- Ca supprime l'objet qui est dans le slot 1 et ça met l'objet du slot 2 dans le slot 1.
(la suppression c'est arbitraire, ça pourrait être n'importe quoi genre le déposer sous le héros).

Je supposes que tu as testé mais ce n'est pas ce que j'aurais cru en regardant le code.
Un wait de 0s me semble amplement suffisant (en réalité c'est environ 0.2s)
Ca doit être ce genre d'action qui ne s'effectue pas "instantanément", trés chiant à gérer parfois ...
_________________
Le violet, c'est moche.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Gevans
Back


Inscrit le: 21 Aoû 2007
Messages: 1930
Sujets: 85

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

MessagePosté le: 11/04/08 20:02    Sujet du message: Citer

oui la logique est worldedit c'est parfois .... enfin bon, normalement même sans wait ça aurait du marcher s'il effectue les actions l'une après l'autre
_________________
Si vous recherchez quelque chose, il y a de très grandes chances que vous trouviez la réponse ici alors jetez y un oeil.
Topic indispensable
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé Envoyer l'e-mail Visiter le site web du posteur MSN Messenger
 Gevans
Back


Inscrit le: 21 Aoû 2007
Messages: 1930
Sujets: 85

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

MessagePosté le: 11/04/08 20:02    Sujet du message: Citer

Et pour les customs values, je t'avoue que je ne m'y connais pas assez Sad
_________________
Si vous recherchez quelque chose, il y a de très grandes chances que vous trouviez la réponse ici alors jetez y un oeil.
Topic indispensable
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé Envoyer l'e-mail Visiter le site web du posteur 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: 11/04/08 20:04    Sujet du message: Citer

General Vans a écrit:
oui la logique est worldedit c'est parfois .... enfin bon, normalement même sans wait ça aurait du marcher s'il effectue les actions l'une après l'autre

oui mais y'a des actions qui sont lentes, c'est à dire qu'elles s'éxécuteront aprés que les autres actions ont été réalisées (sans un wait bien sûr).
Heureusement elles sont peu nombreuses mais on peut parfois s'arracher les cheveux pour trouver l'erreur Rolling Eyes

Gui:
Trigger:
acquiert
Collapse Evénements
Unité - A unit Acquiert un objet
Conditions
Collapse Actions
Collapse If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Collapse Si - Conditions
(Custom value of (Item being manipulated)) Egal à  0
Collapse Alors - Actions
Objet - Set the custom value of (Item being manipulated) to (Player number of (Triggering player))
Collapse Sinon - Actions
Collapse If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Collapse Si - Conditions
(Player number of (Triggering player)) Différent de (Custom value of (Item being manipulated))
Collapse Alors - Actions
Unité - Order (Triggering unit) to drop (Item being manipulated) at (Position of (Triggering unit))
Partie - Display to (All players) the text: ((Name of (Triggering player)) + ( n'essaye pas de voler  + (Name of (Player((Custom value of (Item being manipulated)))))))
Collapse Sinon - Actions


Remarques :

- Par défaut une custom value = 0 quand elle n'a pas été encore définie
- les fonctions gui décalent de +1 le numéro réel du joueur.
Player(0) (jass) -> Joueur 1 (rouge) en gui.
donc on aura jamais 0
- J'ai pas optimisé ce n'est qu'un modèle, à toi de paufiner avec l'utilisation de variables mais who care Razz
- Pour les items qui s'utilisent automatiquement une fois acquis faudra peut être détecter un ordre sur un item plutôt que d'attendre que l'unité l'acquiert et ait le temps de l'utiliser quand même (à tester).
- on peut aussi empêcher l'attaque des objets par un joueur ne les possédant pas
_________________
Le violet, c'est moche.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 profet
Instanton Gravitationnel Singulier


Inscrit le: 21 Aoû 2007
Messages: 1633
Sujets: 53
Spécialité en worldedit: Pain d'épice multitâche (terrain, scripts, textures, modèles...)
Médailles: 2 (En savoir plus...)
Rédacteur de tuto #3 (Quantité : 1) Profet (Quantité : 1)

MessagePosté le: 12/04/08 02:11    Sujet du message: Citer

Troll-Brain a écrit:
oui mais y'a des actions qui sont lentes, c'est à dire qu'elles s'éxécuteront aprés que les autres actions ont été réalisées (sans un wait bien sûr).
Ce n'est pas une question de "vitesse" mais de thread, par exemple un appel de fonction normal execute la fonction dans le meme thread donc attend que cette fonction soit terminée avant d'effectuer les actions suivantes.
Par contre, ExecuteFunc lance la fonction dans un nouveau thread, sortant celle-ci du thread existant, les actions restantes n'attendront donc pas que cette fonction soit finie pour s'executer.
_________________

Bêta Systems: 70%
Bêta Spells: 13%
Bêta Arts & graphics: 70%
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur
 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: 12/04/08 12:17    Sujet du message: Citer

profet a écrit:
Troll-Brain a écrit:
oui mais y'a des actions qui sont lentes, c'est à dire qu'elles s'éxécuteront aprés que les autres actions ont été réalisées (sans un wait bien sûr).
Ce n'est pas une question de "vitesse" mais de thread, par exemple un appel de fonction normal execute la fonction dans le meme thread donc attend que cette fonction soit terminée avant d'effectuer les actions suivantes.
Par contre, ExecuteFunc lance la fonction dans un nouveau thread, sortant celle-ci du thread existant, les actions restantes n'attendront donc pas que cette fonction soit finie pour s'executer.


Je parles pas de ExecuteFunc qui est une fonction trés particulière.
Aprés je ne possède pas le vocabulaire nécessaire et c'est peut être bien une histoire de thread, mais je ne pense pas.
y'a bien des fonctions qui mettent un certain temps avant de s'éxécuter.

PS : General on ne voit pas le nom de tes triggers
_________________
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 -> Tutoriels Toutes les heures sont au format GMT + 1 Heure
Aller à la page 1, 2  Suivante
Page 1 sur 2

 
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