Affichage des résultats 1 à 2 sur 2

Discussion: [TUTORIEL] Comment supprimer un nouveau kit à un personnage en cours de partie

  1. #1
    Date d'inscription
    avril 2011
    Localisation
    Égaré dans un vortex entre Féérune et le Royaume de Diamant Éternel
    Messages 
    5 305

    Flèche [TUTORIEL] Comment supprimer un nouveau kit à un personnage en cours de partie

    COMMENT SUPPRIMER UN KIT À UN PERSONNAGE EN COURS DE PARTIE ?



    Tout vient de la description de mon nouveau kit de Chevalier de Diamant :

    CHEVALIER de DIAMANT : Les Chevaliers de Diamant appartiennent à l'élite des paladins. Détectées dès leur adoubement, leurs qualités martiales et morales sont testées au fil de leur carrière. C'est pourquoi seuls des paladins confirmés, généralement des cavaliers, sont jugés dignes de se voir proposer cette spécialisation. S'ils l'acceptent, toutes leurs caractéristiques et capacités antérieures sont remplacées par des nouvelles.



    Pré-requis :
    - Le paladin doit être de niveau 10 minimum.
    Pour coller à la description papier, lorsqu'il attend le niveau 10, le paladin doit décider s'il souhaite devenir Chevalier de Diamant.
    Si oui, il obtient de nouvelles capacités et des sorts divins qui remplacent les sorts divins classiques des paladins.
    Si non, il reste paladin.

    Le problème, c'est que les fichiers 2da du kit ne fonctionnent que pour un Chevalier de Diamant, pas pour un paladin et encore moins pour un cavalier, un inquisiteur ou un chasseur de morts-vivants...


    Une solution consistait à créer 4 clones des kits vanilla (classique, cavalier, inquisiteur, chasseur de morts-vivants) avec des caractéristiques classiques jusqu'au niveau 10, à provoquer le dialogue au niveau 10, et à modifier son kit selon sa réponse : Chevalier de Diamant ou retour à un kit vanilla classique.

    Outre que cette technique est plus que lourde et consomme énormément de ressources inutiles (notamment des slots de kits), elle ne permet ps de régler le cas du paladin classique (qui n'est pas un kit, mais une classe et n’apparaît pas dans les fichiers kit.ids et kitlist.2da.


    Et puis voilà, à force de traîner et de poser des questions ici ou là, Jarno a fini par me donner l'embryon d'une piste – en fait une solution qui ne fonctionnait pas, mais qui m'a permis de la développer pour qu'elle marche.


    1. Créer un sort qui fixe une variable globale et affecte un script dans le slot RACE du personnage.

    Pourquoi le slot RACE ? Parce qu'il n'est pas utilisé par les PJ et les PNJ.

    Code:
    /* ============================================================================================================= *
     *    INITIALISATION   du   DIALOGUE   lors   des   CHANGEMENTS   de   NIVEAU   du   CHEVALIER   de   DIAMANT    *
     * ============================================================================================================= */
    
    /* ------------------------------------------------------ *
     *  NIVEAU 10 : Décision de devenir Chevalier de Diamant  *
     * ------------------------------------------------------ */
    
    IF
      Class(Myself,PALADIN_ALL)
      LevelGT(Myself,9)
      LevelLT(Myself,15)
      Global("GWCDDIAL","GLOBAL",1)	// Valeur de la variable lancée par le sort au niveau 10
      Delay(12)
    THEN
      RESPONSE #100
        SetGlobal("GWCDDIAL","GLOBAL",2)
        CreateCreatureObject("GWCDDial",Myself,0,0,0)
        ActionOverride("GWCDDial",StartDialogNoSet(Myself))
    END
    Ce script vérifie le niveau du paladin et la valeur de la variable. Si ces variables correspondent aux pré-requis, le script convoque une créature invisible qui lance un dialogue.


    2. Prendre une décision grâce au dialogue.

    Code:
    BEGIN GWCDDial
    
    // NIVEAU 10 : Décision de devenir Chevalier de Diamant.
    // -----------------------------------------------------
    CHAIN IF ~NumTimesTalkedTo(0) Global("GWCDDIAL","GLOBAL",2)~ THEN GWCDDIAL Chevalier_Diamant
    @7701001 // ~Souhaitez-vous devenir un Chevalier de Diamant ?~ ~Souhaitez-vous devenir une Chevalière de Diamant ?~
    DO ~SetGlobal("GWCDDIAL","GLOBAL",3)~ 
    END
    ++ @7701002 EXTERN GWCDDIAL Chevalier_Diamant_Oui
    ++ @7701003 EXTERN GWCDDIAL Chevalier_Diamant_Non
    
    CHAIN GWCDDIAL Chevalier_Diamant_Oui
    @7701004 // ~Vos caractéristiques et l'enseignement que vous avez suivi vous autorisent à embrasser cette carrière. Bienvenue dans le cercle très restreint des Chevaliers de Diamant !~
    END
    IF ~~ THEN DO ~SetGlobal("GWCDDIAL","GLOBAL",4) DestroySelf()~ EXIT
    
    CHAIN GWCDDIAL Chevalier_Diamant_Non
    @7701005 // ~En êtes vous certain ?~ ~En êtes vous certaine ?~
    END
    ++ @7701006 EXTERN GWCDDIAL Chevalier_Diamant_Non2	// ~Absolument ! Les dragons, c'est pas mon truc...~
    ++ @7701007 EXTERN GWCDDIAL Chevalier_Diamant_Oui	// ~Tout bien réfléchi... C'est vrai que combattre les dragons, c'est une tâche digne d'un paladin. Finalement, j'accepte !~ ~Tout bien réfléchi... C'est vrai que combattre les dragons, c'est une tâche digne d'une paladine. Finalement, j'accepte !~
    
    CHAIN GWCDDIAL Chevalier_Diamant_Non2
    @7701008	// ~C'est votre choix.	Faites en sorte de ne pas le regretter car ce genre d'opportunité ne se produit qu'une fois dans une vie. Et vous venez de la laisser passer...~
    = @7701009	// ~Souhaitez-vous redevenir paladin ou vous spécialiser ?~
    END
    ++ @7701010 DO ~SetGlobal("GWCDDIAL","GLOBAL",5)~ EXTERN GWCDDIAL Chevalier_Diamant_Non3	// ~Me spécialiser ? Paladin(e) j'étais, paladin(e) je resterai !~
    ++ @7701011 DO ~SetGlobal("GWCDDIAL","GLOBAL",6)~ EXTERN GWCDDIAL Chevalier_Diamant_Non3	// ~En fait, j'ai toujours rêvé de devenir cavalier(ère).~
    ++ @7701012 DO ~SetGlobal("GWCDDIAL","GLOBAL",7)~ EXTERN GWCDDIAL Chevalier_Diamant_Non3	// ~Je me suis engagé(e) pour traquer les adeptes de la magie noire et des ténèbres : je veux devenir inquisiteur(trice).~
    ++ @7701013 DO ~SetGlobal("GWCDDIAL","GLOBAL",8)~ EXTERN GWCDDIAL Chevalier_Diamant_Non3	// ~Oh que oui ! Je veux traquer les morts-vivants et autres engeances de ce type : Je souhaite devenir chasseur(se) de morts-vivants.~
    
    CHAIN GWCDDIAL Chevalier_Diamant_Non3
    @7701014 // ~Qu'il en soit ainsi !~
    END
    IF ~~ THEN DO ~DestroySelf()~ EXIT
    Et voilà, retour au script.


    3. Traiter les décisions prises dans le dialogue avec le script.

    Selon la valeur de la variable GWCDDIAL définie par le dialogue, on applique le bon kit au paladin.

    • 4 : Le paladin devient Chevalier de Diamant. ON NE CHANGE RIEN !
    • 5 : Le paladin refuse et reste paladin de base : on utilise une astuce.
    • 6 : Le paladin refuse et devient cavalier : on lui applique le kit CAVALIER.
    • 7 : Le paladin refuse et devient inquisiteur : on lui applique le kit INQUISITOR.
    • 8 : Le paladin refuse et devient chasseur de morts-vivants : on lui applique le kit UNDEADHUNTER.


    Pour appliquer les sorts, on utilise la commande AddKit(). Mais comme cette dernière ne fonctionne pas avec la valeur PALADIN, on utilise la valeur TRUECLASS !

    Mais ce n'est pas tout, en cas de refus, on applique un sort qui supprime toutes les scories résiduelles du kit de Chevalier de Diamant. Je l'ai appelé GWCD0000 :

    1. Il supprime tous les sorts de Chevalier de Diamant obtenus au niveau 10 (sinon, ils restent dans le livre de sorts même après application de la commande AddKit()).
    2. Il réaffecte au paladin ses sorts divins de niveau 1. Sinon, il faut atteindre le passage au prochain niveau pour les récupérer.


    Enfin, on n'oublie pas de supprimer le script du slot RACE.

    Code:
    IF
      Class(Myself,PALADIN_ALL)
      LevelGT(Myself,9)
      LevelLT(Myself,15)
      Global("GWCDDIAL","GLOBAL",4)		// Acceptation du kit
    THEN
      RESPONSE #100
        ChangeAIScript("",RACE)
        SetGlobal("GWCDDIAL","GLOBAL",0)
    END
    
    IF
      Class(Myself,PALADIN_ALL)
      LevelGT(Myself,9)
      LevelLT(Myself,15)
      Global("GWCDDIAL","GLOBAL",5)		// Refus du kit : retour au statut de paladin
    THEN
      RESPONSE #100
        SetGlobal("GWCDDIAL","GLOBAL",0)
        ReallyForceSpellRES("GWCD0000",Myself)
        AddKit(TRUECLASS)
        ChangeAIScript("",RACE)
    END
    
    IF
      Class(Myself,PALADIN_ALL)
      LevelGT(Myself,9)
      LevelLT(Myself,15)
      Global("GWCDDIAL","GLOBAL",6)		// Refus du kit : choix du kit Cavalier
    THEN
      RESPONSE #100
        SetInterrupt(FALSE)
        SetGlobal("GWCDDIAL","GLOBAL",0)
        ReallyForceSpellRES("GWCD0000",Myself)
        AddKit(CAVALIER)
        ChangeAIScript("",RACE)
        SetInterrupt(TRUE)
        Continue()
    END
    
    IF
      Class(Myself,PALADIN_ALL)
      LevelGT(Myself,9)
      LevelLT(Myself,15)
      Global("GWCDDIAL","GLOBAL",7)		// Refus du kit : Choix du kit Inquisiteur
    THEN
      RESPONSE #100
        SetInterrupt(FALSE)
        SetGlobal("GWCDDIAL","GLOBAL",0)
        ReallyForceSpellRES("GWCD0000",Myself)
        AddKit(INQUISITOR)
        ChangeAIScript("",RACE)
        SetInterrupt(TRUE)
        Continue()
    END
    
    IF
      Class(Myself,PALADIN_ALL)
      LevelGT(Myself,9)
      LevelLT(Myself,15)
      Global("GWCDDIAL","GLOBAL",8)		// Refus du kit : Choix du kit Chasseur de morts-vivants
    THEN
      RESPONSE #100
        SetInterrupt(FALSE)
        SetGlobal("GWCDDIAL","GLOBAL",0)
        ReallyForceSpellRES("GWCD0000",Myself)
        AddKit(UNDEADHUNTER)
        ChangeAIScript("",RACE)
        SetInterrupt(TRUE)
        Continue()
    END

    En pratique, ça donne à peu près ceci :

    Au niveau 9 :

    Avec ses sorts :

    Et ses capacités :



    Au niveau 10, il accepte de devenir Chevalier de Diamant :

    Avec ses sorts :

    Et ses capacités :



    Au niveau 10, il refuse de devenir Chevalier de Diamant et reste paladin :

    Avec ses sorts :

    Et ses capacités :



    Au niveau 10, il refuse de devenir Chevalier de Diamant et devient cavalier :

    Avec ses sorts :

    Et ses capacités :




    Au niveau 10, il refuse de devenir Chevalier de Diamant et devient inquisiteur :
    [/IMG]

    Avec ses sorts (aucun !) :
    [/IMG]

    Et ses capacités :




    Au niveau 10, il refuse de devenir Chevalier de Diamant et devient chasseur de morts-vivants :

    Avec ses sorts :

    Et ses capacités :




    Seul petit problème : le sort de Guérison des maladies (entouré de rouge) des capacités spéciales ne disparaît pas pendant le passage de niveau. Cependant, il disparaît dès la première utilisation.
    CARPE DIEM...
    Co-modérateur de La Forge et de La Chambre des Scribes
    Moddeur qui s'arrache les cheveux...

  2. #2
    Date d'inscription
    avril 2011
    Localisation
    Égaré dans un vortex entre Féérune et le Royaume de Diamant Éternel
    Messages 
    5 305
    Problème enfin réglé : il suffit d'utiliser des fichiers de capacité composés au plus de 7 caractères.

    J'ai renommé mon fichier GWPaGuMa.spl en GWPaGuM.spl et il a disparu de l'écran des capacités spéciales.
    CARPE DIEM...
    Co-modérateur de La Forge et de La Chambre des Scribes
    Moddeur qui s'arrache les cheveux...

Discussions similaires

  1. Ajantis mod en cours de partie ?
    Par Silma dans le forum Baldur's Gate Reloaded : les mods TUTU et Baldur's Gate Trilogy
    Réponses: 2
    Dernier message: 07/09/2015, 23h53
  2. [BG2][SOLUCE] Récupérer un PNJ perdu en cours de partie
    Par nicocorico dans le forum La Taverne d'Amkethran (Baldur's Gate 2)
    Réponses: 1
    Dernier message: 30/05/2013, 16h40
  3. [TW2][BUG] Enregistrement en cours de partie pas toujours possible
    Par angeblanc dans le forum The Witcher 2: Assassins of Kings
    Réponses: 6
    Dernier message: 18/10/2011, 10h50
  4. [TOB] Augmenter la difficulté en cours de partie
    Par Radamanthe dans le forum La Taverne d'Amkethran (Baldur's Gate 2)
    Réponses: 3
    Dernier message: 04/02/2010, 16h29

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 251 252 253 254 255 256 257