Inscrit le: 12 Nov 2011 Messages: 1062 Sujets: 107 Spécialité en worldedit: Inactif(Enfin presque) Médailles: 1 (En savoir plus...)
Posté le: 11/04/12 18:42 Sujet du message: Problème avec le Bribe'Unit Indexer
Voilà mon problème, j'ai décidé d'utiliser le Bribe Unit Indexer pour une map, donc je met le système aucun problème, je teste un sort, rien ne se passe, je relance le sort, rien non plus, je réessaye plusieurs fois: toujours rien donc j'aimerai savoir d'où vient le problème: Voilà tous les déclencheurs concernés:
Le cast du sort
Secret:
Gui:
Trigger:
Burning Heat
Evénements
Unité - Une unité Initie l'effet d'une compétence
Conditions
(Compétence étant utilisée) Egal à Brûlure
Actions
-------- On crée un dummy pour le sort -------- Définir Burning_Heat_Target_Point = (Point ciblé par la compétence étant utilisée/lancée) Unité - Créer 1 (projectile) pour le (Joueur déclencheur) au point TargetPoint ; orientation = (Angle d'orientation de (Unité utilisant la capacité)) degrés. -------- La variable ID represente le lancement du sort -------- Définir TempUnit = (Dernière unité créée) Définir Burning_Heat_ID = (Valeur Personnalisée de TempUnit) -------- On utilise la variable ID avec array pour sauvegarder les données -------- -------- Voilà les variables -------- Définir dummy_burning_heat[Burning_Heat_ID] = TempUnit Définir Burning_Heat_Caster[Burning_Heat_ID] = (Unité utilisant la capacité) Définir dummy_burning_heat_distance[Burning_Heat_ID] = (Distance entre (Position de dummy_burning_heat[Burning_Heat_ID]) et Burning_Heat_Target_Point) Définir dummy_burning_heat_angle[Burning_Heat_ID] = 315.00 Définir dummy_burning_heat_integer[Burning_Heat_ID] = 0 -------- On définit les dégâts -------- Unité - Régler le niveau de Burning Heat Damage pour dummy_burning_heat[Burning_Heat_ID] à (Niveau de Brûlure pour Burning_Heat_Caster[Burning_Heat_ID]). -------- Si le groupe est vide on active le déclencheur loop -------- Si (conditions) sont vraies, alors exécuter (Actions) sinon (Actions)
Si - Conditions
(Burning_Heat_Group est vide) Egal à VRAI
Alors - Actions
Déclencheur - Activer le déclencheur Burning Heat Loop <gen>.
Sinon - Actions -------- On ajoute le dummy au groupe -------- Groupe unité - Ajouter dummy_burning_heat[Burning_Heat_ID] à Burning_Heat_Group. -------- On retire les leaks -------- Texte personnalisé: call RemoveLocation(udg_Burning_Heat_Target_Point) -------- C'est fini --------
Le loop du sort
Secret:
Gui:
Trigger:
Burning Heat Loop
Evénements
Temps - Toutes les 0.03 secondes de temps de jeu.
Conditions
Actions
Groupe unité - Considérer toutes unités présentes dans Burning_Heat_Group et exécuter les (Actions).
Boucle - Actions
Définir TempUnit = (Unités considérées) Définir ID = (Valeur Personnalisée de TempUnit) -------- This next chunk of code is just for the demo - change it to what you want your spell to be like -------- Définir TempPlayer = (Propriétaire de TempUnit) Définir Burning_Heat_Point_1 = (Position de TempUnit) Définir Burning_Heat_Point_2 = (Burning_Heat_Point_1 décalé de 20.00 et orienté de (Angle d'orientation de TempUnit) degrés) Unité - Déplacer instantanément TempUnit au point Burning_Heat_Point_2. Texte personnalisé: call RemoveLocation(udg_CenterPoint) Texte personnalisé: call RemoveLocation(udg_Burning_Heat_Point_1) Texte personnalisé: call RemoveLocation(udg_Burning_Heat_Point_2) -------- When the duration reaches 0 it means the spell is done -------- Définir dummy_burning_heat_distance[Burning_Heat_ID] = (dummy_burning_heat_distance[Burning_Heat_ID] - 20.00) Si (conditions) sont vraies, alors exécuter (Actions) sinon (Actions)
Si - Conditions
dummy_burning_heat_distance[Burning_Heat_ID] Inférieur ou égal à 0.00
Alors - Actions
-------- Clean up any data attached to this spell -------- Si (conditions) sont vraies, alors exécuter (Actions) sinon (Actions)
Si - Conditions
dummy_burning_heat_integer[Burning_Heat_ID] Inférieur à 8
Alors - Actions
Définir TempUnit = (Unités considérées) Définir ID = (Valeur Personnalisée de TempUnit) Définir TempPlayer = (Propriétaire de TempUnit) Définir CenterPoint = (Position de TempUnit) Définir dummy_burning_heat_integer[Burning_Heat_ID] = (dummy_burning_heat_integer[Burning_Heat_ID] + 1) Définir dummy_burning_heat_angle[Burning_Heat_ID] = (dummy_burning_heat_angle[Burning_Heat_ID] + 45.00) Unité - Créer 1 (effect) pour le TempPlayer au point (CenterPoint décalé de 90.00 et orienté de dummy_burning_heat_angle[Burning_Heat_ID] degrés) ; orientation = Orientation bâtiment par défaut degrés. Unité - Ajouter un temps de désinvocation de 2.00 secondes et de type Générique pour (Dernière unité créée). Déclencheur - Ajouter au déclencheur Burning Heat Damage <gen> l'évènement suivant : (Unité - Une unité entre dans un cercle de rayon 90.00 qui à pour centre (Dernière unité créée).). Unité - Régler le niveau de Burning Heat Damage pour (Dernière unité créée) à (Niveau de Burning Heat Damage pour TempUnit).
Sinon - Actions -------- Remove the dummy from the group and from the game -------- Groupe unité - Retirer TempUnit de Burning_Heat_Group. Unité - Retirer TempUnit du jeu. Si (conditions) sont vraies, alors exécuter (Actions) sinon (Actions)
Si - Conditions
(Burning_Heat_Group est vide) Egal à VRAI
Alors - Actions
-------- Turn off this trigger as it's currently doing nothing -------- Déclencheur - Désactiver le déclencheur Burning Heat Loop <gen>.
Sinon - Actions
Sinon - Actions
Les dégâts du sort
Secret:
Gui:
Trigger:
Burning Heat Damage Evénements
Conditions
(Propriétaire de (Unité déclencheuse)) Différent de (Propriétaire de (Dernière unité créée))
Actions
Unité - Faire que (Dernière unité créée) cause des dommages à (Unité déclencheuse), répartissant (50.00 x (Réel((Niveau de Burning Heat Damage pour (Dernière unité créée))))) points de dégâts de type Sorts et dommages de type Normal.
Le "préloading" du sort
Secret:
Gui:
Trigger:
Preload Spells
Evénements
Partie - UnitIndexEvent devient Egal à 3.00
Conditions
Actions
Définir UnitIndexerEnabled = FAUX Définir CenterPoint = (Centre de (Zone jouable de la carte)) Unité - Créer 1 (indexer) pour le Neutre Passif au point CenterPoint ; orientation = Orientation bâtiment par défaut degrés. Définir TempUnit = (Dernière unité créée) -------- To preload abilities and/or buffs, just add them to TempUnit -------- Unité - Ajouter la compétence Brûlure à TempUnit. -------- The dummy unit's task is now done, it can be removed from the game -------- Unité - Retirer TempUnit du jeu. Texte personnalisé: call RemoveLocation(udg_CenterPoint) Définir UnitIndexerEnabled = VRAI
Et l'Unit Indexer
Secret:
Gui:
Trigger:
Unit Indexer
Evénements
Initialisation de la carte
Conditions
Actions
Texte personnalisé: call ExecuteFunc("InitializeUnitIndexer") Texte personnalisé: endfunction -------- This is the most important function - it provides an index for units as they enter the map -------- Texte personnalisé: function IndexUnit takes nothing returns boolean Texte personnalisé: local integer pdex = udg_UDex -------- You can use the boolean UnitIndexerEnabled to protect some of your undesirable units from being indexed -------- -------- - Example: -------- -------- -- Set UnitIndexerEnabled = False -------- -------- -- Unit - Create 1 Dummy for (Triggering player) at TempLoc facing 0.00 degrees -------- -------- -- Set UnitIndexerEnabled = True -------- -------- You can also customize the following block - if conditions are false the (Matching unit) won't be indexed. -------- Si (conditions) sont vraies, alors exécuter (Actions) sinon (Actions)
Si - Conditions
UnitIndexerEnabled Egal à VRAI
Alors - Actions
-------- Generate a unique integer index for this unit -------- Si (conditions) sont vraies, alors exécuter (Actions) sinon (Actions)
-------- Link index to unit, unit to index -------- Définir UDexUnits[UDex] = (Unité respectant la condition) Unité - Régler la valeur personnalisée de UDexUnits[UDex] à UDex. -------- Use a doubly-linked list to store all active indexes -------- Définir UDexPrev[UDexNext[0]] = UDex Définir UDexNext[UDex] = UDexNext[0] Définir UDexNext[0] = UDex -------- Fire index event for UDex -------- Définir UnitIndexEvent = 0.00 Définir UnitIndexEvent = 1.00 Définir UnitIndexEvent = 0.00 Texte personnalisé: set udg_UDex = pdex
Sinon - Actions Texte personnalisé: return false Texte personnalisé: endfunction -------- The next function is called each time a unit enters the map -------- Texte personnalisé: function IndexNewUnit takes nothing returns boolean Texte personnalisé: local integer pdex = udg_UDex Texte personnalisé: local integer ndex -------- Recycle indices of units no longer in-play every (15) units created -------- Définir UDexWasted = (UDexWasted + 1) Si (conditions) sont vraies, alors exécuter (Actions) sinon (Actions)
Si - Conditions
UDexWasted Egal à 15
Alors - Actions
Définir UDexWasted = 0 Définir UDex = UDexNext[0] Texte personnalisé: loop Texte personnalisé: exitwhen udg_UDex == 0 Si (conditions) sont vraies, alors exécuter (Actions) sinon (Actions)
Si - Conditions
(Valeur Personnalisée de UDexUnits[UDex]) Egal à 0
Alors - Actions
-------- Remove index from linked list -------- Texte personnalisé: set ndex = udg_UDexNext[udg_UDex] Texte personnalisé: set udg_UDexNext[udg_UDexPrev[udg_UDex]] = ndex Texte personnalisé: set udg_UDexPrev[ndex] = udg_UDexPrev[udg_UDex] Définir UDexPrev[UDex] = 0 -------- Fire deindex event for UDex -------- Définir UnitIndexEvent = 2.00 Définir UnitIndexEvent = 0.00 -------- Recycle the index for later use -------- Définir UDexUnits[UDex] = Pas d'unité Définir UDexNext[UDex] = UDexRecycle Définir UDexRecycle = UDex Texte personnalisé: set udg_UDex = ndex
Sinon - Actions
Définir UDex = UDexNext[UDex]
Texte personnalisé: endloop Texte personnalisé: set udg_UDex = pdex
Sinon - Actions -------- Handle the entering unit (Matching unit) -------- Si (conditions) sont vraies, alors exécuter (Actions) sinon (Actions)
Si - Conditions
(Valeur Personnalisée de (Unité respectant la condition)) Egal à 0
Alors - Actions
Texte personnalisé: call IndexUnit()
Sinon - Actions Texte personnalisé: return false Texte personnalisé: endfunction -------- The next function initializes the core of the system -------- Texte personnalisé: function InitializeUnitIndexer takes nothing returns nothing Texte personnalisé: local integer i = 0 Texte personnalisé: local region re = CreateRegion() Texte personnalisé: local rect r = GetWorldBounds() Définir UnitIndexerEnabled = VRAI Texte personnalisé: call RegionAddRect(re, r) Texte personnalisé: call TriggerRegisterEnterRegion(CreateTrigger(), re, Filter(function IndexNewUnit)) Texte personnalisé: call RemoveRect(r) Texte personnalisé: set re = null Texte personnalisé: set r = null Texte personnalisé: loop Texte personnalisé: call GroupEnumUnitsOfPlayer(bj_lastCreatedGroup, Player(i), Filter(function IndexUnit)) Texte personnalisé: set i = i + 1 Texte personnalisé: exitwhen i == 16 Texte personnalisé: endloop -------- This is the "Unit Indexer Initialized" event, use it instead of "Map Initialization" for best results -------- Définir UnitIndexEvent = 3.00 Définir UnitIndexEvent = 0.00
Avant quand je rajoutais l'event "Unit - Unit enters "playable map area" La map se stoppait dans tous les sens du terme et war3 buggait.Maintenant que j'ai enlevé l'event,il ne se passe plus rien au niveau des sorts. _________________
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