Les Voltigeurs d'URU LIVE
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
Le Deal du moment :
LEGO Icons 10331 – Le martin-pêcheur
Voir le deal
35 €

Se relier à un objet en mouvement ou comment voler

3 participants

Aller en bas

Se relier à un objet en mouvement ou comment voler Empty Se relier à un objet en mouvement ou comment voler

Message  V@-Michel Mar 17 Juil - 20:50

Dans le même ordre d'idée que la liaison d'un avatar à un objet, voici comment suivre un objet en mouvement.


Code:
 
def Suivre(parent='',enfant='moi',age=PtGetAgeName(),etat=True):
    """S'attacher et suivre un objet en mouvement ou l'inverse"""
    if enfant=='moi':
        enf = PtGetLocalAvatar()
    else:
        enf = PtFindSceneobject(enfant,age)
        enf.draw.netForce(1)
        enf.draw.enable(1)
    if parent=='moi':
        par = PtGetLocalAvatar()
    else:
        par = PtFindSceneobject(parent,age)
        par.draw.netForce(1)
        par.draw.enable(1)
    if etat==True:
        centreobj = par.getLocalToWorld()
        enf.physics.netForce(1)
        enf.physics.warp(centreobj)
        if parent != 'moi':
            enf.physics.disable()
        PtAttachObject(enf,par)
    else:
        PtDetachObject(enf,par)
        if enfant == 'moi':
          SurObjet('LinkInPointDefault')
        enf.physics.enable()

Exemple. Je souhaite relier mon avatar à l'un des oiseaux de mon Relto.
Je tape : Suivre('DCSoarBird01','moi','Personal',True)

Et voici ce que ça donne :
Se relier à un objet en mouvement ou comment voler Kiimag60

Et si on se relie sur WedgeRingsMaster2, on tourne avec les pierres Bahro.
Se relier à un objet en mouvement ou comment voler Kiimag61

Sur le nuage des lucioles (BugFlockingEmitTest)
Se relier à un objet en mouvement ou comment voler Kiimag62

Sur un papillon (ButterFlyVertPos11)
Se relier à un objet en mouvement ou comment voler Kiimag63

Mais il est aussi possible de faire l'inverse, c'est-à-dire relier un objet à soi et nous suivre dans nos déplacements. Par exemple, si vous souhaitez avoir les lucioles autour de vous tout en vous déplaçant , tapez :
Suivre('moi','BugFlockingEmitTest','Personal',True)
et vous aurez ceci :
Se relier à un objet en mouvement ou comment voler Kiimag64

Pour vous détacher d'un objet auquel vous êtes relié, tapez la commande en utilisant False au lieu de True. Par exemple, si vous étiez relié à l'oiseau, tapez : Suivre('DCSoarBird01','moi','Personal',False). L'oiseau va retourner dans les airs et votre avatar va aller au point de liaison par défaut ('LinkInPointDefault').

Alors, je vous propose un exercice qui va mettre en pratique tout ce qui concerne les déplacements d'objets.

Etant dans votre Relto ,pouvez-vous faire en sorte que l'Urwin de Negilahn soit à votre taille et vous suive dans vos déplacements en ville privée Question

Réponse :

Spoiler:
V@-Michel
V@-Michel
Admin
Admin

Messages : 1172
Date d'inscription : 13/05/2010
Age : 69
Localisation : Belgique

Revenir en haut Aller en bas

Se relier à un objet en mouvement ou comment voler Empty Re: Se relier à un objet en mouvement ou comment voler

Message  V@-Annabelle Jeu 26 Juil - 2:09

J'adore ce script que j'ai concaténé avec ObjetSur et SurObjet à l'intérieur d'un plus gros script que j'ai nommé Objet.py Very Happy

Je peux me balader sur n'importe quel objet animé de n'importe quel âge!

J'ai cependant déchanté lorsque je me suis aperçue qu'à part moi, personne d'autre ne pouvait en profiter... Y a-t-il un moyen de faire en sorte que la partie "Suivre" soit universelle c-à-d que je puisse me faire voler aussi bien que faire voler n'importe qui d'autre présent dans le même âge que moi?

En espérant que ce ne soit pas très compliqué. J'aimerais bien avoir un script fonctionnel pour samedi le 28 juillet...je sais le délai est très court, désolée Embarassed J'ai fait un test préliminaire ce soir à la Fun House en vue de mon déploiement de samedi prochain.
V@-Annabelle
V@-Annabelle
Modérateur
Modérateur

Messages : 340
Date d'inscription : 14/05/2010
Localisation : Canada

Revenir en haut Aller en bas

Se relier à un objet en mouvement ou comment voler Empty Re: Se relier à un objet en mouvement ou comment voler

Message  V@-Annabelle Jeu 26 Juil - 3:42

Voici des lignes de code qui me semblaient logiques. Ce n'est pas un code universel, il faut avoir loadé bahroFlyers_arch préalablement. Ce n'est qu'un script de test.

Qu'est-ce qui cloche là-dedans?... Si j'exécute le code sur moi-même en entrant mon KI, je suis parfaitement la trajectoire du bahro volant comme le script écrit par Michel. Je dois entrer la ligne de commande suivante: Objet.Bahro01(mon numéro de KI). Si j'exécute le code sur un autre avatar, celui-ci se fige à un endroit précis de la trajectoire du bahro volant. Il y a quelque chose qui cloche dans mon code mais je n'arrive pas à mettre le doigt dessus No



Code:
def Bahro01(enfant=0,etat=True):
    """S'attacher et suivre un objet en mouvement ou l'inverse"""
    enf = PtGetAvatarKeyFromClientID(enfant)
    Senf = enf.getSceneObject()
    Senf.netForce(1)
    par = PtFindSceneobject('B_ArchBody_01','city')
    par.draw.netForce(1)
    par.draw.enable(1)
    if etat==True:
        centreobj = par.getLocalToWorld()
        Senf.physics.netForce(1)
        Senf.physics.warp(centreobj)
        Senf.physics.disable()
        PtAttachObject(Senf, par, 1)
    else:
        PtDetachObject(Senf, par, 1)
        SurObjet('LinkInPointDefault')
        Senf.physics.enable()
V@-Annabelle
V@-Annabelle
Modérateur
Modérateur

Messages : 340
Date d'inscription : 14/05/2010
Localisation : Canada

Revenir en haut Aller en bas

Se relier à un objet en mouvement ou comment voler Empty Re: Se relier à un objet en mouvement ou comment voler

Message  V@-Michel Jeu 26 Juil - 19:08

effectivement cela ne fonctionne pas avec un autre avatar. Je n'avais jamais essayé mais je viens de le faire et, comme toi, l'avatar reste à l'endroit où se trouvait le Bahro au moment de sa liaison avec l'avatar. Je cherche la raison...

Ton code est correct.

Juste un truc : n'emploie pas SurObjet('LinkInPointDefault'), car cela ne fonctionne qu'avec ton avatar et pas un autre il faut remplacer ces lignes par :

Code:
 
else:
        PtDetachObject(Senf, par)
        Robj = PtFindSceneobject ('LinkInPointDefault',PtGetAgeName())
        centreobj = Robj.getLocalToWorld()
        Senf.physics.warp(centreobj)
        Senf.physics.enable(1)

Dès que je trouve la solution je te le fais savoir.
V@-Michel
V@-Michel
Admin
Admin

Messages : 1172
Date d'inscription : 13/05/2010
Age : 69
Localisation : Belgique

Revenir en haut Aller en bas

Se relier à un objet en mouvement ou comment voler Empty Re: Se relier à un objet en mouvement ou comment voler

Message  V@-Annabelle Jeu 26 Juil - 23:22

Merci pour la modif Michel je vais l'incorporer à mon script.

Il fonctionne mon script alors je suis contente que ma logique fonctionne cyclops .

Il s'agit d'un problème de version du plclient utilisée.

Je vais faire des tests avec encore un nouveau client tout beau tout chaud et si c'est concluant je te l'enverrai pour que tu le distribues.

Boq qui l'a compile m'a donne son accord sur la distribution. Par contre, le mappage des lettres sera complètement à refaire à chaque fois je présume... pale

oh attends... je peux joindre un fichier .zip ok je teste et si ça fonctionne je mettrai le lien pour obtenir le fichier zip qui contient l'exécutable.
V@-Annabelle
V@-Annabelle
Modérateur
Modérateur

Messages : 340
Date d'inscription : 14/05/2010
Localisation : Canada

Revenir en haut Aller en bas

Se relier à un objet en mouvement ou comment voler Empty Re: Se relier à un objet en mouvement ou comment voler

Message  V@-Annabelle Ven 27 Juil - 17:25

GRRRRRRRRRRRRRR

Je suis fâchée! Rien ne va plus... J'ai perdu ma version de plClient pour la Fun House. Je reste qu'avec ma vieille version de plClient qui ne me permet pas grand chose!

En espérant qu'au courant de la journée je récupère une version fonctionnelle sinon demain ce sera plate!!!
V@-Annabelle
V@-Annabelle
Modérateur
Modérateur

Messages : 340
Date d'inscription : 14/05/2010
Localisation : Canada

Revenir en haut Aller en bas

Se relier à un objet en mouvement ou comment voler Empty Re: Se relier à un objet en mouvement ou comment voler

Message  V@-Michel Ven 27 Juil - 17:56

Tu as perdu tes fichiers .py personnels ou bien le dossier de la FunHouse qui comporte les fichiers py?
V@-Michel
V@-Michel
Admin
Admin

Messages : 1172
Date d'inscription : 13/05/2010
Age : 69
Localisation : Belgique

Revenir en haut Aller en bas

Se relier à un objet en mouvement ou comment voler Empty Re: Se relier à un objet en mouvement ou comment voler

Message  V@-Annabelle Ven 27 Juil - 20:41

Non seulement que j'ai dû repartir à zéro avec un nouveau plClient pour la Fun House.

Boq m'a souligné que je pouvais continuer à utiliser mon ancien plClient (je le préfère) pour mes besoins persos mais que je ne pouvais pas l'utiliser pour produire des effets sur quiconque. Ça pourrait causer des tords.

alors j'ai 2 plClients:

l'ancien qui me rend au Relto en 3-4 secs que j'utilise pour mes tests persos

le nouveau pour faire des démos, évènements, tests sur mes cobayes (mes avatars) <-- celui-là était brisé à cause d'une copie de scripts "système" en provenance de l'ancien plClient...c'est vraiment 2 trucs incompatibles!!!

Ceci dit...les scripts persos ne sont pas affectés par une copie entre les 2 versions, seulement les scripts "système".

Je n'ai perdu aucun script, seulement certains scripts ne sont pas utilisables avec mon ancien plClient car il manque des fonctionnalités dedans. Je comprends pas pourquoi c'est ainsi mais je crois que la version pour la Fun House à des trucs faits sur mesure pour "pousser" des scripts vers les clients externes plus aisément et sans risque.

Par exemple: Objet.Bahro01() fonctionne sur les 2 plClients cependant...

sur l'ancien si je suis avec Sophie (interne) et Annabelle (externe), seule Sophie aura les effets

sur le nouveau, les deux profiteront des effets.
V@-Annabelle
V@-Annabelle
Modérateur
Modérateur

Messages : 340
Date d'inscription : 14/05/2010
Localisation : Canada

Revenir en haut Aller en bas

Se relier à un objet en mouvement ou comment voler Empty Re: Se relier à un objet en mouvement ou comment voler

Message  V@-Michel Sam 28 Juil - 17:52

je remarque que dans ta commande PtAttachObject(Senf, par, 1) tu utilises 3 paramètres au lieu de 2 comme indiqué dans plasma.py. Pourquoi le chiffre 1 ? Normalement c'est juste PtAttachObject(Senf, par). A moins que tu possèdes un autre Plasma.py ?

D'autre part, j'essaye avec le PlClient que tu m'as envoyé pour la Fun House mais c'est pareil : l'avatar que tu envoies sur le Bahro reste immobile dans le ciel sauf si c'est soi-même
V@-Michel
V@-Michel
Admin
Admin

Messages : 1172
Date d'inscription : 13/05/2010
Age : 69
Localisation : Belgique

Revenir en haut Aller en bas

Se relier à un objet en mouvement ou comment voler Empty Re: Se relier à un objet en mouvement ou comment voler

Message  V@-Annabelle Dim 29 Juil - 19:39

Le troisième paramètre est le NetForce.

Hier soir, j'ai testé tous mes objets et ils fonctionnent parfaitement. À part toi, il NE faut PAS que personne d'autres utilise un client interne. J'ai fait voler koltch, Mouski & Christine sur des buggaros, des soarbirds du désert, et les ai fait nager sur des raies dans les eaux glaciales de Dereno.

Voici tous mes codes, ce sera assez facile de retrouver de quelle bestiole il s'agit et où elle se trouve. Habituellement je transporte le désert et Teledahn dans tous mes âges. Dans les pods, avoir le désert empêche le bug de caméra du pod car tu te lies très loin.

Code:
def BB(enfant=0,etat=True):
    """S'attacher et suivre un objet en mouvement ou l'inverse"""
    enf = PtGetAvatarKeyFromClientID(enfant)
    Senf = enf.getSceneObject()
    Senf.netForce(1)
    par = PtFindSceneobject('BBHead','Teledahn')
    par.draw.netForce(1)
    par.draw.enable(1)
    if etat==True:
        centreobj = par.getLocalToWorld()
        Senf.physics.netForce(1)
        Senf.physics.warp(centreobj)
        Senf.physics.disable()
        PtAttachObject(Senf, par, 1)
    else:
        PtDetachObject(Senf, par, 1)
        Robj = PtFindSceneobject ('LinkInPointDefault',PtGetAgeName())
        centreobj = Robj.getLocalToWorld()
        Senf.physics.warp(centreobj)
        Senf.physics.enable(1)
       
def BB1(enfant=0,etat=True):
    """S'attacher et suivre un objet en mouvement ou l'inverse"""
    enf = PtGetAvatarKeyFromClientID(enfant)
    Senf = enf.getSceneObject()
    Senf.netForce(1)
    par = PtFindSceneobject('BBHead01','Teledahn')
    par.draw.netForce(1)
    par.draw.enable(1)
    if etat==True:
        centreobj = par.getLocalToWorld()
        Senf.physics.netForce(1)
        Senf.physics.warp(centreobj)
        Senf.physics.disable()
        PtAttachObject(Senf, par, 1)
    else:
        PtDetachObject(Senf, par, 1)
        Robj = PtFindSceneobject ('LinkInPointDefault',PtGetAgeName())
        centreobj = Robj.getLocalToWorld()
        Senf.physics.warp(centreobj)
        Senf.physics.enable(1)
       
def BBS(enfant=0,etat=True):
    """S'attacher et suivre un objet en mouvement ou l'inverse"""
    enf = PtGetAvatarKeyFromClientID(enfant)
    Senf = enf.getSceneObject()
    Senf.netForce(1)
    par = PtFindSceneobject('BBRudder','Teledahn')
    par.draw.netForce(1)
    par.draw.enable(1)
    if etat==True:
        centreobj = par.getLocalToWorld()
        Senf.physics.netForce(1)
        Senf.physics.warp(centreobj)
        Senf.physics.disable()
        PtAttachObject(Senf, par, 1)
    else:
        PtDetachObject(Senf, par, 1)
        Robj = PtFindSceneobject ('LinkInPointDefault',PtGetAgeName())
        centreobj = Robj.getLocalToWorld()
        Senf.physics.warp(centreobj)
        Senf.physics.enable(1)
       
def BB1S(enfant=0,etat=True):
    """S'attacher et suivre un objet en mouvement ou l'inverse"""
    enf = PtGetAvatarKeyFromClientID(enfant)
    Senf = enf.getSceneObject()
    Senf.netForce(1)
    par = PtFindSceneobject('BBRudder01','Teledahn')
    par.draw.netForce(1)
    par.draw.enable(1)
    if etat==True:
        centreobj = par.getLocalToWorld()
        Senf.physics.netForce(1)
        Senf.physics.warp(centreobj)
        Senf.physics.disable()
        PtAttachObject(Senf, par, 1)
    else:
        PtDetachObject(Senf, par, 1)
        Robj = PtFindSceneobject ('LinkInPointDefault',PtGetAgeName())
        centreobj = Robj.getLocalToWorld()
        Senf.physics.warp(centreobj)
        Senf.physics.enable(1)

def BBN(enfant=0,etat=True):
    """S'attacher et suivre un objet en mouvement ou l'inverse"""
    enf = PtGetAvatarKeyFromClientID(enfant)
    Senf = enf.getSceneObject()
    Senf.netForce(1)
    par = PtFindSceneobject('BBRWing03','Teledahn')
    par.draw.netForce(1)
    par.draw.enable(1)
    if etat==True:
        centreobj = par.getLocalToWorld()
        Senf.physics.netForce(1)
        Senf.physics.warp(centreobj)
        Senf.physics.disable()
        PtAttachObject(Senf, par, 1)
    else:
        PtDetachObject(Senf, par, 1)
        Robj = PtFindSceneobject ('LinkInPointDefault',PtGetAgeName())
        centreobj = Robj.getLocalToWorld()
        Senf.physics.warp(centreobj)
        Senf.physics.enable(1)
       
def BB1N(enfant=0,etat=True):
    """S'attacher et suivre un objet en mouvement ou l'inverse"""
    enf = PtGetAvatarKeyFromClientID(enfant)
    Senf = enf.getSceneObject()
    Senf.netForce(1)
    par = PtFindSceneobject('BBRWing06','Teledahn')
    par.draw.netForce(1)
    par.draw.enable(1)
    if etat==True:
        centreobj = par.getLocalToWorld()
        Senf.physics.netForce(1)
        Senf.physics.warp(centreobj)
        Senf.physics.disable()
        PtAttachObject(Senf, par, 1)
    else:
        PtDetachObject(Senf, par, 1)
        Robj = PtFindSceneobject ('LinkInPointDefault',PtGetAgeName())
        centreobj = Robj.getLocalToWorld()
        Senf.physics.warp(centreobj)
        Senf.physics.enable(1)
       
def BBV(enfant=0,etat=True):
    """S'attacher et suivre un objet en mouvement ou l'inverse"""
    enf = PtGetAvatarKeyFromClientID(enfant)
    Senf = enf.getSceneObject()
    Senf.netForce(1)
    par = PtFindSceneobject('BBLWing03','Teledahn')
    par.draw.netForce(1)
    par.draw.enable(1)
    if etat==True:
        centreobj = par.getLocalToWorld()
        Senf.physics.netForce(1)
        Senf.physics.warp(centreobj)
        Senf.physics.disable()
        PtAttachObject(Senf, par, 1)
    else:
        PtDetachObject(Senf, par, 1)
        Robj = PtFindSceneobject ('LinkInPointDefault',PtGetAgeName())
        centreobj = Robj.getLocalToWorld()
        Senf.physics.warp(centreobj)
        Senf.physics.enable(1)
       
def BB1V(enfant=0,etat=True):
    """S'attacher et suivre un objet en mouvement ou l'inverse"""
    enf = PtGetAvatarKeyFromClientID(enfant)
    Senf = enf.getSceneObject()
    Senf.netForce(1)
    par = PtFindSceneobject('BBLWing06','Teledahn')
    par.draw.netForce(1)
    par.draw.enable(1)
    if etat==True:
        centreobj = par.getLocalToWorld()
        Senf.physics.netForce(1)
        Senf.physics.warp(centreobj)
        Senf.physics.disable()
        PtAttachObject(Senf, par, 1)
    else:
        PtDetachObject(Senf, par, 1)
        Robj = PtFindSceneobject ('LinkInPointDefault',PtGetAgeName())
        centreobj = Robj.getLocalToWorld()
        Senf.physics.warp(centreobj)
        Senf.physics.enable(1)
       
def FLB(enfant=0,etat=True):
    """S'attacher et suivre un objet en mouvement ou l'inverse"""
    enf = PtGetAvatarKeyFromClientID(enfant)
    Senf = enf.getSceneObject()
    Senf.netForce(1)
    par = PtFindSceneobject('ShooterB-Master','Teledahn')
    par.draw.netForce(1)
    par.draw.enable(1)
    if etat==True:
        centreobj = par.getLocalToWorld()
        Senf.physics.netForce(1)
        Senf.physics.warp(centreobj)
        Senf.physics.disable()
        PtAttachObject(Senf, par, 1)
    else:
        PtDetachObject(Senf, par, 1)
        Robj = PtFindSceneobject ('LinkInPointDefault',PtGetAgeName())
        centreobj = Robj.getLocalToWorld()
        Senf.physics.warp(centreobj)
        Senf.physics.enable(1)
       
def FLC(enfant=0,etat=True):
    """S'attacher et suivre un objet en mouvement ou l'inverse"""
    enf = PtGetAvatarKeyFromClientID(enfant)
    Senf = enf.getSceneObject()
    Senf.netForce(1)
    par = PtFindSceneobject('ShooterC-Master','Teledahn')
    par.draw.netForce(1)
    par.draw.enable(1)
    if etat==True:
        centreobj = par.getLocalToWorld()
        Senf.physics.netForce(1)
        Senf.physics.warp(centreobj)
        Senf.physics.disable()
        PtAttachObject(Senf, par, 1)
    else:
        PtDetachObject(Senf, par, 1)
        Robj = PtFindSceneobject ('LinkInPointDefault',PtGetAgeName())
        centreobj = Robj.getLocalToWorld()
        Senf.physics.warp(centreobj)
        Senf.physics.enable(1)
       
def FLD(enfant=0,etat=True):
    """S'attacher et suivre un objet en mouvement ou l'inverse"""
    enf = PtGetAvatarKeyFromClientID(enfant)
    Senf = enf.getSceneObject()
    Senf.netForce(1)
    par = PtFindSceneobject('ShooterD-Master','Teledahn')
    par.draw.netForce(1)
    par.draw.enable(1)
    if etat==True:
        centreobj = par.getLocalToWorld()
        Senf.physics.netForce(1)
        Senf.physics.warp(centreobj)
        Senf.physics.disable()
        PtAttachObject(Senf, par, 1)
    else:
        PtDetachObject(Senf, par, 1)
        Robj = PtFindSceneobject ('LinkInPointDefault',PtGetAgeName())
        centreobj = Robj.getLocalToWorld()
        Senf.physics.warp(centreobj)
        Senf.physics.enable(1)
       
