La Bibliothèque de Neverwinter Nights
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
La date/heure actuelle est 23/11/2024 21:20:08


  Page 1 sur 1 ¤

Voir le sujet précédent ¤ Voir le sujet suivant 
Auteur Message
Lemli
Grand Chevalier
Inscrit le: 28 Aoû 2005
Messages: 114
Répondre en citant
Posté le : 21/12/2005 16:00:08 Sujet du message : Régulateur de niveaux

Bonjour!
je voudrais faire un regulateur de niveaux dans mon module(comme dans "Contest of Champions")qui permet de fixer un niveaux au joueur:
le joueur va voir un mec qui lui dit:"ton niveau est trop faible pour participer.Tu dois etre de niveaux 15.Accepte tu(évidement il dit pas ca si le joueur a plus de 15 niveaux)?"si oui le joueur vois son niveaux augmenter jusqu'à 15,mais évidement le nombre de niveaux ou de XP qu'il gagnera dépendra de son niveaux ou de ses XP d'origine.J' ai essayer de copier les scripts de contest of champion et de les modifier pour arriver à ce résultat mais ca n'a pas marché.Voila,merci pour tout!
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Enki
Légende vivante
Inscrit le: 06 Déc 2005
Messages: 432
Répondre en citant
Posté le : 23/12/2005 13:50:23 Sujet du message : C'est fait !

Bonjour Lemli,
J'ai réglé ton problème en regardant les scripts de contest of champion et en les adaptant à ton cas.
D'abord, tu as besoin de deux choses un perso qui est l'hôte du dialogue, et une zone tampon, à partir de laquelle ton perso niveau 15 ou plus se téléportera pour entrer dans le jeu, un waypoint dont le tag est "WP_new_zone" à l'endroit où tu veux que le PC arrive.
Voilà le dialogue que j'ai fait, il contient deux branches au début :
Les astérisques renvoient à des scripts.

[Propriétaire] Ok, c'est bon tu peux passer ! *
|_____[Joueur] Merci ! **
[Propriétaire] Salut, <FullName>, ton niveau est trop faible, tu dois être niveau 15, tu veux changer ? ***
|_____[Joueur] Oui.
|____________[Propriétaire] Par le pouvoir du crâne ancestral, tu détiens la force toute puissante ! ****
|______________________[Joueur] AAAAAHH !!!!!! (fin de dialogue).
|_____[Joueur] Non. (fin de dialogue).

* Dans les conditions mets ce script :
NWScript :
int StartingConditional()
{

  // Restriction en fonction de la classe du joueur
  int iPassed = 0;
  if(GetHitDice(GetPCSpeaker()) >= 15)
    iPassed = 1;
  if(iPassed == 0)
    return FALSE;

  return TRUE;
}
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.


** dans les conséquences :
NWScript :Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.


*** dans les conditions :
NWScript :
#include "enki_valid_inc"

int StartingConditional()
{
    object oPlayer;
    int nReturnValue, nAllowedLevel;

    oPlayer = GetPCSpeaker();


    nAllowedLevel = GetAllowedLevelForPlayer(oPlayer);
    SetCustomToken(500,IntToString(nAllowedLevel));

    nReturnValue = ValidatePlayer(oPlayer);
    if ( nReturnValue == VALIDATE_PLAYER_FAILED_LOW_LEVEL ||
        nReturnValue == VALIDATE_PLAYER_FAILED_HIGH_LEVEL )
    {
        return TRUE;
    }

    return FALSE;
}
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.


**** dans les conséquences :
NWScript :
#include "enki_valid_inc"

void main()
{
    object oPlayer;
    int nRequiredLevel, nRequiredXP, nXPDelta;
    effect eVis=EffectVisualEffect(VFX_FNF_PWKILL );


    oPlayer = GetPCSpeaker();

    nRequiredLevel = GetAllowedLevelForPlayer(oPlayer);
    nRequiredXP = GetXPRequiredForLevel(nRequiredLevel);

    nXPDelta = nRequiredXP - GetXP(oPlayer);
    if ( nXPDelta <= 0 )
    {
        SetXP(oPlayer,nRequiredXP);
        ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eVis,oPlayer,3.0f);
    }
    else
    {
        GiveXPToCreature(oPlayer,nXPDelta);
        ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eVis,oPlayer,3.0f);
    }
}
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.



En plus de cela, il te faut 2 includes comme tu as pu le voir.
Le premier s'appelle "enki_valid_inc" :
NWScript :
/////"enki_valid_inc" ;, a partir de "contest of champion"/////////
/////////////////////////de Brenon Holmes//////////////////////// /
#include "enki_lvl_include"


int VALIDATE_PLAYER_FAILED_HIGH_LEVEL = 1;
int VALIDATE_PLAYER_FAILED_LOW_LEVEL = 2;
int VALIDATE_PLAYER_SUCCESS = 3;

int ValidatePlayer( object oPlayer );

////////////////////////////// ////////////////////

int ValidatePlayer( object oPlayer )
{

    int nAllowedLevel, nTotalPlayerLevel;
    int nAllowedXP;


    nAllowedLevel = GetAllowedLevelForPlayer(oPlayer);
    if ( nAllowedLevel != LEVEL_LIMIT_NONE )
    {
        nTotalPlayerLevel = GetTotalPlayerLevel(oPlayer);
        if ( nTotalPlayerLevel > nAllowedLevel )
        {
            return VALIDATE_PLAYER_FAILED_HIGH_LEVEL;
        }
        else if ( nTotalPlayerLevel < nAllowedLevel )
        {
            return VALIDATE_PLAYER_FAILED_LOW_LEVEL;
        }
    }


    nAllowedXP = GetXPRequiredForLevel(nAllowedLevel);
    if ( nAllowedXP != GetXP(oPlayer) )
    {
        SetXP(oPlayer,nAllowedXP);
    }

    return VALIDATE_PLAYER_SUCCESS;
}

Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.


Le deuxième s'appelle "enki_lvl_include" :
NWScript :
///librairie de fonctions pour attribuer un level a un PC,///
///a partir de "contest of champion" de Brenon Holmes ////

int DEFAULT_NUM_LEVELS = 1;
int DEFAULT_LEVEL_RESTRICTION = 15;
int LEVEL_LIMIT_NONE = -1;

////////////////////////////// ///////////////////////
int GetTotalPlayerLevel( object oPlayer );
int GetAllowedLevelForPlayer( object oPlayer, int bBaseValue = FALSE );
int GetXPRequiredForLevel( int nLevel );
////////////////////////////// /////////////////

int GetTotalPlayerLevel( object oPlayer )
{
    return GetHitDice(oPlayer);
}

//////////////////////////
int GetAllowedLevelForPlayer( object oPlayer, int bBaseValue )
{
    int nAllowedLevel;
    nAllowedLevel = GetLocalInt(GetModule(),"m_nAllowedLevel");

    if ( bBaseValue == TRUE )
    {
        return nAllowedLevel;
    }

    return nAllowedLevel;
}

////////////////////////////// ////////////
int GetXPRequiredForLevel( int nLevel )
{
    int nRequiredXP;
    int nCount;

    nRequiredXP = 0;

    for ( nCount = 1; nCount <= nLevel; nCount++ )
    {
        nRequiredXP += 1000 * (nCount - 1);
    }

    return nRequiredXP;
}
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.


Voilà pour les scripts, mais le plus important est d'aller dans les propriétés du module > avancées > Variables :
Là, tu place la variable de type int sur ton module comme suit :
m_nAllowedLevel int 15
Et voilà, ton système est prêt, bon jeu !
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Lemli
Grand Chevalier
Inscrit le: 28 Aoû 2005
Messages: 114
Répondre en citant
Posté le : 26/12/2005 19:03:04 Sujet du message :

Ca bloque au niveau des includes.D'après le message d'erreur,il faut compiller le script en script conditionnel car il n'y a pas de fonction void main,mais il refuse tout de même de le compiller de cette facon car il n'y a pas non plus de fonction starting conditional...
Voila.Merci beaucoup por ton aide.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Enki
Légende vivante
Inscrit le: 06 Déc 2005
Messages: 432
Répondre en citant
Posté le : 27/12/2005 12:55:17 Sujet du message : Il n'y a pas d'erreur !

Salut Lemli,
Cela ne bloque pas au niveau des includes car les includes ne compilent pas. Ce sont des fichiers que l'on inclut dans un script, et c'est le script qui contient l'include qui doit être impérativement compilé. Si tu modifie l'include, tu dois recompiler obligatoirement les script qui l'utilisent. Il ne faut pas tenir compte du message d'erreur d'Aurora sur l'absence de void main() ou sur le fait que ce script n'est pas un starting conditional.
Voilà, à plus tard !
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Lemli
Grand Chevalier
Inscrit le: 28 Aoû 2005
Messages: 114
Répondre en citant
Posté le : 27/12/2005 16:18:02 Sujet du message :

J'ai tout refait et ca marche toujours pas!Tu es sûr qu'il n'y a pas un probleme quelque part?Ensuite si on ne compile pas des includes,l'éditeur ne peut pas les reconnaître et les utiliser,si?
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Enki
Légende vivante
Inscrit le: 06 Déc 2005
Messages: 432
Répondre en citant
Posté le : 27/12/2005 16:27:10 Sujet du message : Une erreur ?

Salut, je vais revérifier pour voir si je n'ai pas fait d'erreur.
Par contre, est-ce-que tu as fait attention aux dernières lignes de mon post ce sont les plus importantes:

Citation :

Il faut aller dans les propriétés du module > avancées > Variables :
Là, tu place la variable de type int sur ton module comme suit :
m_nAllowedLevel___________int_________ 15
En outre, si je ne trouve pas d'erreur dans mes scripts, je peux t'envoyer par Mail un petit module de démo que j'ai fait pour répondre à ton problème, si tu le souhaites.
A bientôt !
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Lemli
Grand Chevalier
Inscrit le: 28 Aoû 2005
Messages: 114
Répondre en citant
Posté le : 27/12/2005 16:40:15 Sujet du message :

Ne t'inquiete pas,j'ai compris pour la variable.Ensuite si tu ne trouve pas l'éventuelle erreur ou que je ne trouve pas la mienne,je voudrais alors bien une démo.
Merci beaucoup pour ton aide.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Enki
Légende vivante
Inscrit le: 06 Déc 2005
Messages: 432
Répondre en citant
Posté le : 27/12/2005 17:07:00 Sujet du message : Pas d'erreur !

Je ne vois pas d'erreur, et j'ai refait un autre module de démo pour voir si j'avais bien "copier-coller" les scripts dans mon post. Envois-moi ton adresse Email par MP et je t'envoie de suite une démo !
A plus.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Montrer les messages depuis :
Page 1 sur 1 ¤


Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum


Sauter vers:
FAQ | Rechercher | Liste des Membres | Groupes d'utilisateurs | S'enregistrer | Profil | Se connecter pour vérifier ses messages privés | Connexion
Powered by phpBB 2.* [m] © 2001, 2002 phpBB Group
Theme rewritten in beautiful XHTML code by Baldurien.
Thème "La Bibliothèque de Neverwinter" crée par Kruger
Traduction par : phpBB-fr.com
Page generated in 49.266ms