EnglishGermanFrenchRussianItalianSpanish
Log inRegister
 
L'atelier des scripto-rameurs
Post new topic Reply to topic Goto page 1, 2, 3 ... 10, 11, 12  Next
View previous topic :: View next topic
Author Message
Bléral





Joined: 31 Mar 2004
Posts: 697 on topic
Location: Nantes
Thank you for registering your game
PostPosted: Tue, 7. Sep 04, 15:34    Post subject: L'atelier des scripto-rameurs Reply with quote Print

Comme son nom l'indique vaguement, je propose d'utiliser ce topic pour les gens qui ont du mal avec l'éditeur de scripts et qui rament un peu avec des scripts pas trop compliqués. A moins que je sois le seul à en chier Rolling Eyes ?

Et pour commencer la fête, je chope des migraines avec un script devant permettre le réapprovisionnement automatisé d'escadre -en tous cas avec la première partie de celui-ci, càd la plus simple: en résumé, trouve la station, vas-y en utilisant éventuellement le jumpdrive, reforme l'escadre et va t'amarrer. J'ai quasiment recopié un autre script que j'avais bricolé il y a quelques jours, et qui fonctionne très bien; j'y ai juste apporté quelques petites améliorations mineures, pour assurer que l'escadre ne se sépare pas (ils sautent tous ou pas du tout, le leader attend ses ailiers une fois dans le bon secteur) et pour éviter que l'escadre ne poursuive pendant trois jours un vaisseau porteur sans arriver à le rattraper.

Voilà donc la première partie de ce script, celle qui était censée ne poser aucun problème:

Code:
Description
rearmer escadre


Arguments
1: stationcible , Var/Station/Carrier to dock at , 'destination'
2: quantite , Var/Number , 'quantite'
3: matos , Var/Ware , 'ware'


Source Text


001   $testage = 1
002   
003   * 1- identifier la station et s y amarrer
004   
005   if [THIS] -> is docked
006    if [DOCKEDAT] == $destination
007     goto label DebutChargt
008    else
009 @   = [THIS] -> call script '!move.undock' :
010    end
011   end
012   
013   Restart:
014   while not [THIS] -> is in same sector as $destination
015   
016   * Si la station est eloignee, regrouper l escadre pour le saut
017    skip if not $testage == 1
018     write to player logbook 'Calcul de la trajectoire...'
019   
020    $SecteurDestination = $destination -> get sector
021    $Nombresauts = get jumps from sector [SECTOR] to sector $SecteurDestination
022    if $Nombresauts > 1
023 @   $EscadreJumpOK = [THIS] -> call script 'Escadre.prepare.for.jump' :  Secteur de
            destination=$SecteurDestination
024     if $EscadreJumpOK
025     
026      skip if not $testage == 1
027       write to player logbook 'Jump Device charging...'
028 @    = wait randomly from 4000 to 8000 ms
029 @    $PortailDest = [THIS] -> call script 'baseperso.trouver.portail' : 
             destination=$destination
030 @    = [THIS] -> call script '!move.jump' :  gate or
             sector=$PortailDest  followers should jump too=[TRUE]
031     end
032    end
033   
034   * Si le saut est impossible ou la station proche, y aller a pattes
035 @  = [THIS] -> fly to sector $SecteurDestination
036   end
037   
038   if [THIS] -> is in same sector as $destination
039   
040    skip if not $testage == 1
041     write to player logbook 'On est a cote, on y va!'
042    skip if not $destination -> is of class Vaisseau Porteur
043     $destination -> interrupt with script 'baseperso.attendre.arrimage'
           and prio 50: arg1=[THIS] arg2=null arg3=null arg4=null
044   
045 @  = [THIS] -> call script 'Escadre.attend.formation' :
046 @  = [THIS] -> fly to station $destination
047   end
048   
049   skip if not $testage == 1
050    write to player logbook 'On est arrives.'
051   


