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...)
|
Posté le: 26/03/08 18:43 Sujet du message: Tout sur les objets |
|
|
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 For each (Integer A) from 2 to 6, do (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 |
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 For each (Integer A) from 1 to 6, do (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 |
|
|
Gevans Back
Inscrit le: 21 Aoû 2007 Messages: 1930 Sujets: 85
Médailles: 2 (En savoir plus...)
|
Posté le: 06/04/08 18:06 Sujet du message: |
|
|
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 |
|
|
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...)
|
|
Revenir en haut |
|
|
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...)
|
Posté le: 06/04/08 18:22 Sujet du message: |
|
|
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 |
|
|
Gevans Back
Inscrit le: 21 Aoû 2007 Messages: 1930 Sujets: 85
Médailles: 2 (En savoir plus...)
|
Posté le: 11/04/08 15:41 Sujet du message: |
|
|
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 |
|
|
SnowWolf Anomalie floodiforme
Inscrit le: 06 Nov 2007 Messages: 1617 Sujets: 62 Spécialité en worldedit: Pourquoi pas ? Médailles: 1 (En savoir plus...)
|
|
Revenir en haut |
|
|
Boulefou Membre honoraire
Inscrit le: 16 Nov 2007 Messages: 325 Sujets: 13 Spécialité en worldedit: euh... pas le jass!
|
|
Revenir en haut |
|
|
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...)
|
Posté le: 11/04/08 19:04 Sujet du message: |
|
|
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 |
|
|
Gevans Back
Inscrit le: 21 Aoû 2007 Messages: 1930 Sujets: 85
Médailles: 2 (En savoir plus...)
|
Posté le: 11/04/08 19:12 Sujet du message: |
|
|
- 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 |
|
|
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...)
|
Posté le: 11/04/08 19:16 Sujet du message: |
|
|
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 |
|
|
Gevans Back
Inscrit le: 21 Aoû 2007 Messages: 1930 Sujets: 85
Médailles: 2 (En savoir plus...)
|
Posté le: 11/04/08 20:02 Sujet du message: |
|
|
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 |
|
|
Gevans Back
Inscrit le: 21 Aoû 2007 Messages: 1930 Sujets: 85
Médailles: 2 (En savoir plus...)
|
|
Revenir en haut |
|
|
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...)
|
|
Revenir en haut |
|
|
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...)
|
Posté le: 12/04/08 02:11 Sujet du message: |
|
|
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 |
|
|
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...)
|
Posté le: 12/04/08 12:17 Sujet du message: |
|
|
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 |
|
|
|