GTAOnline.net

San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: Nikko™ le 10 Mai 2008, 11:51:01

Titre: DM, encore et toujours.... [Résolu]
Posté par: Nikko™ le 10 Mai 2008, 11:51:01
Bonjour tout le monde,
Me revoila avec un pb de DM.
Dans ma commande pour acceder au dm (/dm) jai ajouter un truc pour modifier le nom du player en player_DM.
Voila ce que jai mit dans la commande

new name[256];  // 1390
new tmp[256]; // 1391
tmp = strtok(cmdtext, idx); // 1392
GetPlayerName(playerid, name, sizeof(name)); // 1393
SetPlayerName(playerid,"%s_DM", name); // 1394

Error: "number of arguments does not match definition" a la ligne 1394
Merci d'avance

++
nikko
Titre: Re : DM, encore et toujours....
Posté par: gen_vivien le 10 Mai 2008, 12:41:04
vérifie que la ligne qui correspond à celle ligne 1394 soit bien conforme. OU un problème de "playerid"
Titre: Re : DM, encore et toujours....
Posté par: Nikko™ le 10 Mai 2008, 12:50:08
Jai bien esseyer differents truc, mais rien ne va, jai meme demandé a Native, il ne trouve pas XD

++
nikko
Titre: Re : DM, encore et toujours....
Posté par: NatiVe™ le 10 Mai 2008, 12:51:31
C'est pas que je trouve pas !

C'est que j'utilise rarement cette fonction donc je connais pas bien tout s'est utilisation

NV.

Titre: Re : DM, encore et toujours....
Posté par: Nikko™ le 10 Mai 2008, 12:53:14
Ahh ok ... Lol

++
nikko
Titre: Re : DM, encore et toujours....
Posté par: Syg le 10 Mai 2008, 14:17:31
La fonction SetPlayerName ne doit avoir que 2 paramètres, pas 3.
Pour faire ce que tu veux faire, il faut passer par une variable intermédiaire :

   new NouveauNom[255];

   format (NouveauNom, sizeof (NouveauNom), "%s_DM", name);
   SetPlayerName (playerid, NouveauNom);

++
Syg
Titre: Re : DM, encore et toujours....
Posté par: Nikko™ le 10 Mai 2008, 15:05:58
Salut,
Il y avais un soucis de symboles donc jai ajouter "new name", ce qui fait ceci:
new NouveauNom[255];
new name[256];
format (NouveauNom, sizeof (NouveauNom), "%s_DM", name);
SetPlayerName (playerid, NouveauNom);

MAis le pb cest que ca ne marque plus dutout le nom du joueur ca met seulement "_DM"

++
nikko
Titre: Re : DM, encore et toujours....
Posté par: Bayshore le 10 Mai 2008, 15:56:55
Tu as oublier de mettre le nom du joueur dans ta variable name ;)

++
ZecKo
Titre: Re : DM, encore et toujours....
Posté par: MadFire le 10 Mai 2008, 17:22:24
ZecKo tu veut dire "playerid" ? ???
Titre: Re : DM, encore et toujours....
Posté par: Syg le 10 Mai 2008, 17:23:54
Je te montrais juste comment remplacer ton SetPlayerName.
Il fallait garder ce que tu avais fait autour ...

Ce qui devrait donner :
new name[256];
new tmp[256];
new NouveauNom[255];

tmp = strtok(cmdtext, idx);
GetPlayerName(playerid, name, sizeof(name));
format (NouveauNom, sizeof (NouveauNom), "%s_DM", name);
SetPlayerName (playerid, NouveauNom);

++
Syg
Titre: Re : DM, encore et toujours....
Posté par: Nikko™ le 10 Mai 2008, 19:20:04
Ok merci syg, ca marche, cest bon a savoir ;)
EDIT: Mais pour quand je fait /dmexit, Jai esseyer plusieurs truc mais je n'y arrive pas :(
Peut on m'aider ??  :)

++
nikko
Titre: Re : DM, encore et toujours....
Posté par: lepompier le 10 Mai 2008, 21:41:32
s'est pas compliquer tien regarde

    if(strcmp(cmdtext,"/dmquite", true)==0){
    PlayerPlaySound(playerid, 1137, 0, 0, 0);
    new playerdm[MAX_PLAYER_NAME];
    new PlayerConnecteddm[256];
    DM[playerid] = 0;
    GetPlayerName(playerid, playerdm, sizeof(playerdm));
    format(PlayerConnecteddm, sizeof(PlayerConnecteddm), "Le player %s a quitté un Death Match ", playerdm);
    SetPlayerInterior(playerid,0);
    SetPlayerPos(playerid,2048.7170,1510.3895,10); // Tu change tu mais ta posstion a toi si tu veux aleatoire dit le moi je te monteré
    SendClientMessageToAll(COLOR_YELLOW, PlayerConnecteddm);
    return 1;
}
Titre: Re : DM, encore et toujours....
Posté par: Bayshore le 10 Mai 2008, 21:41:52
Alors, quand le joueur tape /dm tu doit prendre ses positions ;)

au début de ton script :
Code: (pawn) [Sélectionner]
New Float:oldX[MAX_PLAYERS], Float:oldY[MAX_PLAYERS], Float:oldZ[MAX_PLAYERS];
new IsInDm[MAX_PLAYERS];

quand le joueur tape /dm :
Code: (pawn) [Sélectionner]
GetPlayerPos(playerid, oldX[playerid], oldY[playerid], oldZ[playerid]);
IsInDm[playerid] = true;
// Ensuite ton SetPlayerPos, ta fonction qui remplace le nom etc.

quand le joueur tape /exitdm :
Code: (pawn) [Sélectionner]
SetPlayerPos(playerid, oldX[playerid], oldY[playerid], oldZ[playerid]);
IsInDm[playerid] = false;
// Après tu utilise des fonctions de string (désolé je ne connait pas bien ^^) pour enlever le _DM à la fin du nom du joueur

Dans OnPlayerDisconnect :
Code: (pawn) [Sélectionner]
IsInDm[playerid] = false;

Ma méthode est un peu plus clean que le pompier, car elle sauvegarde la position du joueur avant qu'il ai tapé /dm :happy

++
ZecKo

Titre: Re : DM, encore et toujours....
Posté par: Nikko™ le 10 Mai 2008, 21:56:21
Nn cest pas ca, cest comment remettre son nom de départ.
Exmple, le mec s'appele dupont, quand il fait /dm il devient dupont_DM (ca cets bon je l'ai) mais mtn jaimerai qu'il redevienne dupont quand il sort  :) Mais je n'est pas toruver comment faire ... :(

++
nikko
Titre: Re : DM, encore et toujours....
Posté par: Bayshore le 10 Mai 2008, 22:01:55
http://wiki.sa-mp.com/wiki/Scripting_Functions_Old#strdel ;)

Voila comment faire (attention je ne garantit aps que ça marche vu que je n'ai jamais utiliser cette fonction !) :
Code: (pawn) [Sélectionner]
new pName[16];  GetPlayerName(playerid, pName, sizeof(pName));
strdel(pName, strlen(pName) - 3, strlen(pName));

;)

++
Alexandre

Titre: Re : DM, encore et toujours....
Posté par: Nikko™ le 10 Mai 2008, 22:06:25
Nn ca ne marche pas  :(

++
nikko
Titre: Re : DM, encore et toujours....
Posté par: Bayshore le 10 Mai 2008, 22:18:39
essaye sizeof à la place de strlen

++
Alexandre
Titre: Re : DM, encore et toujours....
Posté par: [StAfF]MaN le 11 Mai 2008, 01:08:34
Non a la fin tu met un SetPlayerName normale, avec les fonctions que t'as déjà défini dans ta commande /dm :

new name[256];
new tmp[256];
new NouveauNom[255];

tmp = strtok(cmdtext, idx);
GetPlayerName(playerid, name, sizeof(name));
format (NouveauNom, sizeof (NouveauNom), "%s_DM", name);
SetPlayerName (playerid, NouveauNom);

ça c'est dans ta commande, maintenant pour quitter ton Dm, dans ta commande pour quitter ton DM tu met :

new name[256];
SetPlayerName(playerid, %s, name);

^^
Titre: Re : DM, encore et toujours....
Posté par: Bayshore le 11 Mai 2008, 10:05:23
 :D J'y avait pas pensé qu'on avait sauvegardé cette variable !

++
Alexandre
Titre: Re : DM, encore et toujours....
Posté par: Nikko™ le 11 Mai 2008, 11:18:01
Nn dsl, ca marche tjr pas  :wall
Cest au niveau de la remise du nom normal...

++
nikko
Titre: Re : DM, encore et toujours....
Posté par: Bayshore le 11 Mai 2008, 11:25:07
Yosh.

En haut de ton script :

Code: (pawn) [Sélectionner]
new OldName[MAX_PLAYERS][16];
En haut de ta commande pour accéder au DM :

Code: (pawn) [Sélectionner]
GetPlayerName(playerid, OldName[playerid], 16);
Dans ta commande pour quitter le DM :

Code: (pawn) [Sélectionner]
SetPlayerName(playerid, OldName[playerid]);
++
Alexandre
Titre: Re : DM, encore et toujours....
Posté par: Nikko™ le 11 Mai 2008, 11:43:49
Nn je comprend pas, aucune erreur mais l'action ne se fait pas en jeu ....  :wall

++
nikko
Titre: Re : DM, encore et toujours....
Posté par: Bayshore le 11 Mai 2008, 12:14:49
Tu as bien placé le GetPlayerName avant le Set ?
Titre: Re : DM, encore et toujours....
Posté par: Nikko™ le 11 Mai 2008, 12:21:42
Ah ouai javais pas remarqué XD att je test

++
nikko

EDIT: Mercii ca marche ;)
Titre: Re : DM, encore et toujours....
Posté par: [StAfF]MaN le 11 Mai 2008, 12:46:12
xD ^^ Bon jeu ;)
Titre: Re : DM, encore et toujours....
Posté par: Nikko™ le 11 Mai 2008, 12:52:54
Lol mercii

