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
-
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
-
vérifie que la ligne qui correspond à celle ligne 1394 soit bien conforme. OU un problème de "playerid"
-
Jai bien esseyer differents truc, mais rien ne va, jai meme demandé a Native, il ne trouve pas XD
++
nikko
-
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.
-
Ahh ok ... Lol
++
nikko
-
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
-
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
-
Tu as oublier de mettre le nom du joueur dans ta variable name ;)
++
ZecKo
-
ZecKo tu veut dire "playerid" ? ???
-
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
-
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
-
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;
}
-
Alors, quand le joueur tape /dm tu doit prendre ses positions ;)
au début de ton script :
New Float:oldX[MAX_PLAYERS], Float:oldY[MAX_PLAYERS], Float:oldZ[MAX_PLAYERS];
new IsInDm[MAX_PLAYERS];
quand le joueur tape /dm :
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 :
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 :
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
-
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
-
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 !) :
new pName[16]; GetPlayerName(playerid, pName, sizeof(pName));
strdel(pName, strlen(pName) - 3, strlen(pName));
;)
++
Alexandre
-
Nn ca ne marche pas :(
++
nikko
-
essaye sizeof à la place de strlen
++
Alexandre
-
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);
^^
-
:D J'y avait pas pensé qu'on avait sauvegardé cette variable !
++
Alexandre
-
Nn dsl, ca marche tjr pas :wall
Cest au niveau de la remise du nom normal...
++
nikko
-
Yosh.
En haut de ton script :
new OldName[MAX_PLAYERS][16];
En haut de ta commande pour accéder au DM :
GetPlayerName(playerid, OldName[playerid], 16);
Dans ta commande pour quitter le DM :
SetPlayerName(playerid, OldName[playerid]);
++
Alexandre
-
Nn je comprend pas, aucune erreur mais l'action ne se fait pas en jeu .... :wall
++
nikko
-
Tu as bien placé le GetPlayerName avant le Set ?
-
Ah ouai javais pas remarqué XD att je test
++
nikko
EDIT: Mercii ca marche ;)
-
xD ^^ Bon jeu ;)
-
Lol mercii
++
nikko
-
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
-
:blink
J'avais jamais vu ça comme ça lol ^^ Et une idée formidable de plus a retenir ;)
-
Wow, je savais pas que str_replace éxistait en pawn. :-*
++
Alexandre
-
Ouai pas mal syg ;)
++
nikko
-
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.
-
La mettre a 0 je crois
NV.
-
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
-
ah ok je comprend pour le strreplace, yavait des erreurs ;)
merci
++
nikko