GTAOnline.net
San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: abox le 30 Juillet 2009, 16:20:45
-
Bonjour,
Il y a peu, j'ai remarqué que sur mon GM, je n'avais aucune commande pour faire rentrer les gens de force dans un véhicule quand on est conducteur.
Donc j'ai cherché un peu partout pour savoir comment en faire une, par exemple, il y avait un filterscript dont une commande le permettait mais comme par hasard, le lien était mort (le thread aussi d'ailleurs).
Donc je vous demande quelques explications a propos de cette fameuse commande (que seul les membres de factions pourraient utiliser bien sûr).
Ah petites précisions : Il faut être dans la voiture pour l'utiliser et il faut qu'il y ait une place de libre, il faut que le joueur qu'on veut faire rentrer soit assez près du véhicule et il faut faire partie d'une faction.
Merci d'avance a ceux qui répondront.
Cordialement,
Un petit débutant en Pawn =)
-
Salut , je ne peux pas t'aider , mais c'est vrai que sa pourrais etre interessant pour les "police"
Je surveille =) et cherche de mon coté
-
Ca se fait pas trop ici de faire donner sans expliquerr, mais bon, je l'ai fait il y a assez longtemps, et j'ai un peu la flemme :laugh
if(strcmp(cmd, "/envoiture", true) == 0) // by Ellis
{
if(IsPlayerConnected(playerid))
{
if(!IsACop(playerid))
{
SendClientMessage(playerid, COLOR_GRAD1, "Vous n'êtes pas un policier !");
return 1;
}
tmp = strtok(cmdtext, idx);
if(!strlen(tmp))
{
SendClientMessage(playerid, COLOR_GRAD2, "Uttilisation: /envoiture [playerid/PartOfName]");
return 1;
}
new newcar = GetPlayerVehicleID(playerid);
new playa;
playa = ReturnUser(tmp);
if(IsACopCar(newcar) || IsNgCar(newcar) || IsAnFbiCar(newcar))
{
if(IsPlayerConnected(playa))
{
if(playa != INVALID_PLAYER_ID)
{
new Float:x, Float:y, Float:z;
GetPlayerPos(playa,x,y,z);
if(PlayerToPoint(5, playerid, x, y, z))
{
PutPlayerInVehicle(playa,newcar,1);
GetPlayerName(playa, giveplayer, sizeof(giveplayer));
GetPlayerName(playerid, sendername, sizeof(sendername));
format(string, sizeof(string), "* %s met en voiture %s dans son véhicule.", sendername ,giveplayer);
ProxDetector(30.0, playerid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE);
}
else
{
SendClientMessage(playerid, COLOR_GREY, "Ce joueur n'est pas près de vous.");
}
}
}
}
else
{
SendClientMessage(playerid, COLOR_GRAD1, "Vous n'êtes pas près d'un véhicule de police !");
}
}
return 1;
}
-
Mais comment faire poru choisir la place ?
Si on veux le mettre devant, derriere a gauche ou derriere a droite ? ;D
-
regarde le tableu ci dessous
0 1
3 4
mais attention avec 3 4 le serveur crash facilement
-
Oui mais is la on fait /envoiture ID 3
S afera rien, on doit le mettre ou ?
-
ici PutPlayerInVehicle(playa,newcar,1); la le 1 veut dire place avant passager
-
Ok merci mais comment on fait pour qu'on puisse choisir ?
-
dans ce cas la tu rajoute dans ta commande qui devient /envoiture [playerid/PartOfName] [place 1-2-3]
-
Mais attention a ne pas mettre une place déja prise sinon crash il me semble.
++
-
Et le test sur les voiture a 2 place, crash quand il sort, faut l'éjecter et tu crash.
-
if(strcmp(cmd, "/envoiture", true) == 0) // by Ellis
{
if(IsPlayerConnected(playerid))
{
if(!IsACop(playerid))
{
SendClientMessage(playerid, COLOR_GRAD1, "Vous n'êtes pas un policier !");
return 1;
}
tmp = strtok(cmdtext, idx);
if(!strlen(tmp))
{
SendClientMessage(playerid, COLOR_GRAD2, "Uttilisation: /envoiture [playerid/PartOfName] [Place 1-2-3-4]");
return 1;
}
new newcar = GetPlayerVehicleID(playerid);
new playa;
playa = ReturnUser(tmp);
if(IsACopCar(newcar) || IsNgCar(newcar) || IsAnFbiCar(newcar))
{
if(IsPlayerConnected(playa))
{
if(playa != INVALID_PLAYER_ID)
{
new Float:x, Float:y, Float:z;
GetPlayerPos(playa,x,y,z);
if(PlayerToPoint(5, playerid, x, y, z))
{
PutPlayerInVehicle(playa,newcar,1);
GetPlayerName(playa, giveplayer, sizeof(giveplayer));
GetPlayerName(playerid, sendername, sizeof(sendername));
format(string, sizeof(string), "* %s met en voiture %s dans son véhicule.", sendername ,giveplayer);
ProxDetector(30.0, playerid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE);
}
else
{
SendClientMessage(playerid, COLOR_GREY, "Ce joueur n'est pas près de vous.");
}
}
}
}
else
{
SendClientMessage(playerid, COLOR_GRAD1, "Vous n'êtes pas près d'un véhicule de police !");
}
}
return 1;
}
Ce code est bon ?
-
Si j'en crois ce que je vois, magrer que je ne peux pas plus t'aider, rajouter [placer 1 - 2 - 3] a SendClientMessage, c'est comme jeter un cailloux dans l'espace en esperant que le soleil te tombe dessus, sa ne peux pas marcher.
Je ne peux pas te donner d'indication de code, mais je peux juste te dire que sa ne marche pas.
Tu as beau rajouter [placer 1 - 2 - 3] , la seul chose que tu auras, c'est la phrase avec [placer 1 - 2 - 3], et rien d'autre.
Je ne peux pas t'aider, mais juste te prévenir que cela ne fonctionnera pas
-
=O elle date c'est discuss', je l'avais completement oubliée!
Je vous donne ma commande =D :
if(strcmp(cmd, "/pullincar", true) ==0 || strcmp(cmd, "/mvg", true) == 0)
{
new suspect = GetClosestPlayer(playerid);
if(PlayerInfo[playerid] [pMember] <= 1 || PlayerInfo[playerid] [pLeader] <= 1)
{
if(GetDistanceBetweenPlayers(playerid,suspect) < 15)
{
tmp = strtok(cmdtext, idx);
if (!strlen(tmp))
return SendClientMessage(playerid, COLOR_YELLOW, "USAGE: /mvg [player id] [1/2/3]");
new person = strval(tmp);
tmp = strtok(cmdtext, idx);
if (!strlen(tmp))
return SendClientMessage(playerid, COLOR_YELLOW, "USAGE: /mvg [player id] [1/2/3]");
new seat = strval(tmp);
new Float:pos[6];
GetPlayerPos(playerid, pos[0], pos[1], pos[2]);
GetPlayerPos(person, pos[3], pos[4], pos[5]);
if (floatcmp(floatabs(floatsub(pos[0], pos[3])), 10.0) != -1 &&
floatcmp(floatabs(floatsub(pos[1], pos[4])), 10.0) != -1 &&
floatcmp(floatabs(floatsub(pos[2], pos[5])), 10.0) != -1) return false;
PutPlayerInVehicle(person, GetPlayerVehicleID(playerid), seat);
}
else
{
SendClientMessage(playerid, COLOR_GREY, "Vous êtes trop loin du Joueur !");
}
}
else
{
SendClientMessage(playerid, COLOR_GREY, "Vous n'êtes pas un Gang/Mafia !");
}
return 1;
}
if(strcmp(cmd, "/pullincar", true) ==0 || strcmp(cmd, "/mvp", true) == 0)
{
new suspect = GetClosestPlayer(playerid);
if(PlayerInfo[playerid][pMember]== 2 || PlayerInfo[playerid][pLeader] == 2 || PlayerInfo[playerid][pMember]== 1 || PlayerInfo[playerid][pLeader] == 1)
{
if(GetDistanceBetweenPlayers(playerid,suspect) < 15)
{
tmp = strtok(cmdtext, idx);
if (!strlen(tmp))
return SendClientMessage(playerid, COLOR_YELLOW, "USAGE: /mvp [player id] [1/2/3]");
new person = strval(tmp);
tmp = strtok(cmdtext, idx);
if (!strlen(tmp))
return SendClientMessage(playerid, COLOR_YELLOW, "USAGE: /mvp [player id] [1/2/3]");
new seat = strval(tmp);
new Float:pos[6];
GetPlayerPos(playerid, pos[0], pos[1], pos[2]);
GetPlayerPos(person, pos[3], pos[4], pos[5]);
if (floatcmp(floatabs(floatsub(pos[0], pos[3])), 10.0) != -1 &&
floatcmp(floatabs(floatsub(pos[1], pos[4])), 10.0) != -1 &&
floatcmp(floatabs(floatsub(pos[2], pos[5])), 10.0) != -1) return false;
PutPlayerInVehicle(person, GetPlayerVehicleID(playerid), seat);
}
else
{
SendClientMessage(playerid, COLOR_GREY, "Vous êtes trop loin du Joueur !");
}
}
else
{
SendClientMessage(playerid, COLOR_GREY, "Vous n'êtes pas un Policier !");
}
return 1;
}
(a placer dans OnCommandText après les news (si vous en avez mis dans le public).
-
Que représente cette ligne ?
if(PlayerInfo[playerid] [pMember] <= 1 || PlayerInfo[playerid] [pLeader] <= 1)
Le 2 ème code a l'air de pouvoir fonctionner.
PS : 2 ( ou plus ) commande du même nom, font buger la commande. Donc quand tu la tapes, tu peux juste t'attendre à ne rien n'obtenir de celle-ci
-
PS : 2 ( ou plus ) commande du même nom, font buger la commande. Donc quand tu la tapes, tu peux juste t'attendre à ne rien n'obtenir de celle-ci
Oui j'avais même pas remarquer et indente ton code aussi ;)
-
Que représente cette ligne ?
if(PlayerInfo[playerid] [pMember] <= 1 || PlayerInfo[playerid] [pLeader] <= 1)
Le 2 ème code a l'air de pouvoir fonctionner.
PS : 2 ( ou plus ) commande du même nom, font buger la commande. Donc quand tu la tapes, tu peux juste t'attendre à ne rien n'obtenir de celle-ci
Cela représente si le joueur est membre d'une faction N°1 ou + OU Leader de la faction N°1 ou+, il peut utiliser la commande, sinon il peut pas.
Et je sais pas pourquoi chez vous ca fonctionne pas mais chez moi ca fonctionne parfaitement.
-
La première commande ne sert a rien ( vu que de ton point de vue ), les 2 représentes la même...
De plus, le symbole < correspond a plus petit ( maintenant, si ce n'est pas la même chose que <=, j'en sais rien ), donc sa foudra dire
"si le joueur est membre de faction plus petit que 1 | si le joueur est chef de faction plus petit que 1"
Ce qui voudra dire dans cette fonction, qu'un civil aura aussi accès à cette commande.
Je te suggère de retirer la première commande.
( sa m'étonne que sa marche avec les nom de cmd )