J'ai découvert l'utilité des "infinite loop detection=TRUE" et "interrupt signal inabled= TRUE", ben c'est franchement pas du luxe! jusqu'ici ça m'a toujours sauvé la mise...une fois une boucle a la con m'a couté un format C:, depuis je fais mega super gaffe ...
L'atelier des scripto-rameurs
Moderator: Modérateurs pour les forum Français
-
- Posts: 697
- Joined: Wed, 31. Mar 04, 00:37
L'hypertrophie de louveteau se palpe.
Tiens, mais ne serait-ce pas une fonction de Recherche ?
Tiens, mais ne serait-ce pas une fonction de Recherche ?
-
- Posts: 501
- Joined: Fri, 2. Apr 04, 18:59
et tu t'en sert comment........Bléral wrote:J'ai découvert l'utilité des "infinite loop detection=TRUE" et "interrupt signal inabled= TRUE", ben c'est franchement pas du luxe! jusqu'ici ça m'a toujours sauvé la mise...une fois une boucle a la con m'a couté un format C:, depuis je fais mega super gaffe ...
Vas y explique

Tu met cela a quel niveau dans ton code ????
------------------------------------------------------------------------
Au fait pour mon probleme c'a y est, je l'ai resolu, la fonction marche de façon basic, je l'ameliorai apres, les Wait
Code: Select all
sont tres utile, maintenant faut que mes vaisseaux capitaux attendent que tout mes Chasseurs se soient appontés car ils se tirent dans un autre secteur avant....
Vait essayer la commande distance entre vaisseau X et Y avec une boucle et un Wait dedans....
-
- Posts: 697
- Joined: Wed, 31. Mar 04, 00:37
Je me suis fait un petit script utilitaire pour ça: y'a plus sûr que ce que tu dis, c'est une pause imposée au vaisseau porteur avec detection des vaisseaux demandant l'arrimage -enfin si tu vois ce que je veux dire: le principe est
enfin je l'ai plus en tête (il faudrait que je change d'OS pour jeter un oeil au fichier) mais c'est grosso modo le principe, et ça marche très bien. Je m'en sers lorsqu'une escadre cherche à atterrir: au sein du script exécuté par le leader, j'ai une série du genre si la destination est un vaisseau porteur, destination - interrupt with script 'attends.une.seconde.j.arrive'. Je suis pas très clair, m'enfin chuis un peu bourré là, apéro prolongé 
edit: pour le "infinite loop detection" et "interrupt signal enabled": encore une fois avertis-moi si je dis une connerie, mais il me semble qu'il suffit de mettre ça en "intro" du script et il te bloquera immédiatement n'importe quelle loop foireuse? avec un message assez ésotérique qui permet plus ou moins de se faire une idée du probleme./
Code: Select all
$demandeurs.d.acces=$porteur->get formation followers
while $demandeurs.d.acces> o
wait randomly environ 5000 ms
$demandeurs.d.acces=$porteur->get formation followers
end