++
nikko
Titre: Re : DM, encore et toujours.... [Résolu]
Posté par: Syg le 12 Mai 2008, 23:11:35
Y'a plus simple pour éviter d'avoir à stocker le nom du joueur en global (ça bouffe de la place pour rien) :

Dans la commande pour quitter le DM :

new name[40];
GetPlayerName (playerid, name, sizeof(name));
name = strreplace ("_DM", "", name);
SetPlayerName (playerid, name);

++
Syg
Titre: Re : DM, encore et toujours.... [Résolu]
Posté par: [StAfF]MaN le 12 Mai 2008, 23:13:39
 :blink

J'avais jamais vu ça comme ça lol ^^ Et une idée formidable de plus a retenir ;)
Titre: Re : DM, encore et toujours.... [Résolu]
Posté par: Bayshore le 13 Mai 2008, 07:55:26
Wow, je savais pas que str_replace éxistait en pawn. :-*

++
Alexandre
Titre: Re : DM, encore et toujours.... [Résolu]
Posté par: Nikko™ le 13 Mai 2008, 14:49:11
Ouai pas mal syg  ;)

++
nikko
Titre: Re : Re : DM, encore et toujours.... [Résolu]
Posté par: Bayshore le 13 Mai 2008, 17:22:05
Plop,

au fait :

Y'a plus simple pour éviter d'avoir à stocker le nom du joueur en global (ça bouffe de la place pour rien)

Comment supprimer le contenu d'une variable ? :)

Merci d'avance,
Alexandre.
Titre: Re : DM, encore et toujours.... [Résolu]
Posté par: NatiVe™ le 25 Mai 2008, 12:00:16
La mettre a 0 je crois

NV.

Titre: Re : DM, encore et toujours.... [Résolu]
Posté par: Syg le 26 Mai 2008, 14:19:51
Il n'est pas possible de "supprimer" le contenu d'un variable.
On peut par contre, le remettre à 0 comme le dit Native mais 0 est aussi un contenu.

Pour ce qui est des chaines de caractères, il suffit de mettre 0 dans le premier caractère.
Chaine[0] = 0;
Attention, c'esst bien la valeur 0 qu'il faut mettre, pas le caractère 0.
Donc pas de Chaine[0] = '0'; qui n'a pas du tout la même signification.

Pour les autres tableau, il faut affecter chaque élément du tableau pour le "supprimer".

Sinon, pour le str_replace, il fait partie de DUTILS, il n'est pas en standard dans PAWN.

++
Syg

Titre: Re : DM, encore et toujours.... [Résolu]
Posté par: Nikko™ le 26 Mai 2008, 16:38:54
ah ok je comprend pour le strreplace, yavait des erreurs  ;)
merci

++
nikko