c'est un peu long, désolé, mais ça me paraît assez explicite.
J'ai enlevé ici les vérifications classiques "is docking allowed"/ "is docking possible" (des fois que), mais ça marchait pas non plus avec. La variable "$testage" et les couples de lignes qui y font référence sont juste là pour m'aider à suivre où on en est, et là aussi j'ai essayé de les enlever à tout hasard, ça ne résout évidemment pas le pb.
Les autres scripts auxquels je fais appel ('Escadre.prepare.for.jump', 'baseperso.attendre.arrimage' , 'baseperso.trouver.portail') sont très courts, ont été abondamment testés, et je suis à 99% sûr qu'ils ne posent pas de pb...
Enfin, j'appelle le script depuis les commandes de "THIS" (le leader) via une commande personnalisée, qui fonctionne très bien si je l'utilise pour tester d'autres scripts.

DONC, voilà où ça cloche: où que soit $destination (station ou vaisseau cible), dans le même secteur que THIS ou à perpète, THIS se met en route vers Kingdom's End, l'origine de la carte. Il n'utilise pas son moteur de saut pour aller jusque là-bas (ce qui est logique, si on veut), mais m'envoie toujours les messages de vérifications que j'ai placés.

C'est d'autant plus bizarre que, si vous regardez le script, il ne devrait pas en passer par là s'il est dans le même secteur que $destination (il devrait aller directement à la ligne 038 pour s'amarrer) -or même dans ce cas, il se barre vers Kingdom's End et m'envoie "calcul de la trajectoire...". Il prend donc tout le "while" de la ligne 14 à la ligne 38, ignorant apparemment la condition "while not [THIS] -> is in same sector as $destination" (au lieu d'aller directement après cette boucle à "if this in the same sector...").

Ca suggère donc, si mon cerveau n'est pas complètement HS, que le bug est dès le début du script, mais franchement je vois pas ce qui cloche...

Y'a pas grand monde sur le forum ces temps-ci (tout le monde n'est pas en attente de contrat, je sais!), mais par pitié si quelqu'un a une suggestion, allez-y, parce que moi je sèche méchamment...


_________________
L'hypertrophie de louveteau se palpe.
Tiens, mais ne serait-ce pas une fonction de Recherche ?
Back to top
View user's profile Send private message
PrizzZ
Moderator (Français)
Moderator (Français)

MEDALMEDAL

Joined: 28 Mar 2004
Posts: 2349 on topic
Location: Bala Gi's Joy
Thank you for registering your game
PostPosted: Wed, 8. Sep 04, 15:26    Post subject: Reply with quote Print

Bon rapidos une petite faute trouvée :
Code:
Arguments
1: stationcible , Var/Station/Carrier to dock at , 'destination'
Code:
if [DOCKEDAT] == $destination
et puis tous les $destination de la suite :
l'erreur est la suivante : dans ton argument, la variable s'appelle "station cible", et destination n'est que le nom qui s'affichera dans l'ecran de demande ou lors de l'appelle de ce script ... bref, $destination ne contient rien, essaye en remplacant dans les arguments
Code:
Arguments
1: stationcible , Var/Station/Carrier to dock at , 'destination'
par
Code:
Arguments
1: destination , Var/Station/Carrier to dock at , 'destination'


Si c'est pas ca, je reessayerai avec plus de temps et d'attention un jour ou j'aurai du temps ( là y DM en attente ... Very Happy )
Bonne chance Bléral !

Back to top
View user's profile Send private message Send e-mail
Bléral





Joined: 31 Mar 2004
Posts: 697 on topic
Location: Nantes
Thank you for registering your game
PostPosted: Wed, 8. Sep 04, 19:10    Post subject: Reply with quote Print

Mais quel abruti... ça devait être ça, bien sûr, je me suis emmêlé les pinceaux! Entretemps vu que je trouvais pas où était le problème, j'ai tout réécrit proprement, et il marche très bien jusqu'au bout - mais comme ça à l'avenir je ferais un peu plus gaffe à mes arguments! Merci RePrizzZ...


_________________
L'hypertrophie de louveteau se palpe.
Tiens, mais ne serait-ce pas une fonction de Recherche ?
Back to top
View user's profile Send private message
PrizzZ
Moderator (Français)
Moderator (Français)

MEDALMEDAL

Joined: 28 Mar 2004
Posts: 2349 on topic
Location: Bala Gi's Joy
Thank you for registering your game
PostPosted: Wed, 8. Sep 04, 20:07    Post subject: Reply with quote Print

Pas de problème, hesite pas si t'en a d'autre du genre ... et puis entre Nantais faut s'entraider Very Happy !!! ( Si vous êtes pas Nantais ca marche aussi ... )

Back to top
View user's profile Send private message Send e-mail
Bléral





Joined: 31 Mar 2004
Posts: 697 on topic
Location: Nantes
Thank you for registering your game
PostPosted: Fri, 10. Sep 04, 20:55    Post subject: Reply with quote Print

Tu l'auras voulu... J'ai une série de questions basiques, sans doute un peu con-con mais bon:
- le nom d'une variable locale, ça se met bien en tant que "string", et pas une variable? (Par exemple, [THIS]->set local variable: name= nom value= $nom.de.cet.abruti)

- "infinite loop=TRUE", c'est grave docteur? j'ai un script qui est constitué d'un "While 1 ... " sur 160 lignes à peu près, et qui doit être actif en permanence sur chacun des ailiers d'une escadre: j'ai peur que ça soit bourrin, et que ça bouffe des ressources, m'enfin c'est peut-être négligeable?

- les "flags", je pige pas complètement comment on s'en sert...?

- je trouve pas de constante [PLAYER]: pour spécifier la race du joueur, j'imagine qu'il faut pas utiliser [PLAYERSHIP], mais alors quoi? Si je spécifie "ma" race, çàd le nom de mon perso ("Luke Jeusuitonpair", y'a que moi que ça fait rire), ça posera pas de pbs pour être utilisé par un autre joueur?

- ah un dernier pour la route: à quoi sert de commencer une ligne "call script..." par "START"? Je trouve ça dans certains scripts, mais je vois pas la différence...

Rolling Eyes


_________________
L'hypertrophie de louveteau se palpe.
Tiens, mais ne serait-ce pas une fonction de Recherche ?
Back to top
View user's profile Send private message
PrizzZ
Moderator (Français)
Moderator (Français)

MEDALMEDAL

Joined: 28 Mar 2004
Posts: 2349 on topic
Location: Bala Gi's Joy
Thank you for registering your game
PostPosted: Sat, 11. Sep 04, 13:19    Post subject: Reply with quote Print

1. Le nom d'une variable locale est bien un string ... n'est ce pas KAHR-SIDIUS Rolling Eyes ?

2. Les boucles infinies, ca bouffe un peu de ressources, mais il me semble qu'il y a a peu pres dans les 4000 scripts EGOSOFT tournant sur le jeu en standard, donc si tu pousses pas trop ...

3. Flags, connait pas ... Sad

4. La race du joueur est "Player", trouvé dans les constantes "race", sous le nom de ton perso, mais qui prendra directement la valeur Player dans le script, même si tu decides de l'afficher, ce qui fait que ca marchera pour les autres joueurs, même si ils ne s'appelle pas "Luke Jesuitonpair". Pour afficher le nom du joueur, j'utilise PLAYERSHIP -> get pilote name.

5. Le START avant le call script permet de lancer le script en parallèle, c'est a dire que le script continue apres l'appelle du deuxième script sans attendre que celui ci se termine. Très utile ... mais plante de temps en temps ... Very Happy

Back to top
View user's profile Send private message Send e-mail
Bléral





Joined: 31 Mar 2004
Posts: 697 on topic
Location: Nantes
Thank you for registering your game
PostPosted: Sat, 11. Sep 04, 17:37    Post subject: Reply with quote Print

AAAAAAAHHHHHH! Compris, le "START", c'est exactement ce qu'il me fallait...! J'ai passé la moitié de la nuit à essayer de faire marcher un script récalcitrant - j'ai finalement réussi en utilisant ce truc (START $truc->call script 'machin' etc), mais je comprenais pas pourquoi...

Pour les Flags, j'ai ça (traduit de l'allemand, donc approximatif):

A la plupart des fonctions "search" on peut associer des "flags", qui peuvent être une de ces constantes ou une combinaison:

[Find.Enemy]
Cherche un objet aligné "ennemi" envers <refobj>

[Find.Friend]
...

[Find.Neutral]
...

[Find.ExactJumps]
(à tester…!!)


[Find.Multiple]
Avec celui-ci il est possible de trouver plusieurs objets, restitués en tant qu'array ("tableau" dans le SE). Sa taille maximale est définie par <maxnum>

[Find.ForceUsePos]
Précise à la fonction d'utiliser <refpos> comme position de référence, à partir de laquelle considérer le flag [find.nearest]

[Find.Nearest]
Trouve l'objet le plus proche de <refobj> (ou de <refpos> si le flag précédent est employé)

[Find.Random]
un objet au pif

[Find.IllegalWare]
bref

Les Flags peuvent être combinés en ordre binaire, de façon à ce qu'ils soient représentés par un | dans le Script Editeur : par exemple, $flags = [Find.Enemy] | [Find.Multiple]


DONC ça m'a l'air vachement utile, mais j'ai un peu de mal à en saisir l'utilisation exacte... 'fin je vais tester ça pour me clarifier les idées.


_________________
L'hypertrophie de louveteau se palpe.
Tiens, mais ne serait-ce pas une fonction de Recherche ?
Back to top
View user's profile Send private message
PrizzZ
Moderator (Français)
Moderator (Français)

MEDALMEDAL

Joined: 28 Mar 2004
Posts: 2349 on topic
Location: Bala Gi's Joy
Thank you for registering your game
PostPosted: Sat, 11. Sep 04, 20:02    Post subject: Reply with quote Print

Ah d'accord c'est ca les flags ... Very Happy j'en utilise plein ( en particulier le [find.multiple] et je sais même pas comment ca s'appelle !!!

Back to top
View user's profile Send private message Send e-mail
Bléral





Joined: 31 Mar 2004
Posts: 697 on topic
Location: Nantes
Thank you for registering your game
PostPosted: Sat, 11. Sep 04, 20:52    Post subject: Reply with quote Print

euh... ben moi c'est le contraire Rolling Eyes


_________________
L'hypertrophie de louveteau se palpe.
Tiens, mais ne serait-ce pas une fonction de Recherche ?
Back to top
View user's profile Send private message
KAHR-SIDIUS





Joined: 02 Apr 2004
Posts: 501 on topic
Location: Nord de la France
Thank you for registering your game
PostPosted: Sun, 12. Sep 04, 11:52    Post subject: Reply with quote Print

RePrizzZ wrote:
1. Le nom d'une variable locale est bien un string ... n'est ce pas KAHR-SIDIUS Rolling Eyes ?

Very Happy


tout à fait Reprizz,

Et pour info La variable Global sert pour le script lui meme sans faire de disctinction entre les differents vaisseaux qui l'utilise...


Bléral
Désolé de pas t'avoir repondu, j'avait commencé mais c'etait lors du plantage du forum pour poster, et j'ai plus pensé le re-taper ensuite.. D'oh

@+


_________________
KAHR-SIDIUS

Salutations

_________________
Utilisez la fonction de Recherche....
Back to top
View user's profile Send private message
Flo2K





Joined: 21 May 2004
Posts: 77 on topic
Location: LOT (46), France
Thank you for registering your game
PostPosted: Sun, 12. Sep 04, 15:49    Post subject: Reply with quote Print

Je rame avec se script:
Code:
001   $pos = $sta -> get ship array from sector/ship/station
002   $unnbr = 0
003   $denbr = 0
004   write to player logbook $pos
005   un:
006   $denbr = $denbr + 1
007   skip if $denbr <= 15
008    goto label fin
009   $tryship = $pos[$unnbr]
010   if not $tryship == Petit Transporteur TS
011    remove element from array $pos at index $unnbr
012   else
013    $unnbr = $unnbr + 1
014   end
015   goto label un
016   fin:
017   write to player logbook $pos
018   return null


