Se relier à un objet en mouvement ou comment voler
3 participants
Page 1 sur 1
Se relier à un objet en mouvement ou comment voler
Dans le même ordre d'idée que la liaison d'un avatar à un objet, voici comment suivre un objet en mouvement.
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 :
Et si on se relie sur WedgeRingsMaster2, on tourne avec les pierres Bahro.
Sur le nuage des lucioles (BugFlockingEmitTest)
Sur un papillon (ButterFlyVertPos11)
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 :
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
Réponse :
- 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 :
Et si on se relie sur WedgeRingsMaster2, on tourne avec les pierres Bahro.
Sur le nuage des lucioles (BugFlockingEmitTest)
Sur un papillon (ButterFlyVertPos11)
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 :
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
Réponse :
- Spoiler:
Dans l'ordre :
1. Insere('Jungle',True)
2. Suivre('moi','Urwin_Root','Negilahn',True)
3. ObjetSur('Urwin_Root','Negilahn','moi','Personal',0.05,0,3,3)
(les chiffres 3 sont le déplacement latéral et vertical de l'Urwin, sinon il serait en plein milieu de l'avatar)
4. Vers('VP')
Si vous inversez le 3 avec le 2, cela va fonctionner aussi mais l'Urwin aura sa taille normale et votre avatar sera placé à l'intérieur de lui.
V@-Michel- Admin
- Messages : 1172
Date d'inscription : 13/05/2010
Age : 69
Localisation : Belgique
Re: Se relier à un objet en mouvement ou comment voler
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
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 J'ai fait un test préliminaire ce soir à la Fun House en vue de mon déploiement de samedi prochain.
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 J'ai fait un test préliminaire ce soir à la Fun House en vue de mon déploiement de samedi prochain.
V@-Annabelle- Modérateur
- Messages : 340
Date d'inscription : 14/05/2010
Localisation : Canada
Re: Se relier à un objet en mouvement ou comment voler
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
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
- 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- Modérateur
- Messages : 340
Date d'inscription : 14/05/2010
Localisation : Canada
Re: Se relier à un objet en mouvement ou comment voler
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 :
Dès que je trouve la solution je te le fais savoir.
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- Admin
- Messages : 1172
Date d'inscription : 13/05/2010
Age : 69
Localisation : Belgique
Re: Se relier à un objet en mouvement ou comment voler
Merci pour la modif Michel je vais l'incorporer à mon script.
Il fonctionne mon script alors je suis contente que ma logique fonctionne .
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...
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.
Il fonctionne mon script alors je suis contente que ma logique fonctionne .
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...
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- Modérateur
- Messages : 340
Date d'inscription : 14/05/2010
Localisation : Canada
Re: Se relier à un objet en mouvement ou comment voler
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!!!
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- Modérateur
- Messages : 340
Date d'inscription : 14/05/2010
Localisation : Canada
Re: Se relier à un objet en mouvement ou comment voler
Tu as perdu tes fichiers .py personnels ou bien le dossier de la FunHouse qui comporte les fichiers py?
V@-Michel- Admin
- Messages : 1172
Date d'inscription : 13/05/2010
Age : 69
Localisation : Belgique
Re: Se relier à un objet en mouvement ou comment voler
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.
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- Modérateur
- Messages : 340
Date d'inscription : 14/05/2010
Localisation : Canada
Re: Se relier à un objet en mouvement ou comment voler
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
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- Admin
- Messages : 1172
Date d'inscription : 13/05/2010
Age : 69
Localisation : Belgique
Re: Se relier à un objet en mouvement ou comment voler
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.
Et ceux-ci aussi:
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
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
V@-Annabelle- Modérateur
- Messages : 340
Date d'inscription : 14/05/2010
Localisation : Canada
Re: Se relier à un objet en mouvement ou comment voler
Avec tous ces animaux en mouvement, je vais réaliser un module complet et t'en ferai part très bientôt .
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?
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- Admin
- Messages : 1172
Date d'inscription : 13/05/2010
Age : 69
Localisation : Belgique
Re: Se relier à un objet en mouvement ou comment voler
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)?
De plus, j'Ai tout planifié pour les marqueurs ; je partagerai mon code avec vous une fois qu 'il sera écrit.
De plus, j'Ai tout planifié pour les marqueurs ; je partagerai mon code avec vous une fois qu 'il sera écrit.
Re: Se relier à un objet en mouvement ou comment voler
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...
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 !
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...
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- Admin
- Messages : 1172
Date d'inscription : 13/05/2010
Age : 69
Localisation : Belgique
Fonction Suivre()
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
Voyons maintenant la fonction :
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):
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.
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 :
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
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.
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 :
Age | PRP | Nom objet dans le fichier PRP | Angle correctif | Nom d'appel |
Personal | psnlMYSTII | DCSoarBird01 | 180 | oiseaur1 |
DCSoarBird03 | 180 | oiseaur2 | ||
ButterflyVertPos11 | 0 | papillonr | ||
BugFlockingEmitTest | 0 | luciolesr | ||
Cleft | Desert | DCSoarBird01 | 180 | oiseauc1 |
DCSoarBird03 | 180 | oiseauc2 | ||
Teledahn | tldnHarvest | BBHead | -90 | oiseaut1 |
BBHead01 | -90 | oiseaut2 | ||
ShooterB-Master | 0 | shooter1 | ||
ShooterC-Master | 90 | shooter2 | ||
ShooterD-Master | 0 | shooter3 | ||
ShooterF-Master | 0 | shooter4 | ||
ShooterH-Master | 0 | shooter5 | ||
Dereno | DrnoExterior | C01_Body | 0 | raie1 |
C02_Body | 0 | raie2 | ||
FishC06 | 90 | poissond | ||
Garden | kemoGarden | FishA | 90 | poissong1 |
FishB | 90 | poissong2 | ||
FishC | 90 | poissong3 | ||
city | bahroFlyers_arch | B_ArchBody_01 | 0 | bahro |
V@-Michel- Admin
- Messages : 1172
Date d'inscription : 13/05/2010
Age : 69
Localisation : Belgique
Re: Se relier à un objet en mouvement ou comment voler
@ Michel: concernant l'angle corrigé .
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
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
V@-Annabelle- Modérateur
- Messages : 340
Date d'inscription : 14/05/2010
Localisation : Canada
Re: Se relier à un objet en mouvement ou comment voler
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 :
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
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- Admin
- Messages : 1172
Date d'inscription : 13/05/2010
Age : 69
Localisation : Belgique
Re: Se relier à un objet en mouvement ou comment voler
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()
Voici le code supplémentaire à cette fonction suivre():
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:
Je vous garanti un effet très spectaculaire sur celles et ceux que vous enverrez sur leur dos, et sur vous-même également !
J'ai bien entendu ajouter ces Bahros dans ma fonction suivre()
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:
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- Admin
- Messages : 1172
Date d'inscription : 13/05/2010
Age : 69
Localisation : Belgique
Sujets similaires
» Tableau d'objets en mouvement auquel il est possible de se relier
» Comment se relier à une autre instance que son Relto au moment du lancement du jeu
» Déplacer sur soi ou sur un objet un autre objet déplaçable
» Déplacer son avatar sur un objet d'une prp chargée
» Le coin de V@-Michel
» Comment se relier à une autre instance que son Relto au moment du lancement du jeu
» Déplacer sur soi ou sur un objet un autre objet déplaçable
» Déplacer son avatar sur un objet d'une prp chargée
» Le coin de V@-Michel
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum