La Bibliothèque de Neverwinter Nights
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
La date/heure actuelle est 15/05/2024 11:31:07


  Page 1 sur 1 ¤

Voir le sujet précédent ¤ Voir le sujet suivant 
Auteur Message
boulette
Acolyte
Inscrit le: 02 Mai 2004
Messages: 26
Localisation: (toujours entre deux parentheses)
Répondre en citant
Posté le : 04/05/2004 21:44:17 Sujet du message : Activer le repos grace a un item [Resolu]

Very Happy
Bonjour a tous ..... voila mon probleme ....
j'utilise un script de repos qui permet de ce reposer tous les 6 heures.....
et j'aimerait que lorsque que certaine classe utilise un "item" celui-ci active le repos malgrés la restrictions "horaire"

exemple: je vient de me reposer ... je doit donc attendre x heures avant le prochain repos ....
j'active l'item "dodo" et op, un tit effet magique et le Pj ce met a dormir.

Si possible sans passer par un dialogue .....plutot comme une "pierre de rappel"
Merci d'avance ... Wink
_________________
Qui a dit que c'etait impossible ?
Dernière édition par boulette le 05/05/2004 23:00:55; édité 1 fois
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Longbow
Grand Sage du Conseil
Inscrit le: 10 Déc 2003
Messages: 638
Localisation: Orléans
Répondre en citant
Posté le : 04/05/2004 22:08:49 Sujet du message :

Hum, hum...

Je n'ai pas ta limitatiopn de repos donc je ne suis pas sûr à 100 % mais voila ce que je te propose...

NWScript :


void main()
{
object oTest = GetModuleItemAcquired();
object oPC = GetModuleItemAcquiredBy();


if (GetIsPC(oPC) && oTest == GetObjectByTag("AnoSommeil"))
{
ClearAllActions();
AssignCommand (oPC, ActionRest());
}
}
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.


Dis-moi ce que ca donne....
_________________
Rex illeteratus
Quasi Asinus Coronatus
Jean de Salisbury
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
boulette
Acolyte
Inscrit le: 02 Mai 2004
Messages: 26
Localisation: (toujours entre deux parentheses)
Répondre en citant
Posté le : 04/05/2004 22:32:24 Sujet du message :

heu ........si j'ai bien comprit ton script ..
si je suis equiper de "anoSommeil" je suis sencé pouvoir dormir quand bon me semble ..
Il compile et doit certainement fonctionner mais sans la limitation de repos .. Confused
parce que la ... ca marche pas et il me repete que je doit attendre 6 heures avant dodo
Pour renseignement je vais poster mon script de limitation de repos ca pourra peut etre t'aider
NWScript :
[/nwscript]

////////////
// GetHourTimeZero
//Copyright (c) 2002 BrotherhoodofZock
////////////
/*
  modified July 30, 2002
  iHourTimeZero calculation modified. iYear-1 replaced by iYear.
  In NWN the Year-count starts with 0 (though year 0 doesn't make much sense).
  Think of year 0 as the first year (Year 1).
*/

////////////
// Created By: Timo "Lord Gsox" Bischoff (NWN Nick: Kihon)
// Created On: July 07, 2002
////////////
// Counting the actual date from Year0 Month0 Day0 Hour0 in hours
int GetHourTimeZero(int iYear = 99999, int iMonth = 99, int iDay = 99, int iHour = 99)
{
  // Check if a specific Date/Time is forwarded to the function.
  // If no or invalid values are forwarded to the function, the current Date/Time will be used
  if (iYear > 30000)
    iYear = GetCalendarYear();
  if (iMonth > 12)
    iMonth = GetCalendarMonth();
  if (iDay > 28)
    iDay = GetCalendarDay();
  if (iHour > 23)
    iHour = GetTimeHour();
  //Calculate and return the "HourTimeZero"-TimeI ndex
  int iHourTimeZero = (iYear)*12*28*24 + (iMonth-1)*28*24 + (iDay-1)*24 + iHour;
  return iHourTimeZero;
}

////////////
// Main Function
// Copyright (c) 2002 Brotherhood of Zock
////////////
/*
  The Main Function of the resting script.
*/

////////////
// Created By: Timo "Lord Gsox" Bischoff (NWN Nick: Kihon)
// Created On: August 04, 2002
////////////
// The main function placed in the onRest event
void main()
{
  object oPC = GetLastPCRested(); // This Script only affects Player Characters. Familiars, summoned creatures and probably henchmen WILL rest!
  int iRestDelay = 6; // The ammount of hours a player must wait between Rests (Default = 8 hours)
  int iHostileRange = 20; // The radius around the players that must be free of hostiles in order to rest.
                            // iHostileRange = 0: Hostile Check disabled
                            // iHostileRange = x; Radius of Hostile Check (x meters)
                            // This can be abused as some sort of "monster radar".
  // ---------- Rest Event started ----------
  if (GetLastRestEventType() == REST_EVENTTYPE_REST_STARTED)
  {
    // Check if since the last rest more than <iRestDelay> hours have passed.
    if (GetHourTimeZero() < GetLocalInt (oPC, "i_TI_LastRest") + iRestDelay) // i_TI_LastRest is 0 when the player enters the module
    { // Resting IS NOT allowed
      AssignCommand (oPC, ClearAllActions()); // Prevent Resting
      SendMessageToPC (oPC,"Tu dois attendre " + IntToString (iRestDelay - (GetHourTimeZero() - GetLocalInt (oPC, "i_TI_LastRest"))) + " heure(s) avant de te reposer a nouveau.");
    }
    else // Resting IS possible
    {
      object oCreature = GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY);
      if (iHostileRange == 0 || (iHostileRange != 0 && GetDistanceToObject(oCreature) <= IntToFloat(iHostileRange)))
      { // If Hostile Check disabled or no Hostiles within Hostile Radius: Initiate Resting
        object oRestbedroll = CreateObject (OBJECT_TYPE_PLACEABLE, "plc_bedrolls", GetLocation (oPC), FALSE); // Place a static bedroll under the player
        SetLocalObject (oPC, "o_PL_Bedrollrest", oRestbedroll); // Temporary "global" variable. Gets deleted after deletion of the bedroll.
        SetLocalInt (oPC, "i_TI_LastRest", GetHourTimeZero()); // Set Last Rest Time
      }
      else
      { // Resting IS NOT allowed
        AssignCommand (oPC, ClearAllActions()); // Prevent Resting
        SendMessageToPC (oPC, "Tu ne peux pas te reposer : Il y a des ennemis tout pres...");
      }
    }
  }
  // ---------- Rest Event finished or aborted ----------
  if ((GetLastRestEventType() == REST_EVENTTYPE_REST_FINISHED || GetLastRestEventType() == REST_EVENTTYPE_REST_CANCELLED) && GetIsObjectValid(GetLocalObject (oPC, "o_PL_Bedrollrest")))
  { // If a bedroll was placed under the player: Delete it
    DestroyObject (GetLocalObject (oPC, "o_PL_Bedrollrest"), 0.0f);
    DeleteLocalObject (oPC, "o_PL_Bedrollrest");
  }



}
[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.


Et je te remercie egalement d'avoir repondu si vite Very Happy
_________________
Qui a dit que c'etait impossible ?
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Longbow
Grand Sage du Conseil
Inscrit le: 10 Déc 2003
Messages: 638
Localisation: Orléans
Répondre en citant
Posté le : 04/05/2004 23:51:45 Sujet du message :

Hum, hum...

Tripoter ce genre de script finement ciselé est toujours délicat...
Je te propose une solution qui consiste à rajouter une variable attachée au joueur pour savoir s'il possède ou non l'objet qui permet de se reposer...

Donc en deux étapes

1. Pour ton script de repos, j'ai modifié un test.
NWScript :
////////////
// GetHourTimeZero
//Copyright (c) 2002 BrotherhoodofZock
////////////
/*
modified July 30, 2002
iHourTimeZero calculation modified. iYear-1 replaced by iYear.
In NWN the Year-count starts with 0 (though year 0 doesn't make much sense).
Think of year 0 as the first year (Year 1).
*/

////////////
// Created By: Timo "Lord Gsox" Bischoff (NWN Nick: Kihon)
// Created On: July 07, 2002
////////////
// Counting the actual date from Year0 Month0 Day0 Hour0 in hours
int GetHourTimeZero(int iYear = 99999, int iMonth = 99, int iDay = 99, int iHour = 99)
{
  // Check if a specific Date/Time is forwarded to the function.
  // If no or invalid values are forwarded to the function, the current Date/Time will be used
  if (iYear > 30000)
    iYear = GetCalendarYear();
  if (iMonth > 12)
    iMonth = GetCalendarMonth();
  if (iDay > 28)
    iDay = GetCalendarDay();
  if (iHour > 23)
    iHour = GetTimeHour();
  //Calculate and return the "HourTimeZero"-TimeI ndex
  int iHourTimeZero = (iYear)*12*28*24 + (iMonth-1)*28*24 + (iDay-1)*24 + iHour;
  return iHourTimeZero;
}

////////////
// Main Function
// Copyright (c) 2002 Brotherhood of Zock
////////////
/*
The Main Function of the resting script.
*/

////////////
// Created By: Timo "Lord Gsox" Bischoff (NWN Nick: Kihon)
// Created On: August 04, 2002
////////////
// The main function placed in the onRest event
void main()
{
  object oPC = GetLastPCRested(); // This Script only affects Player Characters. Familiars, summoned creatures and probably henchmen WILL rest!
  int iRestDelay = 6; // The ammount of hours a player must wait between Rests (Default = 8 hours)
  int iHostileRange = 20; // The radius around the players that must be free of hostiles in order to rest.
                            // iHostileRange = 0: Hostile Check disabled
                            // iHostileRange = x; Radius of Hostile Check (x meters)
                            // This can be abused as some sort of "monster radar".
  // ---------- Rest Event started ----------
  if (GetLastRestEventType() == REST_EVENTTYPE_REST_STARTED)
  {
    // Check if since the last rest more than hours have passed.
//    if (GetHourTimeZero() &lt; GetLocalInt (oPC, "i_TI_LastRest") + iRestDelay) // i_TI_LastRest is 0 when the player enters the module
    if ((GetHourTimeZero() < GetLocalInt (oPC, "i_TI_LastRest") + iRestDelay)|| (GetLocalInt(oPC, "Ano") <= 10 )) // i_TI_LastRest is 0 when the player enters the module
    { // Resting IS NOT allowed
      AssignCommand (oPC, ClearAllActions()); // Prevent Resting
      SendMessageToPC (oPC,"Tu dois attendre " + IntToString (iRestDelay - (GetHourTimeZero() - GetLocalInt (oPC, "i_TI_LastRest"))) + " heure(s) avant de te reposer a nouveau.");
    }
    else // Resting IS possible
    {
      object oCreature = GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY);
      if (iHostileRange == 0 || (iHostileRange != 0 && GetDistanceToObject(oCreature) <= IntToFloat(iHostileRange)))
      { // If Hostile Check disabled or no Hostiles within Hostile Radius: Initiate Resting
        object oRestbedroll = CreateObject (OBJECT_TYPE_PLACEABLE, "plc_bedrolls", GetLocation (oPC), FALSE); // Place a static bedroll under the player
        SetLocalObject (oPC, "o_PL_Bedrollrest", oRestbedroll); // Temporary "global" variable. Gets deleted after deletion of the bedroll.
        SetLocalInt (oPC, "i_TI_LastRest", GetHourTimeZero()); // Set Last Rest Time
      }
      else
      { // Resting IS NOT allowed
        AssignCommand (oPC, ClearAllActions()); // Prevent Resting
        SendMessageToPC (oPC, "Tu ne peux pas te reposer : Il y a des ennemis tout pres...");
      }
    }
  }
  // ---------- Rest Event finished or aborted ----------
  if ((GetLastRestEventType() == REST_EVENTTYPE_REST_FINISHED || GetLastRestEventType() == REST_EVENTTYPE_REST_CANCELLED) && GetIsObjectValid(GetLocalObject (oPC, "o_PL_Bedrollrest")))
  { // If a bedroll was placed under the player: Delete it
    DestroyObject (GetLocalObject (oPC, "o_PL_Bedrollrest"), 0.0f);
    DeleteLocalObject (oPC, "o_PL_Bedrollrest");
  }
}
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.


