La Bibliothèque de Neverwinter Nights
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
La date/heure actuelle est 22/09/2024 16:21:48


  Page 1 sur 1 ¤

Voir le sujet précédent ¤ Voir le sujet suivant 
Auteur Message
Klemmth
Seigneur
Inscrit le: 26 Juin 2004
Messages: 176
Localisation: france
Répondre en citant
Posté le : 03/07/2004 14:54:43 Sujet du message : [PROB] Gestion du repos

Voila, j'ai mis dans mon module un script qui empeche de se reposer trop souvent.
Je l'ai ajouté au OnRest de mon module.
Mais il ne marche pas, et je ne sais vraiment pas pourquoi. Je fait appel a votre savoir Very Happy

NWScript :

#include "x2_inc_restsys"
#include "x2_inc_switches"
void main()
{
    object oPC = GetLastPCRested();

    if (GetModuleSwitchValue(MODULE_SWITCH_USE_XP2_RESTSYSTEM) == TRUE)
    {
        object oArea = GetArea (oPC);

        string sTable = GetLocalString(oArea,"X2_WM_ENCOUNTERTABLE") ;
        if (sTable != "" )
        {
            int nDoors = GetLocalInt(oArea,"X2_WM_AREA_USEDOORS");
            int nDC = GetLocalInt(oArea,"X2_WM_AREA_LISTENCHECK");
            WMSetAreaTable(oArea,sTable,nDoors,nDC);

            //remove string to indicate we are set up
            DeleteLocalString(oArea,"X2_WM_ENCOUNTERTABLE");
        }

        if (GetLocalInt(GetModule(), "X2_G_LOWLEVELSTART") == 10)
        {
            AssignCommand(oPC, ClearAllActions());
            if (GetHitDice(oPC) >= 12)
            {
                ExecuteScript("bk_sleep", oPC);
                return;
            }
            else
            {
                FloatingTextStrRefOnCreature(84141 , oPC);
                return;
            }
        }

        if (GetLastRestEventType()==REST_EVENTTYPE_REST_STARTED)
        {
            if (!WMStartPlayerRest(oPC))
            {
                // The resting system has objections against resting here and now
                // Probably because there is an ambush already in progress
                FloatingTextStrRefOnCreature(84142 ,oPC);
                AssignCommand(oPC,ClearAllActions());
            }
            if (WMCheckForWanderingMonster(oPC))
            {
                //This script MUST be run or the player won't be able to rest again ...
                ExecuteScript("x2_restsys_ambus",oPC);
            }

            //le script commence ici...
            int nIntervalleSansRepos = 8;
            int nLastRest = GetLocalInt( oPC, "LastRest" );
            int nLastDay = GetLocalInt( oPC, "LastDay" );
            int nHour = GetTimeHour();
            int nDay = GetCalendarDay();

            if ((( nLastRest == 0 ) && ( nLastDay == 0 )) || ( GetLocalInt( GetModule(), "DMRestOK" ) == 1 ) || ( GetLocalInt( oPC, "DMRestOK" ) == 1 ) )
            {
              SetLocalInt( oPC, "LastRest", nHour );
              SetLocalInt( oPC, "LastDay", nDay );
              SetLocalInt( oPC, "DMRestOK", 0 );
            }

            else if ( nDay == nLastDay )
            {
              if (( nHour - nLastRest ) < nIntervalleSansRepos )
              {
                AssignCommand( oPC, ClearAllActions() );
                SendMessageToPC( oPC, "Tu ne peux pas encore te reposer." );
              }
            }

            else if ((( nDay - nLastDay ) == 1 ) || (( nLastDay - nDay ) == 27 ) )
            {
              if (( nLastRest - nHour ) > 24 - nIntervalleSansRepos )
              {
                AssignCommand( oPC, ClearAllActions() );
                SendMessageToPC( oPC, "Tu ne peux pas encore te reposer." );
              }
            }
            else
            {
              SetLocalInt( oPC, "LastRest", nHour );
              SetLocalInt( oPC, "LastDay", nDay );
              SetLocalInt( oPC, "DMRestOK", 0 );
            }
            //...et finit ici
        }
        else if (GetLastRestEventType()==REST_EVENTTYPE_REST_CANCELLED)
        {
        // No longer used but left in for the community
        // WMFinishPlayerRest(oPC,TRUE); // removes sleep effect, etc
        }
        else if (GetLastRestEventType()==REST_EVENTTYPE_REST_FINISHED)
        {
        // No longer used but left in for the community
        //  WMFinishPlayerRest(oPC); // removes sleep effect, etc
        }
    }
}
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.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Tuyen
Demi-dieu
Inscrit le: 23 Nov 2002
Messages: 460
Localisation: Chez moi
Répondre en citant
Posté le : 03/07/2004 15:40:35 Sujet du message :

Je m'y connais pas trop en script mais est ce que t'es allé voir sur le bourg de NWN? ils proposent plein de scripts et je crois avoir vu un sur la limitation du repos :
ici
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger Ignorer l'utilisateur
 
Klemmth
Seigneur
Inscrit le: 26 Juin 2004
Messages: 176
Localisation: france
Répondre en citant
Posté le : 03/07/2004 15:48:53 Sujet du message :

En fait, je ne cherche pas a faire un script qui gere la fatigue ( pour l'instant Very Happy ), mais un script qui empeche de se reposer avant un certain temps passé depuis le dernier repos.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Klemmth
Seigneur
Inscrit le: 26 Juin 2004
Messages: 176
Localisation: france
Répondre en citant
Posté le : 04/07/2004 20:25:49 Sujet du message :

Svp, aidez-moi a résoudre cet infime probleme Sad
_________________
...
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
KIMOUNET
Héros
Inscrit le: 19 Oct 2003
Messages: 256
Localisation: Au pays des reves
Répondre en citant
Posté le : 27/08/2004 19:13:24 Sujet du message : [PROB] Gestion du repos

Je te file le script qui m'a permis de mettre un délais entre chaque repos

//:Confused/////////////////////////////////////////////
//:: Name: Zimero's Limited Resting v1.2
//:: FileName: z_mod_onrest
//:Confused/////////////////////////////////////////////
/*
Description du Script
Il permet d'attendre un certain nombre de temps
avant que le joueur puisse se reposer. Mais tout
l'interet n'est pas là, ce script permet aussi
de gérer le temps de repos, c'est à dire, si on
se repose seulement la moitier tu temps d'un repos
total, l'attente avant le prochain repos sera
proportionnel au repos deja fournit.
*/
//:Confused/////////////////////////////////////////////
//:: Created By: Jonas Boberg aka. zimero
//:: Created On: 20021212
//:: Modified On: 20030107
//:: Traduit en Français par Asuke (sasukezero@hotmail.com)
//:: Traduit le: Vendredi 31 Janvier 2003
//:Confused/////////////////////////////////////////////
//VARIABLE MODIFIABLES
//Le nombres d'heure durant lequelles le joueurs doit attendre
//avant de pouvoir se reposer après un repos complet (defaut, 8 heures)
int TIMEBETWEENRESTING=2;
//Le nombre reel de minutes qui correspond a 1 heure dans le jeu
int REALTIMEMINUTES=1;
//FIN DES VARIABLES MODIFIABLES
int CurrentTime();
void main()
{
//initiation des varibles
object oPC = GetLastPCRested();
int iCurrentTime, iLastRestTime, iTimeSinceRest, iTimeUntilRest;
float fTimePenalty;
switch (GetLastRestEventType())
{
case REST_EVENTTYPE_REST_STARTED:
iCurrentTime = CurrentTime();
iLastRestTime = GetLocalInt(oPC,"REST_HOUR");
iTimeSinceRest = iCurrentTime-iLastRestTime;
SetLocalInt(oPC, "REST_SECOND", GetTimeSecond());
if (iLastRestTime==0 || iTimeSinceRest >= TIMEBETWEENRESTING)
{
SetLocalInt(oPC, "REST_ALLOWED", TRUE);
}
else
{
SetLocalInt(oPC, "REST_ALLOWED", FALSE);
iTimeUntilRest = TIMEBETWEENRESTING-iTimeSinceRest;
if (REALTIMEMINUTES == 1)
{
iTimeUntilRest = FloatToInt(HoursToSeconds(iTimeUntilRest)/60);
//Vous pouvez changer le message si le repos n'est pas encore
//autoriser
if (iTimeUntilRest == 1)
{
FloatingTextStringOnCreature("Vous devez attendre " +
" minutes avant de pouvoir vous reposer", oPC);
}
else
{
FloatingTextStringOnCreature("Vous devez attendre "+
IntToString(iTimeUntilRest)+
" minutes avant de pouvoir vous reposer", oPC);
}
}
else
{
if (iTimeUntilRest == 1)
{
FloatingTextStringOnCreature("Vous devez attendre " +
" minutes avant de pouvoir vous reposer", oPC);
}
else
{
FloatingTextStringOnCreature("Vous devez attendre "+
IntToString(iTimeUntilRest)+
" minutes avant de pouvoir vous reposer", oPC);
}
}
//Annuler le repos
AssignCommand(oPC,ClearAllActions());
}
break;
case REST_EVENTTYPE_REST_CANCELLED:
//variable sur le temps de repos
if (GetLocalInt(oPC, "REST_ALLOWED") == TRUE)
{
iCurrentTime = GetTimeSecond();
iLastRestTime = GetLocalInt(oPC, "REST_SECOND");
iTimeSinceRest = iCurrentTime - iLastRestTime;
if (iTimeSinceRest<0) iTimeSinceRest+= 60;
fTimePenalty = TIMEBETWEENRESTING*(iTimeSinceRest/(0.5*GetHitDice(oPC)+10));
SetLocalInt(oPC,"REST_HOUR", CurrentTime()-(TIMEBETWEENRESTING-FloatToInt(fTimePenalty)));
}
break;
case REST_EVENTTYPE_REST_FINISHED:
SetLocalInt(oPC, "REST_HOUR", CurrentTime());
}
}
int CurrentTime()
{
return GetCalendarYear()*8064 + GetCalendarMonth()*672 + GetCalendarDay()*24 + GetTimeHour();
}
_________________
Le savoir est comme un tresor il se partage
 
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 45.4ms