GTAOnline.net
San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: jonjon le 28 Septembre 2008, 11:33:38
-
Bonjour, alors voilà j'ai un petit problème pour un script je voudrais savoir comment on fais quelque chose dans ce genre :
If(SiLeJoueurEstDansCetteZone...)
{
SendClientMessage("...il pourra recevoir se message par exemple : ' %d fini premier ' ", playename); // Et sa serais que les joueurs qui sont dans une zone défini qui pourraient voir le message.
}
Est-ce que c'est possible et comment on fait ?
Ps : j'ai essayer de faire un truc mais sa marche pas...
Merci d'avance.
Cordialement, J0n.
-
oui c'est possible, va dans le topic tutos ^^ il y a un sujet sur les zones ;)
-
Justement c'est ce que j'ai fait :
public OnPlayerShootl(playerid)
{
new Float:px, Float:py;
new kickstring[256];
if(IsPlayerInArea(playerid, 1402.4, -2645.111, 1588.739, -2451.671))
{
GetXYInFrontOfPlayer(playerid, px, py, 16.0);
MoveObject(ball, px, py, 12.851875, 22.5);
format(kickstring, sizeof(kickstring), "[ARBITRE] %s shoot dans le balon!", PlayerName(playerid));
Narracao(kickstring);
}
}
Mais ca fonctionne pas, quand on se connecte sur le serveur le message se répete tout le temps même quand on est pas dans la zone , ça fait un flood qui ne s'arete pas....
Si quelqu'un peux m'aider... SVP.
Merci d'avance.
-
public OnPlayerShootl(playerid)
{
new Float:px, Float:py;
new kickstring[256];
if(IsPlayerInArea(playerid, 1402.4, -2645.111, 1588.739, -2451.671))
{
GetXYInFrontOfPlayer(playerid, px, py, 16.0);
MoveObject(ball, px, py, 12.851875, 22.5);
format(kickstring, sizeof(kickstring), "[ARBITRE] %s shoot dans le balon!", PlayerName(playerid));
Narracao(kickstring);
return 1;
}
return 1;
}
met des return 1;
-
A je vais essayer merci ;).
-
humm ça marche mieux mais ça m'empêche de faire une action, est-ce possible de faire comme ça :
public OnPlayerShootl(playerid)
{
new Float:px, Float:py;
new kickstring[256];
GetXYInFrontOfPlayer(playerid, px, py, 16.0);
MoveObject(ball, px, py, 12.851875, 22.5);
if(IsPlayerInArea(playerid, 1402.4, -2645.111, 1588.739, -2451.671))
{
format(kickstring, sizeof(kickstring), "[ARBITRE] %s shoot dans le balon!", PlayerName(playerid));
Narracao(kickstring);
return 1;
}
return 1;
}
?
Merci d'avance.
-
public OnPlayerShootl(playerid)
{
new Float:px, Float:py;
new kickstring[256];
GetXYInFrontOfPlayer(playerid, px, py, 16.0);
MoveObject(ball, px, py, 12.851875, 22.5);
if(IsPlayerInArea(playerid, 1402.4, -2645.111, 1588.739, -2451.671))
{
format(kickstring, sizeof(kickstring), "[ARBITRE] %s shoot dans le balon!", PlayerName(playerid));
Narracao(kickstring);
return 1;
}
return 0;
}
Je pense que c'est mieux comme ça ;)
-
c'est mieux de mettre un "return 0;" ? pourquoi ?
Ps : Dans tous les cas ca ne fonctionne pas .... :s aidez moi svp
-
Bon, sinon quelqu'un veux bien m'aider par msn (ça sera plus simple et on pourra tester ensemble) ? SVP
Merci d'avance.
Cordialement, J0n.
-
J'aimerais savoir ce que tu entend par "ça marche mieux" ^^ Il y a le message quand tu arrive dans la zone ??
Alors ce que tu va faire, c'est que tu va te faire un petit code, juste avec un message qui s'affiche ( normalement ) quand tu passe dans une zone, quand ce code sera fait et qu'il fonctionnera, tu pourra ajouter ton moveobject ;)
Moi ce que je ramrque, si je ne me trompe pas déjà, c'est pour shooter dans un ballon, donc, quand tu shoot, il bouge, alors pourquoi des as des valeurs fixes dans ton if(IsPlayerInArea(playerid, 1402.4, -2645.111, 1588.739, -2451.671)) ???
Essaye de récupéré la valeur nouvelle quand le ballon est bougé, de ce faite, tu pourra shooter dedans plusieurs fois, car la je pense que ça ne peut fonctionner qu'une seul fois ^^
-
parce que ces valeurs fixe sont les dimensions du terrain de foot...
-
Mon français fait pitié ^^ (mon potse précédent lol )
Ok, c'est les valeur du terrain de foot, mais heu, en faite quand il est dans le terrain, il y a un message qui s'affiche, [ARBITRE] %s shoote dans le ballon, même si le joueur a pas shooter dedans lol
sinon essaye comme ça :
public OnPlayerShootl(playerid)
{
new Float:px, Float:py;
new kickstring[256];
GetXYInFrontOfPlayer(playerid, px, py, 16.0);
MoveObject(ball, px, py, 12.851875, 22.5);
if(IsPlayerInArea(playerid, 1402.4, -2645.111, 1588.739, -2451.671))
{
format(kickstring, sizeof(kickstring), "[ARBITRE] %s shoot dans le balon!", PlayerName(playerid));
Narracao(kickstring);
return 1;
}
}
-
[code=]// En haut du script
forward IsPlayerInArea(playerid, Float:minx, Float:maxx, Float:miny, Float:maxy);
forward ZoneEnter();
new Zenter[MAX_PLAYERS];
//OnGameModeInit
SetTimer("ZoneEnter",3000,1); // Le timer qui va tourner en boucle toute les 3secondes
// A la fin du script
public IsPlayerInArea(playerid, Float:minx, Float:maxx, Float:miny, Float:maxy)
{
new Float:x, Float:y, Float:z;
GetPlayerPos(playerid, x, y, z);
if (x > minx && x < maxx && y > miny && y < maxy) return 1;
return 0;
}
public BankEnter()
{
for(new i=0; i < MAX_PLAYERS; i++) // Boucle parcourant les joueurs
{
if(IsPlayerInArea(i, Float:minx, Float:maxx, Float:miny, Float:maxy) // si le joueur est dans la zone
{
if(!Zenter[i]) // Si il vient d'y entrer
{
Zenter[i] = 1; // Le joueur est dans la zone
SendClientMessage(i, COLOR_GREEN, "Garderer en force"); // on affiche un message
}
}
else if(Zenter[i]) // Si le joueur sort de la zone
{
Zenter[i] = 0; // Le joueur sort de la zone
SendClientMessage(i, COLOR_RED, "ououou"); // Petit message
}
}
}
Tuto sur le Forum Fight-International réalisé par Tunsi[WC]
j'ai 30 Zonnes sur mon serveur *RPG* et avec sa tu aura pas de probléme.
Dsl je suis en cour je répond rapidement.
-
oki, merci . Mais je met où les coordonnées de mon terrain de foot ? ^^
-
a la place de
Float:minx, Float:maxx, Float:miny, Float:maxy
;)
-
bon laissez tombé, rien ne fonctionne.... je me demande si c'est pas parce que j'ai trop de timers :s
Merci.
Cordialement, j0n.