def FLN(enfant=0,etat=True):
    """S'attacher et suivre un objet en mouvement ou l'inverse"""
    enf = PtGetAvatarKeyFromClientID(enfant)
    Senf = enf.getSceneObject()
    Senf.netForce(1)
    par = PtFindSceneobject('ShooterD-Master01','Teledahn')
    par.draw.netForce(1)
    par.draw.enable(1)
    if etat==True:
        centreobj = par.getLocalToWorld()
        Senf.physics.netForce(1)
        Senf.physics.warp(centreobj)
        Senf.physics.disable()
        PtAttachObject(Senf, par, 1)
    else:
        PtDetachObject(Senf, par, 1)
        Robj = PtFindSceneobject ('LinkInPointDefault',PtGetAgeName())
        centreobj = Robj.getLocalToWorld()
        Senf.physics.warp(centreobj)
        Senf.physics.enable(1)
       
def FLF(enfant=0,etat=True):
    """S'attacher et suivre un objet en mouvement ou l'inverse"""
    enf = PtGetAvatarKeyFromClientID(enfant)
    Senf = enf.getSceneObject()
    Senf.netForce(1)
    par = PtFindSceneobject('ShooterF-Master','Teledahn')
    par.draw.netForce(1)
    par.draw.enable(1)
    if etat==True:
        centreobj = par.getLocalToWorld()
        Senf.physics.netForce(1)
        Senf.physics.warp(centreobj)
        Senf.physics.disable()
        PtAttachObject(Senf, par, 1)
    else:
        PtDetachObject(Senf, par, 1)
        Robj = PtFindSceneobject ('LinkInPointDefault',PtGetAgeName())
        centreobj = Robj.getLocalToWorld()
        Senf.physics.warp(centreobj)
        Senf.physics.enable(1)
       
def FLH(enfant=0,etat=True):
    """S'attacher et suivre un objet en mouvement ou l'inverse"""
    enf = PtGetAvatarKeyFromClientID(enfant)
    Senf = enf.getSceneObject()
    Senf.netForce(1)
    par = PtFindSceneobject('ShooterH-Master','Teledahn')
    par.draw.netForce(1)
    par.draw.enable(1)
    if etat==True:
        centreobj = par.getLocalToWorld()
        Senf.physics.netForce(1)
        Senf.physics.warp(centreobj)
        Senf.physics.disable()
        PtAttachObject(Senf, par, 1)
    else:
        PtDetachObject(Senf, par, 1)
        Robj = PtFindSceneobject ('LinkInPointDefault',PtGetAgeName())
        centreobj = Robj.getLocalToWorld()
        Senf.physics.warp(centreobj)
        Senf.physics.enable(1)
 

Et ceux-ci aussi:

Code:
def Bird01(enfant=0,etat=True):
    """S'attacher et suivre un objet en mouvement ou l'inverse"""
    enf = PtGetAvatarKeyFromClientID(enfant)
    Senf = enf.getSceneObject()
    Senf.netForce(1)
    par = PtFindSceneobject('DCSoarBird01','Cleft')
    par.draw.netForce(1)
    par.draw.enable(1)
    if etat==True:
        centreobj = par.getLocalToWorld()
        Senf.physics.netForce(1)
        Senf.physics.warp(centreobj)
        Senf.physics.disable()
        PtAttachObject(Senf, par, 1)
    else:
        PtDetachObject(Senf, par, 1)
        Robj = PtFindSceneobject ('LinkInPointDefault',PtGetAgeName())
        centreobj = Robj.getLocalToWorld()
        Senf.physics.warp(centreobj)
        Senf.physics.enable(1) 
       
def Bird03(enfant=0,etat=True):
    """S'attacher et suivre un objet en mouvement ou l'inverse"""
    enf = PtGetAvatarKeyFromClientID(enfant)
    Senf = enf.getSceneObject()
    Senf.netForce(1)
    par = PtFindSceneobject('DCSoarBird03','Cleft')
    par.draw.netForce(1)
    par.draw.enable(1)
    if etat==True:
        centreobj = par.getLocalToWorld()
        Senf.physics.netForce(1)
        Senf.physics.warp(centreobj)
        Senf.physics.disable()
        PtAttachObject(Senf, par, 1)
    else:
        PtDetachObject(Senf, par, 1)
        Robj = PtFindSceneobject ('LinkInPointDefault',PtGetAgeName())
        centreobj = Robj.getLocalToWorld()
        Senf.physics.warp(centreobj)
        Senf.physics.enable(1)
       
def Raie01(enfant=0,etat=True):
    """S'attacher et suivre un objet en mouvement ou l'inverse"""
    enf = PtGetAvatarKeyFromClientID(enfant)
    Senf = enf.getSceneObject()
    Senf.netForce(1)
    par = PtFindSceneobject('C01_Body','Dereno')
    par.draw.netForce(1)
    par.draw.enable(1)
    if etat==True:
        centreobj = par.getLocalToWorld()
        Senf.physics.netForce(1)
        Senf.physics.warp(centreobj)
        Senf.physics.disable()
        PtAttachObject(Senf, par, 1)
    else:
        PtDetachObject(Senf, par, 1)
        Robj = PtFindSceneobject ('LinkInPointDefault',PtGetAgeName())
        centreobj = Robj.getLocalToWorld()
        Senf.physics.warp(centreobj)
        Senf.physics.enable(1)
       
def Raie02(enfant=0,etat=True):
    """S'attacher et suivre un objet en mouvement ou l'inverse"""
    enf = PtGetAvatarKeyFromClientID(enfant)
    Senf = enf.getSceneObject()
    Senf.netForce(1)
    par = PtFindSceneobject('C02_Body','Dereno')
    par.draw.netForce(1)
    par.draw.enable(1)
    if etat==True:
        centreobj = par.getLocalToWorld()
        Senf.physics.netForce(1)
        Senf.physics.warp(centreobj)
        Senf.physics.disable()
        PtAttachObject(Senf, par, 1)
    else:
        PtDetachObject(Senf, par, 1)
        Robj = PtFindSceneobject ('LinkInPointDefault',PtGetAgeName())
        centreobj = Robj.getLocalToWorld()
        Senf.physics.warp(centreobj)
        Senf.physics.enable(1)
       
def KemoA(enfant=0,etat=True):
    """S'attacher et suivre un objet en mouvement ou l'inverse"""
    enf = PtGetAvatarKeyFromClientID(enfant)
    Senf = enf.getSceneObject()
    Senf.netForce(1)
    par = PtFindSceneobject('FishA','Garden')
    par.draw.netForce(1)
    par.draw.enable(1)
    if etat==True:
        centreobj = par.getLocalToWorld()
        Senf.physics.netForce(1)
        Senf.physics.warp(centreobj)
        Senf.physics.disable()
        PtAttachObject(Senf, par, 1)
    else:
        PtDetachObject(Senf, par, 1)
        Robj = PtFindSceneobject ('LinkInPointDefault',PtGetAgeName())
        centreobj = Robj.getLocalToWorld()
        Senf.physics.warp(centreobj)
        Senf.physics.enable(1)
       
def KemoB(enfant=0,etat=True):
    """S'attacher et suivre un objet en mouvement ou l'inverse"""
    enf = PtGetAvatarKeyFromClientID(enfant)
    Senf = enf.getSceneObject()
    Senf.netForce(1)
    par = PtFindSceneobject('FishB','Garden')
    par.draw.netForce(1)
    par.draw.enable(1)
    if etat==True:
        centreobj = par.getLocalToWorld()
        Senf.physics.netForce(1)
        Senf.physics.warp(centreobj)
        Senf.physics.disable()
        PtAttachObject(Senf, par, 1)
    else:
        PtDetachObject(Senf, par, 1)
        Robj = PtFindSceneobject ('LinkInPointDefault',PtGetAgeName())
        centreobj = Robj.getLocalToWorld()
        Senf.physics.warp(centreobj)
        Senf.physics.enable(1)
       
def KemoC(enfant=0,etat=True):
    """S'attacher et suivre un objet en mouvement ou l'inverse"""
    enf = PtGetAvatarKeyFromClientID(enfant)
    Senf = enf.getSceneObject()
    Senf.netForce(1)
    par = PtFindSceneobject('FishC','Garden')
    par.draw.netForce(1)
    par.draw.enable(1)
    if etat==True:
        centreobj = par.getLocalToWorld()
        Senf.physics.netForce(1)
        Senf.physics.warp(centreobj)
        Senf.physics.disable()
        PtAttachObject(Senf, par, 1)
    else:
        PtDetachObject(Senf, par, 1)
        Robj = PtFindSceneobject ('LinkInPointDefault',PtGetAgeName())
        centreobj = Robj.getLocalToWorld()
        Senf.physics.warp(centreobj)
        Senf.physics.enable(1)



Les codes fonctionnent ainsi: je les mets dans mon script: Objet

Objet.BB(3632553) ---> ça envoie Annabelle sur le premier buggaro et elle vole dessus jusqu'à ce que je change le 2e paramètre (Objet.BB(3632553,0)) pour la ramener au point de liaison par défaut.

Si par exemple tu envoies 3 personnes sur le même buggaro, chacun se verra sur le buggaro et verra les 2 autres (s'ils bougent) ailleurs que sur le buggaro. C'est sensas car ça évite qu'en 3e personne tu vois un tas de gens sur le buggaros et en 1re pers pleins d'yeux ou de lunettes devant toi. La position des 2 autres explorateurs prend en compte le délai de "mise en orbite" de chacun par rapport à soi-même.

Code très simple mais résultat grandiose Very Happy
V@-Annabelle
V@-Annabelle
Modérateur
Modérateur

Messages : 340
Date d'inscription : 14/05/2010
Localisation : Canada

Revenir en haut Aller en bas

Se relier à un objet en mouvement ou comment voler Empty Re: Se relier à un objet en mouvement ou comment voler

Message  V@-Michel Lun 30 Juil - 19:48

Avec tous ces animaux en mouvement, je vais réaliser un module complet et t'en ferai part très bientôt Laughing .
J'ai déjà mis le code au point avec deux animaux et donc cela ne devrait plus tarder. Tu pourras même taper directement le nom de l'avatar que tu veux envoyer dans les airs au lieu de son KI. En outre, je fais en sorte qu'il revienne au point de liaison automatiquement après un temps défini ainsi, plus besoin de le faire revenir sur terre avec une autre commande. Plus simple non?
V@-Michel
V@-Michel
Admin
Admin

Messages : 1172
Date d'inscription : 13/05/2010
Age : 69
Localisation : Belgique

Revenir en haut Aller en bas

Se relier à un objet en mouvement ou comment voler Empty Re: Se relier à un objet en mouvement ou comment voler

Message  Lyrositeur Lun 30 Juil - 21:13

J'aurais une petite requête. Lyrobot sera bientôt de retour ; pourriez vous ajouter une d'exception pour Lii pour s'assurer qu'il n'est pas affecté par hos fonctions (par exemple, la téléportation)? Very Happy

De plus, j'Ai tout planifié pour les marqueurs ; je partagerai mon code avec vous une fois qu 'il sera écrit.
Lyrositeur
Lyrositeur
Escaladeur
Escaladeur

Messages : 96
Date d'inscription : 03/07/2012
Age : 28
Localisation : Montréal, Canada

http://www.lyros.net

Revenir en haut Aller en bas

Se relier à un objet en mouvement ou comment voler Empty Re: Se relier à un objet en mouvement ou comment voler

Message  V@-Michel Lun 30 Juil - 21:59

Je pense que cela ne devrait pas poser de problème car pour la liaison d'un avatar avec un objet en mouvement, je n'envisage pas de lancer cette commande sur tous les avatars en même temps mais bien en tapant soit leur nom, soit leur numero de KI, car cela n'aurait de toute façon pas de sens pour l'effet escompté.

J'en profte également pour insister sur le fait que lorsqu'une démo est effectuée par quelqu'un, par exemple Annabelle ce samedi à la Fun House, d'éviter d'utiliser ses propres scripts durant cette démo et surtout pas le rez de prp car cela peut contrarier certains effets voire ralentir le jeu de façon conséquente. Et puis, cela n'est vraiment pas fair-play pour celui qui a passé du temps à préparer cette démo.
Pour ma part, je viens voir l'évènement et si on me le demande j'interviens ponctuellement pour combler un vide, par exemple en cas de plantage du "maître de cérémonie" ou bien pour "libérer" un avatar coincé derrière la porte de la salle de l'oeuf par exemple ou rattraper au vol l'un ou l'autre qui plongerait vers la zone panique ou encore pour le ramener à la FH s'il a rejoint son Relto. Je joue un peu le rôle de "gardien" de la cour des miracles...Laughing

En ce qui concerne les marqueurs, cà c'est vraiment une bonne nouvelle ! Je suis impatient de voir le résultat et je sais que plusieurs d'entre nous seront également heureux de pouvoir l'utiliser afin d'éditer le texte des marqueurs pour le traduire dans une autre langue sans être obligé de tout refaire !
V@-Michel
V@-Michel
Admin
Admin

Messages : 1172
Date d'inscription : 13/05/2010
Age : 69
Localisation : Belgique

Revenir en haut Aller en bas

Se relier à un objet en mouvement ou comment voler Empty Fonction Suivre()

Message  V@-Michel Mer 1 Aoû - 21:22

Comme promis, voici le code de la fonction Suivre() qui intègre plusieurs paramètres afin de relier n'importe quel avatar présent dans votre âge sur un objet en mouvement (ou non) défini dans une liste. L'avatar ainsi relié va suivre l'objet en mouvement durant un certain temps que vous définissez dans le lancement de la fonction puis va revenir au point de liaison par défaut de l'âge à partir duquel il se trouvait au moment de sa liaison avec l'objet.
D'autre part, dans la liste de définition des objets, on indique l'angle que doit prendre l'avatar sur l'objet. En effet, dans certains cas, la position de l'avatar n'est pas dans l'axe de déplacement de l'objet. La valeur de cet angle va de 0 à 180 degrés ou de 0 à -180 degrés.
La valeur 0 maintient l'avatar dans la position par défaut (qui n'est pas toujours idéale).
La valeur 180 lui fait faire 1/2 tour sur lui-même
La valeur 90 lui fait faire 1/4 de tour sue sa gauche
La valeur -90 lui fait faire 1/4 de tour sur sa droite.
Vous pouvez utiliser n'importe quelle valeur de 180 à -180 degrés.

Dans la définition de l'objet, le nom que vous lui mettez (facile à retenir pour vous), doit être en minuscules, mais lors de l'appel de la fonction, vous pouvez utiliser minuscules et majuscules, cela n'a pas d'importance Very Happy

Voyons maintenant la fonction :


Code:

# -*- coding: cp1252 -*-
 
