[recherche] script de remise en place :)

Répondre
Partager Rechercher
bonjour a vous tous.

voici ma question :
j'ai un véhicule (un dirigeable a pédale , oui oui ) que je laisse a disposition chez moi.
les visiteurs peuvent l'utiliser sans soucis mais j'aimerais que, une fois qu'ils se lèvent , le dirigeable revienne directement à des coordonnées que j'aurais déterminées.

Est - ce possible, et comment ??

mille mercis à tous en attendant
__________________
On est pas responsable de la tête que l'on a (sauf sur SL) , mais on est responsable de la tête que l'on fait
http://stats.slbuzz.com/philippe-shilova.gif
Il faut d'abord qu'il soit modify bien sur. Sans ça tu oublis.

Ensuite, le plus simple pour résoudre ce genre de problème, si ton dirigeable est copy, c'est de détruire celui qui s'est déplacé et de rezzer un nouveau au départ, à partir d'un rezeur (1 prim invisible).

J'ai essayé diverses solutions, et les autres posent quelques problèmes de calcul si l'objet est passé sur un sim adjacente, ou de passer au travers des montagnes. Et j'ai toujours fini avec cette solution un peu baston certes et qui coute une prim mais d'une fiabilité absolue et pas prise de tête.

Dernière modification par Elenia B. ; 10/04/2012 à 18h07.
Pour revenir au point de départ , il faut que tu repères à un moment du script quelle est la position initiale .
Cela peut être lors de l évènement on_rez , ou peut être faudra t il repérer dans le script qui déplace ton véhicule le moment où il commence à se déplacer .
Tu sauvegardes à ce moment là la position par llGetPos() .

Si le véhicule est cantonné uniquement à des déplacements dans la même sim , c est assez simple .
Tu dois d abord repérer dans le script quand il n y a plus personne sur ton véhicule .
Si ton véhicule n accepte qu une seule personne , cela va être dans l évènement changed avec le status CHANGED_LINK de changé .
Regarde par exemple llUnsit, il y a deux bouts de code qui détectent qui est assis avant d appeler la fonction llunsit
Sinon , si il y a plusieurs sièges , c est un peu plus compliqué , puisqu'il faut savoir que chaque siège de ton véhicule a reçu l évènement .

Tu dois désactiver les physiques temporairement , peut être même mettre le véhicule phantom grace à llSetSatus
Puis tu fais appel à la nouvelle fonction llSetRegionPosavec la position que tu as sauvegardée initialement .
Après être arrivé à bon port , ton véhicule remet ses statuts physiques/non-physiques phantom/nonphantom comme à l état initial


Auparavant , il fallait calculer le chemin à destination . En effet une prim ne pouvait bouger que de 10 mètres maximum , et on répétait plusieurs déplacements . Cela causait comme soucis que les prims restaient bloquées aux bordures de parcelles quand elles n avaient pas le droit d y entrer , même si ce n est que pour la traverser . llSetregionPos va t enlever cette épine du pied .

Si en revanche ton véhicule peut se déplacer sur les sims voisines , c est à mon avis, beaucoup plus compliqué . En effet tu ne peux pas appeler llSetregionPos pour changer de sim .
Pour des déplacements cross-sims, on pourrait éventuellement se faciliter la tache avec llSetKeyFramedMotion , puisque les déplacements de cette fonction se font en position relative e non absolue lorsque ton véhicule doit se déplacer d une sim à une autre .
Mais tu vas rencontrer les mêmes problèmes de droits de passages des objets sur une parcelle qui ne t appartient pas .
Il faudrait donc à chaque fois connaitre le point d entrée et de sortie de chaque sim par lesquels ton véhicule a l autorisation de passer ; te rapprocher de ceux ci en faisant un llsetregionpos ; puis faire un déplacement en relatif vers la sim adjacente avec llsetkeyframemotion . Puis une fois que le cross sim ait été fait , refaire un llsetregionpos pour se déplacer à ta base initiale.

