GTAOnline.net
San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: Jens84 le 23 Novembre 2008, 00:26:31
-
Amis du soir, bonsoir !
Je me suis laissé tenter par la fonction CallRemoteFunction.
Dans mon gamemode, où j'utilise des gTeam[playerid], j'ai placé une callback :
public IsNotStunter(playerid)
{
if (!(gTeam[playerid] == TEAM_STUNT))
{
SendClientMessage(playerid, COLOR_LIGHTRED, "Tu n'est pas un Stunter !");
SendClientMessage(playerid, COLOR_LIGHTRED, "Si tu veux participer aux courses, Fais F4 puis /kill et choisis le Stunt !");
}
return 1;
}
Puis dans mon yrace, quand un joueur tape /join, j'ai placé la superbe CallRemoteFunction("IsNotStunter", "i", playerid);
Cependant, comme je ne sais pas comment proceder, si un joueur (avec un gTeam différent de TEAM_STUNT) tape /join, le message s'affiche mais l'action se produit quand même.
Pourriez-vous m'aider pour faire en sorte que l'action s'annule, dois-je mettre un return 0 ? Un truc du genre ?
Merci d'avance !
Jens84
-
Salut,
le problème c,est que tu devrais plutôt t'en servir pour détecter la team du joueur, non pas pour exécuter le code de la commande, car dans ces cas, savoir quelle valeur retourné etc... est légèrement moins évident
tu dois faire une truc du genre:
if(CallremoteFunction(....))return 1;
bref, essaie de créer une fonction getPlayerTeam et ce sera plus aisé
++Sim++
-
Ok je vais essayer ça, merci de ton aide !
-
J'pense que tu devrait faire un truc du genre
public GetPlayerTeam(playerid)
{
return gTeam[playerid];
}
ensuite
new team = CallRemoteFunction("GetPlayerTeam",'i',playerid);
C'est un ebauche donc j'sais pas si sa peux fonctioner comme sa ...
-
Non, sa fonction est très bien, simplement, il faut qu'elle retourne 0 quand le joueur n'est pas un stunter
Le nom est ambigu aussi, j'aurais plutôt appeler cette fonction [tt]IsStunter[/tt] :
[code]public IsStunter(playerid)
{
if (!(gTeam[playerid] == TEAM_STUNT))
{
SendClientMessage(playerid, COLOR_LIGHTRED, "Tu n'est pas un Stunter !");
SendClientMessage(playerid, COLOR_LIGHTRED, "Si tu veux participer aux courses, Fais F4 puis /kill et choisis le Stunt !");
return 0;
}
return 1;
}
Exemple d'utilisation :
if (CallRemoteFunction("IsStunter",'i',playerid) == 1)
{
/* Le joueur est stunter, il peut rejoindre la course */
}
Par contre, effectivement, il ne faudrait pas qu'elle exécute de code autre que le test sur l'appartenance du joueur à telle ou telle team :
public IsStunter(playerid)
{
if (!(gTeam[playerid] == TEAM_STUNT))
{
return 0;
}
return 1;
}
if (CallRemoteFunction("IsStunter",'i',playerid) == 1)
{
/* Le joueur est stunter, il peut rejoindre la course */
}
else
{
SendClientMessage(playerid, COLOR_LIGHTRED, "Tu n'est pas un Stunter !");
SendClientMessage(playerid, COLOR_LIGHTRED, "Si tu veux participer aux courses, Fais F4 puis /kill et choisis le Stunt !");
}
++
Syg[/code]
-
Ok merci beaucoup Syg, j'aurais du penser au == 1 après la condition... (je désespère de moi-même XD) ^^
Je vais tester ça ce soir normalement.
A bientôt !