GTAOnline.net
San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: Nikko™ le 28 Août 2008, 11:35:09
-
Salut Salut tout le monde :)
Bon voila jai l'intention de coder un truc, et jaurai besoin de connaitre la fonction qu'on utilise pour retrouver la vitesse d'un vehicule...
Cest a dire, si un vehicule roule a 84km/h quand il passe dans un endroit préci, ca récupére sa vitesse.
Si quelqu'un sait faire ca ... :D
Merci
++
nikko
-
Comme un radar ? :D
-
Voila =)
++
nikko
-
J'ai jamais trop testé mais j'ai une petite idée a creuser. Si tu a un compteur "digital" ca pourrait etre simple:
Avec une condition if PlayerToPoint(l'endroit de ton radar);
Tu fait une autre condition qui verifiera le chiffre affiché par le compteur, exemple:
if(PlayerToPoint(25.0,playerid,207.5627,-103.7291,1005.2578))
{
if(compteur < 84)
{
TogglePlayerControllable(i, 0);
}
return 1;
}
Bon c'est juste un exemple fait en vitesse pour te montrer se que je pense etre la bonne voie. La enfait si la personne depasse 84 km/h il est freezé quand il passe au radar. Pour les test c'est bien de freezer pour voir si ca marche vraiment.
En esperant que ca aide ;)
++
-
Ouai mais comment on défini au préalable le compteur ??
++
nikko
-
Selon le compteur que tu as, tu doit avoir un endroit dans le code qui fait que le compteur prend la valeure Kilometrique. . .
Jvais essayer de trouve ca dans le vmenu en vitesse et jte le montre ;)
-
Ya pas un objet qui ressemble à un radare ?
-
Y'a des boite rouge mais pour te dire l'id faudra que tu attende un peu que je le retrouve ^^.
Bon jvient de faire quelque test avec le FS de R@F le speedo, pour le moment je n'arrive pas a faire prendre la valeur au calcul de distance (floatround) j'essaye de trouver un autre systeme de compteur pour voir si c'est pas plus simple avec un autre ;)
-
Moi aussi jai esseyer de faire ac le speedo de raf
Voila ce que jai fait:
if(PlayerToPoint(25.0,playerid,207.5627,-103.7291,1005.2578))
{
if(IsPlayerInAnyVehicle(playerid))
{
GetPlayerPos(i, x, y, z);
distance = floatsqroot(floatpower(floatabs(floatsub(x,SavePlayerPos[i][LastX])),2)+floatpower(floatabs(floatsub(y,SavePlayerPos[i][LastY])),2)+floatpower(floatabs(floatsub(z,SavePlayerPos[i][LastZ])),2));
value = floatround(distance * 5000);
if(floatround(value/1000) > 50)
{
TogglePlayerControllable(i, 0);
}
return 1;
}
Mais 4 erreur invalid function or declaration x4
++
nikko
-
Moi j'ai fait autrement, y'a pas d'erreur mais IG ca change rien pour le moment mais je pense qu'il faut le faire comme ca:
new Float:x,Float:y,Float:z;
new Float:distance,value;
new km;
for(new i=0; i<SLOTS; i++)
{
GetPlayerPos(i, x, y, z);
distance = floatsqroot(floatpower(floatabs(floatsub(x,SavePlayerPos[i][LastX])),2)+floatpower(floatabs(floatsub(y,SavePlayerPos[i][LastY])),2)+floatpower(floatabs(floatsub(z,SavePlayerPos[i][LastZ])),2));
value = floatround(distance * 5000);
if(UpdateSeconds > 1)
{
value = floatround(value / UpdateSeconds);
}
km = floatround(value/1000);
if(km > 140)
{
TogglePlayerControllable(i, 0);
}
}
J'ai mis tous ca dans un timer a part du speedo, a cause de l'initialisation du compteur qui affiche 12000. ..
-
Tu la mit dans un timer mais comment tu fait pour savoir quand le joueur est dans la zone avec ca ??
++
nikko
-
Pour le moment tu n'a pas besoin de zone, fait deja une version test avec le minimum de chose pour voir si ca marche la prise de kilometre. Quand ca marchera (quand le joueur sera freeze a tel vitesse), la tu pourra rajouter la condition de lieu pour ton radar. Tu aura juste a ajouter le playertopoint.
Je continu a travailler dessus mais j'ai du mal ca fait 2 moi que j'ai rien scripté de concret :s
-
Ok merci pour ton aide, mais le code, jai pas bien capté ou le placé....
++
nikko
-
Tu créé un nouveau public tu met ca dedans sans oublier le forward ;) Sinon je bloque toujours au meme endroit, soit il freeze pendant l'initialisation ou sinon j'ai testé avec un km++; il prend une valeur a chaque fois que le compteur augmente mais il ne baisse pas et je voit pas comment le faire baisser :s
Affaire a suivre ^^
-
Ca y est jai réussi, quand le joueur arrive a 140km, il est freezer :), enfin moi pour tester, je fesait envoyer un message...
Mtn, plus qu'a rajouter le playertopoint. Je te montrerai la soluc =)
++
nikko
EDIT:
JAi terminé, tout marche bien, jai positioner un objet pour faire office de radar et jai mi le playertopoint.
Tu avez oublier les Last X, Last Y .... cest pour ca que ca buggé ;)
Attention, ya des forwards et des new ...
new Float:x,Float:y,Float:z;
new Float:distance,value;
//new km;
for(new i=0; i<SLOTS; i++)
{
GetPlayerPos(i, x, y, z);
distance = floatsqroot(floatpower(floatabs(floatsub(x,SavePlayerPos[i][LastX])),2)+floatpower(floatabs(floatsub(y,SavePlayerPos[i][LastY])),2)+floatpower(floatabs(floatsub(z,SavePlayerPos[i][LastZ])),2));
value = floatround(distance * 5000);
if(UpdateSeconds > 1)
{
value = floatround(value / UpdateSeconds);
}
//km = floatround(value/1000);
SavePlayerPos[i][LastX] = x;
SavePlayerPos[i][LastY] = y;
SavePlayerPos[i][LastZ] = z;
if(floatround(value/1000) >= 140 && IsPlayerInAnyVehicle(i) && (PlayerToPoint(25.0, i, 1822.0105,-1632.0487,12.9347)))
{
SendClientMessage(i, COLOR_SYSTEM, "(!) Attention, vous avez été flashé par un radar à plus de 150 km/h! (!)");
}
}
}
-
tu peut pas mettre les new stp
-
Merci Nikko et bien joué ;), moi aussi j'avais réussit avant de poster de le bout de code ^^ mais j'aime pas donner les soluce XD. Au moins tu peut etre fier de ton script que tu as fait ;)
Pour les mis a disposition moi j'en ai pas besoin, si tu veut le distrib en FS vas-y moi ca me derange pas que le petit bout de code que j'ai fait soit publié. A toi de voir ;)
-
Nan, je ne pense pas faire un FS, ou peut etre dans lavenir mais pas mtn, je garde le 'secret profesionel' entre toi et moi pour le moment ^^
Merci a toi aussi. ;)
++
nikko
-
Bonjour ,
voila jai 2 probleme:
1) Je met le code de Nikko™ :
new Float:x,Float:y,Float:z;
new Float:distance,value;
new km;
for(new i=0; i<SLOTS; i++)
{
GetPlayerPos(i, x, y, z);
distance = floatsqroot(floatpower(floatabs(floatsub(x,SavePlayerPos[LastX])),2)+floatpower(floatabs(floatsub(y,SavePlayerPos[LastY])),2)+floatpower(floatabs(floatsub(z,SavePlayerPos[LastZ])),2));
value = floatround(distance * 5000);
if(UpdateSeconds > 1)
{
value = floatround(value / UpdateSeconds);
}
//km = floatround(value/1000);
SavePlayerPos[LastX] = x;
SavePlayerPos[LastY] = y;
SavePlayerPos[LastZ] = z;
if(floatround(value/1000) >= 140 && IsPlayerInAnyVehicle(i) && (PlayerToPoint(25.0, i, 1822.0105,-1632.0487,12.9347)))
{
SendClientMessage(i, COLOR_SYSTEM, "(!) Attention, vous avez été flashé par un radar à plus de 150 km/h! (!)");
return 1;
}
Et il me met sa quand je ve le compilé:
C:\Documents and Settings\patrick\Bureau\script\gamemodes\radar.pwn(169) : error 010: invalid function or declaration
C:\Documents and Settings\patrick\Bureau\script\gamemodes\radar.pwn(174) : error 010: invalid function or declaration
C:\Documents and Settings\patrick\Bureau\script\gamemodes\radar.pwn(180) : error 010: invalid function or declaration
C:\Documents and Settings\patrick\Bureau\script\gamemodes\radar.pwn(184) : error 010: invalid function or declaration
C:\Documents and Settings\patrick\Bureau\script\gamemodes\radar.pwn(187) : error 010: invalid function or declaration
C:\Documents and Settings\patrick\Bureau\script\gamemodes\radar.pwn(189) : warning 203: symbol is never used: "distance"
C:\Documents and Settings\patrick\Bureau\script\gamemodes\radar.pwn(189) : warning 203: symbol is never used: "km"
C:\Documents and Settings\patrick\Bureau\script\gamemodes\radar.pwn(189) : warning 203: symbol is never used: "value"
C:\Documents and Settings\patrick\Bureau\script\gamemodes\radar.pwn(189) : warning 203: symbol is never used: "x"
C:\Documents and Settings\patrick\Bureau\script\gamemodes\radar.pwn(189) : warning 203: symbol is never used: "y"
C:\Documents and Settings\patrick\Bureau\script\gamemodes\radar.pwn(189) : warning 203: symbol is never used: "z"
Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase
5 Errors.
Comment les réglés merci.
2)
Comment trouver la positon du radar ou le player serai freezer et comment fait pour qu'il ne puise pas gruger (le contourner)
Merci a tous. ???
-
La position du radar se trouve pres du skate park de ls, tout le code que tu a cité, il faut le mettre dans un timer qui se renouvelle toute les secondes.
Voila
++
nikko
-
Merci pour t'es réponse mais voila:
1)Comment crée un timer?
2)Je c que c'est au skate park mais comment en mettre une autre mais pas n'importe quoi ?
Merci encore
-
Et bah tu change les cordonés :)
++
nikko
-
lol j'ai compris sa mais je veut maintenant juste comment crée un timer ?
tu me dit si je suis :hs
-
Tu est HS mais bon, tu trouvera la reponse sur un autre post. Fonction rechercher ;)