GTAOnline.net
San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: takeshi le 14 Octobre 2008, 15:50:01
-
<bonjour j'aimerais savoir commant faire pour quand on fais une mauvaise commande genre /pothgail et bah ça mette: pothgail n'est pas une commande valide faites /aide pour voi les commande
Merci d'avance
Ichirou
-
C'est simple.
Dans OnPlayerCommandText a la place du return 0 tu met un return format SendClientMessage(); sans oublier de définir new error[256];
Voila :)
NV.
-
Tu peux me faire un exemple stp paske la j'ai pas compri ^^
-
Te donner un exemple ca serais te donner le code, essaye de réfléchir ;)
NV.
-
Allez stp jsuis nul en pawn^^
-
T'es nul en pawno ? c'est le moment d'apprendre
un indice inspire toi d'un GM stunt très connu ++
-
Salut,
T'es nul en pawno ? c'est le moment d'apprendre
un indice inspire toi d'un GM stunt très connu ++
Avant de poster des conseils comme ça, commence par apprendre le Pawn toi même (de plus ça permettras aux autres créateurs de ne pas se faire voler leurs scripts non donné en open-source , mais bon je vais pas en dire plus ;) )
sinon pour en venir au problème de "Takeshi" :
// Exemple :
public OnPlayerCommandText(playerid, cmdtext[]) // tu démarre ta callback
{
// tu ouvre ta fonction
if(strcmp(cmdtext, "/exit", true) == 0) // si quelqu'un tape /exit
{
SetPlayerInterior(playerid, 0); // L'intérieur "0" est chargé
SetPlayerPos(playerid,-2040.251587, -97.368607, 34.482243); // le joueur se téléporte à cette position
GameTextForPlayer(playerid,"Bonne continuation! ",2000,5); // il reçoit ce message à l'écran
return 1; // retour de la fonction
} // fermeture de la fonction
// Venons en à ce qui t'intéresse :
else // sinon si le joueur tape une mauvaise commande il se passe ça :
{ // ouverture de la fonction
format(string, sizeof(string), "La commande '%s' n'existe pas, pour connaitre les commandes tape : /help.", cmdtext); // le jouer reçoit message
SendClientMessage(playerid, COLOR_SYSTEM, string); // couleur du texte que le joueur va recevoir
}
return 1; // retour de la fonction
} // fermeture de la fonction
Voilà ;) .
Cordialement, J0n.
-
Je ne crois pas que ce que tu as fait soit correct...
NV.
-
je crois que si puisque c'est ce que j'utilise depuis le début
-
Et tu as mit ca a toutes tes commande ?
NV.
-
Non lol, seulement à la fin de la callback
-
Ah ouais je viens de comprendre ton code (difficilement avec toutes tes phrases)
Ouais c'est une autre manière de le faire...
NV.
-
^^ on va dire que mes phrases forment un petit tuto qui permettent de ne pas recopier bêtement le script
-
Hey moi dans mes commandes apres mes commandes j'ai juste mit :
else
{
SendClientMessage(playerid,COLOR_RED,"Cette comande n'existe pas");
}
return 1;
Et sa marche .
Enfaite c'est un peu pareil que jonjon .
Edit: Enfaite meme si la commande est pas fausse sa m'affiche le message ^^
-
Je pense que le plus simple est d'utiliser le code a native, dans ce cas, tu t'emele pas avec tout les "else" et les acolad qui sont souvent a l'origine d'erreurs ...
++
nikko
-
J'utilise la techiniquea native et sa marche donc en plus ses la plus simple :cheers
-
prend la méthode de Native, ensuite tu modifi le code comme il te convient pour créer ce qu'il te plais le plus, rien de plus simple que de commencer PAR le plus simple ^^ il suffit de remplacer le return 0; a la fin de ton public OnPlayerCommandeText par un return SendClientMessage(playerid, COLOR_RED (par exemple), " ton texte");
et voila c'est tout ^^ Fin franchement, en cherchant un peut tu aurais trouvé, te fou pas de nous ^^ :bangin
-
Quel return 0? moi il n'y a qu ça :
//---------------------------<[ OnPlayerCommandText ]>--------------------------------------------------------
//
public OnPlayerCommandText(playerid, cmdtext[])
{
new string[256];
new playermoney;
new sendername[MAX_PLAYER_NAME];
new giveplayer[MAX_PLAYER_NAME];
new playername[MAX_PLAYER_NAME];
new cmd[256];
new tmp[256];
new giveplayerid, moneys, idx;
new idcar = GetPlayerVehicleID(playerid);
cmd = strtok(cmdtext, idx);
-
Tout a la fin de OnplayerCommandtext
a la place de return 0 tu met
format(erreur, sizeof (erreur), "Commande invalide [%s] Tapez /aide",cmdtext);
return SendClientMessage(playerid,COLOR_RED, erreur);
}
error tu la definit en haut de oNplayercommandtext avec new erreur[256];
La si tu comprend pas lol.
Mais essaye de comprendre se que sa fait sa parse que la sa marche mais le principal sse que tu aprend bref la je t'ai beaucoup aidez ;).
Tu sais la commande rechercher sur le forum existe t'aurai trouver tout de suite.
++
-
Ok et la tu lui donne la réponse...
C'est pas comme ca qu'il va apprendre
NV.
-
Je sais mais je veut qu'il reflechisse moi j'ai apres a partir de commandes simple que j'ai rendu de plus complexe en complexe et comme sa on aprend a faire des timer variable se serveur des public des new ect...
D'ailleur si il veut lancer sont serveur faut deja qu'il modifie tout sont script alors il apprendra.
Bref tu as raison mais je pense qu'il ne peut pas l'inventer si il n'arrive deja pas a faire des pickup.
C'est mon point de vue.
Apres je ne connais pas ses capaciter niveua script donc je juge pas :D
-
Regardez mon dernier message il n'y a pas de return 0
-
On ne te parle pas du début du onplayergamemodeinit, on te parle de la fin ...
Regarde a la fin de tes commandes .. il y a un return 0; cest ca que tu doit remplacer ;)
++
nikko
-
Je crois qu'il a pas compris comment se présente un script :
Pour faire TRES simple, tu as des public qui s'applique dans une certaine catégorie, ici c'est OnPlayerCommandeText, donc c'est quand le joueur tape une commande, par exemple /bonjour.
Le public ce présente comme ça :
public OnPlayerCommandText (playerid, cmdtext[])
{
return 0;
}
Dans le cas présent il est vide.
maintenant tu ajoute des conditions, donc tu ajoute des if, des else etc...
public OnPlayerCommandtext (playerid, cmdtext[])
{
if (strcmp(cmdtext, "/aide", true)==0)
{
SendClientmessage(playerid, COLOR_ORANGE, "aide du serveur");
return 1;
}
return 0;
}
Voila un cas de commande très simple, tu peut y voir que le public ENVELOPPE toutes les condition, ici il n'y en a qu'une seul, c'est le if. Tu remarque aussi que le if ENVELOPPE sa propre partie ;)
On a placé un return 1; pour fermer la commande "/aide".
On a placé le return 0; qui appartient au public a la fin, pour que si le joueur tape une commande qui n'exite pas dans ce public, il y est un message d'erreur pré programmé dans pawno "server unknow command"
A partir de la on vois que c'est très simple a changer, en effet, il suffit de remplacer le retourn 0; par un return SendClientMessage avec un format et un new pour qu'un autre message que server unknow command apparaisse a l'écran ;)
Voila j'espère que tu a mieux compris ^^
-
MAIS Reardez mon script aussi !!
//---------------------------<[ OnPlayerCommandText ]>--------------------------------------------------------
public OnPlayerCommandText(playerid, cmdtext[])
{
new string[256];
new playermoney;
new sendername[MAX_PLAYER_NAME];
new giveplayer[MAX_PLAYER_NAME];
new playername[MAX_PLAYER_NAME];
new cmd[256];
new tmp[256];
new giveplayerid, moneys, idx;
new idcar = GetPlayerVehicleID(playerid);
cmd = strtok(cmdtext, idx);
//
T'en voi ou un return 0??
Nul part alors je remplace quoi??
-
ta encore rien compris.
a la fin de ton public le return 0; >:(
Sa fait plusieur fois que ton le dit apres toutes tes commandes pres du public precedent qui doit etre houselevel tu as un return 0;
tu le change et tu met se qu'on ta dit
Puis tu met en haut de ton public
new string[256];
new playermoney;
new sendername[MAX_PLAYER_NAME];
new giveplayer[MAX_PLAYER_NAME];
new playername[MAX_PLAYER_NAME];
new cmd[256];
new tmp[256];
new giveplayerid, moneys, idx;
new idcar = GetPlayerVehicleID(playerid);
cmd = strtok(cmdtext, idx);
new erreur[256];
C'est pas compliquer essaye de chercher.
-
J'ai mis le new erreur ça marche pas^^
-
a mon avis tu na pas compris ce qu'il veulent dire explique ce que tu ne comprend pas
-
Meilleur idée, tu fait ctrl+f dans ton monde, tu cherche "return 0;" une fois que tu l'a trouvé tu ajoute les lignes données ;)
Rien de plus simple.
++
nikko
-
Lool ses pas compliquer pourtant recherche exactement sa:
public HouseLevel(playerid)
Parse que je parie que tu as le GF donc juste au dessus il y a un return 0; tu le remplace par:
format(erreur, sizeof (erreur), "Commande invalide [%s] Tapez /aide",cmdtext);
return SendClientMessage(playerid,COLOR_YELLOW, erreur);
Voila.
++
-
Merci beacoup je fais
}
format(erreur, sizeof (erreur), "Commande invalide [%s] Tapez /aide",cmdtext);
return SendClientMessage(playerid,COLOR_YELLOW, erreur);
}
Puis hop la
C:\Documents and Settings\P Adrien\Bureau\Losangelescity.pwn(25055) : error 017: undefined symbol "erreur"
C:\Documents and Settings\P Adrien\Bureau\Losangelescity.pwn(25055) : error 017: undefined symbol "erreur"
C:\Documents and Settings\P Adrien\Bureau\Losangelescity.pwn(25055) : error 029: invalid expression, assumed zero
C:\Documents and Settings\P Adrien\Bureau\Losangelescity.pwn(25055) : fatal error 107: too many error messages on one line
Compilation aborted.Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase
4 Errors.
-
Regarde mon premier post tu comprendras ;)
(ne lui dite rien svp)
NV.
-
Mais c' est trop facile !!!
Comme a dit Native regarde son premier post.
-
DANS MON ONPLAYERCOMMANDTEXT IL N'Y A PAS DE RETURN 0!!
-
Dans OnPlayerCommandText a la place du return 0 tu met un return format SendClientMessage(); sans oublier de définir new error[256];
C'est aussi simple que ca
NV.
-
Met toiute ton public jusque houselevle sur pastebin et on va voir si il y a pas de return 0;
-
En français ça donne ?
NV.
-
mdr une fonction si simple qui fait trois page nn serieusement regarde mieux le return0 tu la obligatoirement. tkt native on dit rien tu lui a bien expliquer je pense
-
Excuse j'ai ecrit comme n'importe quoi :lmfao
En francais sa donne:
Tu pourrait nous mettre de OnPlayerCommandText a ton public houselevel sur pastebin.
Pour te corriger.
-
A moins d'avoir rajouter un public, son "return 0" doit se trouver juste avant "public OnPlayerSpawn(playerid)", je me trompe ?
Il lui suffit donc juste de rechercher (Ctrl+F) "public OnPlayerSpawn(playerid)" et de regarder juste au dessus !
PS : Je viens de tester, la commande fonctionne parfaitement ! Merci NatiVe™
-
Oui elle est impeque le mieux ses que tu nous le mettre sur pastebien mais normalement cherche un peu et tu vas trouver c'est vraiment pas compliquer.
++