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 06:36:41


  Page 1 sur 1 ¤

Voir le sujet précédent ¤ Voir le sujet suivant 
Auteur Message
NEO234
Acolyte
Inscrit le: 03 Aoû 2005
Messages: 30
Localisation: Belgique
Répondre en citant
Posté le : 12/08/2005 18:19:51 Sujet du message : Au sujes des coffres de Banques

Sur un site j'ai vus ce scripte particulierement intéressant pour les mods persistant;

Contenants persistants(version banque)

Ce système sauvegarde le contenu du coffre sur lequel il est placé et
le recharge à l'ouverture. Il y a aussi une possibilité de limité le
contenu en nombre et il faut obligatoirement interdire les objets de
type contenant qui fausse le comptage d'objet ainsi que les objets
empilables. Donc il faut utiliser l'un des deux scripts à placer dans
le ondisturbed disponible ici.
Ce système est la version banque, il reconnait qui ouvre le coffre et
fournit donc les items que la personne à placer la fois précédente. Il
est aussi programmé pour pouvoir avoir plusieurs coffres de banque
(donc un coffre dans chaque banque par exemple) en travaillant avec le
TAG du coffre. Si vous mettez le même TAG il est possible que cela
produise un effet du type des "coffres de diablo 2" lorsque l'on change
d'acte, c-à-d que le contenu sera le même dans tous les coffres pour la
même personne.
Script à placer dans le OnOpen du contenant :
NWScript :
//:Confused///////////////////////// /////////////////////
//:: Contenants persistants(version banque)
//:: Chargement du contenu(a placer dans le onopen du contenant)
//:: Copyright (c) 2001 Bioware Corp.
//:Confused///////////////////////// ////////////////////
/*

*/

//:Confused///////////////////////// ////////////////////
//:: Created By: Anthraxcite
//:: Created On: 24 Jun 2004
//:Confused///////////////////////// ////////////////////
void main()
{
  object oPC = GetLastOpenedBy();
  string sDB = "Contenance_persistante";
  string sTag = GetTag(OBJECT_SELF);
  int i = GetCampaignInt(sDB,sTag+"_NbreObj",oPC);
  SetLocalInt(OBJECT_SELF,"NbreObj",i);
  while(i > -1)
  {
    i--;
    RetrieveCampaignObject(sDB,sTag+"_o"+IntToString(i),GetLocation(OBJECT_SELF),OBJECT_SELF,oPC);
  }
}


Script à placer dans le OnClose du contenant :
//:Confused///////////////////////// /////////////////////
//:: Contenants persistants(version banque)
//:: Sauvegarde du contenu(a placer dans le onclose du contenant)
//:: Copyright (c) 2001 Bioware Corp.
//:Confused///////////////////////// ////////////////////
/*

*/

//:Confused///////////////////////// ////////////////////
//:: Created By: Anthraxcite
//:: Created On: 24 Jun 2004
//:Confused///////////////////////// ////////////////////
void main()
{
  object oPC = GetLastClosedBy();
  string sDB = "Contenance_persistante";
  string sTag = GetTag(OBJECT_SELF);
  int i = 0;
  object oItem = GetFirstItemInInventory();
  while(oItem!=OBJECT_INVALID)
  {
    StoreCampaignObject(sDB,sTag+"_o"+IntToString(i),oItem,oPC);
    DestroyObject(oItem);
    oItem = GetNextItemInInventory();
    i++;
  }
  SetCampaignInt(sDB,sTag+"_NbreObj",i,oPC);
}


L'un des deux scripts est à placer dans le OnDisturbed de contenant:
Script 1(avec limite de contenu):
//:Confused///////////////////////// /////////////////////
//:: Contenants persistants
//:: Limite du contenu et interdiction des objets de type
//:: contenants(a placer dans le ondisturbed du contenant)
//:: Copyright (c) 2001 Bioware Corp.
//:Confused///////////////////////// ////////////////////
//:Confused///////////////////////// ////////////////////
//:: Created By: Anthraxcite
//:: Created On: 24 Jun 2004
//:: Updated On: 17 Dec 2004
//:Confused///////////////////////// ////////////////////


int GetIsStackable(int BASE_ITEM_TYPE);

