La Bibliothèque de Neverwinter Nights
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
La date/heure actuelle est 22/09/2024 00:16:01


  Page 1 sur 1 ¤

Voir le sujet précédent ¤ Voir le sujet suivant 
Auteur Message
Shishio-Erehiko
Novice
Inscrit le: 16 Aoû 2004
Messages: 7
Répondre en citant
Posté le : 27/03/2005 22:15:51 Sujet du message : Coffre a drops aléatoires

Bonjour,
après une longue recherche sur le forum script j'ai pas trouvé mon bonheur a part ce script ci dessous.
Il répond parfaitement a ce que j'ai besoin, cad :
-Respawn apres un certain temps
-% de change par objet


NWScript :
//::////////////////////////// /////////////////////
//:: OnOpenCoffre
//:: Copyright (c) 2001 Bioware Corp.
//::////////////////////////// ////////////////////
/*
Ce script permet de faire respawn les items d'un
coffre avec une probabilite.
Pour l'utiliser :
Le coffre doit avoir un tag de la forme "X_ce que vous voulez"
avec pour X l'intervalle de temps en seconde entre
2 respawns. Puis il faut placer dedans
les items qui doivent respawn, avec un tag de la forme
"n_resref" ou "n" est le pourcentage de chance que l'item
apparaisse et "resref" le resref de l'item en question.
*/

//::////////////////////////// ////////////////////
//:: Created By: Tahlion, beta et modifs par Mercius
//:: Created On: 12/05/2003 18:36
//::////////////////////////// ////////////////////
void main()
{
    int iNbItem = GetLocalInt(OBJECT_SELF,"nombre_item");

    if(iNbItem == 0)
    {
        object oItem = GetFirstItemInInventory(OBJECT_SELF);
        int i = 0;
        while(GetIsObjectValid(oItem))//boucle...
        {
            i++;
            string sTagProba = GetTag(oItem);
            //on prend la partie droite de l'item, donc le resref
            SetLocalString(OBJECT_SELF,"item" + IntToString(i), GetStringRight(sTagProba, GetStringLength(sTagProba) - 1 - FindSubString(sTagProba,"_")));
            //on prend la partie gauche, donc le pourcentage de chance d'apparition de l'item
            SetLocalInt(OBJECT_SELF,"proba" +IntToString(i), StringToInt(GetStringLeft(sTagProba, FindSubString(sTagProba,"_"))));

            //on detruit l'item
            DestroyObject(oItem);
            oItem = GetNextItemInInventory(OBJECT_SELF);
        }
        SetLocalInt(OBJECT_SELF,"nombre_item",i);
        SetLocalInt(OBJECT_SELF,"okgenere",1);//on peut generer les items maintenant
        iNbItem = i;
    }

    if(iNbItem > 0 && GetLocalInt(OBJECT_SELF,"okgenere") == 1)//si la boucle ci-dessus a ete faite
    {
        int i;
        for(i = 1; i <= iNbItem; i++)
        {
            //si l'item n'existe pas deja dans le coffre
            if(!GetIsObjectValid(GetItemPossessedBy(OBJECT_SELF, GetLocalString(OBJECT_SELF, "item" + IntToString(i)))))
            {
                //on calcul avec le pourcentage, pour savoir si l'item doit apparaitre ou pas
                if(d100() <= GetLocalInt(OBJECT_SELF,"proba" + IntToString(i)))
                {
                    //on cree l'item
                    CreateItemOnObject(GetLocalString(OBJECT_SELF,"item" + IntToString(i)));
                }
            }
        }
        SetLocalInt(OBJECT_SELF, "okgenere", 0);
        string sTagSelf = GetTag(OBJECT_SELF);
        DelayCommand(StringToFloat(GetStringLeft(sTagSelf, FindSubString(sTagSelf,"_"))), SetLocalInt(OBJECT_SELF, "okgenere", 1));
    }
}

////////////////////////////// ////////////////////////////// ///////////////////
////////////////////////////// ////////////////////////////// ///////////////////
////////////////////////////// ////////////////////////////// ///////////////////
/*Si votre coffre est en "intrigue", ignorer le script ci-dessous. Si votre coffre n'est pas en intrigue placer ce script sur le OnDamage du coffre. Ce code sert a ce que le coffre ne drop pas tout les items qu'il a dans sont iventaire*/

//onDamaged d'un coffre
void main()
{
  int iNbItem = GetLocalInt(OBJECT_SELF,"nombre_item");

  if(iNbItem == 0)
  {
      object oItem = GetFirstItemInInventory(OBJECT_SELF);
      int i = 0;
      while(GetIsObjectValid(oItem))//boucle...
      {
          i++;
          string sTagProba = GetTag(oItem);
          //on prend la partie droite de l'item, donc le resref
          SetLocalString(OBJECT_SELF,"item" + IntToString(i), GetStringRight(sTagProba, GetStringLength(sTagProba) - 1 - FindSubString(sTagProba,"_")));
          //on prend la partie gauche, donc le pourcentage de chance d'apparition de l'item
          SetLocalInt(OBJECT_SELF,"proba" +IntToString(i), StringToInt(GetStringLeft(sTagProba, FindSubString(sTagProba,"_"))));

          //on detruit l'item
          DestroyObject(oItem);
          oItem = GetNextItemInInventory(OBJECT_SELF);
      }
      SetLocalInt(OBJECT_SELF,"nombre_item",i);
      SetLocalInt(OBJECT_SELF,"okgenere",1);//on peut generer les items maintenant
      iNbItem = i;
  }
}

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 voila il a des défauts et je ne sais d'ou ca vient.

D'abord le % de chance de drop. n_resref => "n" faut metre une valeur absolue ?
pour faire 1% faut metre 1_resef ? ou 01_resref ? ou 001_resref ?
Alors j'ai testé avec 50, 30, 20, 10, 5, 1 : 50_resref et 050_resref et pour les autres valeurs.
REsultat du test : j'ai toujours eu les items avec 50_resref ou 1_resref ainsi que 050_resref et 001_resref.

Je me suis dis que ce jour la je debvais etre tres chanceux (je suis parti jouer au loto apres) donc j'ai recommencé plusieurs fois le test et j'avais toujours cette chance ...

A mon avis c'est un bug ...

Et pour un somme d'or aléatoire, je fais comment ? JE voudrais uen fourchette entre 100po et 1000po.

Help a corriger ou bien a trouver un au script repondant au critère au debut s'il vous plait.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Shishio-Erehiko
Novice
Inscrit le: 16 Aoû 2004
Messages: 7
Répondre en citant
Posté le : 03/04/2005 17:13:46 Sujet du message :

Personne peut m'aider svp ?
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Siléphrael
Grand Chevalier
Inscrit le: 13 Aoû 2004
Messages: 122
Localisation: Toulouse
Répondre en citant
Posté le : 03/04/2005 19:36:46 Sujet du message :

tu pourrai pas faire un item genre boite avec une somme d'argent dedans ? tu en fais 2 ou 3 et tu leur colle un pourventage différent ...
_________________
* Tenant sous sa lame le jeune prince * Je vais compter jusqu'a trois et tu mourra .... * lui tranche la gorge * mince, j'ai oublié de compter ...
 
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 55.926ms