GTAOnline.net
San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: ShaDowxx™ le 27 Novembre 2010, 08:12:24
-
Bonjour, je voudrais savoir comment on peut faire cette commande
* Organisateur :
Vous le savez ?
Et si vous pouvez aussi le bloquer s'il vous plaît merci.
-
Peut tu être plus préci,
Sa serais pour une faction/team ?
-
Salut à vous =DD
Tiens julien essaye de faire avec sa:
if (strcmp(cmd, "/admins", true) == 0) // By Jimmy =D
{
if(IsPlayerConnected(playerid))
{
SendClientMessage(playerid, COLOR_VERTCLAIR, "|____ ~~ Admins~~La Vie De Rêve~~ ____|");
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i))
{
if(PlayerInfo[i][pAdmin] >= 1 && PlayerInfo[i][pAdmin] <= 1338 || PlayerInfo[i][pTester] >= 1)
{
new admtext[64];
if(PlayerInfo[i][pAppearList] == 1)
{
if(PlayerInfo[i][pAdmin] == 1338) { admtext = "Oranisateur"; }
else { admtext = "Rang inconnu"; }
}
GetPlayerName(i, sendername, sizeof(sendername));
if(PlayerInfo[i][pAdminDuty] == 0 && PlayerInfo[i][pAppearList] == 1)
{
format(string, sizeof(string), "%s - %s", admtext, sendername);
SendClientMessage(playerid, COLOR_WHITE, string);
}
else if(PlayerInfo[i][pAdminDuty] == 1 && PlayerInfo[i][pAppearList] == 1)
{
format(string, sizeof(string), "%s - %s En Service", admtext, sendername);
SendClientMessage(playerid, COLOR_JAUNE, string);
}
}
}
}
}
return 1;
}
-
Non, il ne veut pas ça. Il veut un truc du genre /rcon say mais au lieu d'avoir Admin il veut organisateur ! Exemple: /say Je suis Orga et ça affichera: *Organisateur: Je suis Orga.
-
Salut,
julien donne un titre plus clair à ton sujet, sinon je vais devoir :lock
merci de ta coopération.
++Sim++
-
Ok ok !
Bon je vais faire un meilleur truc pour mieux comprendre :
Bonjour, je voudrais s'il vous plaît une commande qui permet de parler comme ceci :
" Organisateur : "
Or, je n'arrive pas à faire ce que je veut.
-
Tu veux une commande ou quand on parle directement dans le tchat ?
Si tu veux une commande, dis moi quel système de commande utilise tu ?
- le classique : tes commandes dans onplayercommandtext
- la version avec zcmd, dcmd etc..
- si tu utilise sscanf ou strcmp
-
T'a compris, je veut un commande pour que sa s'affiche dans le tchat
-
Oui j'ai compris ce que tu veux, mais toi tu ne m'a pas compris..
Si tu veux une commande, dis moi quel système de commande utilise tu ?
- le classique : tes commandes dans onplayercommandtext
- la version avec zcmd, dcmd etc..
- si tu utilise sscanf ou strcmp
-
le classique : tes commandes dans onplayercommandtext
-
Voilà pour toi, j'ai fais extrêmement simple.
http://pastebin.gtaonline.fr/pastebin.php?show=953 (http://pastebin.gtaonline.fr/pastebin.php?show=953)
-
Je crois qu'il voulais une commande du style : /parler [message], non ?
-
Il aura juste à le déplacer dans OnPlayerCommandText et d'utiliser strtok si c'est cela qu'il veut !
-
@chneubeul : C'est ça que je voulais
@ Xartrick : Merci pour ton script, il m'a été très utile ! :)
-
Parfait alors, bonne chance !
-
Salut à vous =D
Julien c'est un peu compliqué pour srtok:
if(strcmp(cmd, "/organisateur", true) == 0 || strcmp(cmd, "/orga", true) == 0)
{
if(IsPlayerConnected(playerid))
{
while ((idx < length) && (cmdtext[idx] <= ' '))
{
idx++;
}
new offset = idx;
new result[64];
while ((idx < length) && ((idx - offset) < (sizeof(result) - 1)))
{
result[idx - offset] = cmdtext[idx];
idx++;
}
result[idx - offset] = EOS;
new sendername[MAX_PLAYERS_NAME];
new result[120];
format(string, sizeof(string), "* Organisateur: %s",result);
SendClientMessageToAll(COLOR_WHITE, string);
}
return 1;
}
J'espère t'avoir aidé.
-
super simple a la facon rp avec result , moi j'te reduis ça en 3 ligne mdr
Mdr.. Et bah vasy
-
vous vous prenez la tête pour rien pas besoin de sscanf ou autre, seul strcmp suffit ^^
if( strcmp( "/organisateur", cmdtext, true, 13 ) == 0 )
{
if( strlen( cmdtext[ 13 ] ) == 0 )
return SendClientMessage( playerid, 0xFF0000FF, "/organisateur [Texte]" );
new name[ MAX_PLAYER_NAME ] = "";
GetPlayerName( playerid, name, MAX_PLAYER_NAME );
format( cmdtext, 128, "L'organisateur %s dit %s", name, cmdtext[14] );
SendClientMessageToAll( 0xFFFFFFFF, cmdtext );
return 1;
}
-
Je préfère utiliser strtok personnellement.
-
J'utilise plus la méthode classique c'pour ça :)
puis strcmp c'est trop long, vive sscanf :D
-
Salut,
Je préfère utiliser strtok personnellement.
je me disait la même chose avant, d'ailleurs j'ai codé une version de strtok plus rapide et sécuritaire (disponible ICI (http://www.gtaonline.fr/forums/index.php/topic,2149.90.html), plus bas dans la page, et d'ailleurs tu peut enlever le return de la fonction...).
Sauf que je me suis rendu compte que cette fonction était pas très recommandé (pas une bonne idée de retourner une chaine), et relativement lente, principalement car il fallait encore traiter les données par la suite. En utilisant sscanf, on évite de devoir traiter les données manuellement comme la fonction le fait déjà.
Niveau système de commandes, pour avoir essayé la plupart des systèmes, mon préféré est de loin zcmd. Il est simple d'utilisation, permet de faire pratiquement tout et a un avantage remarquable: il ne ralentit pas de façon importante avec le nombre de commandes.
++Sim++
-
Merci à Sim pour cette remarque, je vais essayer d'utiliser zcmd.
-
J'aime bien le code à sasuke mais le problème c'est que sa marche pas, j'ai mon return qui marque que la commande n'existe pas :(
-
T'es sur ? car chez moi ça fonctionne parfaitement la preuve
-
Désolé mais chez moi c'est une commande inconnue. J'ai juste modifié le nom de la commande aussi en /psay (pilote parler)
(j'ai un autre truc aussi c'est pour les voitures en txd dans le dossier vehicle dans scriptfiles :
C:\Users\Julien\Downloads\samp\gamemodes\AviationL.pwn(89) : error 012: invalid function call, not a valid address
C:\Users\Julien\Downloads\samp\gamemodes\AviationL.pwn(89) : warning 215: expression has no effect
C:\Users\Julien\Downloads\samp\gamemodes\AviationL.pwn(89) : error 001: expected token: ";", but found ")"
C:\Users\Julien\Downloads\samp\gamemodes\AviationL.pwn(89) : error 029: invalid expression, assumed zero
C:\Users\Julien\Downloads\samp\gamemodes\AviationL.pwn(89) : fatal error 107: too many error messages on one line
*Tousse, tousse*)
-
bah c'est normal si tu as changé le nom ^^
essai de comprendre le code et tu verra qu'il y a que quelque valeur à changer pour que ça fonctionne
-
J'ai vu comment ça marche or la configuration est dur ! ^^ Merci de m'avoir éclairé
-
vous vous prenez la tête pour rien pas besoin de sscanf ou autre, seul strcmp suffit ^^
if( strcmp( "/organisateur", cmdtext, true, 13 ) == 0 )
{
if( strlen( cmdtext[ 13 ] ) == 0 )
return SendClientMessage( playerid, 0xFF0000FF, "/organisateur [Texte]" );
new name[ MAX_PLAYER_NAME ] = "";
GetPlayerName( playerid, name, MAX_PLAYER_NAME );
format( cmdtext, 128, "L'organisateur %s dit %s", name, cmdtext[14] );
SendClientMessageToAll( 0xFFFFFFFF, cmdtext );
return 1;
}
cette methode est la plus rapide connut en pawn a ce jour sa ne sert a rien le strtok dans ce genre de commande il y a meme un tuto de Yless sur le forum SAMP qui explique pourquoi dans ce genre de commande sa ne sert a rien d'utiliser le strtok ou le sscanf
-
Sinon quand je regarde la commande /organisateur il y en à 13 (+ le / qui compte).
128 qui doit limitée le nombre de caractère et le 14 je ne sais pas à quoi il sert.
-
C'est simple, la commande /organisateur fait 13 caractères donc si on ne trouve que 13 caractères, cela voudra dire que aucun argument n'aura était donné, et là, tu peux afficher la syntaxe par exemple.
-
je ne sais pas se que veut dire le 14
-
Le 14 c'est la commande + un espace donc on prend le texte qui suit l'espace ^^
-
Donc je n'ai pas besoins de le changé ?
-
bah si, relis un peu ce que je dis ^^
-
J'ai changer le 14 par 5 c'est bon on peut : -> :lock <-
-
Je suis content pour toi :)
Je laisse le topic ouvert on ne sait jamais si quelqu'un veut intervenir ^^