void main()
{
  int nLimite = 10;
  int nDisturbType = GetInventoryDisturbType();
  object oItem = GetInventoryDisturbItem();
  object oCurrentItem;
  object oContenair;
  object oDisturber = GetLastDisturbed();
  int nBaseItemType = GetBaseItemType(oItem);
    switch (nDisturbType)
    {
      case INVENTORY_DISTURB_TYPE_ADDED :
      {
        if(GetLocalInt(OBJECT_SELF, "NbreObj") < nLimite && nBaseItemType!=BASE_ITEM_LARGEBOX && !GetIsStackable(nBaseItemType))
        {
          SetLocalInt(OBJECT_SELF, "NbreObj",GetLocalInt(OBJECT_SELF, "NbreObj")+1);
        }
        else
        {
          if (GetIsObjectValid(oDisturber))
          {
            if(GetBaseItemType(oItem)!=BASE_ITEM_LARGEBOX)
            {
                CopyItem(oItem, oDisturber, TRUE);
                DestroyObject(oItem);
            }
            else
            {
                oContenair = CreateItemOnObject(GetResRef(oItem),oDisturber);
                oCurrentItem = GetFirstItemInInventory(oItem);
                while(oCurrentItem!=OBJECT_INVALID)
                {
                    CopyItem(oCurrentItem, oContenair, TRUE);
                    oCurrentItem = GetNextItemInInventory(oItem);
                }
                DestroyObject(oItem);
            }
            if (GetIsPC(oDisturber))
            {
              SendMessageToPC(oDisturber, "");
            }
          }
          else
          {
            DestroyObject(oItem);
          }
        }
      }break;
      case INVENTORY_DISTURB_TYPE_REMOVED :
      case INVENTORY_DISTURB_TYPE_STOLEN :
      {
        SetLocalInt(OBJECT_SELF, "NbreObj",GetLocalInt(OBJECT_SELF, "NbreObj")-1);
      }break;
    }
}

int GetIsStackable(int BASE_ITEM_TYPE)
{
    switch(BASE_ITEM_TYPE)
    {
        case 39:
        case 49:
        case 54:
        case 62:
        case 75:
        case 77:
        case 81:
        case 104:
        case 105:
        case 31:
        case 59:
        case 63:
        case 20:
        case 25:
        case 27:
        case 76:
            return TRUE;
        break;
        default:
            return FALSE;
        break;
    }
    return FALSE;
}

Script 2(sans limite de contenu):
//:Confused///////////////////////// /////////////////////
//:: Contenants persistants
//:: Interdiction des objets de type contenants et empilables(or compris)
//:: (a placer dans le ondisturbed du contenant)
//:: Copyright (c) 2001 Bioware Corp.
//:Confused///////////////////////// ////////////////////
//:Confused///////////////////////// ////////////////////
//:: Created By: Anthraxcite
//:: Created On: 31 Jul 2004
//:: Updated On: 17 Dec 2004
//:Confused///////////////////////// ////////////////////


int GetIsStackable(int BASE_ITEM_TYPE);

void main()
{
  int nDisturbType = GetInventoryDisturbType();
  object oItem = GetInventoryDisturbItem();
  object oCurrentItem;
  object oContenair;
  object oDisturber = GetLastDisturbed();
  int nBaseItemType = GetBaseItemType(oItem);
    switch (nDisturbType)
    {
      case INVENTORY_DISTURB_TYPE_ADDED :
      {
        if(nBaseItemType!=BASE_ITEM_LARGEBOX && !GetIsStackable(nBaseItemType))
        {
          SetLocalInt(OBJECT_SELF, "NbreObj",GetLocalInt(OBJECT_SELF, "NbreObj")+1);
        }
        else
        {
          if (GetIsObjectValid(oDisturber))
          {
            if(GetBaseItemType(oItem)!=BASE_ITEM_LARGEBOX)
            {
                CopyItem(oItem, oDisturber, TRUE);
                DestroyObject(oItem);
            }
            else
            {
                oContenair = CreateItemOnObject(GetResRef(oItem),oDisturber);
                oCurrentItem = GetFirstItemInInventory(oItem);
                while(oCurrentItem!=OBJECT_INVALID)
                {
                    CopyItem(oCurrentItem, oContenair, TRUE);
                    oCurrentItem = GetNextItemInInventory(oItem);
                }
                DestroyObject(oItem);
            }
            if (GetIsPC(oDisturber))
            {
              SendMessageToPC(oDisturber, "");
            }
          }
          else
          {
            DestroyObject(oItem);
          }
        }
      }break;
      case INVENTORY_DISTURB_TYPE_REMOVED :
      case INVENTORY_DISTURB_TYPE_STOLEN :
      {
        SetLocalInt(OBJECT_SELF, "NbreObj",GetLocalInt(OBJECT_SELF, "NbreObj")-1);
      }break;
    }
}

int GetIsStackable(int BASE_ITEM_TYPE)
{
    switch(BASE_ITEM_TYPE)
    {
        case 39:
        case 49:
        case 54:
        case 62:
        case 75:
        case 77:
        case 81:
        case 104:
        case 105:
        case 31:
        case 59:
        case 63:
        case 20:
        case 25:
        case 27:
        case 76:
            return TRUE;
        break;
        default:
            return FALSE;
        break;
    }
    return FALSE;
}
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.


