GTAOnline.net
San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: koukou777 le 07 Août 2009, 16:27:53
-
Bonjour,
J'ai un serveur Race, et j'aimerais avoir la commande /slap svp.
Pour se mettre admin il faut juste se connecte en rcon.
Merci bien. (( Le serveur est spécial race, rien d'autre))
-
Tu peux le scripter toi même.
Je te donne un bon indice.
if(strcmp(cmd, "/slap", true) == 0)
{
if(IsPlayerConnected(playerid))
{
tmp = strtok(cmdtext, idx);
if(!strlen(tmp))
{
SendClientMessage(playerid, COLOR_GRAD2, "UTTILISATION: /slap [playerid/PartOfName]");
return 1;
}
new playa;
new Float:x, Float:y, Float:z;
playa = ReturnUser(tmp);
if(IsPlayerAdmin(playerid))
{
if(IsPlayerConnected(playa))
{
if(playa != INVALID_PLAYER_ID)
{
//Prend la position du joueur GetPlayerPos
//PlaceLejoueur à Z+5 SetPlayerPos
//Joue un son
}
}
}
else
{
SendClientMessage(playerid, COLOR_GRAD1, "Vous n'êtes pas autoriser à utiliser cette commande !");
}
}
return 1;
}
-
Hum, moi et le scriptage, sa fait 2 :S
-
Ici, on ne donne pas, on aide.
Et je t'es déjà beaucoup aider.
Bref, je vais quand même te le donner en t'expliquant :
GetPlayerPos(playa, x, y, z);//Prend la position du joueur
SetPlayerPos(playa, x, y, z+5);//Le place au même endroit mais 5 metre plus haut (Z étant la hauteur).
PlayerPlaySound(playa, 1130, x, y, z+5);// joue le son ID1130 à la position du joueur
Donc, le résultat :
if(strcmp(cmd, "/slap", true) == 0)//Si la commande est éxécutée
{
if(IsPlayerConnected(playerid))//Si le joueur est connécté
{
tmp = strtok(cmdtext, idx);
if(!strlen(tmp))// Si la syntaxe est mauvaise
{
SendClientMessage(playerid, COLOR_GRAD2, "UTTILISATION: /slap [playerid/PartOfName]");//envoie le message
return 1;
}
new playa;//Définie le joueur qui va être slapé.
new Float:x, Float:y, Float:z;//définie X, Y, et Z.
playa = ReturnUser(tmp);
if(IsPlayerAdmin(playerid))//Si le joueur est admin
{
if(IsPlayerConnected(playa))//si le joueur slapé est connecté
{
if(playa != INVALID_PLAYER_ID)//Si l'ID du joueur n'est pas mauvaise
{
GetPlayerPos(playa, x, y, z);//Prend la position du joueur
SetPlayerPos(playa, x, y, z+5);//Le place au même endroit mais 5 metre plus haut (Z étant la hauteur).
PlayerPlaySound(playa, 1130, x, y, z+5);// joue le son ID1130 à la position du joueur
}
}
}
else//Ou alors (si il n'est pas admin)
{
SendClientMessage(playerid, COLOR_GRAD1, "Vous n'êtes pas autoriser à utiliser cette commande !");//affiche ce message
}
}
return 1;
}
-
t as commande est un peu bizarre dans la premiere condition tu regarde si le joueur qui tape la cmd est connecter( c' est un peu bete il est connecter puisque il tape la cmd).
Voila la bonne est simple commande
if(strcmp(cmd, "/slap", true) == 0)
{
tmp = strtok(cmdtext, idx);
if(!strlen(tmp))
{
return SendClientMessage(playerid, COLOR_GRAD2, "UTTILISATION: /slap playerid");
}
new playa = strval(tmp);
new Float:x, Float:y, Float:z;
if(!IsPlayerAdmin(playerid))
{
return SendClientMessage(playerid, COLOR_GRAD1, "Vous n'êtes pas autoriser à utiliser cette commande !");
}
if(IsPlayerConnected(playa))
{
GetPlayerPos(playa, x, y, z);//Prend la position du joueur
SetPlayerPos(playa, x, y, z+5);//Le place au même endroit mais 5 metre plus haut (Z étant la hauteur).
PlayerPlaySound(playa, 1130, x, y, z+5);// joue le son ID1130 à la position du joueur
}
return 1;
}
Et la ca doit etre bon (et optimiser aussi )
-
Oui, enfin bon, j'ai reprit ca de mon LARP, et je l'ai pas modifié.
-
Salut,
pour ce qui est d'optimiser, porté à faire 2 ou 3 changements dans l'ordre d'exécution des différentes parties de la commande...
- faire le test IsPlayerAdmin en premier
- ensuite récupération de l'ID du joueur à punir
- ensuite tester si ce joueur est connecté (envoyer un message cas échéant)
- punir + message
ce qui donne approximativement ceci:
if(strcmp(cmd, "/slap", true) == 0)
{
if(!IsPlayerAdmin(playerid))
{
SendClientMessage(playerid, 0xFF0000FF/*couleur rouge*/, "Vous n'êtes pas autoriser à utiliser cette commande !");
return 1;
}
/*ajouter new tmp[128], idx; si les variables n'est pas déjà déclarée*/ tmp = strtok(cmdtext, idx);
//ps. ici on connait déjà la position du paramètre, on peut donc éviter l'appel à strtok en utilisant: cmdtext[6]
if(!strlen(tmp))//strlen est très rapide si le string est court, mais lent s'il est long, il est plus judicieu d'utiliser if(!cmdtext[6]) ou if(tmp[0] == 0)
{
SendClientMessage(playerid, COLOR_GRAD2, "UTTILISATION: /slap playerid");
return 1;
}
new playa = strval(tmp);//rien à dire ici
if(IsPlayerConnected(playa))
{
new Float:x, Float:y, Float:z;
GetPlayerPos(playa, x, y, z);//Prend la position du joueur
SetPlayerPos(playa, x, y, z+5);//Le place au même endroit mais 5 metre plus haut (Z étant la hauteur).
PlayerPlaySound(playa, 1130, x, y, z+5);// joue le son ID1130 à la position du joueur
GetPlayerName(playa, tmp, MAX_PLAYER_NAME);
format(tmp, sizeof(tmp),"Tu as slappé le joueur %s (ID: %d)", tmp, playa);
SendClientMessage(playerid, 0x00FF00FF, tmp);//on envoie un message
}
else
{
SendClientMessage(playerid, 0xFF0000FF, "Ce joueur n'est pas connecté!");
}
return 1;
}
voilà
++Sim++