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 :
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.
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.
Question
Gaël Erhlich
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 :
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 :
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