Pour détecter les points d entrée et de sortie des deux sims cela ne va pas être facile . Peut être en checkant sur toute la bordure des deux sims adjacentes ...
Pour les points qui appartiennent à la même sim tu peux utiliser
llGetParcelFlags pour vérifier les droits à un point donné . Mais cela risque de te prendre plus que 3 lignes de codes . Et dans ce cas , là , Elena a probablement raison qu il serait moins prise de tête à dérezzer ton véhicule et à le rerézzer


Enfin , si ton véhicule est "auto-piloté" , un peu comme ces dirigeables ou ballons qui font le parcours de la sim , alors il existe dans le script le chemin du véhicule . Dans ce cas , il suffit de passer par les mêmes points dans le chemin inverse , un peu comme le fil d ariane dans le labyrinthe du minotaure.
Sympa cette nouvelle fonction llSetRegionPos. Je ne l'avais pas vue.

Ces derniers temps (mois, années...), on a droit à pas mal de fonctions qui, sans permettre de faire ce qu'on ne pouvait faire avant, nous simplifient tout de même considérablement la vie : fonctions llSetLinkPrimitiveParamsFast, constantes PRIM_POS_LOCAL et PRIM_ROT_LOCAL, llSetRegionPos...


Cela dit, les désagréments étaient souvent dus à des restrictions ajoutées par LL, (pour des raisons qu'on peut plus ou moins supputer) :
le llSetLinkPrimitiveParams avec un délai ajouté insupportable, finalement rendu obsolète par llSetLinkPrimitiveParamsFast, identique mais sans délai.
le llSetPos avec une limite de déplacement de 10m (!!!) , llSetRegionPos faisant la même chose, mais sans cette limite souvent très handicapante.

On imagine que ces restrictions étaient là pour limiter les abus supposés, et limiter la charge du serveur.
Finalement, elles étaient toutes facilement contournées, ce que chez LL on aurait dû prévoir. Et, effet pervers, contourner le bridage de ces fonctions (utilisation de 200 scripts là ou 1 seul peut suffire, dans le cas de resizer, utilisation d'astuces telles que la warppos pour les déplacements de prims à grande distance, et j'en passe) entraînait bien plus de désagréments que ceux qu'on voulait justement éviter en bridant ces fonctions.

On peut voir le côté négatif, en disant que chez LL ils étaient stupides de penser que ces barrières ne seraient pas contournées.
Je préfère voir le côté positif, en me disant que tout le monde peut se tromper, et il n'y a que les imbéciles qui ne changent pas d'avis.
Et je me réjouis de voir que, constatant que les restrictions qu'ils avaient introduites étaient allégrement contournées, leur choix est pragmatique et de bon sens, à savoir tout simplement supprimer ces restrictions, plutôt que d'adopter une attitude qu'on pourrait qualifier de répressive, qui serait d'essayer de lutter contre ces contournements.
/me se frappe le front !!!

Mais je suis en train d y penser en relisant les specs de la llsetregionpos ..
Sa portée n est pas de 0 à 255 mais de -10 à 265 .. donc elle pourrait suffire à faire du cross sim ..
Il faudrait alors lancer un 1er llsetregionpos , puis catcher par changed & CHANGED_REGION , récupérer la position dans la sim 2 ( c est probablement nécessaire pour savoir comment est orientée la sim ) , puis refaire un autre llsetregionpos .

Je n ai pas encore testé le cross sim avec cette fonction .. Mais si je comprends bien , on peut , par exemple sur le continent , se déplacer de sim en sim à vitesse grand V. En tout cas pour les objets .

Si on est assis sur l objet , cela risque peut être de ralentir l ensemble à cause du chargement lourd des avatars . Mais peut être qu en se restreignant aux objets , on peut téléporter par sauts successifs un objet simplement en trouvant dans la bordure des points relais

Woo .. cela ouvre des perspectives intéressantes , en tout cas pour le continent .
Imaginez votre maison dans une sim que vous devez déménager dans un autre terrain sur une autre sim du continent, vous n aurez plus besoin de dérezzer , puis de rerezzer , mais simplement à trouver les points relais de sim en sim et à déplacer/téléporter votre maison

Faut absolument que je teste cela ^^
Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés