Salut,
alors pour être sur:
La communication entre les scripts
1. La communication de données
Ici nous entendons la communication de variables. Cette section sera répartie en 2 sections. Une pour les fonctions du type CallRemoteFunction et une autre pour les PVar.
CallRemoteFunction
La fonction CallRemoteFunction permet d'appeler une fonction dans un autre script. Si l'appel est réussi, cette fonction retourne la valeur de retour de la fonction appelée (d'où l'importance de toujours retourner une valeur, dans les fonctions public, car seules celles ci peuvent être appelées ainsi). Ainsi, on peut l'utiliser en appelant une fonction qui renvoie une information.
Par exemple:
new level = CallRemoteFunction("GetAdminLevel", "i", playerid);
//dans un autre script
public GetAdminLevel(playerid)
{
return AdminInfo[playerid][level];//dans un cas où on a un gros tableau multidimensionnel
}
Grâce à cet appel on peut donc savoir la valeur du niveau admin du joueur.
En continuant avec le même exemple, on pourrait, par exemple vouloir aller changer la valeur du niveau du joueur. Ceci est également possible, en passant des paramètres supplémentaires ddans la fonction.
CallRemoteFunction("SetAdminLevel", "ii", playerid, newlevel);
//dans un autre script
public SetAdminLevel(playerid, level)
{
AdminInfo[playerid][level] = level;//on change la valeur du niveau
return 1;
}
ATTENTION : il faut les fonctions public en conséquence.
PVar
La même chose est possible avec les PVar, mais peut-être plus intuitive. Il suffit de donner un nom à la PVar, et elle sera accessible sous ce même nom dans tous les scripts.
Reprise de l'exemple:
Récupération de la valeur:
new level = GetPVarInt(playerid, "AdminLevel");
//dans un autre script on utilise la même chose, c'est donc plus facile à gérer
Modification de la valeur:
SetPVarInt(playerid, "AdminLevel", newlevel);
//dans un autre script, on utilise la même chose, donc plus facile à gérer
Donc, c'est plus simple et aussi plus efficace niveau temps (enfin je suis pratiquement sûr).
2. La communication "d'évènements"
Ici pas de magie avec les PVar, on en revient aux CallRemoteFunction. Donc, en bref, il suffit de se créer son propre système de "callback".
Les callback sont, vous l'avez surement remarqué, toutes des fonctions déclarée en public. Ceci permet d'y accéder depuis l'extérieur du script. Donc, sa-mp peut les appeler, et un autre script peut le faire aussi.
Bref, pour créer son système de callback, il suffit de:
- ajouter une fonction public, ce sera la callback.
- l'appeler quand l'évènement voulu a lieu.
- si l'on veut tenir compte de la valeur de retour de la callback, ceci devient un peu plus difficile (un bon exemple est zcmd avec les 2 callbacks qu'il ajoute).
Petit exemple de base:
//Dans un seul script:
new money[MAX_PLAYERS];//tableau contenant l'argent précédant du joueur
public OnPlayerUpdate(playerid)
{
new cash = GetPlayerMoney(playerid);
if(cash != money[playerid])
{
CallRemoteFunction("OnPlayerMoneyUpdate", "iii", playerid, money[playerid], cash);//on ne tient même pas compte de la valeur de retour, on appèle simplement la fonction public
}
money[playerid] = cash;
.....
}
//dans tous les scripts:
forward OnPlayerMoneyUpdate(playerid, oldmoney, newmoney);
public OnPlayerMoneyUpdate(playerid, oldmoney, newmoney)
{
....
return 1;
}
3. La communication de fonction
En ce qui concerne la communication de fonctions, j'entends ici : pouvoir utiliser la même fonction dans plusieurs scripts différent.
Pour y arriver il n'y a pas de méthode magique, soit vous implantez la fonction dans chacun des scripts, soit vous vous faites un include contenant cette fonction (et possiblement d'autres) et vous l'intégrez dans chacun de ces scripts.
Voilà, j'espère que c'est suffisamment clair et que ceci vous aidera à comprendre
++Sim++