
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.







La date/heure actuelle est 11/04/2025 03:03:31
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 |
Rhyghar Novice Messages: 11 Localisation: Premiere a gauche apres le rond point |
avec la version 1.30 du client neverwinter, on a acces a une base de données (a la maniere de nwnx/aps sauf que la, le gros avantage est de pouvoir stocker des objets dans la bdd).
voici un script qui permettra de rendre des coffres persistants. C'est a dire qu'un objet placé dans un des coffres y restera meme apres un reboot serveur. C'est des scripts simples et absoluments pas optimisés (ils ont qd meme l'avantage de ne pas etre buggés). Ces scripts marchent pour un coffre tournant en localvault, en fait l'integralité de l'objet est stocké dans la bdd, ce qui veut dire que n'importe qui peut venir avec un objet personnalisé et le mettre la dedans; ce qui est a la fois une bonne et une mauvaise méthode car l'ecriture sur la base de donnée prend du temps (lag de quelques millisecondes pour une vingtaine d'objet a chaque fois que l'on ferme un coffre). Pour un servervault, étant donné que tous les objets existent dans la palette, je conseille de ne stocker que le blueprint de l'objet, ca devrait reduire le lag (il doit exister des scripts deja pour ca). La lecture de la bdd par contre se fait tres rapidement donc il n'y aura pas de souci a l'ouverture des coffres. pour info chaque coffre a une contenance déterminée par le jet de reflexe du coffre. Si on y pose plus d'objet, ils seront remis dans l'inventaire du PJ lors de la fermeture du coffre. J'utilise ces scripts depuis un petit moment maintenant (je faisais parti des beta testeurs pour cette bdd) et mis a part un leger bug que j'ai eut la flemme de corriger (la contenance réelle d'un coffre est de : "jet de reflexe +1". ex: coffre de 20 objets = jet de reflexe de 19) je n'ai jamais eut de probs. Code : //****************************** //coffre persistant // OnOPen //****************************** void main() { object oItem = GetFirstItemInInventory(); int iNbr = 0; int itotalnbr = GetCampaignInt(GetModuleName() + GetTag(GetArea(OBJECT_SELF)) + "conteneursnbitem", GetTag(OBJECT_SELF)); while((!GetIsObjectValid(oItem)) && (iNbr <= itotalnbr)) { if (!GetIsObjectValid(oItem)) { RetrieveCampaignObject(GetModuleName() + GetTag(GetArea(OBJECT_SELF)) + GetTag(OBJECT_SELF), IntToString(iNbr), GetLocation(OBJECT_SELF), OBJECT_SELF); iNbr++; } } } Code : //****************************** //coffre persistant // OnClose //****************************** void main() { DeleteCampaignVariable(GetModuleName() + GetTag(GetArea(OBJECT_SELF)) + "conteneursnbitem", GetTag(OBJECT_SELF)); DestroyCampaignDatabase(GetModuleName() + GetTag(GetArea(OBJECT_SELF)) + GetTag(OBJECT_SELF)); object oItem = GetFirstItemInInventory(); if (!GetIsObjectValid(oItem)) return; int iNbr = 0; int iNbItemMax = GetReflexSavingThrow(OBJECT_SELF); while(GetIsObjectValid(oItem) && ( iNbr < iNbItemMax ) ) { iNbr++; StoreCampaignObject(GetModuleName() + GetTag(GetArea(OBJECT_SELF)) + GetTag(OBJECT_SELF), IntToString(iNbr), oItem); DestroyObject(oItem); oItem = GetNextItemInInventory(); } while(GetIsObjectValid(oItem) && ( iNbr >= iNbItemMax )) { CopyObject(oItem, GetLocation(GetLastUsedBy()), GetLastUsedBy()); DestroyObject(oItem); string texte = "l'objet "+ GetName(oItem)+" Ne peut etre stocke : le contenant est plein."; FloatingTextStringOnCreature(texte, GetLastUsedBy(), FALSE); oItem = GetNextItemInInventory(); } SetCampaignInt(GetModuleName() + GetTag(GetArea(OBJECT_SELF)) + "conteneursnbitem", GetTag(OBJECT_SELF), iNbr); } Ah oui ! derniere chose, chaque coffre créera une table nommée ainsi : <nomdumodule>+<nomzone>+<tagcoffre> Ce qui veut dire que si vous lancez deux modules ayant le meme nom et ayant deux zones ayant le meme nom dans laquelle se trouve un coffre ayant le meme tag, vous trouverez le meme contenu (ce qui peut etre bidouillé pour ajouter un objet dans module sans avoir a l'arreter et le relancer. Ex: un monde en servervault et un autre module en local ayant un coffre commun). voila ! _________________ Rhyghar. A boire Tavernier ! Ou je tue le chien ! |
Revenir en haut | ![]() ![]() ![]() ![]() |
Rhyghar Novice Messages: 11 Localisation: Premiere a gauche apres le rond point |
erf, je viens de me rendre compte que je me suis planté de section.
EDIT de Cassin : pas de problème, je déplace dans "Scripts" ![]() _________________ Rhyghar. A boire Tavernier ! Ou je tue le chien ! |
Revenir en haut | ![]() ![]() ![]() ![]() |
gimlore Acolyte Messages: 21 Localisation: Blois |
trop fort !!!
_________________ "Plus les choses changent, plus elles restent les mêmes ..." S.Plisken |
Revenir en haut | ![]() ![]() ![]() |
Baerauble Novice Messages: 9 Localisation: Limbes :p |
Merci Rhyghar, ça marche à la perfection
![]() |
Revenir en haut | ![]() ![]() ![]() ![]() |


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