L'atelier des scripto-rameurs

Tout sur les scripts et les mods pour X², X³, X³TC et X³AP.

Moderator: Modérateurs pour les forum Français

User avatar
Bléral
Posts: 697
Joined: Wed, 31. Mar 04, 00:37
x2

Post by Bléral »

une fois une boucle a la con m'a couté un format C:, depuis je fais mega super gaffe ...
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...
L'hypertrophie de louveteau se palpe.
Tiens, mais ne serait-ce pas une fonction de Recherche ?
User avatar
KAHR-SIDIUS
Posts: 501
Joined: Fri, 2. Apr 04, 18:59
x3tc

Post by KAHR-SIDIUS »

Bléral wrote:
une fois une boucle a la con m'a couté un format C:, depuis je fais mega super gaffe ...
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...
et tu t'en sert comment........

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....
@+
KAHR-SIDIUS

Salutations

_________________
Utilisez la fonction de Recherche....
User avatar
Bléral
Posts: 697
Joined: Wed, 31. Mar 04, 00:37
x2

Post by Bléral »

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

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
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é :roll:


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 ?
Flo2K
Posts: 77
Joined: Fri, 21. May 04, 20:01
x2

Post by Flo2K »

Si vous avez les vaisseaux identifiés dans votre script, il suffit de demander s'ils sont posés avec "is landed" ou "is docked". S'il ont reçu l'ordre d'atterir sur X et qu'il soit posés, il y a de grandes chances qu'ils soient posés sur X.
User avatar
Bléral
Posts: 697
Joined: Wed, 31. Mar 04, 00:37
x2

Post by Bléral »

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 ?
Flo2K
Posts: 77
Joined: Fri, 21. May 04, 20:01
x2

Post by Flo2K »

Si "multiple" existe ce ne doit pas etre pour rien.
Si tu utilise les deux tu devrait avoir tous les vaisseaux du secteur classer par ordre de distance croissant. Si l'ordre des vaisseaux n'a pas d'importance, utilise "multiple" et "maxdist".
Maxnum c'est la taille max du tableau, enfin je crois.
User avatar
Bléral
Posts: 697
Joined: Wed, 31. Mar 04, 00:37
x2

Post by Bléral »

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.

:roll: 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 :D

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 :evil:

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
je tâtonne, alors j'ai essayé aussi bien "call script" que "interrupt with script", mais ça m'a l'air kif-kif...

:P bref, ça m'étonnerait que vous puissiez m'aider vu le flou de ce post, mais tant pis...
L'hypertrophie de louveteau se palpe.
Tiens, mais ne serait-ce pas une fonction de Recherche ?
Flo2K
Posts: 77
Joined: Fri, 21. May 04, 20:01
x2

Post by Flo2K »

mais si je donne au leader l'une des nouvelles commandes
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).

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).
PrizzZ
Posts: 2351
Joined: Sun, 28. Mar 04, 15:56
x3tc

Post by PrizzZ »

Fait gaffe aussi a l'assomage de commande : dans le genre un script qui repete trop souvent a un vaisseau d'attaquer, eu final, le vaisseau ne fait rien. Verifie donc bien que chaque ordre n'est donné qu'une seule fois.
User avatar
Bléral
Posts: 697
Joined: Wed, 31. Mar 04, 00:37
x2

Post by Bléral »

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... :o mais je trouve quand même ça bizarre et franchement contraignant :evil: 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 :evil: mais j'insiste!
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 ?
Flo2K
Posts: 77
Joined: Fri, 21. May 04, 20:01
x2

Post by Flo2K »

Ca parait logique de faire tourner le script sur un des vaisseaux qui commande les autres ou alors chacun le sien et ils communiques entre eux.
User avatar
KAHR-SIDIUS
Posts: 501
Joined: Fri, 2. Apr 04, 18:59
x3tc

Post by KAHR-SIDIUS »

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... :o mais je trouve quand même ça bizarre et franchement contraignant :evil: 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!
Tu as 2 solutions,

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 ...
KAHR-SIDIUS

Salutations

_________________
Utilisez la fonction de Recherche....
User avatar
Bléral
Posts: 697
Joined: Wed, 31. Mar 04, 00:37
x2

Post by Bléral »

celui ci bloque ta boucle jusqu'a la fin de son ordre
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!!
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 :roll: )
L'hypertrophie de louveteau se palpe.
Tiens, mais ne serait-ce pas une fonction de Recherche ?
User avatar
KAHR-SIDIUS
Posts: 501
Joined: Fri, 2. Apr 04, 18:59
x3tc

Post by KAHR-SIDIUS »

J'ai plus trop la commande dans la tete mais elle dans ce style

Start Task [un numero] with script [......] and priority 0 arg1 ..2..3..4.

cela permet de mettre un ordre dans la liste des taches d'un vaisseau...


essaye

@+
KAHR-SIDIUS

Salutations

_________________
Utilisez la fonction de Recherche....
Flo2K
Posts: 77
Joined: Fri, 21. May 04, 20:01
x2

Post by Flo2K »

Et lancer les script avec des prio différente ça ne permet pas de les faire se superposer?
User avatar
KAHR-SIDIUS
Posts: 501
Joined: Fri, 2. Apr 04, 18:59
x3tc

Post by KAHR-SIDIUS »

Flo2K wrote:Et lancer les script avec des prio différente ça ne permet pas de les faire se superposer?
@ voir


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
KAHR-SIDIUS

Salutations

_________________
Utilisez la fonction de Recherche....
Flo2K
Posts: 77
Joined: Fri, 21. May 04, 20:01
x2

Post by Flo2K »

A mon avis seulement pour les recherches (les tours laser idem) sinon on ne pourrait pas les cible avec la meme priorité que les vaisseaux. Il y a peu de chance que ça aille plus loin enfin on ne sait jamais...

Attention une mine auto-directrice!!!!
Flo2K
Posts: 77
Joined: Fri, 21. May 04, 20:01
x2

Post by Flo2K »

Un petit coup de main serait le bien venu.

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
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.
PrizzZ
Posts: 2351
Joined: Sun, 28. Mar 04, 15:56
x3tc

Post by PrizzZ »

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 :

Code: Select all

refobj=[THIS]
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 !
Flo2K
Posts: 77
Joined: Fri, 21. May 04, 20:01
x2

Post by Flo2K »

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?

Return to “Script et Modding pour la Trilogie X”