Aller au contenu
  • 0

Faux négatifs dans loop blocks


Question

Posté(e)

Hola, j'essaye de faire un code en 1.10 avec Umbaska, SkQuery et SkStuff, pour coller un schematic au hasard dans une zone donnée. Vu que je veux faire l'opération plusieurs fois, je veux empêcher un schematic de se coller dans un autre qui avait été placé précédemment.

 

Pour empêcher que ça arrive, j'ai ajouté un test qui, si il y a des blocs des autres schematics dans un certain rayon, recommence avec de nouvelles coordonnées. Le problème est que j'ai beaucoup de faux négatifs, c'est-à-dire qu'il arrive régulièrement qu'une maison qui entre entièrement dans le rayon ne soit pas détectée.

 

Voici le code :

    #Recherche d'une bonne position pour le schematic
   set {_ZoneValide} to false
   while {_ZoneValide} is false: #ZoneValide indique si il faut chercher une nouvelle position.
       set {_ZoneValide} to true #Sur true par défaut

       #Génération des coordonnées. {_Localisation} est l'extrémité Sud-Est de l'emplacement et {_PosCentre} le milieu.
       set x-coordinate of {_Localisation} to a random integer between {@CoordXmin} and {lRdM.CoordXmax}
       set y-coordinate of {_Localisation} to {@HauteurMax}
       set z-coordinate of {_Localisation} to a random integer between {@CoordZmin} and {lRdM.CoordZmax}

       #La coordonnée Y diminue jusqu'à rencontrer un sol défini en option (dirt or stone or sand)
       while block below {_Localisation} isn't {@BlocsSol}: 
           remove 1 from y-coordinate of {_Localisation}
       set {_PosCentre} to {_Localisation}
       add {lRdM.Schematic.Rayon.%{_Schematic}%} to x-coordinate of {_PosCentre}
       add {lRdM.Schematic.Rayon.%{_Schematic}%} to z-coordinate of {_PosCentre}

       #On vérifie si il n'y a pas déjà un bâtiment.
       loop all blocks in radius {_RayonAjust} around {_PosCentre}:
           if loop-block is {@BlocsMaisons}: #BlocsMaisons sont les blocs qui permettent de reconnaître un autre schematic (sand)
               set {_ZoneValide} to false
               wait 1 second
               exit 2 section

   #On colle le schematic à {_Location}.
   ...

 

Pour comprendre un peu mieux, j'ai créé des conditions où mon test ne cherche plus les planches des maisons, mais le sable qui constitue le sol, qui se retrouve donc forcément dans le rayon, ainsi le schematic ne devrait jamais se coller. Mais si :

1477088002-2016-10-22-00-12-53.png

Niveau debug, j'ai vu qu'à la fin de chaque boucle, {_ZoneValide} était true, sauf pour le faux négatif. La zone de recherche est toujours bien définie, mais si je demande au plugin d'afficher le nom des blocs qu'il teste, il m'affiche seulement air.

 

Je suis perdu sans vous, merci d'avance.

3 réponses à cette question

Messages recommandés

  • 0
Posté(e)

J'ai voulu remplacer le test des blocs autour par un test de distance avec les positions des autres schematics que j'ai notées dans une variable liste, et je me suis rendu compte que si au premier tour du while, une position était trop proche et que donc la boucle recommençait, le nouveau loop ne vérifiait qu'une partie de la liste ce qui menait à de faux négatifs.

J'ai essayé de retirer le exit 2 sections dans les deux codes, et ça marche mieux sans. Le problème, c'est que ça sert à rien de continuer à vérifier les coordonnées/les blocs autour une fois qu'on sait que la position générée est mauvaise. Mais je peux pas l'éviter sans l'instruction que j'ai retirée. :c

×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.