Les Voltigeurs d'URU LIVE
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.

Téléporter un avatar dont le nom est inclu dans un dictionnaire

2 participants

Aller en bas

Téléporter un avatar dont le nom est inclu dans un dictionnaire Empty Téléporter un avatar dont le nom est inclu dans un dictionnaire

Message  V@-Michel Dim 17 Juin - 9:47

Ce cas pratique va vous montrer comment on peut amener à soi ou, au contraire aller vers, un avatar qui est ou non dans le même âge que le nôtre.
En fait, je vous le propose maintenant, suite à une question posée par Annabelle :

J'aimerais bien connaître la façon d'automatiser la téléportation à partir d'âges distants d'avatars. J'ai une liste de gens que je déplace souvent (moi ou d'autres explorateurs). Je dois me souvenir de leur KI par coeur sinon... Il doit y avoir un moyen de procéder.



Je rapatrie ici le début des discussions à ce sujet afin d'éviter de tout mélanger Laughing


Téléporter un avatar dont le nom est inclu dans un dictionnaire I_icon_minipost V@-nupied Hier à 18:40




Je ne sais pas ce que tu entends par 'automatiser' mais

V@-Annabelle a écrit: J'ai une liste de gens que je déplace souvent (moi ou d'autres explorateurs). Je dois me souvenir de leur KI par coeur.



cette liste, tu peux très bien la mettre dans un fichier python sous forme de .... liste Very Happy
et même faire une association entre nom d'avatar et KI, simplement par numéro d'ordre, ce qui fait que tu pourrais utiliser une fonction KI(nom)
qui serait appelée dans une fonction DeplaceAvi(nom)


Téléporter un avatar dont le nom est inclu dans un dictionnaire I_icon_minipost V@-Annabelle Hier à 20:47




Une liste...qu'est-ce que ça veut dire?


Téléporter un avatar dont le nom est inclu dans un dictionnaire I_icon_minipost Mirphak Hier à 21:35




Une liste est une énumération d'objets, de même type (des entiers par exemple), en python ça s'écrit ainsi:
maListe = [item1,item2,...,itemN]

En tapant maListe[0] tu obtiendras item1.

Il est possible de récupérer la liste des joueurs de l'âge dans lequel tu es grâce à la commande
playerList = PtGetPlayerList()
qui retourne une liste d'objets de type ptPlayer duquel tu peux extraire les ID des joueurs.
Par exemple playerList[0].getPlayerID() renverra le KI du 1er joueur de cette liste


Téléporter un avatar dont le nom est inclu dans un dictionnaire I_icon_minipost V@-Annabelle Hier à 23:53




Aie aie aie...c'est bien trop compliqué pour ma petite cervelle...

voyons voir:

maliste = [03632553,4785060,5125848,8633137] <---ici j'ai mis les KI d'Annabelle, La belle Anna, Skydiver Anna et Skydiver Annabelle

mais là je fais comment?

je veux faire: Net.linkplayerhere 03632553 mais pas dans la console plasma mais sous la console python et je veux pas taper des chiffres

je veux quelque chose comme:

get(Ab) <---ça me ramène Annabelle illico presto où je suis.
get(LBA)
get(SDA)
get(A7)... en fait je mettrai les abbréviations que j'utilise pour nommer mes avatars


Dernière édition par V@-Michel le Dim 17 Juin - 10:06, édité 1 fois
V@-Michel
V@-Michel
Admin
Admin

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

Revenir en haut Aller en bas

Téléporter un avatar dont le nom est inclu dans un dictionnaire Empty Re: Téléporter un avatar dont le nom est inclu dans un dictionnaire

Message  V@-Michel Dim 17 Juin - 10:05

Je suis entrain de réaliser ce que tu demandes car moi aussi je dois rapatrier vers moi des avatars avec lesquels je "travaille" ou que je souhaite rejoindre. Mais en attendant que cet article soit terminé, afin de t'aider voici ce que tu peux faire.

Moi, j'utilise une forme plus spéciale de liste : le dictionnaire.
Ainsi, je tape sous Python la commande Appeler("Annabelle") et cet avatar rejoint l'âge dans lequel je suis (si il n'y est pas encore) puis la commande Merejoindre ("Annabelle") pour que cet avatar vienne sur moi.

Un dictionnaire Python est une liste particulière dont chaque élément est constitué de 2 parties : Une clé et une valeur séparés par :
Par exemple, on crée le dictionnaire des avatars comme suit :

Liste_avatars = {"Annabelle":03632553,"La belle Anna":4785060,"Skydiver Anna":5125848,"Skydiver Annabelle":8633137}

Avec Plasmashop je crée un nouveau module appelé, par exemple, Warp.py (tu peux le nommer comme tu veux). Voici son contenu:


# -*- coding: cp1252 -*-

#puis les lignes de déclarations et d'instructions :
#déclarations:
from Plasma import *
Liste_avatars = {"Annabelle":03632553,"La belle Anna":4785060,"Skydiver Anna":5125848,"Skydiver Annabelle":8633137}
#instructions:
def Appeler(Nom='Annabelle'):
....IDavatar=Liste_avatars[Nom]
....instruction="Net.LinkPlayerHere %d" % IDavatar
....PtConsole(instruction)


def Merejoindre(Nom='Annabelle'):
....IDavatar=Liste_avatars[Nom]
....instruction = "Avatar.Warp.Warpplayerhere %d" % IDavatar
....PtConsole(instruction)


Explications:
remarque: ne pas taper les points en début de ligne, c'est juste pour l'indentation.

La toute première ligne
# -*- coding: cp1252 -*-
doit toujours figurer dans tous les modules si tu utilises des lettres avec accent, comme en Français. Sinon c'est pas obligé.

Comme j'ai besoin du module Plasma.py pour les fonctions que je vais créer, je l'importe dans mon module :

from Plasma import *

Ensuite je tape mon dictionnaire :


Liste_avatars = {"Annabelle":03632553,"La belle Anna":4785060,"Skydiver Anna":5125848,"Skydiver Annabelle":8633137}

Tu peux l'allonger comme tu le veux.
Tu peux aussi remplacer les vrai nom par tes abréviations, exactement comme tu veux.
Puis je tape mes deux fonctions avec les trois lignes d'instructions qu'elles contiennent chacunes :

def Appeler(Nom='Annabelle'):
et
def Merejoindre(Nom='Annabelle'):

La fonction Appeler() va aller chercher le numéro d'identification du nom que l'on tape comme paramètre dans le dictionnaire Liste_avatars créé plus haut. Remarque que j'ai mis entre parenthèse Nom='Annabelle' pour 2 raisons. Tout d'abord pour que Python sache que la variable Nom est une chaîne de caractères et aussi parceque je décide ainsi que si je ne tape pas de nom, ce sera Annabelle qui sera appelée par défaut (tu peux mettre le nom inclu dans le dictionnaire que tu veux).
Le numéro d'identification que la fonction va chercher dans le dictionnaire est placé dans la variable IDavatar.
Puis, je place dans la variable instruction la chaîne de caractères qui correspond à la commande Plasma qui appelle l'avatar dans l'âge où l'on se trouve.
%d sera remplacé, lors de l'exécution de la fonction, par le numéro d'identification de l'avatar.
Enfin, on lance la commande PtConsole (instruction) qui appelle la commande Plasma correspondante.

C'est pareil pour la seconde fonction, à l'exception de la variable instruction qui, cette fois, aura comme chaîne de caractères la commande Plasma qui amène sur soi un avatar se trouvant dans le même âge que nous.

Je prends un exemple.
Imaginons que tu sois dans le "coeur" de la falaise d' Er'cana et que tu désires amener sur toi Skydiver Anna qui est à son Relto.
Dans la console Python de Plclient tu tapes :

