Oyez, oyez !

Les résultats du vote sur les meilleurs RPG de tous les temps sont désormais dévoilés dans ce message !

Merci à toutes et à tous pour votre participation !

N'hésitez pas à aller commenter, ajouter des jeux auxquels vous n'auriez pas pensé...

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

Répondre
Avatar du membre
Freddy_Gwendo
Adepte de Grondemarteau
Orbe ancien
Messages : 5877
Enregistré le : sam. 23 avr. 2011, 00:26
Localisation : Égaré dans un vortex entre Féérune et le Royaume de Diamant Éternel
Statut : Hors ligne

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

.

Message par Freddy_Gwendo »

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... :gign:


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 : Tout sélectionner

/* ============================================================================================================= *
 *    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 : Tout sélectionner

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 :
  • 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()).
  • 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 : Tout sélectionner

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 :
Image
Avec ses sorts :
Image
Et ses capacités :
Image


>> Au niveau 10, il accepte de devenir Chevalier de Diamant :
Image
Avec ses sorts :
Image
Et ses capacités :
Image


>> Au niveau 10, il refuse de devenir Chevalier de Diamant et reste paladin :
Image
Avec ses sorts :
Image
Et ses capacités :
Image


>> Au niveau 10, il refuse de devenir Chevalier de Diamant et devient cavalier :
Image
Avec ses sorts :
Image
Et ses capacités :
Image



>> Au niveau 10, il refuse de devenir Chevalier de Diamant et devient inquisiteur :
Image[/IMG]
Avec ses sorts (aucun !) :
Image[/IMG]
Et ses capacités :
Image
Image


>> Au niveau 10, il refuse de devenir Chevalier de Diamant et devient chasseur de morts-vivants :
Image
Avec ses sorts :
Image
Et ses capacités :
Image



:!: 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...
Avatar du membre
Freddy_Gwendo
Adepte de Grondemarteau
Orbe ancien
Messages : 5877
Enregistré le : sam. 23 avr. 2011, 00:26
Localisation : Égaré dans un vortex entre Féérune et le Royaume de Diamant Éternel
Statut : Hors ligne
.

Message par Freddy_Gwendo »

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...
Répondre

Retourner vers « Guides et tutoriels »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité