Posté le: 25/01/09 19:24 Sujet du message: Méthode d'inventaire illimité (ici 6+6+12 slots) en Gui.
I/ Introduction
Commentaires
Ce système est loi n d’être maniable ; au contraire, il s’agit d’une véritable usine à gaz. Pensez qu’il faudra au minimum pour chaque objet créé, en plus : une compétence objet, une compétence unité, une compétence livre de sort, plusieurs variables associées à cet unique objet.
En revanche, il vous permet de vous débarrasser des objets qui prennent de la place dans l’inventaire traditionnel ; j’entends par là que tout ce qui est arme, bouclier, anneau et compagnie, ne servent à rien en cours de carte : on ne clique pas dessus contrairement aux potions.
Mon système propose d’expulser les objets de votre choix dans des livres de sorts.
Dans mon exemple (la carte fournie peut même servir de template, j’y ai créé beaucoup d’objets), le héros disposera donc : de son inventaire habituel pour stocker les potions et les objets avant qu’il ne s’équipe avec, et de deux compétences livre de sort : Equipement lourd et Joyaux.
L’équipement lourd permet de s’équiper d’une ou deux armes (selon l’arme), d’un bouclier (si il n’y a pas de deuxième arme), d’une armure et d’un casque .
Les joyaux permettent de s’équiper d’artefacts jusqu’au nombre de 12. (Là en revanche j’avais la flemme, ma carte ne comporte qu’un seul anneau).
Enfin, ce système est intégralement en Gui. En revanche, si vous possédez des rudiments de Jass, n’hésitez pas à convertir mes déclencheurs : le Gui est ici extrêmement lourd, mais pratique pour faire comprendre la méthode.
Prérecquis
-De solides connaissances de Gui
-La maîtrise de l’ajout de compétences par livre de sort : Tuto ici
II/ Unités, objets, compétences et recherches
Voici la liste des objets nécessaires :
Recherches
Prenez l’amélioration « canon longs » des humains. Copiez-la une première fois, et modifiez les champs :
Bonus de portée d’attaque -base à 100
Bonus de portée d’attaque -incréments à 100
Les bases et incréments d’or, de bois et de temps à 0.
Le nombre de niveaux à 100 (pour l’exemple ; dans une grosse carte, il sera mieux de le mettre à 3000, même si sur le moment, votre ordinateur moulinera).
J’appelle cette recherche portée +100.
Copiez cette première compétence personnalisée, collez-là, et modifiez cette fois les deux champs :
Bonus de portée d’attaque -base à -100
Bonus de portée d’attaque -incréments à -100
J’appelle cette recherche portée -100.
Compétences
Bienvenue dans mon humble usine à gaz.
Pour procéder avec méthode, je vais ne décrire qu’une seule arme.
Nous allons créer une hache.
Prenez donc n’importe quelle compétence objet bonus de dégât en attaque. Modifiez les points d’attachement (Tuto ici) si désiré. Dans ma carte, j’ai donné des modèles personnalisés aux compétences « dégâts » pour toutes les armes : le héro qui s’équipe d’une arme se voit créé un point d’attachement de la forme de l’arme.
Pour plus de réalisme, je fais également varier la vitesse d’attaque et de déplacement du héros en fonction de mes envies.
Vous pouvez donc vous servir des compétences objet aura d’endurance et gant de célérité pour cela.
J’appellerais ces compétences Vitesse Attaque Hache et Vitesse Déplacement Hache.
Il vous faut ensuite créer une compétence unité. L’idéal est un sort sans cible fondé sur le sort canaliser, détails sur le tuto ici.
Rien de spécial à faire, si ce n’est que c’est cette compétence qui contiendra la description de l’objet : modifiez-là donc à votre guise. Elle servira également à lâcher l’objet. Appellons là : Lâcher Hache.
Créez ensuite une compétence livre de sort appelée « Equipement lourd ». En donnée : sorts minimum et maximum, renseignez 0.
C’est là que le tuto ici sur l’ajout des compétences livre de sort peut servir.
Créez une deuxième compétence livre de sort, exactement sur le même modèle qu’Equipement Lourd, mais modifiez :
Sorts minimum et maximums (réglez sur «4 »)
Liste des sorts : ajoutez nos compétences objets dégâts Hache, Vitesse d’attaque Hache, Vitesse de Déplacement Hache, et la compétence unité ; Lâcher Hache.
Enfin, créez un autre sort sur canaliser, réglez le pour qu’il devienne un sort objet.
Rien de spécial à faire, si ce n’est que c’est cette compétence qui servira pour s’équiper d’un objet. Appellons là : Equiper objet.
Attention :
Si vous désirez par la suite que certains objets puissent être pris deux fois, il faut reprendre la même méthode : un livre de sort « Hache version main gauche » avec ses compétences associées : les dégâts (avec l’attachement arme à gauche cette fois), les bonus/malus désirés, la compétence description/lâcher d’objet.
Dans mon exemple, j’utiliserais des armes équipables par chaque main.
Objets
On fait un objet basé sur le livre de sort. On l’appelle : Hache. On lui donne comme unique compétence la compétence objet ‘Equiper Objet’. On modifie le reste à sa guise.
Unité
J’ai pris le héro orc Maître Lame et changé les éléments suivants :
Arbre des technologies-Améliorations utilisées : Portée+100, Portée -100 (nos deux recherches du début).
Capacités-Normal : Equipement Lourd Equipement Léger.(Note : équipement léger fonctionne comme équipement lourd, vous l’aurez compris), inventaire de l’unité(héros), garnison(antre des orcs). Cette dernière permettra de désactiver l’attaque du héros tant qu’il n’aura pas d’arme.
Arme-Graphisme Projectile : .mdl
Arc Projectile : 0.00
Portée : 0
Temps de rechargement :2.00 Je conseille un tir « entier » par seconde de base, ça sera plus simple pour calculer la vitesse de tir de l’arme
Vitesse Projectile : 700
Plus bas, dans Combat-Portée d’acquisition : mettez 500.
Modifiez le reste à votre guise.
Pourquoi un graphisme projectile, même si *.mdl implique un projectile invisible ? Parce que si vous désirez que votre même héros puisse s’équipe d’arme à distance, on utilisera des compétences orbes à la place des compétences bonus en attaque pour les objets.
III/ Sons
Voilà une partie rapide et facultative : on ouvre l’éditeur de son, on importe un son par arme et on sélectionne : utiliser comme sons. On peut aussi importer un son de message d’erreur.
I/ III Variables
Le système requiert un certain nombre de variables ; ne vous occupez pas des valeurs par défaut, et, quand c’est le cas, du nombre de déploiement.
Secret:
IV/ Déclencheurs
J’ai laissé pas mal de commentaires sur la carte exemple ; aussi je vais simplement copier-coller les déclencheurs et commenter quand nécessaire.
NB : le modèle de l’acquisition d’une arme diffère des autres acquisitions, puisque le héros peut s’équiper de plusieurs armes (contrairement aux armures, boucliers…)
Les modèles de pertes d’arme sont pareils.
Pour les bijoux (small Equipement), la variation s’effectue dans le remplacement du booléen par un entier : contrairement à l’équipement lourd, peut importe si le héros possède tel ou tel type d’objet ; ce qui compte, c’est que le héros ne possède pas plus de X bijoux (12 dans mon exemple).
NB2 : je n’indique ici qu’un seul type d’objet à chaque fois. Mais comme je suis gentil, ma carte est équipée de… 93 objets où seul l’aspect description, icônes et réglages de l’équilibre entre objets reste à faire
Variables
Les autre sons
Secret:
Gui:
Trigger:
Evénements
Map initialization
Conditions
Actions
Set Son_impossible = Error <gen>
Les armes
Secret:
Gui:
Trigger:
V Armes
Evénements
Map initialization
Conditions
Actions
Set Item_entier_arme = (Item_entier_arme + 1) Set Item_entier_arme = (Item_entier_arme + 1)
--------Incrémente le type de variables-------- Set Item_type_arme[Item_entier_arme] = Weapon Axe 1 --------Le type de l’objet-------- Set Item_range_entier[Item_entier_arme] = 1 --------L’entier qui permettra de régler la puissance de la recherche d’amélioration de portée ; 1 correspond à +100.Votre unité passera alors de 0 à 100 de portée, soit mêlée. -------- Set Item_acqui_real[Item_entier_arme] = 700.00 --------Le réel qui permet de régler la portée d’acquisition. -------- Set Item_arme_son[Item_entier_arme] = MetalHeavyChopStone3 <gen> --------Le son de l’arme-------- Set Item_bonus_arme_main_droite[Item_entier_arme] = Weapon Axe 1 droit (Spellbook) --------Le livre de sort qui regroupe toutes les compétences associées à l’arme main droite. -------- Set Item_drop_arme_droit[Item_entier_arme] = Weapon Axe 1 droit --------La compétence unité qui contient la description de l’arme et permettra de la lâcher. -------- Set Item_bonus_arme_main_gauche[Item_entier_arme] = Weapon Axe 1 gauche (Spellbook) --------Idem pour l’a main gauche-------- Set Item_drop_arme_gauche[Item_entier_arme] = Weapon Axe 1 gauche --------Idem pour la main gauche-------- Set Item_entier_arme = (Item_entier_arme + 1) Set Item_type_arme[Item_entier_arme] = Weapon Axe 3 Set Item_range_entier[Item_entier_arme] = 1 Set Item_acqui_real[Item_entier_arme] = 700.00 Set Item_arme_son[Item_entier_arme] = MetalHeavyChopStone1 <gen> Set Item_bonus_arme_main_droite[Item_entier_arme] = Weapon Axe 3 (Spellbook) Set Item_drop_arme_droit[Item_entier_arme] = Weapon Axe 3 --------Vous l’aurez noté, pas de main gauche ici : j’ai prévu que cette hache ne puisse pas être prise ailleurs que par la main droite (donc une seule arme). -------- Set Item_entier_arme = (Item_entier_arme + 1) Set Item_type_arme[Item_entier_arme] = Weapon Bow 1 Set Item_range_entier[Item_entier_arme] = 8 Set Item_acqui_real[Item_entier_arme] = 1000.00 Set Item_arme_son[Item_entier_arme] = ArrowAttack1 <gen> Set Item_bonus_arme_main_droite[Item_entier_arme] = Weapon Bow 1 (Spellbook) Set Item_drop_arme_droit[Item_entier_arme] = Weapon Bow 1 --------Voyez les variations : j’augmente la portée de cette arme (l’arc) : l’entier de range vaut 8, il gagnera donc +800 de portée. -------- Set Item_entier_arme = (Item_entier_arme + 1) Déclencheur - Run V Armures <gen> (checking conditions) --------Je suis prudent : le dernier set x = x+1 permet d’être sûr d’augmenter la marge d’erreur pour les futures boucles. -------- --------Le déclencheur -run… permet de fixer l’ordre dans lequel mes déclencheurs sont traités pendant l’initialisation. --------
Les armures
Secret:
Gui:
Trigger:
V Armures
Evénements
Map initialization
Conditions
Actions
Set Item_entier_armure = (Item_entier_armure + 1) Set Item_entier_armure = (Item_entier_armure + 1) Set Item_type_armure[Item_entier_armure] = Armor Light 1 Set Item_bonus_armure[Item_entier_armure] = Armor légère 1 (Spellbook) Set Item_drop_armure[Item_entier_armure] = Armor Light 1 Set Item_entier_armure = (Item_entier_armure + 1) Set Item_type_armure[Item_entier_armure] = Armor Light 2 Set Item_bonus_armure[Item_entier_armure] = Armor légère 2 (Spellbook) Set Item_drop_armure[Item_entier_armure] = Armor Light 2 Set Item_entier_armure = (Item_entier_armure + 1) Déclencheur - Run V Bij <gen> (checking conditions)
Il en va de même pour les casques, boucliers, bijoux.
Initialisation
Ce déclencheur est vital : il va permettre de réduire le leak.
Secret:
Gui:
Trigger:
I Remove Leak Evénements Conditions
Actions
-------- Permet de précharger les compétences pour éviter le leak par la suite -------- Unité - Create 1 Dummy Compétences 1 for Joueur 1 (Rouge) at (Center of (Playable map area)) facing Orientation bâtiment par défaut degrees
For each (Integer A) from 1 to Item_entier_armure, do (Actions)
Boucle - Actions
Unité - Add Item_bonus_armure[(Integer A)] to (Last created unit)
For each (Integer A) from 1 to Item_entier_bouclier, do (Actions)
Boucle - Actions
Unité - Add Item_bonus_bouclier[(Integer A)] to (Last created unit)
For each (Integer A) from 1 to Item_entier_casque, do (Actions)
Boucle - Actions
Unité - Add Item_bonus_casque[(Integer A)] to (Last created unit)
For each (Integer A) from 1 to Item_entier_bij, do (Actions)
Boucle - Actions
Unité - Add Item_bonus_bij[(Integer A)] to (Last created unit)
For each (Integer A) from 1 to Item_entier_arme, do (Actions)
Boucle - Actions
Unité - Add Item_bonus_arme_main_droite[(Integer A)] to (Last created unit) Unité - Add Item_bonus_arme_main_gauche[(Integer A)] to (Last created unit)
Unité - Remove (Last created unit) from the game -------- Désactive les compétences pour empêcher qu'elles apparaissent par la suite hors du livre de sort --------
For each (Integer B) from 1 to 10, do (Actions)
Boucle - Actions
For each (Integer A) from 1 to Item_entier_armure, do (Actions)
Boucle - Actions
Joueur - Désactiver Item_bonus_armure[(Integer A)] for (Player((Integer B)))
For each (Integer A) from 1 to Item_entier_bij, do (Actions)
Boucle - Actions
Joueur - Désactiver Item_bonus_bij[(Integer A)] for (Player((Integer B)))
For each (Integer A) from 1 to Item_entier_bouclier, do (Actions)
Boucle - Actions
Joueur - Désactiver Item_bonus_bouclier[(Integer A)] for (Player((Integer B)))
For each (Integer A) from 1 to Item_entier_casque, do (Actions)
Boucle - Actions
Joueur - Désactiver Item_bonus_casque[(Integer A)] for (Player((Integer B)))
For each (Integer A) from 1 to Item_entier_arme, do (Actions)
Boucle - Actions
Joueur - Désactiver Item_bonus_arme_main_gauche[(Integer A)] for (Player((Integer B))) Joueur - Désactiver Item_bonus_arme_main_droite[(Integer A)] for (Player((Integer B)))
L’inventaire :
Acquisition Arme
Secret:
Gui:
Trigger:
MI Acquisition Objet Arme
Evénements
Unité - A unit Utilise un objet
Conditions
Actions
-------- Pour toute arme connue --------
For each (Integer A) from 1 to Item_entier_arme, do (Actions)
Boucle - Actions
-------- Si le héro possède un objet dans chaque main (le booléen) --------
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Si - Conditions
(Item-type of (Item being manipulated)) Egal à Item_type_arme[(Integer A)] Item_booleen_main_droite[(Player number of (Owner of (Hero manipulating item)))] Egal à TRUE Item_booleen_main_gauche[(Player number of (Owner of (Hero manipulating item)))] Egal à TRUE
Alors - Actions
-------- On prévient le joueur par message et son qu'il ne peut pas s'équiper -------- Objet - Create Item_type_arme[(Integer A)] at Inventaire_18_Point Partie - Display to (Player group((Owner of (Triggering unit)))) the text: Your hands already ... -------- On recréé l'objet à côté du héros et on n'oublie pas de supprimer le point pour éviter le leak -------- Set Inventaire_18_Point = (Position of Hero[(Player number of (Owner of (Hero manipulating item)))]) Son - Play Son_impossible at 100.00% volume, attached to (Triggering unit) Wait 0.10 seconds Custom script: call RemoveLocation( udg_Inventaire_18_Point)
Sinon - Actions
-------- Si le héro possède déjà une arme dans sa main droite -------- -------- Si le héros ne possède rien dans la main gauche --------
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Si - Conditions
(Item-type of (Item being manipulated)) Egal à Item_type_arme[(Integer A)] Item_booleen_main_droite[(Player number of (Owner of (Hero manipulating item)))] Egal à TRUE Item_booleen_main_gauche[(Player number of (Owner of (Hero manipulating item)))] Egal à FALSE
Alors - Actions
-------- On règle les booléens pour attribuer un objet dans la main gauche du héros et on donne le bonus main gauche -------- Set Item_booleen_main_gauche[(Player number of (Owner of (Hero manipulating item)))] = TRUE Set Item_booleen_main_gauche_arme[(Player number of (Owner of (Triggering unit)))] = TRUE Unité - Add Item_bonus_arme_main_gauche[(Integer A)] to (Triggering unit)
Sinon - Actions
-------- Si le héros ne possède aucune arme --------
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Si - Conditions
(Item-type of (Item being manipulated)) Egal à Item_type_arme[(Integer A)] Item_booleen_main_droite[(Player number of (Owner of (Hero manipulating item)))] Egal à FALSE
Alors - Actions
-------- On règle les booléens pour attribuer un objet dans la main droite du héros et on donne le bonus main droite -------- Set Item_booleen_main_droite[(Player number of (Owner of (Hero manipulating item)))] = TRUE Unité - Add Item_bonus_arme_main_droite[(Integer A)] to (Triggering unit) -------- On règle la portée d'acquisition, la portée de l'arme, et on enlève antre des orcs pour lui permettre d'attaquer -------- Unité - Set (Triggering unit) acquisition range to Item_acqui_real[(Integer A)] Set Hero_range_plus_entier[(Player number of (Owner of (Triggering unit)))] = (Hero_range_plus_entier[(Player number of (Owner of (Triggering unit)))] + Item_range_entier[(Integer A)]) Joueur - Set the current research level of Portée+100 to Hero_range_plus_entier[(Player number of (Owner of (Triggering unit)))] for (Owner of (Triggering unit)) Unité - Remove Garnison (Antre des Orcs) from (Triggering unit) Skip remaining actions
Sinon - Actions
Acquisition Bouclier
Secret:
Gui:
Trigger:
MI Acquisition Objet Bouclier
Evénements
Unité - A unit Utilise un objet
Conditions
Actions
-------- Pour tout bouclier connu --------
For each (Integer A) from 1 to Item_entier_bouclier, do (Actions)
Boucle - Actions
-------- Si le héro a déjà quelque chose dans la main gauche --------
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Si - Conditions
(Item-type of (Item being manipulated)) Egal à Item_type_bouclier[(Integer A)] Item_booleen_main_gauche[(Player number of (Owner of (Hero manipulating item)))] Egal à TRUE
Alors - Actions
-------- On prévient le joueur, on recrée le bouclier -------- Partie - Display to (Player group((Owner of (Triggering unit)))) the text: You already have a ... Set Inventaire_18_Point = (Position of Hero[(Player number of (Owner of (Hero manipulating item)))]) Son - Play Son_impossible at 100.00% volume, attached to (Triggering unit) Objet - Create Item_type_bouclier[(Integer A)] at Inventaire_18_Point Wait 0.10 seconds Custom script: call RemoveLocation( udg_Inventaire_18_Point)
Sinon - Actions
-------- Si le héros n'a rien en main gauche --------
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Si - Conditions
(Item-type of (Item being manipulated)) Egal à Item_type_bouclier[(Integer A)] Item_booleen_main_gauche[(Player number of (Owner of (Hero manipulating item)))] Egal à FALSE
Alors - Actions
-------- On règle le booléen de la main gauche, et on lui donne le bonus du bouclier -------- Set Item_booleen_main_gauche[(Player number of (Owner of (Hero manipulating item)))] = TRUE Unité - Add Item_bonus_bouclier[(Integer A)] to (Triggering unit) Skip remaining actions
Sinon - Actions
Idem pour les armures et les casques. Restent les bijoux : au lieu d’appuyer les conditions sur un booléen, on le fait sur un entier.
Ca permet au héros de posséder indifféremment les bijoux, dans la limite de l’entier fixé.
Secret:
Gui:
Trigger:
MI Acquisition Objet Bij
Evénements
Unité - A unit Utilise un objet
Conditions
Actions
-------- Pour tout bijoux connu --------
For each (Integer A) from 1 to Item_entier_bij, do (Actions)
Boucle - Actions
-------- Si le héro a déjà plus de 12 bijoux --------
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Si - Conditions
(Item-type of (Item being manipulated)) Egal à Item_type_bij[(Integer A)] Item_compte_bij[(Player number of (Owner of (Triggering unit)))] Supérieur ou égal à 12
Alors - Actions
-------- On prévient le joueur et on recréé le bijoux à l'endroit du héros -------- Partie - Display to (Player group((Owner of (Triggering unit)))) the text: You have the maximu... Set Inventaire_18_Point = (Position of Hero[(Player number of (Owner of (Hero manipulating item)))]) Objet - Create Item_type_bij[(Integer A)] at Inventaire_18_Point Son - Play Son_impossible at 100.00% volume, attached to (Triggering unit) Wait 0.10 seconds Custom script: call RemoveLocation( udg_Inventaire_18_Point)
Sinon - Actions
-------- Si il a moins de 12 bijoux --------
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Si - Conditions
(Item-type of (Item being manipulated)) Egal à Item_type_bij[(Integer A)] Item_compte_bij[(Player number of (Owner of (Triggering unit)))] Inférieur à 12
Alors - Actions
-------- On lui donne le bonus du bijoux et on indique sur le nombre de bijoux qu'il en a un de plus -------- Set Item_compte_bij[(Player number of (Owner of (Triggering unit)))] = (Item_compte_bij[(Player number of (Owner of (Triggering unit)))] + 1) Unité - Add Item_bonus_bij[(Integer A)] to (Triggering unit) Skip remaining actions
Sinon - Actions
Et enfin les pertes. Cela fonctionne de manière similaire pour tous les objets.
Secret:
Gui:
Trigger:
MI Perte Objet Arme droite
Evénements
Unité - A unit Commence le lancement d'une compétence
Conditions
Actions
-------- Pour toute arme connue --------
For each (Integer A) from 1 to Item_entier_arme, do (Actions)
Boucle - Actions
-------- Si la capacité connue est celle du jeter de l'arme A --------
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Si - Conditions
(Ability being cast) Egal à Item_drop_arme_droit[(Integer A)]
Alors - Actions
-------- Rien de spécial: on enlève le bonus de l'arme, on ajoute antre des orcs pour supprimer l'attaque, on remet les valeurs par défaut d'attaque -------- Set Inventaire_18_Point = (Position of (Triggering unit)) Set Item_booleen_main_droite[(Player number of (Owner of (Triggering unit)))] = FALSE Unité - Remove Item_bonus_arme_main_droite[(Integer A)] from (Triggering unit) Objet - Create Item_type_arme[(Integer A)] at Inventaire_18_Point Wait 0.10 seconds Custom script: call RemoveLocation( udg_Inventaire_18_Point) Unité - Order (Triggering unit) to Arrêter Unité - Set (Triggering unit) acquisition range to 500.00 Set Hero_range_moins_entier[(Player number of (Owner of (Triggering unit)))] = (Hero_range_moins_entier[(Player number of (Owner of (Triggering unit)))] + Item_range_entier[(Integer A)]) Joueur - Set the current research level of Portée-100 to Hero_range_moins_entier[(Player number of (Owner of (Triggering unit)))] for (Owner of (Triggering unit)) Skip remaining actions
Sinon - Actions
V/ Conclusion
Voilà, j’espère que ce petit tutorial pourra vous inspirer pour créer de jolis systèmes d’inventaires Télécharger la map _________________
Inscrit le: 23 Aoû 2007 Messages: 4767 Sujets: 136 Spécialité en worldedit: Keskesapeutfout' Médailles: 1 (En savoir plus...)
Posté le: 25/01/09 19:49 Sujet du message:
Pas mal, pour éviter les "Tool Tip Missing", tu devrais utiliser la technique que j'utilise dans mon sort de saut, à savoir mettre les compétences dans un livre de sort désactivé pour les joueurs à l'initialisation. _________________
Leçon n°1 du WorldEdit : « Le violet > Troll-Brain »
Page 1 sur 1 La question posée dans ce topic a été résolue !
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