La Bibliothèque de Neverwinter Nights
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
La date/heure actuelle est 17/05/2024 05:42:44


  Page 1 sur 1 ¤

Voir le sujet précédent ¤ Voir le sujet suivant 
Auteur Message
Rhyghar
Novice
Inscrit le: 11 Nov 2002
Messages: 11
Localisation: Premiere a gauche apres le rond point
Répondre en citant
Posté le : 25/06/2003 19:12:06 Sujet du message : coffres persistant via bdd (v1.30)

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 Voir le profil de l'utilisateur Envoyer un message privé Numéro ICQ Ignorer l'utilisateur
 
Rhyghar
Novice
Inscrit le: 11 Nov 2002
Messages: 11
Localisation: Premiere a gauche apres le rond point
Répondre en citant
Posté le : 25/06/2003 19:17:49 Sujet du message :

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" Wink
_________________
Rhyghar.

A boire Tavernier ! Ou je tue le chien !
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Numéro ICQ Ignorer l'utilisateur
 
gimlore
Acolyte
Inscrit le: 08 Déc 2002
Messages: 21
Localisation: Blois
Répondre en citant
Posté le : 27/06/2003 17:07:45 Sujet du message :

trop fort !!!
_________________
"Plus les choses changent, plus elles restent les mêmes ..." S.Plisken
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Baerauble
Novice
Inscrit le: 19 Juin 2003
Messages: 9
Localisation: Limbes :p
Répondre en citant
Posté le : 28/06/2003 09:20:27 Sujet du message :

Merci Rhyghar, ça marche à la perfection Smile
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger 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 20.002ms