La Bibliothèque de Neverwinter Nights
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
La date/heure actuelle est 10/05/2024 09:16:44


  Page 1 sur 1 ¤

Voir le sujet précédent ¤ Voir le sujet suivant 
Auteur Message
Djezebel
Héros
Inscrit le: 29 Sep 2005
Messages: 252
Répondre en citant
Posté le : 03/02/2006 18:52:27 Sujet du message : Jeux de cartes

Bonjour !
Je tente de faire un script pour jouer au Kabu mais je n'y arrive pas trop, donc je sollicite votre aide.

D'abord les règles :

Le but : arriver à atteindre le chiffre "9" en unités (9, 19, 29).

Le déroulement du jeu : Ca se joue à deux (le PNJ et le joueur) avec un jeu de cartes sans figures et sans Joker(de 1 à 10). Chacun prend une carte et obtient un nombre. Suivant ce nombre, il peut choisir de prendre une autre carte qui s'ajoutera à la première. Et ainsi jusqu'à trois cartes. Celui qui se rapproche le plus du 9 a gagné et l'autre lui doit 5 pièces d'or.

Exemple :
Le PNJ obtient un 3 et le joueur un 4.
Le PNJ et le joueur rejouent.
Le PNJ obtient un 4 et le joueur un 7 donc :
Le PNJ a 7 (3+4) et le joueur 11 (4+17)
Le PNJ reste là, le joueur reprend une carte :
Le joueur obtient un 8 :
Le PNJ a 7 et le joueur 8.
Le joueur a gagné.



Dans le dialogue, je pensais mettre des tokens.
Quelque chose dans ce genre :

- J'obtiens un <CUSTOM3003> et vous obtenez un <CUSTOM3004>. Voulez-vous une autre carte ?
- Oui
- Non

Sur le non on donne le résultat, et sur le "oui" on retire...
Mais voilà, comment ajouter tout ça ?

J'ai fais une "ébauche" dans le OnCondition de la phrase avec les Custom :

NWScript :
int StartingConditional()
{
int nCarte = d10
SetCustomToken(3003, InToString(nCarte))
}
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.


Mais ensuite ? comment faire en sorte que ce soit "sauvegardé", va-t-il falloir faire plein de scripts pour chaque phrase ? N'est-il pas possible de faire une sorte de boucle ?

Merci de votre attention !

PS : Si vous avez des idées de jeux de cartes ou de paris pour les tavernes, n'hésitez pas à les ajouter dans ce post.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Ivellios
Légende vivante
Inscrit le: 25 Jan 2005
Messages: 447
Localisation: Poitiers
Répondre en citant
Posté le : 03/02/2006 20:07:16 Sujet du message :

Tu utilise les variables locales.
SetLocalInt, GetLocalInt, avec sa tu sauvegarde ou restitue un nombre enregistré.

Exemple

Les deux joueurs (PJ/PNJ) piochent une carte :
3 et 4 :
NWScript :
SetLocalInt(oSelf, "PNJ", 3);
SetLocalInt(oSelf, "PJ", 4);
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.


Ils repiochent :
4 et 7 :
NWScript :
SetLocalInt(oSelf, "PNJ", GetLocalInt(oSelf, "PNJ") + 4);
SetLocalInt(oSelf, "PJ", GetLocalInt(oSelf, "PJ") + 7);
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.


Ils repiochent :
7 et 8 :
NWScript :
SetLocalInt(oSelf, "PNJ", GetLocalInt(oSelf, "PNJ") + 7);
SetLocalInt(oSelf, "PJ", GetLocalInt(oSelf, "PJ") + 8 );
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.


Ici j'ai mit directement les valeures pour que tu comprenne bien, mais sinon ils faut les remplacer par la valeur de ta carte.
Ensuite entre chaque test tu fait si le chiffre < 9 && != 9 (sinon gagné) tu fait TonNombre%10 ça retournera le chiffre des unités.
Tu resteste si c'est != 9 (sinon c'est gagné) et à la fin si personne à gagné tu fait la différence et tu regarde qui est le plus près (en fesant attention au chiffre des unités des nombres comme 10 ou 20 ^^).

En très large c'est ça...
_________________
Scripts, systèmes, fonctions,... c'est par ici...
Pyjama pour castor, une vocation, un avenir sûr
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur MSN Messenger Ignorer l'utilisateur
 
Djezebel
Héros
Inscrit le: 29 Sep 2005
Messages: 252
Répondre en citant
Posté le : 03/02/2006 20:18:26 Sujet du message :

J'arrive un peu à déblayer, merci Smile
J'arriverai à mettre un nombre aléatoire mais j'ai plusieurs endroits où ça bloque :
- Je n'ai pas très bien compris comment récupérer le chiffre des unités
- Comment faire si un chiffre sort à chaque fois (bien que les probabilités soient faibles : il n'y a que 4 cartes avec le même nombre).
- Comment faire pour que le PNJ s'arrête si son chiffre est entre 6 et 9 ? (qu'il dise qu'il ne veut plus de carte, mais que le PJ puisse prendre à nouveau une carte)
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Ivellios
Légende vivante
Inscrit le: 25 Jan 2005
Messages: 447
Localisation: Poitiers
Répondre en citant
Posté le : 03/02/2006 20:53:45 Sujet du message :

Tous ce que tu demande c'est des tests classiques.
Pour récupérer le chiffre des unités il faut utiliser opérateur reste de division (%)
7%10 = 7
19%10 = 9
22%10 = 2
26%10 = 6
etc

Pour pas piocher deux fois le même nombre c'est une boucle.
_________________
Scripts, systèmes, fonctions,... c'est par ici...
Pyjama pour castor, une vocation, un avenir sûr
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur MSN Messenger Ignorer l'utilisateur
 
Djezebel
Héros
Inscrit le: 29 Sep 2005
Messages: 252
Répondre en citant
Posté le : 05/02/2006 05:36:31 Sujet du message :

Bon, les maths n'étant pas mon fort, je poste l'avancée de mes recherches.

Voici ce que j'ai déjà comme dialogue :

- [PNJ] *mélange les cartes, les distribue, s'en donne une et vous en donne une* J'obtiens un <CUSTOM3003> et vous un <CUSTOM3004> ! Voulez-vous une autre carte ?
-- [PJ]Oui
--- [PNJ] Moi aussi, j'obtiens donc un <CUSTOM3003> et vous un <CUSTOM3004>. Voulez-vous une dernière carte ?
---- [PJ] Oui.
----- [PNJ] Moi aussi, j'obtiens donc un <CUSTOM3003> et vous un <CUSTOM3004>. Le gagnant est <CUSTOM3005>.
----- [PNJ] C'est bon pour moi. Je garde mon <CUSTOM3003> et vous obtenez un <CUSTOM3004>. Le gagnant est <CUSTOM3005>.
--- [PJ] Non
----- [PNJ] En ce cas vous gardez votre <CUSTOM3004>. J'ai un <CUSTOM3003>. Le gagnant est donc <CUSTOM3005>

(etc...)


Pour l'instant, je n'ai fais que la condition de la première phrase.

Ca donne ça :

NWScript :
int StartingConditional()
{

object oSelf = OBJECT_SELF;
int nCartePNJ = d10();
int nCartePJ = d10();

if(GetLocalInt(oSelf, "retirage") != 1) //Si le PNJ a besoin de retirer
{
SetLocalInt(oSelf, "PNJ", nCartePNJ );
}

SetLocalInt(oSelf, "PJ", nCartePJ );

if ( 6 < nCartePNJ%10 < 9 )
{
SetLocalInt(oSelf, "retirage", 1); // Fait "normalement" en sorte que le PNJ ne retirera pas une carte
}

SetCustomToken(3003, IntToString(nCartePNJ));
SetCustomToken(3004, IntToString(nCartePJ));

return TRUE;

}
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.



Ca fonctionne pour la première phrase... mais ensuite je suis perdue.
Si vous avez des idées...
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Sith Vicious
Grand Sage du Conseil
Inscrit le: 19 Oct 2005
Messages: 693
Répondre en citant
Posté le : 05/02/2006 16:03:07 Sujet du message :

Intéressant comme problème.
Je pense que tu peux t'en tirer grosso modo sur un seul script pour le jeu (plus quelques uns tout petits en actions conséquentes des réponse du PJ).

Il faut pas mal de variables locales en fait :
- Une qui donne le tour de la partie.
- Deux pour savoir si le PJ ou le PNJ ont arrété de tirer à un tour précédent.
- Deux pour les scores.
- 5 (max) pour les cartes déjà tirées.

Puis tu boucles sur le premier noeud de dialogue PNJ, et tu fais tout dans le startingconditional du script.
Le custom token comprend 2 parties : une sur l'avancée de la partie (cartes tirées à ce tour et scores ou résultat du jeu si 3ème tour) l'autre c'est une question sur les choix du PJ : tirer une carte (si il a pas arrété avant et si c'est pas le 3ème tour) ou faire une nouvelle partie (si elle est finie).
Théoriquement ça doit suffire (j'ai pas fini, j'essaye).

Le dialogue en gros :
-[PNJ] <CUSTOM54841>
--[PJ] oui (condition : tire encore des cartes)
--[PJ] non (condition : tire encore des cartes)
--[PJ] Continuer (condition : ne tire plus de carte)

chaque réponse du PJ boucle sur la première réplique du PNJ. Dont le starting conditionnal renvoie FALSE seulement si le PJ décide de ne pas rejouer à la fin d'une partie.

C'pas simple quand même. Je te dis si j'y arrive.

Pour le moment ça ça peut déjà t'aider :
la fonction qui tire une carte en vérifiant qu'elle ait pas été tirée avant :
NWScript :
int Carte(int nSorties)
{
    int nRandom = Random(40)+1;
    while (nRandom == GetLocalInt(OBJECT_SELF,"CARTE0") ||
            nRandom == GetLocalInt(OBJECT_SELF,"CARTE1") ||
            nRandom == GetLocalInt(OBJECT_SELF,"CARTE2") ||
            nRandom == GetLocalInt(OBJECT_SELF,"CARTE3") ||
            nRandom == GetLocalInt(OBJECT_SELF,"CARTE4") )
    {
        nRandom = Random(40)+1;
    }
    SetLocalInt(OBJECT_SELF,"CARTE"+IntToString(nSorties),nRandom);
    nRandom = nRandom%10;
    if (nRandom == 0) nRandom = 10;
    return nRandom;
}
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.

nSortie c'est le nombre de cartes déjà tirées. (bien sur penser à remettre tout à 0 à la fin d'une partie.)

le début de mon script conditional :
NWScript :
int StartingConditional()
{

int nPartie = GetLocalInt(OBJECT_SELF,"PARTIEENCOURS");
int nPNJ = Carte(nPartie*2);
int nPC = Carte(nPartie*2+1);

if (nPartie ==0)//premier round
{
    SetCustomToken(70212,"Vous tirez un "+IntToString(nPC)+", et votre adversaire un "+IntToString(nPNJ)+". Voulez vous une autre carte ?");
    SetLocalInt(OBJECT_SELF,"SCOREKABUPNJ",nPNJ);
    SetLocalInt(OBJECT_SELF,"SCOREKABUPC",nPC);
    if (Score(nPNJ)==0) SetLocalInt(OBJECT_SELF,"PNJCONTINUE",FALSE); //score renvoie la difference avec le nombre le plus proche se terminant par 9
    else SetLocalInt(OBJECT_SELF,"PNJCONTINUE",TRUE);
    SetLocalInt(OBJECT_SELF,"PJCONTINUE",TRUE);
// pas fini pour les tours suivants
  }
return TRUE; //pour le moment...
}
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.


Si ça peut t'aider. Je te tiens au courant si je m'en sors.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Sith Vicious
Grand Sage du Conseil
Inscrit le: 19 Oct 2005
Messages: 693
Répondre en citant
Posté le : 05/02/2006 18:17:25 Sujet du message :

Bon ça a l'air de marcher.

Dialogue (la partie qui nous interesse, avant il y a le "bonjour tu veux jouer avec moi dis ? S'il te plait.")

-[PNJ]<CUSTOM70212> (1)
--[PJ]Oui (2)
----(1)
--[PJ]Non (3)
----(1)
--[PJ]Continuer (4)
----(1)

Sur la condition de (2) et (3) :
NWScript :

int StartingConditional()
{
    int iResult;

    iResult = GetLocalInt(OBJECT_SELF,"PJCONTINUE");
    return iResult;
}
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.


Sur la condition de (4) :
NWScript :

int StartingConditional()
{
    int iResult;

    iResult =!GetLocalInt(OBJECT_SELF,"PJCONTINUE");
    return iResult;
}
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.


Sur l'action conséquente de (3) :
NWScript :
void main()
{
    SetLocalInt(OBJECT_SELF,"PJCONTINUE",FALSE);
}
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.


et le gros bout sur la condition de 1 :
NWScript :

int Carte(int nSorties)
{
    int nRandom = Random(40)+1;
    while (nRandom == GetLocalInt(OBJECT_SELF,"CARTE0") ||
            nRandom == GetLocalInt(OBJECT_SELF,"CARTE1") ||
            nRandom == GetLocalInt(OBJECT_SELF,"CARTE2") ||
            nRandom == GetLocalInt(OBJECT_SELF,"CARTE3") ||
            nRandom == GetLocalInt(OBJECT_SELF,"CARTE4") )
    {
        nRandom = Random(40)+1;
    }
    SetLocalInt(OBJECT_SELF,"CARTE"+IntToString(nSorties),nRandom);
    nRandom = nRandom%10;
    if (nRandom == 0) nRandom = 10;
    return nRandom;
}

int Score(int nResult)
{
    int iScore,iMin;
    iMin = abs(nResult-9);
    iScore = abs(nResult-19);
    if (iScore<iMin) iMin = iScore;
    iScore = abs(29-nResult);
    if (iScore<iMin) iMin = iScore;
    return iMin;
}

void Reset()
{
    int i;
    SetLocalInt(OBJECT_SELF,"PARTIEENCOURS",0);
    for (i=0;i<5;i++)
    {
        SetLocalInt(OBJECT_SELF,"CARTE"+IntToString(i),0);
    }
    SetLocalInt(OBJECT_SELF,"SCOREKABUPNJ",0);
    SetLocalInt(OBJECT_SELF,"SCOREKABUPC",0);
}

int StartingConditional()
{

int nPartie = GetLocalInt(OBJECT_SELF,"PARTIEENCOURS");
int nPNJ = Carte(nPartie*2);
int nPC = Carte(nPartie*2+1);

if (nPartie == 10 )
{
    Reset();
    if (!GetLocalInt(OBJECT_SELF,"PJCONTINUE")) return FALSE; //le PJ veut plus jouer, fin du dialogue
    nPartie = 0;
}
if (nPartie ==0)//premier round
{
    SetCustomToken(70212,"Vous tirez un "+IntToString(nPC)+", et votre adversaire un "+IntToString(nPNJ)+". Voulez vous une autre carte ?");
    SetLocalInt(OBJECT_SELF,"SCOREKABUPNJ",nPNJ);
    SetLocalInt(OBJECT_SELF,"SCOREKABUPC",nPC);
    if (Score(nPNJ)==0) SetLocalInt(OBJECT_SELF,"PNJCONTINUE",FALSE); //si j'ai un 9 j'arrete
    else SetLocalInt(OBJECT_SELF,"PNJCONTINUE",TRUE);
    SetLocalInt(OBJECT_SELF,"PJCONTINUE",TRUE);

}
else {
        string sText="";
        int nScorePC = GetLocalInt(OBJECT_SELF,"SCOREKABUPC");
        int nScorePNJ = GetLocalInt(OBJECT_SELF,"SCOREKABUPNJ");

        if (GetLocalInt(OBJECT_SELF,"PJCONTINUE")==TRUE)
        {
            nScorePC+=nPC;
            sText = "Vous tirez un "+IntToString(nPC)+" pour un total de "+IntToString(nScorePC)+" et v";
            SetLocalInt(OBJECT_SELF,"SCOREKABUPC",nScorePC);
        } else sText = "Votre score est de "+IntToString(nScorePC)+". V";

        if (GetLocalInt(OBJECT_SELF,"PNJCONTINUE")==TRUE)
        {
          nScorePNJ+=nPNJ;
          sText = sText + "otre adversaire tire un "+ IntToString(nPNJ) + " pour un total de " +IntToString(nScorePNJ)+".";
          SetLocalInt(OBJECT_SELF,"SCOREKABUPNJ",nScorePNJ);
        } else sText += "otre adversaire a un total de "+IntToString(nScorePNJ)+".";

        if (nPartie == 1)
        {
            nPNJ = Score(nScorePNJ);
            nPC = Score(nScorePC);
            if (nPNJ == 0 || (nPNJ<nPC && !GetLocalInt(OBJECT_SELF,"PJCONTINUE")) || (nPNJ<nPC && nPNJ <=2) ) //ca devrait suffire, j'arrete
            {
                SetLocalInt(OBJECT_SELF,"PNJCONTINUE",FALSE);
                sText += "Votre adversaire ne tire plus de cartes.";
            }

        }

        if (nPartie == 2
          || (GetLocalInt(OBJECT_SELF,"PJCONTINUE")==FALSE && GetLocalInt(OBJECT_SELF,"PNJCONTINUE")==FALSE)) //soit 3eme tour soit les 2 ont arrete, la partie est finie
        {
            sText+= " La partie est finie.";
            if (Score(nScorePNJ) == Score(nScorePC)) sText += " Match nul ! Voulez vous rejouer ?";
            else if (Score(nScorePC)<Score(nScorePNJ))
                {
                    sText += "Vous avez gagne ! Voulez vous rejouer ?";
                    GiveGoldToCreature(GetPCSpeaker(),15);
                }
                else {
                        sText += " Vous avez perdu ! Voulez vous rejouer ?";
                        TakeGoldFromCreature(15,GetPCSpeaker());
                      }
            SetLocalInt(OBJECT_SELF,"PJCONTINUE",TRUE);
            nPartie = 9;
        }// fin de la partie
        else sText += "Voulez vous une autre carte ?";
        SetCustomToken(70212,sText);
      }
nPartie++;
SetLocalInt(OBJECT_SELF,"PARTIEENCOURS",nPartie);
return TRUE;
}
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.


Faudra ptet améliorer les choix du PNJ sur sa tactique c'est un peu basique là. Et rajouter ptet un script si le dialogue est interompu (là ça mettrait un beau bordel) en gros recopier le Reset() dedans. Mais ça a l'air d'être pas mal déjà.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Djezebel
Héros
Inscrit le: 29 Sep 2005
Messages: 252
Répondre en citant
Posté le : 05/02/2006 20:13:25 Sujet du message :

C'est déjà excellent Smile J'ai réussi à le faire marcher.

Par contre, j'ai des trucs bizarres, tu pourras peut-être me dire quel est le problème :

Quand le PJ a 5 et le PNJ 22 : le PNJ gagne... Pourquoi ? Car 9 - 5 = 4 et 29 - 22 = 7 ... donc c'est celui qui a le 5 qui devrait gagner...

Pareil pour le 10 et 8, ça donne match nul. Or normalement, 10 = 0 (donc 9 points pour aller jusqu'à 9) et de 8 juste 1, donc le 8 est sensé gagné.

16 - 12 => match nul
6 - 10 => Perdu

Des idées ?
En tout cas c'est déjà fantastique d'avoir pu faire ça Smile Merci pour ton investissement !


PS : Tu crois que tu serais capable de faire un blackjack ? ^^
C'est plus facile je crois, le but est d'arriver au 21 sans le dépasser, on a le droit à autant de cartes qu'on veut.
(je vais tenter de le faire mais je ne garantie rien)

Merci pour tout !
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Sith Vicious
Grand Sage du Conseil
Inscrit le: 19 Oct 2005
Messages: 693
Répondre en citant
Posté le : 05/02/2006 20:30:27 Sujet du message :

Ben de rien ça m'amuse !

Ben c'est juste du au fait que j'ai pas compris les règles ! Neuneu à lunette

J'avais pas pigé qu'il fallait être en dessous, pour moi 8 et 10 c'est 1 point different de 9 pareil. Gné !

Donc en gros remplace la fonction Score() par
NWScript :

int Score(int nResult)
{
int nTruc = 9-nResult%10;
return nTruc;
}
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.


Ca devrait être plus correct déjà. (mais ça change la tactique du pnj je pense du coup, enfin faut voir ce que ça donne)

Pour le blackjack ça devrait être dans le même genre non ? Quasiment la même chose, sans la limite de round (et y a les figures dedans non ?)
Si t'y arrives pas je te ferai ça mais tu devrais t'en tirer.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Montrer les messages depuis :
Page 1 sur 1 ¤


Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum


Sauter vers:
FAQ | Rechercher | Liste des Membres | Groupes d'utilisateurs | S'enregistrer | Profil | Se connecter pour vérifier ses messages privés | Connexion
Powered by phpBB 2.* [m] © 2001, 2002 phpBB Group
Theme rewritten in beautiful XHTML code by Baldurien.
Thème "La Bibliothèque de Neverwinter" crée par Kruger
Traduction par : phpBB-fr.com
Page generated in 55.933ms