GTAOnline.net
San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: Eloctro le 03 Janvier 2009, 15:01:33
-
Bonjour ,
Voila je fait un radar mais j'ai une erreur :
new Float:x,Float:y,Float:z;
new Float:distance,value;
new SLOTS
for(new i=0; i<SLOTS; i++)//Ligne d'erreur
{
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);
}
else if(PlayerToPoint(15, i,1643.2842,-1714.4871,15.6055))
{
if( radar == 0)
{
radar = 1;
SendClientMessage(i, COLOR_RED, "(!) Attention, vous avez été flashé par un radar à plus de 150 km/h! (!)");
}
}
}
Je me suis aider du radar de nikko et quelque modif mais j'ai une erreure
F:\SA MP\gamemodes\Rpg-street.pwn(5907) : error 001: expected token: ";", but found "for"
Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase
1 Error.
-
new SLOTS;
;)
++
nikko
-
Merci ,
Erreur bête lol d'habitude j'y pense désolé !
Parcontre j'ai déja défini i(new i;) et je voudrait le retirer mais sa me mais des erreures
Et je ses pas comment prendre la distance !
-
Bonjour,
essaye comme ceci
#define MAX_SLOTS 200
new SLOTS[MAX_SLOTS];
Cordialement,
-
c'est bon pour la vitessae j'essaille pour sltos
-
Je ne pense pas que ca marchera ton radar, il manque des truc ... du genre:
if(floatround(value/1500) >= 140 && IsPlayerInAnyVehicle(i) && (PlayerToPoint(25.0, i, 1822.0105,-1632.0487,12.9347)))
{
RemovePlayerFromVehicle(i);
}
Pour tester la vitesse du joueur
++
nikko
-
C'est bon la vittesse javai fait exactement pareil je vous passe mon script vous dites si sa peut marcher j'ai pas Gta la
new Float:x,Float:y,Float:z;
new Float:distance,value;
//new SLOTS;
/*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);
}
else if(floatround(value/1000) >= 140 && IsPlayerInAnyVehicle(i) && PlayerToPoint(15, i,1643.2842,-1714.4871,15.6055))
{
if( radar == 0)
{
radar = 1;
SendClientMessage(i, COLOR_RED, "(!) Attention, vous avez été flashé par un radar à plus de 150 km/h! (!)");
}
}
//}
-
Pourquoi mets tu un RemovePlayerFromVehicle ?
Si le joueur se fait flashé fait payer la note :p
c'est beaucoup plus marrant.
Tu peux faire encore pire mais bon c'est a toi de voir se que tu préfères
Cordialement,
-
Mais oui
Mais je serais chez moi je ferai la note et le timer de 10 secondes pour réactiver le radar sinon le message va se répéter
-
Non !
Si tu fais un timer normal
exemple => SetTimer("Radar",1000,0); // 1= Actif sans limite - 0= Actif 1 fois (pour chaque passage)
Cordialement,
-
Mais nan dans un playerToPoint faut lactiver une foi le Timer sinon sa va prendre du CPU pour rien !
-
Tu as mal lu mon sujet :bangin
le SetTimer("Radar",1000,0); avec le 0 est fait pour ça
ca l'active 1 fois seulement
une fois que le joueur a passer le radar le timer se stop jusqu'au prochain passage si il repasse vers le radar
cordialement,
-
nan le 1 sactivera une foi pour tou le temp meme si apres il est en dehor de la zone le 0 sactivera seulement dans la zone et comme les PlayerToPoint se répète il s'activer plusieurs fois !
-
Ah bon
es tu certains ? :p
Chez moi le 0 s'active 1 fois et pas tout le temps
Je t'invite a revoir la fonction Setimer alors
http://wiki.sa-mp.com/wiki/SetTimer (http://wiki.sa-mp.com/wiki/SetTimer)
Bonne chance pour la suite :)
Cordialement,
-
Mais oui le 0 sactive une foi mais si je mes un message dans un PlayerToPoint il sactivera plusieur foi ca rle playertopoint lme repete don il repetera le timer tant que tu sortira pas
-
ui a raison, on utilise un playertopoint, si la zone est un peu grande et que le joueur passe plus d'une seconde dans la zone, ca affichera 2 message.
Inbox, jai pas compris ton system du 0 et du 1, dans lexemple du wiki, il est a 0, et il est sencé se passer quoi ?
++
nikko
-
Excusez moi mais si
vous coder votre code correctement le message ne s'affiche pas deux fois
seulement faut mettre un SetTimer a 0 et le mettre la ou il faut
et pas n'importe ou
cordialement,
-
Eisseille Inbox tu verra !
Sujet clos ! :lock
-
Je l'ai fait sur mon serveur avec plus de 88 Radars pour le moment
et ça marche très bien.
Cordialement,
-
Jui curieu de voir ton serveur !
-
C'est bon la vittesse javai fait exactement pareil je vous passe mon script vous dites si sa peut marcher j'ai pas Gta la
new Float:x,Float:y,Float:z;
new Float:distance,value;
//new SLOTS;
/*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);
}
else if(floatround(value/1000) >= 140 && IsPlayerInAnyVehicle(i) && PlayerToPoint(15, i,1643.2842,-1714.4871,15.6055))
{
if( radar == 0)
{
radar = 1;
SendClientMessage(i, COLOR_RED, "(!) Attention, vous avez été flashé par un radar à plus de 150 km/h! (!)");
}
}
//}
Petit précision: met a 1500 le if(floatround(value/1000) ;)
et met pas de else if, met un if tout seul ;)
++
nikko
-
Bon voila mon code et j'ai dautre PlayerToPoint donc je fait
IF(le premier)
ELSE IF(les autres)
ELSE IF
....nan ?
j'ai un probleme j'ai le messge quand je sui en dessous de 70
new Float:x,Float:y,Float:z;
new Float:distance,value;
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 * 11000);
if(UpdateSeconds > 1)
{
value = floatround(value / UpdateSeconds);
}
else if(floatround(value/1400) >= 71 && IsPlayerInAnyVehicle(i) && PlayerToPoint(25, i,1604.5836,-1730.3593,13.1247))
{
if( radar == 0)
{
radar = 1;
SendClientMessage(i, COLOR_RED, "(!) Souriez vous êtes flashé par un radar (!)");
SendClientMessage(i, COLOR_RED, "Vous perdez 1000$ vous étez à plus de 70 Kmh");
SetTimerEx("radat", 10000,0, "i");
}
}
-
Tout ce truc tu l'a intégré dans un timer cest bien ca ?
Si oui, met:
new Float:x,Float:y,Float:z;
new Float:distance,value;
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 * 11000);
if(UpdateSeconds > 1)
{
value = floatround(value / UpdateSeconds);
}
if(floatround(value/1500) >= 71 && IsPlayerInAnyVehicle(i) && PlayerToPoint(25, i,1604.5836,-1730.3593,13.1247) && radar == 0)
{
radar = 1;
SendClientMessage(i, COLOR_RED, "(!) Souriez vous êtes flashé par un radar (!)");
SendClientMessage(i, COLOR_RED, "Vous perdez 1000$ vous étez à plus de 70 Kmh");
SetTimerEx("radat", 10000,0, "i");
}
Et le radar, tu la défini avec [MAX_PLAYERS] ? si oui met radar[playerid] = ..;
++
nikko
-
Nan c'est pas dans un Timer c'est un simple playerToPoint et quand on passe dessu il dit le message se désactive pendant 10 (la il active un timer pour le réativer) secondes pour pas une répétition du message