• 18 Avril 2025, 10:24:24


Auteur Sujet: Créer une commande de téléportation vers un autre joueur  (Lu 2204 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne EdwardAsylum

  • *
  • Nouveau
  • Messages: 3
    • Voir le profil
Bien le bonjour à tous, j'ai récemment commencé à apprendre le Pawn.. J'en devient complètement obsédé !
Cela fais plusieurs heures que je recherche le moyen de créer une commande de téléportation vers un autre joueur.

Par exemple, quand je tape la commande /goto "id" dans le jeu, je veux que cela me téléporte vers le joueur possédant cet id.
Je ne vous demande pas un code tout mâché, j'aimerais avoir des explications sur la création de cette commande s'il vous plait  :rolleyes:

Merci à ceux qui m'aiderons !  :bye:
« Modifié: 24 Mai 2014, 08:54:14 par Gzsume »

Hors ligne Gzsume

  • *
  • Compétent dans l'inutile
  • Messages: 2236
    • Voir le profil
Re : Créer une commande de téléportation vers un autre joueur
« Réponse #1 le: 22 Mai 2014, 19:48:36 »
Salut,

Ça dépend un peu du système de commandes que tu utilises. S'il s'agit d'un traitement direct dans la callback OnPlayerCommandText(), alors tu dois utiliser une fonction telle que Strtok() pour récupérer dans une chaîne de caractère l'index du joueur sur qui téléporter celui qui effectue la commande. Puisque la fonction retourne une chaîne de caractère, tu vas devoir utiliser strval() pour utiliser la valeur comme une donnée numérique (attention, la fonction commence avec une minuscule).

Si tu utilises un système de commandes un peu plus évolué, comme par exemple zcmd en collaboration avec le plugin sscanf, tu peux traiter (avec sscanf) la chaîne de caractère params[] qui est passée à la callback de ta commande.

Une fois que tu as récupéré l'index du joueur, tu dois vérifier s'il est connecté et, si c'est le cas, récupérer ses coordonnées dans trois variables de type float (X, Y et Z). Puis tu dois simplement téléporter le joueur effectuant la commande à ces positions.

Dans les deux cas, n'hésites pas à poster si tu as besoin d'aide complémentaire. :wink:

Hors ligne EdwardAsylum

  • *
  • Nouveau
  • Messages: 3
    • Voir le profil
Re : Créer une commande de téléportation vers un autre joueur
« Réponse #2 le: 22 Mai 2014, 20:08:49 »
Superbe ! Je vais cogiter tout ça dans mon coin.. A vrai dire, c'est plus compliqué que je l'imaginais ^^'

Au début je pensais qu'il fallait juste créer la ligne
new Float:x, Float:y, Float:z puis
GetPlayerPos
et que les valeurs allaient automatiquement se mettre dans le SetPlayerPos..
Mais j'avais oublier que nous étions sur Pawno, c'est loin d'être aussi facile  :sad:

Hors ligne Gzsume

  • *
  • Compétent dans l'inutile
  • Messages: 2236
    • Voir le profil
Re : Créer une commande de téléportation vers un autre joueur
« Réponse #3 le: 22 Mai 2014, 21:32:29 »
C'est vraiment pas compliqué, mais je pense que tu ne conçois pas les fonctions comme elles devraient l'être. Je vais tenter de t'expliquer leur usage, pour que ce soit plus clair pour toi.

Pour commencer, lorsque tu écris la ligne

Code: (pawn) [Sélectionner]
new Float:X, Float:Y, Float:Z;
Tu réserves simplement trois emplacements en mémoire pour contenir trois nombres à virgule. Tu ne fais que réserver des emplacements : ils ne contiennent aucune valeur.

Lorsque tu utilises la fonction GetPlayerPos(), tu passes en paramètre les trois variables qui vont recevoir les valeurs X, Y et Z du joueur (le premier paramètre de la fonction, playerid). Autrement dit, tu récupères des valeurs et tu les enregistres quelque-part en mémoire. Ni plus, ni moins.

Maintenant, lorsque tu veux exploiter ces valeurs enregistrées en mémoire, tu utilises la fonction SetPlayerPos(). C'est simple : tu passes en paramètre l'index du joueur à téléporter, et les coordonnées auxquelles le téléporter. Puisque tu as enregistré en mémoire les coordonnées du premier joueur (celui sur qui téléporter), tu peux utiliser les variables X, Y et Z pour téléporter le joueur (celui qui va être téléporté).

Encore une fois, si tu as besoin d'un peu plus d'informations n'hésites pas. ;)

EDIT - J'avais quelques minutes de libre, j'ai codé ça rapidement sans compiler. Il se peut qu'il y ait des erreurs, mais ça devrait pouvoir te permettre de mieux comprendre ce que tu dois faire. Notes que j'utilise zcmd pour détecter les commandes utilisées.


Code: (pawn) [Sélectionner]
// Lorsqu'on utilise la commande
cmd_goto(playerid, params[])
{
    // Si un ID est renseigné
    if (!isnull(params))
    {
        // Si le joueur dont l'ID est renseigné est connecté et s'il ne s'agit pas de l'ID du joueur qui tape la commande
        if (IsPlayerConnected(strval(params)) && strval(params) != playerid)
        {
            // On crée trois variables
            new Float:PosX = 0.0, Float:PosY = 0.0, Float:PosZ = 0.0;

            // On récupère la position du joueur (ID renseigné) dans les trois variables
            GetPlayerPos(strval(params), PosX, PosY, PosZ);

            // On téléporte le joueur (celui qui tape la commande) à ces coordonnées
            SetPlayerPos(playerid, PosX, PosY, PosZ);

            // On lui indique que tout s'est bien passé
            SendClientMessage(playerid, -1, "Vous avez été téléporté !");
        }

        // Si le joueur dont l'ID est renseigné n'est pas connecté ou s'il s'agit de l'ID du joueur qui tape la commande
        else
        {
            SendClientMessage(playerid, -1, "L'ID entré n'est pas valide !");
        }
    }

    // Si aucun ID n'a été renseigné
    else
    {
        SendClientMessage(playerid, -1, "Usage: /goto <id>");
    }

    return 1;
}
« Modifié: 22 Mai 2014, 21:43:24 par Gzsume »

Hors ligne EdwardAsylum

  • *
  • Nouveau
  • Messages: 3
    • Voir le profil
Re : Créer une commande de téléportation vers un autre joueur
« Réponse #4 le: 22 Mai 2014, 22:58:53 »
Magnifique ! Je vais étudier cette partie de code que tu m'as fournis.
Je viens d'installer zcmd et j'ai même testé la commande. Elle fonctionne parfaitement, tu es un expert du pawno  :laugh:
Sans mauvais jeu de mot.  :closedeyes:
Cela fait plusieurs jours que je recherche un tutoriel progressif qui nous apprend à créer un script Pawn mais malgré mes recherches incessante, je ne trouve que des tutoriels allemand.. Où des tutoriels n'apprenant que l'utilisation des variables et des fonctions basique du logiciel.
Je suis vraiment à fond sur ce logiciel et j'aimerais vraiment apprendre. Mais, si je continue à apprendre à l'arrache par bout de code, je risque de prendre de mauvaises habitudes..

Sur ce, merci pour ton aide ! Elle m'as été vraiment importante !  :bye:

Hors ligne Gzsume

  • *
  • Compétent dans l'inutile
  • Messages: 2236
    • Voir le profil
Re : Créer une commande de téléportation vers un autre joueur
« Réponse #5 le: 22 Mai 2014, 23:57:44 »
Ça fait des années que j'apprends ce langage, ce serait dommage de ne pas réussir à faire une commande aussi basique après tout ce temps. ^^

Si je peux te conseiller une chose, c'est de ne pas avoir peur des cours dans une langue autre que le français. Tu peux trouver des ressources très intéressantes, notamment en anglais, qui te permettront de progresser. Ça peut faire peur au départ, mais ce n'est pas si compliqué.

Bonne soirée !

Hors ligne Ssk

  • *
  • Lulu's Stunt - Le serveur stunt de Lulu !
  • Messages: 8154
    • Voir le profil
Re : Créer une commande de téléportation vers un autre joueur
« Réponse #6 le: 23 Mai 2014, 13:20:46 »
Salut, si tu cherche des tutoriels, nous en avons dans cette section du forum, http://www.gtaonline.net/forums/index.php/board,75.0.html



Derrière tout programme se cache un programmeur, je considère le monde comme un programme.
Mon blog