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=1980677a0b96e51da10fd859a46686eeMé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

Système d'armes à munitions en Gui
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
 jk2pach
Invité








MessagePosté le: 22/01/09 00:52    Sujet du message: Système d'armes à munitions en Gui Citer

Introduction
Je sais que je dois mettre un chiffre romain devant un grand titre, mais les Romains n'avaient pas de "0" ^^

Commentaires

Ce tutorial a pour objectif de montrer comment créer un système d'armes qui utilisent des munitions. Pour mon exemple, il s'agit d'armes à feu (ici le FN Five Seven et le Colt M4A1).

Ce système peut paraître un peu lourd, mais il présente l'énorme avantage de ne pas devoir créer autant d'unités que d'armes, comme c'est le cas pour les cartes Resident Evil, Afterlife, Rural Onslaught etc...

Je me suis servi des idées d'autres joueurs (pour le cumul des munitions et l'amélioration de portée) de ce forum, merci à eux.
L'autre avantage de ce système, c'est qu'il n'utilise pas l'or ou le bois, ce qui vous laisse les deux ressources libres.

Pourquoi est-ce utile de pouvoir conserver la même unité tout le temps? Dans le cas, où, notamment, vous utilisez des compétences par ajout de livre de sort. Cela évite de devoir stocker quelque part toutes les compétences apprises.

Ce système est de plus en Gui, ce qui permettra à la plupart des joueurs de le comprendre.
Son seul gros inconvénient (encore que...): un héros pourra porter plusieurs types de munitions, mais une seule arme seulement.


Une autre méthode est présentée dans le même sujet par le Général Vans.
Cliquer ici!
Elle est beaucoup plus simple d'utilisation, mais ne permet pas toutes les variations.

Prérecquis
-Bien connaître l’éditeur d’objet
-Savoir utiliser des variables, des conditions et des boucles.

I/ 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

Prenez le sort canaliser (sorts-neutre hostiles-héros), copiez-collez le deux fois.
On en fait deux compétences : « recharger » et « jeter l’arme ».
Modifiez les champs suivants pour les deux sorts.
Compétence héros - false
Niveau - 1
Arbre des technologies - vérifier dépendances - false
Donnée - Durée graphisme - 0.00
Donnée - Désactiver autres compétences - false
Donnée - ID-Ordre de base : mettez ce que vous voulez, de préférence l’identité d’une compétence qui ne vous servira pas. Et pensez bien à mettre une ID différente pour les deux sorts.
Donnée - Options : cochez la case « visible ».
Donnée - Suivre dans la durée - 0.00
Texte - Ordre Chaîne - utiliser/allumer : mettez la même ID que pour l’ordre de base ; n’oubliez pas d’en mettre une différente pour les deux compétences.
Pour toutes les autres rubriques, mettez ce que vous voulez.

Maintenant, des compétences objet.
Prenez la compétence objet « bonus en attaque (+1) », et copiez-collez la 2 fois. Réglez à votre convenance les dégâts de bonus. Ils serviront pour les armes. Vous pouvez, comme disponible dans la carte exemple, rajouter un attachement d’arme. Je passe cela sous silence, un tutorial est disponible sur ce forum : cliquez ici.
Je les ai appelé : damage Colt M4A1 et damage FN Five Seven et j’ai mis +5 dégâts au Five Seven et +8 au M4A1.

Ensuite, deux compétences « Objet bonus en vitesse d’attaque ».
Idem, modifiez les champs à votre convenance. J’ai mis 6.00 (600%) de bonus pour le M4A1 et 0% pour le Five Seven. J’ai appelé ces compétences Vitesse M4A1 et vitesse Five Seven.

Enfin, la compétence « Berserk » des orcs.
Modifiez l’augmentation des dégâts subis, de la vitesse d’attaque et de mouvement au minimum.
Cochez le champ Stats-Compétence Objet pour que la compétence devienne compétence objet.
Modifiez le reste à votre convenance (exemple : durée=2.00 secondes).

Objets

Nous allons avoir besoin de 4 objets.
Prenez n’importe quel objet permanent, et copiez-collez le deux fois. Vous l’aurez compris, l’un s’appellera Colt M4A1 et l’autre FN Five Seven.
Modifiez les champs :
Capacités - Compétences de l’un et de l’autre en ajoutant leur bonus de dégât et de vitesse respectifs.
Nombre de charges -30 pour le M4A1 et 20 pour le FN Five Seven. Ce sera le nombre de munitions maximum que chacune de ses deux armes peut avoir dans un chargeur.
Modifiez le reste à votre convenance.

Maintenant, prenez n’importe quel objet chargé (comme les potions de vie ou de mana).
Copiez-collez le deux fois encore : deux types de munitions (ici 5.56mm et 9mm).
Pour les deux, ajoutez la compétence : reload (la compétence objet fondée sur le sort Berserk).
Nombre de charges : ce que vous voulez, mais par logique, si on considère qu’un objet munition est un « clip » comme disent les anglo-saxons, mettez 30 charges pour les munitions 5.56mm (celles du M4A1) et 20 pour les 9mm (celles du Five Seven).

Presque fini avec l’éditeur d’objet 

Unité

J’ai pris le héro des humains mage de sang 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 : Drop Weapon, Reload Weapon, 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 : celui du fusiller.
Arc Projectile : 0.00
Portée : 400
Temps de rechargement : 1.00 Je conseille un tir par seconde de base, ça sera plus simple pour calculer la vitesse de tir de l’arme Wink
Vitesse Projectile : 3000
Plus bas, dans Combat-Portée d’acquisition : mettez 400.
Modifiez le reste à votre guise pour que le Mage de Sang devienne un Marine 

II/ Sons

Voilà une partie rapide et facultative : on ouvre l’éditeur de son, on importe un son par arme+un bruit d’arme en train d’être rechargée, et on sélectionne : utiliser comme sons. On peut aussi importer un son de message d’erreur.

Allez, on commence à atteindre le nerf du système :

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.

Item_arme_entier : Entier
Charge : Entier
Item_difference : : Entier
Item_type_entier_max : Entier
Hero_range_moins_entier : Entier de déploiement
Hero_range_plus_entier : Entier de déploiement
Item_entier_munition_max : Entier de déploiement
Item_range_entier : Entier de déploiement
Item_boolen_arme : booléen de déploiement
Item_effet : chaîne de déploiement
Item_rejet_point : point
Item_portee_acqu : réel de déploiement
Son_impossible : son
Son_reload : son
Son_type_arme : son de déploiement
Item_type_arme : type d’objet de déploiement
Item_type_munition : type d’objet de déploiement

Et enfin, je vous le donne en mille : les déclencheurs ; la partie la plus lourde du système :

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.

Variables
Secret:

Gui:
Trigger:
V Armes
Collapse Evénements
Map initialization
Conditions
Collapse Actions
-------- Classer par portée d'arme croissante!!! --------
-------- FN Five Seven: 600 --------
Set Item_arme_entier = (Item_arme_entier + 1)
Set Item_type_arme[Item_arme_entier] = FN Five Seven
Set Item_type_munition[Item_arme_entier] = Ammo 9x19mm
Set Item_entier_munition_max[Item_arme_entier] = 20
Set Item_range_entier[Item_arme_entier] = 2
Set Son_type_arme[Item_arme_entier] = Five_Seven <gen>
Set Item_effet[Item_arme_entier] = war3mapImportedKonstrukt_MinigunEffectAttachment.MDX
Set Item_portee_acqu[Item_arme_entier] = 600.00
-------- Colt M4A1: 1000 --------
Set Item_arme_entier = (Item_arme_entier + 1)
Set Item_type_arme[Item_arme_entier] = Colt M4A1
Set Item_type_munition[Item_arme_entier] = Ammo 5.56x45mm [M.30]
Set Item_entier_munition_max[Item_arme_entier] = 30
Set Item_range_entier[Item_arme_entier] = 6
Set Son_type_arme[9] = M4A1__Full_Auto_u <gen>
Set Item_effet[Item_arme_entier] = war3mapImportedKonstrukt_MinigunEffectAttachment.MDX
Set Item_portee_acqu[Item_arme_entier] = 1000.00
-------- Règle le nombre total d'armes --------
Set Item_type_arme_entier_max = (Item_arme_entier + 1)


C’est assez simple : on règle les variables crées précédemment en fonction des armes.
Citation:
Set Item_arme_entier = (Item_arme_entier + 1)

On incrémente le numéro de l’arme.
Citation:
Set Item_type_arme[Item_arme_entier] = FN Five Seven

On sélectionne l’arme
Citation:
Set Item_type_munition[Item_arme_entier] = Ammo 9x19mm

On sélectionne la munition associée
Citation:
Set Item_entier_munition_max[Item_arme_entier] = 20

On attribue le nombre maximum de munitions
Citation:
Set Item_range_entier[Item_arme_entier] = 2

On attribue la portée de l’arme : vous vous souvenez des recherches ? Notre héros, de base, à une potée à 400. En indiquant 2 ici, par la suite on augmentera alors de 2 la recherche Portee+100, donnant à notre héros une portée de 600.
Citation:
Set Son_type_arme[Item_arme_entier] = Five_Seven <gen>

Le son de l’arme.
Citation:
Set Item_effet[Item_arme_entier] = war3mapImported\Konstrukt_MinigunEffectAttachment.MDX

Le modèle qui servira pour imiter le tir d’une arme à feu.
Citation:
Set Item_portee_acqu[Item_arme_entier] = 600.00

La portée d’acquisition de l’arme. Je l’ai mise par défaut pour qu’elle soit comme la portée de tir de l’arme.

Secret:

Gui:
Trigger:
V Autres variables
Collapse Evénements
Map initialization
Conditions
Collapse Actions
Set Son_impossible = Error <gen>
Set Son_reload = FN_P90_Reload <gen>


Rien de méchant, on attribue les derniers sons dans des variables, pour limiter le leak.

Divers

Secret:

Gui:
Trigger:
O Empilement
Collapse Evénements
Unité - A unit Acquiert un objet
Conditions
Collapse Actions
-------- Permet de cumuler les munitions de même type --------
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 (Triggering unit) in slot (Integer A))) Egal à  (Item-type of (Item being manipulated))
(Item carried by (Triggering unit) 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 (Triggering unit) in slot (Integer A)))
Objet - Remove (Item carried by (Triggering unit) in slot (Integer A))
Unité - Order (Triggering unit) 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)))
Skip remaining actions
Collapse Sinon - Actions


Ce système, qui n’est pas de moi, vous permettra d’empiler les munitions : si un héros récupère 4 fois l’objet munition 5.56, chargé à 30 balles, son inventaire ne se verra occupé que par un slot comportant 120 munitions 5.56

Les armes

On ramasse une arme alors qu'on en a déjà une
Secret:

Gui:
Trigger:
O Acquisition Arme  rejet
Collapse Evénements
Unité - A unit Acquiert un objet
Conditions
Collapse Actions
-------- Permet de supprimer l'arme acquise si l'unité en possède déjà  une. --------
-------- Vérifie pour chaque arme existante --------
-------- Si l'objet est une arme connue --------
-------- Et si le héros porte déjà  une arme (c'est le booléen) --------
Collapse For each (Integer A) from 1 to Item_type_arme_entier_max, 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 being manipulated)) Egal à  Item_type_arme[(Integer A)]
Item_booleen_arme[(Player number of (Owner of (Triggering unit)))] Egal à  TRUE
Collapse Alors - Actions
-------- Point nécessaire pour le rejet de l'arme --------
Set Item_rejet_point = (Position of (Triggering unit))
-------- On prévient le joueur qu'il a déjà  une arme --------
-------- Par du texte et un son --------
Partie - Display to (Player group((Owner of (Triggering unit)))) the text: You already have a ...
Son - Play Son_impossible at 100.00% volume, attached to (Triggering unit)
-------- On ordonne au héros de jeter l'arme, et on supprime le point pour éviter le leak --------
Unité - Order (Triggering unit) to drop (Item being manipulated) at Item_rejet_point
Custom script:   call RemoveLocation(udg_Item_rejet_point)
Skip remaining actions
Collapse Sinon - Actions


On ramasse une arme alors qu'on n'en n'a pas: on s'équipe
Secret:

Gui:
Trigger:
O Acquisition Arme acceptation
Collapse Evénements
Unité - A unit Acquiert un objet
Conditions
Collapse Actions
-------- Règle les nouveaux paramètres si l'arme est acceptée --------
-------- Vérifie pour chaque arme existante --------
-------- Si l'objet est une arme connue --------
-------- Et si le héros ne porte pas d'arme (c'est le booléen) --------
Collapse For each (Integer A) from 1 to Item_type_arme_entier_max, 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 being manipulated)) Egal à  Item_type_arme[(Integer A)]
Item_booleen_arme[(Player number of (Owner of (Triggering unit)))] Egal à  FALSE
Collapse Alors - Actions
-------- On enlève la compétence garnison: le héro pourra attaquer --------
Unité - Remove Garnison (Antre des Orcs) from (Triggering unit)
-------- Le booleen devient vrai: le héro possède une arme --------
Set Item_booleen_arme[(Player number of (Owner of (Triggering unit)))] = TRUE
-------- On règle la portée actuelle du héro sur celle de l'arme --------
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))
-------- Et sa portée d'acquisition --------
Unité - Set (Triggering unit) acquisition range to Item_portee_acqu[(Integer A)]
Skip remaining actions
Collapse Sinon - Actions


On utilise la compétence "drop weapon"
Secret:

Gui:
Trigger:
O Lacher arme
Collapse Evénements
Unité - A unit Commence le lancement d'une compétence
Conditions
Collapse Actions
-------- Si le joueur se sert de la compétence drop --------
-------- Revient au même que de déposer soi-même l'objet --------
Collapse For each (Integer A) from 1 to Item_type_arme_entier_max, do (Actions)
Collapse Boucle - Actions
Collapse If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Collapse Si - Conditions
(Ability being cast) Egal à  Drop Weapon
Collapse Alors - Actions
-------- Point nécessaire pour le rejet de l'arme --------
Set Item_rejet_point = (Position of (Triggering unit))
-------- Le héros lâche l'arme --------
Unité - Order (Triggering unit) to drop (Item carried by (Triggering unit) of type Item_type_arme[(Integer A)]) at (Position of (Triggering unit))
-------- On supprime le point pour éviter le leak --------
Custom script:   call RemoveLocation(udg_Item_rejet_point)
Skip remaining actions
Collapse Sinon - Actions


On jette l'arme (par la compétence drop weapon ou en la déposant au sol)
Secret:

Gui:
Trigger:
O Consequence lacher arme
Collapse Evénements
Unité - A unit Perd un objet
Conditions
Collapse Actions
-------- Conséquences de la perte de l'arme --------
Collapse For each (Integer A) from 1 to Item_type_arme_entier_max, 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 being manipulated)) Egal à  Item_type_arme[(Integer A)]
Collapse Alors - Actions
-------- On ajoute à  l'unité la compétence antre des orcs pour supprimer son attaque --------
Unité - Add Garnison (Antre des Orcs) to (Triggering unit)
-------- Le héro n'a plus d'arme: booléen faux --------
Set Item_booleen_arme[(Player number of (Owner of (Triggering unit)))] = FALSE
-------- On diminue la portée du héro à  son nominal --------
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))
-------- Et sa portée d'acquisition --------
Unité - Set (Triggering unit) acquisition range to 400.00
Skip remaining actions
Collapse Sinon - Actions


Bonus: verrouiller certaines armes pour un seul type de héro
Secret:

Gui:
Trigger:
O Verouillage Arme Marine
Collapse Evénements
Unité - A unit Acquiert un objet
Conditions
Collapse Actions
-------- Pour que seul le Marine puisse prendre certaines armes --------
Collapse If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Collapse Si - Conditions
(Item-type of (Item being manipulated)) Egal à  Colt M4A1
(Unit-type of (Triggering unit)) Différent de Marine
Item_booleen_arme[(Player number of (Owner of (Triggering unit)))] Egal à  FALSE
Collapse Alors - Actions
-------- Point nécessaire pour le rejet de l'arme --------
Set Item_rejet_point = (Position of (Triggering unit))
-------- On prévient le joueur qu'il ne peut pas porter cette arme --------
-------- Par du texte et un son --------
Partie - Display to (Player group((Owner of (Triggering unit)))) the text: This weapon is for ...
Son - Play Son_impossible at 100.00% volume, attached to (Triggering unit)
-------- On ordonne au héros de jeter l'arme, et on supprime le point pour éviter le leak --------
Unité - Order (Triggering unit) to drop (Item being manipulated) at (Position of (Triggering unit))
Skip remaining actions
Custom script:   call RemoveLocation(udg_Item_rejet_point)
Collapse Sinon - Actions


Ce dernier déclencheur n’est pas indispensable, mais peut servir, pour éviter que votre petit scientifique utilise un lance roquettes Wink

Les Munitions-1
Ce qui se passe quand le héro attaque une unité: soit il a des munitions et continue de tirer, soit il n'en n'a plus, et doit s'arrêter de faire feu.
Secret:

Gui:
Trigger:
O Dechargement arme
Collapse Evénements
Unité - A unit Est attaqué
Conditions
Collapse Actions
-------- Quand le héro tire... --------
-------- Pour tout les types d'armes connus --------
-------- Pour chaque slot de 1 à  6 de l'inventaire --------
Collapse For each (Integer A) from 1 to Item_type_arme_entier_max, do (Actions)
Collapse Boucle - Actions
Collapse For each (Integer B) from 1 to 6, do (Actions)
Collapse Boucle - Actions
-------- Si l'unité qui attaque est un héro --------
-------- Si il reste des munitions --------
-------- Si les munitions correspondent à  l'arme portée --------
Collapse If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Collapse Si - Conditions
((Attacking unit) is Un héros) Egal à  TRUE
(Charges remaining in (Item carried by (Attacking unit) of type Item_type_arme[(Integer A)])) Supérieur à  0
(Item-type of (Item carried by (Attacking unit) in slot (Integer B))) Egal à  Item_type_arme[(Integer A)]
Collapse Alors - Actions
-------- On joue le son de l'arme --------
Son - Play Son_type_arme[(Integer A)] at 100.00% volume, attached to (Attacking unit)
-------- On enlève 1 aux munitions --------
Objet - Set charges remaining in (Item carried by (Attacking unit) of type Item_type_arme[(Integer A)]) to ((Charges remaining in (Item carried by (Attacking unit) of type Item_type_arme[(Integer A)])) - 1)
-------- On ajoute un effet spécial pour imiter le tir --------
Effet spécial - Create a special effect attached to the weapon of (Attacking unit) using Item_effet[(Integer A)]
-------- Et on le détruit pour éviter le leak --------
Effet spécial - Destroy (Last created special effect)
Skip remaining actions
Sinon - Actions
-------- Mais si il n'y a plus de munitions --------
Collapse If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Collapse Si - Conditions
((Attacking unit) is Un héros) Egal à  TRUE
(Charges remaining in (Item carried by (Attacking unit) of type Item_type_arme[(Integer A)])) Egal à  0
(Item-type of (Item carried by (Attacking unit) in slot (Integer B))) Egal à  Item_type_arme[(Integer A)]
Collapse Alors - Actions
-------- On ordonne à  l'unité de stopper pour l'empêcher de tirer --------
Unité - Order (Attacking unit) to Arrêter
Skip remaining actions
Collapse Sinon - Actions


