Il serait bien que vos scripteur viennent parler ici pour qu'on en sache un peu plus.
Théoriquement vous avez un script qui se déclenche lors de la mort du personnage (évènement module). Il faut simplement placer le test dans ce script pour éviter au personnage de perdre trop d'xp.
Par exemple:
// Renvoie l'xp nécessaire pour être de niveau lvl int GetXpForLevel(int lvl) { return ((((lvl - 1) * lvl) / 2) * 1000); } // Renvoie le niveau de o (ECL inclus) int GetECL(object o) { return GetHitDice(o) + Get2DAInt("racialsubtypes", "ECL", GetSubRace(o)); }
// Code exécuté lors de la mort d'un personnage void main() { // Récupération du personnage mort object o = GetLastPlayerDied(); if (!GetIsObjectValid(o)) return;
// L'xp qu'il lui faut pour le niveau actuel (ECL inclus) int lvlXP = GetXpForLevel(GetECL(o)); // La pénalité en xp (ceci devrait déjà être présent dans votre code) est de 500 // L'xp qu'il aura après la pénalité est donc de son xp - 500 int postXP = GetXP(o) - 500;
// On affecte au personnage l'expérience post pénalité // Si ça le fait tomber en-dessous de l'xp nécessaire au niveau actuel (lvlXP) // alors on le fait tomber jusqu'à cet xp SetXP(o, (postXP < lvlXP) ? lvlXP : postXP); }
Voilà, il ne vous reste plus qu'à trouver votre script de mort. La fonction GetECL n'est pas forcément juste, cela dépend de votre module.
P.S. Je ne suis pas certain que la fonction Get2DAInt existe, je l'ai vue récemment cependant. Si ça ne compile pas tu peux remplacer par StringToInt(Get2DAString(...))
|