$sta est le seul argument, il designe une station.
Le but du jeu, c'est de garder que les TS appartenant au joueur.
Je viens d'y apsser 4H de suite Headbang Headbang et pas la moindre solution.

Back to top
View user's profile Send private message
PrizzZ
Moderator (Français)
Moderator (Français)

MEDALMEDAL

Joined: 28 Mar 2004
Posts: 2349 on topic
Location: Bala Gi's Joy
Thank you for registering your game
PostPosted: Sun, 12. Sep 04, 19:33    Post subject: Reply with quote Print

En fait ton code est deja assez maladroit, puisque tu ne verifies pas si l'objet $tryship a une chance d'exister : je te conseille plutot une boucle faisant intervenir la taille de la matrice $pos :
Code:
$compteur=0
$size= size of array $pos
while $compteur < $size
 $tryship = $pos[$compteur]
 if $tryship is of class  Petit Transporteur TS 
note bien le "is of class" ...
Code:

  inc $compteur
plus pratique que $compteur = $compteur + 1
Code:

 else
  remove element from array $pos at index $compteur
  dec $size
 end
end


Normalement avec ca tu as la reponse a toute tes questions, sinon envoie nous ce qui est marque dans ton logbook, pour essayer de comprendre.

Back to top
View user's profile Send private message Send e-mail
KAHR-SIDIUS





Joined: 02 Apr 2004
Posts: 501 on topic
Location: Nord de la France
Thank you for registering your game
PostPosted: Sun, 12. Sep 04, 19:48    Post subject: Reply with quote Print

Ouah le rapide Smile


_________________
KAHR-SIDIUS

Salutations

_________________
Utilisez la fonction de Recherche....
Back to top
View user's profile Send private message
Flo2K





Joined: 21 May 2004
Posts: 77 on topic
Location: LOT (46), France
Thank you for registering your game
PostPosted: Sun, 12. Sep 04, 20:07    Post subject: Reply with quote Print

1 C'est du bricolage, je comptais ameliorer l'esthetique plus tard en l'integrant dans son script de destination.
2 T'as pas repondu à tout. Razz
Quote:
Le but du jeu, c'est de garder que les TS appartenant au joueur.

Ta soluce prend en compte les TS de l'IA qui serait docker


Merci pour le "is of class...", je l'avait pas vu.

Back to top
View user's profile Send private message
KAHR-SIDIUS





Joined: 02 Apr 2004
Posts: 501 on topic
Location: Nord de la France
Thank you for registering your game
PostPosted: Sun, 12. Sep 04, 22:02    Post subject: Reply with quote Print

Simple, il faut que tu utilise la commande
Code:
$Race=$TryShip->Get Owner race


Cette commande donne la Race ($Race) du Vaisseau ($TryShip)

enuite

Code:


$Race=$TryShip->Get Owner race

if $Race=[Race_du_joueur]

append $TryShip to $Tableau

end


Je te laisse paramettrer la taille des tableaux, ce code est a adapter au tient, va pas tout te macher Very Happy

$Tableau est à creer comme Tableau de destiantion

avec cela tu pourra identifier tes propre TS parmit ceux que tu as deja enregistrer dans un pemier tableau ou provenant d'une recherche...

@+


_________________
KAHR-SIDIUS

Salutations

_________________
Utilisez la fonction de Recherche....
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic Reply to topic Goto page 1, 2, 3 ... 10, 11, 12  Next
 
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You cannot download files in this forum
Control Panel
Login Data
The time now is Fri, 17. Aug 18, 22:35

All times are GMT + 2 Hours

[ Disclaimer / Impressum ] | [ Privacy Policy / Datenschutz ]

Board Security

Copyright © EGOSOFT 1989-2018
Powered by phpBB © 2001, 2005 phpBB Group
Template created by Avatar & BurnIt!
Debug: page generation = 0.21051 seconds, sql queries = 29