Quand on utilise la compétence rechargement d'arme: on va ordonner au héro d'utiliser ses munitions
Secret:

Gui:
Trigger:
O Reload Weapon
Collapse Evénements
Unité - A unit Commence le lancement d'une compétence
Conditions
Collapse Actions
-------- Si le joueur utilise la compétence reload weapon --------
-------- Revient au même que d'utiliser l'objet munition --------
-------- Vérifie dans chaque slot --------
-------- Laquelle des munitions portées correspond à  l'arme --------
Collapse For each (Integer A) from 1 to 15, do (Actions)
Collapse Boucle - Actions
Collapse For each (Integer B) 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
(Ability being cast) Egal à  Reload Weapon
(Item-type of (Item carried by (Triggering unit) in slot (Integer B))) Egal à  Item_type_arme[(Integer A)]
(Charges remaining in (Item carried by (Triggering unit) of type Item_type_munition[(Integer A)])) Supérieur à  0
Collapse Alors - Actions
-------- Et ordonne au héro de cliquer sur la munition, c'est à  dire l'utiliser --------
Héros - Order (Triggering unit) to use (Item carried by (Triggering unit) of type Item_type_munition[(Integer A)])
Skip remaining actions
Collapse Sinon - Actions



Les Munitions-2
Là, ca devient plus compliqué.

J'ai choisi de faire 5 déclencheurs.

En gros, ils correspondent aux différents cas de figure possible.

Dans tous les cas:

Dès que le héro utilise une munition correspondant à l'arme portée, on enlève antre des orcs à l'unité pour qu'elle puisse à nouveau attaquer.
On joue le son du rechargement d'arme.

Tout le reste va permettre:
-d'ajouter le nombre de munitions disponibles dans l'arme
-de supprimer les munitions si on les utilise toutes ^pour éviter d'avoir un objet de type munition sans charge.

Les différences ont lieu au niveau du nombre de munitions qu'il reste dans l'arme, et en réserve; on a donc cinq cas de figure:
1)
Il y a plus de munitions en réserve que le maximum que l'arme a dans son chargeur.
Secret:

Gui:
Trigger:
O Utilisation Clip 1
Collapse Evénements
Unité - A unit Utilise un objet
Conditions
Collapse Actions
Collapse For each (Integer A) from 1 to 20, do (Actions)
Collapse Boucle - Actions
Collapse For each (Integer B) 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 (Hero manipulating item) in slot (Integer B))) Egal à  Item_type_arme[(Integer A)]
(Item-type of (Item being manipulated)) Egal à  Item_type_munition[(Integer A)]
(Charges remaining in (Item carried by (Triggering unit) of type Item_type_munition[(Integer A)])) Supérieur ou égal à  Item_entier_munition_max[(Integer A)]
Collapse Alors - Actions
Animation - Play (Triggering unit)'s spell second animation
Son - Play Son_reload at 100.00% volume, attached to (Triggering unit)
Unité - Remove Garnison (Antre des Orcs) from (Triggering unit)
Set Item_difference = (Item_entier_munition_max[(Integer A)] - (Charges remaining in (Item carried by (Triggering unit) of type Item_type_arme[(Integer A)])))
Objet - Set charges remaining in (Item carried by (Triggering unit) of type Item_type_arme[(Integer A)]) to ((Charges remaining in (Item carried by (Triggering unit) of type Item_type_arme[(Integer A)])) + Item_difference)
Objet - Set charges remaining in (Item carried by (Triggering unit) of type Item_type_munition[(Integer A)]) to ((Charges remaining in (Item carried by (Triggering unit) of type Item_type_munition[(Integer A)])) + 1)
Objet - Set charges remaining in (Item carried by (Triggering unit) of type Item_type_munition[(Integer A)]) to ((Charges remaining in (Item carried by (Triggering unit) of type Item_type_munition[(Integer A)])) - Item_difference)
If ((Charges remaining in (Item carried by (Hero manipulating item) of type Item_type_munition[(Integer A)])) Egal à  0) then do (Objet - Remove (Item carried by (Hero manipulating item) of type Item_type_munition[(Integer A)])) else do (Do nothing)
Skip remaining actions
Collapse Sinon - Actions


2)a)
Il y a moins de munitions en réserve que le maximum que l'arme peut avoir dans son chargeur
Il y a plus de munitions en réserve que le maximum que l'arme peut avoir dans son chargeur
Le total munitions de l'arme + réserve de munition est inférieur au maximum que l'arme peut avoir dans son chargeur
Secret:

Gui:
Trigger:
O Utilisation Clip 2a
Collapse Evénements
Unité - A unit Utilise un objet
Conditions
Collapse Actions
Collapse For each (Integer A) from 1 to 20, do (Actions)
Collapse Boucle - Actions
Collapse For each (Integer B) 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 (Hero manipulating item) in slot (Integer B))) Egal à  Item_type_arme[(Integer A)]
(Item-type of (Item being manipulated)) Egal à  Item_type_munition[(Integer A)]
(Charges remaining in (Item carried by (Triggering unit) of type Item_type_munition[(Integer A)])) Inférieur à  Item_entier_munition_max[(Integer A)]
(Charges remaining in (Item carried by (Triggering unit) of type Item_type_munition[(Integer A)])) Supérieur à  (Charges remaining in (Item carried by (Triggering unit) of type Item_type_arme[(Integer A)]))
((Charges remaining in (Item carried by (Triggering unit) of type Item_type_arme[(Integer A)])) + ((Charges remaining in (Item carried by (Triggering unit) of type Item_type_munition[(Integer A)])) + 1)) Inférieur ou égal à  Item_entier_munition_max[(Integer A)]
Collapse Alors - Actions
Animation - Play (Triggering unit)'s spell second animation
Son - Play Son_reload at 100.00% volume, attached to (Triggering unit)
Unité - Remove Garnison (Antre des Orcs) from (Triggering unit)
Set Item_difference = (Item_entier_munition_max[(Integer A)] - (Charges remaining in (Item carried by (Triggering unit) of type Item_type_arme[(Integer A)])))
Objet - Set charges remaining in (Item carried by (Triggering unit) of type Item_type_arme[(Integer A)]) to ((Charges remaining in (Item carried by (Triggering unit) of type Item_type_arme[(Integer A)])) + Item_difference)
Objet - Set charges remaining in (Item carried by (Triggering unit) of type Item_type_munition[(Integer A)]) to ((Charges remaining in (Item carried by (Triggering unit) of type Item_type_munition[(Integer A)])) + 1)
Objet - Set charges remaining in (Item carried by (Triggering unit) of type Item_type_munition[(Integer A)]) to ((Charges remaining in (Item carried by (Triggering unit) of type Item_type_munition[(Integer A)])) - Item_difference)
If ((Charges remaining in (Item carried by (Hero manipulating item) of type Item_type_munition[(Integer A)])) Egal à  0) then do (Objet - Remove (Item carried by (Hero manipulating item) of type Item_type_munition[(Integer A)])) else do (Do nothing)
Skip remaining actions
Collapse Sinon - Actions



2)b)
Il y a moins de munitions en réserve que le maximum que l'arme peut avoir dans son chargeur
Il y a plus de munitions en réserve que le maximum que l'arme peut avoir dans son chargeur
Le total munitions de l'arme + réserve de munition est supérieur au maximum que l'arme peut avoir dans son chargeur
Secret:

Gui:
Trigger:
O Utilisation Clip 2b
Collapse Evénements
Unité - A unit Utilise un objet
Conditions
Collapse Actions
Collapse For each (Integer A) from 1 to 20, do (Actions)
Collapse Boucle - Actions
Collapse For each (Integer B) 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 (Hero manipulating item) in slot (Integer B))) Egal à  Item_type_arme[(Integer A)]
(Item-type of (Item being manipulated)) Egal à  Item_type_munition[(Integer A)]
(Charges remaining in (Item carried by (Triggering unit) of type Item_type_munition[(Integer A)])) Inférieur à  Item_entier_munition_max[(Integer A)]
(Charges remaining in (Item carried by (Triggering unit) of type Item_type_munition[(Integer A)])) Supérieur à  (Charges remaining in (Item carried by (Triggering unit) of type Item_type_arme[(Integer A)]))
((Charges remaining in (Item carried by (Triggering unit) of type Item_type_arme[(Integer A)])) + ((Charges remaining in (Item carried by (Triggering unit) of type Item_type_munition[(Integer A)])) + 1)) Supérieur à  Item_entier_munition_max[(Integer A)]
Collapse Alors - Actions
Animation - Play (Triggering unit)'s spell second animation
Son - Play Son_reload at 100.00% volume, attached to (Triggering unit)
Unité - Remove Garnison (Antre des Orcs) from (Triggering unit)
Set Item_difference = (Item_entier_munition_max[(Integer A)] - (Charges remaining in (Item carried by (Triggering unit) of type Item_type_arme[(Integer A)])))
Objet - Set charges remaining in (Item carried by (Triggering unit) of type Item_type_arme[(Integer A)]) to ((Charges remaining in (Item carried by (Triggering unit) of type Item_type_arme[(Integer A)])) + Item_difference)
Objet - Set charges remaining in (Item carried by (Triggering unit) of type Item_type_munition[(Integer A)]) to ((Charges remaining in (Item carried by (Triggering unit) of type Item_type_munition[(Integer A)])) + 1)
Objet - Set charges remaining in (Item carried by (Triggering unit) of type Item_type_munition[(Integer A)]) to ((Charges remaining in (Item carried by (Triggering unit) of type Item_type_munition[(Integer A)])) - Item_difference)
If ((Charges remaining in (Item carried by (Hero manipulating item) of type Item_type_munition[(Integer A)])) Egal à  0) then do (Objet - Remove (Item carried by (Hero manipulating item) of type Item_type_munition[(Integer A)])) else do (Do nothing)
Skip remaining actions
Collapse Sinon - Actions



3)a)
Il y a moins de munitions en réserve que le maximum que l'arme peut avoir dans son chargeur
Il y a moins de munitions en réserve que le maximum que l'arme peut avoir dans son chargeur
Le total munitions de l'arme + réserve de munition est inférieur au maximum que l'arme peut avoir dans son chargeur
Secret:

Gui:
Trigger:
O Utilisation Clip 3a
Collapse Evénements
Unité - A unit Utilise un objet
Conditions
Collapse Actions
Collapse For each (Integer A) from 1 to 20, do (Actions)
Collapse Boucle - Actions
Collapse For each (Integer B) 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 (Hero manipulating item) in slot (Integer B))) Egal à  Item_type_arme[(Integer A)]
(Item-type of (Item being manipulated)) Egal à  Item_type_munition[(Integer A)]
(Charges remaining in (Item carried by (Triggering unit) of type Item_type_munition[(Integer A)])) Inférieur à  Item_entier_munition_max[(Integer A)]
(Charges remaining in (Item carried by (Triggering unit) of type Item_type_munition[(Integer A)])) Inférieur ou égal à  (Charges remaining in (Item carried by (Triggering unit) of type Item_type_arme[(Integer A)]))
((Charges remaining in (Item carried by (Triggering unit) of type Item_type_arme[(Integer A)])) + ((Charges remaining in (Item carried by (Triggering unit) of type Item_type_munition[(Integer A)])) + 1)) Inférieur ou égal à  Item_entier_munition_max[(Integer A)]
Collapse Alors - Actions
Animation - Play (Triggering unit)'s spell second animation
Son - Play Son_reload at 100.00% volume, attached to (Triggering unit)
Unité - Remove Garnison (Antre des Orcs) from (Triggering unit)
Objet - Set charges remaining in (Item carried by (Triggering unit) of type Item_type_munition[(Integer A)]) to ((Charges remaining in (Item carried by (Triggering unit) of type Item_type_munition[(Integer A)])) + 1)
Set Item_difference = (Charges remaining in (Item carried by (Triggering unit) of type Item_type_munition[(Integer A)]))
Objet - Set charges remaining in (Item carried by (Triggering unit) of type Item_type_arme[(Integer A)]) to ((Charges remaining in (Item carried by (Triggering unit) of type Item_type_arme[(Integer A)])) + Item_difference)
Objet - Set charges remaining in (Item carried by (Triggering unit) of type Item_type_munition[(Integer A)]) to ((Charges remaining in (Item carried by (Triggering unit) of type Item_type_munition[(Integer A)])) - Item_difference)
If ((Charges remaining in (Item carried by (Hero manipulating item) of type Item_type_munition[(Integer A)])) Egal à  0) then do (Objet - Remove (Item carried by (Hero manipulating item) of type Item_type_munition[(Integer A)])) else do (Do nothing)
Skip remaining actions
Collapse Sinon - Actions


3)b)
Il y a moins de munitions en réserve que le maximum que l'arme peut avoir dans son chargeur
Il y a moins de munitions en réserve que le maximum que l'arme peut avoir dans son chargeur
Le total munitions de l'arme + réserve de munition est supérieur au maximum que l'arme peut avoir dans son chargeur
Secret:

Gui:
Trigger:
O Utilisation Clip 3b
Collapse Evénements
Unité - A unit Utilise un objet
Conditions
Collapse Actions
Collapse For each (Integer A) from 1 to 20, do (Actions)
Collapse Boucle - Actions
Collapse For each (Integer B) 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 (Hero manipulating item) in slot (Integer B))) Egal à  Item_type_arme[(Integer A)]
(Item-type of (Item being manipulated)) Egal à  Item_type_munition[(Integer A)]
(Charges remaining in (Item carried by (Triggering unit) of type Item_type_munition[(Integer A)])) Inférieur à  Item_entier_munition_max[(Integer A)]
(Charges remaining in (Item carried by (Triggering unit) of type Item_type_munition[(Integer A)])) Inférieur ou égal à  (Charges remaining in (Item carried by (Triggering unit) of type Item_type_arme[(Integer A)]))
((Charges remaining in (Item carried by (Triggering unit) of type Item_type_arme[(Integer A)])) + ((Charges remaining in (Item carried by (Triggering unit) of type Item_type_munition[(Integer A)])) + 1)) Supérieur à  Item_entier_munition_max[(Integer A)]
Collapse Alors - Actions
Animation - Play (Triggering unit)'s spell second animation
Son - Play Son_reload at 100.00% volume, attached to (Triggering unit)
Unité - Remove Garnison (Antre des Orcs) from (Triggering unit)
Objet - Set charges remaining in (Item carried by (Triggering unit) of type Item_type_munition[(Integer A)]) to ((Charges remaining in (Item carried by (Triggering unit) of type Item_type_munition[(Integer A)])) + 1)
Set Item_difference = (Item_entier_munition_max[(Integer A)] - (Charges remaining in (Item carried by (Triggering unit) of type Item_type_arme[(Integer A)])))
Objet - Set charges remaining in (Item carried by (Triggering unit) of type Item_type_arme[(Integer A)]) to Item_entier_munition_max[(Integer A)]
Objet - Set charges remaining in (Item carried by (Triggering unit) of type Item_type_munition[(Integer A)]) to ((Charges remaining in (Item carried by (Triggering unit) of type Item_type_munition[(Integer A)])) - Item_difference)
If ((Charges remaining in (Item carried by (Hero manipulating item) of type Item_type_munition[(Integer A)])) Egal à  0) then do (Objet - Remove (Item carried by (Hero manipulating item) of type Item_type_munition[(Integer A)])) else do (Do nothing)
Skip remaining actions
Collapse Sinon - Actions



V/ Conclusion

Voilà pour ce système, certes un peu long à mettre en place, mais très pratique quand on veut gérer 40 armes différentes 

Et voici la carte : Télécharger la map
_________________


Dernière édition par jk2pach le 27/01/09 19:52; édité 4 fois
Revenir en haut
 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: 22/01/09 07:24    Sujet du message: Citer

!! moi qui bosse sur mon système d'armes et munitions je ne peux qu'être satisfait je vais pouvoir voir plus facilement ce que tu as fait que sur le topic de ta map.

Par contre je pense que je le posterai également dans le tutoriel si ça ne te gène pas ?

Un petit truc : le I/ c'est le chiffre romain et non pas I/I ou I/II Very Happy
_________________
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
 Ayane
Bot administrateur


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

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

MessagePosté le: 22/01/09 11:14    Sujet du message: Citer

Bravo et merci pour ce travail que tu nous partage.
Les romains connaissaient le zéro mais ne le considérait pas comme un nombre, généralement ils passaient de -1 à 1.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger
 jk2pach
Invité








MessagePosté le: 22/01/09 11:27    Sujet du message: Citer

Gevans a écrit:
!! moi qui bosse sur mon système d'armes et munitions je ne peux qu'être satisfait je vais pouvoir voir plus facilement ce que tu as fait que sur le topic de ta map.

Par contre je pense que je le posterai également dans le tutoriel si ça ne te gène pas ?

Un petit truc : le I/ c'est le chiffre romain et non pas I/I ou I/II Very Happy


Pas de problème pour poster ici; de toute façon RC601 est en pause également Wink (Faudrait que j'optimise trop de trucs pour mon courage actuel; la map est déjà proche des 4MOs, a cause des nombreux modèles)

Oui les chiffres, erreur de copier coller (réparée)


@Ayane: mais de rien. Y'a sûrement plus léger, mais je pense que c'est pas mal: une fois le système mis en place, y'a plus qu'à créer les objets et leurs compétences, et à régler les variables.
_________________
Revenir en haut
 Crowolf
Animateur


Inscrit le: 21 Avr 2008
Messages: 1607
Sujets: 81
Spécialité en worldedit: Utiliser le travail des autres
Médailles: 3 (En savoir plus...)
Grand décorateur (Quantité : 2) Rédacteur de tuto #3 (Quantité : 1)

MessagePosté le: 22/01/09 16:42    Sujet du message: Citer

Excellent! je vais peut-être l'adapter pour un système d'usure des lames, du nombre de flèches et de gemmes pour les magiciens, dans une map.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 jk2pach
Invité








MessagePosté le: 22/01/09 16:47    Sujet du message: Citer

Je me suis inspiré de plusieurs points:

-le cumul des potions de GVans
-l'augmentation de portée du héros par max-4938 (parce que ça j'ai vraiment galéré)
-le principe du rechargement de la carte Afterlife. (Qui m'a bien *** aussi, parce qu'il était dur à adapter à mon envie d'avoir le moins de lignes possibles: dans Afterlife chaque arme=un héro=une munition= quatre déclencheurs.)

Attention ce système est difficile à adapter, Cro, si tu veux qu'il fonctionne pour des projectiles différents. Je m'explique: dans Rc601, j'ai aussi un lance flamme et lance grenade, notament.
Donc un tout autre graphisme que les balles. Comme je ne veux pas créer un héro spécifique au lance-flamme et lance grenade, j'ai dû bidouiller.

Pour le lance grenade, rien de grave: on n'est pas obligé de voir la grenade arriver, suffit de créer des effets sur l'unité attaquée.
Pour le lance flamme, je n'ai jamais trouvé de solution parfaite: j'ai créé un dummy avec une attaque minimale qui attaque l'unité ennemie attaquée par le héro. Mais il y a toujours un décallage entre l'animation des flammes et les premiers tirs, donc c'est assez moche :s

Edit: donc je ne sais pas si tu pourras adapter ce système système pour un seul type de héros, avec des projectiles de forme/arc/vitesse différents. C'est bien pour ça que je parle d'arme à feu dans le tuto^^


Edit 2: c'est quand même fou ce qu'on a envie de faire des tutoriaux quand on a un rapport de #### à faire Sad
_________________
Revenir en haut
 Crowolf
Animateur


Inscrit le: 21 Avr 2008
Messages: 1607
Sujets: 81
Spécialité en worldedit: Utiliser le travail des autres
Médailles: 3 (En savoir plus...)
Grand décorateur (Quantité : 2) Rédacteur de tuto #3 (Quantité : 1)

MessagePosté le: 22/01/09 17:20    Sujet du message: Citer

Pour les différents projectiles, j'utilise les orbes.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 retely
Membre reconnu


Inscrit le: 04 Juil 2008
Messages: 1195
Sujets: 73



MessagePosté le: 22/01/09 17:49    Sujet du message: Citer

Tiens j'arrive a avoir deux armes en même temps
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 jk2pach
Invité








MessagePosté le: 22/01/09 17:53    Sujet du message: Citer

:O

Dans quelle situation?

@Crowolf: les orbes chez moi ça ne marche pas^^
_________________
Revenir en haut
 retely
Membre reconnu


Inscrit le: 04 Juil 2008
Messages: 1195
Sujets: 73



MessagePosté le: 22/01/09 18:20    Sujet du message: Citer

ba tu clique sur une arme puis sur un autre , il refuse tu t'ecarte rapidement et tu reclique et TADA
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 jk2pach
Invité








MessagePosté le: 22/01/09 18:25    Sujet du message: Citer

o_o
J'ai jamais rencontré ce bug Sad

Ca peut être dû à quoi? Qu'il y a une boucle, le temps de chargement de la boucle?
_________________
Revenir en haut
 retely
Membre reconnu


Inscrit le: 04 Juil 2008
Messages: 1195
Sujets: 73



MessagePosté le: 22/01/09 18:46    Sujet du message: Citer

ahah roi du test :p
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 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: 22/01/09 18:56    Sujet du message: Citer

Idem, j'ai pas lu mais il a l'air super ce tuto.
Idem aussi au niveau des balises [url] Wink

_________________
Leçon n°1 du WorldEdit : « Le violet > Troll-Brain »
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 jk2pach
Invité








MessagePosté le: 22/01/09 18:59    Sujet du message: Citer

Idem, corrigé Smile
_________________
Revenir en haut
 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: 25/01/09 12:05    Sujet du message: Citer

Bon comme promis je mets mon système, je vais surement continuer à l'améliorer notamment en trouvant un moyen de pouvoir tirer en continue, c'est à dire sans avoir à réappuyer sur le bouton tirer.



Comme vous voyez les munitions sont stockées dans un tableau en haut à droite, j'en ai fait un pour chaque joueur et je ne sais pas si c'est très viable mais bon c'est un détail.

Concernant le fonctionnement, tout repose sur un système de 4 variables :

  • bool_arme[a*10+b] (type booléen) : retourne vrai si le joueur a possède l'arme b
  • munition[a*10+b] (type entier) : retourne le nombre de munition du joueur a pour l'arme b
  • arme_port[a] (type entier) : retourne le numéro de l'arme portée par le joueur a
  • arme[c] (type chaine de caractère) : retourne le nom de l'arme c


Voilà à partir de là il n'y a plus grand chose à faire...


a) Initialisation

Secret:

Gui:
Trigger:
Initialisation
Collapse Evénements
Map initialization
Conditions
Collapse Actions
-------- Joueurs --------
Set CONST_nbrplayer = 4
Set unites[1] = Fusilier 0000 <gen>
Set unites[2] = Fusilier 0001 <gen>
Set unites[3] = Fusilier 0002 <gen>
Set unites[4] = Fusilier 0003 <gen>
-------- Armes --------
Set CONST_nbrarm = 4
Set arme[1] = Pistolet
Set muni_max[1] = 5
Set arme[2] = Mitraillette
Set muni_max[2] = 20
Set arme[3] = Fusil
Set muni_max[3] = 15
Set arme[4] = Lance rocket
Set muni_max[4] = 5
-------- Munitions --------
Collapse For each (Integer A) from 1 to CONST_nbrplayer, do (Actions)
Collapse Boucle - Actions
Set bool_arm[(((Integer A) x 10) + 1)] = TRUE
Set bool_arm[(((Integer A) x 10) + 2)] = TRUE
Set munition[(((Integer A) x 10) + 1)] = muni_max[1]
Set munition[(((Integer A) x 10) + 2)] = muni_max[2]
Set arme_port[(Integer A)] = 1
Joueur - Set (Player((Integer A))) Or actuel to munition[(((Integer A) x 10) + 1)]



Un moyen d'avoir accès aux nombres de munitions de l'arme portée actuellement consiste à regarder l'or actuel, c'est un peu plus simple à faire par déclo mais ça empêche d'utiliser l'or dans sa map...


b) Le tableau

On ajoute les armes qu'on possède dans le tableau avec leur nombre de munition, dès qu'on trouve une arme il faudra penser à l'ajouter dans le tableau, si on la perd (ce qui est n'est possible que si on est tué car même avec 0 munition on garde notre arme) on l'enlève.

Secret:

Gui:
Trigger:
Tableau
Collapse Evénements
Temps - Elapsed game time is 1.00 seconds
Conditions
Collapse Actions
Collapse For each (Integer A) from 1 to CONST_nbrplayer, do (Actions)
Collapse Boucle - Actions
Panneau de commandes - Create a leaderboard for (Player group((Player((Integer A))))) titled Arsenal
Set Tableau[(Integer A)] = (Last created leaderboard)
Panneau de commandes - Montrer (Last created leaderboard)
Collapse For each (Integer B) from 1 to CONST_nbrarm, do (Actions)
Collapse Boucle - Actions
Collapse If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Collapse Si - Conditions
bool_arm[(((Integer A) x 10) + (Integer B))] Egal à  TRUE
Collapse Alors - Actions
Panneau de commandes - Add (Player((Integer B))) to (Last created leaderboard) with label arme[(Integer B)] and value munition[(((Integer A) x 10) + (Integer B))]
Panneau de commandes - Change the color of the value for (Player((Integer B))) in Tableau[(Integer A)] to (100.00%, 80.00%, 20.00%) with 0.00% transparency
Panneau de commandes - Change the color of all labels for Tableau[(Integer A)] to (100.00%, 80.00%, 20.00%) with 0.00% transparency
Collapse Sinon - Actions




c) Changement d'arme

Secret:

Gui:
Trigger:
Changement arme
Collapse Evénements
Unité - A unit Initie l'effet d'une compétence
Collapse Conditions
(Ability being cast) Egal à  Changer d'arme
Collapse Actions
Unité - Order (Triggering unit) to Arrêter
Set i = arme_port[(Player number of (Owner of (Triggering unit)))]
Collapse For each (Integer j) from (i + 1) to CONST_nbrarm, do (Actions)
Collapse Boucle - Actions
Collapse If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Collapse Si - Conditions
bool_arm[(((Player number of (Owner of (Triggering unit))) x 10) + j)] Egal à  TRUE
Collapse Alors - Actions
Set arme_port[(Player number of (Owner of (Triggering unit)))] = j
Set j = CONST_nbrarm
Sinon - Actions
Collapse If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Collapse Si - Conditions
i Egal à  arme_port[(Player number of (Owner of (Triggering unit)))]
Collapse Alors - Actions
Collapse For each (Integer j) from 1 to i, do (Actions)
Collapse Boucle - Actions
Collapse If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Collapse Si - Conditions
bool_arm[(((Player number of (Owner of (Triggering unit))) x 10) + j)] Egal à  TRUE
Collapse Alors - Actions
Set arme_port[(Player number of (Owner of (Triggering unit)))] = j
Set j = i
Sinon - Actions
Collapse Sinon - Actions
Do nothing
Joueur - Set (Owner of (Triggering unit)) Or actuel to munition[(((Player number of (Owner of (Triggering unit))) x 10) + arme_port[(Player number of (Owner of (Triggering unit)))])]
Partie - Display to (All players) the text: (Nouvelle arme :  + arme[arme_port[(Player number of (Owner of (Triggering unit)))]])



Si on veut changer d'arme, tout le truc c'est d'aller chercher l'arme suivante dans la liste d'arme. Mais le truc vicieux c'est qu'on est pas forcément sur la première arme donc il faut parcourir deux fois la liste (un coup de l'arme qu'on a jusqu'au bout et un coup du début jusqu'à l'arme qu'on a).

Globalement ça marche assez bien mais je pense qu'on peut trouver plus malin...

d) Tirer

Pour le shoot c'est assez simple, on enlève une munition sur l'arme actuel.
Si on est à 0, on lance le changement d'arme automatiquement!

Secret:

Gui:
Trigger:
Attaque
Collapse Evénements
Unité - A unit Initie l'effet d'une compétence
Collapse Conditions
(Ability being cast) Egal à  Tirer
Collapse Actions
Collapse If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Collapse Si - Conditions
munition[(((Player number of (Owner of (Triggering unit))) x 10) + arme_port[(Player number of (Owner of (Triggering unit)))])] Supérieur à  0
Collapse Alors - Actions
Set munition[(((Player number of (Owner of (Triggering unit))) x 10) + arme_port[(Player number of (Owner of (Triggering unit)))])] = (munition[(((Player number of (Owner of (Triggering unit))) x 10) + arme_port[(Player number of (Owner of (Triggering unit)))])] - 1)
Joueur - Set (Owner of (Triggering unit)) Or actuel to (((Owner of (Triggering unit)) Or actuel) - 1)
Panneau de commandes - Change the value for (Player(arme_port[(Player number of (Owner of (Triggering unit)))])) in Tableau[(Player number of (Owner of (Triggering unit)))] to munition[(((Player number of (Owner of (Triggering unit))) x 10) + arme_port[(Player number of (Owner of (Triggering unit)))])]
Collapse Sinon - Actions
-------- Plus de munition --------
Unité - Order (Triggering unit) to Arrêter
Set o = 0
For each (Integer A) from 1 to CONST_nbrarm, do (If (bool_arm[(((Player number of (Owner of (Triggering unit))) x 10) + (Integer A))] Egal à  TRUE) then do (Set o = (o + munition[(((Player number of (Owner of (Triggering unit))) x 10) + (Integer A))])) else do (Do nothing))
Collapse If (o Différent de 0) then do (Déclencheur - Run Changement arme <gen> (ignoring conditions)) else do (Partie - Display to (Player group((Owner of (Triggering unit)))) the text: Plus d'arme)




Voilà, je précise tout de même que ce système est en cours d'amélioration, pour l'instant il reste des gros défauts surtout lorsqu'on fait les tests, notamment le fait que tirer ne produit qu'un effet graphique puisque je n'ai pas gérer les dégâts ni les spécificités de chaque arme (ce qui peut se faire facilement en utilisant les différents niveaux du sort Tirer).
Simplement ici je donne un moyen de gérer les munitions assez simple, je pense que ça donne une autre approche même s'il est beaucoup moins complet !

Enfin je continue à l'améliorer pas de soucis.

Je poste quand même la map : Télécharger la map
_________________
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
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
La question posée dans ce topic a été résolue !

 
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