NWN - Maskado

Calcul du niveau moyen du groupe. Help !

Répondre
Partager Rechercher
Bonjour, j'ai fais un petit script pour calculer le niveau moyen de tous les joueurs entrants dans un module, mais le script ne marche pas. Je crois que c'est a cause des variables locales ("Niveau" & "Check") dont la valeur est toujours 0. A comprends pas ?! N'ayant pas trouvé de solution par la recherche, je vous demande votre aide.

Voici le script :

object oPC = GetFirstPC();
while(GetIsObjectValid(oPC))
{
int LvlPC = GetLevelByClass(CLASS_TYPE_ARCANE_ARCHER,oPC)+
GetLevelByClass(CLASS_TYPE_ASSASSIN,oPC)+
GetLevelByClass(CLASS_TYPE_BARBARIAN,oPC)+
GetLevelByClass(CLASS_TYPE_BARD,oPC)+
GetLevelByClass(CLASS_TYPE_BLACKGUARD,oPC)+
GetLevelByClass(CLASS_TYPE_CLERIC,oPC)+
GetLevelByClass(CLASS_TYPE_DIVINECHAMPION,oPC)+
GetLevelByClass(CLASS_TYPE_DRAGONDISCIPLE,oPC)+
GetLevelByClass(CLASS_TYPE_DRUID,oPC)+
GetLevelByClass(CLASS_TYPE_DWARVENDEFENDER,oPC)+
GetLevelByClass(CLASS_TYPE_FIGHTER,oPC)+
GetLevelByClass(CLASS_TYPE_MONK,oPC)+
GetLevelByClass(CLASS_TYPE_PALADIN,oPC)+
GetLevelByClass(CLASS_TYPE_PALEMASTER,oPC)+
GetLevelByClass(CLASS_TYPE_RANGER,oPC)+
GetLevelByClass(CLASS_TYPE_ROGUE,oPC)+
GetLevelByClass(CLASS_TYPE_SHADOWDANCER,oPC)+
GetLevelByClass(CLASS_TYPE_SORCERER,oPC)+
GetLevelByClass(CLASS_TYPE_WEAPON_MASTER,oPC)+
GetLevelByClass(CLASS_TYPE_WIZARD,oPC);

SetLocalInt(oPC,"Niveau",GetLocalInt(oPC,"Niveau")+LvlPC);
SetLocalInt(oPC,"Check",GetLocalInt(oPC,"Check")+1);

oPC = GetNextPC();
}
int f01 = GetLocalInt(oPC,"Niveau");
int f02 = GetLocalInt(oPC,"Check");
SetLocalInt(oPC,"Force",f01/f02);

"Force" etant le niveau moyen du groupe. N'étant pas une bête en script, n'hésitez pas à me proposer mieux s'il faut faire le script différement! Merci.

TheRack
Cette fonction devrait résoudre tes problèmes:

Code PHP:

// Get the average level of the members of the faction.
// * Return value on error: -1
int GetFactionAverageLevel(object oFactionMember
Merci d'avoir répondu si vite, mais encore une question: cette fonction va me donner la moyenne des niveaux de tous les joueurs connectés à mon serveur même s'ils ne sont pas en groupe, party ou faction ?

Ou bien est-ce qu'ils doivent être en groupe ?
Pour obtenir le niveau d'un joueur, utilise plutôt la fonction GetHitDice, ça te donne le nombre de dés de vie... et comme les PJ ont un dé par niveau...

Et ton problème viens surtout de tes "local int"... Un Local Int est une variable locale à l'objet, ici à ton oPC. Or a chaque passage dans la boucle, tu changes de oPC, donc tu ne relis jamais la même variable. A la fin, tu essayes de récupérer la variable sur "OBJECT_INVALID", qui donc n'a pas de variables du tout: ce n'est pas un objet valide!

Enfin, pourquoi essayer d'utiliser des localint alors que ça ne te sert à rien?!? Tu n'as pas besoin de stocker de local int, tu as juste besoin de variables int toutes bêtes.

Le seul point obscur, c'est pour la localint "Force". Pourquoi essayes tu de la stocker en local? Pour pouvoir l'utiliser dans une autre fonction tout de suite après ou pour pouvoir la conserver pendant longtemps et la réutiliser pendant longtemps? A mon avis, c'est pour l'utiliser tout de suite après et ce n'est donc pas comme ça qu'il faut procéder.

J'écrirais ta fonction plutôt comme ça:

Code PHP:

/* le int devant le nom de la fonction indique qu'elle renverra un int
Pour l'utiliser, ca donnera quelque chose comme:
int iMoyenne = CalculMoyenneNiveauPC(); */
int CalculMoyenneNiveauPC()
{
    
int iLvlPC 0;
    
int iLvlGlobal 0;
    
int iNbPC 0;
    
object oPC GetFirstPC();
    while(
GetIsObjectValid(oPC))
    {
        
iLvlPC GetHitDice(oPC);
        
iLvlGlobal iLvlGlobal iLvlPC;
        
iNbPC iNbPC 1;
        
oPC GetNextPC();
    }
    
// à modifier selon la manière dont tu veux arrondir...
    
int iMoyenne iLvlGlobal iNbPC
    return 
iMoyenne;

On aurait pu faire en encore moins de lignes (on peut se passer de iLvlPC et iMoyenne) mais cette version est assez claire.

Petite precision: ce script compile, mais je n'ai pas pu le tester: je n'ai pas de joueurs ^^
Merci beaucoup, je vais tester. Comme je l'ai dis, je suis loin d'avoir compris toute la grammaire du C, donc je suis toujours content d'apprendre de nouvelles choses.

TheRack.
La fonction que j'ai mise au-dessus donne le niveau moyen du groupe (faction = party = groupe), mais c'était bien ta demande, non ? (cf le titre du sujet)

Sinon, la méthode de Fanley est la bonne pour déterminer le niveau moyen de tous les PJs du module.
Re: Calcul du niveau moyen du groupe. Help !
Citation :
Provient du message de TheRack
Bonjour, j'ai fais un petit script pour calculer le niveau moyen de tous les joueurs entrants dans un module
Donc non, ce n'était pas sa demande Azmathiel Je suppose que c'est pour affichage, ou pour info aux DM.
En fait, j'ai pu tester, ça marche avec la faction, car tous les joueurs, y compris le md, font partie de la faction PC par défaut. Donc si on applique cette fonction à un joueur, elle va faire la moyenne de tous les niveaux de tous les joueurs. Exactement ce dont j'avais besoin, sauf que je ne connaissais pas cette fonction.

Merci encore.

PS. en fait, cela me permet de faire poser automatiquement des monstres plus ou moins forts en proportion du niveau moyen du ou des joueurs...
Ah ouais, j'imagine bien... un niveau 1, un niveau 20 = moyenne 10,5... mais ils se baladent pas ensemble. Le niveau 20 va s'ennuyer et le niveau 1 va mourir

Bon, c'est pas forcement mauvais, mais tu as intérêt à bien gérer...
Citation :
Provient du message de Fanley
Ah ouais, j'imagine bien... un niveau 1, un niveau 20 = moyenne 10,5... mais ils se baladent pas ensemble. Le niveau 20 va s'ennuyer et le niveau 1 va mourir

Bon, c'est pas forcement mauvais, mais tu as intérêt à bien gérer...
Et c'est là l'intêret de NWN, c'est le MD. Mais de toute façon, nous jouons entre amis, et il n'y a jamais plus de 3-4 niveaux de différences entre les persos, sauf mon barbare qui, avec son 2 en intelligence, ne peut que porter les torches de mon paladin...
Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés