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 23/11/2024 12:36:28
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 |
Yukimurasan Acolyte Messages: 30 |
Bonjour. Je vous previens de suite, je ne suis pas du tout fort en script.
Donc, voilà mon " probleme ". Grace a CEP, vous savez que l'on a des nouveaux objets. Parmis ces objets, il y a des portes. Pour qu'elles puissent s'ouvrir et se refermer, j'ai cru comprendre qu'il leurs fallait un script special. Ce que je voudrais, c'est qu'au bout d'un certain temps ( 4 secondes ) ce genre de portes placables puissent se refermer toutes seul. Mais voilà, le problème est que le script special dont je vous parlais tt a l'heure, occupe la place de " OnOpen ". Et donc, je ne peux pas placer le script pour refermer la porte automatiquement au bout d'un certain temps. Avec mon experience de nul, j'ai deja essayé de resoudre se problème, mais sans bon resultats. Voici le script qui sert a ouvrir et fermer les portes placable venant de CEP ( ce que j'ai appellé " script special "): NWScript :
//:///////////////////////// ///////////////////// //:: ZEP_OPENCLOSE.nss //:: Copyright (c) 2001 Bioware Corp. //:: Modified by Dan Heidel 1/14/04 for CEP //:///////////////////////// //////////////////// /* This function goes in the OnUse function of an openable placeable or door. Do not use for placeables which have an inventory, only for those where clicking should trigger the open/close anim without opening up an inventory. Eg: sarcophagii, grandfather clock and iron maiden. If you wish for these items to have an inventory make a copy of the placeable with this function removed and the 'has inventory' box checked. No local variables are needed if the placeable is not a door. If the placeable is a door, CEP_L_GATEBLOCK is a local string containing the blueprint resref of the gateblock corresponding to the particular door. A gateblock is an invisible placeable with a walkmesh of the size, shape and orientation of the door. In the case of CEP Door 01-11, there is a corresponding Gateblock 01-11. Therefore, for Door01, the CEP_L_GATEBLOCK should be gateblock001 - the resref for Gateblock 01. When the door is closed, a gateblock placeable is created so that the door is impassable. When the door is opened, the gateblock is destroyed so the gate is passable. GateBlock is a local object that stores the gateblock being used by a particular door. No user intervention is needed other than to not create a local variable with the same name. In addition, zep_doorspawn must be placed in the heartbeat function of the door and zep_doorkill must be placed in the OnDestruct function of the door. */ //:///////////////////////// //////////////////// //:: Created By: Brent //:: Created On: January 2002 //:: Modified by: Dan Heidel 1-21-04 for CEP //:///////////////////////// //////////////////// #include "zep_inc_scrptdlg" void main() { string sGateBlock = GetLocalString(OBJECT_SELF, "CEP_L_GATEBLOCK"); location lSelfLoc = GetLocation(OBJECT_SELF); int nIsOpen = GetIsOpen(OBJECT_SELF); if (GetLocked(OBJECT_SELF) == 1){ //FloatingTextStringOnCreature ("Locked", OBJECT_SELF); string sLockedMSG = GetStringByStrRef(nZEPDoorLocked,GENDER_MALE); SpeakString(sLockedMSG); return; } //if the object is locked, it cannot be opened or closed if (sGateBlock == ""){ // if the item is not a door if (nIsOpen == 0) { PlayAnimation(ANIMATION_PLACEABLE_OPEN); } else { PlayAnimation(ANIMATION_PLACEABLE_CLOSE); } return; } if (nIsOpen == 0) //if the item is a door { object oSelf = OBJECT_SELF; PlayAnimation(ANIMATION_PLACEABLE_OPEN); if (GetLocalObject(oSelf, "GateBlock")!= OBJECT_INVALID) { DestroyObject(GetLocalObject(oSelf, "GateBlock")); SetLocalObject(oSelf, "GateBlock", OBJECT_INVALID); } } else { object oSelf = OBJECT_SELF; PlayAnimation(ANIMATION_PLACEABLE_CLOSE); SetLocalObject(oSelf, "GateBlock", CreateObject(OBJECT_TYPE_PLACEABLE, sGateBlock, lSelfLoc)); } } J'avais essayer d'insserer a certains endroits ceci 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. Pouvez-vous m'aider ? Merci d'avance. |
Revenir en haut | |
Ivellios Légende vivante Messages: 447 Localisation: Poitiers |
En utilisant la fonction au endroits indiqué ça devrait passer.
NWScript : //:///////////////////////// //////////////////// //:: Created By: Brent //:: Created On: January 2002 //:: Modified by: Dan Heidel 1-21-04 for CEP //:///////////////////////// //////////////////// #include "zep_inc_scrptdlg" void CloseCEPDoor(object oDoor); void main() { object oSelf = OBJECT_SELF; string sGateBlock = GetLocalString(oSelf, "CEP_L_GATEBLOCK"); location lSelfLoc = GetLocation(oSelf); int nIsOpen = GetIsOpen(oSelf); if(GetLocked(oSelf) == 1) { string sLockedMSG = GetStringByStrRef(nZEPDoorLocked,GENDER_MALE); SpeakString(sLockedMSG); return; } if(sGateBlock == "") { if(nIsOpen == 0) { PlayAnimation(ANIMATION_PLACEABLE_OPEN); //Ici une ouverture } else { CloseCEPDoor(oSelf); } return; } if(nIsOpen == 0) { PlayAnimation(ANIMATION_PLACEABLE_OPEN); if(GetLocalObject(oSelf, "GateBlock")!= OBJECT_INVALID) { DestroyObject(GetLocalObject(oSelf, "GateBlock")); SetLocalObject(oSelf, "GateBlock", OBJECT_INVALID); } //Ici une ouverture } else { CloseCEPDoor(oSelf); } } void CloseCEPDoor(object oDoor) { string sGateBlock = GetLocalString(oDoor, "CEP_L_GATEBLOCK"); location lSelfLoc = GetLocation(oDoor); AssignCommand(oDoor, PlayAnimation(ANIMATION_PLACEABLE_CLOSE)); if(sGateBlock != "") SetLocalObject(oDoor, "GateBlock", CreateObject(OBJECT_TYPE_PLACEABLE, sGateBlock, lSelfLoc)); } _________________ Scripts, systèmes, fonctions,... c'est par ici... Pyjama pour castor, une vocation, un avenir sûr |
Revenir en haut | |
Yukimurasan Acolyte Messages: 30 |
J'ai essayé de mettre " DelayCommand(10.0, ActionCloseDoor(OBJECT_SELF)); " aux endroits indiqués ( " //ici une ouverture " ). je ne sais pas si c'etait ça que tu m'avais demandé de faire, mais en tt cas, ça ne marche pas ...
Merci quand meme. |
Revenir en haut | |
Ivellios Légende vivante Messages: 447 Localisation: Poitiers |
Je parlais de la fonction rajouté
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. _________________ Scripts, systèmes, fonctions,... c'est par ici... Pyjama pour castor, une vocation, un avenir sûr |
Revenir en haut | |
Yukimurasan Acolyte Messages: 30 |
Désolé de t'embeter avec ça, mais je ne comprends pas ce que tu veux dire ...
|
Revenir en haut | |
Ivellios Légende vivante Messages: 447 Localisation: Poitiers |
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. Pareil que l'autre fonction mais en changeant le nom (j'avais fait exprès de conservé les mêmes arguments), toujours au même endroit, j'ai pas été très regardant mais ça doit passer. _________________ Scripts, systèmes, fonctions,... c'est par ici... Pyjama pour castor, une vocation, un avenir sûr |
Revenir en haut | |
Yukimurasan Acolyte Messages: 30 |
Bas ... euh ... j'ai essayé, ça ne marche toujour pas ... il me dit " INVALIDE DECLARATION TYPE " a l'endroit où il y a :
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. |
Revenir en haut | |
Ivellios Légende vivante Messages: 447 Localisation: Poitiers |
A croire que tu as pas cherché bien longtemps...
NWScript : //:///////////////////////// //////////////////// //:: Created By: Brent //:: Created On: January 2002 //:: Modified by: Dan Heidel 1-21-04 for CEP //:///////////////////////// //////////////////// #include "zep_inc_scrptdlg" void CloseCEPDoor(object oDoor); void main() { object oSelf = OBJECT_SELF; string sGateBlock = GetLocalString(oSelf, "CEP_L_GATEBLOCK"); location lSelfLoc = GetLocation(oSelf); int nIsOpen = GetIsOpen(oSelf); if(GetLocked(oSelf) == 1) { string sLockedMSG = GetStringByStrRef(nZEPDoorLocked,GENDER_MALE); SpeakString(sLockedMSG); return; } if(sGateBlock == "") { if(nIsOpen == 0) { PlayAnimation(ANIMATION_PLACEABLE_OPEN); DelayCommand(10.0, CloseCEPDoor(oSelf)); } else { CloseCEPDoor(oSelf); } return; } if(nIsOpen == 0) { PlayAnimation(ANIMATION_PLACEABLE_OPEN); if(GetLocalObject(oSelf, "GateBlock")!= OBJECT_INVALID) { DestroyObject(GetLocalObject(oSelf, "GateBlock")); SetLocalObject(oSelf, "GateBlock", OBJECT_INVALID); } DelayCommand(10.0, CloseCEPDoor(oSelf)); } else { CloseCEPDoor(oSelf); } } void CloseCEPDoor(object oDoor) { string sGateBlock = GetLocalString(oDoor, "CEP_L_GATEBLOCK"); location lSelfLoc = GetLocation(oDoor); AssignCommand(oDoor, PlayAnimation(ANIMATION_PLACEABLE_CLOSE)); if(sGateBlock != "") SetLocalObject(oDoor, "GateBlock", CreateObject(OBJECT_TYPE_PLACEABLE, sGateBlock, lSelfLoc)); } _________________ Scripts, systèmes, fonctions,... c'est par ici... Pyjama pour castor, une vocation, un avenir sûr |
Revenir en haut | |
Seth de Sombrelune Seigneur Messages: 156 |
Atention !
Il existe des scripts qui sont fournis avec le CEP. On peut modifier ceux-ci à loisir, mais à condition d'en modifier le nom car c'est le script inscrit dans le fichier HAK qui sera prioritaire. Si on modifie le script sans changer le nom, alors les modification apportée ne seront pas prise ne compte. Je sait pas si cela fait avancer les choses... |
Revenir en haut | |
lylver Héros Messages: 274 |
ah oui c'est les plaçables avec un heart-beat dedans pour les initialiser.
Un petit peu en dehors du sujet mais cela concerne l'initialisation des GateBlocks en une passe : voici une méthode qui aurait du être intégrée dans le CEP Starter Module c'est nettement moins consommateur de ressources que de laisser des HBs dans les plaçables. 1) ajouter cela dans votre évênement OnModuleLoad 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. 2) voilà le script qui fait le boulot une fois pour toute NWScript :
// ly_mod_zep.nss void SearchCEPDOOR(string sTag) { int nNbItem = 0; object oItem = GetObjectByTag(sTag, nNbItem++); object oArea; string sArea,sName,sTagArea; while( GetIsObjectValid(oItem) ) { oArea = GetArea(oItem) ; sArea = GetName(oArea) ; sTagArea = GetTag(oArea) ; WriteTimestampedLogEntry(sTag+" found in Area "+sTagArea+"-"+sArea+" : initializing"); ExecuteScript("zep_doorspawn",oItem); oItem = GetObjectByTag(sTag, nNbItem++); } } void main() { string sTag="ZEP_DOORS00" ; int i; for( i=1; i<=9 ; i++){ SearchCEPDOOR(sTag+IntToString(i)) ; } sTag="ZEP_DOORS01" ; for( i=0; i<=1 ; i++){ SearchCEPDOOR(sTag+IntToString(i)) ; } } 3) Bien entendu vous n'oubliez pas d'enlever zep_doorspawn du heart-beat du plaçable... Et encore merci à Dan Heidel pour ses plaçables avec HB à faible consommation... _________________ TSLODOSS TN Bouchon 2 NWN-FF The DMFI |
Revenir en haut | |
OVLORD Acolyte Messages: 22 |
Je suis en train de faire une recherche sur un souci concernant l'ouverture d'une grille du CEP par une clef.
Quand je met le TAG de la clef devant dévérouiller la grille (comme avec une porte standart) elle ne se dévérouille pas. Est-ce que les scripts et lignes ci-dessus concernent mon souci ou faut-il un script spécifique pour faire agir une clef?? Merci de me répondre pour ceux qui passerait par là ^^ |
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