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

Titre: je me lance dans les includes pour voir
Posté 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
Titre: Re : je me lance dans les includes pour voir
Posté par: S!m le 16 Juillet 2009, 04:03:29
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++
Titre: Re : je me lance dans les includes pour voir
Posté par: cristab le 16 Juillet 2009, 10:00:43
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)
Titre: Re : je me lance dans les includes pour voir
Posté par: Jerome02 le 29 Juillet 2009, 19:45:37
Petit Up

PS: Desole de faire un Petit Up Mais ce FS m'intéresse 
Titre: Re : je me lance dans les includes pour voir
Posté par: cristab le 29 Juillet 2009, 20:08:37
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 ;)
Titre: Re : Re : je me lance dans les includes pour voir
Posté par: Syg le 30 Juillet 2009, 14:06:15
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
Titre: Re : Re : je me lance dans les includes pour voir
Posté par: S!m le 30 Juillet 2009, 17:40:32
les static sont simplement des variables qui ne sont accessible que dans une sections du script.

je parlais des variables static mdr....
Titre: Re : je me lance dans les includes pour voir
Posté par: Syg le 31 Juillet 2009, 11:02:09
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
Titre: Re : je me lance dans les includes pour voir
Posté par: cristab le 31 Juillet 2009, 16:24:29
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 ^^
Titre: Re : je me lance dans les includes pour voir
Posté par: S!m le 31 Juillet 2009, 16:27:21
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++
Titre: Re : je me lance dans les includes pour voir
Posté par: Jerome02 le 31 Juillet 2009, 16:43:49
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
Titre: Re : je me lance dans les includes pour voir
Posté par: cristab le 31 Juillet 2009, 16:45:02
desoler tromper de version commente cette ligne

#define FILTERSCRIPT
c'est a dire comme ceci


//#define FILTERSCRIPT
Titre: Re : je me lance dans les includes pour voir
Posté par: Jerome02 le 31 Juillet 2009, 16:48:20
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
Titre: Re : je me lance dans les includes pour voir
Posté par: cristab le 31 Juillet 2009, 16:53:08
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
Titre: Re : je me lance dans les includes pour voir
Posté par: Jerome02 le 31 Juillet 2009, 16:56:37
ahhh Merci c'est bon sa marche GG   :)


Citer
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 :-[ ::)
Titre: Re : je me lance dans les includes pour voir
Posté par: Syg le 31 Juillet 2009, 20:28:04
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
Titre: Re : Re : je me lance dans les includes pour voir
Posté par: cristab le 31 Juillet 2009, 23:52:09
ahhh Merci c'est bon sa marche GG   :)


Citer
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
Titre: Re : je me lance dans les includes pour voir
Posté par: Jerome02 le 01 Août 2009, 10:44:23
ok, sa serais vraiment gentil