JeuxOnLineForumsPlusConnectés : 744 (sites) | 1443 (forums)Créer un compte
Forum jeux-vidéo>Neverwinter Nights
Maskado
Les forums JOL > Forum jeux-vidéo > Neverwinter Nights > NWN - Maskado > Une clef multiserrure (avec plusieurs tags de serrure) RSS
   
Répondre
Partager Outils Rechercher
Avatar de Damonya
Damonya
Dauphin
 
Avatar de Damonya
 

Une clef multiserrure (avec plusieurs tags de serrure)

Bonjour à tous^^, voila je rencontre un petit problème au niveau des serrures.

Je compte réaliser une hiérarchie par exemple dans une guilde (voleur, assassin, maître assassin...). Ensuite à chacune de ces étapes, un objet diffèrent est donné (clef par ex), qui permet de passer par des portes. Ca pose pas de problème à première vue ce que je veux dire, car pour le niveau voleur une clef 1, un tag de serrure A. Niveau assassin, une clef 2, un tag de serrure B. Niveau Maitre assassin, une clef 3, un tag de serrure C. Mais en sachant que le Maitre Assassin ne dispose que de la clef 3 (pas celle de niv 1, ni de 2), il ne pourra ouvrir donc que les serrures C. Pas les B et les A. Ce que je veux c'est que la clef 1 est un tag de serrure A, la clef 2, un tag de serrure B, mais aussi A. La clef 3, un tag de serrure C, B et A.

Il me faudrait donc pour la clef 2 et la clef 3, plusieurs tags de serrures inclut dedans. Je me doute qu'il doit y a voir un script possible à mettre dans la clef, mais hélas je ne sais pas comment je pourrais faire. Des idées ?
Lien direct vers le message - Vieux
Avatar de Tyrion
Tyrion
Roi
 
Avatar de Tyrion
 
Dans la clef ce n'est pas possible mais sur les portes oui

*a deja vu une question comme ca quelque part *
Lien direct vers le message - Vieux
Avatar de Tyrion
Tyrion
Roi
 
Avatar de Tyrion
 