"""Scripts pour suivre un objet en mouvement
Michel Lacoste
-----Aout 2012------"""
 
from Plasma import *
import math
 
def SCOAvatar(nom):
    """Retourne le SceneObject d'un avatar d'apres son nom ou son ID"""
    nom = nom.lower()
    if (nom == 'moi'):
        return PtGetLocalAvatar()
    else:
        return PtGetAvatarKeyFromClientID(SCOJoueur(nom).getPlayerID()).getSceneObject()
 
def Suivre(objet='',Avatar='moi',duree=30):
    """Attacher un avatar sur un objet en mouvement et le suivre durant xx secondes puis atterrir au point par defaut"""
 
#Définition des objets en mouvement
#Toujours définir le nom en minuscules
#placer dans defobjet : ("NomAge,Nomprp,NomObjet,Angledeliaison")
 
    if (objet.lower()) == 'oiseaur1' :
    # oiseau 1 du Relto   
        defobjet = ("Personal,psnlMYSTII,DCSoarBird01,180")
    elif (objet.lower()) == 'oiseaur2' :
    # oiseau 2 du Relto   
        defobjet = ("Personal,psnlMYSTII,DCSoarBird03,180")
    elif (objet.lower()) == 'papillonr' :
    # Papillon du Relto 
        defobjet = ("Personal,psnlMYSTII,ButterflyVertPos11,0")
    elif (objet.lower()) == 'luciolesr' :
    # Lucioles du Relto 
        defobjet = ("Personal,psnlMYSTII,BugFlockingEmitTest,0")       
    elif (objet.lower()) == 'oiseauc1' :
    # oiseau 1 de Cleft   
        defobjet = ("Cleft,Desert,DCSoarBird01,180")
    elif (objet.lower()) == 'oiseauc2' :
    # oiseau 2 de Cleft   
        defobjet = ("Cleft,Desert,DCSoarBird03,180")
    elif (objet.lower()) == 'oiseaut1' :
    # oiseau 1 de Teledahn   
        defobjet = ("Teledahn,tldnHarvest,BBHead,-90")
    elif (objet.lower()) == 'oiseaut2' :
    # oiseau 2 de Teledahn   
        defobjet = ("Teledahn,tldnHarvest,BBHead01,0")
    elif (objet.lower()) == 'shooter1' :
    # Shooter 1 de Teledahn   
        defobjet = ("Teledahn,tldnHarvest,ShooterB-Master,0")
    elif (objet.lower()) == 'shooter2' :
    # Shooter 2 de Teledahn   
        defobjet = ("Teledahn,tldnHarvest,ShooterC-Master,90")
    elif (objet.lower()) == 'shooter3' :
    # Shooter 3 de Teledahn   
        defobjet = ("Teledahn,tldnHarvest,ShooterD-Master,0")
    elif (objet.lower()) == 'shooter4' :
    # Shooter 4 de Teledahn   
        defobjet = ("Teledahn,tldnHarvest,ShooterF-Master,0")
    elif (objet.lower()) == 'shooter5' :
    # Shooter 5 de Teledahn   
        defobjet = ("Teledahn,tldnHarvest,ShooterH-Master,0")
    elif (objet.lower()) == 'raie1' :
    # Raie 1 de Dereno
        defobjet = ("Dereno,DrnoExterior,C01_Body,0")
    elif (objet.lower()) == 'raie2' :
    # Raie 2 de Dereno
        defobjet = ("Dereno,DrnoExterior,C02_Body,0")
    elif (objet.lower()) == 'poissond' :
    # Poisson de Dereno 
        defobjet = ("Dereno,DrnoExterior,FishC06,90")
    elif (objet.lower()) == 'poissong1' :
    # Poisson 1 de Kemo 
        defobjet = ("Garden,kemoGarden,FishA,90")
    elif (objet.lower()) == 'poissong2' :
    # Poisson 2 de Kemo 
        defobjet = ("Garden,kemoGarden,FishB,90")
    elif (objet.lower()) == 'poissong3' :
    # Poisson 3 de Kemo 
        defobjet = ("Garden,kemoGarden,FishC,90")
    elif (objet.lower()) == 'bahro' :
    # Bahro de l'Arche de la Ville   
        defobjet = ("city,bahroFlyers_arch,B_ArchBody_01,0")
    # Ajoutez ici vos propres définitions
   
    animal = defobjet.split(',')
    Age = animal[0]
    Prp = animal[1]
    Objet = animal[2]
    Angle = float(animal[3])
    PtConsoleNet('Nav.PageInNode '+ Prp ,1)
    if Avatar == 'moi':
        Joueur = PtGetLocalAvatar()
    else:
        Joueur = SCOAvatar(Avatar)
    Joueur.netForce(1)
    Joueur.physics.netForce(1)
    Joueur.physics.disable()
    PtSetAlarm(1, Lier(Age,Joueur,Objet,duree,Angle), 1)
   
class Lier:
    def __init__(self,age,joueur,obj,duree,angle):
        self._age = age
        self._joueur = joueur
        self._obj = obj
        self._duree = duree
        self._angle = angle
    def onAlarm (self, param):
        Aobj = PtFindSceneobject(self._obj, self._age)
        Aobj.netForce(1)
        Aobj.draw.enable(1)
        centreobj = Aobj.getLocalToWorld()
        rot = ptMatrix44()
        rot.makeRotateMat(2, -math.pi * self._angle/180)
        self._joueur.physics.warp(centreobj * rot)
        PtAttachObject(self._joueur, Aobj,1)
        PtSetAlarm(self._duree, Delier(self._age, self._joueur, Aobj), 1)
       
class Delier:
    def __init__(self,age,joueur,obj):
        self._age = age
        self._joueur = joueur
        self._obj = obj
    def onAlarm (self, param):
        PtDetachObject(self._joueur,self._obj,1)
        Robj=PtFindSceneobject('LinkInPointDefault',PtGetAgeName())
        centreobj = Robj.getLocalToWorld()
        self._joueur.physics.warp(centreobj)
        self._joueur.physics.enable(1)


Cette fonction fait appel à la fonction SCOAvatar(nom) qui retourne le SceneObjet d'un avatar en tapant soit son nom, soit son numero de KI.
Je l'ai remise au-dessus du module.

La fonction principale est :

Suivre(objet='',Avatar='moi',duree=30):

le premier paramètre est le nom de l'objet à suivre. C'est le nom que vous avez choisi afin que vous ayez facile de le mémoriser.
J'ai déjà placé vingt noms d'objets comme vous pouvez le voir au début de la fonction. Vous pouvez modifier les noms que j'ai mis et, bien entendu, ajouter de nouveaux objets.

Comment définir un nouvel objet ?
A la suite de la liste déjà présente dans la fonction vous rajoutez autant d'objets que vous voulez.
La syntaxe est la suivante (j'ai pris l'exemple du second oiseau du Relto):

Code:
 
    elif (objet.lower()) == 'oiseaur2' :
    # oiseau 2 du Relto
    defobjet = ("Personal,psnlMYSTII,DCSoarBird03,180")

remplacez oiseaur2 par un nom que vous aurez facile à retenir mais obligatoirement en minuscules.
Sur la ligne en-dessous, vous pouvez placer un # commentaire pour vous rappeler de quel objet il s'agit.
Dans la dernière ligne, remplacez dans la parenthère entre guillemets : le nom de l'âge, le nom de la prp où se situe l'objet, le nom de l'objet que vous trouverez avec Plasmashop et enfin l'angle que doit prendre l'avatar sur l'objet. Chaque paramètre est séparé par une virgule et sans espace ni avant ni après les virgules.