>>>from Warp import * (pour charger le module Warp que j'ai créé)
puis
>>>Appeler('Skydiver Anna')
Tu attends que cet avatar arrive dans Er'cana, où tu te trouves.
puis
>>>Merejoindre('Skydiver Anna')
Et hop, la voilà sur toi !

C'est tout Wink

Tu peux faire la même chose dans l'autre sens en créant deux autres fonctions qui vont, cette fois, te faire aller vers un avatar de ton dictionnaire. Je te laisses cogiter. Si tu as bien compris, cela ne devrait te poser aucun problème.

Je suis entrain de réaliser un module qui va faire tout cela et sans utiliser la commande Ptconsole(). Tout sera en Python "pur".
Ce sera l'objet de mon prochain exposé dans Cas pratiques de ce forum.

Voilà j'espère que cela va t'aider Very Happy
V@-Michel
V@-Michel
Admin
Admin

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

Revenir en haut Aller en bas

Téléporter un avatar dont le nom est inclu dans un dictionnaire Empty Re: Téléporter un avatar dont le nom est inclu dans un dictionnaire

Message  V@-Michel Lun 18 Juin - 14:38

Comme promis voici le module "Teleportation.py" qui regroupe les fonctions permettant de téléporter un avatar soit par son muméro d'identification soit par son nom sans utilisation de la commande PtConsole():

-Se téléporter vers l'âge d'un autre avatar : GoTo ('nom') ou GoToID (numeroKI)
-Téléporter vers notre âge un autre avatar : Call ('nom') ou CallID(numeroKI)
-Aller à l'emplacement exact d'un autre avatar du même âge : On ('nom') ou OnID (numeroKI)
-Appeler sur soi un autre avatar du même âge que le nôtre : OnMe ('nom') ou OnMeID (numeroKI)

Téléporter un avatar dont le nom est inclu dans un dictionnaire Telepo11

Agrandissez l'image.

Explications.

Dans Liste-avatars, vous remplacerez mes noms et leur numero de KI par les vôtres.
Vous pouvez donner les noms que vous voulez aux avatars. Ce seront ces noms que vous utiliserez pour appeler les fonctions.

Exemple.
Vous vous trouvez à Teledahn. Vous souhaitez amener vers vous Mirfak qui se trouve, par exemple dans son Relto.
Tout d'abord, assurez-vous que ses coordonnées sont bien dans la Liste_avatars et qu'il est connecté et ensuite demandez-lui sa permission Laughing sinon il va avoir une surprise !

Comme il n'est pas dans le même âge que vous, tapez la commande : Call ('Mirfak') ou, si vous préférez par son numéro d'identification ou s'il s'agit d'un avatar qui n'est pas encore dans votre liste : CallID (11187517).

Attendez qu'il arrive dans votre âge (toujours au point par défaut), puis tapez OnMe ('Mirfak') ou OnMeID (11187517).

Voilà, c'est tout.
Essayez les autres fonctions dans l'autre sens. Elles sont tout aussi rapides et efficaces !
V@-Michel
V@-Michel
Admin
Admin

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

Revenir en haut Aller en bas

Téléporter un avatar dont le nom est inclu dans un dictionnaire Empty Re: Téléporter un avatar dont le nom est inclu dans un dictionnaire

Message  V@-Annabelle Lun 18 Juin - 21:44

Merci infiniment Smile

Je suis pas très douée pour ce genre de programme, il me faut du tout cuit Smile
V@-Annabelle
V@-Annabelle
Modérateur
Modérateur

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

Revenir en haut Aller en bas

Téléporter un avatar dont le nom est inclu dans un dictionnaire Empty Re: Téléporter un avatar dont le nom est inclu dans un dictionnaire

Message  V@-Michel Lun 18 Juin - 23:09

Malheureusement dans ce forum, il n'est pas possible de taper correctement un programme. C'est pourquoi je suis obligé de le faire avec un autre éditeur puis de le sauvegarder en image Jpg pour le poster ici.

Donc, il te faudra le recopier dans l'éditeur Plasma ou autre. Si besoin, je peux te l'envoyer par Mail Privé.
V@-Michel
V@-Michel
Admin
Admin

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

Revenir en haut Aller en bas

Téléporter un avatar dont le nom est inclu dans un dictionnaire Empty Une boucle pour exclure Lyrobot de la téléportation

Message  V@-Annabelle Mer 8 Aoû - 1:35

Voici mon problème:

Lyrositeur va modifier son code pour que Lyrobot ne reçoive plus les prps que l'on ajoutera à la Fun House.

Il m'a demandé de créer une exception dans le script Avatars.Warp() (<--- script et fonction venant avec le client FunHouse plClient) pour en exclure Lyrobot.

Il m'a dit d'utiliser une condition IF ELSEIF ELSE. Je ne m'y connais pas du tout.

Voici le script de base:

Code:
def Warp(*players):
    agePlayers = []
    if (not players):
        agePlayers = GetAllAvatars()
    else:
        agePlayers = map(GetOneAvatar, players)
    myPos = PtGetLocalAvatar().position()
    for avatar in agePlayers:
        avatar.netForce(True)
        avatar.physics.warp(myPos)

Pouvez-vous modifiez celui-ci pour inclure l'exception de Lyrobot SVP? Merci! I love you
V@-Annabelle
V@-Annabelle
Modérateur
Modérateur

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

Revenir en haut Aller en bas

Téléporter un avatar dont le nom est inclu dans un dictionnaire Empty Re: Téléporter un avatar dont le nom est inclu dans un dictionnaire

Message  V@-Michel Mer 8 Aoû - 9:14

Voici comment faire :
1. A partir de ton code :

Code:

def Warp(*players):
    agePlayers = []
    if (not players):
        agePlayers = GetAllAvatars()
    else:
        agePlayers = map(GetOneAvatar, players)
    myPos = PtGetLocalAvatar().position()
    for avatar in agePlayers:
    key=PtGetAvatarKeyFromClientID(playerId)
    nom=PtGetClientName(key)
    if nom != "Lyrobot":
      avatar.netForce(True)
      avatar.physics.warp(myPos)
      print str(playerId) + ' '+nom+' a été amene sur moi'
    else:
      print str(playerId) + ' '+nom+' est reste sur place'

Dans la fonction warp, tu peux remplacer le nom "Lyrobot" par un autre, au cas où il aurait changé.

2. Voici un autre code, que moi j'utilise, à peu près identique au tien mais qui permet de définir dans la commande le nom des avatars que que l'on veut éviter amener sur soi :

Code:

def OnMeID(IDavatar=0):
    """Amener sur soi un avatar de numero ID appartenant au même âge"""
    Smoi=PtGetLocalAvatar()
    Kmoi=Smoi.getKey()
    Kavatar=PtGetAvatarKeyFromClientID(IDavatar)
    Savatar=Kavatar.getSceneObject()
    Savatar.netForce(1)
    Savatar.physics.warpObj(Kmoi)
 
def SwapExcept(sauf=["Lyrobot"]):
    """Rassembler sur soi tous les avatars du même âge sauf ceux repris dans une liste"""
    PlayerList=PtGetPlayerList()
    idList=map(lambda player:player.getPlayerID(),PlayerList)
    for playerId in idList:
        key=PtGetAvatarKeyFromClientID(playerId)
        nom=PtGetClientName(key)
        if nom not in sauf:
            OnMeID(playerId)
            print str(playerId) + ' '+nom+' a été amene sur moi'
        else:
            print str(playerId) + ' '+nom+' est reste sur place'

La fonction OnMeId() est appelée par la fonction SwapExcept(). Elle sert à amener sur soi un seul avatar dont on connait son numero de KI.

Donc, dans ton cas, tu tapes simplement SwapExcept() et tous les avatars présents dans ton âge se rassembleront sur toi sauf Lyrobot car c'est le paramètre par défaut que j'ai placé dans la liste comme tu peux le voir.
Si tu veux exclure de ta téléportation sur toi d'autres noms, il te suffit de taper : SwapExcept(['Michel','Annabelle','Lyrobot']) et Michel, Annabelle et Lyrobot ne seront pas téléportés. Tu peux mettre autant de noms que tu désires il faut juste que ta liste soit entre crochets et chaque nom entre guillemets(" ") ou quotes(' ') séparés par une virgule. Si tu veux téléporter tout le monde sans exception, tu mets un nom bidon dans la liste, par exemple tu tapes : SwapExcept(["0"]) et tout le monde sera sur toi car il n'existe pas d'avatar qui ont comme nom 0 Very Happy

Te voici donc avec 2 possibilités. A toi de choisir.
V@-Michel
V@-Michel
Admin
Admin

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

Revenir en haut Aller en bas

Téléporter un avatar dont le nom est inclu dans un dictionnaire Empty Re: Téléporter un avatar dont le nom est inclu dans un dictionnaire

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