Inscrit le: 25 Fév 2014 Messages: 1175 Sujets: 167 Spécialité en worldedit: La simplicité
Posté le: 27/12/16 18:12 Sujet du message: Le garde qui fait tout sauter !
Salut à tous, j'ai cherché à faire un petit truc : on a une caserne, un cercle de puissance devant. Une unité dedans, appelée "fusiller de garde", ne peut en sortir (pour ça, j'ai mis vitresse de mouvement = 0, elle tourne pas, mais au moins, ça marche (pas mal le jeu de mot )).
Après, quand une unité tue ce fusiller, cette unité meurt et j'en crée une (un fusiller) avec la même vie, mais en tant que fusiller de garde, avec un mouvement de 0, dans le cercle.
Enfin, la caserne change de propriétaire.
MAIS, s'il y a des unités du proprio de la caserne pas loin, elles remplaceront le fusiller de garde s'il meurt !
Donc, voici :
Là, je teste, mais au moment où le fusiller de garde meurt, sachant qu'il y avait un fusiller ennemi juste à côté, Warcraft 3 plante.
Je pense que mon truc n'est pas assez optimisé et que ça fait trop de calculs ... (note : il s'agit de la vérification s'il y a une unité ennemie pas loin qui fait planter, enfin, je crois)
Y'a-t-il moyen de simplifier et résoudre mon problème ?
Inscrit le: 29 Oct 2014 Messages: 181 Sujets: 8 Spécialité en worldedit: les gauffres au nutella
Posté le: 27/12/16 19:21 Sujet du message:
Le plantage vient probablement d'une boucle infinie, genre "une unité rentre dans une région, ce qui déclenche une action, cette action rebouge une unité dans cette région, ce qui redéclenche l'action, etc à l'infini".
Tu devrais poster tous tes déclencheurs avec les balises GUI du forum, histoire qu'on puisse voir d'où ça vient. _________________
Inscrit le: 09 Mar 2009 Messages: 1154 Sujets: 54 Spécialité en worldedit: Croâ ?
Posté le: 27/12/16 23:47 Sujet du message:
Quand tu vérifies s'il n'y a pas d'unités alliées dans l'énumération du groupe dans la première ligne d'action, tu ne vérifies pas si les unités sont vivantes et donc cela va probablement énumérer sur le fusilier de garde mort que tu retues, peut-être que cela vient de là.
Au passage dans le 'Sinon', tu créées un groupe avec la condition "Owner of Dying Unit Egal à Owner of Dying Unit" qui sera toujours vraie du coup _________________
Si une unité meurt, que c'est un fusiller, et que le joueur qui contrôle le fusiller (on se trouve dans le 'Sinon' là) a une unité à côté (morte ou vivante au passage, et peu importe le type de l'unité, soit, possiblement, une caserne), tu vas créer un nouveau fusilier et tué une unité aléatoire autour (donc potentiellement ta caserne).
Personnellement vu comme ça, il n'y a aucun moyen que ton 'Alors' se déclenche... _________________
En regardant à nouveau, ton problème vient de deux choses, ce que j'ai relevé juste avant avec le fait qu'uniquement ton 'Sinon' se déclenche, mais également - je pense - de ta dernière ligne : Unité - Kill (Random unit from (Last created unit group)); car ce Last created unit group ne se compose que de ton Fusilier gardes créé.
Last created unit group est un groupe d'unité composé des unités créées avec 'Create X unit-type for Player'; que X soit 1, ou 120.
Par conséquent ton Last created unit group, en prenant une unité au hasard, est forcément un fusilier, ce qui redéclenche le déclencheur encore une fois car comme je te l'ai dis; tu n'entres jamais dans le 'Alors', du coup, boucle infinie
Edit: la solution la plus simple serait de changer ton 'Sinon' par :
Kill (Random unit from(Units within 250.00 of (Position of (Dying unit)) matching...
Create 1 Fusilier gardes for ...
Car là tu risques de créer un fusiller pour chaque unité qu'il trouve à côté du fusiller tué. _________________
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