[probleme] : coffre

Répondre
Partager Rechercher
le script qui suit marche parfaitement et permet de "recrée" un trésort dans un coffre ( aléatoirement ).

le script est a placé sur le OnOpen

Code PHP:


//-----------------------------------------------------------------//
#include "NW_O2_CONINCLUDE"

void main()

{
    
object oItem OBJECT_INVALID;
    
int respawntime 3// temps de respawn

    
    
int lastopened GetLocalInt(OBJECT_SELF,"CS_Opened");
    
    
int currenttime GetTimeSecond()+60*GetTimeMinute()+30*GetTimeHour();
    if (
currenttime lastopened respawntime)
    {
        
        
DeleteLocalInt(OBJECT_SELF,"NW_DO_ONCE");
    }
     if (
lastopened currenttime)
    {
        
        
DeleteLocalInt(OBJECT_SELF,"NW_DO_ONCE");
    }

    
    if (
GetLocalInt(OBJECT_SELF,"NW_DO_ONCE") == 0)
    {
      
oItem GetFirstItemInInventory();
      while ( 
oItem != OBJECT_INVALID )
      {
         
DestroyObjectoItem0.0 );
         
oItem GetNextItemInInventory();
      }
      
object oLastOpener GetLastOpener();
      
// le trésort généré dépent du level de "l'ouvreur"
      
GenerateHighTreasure(oLastOpenerOBJECT_SELF);
      
SetLocalInt(OBJECT_SELF,"CS_Opened",currenttime);
      
SetLocalInt(OBJECT_SELF,"NW_DO_ONCE",1);
    }

aucun probleme sur se script.

j'aimerais faire en sorte que dans le container il ne puisse pas avoir certain item.

( pas d'armure , pas d'anneaux , pas de bottes , pas de bouclier, pas de bracelet )

j'ai penser que la solution se trouvé dans se script :
"NW_O2_CONINCLUDE"

il est tres long alors je peu pas le metre ici ( )

et il faut le modifier pour personaliser le contenu des coffres.
apres de multiple essaie , je nai reusit a le modifier completement , donc je viends vous demandez un peu d'aide ^^

Si non , il faudrais un script pour régénérer a l'iddentique le contenue d'un coffre.

( mais cela , engendre les blems de non diversité ... )
Je n'ai pas vu dans les persistants de script

jai trouvé sa , mais sa correspond pas: https://archives.jeuxonline.info/fils/132214.html

si tu parle de sa :
https://archives.jeuxonline.info/fils/127562.html
sa ne fait pas intervenir les .D2A

les liens vers les banques de script ne fonctione plus

je n'ai pas vu dans les HP , et pour de toute facon je ne peu pas en avoir,

( du moins tant que jai pas de serveur je prefere ne pas en avoir ^^ )

donc passé par un hack pack, je ne peu pas l'envisagé
Tu peux toujours créer un coffre dans un zone non accessible aux joueurs et a chaque fois qu'un coffre s'ouvre tu choisis un objet au hasard dans le coffre inaccessible. Tu copies cet objets dans le coffre et c'est bon. Comme ça tu peux facilement modifier les objets qui sont obtenus en ouvrant des coffres même pendant que le module est en fonctionnement, il suffit d'être DM et donc de pouvoir accéder au coffre qui sert a stocker les trésors possible. Tu peux ensuite raffiner le mécanisme en ayant différentes familles de coffres en gérant le tout a partir des tag des coffres.
sa a l'air super sa !!!

ils se servent de sa dans la campagne de base ?
si non tu aurais plus de renseignement ?

sa pourais vraiment m'arranger
Je penses que quelque chose comme ça devrait suffire.

Code PHP:

// Je suppose que ce script se place dans le onOpen du placeable. 
// le tag du placeable est : XXXXX
// le tag du coffre dans lequel sera pris les items est : trésor_XXXXX

void main () {
    
object oCoffre OBJECT_SELF;
    
object oTresor GetObjectByTag("tresor_" GetTag(oCoffre));
    if (
GetIsObjectValid(oTresor) && GetHasInventory(oTresor)) {
       
//Compter le nombre d'objet dans le coffre (a optimiser pour ne pas le recompter a chaque fois 
       
object oItem GetFirstItemInInventory(oTresor);
       
int iCount 0;
       while(
GetIsObjectValid(oItem)) {
          
iCount++;
          
oItem GetNextItemInInventory(oTresor);
       }
        
// On en choisi un item au hasard 
        
if (iCount 0) {
            
int index Random(iCount);
            
int i 0;
            
oItem GetFirstItemInInventory(oTresor);
            for ( ; 
index ; ++i) {
                
oItem GetNextItemInInventory(oTresor);
            }
            
// On le copie et c'est bon. 
            
CopyItem(oITemoCoffre1);
        }
    }

Il y a sûrement une ou deux fautes de syntaxe et il faut aussi conserver en variable local le nombre d'objet dans le coffre "tresor" pour éviter de le recalculer a chaque fois.
ouai , mais la a chaque fois que tu ouvre le coffre il y a qq chose dedans : /

de plus , ( a moins que jai fait une mauvaise manip ) , il faut que le coffre tresort_xxxx se trouve dans la zone , donc , a faire dans toute les zones : /

je vais voir dans le module de SoU , pet un début de piste ..
Pour ce qui est de faire que la génération d'item ne soit pas systématique, c'est a toi de modifier le script précèdent pour qu'il fasse exactement ce que tu veux. Je penses qu'un nouveau random avec comme paramètre la fréquence de création devrait suffire a limiter le nombre de création d'item. Tu peux aussi faire un test en fonction du nombre d'item dans le coffre qui vient de se faire ouvrir pour s'assurer que ce soit pas une caverne aux trésors.



PS: j'ai un clavier qwerty donc désolé si il manque des accents important.
oui
Citation :
ils se servent de sa dans la campagne de base ?
Tout à fait.
Tu trouves ça par exemple dans le chapitre 1 de SoU avec une zone contenant les contenants (tiens rigolo ça): "Z_Zone de contrôle trésors aléatoires du module"

Les fonctions associées de générations de trésors sont dans le fichier: x0_i0_treasure

C'est exactement le même principe que celui exposé par Dalfy mais en plus complet(xe)
Pour une partie , je pense ( pas pu tester ) qu'il suffit "d'implanter" mon code précédent, vu que ce n'est pas les meme variables , se qui donerais :


Code PHP:


void main 
()

{
    
object oItem OBJECT_INVALID;
    
int respawntime 3// temps de respawn

    
    
int lastopened GetLocalInt(OBJECT_SELF,"CS_Opened");
    
    
int currenttime GetTimeSecond()+60*GetTimeMinute()+30*GetTimeHour();
    if (
currenttime lastopened respawntime)
    {
        
        
DeleteLocalInt(OBJECT_SELF,"NW_DO_ONCE");
    }
     if (
lastopened currenttime)
    {
        
        
DeleteLocalInt(OBJECT_SELF,"NW_DO_ONCE");
    }

    
    if (
GetLocalInt(OBJECT_SELF,"NW_DO_ONCE") == 0)
    {
      
oItem GetFirstItemInInventory();
      while ( 
oItem != OBJECT_INVALID )
      {
         
DestroyObjectoItem0.0 );
         
oItem GetNextItemInInventory();
      }
{
    
object oCoffre OBJECT_SELF;
    
object oTresor GetObjectByTag("tresor_" GetTag(oCoffre));
    if (
GetIsObjectValid(oTresor) && GetHasInventory(oTresor)) {
       
//Compter le nombre d'objet dans le coffre (a optimiser pour ne pas le recompter a chaque fois 
       
object oItem GetFirstItemInInventory(oTresor);
       
int iCount 0;
       while(
GetIsObjectValid(oItem)) {
          
iCount++;
          
oItem GetNextItemInInventory(oTresor);
       }
        
// On en choisi un item au hasard 
        
if (iCount 0) {
            
int index Random(iCount);
            
int i 0;
            
oItem GetFirstItemInInventory(oTresor);
            for ( ; 
index ; ++i) {
                
oItem GetNextItemInInventory(oTresor);
            }
            
// On le copie et c'est bon. 
            
CopyItem(oITemoCoffre1);
        }
    }
}
      
}

bonne voie ou hérésie ?
Tu peux encadrer le code de la façon suivante pour gérer un timer de respawn :
Code PHP:

object oCoffre OBJECT_SELF;
object oTresor GetObjectByTag("trèsor_" GetTag(oCoffre));
float tempsEntreDeuxSpawn 3000.0 // Toutes les 50 minutes 
if (GetLocalInt(oCoffre"TRESOR") == FALSE) {
  
//Creer un objet comme avant (le meme code exactement 
  
  //En gros apres le CopyItem 
  
SetLocalInt(oCoffre"TRESOR"TRUE); // Interdit le spawn 
  
DelayCommand(tempsEntreDeuxSpawnSetLocalInt(oCoffre"TRESOR"FALSE); // Authorise le spawn apres un certain delai. 

Je penses que ca marche bien est reste très simple a écrire, régler, modifier.
je vais essayer de prendre le script de SoU ; qui a l'air pas mal, sa me permetrais enfin de maitrisser a 100 % tout se qui est drop / coffre

donc je vais essayer de comprendre avec l'aide de moon.
Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés