GTAOnline.net
San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: cristab le 15 Juillet 2009, 22:10:06
-
Bonjour voila a ce jour je me lance dans les include et j'aimerais si possible que l'on m'explique un peu
Qu'est ce que Statics dans le includes?
Pour le moment je travaille sur une include demarrage et systeme d'essence d'essence mais la il est fini pour moi mais ne fonctionne pas :s voila un exemple
//OnPlayerStateChange
SCFS(playerid, newstate, oldstate)
{
new VID = GetPlayerVehicleID(playerid);
new MOD = GetVehicleModel(playerid);
new string[128];
if(newstate == PLAYER_STATE_DRIVER)
{
format(string, sizeof(string), "~g~%s",Nom_Des_Vehicules[GetVehicleModel(VID)-400]);
GameTextForPlayer(playerid,string,3500,1);
if(Voiture_Demarer[VID] == 0 && MOD != 510 && MOD != 509 && MOD != 481)
{
TogglePlayerControllable(playerid,0);
SendClientMessage(playerid,Blanc,"Le moteur de ce vehicule est eteint appuie sur 'TAB' pour demarer");
}
else
{
SendClientMessage(playerid,Jaune,"Chouette le moteur tourne déjà!");
}
if(Voiture_essence[VID] < 1)
{
SendClientMessage(playerid,Blanc,"Dommage ce vehicule n'as plus d'essence!");
}
}
return 1;
}enfaite je j'aimerais fair un peu comme l'include de fredo que l'on mette ceci dans le script
public OnPlayerStateChange(playerid, newstate, oldstate)
{
SCFS(playerid, newstate, oldstate);
return 1;
}Mais apparement il y a une etape que j'ai du zapper mais je ne sais ou :s
le soucis pawno ne repond pas :s et je sais d'avance que sa vient de l'include
-
Salut,
il faudrait voir ton "en-tête d'include", mais normalement cette fonction ne pose pas problème...
les static sont simplement des variables qui ne sont accessible que dans une sections du script. Il est possible de séparer un script en plusieurs parties (par une technique que j'ignore), mais les includes sont par définition une section différente du script, donc elles se prêtent bien à ce type de variables. Ainsi une variable globale déclarée dans ton include n'existera pas pour le reste du script, ça permet d'éviter des conflits de nom et des modifications non désirée de ces variables puisque l'on est forcé de passé par l'include pour en modifier la valeur via une fonction...
EDIT: désolé si je ne suis pas très clair...
++Sim++
-
Voila ou j'en suis est dans cette etat il est inutilisable apparement :s
Lien pastebin GTAOnline (http://pastebin.gtaonline.fr/pastebin.php?show=622)
-
Petit Up
PS: Desole de faire un Petit Up Mais ce FS m'intéresse
-
ce n'est pas un fs mais une inc je vais pouvoir le partager des que je l'aurais tester grand merci a Sim pour son aide d'ailleur ;)
-
Ainsi une variable globale déclarée dans ton include n'existera pas pour le reste du script
Heu ... c'est exactement le contraire.
En fait, un include, comme sont nom l'indique est un fichier qui sera inclus dans un autre pour former le fichier à compiler.
Exemple :
Voici un include (que j'appellerais MonInclude) :
new UneVariable;
MaFonction ()
{
UneVariable++;
printf ("Nouvelle valeur : %d\n", UneVariable);
}
Voici mon script PAWN (volontairement très simple) :
#include "MonInclude"
main ()
{
UneVariable = 7;
MaFonction ();
}
Ce que le compilateur va faire, c'est construire un gros fichier final en mémoire avant de compiler. Le fichier final dans notre cas sera comme suit :
new UneVariable;
MaFonction ()
{
UneVariable++;
printf ("Nouvelle valeur : %d\n", UneVariable);
}
main ()
{
UneVariable = 7;
MaFonction ();
}
La variable UneVariable et la fonction MaFonction sont donc utilisables dans tout le script.
Il est même possible d'utilisé cette variable ou fonction dans un autre include mais il faut impérativement que l'autre include apparaisse après le premier :
Un autre include (nommé AutreInclude) :
AutreFonction ()
{
UneVariable+=2;
printf ("Nouvelle valeur : %d\n", UneVariable);
}
Le source suivant compile :
#include "MonInclude"
#include "AutreInclude"
main ()
{
UneVariable = 7;
MaFonction ();
}
Alors que si on met les includes dans le mauvais sens :
#include "AutreInclude"
#include "MonInclude"
main ()
{
UneVariable = 7;
MaFonction ();
}
On obtient les erreurs suivantes :
D:\Utilities&Misc\samp-server-0.2.2\pawno\include\AutreInclude.inc(3) : error 017: undefined symbol "UneVariable"
D:\Utilities&Misc\samp-server-0.2.2\pawno\include\AutreInclude.inc(4) : error 017: undefined symbol "UneVariable"
++
Syg
-
les static sont simplement des variables qui ne sont accessible que dans une sections du script.
je parlais des variables static mdr....
-
Effectivement, c'est vrai pour les variable static, elles ne sont visibles que dans le script (ou la fonction) où elles sont déclarées.
Attention toutefois avec l'utilisation de static.
Utilisé dans une fonction, ce mot clé indique que le variable ne sera pas détruite à la fin de la fonction et qu'elle conservera sa valeur.
Exemple :
MaFonction ()
{
/* Déclaration et initialisation d'un variable statique */
static Var =2;
/* Incrémentation de la variable */
Var +=5;
printf ("Valeur de Var : %d\n", Var);
}
main ()
{
MaFonction ();
MaFonction ();
}[\code]
L'exécution de main provequera l'affichage suivant
[tt]Valeur de Var : 7
Valeur de Var : 12[/tt]
La variable [tt]Var[/tt] n'est pas re-initialisée entre deux appels à [tt]MaFonction[/tt]
++
Syg
-
Merci pour cette precision enfaite cette include est un depart etant donner que je reserve quelque chose qui je pense raviras quelque coder debutant
Pour le moment voici donc l'include en question
pour l'utiliser rien de plus simple avec vos autre include declarer celle ci
#include <essence>
Vous pouvez egalement retirer
#include <a_samp>
Il est apeler dans l'include
les commande
Pour demarrer le vehicule appuiyer sur "TAB"
Pour fait le plein dans une station /essence
Si vous etes dans un vehicule sans essence /sortir pour le quitter
http://www.megaupload.com/?d=8WJX67KM (http://www.megaupload.com/?d=8WJX67KM)
Merci a Sim de m'avoir m'aider sans lui sa ne fonctionnerais toujour pas ^^
-
Salut,
ça j'ignorais, très intéressant comme info, merci Syg, je ne les avait utilisé qu'en "globale"
j'aurais une petite question en lien avec ces variables,
les static ne sont valides que dans la "section" de code où ils sont déclarés, les includes sont déjà à la base dans une section différente, mais il existe surement une instruction de précompilation qui permet de faire un changement de section où l'on le désire, si oui, laquelle?
EDIT: cristab, c'est toi qui a tout fais dans ton include...
++Sim++
-
j'ai u petit problème mais je n'arrive pas a poster ce que ma dit quand je compile mais je vous explique sa me donne 8 erreur :
C:\Documents and Settings\Administrateur.15C8C0122FFA4EF\Bureau\samp02Xserver.win32\gamemodes\WC-RP.pwn(27372) : error 025: function heading differs from prototype
C:\Documents and Settings\Administrateur.15C8C0122FFA4EF\Bureau\samp02Xserver.win32\gamemodes\WC-RP.pwn(27373) : error 021: symbol already defined: "PlayerToPoint"
C:\Documents and Settings\Administrateur.15C8C0122FFA4EF\Bureau\samp02Xserver.win32\gamemodes\WC-RP.pwn(8350) : error 021: symbol already defined: "OnPlayerCommandText"
C:\Documents and Settings\Administrateur.15C8C0122FFA4EF\Bureau\samp02Xserver.win32\gamemodes\WC-RP.pwn(1864) : error 021: symbol already defined: "OnPlayerConnect"
C:\Documents and Settings\Administrateur.15C8C0122FFA4EF\Bureau\samp02Xserver.win32\gamemodes\WC-RP.pwn(3664) : error 021: symbol already defined: "OnPlayerSelectedMenuRow"
C:\Documents and Settings\Administrateur.15C8C0122FFA4EF\Bureau\samp02Xserver.win32\gamemodes\WC-RP.pwn(3669) : error 021: symbol already defined: "OnPlayerExitedMenu"
C:\Documents and Settings\Administrateur.15C8C0122FFA4EF\Bureau\samp02Xserver.win32\gamemodes\WC-RP.pwn(3705) : error 021: symbol already defined: "OnPlayerStateChange"
C:\Documents and Settings\Administrateur.15C8C0122FFA4EF\Bureau\samp02Xserver.win32\gamemodes\WC-RP.pwn(118) : error 025: function heading differs from prototype
et je ne sais combien de Warning ;D ;D ;D
-
desoler tromper de version commente cette ligne
#define FILTERSCRIPT
c'est a dire comme ceci
//#define FILTERSCRIPT
-
voila et sa donne sa :
C:\Documents and Settings\Administrateur.15C8C0122FFA4EF\Bureau\samp02Xserver.win32\pawno\include\essence.inc(157) : error 004: function "core_OnGameModeExit" is not implemented
C:\Documents and Settings\Administrateur.15C8C0122FFA4EF\Bureau\samp02Xserver.win32\pawno\include\essence.inc(202) : error 004: function "core_OnVehicleSpawn" is not implemented
C:\Documents and Settings\Administrateur.15C8C0122FFA4EF\Bureau\samp02Xserver.win32\pawno\include\essence.inc(347) : error 004: function "core_OnPlayerKeyStateChange" is not implemented
C:\Documents and Settings\Administrateur.15C8C0122FFA4EF\Bureau\samp02Xserver.win32\gamemodes\WC-RP.pwn(118) : error 025: function heading differs from prototype
C:\Documents and Settings\Administrateur.15C8C0122FFA4EF\Bureau\samp02Xserver.win32\gamemodes\WC-RP.pwn(27372) : error 025: function heading differs from prototype
C:\Documents and Settings\Administrateur.15C8C0122FFA4EF\Bureau\samp02Xserver.win32\gamemodes\WC-RP.pwn(27373) : error 021: symbol already defined: "PlayerToPoint"
et encore je sais pas combien de Warnings
-
je vient de tester sa fonctionne attention cette include et utilisable en GM sinon decommenter #define FILTERSCRIPT et changer l'extension du fichier en pwn et voila votre FS
-
ahhh Merci c'est bon sa marche GG :)
Merci pour cette precision enfaite cette include est un depart etant donner que je reserve quelque chose qui je pense raviras quelque coder debutant
presser de voir de quoi s'agit il :-[ :-[
EDIT : tu peu pas ajouter la vitesse accoter de l'essence??? ou explique comment faire je peu essayer de la faire :P :-[ ::)
-
Pour répondre à Sim :
Non, il n'existe rien en PAWN qui permette de passer d'une "section" à une autre.
En C et C++, on utilise le mot clé extern pour dire qu'une variable se trouve dans un autre source mais il n'y a pas d'équivalent en PAWN.
Le mieux c'est de savoir à l'avance ce qu'on va faire de telle ou telle variable ou fonction et de coder en conséquence.
Et puis permettre ce que tu demandes empêcherait de "protéger" les variables.
++
Syg
-
ahhh Merci c'est bon sa marche GG :)
Merci pour cette precision enfaite cette include est un depart etant donner que je reserve quelque chose qui je pense raviras quelque coder debutant
presser de voir de quoi s'agit il :-[ :-[
EDIT : tu peu pas ajouter la vitesse accoter de l'essence??? ou explique comment faire je peu essayer de la faire :P :-[ ::)
rien ne seras divulguer jusqu'a sa sortit ;)
Pour le compteur je peu voir sa de sortir une version qui le comporteras
PS Merci syg pour c'est précision
-
ok, sa serais vraiment gentil