C'est tout ce que vous avez à faire.Very Happy

Comment appeler cette fonction dans la console Python ?
Imaginons que vous soyiez à la Fun House et que l'avatar Michel s'y trouve aussi.
Vous voulez envoyer Michel suivre la raie 1 de Dereno pendant 60 secondes. Vous tapez simplement :

Suivre('raie1','Michel',60)

Que va-t-il se passer ?
Tout d'abord la fonction va charger la prp DrnoExterior qui contient la raie 1 dont le nom réel est C01_Body et tous les avatars présents verrons également cette prp. Si cette prp était déjà chargée, cela ne changera rien.
Ensuite, Michel va être transporté sur la raie de Dereno dans la bonne direction. Il est possible qu'il ne sera pas sur la raie, à cause du décallage du au temps nécessaire à l'affichage. Il va la suivre durant 60 secondes puis il va revenir au point de téléportation par défaut de la Fun House, près de la fontaine.

Si vous tapez:
Suivre('raie1') ou ('raie1','moi'), ce sera vous qui serez transporté sur la raie et durant la valeur par défaut de 30 secondes (vous pouvez modifier cette valeur par défaut).

Faites bon usage de cette fonction et, si vous trouvez d'autres objets intéressants, faites-le savoir ici.

Voici ceux que j'ai inclu dans la fonction :


AgePRPNom objet dans le fichier PRPAngle correctifNom d'appel
PersonalpsnlMYSTIIDCSoarBird01180oiseaur1
DCSoarBird03180oiseaur2
ButterflyVertPos110papillonr
BugFlockingEmitTest0luciolesr
CleftDesertDCSoarBird01180oiseauc1
DCSoarBird03180oiseauc2
TeledahntldnHarvestBBHead-90oiseaut1
BBHead01-90oiseaut2

ShooterB-Master
0shooter1

ShooterC-Master
90shooter2

ShooterD-Master
0shooter3
ShooterF-Master0shooter4
ShooterH-Master0shooter5
DerenoDrnoExteriorC01_Body0raie1
C02_Body0raie2
FishC0690poissond
GardenkemoGardenFishA90poissong1
FishB90poissong2
FishC90poissong3
citybahroFlyers_archB_ArchBody_010bahro
V@-Michel
V@-Michel
Admin
Admin

Messages : 1172
Date d'inscription : 13/05/2010
Age : 69
Localisation : Belgique

Revenir en haut Aller en bas

Se relier à un objet en mouvement ou comment voler Empty Re: Se relier à un objet en mouvement ou comment voler

Message  V@-Annabelle Mer 1 Aoû - 21:55

@ Michel: lol! concernant l'angle corrigé Smile.



koltch et moi avons eu beaucoup de plaisir à voler sur mon objet nommé: BBN ou BB1N <--- le "N" signifiait "Naughty". Pour ceux qui voudrait vivre l'expérience, tu es propulsé sur l'aile du buggaro au point extrême et tu suis littéralement (mais surtout... visuellement) le mouvement de l'aile. C'est semblable à n'importe quel "Monstre" des Parcs d'attractions (je crois que le terme universel est Montagnes russes... mais en plus extrême).

Pour une démo avec des gens de tous les milieux, vaut mieux s'en tenir à les tenir bien en place au centre de la bestiole et les faire regarder droit devant au lieu d'être à 180 degrés.

@ Michel: Il y a en tout 30 bahros voltigeant autour de l'Arche... Je ferai un code pour chacun d'eux car certains d'entre eux font des parcours beaucoup plus intéressants que celui effectué par le bahro numéro 1.

Merci beaucoup pour ce code amélioré, je vais faire quelques petites modifs persos pour retrouver certains "vols" inusités que j'utiliserai que pour les vilains garnements flower
V@-Annabelle
V@-Annabelle
Modérateur
Modérateur

Messages : 340
Date d'inscription : 14/05/2010
Localisation : Canada

Revenir en haut Aller en bas

Se relier à un objet en mouvement ou comment voler Empty Re: Se relier à un objet en mouvement ou comment voler

Message  V@-Michel Dim 5 Aoû - 16:15

J'ai un peu modifié la fonction Suivre() expliquée avant, car l'ancienne version ne tenait compte de la rotration de l' avatar que selon un axe. Ici, on peut le faire tourner dans les 3 directions x, y et z de -180 ° à + 180 °.
D'autre part j'ai ajouté la liaison à 3 autres animaux : l'Urwin et le Monkey de Negilahn et le Sandscrit de Payiferen.

Voici le code :

Code:

def Suivre(objet='',Avatar='moi',duree=30):
    """Attacher un avatar sur un objet en mouvement dont la taille est xxx %
    et le suivre durant xx secondes puis atterrir au point par defaut"""
    if (objet.lower()) == 'oiseaur1' :
    # oiseau 1 du Relto   
        defobjet = ("Personal,psnlMYSTII,DCSoarBird01,0,0,180")
    elif (objet.lower()) == 'oiseaur2' :
    # oiseau 2 du Relto   
        defobjet = ("Personal,psnlMYSTII,DCSoarBird03,0,0,180")
    elif (objet.lower()) == 'papillonr' :
    # Papillon du Relto 
        defobjet = ("Personal,psnlMYSTII,ButterflyVertPos11,0,0,0")
    elif (objet.lower()) == 'luciolesr' :
    # Lucioles du Relto 
        defobjet = ("Personal,psnlMYSTII,BugFlockingEmitTest,0,0,0")       
    elif (objet.lower()) == 'oiseauc1' :
    # oiseau 1 de Cleft   
        defobjet = ("Cleft,Desert,DCSoarBird01,0,0,180")
    elif (objet.lower()) == 'oiseauc2' :
    # oiseau 2 de Cleft   
        defobjet = ("Cleft,Desert,DCSoarBird03,0,0,180")
    elif (objet.lower()) == 'oiseaut1' :
    # oiseau 1 de Teledahn   
        defobjet = ("Teledahn,tldnHarvest,BBHead,0,0,-90")
    elif (objet.lower()) == 'oiseaut2' :
    # oiseau 2 de Teledahn   
        defobjet = ("Teledahn,tldnHarvest,BBHead01,0,0,0")
    elif (objet.lower()) == 'shooter1' :
    # Shooter 1 de Teledahn   
        defobjet = ("Teledahn,tldnHarvest,ShooterB-Master,0,0,0")
    elif (objet.lower()) == 'shooter2' :
    # Shooter 2 de Teledahn   
        defobjet = ("Teledahn,tldnHarvest,ShooterC-Master,0,0,90")
    elif (objet.lower()) == 'shooter3' :
    # Shooter 3 de Teledahn   
        defobjet = ("Teledahn,tldnHarvest,ShooterD-Master,0,0,0")
    elif (objet.lower()) == 'shooter4' :
    # Shooter 4 de Teledahn   
        defobjet = ("Teledahn,tldnHarvest,ShooterF-Master,0,0,0")
    elif (objet.lower()) == 'shooter5' :
    # Shooter 5 de Teledahn   
        defobjet = ("Teledahn,tldnHarvest,ShooterH-Master,0,0,0")
    elif (objet.lower()) == 'raie1' :
    # Raie 1 de Dereno
        defobjet = ("Dereno,DrnoExterior,C01_Body,0,0,0")
    elif (objet.lower()) == 'raie2' :
    # Raie 2 de Dereno
        defobjet = ("Dereno,DrnoExterior,C02_Body,0,0,0")
    elif (objet.lower()) == 'poissond' :
    # Poisson de Dereno 
        defobjet = ("Dereno,DrnoExterior,FishC06,0,0,90")
    elif (objet.lower()) == 'poissong1' :
    # Poisson 1 de Kemo 
        defobjet = ("Garden,kemoGarden,FishA,0,0,90")
    elif (objet.lower()) == 'poissong2' :
    # Poisson 2 de Kemo 
        defobjet = ("Garden,kemoGarden,FishB,0,0,90")
    elif (objet.lower()) == 'poissong3' :
    # Poisson 3 de Kemo 
        defobjet = ("Garden,kemoGarden,FishC,0,0,90")
    elif (objet.lower()) == 'bahro' :
    # Bahro de l'Arche de la Ville   
        defobjet = ("city,bahroFlyers_arch,B_ArchBody_01,0,0,0")
    elif (objet.lower()) == 'urwin' :
    # Urwin de Negilhan   
        defobjet = ("Negilahn,Jungle,Urwin_Head,0,-90,180")
    elif (objet.lower()) == 'singe' :
    # Singe de Negilhan   
        defobjet = ("Negilahn,Jungle,2Tails_Root,0,0,60")
    elif (objet.lower()) == 'sandscrit' :
    # Sandscrit de Payiferen   
        defobjet = ("Payiferen,Pod,BoneSSHead,0,-90,180")       
    animal = defobjet.split(',')
    Age = animal[0]
    Prp = animal[1]
    Objet = animal[2]
    Anglex = float(animal[3])
    Angley = float(animal[4])
    Anglez = float(animal[5])
    PtConsoleNet('Nav.PageInNode '+ Prp ,1)
    if Avatar == 'moi':
        Joueur = PtGetLocalAvatar()
    else:
        Joueur = Avatars.SCOAvatar(Avatar)
    Joueur.netForce(1)
    Joueur.physics.netForce(1)
    Joueur.physics.disable()
    PtSetAlarm(1, Lier(Age,Joueur,Objet,duree,Anglex,Angley,Anglez), 1)
   