Code PHP:
// Sur le OnFailToOpen de la porte qui peu etre ouvert par les 3 niveau de clef
void main()
{
object oPJ GetClickingObject();
object oSelf OBJECT_SELF;
string sClef1 "Tag Clef A";
string sClef2 "Tag Clef B";
string sClef3 "Tag Clef C";

if((
GetItemPossessedBy(oPJ,sClef1)!= OBJECT_INVALID)
 ||(
GetItemPossessedBy(oPJ,sClef2)!= OBJECT_INVALID)
 ||(
GetItemPossessedBy(oPJ,sClef3)!= OBJECT_INVALID))
    {
    
SetLocked(oSelf,FALSE);
    
AssignCommand(oSelf,ActionOpenDoor(oSelf));
    
DelayCommand(10.0,AssignCommand(oSelf,ActionCloseDoor(oSelf)));
    
DelayCommand(10.0,SetLocked(oSelf,TRUE));
    }

Lien direct vers le message - Vieux
Avatar de Damonya
Damonya
Dauphin
 
Avatar de Damonya
 
Code PHP:
*a deja vu une question comme ca quelque part  
Ah bon !
Hum oui t'as raison
J'vais pas tout te redire alors, car je te fais faire du boulot en double

Ah si quand même, j'allais oublié l'essentiel Tyrion

MERCI Beaucoup Beaucoup^^

Et c'est pas des paroles en l'air
Lien direct vers le message - Vieux
Avatar de Zunzun
Zunzun
Alpha & Oméga
 
Avatar de Zunzun
 
Moui j'aurais plutot fait un truc avec un tag genre nomdulieuxxxxx, ou les xp auraient pris la valeur 0 ou 1 suivant que la clé pouvait ouvrir telle ou telle porte. C'est a mon avis plus évolutif si on souhaite rajouter des niveaux d'accès, ca permet de ne pas avoir a modifier les scripts.

La clé de niveau 1 aurait par exemple comme tag guildevoleur100, celle de niveau 2 guildevoleur110 et celle de niveau 3 guildevoleur111, ensuite on joue avec les GetStringLeft.
Lien direct vers le message - Vieux
Avatar de Tyrion
Tyrion
Roi
 
Avatar de Tyrion
 
Citation:
Provient du message de Zunder
Moui j'aurais plutot fait un truc avec un tag genre nomdulieuxxxxx, ou les xp auraient pris la valeur 0 ou 1 suivant que la clé pouvait ouvrir telle ou telle porte. C'est a mon avis plus évolutif si on souhaite rajouter des niveaux d'accès, ca permet de ne pas avoir a modifier les scripts.

La clé de niveau 1 aurait par exemple comme tag guildevoleur100, celle de niveau 2 guildevoleur110 et celle de niveau 3 guildevoleur111, ensuite on joue avec les GetStringLeft.
Je me suis pas amusé a faire ceci j'y avais pensé mais je me suis dis "Hum... Faire plus simple ce serais quand même plus facile a comprendre pour les debutant "
Lien direct vers le message - Vieux
Avatar de Damonya
Damonya
Dauphin
 
Avatar de Damonya
 
J' en demande peut être un peu trop, mais a quoi ressemblerais le deuxième script, en supposant que je sois capable de le comprendre et de l'appliquer (simple supposition bien sûr)
Lien direct vers le message - Vieux
Avatar de Tyrion
Tyrion
Roi
 
Avatar de Tyrion
 
C'est en maniant le tag de la clef avec ca

Code PHP:
string sPorte,sClef;
string sLeft GetStringLeft(sPorteFindSubString(sPorte,"_"));
string sRight GetStringRight(sClefFindSubString(sClef,"_")); 
pas le temps de faire le script je suis assez occupe en ce moment
Lien direct vers le message - Vieux
Avatar de Damonya
Damonya
Dauphin
 
Avatar de Damonya
 
Pas de problème Tyrion

Je vais essayer de voir les fonctions que tu m'as mis, mais je promet rien, car je suis une quiche en script, mais ça tu le sais déjà

Et je sais que si t'as pas le temps, c'est parce que tu nous pond une fois de plus une autre jolie petite merveille de script^^ ^^
Lien direct vers le message - Vieux
Avatar de aldech
aldech
Dauphin
 
Avatar de aldech
 
Post
Basé sur les idées de Tyrion et Zunder, cela pourrait donné ceci :

3 Portes :

Porte guilde voleurs, en intrigue (plot), verrouillé (locked) et tag : DOOR_100

Porte guilde assassins, en intrigue (plot), verrouillé (locked) et tag : DOOR_110

Porte guilde maître assassins, en intrigue (plot), verrouillé (locked) et tag : DOOR_111

3 Clefs :

Clef voleur, tag : CLE_100
Clef assassin, tag : CLE_110
Clef maitre assassin, tag : CLE_111

Script :
Code PHP:

// a mettre dans OnFailToOpen de chacune des portes

void OpenGuilde()
{
    
SetLocked(OBJECT_SELF,FALSE);

    
AssignCommand(OBJECT_SELF,ActionOpenDoor(OBJECT_SELF));

    
DelayCommand(10.0,AssignCommand(OBJECT_SELF,ActionCloseDoor(OBJECT_SELF)));

    
DelayCommand(10.0,SetLocked(OBJECT_SELF,TRUE));
}

void main()
{
  
object oPC GetClickingObject();
  
string sDoor GetTag(OBJECT_SELF);
  
string sKey GetStringRight(sDoorFindSubString(sDoor,"_") - 1); // on recupere dans le tag de la porte ce qu'il y a apres le DOOR_


    
if(GetItemPossessedBy(oPC,"cle_100") != OBJECT_INVALID)
    {
        if (
sKey == "100")
            
OpenGuilde();
    }

    if(
GetItemPossessedBy(oPC,"cle_110") != OBJECT_INVALID)
    {
        if ((
sKey == "100") || (sKey == "110"))
            
OpenGuilde();
    }

    if(
GetItemPossessedBy(oPC,"cle_111") != OBJECT_INVALID)
    {
        if ((
sKey == "100") || (sKey == "110") || (sKey == "111"))
            
OpenGuilde();
    }


Autre version que j'avais faite mais qui ne marche pas
plus intéressante à mon avis :

Code PHP:
void OpenGuilde()
{
    
SetLocked(OBJECT_SELF,FALSE);

    
AssignCommand(OBJECT_SELF,ActionOpenDoor(OBJECT_SELF));

    
DelayCommand(10.0,AssignCommand(OBJECT_SELF,ActionCloseDoor(OBJECT_SELF)));

    
DelayCommand(10.0,SetLocked(OBJECT_SELF,TRUE));
}

void main()
{
  
object oPC GetClickingObject();
  
string sDoor GetTag(OBJECT_SELF);
  
string sKey GetStringRight(sDoorFindSubString(sDoor,"_") - 1); // on recupere dans le tag de la porte ce qu'il y a apres le DOOR_

  
object firstItem GetFirstItemInInventory(oPC);
  
object currentItem firstItem;

   
    if(
GetIsObjectValid(currentItem)) // Au moins un objet dans l'inventaire
    
{
        do
        {
          
string sItem GetTag(currentItem);  // on recupere le tag de l'item
          
string s1 GetStringLeft(sItem4); // on obtient les 4 premiers caracteres du tag sItem
          
if(s1 == "CLE_")  // si cela correspond a un item avec un tag commencant par CLE_
            
{
                
string s2 GetStringRight(sItemFindSubString(sItem,"_") - 1);  // on recupere ce qu'il y a apres CLE_ dans le tag sItem

                
if ((s2 == "100") && (sKey == "100"))
                    
OpenGuilde();

                if ((
s2 == "110") && ((sKey == "100") || (sKey == "110")))
                    
OpenGuilde();

                if ((
s2 == "111") && ((sKey == "100") || (sKey == "110") || (sKey == "111")))
                    
OpenGuilde();

                break; 
//on sort de la boucle puisque la clef a ete trouve
            
}
            
// Passage a l'item suivant
            
currentItem GetNextItemInInventory(oPC);
        
// on boucle tant qu'il y a des items dans l'inventaire
        
}while(GetIsObjectValid(currentItem));
     }

    else
    {
        
SpeakString"Vous avez besoin d'une cle...");
    }

Lien direct vers le message - Vieux
Avatar de Damonya
Damonya
Dauphin
 
Avatar de Damonya
 
oUAH Génial^^
J'avoue j'avais pas encore commencé à me prendre la tête dessus que déjà voila une réponse à mon problème. Merci les gars
C'est vrais que cette méthode me plais d'autant mieux que je ne possède pas que trois ordres, et que je n'ai pas qu'une guilde. C'etait pour l'exemple. Je comptais utilisé ce système pour d'autres applications en plus. Et avec tout ces tags j'aurais fini pas faire une overdose je crois
A trois, vous avez comblé mes lacunes, je vous en suis infiniment reconnaissant.

C'est coOOol

Hélas je peux pas vraiment t'aider pour ton deuxième script, mais compétences étant... quelque peu ... limité
Lien direct vers le message - Vieux
Avatar de Tyrion
Tyrion
Roi
 
Avatar de Tyrion
 
Pour ton deuxieme script ben en fait je ne comprend pas tres bien tu sais qu'un while est pour une bou, et un do aussi ?

parce que la ligne while ... ne sert a rien ici

Voila qui devrais aller uun peu mieux (je n'est pas tout verifié)

Code PHP:
void OpenGuilde()
{
    
SetLocked(OBJECT_SELF,FALSE);

    
AssignCommand(OBJECT_SELF,ActionOpenDoor(OBJECT_SELF));

    
DelayCommand(10.0,AssignCommand(OBJECT_SELF,ActionCloseDoor(OBJECT_SELF)));

    
DelayCommand(10.0,SetLocked(OBJECT_SELF,TRUE));
}

void main()
{
  
object oPC GetClickingObject();
  
string sDoor GetTag(OBJECT_SELF);
  
string sKey GetStringRight(sDoorFindSubString(sDoor,"_") - 1); // on recupere dans le tag de la porte ce qu'il y a apres le DOOR_

  
object firstItem GetFirstItemInInventory(oPC);

  while(
GetIsObjectValid(firstItem))
    {
          
string sItem GetTag(firstItem);  // on recupere le tag de l'item
          
string s1 GetStringLeft(sItem4); // on obtient les 4 premiers caracteres du tag sItem
          
if(s1 == "CLE_")  // si cela correspond a un item avec un tag commencant par CLE_
            
{
                
string s2 GetStringRight(sItemFindSubString(sItem,"_") - 1);  // on recupere ce qu'il y a apres CLE_ dans le tag sItem

                
if ((s2 == "100") && (sKey == "100"))
                    
OpenGuilde();

                else if ((
s2 == "110") && ((sKey == "100") || (sKey == "110")))
                    
OpenGuilde();

                else if ((
s2 == "111") && ((sKey == "100") || (sKey == "110") || (sKey == "111")))
                    
OpenGuilde();

                break; 
//on sort de la boucle puisque la clef a ete trouve
            
}
            
// Passage a l'item suivant
            
firstItem GetNextItemInInventory(oPC);
    }

Lien direct vers le message - Vieux
Avatar de aldech
aldech
Dauphin
 
Avatar de aldech
 
Post
J'ai fait un Tutorial sur les scripts, extrait :

do instructions while ( condition );

Dans ce type de boucle, le code est d'abord exécuté (même si la condition est fausse) et la condition est ensuite vérifiée.

-----------------------

J'ai essayé ton script, cela ne marche pas non plus
je ne comprends pas pourquoi
Lien direct vers le message - Vieux
Avatar de Damonya
Damonya
Dauphin
 
Avatar de Damonya
 
Apparement vous êtes pas d'accord sur le While. J'peux pas vous aider. Moi j'voulais juste savoir ce qu'apportais de plus ton deuxième script par rapport au premier ?

J'vois bien qu'ils se ressemblent pas complètement, mais concrètement je vois pas trop
Lien direct vers le message - Vieux
Avatar de aldech
aldech
Dauphin
 
Avatar de aldech
 
Post
Mon but :

Dans le premier, on a dans le script en dur le nom de la clé avec des instructions du type :
Code PHP:
GetItemPossessedBy(oPC,"cle_110"
Dans le deuxieme, je voulais faire un truc plus évolué, en scrutant l'inventaire pour chercher si des objets de tag commençant par CLE_ s'y trouve.
Lien direct vers le message - Vieux
Répondre
Les forums JOL > Forum jeux-vidéo > Neverwinter Nights > NWN - Maskado > Une clef multiserrure (avec plusieurs tags de serrure)
   

Outils Rechercher
Rechercher:

Recherche avancée

Les vidéos de Neverwinter Nights RSS
  • Aucune vidéo pour le moment...
Thème visuel : Fuseau horaire GMT +1. Il est actuellement 23h04.
   

© JeuxOnLine, le site des MMO, MMORPG et MOBA. Tous droits réservés. - Conditions générales d'utilisation - Conditions d'utilisation des forums - Traitement des données personnelles - ! Signaler un contenu illicite