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


  Page 1 sur 1 ¤

Voir le sujet précédent ¤ Voir le sujet suivant 
Auteur Message
galhaed
Novice
Inscrit le: 08 Avr 2005
Messages: 5
Répondre en citant
Posté le : 23/10/2005 15:25:09 Sujet du message : temps entre deux repos

bon voila j'ai deja un script qui me donne un effet de ronflement et de noir pendant le repos et qui est rendu possible seulement si l'on mange quelque chose

je voudrai avoir un script ou lignes de script a ajouter pour que je puisse empecher les joueurs de se reposer tout de suite apres le precedent repos

est ce possible?

merci d'avance
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
finipe
Grand Sage du Conseil
Inscrit le: 11 Fév 2003
Messages: 519
Localisation: Nantes
Répondre en citant
Posté le : 23/10/2005 17:20:56 Sujet du message :

La fonction "rechercher" est ton amie, il y a déjà eu plein de sujets sur la question.
_________________
» Le Tref & l'Aucube : Histoire, misanthropie & zoologie léonine
» 1626, le Gant & l'Epée : intrigues & duels sous le règne de Louis XIII
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
galhaed
Novice
Inscrit le: 08 Avr 2005
Messages: 5
Répondre en citant
Posté le : 23/10/2005 18:21:57 Sujet du message :

ben justement plein mais rien^^
et le seul lien de la bibliothéque ayant trait a ça est dead
voila le pourquoi de ma demande
dsl
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Ailesnoires
Grand Chevalier
Inscrit le: 21 Oct 2004
Messages: 110
Localisation: Vendée
Répondre en citant
Posté le : 23/10/2005 18:35:47 Sujet du message :

regarde donc ici
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
galhaed
Novice
Inscrit le: 08 Avr 2005
Messages: 5
Répondre en citant
Posté le : 03/11/2005 17:04:04 Sujet du message :

voici en fin de compte ce que j'ai fait avec l'aide de plusieurs scripts

le pj dort av"ec un zzzzzzz et un ecran noir
il doit avoir de la nourriture
on peut regler le temps entre deux repos

NWScript :
// modification du dodo par nono3

#include "com_constantes"
#include "com_include"
#include "rest_include"

//Confused//////////////////////// /////////////////////
//:: Nom s3_MDL_dodo1
//:: Module Mer de Lune (Lunerousse)
//Confused//////////////////////// ////////////////////

//Confused//////////////////////// ////////////////////
//:: Created By: Jouby
//:: Created On: 2004
//Confused//////////////////////// ////////////////////

void ClearDarkness(object oOwner)//effacer l'effet du noir de l'ecran
{
effect eTemp=GetFirstEffect(oOwner);
effect eEcranNoir = EffectVisualEffect(VFX_DUR_BLACKOUT);
while(GetIsEffectValid(eTemp))
{
if(GetEffectType(eTemp)==GetEffectType(eEcranNoir))
{
RemoveEffect(oOwner, eTemp);
}
eTemp=GetNextEffect(oOwner);
}
}
/////////////////////////// ///////////////////
//Pas de repos sans nourriture//////////////////
//script du Troubadour//////////////////// /////
////////////////////////////// //////////////////
//Mode d'emploi : placer ce script dans le "OnRest" du module"//
//Creer un ou plusieurs objets non stackable portant le tag "BOUFFE"//

//Ce qui suit est une nouvelle fonction, elle n'est pas de moi//
//Elle cherche un item donne dans l'inventaire du PJ//

object CheckInventoryForItem(object oPC, string sItemTag)
{
  object oItem = GetFirstItemInInventory (oPC);
  while (oItem != OBJECT_INVALID)
  {
    if (GetTag(oItem) == sItemTag)
      return oItem;
    oItem = GetNextItemInInventory (oPC);
  }
  return OBJECT_INVALID;
}
//VARIABLE MODIFIABLES
//Le nombres d'heure durant lequelles le joueurs doit attendre


int TIMEBETWEENRESTING=6;
//Le nombre reel de minutes qui correspond a 1 heure dans le jeu
int REALTIMEMINUTES=2;
//FIN DES VARIABLES MODIFIABLES
int CurrentTime();


void main()//fonction principale

{
string sItemTag = "BOUFFE";
object oPC = GetLastPCRested();
object oItemRequis = CheckInventoryForItem(oPC, sItemTag);
object oTarget = oPC;
object oZone5 = GetArea(oPC);
object oPlaceable = GetFirstObjectInArea(oZone5);
string sTag = GetTag(oPlaceable);
string sReposInterdit = "s3_repos_interdi";
string sRepos_Interdit_animation = "A cause d'une animation en cours, le repos est interdit dans la zone pour raison de RP";
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);


//Lorsque le joueur click sur "se reposer" le script verifie la presence de l'item "bouffe"//
//S'il n'y en a pas le repos est annule et un message envoye au joueur//
    if (GetLastRestEventType() == REST_EVENTTYPE_REST_STARTED)
      {
      if (GetItemPossessedBy(oPC,"BOUFFE") == OBJECT_INVALID)
        {
        SendMessageToPC (oPC, "Impossible de vous reposer avec cette faim qui vous tenaille...");
        AssignCommand (oPC,ClearAllActions());
        }
//si l'item "bouffe" est present le repos est lance et un seul item de ce type detruit//
        else
        {
        DestroyObject(oItemRequis, 0.0);


while (GetIsObjectValid(oPlaceable))
{
if (sReposInterdit == sTag)
{
SendMessageToPC(oPC,sRepos_Interdit_animation);
AssignCommand(oPC, ClearAllActions());
return;
}
oPlaceable = GetNextObjectInArea(oZone5);
}



if (GetLastRestEventType()== REST_EVENTTYPE_REST_STARTED)
{
PlayVoiceChat(VOICE_CHAT_REST, oPC);
ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectVisualEffect(VFX_DUR_BLACKOUT), oTarget);
ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectVisualEffect(VFX_IMP_SLEEP), oTarget);
}

if (GetLastRestEventType()== REST_EVENTTYPE_REST_CANCELLED)
{
ClearDarkness(oTarget);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectSlow(), oTarget, 30.0f);
SendMessageToPC(oPC, "Le reveil suite a un repos interrompu est toujours tres difficile");
}

if (GetLastRestEventType()== REST_EVENTTYPE_REST_FINISHED)
{
ClearDarkness(oTarget);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectSlow(), oTarget, 10.0f);
SendMessageToPC(oPC, "S'arracher des bras de Sylune vous demande encore quelques instants");
}
}
}








}
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 " +
"1 heure avant de pouvoir vous reposer", oPC);
}
else
{
FloatingTextStringOnCreature("Vous devez attendre "+
IntToString(iTimeUntilRest)+
" heures avant de pouvoir vous reposer", oPC);
}
}
else
{
if (iTimeUntilRest == 1)
{
FloatingTextStringOnCreature("Vous devez attendre " +
"1 heure avant de pouvoir vous reposer", oPC);
}
else
{
FloatingTextStringOnCreature("Vous devez attendre "+
IntToString(iTimeUntilRest)+
" heures 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();
}
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.


et encore merci de vos reponses
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Black Knight
Grand Maître Chanteur du Conseil
Inscrit le: 27 Oct 2005
Messages: 1031
Localisation: Fin fond du trou du cul du monde
Répondre en citant
Posté le : 05/11/2005 10:52:47 Sujet du message :

Ce que tu peut faire c'est lors du DODO tu met une variable local INT. Apres tu met un truc DelayCommand 30 sec pour que la variable se detruise. Tu a juste ensuite a dire si :
La variable est a 0 : donc le pnj peut dormir ou
La variable est a 1 : donc il lui sera impossible de dormir
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
AZAZEL11
Seigneur
Inscrit le: 08 Fév 2006
Messages: 156
Répondre en citant
Posté le : 11/10/2006 21:50:30 Sujet du message :

comment on pourrait faire en sorte que l'interval de repos soit en fonction du lvl du PJ?


genre lvl 1-5 = 1 heure
6-10= 2 heures
11-15= 3 heures
16et++= 4 heures


je dois avoué que j'ai bien tenté mais j'ai du mal a saisir entre autre le pourquoi d'autres (void) avant le void main()pour y insérer des variables...

hé oui, je suis un noob (j'aurais pas du arreter nwn un bout!!! lol)
_________________
L'imagination est plus importante que le savoir. (Albert Einstein)
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Black Knight
Grand Maître Chanteur du Conseil
Inscrit le: 27 Oct 2005
Messages: 1031
Localisation: Fin fond du trou du cul du monde
Répondre en citant
Posté le : 15/10/2006 20:05:46 Sujet du message :

Avec des IFs

NWScript :

float i;
int iLvl = GetHitDice(oPC);
if(iLvl > 0 && iLvl < 6){i = 3.0;}
if(iLvl > 5 && iLvl < 11){i = 6.0;}
if(iLvl > 10 && iLvl < 16){i = 9.0;}
if(iLvl > 15){i = 12.0;}
SetLocalInt(oPC, "DODO", 1)
DelayCommand(i, SetLocalInt(oPC, "DODO", 0));
//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.


Voila
_________________
[http]
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
AZAZEL11
Seigneur
Inscrit le: 08 Fév 2006
Messages: 156
Répondre en citant
Posté le : 19/10/2006 20:55:42 Sujet du message :

ah bien oui regardez ca! lol c'est si simple une fois qu'on vous l'explique^^

merci! bien que je n'ai aucunes idées comment mettre ca dans ce script lol
_________________
L'imagination est plus importante que le savoir. (Albert Einstein)
 
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 76.988ms