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

Titre: SendClientMessage pour une zone
Posté 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.
Titre: Re : SendClientMessage pour une zone
Posté par: [StAfF]MaN le 28 Septembre 2008, 11:41:57
oui c'est possible, va dans le topic tutos ^^ il y a un sujet sur les zones ;)
Titre: Re : SendClientMessage pour une zone
Posté par: jonjon le 28 Septembre 2008, 13:12:02
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.
Titre: Re : SendClientMessage pour une zone
Posté par: [StAfF]MaN le 28 Septembre 2008, 13:21:39
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;
Titre: Re : SendClientMessage pour une zone
Posté par: jonjon le 28 Septembre 2008, 13:22:44
A je vais essayer merci ;).
Titre: Re : SendClientMessage pour une zone
Posté par: jonjon le 28 Septembre 2008, 13:30:04
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.
Titre: Re : SendClientMessage pour une zone
Posté par: MadFire le 28 Septembre 2008, 13:32:15
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  ;)
Titre: Re : SendClientMessage pour une zone
Posté par: jonjon le 28 Septembre 2008, 19:01:35
c'est mieux de mettre un "return 0;" ? pourquoi ?

Ps : Dans tous les cas ca ne fonctionne pas .... :s aidez moi svp
Titre: Re : SendClientMessage pour une zone
Posté par: jonjon le 29 Septembre 2008, 18:10:48
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.
Titre: Re : SendClientMessage pour une zone
Posté par: [StAfF]MaN le 29 Septembre 2008, 21:18:51
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 ^^
Titre: Re : SendClientMessage pour une zone
Posté par: jonjon le 29 Septembre 2008, 21:39:28
parce que ces valeurs fixe sont les dimensions du terrain de foot...
Titre: Re : SendClientMessage pour une zone
Posté par: [StAfF]MaN le 29 Septembre 2008, 22:56:03
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;
        }
}

Titre: Re : SendClientMessage pour une zone
Posté par: garderer le 30 Septembre 2008, 12:43:19
[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.
Titre: Re : SendClientMessage pour une zone
Posté par: jonjon le 30 Septembre 2008, 19:04:14
oki, merci . Mais je met où les coordonnées de mon terrain de foot ? ^^
Titre: Re : SendClientMessage pour une zone
Posté par: [StAfF]MaN le 30 Septembre 2008, 21:07:37
a la place de

Float:minx, Float:maxx, Float:miny, Float:maxy

;)
Titre: Re : SendClientMessage pour une zone
Posté par: jonjon le 02 Octobre 2008, 20:36:14
bon laissez tombé, rien ne fonctionne.... je me demande si c'est pas parce que j'ai trop de timers :s

Merci.

Cordialement, j0n.