Affichage des résultats 1 à 9 sur 9

Discussion: [BANTERS] Les Banters de mon PNJ ne se déclenchent pas

  1. #1
    Date d'inscription
    April 2012
    Localisation
    Picardie, fausses terres de la pluie annuelle.
    Messages 
    41

    [BANTERS] Les Banters de mon PNJ ne se déclenchent pas

    Bonsoir bonsoir, me revoici, toujours autant chargé en question.

    Donc, je travaille actuellement sur l'ajout de Banter a mon NPC, la base pour un bon PJ. Et outre l’écriture des banters, j'ai un petit problème.

    Ça ne cause pas.

    Grosso modo, les deux personnages Klare et Aerie sont dans mon groupe et tentent de communiquer, en vain. Je reste donc positif mon script doit marché, le problème vient du dialogue.

    J'ai voulu séparer les banters a part histoire d’alléger un peu la totalité du texte de Klare. A tout les coup, c'est la source du problème.

    Donc voici le morceau du script du NPC qui est chargé de lancer 3 banters avec Aerie :

    Code:
    // Banters                                                                           //
    // Lancement de cette "competance" du NPC
    IF
      InParty(Myself)
      Global("CKBanterON","LOCALS",0)                              // les banters n'ont pas encore été initiés
    THEN
      RESPONSE #100
        RealSetGlobalTimer("CKBanterTimer","GLOBAL",20)            // Lance un timer pour les banters
        SetGlobal("CKBanterON","LOCALS",1)                         // les banters sont initiés
    END
    
    //Activation du mode Banter
    IF  Global("CKmodebanter","GLOBAL",0)                             // si le mode banter est inactif
      RealGlobalTimerExpired("CKBanterTimer","GLOBAL")              // le timer est terminer
    THEN
      RESPONSE #100
        SetGlobal("CKmodebanter","GLOBAL",1)                        // Activation du mode banter
        RealSetGlobalTimer("CKBanterTimer","GLOBAL",20)             // on relance le timer
    END
    
    
    // AERIE                            //
    // Banter 1
    IF
      Global("CKmodebanter","GLOBAL",1)                             // Le mode banter est activé
      Global("CKlareAerie","GLOBAL",0)                              // Aucune discution n'a encore eu lieu
      Global("KlareAerieEND","GLOBAL",0)                            // Banter non fini
      CombatCounter(0)
      !Detect([ENEMY])
      InParty(Myself)
      InParty("Aerie")  // ~Aerie~
      See("Aerie")      // ~Aerie~
      !Dead("Aerie")    // ~Aerie~
    THEN
      RESPONSE #100
    	SetGlobal("BCKAerie","GLOBAL",1)                            // C'est Aerie qui parle avec Klare
        ActionOverride("Aerie",StartDialogOverride("BCKlare","CKlare"))// lancement du banter par Aerie
    END
    
    // Banter 2
    IF
      Global("CKmodebanter","GLOBAL",1)                             // Le mode banter est activé
      Global("CKlareAerie","GLOBAL",1)                              // 1 discution a  eu lieu
      Global("KlareAerieEND","GLOBAL",0)                            // Banter non fini
      CombatCounter(0)
      !Detect([ENEMY])
      InParty(Myself)
      InParty("Aerie")  // ~Aerie~
      See("Aerie")      // ~Aerie~
      !Dead("Aerie")    // ~Aerie~
    THEN
      RESPONSE #100
    	SetGlobal("BCKAerie","GLOBAL",1)                            // C'est Aerie qui parle avec Klare
        ActionOverride("Aerie",StartDialogOverride("BCKlare","CKlare"))// lancement du banter par Aerie
    END
    
    // Banter 3
    IF
      Global("CKmodebanter","GLOBAL",1)                             // Le mode banter est activé
      Global("CKlareAerie","GLOBAL",2)                              // 2 discutions ont eu lieu
      Global("KlareAerieEND","GLOBAL",0)                            // Banter non fini
      CombatCounter(0)
      !Detect([ENEMY])
      InParty(Myself)
      InParty("Aerie")  // ~Aerie~
      See("Aerie")      // ~Aerie~
      !Dead("Aerie")    // ~Aerie~
    THEN
      RESPONSE #100
    	SetGlobal("BCKAerie","GLOBAL",1)                            // C'est Aerie qui parle avec Klare
        SetGlobal("KlareAerieEND","GLOBAL",1)                      // Les banters sont terminés
        StartDialogOverride("BCKlare","Aerie")                     // lancement du banter par Klare	
    END
    Et voici le fichier BCKlare que j'avais crée dans l'espoir de liberer du volume dans mon CklareJ

    Code:
    /* code dialogue :          
    @00*** Klare                 
    @01*** AERIE               */
    APPEND CKlareJ
    END
    
    // AERIE                            //
    APPEND BAERIE
    END
    //Banter 1
    CHAIN
    IF ~Global("CKmodebanter","GLOBAL",1)                             // Le mode banter est actif
        Global("CKlareAerie","GLOBAL",0)                              // On a pas encore de discution
        Global("BCKAerie","GLOBAL",1)~                                 // C'est Aerie qui parle avec Klare
    THEN BAERIE CKlareAerieB1                                       // Debut banter 1
    ~Test~
    == CKlareJ ~Test~
    == BAERIE ~Test~
    == CKlareJ ~Test~
    == BAERIE ~Test~ 
    END
    IF~~ THEN DO ~ SetGlobal("BCKAerie","GLOBAL",0)        // Aerie a parlé
    SetGlobal("CKlareAerie","GLOBAL",1)                             // Un banter fait
    SetGlobal("CKmodebanter","GLOBAL",0)~ EXIT             // mode banter inactif
    
    //Banter 2
    CHAIN
    IF ~Global("CKmodebanter","GLOBAL",1)                  // Le mode banter est actif
        Global("CKlareAerie","GLOBAL",1)                   // On a 1 discution
        Global("BCKAerie","GLOBAL",1)~                     // C'est Aerie qui parle avec Klare
    THEN BAERIE CKlareAerieB2                              // Debut banter 2
    ~Test~
    == CKlareJ ~Test~
    == BAERIE ~Test~
    == CKlareJ ~Test~
    == BAERIE ~Test~ 
    END
    IF~~ THEN DO ~ SetGlobal("BCKAerie","GLOBAL",0)        // Aerie a parlé
    SetGlobal("CKlareAerie","GLOBAL",2)                             // Deux banter fait
    SetGlobal("CKmodebanter","GLOBAL",0)~ EXIT             // mode banter inactif
    
    //Banter 3
    CHAIN
    IF ~Global("CKmodebanter","GLOBAL",1)                  // Le mode banter est actif
        Global("CKlareAerie","GLOBAL",2)                   // On a 2 discutions
        Global("BCKAerie","GLOBAL",1)~                     // C'est Aerie qui parle avec Klare
    THEN BAERIE CKlareAerieB3                              // Debut banter 3
    ~Test~
    == BAERIE ~Test~
    == CKlareJ ~Test~
    == BAERIE ~Test~ 
    END
    IF~~ THEN DO ~ SetGlobal("BCKAerie","GLOBAL",0)        // Aerie a parlé
    SetGlobal("CKlareAerie","GLOBAL",3)                             // Deux banter fait
    SetGlobal("CKmodebanter","GLOBAL",0)~ EXIT             // mode banter inactif
    Je ne pense pas avoir faire d'erreur (au moins j'y crois!) et donc que mettre ceci directement dans le CklareJ et changer le script devrait fonctionner.

    J'ai bien réfléchi a une magouille pour compiler le BCklare en tête du fichier .D via WeiDU, mais même si ça venait a fonctionner, je n'ai pas de méthode pour pouvoir ajouter le texte, ou je vois pas comment faire.

    Reste donc la solution, tout coller dans le fichier de dialogue classique. Mais j'aimerais vraiment éviter

    Donc ma question, y a-t-il un moyen de magouiller qui m'a échappé ?
    Dernière modification par Freddy_Gwendo ; 02/04/2016 à 00h49. Motif: Modification du titre de la discussion

  2. #2
    Date d'inscription
    April 2011
    Localisation
    Égaré dans un vortex entre Féérune et le Royaume de Diamant Éternel
    Messages 
    4 660
    Désolé, je n'ai pas le temps de poster trop longtemps.
    Mais pour te permettre d'avancer, je vais t'indiquer 3 pistes que j'ai repérées au premier coup d'oeil :

    1. Vérifie tes variables. J'ai repéré un ou deux trucs "bizarres".
    2. Le 1° banter indique à Aerie de s'adresser à Klare en utilisant le fichier BCKlare alors qu'elle doit utiliser le fichier BAERIE !
    3. Utilise la commande 137 StartDialogue(S:DialogFile*,O:Target*) car je n'ai jamais vu celle-ci : StartDialogOverride("BCKlare","CKlare")).


    Je retourne à la finalisation de mes trois cartes et à la modification du Basilic d'Infinity Animations. Si j'ai le temps d'ici ce soir, je reverrai ton code, sinon, il faudra attendre la semaine prochaine.
    Dernière modification par Freddy_Gwendo ; 17/03/2013 à 12h50.
    CARPE DIEM...
    Co-modérateur de La Forge et de La Chambre des Scribes
    Moddeur qui s'arrache les cheveux...

  3. #3
    Date d'inscription
    April 2012
    Localisation
    Picardie, fausses terres de la pluie annuelle.
    Messages 
    41
    Donc j'ai modifier la commande de lancement de dialogue (j'ai trouver ma version dans la liste des actions/triggers) avec le fichier BAERIE et ca ce lance !

    Je pense donc que mon probleme est resolu, je verrai ca ce soir ou demain pour plus de test.

    Merci !

  4. #4
    Date d'inscription
    April 2012
    Localisation
    Picardie, fausses terres de la pluie annuelle.
    Messages 
    41
    Bon, mon jeu de variable marche plus ou moins, vu que le dialogue se lance.

    Mais ceux ci sont capricieuse et seule Aerie pour lancer la discution avec Clare.
    Code:
    Soit la commande : ActionOverride("Aerie",StartDialog("BAERIE","CKlare"))
    Celle pour que Klare soit motivé a parler :
    Code:
    StartDialog("BCklare","Aerie"))
    Ne semble pas fonctionner.

    J'ai donc tenter de passer par la .D de Klare CklareJ.
    Code:
    StartDialog("CklareJ","Aerie"))
    La encore, queue de poisson, que nenni, nada niet.

    Pourtant je suppose que le banter se lance dans le cas 1 (ou aerie parle) car mon BCKlare utilise la fonction APPEND BAERIE.
    Ce qui permet aux CHAIN d'etre provoquées même si elle sont stockée sur BCKlare et non pas directement dans BAERIE.

    Suis je trop naif de penser que l'APPEND CKlareJ utilisé quelque ligne plus tôt devrais me donner le même resultat?


    EDIT :

    Erf, mes banters se bloque a 2/3 x meme avec la commande qui fonctionne pour lancer le dialogue. T.T

  5. #5
    Date d'inscription
    April 2012
    Localisation
    Picardie, fausses terres de la pluie annuelle.
    Messages 
    41
    Donc donc donc...

    Et bien pour une raison obscure, je bloque a deux banters avec Aerie... J'ai donc jetté un petit oeil sur le mod de kim (ma reference en cas de pépin) et j'ai réécrit tout en propre.

    Et ca coince toujours -_-

    Ici le script de Klare pour ses banters,
    On les inities
    On inities si le NPC voulu est la
    On lance un dialogue
    On relance la machine
    Code:
    // Lancement de cette "competance" du NPC
    IF
      InParty(Myself)
      Global("CKBanterON","LOCALS",0)                              // les banters n'ont pas encore été initiés
    THEN
      RESPONSE #100
        RealSetGlobalTimer("CKBanterTimer","GLOBAL",40)            // Lance un timer pour les banters
        SetGlobal("CKBanterON","LOCALS",1)                         // les banters sont initiés
    END
    
    
    
    //Activation du mode Banter                                                       // AERIE                            //
    
    IF
      CombatCounter(0)
      !Detect([ENEMY])
      InParty(Myself)
      See(Player1)
      !StateCheck(Player1,CD_STATE_NOTVALID)
      Global("CKmodebanter","GLOBAL",0)
      RealGlobalTimerExpired("CKBanterTimer","GLOBAL")
      InParty("Aerie")  // ~Aerie~
      See("Aerie")  // ~Aerie~
      !Dead("Aerie")  // ~Aerie~
      Global("KlareAerieEND","GLOBAL",0)                            // Banter d'aerie non fini
    THEN
      RESPONSE #100
        SetGlobal("CKmodebanter","GLOBAL",1)
        RealSetGlobalTimer("CKBanterTimer","GLOBAL",100)
    END
    
    // Banter 1                                                                         //
    IF
      Global("CKmodebanter","GLOBAL",1)
      CombatCounter(0)
      !Detect([ENEMY])
      InParty(Myself)
      InParty("Aerie")      // ~Aerie~
      See("Aerie")          // ~Aerie~
      !Dead("Aerie")        // ~Aerie~
      Global("CKlareAerie","GLOBAL",0)
    THEN
      RESPONSE #100
        SetGlobal("CKlareAerie","GLOBAL",1)                       //Activation du banter 1
        SetGlobal("CKmodebanter","GLOBAL",2)                      // retour etat de base
        ActionOverride("Aerie",StartDialogue("BAERIE","Cklare"))  // Lancement dialogue
    END
    
    
    IF
      Global("CKmodebanter","GLOBAL",1)
      CombatCounter(0)
      !Detect([ENEMY])
      InParty(Myself)
      InParty("Aerie")      // ~Aerie~
      See("Aerie")          // ~Aerie~
      !Dead("Aerie")        // ~Aerie~
      Global("CKlareAerie","GLOBAL",1)
    THEN
      RESPONSE #100
        SetGlobal("CKlareAerie","GLOBAL",2)                       //Activation du banter 2
        SetGlobal("CKmodebanter","GLOBAL",2)                      // retour etat de base
        ActionOverride("Aerie",StartDialogue("BAERIE","Cklare"))  // Lancement dialogue
    END
    
    IF
      Global("CKmodebanter","GLOBAL",1)
      CombatCounter(0)
      !Detect([ENEMY])
      InParty(Myself)
      InParty("Aerie")      // ~Aerie~
      See("Aerie")          // ~Aerie~
      !Dead("Aerie")        // ~Aerie~
      Global("CKlareAerie","GLOBAL",2)
    THEN
      RESPONSE #100
        SetGlobal("CKlareAerie","GLOBAL",3)                       //Activation du banter 3
        SetGlobal("CKmodebanter","GLOBAL",2)                      // retour etat de base
        ActionOverride("Aerie",StartDialogue("BAERIE","Cklare"))  // Lancement dialogue
    END
    
    IF
      Global("CKmodebanter","GLOBAL",2)
    THEN
      RESPONSE #100
        Wait(2)
        SetGlobal("CKmodebanter","GLOBAL",0)                      // retour etat de base
    END
    Et le coté dialogue, épuré au possible
    Code:
    /* code dialogue :          
    @00*** Klare                 
    @01*** AERIE               */
    APPEND CKlareJ
    END
    
    // AERIE                            //
    APPEND BAERIE
    END
    //Banter 1
    CHAIN
    IF ~ Global("CKlareAerie","GLOBAL",1)                              // On est au banter 1
        Global("BCKAerieb1","LOCALS",0)~                                
    THEN BAERIE CKlareAerieB1                                       // Debut banter 1
    ~Test~
    DO ~SetGlobal("BCKAerieb1","LOCALS",1)~
    == CKlareJ ~B1~
    == BAERIE ~B1~
    == CKlareJ ~B1~
    == BAERIE ~B1~ EXIT 
    
    
    //Banter 2
    CHAIN
    IF ~ Global("CKlareAerie","GLOBAL",2)                              // On est au banter 2
        Global("BCKAerieb2","LOCALS",0)~                                
    THEN BAERIE CKlareAerieB2                                       // Debut banter 2
    ~Test~
    DO ~SetGlobal("BCKAerieb2","LOCALS",1)~
    == CKlareJ ~B2~
    == BAERIE ~B2~
    == CKlareJ ~B2~
    == BAERIE ~B2~ EXIT                                  
    
    
    //Banter 3
    CHAIN
    IF ~ Global("CKlareAerie","GLOBAL",3)                              // On est au banter 3
        Global("BCKAerieb3","LOCALS",0)~                                
    THEN BAERIE CKlareAerieB3                                         // Debut banter 3
    ~Test~
    DO ~SetGlobal("BCKAerieb3","LOCALS",1) SetGlobal("KlareAerieEND","GLOBAL",1)~     
    == CKlareJ ~B3~
    == BAERIE ~B3~
    == CKlareJ ~B3~
    == BAERIE ~B3~ EXIT
    Je voix pas ou ca peu coincé ... je veux dire le modele de chain des banters est similaires, pareil pour le script.
    La création d'une boucle infinie devrais etre possible vu que j'ai deja eu un bug similaire... Bref, je seche.

  6. #6
    Date d'inscription
    July 2003
    Localisation
    Plaisir
    Messages 
    6 839
    J'avoue ne pas m'être penché en détail sur ce que tu as écrit. Mes remarques portent plutôt sur ton approche des banters, qui me semble erronée.

    Sauf cas particulier, les banters entre personnage du groupe (hors PJ) ne sont pas déclenchés par un script. Il existe un mécanisme intrinsèque au jeu, au travers du fichier INTERDIA.2DA, qui déclare le fichier de banter associé au script name (= death variable) d'un personnage. Grâce à cette information, le jeu trouve tout seul le fichier DLG qui contient les discussions que peut lancer un personnage.
    Le déclenchement d'un banter par le jeu est plus ou moins aléatoire, mais il est possible, dans une certaine mesure (ça n'en déclenche pas un à chaque fois), de forcer le déclenchement d'un banter avec la combinaison Ctrl-I (parmi les cheatkeys).
    En général, on crée un fichier spécifique Bxxxxxxx.DLG pour les banters (exemple BAERIE).

    Il existe un accélérateur de banter écrit par J Compton et intégré dans de nombreux mods (dont le BG1 NPC), qui vient modifier le script Baldur.BCS pour gérer lui-même un timer et déclencher des discussions. La commande utilisée pour initier le dialogue est Interact et non StartDialog.

    Le seul cas particulier de banter contrôlé par script, c'est quand on veut le lier à un événement particulier. Dans ce cas, le dialogue qui semble souvent utilisé est plutôt xxxxxxxJ.DLG (dans BG1 NPC notamment) et on n'utilise pas Interact mais plutôt StartDialogueNoSet (pas besoin de préciser le dialogue, on prend celui par défaut de la créature, soit le xxxxxxxJ.DLG).


    Sur le fond, tes bidouilles en utilisant StartDialogue au travers de ActionOverride, avec comme paramètre "BAERIE" et "CKlare", sont particulièrement risquées. En effet la description de StartDialogue est la suivante (cf IESDP) :
    StartDialogue(S: DialogFile*,O:Target*)
    This action instructs the active creature to start the specified dialog with the specified target. The dialog can be initiated from a distance and must have at least one state with all its top level conditions true else it will not initiate. The active creature has its dialog file permanently set to the file specified by the DialogFile parameter.
    Autrement dit, en utilisant la commande StartDialogue sur Aérie, en précisant le dialogue BAERIE, tu es en train d'écraser son dialogue normal lorsqu'elle fait partie du groupe, AERIEJ, par celui qui sert seulement aux banters, BAERIE. De sorte que le script qui contrôle Aerie pourrait vouloir déclencher une discussion d'Aérie avec le PJ (romance ou autre raison) et échouer lamentablement puisque le dialogue d'Aerie est désormais BAERIE, qui ne contient aucun texte de romance ou de discussion avec le PJ. Bref le personnage d'Aerie va être quasiment complément désactivé par ton mod tel qu'il est.

    Par ailleurs, tu as parfaitement le droit d'ajouter un morceau de script à celui d'Aerie afin que ce soit le script d'Aerie qui déclenche une discussion avec ton personnage (mais voir ma remarque initiale sur le fait que ce n'est pas utile dans la majorité des cas de banter). Cela éviterait aussi des ActionOverride partout.
    Peu disponible
    Guide d'installation (et FAQ) de Baldur's Gate, Baldur's Gate II, Baldur's Gate Trilogy (BGT), BG1Tutu, Widescreen, BGEE
    Pensez à utiliser à la fonction Recherche pour trouver une réponse à votre question !

  7. #7
    Date d'inscription
    April 2012
    Localisation
    Picardie, fausses terres de la pluie annuelle.
    Messages 
    41
    Et bé... ca marche, merci Isaya

    Donc en effet en modifiant sauvagement le INTERDIA.2DA (enfin, l'ouvrir d'un coup de bloc note et ajouter deux mots) et en supprimant du même coup le code inutile dans le script du NPC, ca marche.

    Je verrais bien IG si les dialogues se lancent, pour le moment le ctrl+I y arrive tres bien.

    Je suppose donc que mes conditions de lancement doivent passer dans le .D "BCKlare" qui sert au banter maintenant
    (ou bien les conditions X et Y se voient, sont vivants, etc... sont gérés par l'interdia?)

    EDIT 1 :
    Oui, d'apres BAERIE les conditions sont a ecrire dans le fichier texte du banter.

    Et qu'il suffit d'une commande WEIDU pour étendre le .2DA et y ajouter trois mots?
    (J'ai d'abord penser que c'etait dans le weidu qu'on devait utiliser ajouter le nom du banter... avant de trouver le .2DA dans l'override...)

    EDIT 2 :

    D'apres le BG1 NPC Pack, ca sera la commande suivante :
    APPEND ~interdia.2da~ ~IMOEN BIMOEN2~
    Qui retouchée
    APPEND ~interdia.2da~ ~Cklare BCklare~

    Permettrai d'ajouter automatiquement les banters a l'animal.
    Dernière modification par Klare ; 24/03/2013 à 12h22.

  8. #8
    Date d'inscription
    July 2003
    Localisation
    Plaisir
    Messages 
    6 839
    As-tu déjà lu un tutoriel de création de PNJ ? Ces points y sont systématiquement abordés.

    Celui de xena, en français, n'est pas très détaillé sur ce point et est incomplet (pas de prise en charge de SoA et ToB), et il utilise aussi le B à la fin du nom et non au début. J'ai fait quelques remarques sur ce point, avec un exemple, à la suite du tutoriel.
    En anglais, il ne manque pas de tutoriels plus précis. Je te suggère de partir de la la liste du site Spellhold Studios (voir liens dans le sujet épinglé sur les outils), qui a l'avantage de préciser si les tutoriels utilisent des méthodes un peu obsolètes.
    Peu disponible
    Guide d'installation (et FAQ) de Baldur's Gate, Baldur's Gate II, Baldur's Gate Trilogy (BGT), BG1Tutu, Widescreen, BGEE
    Pensez à utiliser à la fonction Recherche pour trouver une réponse à votre question !

  9. #9
    Date d'inscription
    April 2012
    Localisation
    Picardie, fausses terres de la pluie annuelle.
    Messages 
    41
    Et bien j'ai lu les tutorials de la couronne, dont celui de Xena, et deux document en anglais (que j'ai pas conservé, hélas) histoire de pas me lancer a corps perdu dans le mur.
    si ce point a été abordé, je suis méchamment passé a côté. [Ou je l'ai pas compris sur le coup et j'ai oublié]

    Spellhold avait un tutorial interessant sur les NPC mais les liens sont non fonctionnels, maintenant j'avoue ne pas avoir retourner la totalité des données "



    Bon, c'est sur, les tutos sont les moyens les plus simples, mais les trouver c'est pas mon point fort (hahaha... haaaa)
    Du coup j'essaye de comprendre les mecanismes en etudiant d'autres mods fonctionnels (d'ou ma tentative de forcer le banters via le script du NPC)

Discussions similaires

  1. [JEU] Entre autres choses, un peu de minéralogie ^^
    Par Mr Sylvestre dans le forum Le Fort de la Croisée (NWN 2)
    Réponses: 15
    Dernier message: 20/01/2012, 22h32
  2. [Spoiler] Le guide des choses cachéees
    Par Agifem dans le forum L'Académie de Padhiver (NWN 1)
    Réponses: 0
    Dernier message: 10/08/2005, 11h42
  3. [TD] [Délire]Ici, à la fin de toutes choses...
    Par Filamp dans le forum La Couronne de Zinc
    Réponses: 4
    Dernier message: 14/07/2005, 23h13

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •  

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250