2. Dans le OnAcquire des propriétés du module
le script suivant
NWScript :
void main()
{
object oTest = GetModuleItemAcquired();
object oPC = GetModuleItemAcquiredBy();


if ((GetIsPC(oPC)) && (oTest == GetObjectByTag("AnoSommeil")))
{
SetLocalInt(oPC, "Ano", 20);
}
}
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.


Mes 1e essais semblent mitigés ( ca marche même si le joeur se retrouve tout de même en position couché sans lit s'il ne rempli aucune des deux conditions... repos ou Ano... Cela était peut-être déja le cas avant ma modif...)

Tiens-nous au courant !!
_________________
Rex illeteratus
Quasi Asinus Coronatus
Jean de Salisbury
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
boulette
Acolyte
Inscrit le: 02 Mai 2004
Messages: 26
Localisation: (toujours entre deux parentheses)
Répondre en citant
Posté le : 05/05/2004 21:04:27 Sujet du message :

ok ..ben j'ai tester et en faite .... lorsque j'ai pas l'item sur moi .... il m'empeche de dormir et me dit que je doit attendre -1102564 heures avant dodo ....
une fois l'item porté il me permet de dormir une seul fois sans limitation de temps .mais une fois le repos effectuer .... et que j'essaye de redormir il me relance le limitation de temps de 6 heures.
je te remercie Longbow mais ce que je recherce ce n'est pas le faite qu'un Pj possede un item mais plutot ..... quand le Pj active un item ( comme un pouvoir utillisable unikement sur soit )

en faite. je recherche un script qui permet d'annuler la limitation du temps pour permettre au Pj de ce reposer une fois l'activation de l'item.

Exemple: je vient de me reposer et 3 heure apres j'active l'item et ca me donne le droit de dormir une fois de plus ..... ( une sorte de cadeaux pour les mage et enso qui leurs permet de dormir une fois de plus que les autres classes )
_________________
Qui a dit que c'etait impossible ?
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Longbow
Grand Sage du Conseil
Inscrit le: 10 Déc 2003
Messages: 638
Localisation: Orléans
Répondre en citant
Posté le : 05/05/2004 21:55:25 Sujet du message :

Hum, hum...
Bizarre, sur ma version 1.62 HoU cela ne donne pas les mêmes résultats... Bref...

Je pense que ce qu'il nous faut, c'est agir sur
SetLocalInt (oPC, "i_TI_LastRest", GetHourTimeZero()); dans le OnActiveItem


J'ai tricoté ceci, c'est simple et ca marche (chez moi...)

1. Tu gardes ton script de repos tel que tu l'as trouvé.
2. Tu crée un item avec propriétés Lancer un Sort/ Uniquement sur soi / utilisation(s) à toi de voir...
3. Un script à mettre dans le OnActived du module
NWScript :
void main()
{
object oItem = GetItemActivated();
object oAno = GetObjectByTag("AnoSommeil");
object oPC = GetItemActivator();

if ( oItem == oAno)
{

SetLocalInt (oPC, "i_TI_LastRest", 0);
}
}
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.


On tiens le bon bout !!
_________________
Rex illeteratus
Quasi Asinus Coronatus
Jean de Salisbury
Dernière édition par Longbow le 05/05/2004 22:00:27; édité 1 fois
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
boulette
Acolyte
Inscrit le: 02 Mai 2004
Messages: 26
Localisation: (toujours entre deux parentheses)
Répondre en citant
Posté le : 05/05/2004 21:57:52 Sujet du message :

ok je test ca et si ca marche . je t'appel mon siegneur tous le reste du temps qui me reste a vivre Very Happy
_________________
Qui a dit que c'etait impossible ?
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
boulette
Acolyte
Inscrit le: 02 Mai 2004
Messages: 26
Localisation: (toujours entre deux parentheses)
Répondre en citant
Posté le : 05/05/2004 22:20:02 Sujet du message :

ok .... voila apres un test .. je constate que le resultat ce rapproche a 95% de la demande . franchement et personellement .. pour moi ca va trankil /.. suffierais juste de transformer l'anneaux en viande ou autre ... mais qui ce detruit une fois l'utilisation .... mais tu croit pouvoir faire en sorte que l'action du "repos" puisse ce faire une fois l'activation de l'item ?
exemple: j'active l'item et le Pj ce repos direct sans que qu'il est a activer le repos soit meme ?
_________________
Qui a dit que c'etait impossible ?
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Longbow
Grand Sage du Conseil
Inscrit le: 10 Déc 2003
Messages: 638
Localisation: Orléans
Répondre en citant
Posté le : 05/05/2004 22:47:51 Sujet du message :

Hum, hum...


Citation :
suffierais juste de transformer l'anneaux en viande ou autre
Étrange, étrange... Les différents "divers" ne permettent pas une utilisation magique (la case "magique" reste grisée) donc pour l'heure, je ne peux pas rendre une côte d'agneau "magique"...
Dans la liste d'objets, ce qui me paraît le plus proche serait "la potion préparée" qui peut être magique.

Pour rendre le repos tout de suite...
NWScript :
void main()
{
object oItem = GetItemActivated();
object oAno = GetObjectByTag("AnoSommeil");
object oPC = GetItemActivator();

if ( oItem == oAno)
{
SetLocalInt (oPC, "i_TI_LastRest", 0);
AssignCommand (oPC, ActionRest());
}
}
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.

_________________
Rex illeteratus
Quasi Asinus Coronatus
Jean de Salisbury
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
boulette
Acolyte
Inscrit le: 02 Mai 2004
Messages: 26
Localisation: (toujours entre deux parentheses)
Répondre en citant
Posté le : 05/05/2004 22:55:06 Sujet du message :

Que dire d'autre que Mon seigneur LongBow ......
Merci pour tous .... pour la premiere version de notre mod a moi et mes potes ca ira plus que mieux.
je te remercie vraiment pour ton aide, j'etais vraiment largué .......... si tu cherche du taf entans que scripteur a plein temps ... tu es la bienvenue Very Happy
Enfin encore un grand merci a toi et a tres bientot .... je galere aussi pour un script de restriction de zone, je repasserais surement tres vite. Et merci encore Mon Seigneur Wink
_________________
Qui a dit que c'etait impossible ?
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Longbow
Grand Sage du Conseil
Inscrit le: 10 Déc 2003
Messages: 638
Localisation: Orléans
Répondre en citant
Posté le : 06/05/2004 00:55:11 Sujet du message :

Hum, hum...

C'est un plaisir de voir quelqu'un d'enthousiaste...

Je fais chauffer le lexicon en attendant ton prochain post...

Quant à ta proposition d'engagement, je suis pour l'heure engagé dans la création d'un tileset (Duegar Nécropolis) qui me prend beaucoup de temps...

Bon courage pour la suite !!
_________________
Rex illeteratus
Quasi Asinus Coronatus
Jean de Salisbury
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur 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 75.108ms