GTAOnline.net
San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: Este le 17 Juin 2011, 00:42:06
-
Bonjour, Bonsoir bon voila je veut testé une commande mais je ne sais pas ou la mettre (a quel endroit précis) donc je vien ici en espérant être aider. :laugh
Je veut faire une commande pour qu'un Admin puisse téléporté un joueur a un endroit et comme je débute en PAWN je sais pas comment faire. :...
mais pour la commandes je pence qu'on peut s'inspiré de la commande "/unjail id"
/* Command /unjail */
else if (!strcmp(cmd, "/unjail", true))
{
new pid, tmpp[256];
tmpp = strtok(cmdtext, idx);
if (!strlen(tmpp))
{
SendClientMessage(playerid, COLOR_GREEN, "UTILISE: /unjail [id]");
return 1;
}
pid = strval(tmpp);
if (!(IsPlayerConnected(pid)))
{
SendClientMessage(playerid, COLOR_RED, "CE JOUEUR N'EST PAS CONNECTÉ.");
return 1;
}
GetPlayerName(pid, pidName, sizeof(pidName));
format(tmpp, sizeof(tmpp), "Tu as fait sortir %s (ID:%d) de prison.",pidName,pid);
SendClientMessage(playerid, 0xAA3333AA, tmpp);
SetPlayerInterior(pid,0);
SetPlayerPos(pid,1546.2803,-1675.6632,13.5620);
TogglePlayerControllable(pid,1);
GetPlayerName(playerid, AdminName, sizeof(AdminName));
format(tmpp, sizeof(tmpp), "liberer par %s",AdminName);
GameTextForPlayer(pid, tmpp, 1000,1)
voila le code le morceau de scritp en d'origine (script RAS by R@F)
Mais bien sur je sais aussi qui faut changer la position et la commande.
PS: je n'es pas l’habitude de demander de l'aide donc je m'excuse si je me suis mal exprimé.
++ Este
-
Salut,
Plutôt que d'utiliser strtok, tu devrais utiliser zcmd et sscanf, ce qui est plus simple ^^ (Voir le tuto de FuSion)
Si je comprends bien, tu voudrais une commande /atp [ID] [X] [Y] [Z] ?
-
Salut,
Ok merci je go voir le tuto de suite :) . :D
Double post
Re, je m'excuse du double post :(
Oui tu as comprit se que je voulais faire. :D
Tu vas peut être dire que je suis un noob xD. Mais a partir du tuto de FuSion je n'arriverai pas a faire se que j'ai dit xD .
Mais par hasard tu n'aurais pas un exemple de commande sous la main :$ . A vrai dire a par du copier coller et modifié a ma guise je sais rien faire d'autre :( .
Ou alors simplement me dire ou je doit mettre la commande si dessus (premier post) dans quel partie.
genre les commandes de téléportation tu les mais la public OnPlayerCommandText(playerid, cmdtext[])
Merci d'avance
++ Este
-
Alors déjà il faut que tu te procures les includes zcmd et sscanf (dans AdminOnDuty par exemple, Sim les a inclus).
Ensuite, tu crée ceci, hors de toute callback (donc pas dans OnPlayerCommandText) :
CMD:ateleport(playerid,params[])
{
return 1;
}
Ensuite là dedans, tu créées les variables que l'admin doit utiliser (donc ici, l'id du joueur et sa location X,Y,Z si la commande est /ateleport [id] [X] [Y] [Z])
CMD:ateleport(playerid,params[])
{
new id;
new Float:X,Float:Y,Float:Z;
return 1;
}
Après, tu utilises sscanf qui va vérifier automatiquement si ce que tu as entré correspond bien à "ifff", c'est à dire un entier (l'ID du joueur à téléporter) et 3 flottants (les positions X,Y et Z)
CMD:ateleport(playerid,params[])
{
new id;
new Float:X,Float:Y,Float:Z;
if(sscanf(params,"ifff",id,X,Y,Z)) return 0; // Ca, c'est si ce que le joueur a entré ne correspond pas (lettres à la place, ou param manquant). Tu peux mettre un SendClientMessage à la place du 0.
else
{
SetPlayerPos(id,X,Y,Z); // Au lieu de playerid, on met id (la variable). Sinon c'est le joueur qui a tapé la commande qui sera téléporté.
SendClientMessage(playerid,0xFFFFFFFF,"Le joueur a été téléporté");
SendClientMessage(id,"Tu as été téléporté");
}
return 1;
}
Donc dans le "else", on met ce qui correspond si ce que le joueur a entré correspond bien à ce qui était attendu par la commande. sscanf et zcmd remplacent tout ce qui est strtok, etc. (Et c'est peut être pas plus mal sachant que le code pour 4 paramètres doit être sacrément long)
EDIT : N'oublie pas de vérifier si le joueur qui tape la commande (playerid) est admin, et que le joueur qui doit être téléporté (id) est bien connecté ! Pour ça, c'est pas très dur alors je te laisse faire.
Je ferai peut être un tuto en .pdf là dessus dans la semaine ^^
++
-
Voila j'ai essayé mais je n'arrive pas a mettre le screen :wall
voila j'ai quoi quand je compile
v1.2.pwn(909) : warning 203: symbol is never used: "ateleport"
et voila la commande
CMD:ateleport(playerid,params[])
{
new id;
new Float:2910.03417969,Float:-762.74932861,Float:10.65703773;
if(sscanf(params,"ifff",id,2910.03417969,-762.74932861,10.65703773)) return 0; // Ca, c'est si ce que le joueur a entré ne correspond pas (lettres à la place, ou param manquant). Tu peux mettre un SendClientMessage à la place du 0.
else
{
SetPlayerPos(id,2910.03417969,-762.74932861,10.65703773); // Au lieu de playerid, on met id (la variable). Sinon c'est le joueur qui a tapé la commande qui sera téléporté.
SendClientMessage(playerid,0xFFFFFFFF,"Le joueur a été téléporté");
SendClientMessage(id,"Tu as été téléporté par un Admin/Modo.");
}
return 1;
}// ici se trouve la ligne 908
voila je n'es pas de ligne 909 je ne comprend pas :S
++ Este
-
new Float:2910.03417969,Float:-762.74932861,Float:10.65703773;
Non, tu dois laisser Float:X, Float:Y, Float:Z, leur valeur sera celle que l'admin va leur donner.
Et ici, laisse X,Y,Z aussi ^^
if(sscanf(params,"ifff",id,X,Y,Z))
++
PS : A moins que tu veux que l'endroit où tu téléportes le joueur soit toujours le même ? ^^
Dans ce cas, tu peux faire ça :
CMD:ateleport(playerid,params[])
{
new id;
if(sscanf(params,"i",id)) return 0; // Ca, c'est si ce que le joueur a entré ne correspond pas (lettres à la place, ou param manquant). Tu peux mettre un SendClientMessage à la place du 0.
else
{
SetPlayerPos(id,Coordonnées X,Y,Z du téléport); // Au lieu de playerid, on met id (la variable). Sinon c'est le joueur qui a tapé la commande qui sera téléporté.
SendClientMessage(playerid,0xFFFFFFFF,"Le joueur a été téléporté");
SendClientMessage(id,"Tu as été téléporté par un Admin/Modo.");
}
return 1;
}// ici se trouve la ligne 908
-
Ok Mais alors les coordonné de la téléportation je doit les mettre ou ?
++ Este
-
SetPlayerPos(playerid,Coordonnées X,Les Y,Et Z du téléport);
Tu remplace le X Y et Z par les coordonnées.
-
alors voila hier j'étais fatigué donc j'arrivé a rien et maintenant j'ai réussi a faire la commande que je voulais :D
/* Command /unjail */
else if (!strcmp(cmd, "/unjail", true))
{
new pid, tmpp[256];
tmpp = strtok(cmdtext, idx);
if (!strlen(tmpp))
{
SendClientMessage(playerid, COLOR_GREEN, "UTILISE: /unjail [id]");
return 1;
}
pid = strval(tmpp);
if (!(IsPlayerConnected(pid)))
{
SendClientMessage(playerid, COLOR_RED, "CE JOUEUR N'EST PAS CONNECTÉ.");
return 1;
}
GetPlayerName(pid, pidName, sizeof(pidName));
format(tmpp, sizeof(tmpp), "Tu as fait sortir %s (ID:%d) de prison.",pidName,pid);
SendClientMessage(playerid, 0xAA3333AA, tmpp);
SetPlayerInterior(pid,0);
SetPlayerPos(pid,1546.2803,-1675.6632,13.5620);
TogglePlayerControllable(pid,1);
GetPlayerName(playerid, AdminName, sizeof(AdminName));
format(tmpp, sizeof(tmpp), "liberer par %s",AdminName);
GameTextForPlayer(pid, tmpp, 1000,1);
return 1;
}
voila la commande d'origine.
et maintenant voila la commande modifié testé et qui fonctionne :D/* Command /atplv */
else if (!strcmp(cmd, "/atplv", true))
{
new pid, tmpp[256];
tmpp = strtok(cmdtext, idx);
if (!strlen(tmpp))
{
SendClientMessage(playerid, COLOR_GREEN, "UTILISE: /atplv [id]");
return 1;
}
pid = strval(tmpp);
if (!(IsPlayerConnected(pid)))
{
SendClientMessage(playerid, COLOR_RED, "CE JOUEUR N'EST PAS CONNECTÉ.");
return 1;
}
GetPlayerName(pid, pidName, sizeof(pidName));
format(tmpp, sizeof(tmpp), "Tu as téléporté %s (ID:%d).",pidName,pid);
SendClientMessage(playerid, 0xAA3333AA, tmpp);
SetPlayerInterior(pid,0);
SetPlayerPos(pid,2024.06896973,1342.97998047,10.53162193);
TogglePlayerControllable(pid,1);
GetPlayerName(playerid, AdminName, sizeof(AdminName));
format(tmpp, sizeof(tmpp), "téléporté pas un Admin ou un Modo",AdminName);
GameTextForPlayer(pid, tmpp, 1000,1);
return 1;
}
Donc voila Gilux excuse moi de t'avoir dérangé si c'est le cas
++ Este
-
Pas de soucis ;)