Mais le proble c'est que si ont ajoute un objet dans le cofre et quont déconecte par la suite sans sauvegarder sont perso ont recupère l'anciene sauvegarde mais le cofre lui a garder l'objet ce qui nous fait un objet dans le coffre et un autres dans l'inventaire, vive la duplications Crying or Very sad.

La solutions si vous pouvier m'aider est de vérifier l'inventaire du joueur et celui du coffre si il y a un objet identique il faudrais que le scripte le supprime automatiquement, mais il y a aussi un autres probleme c'est que si ont arrive a cree un t'elle scripte comment ont vas faire pour les potions et parchemins vus quont a souvent des double voir des 10aine?!

Help my please Smile.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger Ignorer l'utilisateur
 
Starkanas
Grand Chevalier
Inscrit le: 14 Mai 2004
Messages: 110
Répondre en citant
Posté le : 12/08/2005 22:44:05 Sujet du message :

Mais si c'est un monde persistant , tu es censé sauvegarder tes personnages non ?
_________________
LSDA 3ème Âge : Serveur RôlePlay basé sur les écrits de J.R.R.Tolkien ...
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur MSN Messenger Ignorer l'utilisateur
 
NEO234
Acolyte
Inscrit le: 03 Aoû 2005
Messages: 30
Localisation: Belgique
Répondre en citant
Posté le : 13/08/2005 00:17:59 Sujet du message :

C'est justement la le probleme, si tu ne sauvegarde pas tu pourait dupliquer t'es objets a volonter vive la triche.

Il faudrais a la conex au serveur une verifications de l'inventaire et du coffre via justement la variable du cofre et en cas d'objet identique au coffre une supressiont de l'objet imédia dans le cofre celement vus que le serveur grde les objet en mémoire donc plus de triche.