edit: pour le "infinite loop detection" et "interrupt signal enabled": encore une fois avertis-moi si je dis une connerie, mais il me semble qu'il suffit de mettre ça en "intro" du script et il te bloquera immédiatement n'importe quelle loop foireuse? avec un message assez ésotérique qui permet plus ou moins de se faire une idée du probleme./
L'hypertrophie de louveteau se palpe.
Tiens, mais ne serait-ce pas une fonction de Recherche ?
Tiens, mais ne serait-ce pas une fonction de Recherche ?
-
- Posts: 77
- Joined: Fri, 21. May 04, 20:01
-
- Posts: 697
- Joined: Wed, 31. Mar 04, 00:37
Une question a propos des "flags": pour trouver (par exemple) tous les vaisseaux à portée, est-ce qu'il faut utiliser [find.nearest]|[find.multiple], ou simplement régler maxnum sur 1000? Si on n'utilise pas [find.multiple], les vaisseaux trouvés seront-ils quand même un array?
L'hypertrophie de louveteau se palpe.
Tiens, mais ne serait-ce pas une fonction de Recherche ?
Tiens, mais ne serait-ce pas une fonction de Recherche ?
-
- Posts: 77
- Joined: Fri, 21. May 04, 20:01
-
- Posts: 697
- Joined: Wed, 31. Mar 04, 00:37
Y'a qqch de pourri au royaume de Danmark... y'a un truc pas net qui me fait arrêter des processus qui sont censés être permanents: c'est pourquoi je supposais que ça pouvait être ça, mais en fait je vois pas le rapport, et c'est eut-être dans ma façon d'"appeler" des scripts
J'explique juste le principe (je vais pas vous refourguer tout le code, ça serait un peu lourd): c'est pour le script d'"escadres" dont je parlais dans un autre topic, l'idée est d'assigner des ailiers à un leader, ils ont alors un script qui tourne en permanence et qui règle leurs comportements (suivre le leader, quand et comment, acquérir sa cible selon son type, bref); on peut ensuite donner différents nouveaux ordres de patrouille au leader, et les ailiers l'accompagnent, en étant censés être plus efficaces que des ailiers normaux. OR, durant mes tests de la matinée, je me suis fait par deux fois descendre un Nova par un BAYAMON! ce qui me cause comme un léger soupçon de doute quant à la redoutabilité de ma super-escadre...
Le leader se comporte très bien, ses scripts tournent sans pb; mais les ailiers semblent arrêter leurs tâches secondaires à un certain moment. J'ai placé des messages au fil de leur script permanent (la loop qui règle leurs comportements), pour qu'ils me confirment par exemple quand ils ont acquis une cible, laquelle, quand ils la descendent, et quand ils sont en difficulté.
Si je dis au leader de flinguer tout simplement tous les ennemis dans un secteur, avec la commande de combat classique, les ailiers m'envoient bien ces messages au fur et à mesure, et ils sont diablement efficaces (ils concentrent le feu sur les grosses cibles, défendent le leader quand il est en difficulté... ); mais si je donne au leader l'une des nouvelles commandes, ben les ailiers suivent en formation, ils affichent toujours la bonne commande, mais en fait ils ont l'air de se contenter d'escorter classiquement... et ne m'envoient aucun message de validation, d'acquisition, etc.
Je postais en espérant que quelqu'un reconnaîtrait une erreur classique, ou aurait une quelconque solution, mais je me rends compte que c'est assez flou comme truc... bon au moins ça me défoule
Je soupçonne que le pb vienne du moment où je demande aux ailiers de sauter au sein du script du leader (ce que je pourrais supprimer), mais je vois pas pourquoi ça annulerait les tâches des ailiers; et si c'était le cas, ils deviendraient ensuite complètement "inactifs", alors que là ils continuent à suivre le leader
je tâtonne, alors j'ai essayé aussi bien "call script" que "interrupt with script", mais ça m'a l'air kif-kif...
bref, ça m'étonnerait que vous puissiez m'aider vu le flou de ce post, mais tant pis...

J'explique juste le principe (je vais pas vous refourguer tout le code, ça serait un peu lourd): c'est pour le script d'"escadres" dont je parlais dans un autre topic, l'idée est d'assigner des ailiers à un leader, ils ont alors un script qui tourne en permanence et qui règle leurs comportements (suivre le leader, quand et comment, acquérir sa cible selon son type, bref); on peut ensuite donner différents nouveaux ordres de patrouille au leader, et les ailiers l'accompagnent, en étant censés être plus efficaces que des ailiers normaux. OR, durant mes tests de la matinée, je me suis fait par deux fois descendre un Nova par un BAYAMON! ce qui me cause comme un léger soupçon de doute quant à la redoutabilité de ma super-escadre...
Le leader se comporte très bien, ses scripts tournent sans pb; mais les ailiers semblent arrêter leurs tâches secondaires à un certain moment. J'ai placé des messages au fil de leur script permanent (la loop qui règle leurs comportements), pour qu'ils me confirment par exemple quand ils ont acquis une cible, laquelle, quand ils la descendent, et quand ils sont en difficulté.
Si je dis au leader de flinguer tout simplement tous les ennemis dans un secteur, avec la commande de combat classique, les ailiers m'envoient bien ces messages au fur et à mesure, et ils sont diablement efficaces (ils concentrent le feu sur les grosses cibles, défendent le leader quand il est en difficulté... ); mais si je donne au leader l'une des nouvelles commandes, ben les ailiers suivent en formation, ils affichent toujours la bonne commande, mais en fait ils ont l'air de se contenter d'escorter classiquement... et ne m'envoient aucun message de validation, d'acquisition, etc.


Je soupçonne que le pb vienne du moment où je demande aux ailiers de sauter au sein du script du leader (ce que je pourrais supprimer), mais je vois pas pourquoi ça annulerait les tâches des ailiers; et si c'était le cas, ils deviendraient ensuite complètement "inactifs", alors que là ils continuent à suivre le leader

Code: Select all
042 $compteur = size of array $Escorte
043 while $compteur > 0
044 dec $compteur =
045 $ailier = $Escorte[$compteur]
046 @ = $ailier -> call script '!move.jump' : gate or sector=$Portail.destination followers should jump too=[TRUE]
047 end
048 $compteur = null
049
050 @ = [THIS] -> move around 5000 ms
051 end
052 end

