Bienvenue, Invité. Veuillez vous connecter ou vous inscrire.
Avril 27, 2024, 03:13:50
Accueil | Aide | Rechercher | Identifiez-vous | Inscrivez-vous

+  ArcheoGamers Forums
|-+  Support Officiel AtomicFE
| |-+  En Francais
| | |-+  [API] API culture
0 Membres et 1 Invité sur ce fil de discussion. « sujet précédent | | sujet suivant »
Pages: [1] 2 Imprimer
Auteur Fil de discussion: [API] API culture  (Lu 22993 fois)
Pizza
Chef d'équipe
Indiana Jones
*****
Messages: 769



WWW
« le: Novembre 01, 2007, 18:25:37 »

 Grimaçant

hophophop

Voilà ce que j'ai pu extraire des plugins et du forum, pour les futurs développeurs de plugins  Grimaçant
Il y a deux ou trois points obscurs si tu peux les commenter Youki  Clin d'oeil

GetAtomicVariable(Chaîne)
Renvoi une chaîne de l'environnement d'exécution d'Atomic
ROM
ROMFILENAME
ROMEXTENSION
ROMTITLE
CONFIGNAME
CONFIGFILENAME
EMULATORDIR
EMULATOREXE
TRANSLATEDROM <- m'affiche "config doesn't use romname translator"
CONFIGTITLE <- Affiche en fait la valeur CONFIGNAME du fichier Atomic019.cfg

GetAtomicVariableInt(Chaîne)
Renvoi un entier de l'environnement d'exécution d'Atomic
NBITEM
NBSELECTEDITEMINDEX

GetConfigProperty(Chaîne)
Renvoi une chaîne du fichier de configuration d'Atomic
ROMDIR
ROMEXTENSION
SNAPEXTENSION
SNAPDIR
MARQUEEDIR
ROMDIR
MAMEEXE
TEMPLATEDIR
METADATADIR
CUSTOMDIR1
CUSTOMDIR2
LAYOUTDIR
PLUGINDIR


GetConfigPropertyInt(Chaîne)
Renvoi un entier du fichier de configuration d'Atomic
LAYOUTORIENTATION
LAYOUT_RESOLUTIONX
LAYOUT_RESOLUTIONY

GetPluginConfigFileName()
Renvoi le nom du fichier de config du plugin en cours
C'est à dire "Nom du plugin" - "atoplug" + "plugcfg"

GetKeyCode
Propriété de l'environnement Atomic
Retourne la dernière touche clavier enfoncée.

SetTransparentColor R, G, B
Détermine la couleur transparente du prochain Bitmap affiché

SetTextColor R, G, B
Détermine la couleur du prochain texte affiché

ImageDrawResize Bitmap, x, y, largeur, hauteur, entier, Boolean
Affiche a l'écran un Bitmap en changeant sa taille.
L'entier représente l'intensité de la transparence de l'image (0 transparent, 255 opaque)
Le booléen détermine si on garde le ratio Largeur/Hauteur lors du retaillage

SetFont(Police)
Détermine la police de caractère des prochains affichages texte

DrawText x, y, Texte, Taille_police, hauteur_police
Affiche un texte à l'écran avec une police de la taille spécifiée, dans la couleur active

DrawTextInRect x, y, largeur, hauteur, chaîne, Taille_police, hauteur_police
Affiche un texte à l'écran dans un rectangle défini avec une police de la taille spécifiée, dans la couleur active

La je saisi pas bien la nuance entre Taille_police et hauteur_police

SetOverrideKeyPressed
Intercepte la saisie clavier au sein du plugin avant qu'elle ne soit transmise à l'environnement
(Une sorte de Keypreview entre Controls et Forms si j'ai bien compris le parallèle)

ClearStringList Numéro
Initialise une liste de chaînes en mémoire et lui attribue le numéro choisi

AddToStringList Numéro, Chaîne
Ajoute la chaîne transmise à la liste de chaîne de numéro spécifié

GetStringListSize(Numéro)
Retourne un entier donnant le nombre de chaînes stockées dans la liste de chaîne du Numéro spécifiée

GetStringListValueAt(Numéro, Index)
Retourne la chaîne stockée à l'index Index de la liste de chaîne du Numéro spécifiée

Play_MP3(chaîne)
Routine Media Player
Joue le MP3 dont le chemin est donné en paramètre

ClearCustomList
Initialise une liste de ROMS personnalisée en mémoire

AddToCustomList Chaîne, Extension
Ajoute la chaîne transmise à la liste de ROMS personnalisée et lui donne l'extension spécifiée (ZIP, etc)

Run_Game(Chaîne)
Lance la rom passée en paramètre

GameListGetTitleOf(Chaîne)
Retourne le nom du jeu correspondant à la rom passée en paramètre

Find_ParentRom(Chaîne)
Retourne le nom de la rom parente du clone dont la rom est passée en paramètre en respectant les restrictions de l'Exclude List.
Remplit la SimilarList au passage

Find_ParentRomIncludingExclude(Chaîne)
Retourne le nom de la rom parente du clone dont la rom est passée en paramètre en incluant les roms éventuellement exclues par l'Exclude List.
Remplit la SimilarList au passage

GetSimilarListSize()
Retourne le nombre de clones de la rom actuelle

GetSimilarListAt(Index)
Retourne le nom de la rom à la position Index dans la liste des clones de la rom active

Switch_To_GameList
Bascule l'affichage vers la liste principale

Switch_To_FilteredList
Bascule l'affichage vers la liste de ROMS filtrée

Switch_To_CustomList
Bascule l'affichage vers la liste de ROMS personnalisée

FilterList Chaîne, Booléen
Remplit la Liste filtrée (accessible via Switch_To_FilteredList) avec les jeux dont le nom correspond à la chaîne
Si le booléen = 1 : Chaîne exacte
Si le booléen = 0 : Chaîne partielle

ScrollTextCreate
ScrollTextSetBackGroundColor
ScrollTextSetText
ScrollTextDraw


Ces 4 là j'ai pas approfondi, elles ont l'air 'en test'  Clin d'oeil
Journalisée

La pizza c'est sympa, mangez-en !
youki
Chef d'équipe.
Indiana Jones
*****
Messages: 8178



« Répondre #1 le: Novembre 01, 2007, 20:05:29 »

Citation
TRANSLATEDROM <- m'affiche "config doesn't use romname translator"

Ca marche avec l'option : Activé la transformation ROMS=>CODE .
Pour les emulateurs comme Zinc  , qui demande un numero et non un nom de rom. 

Citation
SetOverrideKeyPressed
Intercepte la saisie clavier au sein du plugin avant qu'elle ne soit transmise à l'environnement
(Une sorte de Keypreview entre Controls et Forms si j'ai bien compris le parallèle)

En fait, quand tu mets ca, les evenement keypress ne seront pas suivit au autre plugin ou a Atomic.  Si tu met pas ca, si tu appuie sur Player1 Start par exemple, tout les plugins vont recevoir Player1 Start (il le traite si il le veulent) ,puis ensuite c'est Atomic.   Maintenant si tu veux faire un plugin qui lance les jeux d'Atomic "differement" en utilisant la meme touche , il faut que tu empeche le code de la touche d'arrivée au moteur d'Atomic, c'est la qu'intervient SetOverideKeyPressed.

Citation
DrawTextInRect x, y, largeur, hauteur, chaîne, Taille_police, hauteur_police
Affiche un texte à l'écran dans un rectangle défini avec une police de la taille spécifiée, dans la couleur active

C'est pas Taille_police, c'est largeur_police.

Citation
FilterList Chaîne, Booléen
Remplit la Liste filtrée (accessible via Switch_To_FilteredList) avec les jeux dont le nom correspond à la chaîne
Si le booléen = 1 : Chaîne exacte
Si le booléen = 0 : Chaîne partielle

0=filtre si les noms dans la liste contienne la chaine passé (peut importe la position)   (*chaine*)
1=filtre si les noms dans la liste COMMENCE par la chaine passé. (chaine*)


Citation
AddToStringList Numéro, Chaîne
Ajoute la chaîne transmise à la liste de chaîne de numéro spécifié
Numéro de liste de 1 à 5   maxi.

Citation
ScrollTextCreate
ScrollTextSetBackGroundColor
ScrollTextSetText
ScrollTextDraw

Je les utilises dans le plugin simple History Scroll  .


Journalisée

Pizza
Chef d'équipe
Indiana Jones
*****
Messages: 769



WWW
« Répondre #2 le: Novembre 01, 2007, 20:14:58 »

Merci  Clin d'oeil
Journalisée

La pizza c'est sympa, mangez-en !
youki
Chef d'équipe.
Indiana Jones
*****
Messages: 8178



« Répondre #3 le: Novembre 01, 2007, 20:19:58 »

Tiens toute les api qui j'ai defini comme extension de VBScript  (je te donne la declaration telquel dans mon code)

afx_msg void ShowMessage(LPCTSTR Message);
   afx_msg void MoveSnap(int x,int y);
   afx_msg void StoreIntVar(int pos,int value);
   afx_msg int GetIntVar(int pos);
   
   afx_msg void StoreStringVar(int pos,LPCTSTR csValue);
   afx_msg BSTR GetStringVar(int pos);
   
   afx_msg void StoreFloatVar(int pos,float value);
   afx_msg float GetFloatVar(int pos);

   afx_msg int GetLayoutProperty(LPCTSTR Varname);
   afx_msg void SetLayoutProperty(LPCTSTR Varname,int value);
   afx_msg void SetLayoutPropertyText(LPCTSTR Varname,LPCSTR value);
   afx_msg BSTR GetConfigProperty(LPCTSTR Varname);
   afx_msg void SetConfigProperty(LPCTSTR Varname,LPCTSTR value);
   afx_msg int GetConfigPropertyInt(LPCTSTR Varname);
   afx_msg void SetConfigPropertyInt(LPCTSTR Varname,int value);

   afx_msg int  GameListGetSelectedIndex();
   afx_msg BSTR GameListGetSelectedGame();
   afx_msg int  GameListGetSize();
   afx_msg BSTR GameListGetGameNameAt(int GameListIndex);
    afx_msg BSTR GameListGetTitleOf(LPCTSTR sGameName);

   afx_msg void LogToConsole(LPCTSTR Text);
   afx_msg void LogToScreen(int x, int y, LPCTSTR sString);
   afx_msg void ActionInsertCredit1();
   afx_msg void ActionInsertCredit2();
   afx_msg void ActionUserListRemove();   
   afx_msg void ActionUserListAdd();   
   afx_msg void ActionGameListNext(); 
   afx_msg void ActionGameListPrevious(); 
   afx_msg void ActionGameListPageDown();
   afx_msg void ActionGameListPageUp();
   afx_msg void ActionBack();
   afx_msg void ActionRun();
   afx_msg void ActionRunGame(LPCTSTR sGame);
   
   afx_msg BSTR GetActionKeyPressed();
   
   afx_msg int PointerGetX();
   afx_msg int PointerGetY();
   afx_msg bool PointerIsButton1Pressed();
   afx_msg bool PointerIsButton2Pressed();

   afx_msg int GetCurrentLayer();
   afx_msg void RefreshScreen();
   afx_msg void ClearScreen();
   afx_msg void DisplayAtomic();
   
   
   afx_msg void SpriteCreate(int nSpriteNumber,LPCTSTR Filename);
   afx_msg void SpriteMask(int nSpriteNumber,LPCSTR Filename);
   afx_msg void SpriteDraw(int nSpriteNumber,int x,int y,int opacity);
   afx_msg void SpriteDrawResize(int nSpriteNumber,int x,int y,int w,int h,int opacity);
   afx_msg void SpritePlace(int nSpriteNumber,int x,int y);
   afx_msg void SpritePlaceResize(int nSpriteNumber,int x,int y,int w,int h);
   afx_msg void SpriteDisplay(int nSpriteNumber,int opacity);
   afx_msg void SpriteAddAnimationFrame(int nSpriteNumber,LPCTSTR Filename);
   afx_msg bool SpriteCollision(int nSpriteNumber1,int nSpriteNumber2);
   afx_msg void SpriteSetAnimationDelay(int nSpriteNumber,int Delay);
   afx_msg bool SpriteInZone(int nSpriteNumber,int nZoneNumber);

   afx_msg void ScrollTextCreate(int nScrollNumber,LPCTSTR FontFileName,int FontWidth,int FontHeight,int CharbyRow,int ScrollZoneWidth,int ScrollZoneHeight);
   afx_msg void ScrollTextMask(int nScrollNumber,LPCSTR Filename);
   afx_msg void ScrollTextDraw(int nScrollNumber,int x,int y,int opacity);
   afx_msg void ScrollTextDrawResize(int nScrollNumber,int x,int y,int w,int h,int opacity);
   afx_msg void ScrollTextPlace(int nScrollNumber,int x,int y);
   afx_msg void ScrollTextPlaceResize(int nScrollNumber,int x,int y,int w,int h);
   afx_msg void ScrollTextDisplay(int nScrollNumber,int opacity);
   afx_msg void ScrollTextSetText(int nScrollNumber,LPCSTR Text);
   afx_msg void ScrollTextScroll(int nScrollNumber,int speed);
   afx_msg void ScrollTextSetBackGroundColor(int nScrollNumber,long rgbColor);


   afx_msg void ZoneTextCreate(int nZoneNumber,LPCTSTR FontFileName,int FontWidth,int FontHeight,int CharbyRow,int ZoneWidth,int ZoneHeight);
   afx_msg void ZoneTextMask(int nZoneNumber,LPCSTR Filename);
   afx_msg void ZoneTextDraw(int nZoneNumber,int x,int y,int opacity);
   afx_msg void ZoneTextDrawResize(int nZoneNumber,int x,int y,int w,int h,int opacity);
   afx_msg void ZoneTextPlace(int nZoneNumber,int x,int y);
   afx_msg void ZoneTextPlaceResize(int nZoneNumber,int x,int y,int w,int h);
   afx_msg void ZoneTextDisplay(int nZoneNumber,int opacity);
   afx_msg void ZoneTextSetText(int nZoneNumber,LPCSTR Text);
   afx_msg void ZoneTextSetBackGroundColor(int nZoneNumber,long rgbColor);



   afx_msg void ImageDrawResize(LPCTSTR Filename,int x,int y,int w,int h,int opacity,bool bKeepRatio);
   afx_msg void ImageDrawResizeMasked(LPCTSTR Filename,LPCTSTR MaskFilename,int x,int y,int w,int h,int opacity,bool bKeepRatio);



   afx_msg void RotateScreen(int Orientation);
   afx_msg void CocktailDisplay(boolean bCocktail);
   afx_msg long GetMilliSecondCount();
   afx_msg int  GetRandomNumber(int nFrom,int nTo);

   afx_msg void ZoneActionDefine(int nZoneNumber,int x,int y,int w,int h);
   afx_msg bool ZoneActionTestPoint(int nZoneNumber,int x,int y);
   afx_msg void ZoneActionDraw(int nZoneNumber);

   afx_msg void PlaySound(LPCTSTR sFileName);
   afx_msg bool IsKeyPressed(int keycode);
   afx_msg void Play_MP3(LPCTSTR sMp3);
   afx_msg int Is_MP3Playing();
   afx_msg void Stop_MP3();

   
   afx_msg int TrajectoryLoad(int nTrajectoryNumber,LPCTSTR sFileName);
   afx_msg void TrajectoryReset(int nTrajectoryNumber);
   afx_msg int TrajectoryNext(int nTrajectoryNumber);
   afx_msg int TrajectoryGetX(int nTrajectoryNumber);
   afx_msg int TrajectoryGetY(int nTrajectoryNumber);
   afx_msg int TrajectoryGetIndex(int nTrajectoryNumber);
   afx_msg int TrajectoryGetXAt(int nTrajectoryNumber,int index);
   afx_msg int TrajectoryGetYAt(int nTrajectoryNumber,int index);
   

   afx_msg BSTR FileExtract(LPCTSTR Filename,LPCTSTR FrontMatch,LPCTSTR EndMatch);

   afx_msg long ColorRGB(int red,int green,int blue);

   //plugin support

   afx_msg BSTR GetAtomicVariable(LPCTSTR Varname);
   afx_msg int GetAtomicVariableInt(LPCTSTR Varname);

   afx_msg void DrawText(int x, int y, LPCTSTR sString,int width, int height);
   afx_msg void DrawTextInRect(int x, int y,int rectw,int recth,LPCTSTR sString,int width, int height);

   afx_msg void SetTextColor(int r, int g, int b);
   afx_msg int GetKeyCode();
   afx_msg void SetFont(LPCTSTR sfont);
   afx_msg bool RunProcess(LPCTSTR sString,bool hideprocess,bool waitend);

   afx_msg void ClearCustomList();
   afx_msg void AddToCustomList(LPCTSTR csRomName, LPCSTR csExtension);
   afx_msg void InsertCustomListAt(int index,LPCTSTR csRomName, LPCSTR csExtension);

   afx_msg BSTR GetCustomListAt(int index);
   afx_msg BSTR GetCustomExtensionListAt(int index);
   afx_msg int GetCustomListSize();

   afx_msg BSTR GetGameListAt(int index);
   afx_msg BSTR GetGameExtensionListAt(int index);
   afx_msg int GetGameListSize();

   afx_msg BSTR GetFavoryListAt(int index);
   afx_msg BSTR GetFavoryExtensionListAt(int index);
   afx_msg int GetFavoryListSize();

   afx_msg BSTR GetSimilarListAt(int index);
   afx_msg int GetSimilarListSize();
   

   afx_msg void Switch_To_CustomList();
   afx_msg void Switch_To_FavoryList();
   afx_msg void Switch_To_GameList();
   afx_msg void Switch_To_FilteredList();

   afx_msg void SetOverrideKeyPressed();
   afx_msg void StartThread();

   afx_msg void RegisterKeyCode(int keycode);

   afx_msg void FilterList(LPCTSTR csFilter,int mode);
   
   afx_msg int FindInStringList(int listNumber,LPCSTR csString);
   afx_msg void ClearStringList(int listNumber);
   afx_msg void AddToStringList(int listNumber, LPCSTR csString);
   afx_msg void InsertStringListAt(int listNumber,int index,LPCSTR csString);
   afx_msg BSTR GetStringListValueAt(int listNumber,int index);
   afx_msg int GetStringListSize(int listNumber);

   afx_msg void SetTransparentColor(int r,int g,int b);

   afx_msg bool LEDWIZ_Init(int Device);
   afx_msg void LEDWIZ_ClearStates();
   afx_msg void  LEDWIZ_ClearProfiles();
   afx_msg void LEDWIZ_SetState(int Device,int Led,bool bState);
   afx_msg void LEDWIZ_SetIntensity(int Device,int Led,int Intensity);
   afx_msg void LEDWIZ_Send();

   afx_msg BSTR GetPluginFileName();
   afx_msg BSTR GetPluginConfigFileName();

   afx_msg void Run_Game(LPCTSTR sString);
   afx_msg BSTR Find_ParentRom(LPCSTR romname);
   afx_msg BSTR Find_ParentRomIncludingExclude(LPCSTR romname);

Certaine concernant le layout ne fonctionne peut etre qu'avec les layout 0.15 vieille generation. J'ai pas tout retesté.

Journalisée

Pizza
Chef d'équipe
Indiana Jones
*****
Messages: 769



WWW
« Répondre #4 le: Novembre 01, 2007, 20:25:24 »

Pas grave, c'est déjà super, je vais faire le tri et tester quelques commandes dans un plugin qui me sert à débuguer voir ce que je peux débusquer d'interessant à documenter
Journalisée

La pizza c'est sympa, mangez-en !
jLn_
archéologue confirmé
***
Messages: 101


« Répondre #5 le: Février 18, 2009, 19:31:50 »

Désolé si j'exhume comme un porc sur ce coup là, mais il faut l'épingler ce post   Bisou !
Juste deux question rapide...
- Il y a t-il de nouvelles fonctions déclarer depuis novembre 2007 ?
- Pour me faire la main, je cherche a faire un menu de confirmation pour quitter atomic.
Je suppose que c'est parce que je suis pas encore à l'aise ni avec les fonctions vbscript, ni avec les api. Mais je trouve rien la dedans qui pourrais m'aider a fermer atomic.
Journalisée

...
Pizza
Chef d'équipe
Indiana Jones
*****
Messages: 769



WWW
« Répondre #6 le: Février 19, 2009, 11:31:45 »

En attendant tu peux activer l'option Mot de passe en quittant dans Atomic, ça fait office de confirmation je pense  Clin d'oeil
Journalisée

La pizza c'est sympa, mangez-en !
jLn_
archéologue confirmé
***
Messages: 101


« Répondre #7 le: Février 19, 2009, 11:46:58 »

mmm c'est pas vraiment l'idée... je peu toujours trouver un moyen pour tuer le processus d'atomic mais ça ferais sauter les crédits, et ça c'est mal  Souriant .
Au pire je vais me trouver autre chose a faire pour mon premier plugin !
Journalisée

...
youki
Chef d'équipe.
Indiana Jones
*****
Messages: 8178



« Répondre #8 le: Février 19, 2009, 17:02:59 »

Ben les credits , tu peux les faire sauter facilement, c'est une option!

Et tu peux meme personnaliser la page, et afficher ce que tu veux a la sortie!

Pour ce que tu demande, il faut que je rejette un oeil, mais en ce oment c'est le rush... Triste  J'ai tres tres peu de temps
Journalisée

jLn_
archéologue confirmé
***
Messages: 101


« Répondre #9 le: Février 19, 2009, 17:11:07 »

Merci, te presse pas!
Journalisée

...
youki
Chef d'équipe.
Indiana Jones
*****
Messages: 8178



« Répondre #10 le: Février 20, 2009, 00:59:39 »

Bon alors voila une solution.

Dans la section commun function de script de plugin de Atomic , tu creer cette fonction :

function CloseAtomic
       
        NomExe = "Atomic.exe"
        Set oSh=CreateObject("WScript.Shell")
        Set oWMi=GetObject("winmgmts:/root/cimv2")
        Requete = "SELECT * FROM Win32_Process WHERE Name='" & NomExe & "'"
        Set colProcs=oWmi.ExecQuery(requete)
        For Each oProc In colProcs
          If oSh.AppActivate(oProc.ProcessId) Then
           
            oSh.SendKeys "%{F4}"
          End if
       
        Next

end function



Et quand tu veux fermer Atomic, tu appelle simplement :

CloseAtomic

J'ai testé , ca a l'air de marcher.
Journalisée

youki
Chef d'équipe.
Indiana Jones
*****
Messages: 8178



« Répondre #11 le: Février 20, 2009, 01:18:46 »

Tiens puisque tu t'interresse au scripting.

Dans Atomic , il y avait avant le plugin , la possibilité des faire des layouts scripté.  (ca utilise la meme API)  .  Peut etre que dans le cas de tes layouts speciaux ca peut te servir .

Regarde cette TRES vielle demo : 

http://www.atomicfe.com/Downloads/AtomicDemo.exe

choisi "layouts" sur le premier menu,  puis essaye les 2 qui sont scripté.

Matrix et invaders. 

Matrix est tres lent surtout sur cette tres veille version de Atomic.

Et pour invaders, pour tirer c'est la touche CTRL . (il faut viser le screenshot pour le lancer le jeu! )

Si tu regarde dans les repertoire de chaque layout, il y a un fichier .vbs , c'est le script qui gere le layout.





Journalisée

jLn_
archéologue confirmé
***
Messages: 101


« Répondre #12 le: Février 20, 2009, 08:22:43 »

Super c'est énorme ton scripts space invaders, je vais regarder ça de très très prés. Puis un grand merci pour le scripts  Bisou.
Si j'ai bien compris la fonction renvois une touche a tout les processus du non de Atomic.exe a la condition qu'il soit actif ?
Journalisée

...
youki
Chef d'équipe.
Indiana Jones
*****
Messages: 8178



« Répondre #13 le: Février 20, 2009, 11:01:06 »

Oui, pour le script.

Ca parcoure la liste des process pour trouver Atomic.exe , si il en trouve un , il l'active (lui donne le focus) et lui envoie "Atl+F4" qui provoque la fermeture. 

Cependant, Si tu as 3 Atomic.exe lancé en meme temps, ilse peut que les 3 se ferme ,je pense. (ca depend a quel moment celui qui a lancer le script se ferme en fait)... mais bon..normalement il y a qu'un Atomic.exe à la fois!

Journalisée

jLn_
archéologue confirmé
***
Messages: 101


« Répondre #14 le: Février 21, 2009, 16:18:53 »

Youki peut tu me donner des détaille sur les variables modifiable par cette api stp ?
SetLayoutProperty(LPCTSTR Varname,int value)
Je cherche un moyen de modifier la résolution du layout en fonction de la résolution du projet.
« Dernière édition: Février 21, 2009, 16:46:50 par jLn_ » Journalisée

...
Pages: [1] 2 Imprimer 
« sujet précédent | | sujet suivant »
Aller à:  


Connexion avec identifiant, mot de passe et durée de la session

Hit-Parade Propulsé par MySQL Propulsé par PHP Powered by SMF 1.1.4.9 | SMF © 2006, Simple Machines LLC XHTML 1.0 Transitionnel valide ! CSS valide ! Classement de sites - Inscrivez le vôtre!