Quelqu(un a une idées a ajouter au scripte? Smile
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger Ignorer l'utilisateur
 
darkheaven
Acolyte
Inscrit le: 21 Aoû 2004
Messages: 35
Localisation: nevers
Répondre en citant
Posté le : 13/08/2005 09:34:02 Sujet du message :

sur un monde persistant si je ne dis pas de betise , le fait de se deconnecter creer une sauvegarde du pj sur le vault du serveur donc pas de probleme non?
je ne suis pas tres douer en script mais dans le onclientleave du module tu dois pouvoir mettre un script creant une sauvegarde du perso a chaque deco.
voila ^^
_________________
La vie n'est qu'une plume que le destin balade au grés du vent...
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
NEO234
Acolyte
Inscrit le: 03 Aoû 2005
Messages: 30
Localisation: Belgique
Répondre en citant
Posté le : 13/08/2005 11:47:24 Sujet du message :

C'est justement pour sa que je demande un scripte mais bon Laughing lol, mais j'aimerais que la sauvegarde des perso sont gérer par le joueur et non par le serveur donc il me faudrais un scripte comme l'explications si dessus.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger Ignorer l'utilisateur
 
arknax
Ecuyer
Inscrit le: 15 Mai 2005
Messages: 56
Répondre en citant
Posté le : 13/08/2005 14:15:33 Sujet du message :

Premièrement, la seule façon que tes items se dupliquent est lorsque le serveur plante et que le serveur n'ait pas réussit à sauvegarder le joueur...

Enfin, pour te donner le sourire, je te propose un script fait maison : Il permet de sauvegarder le personnage serveur lors de la fermeture du coffre. Very Happy
NWScript :
//:Confused///////////////////////// /////////////////////
//:: Contenants persistants(version banque)
//:: Sauvegarde du contenu(a placer dans le onclose du contenant)
//:: Copyright (c) 2001 Bioware Corp.
//:Confused///////////////////////// ////////////////////
/*

*/

//:Confused///////////////////////// ////////////////////
//:: Created By: Anthraxcite
//:: Created On: 24 Jun 2004
//:Confused///////////////////////// ////////////////////
void main()
{
object oPC = GetLastClosedBy();
string sDB = "Contenance_persistante";
string sTag = GetTag(OBJECT_SELF);
int i = 0;
object oItem = GetFirstItemInInventory();
while(oItem!=OBJECT_INVALID)
{
StoreCampaignObject(sDB,sTag+"_o"+IntToString(i),oItem,oPC);
DestroyObject(oItem);
oItem = GetNextItemInInventory();
i++;
}
SetCampaignInt(sDB,sTag+"_NbreObj",i,oPC);
ExportSingleCharacter(oPC);
}
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.


J'ai ajouté comme tu as peut-être pu le constater, la commande ExportSingleCharacter();.
Avec ceci, ton problème devrait être réglé.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
NEO234
Acolyte
Inscrit le: 03 Aoû 2005
Messages: 30
Localisation: Belgique
Répondre en citant
Posté le : 13/08/2005 14:37:59 Sujet du message :

Merci beaucoup mais, mais la je me retrouve avec des perso dupliquer, Laughing mdrrrrrr.

Bon l'utime solutions et la plus simple c'est qu'a l'ouverture du coffre il y aurait un scan de l'inventaire du joueurs et du contenant si il trouve un objet identique il le suprime du contenant, peut tu me faire un ajout de scripte dans c'est conditions? stp.

je demande juste ça Crying or Very sad adieu la duplications et la triche Smile.

édit: quoique si le perso pose l'objets avant d'ouvrir le coffre ou le passe a quelqu'un autres bon bein une vérifications des objets au sol alort et du joueur. Confused

dsl, mais je crée mon premier mod-MMRPG je suis débutant en scripte mon serveur est a peine crée et sa manque de scripte pour le serveur lui meme, heureusement je suis très bon en décorations Wink.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger Ignorer l'utilisateur
 
arknax
Ecuyer
Inscrit le: 15 Mai 2005
Messages: 56
Répondre en citant
Posté le : 14/08/2005 02:13:00 Sujet du message :

Lol, je comprends que ce ne soit pas la meilleure des choses. Very Happy

Cependant le script que tu me propose ne fera que rajouter des bugs...Et qui dit bugs, dit de nouvelles failles. Mad

À la place il faudrait voir à sauvegarder l'inventaire du joueur à la fermeture du coffre et de vérifier l'inventaire de celui-ci à son retour à la partie. (OnEnter)Je trouve cependant cela intile puisque la triche ne pourrait se produire que lors d'un plantage au niveau du serveur...

Enfin, je vais regarder pour un tel script et je te reviens. Very Happy
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
NEO234
Acolyte
Inscrit le: 03 Aoû 2005
Messages: 30
Localisation: Belgique
Répondre en citant
Posté le : 14/08/2005 08:28:17 Sujet du message :

Ok je t'atend Smile.
_________________
NEO, Le mappeur FOU!!!
Via le monde virtuel(informatique).
Mes maps sur TmX !!
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger Ignorer l'utilisateur
 
arknax
Ecuyer
Inscrit le: 15 Mai 2005
Messages: 56
Répondre en citant
Posté le : 16/08/2005 14:22:06 Sujet du message :

Arf, ça ne pourra pas fonctionner...Sad

La seule solution reste le bootage du joueur à la fermeture du coffre, mais bon...Je pense que c'est mieu de conserver le coffre tel quel étend donné que le duplicage ne pourrait se faire seulement lorsque le serveur planterait...
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
NEO234
Acolyte
Inscrit le: 03 Aoû 2005
Messages: 30
Localisation: Belgique
Répondre en citant
Posté le : 16/08/2005 14:31:43 Sujet du message :

Mouais mais il me faudrais le scriptes du modul alort, et je l'ai pas Sad.
_________________
NEO, Le mappeur FOU!!!
Via le monde virtuel(informatique).
Mes maps sur TmX !!
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger Ignorer l'utilisateur
 
arknax
Ecuyer
Inscrit le: 15 Mai 2005
Messages: 56
Répondre en citant
Posté le : 16/08/2005 15:44:23 Sujet du message :

Le script du module?
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
NEO234
Acolyte
Inscrit le: 03 Aoû 2005
Messages: 30
Localisation: Belgique
Répondre en citant
Posté le : 17/08/2005 00:23:03 Sujet du message :

oui, mais je crois que je vais simplement me contenter d'une simple campagne car c'est déjà asser compliquer avec les scriptes lol.
_________________
NEO, Le mappeur FOU!!!
Via le monde virtuel(informatique).
Mes maps sur TmX !!
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger Ignorer l'utilisateur
 
Arkain
Voyageur
Inscrit le: 19 Jan 2006
Messages: 3
Localisation: --
Répondre en citant
Posté le : 24/01/2007 19:24:29 Sujet du message :

Bonjour !

J'ai utiliser ton script pour un coffre et j'ai trouver une parade contre la duplication. J'ai penser donner un nom spécial aux objets puissants (puisque mon serveur fait restriction d'arme). J'aurais besoin de votre aide pour integrer un autre script qui détruirai automatiquement les armes portant le même nom ou tag. Merci

Arkain
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Adresse AIM Yahoo Messenger 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 53.259ms