GTAOnline.net
San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: Jens84 le 20 Octobre 2008, 19:08:26
-
Bonjour, je souhaite créer une commande permettant de spawner un vehicule en fonction de son id, comme dans le debug. Pour cela, je me suis inspiré du R@f Admin Script, qui spawn une id précise :
if (!strcmp(cmd, "/car", true))
{
new Float:X,Float:Y,Float:Z,Float:Angle;
new carid;
GetPlayerPos(playerid,X,Y,Z);
GetPlayerFacingAngle(playerid,Angle);
carid = CreateVehicle(471,X,Y,Z,Angle,-1,-1,86400000);
PutPlayerInVehicle(playerid,carid,0);
TogglePlayerControllable(playerid,1);
if(GetPlayerInterior(playerid)) LinkVehicleToInterior(carid,GetPlayerInterior(playerid));
SetVehicleVirtualWorld(carid,GetPlayerVirtualWorld(playerid));
return 1;
}
Je voudrais savoir comment remplacer l'id (ici 471) par une id choisie en la tapant après /car.
Merci de vos réponses.
PS : Je voudrais aussi savoir s'il est possible de faire des exceptions pour les ID, afin qu'un joueur ne puisse pas spawner un Hydra même avec son ID, par exemple...
-
Pour ce que tu veut tu dois utiliser la fonction STRTOK que je te file :
strtok(const string[], &index)
{
new length = strlen(string);
while ((index < length) && (string[index] <= ' '))
{
index++;
}
new offset = index;
new result[20];
while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
{
result[index - offset] = string[index];
index++;
}
result[index - offset] = EOS;
return result;
}
Maintenant tu te débrouille ;) Je suis sur que tu a déjà du croiser une commande qui utilise le strtok donc tu a tous ce dont tu a besoin ;) Si vraiment ta un prob on pourra te filer la structure de ta commande en strtok mais on ira pas plus loin ^^
Bonne chance ;)
-
Ok merci beaucoup. De plus, la fonction que tu m'as donné était déja présent à la fin de mon script, j'ai donc déja dû l'avoir utilisé.
Si j'ai besoin d'aide, je demanderais ^^
-
J'ai adapté comme je pouvais en m'appuyant sur la commande /givecash mais j'obtiens quand même quelques erreurs (undefined symbol "vehiculeid" et "local variable "tmp" shadows a variable at a preceding level").
Est-ce que je m'approche tout de même ?
if (!strcmp(cmd, "/car", true))
{
new tmp[256];
tmp = strtok(cmdtext, idx);
if(!strlen(tmp)) {
SendClientMessage(playerid, COLOR_WHITE, "UTILISATION: /car [ID Véhicule]");
return 1;
}
vehiculeid = strval(tmp);
if (vehiculeid >= 400 && vehiculeid <= 611) {
new Float:X,Float:Y,Float:Z,Float:Angle;
new carid;
new tmp[256];
tmp = strtok(cmdtext, idx);
GetPlayerPos(playerid,X,Y,Z);
GetPlayerFacingAngle(playerid,Angle);
carid = CreateVehicle(vehiculeid,X,Y,Z,Angle,-1,-1,86400000);
PutPlayerInVehicle(playerid,carid,0);
TogglePlayerControllable(playerid,1);
if(GetPlayerInterior(playerid)) LinkVehicleToInterior(carid,GetPlayerInterior(playerid));
SetVehicleVirtualWorld(carid,GetPlayerVirtualWorld(playerid));
}
else
{
SendClientMessage(playerid, COLOR_YELLOW, "ID Invalide.");
}
return 1;
}
EDIT : C'est bon, j'ai trouvé, ma commande fonctionne.
Merci beaucoup. (j'ai supprimé "new tmp[256];" et ajouté "new vehiculeid;" à la place)
-
Sa serais possible de faire respawn tous les véhicules en même temps ? ?
-
Salut,
éffectivement, c'est d'ailleur ce que je faisais.... jusqu'à la semaine passée sur mon serveur,
il te suffi de faire une boucle dans laquelle je te recommande de vérifier qu'il n'y a aucun joueur dans le véhicule avant de le respawner.....
++Sim++
-
Bonjour, j'ai un petit problème, je savais qu'il existerait mais je demande quand même.
En ayant fait CreateVehicule et utilisant un Timer CarRespawn dans mon serveur, les vehicules spawnés avec la commande /car, se respawnent à leur emplacement d'origine (là où on les a spawnés) à cause du Timer.
Je veux faire un Timer DestroyVehicule mais comment faire pour qu'il ne s'active que lorsqu'on sort d'un véhicule Spawné avec une commande.
Merci d'avance
Jens84
-
Up svp, pourrais-je avoir une réponse svp, c'est ma dernière question sur ce sujet ^^
Merci d'avance
-
salut,
alors pour ça, le mieu c,est d,assigner un id de véhicule par joueur....
new vehicleidspawned[MAX_PLAYERS];
puis dans ta commande...
vehicleidspawned[playerid] = CreateVehicle(....)
puis dans OnPlayerExitVehicle tu fais un timer qui détruira le véhicule..
++Sim++
-
Ok merci beaucoup, je vais tester ça tout de suite !