L'hypertrophie de louveteau se palpe.
Tiens, mais ne serait-ce pas une fonction de Recherche ?
Tiens, mais ne serait-ce pas une fonction de Recherche ?
-
- Posts: 77
- Joined: Fri, 21. May 04, 20:01
Si les nouvelles commandes dont tu parles sont faite par toi, il est possible qu'elles soient moins performantes que celles du jeu (il ont peut etre prevu dans les scripts de combat des commandes qui donne des ordres au ailliers).mais si je donne au leader l'une des nouvelles commandes
Comme c'est ecrit l'appel de script bloque la boucle. Les vaisseaux font l'action les uns aprés les autres. Il y a aussi avec $compteur=null (null et 0 ce n'est pas la meme chose) le compteur est inutilisable.Il est possible que ça vienne de la commande que tu utilise !move.jump (qu'est ce qu'elle fait passer la porte indiquer, utiliser le jump drive), le parametre "followers" sert à ce que les ailliers sautent aussi donc elle devrait peut etre servir sur le leader et pas sur les ailliers.
Ce ne sont que des idées mais sa pourra peut etre t'aider.
Je me demande si la fonction "interupt" ne sert pas interrompre le script en cour d'execution par un autre puis de reprendre le cour du script precedent comme quand un de tes vaisseaux est sur pilote auto si tu regarde la comande qu'il execute il arrive parfois qu'on voit afficher "evitement" ou quelque chose comme ça puis puis il revient à ce qu'il faisait precedament (théorie à vérifier).
-
- Posts: 2351
- Joined: Sun, 28. Mar 04, 15:56
-
- Posts: 697
- Joined: Wed, 31. Mar 04, 00:37
Bof... Le pb est apparemment résolu, j'explique pourquoi des fois que d'autres le rencontreraient: apparemment les commandes "call script"/ "interrupt with script", lancées depuis la commande utilisée par le leader vers chacun de ses ailiers, rompent la loop permanente qui tournait sur ceux-ci. Par exemple, je donnais au leader une commande qui impliquait qu'il fasse un saut, alors au sein de cette commande j'indiquais à chaque ailier de le suivre; ils s'exécutaient, restaient ensuite en formation sur lui, mais de fait leurs loops n'étaient plus actives.
Corrigé en évitant ce genre de ponts (càd, par exemple, les commandes faisant sauter les ailiers avec le leader sont au sein de leurs propres loops permanentes, et pas appelées par une autre commande), et maintenant les "current tasks" affichées par les ailiers sont bien ce qu'elles devaient être (alors qu'avant elles restaient imperturbablement sur "escorte...").
Donc la leçon que j'en tire est soit éviter les loops permanentes, de peur qu'elles soient brisées sans qu'on s'en rende compte, soit éviter les "call scripts " que j'ai tendance à utiliser beaucoup...
mais je trouve quand même ça bizarre et franchement contraignant
Je vais re-faire des tests, parce que ces commandes n'auraient pas dû avoir cet effet pervers... Y'a bien des situations où elles ne peuvent pas être évitées!
EDIT: 'me suis un peu avancé en fait... deux jours plus tard, ce foutu bordel de problème n'est toujours pas résolu
mais j'insiste!
Corrigé en évitant ce genre de ponts (càd, par exemple, les commandes faisant sauter les ailiers avec le leader sont au sein de leurs propres loops permanentes, et pas appelées par une autre commande), et maintenant les "current tasks" affichées par les ailiers sont bien ce qu'elles devaient être (alors qu'avant elles restaient imperturbablement sur "escorte...").
Donc la leçon que j'en tire est soit éviter les loops permanentes, de peur qu'elles soient brisées sans qu'on s'en rende compte, soit éviter les "call scripts " que j'ai tendance à utiliser beaucoup...


EDIT: 'me suis un peu avancé en fait... deux jours plus tard, ce foutu bordel de problème n'est toujours pas résolu

Last edited by Bléral on Thu, 16. Sep 04, 18:57, edited 1 time in total.
L'hypertrophie de louveteau se palpe.
Tiens, mais ne serait-ce pas une fonction de Recherche ?
Tiens, mais ne serait-ce pas une fonction de Recherche ?
-
- Posts: 77
- Joined: Fri, 21. May 04, 20:01
-
- Posts: 501
- Joined: Fri, 2. Apr 04, 18:59
Tu as 2 solutions,Bléral wrote:Bof... Le pb est apparemment résolu, j'explique pourquoi des fois que d'autres le rencontreraient: apparemment les commandes "call script"/ "interrupt with script", lancées depuis la commande utilisée par le leader vers chacun de ses ailiers, rompent la loop permanente qui tournait sur ceux-ci. Par exemple, je donnais au leader une commande qui impliquait qu'il fasse un saut, alors au sein de cette commande j'indiquais à chaque ailier de le suivre; ils s'exécutaient, restaient ensuite en formation sur lui, mais de fait leurs loops n'étaient plus actives.
Corrigé en évitant ce genre de ponts (càd, par exemple, les commandes faisant sauter les ailiers avec le leader sont au sein de leurs propres loops permanentes, et pas appelées par une autre commande), et maintenant les "current tasks" affichées par les ailiers sont bien ce qu'elles devaient être (alors qu'avant elles restaient imperturbablement sur "escorte...").
Donc la leçon que j'en tire est soit éviter les loops permanentes, de peur qu'elles soient brisées sans qu'on s'en rende compte, soit éviter les "call scripts " que j'ai tendance à utiliser beaucoup...mais je trouve quand même ça bizarre et franchement contraignant
Je vais re-faire des tests, parce que ces commandes n'auraient pas dû avoir cet effet pervers... Y'a bien des situations où elles ne peuvent pas être évitées!
soit les scripts qui donnent les ordres au autres vaisseaux doivent etre prescedé de START, ensuite tu execute le script pour ton leader sans le START celui ci bloque ta boucle jusqu'a la fin de son ordre..
Soit tu utilise un Task script, le script apparait dans les differentes taches en attentes du vaisseau ...
-
- Posts: 697
- Joined: Wed, 31. Mar 04, 00:37
Justement non, une fois l'ordre exécuté la boucle ne reprend pas son travail... m'enfin décidemment, ça me semble bizarre, ça aurait bien dû marcher comme ça!!celui ci bloque ta boucle jusqu'a la fin de son ordre
Soit tu utilise un Task script
tu pourrais m'expliquer un peu ça? Je vois pas bien comment les utiliser... (tu dis si j'abuse

L'hypertrophie de louveteau se palpe.
Tiens, mais ne serait-ce pas une fonction de Recherche ?
Tiens, mais ne serait-ce pas une fonction de Recherche ?
-
- Posts: 77
- Joined: Fri, 21. May 04, 20:01
-
- Posts: 501
- Joined: Fri, 2. Apr 04, 18:59
@ voirFlo2K wrote:Et lancer les script avec des prio différente ça ne permet pas de les faire se superposer?
Sinon j'ai une question Les Mines Squash ne seraient-elles pas considéré dans la categorie Vaisseau (niveau script) ?
car quand je fait une recherche de vaisseau enemie pour mes attaques, mes vaisseaux s'ocupent aussi des Mines Squach qui traine içi et la dans les secteurs
-
- Posts: 77
- Joined: Fri, 21. May 04, 20:01
-
- Posts: 77
- Joined: Fri, 21. May 04, 20:01
Un petit coup de main serait le bien venu.
Il doit normalement trouver les cibles les plus importantes en fonction de la classe du vaisseau. Mais ça marche pas et ce moment je souffre du syndrome du scripteur.
Votre avis sur le classement des priorités cible parce que c'est fait à vu de nez.
Syndrome du scripteur: Maladie qui fait son apparition aprés avoir taper pendant plusieurs heures des lignes de code. Les symptomes sont une fatique oculaire, des douleurs dans les doigts et une incapacité maladive à trouver se qui cloche dans les lignes de code que l'on vient de passer des heures à taper.
Code: Select all
001 $flag = [Find.Nearest] | [Find.Multiple]
002 $pos = find ship: sector=[SECTOR] class or type=Vaisseau race=Race ennemie flags=$flag refobj=[THIS] maxdist=20000 maxnum=20 refpos=null
003 $taille = size of array $pos
004 $prio = array alloc: size=7
005 if [THIS] -> is of class Destroyer Lourd M1
006 goto label M1et2
007 else if [THIS] -> is of class Destroyer M2
008 goto label M1et2
009 else if [THIS] -> is of class Croiseur M6
010 goto label M6etM3
011 else if [THIS] -> is of class Chasseur Lourd M3
012 goto label M6etM3
013 else if [THIS] -> is of class Chasseur M4
014 goto label M4
015 else if [THIS] -> is of class Chasseur Léger M5
016 goto label M5
017 end
018 M1et2:
019 append Destroyer M2 to array $prio
020 append Destroyer Lourd M1 to array $prio
021 append Croiseur M6 to array $prio
022 append Amas Khaak M3 to array $prio
023 append Chasseur Lourd M3 to array $prio
024 append Chasseur M4 to array $prio
025 append Chasseur Léger M5 to array $prio
026 goto label tri
027 M6etM3:
028 append Croiseur M6 to array $prio
029 append Amas Khaak M3 to array $prio
030 append Chasseur Lourd M3 to array $prio
031 append Destroyer M2 to array $prio
032 append Chasseur M4 to array $prio
033 append Destroyer Lourd M1 to array $prio
034 append Chasseur Léger M5 to array $prio
035 goto label tri
036 M4:
037 append Chasseur M4 to array $prio
038 append Chasseur Léger M5 to array $prio
039 append Amas Khaak M3 to array $prio
040 append Chasseur Lourd M3 to array $prio
041 append Destroyer Lourd M1 to array $prio
042 append Croiseur M6 to array $prio
043 append Destroyer M2 to array $prio
044 goto label tri
045 M5:
046 append Chasseur Léger M5 to array $prio
047 append Chasseur M4 to array $prio
048 append Amas Khaak M3 to array $prio
049 append Chasseur Lourd M3 to array $prio
050 append Destroyer Lourd M1 to array $prio
051 append Destroyer M2 to array $prio
052 append Croiseur M6 to array $prio
053 tri:
054 $prioligne = 0
055 $cible = array alloc: size=$taille
056 while $prioligne < 7
057 $classe = $prio[$prioligne]
058 $ligne = 0
059 while $taille > $ligne
060 $tryship = $pos[$ligne]
061 if $tryship -> is of class $classe
062 append $tryship to array $cible
063 end
064 inc $ligne =
065 @ = wait 10 ms
066 end
067 inc $prioligne =
068 @ = wait 10 ms
069 end
070 * Scripter par Flo2K
071 write to player logbook $cible
072 return $cible
Votre avis sur le classement des priorités cible parce que c'est fait à vu de nez.
Syndrome du scripteur: Maladie qui fait son apparition aprés avoir taper pendant plusieurs heures des lignes de code. Les symptomes sont une fatique oculaire, des douleurs dans les doigts et une incapacité maladive à trouver se qui cloche dans les lignes de code que l'on vient de passer des heures à taper.
-
- Posts: 2351
- Joined: Sun, 28. Mar 04, 15:56
Quand tu dis " ca ne marche pas", oublie pas de nous indiquer EXACTEMENT ce que sort le script, parceque sinon c'est dur a decripter.
N'oublie pas non plus les arguments, y'a rien de pire que de defragmenter des fragments de code inconnus.
Mis à part la méthode de presentation : ici il me semble que tu demande dans ta recherche de vaisseau tout ceux qui ont comme reference [THIS].
Remplace le par null et reessaye, c'etait peut etre ca qui coinçait.
Bon scripting, mais fait gaffe aux overdose, ca gache le plaisir !
N'oublie pas non plus les arguments, y'a rien de pire que de defragmenter des fragments de code inconnus.
Mis à part la méthode de presentation :
Code: Select all
refobj=[THIS]
Remplace le par null et reessaye, c'etait peut etre ca qui coinçait.
Bon scripting, mais fait gaffe aux overdose, ca gache le plaisir !
-
- Posts: 77
- Joined: Fri, 21. May 04, 20:01
Le probleme c'est justement qu'il y a rien qui sort dans le log book quand je dis rien c'est rien ni array, ni 0 ou null. Un detail pour le tester je l'ai lancé sur vaisseau IA car j'utilise une sauvegarde à part pour faire les test des fois que sa plante méchament et j'ai peu de vaisseaux sur cette sauvegarde. Pour le Rejobj, c'est l'objet qui sert de point de départ à la recherche (touve les vaisseaux dans un cercle de 20000 au tour du vaisseau), tout du moins c'est ce que j'en ai compris.
A propos des flags, je viens commancer à lire un manuel sur le php et j'ai remarqué que les commandes ressemblent beaucoup à celle des script x². Pour "additionner" des flags vous utiliser "l", alors que dans ce que j'ai lu "l" est un "OU" et c'est "&" le "ET". Si l'analogie est correcte, ça doit pas marcher des masses l'addition de flags?
A propos des flags, je viens commancer à lire un manuel sur le php et j'ai remarqué que les commandes ressemblent beaucoup à celle des script x². Pour "additionner" des flags vous utiliser "l", alors que dans ce que j'ai lu "l" est un "OU" et c'est "&" le "ET". Si l'analogie est correcte, ça doit pas marcher des masses l'addition de flags?