class Lier:
    def __init__(self,age,joueur,obj,duree,anglex,angley,anglez):
        self._age = age
        self._joueur = joueur
        self._obj = obj
        self._duree = duree
        self._anglex = anglex
        self._angley = angley
        self._anglez = anglez
    def onAlarm (self, param):
        Aobj = PtFindSceneobject(self._obj, self._age)
        Aobj.netForce(1)
        Aobj.draw.enable(1)
        centreobj = Aobj.getLocalToWorld()
        rotx = ptMatrix44()
        rotx.makeRotateMat(0, -math.pi * self._anglex/180)
        roty = ptMatrix44()
        roty.makeRotateMat(1, -math.pi * self._angley/180)
        rotz = ptMatrix44()
        rotz.makeRotateMat(2, -math.pi * self._anglez/180)
        self._joueur.physics.warp(centreobj * rotx * roty * rotz)
        PtAttachObject(self._joueur, Aobj,1)
        PtSetAlarm(self._duree, Delier(self._age, self._joueur, Aobj), 1)
       
class Delier:
    def __init__(self,age,joueur,obj):
        self._age = age
        self._joueur = joueur
        self._obj = obj
    def onAlarm (self, param):
        PtDetachObject(self._joueur,self._obj,1)
        Robj=PtFindSceneobject('LinkInPointDefault',PtGetAgeName())
        centreobj = Robj.getLocalToWorld()
        self._joueur.physics.warp(centreobj)
        self._joueur.physics.enable(1)
     

La fonction SCOAvatar(Avatar) n'a pas été modifiée.

Je vais ouvrir une nouvelle page afin de rassembler le tableau des objets par âge de manière à ce que vous les trouviez plus facilement
V@-Michel
V@-Michel
Admin
Admin

Messages : 1172
Date d'inscription : 13/05/2010
Age : 69
Localisation : Belgique

Revenir en haut Aller en bas

Se relier à un objet en mouvement ou comment voler Empty Re: Se relier à un objet en mouvement ou comment voler

Message  V@-Michel Mar 28 Aoû - 22:50

Bonne nouvelle. Je suis arrivé à faire voler des avatars sur les 6 Bahros de la ville. Attention, je précise bien qu'il ne s'agit pas de ceux autour de l'Arche (çà c'était déjà fait) mais ceux qui apparaissent lorsque quelqu'un se connecte à la ville.

J'ai bien entendu ajouter ces Bahros dans ma fonction suivre() Laughing

Voici le code supplémentaire à cette fonction suivre():

Code:
 
    elif (objet.lower()) == 'bv1' :
    # Bahro1 de la Ville
        sdl=PtGetAgeSDL() 
        defobjet = ("city,bahroFlyers_city1,B01_BoneSpine3,90,0,90")       
        sdl["islmS1FinaleBahro"]=(1,)
        sdl['islmS1FinaleBahroCity1']=(1,)
    elif (objet.lower()) == 'bv2' :
    # Bahro2 de la Ville
        sdl=PtGetAgeSDL() 
        defobjet = ("city,bahroFlyers_city2,B02_BoneSpine3,90,0,90")       
        sdl["islmS1FinaleBahro"]=(1,)
        sdl['islmS1FinaleBahroCity2']=(1,)
    elif (objet.lower()) == 'bv3' :       
    # Bahro3 de la Ville
        sdl=PtGetAgeSDL() 
        defobjet = ("city,bahroFlyers_city3,B03_BoneSpine3,90,0,90")       
        sdl["islmS1FinaleBahro"]=(1,)
        sdl['islmS1FinaleBahroCity3']=(1,)
    elif (objet.lower()) == 'bv4' :
    # Bahro4 de la Ville
        sdl=PtGetAgeSDL() 
        defobjet = ("city,bahroFlyers_city4,B04_BoneSpine3,90,0,90")       
        sdl["islmS1FinaleBahro"]=(1,)
        sdl['islmS1FinaleBahroCity4']=(1,)
    elif (objet.lower()) == 'bv5' :       
    # Bahro5 de la Ville
        sdl=PtGetAgeSDL() 
        defobjet = ("city,bahroFlyers_city5,B05_BoneSpine3,90,0,90")       
        sdl["islmS1FinaleBahro"]=(1,)
        sdl['islmS1FinaleBahroCity5']=(1,)
    elif (objet.lower()) == 'bv6' :
    # Bahro6 de la Ville
        sdl=PtGetAgeSDL() 
        defobjet = ("city,bahroFlyers_city6,B06_BoneSpine3,90,0,90")       
        sdl["islmS1FinaleBahro"]=(1,)
        sdl['islmS1FinaleBahroCity6']=(1,) 


Pour ces bahros, le vol est limité au parcours que chacun effectue avant de disparaître. Il est de plus ou moins 30 secondes pour tous sauf le 3 qui lui est plus long : 60 secondes.

Donc, par exemple pour lancer Michel sur le bahro 3 de la ville je tape :

Suivre('bv3','Michel',60)


Voici quelques images:


Se relier à un objet en mouvement ou comment voler Kiimag23


Se relier à un objet en mouvement ou comment voler Kiimag24


Se relier à un objet en mouvement ou comment voler Kiimag25


Je vous garanti un effet très spectaculaire sur celles et ceux que vous enverrez sur leur dos, et sur vous-même également !
V@-Michel
V@-Michel
Admin
Admin

Messages : 1172
Date d'inscription : 13/05/2010
Age : 69
Localisation : Belgique

Revenir en haut Aller en bas

Se relier à un objet en mouvement ou comment voler Empty Re: Se relier à un objet en mouvement ou comment voler

Message  Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum