La Bibliothèque de Neverwinter Nights
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
FAQ
Rechercher
Liste des Membres
Groupes d'utilisateurs
S'enregistrer Se connecter pour vérifier ses messages privés Connexion
S'enregistrer Se connecter pour vérifier ses messages privés Connexion
La date/heure actuelle est 10/11/2024 20:46:03
La Bibliothèque de Neverwinter Nights Index du Forum »
La Bibliothèque Binaire du NWScript - Neverwinter Nights
Voir le sujet précédent ¤ Voir le sujet suivant | |
---|---|
Auteur | Message |
boulette Acolyte Messages: 26 Localisation: (toujours entre deux parentheses) |
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 ... _________________ 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 | |
Longbow Grand Sage du Conseil Messages: 638 Localisation: Orléans |
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()); } } Dis-moi ce que ca donne.... _________________ Rex illeteratus Quasi Asinus Coronatus Jean de Salisbury |
Revenir en haut | |
boulette Acolyte Messages: 26 Localisation: (toujours entre deux parentheses) |
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 .. 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] Et je te remercie egalement d'avoir repondu si vite _________________ Qui a dit que c'etait impossible ? |
Revenir en haut | |
Longbow Grand Sage du Conseil Messages: 638 Localisation: Orléans |
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() < 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"); } } 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); } } 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 | |
boulette Acolyte Messages: 26 Localisation: (toujours entre deux parentheses) |
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 | |
Longbow Grand Sage du Conseil Messages: 638 Localisation: Orléans |
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); } } 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 | |
boulette Acolyte Messages: 26 Localisation: (toujours entre deux parentheses) |
ok je test ca et si ca marche . je t'appel mon siegneur tous le reste du temps qui me reste a vivre
_________________ Qui a dit que c'etait impossible ? |
Revenir en haut | |
boulette Acolyte Messages: 26 Localisation: (toujours entre deux parentheses) |
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 | |
Longbow Grand Sage du Conseil Messages: 638 Localisation: Orléans |
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()); } } _________________ Rex illeteratus Quasi Asinus Coronatus Jean de Salisbury |
Revenir en haut | |
boulette Acolyte Messages: 26 Localisation: (toujours entre deux parentheses) |
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 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 _________________ Qui a dit que c'etait impossible ? |
Revenir en haut | |
Longbow Grand Sage du Conseil Messages: 638 Localisation: Orléans |
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 | |
La Bibliothèque de Neverwinter Nights Index du Forum »
La Bibliothèque Binaire du NWScript - Neverwinter Nights
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