JeuxOnLineForumsPlusConnectés : 477 (sites) | 881 (forums)Créer un compte
Forum jeux-vidéo>Neverwinter Nights
Maskado
Les forums JOL > Forum jeux-vidéo > Neverwinter Nights > NWN - Maskado > [Script] Système de fatigue RSS
   
Répondre
Partager Outils Rechercher
Avatar de Jedaï
Jedaï
Alpha & Oméga
 
Avatar de Jedaï
 

[Script] Système de fatigue

Ce script permet de simuler la fatigue dans NWN, il est modifiable à souhait et est garanti sans bug connu :

Code PHP:
///////////////////////////////////////////////////
/*
Script by : Jedaï (erreurs signalées par Prophetia)

Script du système de fatigue
*/
///////////////////////////////////////////////////

//a mettre sur le OnClientEnter

void main()

{

    
object oPC GetEnteringObject();
    
    
DeleteLocalIntoPC"bRecent_Rested" );
    
DeleteLocalIntoPC"nFatigue" );
    
DelayCommandHoursToSeconds(12), ExecuteScript"mod_fatigue"oPC ) );

    
//du code...


Code PHP:
///////////////////////////////////////////////////
/*
Script by : Jedaï (erreurs signalées par Prophetia)

Script du système de fatigue
*/
///////////////////////////////////////////////////

//a mettre sur le OnRest

void main()
{
    
object oPC GetLastPCRested();
    
int nTypeRest GetLastRestEventType();
        
    
int nRR GetLocalIntoPC"bRecent_Rested" );
    
    
//Vérifie que le joueur ne s'est pas déjà reposé très récemment
    //et que le OnRest a bien été déclenché par le début d'un repos
    
if( (! nRR) && nTypeRest == REST_EVENTTYPE_REST_STARTED )
    {
        
//relance le script de fatigue, 12 h de jeu plus tard
        
DelayCommandHoursToSeconds(12), ExecuteScript"mod_fatigue"oPC ) );
        
//signale que le joueur s'est reposé récemment
        
SetLocalIntoPC"bRecent_Rested"TRUE );
        
//réinitialise la fatigue, le joueur est reposé et en forme
        
DeleteLocalIntoPC"nFatigue");
    }
    
//sinon, si le joueur s'est reposé récemment et qu'il s'agit bien
    //du début d'un repos
    
else if( nTypeRest == REST_EVENTTYPE_REST_STARTED )
    {
        
//signale au PJ que sa fatigue n'a pas été diminuée par ce repos
        
SendMessageToPCoPC"Vous n'êtes pas vraiment fatigué en réalité et " +
                              
"cette petite sieste ne vous reposera pas vraiment.");
    }
    
    
//du code...si vous en avez
    

Code PHP:
///////////////////////////////////////////////////
/*
Script by : Jedaï (erreurs signalées par Prophetia)

Script principal du système de fatigue
*/
///////////////////////////////////////////////////

//script "mod_fatigue"
//ne mettez ce script nulle part, compilez le juste 
//sous ce nom

void main()
{
    
object oPC OBJECT_SELF;
    
    
//si le PJ s'est reposé récemment, une copie du script a
    //été lancée par le OnRest, on stoppe donc l'exécution de
    //celui-ci et on signale que le PJ est de nouveau sujet à
    //la fatigue
    
if( GetLocalIntoPC"bRecent_Rested" ) )
    {
        
DeleteLocalIntoPC"bRecent_Rested" );
        return;
    }
    
    
//on récupère la fatigue actuelle du joueur
    
int nF GetLocalIntoPC"nFatigue" );
    
//on l'augmente de un
    
nF++;
    
//et on la restocke
    
SetLocalIntoPC"nFatigue"nF);
    
effect eFatigue;
    
    
//pièce principale du script, ce switch spécifie quels effets doivent
    //être appliqués au PJ, en fonction de sa fatigue
    //Ne pas oublier de TOUJOURS relancer le script dans chaque cas
    //par un DelayCommand()
    //Vous pouvez changez tous les effets, y compris aller jusqu'à la mort du PJ
    //Vous pouvez également changer le nombre de cas
    
switch( nF )
    {
    case 
:
    {
        
SendMessageToPCoPC"Après douze heures passées sans vous reposez, "+
                              
"vous commencez à sentir la fatigue peser sur vos épaule, "+
                              
"mais cela reste très supportable..." );
        
DelayCommandHoursToSeconds(12), ExecuteScript"mod_fatigue"oPC ) );
        break;
    }
    case 
:
    {
        
SendMessageToPCoPC"Vous venez de passer 24h sans dormir, les premières "+
                              
"atteintes de la fatigue viennent entamer vos forces, "+
                              
"reposez-vous vite !" );
        
eFatigue ExtraordinaryEffectEffectAbilityDecreaseABILITY_STRENGTH) );
        
ApplyEffectToObjectDURATION_TYPE_PERMANENTeFatigueoPC );
        
DelayCommandHoursToSeconds(6), ExecuteScript"mod_fatigue"oPC ) );
        break;
    }
    case 
:
    {
        
SendMessageToPCoPC"Vous êtes en train de passer une nuit blanche !"+
                              
"Dans votre état vous ne feriez même pas peur à un lapin"+
                              
"aveugle, qu'espérez vous donc faire ? Reposez vous "+
                              
"immédiatemment, à moins que vous ne teniez à tomber sur"+
                              
"place !" );
        
eFatigue ExtraordinaryEffectEffectCurse) );
        
ApplyEffectToObjectDURATION_TYPE_PERMANENTeFatigueoPC );
        
DelayCommandHoursToSeconds(6), ExecuteScript"mod_fatigue"oPC ) );
        break;
    }
    case 
:
    {
        
SendMessageToPCoPC"La fatigue vous ronge, vos paupière sont de plomb... "+
                              
"Vous titubez sans but, une poussée et vous tombez ! "+
                              
"Dans peu de temps vous ne pourrez plus soutenir les "+
                              
"assauts du sommeil et sombrerez dans l'inconscience..."+
                              
"Dormez tant que vous pouvez encore en décider consciemment..." );
        
eFatigue ExtraordinaryEffectEffectCurse) );
        
ApplyEffectToObjectDURATION_TYPE_PERMANENTeFatigueoPC );
        
DelayCommandHoursToSeconds(3), ExecuteScript"mod_fatigue"oPC ) );
        break;
    }
    case 
:
    {
        
SendMessageToPCoPC"Zombifié par la fatigue, vous vous effondrez et "+
                              
"rejoignez enfin les limbes accueillant du sommeil..." );
        
eFatigue ExtraordinaryEffectEffectSleep() );
        
ClearAllActions();
        
ActionRest();
        
ActionDoCommandApplyEffectToObjectDURATION_TYPE_TEMPORARYeFatigueoPC240.0 ) );
        
DelayCommandHoursToSeconds(3), ExecuteScript"mod_fatigue"oPC ) );
        
DelayCommand0.2SetCommandableFALSEoPC ) );
        
DelayCommand250.0SetCommandableTRUEoPC ) );
        break;
    }
    default :
    {
        
SendMessageToAllDMs("Problème avec le système de fatigue, joueur " GetNameoPC ) +
                     
". nFatigue vaut : " IntToStringnF ) + ". Réinitialisation de "+
                     
"la fatigue de ce joueur !" );
        
DeleteLocalIntoPC"nFatigue" );
        
DelayCommandHoursToSeconds(12), ExecuteScript"mod_fatigue"oPC ) );
    }
    }

Lien direct vers le message - Vieux
Avatar de 'Az
'Az [P.H.]
Alpha & Oméga
 
Avatar de 'Az
 
Un truc que je ne comprend pas dans ce script (je dois être fatigué ^^)

où est ce que tu vire les effect de baisse de caractéristiques donnés ici ?
eFatigue = ExtraordinaryEffect( EffectAbilityDecrease( ABILITY_STRENGTH, 2 ) );
ApplyEffectToObject( DURATION_TYPE_PERMANENT, eFatigue, oPC );

D'après ce que j'en vois j'ai l'impressions qu'ils restent définitivement, mais je ne pense pas que ce soit le cas.

(Le script que j'ai fait est très similaire a celui ci, si ce n'est qu'il prend en compte la constitution du pc)
Lien direct vers le message - Vieux
Avatar de Jedaï
Jedaï
Alpha & Oméga
 
Avatar de Jedaï
 
Eh bien je croyais que les effets disparaissaient avec le repos, mais on m'as récemment dit que ce n'était pas le cas lorsque les effets étaient Extraordinary(), je n'avais mis cette fonction que pour éviter une dissipation, mais effectivement si ça empêche que l'effet soit supprimé lors de la sieste, il faudrait rajouter un RemoveEffects() dans le OnRest, enfin c'est pas la mort...

Par contre le désavantage par rapport à ton script, c'est que l'on retire tous les effets d'un coup. Mais c'est surtout pour empêcher les excès que j'ai mis ce script alors....

L'avantage comme je te l'ai dit, c'est que le script est clair et facile à modifier.
Lien direct vers le message - Vieux
Avatar de Jaha Effect
Jaha Effect
Alpha & Oméga
 
Avatar de Jaha Effect
 
RemoveEffects() ????
Arf bourreau d'Effect !

Jaha Effect
Lien direct vers le message - Vieux
Avatar de Reyan
Reyan [L.D.D]
Roi / Reine
 
Avatar de Reyan
 
suffit de creer un "effect creator" qd on les pose
de tester les effet ds le onplayerrest avec "GetEffectCreator"
et une boucle "GetFirstEffect"
non ?
Lien direct vers le message - Vieux
Avatar de 'Az
'Az [P.H.]
Alpha & Oméga
 
Avatar de 'Az
 
euh... petit truc en passant Jedaï, je crois bien que les elfes sont imminisé a l'EffectSleep.

Reyand > exelente idée je suis en train de tester
Lien direct vers le message - Vieux
Avatar de Jedaï
Jedaï
Alpha & Oméga
 
Avatar de Jedaï
 
Bof, aucune importance, ils auront pas la jolie animation, c'est tout, de toute façon je les fait se reposer avec ActionRest(), alors...

Excellente idée effectivement, suffit d'avoir six "créateurs d'effet" dans tout le module (un pour chaque caractéristique) et on peut retirer les effets en fonction de la caractéristiques, bien vu !!
Lien direct vers le message - Vieux
Avatar de Skanzo Sylan
Skanzo Sylan
Empereur
 
Avatar de Skanzo Sylan
 
Encore, t'as de la chance, ya les rest_event pour enclencher la disparition des effets. Moi j'ai rien du tout pendant l'animation dead_front
Lien direct vers le message - Vieux
Avatar de Skanzo Sylan
Skanzo Sylan
Empereur
 
Avatar de Skanzo Sylan
 
Au lieu d'utiliser EffectSleep, on peut toujours avoir l'animation avec EffectVisualEffect( VFX_IMP_SLEEP), non?
Lien direct vers le message - Vieux
Avatar de KzimiR666
KzimiR666
Dauphin
 
Avatar de KzimiR666
 
Ce script fonctionne bien ? Car dans le Lexicon, il est dit :
Citation:
DelayCommand cannot be used across area transitions. If a DelayCommand is started in one area, the command that is delayed will be lost when the area is unloaded and a new area loaded.
Ce qui pose problème dans ce cas... Car le script de fatigue ne sera pas lancé toutes les 12h si le joueur change de zones...
De plus, le DelayCommand() ne fait-il pas autant lagger que le OnHeartBeat (j'avais vu ça dans un forum)?
Lien direct vers le message - Vieux
Avatar de 'Az
'Az [P.H.]
Alpha & Oméga
 
Avatar de 'Az
 
mmmmmmmmmmmm......... pas bête du tout !

ca mérite reflexion. Si on lit ce qu'il y a marqué vi, alors c pas la peine d'espérer que ca marche.

Pour être franc, je n'ai jamais testé si le DelayCommand marchait après avior changé de zone.

Ben......... seul le test nous le dira ^^'

Si ca ne marche pas, on peut toujours utiliser ma biblio sur les time events (dispo quelque part dans sur les persistant), qui elle marchera, mais c'est un peu plus complexe a l'utilisation.
Lien direct vers le message - Vieux
Avatar de Prince Nexus
Prince Nexus
Dauphin
 
Avatar de Prince Nexus
 
C'est quoi ces conneries ??!! Biensur que le DelayCommand fonctionne lors des transitions de zones ... !!! Fo vérifier ses sources avant de balancer de la désinformation !

Sinon, joli script, j'en ai fait un en plus complexe mais le principe est la : empêcher les GB de faire du zoning sans se reposer !

Prince Nexus.
Lien direct vers le message - Vieux
Avatar de eMRaistlin
eMRaistlin
Alpha & Oméga
 
Avatar de eMRaistlin
 
En fait, il s'agit de dire que l'objet Area n'est plus valide pour les delay commande, donc tout les delay en attentes sur des items / placeable / creatures ne se declencheraient a priori pas.
(pour les joueurs, il devraient rester un support valide pour Delay

Par contre, ca m'etonne quand même. J'ai un peu de mal a y croire.
Lien direct vers le message - Vieux
Avatar de KzimiR666
KzimiR666
Dauphin
 
Avatar de KzimiR666
 
Citation:
Provient du message de Prince Nexus
C'est quoi ces conneries ??!! Biensur que le DelayCommand fonctionne lors des transitions de zones ... !!! Fo vérifier ses sources avant de balancer de la désinformation !
Prince Nexus.
Heu... TU es toujours aussi vulgaire, direct et ininterressant dans tes réponses ?
Parceque là, je ne cherche pas à démonter quoi que se soit et si tu dit que le Lexicon n'est pas une bonne source, je pense que tu te feras étripé par tous les autres scripteurs de NWN (après mon tour ! )
Pour ton information personnelle, ce que dit le Lexicon à propos de DelayCommand :
Citation:
Parameters
fSeconds
Number of seconds to delay the command by.
aActionToDelay
Action in the Action Queue to delay.

Description
Delay aActionToDelay by fSeconds. If an error occurs the log file will contain "DelayCommand failed.".

Remarks
DelayCommand() is no longer capped by a time limit of 1 game day.

Known Bugs
DelayCommand cannot be used across area transitions. If a DelayCommand is started in one area, the command that is delayed will be lost when the area is unloaded and a new area loaded. (This information was submitted in German; I've done my best translation so if someone finds this to be incorrect, please inform the Lexicon staff using one of the links below.)
Lien direct vers le message - Vieux
Avatar de 'Az
'Az [P.H.]
Alpha & Oméga
 
Avatar de 'Az
 
mouais.....

1) ben commence par apprendre le nom et l'effet de tes fonction plutot que tjrs te référer a ce truc, et tu verra que tu vas vite commencer a programmer bcp plus vite.

2) Arrete d'être irespectueux envers mon pote Prince Nexus sinon vais me facher tout rouge

Nan serieusement, je veux bien croire que ce truc est très pratique, mais contrairement a ce que tu semble le croire, ce n'est (et c'est loin d'être) la bible des scripteurs, en tout cas de ce que j'en sais (et je ne pense pas qu'il soit prétencieux de ma part de dire que j'en sais quelque chose )
Lien direct vers le message - Vieux
Répondre
Les forums JOL > Forum jeux-vidéo > Neverwinter Nights > NWN - Maskado > [Script] Système de fatigue
   

Outils Rechercher
Rechercher:

Recherche avancée

Les vidéos de Neverwinter Nights RSS
  • Aucune vidéo pour le moment...
Thème visuel : Fuseau horaire GMT +1. Il est actuellement 01h23.
   

© JeuxOnLine, le site des MMO, MMORPG et MOBA. Tous droits réservés. - Conditions générales d'utilisation - Conditions d'utilisation des forums - Traitement des données personnelles - ! Signaler un contenu illicite